From 5e31a34cda8b0f20bfa5eaf23fbf6653975580d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:58:28 +0200 Subject: [PATCH 01/24] chore(workspace): add ogl dependencies for canvas components --- apps/web/package.json | 7 ++++--- bun.lock | 5 ++++- packages/motion-core/package.json | 12 +++++++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 68b30c0..5af1882 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -54,17 +54,18 @@ }, "type": "module", "dependencies": { + "@fontsource/inter": "^5.2.8", "@mediapipe/tasks-vision": "^0.10.22-rc.20250304", + "@takumi-rs/image-response": "1.0.0-rc.12", "@threlte/core": "^8.3.1", "@threlte/extras": "^9.7.1", - "@fontsource/inter": "^5.2.8", "carbon-icons-svelte": "^13.9.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "gsap": "^3.14.2", "motion-core": "workspace:*", + "ogl": "^1.0.11", "tailwind-merge": "^3.5.0", - "three": "^0.182.0", - "@takumi-rs/image-response": "1.0.0-rc.12" + "three": "^0.182.0" } } diff --git a/bun.lock b/bun.lock index ea33fdf..3e63815 100644 --- a/bun.lock +++ b/bun.lock @@ -69,7 +69,7 @@ }, "packages/motion-core": { "name": "motion-core", - "version": "0.7.0", + "version": "0.10.0", "dependencies": { "clsx": "^2.1.1", "tailwind-merge": "^3.4.0", @@ -80,6 +80,7 @@ "@threlte/extras": "^9.7.1", "@types/gsap": "^3.0.0", "@types/three": "^0.182.0", + "ogl": "^1.0.11", "tailwindcss": "^4.1.18", "three": "^0.182.0", }, @@ -940,6 +941,8 @@ "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + "ogl": ["ogl@1.0.11", "", {}, "sha512-kUpC154AFfxi16pmZUK4jk3J+8zxwTWGPo03EoYA8QPbzikHoaC82n6pNTbd+oEaJonaE8aPWBlX7ad9zrqLsA=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], diff --git a/packages/motion-core/package.json b/packages/motion-core/package.json index 9359bdb..7afc0de 100644 --- a/packages/motion-core/package.json +++ b/packages/motion-core/package.json @@ -18,16 +18,18 @@ "three": "^0.182.0", "@threlte/core": "^8.0.0", "@threlte/extras": "^9.0.0", - "@mediapipe/tasks-vision": "^0.10.22-rc.20250304" + "@mediapipe/tasks-vision": "^0.10.22-rc.20250304", + "ogl": "^1.0.11" }, "devDependencies": { - "@types/gsap": "^3.0.0", - "@types/three": "^0.182.0", - "three": "^0.182.0", + "@mediapipe/tasks-vision": "^0.10.22-rc.20250304", "@threlte/core": "^8.3.1", "@threlte/extras": "^9.7.1", + "@types/gsap": "^3.0.0", + "@types/three": "^0.182.0", + "ogl": "^1.0.11", "tailwindcss": "^4.1.18", - "@mediapipe/tasks-vision": "^0.10.22-rc.20250304" + "three": "^0.182.0" }, "dependencies": { "clsx": "^2.1.1", From 58379bd4825e2f9e5f4f3f0b0cb9bccf9500f012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:58:35 +0200 Subject: [PATCH 02/24] feat(motion-core): migrate core canvas shader components to ogl --- .../fluid-simulation/FluidSimulation.svelte | 22 +- .../FluidSimulationScene.svelte | 1046 ++++++++++------- .../fluid-simulation/component.json | 7 +- .../glitter-cloth/GlitterCloth.svelte | 26 +- .../glitter-cloth/GlitterClothScene.svelte | 455 +++++-- .../components/glitter-cloth/component.json | 7 +- .../lib/components/god-rays/GodRays.svelte | 40 +- .../components/god-rays/GodRaysScene.svelte | 428 +++++-- .../lib/components/god-rays/component.json | 7 +- .../src/lib/components/halo/Halo.svelte | 26 +- .../src/lib/components/halo/HaloScene.svelte | 474 ++++++-- .../src/lib/components/halo/component.json | 7 +- .../interactive-grid/InteractiveGrid.svelte | 23 +- .../InteractiveGridScene.svelte | 375 ++++-- .../interactive-grid/component.json | 8 +- .../lib/components/lava-lamp/LavaLamp.svelte | 22 +- .../components/lava-lamp/LavaLampScene.svelte | 493 +++++--- .../lib/components/lava-lamp/component.json | 7 +- .../neural-noise/NeuralNoise.svelte | 8 +- .../neural-noise/NeuralNoiseScene.svelte | 225 ++-- .../components/neural-noise/component.json | 7 +- .../components/plasma-grid/PlasmaGrid.svelte | 8 +- .../plasma-grid/PlasmaGridScene.svelte | 300 ++++- .../lib/components/plasma-grid/component.json | 7 +- .../specular-band/SpecularBand.svelte | 22 +- .../specular-band/SpecularBandScene.svelte | 380 ++++-- .../components/specular-band/component.json | 7 +- 27 files changed, 2975 insertions(+), 1462 deletions(-) diff --git a/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulation.svelte b/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulation.svelte index aa9b6b4..ca87d3f 100644 --- a/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulation.svelte +++ b/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulation.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte b/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte index f567333..c25b519 100644 --- a/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte +++ b/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte @@ -1,6 +1,20 @@ - - - - + diff --git a/packages/motion-core/src/lib/components/fluid-simulation/component.json b/packages/motion-core/src/lib/components/fluid-simulation/component.json index bead8b3..ec5a0b2 100644 --- a/packages/motion-core/src/lib/components/fluid-simulation/component.json +++ b/packages/motion-core/src/lib/components/fluid-simulation/component.json @@ -4,12 +4,9 @@ "description": "A physics-based fluid simulation with pointer interaction.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/glitter-cloth/GlitterCloth.svelte b/packages/motion-core/src/lib/components/glitter-cloth/GlitterCloth.svelte index d4bfa64..07c33a6 100644 --- a/packages/motion-core/src/lib/components/glitter-cloth/GlitterCloth.svelte +++ b/packages/motion-core/src/lib/components/glitter-cloth/GlitterCloth.svelte @@ -1,6 +1,4 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte b/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte index 262f11b..b1900e7 100644 --- a/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte +++ b/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte @@ -1,13 +1,28 @@ - - - - { + const targetCanvas = canvas; + if (!targetCanvas) return; + + const renderer = new Renderer({ + canvas: targetCanvas, + alpha: true, + dpr: typeof window !== "undefined" ? window.devicePixelRatio : 1, + }); + const gl = renderer.gl; + gl.clearColor(0, 0, 0, 0); + + const camera = new Camera(gl); + camera.position.z = 1; + + const scene = new Transform(); + const geometry = new Triangle(gl); + + const primarySrgb = toRgb(color, DEFAULT_PRIMARY); + const paletteSrgb = derivePalette(primarySrgb); + const primary = toLinearTriplet(primarySrgb); + const accent = toLinearTriplet(paletteSrgb.accent); + const shadow = toLinearTriplet(paletteSrgb.shadow); + const localUniforms: UniformState = { + uTime: { value: 0 }, + uResolution: { value: new Vec2(1, 1) }, + uPrimaryColor: { value: new Vec3(primary[0], primary[1], primary[2]) }, + uAccentColor: { + value: new Vec3(accent[0], accent[1], accent[2]), + }, + uShadowColor: { + value: new Vec3(shadow[0], shadow[1], shadow[2]), + }, uSpeed: { value: speed }, uBrightness: { value: brightness }, uBlendStrength: { value: blendStrength }, @@ -339,6 +512,60 @@ uVignetteStrength: { value: vignetteStrength }, uVignettePower: { value: vignettePower }, uVignetteOpacity: { value: vignetteOpacity }, - }} - /> - + }; + uniforms = localUniforms; + + const program = new Program(gl, { + vertex: vertexShader, + fragment: fragmentShader, + uniforms: localUniforms, + transparent: true, + depthTest: false, + depthWrite: false, + }); + + const mesh = new Mesh(gl, { geometry, program }); + mesh.setParent(scene); + + const resize = () => { + const host = targetCanvas.parentElement ?? targetCanvas; + const { width: hostWidth, height: hostHeight } = + host.getBoundingClientRect(); + const width = Math.max(1, Math.round(hostWidth)); + const height = Math.max(1, Math.round(hostHeight)); + renderer.setSize(width, height); + localUniforms.uResolution.value.set(width, height); + }; + + resize(); + const observer = new ResizeObserver(resize); + observer.observe(targetCanvas); + if (targetCanvas.parentElement) + observer.observe(targetCanvas.parentElement); + + let raf = 0; + let previous = 0; + const tick = (now: number) => { + const delta = previous ? (now - previous) / 1000 : 0; + previous = now; + localUniforms.uTime.value += delta; + + renderer.render({ scene, camera }); + raf = window.requestAnimationFrame(tick); + }; + + raf = window.requestAnimationFrame(tick); + + return () => { + window.cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + + + diff --git a/packages/motion-core/src/lib/components/glitter-cloth/component.json b/packages/motion-core/src/lib/components/glitter-cloth/component.json index af6d537..017b511 100644 --- a/packages/motion-core/src/lib/components/glitter-cloth/component.json +++ b/packages/motion-core/src/lib/components/glitter-cloth/component.json @@ -4,12 +4,9 @@ "description": "Animated silk-like cloth shader with fine glitter noise and subtle vignette depth shading.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/god-rays/GodRays.svelte b/packages/motion-core/src/lib/components/god-rays/GodRays.svelte index c33e07b..f0576fd 100644 --- a/packages/motion-core/src/lib/components/god-rays/GodRays.svelte +++ b/packages/motion-core/src/lib/components/god-rays/GodRays.svelte @@ -1,6 +1,4 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte b/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte index aee1844..9d7ab08 100644 --- a/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte +++ b/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte @@ -1,18 +1,33 @@ + const renderer = new Renderer({ + canvas: targetCanvas, + alpha: true, + dpr: typeof window !== "undefined" ? window.devicePixelRatio : 1, + }); + const gl = renderer.gl; + gl.clearColor(0, 0, 0, 0); + + const camera = new Camera(gl); + camera.position.z = 1; - - - - + }; + + uniforms = localUniforms; + + const program = new Program(gl, { + vertex: vertexShader, + fragment: fragmentShader, + uniforms: localUniforms, + depthTest: false, + depthWrite: false, + }); + + const mesh = new Mesh(gl, { geometry, program }); + mesh.setParent(scene); + + const resize = () => { + const host = targetCanvas.parentElement ?? targetCanvas; + const { width: hostWidth, height: hostHeight } = + host.getBoundingClientRect(); + const width = Math.max(1, Math.round(hostWidth)); + const height = Math.max(1, Math.round(hostHeight)); + renderer.setSize(width, height); + localUniforms.uResolution.value.set(width, height); + }; + + resize(); + const observer = new ResizeObserver(resize); + observer.observe(targetCanvas); + if (targetCanvas.parentElement) + observer.observe(targetCanvas.parentElement); + + let raf = 0; + let previous = 0; + const tick = (now: number) => { + const delta = previous ? (now - previous) / 1000 : 0; + previous = now; + localUniforms.uTime.value += delta; + renderer.render({ scene, camera }); + raf = window.requestAnimationFrame(tick); + }; + + raf = window.requestAnimationFrame(tick); + + return () => { + window.cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + + + diff --git a/packages/motion-core/src/lib/components/god-rays/component.json b/packages/motion-core/src/lib/components/god-rays/component.json index f42a57e..c7b603e 100644 --- a/packages/motion-core/src/lib/components/god-rays/component.json +++ b/packages/motion-core/src/lib/components/god-rays/component.json @@ -5,12 +5,9 @@ "description": "High-performance procedural god rays (crepuscular rays) effect with customizable colors, pulsating intensity, and distortion.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/halo/Halo.svelte b/packages/motion-core/src/lib/components/halo/Halo.svelte index 22db614..edf582f 100644 --- a/packages/motion-core/src/lib/components/halo/Halo.svelte +++ b/packages/motion-core/src/lib/components/halo/Halo.svelte @@ -1,6 +1,4 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/halo/HaloScene.svelte b/packages/motion-core/src/lib/components/halo/HaloScene.svelte index 34e6aeb..7c79c26 100644 --- a/packages/motion-core/src/lib/components/halo/HaloScene.svelte +++ b/packages/motion-core/src/lib/components/halo/HaloScene.svelte @@ -1,6 +1,21 @@ + const renderer = new Renderer({ + canvas: targetCanvas, + alpha: true, + dpr: typeof window !== "undefined" ? window.devicePixelRatio : 1, + }); + const gl = renderer.gl; + gl.clearColor(0, 0, 0, 0); + + const camera = new Camera(gl); + camera.position.z = 1; - - - - + }; + + uniforms = localUniforms; + + const program = new Program(gl, { + vertex: vertexShader, + fragment: fragmentShader, + uniforms: localUniforms, + depthTest: false, + depthWrite: false, + }); + + const mesh = new Mesh(gl, { geometry, program }); + mesh.setParent(scene); + + const resize = () => { + const host = targetCanvas.parentElement ?? targetCanvas; + const { width: hostWidth, height: hostHeight } = + host.getBoundingClientRect(); + const width = Math.max(1, Math.round(hostWidth)); + const height = Math.max(1, Math.round(hostHeight)); + renderer.setSize(width, height); + localUniforms.uResolution.value.set(width, height); + }; + + resize(); + const observer = new ResizeObserver(resize); + observer.observe(targetCanvas); + if (targetCanvas.parentElement) + observer.observe(targetCanvas.parentElement); + + let raf = 0; + let previous = 0; + const tick = (now: number) => { + const delta = previous ? (now - previous) / 1000 : 0; + previous = now; + localUniforms.uTime.value += delta; + + renderer.render({ scene, camera }); + raf = window.requestAnimationFrame(tick); + }; + + raf = window.requestAnimationFrame(tick); + + return () => { + window.cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + + + diff --git a/packages/motion-core/src/lib/components/halo/component.json b/packages/motion-core/src/lib/components/halo/component.json index f44d8d0..f1e4e80 100644 --- a/packages/motion-core/src/lib/components/halo/component.json +++ b/packages/motion-core/src/lib/components/halo/component.json @@ -5,12 +5,9 @@ "description": "Atmospheric scattering (Rayleigh & Mie) based halo effect with dynamic camera rotation and sun light simulation.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/interactive-grid/InteractiveGrid.svelte b/packages/motion-core/src/lib/components/interactive-grid/InteractiveGrid.svelte index cb916f7..a302b2a 100644 --- a/packages/motion-core/src/lib/components/interactive-grid/InteractiveGrid.svelte +++ b/packages/motion-core/src/lib/components/interactive-grid/InteractiveGrid.svelte @@ -1,5 +1,4 @@ -{#if $texture && dataTexture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/interactive-grid/component.json b/packages/motion-core/src/lib/components/interactive-grid/component.json index c3f46ac..d758e64 100644 --- a/packages/motion-core/src/lib/components/interactive-grid/component.json +++ b/packages/motion-core/src/lib/components/interactive-grid/component.json @@ -4,13 +4,9 @@ "description": "A physics-based grid simulation that distorts an image in response to cursor movement.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte b/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte index 00086a2..5348063 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte +++ b/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte b/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte index 269c415..0ffcfea 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte +++ b/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte @@ -1,6 +1,15 @@ - - - - - { + const targetCanvas = canvas; + if (!targetCanvas) return; + + const renderer = new Renderer({ + canvas: targetCanvas, + alpha: true, + dpr: typeof window !== "undefined" ? window.devicePixelRatio : 1, + }); + const gl = renderer.gl; + gl.clearColor(0, 0, 0, 0); + + const camera = new Camera(gl); + camera.position.z = 1; + + const scene = new Transform(); + const geometry = new Triangle(gl); + + const initialColor = toLinearRgb(color, [24 / 255, 24 / 255, 27 / 255]); + const initialFresnelColor = toLinearRgb(fresnelColor, [1, 105 / 255, 0]); + const localUniforms = { uTime: { value: 0 }, - uResolution: { value: resolutionUniform }, - uColor: { value: colorUniform }, - uFresnelColor: { value: fresnelColorUniform }, + uResolution: { value: new Vec4(1, 1, 1, 1) }, + uColor: { + value: new Vec3(initialColor[0], initialColor[1], initialColor[2]), + }, + uFresnelColor: { + value: new Vec3( + initialFresnelColor[0], + initialFresnelColor[1], + initialFresnelColor[2], + ), + }, uFresnelPower: { value: fresnelPower }, uRadius: { value: radius }, uSmoothness: { value: smoothness }, - }} - transparent - /> - + }; + + uniforms = localUniforms; + + const program = new Program(gl, { + vertex: vertexShader, + fragment: fragmentShader, + uniforms: localUniforms, + transparent: true, + }); + + const mesh = new Mesh(gl, { geometry, program }); + mesh.setParent(scene); + + const updateResolution = () => { + const host = targetCanvas.parentElement ?? targetCanvas; + const { width: hostWidth, height: hostHeight } = + host.getBoundingClientRect(); + const width = Math.max(1, Math.round(hostWidth)); + const height = Math.max(1, Math.round(hostHeight)); + + const imageAspect = 1; + let a1 = 1; + let a2 = 1; + if (height / width > imageAspect) { + a1 = (width / height) * imageAspect; + a2 = 1; + } else { + a1 = 1; + a2 = height / width / imageAspect; + } + + renderer.setSize(width, height); + localUniforms.uResolution.value.set(width, height, a1, a2); + }; + + updateResolution(); + const observer = new ResizeObserver(updateResolution); + observer.observe(targetCanvas); + if (targetCanvas.parentElement) + observer.observe(targetCanvas.parentElement); + + let raf = 0; + let previous = 0; + let time = 0; + const tick = (now: number) => { + const delta = previous ? (now - previous) / 1000 : 0; + previous = now; + time += delta * speed; + localUniforms.uTime.value = time; + + renderer.render({ scene, camera }); + raf = window.requestAnimationFrame(tick); + }; + + raf = window.requestAnimationFrame(tick); + + return () => { + window.cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + + + diff --git a/packages/motion-core/src/lib/components/lava-lamp/component.json b/packages/motion-core/src/lib/components/lava-lamp/component.json index f5c88e3..6051bb3 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/component.json +++ b/packages/motion-core/src/lib/components/lava-lamp/component.json @@ -4,12 +4,9 @@ "description": "A smooth and organic lava lamp effect using raymarching shaders and SDFs.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/neural-noise/NeuralNoise.svelte b/packages/motion-core/src/lib/components/neural-noise/NeuralNoise.svelte index f1896e4..5e923f5 100644 --- a/packages/motion-core/src/lib/components/neural-noise/NeuralNoise.svelte +++ b/packages/motion-core/src/lib/components/neural-noise/NeuralNoise.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/neural-noise/NeuralNoiseScene.svelte b/packages/motion-core/src/lib/components/neural-noise/NeuralNoiseScene.svelte index bfd2ea0..34e5d89 100644 --- a/packages/motion-core/src/lib/components/neural-noise/NeuralNoiseScene.svelte +++ b/packages/motion-core/src/lib/components/neural-noise/NeuralNoiseScene.svelte @@ -1,6 +1,14 @@ - - - - + diff --git a/packages/motion-core/src/lib/components/neural-noise/component.json b/packages/motion-core/src/lib/components/neural-noise/component.json index b4558f7..197bc9c 100644 --- a/packages/motion-core/src/lib/components/neural-noise/component.json +++ b/packages/motion-core/src/lib/components/neural-noise/component.json @@ -4,12 +4,9 @@ "description": "A generative organic pattern using Compositional Pattern Producing Networks (CPPN).", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte index 6d85bfa..0bc289c 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte +++ b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte index 9ad0bbb..b8a0cc7 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte +++ b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte @@ -1,31 +1,167 @@ - - - - + diff --git a/packages/motion-core/src/lib/components/plasma-grid/component.json b/packages/motion-core/src/lib/components/plasma-grid/component.json index cca14e2..04e9fc4 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/component.json +++ b/packages/motion-core/src/lib/components/plasma-grid/component.json @@ -4,12 +4,9 @@ "description": "A fluid, pixelated noise pattern useful for backgrounds.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte b/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte index ed943ea..1b1bb34 100644 --- a/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte +++ b/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte @@ -1,6 +1,4 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte b/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte index 8f7cfc2..06cf754 100644 --- a/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte +++ b/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte @@ -1,18 +1,33 @@ + const renderer = new Renderer({ + canvas: targetCanvas, + alpha: true, + dpr: typeof window !== "undefined" ? window.devicePixelRatio : 1, + }); + const gl = renderer.gl; + gl.clearColor(0, 0, 0, 0); + + const camera = new Camera(gl); + camera.position.z = 1; - - - - + }; + + uniforms = localUniforms; + + const program = new Program(gl, { + vertex: vertexShader, + fragment: fragmentShader, + uniforms: localUniforms, + depthTest: false, + depthWrite: false, + }); + + const mesh = new Mesh(gl, { geometry, program }); + mesh.setParent(scene); + + const resize = () => { + const host = targetCanvas.parentElement ?? targetCanvas; + const { width: hostWidth, height: hostHeight } = + host.getBoundingClientRect(); + const width = Math.max(1, Math.round(hostWidth)); + const height = Math.max(1, Math.round(hostHeight)); + renderer.setSize(width, height); + localUniforms.uResolution.value.set(width, height); + }; + + resize(); + const observer = new ResizeObserver(resize); + observer.observe(targetCanvas); + if (targetCanvas.parentElement) + observer.observe(targetCanvas.parentElement); + + let raf = 0; + let previous = 0; + const tick = (now: number) => { + const delta = previous ? (now - previous) / 1000 : 0; + previous = now; + localUniforms.uTime.value += delta; + + renderer.render({ scene, camera }); + raf = window.requestAnimationFrame(tick); + }; + + raf = window.requestAnimationFrame(tick); + + return () => { + window.cancelAnimationFrame(raf); + observer.disconnect(); + }; + }); + + + diff --git a/packages/motion-core/src/lib/components/specular-band/component.json b/packages/motion-core/src/lib/components/specular-band/component.json index 85d65a2..f8f367e 100644 --- a/packages/motion-core/src/lib/components/specular-band/component.json +++ b/packages/motion-core/src/lib/components/specular-band/component.json @@ -5,12 +5,9 @@ "description": "Procedural specular light bands with hue-shifting color palettes and dynamic lens distortion.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { From 2d5122e7ad67e29814750d0f39ecf0d2edce7234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:58:48 +0200 Subject: [PATCH 03/24] feat(motion-core): migrate image-based canvas effects to ogl --- .../ascii-renderer/AsciiRenderer.svelte | 8 +- .../ascii-renderer/AsciiRendererScene.svelte | 523 ++++++++---- .../components/ascii-renderer/component.json | 8 +- .../dithered-image/DitheredImage.svelte | 22 +- .../dithered-image/DitheredImageScene.svelte | 500 ++++++++--- .../components/dithered-image/component.json | 8 +- .../fake-3d-image/Fake3DImage.svelte | 8 +- .../fake-3d-image/Fake3DImageScene.svelte | 352 +++++--- .../components/fake-3d-image/component.json | 8 +- .../FluidImageReveal.svelte | 24 +- .../FluidImageRevealScene.svelte | 785 ++++++++++-------- .../fluid-image-reveal/component.json | 8 +- .../components/glass-pane/GlassPane.svelte | 23 +- .../glass-pane/GlassPaneScene.svelte | 376 ++++++--- .../lib/components/glass-pane/component.json | 8 +- .../pixelated-image/PixelatedImage.svelte | 8 +- .../PixelatedImageScene.svelte | 326 +++++--- .../components/pixelated-image/component.json | 8 +- .../water-ripple/WaterRipple.svelte | 8 +- .../water-ripple/WaterRippleScene.svelte | 500 +++++++---- .../components/water-ripple/component.json | 8 +- 21 files changed, 2293 insertions(+), 1226 deletions(-) diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte index 41fe4b1..101045a 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte index d8f1a38..70f0d6d 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte @@ -1,13 +1,16 @@ -{#if $texture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/ascii-renderer/component.json b/packages/motion-core/src/lib/components/ascii-renderer/component.json index 29f6df7..e260237 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/component.json +++ b/packages/motion-core/src/lib/components/ascii-renderer/component.json @@ -4,13 +4,9 @@ "description": "A retro-styled renderer that converts images into character-based visuals with configurable scanlines.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte b/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte index aff6145..a29f381 100644 --- a/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte +++ b/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte index 2e0894e..9595381 100644 --- a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte +++ b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte @@ -1,7 +1,23 @@ -{#if $tex && thresholdTexture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/dithered-image/component.json b/packages/motion-core/src/lib/components/dithered-image/component.json index bc95af9..e6b4a4d 100644 --- a/packages/motion-core/src/lib/components/dithered-image/component.json +++ b/packages/motion-core/src/lib/components/dithered-image/component.json @@ -4,13 +4,9 @@ "description": "An image display component that applies various ordered dithering algorithms (Bayer, Halftone, Void & Cluster).", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImage.svelte b/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImage.svelte index 5827107..5fdd6a0 100644 --- a/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImage.svelte +++ b/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImage.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte b/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte index 684df25..f8730ec 100644 --- a/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte +++ b/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte @@ -1,7 +1,15 @@ -{#if $colorTexture && $depthTexture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/fake-3d-image/component.json b/packages/motion-core/src/lib/components/fake-3d-image/component.json index 1907476..7ee15ed 100644 --- a/packages/motion-core/src/lib/components/fake-3d-image/component.json +++ b/packages/motion-core/src/lib/components/fake-3d-image/component.json @@ -5,13 +5,9 @@ "description": "A depth-map parallax background that reacts to pointer movement.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageReveal.svelte b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageReveal.svelte index 5974d03..cfc0725 100644 --- a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageReveal.svelte +++ b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageReveal.svelte @@ -1,6 +1,4 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte index 5ea6032..96d4a28 100644 --- a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte +++ b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte @@ -1,7 +1,15 @@ -{#if $baseTexture && $revealTexture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/fluid-image-reveal/component.json b/packages/motion-core/src/lib/components/fluid-image-reveal/component.json index 4d97c9d..85ec10c 100644 --- a/packages/motion-core/src/lib/components/fluid-image-reveal/component.json +++ b/packages/motion-core/src/lib/components/fluid-image-reveal/component.json @@ -5,13 +5,9 @@ "description": "A fluid simulation mask that reveals a second image through pointer-driven splats.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/glass-pane/GlassPane.svelte b/packages/motion-core/src/lib/components/glass-pane/GlassPane.svelte index 6c77990..8475846 100644 --- a/packages/motion-core/src/lib/components/glass-pane/GlassPane.svelte +++ b/packages/motion-core/src/lib/components/glass-pane/GlassPane.svelte @@ -1,5 +1,4 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte b/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte index f2ac695..dc67de4 100644 --- a/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte +++ b/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte @@ -1,12 +1,15 @@ -{#if $texture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/glass-pane/component.json b/packages/motion-core/src/lib/components/glass-pane/component.json index 13c54d3..0f20d25 100644 --- a/packages/motion-core/src/lib/components/glass-pane/component.json +++ b/packages/motion-core/src/lib/components/glass-pane/component.json @@ -4,13 +4,9 @@ "description": "A refractive view simulating moving glass rods that distort the underlying texture with chromatic aberration.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/pixelated-image/PixelatedImage.svelte b/packages/motion-core/src/lib/components/pixelated-image/PixelatedImage.svelte index 6d1579d..699b3cf 100644 --- a/packages/motion-core/src/lib/components/pixelated-image/PixelatedImage.svelte +++ b/packages/motion-core/src/lib/components/pixelated-image/PixelatedImage.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte b/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte index 115049b..7a3af35 100644 --- a/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte +++ b/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte @@ -1,7 +1,15 @@ -{#if $texture} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/pixelated-image/component.json b/packages/motion-core/src/lib/components/pixelated-image/component.json index d5de0f2..e4bff6f 100644 --- a/packages/motion-core/src/lib/components/pixelated-image/component.json +++ b/packages/motion-core/src/lib/components/pixelated-image/component.json @@ -4,13 +4,9 @@ "description": "A media revealer that animates blocky pixel grids which progressively sharpen to full resolution.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/water-ripple/WaterRipple.svelte b/packages/motion-core/src/lib/components/water-ripple/WaterRipple.svelte index d79eb5f..fec004a 100644 --- a/packages/motion-core/src/lib/components/water-ripple/WaterRipple.svelte +++ b/packages/motion-core/src/lib/components/water-ripple/WaterRipple.svelte @@ -1,8 +1,6 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte b/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte index 40e8c1b..4d38837 100644 --- a/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte +++ b/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte @@ -1,7 +1,17 @@ -{#if $textures && $textures[1]} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/water-ripple/component.json b/packages/motion-core/src/lib/components/water-ripple/component.json index 55249be..523bbc7 100644 --- a/packages/motion-core/src/lib/components/water-ripple/component.json +++ b/packages/motion-core/src/lib/components/water-ripple/component.json @@ -4,13 +4,9 @@ "description": "A fluid distortion effect simulating water ripples triggered by interaction.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { From 57ab6800514358e7281f262288a7c079e8d7fc7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:58:55 +0200 Subject: [PATCH 04/24] feat(motion-core): migrate gallery and 3d canvas components to ogl --- .../src/lib/components/card-3d/Card3D.svelte | 8 +- .../lib/components/card-3d/Card3DScene.svelte | 497 ++++++++--- .../src/lib/components/card-3d/component.json | 8 +- .../glass-slideshow/GlassSlideshow.svelte | 24 +- .../GlassSlideshowScene.svelte | 650 ++++++++------ .../components/glass-slideshow/component.json | 8 +- .../infinite-gallery/ImagePlane.svelte | 51 +- .../infinite-gallery/InfiniteGallery.svelte | 21 +- .../InfiniteGalleryScene.svelte | 790 +++++++++++------- .../infinite-gallery/component.json | 8 +- .../components/rubiks-cube/RubiksCube.svelte | 8 +- .../rubiks-cube/RubiksCubeScene.svelte | 777 ++++++++++++----- .../lib/components/rubiks-cube/component.json | 8 +- 13 files changed, 1892 insertions(+), 966 deletions(-) diff --git a/packages/motion-core/src/lib/components/card-3d/Card3D.svelte b/packages/motion-core/src/lib/components/card-3d/Card3D.svelte index b7a631a..90c2c65 100644 --- a/packages/motion-core/src/lib/components/card-3d/Card3D.svelte +++ b/packages/motion-core/src/lib/components/card-3d/Card3D.svelte @@ -1,9 +1,7 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte b/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte index 49ba8aa..dbeba4f 100644 --- a/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte +++ b/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte @@ -1,7 +1,14 @@ - - - - {#if material} - - {/if} - + diff --git a/packages/motion-core/src/lib/components/card-3d/component.json b/packages/motion-core/src/lib/components/card-3d/component.json index 5cdd37e..520ac5e 100644 --- a/packages/motion-core/src/lib/components/card-3d/component.json +++ b/packages/motion-core/src/lib/components/card-3d/component.json @@ -4,14 +4,10 @@ "description": "A 3D card with rounded corners that displays an image and responds to head tracking for a parallax effect.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.0.0", "@mediapipe/tasks-vision": "^0.10.22-rc.20250304", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshow.svelte b/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshow.svelte index eaee2ed..bcb47bc 100644 --- a/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshow.svelte +++ b/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshow.svelte @@ -1,8 +1,6 @@ -{#if $textures} - - - - -{/if} + diff --git a/packages/motion-core/src/lib/components/glass-slideshow/component.json b/packages/motion-core/src/lib/components/glass-slideshow/component.json index 05412cb..cf630e6 100644 --- a/packages/motion-core/src/lib/components/glass-slideshow/component.json +++ b/packages/motion-core/src/lib/components/glass-slideshow/component.json @@ -4,14 +4,10 @@ "description": "A slideshow component featuring organic glass bubble transitions with refraction and chromatic aberration.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", "gsap": "^3.14.2", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/infinite-gallery/ImagePlane.svelte b/packages/motion-core/src/lib/components/infinite-gallery/ImagePlane.svelte index 10324f8..7b2ac00 100644 --- a/packages/motion-core/src/lib/components/infinite-gallery/ImagePlane.svelte +++ b/packages/motion-core/src/lib/components/infinite-gallery/ImagePlane.svelte @@ -1,50 +1,27 @@ - - (isHovered = true)} - onpointerleave={() => (isHovered = false)} -> - - diff --git a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGallery.svelte b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGallery.svelte index 9793628..a2c6a8d 100644 --- a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGallery.svelte +++ b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGallery.svelte @@ -1,6 +1,4 @@
- - - - +
diff --git a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte index 4914b21..3e7f1ab 100644 --- a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte +++ b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte @@ -1,9 +1,16 @@ -{#if $textures} - {#each planesData as plane, i (plane.index)} - {@const texture = $textures[plane.imageIndex]} - {@const material = materials[i]} - {@const worldZ = plane.z - depthRange / 2} - - {#if texture && material} - {@const aspect = texture.image - ? texture.image.width / texture.image.height - : 1} - {@const scale = aspect > 1 ? [2 * aspect, 2, 1] : [2, 2 / aspect, 1]} - - - {/if} - {/each} -{/if} + diff --git a/packages/motion-core/src/lib/components/infinite-gallery/component.json b/packages/motion-core/src/lib/components/infinite-gallery/component.json index 444f2fd..5314e37 100644 --- a/packages/motion-core/src/lib/components/infinite-gallery/component.json +++ b/packages/motion-core/src/lib/components/infinite-gallery/component.json @@ -4,13 +4,9 @@ "description": "A 3D gallery that endlessly scrolls through textured planes with cloth-like distortion and scroll-driven transitions.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { diff --git a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCube.svelte b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCube.svelte index a74ed79..8d58b4e 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCube.svelte +++ b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCube.svelte @@ -1,9 +1,7 @@
- - - +
diff --git a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte index bf8d982..954198d 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte +++ b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte @@ -1,21 +1,36 @@ - - { - controls.target.set(0, 0, 0); - controls.update(); - }} - /> - - - - {#each staticCubes as cube (cube.id)} - - {/each} - - - {#each activeCubes as cube (cube.id)} - - {/each} - - + diff --git a/packages/motion-core/src/lib/components/rubiks-cube/component.json b/packages/motion-core/src/lib/components/rubiks-cube/component.json index 92b7690..73e1651 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/component.json +++ b/packages/motion-core/src/lib/components/rubiks-cube/component.json @@ -4,13 +4,9 @@ "description": "A dynamic Rubik's Cube that continuously rotates while a Fresnel rim glow traces each edge.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { From 498fb3c63759310698f51810cba408320e53aac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:59:06 +0200 Subject: [PATCH 05/24] docs(canvas): align migrated component docs with ogl --- apps/web/src/routes/docs/ascii-renderer/+page.svx | 8 ++++---- .../routes/docs/ascii-renderer/AsciiRendererDemo.svelte | 2 +- apps/web/src/routes/docs/dithered-image/+page.svx | 4 ++-- .../routes/docs/dithered-image/DitheredImageDemo.svelte | 2 +- apps/web/src/routes/docs/fluid-simulation/+page.svx | 4 ++-- apps/web/src/routes/docs/glitter-cloth/+page.svx | 2 +- apps/web/src/routes/docs/god-rays/+page.svx | 4 ++-- apps/web/src/routes/docs/halo/+page.svx | 2 +- apps/web/src/routes/docs/plasma-grid/+page.svx | 8 ++++---- apps/web/src/routes/docs/rubiks-cube/+page.svx | 4 ++-- apps/web/src/routes/docs/specular-band/+page.svx | 4 ++-- .../src/routes/docs/specular-band/SpecularBandDemo.svelte | 6 +----- 12 files changed, 23 insertions(+), 27 deletions(-) diff --git a/apps/web/src/routes/docs/ascii-renderer/+page.svx b/apps/web/src/routes/docs/ascii-renderer/+page.svx index 38cfa88..0366608 100644 --- a/apps/web/src/routes/docs/ascii-renderer/+page.svx +++ b/apps/web/src/routes/docs/ascii-renderer/+page.svx @@ -83,15 +83,15 @@ import { AsciiRenderer } from "$lib/motion-core"; }, { prop: "color", - type: "string", + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#00ff00"', - description: "Color of the ASCII characters (hex string).", + description: "Color of the ASCII characters.", }, { prop: "backgroundColor", - type: "string", + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#000000"', - description: "Background color of the canvas (hex string).", + description: "Background color of the canvas.", }, { prop: "class", diff --git a/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte b/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte index 016b51f..09946aa 100644 --- a/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte +++ b/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte @@ -7,7 +7,7 @@ diff --git a/apps/web/src/routes/docs/fluid-simulation/+page.svx b/apps/web/src/routes/docs/fluid-simulation/+page.svx index 80a2fd2..3f539c0 100644 --- a/apps/web/src/routes/docs/fluid-simulation/+page.svx +++ b/apps/web/src/routes/docs/fluid-simulation/+page.svx @@ -77,10 +77,10 @@ import { FluidSimulation } from "$lib/motion-core"; }, { prop: "color", - type: "THREE.ColorRepresentation", + type: "string | number | [number, number, number] | { r: number; g: number; b: number }", default: '"#ff6900"', description: - "Color of the fluid splat. Accepts any valid Three.js color representation.", + "Color of the fluid splat. Accepts string, number, RGB tuple, or { r, g, b } object.", }, { prop: "velocityDissipation", diff --git a/apps/web/src/routes/docs/glitter-cloth/+page.svx b/apps/web/src/routes/docs/glitter-cloth/+page.svx index 27de222..2240526 100644 --- a/apps/web/src/routes/docs/glitter-cloth/+page.svx +++ b/apps/web/src/routes/docs/glitter-cloth/+page.svx @@ -60,7 +60,7 @@ import { GlitterCloth } from "$lib/motion-core"; data={[ { prop: "color", - type: "THREE.ColorRepresentation", + type: "string | number | [number, number, number] | { r: number; g: number; b: number }", default: '"#FF6900"', description: "Primary color used for the shader palette. Accent and shadow tones are derived automatically.", diff --git a/apps/web/src/routes/docs/god-rays/+page.svx b/apps/web/src/routes/docs/god-rays/+page.svx index e4a4797..a892ff9 100644 --- a/apps/web/src/routes/docs/god-rays/+page.svx +++ b/apps/web/src/routes/docs/god-rays/+page.svx @@ -59,13 +59,13 @@ import { GodRays } from "$lib/motion-core"; data={[ { prop: "color", - type: '"THREE.ColorRepresentation"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#FFFFFF"', description: "Base color of the rays.", }, { prop: "backgroundColor", - type: '"THREE.ColorRepresentation"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#000000"', description: "Color of the background behind the rays.", }, diff --git a/apps/web/src/routes/docs/halo/+page.svx b/apps/web/src/routes/docs/halo/+page.svx index ab0f1e2..2f03dec 100644 --- a/apps/web/src/routes/docs/halo/+page.svx +++ b/apps/web/src/routes/docs/halo/+page.svx @@ -65,7 +65,7 @@ import { Halo } from "$lib/motion-core"; }, { prop: "backgroundColor", - type: '"THREE.ColorRepresentation"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#000000"', description: "Color of the background behind the scattering effect.", }, diff --git a/apps/web/src/routes/docs/plasma-grid/+page.svx b/apps/web/src/routes/docs/plasma-grid/+page.svx index 425eb48..8b8cc42 100644 --- a/apps/web/src/routes/docs/plasma-grid/+page.svx +++ b/apps/web/src/routes/docs/plasma-grid/+page.svx @@ -55,14 +55,14 @@ import { PlasmaGrid } from "$lib/motion-core"; data={[ { prop: "color", - type: "string", - default: '"#18181B"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', + default: '"#111113"', description: "The base background color of the effect.", }, { prop: "highlightColor", - type: "string", - default: '"#572400"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', + default: '"#FF6900"', description: "The color used for the plasma noise gradients.", }, { diff --git a/apps/web/src/routes/docs/rubiks-cube/+page.svx b/apps/web/src/routes/docs/rubiks-cube/+page.svx index 680ac83..ff76282 100644 --- a/apps/web/src/routes/docs/rubiks-cube/+page.svx +++ b/apps/web/src/routes/docs/rubiks-cube/+page.svx @@ -100,13 +100,13 @@ import { RubiksCube } from "$lib/motion-core"; data={[ { key: "color", - type: "THREE.ColorRepresentation", + type: "string | number | [number, number, number] | { r: number; g: number; b: number }", default: '"#111113"', description: "Base color of the cubelets before the rim glow is applied.", }, { key: "rimColor", - type: "THREE.ColorRepresentation", + type: "string | number | [number, number, number] | { r: number; g: number; b: number }", default: '"#FF6900"', description: "Hex or color that controls the glowing rim hue.", }, diff --git a/apps/web/src/routes/docs/specular-band/+page.svx b/apps/web/src/routes/docs/specular-band/+page.svx index 5e82188..ba3484b 100644 --- a/apps/web/src/routes/docs/specular-band/+page.svx +++ b/apps/web/src/routes/docs/specular-band/+page.svx @@ -59,13 +59,13 @@ import { SpecularBand } from "$lib/motion-core"; data={[ { prop: "color", - type: '"THREE.ColorRepresentation"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#FF6900"', description: "Base color of the specular bands.", }, { prop: "backgroundColor", - type: '"THREE.ColorRepresentation"', + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', default: '"#000000"', description: "Color of the background behind the bands.", }, diff --git a/apps/web/src/routes/docs/specular-band/SpecularBandDemo.svelte b/apps/web/src/routes/docs/specular-band/SpecularBandDemo.svelte index b90c189..473516d 100644 --- a/apps/web/src/routes/docs/specular-band/SpecularBandDemo.svelte +++ b/apps/web/src/routes/docs/specular-band/SpecularBandDemo.svelte @@ -2,8 +2,4 @@ import { SpecularBand } from "motion-core"; - + From 41b1eecf85dead56207e164513b8b9ebcc1df845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Tue, 14 Apr 2026 23:59:11 +0200 Subject: [PATCH 06/24] chore(registry): regenerate registry after ogl migrations --- apps/web/src/lib/docs/generated-manifest.ts | 72 +++------- apps/web/static/registry/components.json | 82 +++++------ apps/web/static/registry/registry.json | 152 ++++++-------------- 3 files changed, 101 insertions(+), 205 deletions(-) diff --git a/apps/web/src/lib/docs/generated-manifest.ts b/apps/web/src/lib/docs/generated-manifest.ts index 2f6ab97..ead9a0e 100644 --- a/apps/web/src/lib/docs/generated-manifest.ts +++ b/apps/web/src/lib/docs/generated-manifest.ts @@ -15,9 +15,7 @@ export const docsManifest: ComponentInfo[] = [ name: "ASCII Renderer", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -25,10 +23,8 @@ export const docsManifest: ComponentInfo[] = [ name: "Card 3D", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.0.0", "@mediapipe/tasks-vision": "^0.10.22-rc.20250304", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -44,9 +40,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Dithered Image", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -55,9 +49,7 @@ export const docsManifest: ComponentInfo[] = [ category: "canvas", introducedAt: "2026-04-02", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -91,9 +83,7 @@ export const docsManifest: ComponentInfo[] = [ category: "canvas", introducedAt: "2026-04-04", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -101,8 +91,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Fluid Simulation", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -110,9 +99,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Glass Pane", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -120,10 +107,8 @@ export const docsManifest: ComponentInfo[] = [ name: "Glass Slideshow", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", gsap: "^3.14.2", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -131,8 +116,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Glitter Cloth", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -152,8 +136,7 @@ export const docsManifest: ComponentInfo[] = [ category: "canvas", introducedAt: "2026-03-18", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -162,8 +145,7 @@ export const docsManifest: ComponentInfo[] = [ category: "canvas", introducedAt: "2026-03-18", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -179,9 +161,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Infinite Gallery", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -198,9 +178,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Interactive Grid", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -208,8 +186,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Lava Lamp", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -249,8 +226,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Neural Noise", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -258,9 +234,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Pixelated Image", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -268,8 +242,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Plasma Grid", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -293,9 +266,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Rubiks Cube", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -312,8 +283,7 @@ export const docsManifest: ComponentInfo[] = [ category: "canvas", introducedAt: "2026-03-18", dependencies: { - "@threlte/core": "^8.3.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { @@ -370,9 +340,7 @@ export const docsManifest: ComponentInfo[] = [ name: "Water Ripple", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { diff --git a/apps/web/static/registry/components.json b/apps/web/static/registry/components.json index 3e251dc..eebe84a 100644 --- a/apps/web/static/registry/components.json +++ b/apps/web/static/registry/components.json @@ -1,69 +1,69 @@ { - "components/ascii-renderer/AsciiRenderer.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0FzY2lpUmVuZGVyZXJTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgeyBOb1RvbmVNYXBwaW5nIH0gZnJvbSAidGhyZWUiOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgZGVuc2l0eSBmb3IgdGhlIEFTQ0lJIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAyNQoJCSAqLwoJCWRlbnNpdHk/OiBTY2VuZVByb3BzWyJkZW5zaXR5Il07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZ2VuZXJhdGlvbiB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgMjUKCQkgKi8KCQlzdHJlbmd0aD86IFNjZW5lUHJvcHNbInN0cmVuZ3RoIl07CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgQVNDSUkgY2hhcmFjdGVycy4KCQkgKiBAZGVmYXVsdCAiIzAwZmYwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJc3JjLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkZW5zaXR5ID0gMjUsCgkJc3RyZW5ndGggPSAyNSwKCQljb2xvciA9ICIjMDBmZjAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZSBpbWFnZT17c3JjfSB7ZGVuc2l0eX0ge3N0cmVuZ3RofSB7Y29sb3J9IHtiYWNrZ3JvdW5kQ29sb3J9IC8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/ascii-renderer/AsciiRendererScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgewoJCVZlY3RvcjIsCgkJU2hhZGVyTWF0ZXJpYWwsCgkJTWlycm9yZWRSZXBlYXRXcmFwcGluZywKCQlMaW5lYXJGaWx0ZXIsCgkJQ29sb3IsCgl9IGZyb20gInRocmVlIjsKCWltcG9ydCB7IHVzZVRleHR1cmUgfSBmcm9tICJAdGhyZWx0ZS9leHRyYXMiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBHcmlkIGRlbnNpdHkgZm9yIHRoZSBBU0NJSSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMjUuMAoJCSAqLwoJCWRlbnNpdHk/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZ2VuZXJhdGlvbiB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgMjUuMAoJCSAqLwoJCXN0cmVuZ3RoPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3Igb2YgdGhlIEFTQ0lJIGNoYXJhY3RlcnMuCgkJICogQGRlZmF1bHQgIiMwMGZmMDAiCgkJICovCgkJY29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQlkZW5zaXR5ID0gMjUuMCwKCQlzdHJlbmd0aCA9IDI1LjAsCgkJY29sb3IgPSAiIzAwZmYwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgdGltZSA9IDA7Cgljb25zdCB7IHNpemUsIHJlbmRlcmVyIH0gPSB1c2VUaHJlbHRlKCk7CgoJbGV0IGNhbnZhc1dpZHRoID0gJGRlcml2ZWQoTWF0aC5tYXgoMSwgJHNpemUud2lkdGgpKTsKCWxldCBjYW52YXNIZWlnaHQgPSAkZGVyaXZlZChNYXRoLm1heCgxLCAkc2l6ZS5oZWlnaHQpKTsKCgljb25zdCBjb3ZlclNjYWxlVW5pZm9ybSA9IG5ldyBWZWN0b3IyKDEsIDEpOwoJY29uc3QgY292ZXJPZmZzZXRVbmlmb3JtID0gbmV3IFZlY3RvcjIoMCwgMCk7Cgljb25zdCBjb2xvclVuaWZvcm0gPSBuZXcgQ29sb3IoKTsKCWNvbnN0IGJhY2tncm91bmRDb2xvclVuaWZvcm0gPSBuZXcgQ29sb3IoKTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKCkgPT4gewoJCWlmICgKCQkJY2FudmFzV2lkdGggPD0gMCB8fAoJCQljYW52YXNIZWlnaHQgPD0gMCB8fAoJCQlpbWFnZVdpZHRoIDw9IDAgfHwKCQkJaW1hZ2VIZWlnaHQgPD0gMAoJCSkgewoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBzY3JlZW5Bc3BlY3QgPSBjYW52YXNXaWR0aCAvIGNhbnZhc0hlaWdodDsKCQljb25zdCBpbWFnZUFzcGVjdCA9IGltYWdlV2lkdGggLyBpbWFnZUhlaWdodDsKCgkJbGV0IHNjYWxlWCA9IDE7CgkJbGV0IHNjYWxlWSA9IDE7CgkJbGV0IG9mZnNldFggPSAwOwoJCWxldCBvZmZzZXRZID0gMDsKCgkJaWYgKHNjcmVlbkFzcGVjdCA+IGltYWdlQXNwZWN0KSB7CgkJCXNjYWxlWSA9IGltYWdlQXNwZWN0IC8gc2NyZWVuQXNwZWN0OwoJCQlvZmZzZXRZID0gKDEgLSBzY2FsZVkpICogMC41OwoJCX0gZWxzZSB7CgkJCXNjYWxlWCA9IHNjcmVlbkFzcGVjdCAvIGltYWdlQXNwZWN0OwoJCQlvZmZzZXRYID0gKDEgLSBzY2FsZVgpICogMC41OwoJCX0KCgkJY292ZXJTY2FsZVVuaWZvcm0uc2V0KHNjYWxlWCwgc2NhbGVZKTsKCQljb3Zlck9mZnNldFVuaWZvcm0uc2V0KG9mZnNldFgsIG9mZnNldFkpOwoJfTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb2xvclVuaWZvcm0uc2V0KGNvbG9yKTsKCQliYWNrZ3JvdW5kQ29sb3JVbmlmb3JtLnNldChiYWNrZ3JvdW5kQ29sb3IpOwoJCWlmIChtYXRlcmlhbCkgewoJCQltYXRlcmlhbC51bmlmb3Jtcy51Q29sb3IudmFsdWUuY29weShjb2xvclVuaWZvcm0pOwoJCQltYXRlcmlhbC51bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLmNvcHkoYmFja2dyb3VuZENvbG9yVW5pZm9ybSk7CgkJfQoJfSk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAogICAgdmFyeWluZyB2ZWMyIHZVdjsKICAgIHZvaWQgbWFpbigpIHsKICAgICAgdlV2ID0gdXY7CiAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMS4wKTsKICAgIH0KICBgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAogICAgdW5pZm9ybSBmbG9hdCB1VGltZTsKICAgIHVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwogICAgdW5pZm9ybSB2ZWMyIHVDb3ZlclNjYWxlOwogICAgdW5pZm9ybSB2ZWMyIHVDb3Zlck9mZnNldDsKICAgIHVuaWZvcm0gZmxvYXQgdURlbnNpdHk7CiAgICB1bmlmb3JtIGZsb2F0IHVTdHJlbmd0aDsKICAgIHVuaWZvcm0gdmVjMyB1Q29sb3I7CiAgICB1bmlmb3JtIHZlYzMgdUJhY2tncm91bmRDb2xvcjsKCiAgICB2YXJ5aW5nIHZlYzIgdlV2OwoKICAgIGZsb2F0IGRpZ2l0KHZlYzIgcCwgZmxvYXQgaW50ZW5zaXR5KXsKICAgICAgICBwID0gKGZyYWN0KHApIC0gMC41KSAqIDEuMiArIDAuNTsKCiAgICAgICAgaWYgKHAueCA8IDAuMCB8fCBwLnggPiAxLjAgfHwgcC55IDwgMC4wIHx8IHAueSA+IDEuMCkgcmV0dXJuIDAuMDsKCiAgICAgICAgZmxvYXQgeCA9IGZyYWN0KHAueCAqIDUuKTsKICAgICAgICBmbG9hdCB5ID0gZnJhY3QoKDEuIC0gcC55KSAqIDUuKTsKICAgICAgICBpbnQgaSA9IGludChmbG9vcigoMS4gLSBwLnkpICogNS4pKTsKICAgICAgICBpbnQgaiA9IGludChmbG9vcihwLnggKiA1LikpOwogICAgICAgIGludCBuID0gKGktMikqKGktMikrKGotMikqKGotMik7CiAgICAgICAgZmxvYXQgZiA9IGZsb2F0KG4pLzE2LjsKICAgICAgICBmbG9hdCBpc09uID0gc21vb3Roc3RlcCgwLjEsIDAuMiwgaW50ZW5zaXR5IC0gZik7CiAgICAgICAgcmV0dXJuIGlzT24gKiAoMC4yICsgeSo0Li81LikgKiAoMC43NSArIHgvNC4pOwogICAgfQoKICAgIGZsb2F0IG9uT2ZmKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0ZXAoYywgc2luKHVUaW1lICsgYSpjb3ModVRpbWUqYikpKTsKICAgIH0KCiAgICBmbG9hdCBkaXNwbGFjZSh2ZWMyIGxvb2spCiAgICB7CiAgICAgICAgZmxvYXQgeSA9IChsb29rLnktbW9kKHVUaW1lLzQuLDEuKSk7CiAgICAgICAgZmxvYXQgd2luZG93ID0gMS4vKDEuKzUwLip5KnkpOwogICAgICAgIHJldHVybiBzaW4obG9vay55KjIwLiArIHVUaW1lKS84MC4qb25PZmYoNC4sMi4sLjgpKigxLitjb3ModVRpbWUqNjAuKSkqd2luZG93OwogICAgfQoKICAgIHZvaWQgbWFpbigpIHsKICAgICAgICB2ZWMyIHAgPSB2VXY7CiAgICAgICAgZmxvYXQgYXNwZWN0ID0gdVJlc29sdXRpb24ueCAvIHVSZXNvbHV0aW9uLnk7CiAgICAgICAgcC54ICo9IGFzcGVjdDsKCiAgICAgICAgdmVjMiBwRGlzcGxhY2VkID0gcDsKICAgICAgICBwRGlzcGxhY2VkLnggKz0gZGlzcGxhY2UocCkgKiAwLjU7CgogICAgICAgIHZlYzIgZ3JpZCA9IHZlYzIoMy4sIDEuKSAqIHVEZW5zaXR5OwoKICAgICAgICB2ZWMyIGNlbGxJbmRleCA9IGZsb29yKHBEaXNwbGFjZWQgKiBncmlkKTsKICAgICAgICB2ZWMyIGNlbGxDZW50ZXJQID0gKGNlbGxJbmRleCArIDAuNSkgLyBncmlkOwoKICAgICAgICB2ZWMyIGNlbGxDZW50ZXJVViA9IGNlbGxDZW50ZXJQOwogICAgICAgIGNlbGxDZW50ZXJVVi54IC89IGFzcGVjdDsKCiAgICAgICAgdmVjMiBjZWxsQ2VudGVyVVZDb3ZlciA9IChjZWxsQ2VudGVyVVYgKiB1Q292ZXJTY2FsZSkgKyB1Q292ZXJPZmZzZXQ7CgogICAgICAgIHZlYzMgdGV4Q29sb3IgPSB0ZXh0dXJlMkQodVRleHR1cmUsIGNlbGxDZW50ZXJVVkNvdmVyKS5yZ2I7CgogICAgICAgIGZsb2F0IGludGVuc2l0eSA9IGRvdCh0ZXhDb2xvciwgdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KSk7CiAgICAgICAgaW50ZW5zaXR5ID0gcG93KGludGVuc2l0eSwgMi44KTsKCiAgICAgICAgZmxvYXQgYmFyID0gbW9kKHAueSArIHVUaW1lKjIwLiwgMS4pIDwgMC4yID8gIDEuNCAgOiAxLjsKCiAgICAgICAgdmVjMiBncmlkUCA9IHBEaXNwbGFjZWQgKiBncmlkOwogICAgICAgIGZsb2F0IG1pZGRsZSA9IGRpZ2l0KGdyaWRQLCBpbnRlbnNpdHkgKiAxLjMgKiB1U3RyZW5ndGgpOwoKICAgICAgICBmbG9hdCBvZmYgPSAwLjAwMjsKICAgICAgICBmbG9hdCBzdW0gPSAwLjsKICAgICAgICBmb3IgKGZsb2F0IGkgPSAtMS47IGkgPCAyLjsgaSs9MS4pewogICAgICAgICAgICBmb3IgKGZsb2F0IGogPSAtMS47IGogPCAyLjsgais9MS4pewogICAgICAgICAgICAgICAgdmVjMiBvZmZzZXRHcmlkUCA9IGdyaWRQICsgdmVjMihvZmYqaSpncmlkLngsIG9mZipqKmdyaWQueSk7CiAgICAgICAgICAgICAgICBzdW0gKz0gZGlnaXQob2Zmc2V0R3JpZFAsIGludGVuc2l0eSAqIDEuMyAqIHVTdHJlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZlYzMgZW1pc3Npb24gPSB2ZWMzKDAuNikqbWlkZGxlICsgc3VtLzE1Lip1Q29sb3IgKiBiYXI7CiAgICAgICAgdmVjMyBmaW5hbCA9IHVCYWNrZ3JvdW5kQ29sb3IgKyBlbWlzc2lvbjsKCiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmaW5hbCwgMS4wKTsKICAgICAgICAjaW5jbHVkZSA8Y29sb3JzcGFjZV9mcmFnbWVudD4KICAgIH0KICBgOwoKCWNvbnN0IHRleHR1cmUgPSAkZGVyaXZlZCgKCQl1c2VUZXh0dXJlKGltYWdlLCB7CgkJCXRyYW5zZm9ybTogKHRleCkgPT4gewoJCQkJdGV4LndyYXBTID0gTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKCQkJCXRleC53cmFwVCA9IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CgkJCQl0ZXgubWluRmlsdGVyID0gTGluZWFyRmlsdGVyOwoJCQkJdGV4Lm1hZ0ZpbHRlciA9IExpbmVhckZpbHRlcjsKCQkJCXRleC5hbmlzb3Ryb3B5ID0gcmVuZGVyZXIKCQkJCQk/IHJlbmRlcmVyLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkKCQkJCQk6IDE7CgkJCQlyZXR1cm4gdGV4OwoJCQl9LAoJCX0pLAoJKTsKCglsZXQgaW1hZ2VXaWR0aCA9ICRkZXJpdmVkKCR0ZXh0dXJlPy5pbWFnZT8ud2lkdGggPz8gMSk7CglsZXQgaW1hZ2VIZWlnaHQgPSAkZGVyaXZlZCgkdGV4dHVyZT8uaW1hZ2U/LmhlaWdodCA/PyAxKTsKCgkkZWZmZWN0KCgpID0+IHsKCQl1cGRhdGVDb3ZlclVuaWZvcm1zKCk7Cgl9KTsKCglsZXQgbWF0ZXJpYWwgPSAkc3RhdGU8U2hhZGVyTWF0ZXJpYWw+KCk7CgoJdXNlVGFzaygoZGVsdGEpID0+IHsKCQl0aW1lICs9IGRlbHRhOwoJCWlmIChtYXRlcmlhbCkgewoJCQltYXRlcmlhbC51bmlmb3Jtcy51VGltZS52YWx1ZSA9IHRpbWU7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCgkc2l6ZS53aWR0aCwgJHNpemUuaGVpZ2h0KTsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudUNvdmVyU2NhbGUudmFsdWUgPSBjb3ZlclNjYWxlVW5pZm9ybTsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudUNvdmVyT2Zmc2V0LnZhbHVlID0gY292ZXJPZmZzZXRVbmlmb3JtOwoJCQltYXRlcmlhbC51bmlmb3Jtcy51RGVuc2l0eS52YWx1ZSA9IGRlbnNpdHk7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVTdHJlbmd0aC52YWx1ZSA9IHN0cmVuZ3RoOwoJCX0KCX0pOwo8L3NjcmlwdD4KCnsjaWYgJHRleHR1cmV9Cgk8VC5NZXNoPgoJCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJCTxULlNoYWRlck1hdGVyaWFsCgkJCWJpbmQ6cmVmPXttYXRlcmlhbH0KCQkJe3ZlcnRleFNoYWRlcn0KCQkJe2ZyYWdtZW50U2hhZGVyfQoJCQl1bmlmb3Jtcz17ewoJCQkJdVRpbWU6IHsgdmFsdWU6IDAgfSwKCQkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjdG9yMigxLCAxKSB9LAoJCQkJdVRleHR1cmU6IHsgdmFsdWU6ICR0ZXh0dXJlIH0sCgkJCQl1Q292ZXJTY2FsZTogeyB2YWx1ZTogY292ZXJTY2FsZVVuaWZvcm0gfSwKCQkJCXVDb3Zlck9mZnNldDogeyB2YWx1ZTogY292ZXJPZmZzZXRVbmlmb3JtIH0sCgkJCQl1RGVuc2l0eTogeyB2YWx1ZTogZGVuc2l0eSB9LAoJCQkJdVN0cmVuZ3RoOiB7IHZhbHVlOiBzdHJlbmd0aCB9LAoJCQkJdUNvbG9yOiB7IHZhbHVlOiBjb2xvclVuaWZvcm0gfSwKCQkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IGJhY2tncm91bmRDb2xvclVuaWZvcm0gfSwKCQkJfX0KCQkvPgoJPC9ULk1lc2g+CnsvaWZ9Cg==", + "components/ascii-renderer/AsciiRenderer.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9Bc2NpaVJlbmRlcmVyU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgZGVuc2l0eSBmb3IgdGhlIEFTQ0lJIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAyNQoJCSAqLwoJCWRlbnNpdHk/OiBTY2VuZVByb3BzWyJkZW5zaXR5Il07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZ2VuZXJhdGlvbiB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgMjUKCQkgKi8KCQlzdHJlbmd0aD86IFNjZW5lUHJvcHNbInN0cmVuZ3RoIl07CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgQVNDSUkgY2hhcmFjdGVycy4KCQkgKiBAZGVmYXVsdCAiIzAwZmYwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJc3JjLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkZW5zaXR5ID0gMjUsCgkJc3RyZW5ndGggPSAyNSwKCQljb2xvciA9ICIjMDBmZjAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIGltYWdlPXtzcmN9IHtkZW5zaXR5fSB7c3RyZW5ndGh9IHtjb2xvcn0ge2JhY2tncm91bmRDb2xvcn0gLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/ascii-renderer/AsciiRendererScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgZGVuc2l0eSBmb3IgdGhlIEFTQ0lJIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAyNS4wCgkJICovCgkJZGVuc2l0eT86IG51bWJlcjsKCQkvKioKCQkgKiBJbnRlbnNpdHkgb2YgdGhlIEFTQ0lJIGNoYXJhY3RlciBnZW5lcmF0aW9uIHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCAyNS4wCgkJICovCgkJc3RyZW5ndGg/OiBudW1iZXI7CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgQVNDSUkgY2hhcmFjdGVycy4KCQkgKiBAZGVmYXVsdCAiIzAwZmYwMCIKCQkgKi8KCQljb2xvcj86IHN0cmluZzsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMDAwMDAwIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IHN0cmluZzsKCX0KCglsZXQgewoJCWltYWdlLAoJCWRlbnNpdHkgPSAyNS4wLAoJCXN0cmVuZ3RoID0gMjUuMCwKCQljb2xvciA9ICIjMDBmZjAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXVUaW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVUZXh0dXJlOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdUNvdmVyU2NhbGU6IHsgdmFsdWU6IFZlYzIgfTsKCQl1Q292ZXJPZmZzZXQ6IHsgdmFsdWU6IFZlYzIgfTsKCQl1RGVuc2l0eTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCgljb25zdCByZXNvbHV0aW9uVW5pZm9ybSA9IG5ldyBWZWMyKDEsIDEpOwoJY29uc3QgY292ZXJTY2FsZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCWNvbnN0IGNvdmVyT2Zmc2V0VW5pZm9ybSA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3QgY29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMCwgMSwgMCk7Cgljb25zdCBiYWNrZ3JvdW5kQ29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMCwgMCwgMCk7CgoJbGV0IGNhbnZhc1dpZHRoID0gMTsKCWxldCBjYW52YXNIZWlnaHQgPSAxOwoJbGV0IGltYWdlV2lkdGggPSAxOwoJbGV0IGltYWdlSGVpZ2h0ID0gMTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoJY29uc3QgcGFyc2VIZXhDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJY29uc3QgaGV4ID0gdmFsdWUucmVwbGFjZSgiIyIsICIiKS50cmltKCk7CgkJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleFsxXSArIGhleFsxXSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDAsIDIpLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCXJldHVybiBudWxsOwoJfTsKCglsZXQgY3NzQ29sb3JDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsIHwgdW5kZWZpbmVkOwoJY29uc3QgcGFyc2VDc3NDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwoJCWlmIChjc3NDb2xvckNvbnRleHQgPT09IHVuZGVmaW5lZCkgewoJCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQkJcGFyc2VyQ2FudmFzLndpZHRoID0gMTsKCQkJcGFyc2VyQ2FudmFzLmhlaWdodCA9IDE7CgkJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJCX0KCQlpZiAoIWNzc0NvbG9yQ29udGV4dCkgcmV0dXJuIG51bGw7CgoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7CgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlOwoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBjc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlOwoKCQlpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQkJcmV0dXJuIHBhcnNlSGV4Q29sb3Iobm9ybWFsaXplZCk7CgkJfQoKCQljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CgkJaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7CgkJY29uc3QgcGFydHMgPSBtYXRjaFsxXQoJCQkuc3BsaXQoIiwiKQoJCQkubWFwKChwYXJ0KSA9PiBOdW1iZXIucGFyc2VGbG9hdChwYXJ0LnRyaW0oKSkpCgkJCS5maWx0ZXIoKHBhcnQpID0+IE51bWJlci5pc0Zpbml0ZShwYXJ0KSk7CgkJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSkgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gWwoJCQljbGFtcDAxKHBhcnRzWzBdIC8gc2NhbGUpLAoJCQljbGFtcDAxKHBhcnRzWzFdIC8gc2NhbGUpLAoJCQljbGFtcDAxKHBhcnRzWzJdIC8gc2NhbGUpLAoJCV07Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBzdHJpbmcsCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQljb25zdCBwYXJzZWQgPSB0cmltbWVkLnN0YXJ0c1dpdGgoIiMiKQoJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCXJldHVybiBwYXJzZWQgPz8gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBzdHJpbmcsCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQlyZXR1cm4gW3NyZ2JUb0xpbmVhcihyKSwgc3JnYlRvTGluZWFyKGcpLCBzcmdiVG9MaW5lYXIoYildOwoJfTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKCkgPT4gewoJCWlmICgKCQkJY2FudmFzV2lkdGggPD0gMCB8fAoJCQljYW52YXNIZWlnaHQgPD0gMCB8fAoJCQlpbWFnZVdpZHRoIDw9IDAgfHwKCQkJaW1hZ2VIZWlnaHQgPD0gMAoJCSkgewoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBzY3JlZW5Bc3BlY3QgPSBjYW52YXNXaWR0aCAvIGNhbnZhc0hlaWdodDsKCQljb25zdCBpbWFnZUFzcGVjdCA9IGltYWdlV2lkdGggLyBpbWFnZUhlaWdodDsKCgkJbGV0IHNjYWxlWCA9IDE7CgkJbGV0IHNjYWxlWSA9IDE7CgkJbGV0IG9mZnNldFggPSAwOwoJCWxldCBvZmZzZXRZID0gMDsKCgkJaWYgKHNjcmVlbkFzcGVjdCA+IGltYWdlQXNwZWN0KSB7CgkJCXNjYWxlWSA9IGltYWdlQXNwZWN0IC8gc2NyZWVuQXNwZWN0OwoJCQlvZmZzZXRZID0gKDEgLSBzY2FsZVkpICogMC41OwoJCX0gZWxzZSB7CgkJCXNjYWxlWCA9IHNjcmVlbkFzcGVjdCAvIGltYWdlQXNwZWN0OwoJCQlvZmZzZXRYID0gKDEgLSBzY2FsZVgpICogMC41OwoJCX0KCgkJY292ZXJTY2FsZVVuaWZvcm0uc2V0KHNjYWxlWCwgc2NhbGVZKTsKCQljb3Zlck9mZnNldFVuaWZvcm0uc2V0KG9mZnNldFgsIG9mZnNldFkpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwoJCXVuaWZvcm0gdmVjMiB1Q292ZXJTY2FsZTsKCQl1bmlmb3JtIHZlYzIgdUNvdmVyT2Zmc2V0OwoJCXVuaWZvcm0gZmxvYXQgdURlbnNpdHk7CgkJdW5pZm9ybSBmbG9hdCB1U3RyZW5ndGg7CgkJdW5pZm9ybSB2ZWMzIHVDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdUJhY2tncm91bmRDb2xvcjsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMiBtaXJyb3JlZCh2ZWMyIHZhbHVlKSB7CgkJCXZlYzIgbSA9IG1vZCh2YWx1ZSwgMi4wKTsKCQkJcmV0dXJuIG1peChtLCAyLjAgLSBtLCBzdGVwKDEuMCwgbSkpOwoJCX0KCgkJZmxvYXQgZGlnaXQodmVjMiBwLCBmbG9hdCBpbnRlbnNpdHkpewoJCQlwID0gKGZyYWN0KHApIC0gMC41KSAqIDEuMiArIDAuNTsKCgkJCWlmIChwLnggPCAwLjAgfHwgcC54ID4gMS4wIHx8IHAueSA8IDAuMCB8fCBwLnkgPiAxLjApIHJldHVybiAwLjA7CgoJCQlmbG9hdCB4ID0gZnJhY3QocC54ICogNS4wKTsKCQkJZmxvYXQgeSA9IGZyYWN0KCgxLjAgLSBwLnkpICogNS4wKTsKCQkJaW50IGkgPSBpbnQoZmxvb3IoKDEuMCAtIHAueSkgKiA1LjApKTsKCQkJaW50IGogPSBpbnQoZmxvb3IocC54ICogNS4wKSk7CgkJCWludCBuID0gKGktMikqKGktMikrKGotMikqKGotMik7CgkJCWZsb2F0IGYgPSBmbG9hdChuKS8xNi4wOwoJCQlmbG9hdCBpc09uID0gc21vb3Roc3RlcCgwLjEsIDAuMiwgaW50ZW5zaXR5IC0gZik7CgkJCXJldHVybiBpc09uICogKDAuMiArIHkqNC4wLzUuMCkgKiAoMC43NSArIHgvNC4wKTsKCQl9CgoJCWZsb2F0IG9uT2ZmKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpIHsKCQkJcmV0dXJuIHN0ZXAoYywgc2luKHVUaW1lICsgYSpjb3ModVRpbWUqYikpKTsKCQl9CgoJCWZsb2F0IGRpc3BsYWNlKHZlYzIgbG9vaykgewoJCQlmbG9hdCB5ID0gKGxvb2sueSAtIG1vZCh1VGltZS80LjAsIDEuMCkpOwoJCQlmbG9hdCB3aW5kb3cgPSAxLjAgLyAoMS4wICsgNTAuMCAqIHkgKiB5KTsKCQkJcmV0dXJuIHNpbihsb29rLnkgKiAyMC4wICsgdVRpbWUpLzgwLjAgKiBvbk9mZig0LjAsIDIuMCwgMC44KSAqICgxLjAgKyBjb3ModVRpbWUqNjAuMCkpICogd2luZG93OwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBwID0gdlV2OwoJCQlmbG9hdCBhc3BlY3QgPSB1UmVzb2x1dGlvbi54IC8gbWF4KHVSZXNvbHV0aW9uLnksIDEuMCk7CgkJCXAueCAqPSBhc3BlY3Q7CgoJCQl2ZWMyIHBEaXNwbGFjZWQgPSBwOwoJCQlwRGlzcGxhY2VkLnggKz0gZGlzcGxhY2UocCkgKiAwLjU7CgoJCQl2ZWMyIGdyaWQgPSB2ZWMyKDMuMCwgMS4wKSAqIHVEZW5zaXR5OwoKCQkJdmVjMiBjZWxsSW5kZXggPSBmbG9vcihwRGlzcGxhY2VkICogZ3JpZCk7CgkJCXZlYzIgY2VsbENlbnRlclAgPSAoY2VsbEluZGV4ICsgMC41KSAvIGdyaWQ7CgoJCQl2ZWMyIGNlbGxDZW50ZXJVViA9IGNlbGxDZW50ZXJQOwoJCQljZWxsQ2VudGVyVVYueCAvPSBhc3BlY3Q7CgoJCQl2ZWMyIGNlbGxDZW50ZXJVVkNvdmVyID0gKGNlbGxDZW50ZXJVViAqIHVDb3ZlclNjYWxlKSArIHVDb3Zlck9mZnNldDsKCQkJdmVjMyB0ZXhDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgbWlycm9yZWQoY2VsbENlbnRlclVWQ292ZXIpKS5yZ2I7CgoJCQlmbG9hdCBpbnRlbnNpdHkgPSBkb3QodGV4Q29sb3IsIHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCkpOwoJCQlpbnRlbnNpdHkgPSBwb3coaW50ZW5zaXR5LCAyLjgpOwoKCQkJZmxvYXQgYmFyID0gbW9kKHAueSArIHVUaW1lICogMjAuMCwgMS4wKSA8IDAuMiA/IDEuNCA6IDEuMDsKCgkJCXZlYzIgZ3JpZFAgPSBwRGlzcGxhY2VkICogZ3JpZDsKCQkJZmxvYXQgbWlkZGxlID0gZGlnaXQoZ3JpZFAsIGludGVuc2l0eSAqIDEuMyAqIHVTdHJlbmd0aCk7CgoJCQlmbG9hdCBvZmYgPSAwLjAwMjsKCQkJZmxvYXQgc3VtID0gMC4wOwoJCQlmb3IgKGZsb2F0IGkgPSAtMS4wOyBpIDwgMi4wOyBpICs9IDEuMCkgewoJCQkJZm9yIChmbG9hdCBqID0gLTEuMDsgaiA8IDIuMDsgaiArPSAxLjApIHsKCQkJCQl2ZWMyIG9mZnNldEdyaWRQID0gZ3JpZFAgKyB2ZWMyKG9mZiAqIGkgKiBncmlkLngsIG9mZiAqIGogKiBncmlkLnkpOwoJCQkJCXN1bSArPSBkaWdpdChvZmZzZXRHcmlkUCwgaW50ZW5zaXR5ICogMS4zICogdVN0cmVuZ3RoKTsKCQkJCX0KCQkJfQoKCQkJdmVjMyBlbWlzc2lvbiA9IHZlYzMoMC42KSAqIG1pZGRsZSArIHN1bSAvIDE1LjAgKiB1Q29sb3IgKiBiYXI7CgkJCXZlYzMgZmluYWxDb2xvciA9IHVCYWNrZ3JvdW5kQ29sb3IgKyBlbWlzc2lvbjsKCgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGZpbmFsQ29sb3IpLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVEZW5zaXR5LnZhbHVlID0gZGVuc2l0eTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQl1bmlmb3Jtcy51U3RyZW5ndGgudmFsdWUgPSBzdHJlbmd0aDsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKGNvbG9yLCBbMCwgMSwgMF0pOwoJCWNvbG9yVW5pZm9ybS5zZXQociwgZywgYik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b0xpbmVhclJnYihiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJYmFja2dyb3VuZENvbG9yVW5pZm9ybS5zZXQociwgZywgYik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlKSByZXR1cm47CgkJc2V0SW1hZ2VTb3VyY2UoaW1hZ2UpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGltYWdlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBjb3ZlclNjYWxlVW5pZm9ybSB9LAoJCQl1Q292ZXJPZmZzZXQ6IHsgdmFsdWU6IGNvdmVyT2Zmc2V0VW5pZm9ybSB9LAoJCQl1RGVuc2l0eTogeyB2YWx1ZTogZGVuc2l0eSB9LAoJCQl1U3RyZW5ndGg6IHsgdmFsdWU6IHN0cmVuZ3RoIH0sCgkJCXVDb2xvcjogeyB2YWx1ZTogY29sb3JVbmlmb3JtIH0sCgkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IGJhY2tncm91bmRDb2xvclVuaWZvcm0gfSwKCQl9OwoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQlsZXQgZGlzcG9zZWQgPSBmYWxzZTsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKGRpc3Bvc2VkIHx8IHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJaW1hZ2VXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoIHx8IDE7CgkJCQlpbWFnZUhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMTsKCQkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCQkJfTsKCQkJaW1nLnNyYyA9IHNvdXJjZTsKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtLCBmcnVzdHVtQ3VsbGVkOiBmYWxzZSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJY2FudmFzV2lkdGggPSB3aWR0aDsKCQkJY2FudmFzSGVpZ2h0ID0gaGVpZ2h0OwoJCQlyZXNvbHV0aW9uVW5pZm9ybS5zZXQod2lkdGgsIGhlaWdodCk7CgkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCQl9OwoKCQlyZXNpemUoKTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJZGlzcG9zZWQgPSB0cnVlOwoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlzZXRJbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJcHJvZ3JhbS5yZW1vdmUoKTsKCQkJZ2VvbWV0cnkucmVtb3ZlKCk7CgkJCWlmIChpbWFnZVRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZShpbWFnZVRleHR1cmUudGV4dHVyZSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "utils/cn.ts": "aW1wb3J0IHsgdHlwZSBDbGFzc1ZhbHVlLCBjbHN4IH0gZnJvbSAiY2xzeCI7CmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICJ0YWlsd2luZC1tZXJnZSI7CgpleHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHsKCXJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSk7Cn0K", - "components/card-3d/Card3D.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0NhcmQzRFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgRmFjZVRyYWNrZXIgZnJvbSAiLi9DYXJkM0RGYWNlVHJhY2tlci5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgeyBOb1RvbmVNYXBwaW5nIH0gZnJvbSAidGhyZWUiOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogV2lkdGggb2YgdGhlIGNhcmQuCgkJICogQGRlZmF1bHQgMy4yCgkJICovCgkJd2lkdGg/OiBTY2VuZVByb3BzWyJ3aWR0aCJdOwoJCS8qKgoJCSAqIEhlaWdodCBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJaGVpZ2h0PzogU2NlbmVQcm9wc1siaGVpZ2h0Il07CgkJLyoqCgkJICogRGVwdGgvdGhpY2tuZXNzIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDAuMDgKCQkgKi8KCQlkZXB0aD86IFNjZW5lUHJvcHNbImRlcHRoIl07CgkJLyoqCgkJICogQ29ybmVyIHJhZGl1cyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJcmFkaXVzPzogU2NlbmVQcm9wc1sicmFkaXVzIl07CgkJLyoqCgkJICogU2hvdyB0aGUgY2FtZXJhIHByZXZpZXcgd2hlbiB0cmFja2luZyBpcyBlbmFibGVkLgoJCSAqIEBkZWZhdWx0IGZhbHNlCgkJICovCgkJc2hvd1ByZXZpZXc/OiBib29sZWFuOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWltYWdlLAoJCXdpZHRoID0gMy4yLAoJCWhlaWdodCA9IDIsCgkJZGVwdGggPSAwLjA4LAoJCXJhZGl1cyA9IDAuMTUsCgkJc2hvd1ByZXZpZXcgPSBmYWxzZSwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBoZWFkUG9zaXRpb24gPSAkc3RhdGUoeyB4OiAwLCB5OiAwLCB6OiAwIH0pOwoKCWZ1bmN0aW9uIGhhbmRsZUhlYWRNb3ZlKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSkgewoJCWhlYWRQb3NpdGlvbiA9IHBvc2l0aW9uOwoJfQoKCWNvbnN0IGRwciA9IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8Q2FudmFzIHtkcHJ9IHRvbmVNYXBwaW5nPXtOb1RvbmVNYXBwaW5nfT4KCQkJPFNjZW5lIHtpbWFnZX0ge3dpZHRofSB7aGVpZ2h0fSB7ZGVwdGh9IHtyYWRpdXN9IHtoZWFkUG9zaXRpb259IC8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cgo8RmFjZVRyYWNrZXIgb25IZWFkTW92ZT17aGFuZGxlSGVhZE1vdmV9IHtzaG93UHJldmlld30gLz4K", - "components/card-3d/Card3DScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCglpbnRlcmZhY2UgSGVhZFBvc2l0aW9uIHsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCXo6IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCWltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogV2lkdGggb2YgdGhlIGNhcmQuCgkJICogQGRlZmF1bHQgMy4yCgkJICovCgkJd2lkdGg/OiBudW1iZXI7CgkJLyoqCgkJICogSGVpZ2h0IG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDIKCQkgKi8KCQloZWlnaHQ/OiBudW1iZXI7CgkJLyoqCgkJICogRGVwdGgvdGhpY2tuZXNzIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDAuMDgKCQkgKi8KCQlkZXB0aD86IG51bWJlcjsKCQkvKioKCQkgKiBDb3JuZXIgcmFkaXVzIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDAuMTUKCQkgKi8KCQlyYWRpdXM/OiBudW1iZXI7CgkJLyoqCgkJICogSGVhZCBwb3NpdGlvbiBmb3IgcGFyYWxsYXggZWZmZWN0LgoJCSAqLwoJCWhlYWRQb3NpdGlvbj86IEhlYWRQb3NpdGlvbjsKCX0KCglsZXQgewoJCWltYWdlLAoJCXdpZHRoID0gMy4yLAoJCWhlaWdodCA9IDIsCgkJZGVwdGggPSAwLjA4LAoJCXJhZGl1cyA9IDAuMTUsCgkJaGVhZFBvc2l0aW9uID0geyB4OiAwLCB5OiAwLCB6OiAwIH0sCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IGluaXRpYWxDYW1lcmFQb3NpdGlvbiA9IHsgeDogMCwgeTogMCwgejogNSB9OwoKCWxldCBzbW9vdGhlZFJvdGF0aW9uID0gJHN0YXRlKHsgeDogMCwgeTogMCB9KTsKCgljb25zdCBsZXJwRmFjdG9yID0gMC4xOwoKCXVzZVRhc2soKCkgPT4gewoJCWNvbnN0IHRhcmdldFJvdGF0aW9uWSA9IC1oZWFkUG9zaXRpb24ueCAqIDAuNTsKCQljb25zdCB0YXJnZXRSb3RhdGlvblggPSBoZWFkUG9zaXRpb24ueSAqIDAuNDsKCgkJc21vb3RoZWRSb3RhdGlvbi54ICs9ICh0YXJnZXRSb3RhdGlvblggLSBzbW9vdGhlZFJvdGF0aW9uLngpICogbGVycEZhY3RvcjsKCQlzbW9vdGhlZFJvdGF0aW9uLnkgKz0gKHRhcmdldFJvdGF0aW9uWSAtIHNtb290aGVkUm90YXRpb24ueSkgKiBsZXJwRmFjdG9yOwoJfSk7CgoJZnVuY3Rpb24gY3JlYXRlUm91bmRlZFJlY3RTaGFwZSgKCQl3OiBudW1iZXIsCgkJaDogbnVtYmVyLAoJCXI6IG51bWJlciwKCSk6IFRIUkVFLlNoYXBlIHsKCQljb25zdCBzaGFwZSA9IG5ldyBUSFJFRS5TaGFwZSgpOwoKCQljb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1pbih3LCBoKSAvIDI7CgkJY29uc3QgY2xhbXBlZFJhZGl1cyA9IE1hdGgubWluKHIsIG1heFJhZGl1cyk7CgoJCWNvbnN0IGhhbGZXID0gdyAvIDI7CgkJY29uc3QgaGFsZkggPSBoIC8gMjsKCgkJc2hhcGUubW92ZVRvKC1oYWxmVyArIGNsYW1wZWRSYWRpdXMsIC1oYWxmSCk7CgkJc2hhcGUubGluZVRvKGhhbGZXIC0gY2xhbXBlZFJhZGl1cywgLWhhbGZIKTsKCQlzaGFwZS5xdWFkcmF0aWNDdXJ2ZVRvKGhhbGZXLCAtaGFsZkgsIGhhbGZXLCAtaGFsZkggKyBjbGFtcGVkUmFkaXVzKTsKCQlzaGFwZS5saW5lVG8oaGFsZlcsIGhhbGZIIC0gY2xhbXBlZFJhZGl1cyk7CgkJc2hhcGUucXVhZHJhdGljQ3VydmVUbyhoYWxmVywgaGFsZkgsIGhhbGZXIC0gY2xhbXBlZFJhZGl1cywgaGFsZkgpOwoJCXNoYXBlLmxpbmVUbygtaGFsZlcgKyBjbGFtcGVkUmFkaXVzLCBoYWxmSCk7CgkJc2hhcGUucXVhZHJhdGljQ3VydmVUbygtaGFsZlcsIGhhbGZILCAtaGFsZlcsIGhhbGZIIC0gY2xhbXBlZFJhZGl1cyk7CgkJc2hhcGUubGluZVRvKC1oYWxmVywgLWhhbGZIICsgY2xhbXBlZFJhZGl1cyk7CgkJc2hhcGUucXVhZHJhdGljQ3VydmVUbygtaGFsZlcsIC1oYWxmSCwgLWhhbGZXICsgY2xhbXBlZFJhZGl1cywgLWhhbGZIKTsKCgkJcmV0dXJuIHNoYXBlOwoJfQoKCWxldCBnZW9tZXRyeSA9ICRkZXJpdmVkLmJ5KCgpID0+IHsKCQljb25zdCBzaGFwZSA9IGNyZWF0ZVJvdW5kZWRSZWN0U2hhcGUod2lkdGgsIGhlaWdodCwgcmFkaXVzKTsKCgkJY29uc3QgZXh0cnVkZVNldHRpbmdzOiBUSFJFRS5FeHRydWRlR2VvbWV0cnlPcHRpb25zID0gewoJCQlkZXB0aDogZGVwdGgsCgkJCWJldmVsRW5hYmxlZDogZmFsc2UsCgkJCWN1cnZlU2VnbWVudHM6IDE2LAoJCX07CgoJCWNvbnN0IGdlbyA9IG5ldyBUSFJFRS5FeHRydWRlR2VvbWV0cnkoc2hhcGUsIGV4dHJ1ZGVTZXR0aW5ncyk7CgoJCS8vIENlbnRlciB0aGUgZ2VvbWV0cnkgb24gWiBheGlzCgkJZ2VvLnRyYW5zbGF0ZSgwLCAwLCAtZGVwdGggLyAyKTsKCgkJLy8gVVYgbWFwcGluZyB3aWxsIGJlIGFwcGxpZWQgYWZ0ZXIgdGV4dHVyZSBsb2FkcyAodG8gZ2V0IGltYWdlIGFzcGVjdCByYXRpbykKCQlyZXR1cm4gZ2VvOwoJfSk7CgoJY29uc3QgdGV4dHVyZSA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUoaW1hZ2UsIHsKCQkJdHJhbnNmb3JtOiAodGV4KSA9PiB7CgkJCQl0ZXguY29sb3JTcGFjZSA9IFRIUkVFLlNSR0JDb2xvclNwYWNlOwoJCQkJcmV0dXJuIHRleDsKCQkJfSwKCQl9KSwKCSk7CgoJLy8gQXBwbHkgb2JqZWN0LWNvdmVyIFVWIG1hcHBpbmcgd2hlbiB0ZXh0dXJlIGlzIGxvYWRlZAoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCEkdGV4dHVyZSB8fCAhZ2VvbWV0cnkpIHJldHVybjsKCgkJY29uc3QgaW1hZ2VBc3BlY3QgPSAkdGV4dHVyZS5pbWFnZS53aWR0aCAvICR0ZXh0dXJlLmltYWdlLmhlaWdodDsKCQljb25zdCBjYXJkQXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7CgoJCWNvbnN0IHV2QXR0cmlidXRlID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djsKCQljb25zdCBwb3NpdGlvbkF0dHJpYnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CgkJY29uc3Qgbm9ybWFsQXR0cmlidXRlID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7CgoJCS8vIENhbGN1bGF0ZSBzY2FsZSBhbmQgb2Zmc2V0IGZvciAiY292ZXIiIGJlaGF2aW9yCgkJbGV0IHNjYWxlVSA9IDE7CgkJbGV0IHNjYWxlViA9IDE7CgkJbGV0IG9mZnNldFUgPSAwOwoJCWxldCBvZmZzZXRWID0gMDsKCgkJaWYgKGNhcmRBc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQkvLyBDYXJkIGlzIHdpZGVyIHRoYW4gaW1hZ2UgLSBjcm9wIHRvcC9ib3R0b20KCQkJc2NhbGVWID0gaW1hZ2VBc3BlY3QgLyBjYXJkQXNwZWN0OwoJCQlvZmZzZXRWID0gKDEgLSBzY2FsZVYpIC8gMjsKCQl9IGVsc2UgewoJCQkvLyBDYXJkIGlzIHRhbGxlciB0aGFuIGltYWdlIC0gY3JvcCBsZWZ0L3JpZ2h0CgkJCXNjYWxlVSA9IGNhcmRBc3BlY3QgLyBpbWFnZUFzcGVjdDsKCQkJb2Zmc2V0VSA9ICgxIC0gc2NhbGVVKSAvIDI7CgkJfQoKCQlmb3IgKGxldCBpID0gMDsgaSA8IHV2QXR0cmlidXRlLmNvdW50OyBpKyspIHsKCQkJY29uc3QgbnogPSBub3JtYWxBdHRyaWJ1dGUuZ2V0WihpKTsKCgkJCS8vIE9ubHkgcmVtYXAgVVZzIGZvciBmcm9udCBmYWNlIChueiA+IDAuOSkgYW5kIGJhY2sgZmFjZSAobnogPCAtMC45KQoJCQlpZiAoTWF0aC5hYnMobnopID4gMC45KSB7CgkJCQljb25zdCB4ID0gcG9zaXRpb25BdHRyaWJ1dGUuZ2V0WChpKTsKCQkJCWNvbnN0IHkgPSBwb3NpdGlvbkF0dHJpYnV0ZS5nZXRZKGkpOwoKCQkJCS8vIE1hcCBwb3NpdGlvbiB0byAwLTEgcmFuZ2UKCQkJCWxldCB1ID0gKHggKyB3aWR0aCAvIDIpIC8gd2lkdGg7CgkJCQlsZXQgdiA9ICh5ICsgaGVpZ2h0IC8gMikgLyBoZWlnaHQ7CgoJCQkJLy8gQXBwbHkgY292ZXIgc2NhbGluZyBhbmQgb2Zmc2V0CgkJCQl1ID0gdSAqIHNjYWxlVSArIG9mZnNldFU7CgkJCQl2ID0gdiAqIHNjYWxlViArIG9mZnNldFY7CgoJCQkJdXZBdHRyaWJ1dGUuc2V0WFkoaSwgdSwgdik7CgkJCX0KCQl9CgoJCXV2QXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCX0pOwoKCWxldCBtYXRlcmlhbCA9ICRzdGF0ZTxUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCB8IG51bGw+KG51bGwpOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICgkdGV4dHVyZSkgewoJCQltYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7CgkJCQltYXA6ICR0ZXh0dXJlLAoJCQl9KTsKCQl9Cgl9KTsKPC9zY3JpcHQ+Cgo8VC5QZXJzcGVjdGl2ZUNhbWVyYQoJbWFrZURlZmF1bHQKCXBvc2l0aW9uPXtbCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLngsCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLnksCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLnosCgldfQoJZm92PXs1MH0KLz4KCjxULkdyb3VwIHJvdGF0aW9uLng9e3Ntb290aGVkUm90YXRpb24ueH0gcm90YXRpb24ueT17c21vb3RoZWRSb3RhdGlvbi55fT4KCXsjaWYgbWF0ZXJpYWx9CgkJPFQuTWVzaCB7Z2VvbWV0cnl9IHttYXRlcmlhbH0gLz4KCXsvaWZ9CjwvVC5Hcm91cD4K", + "components/card-3d/Card3D.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9DYXJkM0RTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IEZhY2VUcmFja2VyIGZyb20gIi4vQ2FyZDNERmFjZVRyYWNrZXIuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogV2lkdGggb2YgdGhlIGNhcmQuCgkJICogQGRlZmF1bHQgMy4yCgkJICovCgkJd2lkdGg/OiBTY2VuZVByb3BzWyJ3aWR0aCJdOwoJCS8qKgoJCSAqIEhlaWdodCBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJaGVpZ2h0PzogU2NlbmVQcm9wc1siaGVpZ2h0Il07CgkJLyoqCgkJICogRGVwdGgvdGhpY2tuZXNzIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDAuMDgKCQkgKi8KCQlkZXB0aD86IFNjZW5lUHJvcHNbImRlcHRoIl07CgkJLyoqCgkJICogQ29ybmVyIHJhZGl1cyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJcmFkaXVzPzogU2NlbmVQcm9wc1sicmFkaXVzIl07CgkJLyoqCgkJICogU2hvdyB0aGUgY2FtZXJhIHByZXZpZXcgd2hlbiB0cmFja2luZyBpcyBlbmFibGVkLgoJCSAqIEBkZWZhdWx0IGZhbHNlCgkJICovCgkJc2hvd1ByZXZpZXc/OiBib29sZWFuOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWltYWdlLAoJCXdpZHRoID0gMy4yLAoJCWhlaWdodCA9IDIsCgkJZGVwdGggPSAwLjA4LAoJCXJhZGl1cyA9IDAuMTUsCgkJc2hvd1ByZXZpZXcgPSBmYWxzZSwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBoZWFkUG9zaXRpb24gPSAkc3RhdGUoeyB4OiAwLCB5OiAwLCB6OiAwIH0pOwoKCWZ1bmN0aW9uIGhhbmRsZUhlYWRNb3ZlKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSkgewoJCWhlYWRQb3NpdGlvbiA9IHBvc2l0aW9uOwoJfQo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUge2ltYWdlfSB7d2lkdGh9IHtoZWlnaHR9IHtkZXB0aH0ge3JhZGl1c30ge2hlYWRQb3NpdGlvbn0gLz4KCTwvZGl2Pgo8L2Rpdj4KCjxGYWNlVHJhY2tlciBvbkhlYWRNb3ZlPXtoYW5kbGVIZWFkTW92ZX0ge3Nob3dQcmV2aWV3fSAvPgo=", + "components/card-3d/Card3DScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQm94LAoJCUNhbWVyYSwKCQlNZXNoLAoJCVByb2dyYW0sCgkJUmVuZGVyZXIsCgkJVGV4dHVyZSwKCQlUcmFuc2Zvcm0sCgl9IGZyb20gIm9nbCI7CgoJaW50ZXJmYWNlIEhlYWRQb3NpdGlvbiB7CgkJeDogbnVtYmVyOwoJCXk6IG51bWJlcjsKCQl6OiBudW1iZXI7Cgl9CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIFdpZHRoIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDMuMgoJCSAqLwoJCXdpZHRoPzogbnVtYmVyOwoJCS8qKgoJCSAqIEhlaWdodCBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJaGVpZ2h0PzogbnVtYmVyOwoJCS8qKgoJCSAqIERlcHRoL3RoaWNrbmVzcyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjA4CgkJICovCgkJZGVwdGg/OiBudW1iZXI7CgkJLyoqCgkJICogQ29ybmVyIHJhZGl1cyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJcmFkaXVzPzogbnVtYmVyOwoJCS8qKgoJCSAqIEhlYWQgcG9zaXRpb24gZm9yIHBhcmFsbGF4IGVmZmVjdC4KCQkgKi8KCQloZWFkUG9zaXRpb24/OiBIZWFkUG9zaXRpb247Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQl3aWR0aCA9IDMuMiwKCQloZWlnaHQgPSAyLAoJCWRlcHRoID0gMC4wOCwKCQlyYWRpdXMgPSAwLjE1LAoJCWhlYWRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCwgejogMCB9LAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHNldERpbWVuc2lvbnMgPQoJCSRzdGF0ZTwKCQkJKG5leHQ6IHsKCQkJCXdpZHRoOiBudW1iZXI7CgkJCQloZWlnaHQ6IG51bWJlcjsKCQkJCWRlcHRoOiBudW1iZXI7CgkJCQlyYWRpdXM6IG51bWJlcjsKCQkJfSkgPT4gdm9pZAoJCT4oKTsKCWxldCBzZXRJbWFnZVNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgaW5pdGlhbENhbWVyYVBvc2l0aW9uID0geyB4OiAwLCB5OiAwLCB6OiA1IH07Cgljb25zdCBsZXJwRmFjdG9yID0gMC4xOwoJbGV0IHNtb290aGVkUm90YXRpb24gPSB7IHg6IDAsIHk6IDAgfTsKCgljb25zdCBjcmVhdGVSb3VuZGVkQ2FyZEdlb21ldHJ5ID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQljYXJkV2lkdGg6IG51bWJlciwKCQljYXJkSGVpZ2h0OiBudW1iZXIsCgkJY2FyZERlcHRoOiBudW1iZXIsCgkJY2FyZFJhZGl1czogbnVtYmVyLAoJKSA9PiB7CgkJY29uc3Qgd2lkdGhTZWdtZW50cyA9IE1hdGgubWF4KDEyLCBNYXRoLnJvdW5kKGNhcmRXaWR0aCAqIDEwKSk7CgkJY29uc3QgaGVpZ2h0U2VnbWVudHMgPSBNYXRoLm1heCgxMiwgTWF0aC5yb3VuZChjYXJkSGVpZ2h0ICogMTApKTsKCQljb25zdCBkZXB0aFNlZ21lbnRzID0gMjsKCgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgQm94KGdsLCB7CgkJCXdpZHRoOiBjYXJkV2lkdGgsCgkJCWhlaWdodDogY2FyZEhlaWdodCwKCQkJZGVwdGg6IGNhcmREZXB0aCwKCQkJd2lkdGhTZWdtZW50cywKCQkJaGVpZ2h0U2VnbWVudHMsCgkJCWRlcHRoU2VnbWVudHMsCgkJfSk7CgoJCWNvbnN0IHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CgkJY29uc3Qgbm9ybWFsQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsOwoJCWNvbnN0IHBvc2l0aW9ucyA9IHBvc2l0aW9uQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCQljb25zdCBub3JtYWxzID0gbm9ybWFsQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCgkJY29uc3QgaGFsZlcgPSBjYXJkV2lkdGggKiAwLjU7CgkJY29uc3QgaGFsZkggPSBjYXJkSGVpZ2h0ICogMC41OwoJCWNvbnN0IHJvdW5kZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYXJkUmFkaXVzLCBoYWxmVywgaGFsZkgpKTsKCQljb25zdCBpbm5lclcgPSBNYXRoLm1heCgwLCBoYWxmVyAtIHJvdW5kZWQpOwoJCWNvbnN0IGlubmVySCA9IE1hdGgubWF4KDAsIGhhbGZIIC0gcm91bmRlZCk7CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAzKSB7CgkJCWNvbnN0IHggPSBwb3NpdGlvbnNbaV07CgkJCWNvbnN0IHkgPSBwb3NpdGlvbnNbaSArIDFdOwoJCQljb25zdCB6ID0gcG9zaXRpb25zW2kgKyAyXTsKCgkJCWNvbnN0IHN4ID0geCA8IDAgPyAtMSA6IDE7CgkJCWNvbnN0IHN5ID0geSA8IDAgPyAtMSA6IDE7CgoJCQljb25zdCBheCA9IE1hdGguYWJzKHgpOwoJCQljb25zdCBheSA9IE1hdGguYWJzKHkpOwoKCQkJY29uc3QgcXggPSBNYXRoLm1heChheCAtIGlubmVyVywgMCk7CgkJCWNvbnN0IHF5ID0gTWF0aC5tYXgoYXkgLSBpbm5lckgsIDApOwoJCQljb25zdCBxTGVuID0gTWF0aC5oeXBvdChxeCwgcXkpOwoKCQkJbGV0IG54TG9jYWwgPSAwOwoJCQlsZXQgbnlMb2NhbCA9IDA7CgoJCQlpZiAocUxlbiA+IDFlLTYpIHsKCQkJCW54TG9jYWwgPSBxeCAvIHFMZW47CgkJCQlueUxvY2FsID0gcXkgLyBxTGVuOwoJCQl9IGVsc2UgaWYgKGF4ID49IGF5KSB7CgkJCQlueExvY2FsID0gMTsKCQkJfSBlbHNlIHsKCQkJCW55TG9jYWwgPSAxOwoJCQl9CgoJCQlwb3NpdGlvbnNbaV0gPSBzeCAqIGlubmVyVyArIG54TG9jYWwgKiBzeCAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMV0gPSBzeSAqIGlubmVySCArIG55TG9jYWwgKiBzeSAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMl0gPSB6OwoKCQkJaWYgKE1hdGguYWJzKG5vcm1hbHNbaSArIDJdKSA+IDAuOSkgewoJCQkJbm9ybWFsc1tpXSA9IDA7CgkJCQlub3JtYWxzW2kgKyAxXSA9IDA7CgkJCQlub3JtYWxzW2kgKyAyXSA9IG5vcm1hbHNbaSArIDJdID4gMCA/IDEgOiAtMTsKCQkJfSBlbHNlIHsKCQkJCW5vcm1hbHNbaV0gPSBueExvY2FsICogc3g7CgkJCQlub3JtYWxzW2kgKyAxXSA9IG55TG9jYWwgKiBzeTsKCQkJCW5vcm1hbHNbaSArIDJdID0gMDsKCQkJfQoJCX0KCgkJcG9zaXRpb25BdHRyLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQlub3JtYWxBdHRyLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQlyZXR1cm4gZ2VvbWV0cnk7Cgl9OwoKCWNvbnN0IGFwcGx5Q292ZXJVVk1hcHBpbmcgPSAoCgkJZ2VvbWV0cnk6IEJveCwKCQljYXJkV2lkdGg6IG51bWJlciwKCQljYXJkSGVpZ2h0OiBudW1iZXIsCgkJaW1hZ2VXaWR0aDogbnVtYmVyLAoJCWltYWdlSGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQljb25zdCB1dkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnV2OwoJCWNvbnN0IHBvc0F0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOwoJCWNvbnN0IG5vcm1hbEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDsKCQlpZiAoIXV2QXR0ciB8fCAhcG9zQXR0ciB8fCAhbm9ybWFsQXR0cikgcmV0dXJuOwoKCQljb25zdCB1dnMgPSB1dkF0dHIuZGF0YSBhcyBGbG9hdDMyQXJyYXk7CgkJY29uc3QgcG9zaXRpb25zID0gcG9zQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCQljb25zdCBub3JtYWxzID0gbm9ybWFsQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCgkJY29uc3QgaW1hZ2VBc3BlY3QgPSBNYXRoLm1heCgxZS02LCBpbWFnZVdpZHRoIC8gaW1hZ2VIZWlnaHQpOwoJCWNvbnN0IGNhcmRBc3BlY3QgPSBNYXRoLm1heCgxZS02LCBjYXJkV2lkdGggLyBjYXJkSGVpZ2h0KTsKCgkJbGV0IHNjYWxlVSA9IDE7CgkJbGV0IHNjYWxlViA9IDE7CgkJbGV0IG9mZnNldFUgPSAwOwoJCWxldCBvZmZzZXRWID0gMDsKCgkJaWYgKGNhcmRBc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQlzY2FsZVYgPSBpbWFnZUFzcGVjdCAvIGNhcmRBc3BlY3Q7CgkJCW9mZnNldFYgPSAoMSAtIHNjYWxlVikgKiAwLjU7CgkJfSBlbHNlIHsKCQkJc2NhbGVVID0gY2FyZEFzcGVjdCAvIGltYWdlQXNwZWN0OwoJCQlvZmZzZXRVID0gKDEgLSBzY2FsZVUpICogMC41OwoJCX0KCgkJY29uc3QgY291bnQgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMzsKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3QgbmkgPSBpICogMzsKCQkJY29uc3QgdWkgPSBpICogMjsKCgkJCWlmIChNYXRoLmFicyhub3JtYWxzW25pICsgMl0pIDw9IDAuOSkgY29udGludWU7CgoJCQljb25zdCB4ID0gcG9zaXRpb25zW25pXTsKCQkJY29uc3QgeSA9IHBvc2l0aW9uc1tuaSArIDFdOwoJCQlsZXQgdSA9ICh4ICsgY2FyZFdpZHRoICogMC41KSAvIGNhcmRXaWR0aDsKCQkJbGV0IHYgPSAoeSArIGNhcmRIZWlnaHQgKiAwLjUpIC8gY2FyZEhlaWdodDsKCgkJCXUgPSB1ICogc2NhbGVVICsgb2Zmc2V0VTsKCQkJdiA9IHYgKiBzY2FsZVYgKyBvZmZzZXRWOwoKCQkJdXZzW3VpXSA9IHU7CgkJCXV2c1t1aSArIDFdID0gdjsKCQl9CgoJCXV2QXR0ci5uZWVkc1VwZGF0ZSA9IHRydWU7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0RGltZW5zaW9ucykgcmV0dXJuOwoJCXNldERpbWVuc2lvbnMoeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgcmFkaXVzIH0pOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRJbWFnZVNvdXJjZSkgcmV0dXJuOwoJCXNldEltYWdlU291cmNlKGltYWdlKTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJYW50aWFsaWFzOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCwgewoJCQlmb3Y6IDUwLAoJCQlhc3BlY3Q6IDEsCgkJCW5lYXI6IDAuMSwKCQkJZmFyOiAxMDAsCgkJfSk7CgkJY2FtZXJhLnBvc2l0aW9uLnNldCgKCQkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLngsCgkJCWluaXRpYWxDYW1lcmFQb3NpdGlvbi55LAoJCQlpbml0aWFsQ2FtZXJhUG9zaXRpb24ueiwKCQkpOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBncm91cCA9IG5ldyBUcmFuc2Zvcm0oKTsKCQlncm91cC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJZmxpcFk6IHRydWUsCgkJfSk7CgoJCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoKCQkJdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsKCQkJdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7CgoJCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQkJdm9pZCBtYWluKCkgewoJCQkJdlV2ID0gdXY7CgkJCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJCQl9CgkJYDsKCgkJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwoJCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQkJdm9pZCBtYWluKCkgewoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVUZXh0dXJlLCB2VXYpOwoJCQl9CgkJYDsKCgkJY29uc3QgdW5pZm9ybXMgPSB7CgkJCXVUZXh0dXJlOiB7IHZhbHVlOiB0ZXh0dXJlIH0sCgkJfTsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogZmFsc2UsCgkJCWRlcHRoVGVzdDogdHJ1ZSwKCQkJZGVwdGhXcml0ZTogdHJ1ZSwKCQl9KTsKCgkJbGV0IGNhcmRXaWR0aCA9IHdpZHRoOwoJCWxldCBjYXJkSGVpZ2h0ID0gaGVpZ2h0OwoJCWxldCBjYXJkRGVwdGggPSBkZXB0aDsKCQlsZXQgY2FyZFJhZGl1cyA9IHJhZGl1czsKCQlsZXQgaW1hZ2VXaWR0aCA9IDE7CgkJbGV0IGltYWdlSGVpZ2h0ID0gMTsKCgkJbGV0IGdlb21ldHJ5ID0gY3JlYXRlUm91bmRlZENhcmRHZW9tZXRyeSgKCQkJZ2wsCgkJCU1hdGgubWF4KDAuMDAxLCBjYXJkV2lkdGgpLAoJCQlNYXRoLm1heCgwLjAwMSwgY2FyZEhlaWdodCksCgkJCU1hdGgubWF4KDAuMDAwMSwgY2FyZERlcHRoKSwKCQkJTWF0aC5tYXgoMCwgY2FyZFJhZGl1cyksCgkJKTsKCQlhcHBseUNvdmVyVVZNYXBwaW5nKAoJCQlnZW9tZXRyeSwKCQkJY2FyZFdpZHRoLAoJCQljYXJkSGVpZ2h0LAoJCQlpbWFnZVdpZHRoLAoJCQlpbWFnZUhlaWdodCwKCQkpOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJZ2VvbWV0cnksCgkJCXByb2dyYW0sCgkJCWZydXN0dW1DdWxsZWQ6IGZhbHNlLAoJCX0pOwoJCW1lc2guc2V0UGFyZW50KGdyb3VwKTsKCgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJdGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWltYWdlV2lkdGggPSBpbWcubmF0dXJhbFdpZHRoIHx8IGltZy53aWR0aCB8fCAxOwoJCQkJaW1hZ2VIZWlnaHQgPSBpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcuaGVpZ2h0IHx8IDE7CgkJCQlhcHBseUNvdmVyVVZNYXBwaW5nKAoJCQkJCWdlb21ldHJ5LAoJCQkJCWNhcmRXaWR0aCwKCQkJCQljYXJkSGVpZ2h0LAoJCQkJCWltYWdlV2lkdGgsCgkJCQkJaW1hZ2VIZWlnaHQsCgkJCQkpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgkJc2V0SW1hZ2VTb3VyY2UgPSBsb2FkSW1hZ2U7CgoJCWNvbnN0IHVwZGF0ZURpbWVuc2lvbnMgPSAobmV4dDogewoJCQl3aWR0aDogbnVtYmVyOwoJCQloZWlnaHQ6IG51bWJlcjsKCQkJZGVwdGg6IG51bWJlcjsKCQkJcmFkaXVzOiBudW1iZXI7CgkJfSkgPT4gewoJCQljb25zdCBuZXh0V2lkdGggPSBNYXRoLm1heCgwLjAwMSwgbmV4dC53aWR0aCk7CgkJCWNvbnN0IG5leHRIZWlnaHQgPSBNYXRoLm1heCgwLjAwMSwgbmV4dC5oZWlnaHQpOwoJCQljb25zdCBuZXh0RGVwdGggPSBNYXRoLm1heCgwLjAwMDEsIG5leHQuZGVwdGgpOwoJCQljb25zdCBuZXh0UmFkaXVzID0gTWF0aC5tYXgoMCwgbmV4dC5yYWRpdXMpOwoKCQkJY29uc3QgbmVlZHNSZWJ1aWxkID0KCQkJCW5leHRXaWR0aCAhPT0gY2FyZFdpZHRoIHx8CgkJCQluZXh0SGVpZ2h0ICE9PSBjYXJkSGVpZ2h0IHx8CgkJCQluZXh0RGVwdGggIT09IGNhcmREZXB0aCB8fAoJCQkJbmV4dFJhZGl1cyAhPT0gY2FyZFJhZGl1czsKCgkJCWNhcmRXaWR0aCA9IG5leHRXaWR0aDsKCQkJY2FyZEhlaWdodCA9IG5leHRIZWlnaHQ7CgkJCWNhcmREZXB0aCA9IG5leHREZXB0aDsKCQkJY2FyZFJhZGl1cyA9IG5leHRSYWRpdXM7CgoJCQlpZiAoIW5lZWRzUmVidWlsZCkgcmV0dXJuOwoKCQkJY29uc3QgcHJldmlvdXNHZW9tZXRyeSA9IGdlb21ldHJ5OwoJCQlnZW9tZXRyeSA9IGNyZWF0ZVJvdW5kZWRDYXJkR2VvbWV0cnkoCgkJCQlnbCwKCQkJCWNhcmRXaWR0aCwKCQkJCWNhcmRIZWlnaHQsCgkJCQljYXJkRGVwdGgsCgkJCQljYXJkUmFkaXVzLAoJCQkpOwoJCQlhcHBseUNvdmVyVVZNYXBwaW5nKAoJCQkJZ2VvbWV0cnksCgkJCQljYXJkV2lkdGgsCgkJCQljYXJkSGVpZ2h0LAoJCQkJaW1hZ2VXaWR0aCwKCQkJCWltYWdlSGVpZ2h0LAoJCQkpOwoJCQltZXNoLmdlb21ldHJ5ID0gZ2VvbWV0cnk7CgkJCXByZXZpb3VzR2VvbWV0cnkucmVtb3ZlKCk7CgkJfTsKCQlzZXREaW1lbnNpb25zID0gdXBkYXRlRGltZW5zaW9uczsKCQl1cGRhdGVEaW1lbnNpb25zKHsgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHJhZGl1cyB9KTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgbmV4dEhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKG5leHRXaWR0aCwgbmV4dEhlaWdodCk7CgkJCWNhbWVyYS5wZXJzcGVjdGl2ZSh7CgkJCQlmb3Y6IDUwLAoJCQkJYXNwZWN0OiBuZXh0V2lkdGggLyBNYXRoLm1heCgxLCBuZXh0SGVpZ2h0KSwKCQkJCW5lYXI6IDAuMSwKCQkJCWZhcjogMTAwLAoJCQl9KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQljb25zdCB0YXJnZXRSb3RhdGlvblkgPSAtaGVhZFBvc2l0aW9uLnggKiAwLjU7CgkJCWNvbnN0IHRhcmdldFJvdGF0aW9uWCA9IGhlYWRQb3NpdGlvbi55ICogMC40OwoKCQkJc21vb3RoZWRSb3RhdGlvbi54ICs9ICh0YXJnZXRSb3RhdGlvblggLSBzbW9vdGhlZFJvdGF0aW9uLngpICogbGVycEZhY3RvcjsKCQkJc21vb3RoZWRSb3RhdGlvbi55ICs9ICh0YXJnZXRSb3RhdGlvblkgLSBzbW9vdGhlZFJvdGF0aW9uLnkpICogbGVycEZhY3RvcjsKCgkJCWdyb3VwLnJvdGF0aW9uLnggPSBzbW9vdGhlZFJvdGF0aW9uLng7CgkJCWdyb3VwLnJvdGF0aW9uLnkgPSBzbW9vdGhlZFJvdGF0aW9uLnk7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhLCBjbGVhcjogdHJ1ZSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlzZXREaW1lbnNpb25zID0gdW5kZWZpbmVkOwoJCQlzZXRJbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCgkJCWlmICh0ZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZS50ZXh0dXJlKTsKCQkJcHJvZ3JhbS5yZW1vdmUoKTsKCQkJZ2VvbWV0cnkucmVtb3ZlKCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/card-3d/Card3DFaceTracker.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50LCBvbkRlc3Ryb3kgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgRmFjZUxhbmRtYXJrZXIsIEZpbGVzZXRSZXNvbHZlciB9IGZyb20gIkBtZWRpYXBpcGUvdGFza3MtdmlzaW9uIjsKCWltcG9ydCB7IHBvcnRhbCB9IGZyb20gIi4uL3V0aWxzL3VzZS1wb3J0YWwiOwoKCWludGVyZmFjZSBIZWFkUG9zaXRpb24gewoJCXg6IG51bWJlcjsKCQl5OiBudW1iZXI7CgkJejogbnVtYmVyOwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBoZWFkIHBvc2l0aW9uIGNoYW5nZXMuCgkJICovCgkJb25IZWFkTW92ZTogKHBvc2l0aW9uOiBIZWFkUG9zaXRpb24pID0+IHZvaWQ7CgkJLyoqCgkJICogV2hldGhlciB0byBzaG93IHRoZSB2aWRlbyBwcmV2aWV3LgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlzaG93UHJldmlldz86IGJvb2xlYW47CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCX0KCglsZXQgewoJCW9uSGVhZE1vdmUsCgkJc2hvd1ByZXZpZXcgPSB0cnVlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IHZpZGVvID0gJHN0YXRlPEhUTUxWaWRlb0VsZW1lbnQ+KCk7CglsZXQgZmFjZUxhbmRtYXJrZXI6IEZhY2VMYW5kbWFya2VyIHwgbnVsbCA9IG51bGw7CglsZXQgYW5pbWF0aW9uRnJhbWVJZDogbnVtYmVyOwoJbGV0IGlzUnVubmluZyA9ICRzdGF0ZShmYWxzZSk7CglsZXQgZXJyb3IgPSAkc3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7CgoJY29uc3QgYXR0YWNoVmlkZW8gPSAobm9kZTogSFRNTFZpZGVvRWxlbWVudCkgPT4gewoJCXZpZGVvID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAodmlkZW8gPT09IG5vZGUpIHsKCQkJCXZpZGVvID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJb25Nb3VudChhc3luYyAoKSA9PiB7CgkJdHJ5IHsKCQkJY29uc3QgZmlsZXNldFJlc29sdmVyID0gYXdhaXQgRmlsZXNldFJlc29sdmVyLmZvclZpc2lvblRhc2tzKAoJCQkJImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQG1lZGlhcGlwZS90YXNrcy12aXNpb25AbGF0ZXN0L3dhc20iLAoJCQkpOwoKCQkJZmFjZUxhbmRtYXJrZXIgPSBhd2FpdCBGYWNlTGFuZG1hcmtlci5jcmVhdGVGcm9tT3B0aW9ucyhmaWxlc2V0UmVzb2x2ZXIsIHsKCQkJCWJhc2VPcHRpb25zOiB7CgkJCQkJbW9kZWxBc3NldFBhdGg6CgkJCQkJCSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vbWVkaWFwaXBlLW1vZGVscy9mYWNlX2xhbmRtYXJrZXIvZmFjZV9sYW5kbWFya2VyL2Zsb2F0MTYvMS9mYWNlX2xhbmRtYXJrZXIudGFzayIsCgkJCQkJZGVsZWdhdGU6ICJHUFUiLAoJCQkJfSwKCQkJCXJ1bm5pbmdNb2RlOiAiVklERU8iLAoJCQkJbnVtRmFjZXM6IDEsCgkJCQlvdXRwdXRGYWNlQmxlbmRzaGFwZXM6IGZhbHNlLAoJCQkJb3V0cHV0RmFjaWFsVHJhbnNmb3JtYXRpb25NYXRyaXhlczogdHJ1ZSwKCQkJfSk7CgoJCQlhd2FpdCBzdGFydENhbWVyYSgpOwoJCX0gY2F0Y2ggKGUpIHsKCQkJZXJyb3IgPQoJCQkJZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogIkZhaWxlZCB0byBpbml0aWFsaXplIGZhY2UgdHJhY2tpbmciOwoJCQljb25zb2xlLmVycm9yKCJGYWNlVHJhY2tlciBpbml0IGVycm9yOiIsIGUpOwoJCX0KCX0pOwoKCW9uRGVzdHJveSgoKSA9PiB7CgkJaWYgKGFuaW1hdGlvbkZyYW1lSWQpIHsKCQkJY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uRnJhbWVJZCk7CgkJfQoJCWlmICh2aWRlbz8uc3JjT2JqZWN0KSB7CgkJCWNvbnN0IHRyYWNrcyA9ICh2aWRlby5zcmNPYmplY3QgYXMgTWVkaWFTdHJlYW0pLmdldFRyYWNrcygpOwoJCQl0cmFja3MuZm9yRWFjaCgodHJhY2spID0+IHRyYWNrLnN0b3AoKSk7CgkJfQoJCWlmIChmYWNlTGFuZG1hcmtlcikgewoJCQlmYWNlTGFuZG1hcmtlci5jbG9zZSgpOwoJCX0KCX0pOwoKCWFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2FtZXJhKCkgewoJCWlmICghdmlkZW8pIHJldHVybjsKCQl0cnkgewoJCQljb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7CgkJCQl2aWRlbzogeyBmYWNpbmdNb2RlOiAidXNlciIsIHdpZHRoOiA2NDAsIGhlaWdodDogNDgwIH0sCgkJCX0pOwoJCQl2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07CgkJCWF3YWl0IHZpZGVvLnBsYXkoKTsKCQkJaXNSdW5uaW5nID0gdHJ1ZTsKCQkJZGV0ZWN0RmFjZSgpOwoJCX0gY2F0Y2ggKGUpIHsKCQkJZXJyb3IgPSAiQ2FtZXJhIGFjY2VzcyBkZW5pZWQiOwoJCQljb25zb2xlLmVycm9yKCJDYW1lcmEgZXJyb3I6IiwgZSk7CgkJfQoJfQoKCWZ1bmN0aW9uIGRldGVjdEZhY2UoKSB7CgkJaWYgKCFmYWNlTGFuZG1hcmtlciB8fCAhdmlkZW8gfHwgdmlkZW8ucmVhZHlTdGF0ZSA8IDIpIHsKCQkJYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkZXRlY3RGYWNlKTsKCQkJcmV0dXJuOwoJCX0KCgkJY29uc3QgcmVzdWx0cyA9IGZhY2VMYW5kbWFya2VyLmRldGVjdEZvclZpZGVvKHZpZGVvLCBwZXJmb3JtYW5jZS5ub3coKSk7CgoJCWlmIChyZXN1bHRzLmZhY2VMYW5kbWFya3MgJiYgcmVzdWx0cy5mYWNlTGFuZG1hcmtzLmxlbmd0aCA+IDApIHsKCQkJY29uc3QgbGFuZG1hcmtzID0gcmVzdWx0cy5mYWNlTGFuZG1hcmtzWzBdOwoKCQkJY29uc3Qgbm9zZSA9IGxhbmRtYXJrc1sxXTsKCgkJCWNvbnN0IHggPSAobm9zZS54IC0gMC41KSAqIDI7CgkJCWNvbnN0IHkgPSAobm9zZS55IC0gMC41KSAqIDI7CgoJCQljb25zdCBsZWZ0RWFyID0gbGFuZG1hcmtzWzIzNF07CgkJCWNvbnN0IHJpZ2h0RWFyID0gbGFuZG1hcmtzWzQ1NF07CgkJCWNvbnN0IGZhY2VXaWR0aCA9IE1hdGguYWJzKHJpZ2h0RWFyLnggLSBsZWZ0RWFyLngpOwoKCQkJY29uc3QgeiA9ICgwLjQgLSBmYWNlV2lkdGgpICogNTsKCgkJCW9uSGVhZE1vdmUoeyB4LCB5LCB6IH0pOwoJCX0KCgkJYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkZXRlY3RGYWNlKTsKCX0KPC9zY3JpcHQ+Cgp7I2lmIHNob3dQcmV2aWV3fQoJPGRpdiB1c2U6cG9ydGFsIGNsYXNzPSJmaXhlZCByaWdodC00IGJvdHRvbS00IHotNTAgcm91bmRlZC1sZyB7Y2xhc3NOYW1lfSI+CgkJPHZpZGVvCgkJCXtAYXR0YWNoIGF0dGFjaFZpZGVvfQoJCQlwbGF5c2lubGluZQoJCQltdXRlZAoJCQljbGFzcz0iaC0zMCB3LTQwIC1zY2FsZS14LTEwMCByb3VuZGVkLWxnIgoJCT48L3ZpZGVvPgoJCXsjaWYgZXJyb3J9CgkJCTxkaXYKCQkJCWNsYXNzPSJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtYWNjZW50IgoJCQk+CgkJCQl7ZXJyb3J9CgkJCTwvZGl2PgoJCXsvaWZ9CgkJeyNpZiAhaXNSdW5uaW5nICYmICFlcnJvcn0KCQkJPGRpdgoJCQkJY2xhc3M9ImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1mb3JlZ3JvdW5kIgoJCQk+CgkJCQlJbml0aWFsaXppbmcgY2FtZXJhLi4uCgkJCTwvZGl2PgoJCXsvaWZ9Cgk8L2Rpdj4KezplbHNlfQoJPHZpZGVvIHtAYXR0YWNoIGF0dGFjaFZpZGVvfSBwbGF5c2lubGluZSBtdXRlZCBjbGFzcz0iaGlkZGVuIj48L3ZpZGVvPgp7L2lmfQo=", "utils/use-portal.ts": "aW1wb3J0IHsgdGljayB9IGZyb20gInN2ZWx0ZSI7CgovKioKICogVXNhZ2U6IDxkaXYgdXNlOnBvcnRhbD17J2NzcyBzZWxlY3Rvcid9IG9yIHVzZTpwb3J0YWw9e2RvY3VtZW50LmJvZHl9PgogKgogKiBAcGFyYW0gbm9kZQogKiBAcGFyYW0gdGFyZ2V0CiAqLwpleHBvcnQgZnVuY3Rpb24gcG9ydGFsKAoJbm9kZTogSFRNTEVsZW1lbnQsCgl0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50ID0gImJvZHkiLAopIHsKCWxldCB0YXJnZXRFbDogSFRNTEVsZW1lbnQgfCBudWxsOwoKCWFzeW5jIGZ1bmN0aW9uIHVwZGF0ZShuZXdUYXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7CgkJdGFyZ2V0ID0gbmV3VGFyZ2V0OwoJCWlmICh0eXBlb2YgdGFyZ2V0ID09PSAic3RyaW5nIikgewoJCQl0YXJnZXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsKCQkJaWYgKHRhcmdldEVsID09PSBudWxsKSB7CgkJCQlhd2FpdCB0aWNrKCk7CgkJCQl0YXJnZXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsKCQkJfQoJCQlpZiAodGFyZ2V0RWwgPT09IG51bGwpIHsKCQkJCS8vIElmIHRhcmdldCBpcyBzdGlsbCBudWxsLCB3ZSBmYWlsIHNpbGVudGx5IG9yIGxvZyBhIHdhcm5pbmcKCQkJCS8vIGRlZmF1bHRpbmcgdG8gYm9keSBpcyBhbiBvcHRpb24sIGJ1dCBzdGlja2luZyB0byBleHBsaWNpdCB0YXJnZXQgaXMgc2FmZXIKCQkJCWNvbnNvbGUud2FybihgUG9ydGFsIHRhcmdldCAiJHt0YXJnZXR9IiBub3QgZm91bmQuIEFwcGVuZGluZyB0byBib2R5LmApOwoJCQkJdGFyZ2V0RWwgPSBkb2N1bWVudC5ib2R5OwoJCQl9CgkJfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgewoJCQl0YXJnZXRFbCA9IHRhcmdldDsKCQl9IGVsc2UgewoJCQl0aHJvdyBuZXcgRXJyb3IoCgkJCQlgVW5rbm93biBwb3J0YWwgdGFyZ2V0IHR5cGU6ICR7CgkJCQkJdGFyZ2V0ID09PSBudWxsID8gIm51bGwiIDogdHlwZW9mIHRhcmdldAoJCQkJfS4gQWxsb3dlZCB0eXBlczogc3RyaW5nIChDU1Mgc2VsZWN0b3IpIG9yIEhUTUxFbGVtZW50LmAsCgkJCSk7CgkJfQoJCXRhcmdldEVsLmFwcGVuZENoaWxkKG5vZGUpOwoJfQoKCWZ1bmN0aW9uIGRlc3Ryb3koKSB7CgkJaWYgKG5vZGUucGFyZW50Tm9kZSkgewoJCQlub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CgkJfQoJfQoKCXVwZGF0ZSh0YXJnZXQpOwoKCXJldHVybiB7CgkJdXBkYXRlLAoJCWRlc3Ryb3ksCgl9Owp9Cg==", "components/card-stack/CardStack.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBTY3JvbGxUcmlnZ2VyIH0gZnJvbSAiZ3NhcC9kaXN0L1Njcm9sbFRyaWdnZXIiOwoJaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBjYXJkcyB0byBzdGFjay4gVXNlIHRoZSBgQ2FyZGAgY29tcG9uZW50IGZvciBiZXN0IHJlc3VsdHMuCgkJICovCgkJY2hpbGRyZW4/OiBTbmlwcGV0OwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIHNjYWxlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFja2VkIGNhcmRzLgoJCSAqIEBkZWZhdWx0IDAuMDUKCQkgKi8KCQlzY2FsZUZhY3Rvcj86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgdmVydGljYWwgb2Zmc2V0IChpbiBwaXhlbHMpIGJldHdlZW4gc3RhY2tlZCBjYXJkcy4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCW9mZnNldD86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgdmVydGljYWwgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gd2hlcmUgdGhlIGZpcnN0IGNhcmQgc3RvcHMuCgkJICogQGRlZmF1bHQgMAoJCSAqLwoJCXRvcE9mZnNldD86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgZWxlbWVudCB0byB1c2UgYXMgdGhlIHNjcm9sbGVyLiBEZWZhdWx0cyB0byB3aW5kb3cuCgkJICovCgkJc2Nyb2xsRWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbDsKCX0KCglsZXQgewoJCWNoaWxkcmVuLAoJCWNsYXNzOiBjbGFzc05hbWUsCgkJc2NhbGVGYWN0b3IgPSAwLjA1LAoJCW9mZnNldCA9IDEwLAoJCXRvcE9mZnNldCA9IDAsCgkJc2Nyb2xsRWxlbWVudCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyID09PSBub2RlKSB7CgkJCQljb250YWluZXIgPSB1bmRlZmluZWQ7CgkJCX0KCQl9OwoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoU2Nyb2xsVHJpZ2dlcik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwoJCWNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXI7CgoJCWNvbnN0IGNhcmRzID0gQXJyYXkuZnJvbSgKCQkJY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY2FyZC1zdGFjay1pdGVtIiksCgkJKSBhcyBIVE1MRWxlbWVudFtdOwoKCQlpZiAoY2FyZHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCWNvbnN0IGN0eCA9IGdzYXAuY29udGV4dCgoKSA9PiB7CgkJCWNvbnN0IGxhc3RDYXJkID0gY2FyZHNbY2FyZHMubGVuZ3RoIC0gMV07CgkJCWNvbnN0IHJlc29sdmVkU2Nyb2xsZXIgPQoJCQkJdHlwZW9mIHNjcm9sbEVsZW1lbnQgPT09ICJzdHJpbmciCgkJCQkJPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihzY3JvbGxFbGVtZW50KQoJCQkJCTogc2Nyb2xsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJCT8gc2Nyb2xsRWxlbWVudAoJCQkJCQk6IG51bGw7CgkJCWNvbnN0IHNjcm9sbGVyID0KCQkJCXJlc29sdmVkU2Nyb2xsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHJlc29sdmVkU2Nyb2xsZXIgOiB3aW5kb3c7CgoJCQljb25zdCBzY3JvbGxlckhlaWdodCA9CgkJCQlzY3JvbGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJPyBzY3JvbGxlci5jbGllbnRIZWlnaHQKCQkJCQk6IHdpbmRvdy5pbm5lckhlaWdodDsKCgkJCWNvbnN0IGxhc3RDYXJkSGVpZ2h0ID0gbGFzdENhcmQub2Zmc2V0SGVpZ2h0OwoJCQljb25zdCB0YXJnZXRQb3MgPSB0b3BPZmZzZXQgKyAoY2FyZHMubGVuZ3RoIC0gMSkgKiBvZmZzZXQ7CgkJCWNvbnN0IGV4dHJhUGFkZGluZyA9IE1hdGgubWF4KAoJCQkJMCwKCQkJCXNjcm9sbGVySGVpZ2h0IC0gbGFzdENhcmRIZWlnaHQgLSB0YXJnZXRQb3MsCgkJCSk7CgoJCQlpZiAoZXh0cmFQYWRkaW5nID4gMCkgewoJCQkJZ3NhcC5zZXQoY29udGFpbmVyRWxlbWVudCwgeyBwYWRkaW5nQm90dG9tOiBleHRyYVBhZGRpbmcgfSk7CgkJCX0KCgkJCWNhcmRzLmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7CgkJCQljb25zdCBjYXJkVG9wID0gdG9wT2Zmc2V0ICsgaW5kZXggKiBvZmZzZXQ7CgoJCQkJZ3NhcC5zZXQoY2FyZCwgewoJCQkJCXRyYW5zZm9ybU9yaWdpbjogInRvcCBjZW50ZXIiLAoJCQkJCXpJbmRleDogaW5kZXgsCgkJCQkJcG9zaXRpb246ICJzdGlja3kiLAoJCQkJCXRvcDogYCR7Y2FyZFRvcH1weGAsCgkJCQl9KTsKCgkJCQljb25zdCB0bCA9IGdzYXAudGltZWxpbmUoewoJCQkJCXNjcm9sbFRyaWdnZXI6IHsKCQkJCQkJdHJpZ2dlcjogY2FyZCwKCQkJCQkJc3RhcnQ6IGB0b3AgdG9wKz0ke2NhcmRUb3B9YCwKCQkJCQkJZW5kVHJpZ2dlcjogY29udGFpbmVyRWxlbWVudCwKCQkJCQkJZW5kOiAiYm90dG9tIGJvdHRvbSIsCgkJCQkJCXNjcnViOiB0cnVlLAoJCQkJCQlzY3JvbGxlciwKCQkJCQkJaW52YWxpZGF0ZU9uUmVmcmVzaDogdHJ1ZSwKCQkJCQl9LAoJCQkJfSk7CgoJCQkJY29uc3QgdGFyZ2V0U2NhbGUgPSAxIC0gKGNhcmRzLmxlbmd0aCAtIDEgLSBpbmRleCkgKiBzY2FsZUZhY3RvcjsKCgkJCQlpZiAoaW5kZXggPCBjYXJkcy5sZW5ndGggLSAxKSB7CgkJCQkJdGwudG8oY2FyZCwgewoJCQkJCQlzY2FsZTogdGFyZ2V0U2NhbGUsCgkJCQkJCWVhc2U6ICJub25lIiwKCQkJCQl9KTsKCQkJCX0KCQkJfSk7CgkJfSwgY29udGFpbmVyRWxlbWVudCk7CgoJCXJldHVybiAoKSA9PiB7CgkJCWN0eC5yZXZlcnQoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGRpdiB7QGF0dGFjaCBhdHRhY2hDb250YWluZXJ9IGNsYXNzPXtjbigicmVsYXRpdmUgdy1mdWxsIiwgY2xhc3NOYW1lKX0+Cgl7QHJlbmRlciBjaGlsZHJlbj8uKCl9CjwvZGl2Pgo=", "components/card-stack/CardStackItem.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgY29udGVudCBvZiB0aGUgY2FyZC4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3Nlcy4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGlubGluZSBzdHlsZXMuCgkJICovCgkJc3R5bGU/OiBzdHJpbmc7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgeyBjaGlsZHJlbiwgY2xhc3M6IGNsYXNzTmFtZSwgc3R5bGUsIC4uLnByb3BzIH06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdgoJY2xhc3M9e2NuKAoJCSJjYXJkLXN0YWNrLWl0ZW0gcmVsYXRpdmUgZmxleCBmbGV4LWNvbCB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iLAoJCWNsYXNzTmFtZSwKCSl9Cgl7c3R5bGV9Cgl7Li4ucHJvcHN9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9kaXY+Cg==", "helpers/gsap.ts": "aW1wb3J0IHsgZ3NhcCB9IGZyb20gImdzYXAvZGlzdC9nc2FwIjsKaW1wb3J0IHsgQ3VzdG9tRWFzZSB9IGZyb20gImdzYXAvZGlzdC9DdXN0b21FYXNlIjsKCmNvbnN0IHJlZ2lzdGVyZWRQbHVnaW5zID0gbmV3IFNldDxvYmplY3Q+KCk7Cgpjb25zdCBNT1RJT05fQ09SRV9FQVNFX05BTUUgPSAibW90aW9uLWNvcmUtZWFzZSI7CmNvbnN0IE1PVElPTl9DT1JFX0VBU0VfQ1VSVkUgPSAiMC42MjUsIDAuMDUsIDAsIDEiOwoKbGV0IG1vdGlvbkNvcmVFYXNlUmVnaXN0ZXJlZCA9IGZhbHNlOwoKZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luT25jZSguLi5wbHVnaW5zOiBvYmplY3RbXSkgewoJY29uc3QgdW5pcXVlID0gcGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIXJlZ2lzdGVyZWRQbHVnaW5zLmhhcyhwbHVnaW4pKTsKCWlmICghdW5pcXVlLmxlbmd0aCkgcmV0dXJuOwoKCWdzYXAucmVnaXN0ZXJQbHVnaW4oLi4udW5pcXVlKTsKCXVuaXF1ZS5mb3JFYWNoKChwbHVnaW4pID0+IHsKCQlyZWdpc3RlcmVkUGx1Z2lucy5hZGQocGx1Z2luKTsKCX0pOwp9CgpleHBvcnQgZnVuY3Rpb24gZW5zdXJlTW90aW9uQ29yZUVhc2UoKSB7CglyZWdpc3RlclBsdWdpbk9uY2UoQ3VzdG9tRWFzZSk7CglpZiAoIW1vdGlvbkNvcmVFYXNlUmVnaXN0ZXJlZCkgewoJCUN1c3RvbUVhc2UuY3JlYXRlKE1PVElPTl9DT1JFX0VBU0VfTkFNRSwgTU9USU9OX0NPUkVfRUFTRV9DVVJWRSk7CgkJbW90aW9uQ29yZUVhc2VSZWdpc3RlcmVkID0gdHJ1ZTsKCX0KCXJldHVybiBNT1RJT05fQ09SRV9FQVNFX05BTUU7Cn0K", - "components/dithered-image/DitheredImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0RpdGhlcmVkSW1hZ2VTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgeyBOb1RvbmVNYXBwaW5nIH0gZnJvbSAidGhyZWUiOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFR5cGUgb2YgZGl0aGVyaW5nIG1hcCB0byB1c2UuCgkJICogQGRlZmF1bHQgImJheWVyNHg0IgoJCSAqLwoJCWRpdGhlck1hcD86IFNjZW5lUHJvcHNbImRpdGhlck1hcCJdOwoJCS8qKgoJCSAqIFBpeGVsIHNpemUgb2YgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXBpeGVsU2l6ZT86IFNjZW5lUHJvcHNbInBpeGVsU2l6ZSJdOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTExMTEzIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IFNjZW5lUHJvcHNbImJhY2tncm91bmRDb2xvciJdOwoJCS8qKgoJCSAqIFRocmVzaG9sZCBmb3IgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJdGhyZXNob2xkPzogU2NlbmVQcm9wc1sidGhyZXNob2xkIl07CgoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlzcmMsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpdGhlck1hcCA9ICJiYXllcjR4NCIsCgkJcGl4ZWxTaXplID0gMSwKCQljb2xvciA9ICIjZmY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzExMTExMyIsCgkJdGhyZXNob2xkID0gMC4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUKCQkJCWltYWdlPXtzcmN9CgkJCQl7ZGl0aGVyTWFwfQoJCQkJe3BpeGVsU2l6ZX0KCQkJCXtjb2xvcn0KCQkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCQl7dGhyZXNob2xkfQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/dithered-image/DitheredImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCWltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogVHlwZSBvZiBkaXRoZXJpbmcgbWFwIHRvIHVzZS4KCQkgKiBAZGVmYXVsdCAiYmF5ZXI0eDQiCgkJICovCgkJZGl0aGVyTWFwPzogImJheWVyNHg0IiB8ICJiYXllcjh4OCIgfCAiaGFsZnRvbmUiIHwgInZvaWRBbmRDbHVzdGVyIjsKCQkvKioKCQkgKiBQaXhlbCBzaXplIG9mIHRoZSBkaXRoZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEKCQkgKi8KCQlwaXhlbFNpemU/OiBudW1iZXI7CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciAoZG90cykuCgkJICogQGRlZmF1bHQgIiNmZjY5MDAiCgkJICovCgkJY29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzExMTExMyIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhyZXNob2xkIGZvciB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQl0aHJlc2hvbGQ/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQlkaXRoZXJNYXAgPSAiYmF5ZXI0eDQiLAoJCXBpeGVsU2l6ZSA9IDEsCgkJY29sb3IgPSAiI2ZmNjkwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMxMTExMTMiLAoJCXRocmVzaG9sZCA9IDAuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgeyBzaXplLCBkcHIgfSA9IHVzZVRocmVsdGUoKTsKCgljb25zdCB0aHJlc2hvbGRNYXBzRGF0YTogUmVjb3JkPHN0cmluZywgbnVtYmVyW10+ID0gewoJCWJheWVyNHg0OiBbMCwgOCwgMiwgMTAsIDEyLCA0LCAxNCwgNiwgMywgMTEsIDEsIDksIDE1LCA3LCAxMywgNV0sCgkJYmF5ZXI4eDg6IFsKCQkJMCwgMzIsIDgsIDQwLCAyLCAzNCwgMTAsIDQyLCA0OCwgMTYsIDU2LCAyNCwgNTAsIDE4LCA1OCwgMjYsIDEyLCA0NCwgNCwKCQkJMzYsIDE0LCA0NiwgNiwgMzgsIDYwLCAyOCwgNTIsIDIwLCA2MiwgMzAsIDU0LCAyMiwgMywgMzUsIDExLCA0MywgMSwgMzMsCgkJCTksIDQxLCA1MSwgMTksIDU5LCAyNywgNDksIDE3LCA1NywgMjUsIDE1LCA0NywgNywgMzksIDEzLCA0NSwgNSwgMzcsIDYzLAoJCQkzMSwgNTUsIDIzLCA2MSwgMjksIDUzLCAyMSwKCQldLAoJCWhhbGZ0b25lOiBbCgkJCTI0LCAxMCwgMTIsIDI2LCAzNSwgNDcsIDQ5LCAzNywgOCwgMCwgMiwgMTQsIDQ1LCA1OSwgNjEsIDUxLCAyMiwgNiwgNCwgMTYsCgkJCTQzLCA1NywgNjMsIDUzLCAzMCwgMjAsIDE4LCAyOCwgMzMsIDQxLCA1NSwgMzksIDM0LCA0NiwgNDgsIDM2LCAyNSwgMTEsCgkJCTEzLCAyNywgNDQsIDU4LCA2MCwgNTAsIDksIDEsIDMsIDE1LCA0MiwgNTYsIDYyLCA1MiwgMjMsIDcsIDUsIDE3LCAzMiwgNDAsCgkJCTU0LCAzOCwgMzEsIDIxLCAxOSwgMjksCgkJXSwKCQl2b2lkQW5kQ2x1c3RlcjogWwoJCQkxMzEsIDE4NywgOCwgNzgsIDUwLCAxOCwgMTM0LCA4OSwgMTU1LCAxMDIsIDI5LCA5NSwgMTg0LCA3MywgMjIsIDg2LCAxMTMsCgkJCTE3MSwgMTQyLCAxMDUsIDM0LCAxNjYsIDksIDYwLCAxNTEsIDEyOCwgNDAsIDExMCwgMTY4LCAxMzcsIDQ1LCAyOCwgNjQsCgkJCTE4OCwgODIsIDU0LCAxMjQsIDE4OSwgODAsIDEzLCAxNTYsIDU2LCA3LCA2MSwgMTg2LCAxMjEsIDE1NCwgNiwgMTA4LCAxNzcsCgkJCTI0LCAxMDAsIDM4LCAxNzYsIDkzLCAxMjMsIDgzLCAxNDgsIDk2LCAxNywgODgsIDEzMywgNDQsIDE0NSwgNjksIDE2MSwKCQkJMTM5LCA3MiwgMzAsIDE4MSwgMTE1LCAyNywgMTYzLCA0NywgMTc4LCA2NSwgMTY0LCAxNCwgMTIwLCA0OCwgNSwgMTI3LAoJCQkxNTMsIDUyLCAxOTAsIDU4LCAxMjYsIDgxLCAxMTYsIDIxLCAxMDYsIDc3LCAxNzMsIDkyLCAxOTEsIDYzLCA5OSwgMTIsIDc2LAoJCQkxNDQsIDQsIDE4NSwgMzcsIDE0OSwgMTkyLCAzOSwgMTM1LCAyMywgMTE3LCAzMSwgMTcwLCAxMzIsIDM1LCAxNzIsIDEwMywKCQkJNjYsIDEyOSwgNzksIDMsIDk3LCA1NywgMTU5LCA3MCwgMTQxLCA1MywgOTQsIDExNCwgMjAsIDQ5LCAxNTgsIDE5LCAxNDYsCgkJCTE2OSwgMTIyLCAxODMsIDExLCAxMDQsIDE4MCwgMiwgMTY1LCAxNTIsIDg3LCAxODIsIDExOCwgOTEsIDQyLCA2NywgMjUsCgkJCTg0LCAxNDcsIDQzLCA4NSwgMTI1LCA2OCwgMTYsIDEzNiwgNzEsIDEwLCAxOTMsIDExMiwgMTYwLCAxMzgsIDUxLCAxMTEsCgkJCTE2MiwgMjYsIDE5NCwgNDYsIDE3NCwgMTA3LCA0MSwgMTQzLCAzMywgNzQsIDEsIDEwMSwgMTk1LCAxNSwgNzUsIDE0MCwKCQkJMTA5LCA5MCwgMzIsIDYyLCAxNTcsIDk4LCAxNjcsIDExOSwgMTc5LCA1OSwgMzYsIDEzMCwgMTc1LCA1NSwgMCwgMTUwLAoJCV0sCgl9OwoKCWxldCBpbWFnZVdpZHRoID0gMTsKCWxldCBpbWFnZUhlaWdodCA9IDE7CgoJY29uc3QgdGV4ID0gJGRlcml2ZWQoCgkJdXNlVGV4dHVyZShpbWFnZSwgewoJCQl0cmFuc2Zvcm06ICh0KSA9PiB7CgkJCQl0LmNvbG9yU3BhY2UgPSBUSFJFRS5TUkdCQ29sb3JTcGFjZTsKCQkJCXJldHVybiB0OwoJCQl9LAoJCX0pLAoJKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoJHRleCAmJiAkdGV4LmltYWdlKSB7CgkJCWltYWdlV2lkdGggPSAkdGV4LmltYWdlLndpZHRoOwoJCQlpbWFnZUhlaWdodCA9ICR0ZXguaW1hZ2UuaGVpZ2h0OwoJCQl1cGRhdGVDb3ZlclVuaWZvcm1zKCk7CgkJfQoJfSk7CgoJbGV0IHRocmVzaG9sZFRleHR1cmUgPSAkc3RhdGU8VEhSRUUuRGF0YVRleHR1cmUgfCBudWxsPihudWxsKTsKCWxldCBtYXBTaXplVW5pZm9ybSA9ICRzdGF0ZShuZXcgVEhSRUUuVmVjdG9yMig0LCA0KSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgZGF0YSA9IHRocmVzaG9sZE1hcHNEYXRhW2RpdGhlck1hcF0gfHwgdGhyZXNob2xkTWFwc0RhdGFbImJheWVyNHg0Il07CgkJY29uc3Qgc2l6ZSA9IE1hdGguc3FydChkYXRhLmxlbmd0aCk7CgkJY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aDsKCgkJY29uc3QgZmxvYXREYXRhID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCk7CgkJZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CgkJCWZsb2F0RGF0YVtpXSA9IGRhdGFbaV0gLyBjb3VudDsKCQl9CgoJCWNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuRGF0YVRleHR1cmUoCgkJCWZsb2F0RGF0YSwKCQkJc2l6ZSwKCQkJc2l6ZSwKCQkJVEhSRUUuUmVkRm9ybWF0LAoJCQlUSFJFRS5GbG9hdFR5cGUsCgkJKTsKCQl0ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLk5lYXJlc3RGaWx0ZXI7CgkJdGV4dHVyZS5tYWdGaWx0ZXIgPSBUSFJFRS5OZWFyZXN0RmlsdGVyOwoJCXRleHR1cmUud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZzsKCQl0ZXh0dXJlLndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7CgkJdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgoJCXRocmVzaG9sZFRleHR1cmUgPSB0ZXh0dXJlOwoJCW1hcFNpemVVbmlmb3JtLnNldChzaXplLCBzaXplKTsKCX0pOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFRIUkVFLlZlY3RvcjIoMSwgMSk7Cgljb25zdCBjb3ZlclNjYWxlVW5pZm9ybSA9IG5ldyBUSFJFRS5WZWN0b3IyKDEsIDEpOwoJY29uc3QgY292ZXJPZmZzZXRVbmlmb3JtID0gbmV3IFRIUkVFLlZlY3RvcjIoMCwgMCk7Cgljb25zdCBjb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuQ29sb3IoKTsKCWNvbnN0IGJhY2tncm91bmRDb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuQ29sb3IoKTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKCkgPT4gewoJCWNvbnN0IHNjcmVlbkFzcGVjdCA9ICRzaXplLndpZHRoIC8gJHNpemUuaGVpZ2h0OwoJCWNvbnN0IGltYWdlQXNwZWN0ID0gaW1hZ2VXaWR0aCAvIGltYWdlSGVpZ2h0OwoKCQlsZXQgc2NhbGVYID0gMTsKCQlsZXQgc2NhbGVZID0gMTsKCQlsZXQgb2Zmc2V0WCA9IDA7CgkJbGV0IG9mZnNldFkgPSAwOwoKCQlpZiAoc2NyZWVuQXNwZWN0ID4gaW1hZ2VBc3BlY3QpIHsKCQkJc2NhbGVZID0gaW1hZ2VBc3BlY3QgLyBzY3JlZW5Bc3BlY3Q7CgkJCW9mZnNldFkgPSAoMSAtIHNjYWxlWSkgKiAwLjU7CgkJfSBlbHNlIHsKCQkJc2NhbGVYID0gc2NyZWVuQXNwZWN0IC8gaW1hZ2VBc3BlY3Q7CgkJCW9mZnNldFggPSAoMSAtIHNjYWxlWCkgKiAwLjU7CgkJfQoKCQljb3ZlclNjYWxlVW5pZm9ybS5zZXQoc2NhbGVYLCBzY2FsZVkpOwoJCWNvdmVyT2Zmc2V0VW5pZm9ybS5zZXQob2Zmc2V0WCwgb2Zmc2V0WSk7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCXJlc29sdXRpb25Vbmlmb3JtLnNldCgkc2l6ZS53aWR0aCAqICRkcHIsICRzaXplLmhlaWdodCAqICRkcHIpOwoJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbG9yVW5pZm9ybS5zZXQoY29sb3IpOwoJCWJhY2tncm91bmRDb2xvclVuaWZvcm0uc2V0KGJhY2tncm91bmRDb2xvcik7Cgl9KTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGhyZXNob2xkTWFwOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdU1hcFNpemU7CgkJdW5pZm9ybSB2ZWMyIHVDb3ZlclNjYWxlOwoJCXVuaWZvcm0gdmVjMiB1Q292ZXJPZmZzZXQ7CgkJdW5pZm9ybSBmbG9hdCB1UGl4ZWxTaXplOwoJCXVuaWZvcm0gZmxvYXQgdVRocmVzaG9sZDsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQlmbG9hdCBnZXRMdW1pbmFuY2UodmVjMyBjb2xvcikgewoJCQlyZXR1cm4gZG90KGNvbG9yLCB2ZWMzKDAuMjk5LCAwLjU4NywgMC4xMTQpKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBwaXhlbENvb3JkID0gZmxvb3IoZ2xfRnJhZ0Nvb3JkLnh5IC8gdVBpeGVsU2l6ZSk7CgoJCQl2ZWMyIGNlbnRlclBpeGVsID0gcGl4ZWxDb29yZCAqIHVQaXhlbFNpemUgKyAodVBpeGVsU2l6ZSAqIDAuNSk7CgkJCXZlYzIgY2VudGVyVXYgPSBjZW50ZXJQaXhlbCAvIHVSZXNvbHV0aW9uOwoKCQkJdmVjMiBjb3ZlclNjYWxlID0gbWF4KHVDb3ZlclNjYWxlLCB2ZWMyKDAuMDAwMDEpKTsKCQkJdmVjMiBpbWFnZVV2ID0gY292ZXJTY2FsZSAqIGNlbnRlclV2ICsgdUNvdmVyT2Zmc2V0OwoKCQkJdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgaW1hZ2VVdik7CgoJCQl2ZWMyIG1hcFV2ID0gbW9kKHBpeGVsQ29vcmQsIHVNYXBTaXplKSAvIHVNYXBTaXplOwoJCQltYXBVdiArPSAoMC41IC8gdU1hcFNpemUpOwoKCQkJZmxvYXQgdGhyZXNob2xkVmFsdWUgPSB0ZXh0dXJlMkQodVRocmVzaG9sZE1hcCwgbWFwVXYpLnI7CgoJCQlmbG9hdCBsdW0gPSBnZXRMdW1pbmFuY2UodGV4Q29sb3IucmdiKTsKCgkJCWZsb2F0IGRpdGhlciA9IHN0ZXAodGhyZXNob2xkVmFsdWUgKyB1VGhyZXNob2xkLCBsdW0pOwoKCQkJdmVjMyBkaXRoZXJlZENvbG9yID0gbWl4KHVCYWNrZ3JvdW5kQ29sb3IsIHVDb2xvciwgZGl0aGVyKTsKCgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZGl0aGVyZWRDb2xvciwgMS4wKTsKCQkJI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CgkJfQoJYDsKPC9zY3JpcHQ+Cgp7I2lmICR0ZXggJiYgdGhyZXNob2xkVGV4dHVyZX0KCTxULk1lc2g+CgkJPFQuUGxhbmVHZW9tZXRyeSBhcmdzPXtbMiwgMl19IC8+CgkJPFQuU2hhZGVyTWF0ZXJpYWwKCQkJe3ZlcnRleFNoYWRlcn0KCQkJe2ZyYWdtZW50U2hhZGVyfQoJCQl1bmlmb3Jtcz17ewoJCQkJdVRleHR1cmU6IHsgdmFsdWU6ICR0ZXggfSwKCQkJCXVUaHJlc2hvbGRNYXA6IHsgdmFsdWU6IHRocmVzaG9sZFRleHR1cmUgfSwKCQkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQkJdU1hcFNpemU6IHsgdmFsdWU6IG1hcFNpemVVbmlmb3JtIH0sCgkJCQl1Q292ZXJTY2FsZTogeyB2YWx1ZTogY292ZXJTY2FsZVVuaWZvcm0gfSwKCQkJCXVDb3Zlck9mZnNldDogeyB2YWx1ZTogY292ZXJPZmZzZXRVbmlmb3JtIH0sCgkJCQl1UGl4ZWxTaXplOiB7IHZhbHVlOiBwaXhlbFNpemUgfSwKCQkJCXVUaHJlc2hvbGQ6IHsgdmFsdWU6IHRocmVzaG9sZCB9LAoJCQkJdUNvbG9yOiB7IHZhbHVlOiBjb2xvclVuaWZvcm0gfSwKCQkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IGJhY2tncm91bmRDb2xvclVuaWZvcm0gfSwKCQkJfX0KCQkvPgoJPC9ULk1lc2g+CnsvaWZ9Cg==", - "components/fake-3d-image/Fake3DImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0Zha2UzREltYWdlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHsgTm9Ub25lTWFwcGluZyB9IGZyb20gInRocmVlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGNvbG9yIHRleHR1cmUuCgkJICovCgkJY29sb3JTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBncmF5c2NhbGUgZGVwdGggbWFwIHRleHR1cmUuCgkJICovCgkJZGVwdGhTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpc3BsYWNlbWVudCB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgOAoJCSAqLwoJCXhUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogVmVydGljYWwgZGlzcGxhY2VtZW50IHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJeVRocmVzaG9sZD86IG51bWJlcjsKCQkvKioKCQkgKiBQb2ludGVyIHNlbnNpdGl2aXR5IG11bHRpcGxpZXIgYXBwbGllZCBiZWZvcmUgZGlzcGxhY2VtZW50IHRocmVzaG9sZGluZy4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJc2Vuc2l0aXZpdHk/OiBudW1iZXI7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY29sb3JTcmMsCgkJZGVwdGhTcmMsCgkJeFRocmVzaG9sZCA9IDgsCgkJeVRocmVzaG9sZCA9IDgsCgkJc2Vuc2l0aXZpdHkgPSAwLjI1LAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IGRwciA9IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8Q2FudmFzIHtkcHJ9IHRvbmVNYXBwaW5nPXtOb1RvbmVNYXBwaW5nfT4KCQkJPFNjZW5lIHtjb2xvclNyY30ge2RlcHRoU3JjfSB7eFRocmVzaG9sZH0ge3lUaHJlc2hvbGR9IHtzZW5zaXRpdml0eX0gLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/fake-3d-image/Fake3DImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGNvbG9yIHRleHR1cmUuCgkJICovCgkJY29sb3JTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBncmF5c2NhbGUgZGVwdGggbWFwIHRleHR1cmUuCgkJICovCgkJZGVwdGhTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpc3BsYWNlbWVudCB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgOAoJCSAqLwoJCXhUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogVmVydGljYWwgZGlzcGxhY2VtZW50IHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJeVRocmVzaG9sZD86IG51bWJlcjsKCQkvKioKCQkgKiBQb2ludGVyIHNlbnNpdGl2aXR5IG11bHRpcGxpZXIgYXBwbGllZCBiZWZvcmUgZGlzcGxhY2VtZW50IHRocmVzaG9sZGluZy4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJc2Vuc2l0aXZpdHk/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQljb2xvclNyYywKCQlkZXB0aFNyYywKCQl4VGhyZXNob2xkID0gOCwKCQl5VGhyZXNob2xkID0gOCwKCQlzZW5zaXRpdml0eSA9IDAuMjUsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IHsgc2l6ZSwgcmVuZGVyZXIsIGNhbWVyYSB9ID0gdXNlVGhyZWx0ZSgpOwoKCWxldCBtZXNoUmVmID0gJHN0YXRlPFRIUkVFLk1lc2g+KCk7CglsZXQgbWF0ZXJpYWxSZWYgPSAkc3RhdGU8VEhSRUUuU2hhZGVyTWF0ZXJpYWw+KCk7CgoJY29uc3QgdGFyZ2V0UG9pbnRlciA9IG5ldyBUSFJFRS5WZWN0b3IyKDAsIDApOwoJY29uc3Qgc21vb3RoUG9pbnRlciA9IG5ldyBUSFJFRS5WZWN0b3IyKDAsIDApOwoKCWNvbnN0IHRocmVzaG9sZFVuaWZvcm0gPSBuZXcgVEhSRUUuVmVjdG9yMigwLCAwKTsKCWNvbnN0IHVuaWZvcm1zID0gewoJCXVfb3JpZ2luYWxfdGV4dHVyZTogeyB2YWx1ZTogbnVsbCBhcyBUSFJFRS5UZXh0dXJlIHwgbnVsbCB9LAoJCXVfZGVwdGhfdGV4dHVyZTogeyB2YWx1ZTogbnVsbCBhcyBUSFJFRS5UZXh0dXJlIHwgbnVsbCB9LAoJCXVfbW91c2U6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKDAsIDApIH0sCgkJdV90aHJlc2hvbGQ6IHsgdmFsdWU6IHRocmVzaG9sZFVuaWZvcm0gfSwKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJdmVjNCBtb2RlbFZpZXdQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7CgkJCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld1Bvc2l0aW9uOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdV9vcmlnaW5hbF90ZXh0dXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVfZGVwdGhfdGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgdV9tb3VzZTsKCQl1bmlmb3JtIHZlYzIgdV90aHJlc2hvbGQ7CgoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZlYzIgbWlycm9yZWQodmVjMiB2KSB7CgkJCXZlYzIgbSA9IG1vZCh2LCAyLjApOwoJCQlyZXR1cm4gbWl4KG0sIDIuMCAtIG0sIHN0ZXAoMS4wLCBtKSk7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZGVwdGhNYXAgPSB0ZXh0dXJlMkQodV9kZXB0aF90ZXh0dXJlLCBtaXJyb3JlZCh2VXYpKTsKCQkJdmVjMiBmYWtlM2QgPSB2ZWMyKAoJCQkJdlV2LnggKyAoZGVwdGhNYXAuciAtIDAuNSkgKiB1X21vdXNlLnggLyB1X3RocmVzaG9sZC54LAoJCQkJdlV2LnkgKyAoZGVwdGhNYXAuciAtIDAuNSkgKiB1X21vdXNlLnkgLyB1X3RocmVzaG9sZC55CgkJCSk7CgkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X29yaWdpbmFsX3RleHR1cmUsIG1pcnJvcmVkKGZha2UzZCkpOwoJCQkjaW5jbHVkZSA8Y29sb3JzcGFjZV9mcmFnbWVudD4KCQl9CglgOwoKCWNvbnN0IGNvbG9yVGV4dHVyZSA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUoY29sb3JTcmMsIHsKCQkJdHJhbnNmb3JtOiAodGV4dHVyZSkgPT4gewoJCQkJdGV4dHVyZS53cmFwUyA9IFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmc7CgkJCQl0ZXh0dXJlLndyYXBUID0gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZzsKCQkJCXRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOwoJCQkJdGV4dHVyZS5tYWdGaWx0ZXIgPSBUSFJFRS5MaW5lYXJGaWx0ZXI7CgkJCQl0ZXh0dXJlLmNvbG9yU3BhY2UgPSBUSFJFRS5TUkdCQ29sb3JTcGFjZTsKCQkJCXRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gdHJ1ZTsKCQkJCXRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOwoJCQkJcmV0dXJuIHRleHR1cmU7CgkJCX0sCgkJfSksCgkpOwoKCWNvbnN0IGRlcHRoVGV4dHVyZSA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUoZGVwdGhTcmMsIHsKCQkJdHJhbnNmb3JtOiAodGV4dHVyZSkgPT4gewoJCQkJdGV4dHVyZS53cmFwUyA9IFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmc7CgkJCQl0ZXh0dXJlLndyYXBUID0gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZzsKCQkJCXRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOwoJCQkJdGV4dHVyZS5tYWdGaWx0ZXIgPSBUSFJFRS5MaW5lYXJGaWx0ZXI7CgkJCQl0ZXh0dXJlLmNvbG9yU3BhY2UgPSBUSFJFRS5Ob0NvbG9yU3BhY2U7CgkJCQl0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IHRydWU7CgkJCQl0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQkJCXJldHVybiB0ZXh0dXJlOwoJCQl9LAoJCX0pLAoJKTsKCglsZXQgaW1hZ2VBc3BlY3QgPSAxOwoKCSRlZmZlY3QoKCkgPT4gewoJCXRocmVzaG9sZFVuaWZvcm0uc2V0KHhUaHJlc2hvbGQsIHlUaHJlc2hvbGQpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdGV4dHVyZSA9ICRjb2xvclRleHR1cmU7CgkJaWYgKCF0ZXh0dXJlKSByZXR1cm47CgoJCXVuaWZvcm1zLnVfb3JpZ2luYWxfdGV4dHVyZS52YWx1ZSA9IHRleHR1cmU7CgoJCWNvbnN0IGltYWdlID0gdGV4dHVyZS5pbWFnZSBhcwoJCQl8IHsgd2lkdGg/OiBudW1iZXI7IGhlaWdodD86IG51bWJlciB9CgkJCXwgdW5kZWZpbmVkOwoJCWNvbnN0IHdpZHRoID0gaW1hZ2U/LndpZHRoID8/IDE7CgkJY29uc3QgaGVpZ2h0ID0gaW1hZ2U/LmhlaWdodCA/PyAxOwoJCWltYWdlQXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCB0ZXh0dXJlID0gJGRlcHRoVGV4dHVyZTsKCQlpZiAoIXRleHR1cmUpIHJldHVybjsKCQl1bmlmb3Jtcy51X2RlcHRoX3RleHR1cmUudmFsdWUgPSB0ZXh0dXJlOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgY2FudmFzID0gcmVuZGVyZXIuZG9tRWxlbWVudDsKCgkJY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gewoJCQljb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB4ID0gKChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGgpICogMiAtIDE7CgkJCWNvbnN0IHkgPSAtKCgoZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wKSAvIHJlY3QuaGVpZ2h0KSAqIDIgLSAxKTsKCQkJdGFyZ2V0UG9pbnRlci5zZXQoeCwgeSk7CgkJfTsKCgkJY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXJldHVybiAoKSA9PiB7CgkJCWNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKCQl9OwoJfSk7CgoJdXNlVGFzaygoZGVsdGEpID0+IHsKCQlpZiAoIW1lc2hSZWYgfHwgIW1hdGVyaWFsUmVmKSByZXR1cm47CgoJCWNvbnN0IHRhcmdldFggPSB0YXJnZXRQb2ludGVyLnggKiBzZW5zaXRpdml0eTsKCQljb25zdCB0YXJnZXRZID0gdGFyZ2V0UG9pbnRlci55ICogc2Vuc2l0aXZpdHk7CgkJY29uc3QgbGVycCA9IE1hdGgubWluKDEsIDUgKiBkZWx0YSk7CgoJCXNtb290aFBvaW50ZXIueCArPSAodGFyZ2V0WCAtIHNtb290aFBvaW50ZXIueCkgKiBsZXJwOwoJCXNtb290aFBvaW50ZXIueSArPSAodGFyZ2V0WSAtIHNtb290aFBvaW50ZXIueSkgKiBsZXJwOwoKCQltYXRlcmlhbFJlZi51bmlmb3Jtcy51X21vdXNlLnZhbHVlLnNldChzbW9vdGhQb2ludGVyLngsIHNtb290aFBvaW50ZXIueSk7CgoJCWNvbnN0IHBlcnNwZWN0aXZlQ2FtZXJhID0gJGNhbWVyYSBhcyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYTsKCQljb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKAoJCQlwZXJzcGVjdGl2ZUNhbWVyYS5wb3NpdGlvbi56IC0gbWVzaFJlZi5wb3NpdGlvbi56LAoJCSk7CgkJY29uc3QgZm92UmFkaWFucyA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChwZXJzcGVjdGl2ZUNhbWVyYS5mb3YpOwoJCWNvbnN0IHBsYW5lSGVpZ2h0ID0gMiAqIE1hdGgudGFuKGZvdlJhZGlhbnMgLyAyKSAqIGRpc3RhbmNlOwoJCWNvbnN0IHBsYW5lV2lkdGggPSAocGxhbmVIZWlnaHQgKiAkc2l6ZS53aWR0aCkgLyAkc2l6ZS5oZWlnaHQ7CgoJCWNvbnN0IHZpZXdwb3J0QXNwZWN0ID0gcGxhbmVXaWR0aCAvIHBsYW5lSGVpZ2h0OwoJCWNvbnN0IGZpbmFsV2lkdGggPQoJCQl2aWV3cG9ydEFzcGVjdCA+IGltYWdlQXNwZWN0ID8gcGxhbmVXaWR0aCA6IHBsYW5lSGVpZ2h0ICogaW1hZ2VBc3BlY3Q7CgkJY29uc3QgZmluYWxIZWlnaHQgPQoJCQl2aWV3cG9ydEFzcGVjdCA+IGltYWdlQXNwZWN0ID8gcGxhbmVXaWR0aCAvIGltYWdlQXNwZWN0IDogcGxhbmVIZWlnaHQ7CgoJCW1lc2hSZWYuc2NhbGUuc2V0KGZpbmFsV2lkdGggLyAyLCBmaW5hbEhlaWdodCAvIDIsIDEpOwoJfSk7Cjwvc2NyaXB0PgoKeyNpZiAkY29sb3JUZXh0dXJlICYmICRkZXB0aFRleHR1cmV9Cgk8VC5NZXNoIGJpbmQ6cmVmPXttZXNoUmVmfT4KCQk8VC5QbGFuZUdlb21ldHJ5IGFyZ3M9e1syLCAyXX0gLz4KCQk8VC5TaGFkZXJNYXRlcmlhbAoJCQliaW5kOnJlZj17bWF0ZXJpYWxSZWZ9CgkJCXt2ZXJ0ZXhTaGFkZXJ9CgkJCXtmcmFnbWVudFNoYWRlcn0KCQkJe3VuaWZvcm1zfQoJCQl0cmFuc3BhcmVudAoJCQlkZXB0aFRlc3Q9e2ZhbHNlfQoJCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQkvPgoJPC9ULk1lc2g+CnsvaWZ9Cg==", + "components/dithered-image/DitheredImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9EaXRoZXJlZEltYWdlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFR5cGUgb2YgZGl0aGVyaW5nIG1hcCB0byB1c2UuCgkJICogQGRlZmF1bHQgImJheWVyNHg0IgoJCSAqLwoJCWRpdGhlck1hcD86IFNjZW5lUHJvcHNbImRpdGhlck1hcCJdOwoJCS8qKgoJCSAqIFBpeGVsIHNpemUgb2YgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXBpeGVsU2l6ZT86IFNjZW5lUHJvcHNbInBpeGVsU2l6ZSJdOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTExMTEzIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IFNjZW5lUHJvcHNbImJhY2tncm91bmRDb2xvciJdOwoJCS8qKgoJCSAqIFRocmVzaG9sZCBmb3IgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJdGhyZXNob2xkPzogU2NlbmVQcm9wc1sidGhyZXNob2xkIl07CgoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlzcmMsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpdGhlck1hcCA9ICJiYXllcjR4NCIsCgkJcGl4ZWxTaXplID0gMSwKCQljb2xvciA9ICIjZmY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzExMTExMyIsCgkJdGhyZXNob2xkID0gMC4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQlpbWFnZT17c3JjfQoJCQl7ZGl0aGVyTWFwfQoJCQl7cGl4ZWxTaXplfQoJCQl7Y29sb3J9CgkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCXt0aHJlc2hvbGR9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/dithered-image/DitheredImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CgoJdHlwZSBEaXRoZXJNYXAgPSAiYmF5ZXI0eDQiIHwgImJheWVyOHg4IiB8ICJoYWxmdG9uZSIgfCAidm9pZEFuZENsdXN0ZXIiOwoJdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uID0KCQl8IHN0cmluZwoJCXwgbnVtYmVyCgkJfCByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0KCQl8IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBUeXBlIG9mIGRpdGhlcmluZyBtYXAgdG8gdXNlLgoJCSAqIEBkZWZhdWx0ICJiYXllcjR4NCIKCQkgKi8KCQlkaXRoZXJNYXA/OiBEaXRoZXJNYXA7CgkJLyoqCgkJICogUGl4ZWwgc2l6ZSBvZiB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJcGl4ZWxTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTExMTEzIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogVGhyZXNob2xkIGZvciB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQl0aHJlc2hvbGQ/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQlkaXRoZXJNYXAgPSAiYmF5ZXI0eDQiLAoJCXBpeGVsU2l6ZSA9IDEsCgkJY29sb3IgPSAiI2ZmNjkwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMxMTExMTMiLAoJCXRocmVzaG9sZCA9IDAuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBUaHJlc2hvbGRTdGF0ZSA9IHsKCQlzaXplOiBudW1iZXI7CgkJdGV4dHVyZTogVGV4dHVyZTsKCX07CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1VGhyZXNob2xkTWFwOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1TWFwU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBWZWMyIH07CgkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBWZWMyIH07CgkJdVBpeGVsU2l6ZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVRocmVzaG9sZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJfTsKCgljb25zdCB0aHJlc2hvbGRNYXBzRGF0YTogUmVjb3JkPERpdGhlck1hcCwgbnVtYmVyW10+ID0gewoJCWJheWVyNHg0OiBbMCwgOCwgMiwgMTAsIDEyLCA0LCAxNCwgNiwgMywgMTEsIDEsIDksIDE1LCA3LCAxMywgNV0sCgkJYmF5ZXI4eDg6IFsKCQkJMCwgMzIsIDgsIDQwLCAyLCAzNCwgMTAsIDQyLCA0OCwgMTYsIDU2LCAyNCwgNTAsIDE4LCA1OCwgMjYsIDEyLCA0NCwgNCwKCQkJMzYsIDE0LCA0NiwgNiwgMzgsIDYwLCAyOCwgNTIsIDIwLCA2MiwgMzAsIDU0LCAyMiwgMywgMzUsIDExLCA0MywgMSwgMzMsCgkJCTksIDQxLCA1MSwgMTksIDU5LCAyNywgNDksIDE3LCA1NywgMjUsIDE1LCA0NywgNywgMzksIDEzLCA0NSwgNSwgMzcsIDYzLAoJCQkzMSwgNTUsIDIzLCA2MSwgMjksIDUzLCAyMSwKCQldLAoJCWhhbGZ0b25lOiBbCgkJCTI0LCAxMCwgMTIsIDI2LCAzNSwgNDcsIDQ5LCAzNywgOCwgMCwgMiwgMTQsIDQ1LCA1OSwgNjEsIDUxLCAyMiwgNiwgNCwgMTYsCgkJCTQzLCA1NywgNjMsIDUzLCAzMCwgMjAsIDE4LCAyOCwgMzMsIDQxLCA1NSwgMzksIDM0LCA0NiwgNDgsIDM2LCAyNSwgMTEsCgkJCTEzLCAyNywgNDQsIDU4LCA2MCwgNTAsIDksIDEsIDMsIDE1LCA0MiwgNTYsIDYyLCA1MiwgMjMsIDcsIDUsIDE3LCAzMiwgNDAsCgkJCTU0LCAzOCwgMzEsIDIxLCAxOSwgMjksCgkJXSwKCQl2b2lkQW5kQ2x1c3RlcjogWwoJCQkxMzEsIDE4NywgOCwgNzgsIDUwLCAxOCwgMTM0LCA4OSwgMTU1LCAxMDIsIDI5LCA5NSwgMTg0LCA3MywgMjIsIDg2LCAxMTMsCgkJCTE3MSwgMTQyLCAxMDUsIDM0LCAxNjYsIDksIDYwLCAxNTEsIDEyOCwgNDAsIDExMCwgMTY4LCAxMzcsIDQ1LCAyOCwgNjQsCgkJCTE4OCwgODIsIDU0LCAxMjQsIDE4OSwgODAsIDEzLCAxNTYsIDU2LCA3LCA2MSwgMTg2LCAxMjEsIDE1NCwgNiwgMTA4LCAxNzcsCgkJCTI0LCAxMDAsIDM4LCAxNzYsIDkzLCAxMjMsIDgzLCAxNDgsIDk2LCAxNywgODgsIDEzMywgNDQsIDE0NSwgNjksIDE2MSwKCQkJMTM5LCA3MiwgMzAsIDE4MSwgMTE1LCAyNywgMTYzLCA0NywgMTc4LCA2NSwgMTY0LCAxNCwgMTIwLCA0OCwgNSwgMTI3LAoJCQkxNTMsIDUyLCAxOTAsIDU4LCAxMjYsIDgxLCAxMTYsIDIxLCAxMDYsIDc3LCAxNzMsIDkyLCAxOTEsIDYzLCA5OSwgMTIsIDc2LAoJCQkxNDQsIDQsIDE4NSwgMzcsIDE0OSwgMTkyLCAzOSwgMTM1LCAyMywgMTE3LCAzMSwgMTcwLCAxMzIsIDM1LCAxNzIsIDEwMywKCQkJNjYsIDEyOSwgNzksIDMsIDk3LCA1NywgMTU5LCA3MCwgMTQxLCA1MywgOTQsIDExNCwgMjAsIDQ5LCAxNTgsIDE5LCAxNDYsCgkJCTE2OSwgMTIyLCAxODMsIDExLCAxMDQsIDE4MCwgMiwgMTY1LCAxNTIsIDg3LCAxODIsIDExOCwgOTEsIDQyLCA2NywgMjUsCgkJCTg0LCAxNDcsIDQzLCA4NSwgMTI1LCA2OCwgMTYsIDEzNiwgNzEsIDEwLCAxOTMsIDExMiwgMTYwLCAxMzgsIDUxLCAxMTEsCgkJCTE2MiwgMjYsIDE5NCwgNDYsIDE3NCwgMTA3LCA0MSwgMTQzLCAzMywgNzQsIDEsIDEwMSwgMTk1LCAxNSwgNzUsIDE0MCwKCQkJMTA5LCA5MCwgMzIsIDYyLCAxNTcsIDk4LCAxNjcsIDExOSwgMTc5LCA1OSwgMzYsIDEzMCwgMTc1LCA1NSwgMCwgMTUwLAoJCV0sCgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCWxldCBzZXREaXRoZXJNYXAgPSAkc3RhdGU8KG1hcDogRGl0aGVyTWFwKSA9PiB2b2lkPigpOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCBtYXBTaXplVW5pZm9ybSA9IG5ldyBWZWMyKDQsIDQpOwoJY29uc3QgY292ZXJTY2FsZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCWNvbnN0IGNvdmVyT2Zmc2V0VW5pZm9ybSA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3QgY29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMSwgMTA1IC8gMjU1LCAwKTsKCWNvbnN0IGJhY2tncm91bmRDb2xvclVuaWZvcm0gPSBuZXcgVmVjMygxNyAvIDI1NSwgMTcgLyAyNTUsIDE5IC8gMjU1KTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoJY29uc3Qgbm9ybWFsaXplVHJpcGxldCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChyLCBnLCBiKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbY2xhbXAwMShyIC8gc2NhbGUpLCBjbGFtcDAxKGcgLyBzY2FsZSksIGNsYW1wMDEoYiAvIHNjYWxlKV07Cgl9OwoKCWNvbnN0IHBhcnNlSGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJCWlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSg0LCA2KSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX07CgoJbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCWNvbnN0IHBhcnNlQ3NzQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKCQlpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQkJY29uc3QgcGFyc2VyQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CgkJCXBhcnNlckNhbnZhcy53aWR0aCA9IDE7CgkJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCQljc3NDb2xvckNvbnRleHQgPSBwYXJzZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCQl9CgkJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gIiMwMDAwMDAiOwoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTsKCQljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCgkJaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgiIyIpKSB7CgkJCXJldHVybiBwYXJzZUhleENvbG9yKG5vcm1hbGl6ZWQpOwoJCX0KCgkJY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9yZ2JhP1woKFteKV0rKVwpL2kpOwoJCWlmICghbWF0Y2gpIHJldHVybiBudWxsOwoJCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkJLnNwbGl0KCIsIikKCQkJLm1hcCgocGFydCkgPT4gTnVtYmVyLnBhcnNlRmxvYXQocGFydC50cmltKCkpKQoJCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJCWlmIChwYXJ0cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFsKCQkJY2xhbXAwMShwYXJ0c1swXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1sxXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1syXSAvIHNjYWxlKSwKCQldOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQlpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJCWNvbnN0IGludCA9IE1hdGgubWluKDB4ZmZmZmZmLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHZhbHVlKSkpOwoJCQlyZXR1cm4gWwoJCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJCSgoaW50ID4+IDgpICYgMjU1KSAvIDI1NSwKCQkJCShpbnQgJiAyNTUpIC8gMjU1LAoJCQldOwoJCX0KCgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQkJY29uc3QgcGFyc2VkID0gdHJpbW1lZC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcih0cmltbWVkKQoJCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJCX0KCgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCgkJaWYgKAoJCQl2YWx1ZSAmJgoJCQl0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmCgkJCSJyIiBpbiB2YWx1ZSAmJgoJCQkiZyIgaW4gdmFsdWUgJiYKCQkJImIiIGluIHZhbHVlCgkJKSB7CgkJCWNvbnN0IHJnYiA9IHZhbHVlIGFzIHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChyZ2IuciwgcmdiLmcsIHJnYi5iKTsKCQl9CgoJCXJldHVybiBmYWxsYmFjazsKCX07CgoJY29uc3QgdG9MaW5lYXJSZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQlyZXR1cm4gW3NyZ2JUb0xpbmVhcihyKSwgc3JnYlRvTGluZWFyKGcpLCBzcmdiVG9MaW5lYXIoYildOwoJfTsKCgljb25zdCBhcHBseUNvbG9yID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCBjcmVhdGVUaHJlc2hvbGRUZXh0dXJlID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQltYXA6IERpdGhlck1hcCwKCSk6IFRocmVzaG9sZFN0YXRlID0+IHsKCQljb25zdCBkYXRhID0gdGhyZXNob2xkTWFwc0RhdGFbbWFwXSA/PyB0aHJlc2hvbGRNYXBzRGF0YS5iYXllcjR4NDsKCQljb25zdCBzaXplID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChNYXRoLnNxcnQoZGF0YS5sZW5ndGgpKSk7CgkJY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aDsKCQljb25zdCBwaXhlbHMgPSBuZXcgVWludDhBcnJheShzaXplICogc2l6ZSAqIDQpOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3Qgc3RyaWRlID0gaSAqIDQ7CgkJCWNvbnN0IHZhbHVlID0gTWF0aC5yb3VuZCgoZGF0YVtpXSAvIGNvdW50KSAqIDI1NSk7CgkJCXBpeGVsc1tzdHJpZGVdID0gdmFsdWU7CgkJCXBpeGVsc1tzdHJpZGUgKyAxXSA9IHZhbHVlOwoJCQlwaXhlbHNbc3RyaWRlICsgMl0gPSB2YWx1ZTsKCQkJcGl4ZWxzW3N0cmlkZSArIDNdID0gMjU1OwoJCX0KCgkJY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBwaXhlbHMsCgkJCXdpZHRoOiBzaXplLAoJCQloZWlnaHQ6IHNpemUsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5ORUFSRVNULAoJCQltYWdGaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCXdyYXBTOiBnbC5SRVBFQVQsCgkJCXdyYXBUOiBnbC5SRVBFQVQsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiBmYWxzZSwKCQl9KTsKCgkJcmV0dXJuIHsgc2l6ZSwgdGV4dHVyZSB9OwoJfTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKAoJCXJlc29sdXRpb25XaWR0aDogbnVtYmVyLAoJCXJlc29sdXRpb25IZWlnaHQ6IG51bWJlciwKCQlpbWFnZVdpZHRoOiBudW1iZXIsCgkJaW1hZ2VIZWlnaHQ6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHNhZmVXaWR0aCA9IE1hdGgubWF4KDEsIHJlc29sdXRpb25XaWR0aCk7CgkJY29uc3Qgc2FmZUhlaWdodCA9IE1hdGgubWF4KDEsIHJlc29sdXRpb25IZWlnaHQpOwoJCWNvbnN0IHNhZmVJbWFnZVdpZHRoID0gTWF0aC5tYXgoMSwgaW1hZ2VXaWR0aCk7CgkJY29uc3Qgc2FmZUltYWdlSGVpZ2h0ID0gTWF0aC5tYXgoMSwgaW1hZ2VIZWlnaHQpOwoKCQljb25zdCBzY3JlZW5Bc3BlY3QgPSBzYWZlV2lkdGggLyBzYWZlSGVpZ2h0OwoJCWNvbnN0IGltYWdlQXNwZWN0ID0gc2FmZUltYWdlV2lkdGggLyBzYWZlSW1hZ2VIZWlnaHQ7CgoJCWxldCBzY2FsZVggPSAxOwoJCWxldCBzY2FsZVkgPSAxOwoJCWxldCBvZmZzZXRYID0gMDsKCQlsZXQgb2Zmc2V0WSA9IDA7CgoJCWlmIChzY3JlZW5Bc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQlzY2FsZVkgPSBpbWFnZUFzcGVjdCAvIHNjcmVlbkFzcGVjdDsKCQkJb2Zmc2V0WSA9ICgxIC0gc2NhbGVZKSAqIDAuNTsKCQl9IGVsc2UgewoJCQlzY2FsZVggPSBzY3JlZW5Bc3BlY3QgLyBpbWFnZUFzcGVjdDsKCQkJb2Zmc2V0WCA9ICgxIC0gc2NhbGVYKSAqIDAuNTsKCQl9CgoJCWNvdmVyU2NhbGVVbmlmb3JtLnNldChzY2FsZVgsIHNjYWxlWSk7CgkJY292ZXJPZmZzZXRVbmlmb3JtLnNldChvZmZzZXRYLCBvZmZzZXRZKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGhyZXNob2xkTWFwOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdU1hcFNpemU7CgkJdW5pZm9ybSB2ZWMyIHVDb3ZlclNjYWxlOwoJCXVuaWZvcm0gdmVjMiB1Q292ZXJPZmZzZXQ7CgkJdW5pZm9ybSBmbG9hdCB1UGl4ZWxTaXplOwoJCXVuaWZvcm0gZmxvYXQgdVRocmVzaG9sZDsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQlmbG9hdCBnZXRMdW1pbmFuY2UodmVjMyBjb2xvclZhbHVlKSB7CgkJCXJldHVybiBkb3QoY29sb3JWYWx1ZSwgdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KSk7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQlmbG9hdCBwaXhlbCA9IG1heCgxLjAsIHVQaXhlbFNpemUpOwoJCQl2ZWMyIHBpeGVsQ29vcmQgPSBmbG9vcihnbF9GcmFnQ29vcmQueHkgLyBwaXhlbCk7CgkJCXZlYzIgY2VudGVyUGl4ZWwgPSBwaXhlbENvb3JkICogcGl4ZWwgKyAocGl4ZWwgKiAwLjUpOwoJCQl2ZWMyIGNlbnRlclV2ID0gY2VudGVyUGl4ZWwgLyB1UmVzb2x1dGlvbjsKCgkJCXZlYzIgY292ZXJTY2FsZSA9IG1heCh1Q292ZXJTY2FsZSwgdmVjMigwLjAwMDAxKSk7CgkJCXZlYzIgaW1hZ2VVdiA9IGNvdmVyU2NhbGUgKiBjZW50ZXJVdiArIHVDb3Zlck9mZnNldDsKCQkJdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgaW1hZ2VVdik7CgoJCQl2ZWMyIG1hcFV2ID0gbW9kKHBpeGVsQ29vcmQsIHVNYXBTaXplKSAvIHVNYXBTaXplOwoJCQltYXBVdiArPSAoMC41IC8gdU1hcFNpemUpOwoJCQlmbG9hdCB0aHJlc2hvbGRWYWx1ZSA9IHRleHR1cmUyRCh1VGhyZXNob2xkTWFwLCBtYXBVdikucjsKCgkJCWZsb2F0IGx1bSA9IGdldEx1bWluYW5jZSh0ZXhDb2xvci5yZ2IpOwoJCQlmbG9hdCBkaXRoZXIgPSBzdGVwKHRocmVzaG9sZFZhbHVlICsgdVRocmVzaG9sZCwgbHVtKTsKCQkJdmVjMyBkaXRoZXJlZENvbG9yID0gbWl4KHVCYWNrZ3JvdW5kQ29sb3IsIHVDb2xvciwgZGl0aGVyKTsKCgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGRpdGhlcmVkQ29sb3IpLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWUgPSBNYXRoLm1heCgxLCBwaXhlbFNpemUpOwoJCXVuaWZvcm1zLnVUaHJlc2hvbGQudmFsdWUgPSB0aHJlc2hvbGQ7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51Q29sb3IudmFsdWUsIGNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFsKCQkJMTcgLyAyNTUsCgkJCTE3IC8gMjU1LAoJCQkxOSAvIDI1NSwKCQldKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0SW1hZ2VTb3VyY2UpIHJldHVybjsKCQlzZXRJbWFnZVNvdXJjZShpbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldERpdGhlck1hcCkgcmV0dXJuOwoJCXNldERpdGhlck1hcChkaXRoZXJNYXApOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGltYWdlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQlsZXQgY3VycmVudEltYWdlV2lkdGggPSAxOwoJCWxldCBjdXJyZW50SW1hZ2VIZWlnaHQgPSAxOwoJCWxldCBpbWFnZUxvYWRUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEltYWdlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWltYWdlTG9hZFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gaW1hZ2VMb2FkVG9rZW47CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VMb2FkVG9rZW4pIHJldHVybjsKCQkJCWltYWdlVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWN1cnJlbnRJbWFnZVdpZHRoID0gaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMTsKCQkJCWN1cnJlbnRJbWFnZUhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMTsKCQkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoCgkJCQkJcmVzb2x1dGlvblVuaWZvcm0ueCwKCQkJCQlyZXNvbHV0aW9uVW5pZm9ybS55LAoJCQkJCWN1cnJlbnRJbWFnZVdpZHRoLAoJCQkJCWN1cnJlbnRJbWFnZUhlaWdodCwKCQkJCSk7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IHRocmVzaG9sZFN0YXRlID0gY3JlYXRlVGhyZXNob2xkVGV4dHVyZShnbCwgZGl0aGVyTWFwKTsKCQljb25zdCBzZXRUaHJlc2hvbGRNYXBUZXh0dXJlID0gKG1hcDogRGl0aGVyTWFwKSA9PiB7CgkJCXRocmVzaG9sZFN0YXRlID0gY3JlYXRlVGhyZXNob2xkVGV4dHVyZShnbCwgbWFwKTsKCQkJaWYgKHVuaWZvcm1zKSB7CgkJCQl1bmlmb3Jtcy51VGhyZXNob2xkTWFwLnZhbHVlID0gdGhyZXNob2xkU3RhdGUudGV4dHVyZTsKCQkJCXVuaWZvcm1zLnVNYXBTaXplLnZhbHVlLnNldCh0aHJlc2hvbGRTdGF0ZS5zaXplLCB0aHJlc2hvbGRTdGF0ZS5zaXplKTsKCQkJfQoJCQltYXBTaXplVW5pZm9ybS5zZXQodGhyZXNob2xkU3RhdGUuc2l6ZSwgdGhyZXNob2xkU3RhdGUuc2l6ZSk7CgkJfTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVUaHJlc2hvbGRNYXA6IHsgdmFsdWU6IHRocmVzaG9sZFN0YXRlLnRleHR1cmUgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVNYXBTaXplOiB7IHZhbHVlOiBtYXBTaXplVW5pZm9ybSB9LAoJCQl1Q292ZXJTY2FsZTogeyB2YWx1ZTogY292ZXJTY2FsZVVuaWZvcm0gfSwKCQkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBjb3Zlck9mZnNldFVuaWZvcm0gfSwKCQkJdVBpeGVsU2l6ZTogeyB2YWx1ZTogTWF0aC5tYXgoMSwgcGl4ZWxTaXplKSB9LAoJCQl1VGhyZXNob2xkOiB7IHZhbHVlOiB0aHJlc2hvbGQgfSwKCQkJdUNvbG9yOiB7IHZhbHVlOiBjb2xvclVuaWZvcm0gfSwKCQkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogYmFja2dyb3VuZENvbG9yVW5pZm9ybSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoJCXNldERpdGhlck1hcCA9IHNldFRocmVzaG9sZE1hcFRleHR1cmU7CgoJCWFwcGx5Q29sb3IoY29sb3JVbmlmb3JtLCBjb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWFwcGx5Q29sb3IoYmFja2dyb3VuZENvbG9yVW5pZm9ybSwgYmFja2dyb3VuZENvbG9yLCBbCgkJCTE3IC8gMjU1LAoJCQkxNyAvIDI1NSwKCQkJMTkgLyAyNTUsCgkJXSk7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IGZhbHNlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCXJlc29sdXRpb25Vbmlmb3JtLnNldChnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwoJCQl1cGRhdGVDb3ZlclVuaWZvcm1zKAoJCQkJcmVzb2x1dGlvblVuaWZvcm0ueCwKCQkJCXJlc29sdXRpb25Vbmlmb3JtLnksCgkJCQljdXJyZW50SW1hZ2VXaWR0aCwKCQkJCWN1cnJlbnRJbWFnZUhlaWdodCwKCQkJKTsKCQl9OwoKCQlyZXNpemUoKTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlzZXREaXRoZXJNYXAgPSB1bmRlZmluZWQ7CgkJCWlmICh0aHJlc2hvbGRTdGF0ZS50ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGhyZXNob2xkU3RhdGUudGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/fake-3d-image/Fake3DImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9GYWtlM0RJbWFnZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGNvbG9yIHRleHR1cmUuCgkJICovCgkJY29sb3JTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBncmF5c2NhbGUgZGVwdGggbWFwIHRleHR1cmUuCgkJICovCgkJZGVwdGhTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpc3BsYWNlbWVudCB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgOAoJCSAqLwoJCXhUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogVmVydGljYWwgZGlzcGxhY2VtZW50IHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJeVRocmVzaG9sZD86IG51bWJlcjsKCQkvKioKCQkgKiBQb2ludGVyIHNlbnNpdGl2aXR5IG11bHRpcGxpZXIgYXBwbGllZCBiZWZvcmUgZGlzcGxhY2VtZW50IHRocmVzaG9sZGluZy4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJc2Vuc2l0aXZpdHk/OiBudW1iZXI7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY29sb3JTcmMsCgkJZGVwdGhTcmMsCgkJeFRocmVzaG9sZCA9IDgsCgkJeVRocmVzaG9sZCA9IDgsCgkJc2Vuc2l0aXZpdHkgPSAwLjI1LAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUge2NvbG9yU3JjfSB7ZGVwdGhTcmN9IHt4VGhyZXNob2xkfSB7eVRocmVzaG9sZH0ge3NlbnNpdGl2aXR5fSAvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/fake-3d-image/Fake3DImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogU291cmNlIFVSTCBvZiB0aGUgY29sb3IgdGV4dHVyZS4KCQkgKi8KCQljb2xvclNyYzogc3RyaW5nOwoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGdyYXlzY2FsZSBkZXB0aCBtYXAgdGV4dHVyZS4KCQkgKi8KCQlkZXB0aFNyYzogc3RyaW5nOwoJCS8qKgoJCSAqIEhvcml6b250YWwgZGlzcGxhY2VtZW50IHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJeFRocmVzaG9sZD86IG51bWJlcjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBkaXNwbGFjZW1lbnQgdGhyZXNob2xkLgoJCSAqIEBkZWZhdWx0IDgKCQkgKi8KCQl5VGhyZXNob2xkPzogbnVtYmVyOwoJCS8qKgoJCSAqIFBvaW50ZXIgc2Vuc2l0aXZpdHkgbXVsdGlwbGllciBhcHBsaWVkIGJlZm9yZSBkaXNwbGFjZW1lbnQgdGhyZXNob2xkaW5nLgoJCSAqIEBkZWZhdWx0IDAuMjUKCQkgKi8KCQlzZW5zaXRpdml0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yU3JjLAoJCWRlcHRoU3JjLAoJCXhUaHJlc2hvbGQgPSA4LAoJCXlUaHJlc2hvbGQgPSA4LAoJCXNlbnNpdGl2aXR5ID0gMC4yNSwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdU9yaWdpbmFsVGV4dHVyZTogeyB2YWx1ZTogVGV4dHVyZSB9OwoJCXVEZXB0aFRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1TW91c2U6IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGhyZXNob2xkOiB7IHZhbHVlOiBWZWMyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1T3JpZ2luYWxUZXh0dXJlU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVEZXB0aFRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldENvbG9yU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCWxldCBzZXREZXB0aFNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgdGFyZ2V0UG9pbnRlciA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3Qgc21vb3RoUG9pbnRlciA9IG5ldyBWZWMyKDAsIDApOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1T3JpZ2luYWxUZXh0dXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVEZXB0aFRleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIHVNb3VzZTsKCQl1bmlmb3JtIHZlYzIgdVRocmVzaG9sZDsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVPcmlnaW5hbFRleHR1cmVTaXplOwoJCXVuaWZvcm0gdmVjMiB1RGVwdGhUZXh0dXJlU2l6ZTsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2ZWMyIG1pcnJvcmVkKHZlYzIgdmFsdWUpIHsKCQkJdmVjMiBtID0gbW9kKHZhbHVlLCAyLjApOwoJCQlyZXR1cm4gbWl4KG0sIDIuMCAtIG0sIHN0ZXAoMS4wLCBtKSk7CgkJfQoKCQl2ZWMyIGdldENvdmVyVVYodmVjMiB1diwgdmVjMiB0ZXh0dXJlU2l6ZSkgewoJCQl2ZWMyIHNhZmVUZXh0dXJlID0gbWF4KHRleHR1cmVTaXplLCB2ZWMyKDEuMCkpOwoJCQl2ZWMyIHMgPSB1UmVzb2x1dGlvbiAvIHNhZmVUZXh0dXJlOwoJCQlmbG9hdCBzY2FsZSA9IG1heChzLngsIHMueSk7CgkJCXZlYzIgc2NhbGVkU2l6ZSA9IHNhZmVUZXh0dXJlICogc2NhbGU7CgkJCXZlYzIgb2Zmc2V0ID0gKHVSZXNvbHV0aW9uIC0gc2NhbGVkU2l6ZSkgKiAwLjU7CgkJCXJldHVybiAodXYgKiB1UmVzb2x1dGlvbiAtIG9mZnNldCkgLyBzY2FsZWRTaXplOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWMyIGJhc2VVdiA9IG1pcnJvcmVkKGdldENvdmVyVVYodlV2LCB1T3JpZ2luYWxUZXh0dXJlU2l6ZSkpOwoJCQl2ZWMyIGRlcHRoVXYgPSBtaXJyb3JlZChnZXRDb3ZlclVWKHZVdiwgdURlcHRoVGV4dHVyZVNpemUpKTsKCQkJZmxvYXQgZGVwdGggPSB0ZXh0dXJlMkQodURlcHRoVGV4dHVyZSwgZGVwdGhVdikucjsKCgkJCXZlYzIgc2FmZVRocmVzaG9sZCA9IG1heCh1VGhyZXNob2xkLCB2ZWMyKDAuMDAwMDEpKTsKCQkJdmVjMiBmYWtlM2QgPSB2ZWMyKAoJCQkJYmFzZVV2LnggKyAoZGVwdGggLSAwLjUpICogdU1vdXNlLnggLyBzYWZlVGhyZXNob2xkLngsCgkJCQliYXNlVXYueSArIChkZXB0aCAtIDAuNSkgKiB1TW91c2UueSAvIHNhZmVUaHJlc2hvbGQueQoJCQkpOwoKCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVPcmlnaW5hbFRleHR1cmUsIG1pcnJvcmVkKGZha2UzZCkpOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVUaHJlc2hvbGQudmFsdWUuc2V0KHhUaHJlc2hvbGQsIHlUaHJlc2hvbGQpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRDb2xvclNvdXJjZSkgcmV0dXJuOwoJCXNldENvbG9yU291cmNlKGNvbG9yU3JjKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0RGVwdGhTb3VyY2UpIHJldHVybjsKCQlzZXREZXB0aFNvdXJjZShkZXB0aFNyYyk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgY29sb3JUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgZGVwdGhUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFsxMjcsIDEyNywgMTI3LCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCBtb3VzZVVuaWZvcm0gPSBuZXcgVmVjMigwLCAwKTsKCQljb25zdCB0aHJlc2hvbGRVbmlmb3JtID0gbmV3IFZlYzIoeFRocmVzaG9sZCwgeVRocmVzaG9sZCk7CgkJY29uc3QgY29sb3JUZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCBkZXB0aFRleHR1cmVTaXplVW5pZm9ybSA9IG5ldyBWZWMyKDEsIDEpOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVPcmlnaW5hbFRleHR1cmU6IHsgdmFsdWU6IGNvbG9yVGV4dHVyZSB9LAoJCQl1RGVwdGhUZXh0dXJlOiB7IHZhbHVlOiBkZXB0aFRleHR1cmUgfSwKCQkJdU1vdXNlOiB7IHZhbHVlOiBtb3VzZVVuaWZvcm0gfSwKCQkJdVRocmVzaG9sZDogeyB2YWx1ZTogdGhyZXNob2xkVW5pZm9ybSB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogcmVzb2x1dGlvblVuaWZvcm0gfSwKCQkJdU9yaWdpbmFsVGV4dHVyZVNpemU6IHsgdmFsdWU6IGNvbG9yVGV4dHVyZVNpemVVbmlmb3JtIH0sCgkJCXVEZXB0aFRleHR1cmVTaXplOiB7IHZhbHVlOiBkZXB0aFRleHR1cmVTaXplVW5pZm9ybSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQlsZXQgY29sb3JUb2tlbiA9IDA7CgkJY29uc3QgbG9hZENvbG9yID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWNvbG9yVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBjb2xvclRva2VuOwoJCQljb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKCQkJaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCWltZy5kZWNvZGluZyA9ICJhc3luYyI7CgkJCWltZy5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IGNvbG9yVG9rZW4pIHJldHVybjsKCQkJCWNvbG9yVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWNvbG9yVGV4dHVyZVNpemVVbmlmb3JtLnNldCgKCQkJCQlpbWcubmF0dXJhbFdpZHRoIHx8IGltZy53aWR0aCB8fCAxLAoJCQkJCWltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMSwKCQkJCSk7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IGRlcHRoVG9rZW4gPSAwOwoJCWNvbnN0IGxvYWREZXB0aCA9IChzb3VyY2U6IHN0cmluZykgPT4gewoJCQlkZXB0aFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gZGVwdGhUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBkZXB0aFRva2VuKSByZXR1cm47CgkJCQlkZXB0aFRleHR1cmUuaW1hZ2UgPSBpbWc7CgkJCQlkZXB0aFRleHR1cmVTaXplVW5pZm9ybS5zZXQoCgkJCQkJaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMSwKCQkJCQlpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcuaGVpZ2h0IHx8IDEsCgkJCQkpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgoJCXNldENvbG9yU291cmNlID0gbG9hZENvbG9yOwoJCXNldERlcHRoU291cmNlID0gbG9hZERlcHRoOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCXJlc29sdXRpb25Vbmlmb3JtLnNldChnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHsKCQkJY29uc3QgcmVjdCA9IHRhcmdldENhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgeCA9ICgoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoKSAqIDIgLSAxOwoJCQljb25zdCB5ID0gLSgoKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodCkgKiAyIC0gMSk7CgkJCXRhcmdldFBvaW50ZXIuc2V0KHgsIHkpOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJMZWF2ZSA9ICgpID0+IHsKCQkJdGFyZ2V0UG9pbnRlci5zZXQoMCwgMCk7CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoYW5kbGVQb2ludGVyTGVhdmUpOwoKCQlyZXNpemUoKTsKCQlsb2FkQ29sb3IoY29sb3JTcmMpOwoJCWxvYWREZXB0aChkZXB0aFNyYyk7CgoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCgkJCWNvbnN0IHRhcmdldFggPSB0YXJnZXRQb2ludGVyLnggKiBzZW5zaXRpdml0eTsKCQkJY29uc3QgdGFyZ2V0WSA9IHRhcmdldFBvaW50ZXIueSAqIHNlbnNpdGl2aXR5OwoJCQljb25zdCBsZXJwID0gTWF0aC5taW4oMSwgNSAqIGRlbHRhKTsKCQkJc21vb3RoUG9pbnRlci54ICs9ICh0YXJnZXRYIC0gc21vb3RoUG9pbnRlci54KSAqIGxlcnA7CgkJCXNtb290aFBvaW50ZXIueSArPSAodGFyZ2V0WSAtIHNtb290aFBvaW50ZXIueSkgKiBsZXJwOwoJCQltb3VzZVVuaWZvcm0uc2V0KHNtb290aFBvaW50ZXIueCwgc21vb3RoUG9pbnRlci55KTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgaGFuZGxlUG9pbnRlckxlYXZlKTsKCQkJc2V0Q29sb3JTb3VyY2UgPSB1bmRlZmluZWQ7CgkJCXNldERlcHRoU291cmNlID0gdW5kZWZpbmVkOwoJCQlpZiAoY29sb3JUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoY29sb3JUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJCWlmIChkZXB0aFRleHR1cmUudGV4dHVyZSkgewoJCQkJZ2wuZGVsZXRlVGV4dHVyZShkZXB0aFRleHR1cmUudGV4dHVyZSk7CgkJCX0KCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", "components/flip-card-stack/FlipCardStack.svelte": "PHNjcmlwdCBsYW5nPSJ0cyIgZ2VuZXJpY3M9IlQiPgoJaW1wb3J0IHsgb25EZXN0cm95IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CgoJaW50ZXJmYWNlIFByb3BzPFQ+IHsKCQkvKioKCQkgKiBJdGVtcyByZW5kZXJlZCBhcyBjYXJkcyBpbiB0aGUgc3RhY2suCgkJICovCgkJaXRlbXM6IFRbXTsKCQkvKioKCQkgKiBTbmlwcGV0IHVzZWQgdG8gcmVuZGVyIGVhY2ggY2FyZC4gUmVjZWl2ZXMgaXRlbSBhbmQgb3JpZ2luYWwgaW5kZXguCgkJICovCgkJY2hpbGRyZW46IFNuaXBwZXQ8W1QsIG51bWJlcl0+OwoJCS8qKgoJCSAqIFZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBjYXJkcy4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJc3RhY2tPZmZzZXQ/OiBudW1iZXI7CgkJLyoqCgkJICogUm90YXRpb24gc3RlcCAoZGVnKSBmb3IgZWFjaCBjYXJkIGJlbG93IHRoZSB0b3AgY2FyZC4KCQkgKiBAZGVmYXVsdCAtMTAKCQkgKi8KCQlzdGFja1JvdGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIE1pbmltdW0gZHJhZyBkaXN0YW5jZSByZXF1aXJlZCB0byBzZW5kIHRoZSB0b3AgY2FyZCB0byB0aGUgYmFjay4KCQkgKiBAZGVmYXVsdCA4MAoJCSAqLwoJCWRyYWdUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogU3RhY2sgYW5pbWF0aW9uIGR1cmF0aW9uIGluIHNlY29uZHMuCgkJICogQGRlZmF1bHQgMC4zCgkJICovCgkJZHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogR1NBUCBlYXNlIHN0cmluZy4KCQkgKiBAZGVmYXVsdCAicG93ZXIyLm91dCIKCQkgKi8KCQllYXNlPzogc3RyaW5nOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSByb290IGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlbcHJvcDogc3RyaW5nXTogdW5rbm93bjsKCX0KCglpbnRlcmZhY2UgQ2FyZFRyYW5zZm9ybSB7CgkJekluZGV4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCXJvdGF0aW9uOiBudW1iZXI7CgkJc2NhbGU6IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgRHJhZ1N0YXRlIHsKCQlwb2ludGVySWQ6IG51bWJlcjsKCQlzdGFydFg6IG51bWJlcjsKCQlzdGFydFk6IG51bWJlcjsKCQljdXJyZW50WDogbnVtYmVyOwoJCWN1cnJlbnRZOiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpdGVtcywKCQljaGlsZHJlbiwKCQlzdGFja09mZnNldCA9IDgsCgkJc3RhY2tSb3RhdGlvbiA9IC0xMCwKCQlkcmFnVGhyZXNob2xkID0gODAsCgkJZHVyYXRpb24gPSAwLjMsCgkJZWFzZSA9ICJwb3dlcjIub3V0IiwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJLi4ucmVzdFByb3BzCgl9OiBQcm9wczxUPiA9ICRwcm9wcygpOwoKCWxldCBjYXJkUmVmcyA9ICRzdGF0ZTxBcnJheTxIVE1MRGl2RWxlbWVudCB8IG51bGw+PihbXSk7CglsZXQgaGFzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKCWxldCBkcmFnZ2luZ0NhcmRJbmRleCA9ICRzdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTsKCWxldCBjYXJkT3JkZXIgPSAkc3RhdGU8bnVtYmVyW10+KFtdKTsKCWxldCBkcmFnU3RhdGU6IERyYWdTdGF0ZSB8IG51bGwgPSBudWxsOwoKCWNvbnN0IHRvcENhcmRJbmRleCA9ICRkZXJpdmVkKGNhcmRPcmRlcltjYXJkT3JkZXIubGVuZ3RoIC0gMV0gPz8gLTEpOwoJY29uc3QgcmVzb2x2ZWRFYXNlID0gJGRlcml2ZWQoZWFzZSk7CgoJZnVuY3Rpb24gZ2V0Q2FyZFRyYW5zZm9ybShjYXJkSW5kZXg6IG51bWJlcik6IENhcmRUcmFuc2Zvcm0gfCBudWxsIHsKCQljb25zdCBzdGFja1Bvc2l0aW9uID0gY2FyZE9yZGVyLmluZGV4T2YoY2FyZEluZGV4KTsKCQlpZiAoc3RhY2tQb3NpdGlvbiA9PT0gLTEpIHJldHVybiBudWxsOwoKCQljb25zdCBwb3NpdGlvbkZyb21Cb3R0b20gPSBjYXJkT3JkZXIubGVuZ3RoIC0gMSAtIHN0YWNrUG9zaXRpb247CgkJcmV0dXJuIHsKCQkJekluZGV4OiBzdGFja1Bvc2l0aW9uICsgMSwKCQkJeTogLXBvc2l0aW9uRnJvbUJvdHRvbSAqIHN0YWNrT2Zmc2V0LAoJCQlyb3RhdGlvbjogcG9zaXRpb25Gcm9tQm90dG9tICogc3RhY2tSb3RhdGlvbiwKCQkJc2NhbGU6IDEgLSBwb3NpdGlvbkZyb21Cb3R0b20gKiAwLjAyLAoJCX07Cgl9CgoJZnVuY3Rpb24gc2V0Q2FyZFJlZihpbmRleDogbnVtYmVyLCBub2RlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwpIHsKCQljb25zdCBuZXh0ID0gWy4uLmNhcmRSZWZzXTsKCQluZXh0W2luZGV4XSA9IG5vZGU7CgkJY2FyZFJlZnMgPSBuZXh0OwoJfQoKCWZ1bmN0aW9uIHJlZ2lzdGVyQ2FyZFJlZihub2RlOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgewoJCXNldENhcmRSZWYoaW5kZXgsIG5vZGUpOwoJCXJldHVybiB7CgkJCXVwZGF0ZShuZXh0SW5kZXg6IG51bWJlcikgewoJCQkJaWYgKG5leHRJbmRleCA9PT0gaW5kZXgpIHJldHVybjsKCQkJCXNldENhcmRSZWYoaW5kZXgsIG51bGwpOwoJCQkJaW5kZXggPSBuZXh0SW5kZXg7CgkJCQlzZXRDYXJkUmVmKGluZGV4LCBub2RlKTsKCQkJfSwKCQkJZGVzdHJveSgpIHsKCQkJCXNldENhcmRSZWYoaW5kZXgsIG51bGwpOwoJCQl9LAoJCX07Cgl9CgoJZnVuY3Rpb24gYW5pbWF0ZVN0YWNrKGltbWVkaWF0ZTogYm9vbGVhbikgewoJCWZvciAoY29uc3QgW2luZGV4XSBvZiBpdGVtcy5lbnRyaWVzKCkpIHsKCQkJY29uc3Qgbm9kZSA9IGNhcmRSZWZzW2luZGV4XTsKCQkJaWYgKCFub2RlKSBjb250aW51ZTsKCgkJCWNvbnN0IHRyYW5zZm9ybSA9IGdldENhcmRUcmFuc2Zvcm0oaW5kZXgpOwoJCQlpZiAoIXRyYW5zZm9ybSkgY29udGludWU7CgkJCWlmIChkcmFnZ2luZ0NhcmRJbmRleCA9PT0gaW5kZXgpIGNvbnRpbnVlOwoKCQkJY29uc3QgdmFycyA9IHsKCQkJCXg6IDAsCgkJCQl5OiB0cmFuc2Zvcm0ueSwKCQkJCXJvdGF0aW9uOiB0cmFuc2Zvcm0ucm90YXRpb24sCgkJCQlzY2FsZTogdHJhbnNmb3JtLnNjYWxlLAoJCQl9OwoKCQkJaWYgKGltbWVkaWF0ZSkgewoJCQkJZ3NhcC5zZXQobm9kZSwgdmFycyk7CgkJCX0gZWxzZSB7CgkJCQlnc2FwLnRvKG5vZGUsIHsKCQkJCQkuLi52YXJzLAoJCQkJCWR1cmF0aW9uLAoJCQkJCWVhc2U6IHJlc29sdmVkRWFzZSwKCQkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCQl9KTsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiByZXNldERyYWdnZWRDYXJkKG5vZGU6IEhUTUxEaXZFbGVtZW50KSB7CgkJZ3NhcC50byhub2RlLCB7CgkJCXg6IDAsCgkJCXk6IDAsCgkJCXJvdGF0aW9uOiAwLAoJCQlzY2FsZTogMSwKCQkJZHVyYXRpb24sCgkJCWVhc2U6IHJlc29sdmVkRWFzZSwKCQkJb3ZlcndyaXRlOiB0cnVlLAoJCX0pOwoJfQoKCWZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQsIGNhcmRJbmRleDogbnVtYmVyKSB7CgkJaWYgKGNhcmRJbmRleCAhPT0gdG9wQ2FyZEluZGV4KSByZXR1cm47CgkJY29uc3Qgbm9kZSA9IGNhcmRSZWZzW2NhcmRJbmRleF07CgkJaWYgKCFub2RlKSByZXR1cm47CgoJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJZHJhZ2dpbmdDYXJkSW5kZXggPSBjYXJkSW5kZXg7CgkJZHJhZ1N0YXRlID0gewoJCQlwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKCQkJc3RhcnRYOiBldmVudC5jbGllbnRYLAoJCQlzdGFydFk6IGV2ZW50LmNsaWVudFksCgkJCWN1cnJlbnRYOiAwLAoJCQljdXJyZW50WTogMCwKCQl9OwoKCQl0cnkgewoJCQlub2RlLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CgkJfSBjYXRjaCB7CgkJCS8vIFNvbWUgcG9pbnRlciBzb3VyY2VzIG1heSBub3QgYWxsb3cgY2FwdHVyZTsgZHJhZyBzdGlsbCB3b3Jrcy4KCQl9CgoJCWdzYXAua2lsbFR3ZWVuc09mKG5vZGUpOwoJCWdzYXAudG8obm9kZSwgewoJCQlzY2FsZTogMS4wNSwKCQkJcm90YXRpb246IDAsCgkJCWR1cmF0aW9uOiAwLjA1LAoJCQllYXNlOiAicG93ZXIyLm91dCIsCgkJCW92ZXJ3cml0ZTogdHJ1ZSwKCQl9KTsKCX0KCglmdW5jdGlvbiBoYW5kbGVQb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50LCBjYXJkSW5kZXg6IG51bWJlcikgewoJCWlmIChjYXJkSW5kZXggIT09IGRyYWdnaW5nQ2FyZEluZGV4IHx8ICFkcmFnU3RhdGUpIHJldHVybjsKCQlpZiAoZXZlbnQucG9pbnRlcklkICE9PSBkcmFnU3RhdGUucG9pbnRlcklkKSByZXR1cm47CgoJCWNvbnN0IG5vZGUgPSBjYXJkUmVmc1tjYXJkSW5kZXhdOwoJCWlmICghbm9kZSkgcmV0dXJuOwoKCQljb25zdCBkeCA9IGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUuc3RhcnRYOwoJCWNvbnN0IGR5ID0gZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5zdGFydFk7CgkJY29uc3QgeCA9IGdzYXAudXRpbHMuY2xhbXAoLTE1MCwgMTUwLCBkeCk7CgkJY29uc3QgeSA9IGdzYXAudXRpbHMuY2xhbXAoLTE1MCwgMTUwLCBkeSk7CgoJCWRyYWdTdGF0ZS5jdXJyZW50WCA9IHg7CgkJZHJhZ1N0YXRlLmN1cnJlbnRZID0geTsKCgkJZ3NhcC5zZXQobm9kZSwgewoJCQl4LAoJCQl5LAoJCQlyb3RhdGlvbjogMCwKCQkJc2NhbGU6IDEuMDUsCgkJfSk7Cgl9CgoJZnVuY3Rpb24gaGFuZGxlUG9pbnRlckVuZChldmVudDogUG9pbnRlckV2ZW50LCBjYXJkSW5kZXg6IG51bWJlcikgewoJCWlmIChjYXJkSW5kZXggIT09IGRyYWdnaW5nQ2FyZEluZGV4IHx8ICFkcmFnU3RhdGUpIHJldHVybjsKCQlpZiAoZXZlbnQucG9pbnRlcklkICE9PSBkcmFnU3RhdGUucG9pbnRlcklkKSByZXR1cm47CgoJCWNvbnN0IG5vZGUgPSBjYXJkUmVmc1tjYXJkSW5kZXhdOwoJCWlmICghbm9kZSkgewoJCQlkcmFnU3RhdGUgPSBudWxsOwoJCQlkcmFnZ2luZ0NhcmRJbmRleCA9IG51bGw7CgkJCXJldHVybjsKCQl9CgoJCXRyeSB7CgkJCWlmIChub2RlLmhhc1BvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCkpIHsKCQkJCW5vZGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CgkJCX0KCQl9IGNhdGNoIHsKCQkJLy8gSWdub3JlIGNhcHR1cmUtcmVsZWFzZSBmYWlsdXJlcyBmcm9tIHVuc3VwcG9ydGVkIHBvaW50ZXIgc291cmNlcy4KCQl9CgoJCWNvbnN0IGRyYWdEaXN0YW5jZSA9CgkJCU1hdGguYWJzKGRyYWdTdGF0ZS5jdXJyZW50WCkgKyBNYXRoLmFicyhkcmFnU3RhdGUuY3VycmVudFkpOwoJCWNvbnN0IHNob3VsZE1vdmVUb0JhY2sgPSBkcmFnRGlzdGFuY2UgPj0gZHJhZ1RocmVzaG9sZDsKCgkJZHJhZ1N0YXRlID0gbnVsbDsKCQlkcmFnZ2luZ0NhcmRJbmRleCA9IG51bGw7CgoJCWlmICghc2hvdWxkTW92ZVRvQmFjaykgewoJCQlyZXNldERyYWdnZWRDYXJkKG5vZGUpOwoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBkcmFnZ2VkUG9zaXRpb24gPSBjYXJkT3JkZXIuaW5kZXhPZihjYXJkSW5kZXgpOwoJCWlmIChkcmFnZ2VkUG9zaXRpb24gPT09IC0xKSB7CgkJCXJlc2V0RHJhZ2dlZENhcmQobm9kZSk7CgkJCXJldHVybjsKCQl9CgoJCWNvbnN0IG5leHRPcmRlciA9IFsuLi5jYXJkT3JkZXJdOwoJCWNvbnN0IFtkcmFnZ2VkXSA9IG5leHRPcmRlci5zcGxpY2UoZHJhZ2dlZFBvc2l0aW9uLCAxKTsKCQlpZiAoZHJhZ2dlZCA9PT0gdW5kZWZpbmVkKSB7CgkJCXJlc2V0RHJhZ2dlZENhcmQobm9kZSk7CgkJCXJldHVybjsKCQl9CgoJCW5leHRPcmRlci51bnNoaWZ0KGRyYWdnZWQpOwoJCWNhcmRPcmRlciA9IG5leHRPcmRlcjsKCX0KCgkkZWZmZWN0LnByZSgoKSA9PiB7CgkJY29uc3QgYWxsSW5kZXhlcyA9IGl0ZW1zLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTsKCQljb25zdCBpc1NhbWVTZXQgPQoJCQlhbGxJbmRleGVzLmxlbmd0aCA9PT0gY2FyZE9yZGVyLmxlbmd0aCAmJgoJCQlhbGxJbmRleGVzLmV2ZXJ5KChpbmRleCkgPT4gY2FyZE9yZGVyLmluY2x1ZGVzKGluZGV4KSk7CgkJaWYgKCFpc1NhbWVTZXQpIHsKCQkJY2FyZE9yZGVyID0gYWxsSW5kZXhlczsKCQl9Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWl0ZW1zLmxlbmd0aCkgewoJCQloYXNJbml0aWFsaXplZCA9IGZhbHNlOwoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBhbGxSZWFkeSA9IGl0ZW1zLmV2ZXJ5KChfLCBpbmRleCkgPT4gQm9vbGVhbihjYXJkUmVmc1tpbmRleF0pKTsKCQlpZiAoIWFsbFJlYWR5KSByZXR1cm47CgoJCWFuaW1hdGVTdGFjayghaGFzSW5pdGlhbGl6ZWQpOwoJCWhhc0luaXRpYWxpemVkID0gdHJ1ZTsKCX0pOwoKCW9uRGVzdHJveSgoKSA9PiB7CgkJZm9yIChjb25zdCBub2RlIG9mIGNhcmRSZWZzKSB7CgkJCWlmIChub2RlKSB7CgkJCQlnc2FwLmtpbGxUd2VlbnNPZihub2RlKTsKCQkJfQoJCX0KCX0pOwo8L3NjcmlwdD4KCjxkaXYKCWNsYXNzPXtjbigicmVsYXRpdmUgaW5saW5lLWdyaWQgW3BlcnNwZWN0aXZlOjEwMDBweF0iLCBjbGFzc05hbWUpfQoJey4uLnJlc3RQcm9wc30KPgoJeyNpZiBpdGVtcy5sZW5ndGggPiAwfQoJCXsjZWFjaCBjYXJkT3JkZXIgYXMgY2FyZEluZGV4IChgY2FyZC0ke2NhcmRJbmRleH1gKX0KCQkJe0Bjb25zdCBpdGVtID0gaXRlbXNbY2FyZEluZGV4XX0KCQkJe0Bjb25zdCB0cmFuc2Zvcm0gPSBnZXRDYXJkVHJhbnNmb3JtKGNhcmRJbmRleCl9CgkJCXsjaWYgaXRlbX0KCQkJCTxkaXYKCQkJCQl1c2U6cmVnaXN0ZXJDYXJkUmVmPXtjYXJkSW5kZXh9CgkJCQkJY2xhc3M9ImNvbC1zdGFydC0xIHJvdy1zdGFydC0xIHNlbGVjdC1ub25lIgoJCQkJCXJvbGU9InByZXNlbnRhdGlvbiIKCQkJCQlzdHlsZT17YHotaW5kZXg6JHtkcmFnZ2luZ0NhcmRJbmRleCA9PT0gY2FyZEluZGV4ID8gaXRlbXMubGVuZ3RoICsgMTAgOiAodHJhbnNmb3JtPy56SW5kZXggPz8gMSl9O3RvdWNoLWFjdGlvbjoke2NhcmRJbmRleCA9PT0gdG9wQ2FyZEluZGV4ID8gIm5vbmUiIDogImF1dG8ifTtjdXJzb3I6JHtjYXJkSW5kZXggPT09IHRvcENhcmRJbmRleCA/IChkcmFnZ2luZ0NhcmRJbmRleCA9PT0gY2FyZEluZGV4ID8gImdyYWJiaW5nIiA6ICJncmFiIikgOiAiZGVmYXVsdCJ9O2B9CgkJCQkJb25wb2ludGVyZG93bj17KGV2ZW50KSA9PiBoYW5kbGVQb2ludGVyRG93bihldmVudCwgY2FyZEluZGV4KX0KCQkJCQlvbnBvaW50ZXJtb3ZlPXsoZXZlbnQpID0+IGhhbmRsZVBvaW50ZXJNb3ZlKGV2ZW50LCBjYXJkSW5kZXgpfQoJCQkJCW9ucG9pbnRlcnVwPXsoZXZlbnQpID0+IGhhbmRsZVBvaW50ZXJFbmQoZXZlbnQsIGNhcmRJbmRleCl9CgkJCQkJb25wb2ludGVyY2FuY2VsPXsoZXZlbnQpID0+IGhhbmRsZVBvaW50ZXJFbmQoZXZlbnQsIGNhcmRJbmRleCl9CgkJCQk+CgkJCQkJe0ByZW5kZXIgY2hpbGRyZW4oaXRlbSwgY2FyZEluZGV4KX0KCQkJCTwvZGl2PgoJCQl7L2lmfQoJCXsvZWFjaH0KCXsvaWZ9CjwvZGl2Pgo=", "components/flip-grid/FlipGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBGbGlwIH0gZnJvbSAiZ3NhcC9kaXN0L0ZsaXAiOwoJaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBTbmlwcGV0IHRvIHJlbmRlciB0aGUgZ3JpZCBpdGVtcy4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBBbmltYXRpb24gZHVyYXRpb24gaW4gc2Vjb25kcy4KCQkgKiBAZGVmYXVsdCAwLjUKCQkgKi8KCQlkdXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBBbmltYXRpb24gZWFzaW5nIGZ1bmN0aW9uLgoJCSAqIEBkZWZhdWx0ICJwb3dlcjIuaW5PdXQiCgkJICovCgkJZWFzZT86IHN0cmluZzsKCQkvKioKCQkgKiBTdGFnZ2VyIGRlbGF5IGJldHdlZW4gaXRlbXMgaW4gc2Vjb25kcy4KCQkgKiBAZGVmYXVsdCAwCgkJICovCgkJc3RhZ2dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBOdW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIGdyaWQuCgkJICovCgkJY29sdW1ucz86IG51bWJlciB8IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGlubGluZSBzdHlsZXMuCgkJICovCgkJc3R5bGU/OiBzdHJpbmc7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNoaWxkcmVuLAoJCWNsYXNzOiBjbGFzc05hbWUgPSB1bmRlZmluZWQsCgkJZHVyYXRpb24gPSAwLjUsCgkJZWFzZSA9ICJwb3dlcjIuaW5PdXQiLAoJCXN0YWdnZXIgPSAwLAoJCWNvbHVtbnMgPSB1bmRlZmluZWQsCgkJc3R5bGUgPSB1bmRlZmluZWQsCgkJLi4ucHJvcHMKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgc3RhdGU6IEZsaXAuRmxpcFN0YXRlIHwgbnVsbCA9IG51bGw7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyID09PSBub2RlKSB7CgkJCQljb250YWluZXIgPSB1bmRlZmluZWQ7CgkJCX0KCQl9OwoJfTsKCglsZXQgY29tcHV0ZWRTdHlsZSA9ICRkZXJpdmVkLmJ5KCgpID0+IHsKCQljb25zdCBiYXNlU3R5bGUgPSBzdHlsZSB8fCAiIjsKCQlpZiAoY29sdW1ucykgewoJCQljb25zdCBjb2xTdHlsZSA9IGBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgke2NvbHVtbnN9LCBtaW5tYXgoMCwgMWZyKSlgOwoJCQlyZXR1cm4gYmFzZVN0eWxlID8gYCR7YmFzZVN0eWxlfTsgJHtjb2xTdHlsZX1gIDogY29sU3R5bGU7CgkJfQoJCXJldHVybiBiYXNlU3R5bGU7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoRmxpcCk7Cgl9KTsKCgkkZWZmZWN0LnByZSgoKSA9PiB7CgkJdm9pZCBjbGFzc05hbWU7CgkJdm9pZCBjb21wdXRlZFN0eWxlOwoKCQlpZiAoY29udGFpbmVyKSB7CgkJCWNvbnN0IGl0ZW1zID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5mbGlwLWdyaWQtaXRlbSIpOwoJCQlpZiAoaXRlbXMubGVuZ3RoID4gMCkgewoJCQkJc3RhdGUgPSBGbGlwLmdldFN0YXRlKFsuLi5pdGVtcywgY29udGFpbmVyXSk7CgkJCX0KCQl9Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQl2b2lkIGNsYXNzTmFtZTsKCQl2b2lkIGNvbXB1dGVkU3R5bGU7CgoJCWlmIChzdGF0ZSAmJiBjb250YWluZXIpIHsKCQkJY29uc3QgaXRlbXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiLmZsaXAtZ3JpZC1pdGVtIik7CgoJCQlGbGlwLmZyb20oc3RhdGUsIHsKCQkJCXRhcmdldHM6IFsuLi5pdGVtcywgY29udGFpbmVyXSwKCQkJCWR1cmF0aW9uLAoJCQkJZWFzZSwKCQkJCXN0YWdnZXIsCgkJCQlhYnNvbHV0ZTogIi5mbGlwLWdyaWQtaXRlbSIsCgkJCQlvbkVudGVyOiAoZWxlbWVudHMpID0+IHsKCQkJCQlnc2FwLmZyb21UbygKCQkJCQkJZWxlbWVudHMsCgkJCQkJCXsgb3BhY2l0eTogMCwgc2NhbGU6IDAgfSwKCQkJCQkJeyBvcGFjaXR5OiAxLCBzY2FsZTogMSwgZHVyYXRpb24sIGVhc2UgfSwKCQkJCQkpOwoJCQkJfSwKCQkJCW9uTGVhdmU6IChlbGVtZW50cykgPT4gewoJCQkJCWdzYXAudG8oZWxlbWVudHMsIHsgb3BhY2l0eTogMCwgc2NhbGU6IDAsIGR1cmF0aW9uLCBlYXNlIH0pOwoJCQkJfSwKCQkJfSk7CgoJCQlzdGF0ZSA9IG51bGw7CgkJfQoJfSk7Cjwvc2NyaXB0PgoKPGRpdgoJe0BhdHRhY2ggYXR0YWNoQ29udGFpbmVyfQoJY2xhc3M9e2NuKCJyZWxhdGl2ZSBncmlkIiwgY2xhc3NOYW1lKX0KCXN0eWxlPXtjb21wdXRlZFN0eWxlfQoJey4uLnByb3BzfQo+Cgl7QHJlbmRlciBjaGlsZHJlbj8uKCl9CjwvZGl2Pgo=", "components/flip-grid/FlipGridItem.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogU25pcHBldCB0byByZW5kZXIgdGhlIGl0ZW0gY29udGVudC4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgRkxJUCBhbmltYXRpb24uCgkJICovCgkJaWQ6IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGlubGluZSBzdHlsZXMuCgkJICovCgkJc3R5bGU/OiBzdHJpbmc7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNoaWxkcmVuLAoJCWNsYXNzOiBjbGFzc05hbWUgPSB1bmRlZmluZWQsCgkJaWQsCgkJc3R5bGUgPSB1bmRlZmluZWQsCgkJLi4ucHJvcHMKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdgoJY2xhc3M9e2NuKCJmbGlwLWdyaWQtaXRlbSIsIGNsYXNzTmFtZSl9CglkYXRhLWZsaXAtaWQ9e2lkfQoJe3N0eWxlfQoJey4uLnByb3BzfQo+Cgl7QHJlbmRlciBjaGlsZHJlbj8uKCl9CjwvZGl2Pgo=", "components/floating-menu/FloatingMenu.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyB1bnRyYWNrIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBTcGxpdFRleHQgfSBmcm9tICJnc2FwL2Rpc3QvU3BsaXRUZXh0IjsKCWltcG9ydCB7IG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAiY2xzeCI7CgoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGVuc3VyZU1vdGlvbkNvcmVFYXNlLCByZWdpc3RlclBsdWdpbk9uY2UgfSBmcm9tICIuLi9oZWxwZXJzL2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgeyBwb3J0YWwgfSBmcm9tICIuLi91dGlscy91c2UtcG9ydGFsIjsKCgl0eXBlIE1lbnVWYXJpYW50ID0gImRlZmF1bHQiIHwgIm11dGVkIjsKCglpbnRlcmZhY2UgTWVudUxpbmsgewoJCS8qKgoJCSAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBsaW5rLgoJCSAqLwoJCWxhYmVsOiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIFVSTCB0aGUgbGluayBwb2ludHMgdG8uCgkJICovCgkJaHJlZjogc3RyaW5nOwoJfQoKCWludGVyZmFjZSBNZW51QnV0dG9uIHsKCQkvKioKCQkgKiBUaGUgdGV4dCB0byBkaXNwbGF5IG9uIHRoZSBidXR0b24uCgkJICovCgkJbGFiZWw6IHN0cmluZzsKCQkvKioKCQkgKiBUaGUgVVJMIHRoZSBidXR0b24gbGlua3MgdG8uCgkJICovCgkJaHJlZjogc3RyaW5nOwoJfQoKCWludGVyZmFjZSBNZW51R3JvdXAgewoJCS8qKgoJCSAqIFRoZSB0aXRsZSBvZiB0aGUgbWVudSBncm91cCwgZGlzcGxheWVkIGFib3ZlIHRoZSBsaW5rcy4KCQkgKi8KCQl0aXRsZTogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSB2aXN1YWwgc3R5bGUgdmFyaWFudCBvZiB0aGUgZ3JvdXAuCgkJICogJ211dGVkJyBhZGRzIGEgYmFja2dyb3VuZCBjb2xvci4KCQkgKi8KCQl2YXJpYW50PzogTWVudVZhcmlhbnQ7CgkJLyoqCgkJICogQXJyYXkgb2YgbGlua3MgdG8gZGlzcGxheSB3aXRoaW4gdGhpcyBncm91cC4KCQkgKi8KCQlsaW5rczogTWVudUxpbmtbXTsKCX0KCglpbnRlcmZhY2UgRmxvYXRpbmdNZW51Q2xhc3NlcyB7CgkJcm9vdD86IENsYXNzVmFsdWU7CgkJb3ZlcmxheT86IENsYXNzVmFsdWU7CgkJaGVhZGVyPzogQ2xhc3NWYWx1ZTsKCQl0b2dnbGVCdXR0b24/OiBDbGFzc1ZhbHVlOwoJCXRvZ2dsZUxpbmU/OiBDbGFzc1ZhbHVlOwoJCWxvZ28/OiBDbGFzc1ZhbHVlOwoJCWFjdGlvbnM/OiBDbGFzc1ZhbHVlOwoJCXByaW1hcnlCdXR0b24/OiBDbGFzc1ZhbHVlOwoJCXNlY29uZGFyeUJ1dHRvbj86IENsYXNzVmFsdWU7CgkJbWVudVdyYXBwZXI/OiBDbGFzc1ZhbHVlOwoJCWdyaWQ/OiBDbGFzc1ZhbHVlOwoJCWdyb3VwPzogQ2xhc3NWYWx1ZTsKCQlncm91cE11dGVkPzogQ2xhc3NWYWx1ZTsKCQlncm91cFRpdGxlPzogQ2xhc3NWYWx1ZTsKCQlsaW5rPzogQ2xhc3NWYWx1ZTsKCQlsaW5rVGV4dD86IENsYXNzVmFsdWU7CgkJbGlua1VuZGVybGluZT86IENsYXNzVmFsdWU7CgkJZGl2aWRlcj86IENsYXNzVmFsdWU7Cgl9CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBHcm91cHMgb2YgbGlua3MgdG8gZGlzcGxheSBpbiB0aGUgbWVudS4KCQkgKi8KCQltZW51R3JvdXBzOiBNZW51R3JvdXBbXTsKCQkvKioKCQkgKiBTbmlwcGV0IGZvciB0aGUgbG9nbyBpY29uIChhbmQgb3B0aW9uYWwgdGV4dCkuCgkJICovCgkJbG9nbz86IFNuaXBwZXQ7CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHByaW1hcnkgYnV0dG9uIGluIHRoZSBoZWFkZXIuCgkJICovCgkJcHJpbWFyeUJ1dHRvbj86IE1lbnVCdXR0b247CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24gaW4gdGhlIGhlYWRlci4KCQkgKi8KCQlzZWNvbmRhcnlCdXR0b24/OiBNZW51QnV0dG9uOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGNsYXNzZXMgZm9yIHNwZWNpZmljIG1lbnUgc2xvdHMuCgkJICovCgkJY2xhc3Nlcz86IEZsb2F0aW5nTWVudUNsYXNzZXM7CgkJLyoqCgkJICogVGhlIHRhcmdldCBlbGVtZW50IG9yIHNlbGVjdG9yIHRvIGFwcGVuZCB0aGUgbWVudSB0by4KCQkgKiBVc2VmdWwgZm9yIGNvbnRhaW5tZW50IGluIGRlbW9zIG9yIHNwZWNpZmljIGNvbnRhaW5lcnMuCgkJICogQGRlZmF1bHQgImJvZHkiCgkJICovCgkJcG9ydGFsVGFyZ2V0PzogSFRNTEVsZW1lbnQgfCBzdHJpbmc7Cgl9CgoJbGV0IHsKCQltZW51R3JvdXBzLAoJCWxvZ28sCgkJcHJpbWFyeUJ1dHRvbiwKCQlzZWNvbmRhcnlCdXR0b24sCgkJY2xhc3M6IGNsYXNzTmFtZSwKCQljbGFzc2VzLAoJCXBvcnRhbFRhcmdldCA9ICJib2R5IiwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGlzT3BlbiA9ICRzdGF0ZShmYWxzZSk7CglsZXQgdGltZWxpbmU6IGdzYXAuY29yZS5UaW1lbGluZSB8IG51bGwgPSBudWxsOwoKCWxldCBjb250YWluZXJSZWY6IEhUTUxFbGVtZW50OwoJbGV0IG1lbnVXcmFwcGVyUmVmOiBIVE1MRWxlbWVudDsKCWxldCBsaW5lMVJlZjogSFRNTEVsZW1lbnQ7CglsZXQgbGluZTJSZWY6IEhUTUxFbGVtZW50OwoJbGV0IG92ZXJsYXlSZWY6IEhUTUxFbGVtZW50OwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lclJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lclJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaE1lbnVXcmFwcGVyUmVmID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJbWVudVdyYXBwZXJSZWYgPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hMaW5lMVJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWxpbmUxUmVmID0gbm9kZTsKCX07CgoJY29uc3QgYXR0YWNoTGluZTJSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQlsaW5lMlJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaE92ZXJsYXlSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQlvdmVybGF5UmVmID0gbm9kZTsKCX07CgoJZnVuY3Rpb24gdG9nZ2xlKCkgewoJCWlmICghdGltZWxpbmUpIHJldHVybjsKCQlpc09wZW4gPSAhaXNPcGVuOwoJCWlmIChpc09wZW4pIHsKCQkJdGltZWxpbmUucGxheSgpOwoJCX0gZWxzZSB7CgkJCXRpbWVsaW5lLnJldmVyc2UoKTsKCQl9Cgl9CgoJb25Nb3VudCgoKSA9PiB7CgkJcmVnaXN0ZXJQbHVnaW5PbmNlKFNwbGl0VGV4dCk7CgkJZW5zdXJlTW90aW9uQ29yZUVhc2UoKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghbWVudUdyb3Vwcy5sZW5ndGgpIHJldHVybjsKCgkJbGV0IGNhbmNlbGxlZCA9IGZhbHNlOwoJCWxldCBzcGxpdHM6IFNwbGl0VGV4dFtdID0gW107CgoJCWNvbnN0IGluaXQgPSBhc3luYyAoKSA9PiB7CgkJCWF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5OwoJCQlpZiAoY2FuY2VsbGVkKSByZXR1cm47CgoJCQljb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwoJCQljb25zdCBpc01vYmlsZSA9IHdpZHRoIDwgNzY4OwoJCQljb25zdCBpc1RhYmxldCA9IHdpZHRoID49IDc2OCAmJiB3aWR0aCA8IDEwMjQ7CgoJCQlsZXQgbWF4V2lkdGhPcGVuID0gIjc1JSI7CgkJCWxldCBtYXhXaWR0aEluaXRpYWwgPSAiNTAlIjsKCgkJCWlmIChpc01vYmlsZSkgewoJCQkJbWF4V2lkdGhPcGVuID0gIjEwMCUiOwoJCQkJbWF4V2lkdGhJbml0aWFsID0gIjk1JSI7CgkJCX0gZWxzZSBpZiAoaXNUYWJsZXQpIHsKCQkJCW1heFdpZHRoT3BlbiA9ICI4NSUiOwoJCQkJbWF4V2lkdGhJbml0aWFsID0gIjcwJSI7CgkJCX0KCgkJCWdzYXAuc2V0KG92ZXJsYXlSZWYsIHsgYXV0b0FscGhhOiAwIH0pOwoJCQlnc2FwLnNldChjb250YWluZXJSZWYsIHsgbWF4V2lkdGg6IG1heFdpZHRoSW5pdGlhbCB9KTsKCQkJZ3NhcC5zZXQobWVudVdyYXBwZXJSZWYsIHsgaGVpZ2h0OiAwLCBhdXRvQWxwaGE6IDAgfSk7CgoJCQljb25zdCBsaW5rRWxlbWVudHMgPSBnc2FwLnV0aWxzLnRvQXJyYXkoCgkJCQlgW2RhdGEtc2xvdD0ibGluay10ZXh0Il1gLAoJCQkJbWVudVdyYXBwZXJSZWYsCgkJCSkgYXMgSFRNTEVsZW1lbnRbXTsKCgkJCXNwbGl0cyA9IGxpbmtFbGVtZW50cy5tYXAoKGVsKSA9PgoJCQkJU3BsaXRUZXh0LmNyZWF0ZShlbCwgeyB0eXBlOiAibGluZXMiLCBtYXNrOiAibGluZXMiIH0pLAoJCQkpOwoJCQljb25zdCBhbGxMaW5lcyA9IHNwbGl0cy5mbGF0TWFwKChzKSA9PiBzLmxpbmVzKTsKCgkJCXRpbWVsaW5lID0gZ3NhcC50aW1lbGluZSh7CgkJCQlwYXVzZWQ6IHRydWUsCgkJCQlkZWZhdWx0czogeyBlYXNlOiAibW90aW9uLWNvcmUtZWFzZSIsIGR1cmF0aW9uOiAwLjUgfSwKCQkJfSk7CgoJCQl0aW1lbGluZQoJCQkJLnRvKAoJCQkJCWNvbnRhaW5lclJlZiwKCQkJCQl7CgkJCQkJCW1heFdpZHRoOiBtYXhXaWR0aE9wZW4sCgkJCQkJCS4uLihpc01vYmlsZQoJCQkJCQkJPyB7CgkJCQkJCQkJCXRvcDogMCwKCQkJCQkJCQkJcGFkZGluZ1RvcDogIjAuNXJlbSIsCgkJCQkJCQkJCWJvcmRlclRvcExlZnRSYWRpdXM6IDAsCgkJCQkJCQkJCWJvcmRlclRvcFJpZ2h0UmFkaXVzOiAwLAoJCQkJCQkJCX0KCQkJCQkJCToge30pLAoJCQkJCX0sCgkJCQkJMCwKCQkJCSkKCQkJCS50byhvdmVybGF5UmVmLCB7IGF1dG9BbHBoYTogMSB9LCAwKQoJCQkJLnRvKG1lbnVXcmFwcGVyUmVmLCB7IGhlaWdodDogImF1dG8iLCBhdXRvQWxwaGE6IDEgfSwgMC4yKQoJCQkJLnRvKFtsaW5lMVJlZiwgbGluZTJSZWZdLCB7IHk6IDAsIGR1cmF0aW9uOiAwLjQgfSwgMC4yKQoJCQkJLnRvKGxpbmUxUmVmLCB7IHJvdGF0aW9uOiA0NSwgZHVyYXRpb246IDAuNCB9LCAwLjIpCgkJCQkudG8obGluZTJSZWYsIHsgcm90YXRpb246IC00NSwgZHVyYXRpb246IDAuNCB9LCAwLjIpOwoKCQkJaWYgKGFsbExpbmVzLmxlbmd0aCkgewoJCQkJdGltZWxpbmUuZnJvbSgKCQkJCQlhbGxMaW5lcywKCQkJCQl7CgkJCQkJCXlQZXJjZW50OiAxMDAsCgkJCQkJCWF1dG9BbHBoYTogMCwKCQkJCQkJc3RhZ2dlcjogMC4wMiwKCQkJCQl9LAoJCQkJCTAuMywKCQkJCSk7CgkJCX0KCgkJCWlmICh1bnRyYWNrKCgpID0+IGlzT3BlbikpIHsKCQkJCXRpbWVsaW5lLnByb2dyZXNzKDEpOwoJCQl9CgkJfTsKCgkJaW5pdCgpOwoKCQlyZXR1cm4gKCkgPT4gewoJCQljYW5jZWxsZWQgPSB0cnVlOwoJCQlpZiAodGltZWxpbmUpIHsKCQkJCXRpbWVsaW5lLmtpbGwoKTsKCQkJCXRpbWVsaW5lID0gbnVsbDsKCQkJfQoJCQlzcGxpdHMuZm9yRWFjaCgocykgPT4gcy5yZXZlcnQoKSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYKCXVzZTpwb3J0YWw9e3BvcnRhbFRhcmdldH0KCXtAYXR0YWNoIGF0dGFjaE92ZXJsYXlSZWZ9CglkYXRhLXNsb3Q9Im92ZXJsYXkiCgljbGFzcz17Y24oCgkJInBvaW50ZXItZXZlbnRzLW5vbmUgZml4ZWQgaW5zZXQtMCB6LTQwIGJnLWJhY2tncm91bmQtaW5zZXQvODAgb3BhY2l0eS0wIGRhdGEtW29wZW49dHJ1ZV06cG9pbnRlci1ldmVudHMtYXV0byIsCgkJY2xhc3Nlcz8ub3ZlcmxheSwKCSl9CglkYXRhLW9wZW49e2lzT3Blbn0KCW9uY2xpY2s9e3RvZ2dsZX0KCW9ua2V5ZG93bj17KGUpID0+IHsKCQlpZiAoZS5rZXkgPT09ICJFc2NhcGUiICYmIGlzT3BlbikgewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCXRvZ2dsZSgpOwoJCX0KCX19Cglyb2xlPSJidXR0b24iCgl0YWJpbmRleD0iLTEiCglhcmlhLWxhYmVsPSJDbG9zZSBtZW51Igo+PC9kaXY+Cgo8ZGl2Cgl1c2U6cG9ydGFsPXtwb3J0YWxUYXJnZXR9Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJSZWZ9CglkYXRhLXNsb3Q9InJvb3QiCgljbGFzcz17Y24oCgkJImZpeGVkIHRvcC0yIGxlZnQtMS8yIHotNTAgdy1mdWxsIG1heC13LVs5NXZ3XSAtdHJhbnNsYXRlLXgtMS8yIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQgc2hhZG93LW1kIG1kOnRvcC00IG1kOm1heC13LVs3MHZ3XSBsZzptYXgtdy1bNTB2d10iLAoJCWNsYXNzTmFtZSwKCQljbGFzc2VzPy5yb290LAoJKX0KPgoJPGRpdgoJCWRhdGEtc2xvdD0iaGVhZGVyIgoJCWNsYXNzPXtjbigKCQkJInJlbGF0aXZlIHotMjAgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTEiLAoJCQljbGFzc2VzPy5oZWFkZXIsCgkJKX0KCT4KCQk8YnV0dG9uCgkJCW9uY2xpY2s9e3RvZ2dsZX0KCQkJZGF0YS1zbG90PSJ0b2dnbGUtYnV0dG9uIgoJCQljbGFzcz17Y24oCgkJCQkiZ3JvdXAgcmVsYXRpdmUgZmxleCBoLTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXNtIHByLTIgdHJhbnNpdGlvbi1bYmFja2dyb3VuZC1jb2xvcl0gZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGhvdmVyOmJnLWFjY2VudC8xMCIsCgkJCQljbGFzc2VzPy50b2dnbGVCdXR0b24sCgkJCSl9CgkJCWFyaWEtbGFiZWw9IlRvZ2dsZSBtZW51IgoJCT4KCQkJPGRpdiBjbGFzcz0icmVsYXRpdmUgZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIj4KCQkJCTxzcGFuCgkJCQkJe0BhdHRhY2ggYXR0YWNoTGluZTFSZWZ9CgkJCQkJZGF0YS1zbG90PSJ0b2dnbGUtbGluZSIKCQkJCQljbGFzcz17Y24oCgkJCQkJCSJhYnNvbHV0ZSBoLXB4IHctNiBiZy1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBncm91cC1ob3ZlcjpiZy1hY2NlbnQiLAoJCQkJCQljbGFzc2VzPy50b2dnbGVMaW5lLAoJCQkJCSl9CgkJCQkJc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpIgoJCQkJPjwvc3Bhbj4KCQkJCTxzcGFuCgkJCQkJe0BhdHRhY2ggYXR0YWNoTGluZTJSZWZ9CgkJCQkJZGF0YS1zbG90PSJ0b2dnbGUtbGluZSIKCQkJCQljbGFzcz17Y24oCgkJCQkJCSJhYnNvbHV0ZSBoLXB4IHctNiBiZy1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBncm91cC1ob3ZlcjpiZy1hY2NlbnQiLAoJCQkJCQljbGFzc2VzPy50b2dnbGVMaW5lLAoJCQkJCSl9CgkJCQkJc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KSIKCQkJCT48L3NwYW4+CgkJCTwvZGl2PgoJCQk8c3BhbgoJCQkJY2xhc3M9Im1sLTEgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJhbnNpdGlvbi1bY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBncm91cC1ob3Zlcjp0ZXh0LWFjY2VudCIKCQkJPgoJCQkJTWVudQoJCQk8L3NwYW4+CgkJPC9idXR0b24+CgoJCTxkaXYKCQkJY2xhc3M9ImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRyYW5zZm9ybS1ncHUiCgkJCXN0eWxlPSJiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IgoJCT4KCQkJeyNpZiBsb2dvfQoJCQkJPGRpdgoJCQkJCWRhdGEtc2xvdD0ibG9nbyIKCQkJCQljbGFzcz17Y24oImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2xhc3Nlcz8ubG9nbyl9CgkJCQk+CgkJCQkJe0ByZW5kZXIgbG9nbygpfQoJCQkJPC9kaXY+CgkJCXsvaWZ9CgkJPC9kaXY+CgoJCTxkaXYKCQkJZGF0YS1zbG90PSJhY3Rpb25zIgoJCQljbGFzcz17Y24oImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIiwgY2xhc3Nlcz8uYWN0aW9ucyl9CgkJPgoJCQl7I2lmIHNlY29uZGFyeUJ1dHRvbn0KCQkJCTxhCgkJCQkJaHJlZj17c2Vjb25kYXJ5QnV0dG9uLmhyZWZ9CgkJCQkJZGF0YS1zbG90PSJzZWNvbmRhcnktYnV0dG9uIgoJCQkJCWNsYXNzPXtjbigKCQkJCQkJImhpZGRlbiBoLTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXNtIHB4LTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJhbnNpdGlvbi1bYmFja2dyb3VuZC1jb2xvcixjb2xvcl0gZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGhvdmVyOmJnLWJhY2tncm91bmQtbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIG1kOmZsZXgiLAoJCQkJCQljbGFzc2VzPy5zZWNvbmRhcnlCdXR0b24sCgkJCQkJKX0KCQkJCT4KCQkJCQl7c2Vjb25kYXJ5QnV0dG9uLmxhYmVsfQoJCQkJPC9hPgoJCQl7L2lmfQoJCQl7I2lmIHByaW1hcnlCdXR0b259CgkJCQk8YQoJCQkJCWhyZWY9e3ByaW1hcnlCdXR0b24uaHJlZn0KCQkJCQlkYXRhLXNsb3Q9InByaW1hcnktYnV0dG9uIgoJCQkJCWNsYXNzPXtjbigKCQkJCQkJImZsZXggaC0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1zbSBiZy1hY2NlbnQvMTAgcHgtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYWNjZW50IHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBob3ZlcjpiZy1hY2NlbnQvMjAiLAoJCQkJCQljbGFzc2VzPy5wcmltYXJ5QnV0dG9uLAoJCQkJCSl9CgkJCQk+CgkJCQkJe3ByaW1hcnlCdXR0b24ubGFiZWx9CgkJCQk8L2E+CgkJCXsvaWZ9CgkJPC9kaXY+Cgk8L2Rpdj4KCgk8ZGl2CgkJe0BhdHRhY2ggYXR0YWNoTWVudVdyYXBwZXJSZWZ9CgkJZGF0YS1zbG90PSJtZW51LXdyYXBwZXIiCgkJY2xhc3M9e2NuKAoJCQkiaC0wIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLXQgYm9yZGVyLWJvcmRlciBvcGFjaXR5LTAiLAoJCQljbGFzc2VzPy5tZW51V3JhcHBlciwKCQkpfQoJPgoJCTxkaXYKCQkJZGF0YS1zbG90PSJncmlkIgoJCQljbGFzcz17Y24oCgkJCQkiZ3JpZCBtYXgtaC1bNjV2aF0gZ3JpZC1jb2xzLTEgZ2FwLTQgb3ZlcmZsb3cteS1hdXRvIG92ZXJzY3JvbGwtY29udGFpbiBwLTQgbWQ6bWF4LWgtbm9uZSBtZDpncmlkLWNvbHMtMyBtZDpvdmVyZmxvdy12aXNpYmxlIiwKCQkJCWNsYXNzZXM/LmdyaWQsCgkJCSl9CgkJPgoJCQl7I2VhY2ggbWVudUdyb3VwcyBhcyBncm91cCAoZ3JvdXAudGl0bGUpfQoJCQkJPGRpdgoJCQkJCWRhdGEtc2xvdD0iZ3JvdXAiCgkJCQkJY2xhc3M9e2NuKAoJCQkJCQkiZmxleCBmbGV4LWNvbCBnYXAtNCByb3VuZGVkLXNtIHAtNCB0cmFuc2l0aW9uLWNvbG9ycyBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSIsCgkJCQkJCWdyb3VwLnZhcmlhbnQgPT09ICJtdXRlZCIKCQkJCQkJCT8gImJnLWJhY2tncm91bmQtbXV0ZWQiCgkJCQkJCQk6ICJiZy10cmFuc3BhcmVudCIsCgkJCQkJCWNsYXNzZXM/Lmdyb3VwLAoJCQkJCQlncm91cC52YXJpYW50ID09PSAibXV0ZWQiICYmIGNsYXNzZXM/Lmdyb3VwTXV0ZWQsCgkJCQkJKX0KCQkJCT4KCQkJCQk8aDMKCQkJCQkJZGF0YS1zbG90PSJncm91cC10aXRsZSIKCQkJCQkJY2xhc3M9e2NuKAoJCQkJCQkJIm1vbm8gdGV4dC14cyBmb250LW1lZGl1bSB0cmFja2luZy13aWRlciB0ZXh0LWZvcmVncm91bmQtbXV0ZWQvNTAgdXBwZXJjYXNlIiwKCQkJCQkJCWNsYXNzZXM/Lmdyb3VwVGl0bGUsCgkJCQkJCSl9CgkJCQkJPgoJCQkJCQl7Z3JvdXAudGl0bGV9CgkJCQkJPC9oMz4KCQkJCQk8ZGl2IGNsYXNzPSJtdC00IGZsZXggZmxleC1jb2wgZ2FwLTQiPgoJCQkJCQl7I2VhY2ggZ3JvdXAubGlua3MgYXMgbGluaywgaSAobGluay5ocmVmICsgbGluay5sYWJlbCl9CgkJCQkJCQk8YQoJCQkJCQkJCWhyZWY9e2xpbmsuaHJlZn0KCQkJCQkJCQlkYXRhLXNsb3Q9ImxpbmsiCgkJCQkJCQkJY2xhc3M9e2NuKAoJCQkJCQkJCQkiZ3JvdXAvbGluayByZWxhdGl2ZSBibG9jayB3LWZpdCB0ZXh0LTJ4bCBmb250LW5vcm1hbCB0ZXh0LWZvcmVncm91bmQtbXV0ZWQgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGhvdmVyOnRleHQtZm9yZWdyb3VuZCIsCgkJCQkJCQkJCWNsYXNzZXM/LmxpbmssCgkJCQkJCQkJKX0KCQkJCQkJCT4KCQkJCQkJCQk8c3BhbiBjbGFzcz0icmVsYXRpdmUgei0xMCBibG9jayBsZWFkaW5nLXRpZ2h0Ij4KCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCWRhdGEtc2xvdD0ibGluay10ZXh0IgoJCQkJCQkJCQkJY2xhc3M9e2NuKAoJCQkJCQkJCQkJCSJtZW51LWxpbmstdGV4dCBibG9jayB3aGl0ZXNwYWNlLW5vd3JhcCIsCgkJCQkJCQkJCQkJY2xhc3Nlcz8ubGlua1RleHQsCgkJCQkJCQkJCQkpfQoJCQkJCQkJCQk+CgkJCQkJCQkJCQl7bGluay5sYWJlbH0KCQkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQk8c3BhbgoJCQkJCQkJCQlkYXRhLXNsb3Q9ImxpbmstdW5kZXJsaW5lIgoJCQkJCQkJCQljbGFzcz17Y24oCgkJCQkJCQkJCQkiYWJzb2x1dGUgLWJvdHRvbS0xIGxlZnQtMCBoLXB4IHctZnVsbCBvcmlnaW4tcmlnaHQgc2NhbGUteC0wIGJnLWZvcmVncm91bmQgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGdyb3VwLWhvdmVyL2xpbms6b3JpZ2luLWxlZnQgZ3JvdXAtaG92ZXIvbGluazpzY2FsZS14LTEwMCIsCgkJCQkJCQkJCQljbGFzc2VzPy5saW5rVW5kZXJsaW5lLAoJCQkJCQkJCQkpfQoJCQkJCQkJCT48L3NwYW4+CgkJCQkJCQk8L2E+CgkJCQkJCQl7I2lmIGkgPCBncm91cC5saW5rcy5sZW5ndGggLSAxfQoJCQkJCQkJCTxocgoJCQkJCQkJCQlkYXRhLXNsb3Q9ImRpdmlkZXIiCgkJCQkJCQkJCWNsYXNzPXtjbigiYm9yZGVyLWJvcmRlciIsIGNsYXNzZXM/LmRpdmlkZXIpfQoJCQkJCQkJCS8+CgkJCQkJCQl7L2lmfQoJCQkJCQl7L2VhY2h9CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJey9lYWNofQoJCTwvZGl2PgoJPC9kaXY+CjwvZGl2Pgo=", - "components/fluid-image-reveal/FluidImageReveal.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0ZsdWlkSW1hZ2VSZXZlYWxTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBTY2VuZVByb3BzWyJiYXNlSW1hZ2UiXTsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBpbWFnZSByZXZlYWxlZCBieSB0aGUgZmx1aWQgbWFzay4KCQkgKi8KCQlyZXZlYWxJbWFnZTogU2NlbmVQcm9wc1sicmV2ZWFsSW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIERpc3NpcGF0aW9uIGZhY3RvciBmb3IgdGhlIHJldmVhbCBtYXNrLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQlkaXNzaXBhdGlvbj86IFNjZW5lUHJvcHNbImRpc3NpcGF0aW9uIl07CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogU2NlbmVQcm9wc1sicG9pbnRlclNpemUiXTsKCQkvKioKCQkgKiBGbHVpZCB2ZWxvY2l0eSBkaXNzaXBhdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJdmVsb2NpdHlEaXNzaXBhdGlvbj86IFNjZW5lUHJvcHNbInZlbG9jaXR5RGlzc2lwYXRpb24iXTsKCQkvKioKCQkgKiBQcmVzc3VyZSBpdGVyYXRpb25zLiBNb3JlIGl0ZXJhdGlvbnMgPSBtb3JlIGFjY3VyYXRlIGJ1dCBzbG93ZXIuCgkJICogQGRlZmF1bHQgMTAKCQkgKi8KCQlwcmVzc3VyZUl0ZXJhdGlvbnM/OiBTY2VuZVByb3BzWyJwcmVzc3VyZUl0ZXJhdGlvbnMiXTsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IFNjZW5lUHJvcHNbImJsZW5kU29mdG5lc3MiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkaXNzaXBhdGlvbiA9IDAuOTYsCgkJcG9pbnRlclNpemUgPSAwLjAwNSwKCQl2ZWxvY2l0eURpc3NpcGF0aW9uID0gMC45NiwKCQlwcmVzc3VyZUl0ZXJhdGlvbnMgPSAxMCwKCQlibGVuZFNvZnRuZXNzID0gMC4yMiwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IGRwciA9IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8Q2FudmFzIHtkcHJ9IHRvbmVNYXBwaW5nPXtOb1RvbmVNYXBwaW5nfT4KCQkJPFNjZW5lCgkJCQl7YmFzZUltYWdlfQoJCQkJe3JldmVhbEltYWdlfQoJCQkJe2Rpc3NpcGF0aW9ufQoJCQkJe3BvaW50ZXJTaXplfQoJCQkJe3ZlbG9jaXR5RGlzc2lwYXRpb259CgkJCQl7cHJlc3N1cmVJdGVyYXRpb25zfQoJCQkJe2JsZW5kU29mdG5lc3N9CgkJCS8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/fluid-image-reveal/FluidImageRevealScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogU291cmNlIFVSTCBvZiB0aGUgaW1hZ2UgcmV2ZWFsZWQgYnkgdGhlIGZsdWlkIG1hc2suCgkJICovCgkJcmV2ZWFsSW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSByZXZlYWwgbWFzay4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZsdWlkIHZlbG9jaXR5IGRpc3NpcGF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQl2ZWxvY2l0eURpc3NpcGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIFByZXNzdXJlIGl0ZXJhdGlvbnMuIE1vcmUgaXRlcmF0aW9ucyA9IG1vcmUgYWNjdXJhdGUgYnV0IHNsb3dlci4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCXByZXNzdXJlSXRlcmF0aW9ucz86IG51bWJlcjsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IG51bWJlcjsKCX0KCgl0eXBlIFBvaW50ZXJTdGF0ZSA9IHsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCWR4OiBudW1iZXI7CgkJZHk6IG51bWJlcjsKCQltb3ZlZDogYm9vbGVhbjsKCQlpbml0aWFsaXplZDogYm9vbGVhbjsKCX07CgoJdHlwZSBDYW52YXNNZXRyaWNzID0gewoJCXdpZHRoOiBudW1iZXI7CgkJaGVpZ2h0OiBudW1iZXI7Cgl9OwoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJCWJsZW5kU29mdG5lc3MgPSAwLjIyLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCB7IHJlbmRlcmVyLCBzaXplIH0gPSB1c2VUaHJlbHRlKCk7Cgljb25zdCBwb2ludGVyU3RhdGUgPSAkc3RhdGU8UG9pbnRlclN0YXRlPih7CgkJeDogMCwKCQl5OiAwLAoJCWR4OiAwLAoJCWR5OiAwLAoJCW1vdmVkOiBmYWxzZSwKCQlpbml0aWFsaXplZDogZmFsc2UsCgl9KTsKCWNvbnN0IGNhbnZhc01ldHJpY3MgPSAkc3RhdGU8Q2FudmFzTWV0cmljcz4oewoJCXdpZHRoOiAxLAoJCWhlaWdodDogMSwKCX0pOwoKCWNvbnN0IHBvaW50ZXJVdiA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7Cgljb25zdCBiYXNlVGV4dHVyZVNpemUgPSBuZXcgVEhSRUUuVmVjdG9yMigxLCAxKTsKCWNvbnN0IHJldmVhbFRleHR1cmVTaXplID0gbmV3IFRIUkVFLlZlY3RvcjIoMSwgMSk7CgoJY29uc3QgcG9pbnRlckZvcmNlQ2xhbXAgPSA0NTA7Cgljb25zdCBwb2ludGVyRm9yY2VJbml0aWFsTGVycCA9IDAuMjsKCWNvbnN0IHBvaW50ZXJGb3JjZUxlcnAgPSAwLjU1OwoKCWNvbnN0IGJhc2VUZXh0dXJlID0gJGRlcml2ZWQodXNlVGV4dHVyZShiYXNlSW1hZ2UpKTsKCWNvbnN0IHJldmVhbFRleHR1cmUgPSAkZGVyaXZlZCh1c2VUZXh0dXJlKHJldmVhbEltYWdlKSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdGV4ID0gJGJhc2VUZXh0dXJlOwoJCWlmICh0ZXg/LmltYWdlKSB7CgkJCWJhc2VUZXh0dXJlU2l6ZS5zZXQodGV4LmltYWdlLndpZHRoIHx8IDEsIHRleC5pbWFnZS5oZWlnaHQgfHwgMSk7CgkJfQoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdGV4ID0gJHJldmVhbFRleHR1cmU7CgkJaWYgKHRleD8uaW1hZ2UpIHsKCQkJcmV2ZWFsVGV4dHVyZVNpemUuc2V0KHRleC5pbWFnZS53aWR0aCB8fCAxLCB0ZXguaW1hZ2UuaGVpZ2h0IHx8IDEpOwoJCX0KCX0pOwoKCWNvbnN0IHVwZGF0ZVBvaW50ZXJQb3NpdGlvbiA9ICgKCQlweDogbnVtYmVyLAoJCXB5OiBudW1iZXIsCgkJd2lkdGg6IG51bWJlciwKCQloZWlnaHQ6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHByZXZYID0gcG9pbnRlclN0YXRlLng7CgkJY29uc3QgcHJldlkgPSBwb2ludGVyU3RhdGUueTsKCQljb25zdCB0YXJnZXREeCA9IFRIUkVFLk1hdGhVdGlscy5jbGFtcCgKCQkJNSAqIChweCAtIHByZXZYKSwKCQkJLXBvaW50ZXJGb3JjZUNsYW1wLAoJCQlwb2ludGVyRm9yY2VDbGFtcCwKCQkpOwoJCWNvbnN0IHRhcmdldER5ID0gVEhSRUUuTWF0aFV0aWxzLmNsYW1wKAoJCQk1ICogKHB5IC0gcHJldlkpLAoJCQktcG9pbnRlckZvcmNlQ2xhbXAsCgkJCXBvaW50ZXJGb3JjZUNsYW1wLAoJCSk7CgkJY29uc3QgbGVycEZhY3RvciA9IHBvaW50ZXJTdGF0ZS5pbml0aWFsaXplZAoJCQk/IHBvaW50ZXJGb3JjZUxlcnAKCQkJOiBwb2ludGVyRm9yY2VJbml0aWFsTGVycDsKCgkJcG9pbnRlclN0YXRlLm1vdmVkID0gdHJ1ZTsKCQlwb2ludGVyU3RhdGUuZHggPSBUSFJFRS5NYXRoVXRpbHMubGVycCgKCQkJcG9pbnRlclN0YXRlLmR4LAoJCQl0YXJnZXREeCwKCQkJbGVycEZhY3RvciwKCQkpOwoJCXBvaW50ZXJTdGF0ZS5keSA9IFRIUkVFLk1hdGhVdGlscy5sZXJwKAoJCQlwb2ludGVyU3RhdGUuZHksCgkJCXRhcmdldER5LAoJCQlsZXJwRmFjdG9yLAoJCSk7CgkJcG9pbnRlclN0YXRlLnggPSBweDsKCQlwb2ludGVyU3RhdGUueSA9IHB5OwoJCXBvaW50ZXJTdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7CgoJCWlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewoJCQlwb2ludGVyVXYuc2V0KHB4IC8gd2lkdGgsIDEgLSBweSAvIGhlaWdodCk7CgkJfQoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzIgdkw7CgkJdmFyeWluZyB2ZWMyIHZSOwoJCXZhcnlpbmcgdmVjMiB2VDsKCQl2YXJ5aW5nIHZlYzIgdkI7CgkJdW5pZm9ybSB2ZWMyIHVUZXhlbDsKCgkJdm9pZCBtYWluICgpIHsKCQkJdlV2ID0gdXY7CgkJCXZMID0gdlV2IC0gdmVjMih1VGV4ZWwueCwgMC4pOwoJCQl2UiA9IHZVdiArIHZlYzIodVRleGVsLngsIDAuKTsKCQkJdlQgPSB2VXYgKyB2ZWMyKDAuLCB1VGV4ZWwueSk7CgkJCXZCID0gdlV2IC0gdmVjMigwLiwgdVRleGVsLnkpOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7CgkJfQoJYDsKCgljb25zdCBhZHZlY3Rpb25TaGFkZXIgPSBgCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUlucHV0OwoJCXVuaWZvcm0gdmVjMiB1VGV4ZWw7CgkJdW5pZm9ybSBmbG9hdCB1RHQ7CgkJdW5pZm9ybSBmbG9hdCB1RGlzc2lwYXRpb247CgoJCXZlYzQgYmlsZXJwIChzYW1wbGVyMkQgc2FtLCB2ZWMyIHV2LCB2ZWMyIHRzaXplKSB7CgkJCXZlYzIgc3QgPSB1diAvIHRzaXplIC0gMC41OwoJCQl2ZWMyIGl1diA9IGZsb29yKHN0KTsKCQkJdmVjMiBmdXYgPSBmcmFjdChzdCk7CgkJCXZlYzQgYSA9IHRleHR1cmUyRChzYW0sIChpdXYgKyB2ZWMyKDAuNSwgMC41KSkgKiB0c2l6ZSk7CgkJCXZlYzQgYiA9IHRleHR1cmUyRChzYW0sIChpdXYgKyB2ZWMyKDEuNSwgMC41KSkgKiB0c2l6ZSk7CgkJCXZlYzQgYyA9IHRleHR1cmUyRChzYW0sIChpdXYgKyB2ZWMyKDAuNSwgMS41KSkgKiB0c2l6ZSk7CgkJCXZlYzQgZCA9IHRleHR1cmUyRChzYW0sIChpdXYgKyB2ZWMyKDEuNSwgMS41KSkgKiB0c2l6ZSk7CgkJCXJldHVybiBtaXgobWl4KGEsIGIsIGZ1di54KSwgbWl4KGMsIGQsIGZ1di54KSwgZnV2LnkpOwoJCX0KCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBjb29yZCA9IHZVdiAtIHVEdCAqIGJpbGVycCh1VmVsb2NpdHksIHZVdiwgdVRleGVsKS54eSAqIHVUZXhlbDsKCQkJZ2xfRnJhZ0NvbG9yID0gdURpc3NpcGF0aW9uICogYmlsZXJwKHVJbnB1dCwgY29vcmQsIHVUZXhlbCk7CgkJCWdsX0ZyYWdDb2xvci5hID0gMS47CgkJfQoJYDsKCgljb25zdCBkaXZlcmdlbmNlU2hhZGVyID0gYAoJCXZhcnlpbmcgaGlnaHAgdmVjMiB2VXY7CgkJdmFyeWluZyBoaWdocCB2ZWMyIHZMOwoJCXZhcnlpbmcgaGlnaHAgdmVjMiB2UjsKCQl2YXJ5aW5nIGhpZ2hwIHZlYzIgdlQ7CgkJdmFyeWluZyBoaWdocCB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2VCkueTsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZCKS55OwoJCQlmbG9hdCBkaXYgPSAuNiAqIChSIC0gTCArIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXYsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgcHJlc3N1cmVTaGFkZXIgPSBgCgkJdmFyeWluZyBoaWdocCB2ZWMyIHZVdjsKCQl2YXJ5aW5nIGhpZ2hwIHZlYzIgdkw7CgkJdmFyeWluZyBoaWdocCB2ZWMyIHZSOwoJCXZhcnlpbmcgaGlnaHAgdmVjMiB2VDsKCQl2YXJ5aW5nIGhpZ2hwIHZlYzIgdkI7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVByZXNzdXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVEaXZlcmdlbmNlOwoKCQl2b2lkIG1haW4gKCkgewoJCQlmbG9hdCBMID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdkwpLng7CgkJCWZsb2F0IFIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2UikueDsKCQkJZmxvYXQgVCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZUKS54OwoJCQlmbG9hdCBCID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdkIpLng7CgkJCWZsb2F0IGRpdmVyZ2VuY2UgPSB0ZXh0dXJlMkQodURpdmVyZ2VuY2UsIHZVdikueDsKCQkJZmxvYXQgcHJlc3N1cmUgPSAoTCArIFIgKyBCICsgVCAtIGRpdmVyZ2VuY2UpICogMC4yNTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChwcmVzc3VyZSwgMC4sIDAuLCAxLik7CgkJfQoJYDsKCgljb25zdCBncmFkaWVudFN1YnRyYWN0U2hhZGVyID0gYAoJCXZhcnlpbmcgaGlnaHAgdmVjMiB2VXY7CgkJdmFyeWluZyBoaWdocCB2ZWMyIHZMOwoJCXZhcnlpbmcgaGlnaHAgdmVjMiB2UjsKCQl2YXJ5aW5nIGhpZ2hwIHZlYzIgdlQ7CgkJdmFyeWluZyBoaWdocCB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlQpLng7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2QikueDsKCQkJdmVjMiB2ZWxvY2l0eSA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZVdikueHk7CgkJCXZlbG9jaXR5Lnh5IC09IHZlYzIoUiAtIEwsIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWxvY2l0eSwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IHNwbGF0U2hhZGVyID0gYAoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUlucHV0OwoJCXVuaWZvcm0gZmxvYXQgdVJhdGlvOwoJCXVuaWZvcm0gdmVjMyB1UG9pbnRWYWx1ZTsKCQl1bmlmb3JtIHZlYzIgdVBvaW50OwoJCXVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBwID0gdlV2IC0gdVBvaW50Lnh5OwoJCQlwLnggKj0gdVJhdGlvOwoJCQl2ZWMzIHNwbGF0ID0gcG93KDIuLCAtZG90KHAsIHApIC8gdVBvaW50U2l6ZSkgKiB1UG9pbnRWYWx1ZTsKCQkJdmVjMyBiYXNlID0gdGV4dHVyZTJEKHVJbnB1dCwgdlV2KS54eXo7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZSArIHNwbGF0LCAxLik7CgkJfQoJYDsKCgljb25zdCBvdXRwdXRTaGFkZXIgPSBgCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1TWFza1RleHR1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUJhc2VUZXh0dXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVSZXZlYWxUZXh0dXJlOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdUJhc2VUZXh0dXJlU2l6ZTsKCQl1bmlmb3JtIHZlYzIgdVJldmVhbFRleHR1cmVTaXplOwoJCXVuaWZvcm0gdmVjMiB1TWFza1RleGVsOwoJCXVuaWZvcm0gZmxvYXQgdUJsZW5kU29mdG5lc3M7CgoJCXZlYzIgZ2V0Q292ZXJVVih2ZWMyIHV2LCB2ZWMyIHRleHR1cmVTaXplKSB7CgkJCXZlYzIgcyA9IHVSZXNvbHV0aW9uIC8gdGV4dHVyZVNpemU7CgkJCWZsb2F0IHNjYWxlID0gbWF4KHMueCwgcy55KTsKCQkJdmVjMiBzY2FsZWRTaXplID0gdGV4dHVyZVNpemUgKiBzY2FsZTsKCQkJdmVjMiBvZmZzZXQgPSAodVJlc29sdXRpb24gLSBzY2FsZWRTaXplKSAqIDAuNTsKCQkJcmV0dXJuICh1diAqIHVSZXNvbHV0aW9uIC0gb2Zmc2V0KSAvIHNjYWxlZFNpemU7CgkJfQoKCQlmbG9hdCBzYW1wbGVNYXNrKHZlYzIgdXYpIHsKCQkJdmVjMyBtYXNrRGF0YSA9IHRleHR1cmUyRCh1TWFza1RleHR1cmUsIHV2KS5yZ2I7CgkJCXJldHVybiBjbGFtcChtYXgobWFza0RhdGEuciwgbWF4KG1hc2tEYXRhLmcsIG1hc2tEYXRhLmIpKSwgMC4wLCAxLjApOwoJCX0KCgkJZmxvYXQgZ2V0U21vb3RoTWFzayh2ZWMyIHV2KSB7CgkJCXZlYzIgdCA9IHVNYXNrVGV4ZWw7CgkJCWZsb2F0IG0gPSAwLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoLXQueCwgLXQueSkpICogMS4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKDAuMCwgLXQueSkpICogMi4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKHQueCwgLXQueSkpICogMS4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKC10LngsIDAuMCkpICogMi4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYpICogNC4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKHQueCwgMC4wKSkgKiAyLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoLXQueCwgdC55KSkgKiAxLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoMC4wLCB0LnkpKSAqIDIuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMih0LngsIHQueSkpICogMS4wOwoJCQlyZXR1cm4gbSAvIDE2LjA7CgkJfQoKCQl2b2lkIG1haW4gKCkgewoJCQl2ZWMyIGJhc2VVdiA9IGdldENvdmVyVVYodlV2LCB1QmFzZVRleHR1cmVTaXplKTsKCQkJdmVjMiByZXZlYWxVdiA9IGdldENvdmVyVVYodlV2LCB1UmV2ZWFsVGV4dHVyZVNpemUpOwoKCQkJdmVjMyBiYXNlQ29sb3IgPSB0ZXh0dXJlMkQodUJhc2VUZXh0dXJlLCBiYXNlVXYpLnJnYjsKCQkJdmVjMyByZXZlYWxDb2xvciA9IHRleHR1cmUyRCh1UmV2ZWFsVGV4dHVyZSwgcmV2ZWFsVXYpLnJnYjsKCgkJCWZsb2F0IHJhd01hc2sgPSBnZXRTbW9vdGhNYXNrKHZVdik7CgkJCWZsb2F0IHNvZnRuZXNzID0gY2xhbXAodUJsZW5kU29mdG5lc3MsIDAuMDEsIDAuNDkpOwoJCQlmbG9hdCBtYXNrID0gc21vb3Roc3RlcCgwLjUgLSBzb2Z0bmVzcywgMC41ICsgc29mdG5lc3MsIHJhd01hc2spOwoKCQkJdmVjMyBjb2xvciA9IG1peChiYXNlQ29sb3IsIHJldmVhbENvbG9yLCBtYXNrKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgMS4wKTsKCQkJI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CgkJfQoJYDsKCgljb25zdCBjcmVhdGVGQk8gPSAodzogbnVtYmVyLCBoOiBudW1iZXIpID0+CgkJbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHcsIGgsIHsKCQkJdHlwZTogVEhSRUUuRmxvYXRUeXBlLAoJCQltaW5GaWx0ZXI6IFRIUkVFLk5lYXJlc3RGaWx0ZXIsCgkJCW1hZ0ZpbHRlcjogVEhSRUUuTmVhcmVzdEZpbHRlciwKCQkJZm9ybWF0OiBUSFJFRS5SR0JBRm9ybWF0LAoJCX0pOwoKCWxldCBkZW5zaXR5ID0gJHN0YXRlKHsKCQlyZWFkOiBjcmVhdGVGQk8oMTI4LCAxMjgpLAoJCXdyaXRlOiBjcmVhdGVGQk8oMTI4LCAxMjgpLAoJCXN3YXA6ICgpID0+IHsKCQkJY29uc3QgdGVtcCA9IGRlbnNpdHkucmVhZDsKCQkJZGVuc2l0eS5yZWFkID0gZGVuc2l0eS53cml0ZTsKCQkJZGVuc2l0eS53cml0ZSA9IHRlbXA7CgkJfSwKCX0pOwoKCWxldCB2ZWxvY2l0eSA9ICRzdGF0ZSh7CgkJcmVhZDogY3JlYXRlRkJPKDEyOCwgMTI4KSwKCQl3cml0ZTogY3JlYXRlRkJPKDEyOCwgMTI4KSwKCQlzd2FwOiAoKSA9PiB7CgkJCWNvbnN0IHRlbXAgPSB2ZWxvY2l0eS5yZWFkOwoJCQl2ZWxvY2l0eS5yZWFkID0gdmVsb2NpdHkud3JpdGU7CgkJCXZlbG9jaXR5LndyaXRlID0gdGVtcDsKCQl9LAoJfSk7CgoJbGV0IHByZXNzdXJlID0gJHN0YXRlKHsKCQlyZWFkOiBjcmVhdGVGQk8oMTI4LCAxMjgpLAoJCXdyaXRlOiBjcmVhdGVGQk8oMTI4LCAxMjgpLAoJCXN3YXA6ICgpID0+IHsKCQkJY29uc3QgdGVtcCA9IHByZXNzdXJlLnJlYWQ7CgkJCXByZXNzdXJlLnJlYWQgPSBwcmVzc3VyZS53cml0ZTsKCQkJcHJlc3N1cmUud3JpdGUgPSB0ZW1wOwoJCX0sCgl9KTsKCglsZXQgZGl2ZXJnZW5jZSA9ICRzdGF0ZShjcmVhdGVGQk8oMTI4LCAxMjgpKTsKCgljb25zdCBhZHZlY3Rpb25NYXQgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewoJCXVuaWZvcm1zOiB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogbnVsbCB9LAoJCQl1SW5wdXQ6IHsgdmFsdWU6IG51bGwgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMigpIH0sCgkJCXVEdDogeyB2YWx1ZTogMC4wMTYgfSwKCQkJdURpc3NpcGF0aW9uOiB7IHZhbHVlOiAwLjk2IH0sCgkJfSwKCQl2ZXJ0ZXhTaGFkZXIsCgkJZnJhZ21lbnRTaGFkZXI6IGFkdmVjdGlvblNoYWRlciwKCX0pOwoKCWNvbnN0IGRpdmVyZ2VuY2VNYXQgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewoJCXVuaWZvcm1zOiB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogbnVsbCB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKCkgfSwKCQl9LAoJCXZlcnRleFNoYWRlciwKCQlmcmFnbWVudFNoYWRlcjogZGl2ZXJnZW5jZVNoYWRlciwKCX0pOwoKCWNvbnN0IHByZXNzdXJlTWF0ID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHsKCQl1bmlmb3JtczogewoJCQl1UHJlc3N1cmU6IHsgdmFsdWU6IG51bGwgfSwKCQkJdURpdmVyZ2VuY2U6IHsgdmFsdWU6IG51bGwgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMigpIH0sCgkJfSwKCQl2ZXJ0ZXhTaGFkZXIsCgkJZnJhZ21lbnRTaGFkZXI6IHByZXNzdXJlU2hhZGVyLAoJfSk7CgoJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdE1hdCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7CgkJdW5pZm9ybXM6IHsKCQkJdVByZXNzdXJlOiB7IHZhbHVlOiBudWxsIH0sCgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogbnVsbCB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKCkgfSwKCQl9LAoJCXZlcnRleFNoYWRlciwKCQlmcmFnbWVudFNoYWRlcjogZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciwKCX0pOwoKCWNvbnN0IHNwbGF0TWF0ID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHsKCQl1bmlmb3JtczogewoJCQl1SW5wdXQ6IHsgdmFsdWU6IG51bGwgfSwKCQkJdVJhdGlvOiB7IHZhbHVlOiAxIH0sCgkJCXVQb2ludFZhbHVlOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMygpIH0sCgkJCXVQb2ludDogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoKSB9LAoJCQl1UG9pbnRTaXplOiB7IHZhbHVlOiAwLjAxIH0sCgkJfSwKCQl2ZXJ0ZXhTaGFkZXIsCgkJZnJhZ21lbnRTaGFkZXI6IHNwbGF0U2hhZGVyLAoJfSk7CgoJbGV0IG91dHB1dE1hdDogVEhSRUUuU2hhZGVyTWF0ZXJpYWwgfCB1bmRlZmluZWQgPSAkc3RhdGUoKTsKCgljb25zdCBzaW1TY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpOwoJY29uc3Qgc2ltQ2FtZXJhID0gbmV3IFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSgtMSwgMSwgMSwgLTEsIDAsIDEpOwoJY29uc3Qgc2ltTWVzaCA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDIsIDIpLCBhZHZlY3Rpb25NYXQpOwoJc2ltU2NlbmUuYWRkKHNpbU1lc2gpOwoKCWNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gewoJCWNvbnN0IHJlY3QgPSByZW5kZXJlci5kb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCWNvbnN0IHggPSBlLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wOwoJCXVwZGF0ZVBvaW50ZXJQb3NpdGlvbih4LCB5LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Cgl9OwoKCWNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IChlOiBUb3VjaEV2ZW50KSA9PiB7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCWNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdOwoJCWlmICghdG91Y2gpIHJldHVybjsKCQljb25zdCByZWN0ID0gcmVuZGVyZXIuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQljb25zdCB4ID0gdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdDsKCQljb25zdCB5ID0gdG91Y2guY2xpZW50WSAtIHJlY3QudG9wOwoJCXVwZGF0ZVBvaW50ZXJQb3NpdGlvbih4LCB5LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IGNhbnZhcyA9IHJlbmRlcmVyLmRvbUVsZW1lbnQ7CgkJY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCWNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUsIHsgcGFzc2l2ZTogZmFsc2UgfSk7CgkJcmV0dXJuICgpID0+IHsKCQkJY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQljYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgaGFuZGxlVG91Y2hNb3ZlKTsKCQl9OwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgYmFzZSA9ICRiYXNlVGV4dHVyZTsKCQljb25zdCByZXZlYWwgPSAkcmV2ZWFsVGV4dHVyZTsKCQlpZiAoIW91dHB1dE1hdCkgcmV0dXJuOwoJCW91dHB1dE1hdC51bmlmb3Jtcy51QmFzZVRleHR1cmUudmFsdWUgPSBiYXNlID8/IG51bGw7CgkJb3V0cHV0TWF0LnVuaWZvcm1zLnVSZXZlYWxUZXh0dXJlLnZhbHVlID0gcmV2ZWFsID8/IG51bGw7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlyZXR1cm4gKCkgPT4gewoJCQlkZW5zaXR5LnJlYWQuZGlzcG9zZSgpOwoJCQlkZW5zaXR5LndyaXRlLmRpc3Bvc2UoKTsKCQkJdmVsb2NpdHkucmVhZC5kaXNwb3NlKCk7CgkJCXZlbG9jaXR5LndyaXRlLmRpc3Bvc2UoKTsKCQkJcHJlc3N1cmUucmVhZC5kaXNwb3NlKCk7CgkJCXByZXNzdXJlLndyaXRlLmRpc3Bvc2UoKTsKCQkJZGl2ZXJnZW5jZS5kaXNwb3NlKCk7CgoJCQlhZHZlY3Rpb25NYXQuZGlzcG9zZSgpOwoJCQlkaXZlcmdlbmNlTWF0LmRpc3Bvc2UoKTsKCQkJcHJlc3N1cmVNYXQuZGlzcG9zZSgpOwoJCQlncmFkaWVudFN1YnRyYWN0TWF0LmRpc3Bvc2UoKTsKCQkJc3BsYXRNYXQuZGlzcG9zZSgpOwoJCQlzaW1NZXNoLmdlb21ldHJ5LmRpc3Bvc2UoKTsKCQl9OwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdyA9IE1hdGgubWF4KDEsICRzaXplLndpZHRoIHx8IHJlbmRlcmVyLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMSk7CgkJY29uc3QgaCA9IE1hdGgubWF4KAoJCQkxLAoJCQkkc2l6ZS5oZWlnaHQgfHwgcmVuZGVyZXIuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMSwKCQkpOwoJCWNhbnZhc01ldHJpY3Mud2lkdGggPSB3OwoJCWNhbnZhc01ldHJpY3MuaGVpZ2h0ID0gaDsKCgkJY29uc3Qgc2ltUmVzWCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IodyAqIDAuNSkpOwoJCWNvbnN0IHNpbVJlc1kgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGggKiAwLjUpKTsKCgkJY29uc3QgcmVzaXplRkJPID0gKGZibzogVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQpID0+IHsKCQkJZmJvLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJfTsKCgkJcmVzaXplRkJPKGRlbnNpdHkucmVhZCk7CgkJcmVzaXplRkJPKGRlbnNpdHkud3JpdGUpOwoJCXJlc2l6ZUZCTyh2ZWxvY2l0eS5yZWFkKTsKCQlyZXNpemVGQk8odmVsb2NpdHkud3JpdGUpOwoJCXJlc2l6ZUZCTyhwcmVzc3VyZS5yZWFkKTsKCQlyZXNpemVGQk8ocHJlc3N1cmUud3JpdGUpOwoJCXJlc2l6ZUZCTyhkaXZlcmdlbmNlKTsKCgkJY29uc3QgdGV4ZWxYID0gMS4wIC8gc2ltUmVzWDsKCQljb25zdCB0ZXhlbFkgPSAxLjAgLyBzaW1SZXNZOwoJCWNvbnN0IHRleGVsID0gbmV3IFRIUkVFLlZlY3RvcjIodGV4ZWxYLCB0ZXhlbFkpOwoKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudVRleGVsLnZhbHVlID0gdGV4ZWw7CgkJZGl2ZXJnZW5jZU1hdC51bmlmb3Jtcy51VGV4ZWwudmFsdWUgPSB0ZXhlbDsKCQlwcmVzc3VyZU1hdC51bmlmb3Jtcy51VGV4ZWwudmFsdWUgPSB0ZXhlbDsKCQlncmFkaWVudFN1YnRyYWN0TWF0LnVuaWZvcm1zLnVUZXhlbC52YWx1ZSA9IHRleGVsOwoKCQlpZiAob3V0cHV0TWF0KSB7CgkJCW91dHB1dE1hdC51bmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQodywgaCk7CgkJCW91dHB1dE1hdC51bmlmb3Jtcy51QmFzZVRleHR1cmVTaXplLnZhbHVlLmNvcHkoYmFzZVRleHR1cmVTaXplKTsKCQkJb3V0cHV0TWF0LnVuaWZvcm1zLnVSZXZlYWxUZXh0dXJlU2l6ZS52YWx1ZS5jb3B5KHJldmVhbFRleHR1cmVTaXplKTsKCQkJb3V0cHV0TWF0LnVuaWZvcm1zLnVNYXNrVGV4ZWwudmFsdWUuc2V0KHRleGVsWCwgdGV4ZWxZKTsKCQl9CgoJCWlmIChjYW52YXNNZXRyaWNzLndpZHRoID4gMCAmJiBjYW52YXNNZXRyaWNzLmhlaWdodCA+IDApIHsKCQkJcG9pbnRlclV2LnNldCgKCQkJCXBvaW50ZXJTdGF0ZS54IC8gY2FudmFzTWV0cmljcy53aWR0aCwKCQkJCTEgLSBwb2ludGVyU3RhdGUueSAvIGNhbnZhc01ldHJpY3MuaGVpZ2h0LAoJCQkpOwoJCX0KCX0pOwoKCXVzZVRhc2soKCkgPT4gewoJCWNvbnN0IGR0ID0gMSAvIDYwOwoJCWNvbnN0IHdpZHRoID0KCQkJY2FudmFzTWV0cmljcy53aWR0aCB8fAoJCQlyZW5kZXJlci5kb21FbGVtZW50LmNsaWVudFdpZHRoIHx8CgkJCXJlbmRlcmVyLmRvbUVsZW1lbnQud2lkdGggfHwKCQkJMTsKCQljb25zdCBoZWlnaHQgPQoJCQljYW52YXNNZXRyaWNzLmhlaWdodCB8fAoJCQlyZW5kZXJlci5kb21FbGVtZW50LmNsaWVudEhlaWdodCB8fAoJCQlyZW5kZXJlci5kb21FbGVtZW50LmhlaWdodCB8fAoJCQkxOwoJCWNvbnN0IGFzcGVjdCA9IGhlaWdodCA+IDAgPyB3aWR0aCAvIGhlaWdodCA6IDE7CgoJCWlmIChwb2ludGVyU3RhdGUubW92ZWQpIHsKCQkJc2ltTWVzaC5tYXRlcmlhbCA9IHNwbGF0TWF0OwoJCQlzcGxhdE1hdC51bmlmb3Jtcy51SW5wdXQudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXNwbGF0TWF0LnVuaWZvcm1zLnVSYXRpby52YWx1ZSA9IGFzcGVjdDsKCQkJc3BsYXRNYXQudW5pZm9ybXMudVBvaW50LnZhbHVlID0gcG9pbnRlclV2OwoJCQlzcGxhdE1hdC51bmlmb3Jtcy51UG9pbnRWYWx1ZS52YWx1ZS5zZXQoCgkJCQlwb2ludGVyU3RhdGUuZHgsCgkJCQktcG9pbnRlclN0YXRlLmR5LAoJCQkJMSwKCQkJKTsKCQkJc3BsYXRNYXQudW5pZm9ybXMudVBvaW50U2l6ZS52YWx1ZSA9IHBvaW50ZXJTaXplID8/IDAuMDA1OwoKCQkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHZlbG9jaXR5LndyaXRlKTsKCQkJcmVuZGVyZXIucmVuZGVyKHNpbVNjZW5lLCBzaW1DYW1lcmEpOwoJCQl2ZWxvY2l0eS5zd2FwKCk7CgoJCQlzaW1NZXNoLm1hdGVyaWFsID0gc3BsYXRNYXQ7CgkJCXNwbGF0TWF0LnVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQlzcGxhdE1hdC51bmlmb3Jtcy51UG9pbnRWYWx1ZS52YWx1ZS5zZXQoMSwgMSwgMSk7CgoJCQlyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZGVuc2l0eS53cml0ZSk7CgkJCXJlbmRlcmVyLnJlbmRlcihzaW1TY2VuZSwgc2ltQ2FtZXJhKTsKCQkJZGVuc2l0eS5zd2FwKCk7CgkJCXBvaW50ZXJTdGF0ZS5tb3ZlZCA9IGZhbHNlOwoJCX0KCgkJc2ltTWVzaC5tYXRlcmlhbCA9IGRpdmVyZ2VuY2VNYXQ7CgkJZGl2ZXJnZW5jZU1hdC51bmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGRpdmVyZ2VuY2UpOwoJCXJlbmRlcmVyLnJlbmRlcihzaW1TY2VuZSwgc2ltQ2FtZXJhKTsKCgkJc2ltTWVzaC5tYXRlcmlhbCA9IHByZXNzdXJlTWF0OwoJCXByZXNzdXJlTWF0LnVuaWZvcm1zLnVEaXZlcmdlbmNlLnZhbHVlID0gZGl2ZXJnZW5jZS50ZXh0dXJlOwoJCWZvciAobGV0IGkgPSAwOyBpIDwgcHJlc3N1cmVJdGVyYXRpb25zOyBpKyspIHsKCQkJcHJlc3N1cmVNYXQudW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCQlyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQocHJlc3N1cmUud3JpdGUpOwoJCQlyZW5kZXJlci5yZW5kZXIoc2ltU2NlbmUsIHNpbUNhbWVyYSk7CgkJCXByZXNzdXJlLnN3YXAoKTsKCQl9CgoJCXNpbU1lc2gubWF0ZXJpYWwgPSBncmFkaWVudFN1YnRyYWN0TWF0OwoJCWdyYWRpZW50U3VidHJhY3RNYXQudW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCWdyYWRpZW50U3VidHJhY3RNYXQudW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCXJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh2ZWxvY2l0eS53cml0ZSk7CgkJcmVuZGVyZXIucmVuZGVyKHNpbVNjZW5lLCBzaW1DYW1lcmEpOwoJCXZlbG9jaXR5LnN3YXAoKTsKCgkJc2ltTWVzaC5tYXRlcmlhbCA9IGFkdmVjdGlvbk1hdDsKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCWFkdmVjdGlvbk1hdC51bmlmb3Jtcy51SW5wdXQudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJYWR2ZWN0aW9uTWF0LnVuaWZvcm1zLnVEaXNzaXBhdGlvbi52YWx1ZSA9IHZlbG9jaXR5RGlzc2lwYXRpb247CgkJYWR2ZWN0aW9uTWF0LnVuaWZvcm1zLnVEdC52YWx1ZSA9IGR0OwoJCXJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh2ZWxvY2l0eS53cml0ZSk7CgkJcmVuZGVyZXIucmVuZGVyKHNpbVNjZW5lLCBzaW1DYW1lcmEpOwoJCXZlbG9jaXR5LnN3YXAoKTsKCgkJc2ltTWVzaC5tYXRlcmlhbCA9IGFkdmVjdGlvbk1hdDsKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCWFkdmVjdGlvbk1hdC51bmlmb3Jtcy51SW5wdXQudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudURpc3NpcGF0aW9uLnZhbHVlID0gZGlzc2lwYXRpb247CgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGRlbnNpdHkud3JpdGUpOwoJCXJlbmRlcmVyLnJlbmRlcihzaW1TY2VuZSwgc2ltQ2FtZXJhKTsKCQlkZW5zaXR5LnN3YXAoKTsKCgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG51bGwpOwoKCQlpZiAob3V0cHV0TWF0KSB7CgkJCW91dHB1dE1hdC51bmlmb3Jtcy51TWFza1RleHR1cmUudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJb3V0cHV0TWF0LnVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KTsKCQkJb3V0cHV0TWF0LnVuaWZvcm1zLnVCYXNlVGV4dHVyZVNpemUudmFsdWUuY29weShiYXNlVGV4dHVyZVNpemUpOwoJCQlvdXRwdXRNYXQudW5pZm9ybXMudVJldmVhbFRleHR1cmVTaXplLnZhbHVlLmNvcHkocmV2ZWFsVGV4dHVyZVNpemUpOwoJCQlvdXRwdXRNYXQudW5pZm9ybXMudUJsZW5kU29mdG5lc3MudmFsdWUgPSBibGVuZFNvZnRuZXNzOwoJCX0KCX0pOwo8L3NjcmlwdD4KCnsjaWYgJGJhc2VUZXh0dXJlICYmICRyZXZlYWxUZXh0dXJlfQoJPFQuTWVzaD4KCQk8VC5QbGFuZUdlb21ldHJ5IGFyZ3M9e1syLCAyXX0gLz4KCQk8VC5TaGFkZXJNYXRlcmlhbAoJCQliaW5kOnJlZj17b3V0cHV0TWF0fQoJCQl7dmVydGV4U2hhZGVyfQoJCQlmcmFnbWVudFNoYWRlcj17b3V0cHV0U2hhZGVyfQoJCQl1bmlmb3Jtcz17ewoJCQkJdU1hc2tUZXh0dXJlOiB7IHZhbHVlOiBudWxsIH0sCgkJCQl1QmFzZVRleHR1cmU6IHsgdmFsdWU6ICRiYXNlVGV4dHVyZSB9LAoJCQkJdVJldmVhbFRleHR1cmU6IHsgdmFsdWU6ICRyZXZlYWxUZXh0dXJlIH0sCgkJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoMSwgMSkgfSwKCQkJCXVCYXNlVGV4dHVyZVNpemU6IHsgdmFsdWU6IGJhc2VUZXh0dXJlU2l6ZSB9LAoJCQkJdVJldmVhbFRleHR1cmVTaXplOiB7IHZhbHVlOiByZXZlYWxUZXh0dXJlU2l6ZSB9LAoJCQkJdU1hc2tUZXhlbDogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoMSwgMSkgfSwKCQkJCXVCbGVuZFNvZnRuZXNzOiB7IHZhbHVlOiBibGVuZFNvZnRuZXNzIH0sCgkJCX19CgkJCXNpZGU9e1RIUkVFLkRvdWJsZVNpZGV9CgkJLz4KCTwvVC5NZXNoPgp7L2lmfQo=", - "components/fluid-simulation/FluidSimulation.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0ZsdWlkU2ltdWxhdGlvblNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSBmbHVpZC4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBTY2VuZVByb3BzWyJkaXNzaXBhdGlvbiJdOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgcG9pbnRlciBpbmZsdWVuY2UuCgkJICogQGRlZmF1bHQgMC4wMDUKCQkgKi8KCQlwb2ludGVyU2l6ZT86IFNjZW5lUHJvcHNbInBvaW50ZXJTaXplIl07CgkJLyoqCgkJICogRmx1aWQgc3BsYXQgY29sb3IgKGFueSBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uKS4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogRmx1aWQgdmVsb2NpdHkgZGlzc2lwYXRpb24uCgkJICogQGRlZmF1bHQgMC45NgoJCSAqLwoJCXZlbG9jaXR5RGlzc2lwYXRpb24/OiBTY2VuZVByb3BzWyJ2ZWxvY2l0eURpc3NpcGF0aW9uIl07CgkJLyoqCgkJICogUHJlc3N1cmUgaXRlcmF0aW9ucy4gTW9yZSBpdGVyYXRpb25zID0gbW9yZSBhY2N1cmF0ZSBidXQgc2xvd2VyLgoJCSAqIEBkZWZhdWx0IDEwCgkJICovCgkJcHJlc3N1cmVJdGVyYXRpb25zPzogU2NlbmVQcm9wc1sicHJlc3N1cmVJdGVyYXRpb25zIl07CgoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJZGlzc2lwYXRpb24gPSAwLjk2LAoJCXBvaW50ZXJTaXplID0gMC4wMDUsCgkJY29sb3IgPSAiI2ZmNjkwMCIsCgkJdmVsb2NpdHlEaXNzaXBhdGlvbiA9IDAuOTYsCgkJcHJlc3N1cmVJdGVyYXRpb25zID0gMTAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZQoJCQkJe2Rpc3NpcGF0aW9ufQoJCQkJe3BvaW50ZXJTaXplfQoJCQkJe2NvbG9yfQoJCQkJe3ZlbG9jaXR5RGlzc2lwYXRpb259CgkJCQl7cHJlc3N1cmVJdGVyYXRpb25zfQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/fluid-simulation/FluidSimulationScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSBmbHVpZC4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZsdWlkIHNwbGF0IGNvbG9yLiBBY2NlcHRzIGFueSBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBGbHVpZCB2ZWxvY2l0eSBkaXNzaXBhdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJdmVsb2NpdHlEaXNzaXBhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBQcmVzc3VyZSBpdGVyYXRpb25zLiBNb3JlIGl0ZXJhdGlvbnMgPSBtb3JlIGFjY3VyYXRlIGJ1dCBzbG93ZXIuCgkJICogQGRlZmF1bHQgMTAKCQkgKi8KCQlwcmVzc3VyZUl0ZXJhdGlvbnM/OiBudW1iZXI7Cgl9CgoJdHlwZSBQb2ludGVyU3RhdGUgPSB7CgkJeDogbnVtYmVyOwoJCXk6IG51bWJlcjsKCQlkeDogbnVtYmVyOwoJCWR5OiBudW1iZXI7CgkJbW92ZWQ6IGJvb2xlYW47CgkJaW5pdGlhbGl6ZWQ6IGJvb2xlYW47Cgl9OwoKCXR5cGUgUHJldmlld1N0YXRlID0gewoJCWVuYWJsZWQ6IGJvb2xlYW47CgkJdGltZU1zOiBudW1iZXI7Cgl9OwoKCXR5cGUgQ2FudmFzTWV0cmljcyA9IHsKCQl3aWR0aDogbnVtYmVyOwoJCWhlaWdodDogbnVtYmVyOwoJfTsKCglsZXQgewoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCWNvbG9yID0gIiNmZjY5MDAiLAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCB7IHJlbmRlcmVyLCBzaXplIH0gPSB1c2VUaHJlbHRlKCk7Cgljb25zdCBwb2ludGVyU3RhdGUgPSAkc3RhdGU8UG9pbnRlclN0YXRlPih7CgkJeDogMCwKCQl5OiAwLAoJCWR4OiAwLAoJCWR5OiAwLAoJCW1vdmVkOiBmYWxzZSwKCQlpbml0aWFsaXplZDogZmFsc2UsCgl9KTsKCWNvbnN0IHByZXZpZXdTdGF0ZSA9ICRzdGF0ZTxQcmV2aWV3U3RhdGU+KHsKCQllbmFibGVkOiB0cnVlLAoJCXRpbWVNczogMCwKCX0pOwoJY29uc3QgY2FudmFzTWV0cmljcyA9ICRzdGF0ZTxDYW52YXNNZXRyaWNzPih7CgkJd2lkdGg6IDEsCgkJaGVpZ2h0OiAxLAoJfSk7Cgljb25zdCBwb2ludGVyVXYgPSBuZXcgVEhSRUUuVmVjdG9yMigpOwoJY29uc3Qgc3BsYXRDb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpOwoKCWNvbnN0IHBvaW50ZXJGb3JjZUNsYW1wID0gNDUwOwoJY29uc3QgcG9pbnRlckZvcmNlSW5pdGlhbExlcnAgPSAwLjI7Cgljb25zdCBwb2ludGVyRm9yY2VMZXJwID0gMC41NTsKCgkkZWZmZWN0KCgpID0+IHsKCQlzcGxhdENvbG9yLnNldChjb2xvcik7Cgl9KTsKCgljb25zdCB1cGRhdGVQb2ludGVyUG9zaXRpb24gPSAoCgkJcHg6IG51bWJlciwKCQlweTogbnVtYmVyLAoJCXdpZHRoOiBudW1iZXIsCgkJaGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQljb25zdCBwcmV2WCA9IHBvaW50ZXJTdGF0ZS54OwoJCWNvbnN0IHByZXZZID0gcG9pbnRlclN0YXRlLnk7CgkJY29uc3QgdGFyZ2V0RHggPSBUSFJFRS5NYXRoVXRpbHMuY2xhbXAoCgkJCTUgKiAocHggLSBwcmV2WCksCgkJCS1wb2ludGVyRm9yY2VDbGFtcCwKCQkJcG9pbnRlckZvcmNlQ2xhbXAsCgkJKTsKCQljb25zdCB0YXJnZXREeSA9IFRIUkVFLk1hdGhVdGlscy5jbGFtcCgKCQkJNSAqIChweSAtIHByZXZZKSwKCQkJLXBvaW50ZXJGb3JjZUNsYW1wLAoJCQlwb2ludGVyRm9yY2VDbGFtcCwKCQkpOwoJCWNvbnN0IGxlcnBGYWN0b3IgPSBwb2ludGVyU3RhdGUuaW5pdGlhbGl6ZWQKCQkJPyBwb2ludGVyRm9yY2VMZXJwCgkJCTogcG9pbnRlckZvcmNlSW5pdGlhbExlcnA7CgoJCXBvaW50ZXJTdGF0ZS5tb3ZlZCA9IHRydWU7CgkJcG9pbnRlclN0YXRlLmR4ID0gVEhSRUUuTWF0aFV0aWxzLmxlcnAoCgkJCXBvaW50ZXJTdGF0ZS5keCwKCQkJdGFyZ2V0RHgsCgkJCWxlcnBGYWN0b3IsCgkJKTsKCQlwb2ludGVyU3RhdGUuZHkgPSBUSFJFRS5NYXRoVXRpbHMubGVycCgKCQkJcG9pbnRlclN0YXRlLmR5LAoJCQl0YXJnZXREeSwKCQkJbGVycEZhY3RvciwKCQkpOwoJCXBvaW50ZXJTdGF0ZS54ID0gcHg7CgkJcG9pbnRlclN0YXRlLnkgPSBweTsKCQlwb2ludGVyU3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQlpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKCQkJcG9pbnRlclV2LnNldChweCAvIHdpZHRoLCAxIC0gcHkgLyBoZWlnaHQpOwoJCX0KCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAogICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7CiAgICAgICAgdmFyeWluZyB2ZWMyIHZMOwogICAgICAgIHZhcnlpbmcgdmVjMiB2UjsKICAgICAgICB2YXJ5aW5nIHZlYzIgdlQ7CiAgICAgICAgdmFyeWluZyB2ZWMyIHZCOwogICAgICAgIHVuaWZvcm0gdmVjMiB1VGV4ZWw7CgogICAgICAgIHZvaWQgbWFpbiAoKSB7CiAgICAgICAgICAgIHZVdiA9IHV2OwogICAgICAgICAgICB2TCA9IHZVdiAtIHZlYzIodVRleGVsLngsIDAuKTsKICAgICAgICAgICAgdlIgPSB2VXYgKyB2ZWMyKHVUZXhlbC54LCAwLik7CiAgICAgICAgICAgIHZUID0gdlV2ICsgdmVjMigwLiwgdVRleGVsLnkpOwogICAgICAgICAgICB2QiA9IHZVdiAtIHZlYzIoMC4sIHVUZXhlbC55KTsKICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAxLjApOwogICAgICAgIH0KICAgIGA7CgoJY29uc3QgYWR2ZWN0aW9uU2hhZGVyID0gYAogICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7CiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdVZlbG9jaXR5OwogICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKICAgICAgICB1bmlmb3JtIHZlYzIgdVRleGVsOwogICAgICAgIHVuaWZvcm0gZmxvYXQgdUR0OwogICAgICAgIHVuaWZvcm0gZmxvYXQgdURpc3NpcGF0aW9uOwoKICAgICAgICB2ZWM0IGJpbGVycCAoc2FtcGxlcjJEIHNhbSwgdmVjMiB1diwgdmVjMiB0c2l6ZSkgewogICAgICAgICAgICB2ZWMyIHN0ID0gdXYgLyB0c2l6ZSAtIDAuNTsKICAgICAgICAgICAgdmVjMiBpdXYgPSBmbG9vcihzdCk7CiAgICAgICAgICAgIHZlYzIgZnV2ID0gZnJhY3Qoc3QpOwogICAgICAgICAgICB2ZWM0IGEgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDAuNSkpICogdHNpemUpOwogICAgICAgICAgICB2ZWM0IGIgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDAuNSkpICogdHNpemUpOwogICAgICAgICAgICB2ZWM0IGMgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDEuNSkpICogdHNpemUpOwogICAgICAgICAgICB2ZWM0IGQgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDEuNSkpICogdHNpemUpOwogICAgICAgICAgICByZXR1cm4gbWl4KG1peChhLCBiLCBmdXYueCksIG1peChjLCBkLCBmdXYueCksIGZ1di55KTsKICAgICAgICB9CgogICAgICAgIHZvaWQgbWFpbiAoKSB7CiAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2VXYgLSB1RHQgKiBiaWxlcnAodVZlbG9jaXR5LCB2VXYsIHVUZXhlbCkueHkgKiB1VGV4ZWw7CiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVEaXNzaXBhdGlvbiAqIGJpbGVycCh1SW5wdXQsIGNvb3JkLCB1VGV4ZWwpOwogICAgICAgICAgICBnbF9GcmFnQ29sb3IuYSA9IDEuOwogICAgICAgIH0KICAgIGA7CgoJY29uc3QgZGl2ZXJnZW5jZVNoYWRlciA9IGAKICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdlV2OwogICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2TDsKICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdlI7CiAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZUOwogICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2QjsKICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgogICAgICAgIHZvaWQgbWFpbiAoKSB7CiAgICAgICAgICAgIGZsb2F0IEwgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2TCkueDsKICAgICAgICAgICAgZmxvYXQgUiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZSKS54OwogICAgICAgICAgICBmbG9hdCBUID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlQpLnk7CiAgICAgICAgICAgIGZsb2F0IEIgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2QikueTsKICAgICAgICAgICAgZmxvYXQgZGl2ID0gLjYgKiAoUiAtIEwgKyBUIC0gQik7CiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGl2LCAwLiwgMC4sIDEuKTsKICAgICAgICB9CiAgICBgOwoKCWNvbnN0IHByZXNzdXJlU2hhZGVyID0gYAogICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2VXY7CiAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZMOwogICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2UjsKICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdlQ7CiAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZCOwogICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1RGl2ZXJnZW5jZTsKCiAgICAgICAgdm9pZCBtYWluICgpIHsKICAgICAgICAgICAgZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwogICAgICAgICAgICBmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CiAgICAgICAgICAgIGZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKICAgICAgICAgICAgZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwogICAgICAgICAgICBmbG9hdCBDID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlV2KS54OwogICAgICAgICAgICBmbG9hdCBkaXZlcmdlbmNlID0gdGV4dHVyZTJEKHVEaXZlcmdlbmNlLCB2VXYpLng7CiAgICAgICAgICAgIGZsb2F0IHByZXNzdXJlID0gKEwgKyBSICsgQiArIFQgLSBkaXZlcmdlbmNlKSAqIDAuMjU7CiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQocHJlc3N1cmUsIDAuLCAwLiwgMS4pOwogICAgICAgIH0KICAgIGA7CgoJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciA9IGAKICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdlV2OwogICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2TDsKICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdlI7CiAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZUOwogICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2QjsKICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1UHJlc3N1cmU7CiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdVZlbG9jaXR5OwoKICAgICAgICB2b2lkIG1haW4gKCkgewogICAgICAgICAgICBmbG9hdCBMID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdkwpLng7CiAgICAgICAgICAgIGZsb2F0IFIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2UikueDsKICAgICAgICAgICAgZmxvYXQgVCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZUKS54OwogICAgICAgICAgICBmbG9hdCBCID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdkIpLng7CiAgICAgICAgICAgIHZlYzIgdmVsb2NpdHkgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2VXYpLnh5OwogICAgICAgICAgICB2ZWxvY2l0eS54eSAtPSB2ZWMyKFIgLSBMLCBUIC0gQik7CiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVsb2NpdHksIDAuLCAxLik7CiAgICAgICAgfQogICAgYDsKCgljb25zdCBzcGxhdFNoYWRlciA9IGAKICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2OwogICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKICAgICAgICB1bmlmb3JtIGZsb2F0IHVSYXRpbzsKICAgICAgICB1bmlmb3JtIHZlYzMgdVBvaW50VmFsdWU7CiAgICAgICAgdW5pZm9ybSB2ZWMyIHVQb2ludDsKICAgICAgICB1bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7CgogICAgICAgIHZvaWQgbWFpbiAoKSB7CiAgICAgICAgICAgIHZlYzIgcCA9IHZVdiAtIHVQb2ludC54eTsKICAgICAgICAgICAgcC54ICo9IHVSYXRpbzsKICAgICAgICAgICAgdmVjMyBzcGxhdCA9IHBvdygyLiwgLWRvdChwLCBwKSAvIHVQb2ludFNpemUpICogdVBvaW50VmFsdWU7CiAgICAgICAgICAgIHZlYzMgYmFzZSA9IHRleHR1cmUyRCh1SW5wdXQsIHZVdikueHl6OwogICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2UgKyBzcGxhdCwgMS4pOwogICAgICAgIH0KICAgIGA7CgoJY29uc3Qgb3V0cHV0U2hhZGVyID0gYAogICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7CiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7CgogICAgICAgIHZvaWQgbWFpbiAoKSB7CiAgICAgICAgICAgIHZlYzMgQyA9IHRleHR1cmUyRCh1VGV4dHVyZSwgdlV2KS5yZ2I7CiAgICAgICAgICAgIGZsb2F0IGEgPSBtYXgoQy5yLCBtYXgoQy5nLCBDLmIpKTsKICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChDLCBhKTsKICAgICAgICAgICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CiAgICAgICAgfQogICAgYDsKCgljb25zdCBjcmVhdGVGQk8gPSAodzogbnVtYmVyLCBoOiBudW1iZXIpID0+IHsKCQljb25zdCB0YXJnZXQgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQodywgaCwgewoJCQl0eXBlOiBUSFJFRS5GbG9hdFR5cGUsCgkJCW1pbkZpbHRlcjogVEhSRUUuTmVhcmVzdEZpbHRlciwKCQkJbWFnRmlsdGVyOiBUSFJFRS5OZWFyZXN0RmlsdGVyLAoJCQlmb3JtYXQ6IFRIUkVFLlJHQkFGb3JtYXQsCgkJfSk7CgkJcmV0dXJuIHRhcmdldDsKCX07CgoJbGV0IGRlbnNpdHkgPSAkc3RhdGUoewoJCXJlYWQ6IGNyZWF0ZUZCTygxMjgsIDEyOCksCgkJd3JpdGU6IGNyZWF0ZUZCTygxMjgsIDEyOCksCgkJc3dhcDogKCkgPT4gewoJCQljb25zdCB0ZW1wID0gZGVuc2l0eS5yZWFkOwoJCQlkZW5zaXR5LnJlYWQgPSBkZW5zaXR5LndyaXRlOwoJCQlkZW5zaXR5LndyaXRlID0gdGVtcDsKCQl9LAoJfSk7CgoJbGV0IHZlbG9jaXR5ID0gJHN0YXRlKHsKCQlyZWFkOiBjcmVhdGVGQk8oMTI4LCAxMjgpLAoJCXdyaXRlOiBjcmVhdGVGQk8oMTI4LCAxMjgpLAoJCXN3YXA6ICgpID0+IHsKCQkJY29uc3QgdGVtcCA9IHZlbG9jaXR5LnJlYWQ7CgkJCXZlbG9jaXR5LnJlYWQgPSB2ZWxvY2l0eS53cml0ZTsKCQkJdmVsb2NpdHkud3JpdGUgPSB0ZW1wOwoJCX0sCgl9KTsKCglsZXQgcHJlc3N1cmUgPSAkc3RhdGUoewoJCXJlYWQ6IGNyZWF0ZUZCTygxMjgsIDEyOCksCgkJd3JpdGU6IGNyZWF0ZUZCTygxMjgsIDEyOCksCgkJc3dhcDogKCkgPT4gewoJCQljb25zdCB0ZW1wID0gcHJlc3N1cmUucmVhZDsKCQkJcHJlc3N1cmUucmVhZCA9IHByZXNzdXJlLndyaXRlOwoJCQlwcmVzc3VyZS53cml0ZSA9IHRlbXA7CgkJfSwKCX0pOwoKCWxldCBkaXZlcmdlbmNlID0gJHN0YXRlKGNyZWF0ZUZCTygxMjgsIDEyOCkpOwoKCWNvbnN0IGFkdmVjdGlvbk1hdCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7CgkJdW5pZm9ybXM6IHsKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiBudWxsIH0sCgkJCXVJbnB1dDogeyB2YWx1ZTogbnVsbCB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKCkgfSwKCQkJdUR0OiB7IHZhbHVlOiAwLjAxNiB9LAoJCQl1RGlzc2lwYXRpb246IHsgdmFsdWU6IDAuOTYgfSwKCQl9LAoJCXZlcnRleFNoYWRlciwKCQlmcmFnbWVudFNoYWRlcjogYWR2ZWN0aW9uU2hhZGVyLAoJfSk7CgoJY29uc3QgZGl2ZXJnZW5jZU1hdCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7CgkJdW5pZm9ybXM6IHsKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiBudWxsIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoKSB9LAoJCX0sCgkJdmVydGV4U2hhZGVyLAoJCWZyYWdtZW50U2hhZGVyOiBkaXZlcmdlbmNlU2hhZGVyLAoJfSk7CgoJY29uc3QgcHJlc3N1cmVNYXQgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewoJCXVuaWZvcm1zOiB7CgkJCXVQcmVzc3VyZTogeyB2YWx1ZTogbnVsbCB9LAoJCQl1RGl2ZXJnZW5jZTogeyB2YWx1ZTogbnVsbCB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKCkgfSwKCQl9LAoJCXZlcnRleFNoYWRlciwKCQlmcmFnbWVudFNoYWRlcjogcHJlc3N1cmVTaGFkZXIsCgl9KTsKCgljb25zdCBncmFkaWVudFN1YnRyYWN0TWF0ID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHsKCQl1bmlmb3JtczogewoJCQl1UHJlc3N1cmU6IHsgdmFsdWU6IG51bGwgfSwKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiBudWxsIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoKSB9LAoJCX0sCgkJdmVydGV4U2hhZGVyLAoJCWZyYWdtZW50U2hhZGVyOiBncmFkaWVudFN1YnRyYWN0U2hhZGVyLAoJfSk7CgoJY29uc3Qgc3BsYXRNYXQgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewoJCXVuaWZvcm1zOiB7CgkJCXVJbnB1dDogeyB2YWx1ZTogbnVsbCB9LAoJCQl1UmF0aW86IHsgdmFsdWU6IDEgfSwKCQkJdVBvaW50VmFsdWU6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IzKCkgfSwKCQkJdVBvaW50OiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMigpIH0sCgkJCXVQb2ludFNpemU6IHsgdmFsdWU6IDAuMDEgfSwKCQl9LAoJCXZlcnRleFNoYWRlciwKCQlmcmFnbWVudFNoYWRlcjogc3BsYXRTaGFkZXIsCgl9KTsKCglsZXQgb3V0cHV0TWF0OiBUSFJFRS5TaGFkZXJNYXRlcmlhbCB8IHVuZGVmaW5lZCA9ICRzdGF0ZSgpOwoKCWNvbnN0IHNpbVNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7Cgljb25zdCBzaW1DYW1lcmEgPSBuZXcgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhKC0xLCAxLCAxLCAtMSwgMCwgMSk7Cgljb25zdCBzaW1NZXNoID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoMiwgMiksIGFkdmVjdGlvbk1hdCk7CglzaW1TY2VuZS5hZGQoc2ltTWVzaCk7CgoJY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7CgkJY29uc3QgcmVjdCA9IHJlbmRlcmVyLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDsKCQljb25zdCB5ID0gZS5jbGllbnRZIC0gcmVjdC50b3A7CgoJCWNvbnN0IHdhc1ByZXZpZXcgPSBwcmV2aWV3U3RhdGUuZW5hYmxlZDsKCQlwcmV2aWV3U3RhdGUuZW5hYmxlZCA9IGZhbHNlOwoJCWlmICh3YXNQcmV2aWV3KSB7CgkJCXBvaW50ZXJTdGF0ZS5pbml0aWFsaXplZCA9IGZhbHNlOwoJCQlwb2ludGVyU3RhdGUuZHggPSAwOwoJCQlwb2ludGVyU3RhdGUuZHkgPSAwOwoJCX0KCQl1cGRhdGVQb2ludGVyUG9zaXRpb24oeCwgeSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJfTsKCgljb25zdCBoYW5kbGVUb3VjaE1vdmUgPSAoZTogVG91Y2hFdmVudCkgPT4gewoJCWUucHJldmVudERlZmF1bHQoKTsKCQljb25zdCB0b3VjaCA9IGUudG91Y2hlc1swXTsKCQlpZiAoIXRvdWNoKSByZXR1cm47CgkJY29uc3QgcmVjdCA9IHJlbmRlcmVyLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJY29uc3QgeCA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJY29uc3QgeSA9IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcDsKCgkJY29uc3Qgd2FzUHJldmlldyA9IHByZXZpZXdTdGF0ZS5lbmFibGVkOwoJCXByZXZpZXdTdGF0ZS5lbmFibGVkID0gZmFsc2U7CgkJaWYgKHdhc1ByZXZpZXcpIHsKCQkJcG9pbnRlclN0YXRlLmluaXRpYWxpemVkID0gZmFsc2U7CgkJCXBvaW50ZXJTdGF0ZS5keCA9IDA7CgkJCXBvaW50ZXJTdGF0ZS5keSA9IDA7CgkJfQoJCXVwZGF0ZVBvaW50ZXJQb3NpdGlvbih4LCB5LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IGNhbnZhcyA9IHJlbmRlcmVyLmRvbUVsZW1lbnQ7CgkJY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCWNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUsIHsgcGFzc2l2ZTogZmFsc2UgfSk7CgkJcmV0dXJuICgpID0+IHsKCQkJY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQljYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgaGFuZGxlVG91Y2hNb3ZlKTsKCQl9OwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJcmV0dXJuICgpID0+IHsKCQkJZGVuc2l0eS5yZWFkLmRpc3Bvc2UoKTsKCQkJZGVuc2l0eS53cml0ZS5kaXNwb3NlKCk7CgkJCXZlbG9jaXR5LnJlYWQuZGlzcG9zZSgpOwoJCQl2ZWxvY2l0eS53cml0ZS5kaXNwb3NlKCk7CgkJCXByZXNzdXJlLnJlYWQuZGlzcG9zZSgpOwoJCQlwcmVzc3VyZS53cml0ZS5kaXNwb3NlKCk7CgkJCWRpdmVyZ2VuY2UuZGlzcG9zZSgpOwoKCQkJYWR2ZWN0aW9uTWF0LmRpc3Bvc2UoKTsKCQkJZGl2ZXJnZW5jZU1hdC5kaXNwb3NlKCk7CgkJCXByZXNzdXJlTWF0LmRpc3Bvc2UoKTsKCQkJZ3JhZGllbnRTdWJ0cmFjdE1hdC5kaXNwb3NlKCk7CgkJCXNwbGF0TWF0LmRpc3Bvc2UoKTsKCgkJCXNpbU1lc2guZ2VvbWV0cnkuZGlzcG9zZSgpOwoJCX07Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCB3ID0gTWF0aC5tYXgoMSwgJHNpemUud2lkdGggfHwgcmVuZGVyZXIuZG9tRWxlbWVudC5jbGllbnRXaWR0aCB8fCAxKTsKCQljb25zdCBoID0gTWF0aC5tYXgoCgkJCTEsCgkJCSRzaXplLmhlaWdodCB8fCByZW5kZXJlci5kb21FbGVtZW50LmNsaWVudEhlaWdodCB8fCAxLAoJCSk7CgkJY2FudmFzTWV0cmljcy53aWR0aCA9IHc7CgkJY2FudmFzTWV0cmljcy5oZWlnaHQgPSBoOwoKCQljb25zdCBzaW1SZXNYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3ICogMC41KSk7CgkJY29uc3Qgc2ltUmVzWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaCAqIDAuNSkpOwoKCQljb25zdCByZXNpemVGQk8gPSAoZmJvOiBUSFJFRS5XZWJHTFJlbmRlclRhcmdldCkgPT4gewoJCQlmYm8uc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQl9OwoKCQlyZXNpemVGQk8oZGVuc2l0eS5yZWFkKTsKCQlyZXNpemVGQk8oZGVuc2l0eS53cml0ZSk7CgkJcmVzaXplRkJPKHZlbG9jaXR5LnJlYWQpOwoJCXJlc2l6ZUZCTyh2ZWxvY2l0eS53cml0ZSk7CgkJcmVzaXplRkJPKHByZXNzdXJlLnJlYWQpOwoJCXJlc2l6ZUZCTyhwcmVzc3VyZS53cml0ZSk7CgkJcmVzaXplRkJPKGRpdmVyZ2VuY2UpOwoKCQljb25zdCB0ZXhlbFggPSAxLjAgLyBzaW1SZXNYOwoJCWNvbnN0IHRleGVsWSA9IDEuMCAvIHNpbVJlc1k7CgkJY29uc3QgdGV4ZWwgPSBuZXcgVEhSRUUuVmVjdG9yMih0ZXhlbFgsIHRleGVsWSk7CgoJCWFkdmVjdGlvbk1hdC51bmlmb3Jtcy51VGV4ZWwudmFsdWUgPSB0ZXhlbDsKCQlkaXZlcmdlbmNlTWF0LnVuaWZvcm1zLnVUZXhlbC52YWx1ZSA9IHRleGVsOwoJCXByZXNzdXJlTWF0LnVuaWZvcm1zLnVUZXhlbC52YWx1ZSA9IHRleGVsOwoJCWdyYWRpZW50U3VidHJhY3RNYXQudW5pZm9ybXMudVRleGVsLnZhbHVlID0gdGV4ZWw7CgoJCWlmIChjYW52YXNNZXRyaWNzLndpZHRoID4gMCAmJiBjYW52YXNNZXRyaWNzLmhlaWdodCA+IDApIHsKCQkJcG9pbnRlclV2LnNldCgKCQkJCXBvaW50ZXJTdGF0ZS54IC8gY2FudmFzTWV0cmljcy53aWR0aCwKCQkJCTEgLSBwb2ludGVyU3RhdGUueSAvIGNhbnZhc01ldHJpY3MuaGVpZ2h0LAoJCQkpOwoJCX0KCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJY29uc3QgZHQgPSAxIC8gNjA7CgkJY29uc3Qgd2lkdGggPQoJCQljYW52YXNNZXRyaWNzLndpZHRoIHx8CgkJCXJlbmRlcmVyLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggfHwKCQkJcmVuZGVyZXIuZG9tRWxlbWVudC53aWR0aCB8fAoJCQkxOwoJCWNvbnN0IGhlaWdodCA9CgkJCWNhbnZhc01ldHJpY3MuaGVpZ2h0IHx8CgkJCXJlbmRlcmVyLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8CgkJCXJlbmRlcmVyLmRvbUVsZW1lbnQuaGVpZ2h0IHx8CgkJCTE7CgkJY29uc3QgYXNwZWN0ID0gaGVpZ2h0ID4gMCA/IHdpZHRoIC8gaGVpZ2h0IDogMTsKCgkJaWYgKHByZXZpZXdTdGF0ZS5lbmFibGVkICYmIHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CgkJCXByZXZpZXdTdGF0ZS50aW1lTXMgKz0gZGVsdGEgKiAxMDAwOwoJCQljb25zdCBwcmV2aWV3WCA9CgkJCQkoMC41IC0gMC40NSAqIE1hdGguc2luKDAuMDAzICogcHJldmlld1N0YXRlLnRpbWVNcyAtIDIpKSAqIHdpZHRoOwoJCQljb25zdCBwcmV2aWV3WSA9CgkJCQkoMC41ICsKCQkJCQkwLjEgKiBNYXRoLnNpbigwLjAwMjUgKiBwcmV2aWV3U3RhdGUudGltZU1zKSArCgkJCQkJMC4xICogTWF0aC5jb3MoMC4wMDIgKiBwcmV2aWV3U3RhdGUudGltZU1zKSkgKgoJCQkJaGVpZ2h0OwoJCQl1cGRhdGVQb2ludGVyUG9zaXRpb24ocHJldmlld1gsIHByZXZpZXdZLCB3aWR0aCwgaGVpZ2h0KTsKCQl9CgoJCWlmIChwb2ludGVyU3RhdGUubW92ZWQpIHsKCQkJc2ltTWVzaC5tYXRlcmlhbCA9IHNwbGF0TWF0OwoJCQlzcGxhdE1hdC51bmlmb3Jtcy51SW5wdXQudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXNwbGF0TWF0LnVuaWZvcm1zLnVSYXRpby52YWx1ZSA9IGFzcGVjdDsKCQkJc3BsYXRNYXQudW5pZm9ybXMudVBvaW50LnZhbHVlID0gcG9pbnRlclV2OwoJCQlzcGxhdE1hdC51bmlmb3Jtcy51UG9pbnRWYWx1ZS52YWx1ZS5zZXQoCgkJCQlwb2ludGVyU3RhdGUuZHgsCgkJCQktcG9pbnRlclN0YXRlLmR5LAoJCQkJMSwKCQkJKTsKCQkJc3BsYXRNYXQudW5pZm9ybXMudVBvaW50U2l6ZS52YWx1ZSA9IHBvaW50ZXJTaXplID8/IDAuMDA1OwoKCQkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHZlbG9jaXR5LndyaXRlKTsKCQkJcmVuZGVyZXIucmVuZGVyKHNpbVNjZW5lLCBzaW1DYW1lcmEpOwoJCQl2ZWxvY2l0eS5zd2FwKCk7CgoJCQlzaW1NZXNoLm1hdGVyaWFsID0gc3BsYXRNYXQ7CgkJCXNwbGF0TWF0LnVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQlzcGxhdE1hdC51bmlmb3Jtcy51UG9pbnRWYWx1ZS52YWx1ZS5zZXQoCgkJCQlzcGxhdENvbG9yLnIsCgkJCQlzcGxhdENvbG9yLmcsCgkJCQlzcGxhdENvbG9yLmIsCgkJCSk7CgoJCQlyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZGVuc2l0eS53cml0ZSk7CgkJCXJlbmRlcmVyLnJlbmRlcihzaW1TY2VuZSwgc2ltQ2FtZXJhKTsKCQkJZGVuc2l0eS5zd2FwKCk7CgoJCQlpZiAoIXByZXZpZXdTdGF0ZS5lbmFibGVkKSB7CgkJCQlwb2ludGVyU3RhdGUubW92ZWQgPSBmYWxzZTsKCQkJfQoJCX0KCgkJc2ltTWVzaC5tYXRlcmlhbCA9IGRpdmVyZ2VuY2VNYXQ7CgkJZGl2ZXJnZW5jZU1hdC51bmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGRpdmVyZ2VuY2UpOwoJCXJlbmRlcmVyLnJlbmRlcihzaW1TY2VuZSwgc2ltQ2FtZXJhKTsKCgkJc2ltTWVzaC5tYXRlcmlhbCA9IHByZXNzdXJlTWF0OwoJCXByZXNzdXJlTWF0LnVuaWZvcm1zLnVEaXZlcmdlbmNlLnZhbHVlID0gZGl2ZXJnZW5jZS50ZXh0dXJlOwoJCWZvciAobGV0IGkgPSAwOyBpIDwgcHJlc3N1cmVJdGVyYXRpb25zOyBpKyspIHsKCQkJcHJlc3N1cmVNYXQudW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCQlyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQocHJlc3N1cmUud3JpdGUpOwoJCQlyZW5kZXJlci5yZW5kZXIoc2ltU2NlbmUsIHNpbUNhbWVyYSk7CgkJCXByZXNzdXJlLnN3YXAoKTsKCQl9CgoJCXNpbU1lc2gubWF0ZXJpYWwgPSBncmFkaWVudFN1YnRyYWN0TWF0OwoJCWdyYWRpZW50U3VidHJhY3RNYXQudW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCWdyYWRpZW50U3VidHJhY3RNYXQudW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCXJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh2ZWxvY2l0eS53cml0ZSk7CgkJcmVuZGVyZXIucmVuZGVyKHNpbVNjZW5lLCBzaW1DYW1lcmEpOwoJCXZlbG9jaXR5LnN3YXAoKTsKCgkJc2ltTWVzaC5tYXRlcmlhbCA9IGFkdmVjdGlvbk1hdDsKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCWFkdmVjdGlvbk1hdC51bmlmb3Jtcy51SW5wdXQudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJYWR2ZWN0aW9uTWF0LnVuaWZvcm1zLnVEaXNzaXBhdGlvbi52YWx1ZSA9IHZlbG9jaXR5RGlzc2lwYXRpb247CgkJYWR2ZWN0aW9uTWF0LnVuaWZvcm1zLnVEdC52YWx1ZSA9IGR0OwoJCXJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh2ZWxvY2l0eS53cml0ZSk7CgkJcmVuZGVyZXIucmVuZGVyKHNpbVNjZW5lLCBzaW1DYW1lcmEpOwoJCXZlbG9jaXR5LnN3YXAoKTsKCgkJc2ltTWVzaC5tYXRlcmlhbCA9IGFkdmVjdGlvbk1hdDsKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCWFkdmVjdGlvbk1hdC51bmlmb3Jtcy51SW5wdXQudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQlhZHZlY3Rpb25NYXQudW5pZm9ybXMudURpc3NpcGF0aW9uLnZhbHVlID0gZGlzc2lwYXRpb247CgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGRlbnNpdHkud3JpdGUpOwoJCXJlbmRlcmVyLnJlbmRlcihzaW1TY2VuZSwgc2ltQ2FtZXJhKTsKCQlkZW5zaXR5LnN3YXAoKTsKCgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG51bGwpOwoKCQlpZiAob3V0cHV0TWF0KSB7CgkJCW91dHB1dE1hdC51bmlmb3Jtcy51VGV4dHVyZS52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCX0KCX0pOwo8L3NjcmlwdD4KCjxULk1lc2g+Cgk8VC5QbGFuZUdlb21ldHJ5IGFyZ3M9e1syLCAyXX0gLz4KCTxULlNoYWRlck1hdGVyaWFsCgkJYmluZDpyZWY9e291dHB1dE1hdH0KCQl7dmVydGV4U2hhZGVyfQoJCWZyYWdtZW50U2hhZGVyPXtvdXRwdXRTaGFkZXJ9CgkJdW5pZm9ybXM9e3sKCQkJdVRleHR1cmU6IHsgdmFsdWU6IG51bGwgfSwKCQl9fQoJCXNpZGU9e1RIUkVFLkRvdWJsZVNpZGV9CgkJdHJhbnNwYXJlbnQKCS8+CjwvVC5NZXNoPgo=", - "components/glass-pane/GlassPane.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsYXNzUGFuZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFN0cmVuZ3RoIG9mIHRoZSByZWZyYWN0aW9uL2Rpc3RvcnRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWRpc3RvcnRpb24/OiBTY2VuZVByb3BzWyJkaXN0b3J0aW9uIl07CgkJLyoqCgkJICogQW1vdW50IG9mIGNocm9tYXRpYyBhYmVycmF0aW9uIChjb2xvciBzcGxpdHRpbmcpLgoJCSAqIEBkZWZhdWx0IDAuMDA1CgkJICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IFNjZW5lUHJvcHNbImNocm9tYXRpY0FiZXJyYXRpb24iXTsKCQkvKioKCQkgKiBTcGVlZCBvZiB0aGUgd2F2ZSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIEFtcGxpdHVkZSBvZiB0aGUgd2F2ZSBkaXN0b3J0aW9uLgoJCSAqIEBkZWZhdWx0IDAuMDUKCQkgKi8KCQl3YXZpbmVzcz86IFNjZW5lUHJvcHNbIndhdmluZXNzIl07CgkJLyoqCgkJICogRnJlcXVlbmN5IG9mIHRoZSB3YXZlIGRpc3RvcnRpb24uCgkJICogQGRlZmF1bHQgNi4wCgkJICovCgkJZnJlcXVlbmN5PzogU2NlbmVQcm9wc1siZnJlcXVlbmN5Il07CgkJLyoqCgkJICogTnVtYmVyL2RlbnNpdHkgb2YgdGhlIGdsYXNzIHJvZHMuCgkJICogQGRlZmF1bHQgNS4wCgkJICovCgkJcm9kcz86IFNjZW5lUHJvcHNbInJvZHMiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2UsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpc3RvcnRpb24gPSAxLjAsCgkJY2hyb21hdGljQWJlcnJhdGlvbiA9IDAuMDA1LAoJCXNwZWVkID0gMS4wLAoJCXdhdmluZXNzID0gMC4wNSwKCQlmcmVxdWVuY3kgPSA2LjAsCgkJcm9kcyA9IDUuMCwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IGRwciA9IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8Q2FudmFzIHtkcHJ9PgoJCQk8U2NlbmUKCQkJCXtpbWFnZX0KCQkJCXtkaXN0b3J0aW9ufQoJCQkJe2Nocm9tYXRpY0FiZXJyYXRpb259CgkJCQl7c3BlZWR9CgkJCQl7d2F2aW5lc3N9CgkJCQl7ZnJlcXVlbmN5fQoJCQkJe3JvZHN9CgkJCS8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/glass-pane/GlassPaneScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgewoJCVZlY3RvcjIsCgkJU2hhZGVyTWF0ZXJpYWwsCgkJTWlycm9yZWRSZXBlYXRXcmFwcGluZywKCQlMaW5lYXJGaWx0ZXIsCgl9IGZyb20gInRocmVlIjsKCWltcG9ydCB7IHVzZVRleHR1cmUgfSBmcm9tICJAdGhyZWx0ZS9leHRyYXMiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi9kaXN0b3J0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBjaHJvbWF0aWMgYWJlcnJhdGlvbiAoY29sb3Igc3BsaXR0aW5nKS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCWNocm9tYXRpY0FiZXJyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogU3BlZWQgb2YgdGhlIHdhdmUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtcGxpdHVkZSBvZiB0aGUgd2F2ZSBkaXN0b3J0aW9uLgoJCSAqIEBkZWZhdWx0IDAuMDUKCQkgKi8KCQl3YXZpbmVzcz86IG51bWJlcjsKCQkvKioKCQkgKiBGcmVxdWVuY3kgb2YgdGhlIHdhdmUgZGlzdG9ydGlvbi4KCQkgKiBAZGVmYXVsdCA2LjAKCQkgKi8KCQlmcmVxdWVuY3k/OiBudW1iZXI7CgkJLyoqCgkJICogRGVuc2l0eSBvZiB0aGUgZ2xhc3Mgcm9kcy4KCQkgKiBAZGVmYXVsdCA1LjAKCQkgKi8KCQlyb2RzPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJaW1hZ2UsCgkJZGlzdG9ydGlvbiA9IDEuMCwKCQljaHJvbWF0aWNBYmVycmF0aW9uID0gMC4wMDUsCgkJc3BlZWQgPSAxLjAsCgkJd2F2aW5lc3MgPSAwLjA1LAoJCWZyZXF1ZW5jeSA9IDYuMCwKCQlyb2RzID0gNS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgdGltZSA9IDA7Cgljb25zdCB7IHNpemUsIHJlbmRlcmVyIH0gPSB1c2VUaHJlbHRlKCk7CgoJY29uc3QgdGV4dHVyZVNpemVVbmlmb3JtID0gbmV3IFZlY3RvcjIoMSwgMSk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAogICAgdmFyeWluZyB2ZWMyIHZVdjsKICAgIHZvaWQgbWFpbigpIHsKICAgICAgdlV2ID0gdXY7CiAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMS4wKTsKICAgIH0KICBgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAogICAgdW5pZm9ybSBmbG9hdCB1VGltZTsKICAgIHVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKICAgIHVuaWZvcm0gdmVjMiB1VGV4dHVyZVNpemU7CiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKICAgIHVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb247CiAgICB1bmlmb3JtIGZsb2F0IHVDaHJvbWF0aWNBYmVycmF0aW9uOwogICAgdW5pZm9ybSBmbG9hdCB1V2F2aW5lc3M7CiAgICB1bmlmb3JtIGZsb2F0IHVGcmVxdWVuY3k7CiAgICB1bmlmb3JtIGZsb2F0IHVSb2RzOwogICAgdmFyeWluZyB2ZWMyIHZVdjsKCiAgICB2ZWMyIGdldENvdmVyVVYodmVjMiB1diwgdmVjMiB0ZXh0dXJlU2l6ZSkgewogICAgICB2ZWMyIHMgPSB1UmVzb2x1dGlvbiAvIHRleHR1cmVTaXplOwogICAgICBmbG9hdCBzY2FsZSA9IG1heChzLngsIHMueSk7CiAgICAgIHZlYzIgc2NhbGVkU2l6ZSA9IHRleHR1cmVTaXplICogc2NhbGU7CiAgICAgIHZlYzIgb2Zmc2V0ID0gKHVSZXNvbHV0aW9uIC0gc2NhbGVkU2l6ZSkgKiAwLjU7CiAgICAgIHJldHVybiAodXYgKiB1UmVzb2x1dGlvbiAtIG9mZnNldCkgLyBzY2FsZWRTaXplOwogICAgfQoKICAgIHZvaWQgbWFpbigpIHsKICAgICAgdmVjMiBwID0gKHZVdiAqIDIuMCAtIDEuMCk7CiAgICAgIHAueCAqPSB1UmVzb2x1dGlvbi54IC8gdVJlc29sdXRpb24ueTsKCiAgICAgIGZsb2F0IGFuZ2xlID0gcmFkaWFucyg0NS4wKTsKICAgICAgbWF0MiByb3QgPSBtYXQyKGNvcyhhbmdsZSksIC1zaW4oYW5nbGUpLCBzaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTsKICAgICAgdmVjMiBwX3JvdCA9IHJvdCAqIHA7CgogICAgICBmbG9hdCB3YXZlID0gdVdhdmluZXNzICogc2luKHBfcm90LnkgKiB1RnJlcXVlbmN5KTsKICAgICAgZmxvYXQgcm9kX3ggPSBmcmFjdCgocF9yb3QueCArIHdhdmUpICogdVJvZHMpICogMi4wIC0gMS4wOwoKICAgICAgZmxvYXQgcm9kX3pfc3EgPSAxLjAgLSByb2RfeCAqIHJvZF94OwogICAgICBmbG9hdCByb2RfeiA9IHNxcnQobWF4KHJvZF96X3NxLCAwLjApKTsKCiAgICAgIHZlYzMgbiA9IHZlYzMocm9kX3gsIDAuMCwgLXJvZF96KTsKICAgICAgdmVjMyByZCA9IHZlYzMoMC4wLCAwLjAsIC0xLjApOwogICAgICBmbG9hdCByZWZyYWN0aXZlX2luZGV4ID0gMC42OwogICAgICB2ZWMzIHJlZnJhY3RlZF9yYXkgPSBtaXgobiwgcmQsIHJlZnJhY3RpdmVfaW5kZXgpOwoKICAgICAgZmxvYXQgel9kaXN0ID0gMC41IC8gKGFicyhyZWZyYWN0ZWRfcmF5LnopICsgMC4wMDEpOwogICAgICB2ZWMzIGhpdF9wb3MgPSB2ZWMzKHBfcm90LCAwLjApICsgKHpfZGlzdCAqIHVEaXN0b3J0aW9uKSAqIHJlZnJhY3RlZF9yYXk7CgogICAgICBtYXQyIHJvdF9pbnYgPSBtYXQyKGNvcygtYW5nbGUpLCAtc2luKC1hbmdsZSksIHNpbigtYW5nbGUpLCBjb3MoLWFuZ2xlKSk7CiAgICAgIHZlYzIgdXZfaGl0ID0gcm90X2ludiAqIGhpdF9wb3MueHk7CgogICAgICB1dl9oaXQueCAvPSAodVJlc29sdXRpb24ueCAvIHVSZXNvbHV0aW9uLnkpOwogICAgICB1dl9oaXQgPSB1dl9oaXQgKiAwLjUgKyAwLjU7CgogICAgICB2ZWMyIGNvdmVyVXYgPSBnZXRDb3ZlclVWKHV2X2hpdCwgdVRleHR1cmVTaXplKTsKCiAgICAgIGZsb2F0IHQgPSB1VGltZSAqIDAuMTsKICAgICAgdmVjMiBmbG93ID0gdmVjMihzaW4odCksIGNvcyh0ICogMC44KSkgKiAwLjA1OwoKICAgICAgZmxvYXQgZGlzcGVyc2lvbiA9IHVDaHJvbWF0aWNBYmVycmF0aW9uOwoKICAgICAgdmVjMiBjb3ZlclV2RmxvdyA9IGNvdmVyVXYgKyBmbG93OwogICAgICBmbG9hdCByID0gdGV4dHVyZTJEKHVUZXh0dXJlLCBjb3ZlclV2RmxvdyArIHZlYzIoZGlzcGVyc2lvbiwgMC4wKSkucjsKICAgICAgZmxvYXQgZyA9IHRleHR1cmUyRCh1VGV4dHVyZSwgY292ZXJVdkZsb3cpLmc7CiAgICAgIGZsb2F0IGIgPSB0ZXh0dXJlMkQodVRleHR1cmUsIGNvdmVyVXZGbG93IC0gdmVjMihkaXNwZXJzaW9uLCAwLjApKS5iOwoKICAgICAgZmxvYXQgZ19mYWN0b3IgPSAxLjAgLSBhYnMobi56KTsKICAgICAgZ19mYWN0b3IgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBnX2ZhY3Rvcik7CiAgICAgIGZsb2F0IGdsYXNzID0gZ19mYWN0b3IgKiAwLjAwMjU7CgogICAgICB2ZWMzIGZpbmFsQ29sb3IgPSB2ZWMzKHIsIGcsIGIpICsgZ2xhc3M7CiAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmluYWxDb2xvciwgMS4wKTsKICAgICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CiAgICB9CiAgYDsKCgljb25zdCB0ZXh0dXJlID0gJGRlcml2ZWQoCgkJdXNlVGV4dHVyZShpbWFnZSwgewoJCQl0cmFuc2Zvcm06ICh0ZXgpID0+IHsKCQkJCXRleC53cmFwUyA9IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CgkJCQl0ZXgud3JhcFQgPSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOwoJCQkJdGV4Lm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKCQkJCXRleC5tYWdGaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CgkJCQl0ZXguYW5pc290cm9weSA9IHJlbmRlcmVyCgkJCQkJPyByZW5kZXJlci5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpCgkJCQkJOiAxOwoJCQkJcmV0dXJuIHRleDsKCQkJfSwKCQl9KSwKCSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdGV4ID0gJHRleHR1cmU7CgkJaWYgKHRleCAmJiB0ZXguaW1hZ2UpIHsKCQkJdGV4dHVyZVNpemVVbmlmb3JtLnNldCh0ZXguaW1hZ2Uud2lkdGgsIHRleC5pbWFnZS5oZWlnaHQpOwoJCX0KCX0pOwoKCWxldCBtYXRlcmlhbCA9ICRzdGF0ZTxTaGFkZXJNYXRlcmlhbD4oKTsKCgl1c2VUYXNrKChkZWx0YSkgPT4gewoJCXRpbWUgKz0gZGVsdGEgKiBzcGVlZDsKCQlpZiAobWF0ZXJpYWwpIHsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudVRpbWUudmFsdWUgPSB0aW1lOwoJCQltYXRlcmlhbC51bmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQoJHNpemUud2lkdGgsICRzaXplLmhlaWdodCk7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVEaXN0b3J0aW9uLnZhbHVlID0gZGlzdG9ydGlvbjsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudUNocm9tYXRpY0FiZXJyYXRpb24udmFsdWUgPSBjaHJvbWF0aWNBYmVycmF0aW9uOwoJCQltYXRlcmlhbC51bmlmb3Jtcy51V2F2aW5lc3MudmFsdWUgPSB3YXZpbmVzczsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudUZyZXF1ZW5jeS52YWx1ZSA9IGZyZXF1ZW5jeTsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudVJvZHMudmFsdWUgPSByb2RzOwoJCX0KCX0pOwo8L3NjcmlwdD4KCnsjaWYgJHRleHR1cmV9Cgk8VC5NZXNoPgoJCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJCTxULlNoYWRlck1hdGVyaWFsCgkJCWJpbmQ6cmVmPXttYXRlcmlhbH0KCQkJe3ZlcnRleFNoYWRlcn0KCQkJe2ZyYWdtZW50U2hhZGVyfQoJCQl1bmlmb3Jtcz17ewoJCQkJdVRpbWU6IHsgdmFsdWU6IDAgfSwKCQkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjdG9yMigxLCAxKSB9LAoJCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiB0ZXh0dXJlU2l6ZVVuaWZvcm0gfSwKCQkJCXVUZXh0dXJlOiB7IHZhbHVlOiAkdGV4dHVyZSB9LAoJCQkJdURpc3RvcnRpb246IHsgdmFsdWU6IGRpc3RvcnRpb24gfSwKCQkJCXVDaHJvbWF0aWNBYmVycmF0aW9uOiB7IHZhbHVlOiBjaHJvbWF0aWNBYmVycmF0aW9uIH0sCgkJCQl1V2F2aW5lc3M6IHsgdmFsdWU6IHdhdmluZXNzIH0sCgkJCQl1RnJlcXVlbmN5OiB7IHZhbHVlOiBmcmVxdWVuY3kgfSwKCQkJCXVSb2RzOiB7IHZhbHVlOiByb2RzIH0sCgkJCX19CgkJLz4KCTwvVC5NZXNoPgp7L2lmfQo=", - "components/glass-slideshow/GlassSlideshow.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsYXNzU2xpZGVzaG93U2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHsgTm9Ub25lTWFwcGluZyB9IGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZSBVUkxzIHRvIGN5Y2xlIHRocm91Z2guCgkJICovCgkJaW1hZ2VzOiBTY2VuZVByb3BzWyJpbWFnZXMiXTsKCQkvKioKCQkgKiBUaGUgY3VycmVudCBpbWFnZSBpbmRleC4gQ2hhbmdlIHRoaXMgdG8gdHJpZ2dlciBhIHRyYW5zaXRpb24uCgkJICogQGRlZmF1bHQgMAoJCSAqLwoJCWluZGV4PzogU2NlbmVQcm9wc1siaW5kZXgiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGluIG1pbGxpc2Vjb25kcy4KCQkgKiBAZGVmYXVsdCAyMDAwCgkJICovCgkJdHJhbnNpdGlvbkR1cmF0aW9uPzogU2NlbmVQcm9wc1sidHJhbnNpdGlvbkR1cmF0aW9uIl07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBnbGFzcyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgY2hyb21hdGljIGFiZXJyYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IFNjZW5lUHJvcHNbImNocm9tYXRpY0FiZXJyYXRpb24iXTsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlyZWZyYWN0aW9uPzogU2NlbmVQcm9wc1sicmVmcmFjdGlvbiJdOwoJCS8qKgoJCSAqIEF1dG9tYXRpY2FsbHkgY3ljbGUgdGhyb3VnaCB0aGUgcHJvdmlkZWQgaW1hZ2VzLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvcGxheT86IGJvb2xlYW47CgkJLyoqCgkJICogRGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgdHJhbnNpdGlvbnMgaW4gbWlsbGlzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDUwMDAKCQkgKi8KCQlhdXRvcGxheUludGVydmFsPzogbnVtYmVyOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlpbWFnZXMsCgkJaW5kZXggPSAwLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQl0cmFuc2l0aW9uRHVyYXRpb24gPSAyMDAwLAoJCWludGVuc2l0eSA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAxLjAsCgkJcmVmcmFjdGlvbiA9IDEuMCwKCQlhdXRvcGxheSA9IHRydWUsCgkJYXV0b3BsYXlJbnRlcnZhbCA9IDUwMDAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKCglsZXQgYXV0b3BsYXlJbmRleCA9ICRzdGF0ZSgwKTsKCWxldCBoYXNJbml0aWFsaXplZEF1dG9wbGF5SW5kZXggPSBmYWxzZTsKCgljb25zdCBjdXJyZW50SW5kZXggPSAkZGVyaXZlZChhdXRvcGxheSA/IGF1dG9wbGF5SW5kZXggOiBpbmRleCk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKGhhc0luaXRpYWxpemVkQXV0b3BsYXlJbmRleCkgewoJCQlyZXR1cm47CgkJfQoKCQlhdXRvcGxheUluZGV4ID0gaW5kZXg7CgkJaGFzSW5pdGlhbGl6ZWRBdXRvcGxheUluZGV4ID0gdHJ1ZTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsID0gaW1hZ2VzLmxlbmd0aDsKCgkJaWYgKHRvdGFsID09PSAwKSB7CgkJCWlmIChhdXRvcGxheUluZGV4ICE9PSAwKSB7CgkJCQlhdXRvcGxheUluZGV4ID0gMDsKCQkJfQoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBub3JtYWxpemVkID0gKChhdXRvcGxheUluZGV4ICUgdG90YWwpICsgdG90YWwpICUgdG90YWw7CgoJCWlmIChub3JtYWxpemVkICE9PSBhdXRvcGxheUluZGV4KSB7CgkJCWF1dG9wbGF5SW5kZXggPSBub3JtYWxpemVkOwoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghYXV0b3BsYXkpIHsKCQkJY29uc3QgdG90YWwgPSBpbWFnZXMubGVuZ3RoOwoJCQlpZiAodG90YWwgPT09IDApIHsKCQkJCWlmIChhdXRvcGxheUluZGV4ICE9PSAwKSB7CgkJCQkJYXV0b3BsYXlJbmRleCA9IDA7CgkJCQl9CgkJCQlyZXR1cm47CgkJCX0KCgkJCWNvbnN0IG5vcm1hbGl6ZWQgPSAoKGluZGV4ICUgdG90YWwpICsgdG90YWwpICUgdG90YWw7CgkJCWlmIChub3JtYWxpemVkICE9PSBhdXRvcGxheUluZGV4KSB7CgkJCQlhdXRvcGxheUluZGV4ID0gbm9ybWFsaXplZDsKCQkJfQoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsID0gaW1hZ2VzLmxlbmd0aDsKCQljb25zdCBpc0F1dG9wbGF5aW5nID0gYXV0b3BsYXkgJiYgdG90YWwgPiAxOwoJCWNvbnN0IGRlbGF5ID0gTWF0aC5tYXgoYXV0b3BsYXlJbnRlcnZhbCwgMCk7CgoJCWlmICghaXNBdXRvcGxheWluZykgewoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKCQkJY29uc3QgbGVuZ3RoID0gaW1hZ2VzLmxlbmd0aDsKCQkJaWYgKGxlbmd0aCA9PT0gMCkgewoJCQkJYXV0b3BsYXlJbmRleCA9IDA7CgkJCQlyZXR1cm47CgkJCX0KCQkJYXV0b3BsYXlJbmRleCA9IChhdXRvcGxheUluZGV4ICsgMSkgJSBsZW5ndGg7CgkJfSwgZGVsYXkgfHwgMSk7CgoJCXJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8Q2FudmFzIHtkcHJ9IHRvbmVNYXBwaW5nPXtOb1RvbmVNYXBwaW5nfT4KCQkJPFNjZW5lCgkJCQl7aW1hZ2VzfQoJCQkJaW5kZXg9e2N1cnJlbnRJbmRleH0KCQkJCXt0cmFuc2l0aW9uRHVyYXRpb259CgkJCQl7aW50ZW5zaXR5fQoJCQkJe2Rpc3RvcnRpb259CgkJCQl7Y2hyb21hdGljQWJlcnJhdGlvbn0KCQkJCXtyZWZyYWN0aW9ufQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/glass-slideshow/GlassSlideshowScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCB7IG9uRGVzdHJveSB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgewoJCVZlY3RvcjIsCgkJU2hhZGVyTWF0ZXJpYWwsCgkJTGluZWFyRmlsdGVyLAoJCUNsYW1wVG9FZGdlV3JhcHBpbmcsCgkJU1JHQkNvbG9yU3BhY2UsCgl9IGZyb20gInRocmVlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKiogQXJyYXkgb2YgaW1hZ2UgVVJMcyB1c2VkIGZvciB0ZXh0dXJlcy4gKi8KCQlpbWFnZXM6IHN0cmluZ1tdOwoJCS8qKiBJbmRleCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBpbWFnZS4gKi8KCQlpbmRleD86IG51bWJlcjsKCQkvKiogRHVyYXRpb24gb2YgYSBzaW5nbGUgdHJhbnNpdGlvbiBpbiBtaWxsaXNlY29uZHMuICovCgkJdHJhbnNpdGlvbkR1cmF0aW9uPzogbnVtYmVyOwoJCS8qKiBHbG9iYWwgaW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBzaGFkZXIgZWZmZWN0LiAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCQkvKiogRGlzdG9ydGlvbiBzdHJlbmd0aCBhcHBsaWVkIGR1cmluZyB0cmFuc2l0aW9ucy4gKi8KCQlkaXN0b3J0aW9uPzogbnVtYmVyOwoJCS8qKiBDaHJvbWF0aWMgYWJlcnJhdGlvbiBzdHJlbmd0aCBmb3IgdGhlIHNoYWRlci4gKi8KCQljaHJvbWF0aWNBYmVycmF0aW9uPzogbnVtYmVyOwoJCS8qKiBSZWZyYWN0aW9uIHN0cmVuZ3RoIGZvciB0aGUgc2hhZGVyLiAqLwoJCXJlZnJhY3Rpb24/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpbWFnZXMsCgkJaW5kZXggPSAwLAoJCXRyYW5zaXRpb25EdXJhdGlvbiA9IDIwMDAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJCWRpc3RvcnRpb24gPSAxLjAsCgkJY2hyb21hdGljQWJlcnJhdGlvbiA9IDEuMCwKCQlyZWZyYWN0aW9uID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCB7IHNpemUgfSA9IHVzZVRocmVsdGUoKTsKCglsZXQgbWF0ZXJpYWwgPSAkc3RhdGU8U2hhZGVyTWF0ZXJpYWw+KCk7CglsZXQgcHJvZ3Jlc3MgPSAkc3RhdGUoeyB2YWx1ZTogMCB9KTsKCgljb25zdCB0ZXh0dXJlcyA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUoaW1hZ2VzLCB7CgkJCXRyYW5zZm9ybTogKHRleCkgPT4gewoJCQkJdGV4Lm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKCQkJCXRleC5tYWdGaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CgkJCQl0ZXgud3JhcFMgPSBDbGFtcFRvRWRnZVdyYXBwaW5nOwoJCQkJdGV4LndyYXBUID0gQ2xhbXBUb0VkZ2VXcmFwcGluZzsKCQkJCXRleC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7CgkJCQlyZXR1cm4gdGV4OwoJCQl9LAoJCX0pLAoJKTsKCglsZXQgY3VycmVudEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IG5leHRJbmRleCA9ICRzdGF0ZSgwKTsKCWxldCBpc1RyYW5zaXRpb25pbmcgPSAkc3RhdGUoZmFsc2UpOwoKCW9uRGVzdHJveSgoKSA9PiB7CgkJZ3NhcC5raWxsVHdlZW5zT2YocHJvZ3Jlc3MpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdG90YWxJbWFnZXMgPSBpbWFnZXMubGVuZ3RoOwoKCQlpZiAodG90YWxJbWFnZXMgPT09IDApIHsKCQkJaWYgKGN1cnJlbnRJbmRleCAhPT0gMCkgewoJCQkJY3VycmVudEluZGV4ID0gMDsKCQkJfQoJCQlpZiAobmV4dEluZGV4ICE9PSAwKSB7CgkJCQluZXh0SW5kZXggPSAwOwoJCQl9CgkJCWlzVHJhbnNpdGlvbmluZyA9IGZhbHNlOwoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBub3JtYWxpemVkSW5kZXggPSAoKGluZGV4ICUgdG90YWxJbWFnZXMpICsgdG90YWxJbWFnZXMpICUgdG90YWxJbWFnZXM7CgoJCWlmIChub3JtYWxpemVkSW5kZXggPT09IGN1cnJlbnRJbmRleCB8fCBpc1RyYW5zaXRpb25pbmcpIHsKCQkJcmV0dXJuOwoJCX0KCgkJaXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTsKCQluZXh0SW5kZXggPSBub3JtYWxpemVkSW5kZXg7CgoJCWdzYXAudG8ocHJvZ3Jlc3MsIHsKCQkJdmFsdWU6IDEsCgkJCWR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24gLyAxMDAwLAoJCQllYXNlOiAicG93ZXIzLmluT3V0IiwKCQkJb25Db21wbGV0ZTogKCkgPT4gewoJCQkJY3VycmVudEluZGV4ID0gbmV4dEluZGV4OwoJCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQkJaXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7CgkJCX0sCgkJfSk7Cgl9KTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCiAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjsKICAgICAgICB2b2lkIG1haW4oKSB7CiAgICAgICAgICAgIHZVdiA9IHV2OwogICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7CiAgICAgICAgfQogICAgYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTE7CiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmUyOwogICAgICAgIHVuaWZvcm0gZmxvYXQgdVByb2dyZXNzOwogICAgICAgIHVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKICAgICAgICB1bmlmb3JtIHZlYzIgdVRleHR1cmUxU2l6ZTsKICAgICAgICB1bmlmb3JtIHZlYzIgdVRleHR1cmUyU2l6ZTsKCiAgICAgICAgdW5pZm9ybSBmbG9hdCB1R2xvYmFsSW50ZW5zaXR5OwogICAgICAgIHVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb25TdHJlbmd0aDsKICAgICAgICB1bmlmb3JtIGZsb2F0IHVTcGVlZE11bHRpcGxpZXI7CiAgICAgICAgdW5pZm9ybSBmbG9hdCB1Q29sb3JFbmhhbmNlbWVudDsKCiAgICAgICAgdW5pZm9ybSBmbG9hdCB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGg7CiAgICAgICAgdW5pZm9ybSBmbG9hdCB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uOwogICAgICAgIHVuaWZvcm0gZmxvYXQgdUdsYXNzQnViYmxlQ2xhcml0eTsKICAgICAgICB1bmlmb3JtIGZsb2F0IHVHbGFzc0VkZ2VHbG93OwogICAgICAgIHVuaWZvcm0gZmxvYXQgdUdsYXNzTGlxdWlkRmxvdzsKCiAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjsKCiAgICAgICAgdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKICAgICAgICAgICAgdmVjMiBzID0gdVJlc29sdXRpb24gLyB0ZXh0dXJlU2l6ZTsKICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwogICAgICAgICAgICB2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwogICAgICAgICAgICB2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwogICAgICAgICAgICByZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKICAgICAgICB9CgogICAgICAgIGZsb2F0IG5vaXNlKHZlYzIgcCkgewogICAgICAgICAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChwLCB2ZWMyKDEyNy4xLCAzMTEuNykpKSAqIDQzNzU4LjU0NTMpOwogICAgICAgIH0KCiAgICAgICAgZmxvYXQgc21vb3RoTm9pc2UodmVjMiBwKSB7CiAgICAgICAgICAgIHZlYzIgaSA9IGZsb29yKHApOwogICAgICAgICAgICB2ZWMyIGYgPSBmcmFjdChwKTsKICAgICAgICAgICAgZiA9IGYgKiBmICogKDMuMCAtIDIuMCAqIGYpOwoKICAgICAgICAgICAgcmV0dXJuIG1peCgKICAgICAgICAgICAgICAgIG1peChub2lzZShpKSwgbm9pc2UoaSArIHZlYzIoMS4wLCAwLjApKSwgZi54KSwKICAgICAgICAgICAgICAgIG1peChub2lzZShpICsgdmVjMigwLjAsIDEuMCkpLCBub2lzZShpICsgdmVjMigxLjAsIDEuMCkpLCBmLngpLAogICAgICAgICAgICAgICAgZi55CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB2ZWM0IGdsYXNzRWZmZWN0KHZlYzIgdXYsIGZsb2F0IHByb2dyZXNzKSB7CiAgICAgICAgICAgIGZsb2F0IGdsYXNzU3RyZW5ndGggPSAwLjA4ICogdUdsYXNzUmVmcmFjdGlvblN0cmVuZ3RoICogdURpc3RvcnRpb25TdHJlbmd0aCAqIHVHbG9iYWxJbnRlbnNpdHk7CiAgICAgICAgICAgIGZsb2F0IGNocm9tYXRpY0FiZXJyYXRpb24gPSAwLjAyICogdUdsYXNzQ2hyb21hdGljQWJlcnJhdGlvbiAqIHVHbG9iYWxJbnRlbnNpdHk7CiAgICAgICAgICAgIGZsb2F0IHdhdmVEaXN0b3J0aW9uID0gMC4wMjUgKiB1RGlzdG9ydGlvblN0cmVuZ3RoOwogICAgICAgICAgICBmbG9hdCBjbGVhckNlbnRlclNpemUgPSAwLjMgKiB1R2xhc3NCdWJibGVDbGFyaXR5OwogICAgICAgICAgICBmbG9hdCBzdXJmYWNlUmlwcGxlcyA9IDAuMDA0ICogdURpc3RvcnRpb25TdHJlbmd0aDsKICAgICAgICAgICAgZmxvYXQgbGlxdWlkRmxvdyA9IDAuMDE1ICogdUdsYXNzTGlxdWlkRmxvdyAqIHVTcGVlZE11bHRpcGxpZXI7CiAgICAgICAgICAgIGZsb2F0IHJpbUxpZ2h0V2lkdGggPSAwLjA1OwogICAgICAgICAgICBmbG9hdCBnbGFzc0VkZ2VXaWR0aCA9IDAuMDI1OwoKICAgICAgICAgICAgZmxvYXQgYnJpZ2h0bmVzc1BoYXNlID0gc21vb3Roc3RlcCgwLjgsIDEuMCwgcHJvZ3Jlc3MpOwogICAgICAgICAgICBmbG9hdCByaW1MaWdodEludGVuc2l0eSA9IDAuMDggKiAoMS4wIC0gYnJpZ2h0bmVzc1BoYXNlKSAqIHVHbGFzc0VkZ2VHbG93ICogdUdsb2JhbEludGVuc2l0eTsKICAgICAgICAgICAgZmxvYXQgZ2xhc3NFZGdlT3BhY2l0eSA9IDAuMDYgKiAoMS4wIC0gYnJpZ2h0bmVzc1BoYXNlKSAqIHVHbGFzc0VkZ2VHbG93OwoKICAgICAgICAgICAgdmVjMiBjZW50ZXIgPSB2ZWMyKDAuNSwgMC41KTsKICAgICAgICAgICAgdmVjMiBwID0gdXYgKiB1UmVzb2x1dGlvbjsKCiAgICAgICAgICAgIHZlYzIgdXYxID0gZ2V0Q292ZXJVVih1diwgdVRleHR1cmUxU2l6ZSk7CiAgICAgICAgICAgIHZlYzIgdXYyX2Jhc2UgPSBnZXRDb3ZlclVWKHV2LCB1VGV4dHVyZTJTaXplKTsKCiAgICAgICAgICAgIGZsb2F0IG1heFJhZGl1cyA9IGxlbmd0aCh1UmVzb2x1dGlvbikgKiAwLjg1OwogICAgICAgICAgICBmbG9hdCBidWJibGVSYWRpdXMgPSBwcm9ncmVzcyAqIG1heFJhZGl1czsKICAgICAgICAgICAgdmVjMiBzcGhlcmVDZW50ZXIgPSBjZW50ZXIgKiB1UmVzb2x1dGlvbjsKCiAgICAgICAgICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgocCAtIHNwaGVyZUNlbnRlcik7CiAgICAgICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0ID0gZGlzdCAvIG1heChidWJibGVSYWRpdXMsIDAuMDAxKTsKICAgICAgICAgICAgdmVjMiBkaXJlY3Rpb24gPSAoZGlzdCA+IDAuMCkgPyAocCAtIHNwaGVyZUNlbnRlcikgLyBkaXN0IDogdmVjMigwLjApOwogICAgICAgICAgICBmbG9hdCBpbnNpZGUgPSBzbW9vdGhzdGVwKGJ1YmJsZVJhZGl1cyArIDMuMCwgYnViYmxlUmFkaXVzIC0gMy4wLCBkaXN0KTsKCiAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlRmFjdG9yID0gc21vb3Roc3RlcChjbGVhckNlbnRlclNpemUsIDEuMCwgbm9ybWFsaXplZERpc3QpOwogICAgICAgICAgICBmbG9hdCB0aW1lID0gcHJvZ3Jlc3MgKiA1LjAgKiB1U3BlZWRNdWx0aXBsaWVyOwoKICAgICAgICAgICAgdmVjMiBsaXF1aWRTdXJmYWNlID0gdmVjMigKICAgICAgICAgICAgICAgIHNtb290aE5vaXNlKHV2ICogMTAwLjAgKyB0aW1lICogMC4zKSwKICAgICAgICAgICAgICAgIHNtb290aE5vaXNlKHV2ICogMTAwLjAgKyB0aW1lICogMC4yICsgNTAuMCkKICAgICAgICAgICAgKSAtIDAuNTsKICAgICAgICAgICAgbGlxdWlkU3VyZmFjZSAqPSBzdXJmYWNlUmlwcGxlcyAqIGRpc3RhbmNlRmFjdG9yOwoKICAgICAgICAgICAgdmVjMiBkaXN0b3J0ZWRVViA9IHV2Ml9iYXNlOwogICAgICAgICAgICBpZiAoaW5zaWRlID4gMC4wKSB7CiAgICAgICAgICAgICAgICBmbG9hdCByZWZyYWN0aW9uT2Zmc2V0ID0gZ2xhc3NTdHJlbmd0aCAqIHBvdyhkaXN0YW5jZUZhY3RvciwgMS41KTsKICAgICAgICAgICAgICAgIHZlYzIgZmxvd0RpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb24gKyB2ZWMyKHNpbih0aW1lKSwgY29zKHRpbWUgKiAwLjcpKSAqIDAuMyk7CiAgICAgICAgICAgICAgICBkaXN0b3J0ZWRVViAtPSBmbG93RGlyZWN0aW9uICogcmVmcmFjdGlvbk9mZnNldDsKCiAgICAgICAgICAgICAgICBmbG9hdCB3YXZlMSA9IHNpbihub3JtYWxpemVkRGlzdCAqIDIyLjAgLSB0aW1lICogMy41KTsKICAgICAgICAgICAgICAgIGZsb2F0IHdhdmUyID0gc2luKG5vcm1hbGl6ZWREaXN0ICogMzUuMCArIHRpbWUgKiAyLjgpICogMC43OwogICAgICAgICAgICAgICAgZmxvYXQgd2F2ZTMgPSBzaW4obm9ybWFsaXplZERpc3QgKiA1MC4wIC0gdGltZSAqIDQuMikgKiAwLjU7CiAgICAgICAgICAgICAgICBmbG9hdCBjb21iaW5lZFdhdmUgPSAod2F2ZTEgKyB3YXZlMiArIHdhdmUzKSAvIDMuMDsKCiAgICAgICAgICAgICAgICBmbG9hdCB3YXZlT2Zmc2V0ID0gY29tYmluZWRXYXZlICogd2F2ZURpc3RvcnRpb24gKiBkaXN0YW5jZUZhY3RvcjsKICAgICAgICAgICAgICAgIGRpc3RvcnRlZFVWIC09IGRpcmVjdGlvbiAqIHdhdmVPZmZzZXQgKyBsaXF1aWRTdXJmYWNlOwoKICAgICAgICAgICAgICAgIHZlYzIgZmxvd09mZnNldCA9IHZlYzIoCiAgICAgICAgICAgICAgICAgICAgc2luKHRpbWUgKyBub3JtYWxpemVkRGlzdCAqIDEwLjApLAogICAgICAgICAgICAgICAgICAgIGNvcyh0aW1lICogMC44ICsgbm9ybWFsaXplZERpc3QgKiA4LjApCiAgICAgICAgICAgICAgICApICogbGlxdWlkRmxvdyAqIGRpc3RhbmNlRmFjdG9yICogaW5zaWRlOwogICAgICAgICAgICAgICAgZGlzdG9ydGVkVVYgKz0gZmxvd09mZnNldDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmVjNCBuZXdJbWc7CiAgICAgICAgICAgIGlmIChpbnNpZGUgPiAwLjApIHsKICAgICAgICAgICAgICAgIGZsb2F0IGFiZXJyYXRpb25PZmZzZXQgPSBjaHJvbWF0aWNBYmVycmF0aW9uICogcG93KGRpc3RhbmNlRmFjdG9yLCAxLjIpOwoKICAgICAgICAgICAgICAgIHZlYzIgdXZfciA9IGRpc3RvcnRlZFVWICsgZGlyZWN0aW9uICogYWJlcnJhdGlvbk9mZnNldCAqIDEuMjsKICAgICAgICAgICAgICAgIHZlYzIgdXZfZyA9IGRpc3RvcnRlZFVWICsgZGlyZWN0aW9uICogYWJlcnJhdGlvbk9mZnNldCAqIDAuMjsKICAgICAgICAgICAgICAgIHZlYzIgdXZfYiA9IGRpc3RvcnRlZFVWIC0gZGlyZWN0aW9uICogYWJlcnJhdGlvbk9mZnNldCAqIDAuODsKCiAgICAgICAgICAgICAgICBmbG9hdCByID0gdGV4dHVyZTJEKHVUZXh0dXJlMiwgdXZfcikucjsKICAgICAgICAgICAgICAgIGZsb2F0IGcgPSB0ZXh0dXJlMkQodVRleHR1cmUyLCB1dl9nKS5nOwogICAgICAgICAgICAgICAgZmxvYXQgYiA9IHRleHR1cmUyRCh1VGV4dHVyZTIsIHV2X2IpLmI7CiAgICAgICAgICAgICAgICBuZXdJbWcgPSB2ZWM0KHIsIGcsIGIsIDEuMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuZXdJbWcgPSB0ZXh0dXJlMkQodVRleHR1cmUyLCB1djJfYmFzZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpbnNpZGUgPiAwLjAgJiYgcmltTGlnaHRJbnRlbnNpdHkgPiAwLjApIHsKICAgICAgICAgICAgICAgIGZsb2F0IHJpbSA9IHNtb290aHN0ZXAoMS4wIC0gcmltTGlnaHRXaWR0aCwgMS4wLCBub3JtYWxpemVkRGlzdCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEuMCAtIHNtb290aHN0ZXAoMS4wLCAxLjAxLCBub3JtYWxpemVkRGlzdCkpOwogICAgICAgICAgICAgICAgbmV3SW1nLnJnYiArPSByaW0gKiByaW1MaWdodEludGVuc2l0eTsKCiAgICAgICAgICAgICAgICBmbG9hdCBlZGdlID0gc21vb3Roc3RlcCgxLjAgLSBnbGFzc0VkZ2VXaWR0aCwgMS4wLCBub3JtYWxpemVkRGlzdCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEuMCAtIHNtb290aHN0ZXAoMS4wLCAxLjAxLCBub3JtYWxpemVkRGlzdCkpOwogICAgICAgICAgICAgICAgbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCB2ZWMzKDEuMCksIGVkZ2UgKiBnbGFzc0VkZ2VPcGFjaXR5KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCBuZXdJbWcucmdiICogMS4yLCAodUNvbG9yRW5oYW5jZW1lbnQgLSAxLjApICogMC41KTsKCiAgICAgICAgICAgIHZlYzQgY3VycmVudEltZyA9IHRleHR1cmUyRCh1VGV4dHVyZTEsIHV2MSk7CgogICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPiAwLjk1KSB7CiAgICAgICAgICAgICAgICB2ZWM0IHB1cmVOZXdJbWcgPSB0ZXh0dXJlMkQodVRleHR1cmUyLCB1djJfYmFzZSk7CiAgICAgICAgICAgICAgICBmbG9hdCBlbmRUcmFuc2l0aW9uID0gKHByb2dyZXNzIC0gMC45NSkgLyAwLjA1OwogICAgICAgICAgICAgICAgbmV3SW1nID0gbWl4KG5ld0ltZywgcHVyZU5ld0ltZywgZW5kVHJhbnNpdGlvbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBtaXgoY3VycmVudEltZywgbmV3SW1nLCBpbnNpZGUpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBtYWluKCkgewogICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBnbGFzc0VmZmVjdCh2VXYsIHVQcm9ncmVzcyk7CiAgICAgICAgICAgICNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PgogICAgICAgIH0KICAgIGA7CgoJdXNlVGFzaygoKSA9PiB7CgkJaWYgKG1hdGVyaWFsICYmICR0ZXh0dXJlcykgewoJCQljb25zdCB0ZXgxID0gJHRleHR1cmVzW2N1cnJlbnRJbmRleF07CgkJCWNvbnN0IHRleDIgPSAkdGV4dHVyZXNbbmV4dEluZGV4XTsKCgkJCWlmICh0ZXgxICYmIHRleDIpIHsKCQkJCW1hdGVyaWFsLnVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCgkc2l6ZS53aWR0aCwgJHNpemUuaGVpZ2h0KTsKCQkJCW1hdGVyaWFsLnVuaWZvcm1zLnVQcm9ncmVzcy52YWx1ZSA9IHByb2dyZXNzLnZhbHVlOwoJCQkJbWF0ZXJpYWwudW5pZm9ybXMudVRleHR1cmUxLnZhbHVlID0gdGV4MTsKCQkJCW1hdGVyaWFsLnVuaWZvcm1zLnVUZXh0dXJlMi52YWx1ZSA9IHRleDI7CgoJCQkJaWYgKHRleDEuaW1hZ2UpIHsKCQkJCQltYXRlcmlhbC51bmlmb3Jtcy51VGV4dHVyZTFTaXplLnZhbHVlLnNldCgKCQkJCQkJdGV4MS5pbWFnZS53aWR0aCwKCQkJCQkJdGV4MS5pbWFnZS5oZWlnaHQsCgkJCQkJKTsKCQkJCX0KCQkJCWlmICh0ZXgyLmltYWdlKSB7CgkJCQkJbWF0ZXJpYWwudW5pZm9ybXMudVRleHR1cmUyU2l6ZS52YWx1ZS5zZXQoCgkJCQkJCXRleDIuaW1hZ2Uud2lkdGgsCgkJCQkJCXRleDIuaW1hZ2UuaGVpZ2h0LAoJCQkJCSk7CgkJCQl9CgkJCX0KCQl9Cgl9KTsKPC9zY3JpcHQ+Cgp7I2lmICR0ZXh0dXJlc30KCTxULk1lc2g+CgkJPFQuUGxhbmVHZW9tZXRyeSBhcmdzPXtbMiwgMl19IC8+CgkJPFQuU2hhZGVyTWF0ZXJpYWwKCQkJYmluZDpyZWY9e21hdGVyaWFsfQoJCQl7dmVydGV4U2hhZGVyfQoJCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJCXVuaWZvcm1zPXt7CgkJCQl1VGV4dHVyZTE6IHsgdmFsdWU6IG51bGwgfSwKCQkJCXVUZXh0dXJlMjogeyB2YWx1ZTogbnVsbCB9LAoJCQkJdVByb2dyZXNzOiB7IHZhbHVlOiAwIH0sCgkJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlY3RvcjIoMSwgMSkgfSwKCQkJCXVUZXh0dXJlMVNpemU6IHsgdmFsdWU6IG5ldyBWZWN0b3IyKDEsIDEpIH0sCgkJCQl1VGV4dHVyZTJTaXplOiB7IHZhbHVlOiBuZXcgVmVjdG9yMigxLCAxKSB9LAoJCQkJdUdsb2JhbEludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJCQl1RGlzdG9ydGlvblN0cmVuZ3RoOiB7IHZhbHVlOiBkaXN0b3J0aW9uIH0sCgkJCQl1U3BlZWRNdWx0aXBsaWVyOiB7IHZhbHVlOiAxLjAgfSwKCQkJCXVDb2xvckVuaGFuY2VtZW50OiB7IHZhbHVlOiAxLjAgfSwKCQkJCXVHbGFzc1JlZnJhY3Rpb25TdHJlbmd0aDogeyB2YWx1ZTogcmVmcmFjdGlvbiB9LAoJCQkJdUdsYXNzQ2hyb21hdGljQWJlcnJhdGlvbjogeyB2YWx1ZTogY2hyb21hdGljQWJlcnJhdGlvbiB9LAoJCQkJdUdsYXNzQnViYmxlQ2xhcml0eTogeyB2YWx1ZTogMS4wIH0sCgkJCQl1R2xhc3NFZGdlR2xvdzogeyB2YWx1ZTogMS4wIH0sCgkJCQl1R2xhc3NMaXF1aWRGbG93OiB7IHZhbHVlOiAxLjAgfSwKCQkJfX0KCQkvPgoJPC9ULk1lc2g+CnsvaWZ9Cg==", - "components/glitter-cloth/GlitterCloth.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsaXR0ZXJDbG90aFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBQcmltYXJ5IGNvbG9yIHVzZWQgdG8gZGVyaXZlIHRoZSBmdWxsIHNoYWRlciBwYWxldHRlLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgZnVsbCBzaGFkZXIgYW5pbWF0aW9uIHRpbWVsaW5lLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBHbG9iYWwgaW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBiYXNlIHNpbGsgY29sb3IuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJYnJpZ2h0bmVzcz86IFNjZW5lUHJvcHNbImJyaWdodG5lc3MiXTsKCQkvKioKCQkgKiBPcGFjaXR5IG9mIHRoZSB2aXZpZC1saWdodCBnbGl0dGVyIGJsZW5kLgoJCSAqIEBkZWZhdWx0IDAuMDIKCQkgKi8KCQlibGVuZFN0cmVuZ3RoPzogU2NlbmVQcm9wc1siYmxlbmRTdHJlbmd0aCJdOwoJCS8qKgoJCSAqIFNwYXRpYWwgc2NhbGUgZm9yIHNpbXBsZXggbm9pc2Ugc2FtcGxpbmcuCgkJICogTG93ZXIgdmFsdWVzIGNyZWF0ZSBmaW5lciBnbGl0dGVyLgoJCSAqIEBkZWZhdWx0IDQuMAoJCSAqLwoJCW5vaXNlU2NhbGU/OiBTY2VuZVByb3BzWyJub2lzZVNjYWxlIl07CgkJLyoqCgkJICogQmFzZSBzdHJlbmd0aCBvZiB2aWduZXR0ZSBmYWxsb2ZmLgoJCSAqIEBkZWZhdWx0IDE1LjAKCQkgKi8KCQl2aWduZXR0ZVN0cmVuZ3RoPzogU2NlbmVQcm9wc1sidmlnbmV0dGVTdHJlbmd0aCJdOwoJCS8qKgoJCSAqIFZpZ25ldHRlIGN1cnZlIGV4cG9uZW50LgoJCSAqIExvd2VyIHZhbHVlcyBwcm9kdWNlIGEgc29mdGVyIHJvbGxvZmYuCgkJICogQGRlZmF1bHQgMC4yNQoJCSAqLwoJCXZpZ25ldHRlUG93ZXI/OiBTY2VuZVByb3BzWyJ2aWduZXR0ZVBvd2VyIl07CgkJLyoqCgkJICogT3BhY2l0eSBvZiB0aGUgdmlnbmV0dGUgZWZmZWN0LgoJCSAqIGAwYCBkaXNhYmxlcyB2aWduZXR0ZSBpbmZsdWVuY2UsIGAxYCBhcHBsaWVzIGZ1bGwgdmlnbmV0dGUuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJdmlnbmV0dGVPcGFjaXR5PzogU2NlbmVQcm9wc1sidmlnbmV0dGVPcGFjaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlicmlnaHRuZXNzID0gMS4wLAoJCWJsZW5kU3RyZW5ndGggPSAwLjAyLAoJCW5vaXNlU2NhbGUgPSA0LjAsCgkJdmlnbmV0dGVTdHJlbmd0aCA9IDE1LjAsCgkJdmlnbmV0dGVQb3dlciA9IDAuMjUsCgkJdmlnbmV0dGVPcGFjaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUKCQkJCXtjb2xvcn0KCQkJCXtzcGVlZH0KCQkJCXticmlnaHRuZXNzfQoJCQkJe2JsZW5kU3RyZW5ndGh9CgkJCQl7bm9pc2VTY2FsZX0KCQkJCXt2aWduZXR0ZVN0cmVuZ3RofQoJCQkJe3ZpZ25ldHRlUG93ZXJ9CgkJCQl7dmlnbmV0dGVPcGFjaXR5fQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/glitter-cloth/GlitterClothScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBQcmltYXJ5IGNvbG9yIHVzZWQgdG8gZGVyaXZlIHRoZSBmdWxsIHNoYWRlciBwYWxldHRlLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgZnVsbCBzaGFkZXIgYW5pbWF0aW9uIHRpbWVsaW5lLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIEdsb2JhbCBpbnRlbnNpdHkgbXVsdGlwbGllciBmb3IgdGhlIGJhc2Ugc2lsayBjb2xvci4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlicmlnaHRuZXNzPzogbnVtYmVyOwoJCS8qKgoJCSAqIE9wYWNpdHkgb2YgdGhlIHZpdmlkLWxpZ2h0IGdsaXR0ZXIgYmxlbmQuCgkJICogQGRlZmF1bHQgMC4wMgoJCSAqLwoJCWJsZW5kU3RyZW5ndGg/OiBudW1iZXI7CgkJLyoqCgkJICogU3BhdGlhbCBzY2FsZSBmb3Igc2ltcGxleCBub2lzZSBzYW1wbGluZy4KCQkgKiBMb3dlciB2YWx1ZXMgY3JlYXRlIGZpbmVyIGdsaXR0ZXIuCgkJICogQGRlZmF1bHQgNC4wCgkJICovCgkJbm9pc2VTY2FsZT86IG51bWJlcjsKCQkvKioKCQkgKiBCYXNlIHN0cmVuZ3RoIG9mIHZpZ25ldHRlIGZhbGxvZmYuCgkJICogQGRlZmF1bHQgMTUuMAoJCSAqLwoJCXZpZ25ldHRlU3RyZW5ndGg/OiBudW1iZXI7CgkJLyoqCgkJICogVmlnbmV0dGUgY3VydmUgZXhwb25lbnQuCgkJICogTG93ZXIgdmFsdWVzIHByb2R1Y2UgYSBzb2Z0ZXIgcm9sbG9mZi4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJdmlnbmV0dGVQb3dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBPcGFjaXR5IG9mIHRoZSB2aWduZXR0ZSBlZmZlY3QuCgkJICogYDBgIGRpc2FibGVzIHZpZ25ldHRlIGluZmx1ZW5jZSwgYDFgIGFwcGxpZXMgZnVsbCB2aWduZXR0ZS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQl2aWduZXR0ZU9wYWNpdHk/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQljb2xvciA9ICIjRkY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlicmlnaHRuZXNzID0gMS4wLAoJCWJsZW5kU3RyZW5ndGggPSAwLjAyLAoJCW5vaXNlU2NhbGUgPSA0LjAsCgkJdmlnbmV0dGVTdHJlbmd0aCA9IDE1LjAsCgkJdmlnbmV0dGVQb3dlciA9IDAuMjUsCgkJdmlnbmV0dGVPcGFjaXR5ID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgbWF0ZXJpYWwgPSAkc3RhdGU8VEhSRUUuU2hhZGVyTWF0ZXJpYWw+KCk7Cgljb25zdCB7IHNpemUgfSA9IHVzZVRocmVsdGUoKTsKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFRIUkVFLlZlY3RvcjIoMSwgMSk7Cgljb25zdCBwcmltYXJ5Q29sb3JVbmlmb3JtID0gbmV3IFRIUkVFLkNvbG9yKCk7Cgljb25zdCBhY2NlbnRDb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuQ29sb3IoKTsKCWNvbnN0IHNoYWRvd0NvbG9yVW5pZm9ybSA9IG5ldyBUSFJFRS5Db2xvcigpOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdW5pZm9ybSBmbG9hdCB1VGltZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMzIHVQcmltYXJ5Q29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVBY2NlbnRDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdVNoYWRvd0NvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdVNwZWVkOwoJCXVuaWZvcm0gZmxvYXQgdUJyaWdodG5lc3M7CgkJdW5pZm9ybSBmbG9hdCB1QmxlbmRTdHJlbmd0aDsKCQl1bmlmb3JtIGZsb2F0IHVOb2lzZVNjYWxlOwoJCXVuaWZvcm0gZmxvYXQgdVZpZ25ldHRlU3RyZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1VmlnbmV0dGVQb3dlcjsKCQl1bmlmb3JtIGZsb2F0IHVWaWduZXR0ZU9wYWNpdHk7CgoJCWNvbnN0IGZsb2F0IG5vaXNlU2l6ZUNvZWZmID0gMC42MTsKCQljb25zdCBmbG9hdCBub2lzZURlbnNpdHkgPSA1My4wOwoKCQl2ZWMzIG1vZDI4OSh2ZWMzIHgpIHsKCQkJcmV0dXJuIHggLSBmbG9vcih4ICogKDEuMCAvIDI4OS4wKSkgKiAyODkuMDsKCQl9CgoJCXZlYzQgbW9kMjg5KHZlYzQgeCkgewoJCQlyZXR1cm4geCAtIGZsb29yKHggKiAoMS4wIC8gMjg5LjApKSAqIDI4OS4wOwoJCX0KCgkJdmVjNCBwZXJtdXRlKHZlYzQgeCkgewoJCQlyZXR1cm4gbW9kMjg5KCgoeCAqIDM0LjApICsgMS4wKSAqIHgpOwoJCX0KCgkJdmVjNCB0YXlsb3JJbnZTcXJ0KHZlYzQgcikgewoJCQlyZXR1cm4gMS43OTI4NDI5MTQwMDE1OSAtIDAuODUzNzM0NzIwOTUzMTQgKiByOwoJCX0KCgkJZmxvYXQgc25vaXNlKHZlYzMgdikgewoJCQljb25zdCB2ZWMyIEMgPSB2ZWMyKDEuMCAvIDYuMCwgMS4wIC8gMy4wKTsKCQkJY29uc3QgdmVjNCBEID0gdmVjNCgwLjAsIDAuNSwgMS4wLCAyLjApOwoKCQkJdmVjMyBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5eSkpOwoJCQl2ZWMzIHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eHgpOwoKCQkJdmVjMyBnID0gc3RlcCh4MC55engsIHgwLnh5eik7CgkJCXZlYzMgbCA9IDEuMCAtIGc7CgkJCXZlYzMgaTEgPSBtaW4oZy54eXosIGwuenh5KTsKCQkJdmVjMyBpMiA9IG1heChnLnh5eiwgbC56eHkpOwoKCQkJdmVjMyB4MSA9IHgwIC0gaTEgKyBDLnh4eDsKCQkJdmVjMyB4MiA9IHgwIC0gaTIgKyBDLnl5eTsKCQkJdmVjMyB4MyA9IHgwIC0gRC55eXk7CgoJCQlpID0gbW9kMjg5KGkpOwoJCQl2ZWM0IHAgPSBwZXJtdXRlKHBlcm11dGUocGVybXV0ZShpLnogKyB2ZWM0KDAuMCwgaTEueiwgaTIueiwgMS4wKSkgKwoJCQkJaS55ICsgdmVjNCgwLjAsIGkxLnksIGkyLnksIDEuMCkpICsKCQkJCWkueCArIHZlYzQoMC4wLCBpMS54LCBpMi54LCAxLjApKTsKCgkJCWZsb2F0IG5fID0gMC4xNDI4NTcxNDI4NTc7CgkJCXZlYzMgbnMgPSBuXyAqIEQud3l6IC0gRC54eng7CgoJCQl2ZWM0IGogPSBwIC0gNDkuMCAqIGZsb29yKHAgKiBucy56ICogbnMueik7CgoJCQl2ZWM0IHhfID0gZmxvb3IoaiAqIG5zLnopOwoJCQl2ZWM0IHlfID0gZmxvb3IoaiAtIDcuMCAqIHhfKTsKCgkJCXZlYzQgeCA9IHhfICogbnMueCArIG5zLnl5eXk7CgkJCXZlYzQgeSA9IHlfICogbnMueCArIG5zLnl5eXk7CgkJCXZlYzQgaCA9IDEuMCAtIGFicyh4KSAtIGFicyh5KTsKCgkJCXZlYzQgYjAgPSB2ZWM0KHgueHksIHkueHkpOwoJCQl2ZWM0IGIxID0gdmVjNCh4Lnp3LCB5Lnp3KTsKCgkJCXZlYzQgczAgPSBmbG9vcihiMCkgKiAyLjAgKyAxLjA7CgkJCXZlYzQgczEgPSBmbG9vcihiMSkgKiAyLjAgKyAxLjA7CgkJCXZlYzQgc2ggPSAtc3RlcChoLCB2ZWM0KDAuMCkpOwoKCQkJdmVjNCBhMCA9IGIwLnh6eXcgKyBzMC54enl3ICogc2gueHh5eTsKCQkJdmVjNCBhMSA9IGIxLnh6eXcgKyBzMS54enl3ICogc2guenp3dzsKCgkJCXZlYzMgcDAgPSB2ZWMzKGEwLnh5LCBoLngpOwoJCQl2ZWMzIHAxID0gdmVjMyhhMC56dywgaC55KTsKCQkJdmVjMyBwMiA9IHZlYzMoYTEueHksIGgueik7CgkJCXZlYzMgcDMgPSB2ZWMzKGExLnp3LCBoLncpOwoKCQkJdmVjNCBub3JtID0gdGF5bG9ySW52U3FydCh2ZWM0KGRvdChwMCwgcDApLCBkb3QocDEsIHAxKSwgZG90KHAyLCBwMiksIGRvdChwMywgcDMpKSk7CgkJCXAwICo9IG5vcm0ueDsKCQkJcDEgKj0gbm9ybS55OwoJCQlwMiAqPSBub3JtLno7CgkJCXAzICo9IG5vcm0udzsKCgkJCXZlYzQgbSA9IG1heChub2lzZVNpemVDb2VmZiAtIHZlYzQoZG90KHgwLCB4MCksIGRvdCh4MSwgeDEpLCBkb3QoeDIsIHgyKSwgZG90KHgzLCB4MykpLCAwLjApOwoJCQltID0gbSAqIG07CgkJCXJldHVybiBub2lzZURlbnNpdHkgKiBkb3QobSAqIG0sIHZlYzQoZG90KHAwLCB4MCksIGRvdChwMSwgeDEpLCBkb3QocDIsIHgyKSwgZG90KHAzLCB4MykpKTsKCQl9CgoJCWZsb2F0IHNvZnRMaWdodChmbG9hdCBzLCBmbG9hdCBkKSB7CgkJCXJldHVybiAocyA8IDAuNSkKCQkJCT8gZCAtICgxLjAgLSAyLjAgKiBzKSAqIGQgKiAoMS4wIC0gZCkKCQkJCTogKGQgPCAwLjI1KQoJCQkJCT8gZCArICgyLjAgKiBzIC0gMS4wKSAqIGQgKiAoKDE2LjAgKiBkIC0gMTIuMCkgKiBkICsgMy4wKQoJCQkJCTogZCArICgyLjAgKiBzIC0gMS4wKSAqIChzcXJ0KGQpIC0gZCk7CgkJfQoKCQl2ZWMzIHNvZnRMaWdodCh2ZWMzIHMsIHZlYzMgZCkgewoJCQl2ZWMzIGM7CgkJCWMueCA9IHNvZnRMaWdodChzLngsIGQueCk7CgkJCWMueSA9IHNvZnRMaWdodChzLnksIGQueSk7CgkJCWMueiA9IHNvZnRMaWdodChzLnosIGQueik7CgkJCXJldHVybiBjOwoJCX0KCgkJZmxvYXQgaGFyZExpZ2h0KGZsb2F0IHMsIGZsb2F0IGQpIHsKCQkJcmV0dXJuIChzIDwgMC41KSA/IDIuMCAqIHMgKiBkIDogMS4wIC0gMi4wICogKDEuMCAtIHMpICogKDEuMCAtIGQpOwoJCX0KCgkJdmVjMyBoYXJkTGlnaHQodmVjMyBzLCB2ZWMzIGQpIHsKCQkJdmVjMyBjOwoJCQljLnggPSBoYXJkTGlnaHQocy54LCBkLngpOwoJCQljLnkgPSBoYXJkTGlnaHQocy55LCBkLnkpOwoJCQljLnogPSBoYXJkTGlnaHQocy56LCBkLnopOwoJCQlyZXR1cm4gYzsKCQl9CgoJCWZsb2F0IHZpdmlkTGlnaHQoZmxvYXQgcywgZmxvYXQgZCkgewoJCQlyZXR1cm4gKHMgPCAwLjUpID8gMS4wIC0gKDEuMCAtIGQpIC8gKDIuMCAqIHMpIDogZCAvICgyLjAgKiAoMS4wIC0gcykpOwoJCX0KCgkJdmVjMyB2aXZpZExpZ2h0KHZlYzMgcywgdmVjMyBkKSB7CgkJCXZlYzMgYzsKCQkJYy54ID0gdml2aWRMaWdodChzLngsIGQueCk7CgkJCWMueSA9IHZpdmlkTGlnaHQocy55LCBkLnkpOwoJCQljLnogPSB2aXZpZExpZ2h0KHMueiwgZC56KTsKCQkJcmV0dXJuIGM7CgkJfQoKCQl2ZWMzIGxpbmVhckxpZ2h0KHZlYzMgcywgdmVjMyBkKSB7CgkJCXJldHVybiAyLjAgKiBzICsgZCAtIDEuMDsKCQl9CgoJCWZsb2F0IHBpbkxpZ2h0KGZsb2F0IHMsIGZsb2F0IGQpIHsKCQkJcmV0dXJuICgyLjAgKiBzIC0gMS4wID4gZCkgPyAyLjAgKiBzIC0gMS4wIDogKHMgPCAwLjUgKiBkKSA/IDIuMCAqIHMgOiBkOwoJCX0KCgkJdmVjMyBwaW5MaWdodCh2ZWMzIHMsIHZlYzMgZCkgewoJCQl2ZWMzIGM7CgkJCWMueCA9IHBpbkxpZ2h0KHMueCwgZC54KTsKCQkJYy55ID0gcGluTGlnaHQocy55LCBkLnkpOwoJCQljLnogPSBwaW5MaWdodChzLnosIGQueik7CgkJCXJldHVybiBjOwoJCX0KCgkJZmxvYXQgdmlnbmV0dGUodmVjMiB1diwgZmxvYXQgc3RyZW5ndGgsIGZsb2F0IHBvd2VyKSB7CgkJCXV2ICo9IDEuMCAtIHV2Lnl4OwoJCQlmbG9hdCB2aWcgPSB1di54ICogdXYueSAqIHN0cmVuZ3RoOwoJCQl2aWcgPSBwb3codmlnLCBwb3dlcik7CgkJCXJldHVybiB2aWc7CgkJfQoKCQl2b2lkIG1haW5JbWFnZShvdXQgdmVjNCBjb2wsIHZlYzIgZnJhZ0Nvb3JkKSB7CgkJCWZsb2F0IHRpbWUgPSB1VGltZSAqIHVTcGVlZDsKCQkJdmVjMiB1UmVzb2x1dGlvbiA9IHVSZXNvbHV0aW9uOwoKCQkJdmVjMiB1diA9IGZyYWdDb29yZCAvIHVSZXNvbHV0aW9uLnk7CgkJCWZsb2F0IHQgPSAwLjUgKiB0aW1lOwoJCQl1di55ICs9IDAuMDMgKiBzaW4oOC4wICogdXYueCAtIHQpOwoKCQkJZmxvYXQgZiA9IDAuNiArIDAuNCAqIHNpbig1LjAgKiAodXYueCArIHV2LnkgKyBjb3MoMy4wICogdXYueCArIDUuMCAqIHV2LnkpICsgMC4wMiAqIHQpICsKCQkJCXNpbigyMC4wICogKHV2LnggKyB1di55IC0gMC4xICogdCkpKTsKCgkJCWZsb2F0IGIgPSB1QnJpZ2h0bmVzczsKCQkJY29sID0gdmVjNCh1UHJpbWFyeUNvbG9yICogYiwgMS4wKSAqIHZlYzQoZik7CgoJCQl1diA9IGZyYWdDb29yZC54eSAvIHVSZXNvbHV0aW9uLnh5OwoJCQlmbG9hdCB2aWcgPSB2aWduZXR0ZSh1diwgdVZpZ25ldHRlU3RyZW5ndGgsIHVWaWduZXR0ZVBvd2VyKTsKCQkJZmxvYXQgdmlnbmV0dGVNYXNrID0gbWl4KDEuMCwgdmlnLCB1VmlnbmV0dGVPcGFjaXR5KTsKCgkJCWZsb2F0IGZhZGVMUiA9IDAuNyAtIGFicyh1di54IC0gMC40KTsKCQkJZmxvYXQgZmFkZVRCID0gMS4xIC0gdXYueTsKCQkJdmVjMyBwb3MgPSB2ZWMzKHV2ICogdmVjMigzLjAsIDEuMCkgLSB2ZWMyKDAuMCwgdGltZSAqIDAuMDAwMDUpLCB0aW1lICogMC4wMDYpOwoKCQkJZmxvYXQgbiA9IGZhZGVMUiAqIGZhZGVUQiAqIHNtb290aHN0ZXAoMC41MCwgMS4wLCBzbm9pc2UocG9zICogdVJlc29sdXRpb24ueSAvIHVOb2lzZVNjYWxlKSkgKiA4LjA7CgkJCXZlYzMgbm9pc2VHcmV5U2hpZnRlZCA9IG1pbigodmVjMyhuKSArIDEuMCkgLyAzLjAgKyAwLjMsIHZlYzMoMS4wKSkgKiAwLjkxOwoKCQkJdmVjMyBtaXhlZCA9IGNvbC54eXo7CgkJCW1peGVkID0gbWl4KGNvbC54eXosIHZpdmlkTGlnaHQobm9pc2VHcmV5U2hpZnRlZCwgY29sLnh5eiksIHVCbGVuZFN0cmVuZ3RoKTsKCQkJY29sID0gdmVjNChtaXhlZCwgMS4wKSAqIHZpZ25ldHRlTWFzazsKCgkJCWZsb2F0IGsgPSAoc2luKHRpbWUgLyAxLjApICsgMS4wKSAvIDQuMCArIDAuNzU7CgoKCQkJY29sLnJnYiAtPSB1QWNjZW50Q29sb3IgKiAoKDEuMCAtIHV2LnkpICogMC4xICogayk7CgkJCWNvbC5yZ2IgLT0gdmVjMyh1U2hhZG93Q29sb3IuciwgdVNoYWRvd0NvbG9yLmcgKiAwLjgsIHVTaGFkb3dDb2xvci5iKSAqICh1di55IC8gOC4wKTsKCQkJY29sLmEgPSAxLjA7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQl2ZWMyIGZyYWdDb29yZCA9IHZVdiAqIHVSZXNvbHV0aW9uLnh5OwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCBmcmFnQ29vcmQpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CgkJCSNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PgoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KCRzaXplLndpZHRoLCAkc2l6ZS5oZWlnaHQpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJcHJpbWFyeUNvbG9yVW5pZm9ybS5zZXQoY29sb3IpOwoJCWNvbnN0IGhzbCA9IHsgaDogMCwgczogMCwgbDogMCB9OwoJCXByaW1hcnlDb2xvclVuaWZvcm0uZ2V0SFNMKGhzbCk7CgoJCWFjY2VudENvbG9yVW5pZm9ybS5zZXRIU0woCgkJCShoc2wuaCArIDAuMDQpICUgMSwKCQkJVEhSRUUuTWF0aFV0aWxzLmNsYW1wKGhzbC5zICogMS4xLCAwLCAxKSwKCQkJVEhSRUUuTWF0aFV0aWxzLmNsYW1wKGhzbC5sICogMS4xICsgMC4wNCwgMCwgMSksCgkJKTsKCQlzaGFkb3dDb2xvclVuaWZvcm0uc2V0SFNMKAoJCQloc2wuaCwKCQkJVEhSRUUuTWF0aFV0aWxzLmNsYW1wKGhzbC5zICogMC41NSwgMCwgMSksCgkJCVRIUkVFLk1hdGhVdGlscy5jbGFtcChoc2wubCAqIDAuNDUsIDAsIDEpLAoJCSk7CgoJCWlmICghbWF0ZXJpYWwpIHJldHVybjsKCQltYXRlcmlhbC51bmlmb3Jtcy51UHJpbWFyeUNvbG9yLnZhbHVlLmNvcHkocHJpbWFyeUNvbG9yVW5pZm9ybSk7CgkJbWF0ZXJpYWwudW5pZm9ybXMudUFjY2VudENvbG9yLnZhbHVlLmNvcHkoYWNjZW50Q29sb3JVbmlmb3JtKTsKCQltYXRlcmlhbC51bmlmb3Jtcy51U2hhZG93Q29sb3IudmFsdWUuY29weShzaGFkb3dDb2xvclVuaWZvcm0pOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVTcGVlZC52YWx1ZSA9IHNwZWVkOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVCcmlnaHRuZXNzLnZhbHVlID0gYnJpZ2h0bmVzczsKCQltYXRlcmlhbC51bmlmb3Jtcy51QmxlbmRTdHJlbmd0aC52YWx1ZSA9IGJsZW5kU3RyZW5ndGg7CgkJbWF0ZXJpYWwudW5pZm9ybXMudU5vaXNlU2NhbGUudmFsdWUgPSBub2lzZVNjYWxlOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVWaWduZXR0ZVN0cmVuZ3RoLnZhbHVlID0gdmlnbmV0dGVTdHJlbmd0aDsKCQltYXRlcmlhbC51bmlmb3Jtcy51VmlnbmV0dGVQb3dlci52YWx1ZSA9IHZpZ25ldHRlUG93ZXI7CgkJbWF0ZXJpYWwudW5pZm9ybXMudVZpZ25ldHRlT3BhY2l0eS52YWx1ZSA9IHZpZ25ldHRlT3BhY2l0eTsKCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoJfSk7Cjwvc2NyaXB0PgoKPFQuTWVzaD4KCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJPFQuU2hhZGVyTWF0ZXJpYWwKCQliaW5kOnJlZj17bWF0ZXJpYWx9CgkJe3ZlcnRleFNoYWRlcn0KCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJZGVwdGhUZXN0PXtmYWxzZX0KCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQl1bmlmb3Jtcz17ewoJCQl1VGltZTogeyB2YWx1ZTogMC4wIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1UHJpbWFyeUNvbG9yOiB7IHZhbHVlOiBwcmltYXJ5Q29sb3JVbmlmb3JtIH0sCgkJCXVBY2NlbnRDb2xvcjogeyB2YWx1ZTogYWNjZW50Q29sb3JVbmlmb3JtIH0sCgkJCXVTaGFkb3dDb2xvcjogeyB2YWx1ZTogc2hhZG93Q29sb3JVbmlmb3JtIH0sCgkJCXVTcGVlZDogeyB2YWx1ZTogc3BlZWQgfSwKCQkJdUJyaWdodG5lc3M6IHsgdmFsdWU6IGJyaWdodG5lc3MgfSwKCQkJdUJsZW5kU3RyZW5ndGg6IHsgdmFsdWU6IGJsZW5kU3RyZW5ndGggfSwKCQkJdU5vaXNlU2NhbGU6IHsgdmFsdWU6IG5vaXNlU2NhbGUgfSwKCQkJdVZpZ25ldHRlU3RyZW5ndGg6IHsgdmFsdWU6IHZpZ25ldHRlU3RyZW5ndGggfSwKCQkJdVZpZ25ldHRlUG93ZXI6IHsgdmFsdWU6IHZpZ25ldHRlUG93ZXIgfSwKCQkJdVZpZ25ldHRlT3BhY2l0eTogeyB2YWx1ZTogdmlnbmV0dGVPcGFjaXR5IH0sCgkJfX0KCS8+CjwvVC5NZXNoPgo=", + "components/fluid-image-reveal/FluidImageReveal.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0ZsdWlkSW1hZ2VSZXZlYWxTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBTY2VuZVByb3BzWyJiYXNlSW1hZ2UiXTsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBpbWFnZSByZXZlYWxlZCBieSB0aGUgZmx1aWQgbWFzay4KCQkgKi8KCQlyZXZlYWxJbWFnZTogU2NlbmVQcm9wc1sicmV2ZWFsSW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIERpc3NpcGF0aW9uIGZhY3RvciBmb3IgdGhlIHJldmVhbCBtYXNrLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQlkaXNzaXBhdGlvbj86IFNjZW5lUHJvcHNbImRpc3NpcGF0aW9uIl07CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogU2NlbmVQcm9wc1sicG9pbnRlclNpemUiXTsKCQkvKioKCQkgKiBGbHVpZCB2ZWxvY2l0eSBkaXNzaXBhdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJdmVsb2NpdHlEaXNzaXBhdGlvbj86IFNjZW5lUHJvcHNbInZlbG9jaXR5RGlzc2lwYXRpb24iXTsKCQkvKioKCQkgKiBQcmVzc3VyZSBpdGVyYXRpb25zLiBNb3JlIGl0ZXJhdGlvbnMgPSBtb3JlIGFjY3VyYXRlIGJ1dCBzbG93ZXIuCgkJICogQGRlZmF1bHQgMTAKCQkgKi8KCQlwcmVzc3VyZUl0ZXJhdGlvbnM/OiBTY2VuZVByb3BzWyJwcmVzc3VyZUl0ZXJhdGlvbnMiXTsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IFNjZW5lUHJvcHNbImJsZW5kU29mdG5lc3MiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkaXNzaXBhdGlvbiA9IDAuOTYsCgkJcG9pbnRlclNpemUgPSAwLjAwNSwKCQl2ZWxvY2l0eURpc3NpcGF0aW9uID0gMC45NiwKCQlwcmVzc3VyZUl0ZXJhdGlvbnMgPSAxMCwKCQlibGVuZFNvZnRuZXNzID0gMC4yMiwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUKCQkJe2Jhc2VJbWFnZX0KCQkJe3JldmVhbEltYWdlfQoJCQl7ZGlzc2lwYXRpb259CgkJCXtwb2ludGVyU2l6ZX0KCQkJe3ZlbG9jaXR5RGlzc2lwYXRpb259CgkJCXtwcmVzc3VyZUl0ZXJhdGlvbnN9CgkJCXtibGVuZFNvZnRuZXNzfQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", + "components/fluid-image-reveal/FluidImageRevealScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlclRhcmdldCwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyaWFuZ2xlLAoJCVZlYzIsCgkJVmVjMywKCX0gZnJvbSAib2dsIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogU291cmNlIFVSTCBvZiB0aGUgaW1hZ2UgcmV2ZWFsZWQgYnkgdGhlIGZsdWlkIG1hc2suCgkJICovCgkJcmV2ZWFsSW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSByZXZlYWwgbWFzay4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZsdWlkIHZlbG9jaXR5IGRpc3NpcGF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQl2ZWxvY2l0eURpc3NpcGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIFByZXNzdXJlIGl0ZXJhdGlvbnMuIE1vcmUgaXRlcmF0aW9ucyA9IG1vcmUgYWNjdXJhdGUgYnV0IHNsb3dlci4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCXByZXNzdXJlSXRlcmF0aW9ucz86IG51bWJlcjsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IG51bWJlcjsKCX0KCgl0eXBlIFBvaW50ZXJTdGF0ZSA9IHsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCWR4OiBudW1iZXI7CgkJZHk6IG51bWJlcjsKCQltb3ZlZDogYm9vbGVhbjsKCQlpbml0aWFsaXplZDogYm9vbGVhbjsKCX07CgoJdHlwZSBDYW52YXNNZXRyaWNzID0gewoJCXdpZHRoOiBudW1iZXI7CgkJaGVpZ2h0OiBudW1iZXI7Cgl9OwoKCXR5cGUgRG91YmxlRkJPID0gewoJCXJlYWQ6IFJlbmRlclRhcmdldDsKCQl3cml0ZTogUmVuZGVyVGFyZ2V0OwoJCXN3YXA6ICgpID0+IHZvaWQ7Cgl9OwoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJCWJsZW5kU29mdG5lc3MgPSAwLjIyLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHNldEJhc2VTb3VyY2UgPSAkc3RhdGU8KHNvdXJjZTogc3RyaW5nKSA9PiB2b2lkPigpOwoJbGV0IHNldFJldmVhbFNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgcG9pbnRlclN0YXRlID0gJHN0YXRlPFBvaW50ZXJTdGF0ZT4oewoJCXg6IDAsCgkJeTogMCwKCQlkeDogMCwKCQlkeTogMCwKCQltb3ZlZDogZmFsc2UsCgkJaW5pdGlhbGl6ZWQ6IGZhbHNlLAoJfSk7Cgljb25zdCBjYW52YXNNZXRyaWNzID0gJHN0YXRlPENhbnZhc01ldHJpY3M+KHsKCQl3aWR0aDogMSwKCQloZWlnaHQ6IDEsCgl9KTsKCgljb25zdCBwb2ludGVyVXYgPSBuZXcgVmVjMigpOwoJY29uc3QgYmFzZVRleHR1cmVTaXplID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCByZXZlYWxUZXh0dXJlU2l6ZSA9IG5ldyBWZWMyKDEsIDEpOwoKCWNvbnN0IHBvaW50ZXJGb3JjZUNsYW1wID0gNDUwOwoJY29uc3QgcG9pbnRlckZvcmNlSW5pdGlhbExlcnAgPSAwLjI7Cgljb25zdCBwb2ludGVyRm9yY2VMZXJwID0gMC41NTsKCgljb25zdCBjbGFtcCA9ICh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+CgkJTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7Cgljb25zdCBsZXJwID0gKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpID0+IGEgKyAoYiAtIGEpICogdDsKCgljb25zdCB1cGRhdGVQb2ludGVyUG9zaXRpb24gPSAoCgkJcHg6IG51bWJlciwKCQlweTogbnVtYmVyLAoJCXdpZHRoOiBudW1iZXIsCgkJaGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQljb25zdCBwcmV2WCA9IHBvaW50ZXJTdGF0ZS54OwoJCWNvbnN0IHByZXZZID0gcG9pbnRlclN0YXRlLnk7CgkJY29uc3QgdGFyZ2V0RHggPSBjbGFtcCgKCQkJNSAqIChweCAtIHByZXZYKSwKCQkJLXBvaW50ZXJGb3JjZUNsYW1wLAoJCQlwb2ludGVyRm9yY2VDbGFtcCwKCQkpOwoJCWNvbnN0IHRhcmdldER5ID0gY2xhbXAoCgkJCTUgKiAocHkgLSBwcmV2WSksCgkJCS1wb2ludGVyRm9yY2VDbGFtcCwKCQkJcG9pbnRlckZvcmNlQ2xhbXAsCgkJKTsKCQljb25zdCBsZXJwRmFjdG9yID0gcG9pbnRlclN0YXRlLmluaXRpYWxpemVkCgkJCT8gcG9pbnRlckZvcmNlTGVycAoJCQk6IHBvaW50ZXJGb3JjZUluaXRpYWxMZXJwOwoKCQlwb2ludGVyU3RhdGUubW92ZWQgPSB0cnVlOwoJCXBvaW50ZXJTdGF0ZS5keCA9IGxlcnAocG9pbnRlclN0YXRlLmR4LCB0YXJnZXREeCwgbGVycEZhY3Rvcik7CgkJcG9pbnRlclN0YXRlLmR5ID0gbGVycChwb2ludGVyU3RhdGUuZHksIHRhcmdldER5LCBsZXJwRmFjdG9yKTsKCQlwb2ludGVyU3RhdGUueCA9IHB4OwoJCXBvaW50ZXJTdGF0ZS55ID0gcHk7CgkJcG9pbnRlclN0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTsKCgkJaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CgkJCXBvaW50ZXJVdi5zZXQocHggLyB3aWR0aCwgMSAtIHB5IC8gaGVpZ2h0KTsKCQl9Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZhcnlpbmcgdmVjMiB2TDsKCQl2YXJ5aW5nIHZlYzIgdlI7CgkJdmFyeWluZyB2ZWMyIHZUOwoJCXZhcnlpbmcgdmVjMiB2QjsKCQl1bmlmb3JtIHZlYzIgdVRleGVsOwoKCQl2b2lkIG1haW4gKCkgewoJCQl2VXYgPSB1djsKCQkJdkwgPSB2VXYgLSB2ZWMyKHVUZXhlbC54LCAwLik7CgkJCXZSID0gdlV2ICsgdmVjMih1VGV4ZWwueCwgMC4pOwoJCQl2VCA9IHZVdiArIHZlYzIoMC4sIHVUZXhlbC55KTsKCQkJdkIgPSB2VXYgLSB2ZWMyKDAuLCB1VGV4ZWwueSk7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgYWR2ZWN0aW9uU2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1SW5wdXQ7CgkJdW5pZm9ybSB2ZWMyIHVUZXhlbDsKCQl1bmlmb3JtIGZsb2F0IHVEdDsKCQl1bmlmb3JtIGZsb2F0IHVEaXNzaXBhdGlvbjsKCgkJdmVjNCBiaWxlcnAgKHNhbXBsZXIyRCBzYW0sIHZlYzIgdXYsIHZlYzIgdHNpemUpIHsKCQkJdmVjMiBzdCA9IHV2IC8gdHNpemUgLSAwLjU7CgkJCXZlYzIgaXV2ID0gZmxvb3Ioc3QpOwoJCQl2ZWMyIGZ1diA9IGZyYWN0KHN0KTsKCQkJdmVjNCBhID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMC41LCAwLjUpKSAqIHRzaXplKTsKCQkJdmVjNCBiID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMS41LCAwLjUpKSAqIHRzaXplKTsKCQkJdmVjNCBjID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMC41LCAxLjUpKSAqIHRzaXplKTsKCQkJdmVjNCBkID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMS41LCAxLjUpKSAqIHRzaXplKTsKCQkJcmV0dXJuIG1peChtaXgoYSwgYiwgZnV2LngpLCBtaXgoYywgZCwgZnV2LngpLCBmdXYueSk7CgkJfQoKCQl2b2lkIG1haW4gKCkgewoJCQl2ZWMyIGNvb3JkID0gdlV2IC0gdUR0ICogYmlsZXJwKHVWZWxvY2l0eSwgdlV2LCB1VGV4ZWwpLnh5ICogdVRleGVsOwoJCQlnbF9GcmFnQ29sb3IgPSB1RGlzc2lwYXRpb24gKiBiaWxlcnAodUlucHV0LCBjb29yZCwgdVRleGVsKTsKCQkJZ2xfRnJhZ0NvbG9yLmEgPSAxLjsKCQl9CglgOwoKCWNvbnN0IGRpdmVyZ2VuY2VTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2TDsKCQl2YXJ5aW5nIHZlYzIgdlI7CgkJdmFyeWluZyB2ZWMyIHZUOwoJCXZhcnlpbmcgdmVjMiB2QjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlQpLnk7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2QikueTsKCQkJZmxvYXQgZGl2ID0gLjYgKiAoUiAtIEwgKyBUIC0gQik7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZGl2LCAwLiwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IHByZXNzdXJlU2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZhcnlpbmcgdmVjMiB2TDsKCQl2YXJ5aW5nIHZlYzIgdlI7CgkJdmFyeWluZyB2ZWMyIHZUOwoJCXZhcnlpbmcgdmVjMiB2QjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1UHJlc3N1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdURpdmVyZ2VuY2U7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlQpLng7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2QikueDsKCQkJZmxvYXQgZGl2ZXJnZW5jZSA9IHRleHR1cmUyRCh1RGl2ZXJnZW5jZSwgdlV2KS54OwoJCQlmbG9hdCBwcmVzc3VyZSA9IChMICsgUiArIEIgKyBUIC0gZGl2ZXJnZW5jZSkgKiAwLjI1OwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHByZXNzdXJlLCAwLiwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IGdyYWRpZW50U3VidHJhY3RTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlQpLng7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2QikueDsKCQkJdmVjMiB2ZWxvY2l0eSA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZVdikueHk7CgkJCXZlbG9jaXR5Lnh5IC09IHZlYzIoUiAtIEwsIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWxvY2l0eSwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IHNwbGF0U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKCQl1bmlmb3JtIGZsb2F0IHVSYXRpbzsKCQl1bmlmb3JtIHZlYzMgdVBvaW50VmFsdWU7CgkJdW5pZm9ybSB2ZWMyIHVQb2ludDsKCQl1bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgcCA9IHZVdiAtIHVQb2ludC54eTsKCQkJcC54ICo9IHVSYXRpbzsKCQkJdmVjMyBzcGxhdCA9IHBvdygyLiwgLWRvdChwLCBwKSAvIHVQb2ludFNpemUpICogdVBvaW50VmFsdWU7CgkJCXZlYzMgYmFzZSA9IHRleHR1cmUyRCh1SW5wdXQsIHZVdikueHl6OwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2UgKyBzcGxhdCwgMS4pOwoJCX0KCWA7CgoJY29uc3Qgb3V0cHV0VmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3Qgb3V0cHV0U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVNYXNrVGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1QmFzZVRleHR1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVJldmVhbFRleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMiB1QmFzZVRleHR1cmVTaXplOwoJCXVuaWZvcm0gdmVjMiB1UmV2ZWFsVGV4dHVyZVNpemU7CgkJdW5pZm9ybSB2ZWMyIHVNYXNrVGV4ZWw7CgkJdW5pZm9ybSBmbG9hdCB1QmxlbmRTb2Z0bmVzczsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzYWZlVGV4dHVyZSA9IG1heCh0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyBzYWZlVGV4dHVyZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSBzYWZlVGV4dHVyZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCWZsb2F0IHNhbXBsZU1hc2sodmVjMiB1dikgewoJCQl2ZWMzIG1hc2tEYXRhID0gdGV4dHVyZTJEKHVNYXNrVGV4dHVyZSwgdXYpLnJnYjsKCQkJcmV0dXJuIGNsYW1wKG1heChtYXNrRGF0YS5yLCBtYXgobWFza0RhdGEuZywgbWFza0RhdGEuYikpLCAwLjAsIDEuMCk7CgkJfQoKCQlmbG9hdCBnZXRTbW9vdGhNYXNrKHZlYzIgdXYpIHsKCQkJdmVjMiB0ID0gdU1hc2tUZXhlbDsKCQkJZmxvYXQgbSA9IDAuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigtdC54LCAtdC55KSkgKiAxLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoMC4wLCAtdC55KSkgKiAyLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIodC54LCAtdC55KSkgKiAxLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoLXQueCwgMC4wKSkgKiAyLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1dikgKiA0LjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIodC54LCAwLjApKSAqIDIuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigtdC54LCB0LnkpKSAqIDEuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigwLjAsIHQueSkpICogMi4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKHQueCwgdC55KSkgKiAxLjA7CgkJCXJldHVybiBtIC8gMTYuMDsKCQl9CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgYmFzZVV2ID0gZ2V0Q292ZXJVVih2VXYsIHVCYXNlVGV4dHVyZVNpemUpOwoJCQl2ZWMyIHJldmVhbFV2ID0gZ2V0Q292ZXJVVih2VXYsIHVSZXZlYWxUZXh0dXJlU2l6ZSk7CgoJCQl2ZWMzIGJhc2VDb2xvciA9IHRleHR1cmUyRCh1QmFzZVRleHR1cmUsIGJhc2VVdikucmdiOwoJCQl2ZWMzIHJldmVhbENvbG9yID0gdGV4dHVyZTJEKHVSZXZlYWxUZXh0dXJlLCByZXZlYWxVdikucmdiOwoKCQkJZmxvYXQgcmF3TWFzayA9IGdldFNtb290aE1hc2sodlV2KTsKCQkJZmxvYXQgc29mdG5lc3MgPSBjbGFtcCh1QmxlbmRTb2Z0bmVzcywgMC4wMSwgMC40OSk7CgkJCWZsb2F0IG1hc2sgPSBzbW9vdGhzdGVwKDAuNSAtIHNvZnRuZXNzLCAwLjUgKyBzb2Z0bmVzcywgcmF3TWFzayk7CgoJCQl2ZWMzIGNvbG9yID0gbWl4KGJhc2VDb2xvciwgcmV2ZWFsQ29sb3IsIG1hc2spOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRCYXNlU291cmNlKSByZXR1cm47CgkJc2V0QmFzZVNvdXJjZShiYXNlSW1hZ2UpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRSZXZlYWxTb3VyY2UpIHJldHVybjsKCQlzZXRSZXZlYWxTb3VyY2UocmV2ZWFsSW1hZ2UpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgYmFzZVRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDI1NV0pLAoJCQl3aWR0aDogMSwKCQkJaGVpZ2h0OiAxLAoJCQlmb3JtYXQ6IGdsLlJHQkEsCgkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQltYWdGaWx0ZXI6IGdsLkxJTkVBUiwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IHRydWUsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQljb25zdCByZXZlYWxUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJbGV0IGJhc2VUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEJhc2VJbWFnZSA9IChzb3VyY2U6IHN0cmluZykgPT4gewoJCQliYXNlVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBiYXNlVG9rZW47CgkJCWNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7CgkJCWltYWdlLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCWltYWdlLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1hZ2Uub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBiYXNlVG9rZW4pIHJldHVybjsKCQkJCWJhc2VUZXh0dXJlLmltYWdlID0gaW1hZ2U7CgkJCQliYXNlVGV4dHVyZVNpemUuc2V0KAoJCQkJCWltYWdlLm5hdHVyYWxXaWR0aCB8fCBpbWFnZS53aWR0aCB8fCAxLAoJCQkJCWltYWdlLm5hdHVyYWxIZWlnaHQgfHwgaW1hZ2UuaGVpZ2h0IHx8IDEsCgkJCQkpOwoJCQl9OwoJCQlpbWFnZS5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IHJldmVhbFRva2VuID0gMDsKCQljb25zdCBsb2FkUmV2ZWFsSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJcmV2ZWFsVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSByZXZlYWxUb2tlbjsKCQkJY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKCQkJaW1hZ2UuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1hZ2UuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWFnZS5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IHJldmVhbFRva2VuKSByZXR1cm47CgkJCQlyZXZlYWxUZXh0dXJlLmltYWdlID0gaW1hZ2U7CgkJCQlyZXZlYWxUZXh0dXJlU2l6ZS5zZXQoCgkJCQkJaW1hZ2UubmF0dXJhbFdpZHRoIHx8IGltYWdlLndpZHRoIHx8IDEsCgkJCQkJaW1hZ2UubmF0dXJhbEhlaWdodCB8fCBpbWFnZS5oZWlnaHQgfHwgMSwKCQkJCSk7CgkJCX07CgkJCWltYWdlLnNyYyA9IHNvdXJjZTsKCQl9OwoKCQlzZXRCYXNlU291cmNlID0gbG9hZEJhc2VJbWFnZTsKCQlzZXRSZXZlYWxTb3VyY2UgPSBsb2FkUmV2ZWFsSW1hZ2U7CgoJCWNvbnN0IGhhbGZGbG9hdEV4dCA9IGdsLnJlbmRlcmVyLmV4dGVuc2lvbnNbIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiXSBhcwoJCQl8IHsgSEFMRl9GTE9BVF9PRVM6IG51bWJlciB9CgkJCXwgdW5kZWZpbmVkOwoJCWNvbnN0IHRleHR1cmVUeXBlID0gZ2wucmVuZGVyZXIuaXNXZWJnbDIKCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuSEFMRl9GTE9BVAoJCQk6IChoYWxmRmxvYXRFeHQ/LkhBTEZfRkxPQVRfT0VTID8/IGdsLkZMT0FUKTsKCQljb25zdCBpbnRlcm5hbEZvcm1hdCA9IGdsLnJlbmRlcmVyLmlzV2ViZ2wyCgkJCT8gdGV4dHVyZVR5cGUgPT09IGdsLkZMT0FUCgkJCQk/IChnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KS5SR0JBMzJGCgkJCQk6IChnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KS5SR0JBMTZGCgkJCTogZ2wuUkdCQTsKCgkJY29uc3QgY3JlYXRlRkJPID0gKHc6IG51bWJlciwgaDogbnVtYmVyKSA9PgoJCQluZXcgUmVuZGVyVGFyZ2V0KGdsLCB7CgkJCQl3aWR0aDogdywKCQkJCWhlaWdodDogaCwKCQkJCXR5cGU6IHRleHR1cmVUeXBlLAoJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJaW50ZXJuYWxGb3JtYXQsCgkJCQltaW5GaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCQltYWdGaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCQlkZXB0aDogZmFsc2UsCgkJCQlzdGVuY2lsOiBmYWxzZSwKCQkJfSk7CgoJCWNvbnN0IGNyZWF0ZURvdWJsZUZCTyA9ICh3OiBudW1iZXIsIGg6IG51bWJlcik6IERvdWJsZUZCTyA9PiB7CgkJCWNvbnN0IGRvdWJsZUZCTzogRG91YmxlRkJPID0gewoJCQkJcmVhZDogY3JlYXRlRkJPKHcsIGgpLAoJCQkJd3JpdGU6IGNyZWF0ZUZCTyh3LCBoKSwKCQkJCXN3YXA6ICgpID0+IHsKCQkJCQljb25zdCB0ZW1wID0gZG91YmxlRkJPLnJlYWQ7CgkJCQkJZG91YmxlRkJPLnJlYWQgPSBkb3VibGVGQk8ud3JpdGU7CgkJCQkJZG91YmxlRkJPLndyaXRlID0gdGVtcDsKCQkJCX0sCgkJCX07CgkJCXJldHVybiBkb3VibGVGQk87CgkJfTsKCgkJY29uc3QgZGVuc2l0eSA9IGNyZWF0ZURvdWJsZUZCTygxMjgsIDEyOCk7CgkJY29uc3QgdmVsb2NpdHkgPSBjcmVhdGVEb3VibGVGQk8oMTI4LCAxMjgpOwoJCWNvbnN0IHByZXNzdXJlID0gY3JlYXRlRG91YmxlRkJPKDEyOCwgMTI4KTsKCQljb25zdCBkaXZlcmdlbmNlID0gY3JlYXRlRkJPKDEyOCwgMTI4KTsKCgkJY29uc3QgdGV4ZWwgPSBuZXcgVmVjMigxIC8gMTI4LCAxIC8gMTI4KTsKCQljb25zdCBhZHZlY3Rpb25Vbmlmb3JtcyA9IHsKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdUlucHV0OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCQl1RHQ6IHsgdmFsdWU6IDEgLyA2MCB9LAoJCQl1RGlzc2lwYXRpb246IHsgdmFsdWU6IHZlbG9jaXR5RGlzc2lwYXRpb24gfSwKCQl9OwoJCWNvbnN0IGRpdmVyZ2VuY2VVbmlmb3JtcyA9IHsKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCX07CgkJY29uc3QgcHJlc3N1cmVVbmlmb3JtcyA9IHsKCQkJdVByZXNzdXJlOiB7IHZhbHVlOiBwcmVzc3VyZS5yZWFkLnRleHR1cmUgfSwKCQkJdURpdmVyZ2VuY2U6IHsgdmFsdWU6IGRpdmVyZ2VuY2UudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJfTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0VW5pZm9ybXMgPSB7CgkJCXVQcmVzc3VyZTogeyB2YWx1ZTogcHJlc3N1cmUucmVhZC50ZXh0dXJlIH0sCgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQl9OwoJCWNvbnN0IHNwbGF0VW5pZm9ybXMgPSB7CgkJCXVJbnB1dDogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVSYXRpbzogeyB2YWx1ZTogMSB9LAoJCQl1UG9pbnRWYWx1ZTogeyB2YWx1ZTogbmV3IFZlYzMoKSB9LAoJCQl1UG9pbnQ6IHsgdmFsdWU6IHBvaW50ZXJVdiB9LAoJCQl1UG9pbnRTaXplOiB7IHZhbHVlOiBwb2ludGVyU2l6ZSB9LAoJCX07CgkJY29uc3Qgb3V0cHV0VW5pZm9ybXMgPSB7CgkJCXVNYXNrVGV4dHVyZTogeyB2YWx1ZTogZGVuc2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdUJhc2VUZXh0dXJlOiB7IHZhbHVlOiBiYXNlVGV4dHVyZSB9LAoJCQl1UmV2ZWFsVGV4dHVyZTogeyB2YWx1ZTogcmV2ZWFsVGV4dHVyZSB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUJhc2VUZXh0dXJlU2l6ZTogeyB2YWx1ZTogYmFzZVRleHR1cmVTaXplIH0sCgkJCXVSZXZlYWxUZXh0dXJlU2l6ZTogeyB2YWx1ZTogcmV2ZWFsVGV4dHVyZVNpemUgfSwKCQkJdU1hc2tUZXhlbDogeyB2YWx1ZTogbmV3IFZlYzIoMSAvIDEyOCwgMSAvIDEyOCkgfSwKCQkJdUJsZW5kU29mdG5lc3M6IHsgdmFsdWU6IGJsZW5kU29mdG5lc3MgfSwKCQl9OwoKCQljb25zdCBhZHZlY3Rpb25Qcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBhZHZlY3Rpb25TaGFkZXIsCgkJCXVuaWZvcm1zOiBhZHZlY3Rpb25Vbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3QgZGl2ZXJnZW5jZVByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGRpdmVyZ2VuY2VTaGFkZXIsCgkJCXVuaWZvcm1zOiBkaXZlcmdlbmNlVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IHByZXNzdXJlUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogcHJlc3N1cmVTaGFkZXIsCgkJCXVuaWZvcm1zOiBwcmVzc3VyZVVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciwKCQkJdW5pZm9ybXM6IGdyYWRpZW50U3VidHJhY3RVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3Qgc3BsYXRQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBzcGxhdFNoYWRlciwKCQkJdW5pZm9ybXM6IHNwbGF0VW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IG91dHB1dFByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IG91dHB1dFZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IG91dHB1dFNoYWRlciwKCQkJdW5pZm9ybXM6IG91dHB1dFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgdHJpYW5nbGUgPSBuZXcgVHJpYW5nbGUoZ2wpOwoJCWNvbnN0IHNpbU1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQlnZW9tZXRyeTogdHJpYW5nbGUsCgkJCXByb2dyYW06IGFkdmVjdGlvblByb2dyYW0sCgkJfSk7CgkJY29uc3Qgb3V0cHV0TWVzaCA9IG5ldyBNZXNoKGdsLCB7CgkJCWdlb21ldHJ5OiB0cmlhbmdsZSwKCQkJcHJvZ3JhbTogb3V0cHV0UHJvZ3JhbSwKCQl9KTsKCgkJY29uc3QgcmVuZGVyUGFzcyA9IChwcm9ncmFtOiBQcm9ncmFtLCB0YXJnZXQ6IFJlbmRlclRhcmdldCkgPT4gewoJCQlzaW1NZXNoLnByb2dyYW0gPSBwcm9ncmFtOwoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZTogc2ltTWVzaCwgdGFyZ2V0LCBjbGVhcjogdHJ1ZSB9KTsKCQl9OwoKCQljb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChlOiBQb2ludGVyRXZlbnQpID0+IHsKCQkJY29uc3QgcmVjdCA9IHRhcmdldENhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDsKCQkJY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wOwoJCQl1cGRhdGVQb2ludGVyUG9zaXRpb24oeCwgeSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX07CgoJCWNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IChlOiBUb3VjaEV2ZW50KSA9PiB7CgkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CgkJCWlmICghdG91Y2gpIHJldHVybjsKCQkJY29uc3QgcmVjdCA9IHRhcmdldENhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgeCA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJCWNvbnN0IHkgPSB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3A7CgkJCXVwZGF0ZVBvaW50ZXJQb3NpdGlvbih4LCB5LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUsIHsKCQkJcGFzc2l2ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IHJlc2l6ZVNpbXVsYXRpb24gPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWNhbnZhc01ldHJpY3Mud2lkdGggPSB3aWR0aDsKCQkJY2FudmFzTWV0cmljcy5oZWlnaHQgPSBoZWlnaHQ7CgoJCQljb25zdCBzaW1SZXNYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAqIDAuNSkpOwoJCQljb25zdCBzaW1SZXNZID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgKiAwLjUpKTsKCgkJCWRlbnNpdHkucmVhZC5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlkZW5zaXR5LndyaXRlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXZlbG9jaXR5LnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJdmVsb2NpdHkud3JpdGUuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJcHJlc3N1cmUucmVhZC5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlwcmVzc3VyZS53cml0ZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlkaXZlcmdlbmNlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgoJCQljb25zdCB0ZXhlbFggPSAxIC8gc2ltUmVzWDsKCQkJY29uc3QgdGV4ZWxZID0gMSAvIHNpbVJlc1k7CgkJCXRleGVsLnNldCh0ZXhlbFgsIHRleGVsWSk7CgoJCQlvdXRwdXRVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQoZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTsKCQkJb3V0cHV0VW5pZm9ybXMudU1hc2tUZXhlbC52YWx1ZS5zZXQodGV4ZWxYLCB0ZXhlbFkpOwoKCQkJaWYgKGNhbnZhc01ldHJpY3Mud2lkdGggPiAwICYmIGNhbnZhc01ldHJpY3MuaGVpZ2h0ID4gMCkgewoJCQkJcG9pbnRlclV2LnNldCgKCQkJCQlwb2ludGVyU3RhdGUueCAvIGNhbnZhc01ldHJpY3Mud2lkdGgsCgkJCQkJMSAtIHBvaW50ZXJTdGF0ZS55IC8gY2FudmFzTWV0cmljcy5oZWlnaHQsCgkJCQkpOwoJCQl9CgkJfTsKCgkJcmVzaXplU2ltdWxhdGlvbigpOwoJCWxvYWRCYXNlSW1hZ2UoYmFzZUltYWdlKTsKCQlsb2FkUmV2ZWFsSW1hZ2UocmV2ZWFsSW1hZ2UpOwoKCQljb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemVTaW11bGF0aW9uKTsKCQlyZXNpemVPYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KSB7CgkJCXJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoJCX0KCgkJY29uc3QgZGlzcG9zZVRhcmdldCA9ICh0YXJnZXQ6IFJlbmRlclRhcmdldCkgPT4gewoJCQl0YXJnZXQudGV4dHVyZXMuZm9yRWFjaCgodGV4dHVyZSkgPT4gewoJCQkJaWYgKHRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlLnRleHR1cmUpOwoJCQl9KTsKCQkJaWYgKHRhcmdldC5kZXB0aFRleHR1cmU/LnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGFyZ2V0LmRlcHRoVGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCQlpZiAodGFyZ2V0LmRlcHRoQnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoQnVmZmVyKTsKCQkJaWYgKHRhcmdldC5zdGVuY2lsQnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LnN0ZW5jaWxCdWZmZXIpOwoJCQlpZiAodGFyZ2V0LmRlcHRoU3RlbmNpbEJ1ZmZlcikgewoJCQkJZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5kZXB0aFN0ZW5jaWxCdWZmZXIpOwoJCQl9CgkJCWlmICh0YXJnZXQuYnVmZmVyKSBnbC5kZWxldGVGcmFtZWJ1ZmZlcih0YXJnZXQuYnVmZmVyKTsKCQl9OwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQljb25zdCBkdCA9IDEgLyA2MDsKCQkJY29uc3Qgd2lkdGggPSBjYW52YXNNZXRyaWNzLndpZHRoIHx8IHRhcmdldENhbnZhcy5jbGllbnRXaWR0aCB8fCAxOwoJCQljb25zdCBoZWlnaHQgPSBjYW52YXNNZXRyaWNzLmhlaWdodCB8fCB0YXJnZXRDYW52YXMuY2xpZW50SGVpZ2h0IHx8IDE7CgkJCWNvbnN0IGFzcGVjdCA9IGhlaWdodCA+IDAgPyB3aWR0aCAvIGhlaWdodCA6IDE7CgoJCQlpZiAocG9pbnRlclN0YXRlLm1vdmVkKSB7CgkJCQlzcGxhdFVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJCXNwbGF0VW5pZm9ybXMudVJhdGlvLnZhbHVlID0gYXNwZWN0OwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnQudmFsdWUuc2V0KHBvaW50ZXJVdi54LCBwb2ludGVyVXYueSk7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludFZhbHVlLnZhbHVlLnNldCgKCQkJCQlwb2ludGVyU3RhdGUuZHgsCgkJCQkJLXBvaW50ZXJTdGF0ZS5keSwKCQkJCQkxLAoJCQkJKTsKCQkJCXNwbGF0VW5pZm9ybXMudVBvaW50U2l6ZS52YWx1ZSA9IHBvaW50ZXJTaXplOwoJCQkJcmVuZGVyUGFzcyhzcGxhdFByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJCXZlbG9jaXR5LnN3YXAoKTsKCgkJCQlzcGxhdFVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnRWYWx1ZS52YWx1ZS5zZXQoMSwgMSwgMSk7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCQlkZW5zaXR5LnN3YXAoKTsKCgkJCQlwb2ludGVyU3RhdGUubW92ZWQgPSBmYWxzZTsKCQkJfQoKCQkJZGl2ZXJnZW5jZVVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyUGFzcyhkaXZlcmdlbmNlUHJvZ3JhbSwgZGl2ZXJnZW5jZSk7CgoJCQlwcmVzc3VyZVVuaWZvcm1zLnVEaXZlcmdlbmNlLnZhbHVlID0gZGl2ZXJnZW5jZS50ZXh0dXJlOwoJCQljb25zdCBpdGVyYXRpb25zID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihwcmVzc3VyZUl0ZXJhdGlvbnMpKTsKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKCQkJCXByZXNzdXJlVW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCQkJcmVuZGVyUGFzcyhwcmVzc3VyZVByb2dyYW0sIHByZXNzdXJlLndyaXRlKTsKCQkJCXByZXNzdXJlLnN3YXAoKTsKCQkJfQoKCQkJZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zLnVQcmVzc3VyZS52YWx1ZSA9IHByZXNzdXJlLnJlYWQudGV4dHVyZTsKCQkJZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyUGFzcyhncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQl2ZWxvY2l0eS5zd2FwKCk7CgoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RHQudmFsdWUgPSBkdDsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51SW5wdXQudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVEaXNzaXBhdGlvbi52YWx1ZSA9IHZlbG9jaXR5RGlzc2lwYXRpb247CgkJCXJlbmRlclBhc3MoYWR2ZWN0aW9uUHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQl2ZWxvY2l0eS5zd2FwKCk7CgoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RGlzc2lwYXRpb24udmFsdWUgPSBkaXNzaXBhdGlvbjsKCQkJcmVuZGVyUGFzcyhhZHZlY3Rpb25Qcm9ncmFtLCBkZW5zaXR5LndyaXRlKTsKCQkJZGVuc2l0eS5zd2FwKCk7CgoJCQlvdXRwdXRVbmlmb3Jtcy51TWFza1RleHR1cmUudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJb3V0cHV0VW5pZm9ybXMudUJsZW5kU29mdG5lc3MudmFsdWUgPSBibGVuZFNvZnRuZXNzOwoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZTogb3V0cHV0TWVzaCwgY2xlYXI6IHRydWUgfSk7CgoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlyZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGhhbmRsZVRvdWNoTW92ZSk7CgkJCXNldEJhc2VTb3VyY2UgPSB1bmRlZmluZWQ7CgkJCXNldFJldmVhbFNvdXJjZSA9IHVuZGVmaW5lZDsKCgkJCWRpc3Bvc2VUYXJnZXQoZGVuc2l0eS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldChkZW5zaXR5LndyaXRlKTsKCQkJZGlzcG9zZVRhcmdldCh2ZWxvY2l0eS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldCh2ZWxvY2l0eS53cml0ZSk7CgkJCWRpc3Bvc2VUYXJnZXQocHJlc3N1cmUucmVhZCk7CgkJCWRpc3Bvc2VUYXJnZXQocHJlc3N1cmUud3JpdGUpOwoJCQlkaXNwb3NlVGFyZ2V0KGRpdmVyZ2VuY2UpOwoKCQkJaWYgKGJhc2VUZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUoYmFzZVRleHR1cmUudGV4dHVyZSk7CgkJCWlmIChyZXZlYWxUZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUocmV2ZWFsVGV4dHVyZS50ZXh0dXJlKTsKCgkJCWFkdmVjdGlvblByb2dyYW0ucmVtb3ZlKCk7CgkJCWRpdmVyZ2VuY2VQcm9ncmFtLnJlbW92ZSgpOwoJCQlwcmVzc3VyZVByb2dyYW0ucmVtb3ZlKCk7CgkJCWdyYWRpZW50U3VidHJhY3RQcm9ncmFtLnJlbW92ZSgpOwoJCQlzcGxhdFByb2dyYW0ucmVtb3ZlKCk7CgkJCW91dHB1dFByb2dyYW0ucmVtb3ZlKCk7CgkJCXRyaWFuZ2xlLnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/fluid-simulation/FluidSimulation.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9GbHVpZFNpbXVsYXRpb25TY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSBmbHVpZC4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBTY2VuZVByb3BzWyJkaXNzaXBhdGlvbiJdOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgcG9pbnRlciBpbmZsdWVuY2UuCgkJICogQGRlZmF1bHQgMC4wMDUKCQkgKi8KCQlwb2ludGVyU2l6ZT86IFNjZW5lUHJvcHNbInBvaW50ZXJTaXplIl07CgkJLyoqCgkJICogRmx1aWQgc3BsYXQgY29sb3IuCgkJICogQGRlZmF1bHQgIiNmZjY5MDAiCgkJICovCgkJY29sb3I/OiBTY2VuZVByb3BzWyJjb2xvciJdOwoJCS8qKgoJCSAqIEZsdWlkIHZlbG9jaXR5IGRpc3NpcGF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQl2ZWxvY2l0eURpc3NpcGF0aW9uPzogU2NlbmVQcm9wc1sidmVsb2NpdHlEaXNzaXBhdGlvbiJdOwoJCS8qKgoJCSAqIFByZXNzdXJlIGl0ZXJhdGlvbnMuIE1vcmUgaXRlcmF0aW9ucyA9IG1vcmUgYWNjdXJhdGUgYnV0IHNsb3dlci4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCXByZXNzdXJlSXRlcmF0aW9ucz86IFNjZW5lUHJvcHNbInByZXNzdXJlSXRlcmF0aW9ucyJdOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCWNvbG9yID0gIiNmZjY5MDAiLAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7ZGlzc2lwYXRpb259CgkJCXtwb2ludGVyU2l6ZX0KCQkJe2NvbG9yfQoJCQl7dmVsb2NpdHlEaXNzaXBhdGlvbn0KCQkJe3ByZXNzdXJlSXRlcmF0aW9uc30KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/fluid-simulation/FluidSimulationScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlclRhcmdldCwKCQlSZW5kZXJlciwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CgoJdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uID0KCQl8IHN0cmluZwoJCXwgbnVtYmVyCgkJfCByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0KCQl8IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogRGlzc2lwYXRpb24gZmFjdG9yIGZvciB0aGUgZmx1aWQuCgkJICogQGRlZmF1bHQgMC45NgoJCSAqLwoJCWRpc3NpcGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgcG9pbnRlciBpbmZsdWVuY2UuCgkJICogQGRlZmF1bHQgMC4wMDUKCQkgKi8KCQlwb2ludGVyU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBGbHVpZCBzcGxhdCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQljb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogRmx1aWQgdmVsb2NpdHkgZGlzc2lwYXRpb24uCgkJICogQGRlZmF1bHQgMC45NgoJCSAqLwoJCXZlbG9jaXR5RGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUHJlc3N1cmUgaXRlcmF0aW9ucy4gTW9yZSBpdGVyYXRpb25zID0gbW9yZSBhY2N1cmF0ZSBidXQgc2xvd2VyLgoJCSAqIEBkZWZhdWx0IDEwCgkJICovCgkJcHJlc3N1cmVJdGVyYXRpb25zPzogbnVtYmVyOwoJfQoKCXR5cGUgUG9pbnRlclN0YXRlID0gewoJCXg6IG51bWJlcjsKCQl5OiBudW1iZXI7CgkJZHg6IG51bWJlcjsKCQlkeTogbnVtYmVyOwoJCW1vdmVkOiBib29sZWFuOwoJCWluaXRpYWxpemVkOiBib29sZWFuOwoJfTsKCgl0eXBlIFByZXZpZXdTdGF0ZSA9IHsKCQllbmFibGVkOiBib29sZWFuOwoJCXRpbWVNczogbnVtYmVyOwoJfTsKCgl0eXBlIENhbnZhc01ldHJpY3MgPSB7CgkJd2lkdGg6IG51bWJlcjsKCQloZWlnaHQ6IG51bWJlcjsKCX07CgoJdHlwZSBEb3VibGVGQk8gPSB7CgkJcmVhZDogUmVuZGVyVGFyZ2V0OwoJCXdyaXRlOiBSZW5kZXJUYXJnZXQ7CgkJc3dhcDogKCkgPT4gdm9pZDsKCX07CgoJbGV0IHsKCQlkaXNzaXBhdGlvbiA9IDAuOTYsCgkJcG9pbnRlclNpemUgPSAwLjAwNSwKCQljb2xvciA9ICIjZmY2OTAwIiwKCQl2ZWxvY2l0eURpc3NpcGF0aW9uID0gMC45NiwKCQlwcmVzc3VyZUl0ZXJhdGlvbnMgPSAxMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCgljb25zdCBwb2ludGVyU3RhdGUgPSAkc3RhdGU8UG9pbnRlclN0YXRlPih7CgkJeDogMCwKCQl5OiAwLAoJCWR4OiAwLAoJCWR5OiAwLAoJCW1vdmVkOiBmYWxzZSwKCQlpbml0aWFsaXplZDogZmFsc2UsCgl9KTsKCWNvbnN0IHByZXZpZXdTdGF0ZSA9ICRzdGF0ZTxQcmV2aWV3U3RhdGU+KHsKCQllbmFibGVkOiB0cnVlLAoJCXRpbWVNczogMCwKCX0pOwoJY29uc3QgY2FudmFzTWV0cmljcyA9ICRzdGF0ZTxDYW52YXNNZXRyaWNzPih7CgkJd2lkdGg6IDEsCgkJaGVpZ2h0OiAxLAoJfSk7CgoJY29uc3QgcG9pbnRlclV2ID0gbmV3IFZlYzIoKTsKCWNvbnN0IHNwbGF0Q29sb3IgPSBuZXcgVmVjMygpOwoKCWNvbnN0IHBvaW50ZXJGb3JjZUNsYW1wID0gNDUwOwoJY29uc3QgcG9pbnRlckZvcmNlSW5pdGlhbExlcnAgPSAwLjI7Cgljb25zdCBwb2ludGVyRm9yY2VMZXJwID0gMC41NTsKCgljb25zdCBjbGFtcCA9ICh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+CgkJTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7Cgljb25zdCBsZXJwID0gKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpID0+IGEgKyAoYiAtIGEpICogdDsKCWNvbnN0IGNsYW1wMDEgPSAodmFsdWU6IG51bWJlcikgPT4gY2xhbXAodmFsdWUsIDAsIDEpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbCgkJCWNsYW1wMDEocGFydHNbMF0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMV0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMl0gLyBzY2FsZSksCgkJXTsKCX07CgoJY29uc3Qgbm9ybWFsaXplVHJpcGxldCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChyLCBnLCBiKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbY2xhbXAwMShyIC8gc2NhbGUpLCBjbGFtcDAxKGcgLyBzY2FsZSksIGNsYW1wMDEoYiAvIHNjYWxlKV07Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHsKCQkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJCXJldHVybiBbCgkJCQkoKGludCA+PiAxNikgJiAyNTUpIC8gMjU1LAoJCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkJKGludCAmIDI1NSkgLyAyNTUsCgkJCV07CgkJfQoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IHRyaW1tZWQuc3RhcnRzV2l0aCgiIyIpCgkJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJCTogcGFyc2VDc3NDb2xvcih0cmltbWVkKTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCQlpZiAoCgkJCXZhbHVlICYmCgkJCXR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgJiYKCQkJInIiIGluIHZhbHVlICYmCgkJCSJnIiBpbiB2YWx1ZSAmJgoJCQkiYiIgaW4gdmFsdWUKCQkpIHsKCQkJY29uc3QgcmdiID0gdmFsdWUgYXMgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHJnYi5yLCByZ2IuZywgcmdiLmIpOwoJCX0KCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxLCAxMDUgLyAyNTUsIDBdKTsKCQlzcGxhdENvbG9yLnNldChyLCBnLCBiKTsKCX0pOwoKCWNvbnN0IHVwZGF0ZVBvaW50ZXJQb3NpdGlvbiA9ICgKCQlweDogbnVtYmVyLAoJCXB5OiBudW1iZXIsCgkJd2lkdGg6IG51bWJlciwKCQloZWlnaHQ6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHByZXZYID0gcG9pbnRlclN0YXRlLng7CgkJY29uc3QgcHJldlkgPSBwb2ludGVyU3RhdGUueTsKCQljb25zdCB0YXJnZXREeCA9IGNsYW1wKAoJCQk1ICogKHB4IC0gcHJldlgpLAoJCQktcG9pbnRlckZvcmNlQ2xhbXAsCgkJCXBvaW50ZXJGb3JjZUNsYW1wLAoJCSk7CgkJY29uc3QgdGFyZ2V0RHkgPSBjbGFtcCgKCQkJNSAqIChweSAtIHByZXZZKSwKCQkJLXBvaW50ZXJGb3JjZUNsYW1wLAoJCQlwb2ludGVyRm9yY2VDbGFtcCwKCQkpOwoJCWNvbnN0IGxlcnBGYWN0b3IgPSBwb2ludGVyU3RhdGUuaW5pdGlhbGl6ZWQKCQkJPyBwb2ludGVyRm9yY2VMZXJwCgkJCTogcG9pbnRlckZvcmNlSW5pdGlhbExlcnA7CgoJCXBvaW50ZXJTdGF0ZS5tb3ZlZCA9IHRydWU7CgkJcG9pbnRlclN0YXRlLmR4ID0gbGVycChwb2ludGVyU3RhdGUuZHgsIHRhcmdldER4LCBsZXJwRmFjdG9yKTsKCQlwb2ludGVyU3RhdGUuZHkgPSBsZXJwKHBvaW50ZXJTdGF0ZS5keSwgdGFyZ2V0RHksIGxlcnBGYWN0b3IpOwoJCXBvaW50ZXJTdGF0ZS54ID0gcHg7CgkJcG9pbnRlclN0YXRlLnkgPSBweTsKCQlwb2ludGVyU3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQlpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKCQkJcG9pbnRlclV2LnNldChweCAvIHdpZHRoLCAxIC0gcHkgLyBoZWlnaHQpOwoJCX0KCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gdmVjMiB1VGV4ZWw7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZVdiA9IHV2OwoJCQl2TCA9IHZVdiAtIHZlYzIodVRleGVsLngsIDAuKTsKCQkJdlIgPSB2VXYgKyB2ZWMyKHVUZXhlbC54LCAwLik7CgkJCXZUID0gdlV2ICsgdmVjMigwLiwgdVRleGVsLnkpOwoJCQl2QiA9IHZVdiAtIHZlYzIoMC4sIHVUZXhlbC55KTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBhZHZlY3Rpb25TaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVZlbG9jaXR5OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKCQl1bmlmb3JtIHZlYzIgdVRleGVsOwoJCXVuaWZvcm0gZmxvYXQgdUR0OwoJCXVuaWZvcm0gZmxvYXQgdURpc3NpcGF0aW9uOwoKCQl2ZWM0IGJpbGVycCAoc2FtcGxlcjJEIHNhbSwgdmVjMiB1diwgdmVjMiB0c2l6ZSkgewoJCQl2ZWMyIHN0ID0gdXYgLyB0c2l6ZSAtIDAuNTsKCQkJdmVjMiBpdXYgPSBmbG9vcihzdCk7CgkJCXZlYzIgZnV2ID0gZnJhY3Qoc3QpOwoJCQl2ZWM0IGEgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGIgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGMgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDEuNSkpICogdHNpemUpOwoJCQl2ZWM0IGQgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDEuNSkpICogdHNpemUpOwoJCQlyZXR1cm4gbWl4KG1peChhLCBiLCBmdXYueCksIG1peChjLCBkLCBmdXYueCksIGZ1di55KTsKCQl9CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgY29vcmQgPSB2VXYgLSB1RHQgKiBiaWxlcnAodVZlbG9jaXR5LCB2VXYsIHVUZXhlbCkueHkgKiB1VGV4ZWw7CgkJCWdsX0ZyYWdDb2xvciA9IHVEaXNzaXBhdGlvbiAqIGJpbGVycCh1SW5wdXQsIGNvb3JkLCB1VGV4ZWwpOwoJCQlnbF9GcmFnQ29sb3IuYSA9IDEuOwoJCX0KCWA7CgoJY29uc3QgZGl2ZXJnZW5jZVNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2VCkueTsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZCKS55OwoJCQlmbG9hdCBkaXYgPSAuNiAqIChSIC0gTCArIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXYsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgcHJlc3N1cmVTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1RGl2ZXJnZW5jZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQlmbG9hdCBkaXZlcmdlbmNlID0gdGV4dHVyZTJEKHVEaXZlcmdlbmNlLCB2VXYpLng7CgkJCWZsb2F0IHByZXNzdXJlID0gKEwgKyBSICsgQiArIFQgLSBkaXZlcmdlbmNlKSAqIDAuMjU7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQocHJlc3N1cmUsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzIgdkw7CgkJdmFyeWluZyB2ZWMyIHZSOwoJCXZhcnlpbmcgdmVjMiB2VDsKCQl2YXJ5aW5nIHZlYzIgdkI7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVByZXNzdXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQl2ZWMyIHZlbG9jaXR5ID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlV2KS54eTsKCQkJdmVsb2NpdHkueHkgLT0gdmVjMihSIC0gTCwgVCAtIEIpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlbG9jaXR5LCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3Qgc3BsYXRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUlucHV0OwoJCXVuaWZvcm0gZmxvYXQgdVJhdGlvOwoJCXVuaWZvcm0gdmVjMyB1UG9pbnRWYWx1ZTsKCQl1bmlmb3JtIHZlYzIgdVBvaW50OwoJCXVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBwID0gdlV2IC0gdVBvaW50Lnh5OwoJCQlwLnggKj0gdVJhdGlvOwoJCQl2ZWMzIHNwbGF0ID0gcG93KDIuLCAtZG90KHAsIHApIC8gdVBvaW50U2l6ZSkgKiB1UG9pbnRWYWx1ZTsKCQkJdmVjMyBiYXNlID0gdGV4dHVyZTJEKHVJbnB1dCwgdlV2KS54eXo7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZSArIHNwbGF0LCAxLik7CgkJfQoJYDsKCgljb25zdCBvdXRwdXRWZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IG91dHB1dFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMyBDID0gdGV4dHVyZTJEKHVUZXh0dXJlLCB2VXYpLnJnYjsKCQkJZmxvYXQgYSA9IG1heChDLnIsIG1heChDLmcsIEMuYikpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihDKSwgYSk7CgkJfQoJYDsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBoYWxmRmxvYXRFeHQgPSBnbC5yZW5kZXJlci5leHRlbnNpb25zWyJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Il0gYXMKCQkJfCB7IEhBTEZfRkxPQVRfT0VTOiBudW1iZXIgfQoJCQl8IHVuZGVmaW5lZDsKCQljb25zdCB0ZXh0dXJlVHlwZSA9IGdsLnJlbmRlcmVyLmlzV2ViZ2wyCgkJCT8gKGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpLkhBTEZfRkxPQVQKCQkJOiAoaGFsZkZsb2F0RXh0Py5IQUxGX0ZMT0FUX09FUyA/PyBnbC5GTE9BVCk7CgkJY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBnbC5yZW5kZXJlci5pc1dlYmdsMgoJCQk/IHRleHR1cmVUeXBlID09PSBnbC5GTE9BVAoJCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTMyRgoJCQkJOiAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTE2RgoJCQk6IGdsLlJHQkE7CgoJCWNvbnN0IGNyZWF0ZUZCTyA9ICh3OiBudW1iZXIsIGg6IG51bWJlcikgPT4KCQkJbmV3IFJlbmRlclRhcmdldChnbCwgewoJCQkJd2lkdGg6IHcsCgkJCQloZWlnaHQ6IGgsCgkJCQl0eXBlOiB0ZXh0dXJlVHlwZSwKCQkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJCWludGVybmFsRm9ybWF0LAoJCQkJbWluRmlsdGVyOiBnbC5ORUFSRVNULAoJCQkJbWFnRmlsdGVyOiBnbC5ORUFSRVNULAoJCQkJZGVwdGg6IGZhbHNlLAoJCQkJc3RlbmNpbDogZmFsc2UsCgkJCX0pOwoKCQljb25zdCBjcmVhdGVEb3VibGVGQk8gPSAodzogbnVtYmVyLCBoOiBudW1iZXIpOiBEb3VibGVGQk8gPT4gewoJCQljb25zdCBkb3VibGVGQk86IERvdWJsZUZCTyA9IHsKCQkJCXJlYWQ6IGNyZWF0ZUZCTyh3LCBoKSwKCQkJCXdyaXRlOiBjcmVhdGVGQk8odywgaCksCgkJCQlzd2FwOiAoKSA9PiB7CgkJCQkJY29uc3QgdGVtcCA9IGRvdWJsZUZCTy5yZWFkOwoJCQkJCWRvdWJsZUZCTy5yZWFkID0gZG91YmxlRkJPLndyaXRlOwoJCQkJCWRvdWJsZUZCTy53cml0ZSA9IHRlbXA7CgkJCQl9LAoJCQl9OwoJCQlyZXR1cm4gZG91YmxlRkJPOwoJCX07CgoJCWNvbnN0IGRlbnNpdHkgPSBjcmVhdGVEb3VibGVGQk8oMTI4LCAxMjgpOwoJCWNvbnN0IHZlbG9jaXR5ID0gY3JlYXRlRG91YmxlRkJPKDEyOCwgMTI4KTsKCQljb25zdCBwcmVzc3VyZSA9IGNyZWF0ZURvdWJsZUZCTygxMjgsIDEyOCk7CgkJY29uc3QgZGl2ZXJnZW5jZSA9IGNyZWF0ZUZCTygxMjgsIDEyOCk7CgoJCWNvbnN0IHRleGVsID0gbmV3IFZlYzIoMSAvIDEyOCwgMSAvIDEyOCk7CgkJY29uc3QgYWR2ZWN0aW9uVW5pZm9ybXMgPSB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVJbnB1dDogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQkJdUR0OiB7IHZhbHVlOiAxIC8gNjAgfSwKCQkJdURpc3NpcGF0aW9uOiB7IHZhbHVlOiB2ZWxvY2l0eURpc3NpcGF0aW9uIH0sCgkJfTsKCQljb25zdCBkaXZlcmdlbmNlVW5pZm9ybXMgPSB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQl9OwoJCWNvbnN0IHByZXNzdXJlVW5pZm9ybXMgPSB7CgkJCXVQcmVzc3VyZTogeyB2YWx1ZTogcHJlc3N1cmUucmVhZC50ZXh0dXJlIH0sCgkJCXVEaXZlcmdlbmNlOiB7IHZhbHVlOiBkaXZlcmdlbmNlLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCX07CgkJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zID0gewoJCQl1UHJlc3N1cmU6IHsgdmFsdWU6IHByZXNzdXJlLnJlYWQudGV4dHVyZSB9LAoJCQl1VmVsb2NpdHk6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJfTsKCQljb25zdCBzcGxhdFVuaWZvcm1zID0gewoJCQl1SW5wdXQ6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1UmF0aW86IHsgdmFsdWU6IDEgfSwKCQkJdVBvaW50VmFsdWU6IHsgdmFsdWU6IG5ldyBWZWMzKCkgfSwKCQkJdVBvaW50OiB7IHZhbHVlOiBwb2ludGVyVXYgfSwKCQkJdVBvaW50U2l6ZTogeyB2YWx1ZTogcG9pbnRlclNpemUgfSwKCQl9OwoJCWNvbnN0IG91dHB1dFVuaWZvcm1zID0gewoJCQl1VGV4dHVyZTogeyB2YWx1ZTogZGVuc2l0eS5yZWFkLnRleHR1cmUgfSwKCQl9OwoKCQljb25zdCBhZHZlY3Rpb25Qcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBhZHZlY3Rpb25TaGFkZXIsCgkJCXVuaWZvcm1zOiBhZHZlY3Rpb25Vbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3QgZGl2ZXJnZW5jZVByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGRpdmVyZ2VuY2VTaGFkZXIsCgkJCXVuaWZvcm1zOiBkaXZlcmdlbmNlVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IHByZXNzdXJlUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogcHJlc3N1cmVTaGFkZXIsCgkJCXVuaWZvcm1zOiBwcmVzc3VyZVVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciwKCQkJdW5pZm9ybXM6IGdyYWRpZW50U3VidHJhY3RVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3Qgc3BsYXRQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBzcGxhdFNoYWRlciwKCQkJdW5pZm9ybXM6IHNwbGF0VW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IG91dHB1dFByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IG91dHB1dFZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IG91dHB1dFNoYWRlciwKCQkJdW5pZm9ybXM6IG91dHB1dFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJfSk7CgoJCWNvbnN0IHRyaWFuZ2xlID0gbmV3IFRyaWFuZ2xlKGdsKTsKCQljb25zdCBzaW1NZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJZ2VvbWV0cnk6IHRyaWFuZ2xlLAoJCQlwcm9ncmFtOiBhZHZlY3Rpb25Qcm9ncmFtLAoJCX0pOwoJCWNvbnN0IG91dHB1dE1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQlnZW9tZXRyeTogdHJpYW5nbGUsCgkJCXByb2dyYW06IG91dHB1dFByb2dyYW0sCgkJfSk7CgoJCWNvbnN0IHJlbmRlclBhc3MgPSAocHJvZ3JhbTogUHJvZ3JhbSwgdGFyZ2V0OiBSZW5kZXJUYXJnZXQpID0+IHsKCQkJc2ltTWVzaC5wcm9ncmFtID0gcHJvZ3JhbTsKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmU6IHNpbU1lc2gsIHRhcmdldCwgY2xlYXI6IHRydWUgfSk7CgkJfTsKCgkJY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSBlLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJCWNvbnN0IHkgPSBlLmNsaWVudFkgLSByZWN0LnRvcDsKCgkJCWNvbnN0IHdhc1ByZXZpZXcgPSBwcmV2aWV3U3RhdGUuZW5hYmxlZDsKCQkJcHJldmlld1N0YXRlLmVuYWJsZWQgPSBmYWxzZTsKCQkJaWYgKHdhc1ByZXZpZXcpIHsKCQkJCXBvaW50ZXJTdGF0ZS5pbml0aWFsaXplZCA9IGZhbHNlOwoJCQkJcG9pbnRlclN0YXRlLmR4ID0gMDsKCQkJCXBvaW50ZXJTdGF0ZS5keSA9IDA7CgkJCX0KCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHgsIHksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKCQl9OwoKCQljb25zdCBoYW5kbGVUb3VjaE1vdmUgPSAoZTogVG91Y2hFdmVudCkgPT4gewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCWNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdOwoJCQlpZiAoIXRvdWNoKSByZXR1cm47CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSB0b3VjaC5jbGllbnRYIC0gcmVjdC5sZWZ0OwoJCQljb25zdCB5ID0gdG91Y2guY2xpZW50WSAtIHJlY3QudG9wOwoKCQkJY29uc3Qgd2FzUHJldmlldyA9IHByZXZpZXdTdGF0ZS5lbmFibGVkOwoJCQlwcmV2aWV3U3RhdGUuZW5hYmxlZCA9IGZhbHNlOwoJCQlpZiAod2FzUHJldmlldykgewoJCQkJcG9pbnRlclN0YXRlLmluaXRpYWxpemVkID0gZmFsc2U7CgkJCQlwb2ludGVyU3RhdGUuZHggPSAwOwoJCQkJcG9pbnRlclN0YXRlLmR5ID0gMDsKCQkJfQoJCQl1cGRhdGVQb2ludGVyUG9zaXRpb24oeCwgeSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX07CgoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKCQl0YXJnZXRDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgaGFuZGxlVG91Y2hNb3ZlLCB7CgkJCXBhc3NpdmU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCByZXNpemVTaW11bGF0aW9uID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQljYW52YXNNZXRyaWNzLndpZHRoID0gd2lkdGg7CgkJCWNhbnZhc01ldHJpY3MuaGVpZ2h0ID0gaGVpZ2h0OwoKCQkJY29uc3Qgc2ltUmVzWCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iod2lkdGggKiAwLjUpKTsKCQkJY29uc3Qgc2ltUmVzWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0ICogMC41KSk7CgoJCQlkZW5zaXR5LnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJZGVuc2l0eS53cml0ZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQl2ZWxvY2l0eS5yZWFkLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXZlbG9jaXR5LndyaXRlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXByZXNzdXJlLnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJcHJlc3N1cmUud3JpdGUuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJZGl2ZXJnZW5jZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoKCQkJY29uc3QgdGV4ZWxYID0gMSAvIHNpbVJlc1g7CgkJCWNvbnN0IHRleGVsWSA9IDEgLyBzaW1SZXNZOwoJCQl0ZXhlbC5zZXQodGV4ZWxYLCB0ZXhlbFkpOwoKCQkJaWYgKGNhbnZhc01ldHJpY3Mud2lkdGggPiAwICYmIGNhbnZhc01ldHJpY3MuaGVpZ2h0ID4gMCkgewoJCQkJcG9pbnRlclV2LnNldCgKCQkJCQlwb2ludGVyU3RhdGUueCAvIGNhbnZhc01ldHJpY3Mud2lkdGgsCgkJCQkJMSAtIHBvaW50ZXJTdGF0ZS55IC8gY2FudmFzTWV0cmljcy5oZWlnaHQsCgkJCQkpOwoJCQl9CgkJfTsKCgkJcmVzaXplU2ltdWxhdGlvbigpOwoJCWNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZVNpbXVsYXRpb24pOwoJCXJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpIHsKCQkJcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgkJfQoKCQljb25zdCBkaXNwb3NlVGFyZ2V0ID0gKHRhcmdldDogUmVuZGVyVGFyZ2V0KSA9PiB7CgkJCXRhcmdldC50ZXh0dXJlcy5mb3JFYWNoKCh0ZXh0dXJlKSA9PiB7CgkJCQlpZiAodGV4dHVyZS50ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUudGV4dHVyZSk7CgkJCX0pOwoJCQlpZiAodGFyZ2V0LmRlcHRoVGV4dHVyZT8udGV4dHVyZSkKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGFyZ2V0LmRlcHRoVGV4dHVyZS50ZXh0dXJlKTsKCQkJaWYgKHRhcmdldC5kZXB0aEJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5kZXB0aEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuc3RlbmNpbEJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5zdGVuY2lsQnVmZmVyKTsKCQkJaWYgKHRhcmdldC5kZXB0aFN0ZW5jaWxCdWZmZXIpCgkJCQlnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoU3RlbmNpbEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuYnVmZmVyKSBnbC5kZWxldGVGcmFtZWJ1ZmZlcih0YXJnZXQuYnVmZmVyKTsKCQl9OwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWNvbnN0IGR0ID0gMSAvIDYwOwoJCQljb25zdCB3aWR0aCA9IGNhbnZhc01ldHJpY3Mud2lkdGggfHwgdGFyZ2V0Q2FudmFzLmNsaWVudFdpZHRoIHx8IDE7CgkJCWNvbnN0IGhlaWdodCA9IGNhbnZhc01ldHJpY3MuaGVpZ2h0IHx8IHRhcmdldENhbnZhcy5jbGllbnRIZWlnaHQgfHwgMTsKCQkJY29uc3QgYXNwZWN0ID0gaGVpZ2h0ID4gMCA/IHdpZHRoIC8gaGVpZ2h0IDogMTsKCgkJCWlmIChwcmV2aWV3U3RhdGUuZW5hYmxlZCAmJiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewoJCQkJcHJldmlld1N0YXRlLnRpbWVNcyArPSBkZWx0YSAqIDEwMDA7CgkJCQljb25zdCBwcmV2aWV3WCA9CgkJCQkJKDAuNSAtIDAuNDUgKiBNYXRoLnNpbigwLjAwMyAqIHByZXZpZXdTdGF0ZS50aW1lTXMgLSAyKSkgKiB3aWR0aDsKCQkJCWNvbnN0IHByZXZpZXdZID0KCQkJCQkoMC41ICsKCQkJCQkJMC4xICogTWF0aC5zaW4oMC4wMDI1ICogcHJldmlld1N0YXRlLnRpbWVNcykgKwoJCQkJCQkwLjEgKiBNYXRoLmNvcygwLjAwMiAqIHByZXZpZXdTdGF0ZS50aW1lTXMpKSAqCgkJCQkJaGVpZ2h0OwoJCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHByZXZpZXdYLCBwcmV2aWV3WSwgd2lkdGgsIGhlaWdodCk7CgkJCX0KCgkJCWlmIChwb2ludGVyU3RhdGUubW92ZWQpIHsKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQkJc3BsYXRVbmlmb3Jtcy51UmF0aW8udmFsdWUgPSBhc3BlY3Q7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludC52YWx1ZS5zZXQocG9pbnRlclV2LngsIHBvaW50ZXJVdi55KTsKCQkJCXNwbGF0VW5pZm9ybXMudVBvaW50VmFsdWUudmFsdWUuc2V0KAoJCQkJCXBvaW50ZXJTdGF0ZS5keCwKCQkJCQktcG9pbnRlclN0YXRlLmR5LAoJCQkJCTEsCgkJCQkpOwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnRTaXplLnZhbHVlID0gcG9pbnRlclNpemU7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gZGVuc2l0eS5yZWFkLnRleHR1cmU7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludFZhbHVlLnZhbHVlLnNldCgKCQkJCQlzcGxhdENvbG9yLngsCgkJCQkJc3BsYXRDb2xvci55LAoJCQkJCXNwbGF0Q29sb3IueiwKCQkJCSk7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCQlkZW5zaXR5LnN3YXAoKTsKCgkJCQlpZiAoIXByZXZpZXdTdGF0ZS5lbmFibGVkKSB7CgkJCQkJcG9pbnRlclN0YXRlLm1vdmVkID0gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCWRpdmVyZ2VuY2VVbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXJlbmRlclBhc3MoZGl2ZXJnZW5jZVByb2dyYW0sIGRpdmVyZ2VuY2UpOwoKCQkJcHJlc3N1cmVVbmlmb3Jtcy51RGl2ZXJnZW5jZS52YWx1ZSA9IGRpdmVyZ2VuY2UudGV4dHVyZTsKCQkJY29uc3QgaXRlcmF0aW9ucyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocHJlc3N1cmVJdGVyYXRpb25zKSk7CgkJCWZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CgkJCQlwcmVzc3VyZVVuaWZvcm1zLnVQcmVzc3VyZS52YWx1ZSA9IHByZXNzdXJlLnJlYWQudGV4dHVyZTsKCQkJCXJlbmRlclBhc3MocHJlc3N1cmVQcm9ncmFtLCBwcmVzc3VyZS53cml0ZSk7CgkJCQlwcmVzc3VyZS5zd2FwKCk7CgkJCX0KCgkJCWdyYWRpZW50U3VidHJhY3RVbmlmb3Jtcy51UHJlc3N1cmUudmFsdWUgPSBwcmVzc3VyZS5yZWFkLnRleHR1cmU7CgkJCWdyYWRpZW50U3VidHJhY3RVbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXJlbmRlclBhc3MoZ3JhZGllbnRTdWJ0cmFjdFByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUR0LnZhbHVlID0gZHQ7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RGlzc2lwYXRpb24udmFsdWUgPSB2ZWxvY2l0eURpc3NpcGF0aW9uOwoJCQlyZW5kZXJQYXNzKGFkdmVjdGlvblByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51SW5wdXQudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudURpc3NpcGF0aW9uLnZhbHVlID0gZGlzc2lwYXRpb247CgkJCXJlbmRlclBhc3MoYWR2ZWN0aW9uUHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCWRlbnNpdHkuc3dhcCgpOwoKCQkJb3V0cHV0VW5pZm9ybXMudVRleHR1cmUudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmU6IG91dHB1dE1lc2gsIGNsZWFyOiB0cnVlIH0pOwoKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVQb2ludGVyTW92ZSk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUpOwoKCQkJZGlzcG9zZVRhcmdldChkZW5zaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KGRlbnNpdHkud3JpdGUpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LndyaXRlKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS53cml0ZSk7CgkJCWRpc3Bvc2VUYXJnZXQoZGl2ZXJnZW5jZSk7CgoJCQlhZHZlY3Rpb25Qcm9ncmFtLnJlbW92ZSgpOwoJCQlkaXZlcmdlbmNlUHJvZ3JhbS5yZW1vdmUoKTsKCQkJcHJlc3N1cmVQcm9ncmFtLnJlbW92ZSgpOwoJCQlncmFkaWVudFN1YnRyYWN0UHJvZ3JhbS5yZW1vdmUoKTsKCQkJc3BsYXRQcm9ncmFtLnJlbW92ZSgpOwoJCQlvdXRwdXRQcm9ncmFtLnJlbW92ZSgpOwoJCQl0cmlhbmdsZS5yZW1vdmUoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/glass-pane/GlassPane.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9HbGFzc1BhbmVTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi9kaXN0b3J0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogU2NlbmVQcm9wc1siZGlzdG9ydGlvbiJdOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBjaHJvbWF0aWMgYWJlcnJhdGlvbiAoY29sb3Igc3BsaXR0aW5nKS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCWNocm9tYXRpY0FiZXJyYXRpb24/OiBTY2VuZVByb3BzWyJjaHJvbWF0aWNBYmVycmF0aW9uIl07CgkJLyoqCgkJICogU3BlZWQgb2YgdGhlIHdhdmUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBBbXBsaXR1ZGUgb2YgdGhlIHdhdmUgZGlzdG9ydGlvbi4KCQkgKiBAZGVmYXVsdCAwLjA1CgkJICovCgkJd2F2aW5lc3M/OiBTY2VuZVByb3BzWyJ3YXZpbmVzcyJdOwoJCS8qKgoJCSAqIEZyZXF1ZW5jeSBvZiB0aGUgd2F2ZSBkaXN0b3J0aW9uLgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWZyZXF1ZW5jeT86IFNjZW5lUHJvcHNbImZyZXF1ZW5jeSJdOwoJCS8qKgoJCSAqIE51bWJlci9kZW5zaXR5IG9mIHRoZSBnbGFzcyByb2RzLgoJCSAqIEBkZWZhdWx0IDUuMAoJCSAqLwoJCXJvZHM/OiBTY2VuZVByb3BzWyJyb2RzIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAwLjAwNSwKCQlzcGVlZCA9IDEuMCwKCQl3YXZpbmVzcyA9IDAuMDUsCgkJZnJlcXVlbmN5ID0gNi4wLAoJCXJvZHMgPSA1LjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtpbWFnZX0KCQkJe2Rpc3RvcnRpb259CgkJCXtjaHJvbWF0aWNBYmVycmF0aW9ufQoJCQl7c3BlZWR9CgkJCXt3YXZpbmVzc30KCQkJe2ZyZXF1ZW5jeX0KCQkJe3JvZHN9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/glass-pane/GlassPaneScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi9kaXN0b3J0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBjaHJvbWF0aWMgYWJlcnJhdGlvbiAoY29sb3Igc3BsaXR0aW5nKS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCWNocm9tYXRpY0FiZXJyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogU3BlZWQgb2YgdGhlIHdhdmUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtcGxpdHVkZSBvZiB0aGUgd2F2ZSBkaXN0b3J0aW9uLgoJCSAqIEBkZWZhdWx0IDAuMDUKCQkgKi8KCQl3YXZpbmVzcz86IG51bWJlcjsKCQkvKioKCQkgKiBGcmVxdWVuY3kgb2YgdGhlIHdhdmUgZGlzdG9ydGlvbi4KCQkgKiBAZGVmYXVsdCA2LjAKCQkgKi8KCQlmcmVxdWVuY3k/OiBudW1iZXI7CgkJLyoqCgkJICogRGVuc2l0eSBvZiB0aGUgZ2xhc3Mgcm9kcy4KCQkgKiBAZGVmYXVsdCA1LjAKCQkgKi8KCQlyb2RzPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJaW1hZ2UsCgkJZGlzdG9ydGlvbiA9IDEuMCwKCQljaHJvbWF0aWNBYmVycmF0aW9uID0gMC4wMDUsCgkJc3BlZWQgPSAxLjAsCgkJd2F2aW5lc3MgPSAwLjA1LAoJCWZyZXF1ZW5jeSA9IDYuMCwKCQlyb2RzID0gNS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIFVuaWZvcm1TdGF0ZSA9IHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGV4dHVyZVNpemU6IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGV4dHVyZTogeyB2YWx1ZTogVGV4dHVyZSB9OwoJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Q2hyb21hdGljQWJlcnJhdGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVdhdmluZXNzOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RnJlcXVlbmN5OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Um9kczogeyB2YWx1ZTogbnVtYmVyIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMiB1VGV4dHVyZVNpemU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7CgkJdW5pZm9ybSBmbG9hdCB1RGlzdG9ydGlvbjsKCQl1bmlmb3JtIGZsb2F0IHVDaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdVdhdmluZXNzOwoJCXVuaWZvcm0gZmxvYXQgdUZyZXF1ZW5jeTsKCQl1bmlmb3JtIGZsb2F0IHVSb2RzOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZlYzIgbWlycm9yZWQodmVjMiB2YWx1ZSkgewoJCQl2ZWMyIG0gPSBtb2QodmFsdWUsIDIuMCk7CgkJCXJldHVybiBtaXgobSwgMi4wIC0gbSwgc3RlcCgxLjAsIG0pKTsKCQl9CgoJCXZlYzIgZ2V0Q292ZXJVVih2ZWMyIHV2LCB2ZWMyIHRleHR1cmVTaXplKSB7CgkJCXZlYzIgc2FmZVRleHR1cmUgPSBtYXgodGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7CgkJCXZlYzIgcyA9IHVSZXNvbHV0aW9uIC8gc2FmZVRleHR1cmU7CgkJCWZsb2F0IHNjYWxlID0gbWF4KHMueCwgcy55KTsKCQkJdmVjMiBzY2FsZWRTaXplID0gc2FmZVRleHR1cmUgKiBzY2FsZTsKCQkJdmVjMiBvZmZzZXQgPSAodVJlc29sdXRpb24gLSBzY2FsZWRTaXplKSAqIDAuNTsKCQkJcmV0dXJuICh1diAqIHVSZXNvbHV0aW9uIC0gb2Zmc2V0KSAvIHNjYWxlZFNpemU7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzIgcCA9ICh2VXYgKiAyLjAgLSAxLjApOwoJCQlwLnggKj0gdVJlc29sdXRpb24ueCAvIHVSZXNvbHV0aW9uLnk7CgoJCQlmbG9hdCBhbmdsZSA9IHJhZGlhbnMoNDUuMCk7CgkJCW1hdDIgcm90ID0gbWF0Mihjb3MoYW5nbGUpLCAtc2luKGFuZ2xlKSwgc2luKGFuZ2xlKSwgY29zKGFuZ2xlKSk7CgkJCXZlYzIgcF9yb3QgPSByb3QgKiBwOwoKCQkJZmxvYXQgd2F2ZSA9IHVXYXZpbmVzcyAqIHNpbihwX3JvdC55ICogdUZyZXF1ZW5jeSk7CgkJCWZsb2F0IHJvZF94ID0gZnJhY3QoKHBfcm90LnggKyB3YXZlKSAqIHVSb2RzKSAqIDIuMCAtIDEuMDsKCgkJCWZsb2F0IHJvZF96X3NxID0gMS4wIC0gcm9kX3ggKiByb2RfeDsKCQkJZmxvYXQgcm9kX3ogPSBzcXJ0KG1heChyb2Rfel9zcSwgMC4wKSk7CgoJCQl2ZWMzIG4gPSB2ZWMzKHJvZF94LCAwLjAsIC1yb2Rfeik7CgkJCXZlYzMgcmQgPSB2ZWMzKDAuMCwgMC4wLCAtMS4wKTsKCQkJZmxvYXQgcmVmcmFjdGl2ZV9pbmRleCA9IDAuNjsKCQkJdmVjMyByZWZyYWN0ZWRfcmF5ID0gbWl4KG4sIHJkLCByZWZyYWN0aXZlX2luZGV4KTsKCgkJCWZsb2F0IHpfZGlzdCA9IDAuNSAvIChhYnMocmVmcmFjdGVkX3JheS56KSArIDAuMDAxKTsKCQkJdmVjMyBoaXRfcG9zID0gdmVjMyhwX3JvdCwgMC4wKSArICh6X2Rpc3QgKiB1RGlzdG9ydGlvbikgKiByZWZyYWN0ZWRfcmF5OwoKCQkJbWF0MiByb3RfaW52ID0gbWF0Mihjb3MoLWFuZ2xlKSwgLXNpbigtYW5nbGUpLCBzaW4oLWFuZ2xlKSwgY29zKC1hbmdsZSkpOwoJCQl2ZWMyIHV2X2hpdCA9IHJvdF9pbnYgKiBoaXRfcG9zLnh5OwoKCQkJdXZfaGl0LnggLz0gKHVSZXNvbHV0aW9uLnggLyB1UmVzb2x1dGlvbi55KTsKCQkJdXZfaGl0ID0gdXZfaGl0ICogMC41ICsgMC41OwoKCQkJdmVjMiBjb3ZlclV2ID0gZ2V0Q292ZXJVVih1dl9oaXQsIHVUZXh0dXJlU2l6ZSk7CgoJCQlmbG9hdCB0ID0gdVRpbWUgKiAwLjE7CgkJCXZlYzIgZmxvdyA9IHZlYzIoc2luKHQpLCBjb3ModCAqIDAuOCkpICogMC4wNTsKCQkJZmxvYXQgZGlzcGVyc2lvbiA9IHVDaHJvbWF0aWNBYmVycmF0aW9uOwoKCQkJdmVjMiBjb3ZlclV2RmxvdyA9IG1pcnJvcmVkKGNvdmVyVXYgKyBmbG93KTsKCQkJZmxvYXQgciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgbWlycm9yZWQoY292ZXJVdkZsb3cgKyB2ZWMyKGRpc3BlcnNpb24sIDAuMCkpKS5yOwoJCQlmbG9hdCBnID0gdGV4dHVyZTJEKHVUZXh0dXJlLCBjb3ZlclV2RmxvdykuZzsKCQkJZmxvYXQgYiA9IHRleHR1cmUyRCh1VGV4dHVyZSwgbWlycm9yZWQoY292ZXJVdkZsb3cgLSB2ZWMyKGRpc3BlcnNpb24sIDAuMCkpKS5iOwoKCQkJZmxvYXQgZ19mYWN0b3IgPSAxLjAgLSBhYnMobi56KTsKCQkJZ19mYWN0b3IgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBnX2ZhY3Rvcik7CgkJCWZsb2F0IGdsYXNzID0gZ19mYWN0b3IgKiAwLjAwMjU7CgoJCQl2ZWMzIGZpbmFsQ29sb3IgPSB2ZWMzKHIsIGcsIGIpICsgZ2xhc3M7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZmluYWxDb2xvciwgMS4wKTsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQl1bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJdW5pZm9ybXMudUNocm9tYXRpY0FiZXJyYXRpb24udmFsdWUgPSBjaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm1zLnVXYXZpbmVzcy52YWx1ZSA9IHdhdmluZXNzOwoJCXVuaWZvcm1zLnVGcmVxdWVuY3kudmFsdWUgPSBmcmVxdWVuY3k7CgkJdW5pZm9ybXMudVJvZHMudmFsdWUgPSByb2RzOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRJbWFnZVNvdXJjZSkgcmV0dXJuOwoJCXNldEltYWdlU291cmNlKGltYWdlKTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbWFnZVRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDI1NV0pLAoJCQl3aWR0aDogMSwKCQkJaGVpZ2h0OiAxLAoJCQlmb3JtYXQ6IGdsLlJHQkEsCgkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQltYWdGaWx0ZXI6IGdsLkxJTkVBUiwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBkaXN0b3J0aW9uIH0sCgkJCXVDaHJvbWF0aWNBYmVycmF0aW9uOiB7IHZhbHVlOiBjaHJvbWF0aWNBYmVycmF0aW9uIH0sCgkJCXVXYXZpbmVzczogeyB2YWx1ZTogd2F2aW5lc3MgfSwKCQkJdUZyZXF1ZW5jeTogeyB2YWx1ZTogZnJlcXVlbmN5IH0sCgkJCXVSb2RzOiB7IHZhbHVlOiByb2RzIH0sCgkJfTsKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWxldCBpbWFnZVRva2VuID0gMDsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGltYWdlVG9rZW47CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZVNpemUudmFsdWUuc2V0KAoJCQkJCWltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoIHx8IDEsCgkJCQkJaW1nLm5hdHVyYWxIZWlnaHQgfHwgaW1nLmhlaWdodCB8fCAxLAoJCQkJKTsKCQkJfTsKCQkJaW1nLnNyYyA9IHNvdXJjZTsKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhICogc3BlZWQ7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/glass-slideshow/GlassSlideshow.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9HbGFzc1NsaWRlc2hvd1NjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZSBVUkxzIHRvIGN5Y2xlIHRocm91Z2guCgkJICovCgkJaW1hZ2VzOiBTY2VuZVByb3BzWyJpbWFnZXMiXTsKCQkvKioKCQkgKiBUaGUgY3VycmVudCBpbWFnZSBpbmRleC4gQ2hhbmdlIHRoaXMgdG8gdHJpZ2dlciBhIHRyYW5zaXRpb24uCgkJICogQGRlZmF1bHQgMAoJCSAqLwoJCWluZGV4PzogU2NlbmVQcm9wc1siaW5kZXgiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGluIG1pbGxpc2Vjb25kcy4KCQkgKiBAZGVmYXVsdCAyMDAwCgkJICovCgkJdHJhbnNpdGlvbkR1cmF0aW9uPzogU2NlbmVQcm9wc1sidHJhbnNpdGlvbkR1cmF0aW9uIl07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBnbGFzcyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgY2hyb21hdGljIGFiZXJyYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IFNjZW5lUHJvcHNbImNocm9tYXRpY0FiZXJyYXRpb24iXTsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlyZWZyYWN0aW9uPzogU2NlbmVQcm9wc1sicmVmcmFjdGlvbiJdOwoJCS8qKgoJCSAqIEF1dG9tYXRpY2FsbHkgY3ljbGUgdGhyb3VnaCB0aGUgcHJvdmlkZWQgaW1hZ2VzLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvcGxheT86IGJvb2xlYW47CgkJLyoqCgkJICogRGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgdHJhbnNpdGlvbnMgaW4gbWlsbGlzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDUwMDAKCQkgKi8KCQlhdXRvcGxheUludGVydmFsPzogbnVtYmVyOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlpbWFnZXMsCgkJaW5kZXggPSAwLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQl0cmFuc2l0aW9uRHVyYXRpb24gPSAyMDAwLAoJCWludGVuc2l0eSA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAxLjAsCgkJcmVmcmFjdGlvbiA9IDEuMCwKCQlhdXRvcGxheSA9IHRydWUsCgkJYXV0b3BsYXlJbnRlcnZhbCA9IDUwMDAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgYXV0b3BsYXlJbmRleCA9ICRzdGF0ZSgwKTsKCWxldCBoYXNJbml0aWFsaXplZEF1dG9wbGF5SW5kZXggPSBmYWxzZTsKCgljb25zdCBjdXJyZW50SW5kZXggPSAkZGVyaXZlZChhdXRvcGxheSA/IGF1dG9wbGF5SW5kZXggOiBpbmRleCk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKGhhc0luaXRpYWxpemVkQXV0b3BsYXlJbmRleCkgewoJCQlyZXR1cm47CgkJfQoKCQlhdXRvcGxheUluZGV4ID0gaW5kZXg7CgkJaGFzSW5pdGlhbGl6ZWRBdXRvcGxheUluZGV4ID0gdHJ1ZTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsID0gaW1hZ2VzLmxlbmd0aDsKCgkJaWYgKHRvdGFsID09PSAwKSB7CgkJCWlmIChhdXRvcGxheUluZGV4ICE9PSAwKSB7CgkJCQlhdXRvcGxheUluZGV4ID0gMDsKCQkJfQoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBub3JtYWxpemVkID0gKChhdXRvcGxheUluZGV4ICUgdG90YWwpICsgdG90YWwpICUgdG90YWw7CgoJCWlmIChub3JtYWxpemVkICE9PSBhdXRvcGxheUluZGV4KSB7CgkJCWF1dG9wbGF5SW5kZXggPSBub3JtYWxpemVkOwoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghYXV0b3BsYXkpIHsKCQkJY29uc3QgdG90YWwgPSBpbWFnZXMubGVuZ3RoOwoJCQlpZiAodG90YWwgPT09IDApIHsKCQkJCWlmIChhdXRvcGxheUluZGV4ICE9PSAwKSB7CgkJCQkJYXV0b3BsYXlJbmRleCA9IDA7CgkJCQl9CgkJCQlyZXR1cm47CgkJCX0KCgkJCWNvbnN0IG5vcm1hbGl6ZWQgPSAoKGluZGV4ICUgdG90YWwpICsgdG90YWwpICUgdG90YWw7CgkJCWlmIChub3JtYWxpemVkICE9PSBhdXRvcGxheUluZGV4KSB7CgkJCQlhdXRvcGxheUluZGV4ID0gbm9ybWFsaXplZDsKCQkJfQoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsID0gaW1hZ2VzLmxlbmd0aDsKCQljb25zdCBpc0F1dG9wbGF5aW5nID0gYXV0b3BsYXkgJiYgdG90YWwgPiAxOwoJCWNvbnN0IGRlbGF5ID0gTWF0aC5tYXgoYXV0b3BsYXlJbnRlcnZhbCwgMCk7CgoJCWlmICghaXNBdXRvcGxheWluZykgewoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKCQkJY29uc3QgbGVuZ3RoID0gaW1hZ2VzLmxlbmd0aDsKCQkJaWYgKGxlbmd0aCA9PT0gMCkgewoJCQkJYXV0b3BsYXlJbmRleCA9IDA7CgkJCQlyZXR1cm47CgkJCX0KCQkJYXV0b3BsYXlJbmRleCA9IChhdXRvcGxheUluZGV4ICsgMSkgJSBsZW5ndGg7CgkJfSwgZGVsYXkgfHwgMSk7CgoJCXJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUKCQkJe2ltYWdlc30KCQkJaW5kZXg9e2N1cnJlbnRJbmRleH0KCQkJe3RyYW5zaXRpb25EdXJhdGlvbn0KCQkJe2ludGVuc2l0eX0KCQkJe2Rpc3RvcnRpb259CgkJCXtjaHJvbWF0aWNBYmVycmF0aW9ufQoJCQl7cmVmcmFjdGlvbn0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/glass-slideshow/GlassSlideshowScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbkRlc3Ryb3ksIG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsKCQlDYW1lcmEsCgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlcmVyLAoJCVRleHR1cmUsCgkJVHJhbnNmb3JtLAoJCVRyaWFuZ2xlLAoJCVZlYzIsCgl9IGZyb20gIm9nbCI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqIEFycmF5IG9mIGltYWdlIFVSTHMgdXNlZCBmb3IgdGV4dHVyZXMuICovCgkJaW1hZ2VzOiBzdHJpbmdbXTsKCQkvKiogSW5kZXggb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW1hZ2UuICovCgkJaW5kZXg/OiBudW1iZXI7CgkJLyoqIER1cmF0aW9uIG9mIGEgc2luZ2xlIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzLiAqLwoJCXRyYW5zaXRpb25EdXJhdGlvbj86IG51bWJlcjsKCQkvKiogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyIGZvciB0aGUgc2hhZGVyIGVmZmVjdC4gKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7CgkJLyoqIERpc3RvcnRpb24gc3RyZW5ndGggYXBwbGllZCBkdXJpbmcgdHJhbnNpdGlvbnMuICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKiogQ2hyb21hdGljIGFiZXJyYXRpb24gc3RyZW5ndGggZm9yIHRoZSBzaGFkZXIuICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IG51bWJlcjsKCQkvKiogUmVmcmFjdGlvbiBzdHJlbmd0aCBmb3IgdGhlIHNoYWRlci4gKi8KCQlyZWZyYWN0aW9uPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCWluZGV4ID0gMCwKCQl0cmFuc2l0aW9uRHVyYXRpb24gPSAyMDAwLAoJCWludGVuc2l0eSA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAxLjAsCgkJcmVmcmFjdGlvbiA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCglsZXQgcHJvZ3Jlc3MgPSAkc3RhdGUoeyB2YWx1ZTogMCB9KTsKCWxldCBjdXJyZW50SW5kZXggPSAkc3RhdGUoMCk7CglsZXQgbmV4dEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzVHJhbnNpdGlvbmluZyA9ICRzdGF0ZShmYWxzZSk7CgoJbGV0IHNldEltYWdlU291cmNlcyA9ICRzdGF0ZTwoc291cmNlczogc3RyaW5nW10pID0+IHZvaWQ+KCk7CglsZXQgc2V0VW5pZm9ybVBhcmFtcyA9ICRzdGF0ZTwKCQkobmV4dDogewoJCQlpbnRlbnNpdHk6IG51bWJlcjsKCQkJZGlzdG9ydGlvbjogbnVtYmVyOwoJCQljaHJvbWF0aWNBYmVycmF0aW9uOiBudW1iZXI7CgkJCXJlZnJhY3Rpb246IG51bWJlcjsKCQl9KSA9PiB2b2lkCgk+KCk7CgoJb25EZXN0cm95KCgpID0+IHsKCQlnc2FwLmtpbGxUd2VlbnNPZihwcm9ncmVzcyk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCB0b3RhbEltYWdlcyA9IGltYWdlcy5sZW5ndGg7CgoJCWlmICh0b3RhbEltYWdlcyA9PT0gMCkgewoJCQlpZiAoY3VycmVudEluZGV4ICE9PSAwKSBjdXJyZW50SW5kZXggPSAwOwoJCQlpZiAobmV4dEluZGV4ICE9PSAwKSBuZXh0SW5kZXggPSAwOwoJCQlpc1RyYW5zaXRpb25pbmcgPSBmYWxzZTsKCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQlnc2FwLmtpbGxUd2VlbnNPZihwcm9ncmVzcyk7CgkJCXJldHVybjsKCQl9CgoJCWNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50ID0gKChjdXJyZW50SW5kZXggJSB0b3RhbEltYWdlcykgKyB0b3RhbEltYWdlcykgJSB0b3RhbEltYWdlczsKCQljb25zdCBub3JtYWxpemVkTmV4dCA9ICgobmV4dEluZGV4ICUgdG90YWxJbWFnZXMpICsgdG90YWxJbWFnZXMpICUgdG90YWxJbWFnZXM7CgkJaWYgKG5vcm1hbGl6ZWRDdXJyZW50ICE9PSBjdXJyZW50SW5kZXgpIGN1cnJlbnRJbmRleCA9IG5vcm1hbGl6ZWRDdXJyZW50OwoJCWlmIChub3JtYWxpemVkTmV4dCAhPT0gbmV4dEluZGV4KSBuZXh0SW5kZXggPSBub3JtYWxpemVkTmV4dDsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsSW1hZ2VzID0gaW1hZ2VzLmxlbmd0aDsKCQlpZiAodG90YWxJbWFnZXMgPT09IDApIHJldHVybjsKCgkJY29uc3Qgbm9ybWFsaXplZEluZGV4ID0gKChpbmRleCAlIHRvdGFsSW1hZ2VzKSArIHRvdGFsSW1hZ2VzKSAlIHRvdGFsSW1hZ2VzOwoKCQlpZiAobm9ybWFsaXplZEluZGV4ID09PSBjdXJyZW50SW5kZXggfHwgaXNUcmFuc2l0aW9uaW5nKSB7CgkJCXJldHVybjsKCQl9CgoJCWdzYXAua2lsbFR3ZWVuc09mKHByb2dyZXNzKTsKCQlwcm9ncmVzcy52YWx1ZSA9IDA7CgkJaXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTsKCQluZXh0SW5kZXggPSBub3JtYWxpemVkSW5kZXg7CgoJCWdzYXAudG8ocHJvZ3Jlc3MsIHsKCQkJdmFsdWU6IDEsCgkJCWR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24gLyAxMDAwLAoJCQllYXNlOiAicG93ZXIzLmluT3V0IiwKCQkJb25Db21wbGV0ZTogKCkgPT4gewoJCQkJY3VycmVudEluZGV4ID0gbmV4dEluZGV4OwoJCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQkJaXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7CgkJCX0sCgkJfSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlcykgcmV0dXJuOwoJCXNldEltYWdlU291cmNlcyhpbWFnZXMpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRVbmlmb3JtUGFyYW1zKSByZXR1cm47CgkJc2V0VW5pZm9ybVBhcmFtcyh7CgkJCWludGVuc2l0eSwKCQkJZGlzdG9ydGlvbiwKCQkJY2hyb21hdGljQWJlcnJhdGlvbiwKCQkJcmVmcmFjdGlvbiwKCQl9KTsKCX0pOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTE7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmUyOwoJCXVuaWZvcm0gZmxvYXQgdVByb2dyZXNzOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdVRleHR1cmUxU2l6ZTsKCQl1bmlmb3JtIHZlYzIgdVRleHR1cmUyU2l6ZTsKCgkJdW5pZm9ybSBmbG9hdCB1R2xvYmFsSW50ZW5zaXR5OwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb25TdHJlbmd0aDsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZE11bHRpcGxpZXI7CgkJdW5pZm9ybSBmbG9hdCB1Q29sb3JFbmhhbmNlbWVudDsKCgkJdW5pZm9ybSBmbG9hdCB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdUdsYXNzQnViYmxlQ2xhcml0eTsKCQl1bmlmb3JtIGZsb2F0IHVHbGFzc0VkZ2VHbG93OwoJCXVuaWZvcm0gZmxvYXQgdUdsYXNzTGlxdWlkRmxvdzsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMyBzcmdiVG9MaW5lYXIodmVjMyBjb2xvcikgewoJCQl2ZWMzIGxvdyA9IGNvbG9yIC8gMTIuOTI7CgkJCXZlYzMgaGlnaCA9IHBvdygoY29sb3IgKyAwLjA1NSkgLyAxLjA1NSwgdmVjMygyLjQpKTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wNDA0NSksIGNvbG9yKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyB0ZXh0dXJlU2l6ZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCWZsb2F0IG5vaXNlKHZlYzIgcCkgewoJCQlyZXR1cm4gZnJhY3Qoc2luKGRvdChwLCB2ZWMyKDEyNy4xLCAzMTEuNykpKSAqIDQzNzU4LjU0NTMpOwoJCX0KCgkJZmxvYXQgc21vb3RoTm9pc2UodmVjMiBwKSB7CgkJCXZlYzIgaSA9IGZsb29yKHApOwoJCQl2ZWMyIGYgPSBmcmFjdChwKTsKCQkJZiA9IGYgKiBmICogKDMuMCAtIDIuMCAqIGYpOwoKCQkJcmV0dXJuIG1peCgKCQkJCW1peChub2lzZShpKSwgbm9pc2UoaSArIHZlYzIoMS4wLCAwLjApKSwgZi54KSwKCQkJCW1peChub2lzZShpICsgdmVjMigwLjAsIDEuMCkpLCBub2lzZShpICsgdmVjMigxLjAsIDEuMCkpLCBmLngpLAoJCQkJZi55CgkJCSk7CgkJfQoKCQl2ZWM0IHNhbXBsZUxpbmVhcihzYW1wbGVyMkQgdGV4LCB2ZWMyIHV2KSB7CgkJCXZlYzQgYyA9IHRleHR1cmUyRCh0ZXgsIHV2KTsKCQkJcmV0dXJuIHZlYzQoc3JnYlRvTGluZWFyKGMucmdiKSwgYy5hKTsKCQl9CgoJCXZlYzQgZ2xhc3NFZmZlY3QodmVjMiB1diwgZmxvYXQgcHJvZ3Jlc3MpIHsKCQkJZmxvYXQgZ2xhc3NTdHJlbmd0aCA9IDAuMDggKiB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGggKiB1RGlzdG9ydGlvblN0cmVuZ3RoICogdUdsb2JhbEludGVuc2l0eTsKCQkJZmxvYXQgY2hyb21hdGljQWJlcnJhdGlvbiA9IDAuMDIgKiB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uICogdUdsb2JhbEludGVuc2l0eTsKCQkJZmxvYXQgd2F2ZURpc3RvcnRpb24gPSAwLjAyNSAqIHVEaXN0b3J0aW9uU3RyZW5ndGg7CgkJCWZsb2F0IGNsZWFyQ2VudGVyU2l6ZSA9IDAuMyAqIHVHbGFzc0J1YmJsZUNsYXJpdHk7CgkJCWZsb2F0IHN1cmZhY2VSaXBwbGVzID0gMC4wMDQgKiB1RGlzdG9ydGlvblN0cmVuZ3RoOwoJCQlmbG9hdCBsaXF1aWRGbG93ID0gMC4wMTUgKiB1R2xhc3NMaXF1aWRGbG93ICogdVNwZWVkTXVsdGlwbGllcjsKCQkJZmxvYXQgcmltTGlnaHRXaWR0aCA9IDAuMDU7CgkJCWZsb2F0IGdsYXNzRWRnZVdpZHRoID0gMC4wMjU7CgoJCQlmbG9hdCBicmlnaHRuZXNzUGhhc2UgPSBzbW9vdGhzdGVwKDAuOCwgMS4wLCBwcm9ncmVzcyk7CgkJCWZsb2F0IHJpbUxpZ2h0SW50ZW5zaXR5ID0gMC4wOCAqICgxLjAgLSBicmlnaHRuZXNzUGhhc2UpICogdUdsYXNzRWRnZUdsb3cgKiB1R2xvYmFsSW50ZW5zaXR5OwoJCQlmbG9hdCBnbGFzc0VkZ2VPcGFjaXR5ID0gMC4wNiAqICgxLjAgLSBicmlnaHRuZXNzUGhhc2UpICogdUdsYXNzRWRnZUdsb3c7CgoJCQl2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOwoJCQl2ZWMyIHAgPSB1diAqIHVSZXNvbHV0aW9uOwoKCQkJdmVjMiB1djEgPSBnZXRDb3ZlclVWKHV2LCB1VGV4dHVyZTFTaXplKTsKCQkJdmVjMiB1djJfYmFzZSA9IGdldENvdmVyVVYodXYsIHVUZXh0dXJlMlNpemUpOwoKCQkJZmxvYXQgbWF4UmFkaXVzID0gbGVuZ3RoKHVSZXNvbHV0aW9uKSAqIDAuODU7CgkJCWZsb2F0IGJ1YmJsZVJhZGl1cyA9IHByb2dyZXNzICogbWF4UmFkaXVzOwoJCQl2ZWMyIHNwaGVyZUNlbnRlciA9IGNlbnRlciAqIHVSZXNvbHV0aW9uOwoKCQkJZmxvYXQgZGlzdCA9IGxlbmd0aChwIC0gc3BoZXJlQ2VudGVyKTsKCQkJZmxvYXQgbm9ybWFsaXplZERpc3QgPSBkaXN0IC8gbWF4KGJ1YmJsZVJhZGl1cywgMC4wMDEpOwoJCQl2ZWMyIGRpcmVjdGlvbiA9IChkaXN0ID4gMC4wKSA/IChwIC0gc3BoZXJlQ2VudGVyKSAvIGRpc3QgOiB2ZWMyKDAuMCk7CgkJCWZsb2F0IGluc2lkZSA9IHNtb290aHN0ZXAoYnViYmxlUmFkaXVzICsgMy4wLCBidWJibGVSYWRpdXMgLSAzLjAsIGRpc3QpOwoKCQkJZmxvYXQgZGlzdGFuY2VGYWN0b3IgPSBzbW9vdGhzdGVwKGNsZWFyQ2VudGVyU2l6ZSwgMS4wLCBub3JtYWxpemVkRGlzdCk7CgkJCWZsb2F0IHRpbWUgPSBwcm9ncmVzcyAqIDUuMCAqIHVTcGVlZE11bHRpcGxpZXI7CgoJCQl2ZWMyIGxpcXVpZFN1cmZhY2UgPSB2ZWMyKAoJCQkJc21vb3RoTm9pc2UodXYgKiAxMDAuMCArIHRpbWUgKiAwLjMpLAoJCQkJc21vb3RoTm9pc2UodXYgKiAxMDAuMCArIHRpbWUgKiAwLjIgKyA1MC4wKQoJCQkpIC0gMC41OwoJCQlsaXF1aWRTdXJmYWNlICo9IHN1cmZhY2VSaXBwbGVzICogZGlzdGFuY2VGYWN0b3I7CgoJCQl2ZWMyIGRpc3RvcnRlZFVWID0gdXYyX2Jhc2U7CgkJCWlmIChpbnNpZGUgPiAwLjApIHsKCQkJCWZsb2F0IHJlZnJhY3Rpb25PZmZzZXQgPSBnbGFzc1N0cmVuZ3RoICogcG93KGRpc3RhbmNlRmFjdG9yLCAxLjUpOwoJCQkJdmVjMiBmbG93RGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbiArIHZlYzIoc2luKHRpbWUpLCBjb3ModGltZSAqIDAuNykpICogMC4zKTsKCQkJCWRpc3RvcnRlZFVWIC09IGZsb3dEaXJlY3Rpb24gKiByZWZyYWN0aW9uT2Zmc2V0OwoKCQkJCWZsb2F0IHdhdmUxID0gc2luKG5vcm1hbGl6ZWREaXN0ICogMjIuMCAtIHRpbWUgKiAzLjUpOwoJCQkJZmxvYXQgd2F2ZTIgPSBzaW4obm9ybWFsaXplZERpc3QgKiAzNS4wICsgdGltZSAqIDIuOCkgKiAwLjc7CgkJCQlmbG9hdCB3YXZlMyA9IHNpbihub3JtYWxpemVkRGlzdCAqIDUwLjAgLSB0aW1lICogNC4yKSAqIDAuNTsKCQkJCWZsb2F0IGNvbWJpbmVkV2F2ZSA9ICh3YXZlMSArIHdhdmUyICsgd2F2ZTMpIC8gMy4wOwoKCQkJCWZsb2F0IHdhdmVPZmZzZXQgPSBjb21iaW5lZFdhdmUgKiB3YXZlRGlzdG9ydGlvbiAqIGRpc3RhbmNlRmFjdG9yOwoJCQkJZGlzdG9ydGVkVVYgLT0gZGlyZWN0aW9uICogd2F2ZU9mZnNldCArIGxpcXVpZFN1cmZhY2U7CgoJCQkJdmVjMiBmbG93T2Zmc2V0ID0gdmVjMigKCQkJCQlzaW4odGltZSArIG5vcm1hbGl6ZWREaXN0ICogMTAuMCksCgkJCQkJY29zKHRpbWUgKiAwLjggKyBub3JtYWxpemVkRGlzdCAqIDguMCkKCQkJCSkgKiBsaXF1aWRGbG93ICogZGlzdGFuY2VGYWN0b3IgKiBpbnNpZGU7CgkJCQlkaXN0b3J0ZWRVViArPSBmbG93T2Zmc2V0OwoJCQl9CgoJCQl2ZWM0IG5ld0ltZzsKCQkJaWYgKGluc2lkZSA+IDAuMCkgewoJCQkJZmxvYXQgYWJlcnJhdGlvbk9mZnNldCA9IGNocm9tYXRpY0FiZXJyYXRpb24gKiBwb3coZGlzdGFuY2VGYWN0b3IsIDEuMik7CgoJCQkJdmVjMiB1dl9yID0gZGlzdG9ydGVkVVYgKyBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMS4yOwoJCQkJdmVjMiB1dl9nID0gZGlzdG9ydGVkVVYgKyBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMC4yOwoJCQkJdmVjMiB1dl9iID0gZGlzdG9ydGVkVVYgLSBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMC44OwoKCQkJCXZlYzMgc2FtcGxlUiA9IHNyZ2JUb0xpbmVhcih0ZXh0dXJlMkQodVRleHR1cmUyLCB1dl9yKS5yZ2IpOwoJCQkJdmVjMyBzYW1wbGVHID0gc3JnYlRvTGluZWFyKHRleHR1cmUyRCh1VGV4dHVyZTIsIHV2X2cpLnJnYik7CgkJCQl2ZWMzIHNhbXBsZUIgPSBzcmdiVG9MaW5lYXIodGV4dHVyZTJEKHVUZXh0dXJlMiwgdXZfYikucmdiKTsKCQkJCW5ld0ltZyA9IHZlYzQoc2FtcGxlUi5yLCBzYW1wbGVHLmcsIHNhbXBsZUIuYiwgMS4wKTsKCQkJfSBlbHNlIHsKCQkJCW5ld0ltZyA9IHNhbXBsZUxpbmVhcih1VGV4dHVyZTIsIHV2Ml9iYXNlKTsKCQkJfQoKCQkJaWYgKGluc2lkZSA+IDAuMCAmJiByaW1MaWdodEludGVuc2l0eSA+IDAuMCkgewoJCQkJZmxvYXQgcmltID0gc21vb3Roc3RlcCgxLjAgLSByaW1MaWdodFdpZHRoLCAxLjAsIG5vcm1hbGl6ZWREaXN0KSAqCgkJCQkJCQkoMS4wIC0gc21vb3Roc3RlcCgxLjAsIDEuMDEsIG5vcm1hbGl6ZWREaXN0KSk7CgkJCQluZXdJbWcucmdiICs9IHJpbSAqIHJpbUxpZ2h0SW50ZW5zaXR5OwoKCQkJCWZsb2F0IGVkZ2UgPSBzbW9vdGhzdGVwKDEuMCAtIGdsYXNzRWRnZVdpZHRoLCAxLjAsIG5vcm1hbGl6ZWREaXN0KSAqCgkJCQkJCQkgKDEuMCAtIHNtb290aHN0ZXAoMS4wLCAxLjAxLCBub3JtYWxpemVkRGlzdCkpOwoJCQkJbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCB2ZWMzKDEuMCksIGVkZ2UgKiBnbGFzc0VkZ2VPcGFjaXR5KTsKCQkJfQoKCQkJbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCBuZXdJbWcucmdiICogMS4yLCAodUNvbG9yRW5oYW5jZW1lbnQgLSAxLjApICogMC41KTsKCgkJCXZlYzQgY3VycmVudEltZyA9IHNhbXBsZUxpbmVhcih1VGV4dHVyZTEsIHV2MSk7CgoJCQlpZiAocHJvZ3Jlc3MgPiAwLjk1KSB7CgkJCQl2ZWM0IHB1cmVOZXdJbWcgPSBzYW1wbGVMaW5lYXIodVRleHR1cmUyLCB1djJfYmFzZSk7CgkJCQlmbG9hdCBlbmRUcmFuc2l0aW9uID0gKHByb2dyZXNzIC0gMC45NSkgLyAwLjA1OwoJCQkJbmV3SW1nID0gbWl4KG5ld0ltZywgcHVyZU5ld0ltZywgZW5kVHJhbnNpdGlvbik7CgkJCX0KCgkJCXJldHVybiBtaXgoY3VycmVudEltZywgbmV3SW1nLCBpbnNpZGUpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IG91dENvbG9yID0gZ2xhc3NFZmZlY3QodlV2LCB1UHJvZ3Jlc3MpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihvdXRDb2xvci5yZ2IpLCBvdXRDb2xvci5hKTsKCQl9CglgOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBjcmVhdGVQbGFjZWhvbGRlclRleHR1cmUgPSAoKSA9PgoJCQluZXcgVGV4dHVyZShnbCwgewoJCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJCXdpZHRoOiAxLAoJCQkJaGVpZ2h0OiAxLAoJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJCWZsaXBZOiB0cnVlLAoJCQl9KTsKCgkJY29uc3QgcGxhY2Vob2xkZXJUZXh0dXJlID0gY3JlYXRlUGxhY2Vob2xkZXJUZXh0dXJlKCk7CgkJbGV0IHNsaWRlVGV4dHVyZXM6IFRleHR1cmVbXSA9IFtdOwoJCWxldCBpbWFnZUxvYWRUb2tlbiA9IDA7CgoJCWNvbnN0IGRpc3Bvc2VUZXh0dXJlID0gKHRleHR1cmU6IFRleHR1cmUpID0+IHsKCQkJaWYgKHRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlLnRleHR1cmUpOwoJCX07CgoJCWNvbnN0IGxvYWRUZXh0dXJlRnJvbVNvdXJjZSA9IChzb3VyY2U6IHN0cmluZywgdG9rZW46IG51bWJlcikgPT4gewoJCQljb25zdCB0ZXh0dXJlID0gY3JlYXRlUGxhY2Vob2xkZXJUZXh0dXJlKCk7CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VMb2FkVG9rZW4pIHJldHVybjsKCQkJCXRleHR1cmUuaW1hZ2UgPSBpbWc7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJCXJldHVybiB0ZXh0dXJlOwoJCX07CgoJCWNvbnN0IHJlcGxhY2VUZXh0dXJlcyA9IChzb3VyY2VzOiBzdHJpbmdbXSkgPT4gewoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGltYWdlTG9hZFRva2VuOwoJCQlzbGlkZVRleHR1cmVzLmZvckVhY2goZGlzcG9zZVRleHR1cmUpOwoJCQlzbGlkZVRleHR1cmVzID0gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gbG9hZFRleHR1cmVGcm9tU291cmNlKHNvdXJjZSwgdG9rZW4pKTsKCQl9OwoJCXNldEltYWdlU291cmNlcyA9IHJlcGxhY2VUZXh0dXJlczsKCQlyZXBsYWNlVGV4dHVyZXMoaW1hZ2VzKTsKCgkJY29uc3QgZ2V0VGV4dHVyZVNpemUgPSAodGV4dHVyZTogVGV4dHVyZSk6IFtudW1iZXIsIG51bWJlcl0gPT4gewoJCQljb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2UgYXMKCQkJCXwgeyB3aWR0aD86IG51bWJlcjsgaGVpZ2h0PzogbnVtYmVyOyBuYXR1cmFsV2lkdGg/OiBudW1iZXI7IG5hdHVyYWxIZWlnaHQ/OiBudW1iZXIgfQoJCQkJfCBudWxsCgkJCQl8IHVuZGVmaW5lZDsKCQkJaWYgKCFpbWFnZSkgcmV0dXJuIFsxLCAxXTsKCQkJY29uc3Qgd2lkdGggPSBpbWFnZS5uYXR1cmFsV2lkdGggPz8gaW1hZ2Uud2lkdGggPz8gMTsKCQkJY29uc3QgaGVpZ2h0ID0gaW1hZ2UubmF0dXJhbEhlaWdodCA/PyBpbWFnZS5oZWlnaHQgPz8gMTsKCQkJcmV0dXJuIFtNYXRoLm1heCgxLCB3aWR0aCksIE1hdGgubWF4KDEsIGhlaWdodCldOwoJCX07CgoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUZXh0dXJlMTogeyB2YWx1ZTogcGxhY2Vob2xkZXJUZXh0dXJlIH0sCgkJCXVUZXh0dXJlMjogeyB2YWx1ZTogcGxhY2Vob2xkZXJUZXh0dXJlIH0sCgkJCXVQcm9ncmVzczogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmUxU2l6ZTogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmUyU2l6ZTogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUdsb2JhbEludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJCXVEaXN0b3J0aW9uU3RyZW5ndGg6IHsgdmFsdWU6IGRpc3RvcnRpb24gfSwKCQkJdVNwZWVkTXVsdGlwbGllcjogeyB2YWx1ZTogMS4wIH0sCgkJCXVDb2xvckVuaGFuY2VtZW50OiB7IHZhbHVlOiAxLjAgfSwKCQkJdUdsYXNzUmVmcmFjdGlvblN0cmVuZ3RoOiB7IHZhbHVlOiByZWZyYWN0aW9uIH0sCgkJCXVHbGFzc0Nocm9tYXRpY0FiZXJyYXRpb246IHsgdmFsdWU6IGNocm9tYXRpY0FiZXJyYXRpb24gfSwKCQkJdUdsYXNzQnViYmxlQ2xhcml0eTogeyB2YWx1ZTogMS4wIH0sCgkJCXVHbGFzc0VkZ2VHbG93OiB7IHZhbHVlOiAxLjAgfSwKCQkJdUdsYXNzTGlxdWlkRmxvdzogeyB2YWx1ZTogMS4wIH0sCgkJfTsKCgkJc2V0VW5pZm9ybVBhcmFtcyA9IChuZXh0KSA9PiB7CgkJCWxvY2FsVW5pZm9ybXMudUdsb2JhbEludGVuc2l0eS52YWx1ZSA9IG5leHQuaW50ZW5zaXR5OwoJCQlsb2NhbFVuaWZvcm1zLnVEaXN0b3J0aW9uU3RyZW5ndGgudmFsdWUgPSBuZXh0LmRpc3RvcnRpb247CgkJCWxvY2FsVW5pZm9ybXMudUdsYXNzQ2hyb21hdGljQWJlcnJhdGlvbi52YWx1ZSA9IG5leHQuY2hyb21hdGljQWJlcnJhdGlvbjsKCQkJbG9jYWxVbmlmb3Jtcy51R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGgudmFsdWUgPSBuZXh0LnJlZnJhY3Rpb247CgkJfTsKCQlzZXRVbmlmb3JtUGFyYW1zKHsgaW50ZW5zaXR5LCBkaXN0b3J0aW9uLCBjaHJvbWF0aWNBYmVycmF0aW9uLCByZWZyYWN0aW9uIH0pOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0sIGZydXN0dW1DdWxsZWQ6IGZhbHNlIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWNvbnN0IHRpY2sgPSAoKSA9PiB7CgkJCWNvbnN0IHRvdGFsID0gc2xpZGVUZXh0dXJlcy5sZW5ndGg7CgkJCWNvbnN0IHNhZmVDdXJyZW50ID0gdG90YWwgPiAwID8gKChjdXJyZW50SW5kZXggJSB0b3RhbCkgKyB0b3RhbCkgJSB0b3RhbCA6IDA7CgkJCWNvbnN0IHNhZmVOZXh0ID0gdG90YWwgPiAwID8gKChuZXh0SW5kZXggJSB0b3RhbCkgKyB0b3RhbCkgJSB0b3RhbCA6IHNhZmVDdXJyZW50OwoKCQkJY29uc3QgdGV4MSA9IHRvdGFsID4gMCA/IHNsaWRlVGV4dHVyZXNbc2FmZUN1cnJlbnRdIDogcGxhY2Vob2xkZXJUZXh0dXJlOwoJCQljb25zdCB0ZXgyID0gdG90YWwgPiAwID8gc2xpZGVUZXh0dXJlc1tzYWZlTmV4dF0gOiBwbGFjZWhvbGRlclRleHR1cmU7CgoJCQlsb2NhbFVuaWZvcm1zLnVQcm9ncmVzcy52YWx1ZSA9IHByb2dyZXNzLnZhbHVlOwoJCQlsb2NhbFVuaWZvcm1zLnVUZXh0dXJlMS52YWx1ZSA9IHRleDE7CgkJCWxvY2FsVW5pZm9ybXMudVRleHR1cmUyLnZhbHVlID0gdGV4MjsKCgkJCWNvbnN0IFt3MSwgaDFdID0gZ2V0VGV4dHVyZVNpemUodGV4MSk7CgkJCWNvbnN0IFt3MiwgaDJdID0gZ2V0VGV4dHVyZVNpemUodGV4Mik7CgkJCWxvY2FsVW5pZm9ybXMudVRleHR1cmUxU2l6ZS52YWx1ZS5zZXQodzEsIGgxKTsKCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZTJTaXplLnZhbHVlLnNldCh3MiwgaDIpOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSwgY2xlYXI6IHRydWUgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJc2V0SW1hZ2VTb3VyY2VzID0gdW5kZWZpbmVkOwoJCQlzZXRVbmlmb3JtUGFyYW1zID0gdW5kZWZpbmVkOwoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoKCQkJc2xpZGVUZXh0dXJlcy5mb3JFYWNoKGRpc3Bvc2VUZXh0dXJlKTsKCQkJZGlzcG9zZVRleHR1cmUocGxhY2Vob2xkZXJUZXh0dXJlKTsKCgkJCXByb2dyYW0ucmVtb3ZlKCk7CgkJCWdlb21ldHJ5LnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/glitter-cloth/GlitterCloth.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsaXR0ZXJDbG90aFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBQcmltYXJ5IGNvbG9yIHVzZWQgdG8gZGVyaXZlIHRoZSBmdWxsIHNoYWRlciBwYWxldHRlLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgZnVsbCBzaGFkZXIgYW5pbWF0aW9uIHRpbWVsaW5lLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBHbG9iYWwgaW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBiYXNlIHNpbGsgY29sb3IuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJYnJpZ2h0bmVzcz86IFNjZW5lUHJvcHNbImJyaWdodG5lc3MiXTsKCQkvKioKCQkgKiBPcGFjaXR5IG9mIHRoZSB2aXZpZC1saWdodCBnbGl0dGVyIGJsZW5kLgoJCSAqIEBkZWZhdWx0IDAuMDIKCQkgKi8KCQlibGVuZFN0cmVuZ3RoPzogU2NlbmVQcm9wc1siYmxlbmRTdHJlbmd0aCJdOwoJCS8qKgoJCSAqIFNwYXRpYWwgc2NhbGUgZm9yIHNpbXBsZXggbm9pc2Ugc2FtcGxpbmcuCgkJICogTG93ZXIgdmFsdWVzIGNyZWF0ZSBmaW5lciBnbGl0dGVyLgoJCSAqIEBkZWZhdWx0IDQuMAoJCSAqLwoJCW5vaXNlU2NhbGU/OiBTY2VuZVByb3BzWyJub2lzZVNjYWxlIl07CgkJLyoqCgkJICogQmFzZSBzdHJlbmd0aCBvZiB2aWduZXR0ZSBmYWxsb2ZmLgoJCSAqIEBkZWZhdWx0IDE1LjAKCQkgKi8KCQl2aWduZXR0ZVN0cmVuZ3RoPzogU2NlbmVQcm9wc1sidmlnbmV0dGVTdHJlbmd0aCJdOwoJCS8qKgoJCSAqIFZpZ25ldHRlIGN1cnZlIGV4cG9uZW50LgoJCSAqIExvd2VyIHZhbHVlcyBwcm9kdWNlIGEgc29mdGVyIHJvbGxvZmYuCgkJICogQGRlZmF1bHQgMC4yNQoJCSAqLwoJCXZpZ25ldHRlUG93ZXI/OiBTY2VuZVByb3BzWyJ2aWduZXR0ZVBvd2VyIl07CgkJLyoqCgkJICogT3BhY2l0eSBvZiB0aGUgdmlnbmV0dGUgZWZmZWN0LgoJCSAqIGAwYCBkaXNhYmxlcyB2aWduZXR0ZSBpbmZsdWVuY2UsIGAxYCBhcHBsaWVzIGZ1bGwgdmlnbmV0dGUuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJdmlnbmV0dGVPcGFjaXR5PzogU2NlbmVQcm9wc1sidmlnbmV0dGVPcGFjaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlicmlnaHRuZXNzID0gMS4wLAoJCWJsZW5kU3RyZW5ndGggPSAwLjAyLAoJCW5vaXNlU2NhbGUgPSA0LjAsCgkJdmlnbmV0dGVTdHJlbmd0aCA9IDE1LjAsCgkJdmlnbmV0dGVQb3dlciA9IDAuMjUsCgkJdmlnbmV0dGVPcGFjaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtzcGVlZH0KCQkJe2JyaWdodG5lc3N9CgkJCXtibGVuZFN0cmVuZ3RofQoJCQl7bm9pc2VTY2FsZX0KCQkJe3ZpZ25ldHRlU3RyZW5ndGh9CgkJCXt2aWduZXR0ZVBvd2VyfQoJCQl7dmlnbmV0dGVPcGFjaXR5fQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", + "components/glitter-cloth/GlitterClothScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFByaW1hcnkgY29sb3IgdXNlZCB0byBkZXJpdmUgdGhlIGZ1bGwgc2hhZGVyIHBhbGV0dGUuCgkJICogQGRlZmF1bHQgIiNGRjY5MDAiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIFNwZWVkIG11bHRpcGxpZXIgZm9yIHRoZSBmdWxsIHNoYWRlciBhbmltYXRpb24gdGltZWxpbmUuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyIGZvciB0aGUgYmFzZSBzaWxrIGNvbG9yLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWJyaWdodG5lc3M/OiBudW1iZXI7CgkJLyoqCgkJICogT3BhY2l0eSBvZiB0aGUgdml2aWQtbGlnaHQgZ2xpdHRlciBibGVuZC4KCQkgKiBAZGVmYXVsdCAwLjAyCgkJICovCgkJYmxlbmRTdHJlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBTcGF0aWFsIHNjYWxlIGZvciBzaW1wbGV4IG5vaXNlIHNhbXBsaW5nLgoJCSAqIExvd2VyIHZhbHVlcyBjcmVhdGUgZmluZXIgZ2xpdHRlci4KCQkgKiBAZGVmYXVsdCA0LjAKCQkgKi8KCQlub2lzZVNjYWxlPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2Ugc3RyZW5ndGggb2YgdmlnbmV0dGUgZmFsbG9mZi4KCQkgKiBAZGVmYXVsdCAxNS4wCgkJICovCgkJdmlnbmV0dGVTdHJlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBWaWduZXR0ZSBjdXJ2ZSBleHBvbmVudC4KCQkgKiBMb3dlciB2YWx1ZXMgcHJvZHVjZSBhIHNvZnRlciByb2xsb2ZmLgoJCSAqIEBkZWZhdWx0IDAuMjUKCQkgKi8KCQl2aWduZXR0ZVBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIE9wYWNpdHkgb2YgdGhlIHZpZ25ldHRlIGVmZmVjdC4KCQkgKiBgMGAgZGlzYWJsZXMgdmlnbmV0dGUgaW5mbHVlbmNlLCBgMWAgYXBwbGllcyBmdWxsIHZpZ25ldHRlLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXZpZ25ldHRlT3BhY2l0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yID0gIiNGRjY5MDAiLAoJCXNwZWVkID0gMS4wLAoJCWJyaWdodG5lc3MgPSAxLjAsCgkJYmxlbmRTdHJlbmd0aCA9IDAuMDIsCgkJbm9pc2VTY2FsZSA9IDQuMCwKCQl2aWduZXR0ZVN0cmVuZ3RoID0gMTUuMCwKCQl2aWduZXR0ZVBvd2VyID0gMC4yNSwKCQl2aWduZXR0ZU9wYWNpdHkgPSAxLjAsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXVUaW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVQcmltYXJ5Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QWNjZW50Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1U2hhZG93Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1U3BlZWQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVCcmlnaHRuZXNzOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1QmxlbmRTdHJlbmd0aDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdU5vaXNlU2NhbGU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVWaWduZXR0ZVN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1VmlnbmV0dGVQb3dlcjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVZpZ25ldHRlT3BhY2l0eTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9OwoKCWNvbnN0IERFRkFVTFRfUFJJTUFSWTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzEsIDEwNSAvIDI1NSwgMF07CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTxVbmlmb3JtU3RhdGU+KCk7CgoJY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCgljb25zdCBub3JtYWxpemVUcmlwbGV0ID0gKAoJCXI6IG51bWJlciwKCQlnOiBudW1iZXIsCgkJYjogbnVtYmVyLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHIsIGcsIGIpID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFtjbGFtcDAxKHIgLyBzY2FsZSksIGNsYW1wMDEoZyAvIHNjYWxlKSwgY2xhbXAwMShiIC8gc2NhbGUpXTsKCX07CgoJY29uc3QgcGFyc2VIZXhDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJY29uc3QgaGV4ID0gdmFsdWUucmVwbGFjZSgiIyIsICIiKS50cmltKCk7CgkJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleFsxXSArIGhleFsxXSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDAsIDIpLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCXJldHVybiBudWxsOwoJfTsKCglsZXQgY3NzQ29sb3JDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsIHwgdW5kZWZpbmVkOwoJY29uc3QgcGFyc2VDc3NDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwoJCWlmIChjc3NDb2xvckNvbnRleHQgPT09IHVuZGVmaW5lZCkgewoJCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQkJcGFyc2VyQ2FudmFzLndpZHRoID0gMTsKCQkJcGFyc2VyQ2FudmFzLmhlaWdodCA9IDE7CgkJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJCX0KCQlpZiAoIWNzc0NvbG9yQ29udGV4dCkgcmV0dXJuIG51bGw7CgoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7CgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlOwoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBjc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlOwoKCQlpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQkJcmV0dXJuIHBhcnNlSGV4Q29sb3Iobm9ybWFsaXplZCk7CgkJfQoKCQljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CgkJaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7CgkJY29uc3QgcGFydHMgPSBtYXRjaFsxXQoJCQkuc3BsaXQoIiwiKQoJCQkubWFwKChwYXJ0KSA9PiBOdW1iZXIucGFyc2VGbG9hdChwYXJ0LnRyaW0oKSkpCgkJCS5maWx0ZXIoKHBhcnQpID0+IE51bWJlci5pc0Zpbml0ZShwYXJ0KSk7CgkJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQlpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJCWNvbnN0IGludCA9IE1hdGgubWluKDB4ZmZmZmZmLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHZhbHVlKSkpOwoJCQlyZXR1cm4gWwoJCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJCSgoaW50ID4+IDgpICYgMjU1KSAvIDI1NSwKCQkJCShpbnQgJiAyNTUpIC8gMjU1LAoJCQldOwoJCX0KCgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQkJY29uc3QgcGFyc2VkID0gdHJpbW1lZC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcih0cmltbWVkKQoJCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJCX0KCgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCgkJaWYgKAoJCQl2YWx1ZSAmJgoJCQl0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmCgkJCSJyIiBpbiB2YWx1ZSAmJgoJCQkiZyIgaW4gdmFsdWUgJiYKCQkJImIiIGluIHZhbHVlCgkJKSB7CgkJCWNvbnN0IHJnYiA9IHZhbHVlIGFzIHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChyZ2IuciwgcmdiLmcsIHJnYi5iKTsKCQl9CgoJCXJldHVybiBmYWxsYmFjazsKCX07CgoJY29uc3QgdG9MaW5lYXJUcmlwbGV0ID0gKAoJCXZhbHVlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gWwoJCXNyZ2JUb0xpbmVhcih2YWx1ZVswXSksCgkJc3JnYlRvTGluZWFyKHZhbHVlWzFdKSwKCQlzcmdiVG9MaW5lYXIodmFsdWVbMl0pLAoJXTsKCgljb25zdCByZ2JUb0hzbCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IHsgaDogbnVtYmVyOyBzOiBudW1iZXI7IGw6IG51bWJlciB9ID0+IHsKCQljb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTsKCQljb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTsKCQljb25zdCBsID0gKG1heCArIG1pbikgKiAwLjU7CgoJCWlmIChtYXggPT09IG1pbikgcmV0dXJuIHsgaDogMCwgczogMCwgbCB9OwoKCQljb25zdCBkID0gbWF4IC0gbWluOwoJCWNvbnN0IHMgPSBsID4gMC41ID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKTsKCQlsZXQgaCA9IDA7CgoJCXN3aXRjaCAobWF4KSB7CgkJCWNhc2UgcjoKCQkJCWggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsKCQkJCWJyZWFrOwoJCQljYXNlIGc6CgkJCQloID0gKGIgLSByKSAvIGQgKyAyOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQloID0gKHIgLSBnKSAvIGQgKyA0OwoJCQkJYnJlYWs7CgkJfQoKCQloIC89IDY7CgkJcmV0dXJuIHsgaCwgcywgbCB9OwoJfTsKCgljb25zdCBodWUycmdiID0gKHA6IG51bWJlciwgcTogbnVtYmVyLCB0SW5wdXQ6IG51bWJlcikgPT4gewoJCWxldCB0ID0gdElucHV0OwoJCWlmICh0IDwgMCkgdCArPSAxOwoJCWlmICh0ID4gMSkgdCAtPSAxOwoJCWlmICh0IDwgMSAvIDYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0OwoJCWlmICh0IDwgMSAvIDIpIHJldHVybiBxOwoJCWlmICh0IDwgMiAvIDMpIHJldHVybiBwICsgKHEgLSBwKSAqICgyIC8gMyAtIHQpICogNjsKCQlyZXR1cm4gcDsKCX07CgoJY29uc3QgaHNsVG9SZ2IgPSAoCgkJaDogbnVtYmVyLAoJCXM6IG51bWJlciwKCQlsOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmIChzID09PSAwKSByZXR1cm4gW2wsIGwsIGxdOwoJCWNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzOwoJCWNvbnN0IHAgPSAyICogbCAtIHE7CgkJcmV0dXJuIFsKCQkJaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpLAoJCQlodWUycmdiKHAsIHEsIGgpLAoJCQlodWUycmdiKHAsIHEsIGggLSAxIC8gMyksCgkJXTsKCX07CgoJY29uc3QgZGVyaXZlUGFsZXR0ZSA9ICgKCQlwcmltYXJ5OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiB7CgkJYWNjZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07CgkJc2hhZG93OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07Cgl9ID0+IHsKCQljb25zdCBoc2wgPSByZ2JUb0hzbChwcmltYXJ5WzBdLCBwcmltYXJ5WzFdLCBwcmltYXJ5WzJdKTsKCQljb25zdCBhY2NlbnQgPSBoc2xUb1JnYigKCQkJKGhzbC5oICsgMC4wNCkgJSAxLAoJCQljbGFtcDAxKGhzbC5zICogMS4xKSwKCQkJY2xhbXAwMShoc2wubCAqIDEuMSArIDAuMDQpLAoJCSk7CgkJY29uc3Qgc2hhZG93ID0gaHNsVG9SZ2IoCgkJCWhzbC5oLAoJCQljbGFtcDAxKGhzbC5zICogMC41NSksCgkJCWNsYW1wMDEoaHNsLmwgKiAwLjQ1KSwKCQkpOwoJCXJldHVybiB7IGFjY2VudCwgc2hhZG93IH07Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdVByaW1hcnlDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdUFjY2VudENvbG9yOwoJCXVuaWZvcm0gdmVjMyB1U2hhZG93Q29sb3I7CgkJdW5pZm9ybSBmbG9hdCB1U3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1QnJpZ2h0bmVzczsKCQl1bmlmb3JtIGZsb2F0IHVCbGVuZFN0cmVuZ3RoOwoJCXVuaWZvcm0gZmxvYXQgdU5vaXNlU2NhbGU7CgkJdW5pZm9ybSBmbG9hdCB1VmlnbmV0dGVTdHJlbmd0aDsKCQl1bmlmb3JtIGZsb2F0IHVWaWduZXR0ZVBvd2VyOwoJCXVuaWZvcm0gZmxvYXQgdVZpZ25ldHRlT3BhY2l0eTsKCgkJY29uc3QgZmxvYXQgbm9pc2VTaXplQ29lZmYgPSAwLjYxOwoJCWNvbnN0IGZsb2F0IG5vaXNlRGVuc2l0eSA9IDUzLjA7CgoJCXZlYzMgbW9kMjg5KHZlYzMgeCkgewoJCQlyZXR1cm4geCAtIGZsb29yKHggKiAoMS4wIC8gMjg5LjApKSAqIDI4OS4wOwoJCX0KCgkJdmVjNCBtb2QyODkodmVjNCB4KSB7CgkJCXJldHVybiB4IC0gZmxvb3IoeCAqICgxLjAgLyAyODkuMCkpICogMjg5LjA7CgkJfQoKCQl2ZWM0IHBlcm11dGUodmVjNCB4KSB7CgkJCXJldHVybiBtb2QyODkoKCh4ICogMzQuMCkgKyAxLjApICogeCk7CgkJfQoKCQl2ZWM0IHRheWxvckludlNxcnQodmVjNCByKSB7CgkJCXJldHVybiAxLjc5Mjg0MjkxNDAwMTU5IC0gMC44NTM3MzQ3MjA5NTMxNCAqIHI7CgkJfQoKCQlmbG9hdCBzbm9pc2UodmVjMyB2KSB7CgkJCWNvbnN0IHZlYzIgQyA9IHZlYzIoMS4wIC8gNi4wLCAxLjAgLyAzLjApOwoJCQljb25zdCB2ZWM0IEQgPSB2ZWM0KDAuMCwgMC41LCAxLjAsIDIuMCk7CgoJCQl2ZWMzIGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXl5KSk7CgkJCXZlYzMgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eCk7CgoJCQl2ZWMzIGcgPSBzdGVwKHgwLnl6eCwgeDAueHl6KTsKCQkJdmVjMyBsID0gMS4wIC0gZzsKCQkJdmVjMyBpMSA9IG1pbihnLnh5eiwgbC56eHkpOwoJCQl2ZWMzIGkyID0gbWF4KGcueHl6LCBsLnp4eSk7CgoJCQl2ZWMzIHgxID0geDAgLSBpMSArIEMueHh4OwoJCQl2ZWMzIHgyID0geDAgLSBpMiArIEMueXl5OwoJCQl2ZWMzIHgzID0geDAgLSBELnl5eTsKCgkJCWkgPSBtb2QyODkoaSk7CgkJCXZlYzQgcCA9IHBlcm11dGUocGVybXV0ZShwZXJtdXRlKGkueiArIHZlYzQoMC4wLCBpMS56LCBpMi56LCAxLjApKSArCgkJCQlpLnkgKyB2ZWM0KDAuMCwgaTEueSwgaTIueSwgMS4wKSkgKwoJCQkJaS54ICsgdmVjNCgwLjAsIGkxLngsIGkyLngsIDEuMCkpOwoKCQkJZmxvYXQgbl8gPSAwLjE0Mjg1NzE0Mjg1NzsKCQkJdmVjMyBucyA9IG5fICogRC53eXogLSBELnh6eDsKCgkJCXZlYzQgaiA9IHAgLSA0OS4wICogZmxvb3IocCAqIG5zLnogKiBucy56KTsKCgkJCXZlYzQgeF8gPSBmbG9vcihqICogbnMueik7CgkJCXZlYzQgeV8gPSBmbG9vcihqIC0gNy4wICogeF8pOwoKCQkJdmVjNCB4ID0geF8gKiBucy54ICsgbnMueXl5eTsKCQkJdmVjNCB5ID0geV8gKiBucy54ICsgbnMueXl5eTsKCQkJdmVjNCBoID0gMS4wIC0gYWJzKHgpIC0gYWJzKHkpOwoKCQkJdmVjNCBiMCA9IHZlYzQoeC54eSwgeS54eSk7CgkJCXZlYzQgYjEgPSB2ZWM0KHguencsIHkuencpOwoKCQkJdmVjNCBzMCA9IGZsb29yKGIwKSAqIDIuMCArIDEuMDsKCQkJdmVjNCBzMSA9IGZsb29yKGIxKSAqIDIuMCArIDEuMDsKCQkJdmVjNCBzaCA9IC1zdGVwKGgsIHZlYzQoMC4wKSk7CgoJCQl2ZWM0IGEwID0gYjAueHp5dyArIHMwLnh6eXcgKiBzaC54eHl5OwoJCQl2ZWM0IGExID0gYjEueHp5dyArIHMxLnh6eXcgKiBzaC56end3OwoKCQkJdmVjMyBwMCA9IHZlYzMoYTAueHksIGgueCk7CgkJCXZlYzMgcDEgPSB2ZWMzKGEwLnp3LCBoLnkpOwoJCQl2ZWMzIHAyID0gdmVjMyhhMS54eSwgaC56KTsKCQkJdmVjMyBwMyA9IHZlYzMoYTEuencsIGgudyk7CgoJCQl2ZWM0IG5vcm0gPSB0YXlsb3JJbnZTcXJ0KHZlYzQoZG90KHAwLCBwMCksIGRvdChwMSwgcDEpLCBkb3QocDIsIHAyKSwgZG90KHAzLCBwMykpKTsKCQkJcDAgKj0gbm9ybS54OwoJCQlwMSAqPSBub3JtLnk7CgkJCXAyICo9IG5vcm0uejsKCQkJcDMgKj0gbm9ybS53OwoKCQkJdmVjNCBtID0gbWF4KG5vaXNlU2l6ZUNvZWZmIC0gdmVjNChkb3QoeDAsIHgwKSwgZG90KHgxLCB4MSksIGRvdCh4MiwgeDIpLCBkb3QoeDMsIHgzKSksIDAuMCk7CgkJCW0gPSBtICogbTsKCQkJcmV0dXJuIG5vaXNlRGVuc2l0eSAqIGRvdChtICogbSwgdmVjNChkb3QocDAsIHgwKSwgZG90KHAxLCB4MSksIGRvdChwMiwgeDIpLCBkb3QocDMsIHgzKSkpOwoJCX0KCgkJZmxvYXQgdml2aWRMaWdodChmbG9hdCBzLCBmbG9hdCBkKSB7CgkJCXJldHVybiAocyA8IDAuNSkgPyAxLjAgLSAoMS4wIC0gZCkgLyAoMi4wICogcykgOiBkIC8gKDIuMCAqICgxLjAgLSBzKSk7CgkJfQoKCQl2ZWMzIHZpdmlkTGlnaHQodmVjMyBzLCB2ZWMzIGQpIHsKCQkJdmVjMyBjOwoJCQljLnggPSB2aXZpZExpZ2h0KHMueCwgZC54KTsKCQkJYy55ID0gdml2aWRMaWdodChzLnksIGQueSk7CgkJCWMueiA9IHZpdmlkTGlnaHQocy56LCBkLnopOwoJCQlyZXR1cm4gYzsKCQl9CgoJCWZsb2F0IHZpZ25ldHRlKHZlYzIgdXYsIGZsb2F0IHN0cmVuZ3RoLCBmbG9hdCBwb3dlcikgewoJCQl1diAqPSAxLjAgLSB1di55eDsKCQkJZmxvYXQgdmlnID0gdXYueCAqIHV2LnkgKiBzdHJlbmd0aDsKCQkJdmlnID0gcG93KHZpZywgcG93ZXIpOwoJCQlyZXR1cm4gdmlnOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbkltYWdlKG91dCB2ZWM0IGNvbCwgdmVjMiBmcmFnQ29vcmQpIHsKCQkJZmxvYXQgdGltZSA9IHVUaW1lICogdVNwZWVkOwoJCQl2ZWMyIHJlc29sdXRpb24gPSB1UmVzb2x1dGlvbjsKCgkJCXZlYzIgdXYgPSBmcmFnQ29vcmQgLyByZXNvbHV0aW9uLnk7CgkJCWZsb2F0IHQgPSAwLjUgKiB0aW1lOwoJCQl1di55ICs9IDAuMDMgKiBzaW4oOC4wICogdXYueCAtIHQpOwoKCQkJZmxvYXQgZiA9IDAuNiArIDAuNCAqIHNpbig1LjAgKiAodXYueCArIHV2LnkgKyBjb3MoMy4wICogdXYueCArIDUuMCAqIHV2LnkpICsgMC4wMiAqIHQpICsKCQkJCXNpbigyMC4wICogKHV2LnggKyB1di55IC0gMC4xICogdCkpKTsKCgkJCWZsb2F0IGIgPSB1QnJpZ2h0bmVzczsKCQkJY29sID0gdmVjNCh1UHJpbWFyeUNvbG9yICogYiwgMS4wKSAqIHZlYzQoZik7CgoJCQl1diA9IGZyYWdDb29yZC54eSAvIHJlc29sdXRpb24ueHk7CgkJCWZsb2F0IHZpZyA9IHZpZ25ldHRlKHV2LCB1VmlnbmV0dGVTdHJlbmd0aCwgdVZpZ25ldHRlUG93ZXIpOwoJCQlmbG9hdCB2aWduZXR0ZU1hc2sgPSBtaXgoMS4wLCB2aWcsIHVWaWduZXR0ZU9wYWNpdHkpOwoKCQkJZmxvYXQgZmFkZUxSID0gMC43IC0gYWJzKHV2LnggLSAwLjQpOwoJCQlmbG9hdCBmYWRlVEIgPSAxLjEgLSB1di55OwoJCQl2ZWMzIHBvcyA9IHZlYzModXYgKiB2ZWMyKDMuMCwgMS4wKSAtIHZlYzIoMC4wLCB0aW1lICogMC4wMDAwNSksIHRpbWUgKiAwLjAwNik7CgoJCQlmbG9hdCBuID0gZmFkZUxSICogZmFkZVRCICogc21vb3Roc3RlcCgwLjUwLCAxLjAsIHNub2lzZShwb3MgKiByZXNvbHV0aW9uLnkgLyB1Tm9pc2VTY2FsZSkpICogOC4wOwoJCQl2ZWMzIG5vaXNlR3JleVNoaWZ0ZWQgPSBtaW4oKHZlYzMobikgKyAxLjApIC8gMy4wICsgMC4zLCB2ZWMzKDEuMCkpICogMC45MTsKCgkJCXZlYzMgbWl4ZWQgPSBjb2wueHl6OwoJCQltaXhlZCA9IG1peChjb2wueHl6LCB2aXZpZExpZ2h0KG5vaXNlR3JleVNoaWZ0ZWQsIGNvbC54eXopLCB1QmxlbmRTdHJlbmd0aCk7CgkJCWNvbCA9IHZlYzQobWl4ZWQsIDEuMCkgKiB2aWduZXR0ZU1hc2s7CgoJCQlmbG9hdCBrID0gKHNpbih0aW1lIC8gMS4wKSArIDEuMCkgLyA0LjAgKyAwLjc1OwoJCQljb2wucmdiIC09IHVBY2NlbnRDb2xvciAqICgoMS4wIC0gdXYueSkgKiAwLjEgKiBrKTsKCQkJY29sLnJnYiAtPSB2ZWMzKHVTaGFkb3dDb2xvci5yLCB1U2hhZG93Q29sb3IuZyAqIDAuOCwgdVNoYWRvd0NvbG9yLmIpICogKHV2LnkgLyA4LjApOwoJCQljb2wuYSA9IDEuMDsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCXZlYzIgZnJhZ0Nvb3JkID0gdlV2ICogdVJlc29sdXRpb24ueHk7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIGZyYWdDb29yZCk7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQljb25zdCBwcmltYXJ5U3JnYiA9IHRvUmdiKGNvbG9yLCBERUZBVUxUX1BSSU1BUlkpOwoJCWNvbnN0IHBhbGV0dGVTcmdiID0gZGVyaXZlUGFsZXR0ZShwcmltYXJ5U3JnYik7CgkJY29uc3QgcHJpbWFyeSA9IHRvTGluZWFyVHJpcGxldChwcmltYXJ5U3JnYik7CgkJY29uc3QgYWNjZW50ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLmFjY2VudCk7CgkJY29uc3Qgc2hhZG93ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLnNoYWRvdyk7CgkJdW5pZm9ybXMudVByaW1hcnlDb2xvci52YWx1ZS5zZXQocHJpbWFyeVswXSwgcHJpbWFyeVsxXSwgcHJpbWFyeVsyXSk7CgkJdW5pZm9ybXMudUFjY2VudENvbG9yLnZhbHVlLnNldChhY2NlbnRbMF0sIGFjY2VudFsxXSwgYWNjZW50WzJdKTsKCQl1bmlmb3Jtcy51U2hhZG93Q29sb3IudmFsdWUuc2V0KHNoYWRvd1swXSwgc2hhZG93WzFdLCBzaGFkb3dbMl0pOwoJCXVuaWZvcm1zLnVTcGVlZC52YWx1ZSA9IHNwZWVkOwoJCXVuaWZvcm1zLnVCcmlnaHRuZXNzLnZhbHVlID0gYnJpZ2h0bmVzczsKCQl1bmlmb3Jtcy51QmxlbmRTdHJlbmd0aC52YWx1ZSA9IGJsZW5kU3RyZW5ndGg7CgkJdW5pZm9ybXMudU5vaXNlU2NhbGUudmFsdWUgPSBub2lzZVNjYWxlOwoJCXVuaWZvcm1zLnVWaWduZXR0ZVN0cmVuZ3RoLnZhbHVlID0gdmlnbmV0dGVTdHJlbmd0aDsKCQl1bmlmb3Jtcy51VmlnbmV0dGVQb3dlci52YWx1ZSA9IHZpZ25ldHRlUG93ZXI7CgkJdW5pZm9ybXMudVZpZ25ldHRlT3BhY2l0eS52YWx1ZSA9IHZpZ25ldHRlT3BhY2l0eTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBwcmltYXJ5U3JnYiA9IHRvUmdiKGNvbG9yLCBERUZBVUxUX1BSSU1BUlkpOwoJCWNvbnN0IHBhbGV0dGVTcmdiID0gZGVyaXZlUGFsZXR0ZShwcmltYXJ5U3JnYik7CgkJY29uc3QgcHJpbWFyeSA9IHRvTGluZWFyVHJpcGxldChwcmltYXJ5U3JnYik7CgkJY29uc3QgYWNjZW50ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLmFjY2VudCk7CgkJY29uc3Qgc2hhZG93ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLnNoYWRvdyk7CgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVByaW1hcnlDb2xvcjogeyB2YWx1ZTogbmV3IFZlYzMocHJpbWFyeVswXSwgcHJpbWFyeVsxXSwgcHJpbWFyeVsyXSkgfSwKCQkJdUFjY2VudENvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoYWNjZW50WzBdLCBhY2NlbnRbMV0sIGFjY2VudFsyXSksCgkJCX0sCgkJCXVTaGFkb3dDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKHNoYWRvd1swXSwgc2hhZG93WzFdLCBzaGFkb3dbMl0pLAoJCQl9LAoJCQl1U3BlZWQ6IHsgdmFsdWU6IHNwZWVkIH0sCgkJCXVCcmlnaHRuZXNzOiB7IHZhbHVlOiBicmlnaHRuZXNzIH0sCgkJCXVCbGVuZFN0cmVuZ3RoOiB7IHZhbHVlOiBibGVuZFN0cmVuZ3RoIH0sCgkJCXVOb2lzZVNjYWxlOiB7IHZhbHVlOiBub2lzZVNjYWxlIH0sCgkJCXVWaWduZXR0ZVN0cmVuZ3RoOiB7IHZhbHVlOiB2aWduZXR0ZVN0cmVuZ3RoIH0sCgkJCXVWaWduZXR0ZVBvd2VyOiB7IHZhbHVlOiB2aWduZXR0ZVBvd2VyIH0sCgkJCXVWaWduZXR0ZU9wYWNpdHk6IHsgdmFsdWU6IHZpZ25ldHRlT3BhY2l0eSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCQkJbG9jYWxVbmlmb3Jtcy51VGltZS52YWx1ZSArPSBkZWx0YTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", "components/globe/Globe.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsb2JlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcywgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgdHlwZSB7IEdsb2JlTWFya2VyLCBHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0IH0gZnJvbSAiLi90eXBlcyI7CglpbXBvcnQgeyBOb1RvbmVNYXBwaW5nIH0gZnJvbSAidGhyZWUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgc3BoZXJlLgoJCSAqIEBkZWZhdWx0IDIKCQkgKi8KCQlyYWRpdXM/OiBTY2VuZVByb3BzWyJyYWRpdXMiXTsKCQkvKioKCQkgKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogU2NlbmVQcm9wc1siZnJlc25lbENvbmZpZyJdOwoJCS8qKgoJCSAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdG1vc3BoZXJpYyBoYWxvLgoJCSAqLwoJCWF0bW9zcGhlcmVDb25maWc/OiBTY2VuZVByb3BzWyJhdG1vc3BoZXJlQ29uZmlnIl07CgkJLyoqCgkJICogTnVtYmVyIG9mIHBvaW50cyByZW5kZXJlZCBvbiB0aGUgc3VyZmFjZS4KCQkgKiBAZGVmYXVsdCAxNTAwMAoJCSAqLwoJCXBvaW50Q291bnQ/OiBTY2VuZVByb3BzWyJwb2ludENvdW50Il07CgkJLyoqCgkJICogQ29sb3IgYXBwbGllZCB0byBwb2ludHMgdGhhdCBmYWxsIG9uIGxhbmQuCgkJICogQGRlZmF1bHQgIiNmNzcxMTQiCgkJICovCgkJbGFuZFBvaW50Q29sb3I/OiBTY2VuZVByb3BzWyJsYW5kUG9pbnRDb2xvciJdOwoJCS8qKgoJCSAqIFNpemUgb2YgZWFjaCBwb2ludCBpbiB3b3JsZCB1bml0cy4KCQkgKiBAZGVmYXVsdCAwLjA1CgkJICovCgkJcG9pbnRTaXplPzogU2NlbmVQcm9wc1sicG9pbnRTaXplIl07CgkJLyoqCgkJICogV2hldGhlciB0aGUgZ2xvYmUgc2hvdWxkIGF1dG8tcm90YXRlLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvUm90YXRlPzogU2NlbmVQcm9wc1siYXV0b1JvdGF0ZSJdOwoJCS8qKgoJCSAqIFdoZXRoZXIgdG8gbG9jayB0aGUgY2FtZXJhJ3MgcG9sYXIgYW5nbGUgKHZlcnRpY2FsIHJvdGF0aW9uKS4KCQkgKiBJZiB0cnVlLCBsaW1pdHMgdGhlIHZlcnRpY2FsIHZpZXcgdG8gYSBuYXJyb3cgYmFuZC4KCQkgKiBAZGVmYXVsdCB0cnVlCgkJICovCgkJbG9ja2VkUG9sYXJBbmdsZT86IGJvb2xlYW47CgkJLyoqCgkJICogQXJyYXkgb2YgbWFya2VycyB0byBkaXNwbGF5IG9uIHRoZSBnbG9iZS4KCQkgKi8KCQltYXJrZXJzPzogR2xvYmVNYXJrZXJbXTsKCQkvKioKCQkgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCByZW5kZXJlciBmb3IgbWFya2Vycy4KCQkgKiBSZWNlaXZlcyBtYXJrZXIgZGF0YSBhbmQgdmlzaWJpbGl0eSBjb250ZXh0LgoJCSAqLwoJCW1hcmtlclRvb2x0aXA/OiBTbmlwcGV0PFtHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0XT47CgkJLyoqCgkJICogQ29vcmRpbmF0ZXMgW2xhdCwgbG9uXSB0byBmb2N1cyB0aGUgY2FtZXJhIG9uLgoJCSAqIFdoZW4gc2V0LCBhdXRvLXJvdGF0aW9uIHdpbGwgYmUgZGlzYWJsZWQgdGVtcG9yYXJpbHkuCgkJICovCgkJZm9jdXNPbj86IFtudW1iZXIsIG51bWJlcl0gfCBudWxsOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXJhZGl1cyA9IDIsCgkJZnJlc25lbENvbmZpZywKCQlhdG1vc3BoZXJlQ29uZmlnLAoJCXBvaW50Q291bnQsCgkJbGFuZFBvaW50Q29sb3IsCgkJcG9pbnRTaXplLAoJCWF1dG9Sb3RhdGUgPSB0cnVlLAoJCWxvY2tlZFBvbGFyQW5nbGUgPSB0cnVlLAoJCW1hcmtlcnMgPSBbXSwKCQltYXJrZXJUb29sdGlwLAoJCWZvY3VzT24gPSBudWxsLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUKCQkJCXtyYWRpdXN9CgkJCQl7ZnJlc25lbENvbmZpZ30KCQkJCXthdG1vc3BoZXJlQ29uZmlnfQoJCQkJe3BvaW50Q291bnR9CgkJCQl7bGFuZFBvaW50Q29sb3J9CgkJCQl7cG9pbnRTaXplfQoJCQkJe2F1dG9Sb3RhdGV9CgkJCQl7bG9ja2VkUG9sYXJBbmdsZX0KCQkJCXttYXJrZXJzfQoJCQkJe21hcmtlclRvb2x0aXB9CgkJCQl7Zm9jdXNPbn0KCQkJLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", "components/globe/GlobeScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBPcmJpdENvbnRyb2xzLCBpbnRlcmFjdGl2aXR5IH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgT3JiaXRDb250cm9scyBhcyBPcmJpdENvbnRyb2xzVHlwZSB9IGZyb20gInRocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IGxhbmRUZXh0dXJlVXJsIGZyb20gIi4uL2Fzc2V0cy9sYW5kLXRleHR1cmUucG5nIjsKCWltcG9ydCB0eXBlIHsgR2xvYmVNYXJrZXIsIEdsb2JlTWFya2VyVG9vbHRpcENvbnRleHQgfSBmcm9tICIuL3R5cGVzIjsKCWltcG9ydCBHbG9iZU1hcmtlckl0ZW0gZnJvbSAiLi9HbG9iZU1hcmtlckl0ZW0uc3ZlbHRlIjsKCglpbnRlcmFjdGl2aXR5KCk7CgoJaW50ZXJmYWNlIEZyZXNuZWxDb25maWcgewoJCS8qKgoJCSAqIEJhc2UgYm9keSBjb2xvciBmb3IgdGhlIGdsb2JlIHN1cmZhY2UuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEFjY2VudCBjb2xvciBhcHBsaWVkIGJ5IHRoZSBGcmVzbmVsIHJpbS4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQlyaW1Db2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQ29udHJvbHMgaG93IHRpZ2h0IHRoZSBGcmVzbmVsIHJpbSBodWcgaXMuCgkJICogSGlnaGVyIHZhbHVlcyB5aWVsZCBhIHRoaW5uZXIgb3V0bGluZS4KCQkgKiBAZGVmYXVsdCA2CgkJICovCgkJcmltUG93ZXI/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBGcmVzbmVsIHJpbSBjb2xvci4KCQkgKiBAZGVmYXVsdCAxLjUKCQkgKi8KCQlyaW1JbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJaW50ZXJmYWNlIEF0bW9zcGhlcmVDb25maWcgewoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBhdG1vc3BoZXJlIGdsb3cuCgkJICogQGRlZmF1bHQgIiNGRjY5MDAiCgkJICovCgkJY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIFNpemUgb2YgdGhlIGF0bW9zcGhlcmUgcmVsYXRpdmUgdG8gdGhlIGdsb2JlIHJhZGl1cy4KCQkgKiBAZGVmYXVsdCAxLjEKCQkgKi8KCQlzY2FsZT86IG51bWJlcjsKCQkvKioKCQkgKiBGYWxsb2ZmIHBvd2VyIG9mIHRoZSBnbG93LiBIaWdoZXIgdmFsdWVzIG1lYW4gYSBzaGFycGVyIGVkZ2UuCgkJICogQGRlZmF1bHQgMTIuMAoJCSAqLwoJCXBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2UgY29lZmZpY2llbnQgZm9yIHRoZSBpbnRlbnNpdHkgY2FsY3VsYXRpb24uCgkJICogQ29udHJvbHMgaG93IGZhciB0aGUgZ2xvdyBleHRlbmRzIGlud2FyZHMuCgkJICogQGRlZmF1bHQgMC45CgkJICovCgkJY29lZmZpY2llbnQ/OiBudW1iZXI7CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDIuMAoJCSAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgc3BoZXJlLgoJCSAqIEBkZWZhdWx0IDIKCQkgKi8KCQlyYWRpdXM6IG51bWJlcjsKCQkvKioKCQkgKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogRnJlc25lbENvbmZpZzsKCQkvKioKCQkgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRtb3NwaGVyaWMgaGFsby4KCQkgKi8KCQlhdG1vc3BoZXJlQ29uZmlnPzogQXRtb3NwaGVyZUNvbmZpZzsKCQkvKioKCQkgKiBOdW1iZXIgb2YgcG9pbnRzIHJlbmRlcmVkIGFsb25nIHRoZSBnbG9iZSBzdXJmYWNlLgoJCSAqIEBkZWZhdWx0IDE1MDAwCgkJICovCgkJcG9pbnRDb3VudD86IG51bWJlcjsKCQkvKioKCQkgKiBTaXplIG9mIGVhY2ggcG9pbnQgaW4gd29ybGQgdW5pdHMuCgkJICogQGRlZmF1bHQgMC4wNQoJCSAqLwoJCXBvaW50U2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBDb2xvciBhcHBsaWVkIHRvIHBvaW50cyByZXByZXNlbnRpbmcgbGFuZC4KCQkgKiBAZGVmYXVsdCAiI2Y3NzExNCIKCQkgKi8KCQlsYW5kUG9pbnRDb2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogV2hldGhlciB0aGUgZ2xvYmUgc2hvdWxkIGF1dG8tcm90YXRlLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvUm90YXRlPzogYm9vbGVhbjsKCQkvKioKCQkgKiBXaGV0aGVyIHRvIGxvY2sgdGhlIGNhbWVyYSdzIHBvbGFyIGFuZ2xlLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlsb2NrZWRQb2xhckFuZ2xlPzogYm9vbGVhbjsKCQkvKioKCQkgKiBNYXJrZXJzIHRvIGRpc3BsYXkgb24gdGhlIGdsb2JlLgoJCSAqLwoJCW1hcmtlcnM/OiBHbG9iZU1hcmtlcltdOwoJCS8qKgoJCSAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIHJlbmRlcmVyIGZvciBtYXJrZXJzLgoJCSAqLwoJCW1hcmtlclRvb2x0aXA/OiBTbmlwcGV0PFtHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0XT47CgkJLyoqCgkJICogQ29vcmRpbmF0ZXMgW2xhdCwgbG9uXSB0byBmb2N1cyBvbi4KCQkgKi8KCQlmb2N1c09uPzogW251bWJlciwgbnVtYmVyXSB8IG51bGw7Cgl9CgoJaW50ZXJmYWNlIExhbmRNYXNrRGF0YSB7CgkJd2lkdGg6IG51bWJlcjsKCQloZWlnaHQ6IG51bWJlcjsKCQlkYXRhOiBVaW50OENsYW1wZWRBcnJheTsKCX0KCgljb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDsKCWNvbnN0IEVQU0lMT04gPSAxZS05OwoJY29uc3QgTEFORF9NQVNLX1RIUkVTSE9MRCA9IDAuNTsKCglsZXQgewoJCXJhZGl1cywKCQlmcmVzbmVsQ29uZmlnID0ge30sCgkJYXRtb3NwaGVyZUNvbmZpZyA9IHt9LAoJCXBvaW50Q291bnQgPSAxNTAwMCwKCQlwb2ludFNpemUgPSAwLjA1LAoJCWxhbmRQb2ludENvbG9yID0gIiNmNzcxMTQiLAoJCWF1dG9Sb3RhdGUgPSB0cnVlLAoJCWxvY2tlZFBvbGFyQW5nbGUgPSB0cnVlLAoJCW1hcmtlcnMgPSBbXSwKCQltYXJrZXJUb29sdGlwLAoJCWZvY3VzT24gPSBudWxsLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBpbml0aWFsQ2FtZXJhUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAsIHo6IDggfTsKCWxldCBnbG9iZUdyb3VwID0gJHN0YXRlPFRIUkVFLkdyb3VwPigpOwoJbGV0IGNvbnRyb2xzID0gJHN0YXRlPE9yYml0Q29udHJvbHNUeXBlPigpOwoJbGV0IGZvY3VzVHdlZW46IGdzYXAuY29yZS5Ud2VlbiB8IG51bGwgPSBudWxsOwoJbGV0IGxhbmRNYXNrID0gJHN0YXRlPExhbmRNYXNrRGF0YSB8IG51bGw+KG51bGwpOwoKCWNvbnN0IHsgY2FtZXJhIH0gPSB1c2VUaHJlbHRlKCk7CgoJY29uc3QgU0VHTUVOVFMgPSA2NDsKCglsZXQgZ2VvbWV0cnkgPSAkZGVyaXZlZChuZXcgVEhSRUUuU3BoZXJlR2VvbWV0cnkocmFkaXVzLCBTRUdNRU5UUywgU0VHTUVOVFMpKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwoKCXZvaWQgbWFpbigpIHsKCQl2Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7CgkJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTsKCQl2Vmlld1Bvc2l0aW9uID0gLW12UG9zaXRpb24ueHl6OwoJCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247Cgl9CmA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgl1bmlmb3JtIHZlYzMgY29sb3I7Cgl1bmlmb3JtIHZlYzMgcmltQ29sb3I7Cgl1bmlmb3JtIGZsb2F0IHJpbVBvd2VyOwoJdW5pZm9ybSBmbG9hdCByaW1JbnRlbnNpdHk7CgoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7Cgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKCgl2b2lkIG1haW4oKSB7CgkJdmVjMyBub3JtYWwgPSBub3JtYWxpemUodk5vcm1hbCk7CgkJdmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pOwoKCQlmbG9hdCByaW0gPSAxLjAgLSBtYXgoMC4wLCBkb3Qobm9ybWFsLCB2aWV3RGlyKSk7CgkJcmltID0gcG93KHJpbSwgcmltUG93ZXIpICogcmltSW50ZW5zaXR5OwoKCQl2ZWMzIGZpbmFsQ29sb3IgPSBjb2xvciArIHJpbUNvbG9yICogcmltOwoKCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGZpbmFsQ29sb3IsIDEuMCk7CiAgICAgICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+Cgl9CmA7CgoJY29uc3QgYXRtb3NwaGVyZVZlcnRleFNoYWRlciA9IGAKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJdm9pZCBtYWluKCkgewoJCXZOb3JtYWwgPSBub3JtYWxpemUobm9ybWFsTWF0cml4ICogbm9ybWFsKTsKCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJfQpgOwoKCWNvbnN0IGF0bW9zcGhlcmVGcmFnbWVudFNoYWRlciA9IGAKCXVuaWZvcm0gdmVjMyBjb2xvcjsKCXVuaWZvcm0gZmxvYXQgcG93ZXI7Cgl1bmlmb3JtIGZsb2F0IGNvZWZmaWNpZW50OwoJdW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7CgoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgoJdm9pZCBtYWluKCkgewoJCXZlYzMgdmlld0RpciA9IHZlYzMoMC4wLCAwLjAsIDEuMCk7CgkJZmxvYXQgdmlld0RvdCA9IGRvdCh2Tm9ybWFsLCB2aWV3RGlyKTsKCgkJZmxvYXQgZmFjdG9yID0gcG93KG1heCgwLjAsIGNvZWZmaWNpZW50IC0gdmlld0RvdCksIHBvd2VyKTsKCgkJdmVjMyBmaW5hbENvbG9yID0gY29sb3IgKiBmYWN0b3IgKiBpbnRlbnNpdHk7CgoJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZmluYWxDb2xvciwgZmFjdG9yICogaW50ZW5zaXR5KTsKCQkjaW5jbHVkZSA8Y29sb3JzcGFjZV9mcmFnbWVudD4KCX0KYDsKCgljb25zdCBkZWZhdWx0RnJlc25lbENvbmZpZzogUmVxdWlyZWQ8RnJlc25lbENvbmZpZz4gPSB7CgkJY29sb3I6ICIjMTExMTEzIiwKCQlyaW1Db2xvcjogIiNGRjY5MDAiLAoJCXJpbVBvd2VyOiA2LAoJCXJpbUludGVuc2l0eTogMS41LAoJfTsKCgljb25zdCBkZWZhdWx0QXRtb3NwaGVyZUNvbmZpZzogUmVxdWlyZWQ8QXRtb3NwaGVyZUNvbmZpZz4gPSB7CgkJY29sb3I6ICIjRkY2OTAwIiwKCQlzY2FsZTogMS4xLAoJCXBvd2VyOiAxMi4wLAoJCWNvZWZmaWNpZW50OiAwLjksCgkJaW50ZW5zaXR5OiAyLjAsCgl9OwoKCWNvbnN0IHJlc29sdmVkRnJlc25lbENvbmZpZyA9ICRkZXJpdmVkKHsKCQkuLi5kZWZhdWx0RnJlc25lbENvbmZpZywKCQkuLi5mcmVzbmVsQ29uZmlnLAoJfSk7Cgljb25zdCByZXNvbHZlZEF0bW9zcGhlcmVDb25maWcgPSAkZGVyaXZlZCh7CgkJLi4uZGVmYXVsdEF0bW9zcGhlcmVDb25maWcsCgkJLi4uYXRtb3NwaGVyZUNvbmZpZywKCX0pOwoKCWNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHsKCQl2ZXJ0ZXhTaGFkZXIsCgkJZnJhZ21lbnRTaGFkZXIsCgkJdW5pZm9ybXM6IHsKCQkJY29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihkZWZhdWx0RnJlc25lbENvbmZpZy5jb2xvcikgfSwKCQkJcmltQ29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihkZWZhdWx0RnJlc25lbENvbmZpZy5yaW1Db2xvcikgfSwKCQkJcmltUG93ZXI6IHsgdmFsdWU6IGRlZmF1bHRGcmVzbmVsQ29uZmlnLnJpbVBvd2VyIH0sCgkJCXJpbUludGVuc2l0eTogeyB2YWx1ZTogZGVmYXVsdEZyZXNuZWxDb25maWcucmltSW50ZW5zaXR5IH0sCgkJfSwKCX0pOwoKCWNvbnN0IGF0bW9zcGhlcmVNYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7CgkJdmVydGV4U2hhZGVyOiBhdG1vc3BoZXJlVmVydGV4U2hhZGVyLAoJCWZyYWdtZW50U2hhZGVyOiBhdG1vc3BoZXJlRnJhZ21lbnRTaGFkZXIsCgkJdW5pZm9ybXM6IHsKCQkJY29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihkZWZhdWx0QXRtb3NwaGVyZUNvbmZpZy5jb2xvcikgfSwKCQkJcG93ZXI6IHsgdmFsdWU6IGRlZmF1bHRBdG1vc3BoZXJlQ29uZmlnLnBvd2VyIH0sCgkJCWNvZWZmaWNpZW50OiB7IHZhbHVlOiBkZWZhdWx0QXRtb3NwaGVyZUNvbmZpZy5jb2VmZmljaWVudCB9LAoJCQlpbnRlbnNpdHk6IHsgdmFsdWU6IGRlZmF1bHRBdG1vc3BoZXJlQ29uZmlnLmludGVuc2l0eSB9LAoJCX0sCgkJc2lkZTogVEhSRUUuQmFja1NpZGUsCgkJYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsCgkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJZGVwdGhXcml0ZTogZmFsc2UsCgkJdG9uZU1hcHBlZDogZmFsc2UsCgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlsZXQgY2FuY2VsbGVkID0gZmFsc2U7CgkJdm9pZCBsb2FkTGFuZE1hc2sobGFuZFRleHR1cmVVcmwpLnRoZW4oKG1hc2spID0+IHsKCQkJaWYgKCFjYW5jZWxsZWQpIHsKCQkJCWxhbmRNYXNrID0gbWFzazsKCQkJfQoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQljYW5jZWxsZWQgPSB0cnVlOwoJCX07Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQltYXRlcmlhbC51bmlmb3Jtcy5jb2xvci52YWx1ZS5zZXQocmVzb2x2ZWRGcmVzbmVsQ29uZmlnLmNvbG9yKTsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1Db2xvci52YWx1ZS5zZXQocmVzb2x2ZWRGcmVzbmVsQ29uZmlnLnJpbUNvbG9yKTsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1Qb3dlci52YWx1ZSA9IHJlc29sdmVkRnJlc25lbENvbmZpZy5yaW1Qb3dlcjsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1JbnRlbnNpdHkudmFsdWUgPSByZXNvbHZlZEZyZXNuZWxDb25maWcucmltSW50ZW5zaXR5OwoJCW1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCX0pOwoKCWxldCBjdXJyZW50QXRtb3NwaGVyZVNjYWxlID0gJGRlcml2ZWQocmVzb2x2ZWRBdG1vc3BoZXJlQ29uZmlnLnNjYWxlKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlhdG1vc3BoZXJlTWF0ZXJpYWwudW5pZm9ybXMuY29sb3IudmFsdWUuc2V0KHJlc29sdmVkQXRtb3NwaGVyZUNvbmZpZy5jb2xvcik7CgkJYXRtb3NwaGVyZU1hdGVyaWFsLnVuaWZvcm1zLnBvd2VyLnZhbHVlID0gcmVzb2x2ZWRBdG1vc3BoZXJlQ29uZmlnLnBvd2VyOwoJCWF0bW9zcGhlcmVNYXRlcmlhbC51bmlmb3Jtcy5jb2VmZmljaWVudC52YWx1ZSA9CgkJCXJlc29sdmVkQXRtb3NwaGVyZUNvbmZpZy5jb2VmZmljaWVudDsKCQlhdG1vc3BoZXJlTWF0ZXJpYWwudW5pZm9ybXMuaW50ZW5zaXR5LnZhbHVlID0KCQkJcmVzb2x2ZWRBdG1vc3BoZXJlQ29uZmlnLmludGVuc2l0eTsKCQlhdG1vc3BoZXJlTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwoJfSk7CgoJbGV0IGZpbHRlcmVkUG9zaXRpb25zID0gJGRlcml2ZWQuYnkoKCkgPT4gewoJCWlmICghbGFuZE1hc2spIHsKCQkJcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoKTsKCQl9CgoJCWNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwb2ludENvdW50KSk7CgkJY29uc3QgdGVtcFBvc2l0aW9uczogbnVtYmVyW10gPSBbXTsKCQljb25zdCBnb2xkZW5BbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7CgkJY29uc3Qgc3VyZmFjZVJhZGl1cyA9IHJhZGl1cyAqIDEuMDAxOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3QgdCA9IGNvdW50ID09PSAxID8gMC41IDogaSAvIChjb3VudCAtIDEpOwoJCQljb25zdCB5ID0gMSAtIDIgKiB0OwoJCQljb25zdCByYWRpYWwgPSBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgMSAtIHkgKiB5KSk7CgkJCWNvbnN0IHRoZXRhID0gZ29sZGVuQW5nbGUgKiBpOwoJCQljb25zdCB4ID0gTWF0aC5jb3ModGhldGEpICogcmFkaWFsOwoJCQljb25zdCB6ID0gTWF0aC5zaW4odGhldGEpICogcmFkaWFsOwoKCQkJY29uc3QgcFggPSB4ICogc3VyZmFjZVJhZGl1czsKCQkJY29uc3QgcFkgPSB5ICogc3VyZmFjZVJhZGl1czsKCQkJY29uc3QgcFogPSB6ICogc3VyZmFjZVJhZGl1czsKCgkJCWlmIChpc1BvaW50T25MYW5kKHBYLCBwWSwgcFosIGxhbmRNYXNrKSkgewoJCQkJdGVtcFBvc2l0aW9ucy5wdXNoKHBYLCBwWSwgcFopOwoJCQl9CgkJfQoKCQlyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0ZW1wUG9zaXRpb25zKTsKCX0pOwoJbGV0IG1lc2hDb3VudCA9ICRkZXJpdmVkKAoJCWZpbHRlcmVkUG9zaXRpb25zID8gZmlsdGVyZWRQb3NpdGlvbnMubGVuZ3RoIC8gMyA6IDAsCgkpOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghZm9jdXNPbiB8fCAhJGNhbWVyYSB8fCAhY29udHJvbHMpIHsKCQkJZm9jdXNUd2Vlbj8ua2lsbCgpOwoJCQlmb2N1c1R3ZWVuID0gbnVsbDsKCQkJcmV0dXJuOwoJCX0KCgkJY29uc3QgW2xhdCwgbG9uXSA9IGZvY3VzT247CgkJY29uc3QgY2FtZXJhRGlzdGFuY2UgPSBpbml0aWFsQ2FtZXJhUG9zaXRpb24uejsKCgkJY29uc3QgeyB4LCB5LCB6IH0gPSBsb25MYXRUb0NhcnRlc2lhbihsb24sIGxhdCwgY2FtZXJhRGlzdGFuY2UpOwoKCQlmb2N1c1R3ZWVuPy5raWxsKCk7CgkJZm9jdXNUd2VlbiA9IGdzYXAudG8oJGNhbWVyYS5wb3NpdGlvbiwgewoJCQl4LAoJCQl5LAoJCQl6LAoJCQlkdXJhdGlvbjogMS41LAoJCQllYXNlOiAicG93ZXIyLmluT3V0IiwKCQkJb25VcGRhdGU6ICgpID0+IHsKCQkJCWNvbnRyb2xzPy51cGRhdGUoKTsKCQkJfSwKCQkJb3ZlcndyaXRlOiB0cnVlLAoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlmb2N1c1R3ZWVuPy5raWxsKCk7CgkJCWZvY3VzVHdlZW4gPSBudWxsOwoJCX07Cgl9KTsKCglmdW5jdGlvbiB1cGRhdGVNZXNoTWF0cmljZXMoCgkJbWVzaDogVEhSRUUuSW5zdGFuY2VkTWVzaCwKCQlwb3NpdGlvbnM6IEZsb2F0MzJBcnJheSwKCSkgewoJCWNvbnN0IGR1bW15ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7CgkJY29uc3QgY291bnQgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMzsKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3QgeCA9IHBvc2l0aW9uc1tpICogM107CgkJCWNvbnN0IHkgPSBwb3NpdGlvbnNbaSAqIDMgKyAxXTsKCQkJY29uc3QgeiA9IHBvc2l0aW9uc1tpICogMyArIDJdOwoJCQlkdW1teS5wb3NpdGlvbi5zZXQoeCwgeSwgeik7CgkJCWR1bW15Lmxvb2tBdCh4ICogMiwgeSAqIDIsIHogKiAyKTsKCQkJZHVtbXkudXBkYXRlTWF0cml4KCk7CgkJCW1lc2guc2V0TWF0cml4QXQoaSwgZHVtbXkubWF0cml4KTsKCQl9CgkJbWVzaC5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7Cgl9CgoJZnVuY3Rpb24gbG9hZExhbmRNYXNrKHVybDogc3RyaW5nKTogUHJvbWlzZTxMYW5kTWFza0RhdGEgfCBudWxsPiB7CgkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CgkJCWNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7CgkJCWltYWdlLm9ubG9hZCA9ICgpID0+IHsKCQkJCWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQkJY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7CgkJCQljYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OwoJCQkJY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pOwoJCQkJaWYgKCFjb250ZXh0KSB7CgkJCQkJcmVzb2x2ZShudWxsKTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApOwoJCQkJY29uc3QgaW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7CgkJCQlyZXNvbHZlKHsKCQkJCQl3aWR0aDogaW1hZ2Uud2lkdGgsCgkJCQkJaGVpZ2h0OiBpbWFnZS5oZWlnaHQsCgkJCQkJZGF0YTogaW1hZ2VEYXRhLmRhdGEsCgkJCQl9KTsKCQkJfTsKCQkJaW1hZ2Uub25lcnJvciA9IChlcnJvcikgPT4gewoJCQkJY29uc29sZS53YXJuKCJHbG9iZVNjZW5lOiBmYWlsZWQgdG8gbG9hZCBsYW5kIG1hc2sgdGV4dHVyZSIsIGVycm9yKTsKCQkJCXJlc29sdmUobnVsbCk7CgkJCX07CgkJCWltYWdlLnNyYyA9IHVybDsKCQl9KTsKCX0KCglmdW5jdGlvbiBmcmFjdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHsKCQlyZXR1cm4gdmFsdWUgLSBNYXRoLmZsb29yKHZhbHVlKTsKCX0KCglmdW5jdGlvbiBwb2ludFRvTWFza1VWKAoJCXg6IG51bWJlciwKCQl5OiBudW1iZXIsCgkJejogbnVtYmVyLAoJKTogeyB1OiBudW1iZXI7IHY6IG51bWJlciB9IHsKCQljb25zdCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKCQlpZiAobGVuZ3RoID09PSAwKSB7CgkJCXJldHVybiB7IHU6IDAsIHY6IDAgfTsKCQl9CgoJCS8vIE1hdGNoIENPQkUncyBnbG9iZS1zcGFjZSBjb252ZW50aW9uIGJlZm9yZSBVViBtYXBwaW5nOgoJCS8vIG91ciBheGVzIFt4LHksel0gLT4gY29iZSBheGVzIFt6LHksLXhdCgkJY29uc3QgbnggPSB6IC8gbGVuZ3RoOwoJCWNvbnN0IG55ID0geSAvIGxlbmd0aDsKCQljb25zdCBueiA9IC14IC8gbGVuZ3RoOwoKCQljb25zdCBnUGhpID0gTWF0aC5hc2luKFRIUkVFLk1hdGhVdGlscy5jbGFtcChueSwgLTEsIDEpKTsKCQljb25zdCBjb3NQaGkgPSBNYXRoLmNvcyhnUGhpKTsKCgkJbGV0IGdUaGV0YSA9IDA7CgkJaWYgKE1hdGguYWJzKGNvc1BoaSkgPiBFUFNJTE9OKSB7CgkJCWNvbnN0IHRoZXRhSW5wdXQgPSBUSFJFRS5NYXRoVXRpbHMuY2xhbXAoLW54IC8gY29zUGhpLCAtMSwgMSk7CgkJCWdUaGV0YSA9IE1hdGguYWNvcyh0aGV0YUlucHV0KTsKCQkJaWYgKG56IDwgMCkgewoJCQkJZ1RoZXRhID0gLWdUaGV0YTsKCQkJfQoJCX0KCgkJcmV0dXJuIHsKCQkJdTogZnJhY3QoKGdUaGV0YSAqIDAuNSkgLyBNYXRoLlBJKSwKCQkJdjogZnJhY3QoLShnUGhpIC8gTWF0aC5QSSArIDAuNSkpLAoJCX07Cgl9CgoJZnVuY3Rpb24gc2FtcGxlTGFuZE1hc2sobWFzazogTGFuZE1hc2tEYXRhLCB1OiBudW1iZXIsIHY6IG51bWJlcik6IG51bWJlciB7CgkJY29uc3QgeCA9IE1hdGgubWluKG1hc2sud2lkdGggLSAxLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHUgKiBtYXNrLndpZHRoKSkpOwoJCWNvbnN0IHkgPSBNYXRoLm1pbigKCQkJbWFzay5oZWlnaHQgLSAxLAoJCQlNYXRoLm1heCgwLCBNYXRoLmZsb29yKHYgKiBtYXNrLmhlaWdodCkpLAoJCSk7CgkJY29uc3QgaSA9ICh5ICogbWFzay53aWR0aCArIHgpICogNDsKCQlyZXR1cm4gbWFzay5kYXRhW2ldIC8gMjU1OwoJfQoKCWZ1bmN0aW9uIGxvbkxhdFRvQ2FydGVzaWFuKGxvbjogbnVtYmVyLCBsYXQ6IG51bWJlciwgcjogbnVtYmVyKSB7CgkJY29uc3QgbG9uUmFkID0gbG9uICogREVHMlJBRDsKCQljb25zdCBsYXRSYWQgPSBsYXQgKiBERUcyUkFEOwoKCQljb25zdCB5ID0gciAqIE1hdGguc2luKGxhdFJhZCk7CgkJY29uc3QgclhaID0gciAqIE1hdGguY29zKGxhdFJhZCk7CgkJY29uc3QgeCA9IHJYWiAqIE1hdGguc2luKGxvblJhZCk7CgkJY29uc3QgeiA9IHJYWiAqIE1hdGguY29zKGxvblJhZCk7CgoJCXJldHVybiB7IHgsIHksIHogfTsKCX0KCglmdW5jdGlvbiBpc1BvaW50T25MYW5kKAoJCXg6IG51bWJlciwKCQl5OiBudW1iZXIsCgkJejogbnVtYmVyLAoJCW1hc2s6IExhbmRNYXNrRGF0YSwKCSk6IGJvb2xlYW4gewoJCWNvbnN0IHsgdSwgdiB9ID0gcG9pbnRUb01hc2tVVih4LCB5LCB6KTsKCQlyZXR1cm4gc2FtcGxlTGFuZE1hc2sobWFzaywgdSwgdikgPj0gTEFORF9NQVNLX1RIUkVTSE9MRDsKCX0KPC9zY3JpcHQ+Cgo8VC5QZXJzcGVjdGl2ZUNhbWVyYQoJbWFrZURlZmF1bHQKCXBvc2l0aW9uPXtbCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLngsCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLnksCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLnosCgldfQo+Cgk8T3JiaXRDb250cm9scwoJCWJpbmQ6cmVmPXtjb250cm9sc30KCQllbmFibGVEYW1waW5nCgkJe2F1dG9Sb3RhdGV9CgkJbWluUG9sYXJBbmdsZT17bG9ja2VkUG9sYXJBbmdsZSA/IDEuNSA6IDB9CgkJbWF4UG9sYXJBbmdsZT17bG9ja2VkUG9sYXJBbmdsZSA/IDEuNCA6IE1hdGguUEl9CgkJZW5hYmxlWm9vbT17ZmFsc2V9CgkJb25jcmVhdGU9eyhjKSA9PiB7CgkJCWMudGFyZ2V0LnNldCgwLCAwLCAwKTsKCQkJYy51cGRhdGUoKTsKCQl9fQoJLz4KPC9ULlBlcnNwZWN0aXZlQ2FtZXJhPgoKPFQuR3JvdXAgYmluZDpyZWY9e2dsb2JlR3JvdXB9PgoJPFQuTWVzaCB7Z2VvbWV0cnl9IHttYXRlcmlhbH0gLz4KCTxULk1lc2gKCQl7Z2VvbWV0cnl9CgkJbWF0ZXJpYWw9e2F0bW9zcGhlcmVNYXRlcmlhbH0KCQlzY2FsZT17Y3VycmVudEF0bW9zcGhlcmVTY2FsZX0KCS8+CgoJeyNpZiBmaWx0ZXJlZFBvc2l0aW9ucyAmJiBtZXNoQ291bnQgPiAwfQoJCXsja2V5IG1lc2hDb3VudH0KCQkJPFQuSW5zdGFuY2VkTWVzaAoJCQkJYXJncz17W3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBtZXNoQ291bnRdfQoJCQkJb25jcmVhdGU9eyhtZXNoKSA9PiB1cGRhdGVNZXNoTWF0cmljZXMobWVzaCwgZmlsdGVyZWRQb3NpdGlvbnMhKX0KCQkJPgoJCQkJPFQuQ2lyY2xlR2VvbWV0cnkgYXJncz17W3BvaW50U2l6ZSAqIDAuNSwgNl19IC8+CgkJCQk8VC5NZXNoQmFzaWNNYXRlcmlhbAoJCQkJCWNvbG9yPXtsYW5kUG9pbnRDb2xvcn0KCQkJCQlzaWRlPXtUSFJFRS5Eb3VibGVTaWRlfQoJCQkJCWJsZW5kaW5nPXtUSFJFRS5BZGRpdGl2ZUJsZW5kaW5nfQoJCQkJCXRyYW5zcGFyZW50CgkJCQkJZGVwdGhXcml0ZT17ZmFsc2V9CgkJCQkJdG9uZU1hcHBlZD17ZmFsc2V9CgkJCQkvPgoJCQk8L1QuSW5zdGFuY2VkTWVzaD4KCQl7L2tleX0KCXsvaWZ9CgoJeyNlYWNoIG1hcmtlcnMgYXMgbWFya2VyLCBpIChtYXJrZXIubGFiZWwgfHwgaSl9CgkJe0Bjb25zdCBwb3MgPSBsb25MYXRUb0NhcnRlc2lhbigKCQkJbWFya2VyLmxvY2F0aW9uWzFdLAoJCQltYXJrZXIubG9jYXRpb25bMF0sCgkJCXJhZGl1cywKCQkpfQoJCTxHbG9iZU1hcmtlckl0ZW0KCQkJe21hcmtlcn0KCQkJaW5kZXg9e2l9CgkJCXBvc2l0aW9uPXtbcG9zLngsIHBvcy55LCBwb3Muel19CgkJCXRvb2x0aXA9e21hcmtlclRvb2x0aXB9CgkJLz4KCXsvZWFjaH0KPC9ULkdyb3VwPgo=", "components/globe/GlobeMarkerItem.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBIVE1MIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgdHlwZSB7IEdsb2JlTWFya2VyLCBHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0IH0gZnJvbSAiLi90eXBlcyI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgbWFya2VyIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgbG9jYXRpb24sIGNvbG9yLCBzaXplLCBldGMuCgkJICovCgkJbWFya2VyOiBHbG9iZU1hcmtlcjsKCQkvKioKCQkgKiBUaGUgM0Qgd29ybGQgcG9zaXRpb24gb2YgdGhlIG1hcmtlciBbeCwgeSwgel0uCgkJICovCgkJcG9zaXRpb246IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9OwoJCS8qKgoJCSAqIE1hcmtlciBpbmRleCBpbiB0aGUgbWFya2VycyBhcnJheS4KCQkgKi8KCQlpbmRleDogbnVtYmVyOwoJCS8qKgoJCSAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIHNuaXBwZXQuCgkJICovCgkJdG9vbHRpcD86IFNuaXBwZXQ8W0dsb2JlTWFya2VyVG9vbHRpcENvbnRleHRdPjsKCX0KCglsZXQgeyBtYXJrZXIsIGluZGV4LCBwb3NpdGlvbiwgdG9vbHRpcCB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCB0b29sdGlwVmlzaWJpbGl0eSA9ICRzdGF0ZSgxKTsKCWxldCB0b29sdGlwQmx1ciA9ICRzdGF0ZSgwKTsKCglsZXQgZ3JvdXAgPSAkc3RhdGU8VEhSRUUuR3JvdXA+KCk7CgoJY29uc3QgeyBjYW1lcmEgfSA9IHVzZVRocmVsdGUoKTsKCWNvbnN0IG1hcmtlckRpcmVjdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7Cgljb25zdCBjYW1lcmFEaXJlY3Rpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpOwoJY29uc3Qgd29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7Cgljb25zdCBvcmlnaW4gPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKTsKCgljb25zdCBNQVhfVE9PTFRJUF9CTFVSID0gODsKCWNvbnN0IFZJU0lCSUxJVFlfTUlOX0RPVCA9IDAuMjQ7Cgljb25zdCBWSVNJQklMSVRZX01BWF9ET1QgPSAwLjQ4OwoKCWZ1bmN0aW9uIGN1YmljQmV6aWVyQXQoCgkJdDogbnVtYmVyLAoJCXAwOiBudW1iZXIsCgkJcDE6IG51bWJlciwKCQlwMjogbnVtYmVyLAoJCXAzOiBudW1iZXIsCgkpOiBudW1iZXIgewoJCWNvbnN0IHUgPSAxIC0gdDsKCQlyZXR1cm4gKAoJCQl1ICogdSAqIHUgKiBwMCArIDMgKiB1ICogdSAqIHQgKiBwMSArIDMgKiB1ICogdCAqIHQgKiBwMiArIHQgKiB0ICogdCAqIHAzCgkJKTsKCX0KCglmdW5jdGlvbiBjdWJpY0JlemllckRlcml2YXRpdmVBdCgKCQl0OiBudW1iZXIsCgkJcDA6IG51bWJlciwKCQlwMTogbnVtYmVyLAoJCXAyOiBudW1iZXIsCgkJcDM6IG51bWJlciwKCSk6IG51bWJlciB7CgkJY29uc3QgdSA9IDEgLSB0OwoJCXJldHVybiAoCgkJCTMgKiB1ICogdSAqIChwMSAtIHAwKSArIDYgKiB1ICogdCAqIChwMiAtIHAxKSArIDMgKiB0ICogdCAqIChwMyAtIHAyKQoJCSk7Cgl9CgoJZnVuY3Rpb24gZHluYW1pY0Vhc2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7CgkJY29uc3QgY2xhbXBlZCA9IFRIUkVFLk1hdGhVdGlscy5jbGFtcCh2YWx1ZSwgMCwgMSk7CgkJbGV0IHQgPSBjbGFtcGVkOwoJCWZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7CgkJCWNvbnN0IHggPSBjdWJpY0JlemllckF0KHQsIDAsIDAuNjI1LCAwLCAxKTsKCQkJY29uc3QgZHggPSBjdWJpY0JlemllckRlcml2YXRpdmVBdCh0LCAwLCAwLjYyNSwgMCwgMSk7CgkJCWlmIChNYXRoLmFicyhkeCkgPCAxZS02KSBicmVhazsKCQkJdCA9IFRIUkVFLk1hdGhVdGlscy5jbGFtcCh0IC0gKHggLSBjbGFtcGVkKSAvIGR4LCAwLCAxKTsKCQl9CgkJcmV0dXJuIGN1YmljQmV6aWVyQXQodCwgMCwgMC4wNSwgMSwgMSk7Cgl9CgoJdXNlVGFzaygoKSA9PiB7CgkJaWYgKGdyb3VwICYmICRjYW1lcmEpIHsKCQkJZ3JvdXAuZ2V0V29ybGRQb3NpdGlvbih3b3JsZFBvc2l0aW9uKTsKCQkJbWFya2VyRGlyZWN0aW9uLmNvcHkod29ybGRQb3NpdGlvbikubm9ybWFsaXplKCk7CgkJCWNhbWVyYURpcmVjdGlvbi5jb3B5KCRjYW1lcmEucG9zaXRpb24pLm5vcm1hbGl6ZSgpOwoKCQkJY29uc3QgZnJvbnREb3QgPSBtYXJrZXJEaXJlY3Rpb24uZG90KGNhbWVyYURpcmVjdGlvbik7CgkJCWNvbnN0IHJhd1Zpc2liaWxpdHkgPSBUSFJFRS5NYXRoVXRpbHMuc21vb3Roc3RlcCgKCQkJCWZyb250RG90LAoJCQkJVklTSUJJTElUWV9NSU5fRE9ULAoJCQkJVklTSUJJTElUWV9NQVhfRE9ULAoJCQkpOwoJCQljb25zdCB2aXNpYmlsaXR5ID0gZHluYW1pY0Vhc2UocmF3VmlzaWJpbGl0eSk7CgoJCQl0b29sdGlwVmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7CgkJCXRvb2x0aXBCbHVyID0gKDEgLSB2aXNpYmlsaXR5KSAqIE1BWF9UT09MVElQX0JMVVI7CgkJfQoJfSk7CgoJbGV0IGNvbG9yID0gJGRlcml2ZWQobmV3IFRIUkVFLkNvbG9yKG1hcmtlci5jb2xvciB8fCAiI2ZmZmZmZiIpKTsKCWxldCBwb2ludFJhZGl1cyA9ICRkZXJpdmVkKE1hdGgubWF4KDAuMDAxLCBtYXJrZXIuc2l6ZSA/PyAwLjA1KSk7CglsZXQgdG9vbHRpcENvbnRleHQgPSAkZGVyaXZlZDxHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0Pih7CgkJbWFya2VyLAoJCWluZGV4LAoJCXZpc2liaWxpdHk6IHRvb2x0aXBWaXNpYmlsaXR5LAoJfSk7CglsZXQgbWFya2VyT3BhY2l0eSA9ICRkZXJpdmVkKHRvb2x0aXBWaXNpYmlsaXR5KTsKCWxldCBub3JtYWxpemVkUG9zaXRpb24gPSAkZGVyaXZlZCgKCQlBcnJheS5pc0FycmF5KHBvc2l0aW9uKQoJCQk/IHBvc2l0aW9uCgkJCTogKFtwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56XSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pLAoJKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWdyb3VwIHx8ICFub3JtYWxpemVkUG9zaXRpb24pIHJldHVybjsKCQlncm91cC5sb29rQXQob3JpZ2luKTsKCX0pOwo8L3NjcmlwdD4KCjxULkdyb3VwIGJpbmQ6cmVmPXtncm91cH0gcG9zaXRpb249e25vcm1hbGl6ZWRQb3NpdGlvbn0+Cgk8VC5NZXNoIHJlbmRlck9yZGVyPXsxMH0+CgkJPFQuQ2lyY2xlR2VvbWV0cnkgYXJncz17W3BvaW50UmFkaXVzLCAyNF19IC8+CgkJPFQuTWVzaEJhc2ljTWF0ZXJpYWwKCQkJe2NvbG9yfQoJCQlzaWRlPXtUSFJFRS5Eb3VibGVTaWRlfQoJCQl0cmFuc3BhcmVudAoJCQlvcGFjaXR5PXttYXJrZXJPcGFjaXR5fQoJCQlkZXB0aFRlc3Q9e2ZhbHNlfQoJCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQkJdG9uZU1hcHBlZD17ZmFsc2V9CgkJLz4KCTwvVC5NZXNoPgoKCXsjaWYgdG9vbHRpcCB8fCBtYXJrZXIubGFiZWx9CgkJPEhUTUwgcG9zaXRpb249e1swLCAwLCAwXX0gY2VudGVyPgoJCQk8ZGl2CgkJCQljbGFzcz0icG9pbnRlci1ldmVudHMtbm9uZSBpbmxpbmUtZmxleCAtdHJhbnNsYXRlLXktNiBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgdHJhbnNpdGlvbi1bb3BhY2l0eSxmaWx0ZXJdIGR1cmF0aW9uLTIwMCBlYXNlLW91dCIKCQkJCXN0eWxlOm9wYWNpdHk9e3Rvb2x0aXBWaXNpYmlsaXR5fQoJCQkJc3R5bGU6ZmlsdGVyPXtgYmx1cigke3Rvb2x0aXBCbHVyfXB4KWB9CgkJCT4KCQkJCXsjaWYgdG9vbHRpcH0KCQkJCQl7QHJlbmRlciB0b29sdGlwKHRvb2x0aXBDb250ZXh0KX0KCQkJCXs6ZWxzZX0KCQkJCQk8ZGl2CgkJCQkJCWNsYXNzPSJiZy1maXhlZC1kYXJrLzgwIHJvdW5kZWQteHMgcHgtMiBweS0xIHRleHQteHMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1maXhlZC1saWdodCBiYWNrZHJvcC1ibHVyLXNtIgoJCQkJCT4KCQkJCQkJe21hcmtlci5sYWJlbH0KCQkJCQk8L2Rpdj4KCQkJCXsvaWZ9CgkJCTwvZGl2PgoJCTwvSFRNTD4KCXsvaWZ9CjwvVC5Hcm91cD4K", "components/globe/types.ts": "ZXhwb3J0IGludGVyZmFjZSBHbG9iZU1hcmtlciB7CgkvKioKCSAqIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgY29vcmRpbmF0ZXMgW2xhdCwgbG9uXS4KCSAqLwoJbG9jYXRpb246IFtudW1iZXIsIG51bWJlcl07CgkvKioKCSAqIFNpemUgb2YgdGhlIG1hcmtlciBpbiB3b3JsZCB1bml0cy4KCSAqIEBkZWZhdWx0IDAuMDUKCSAqLwoJc2l6ZT86IG51bWJlcjsKCS8qKgoJICogQ29sb3Igb2YgdGhlIG1hcmtlci4KCSAqIEBkZWZhdWx0ICIjZmZmZmZmIgoJICovCgljb2xvcj86IHN0cmluZzsKCS8qKgoJICogT3B0aW9uYWwgZmFsbGJhY2sgdG9vbHRpcCB0ZXh0ICh1c2VkIHdoZW4gbm8gY3VzdG9tIHRvb2x0aXAgcmVuZGVyZXIgaXMgcHJvdmlkZWQpLgoJICovCglsYWJlbD86IHN0cmluZzsKfQoKZXhwb3J0IGludGVyZmFjZSBHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0IHsKCS8qKgoJICogTWFya2VyIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZC4KCSAqLwoJbWFya2VyOiBHbG9iZU1hcmtlcjsKCS8qKgoJICogTWFya2VyIGluZGV4IGluIHRoZSBtYXJrZXJzIGFycmF5LgoJICovCglpbmRleDogbnVtYmVyOwoJLyoqCgkgKiBNYXJrZXIgdmlzaWJpbGl0eSBmYWN0b3IgaW4gcmFuZ2UgWzAsIDFdLgoJICogMCBtZWFucyBmdWxseSBoaWRkZW4gYmVoaW5kIHRoZSBnbG9iZSwgMSBtZWFucyBmdWxseSB2aXNpYmxlLgoJICovCgl2aXNpYmlsaXR5OiBudW1iZXI7Cn0K", "assets/land-texture.png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAACAAQAAAADMzoqnAAAAAXNSR0IArs4c6QAABA5JREFUeNrV179uHEUAx/Hf3JpbF+E2VASBsmVKTBcpKJs3SMEDcDwBiVJAAewYEBUivIHT0uUBIt0YCovKD0CRjUC4QfHYh8hYXu+P25vZ2Zm9c66gMd/GJ/tz82d3bk8GN4SrByYF2366FNTACIAkivVAAazQdnf3MvAlbNUQfOPAdQDvSAimMWhwy4I2g4SU+Kp04ISLpPBAKLxPyic3O/CCi+Y7rUJbiodcpDOFY7CgxCEXmdYD2EYK2s5lApOx5pEDDYCUwM1XdJUwBV11QQMg59kePSCaPAASQMEL2hwo6TJFgxpg+TgC2ymXPbuvc40awr3D1QCFfbH9kcoqAOkZozpQo0aqAGQRKCog/+tjkgbNFEtg2FffBvBGlSxHoAaAa1u6X4PBAwDiR8FFsrQgeUhfJTSALaB9jy5NCybJPn1SVFiWk7ywN+KzhH1aKAuydhGkbEF4lWohLXDXavlyFgHY7LBnLRdlAP6BS5Cc8RfVDXbkwN/oIvmY+6obbNeBP0JwTuMGu9gTzy1Q4RS/cWpfzszeYwd+CAFrtBW/Hur0gLbJGlD+/OjVwe/drfBxkbbg63dndEDfiEBlAd7ac0BPe1D6Jd8dfbLH+RI0OzseFB5s01/M+gMdAeluLOCAuaUA9Lezo/vSgXoCX9rtEiXnp7Q1W/CNyWcd8DXoS6jH/YZ5vAJEWY2dXFQe2TUgaFaNejCzJ98g6HnlVrsE58sDcYqg+9XY75fPqdoh/kRQWiXKg8MWlJQxUFMPjqnyujhFBE7UxIMjyszk0QwQlFsezImsyvUYYYVED2pk6m0Tg8T04Fwjk2kdAwSACqlM6gRRt3vQYAFGX0Ah7Ebx1H+MDRI5ui0QldH4j7FGcm90XdxD2Jg1AOEAVAKhEFXSn4cKUELurIAKwJ3MArypPscQaLhJFICJ0ohjDySAdH8AhDtCiTuMycH8CXzhH9jUACAO5uMhoAwA5i+T6WAKmmAqnLy80wxHqIPFYpqCwxGaYLt4Dyievg5kEoVEUAhs6pqKgFtDQYOuaXypaWKQfIuwwoGSZgfLsu/XAtI8cGN+h7Cc1A5oLOMhwlIPXuhu48AIvsSBkvtV9wsJRKCyYLfq5lTrQMFd1a262oqBck9K1V0YjQg0iEYYgpS1A9GlXQV5cykwm4A7BzVsxQqo7E+zCegO7Ma7yKgsuOcfKbMBwLC8wvVNYDsANYalEpOAa6zpWjTeMKGwEwC1CiQewJc5EKfgy7GmRAZA4vUVGwE2dPM/g0xuAInE/yG5aZ8ISxWGfYigUVbdyBElTHh2uCwGdfCkOLGgQVBh3Ewp+/QK4CDlR5Ws/Zf7yhCf8pH7vinWAvoVCQ6zz0NX5V/6GkAVV+2/5qsJ/gU8bsxpM8IeAQAAAABJRU5ErkJggg==", - "components/god-rays/GodRays.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dvZFJheXNTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAiI0ZGRkZGRiIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogSG9yaXpvbnRhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJYW5jaG9yWD86IFNjZW5lUHJvcHNbImFuY2hvclgiXTsKCQkvKioKCQkgKiBWZXJ0aWNhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMS4yCgkJICovCgkJYW5jaG9yWT86IFNjZW5lUHJvcHNbImFuY2hvclkiXTsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXJlY3Rpb25YPzogU2NlbmVQcm9wc1siZGlyZWN0aW9uWCJdOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAtMS4wCgkJICovCgkJZGlyZWN0aW9uWT86IFNjZW5lUHJvcHNbImRpcmVjdGlvblkiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBUaGUgc3ByZWFkIG9mIHRoZSBsaWdodCByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWxpZ2h0U3ByZWFkPzogU2NlbmVQcm9wc1sibGlnaHRTcHJlYWQiXTsKCQkvKioKCQkgKiBUaGUgbGVuZ3RoIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXJheUxlbmd0aD86IFNjZW5lUHJvcHNbInJheUxlbmd0aCJdOwoJCS8qKgoJCSAqIFdoZXRoZXIgdGhlIHJheXMgc2hvdWxkIHB1bHNhdGUuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQlwdWxzYXRpbmc/OiBTY2VuZVByb3BzWyJwdWxzYXRpbmciXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBhdCB3aGljaCB0aGUgcmF5cyBzdGFydCB0byBmYWRlIG91dC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlmYWRlRGlzdGFuY2U/OiBTY2VuZVByb3BzWyJmYWRlRGlzdGFuY2UiXTsKCQkvKioKCQkgKiBTYXR1cmF0aW9uIG9mIHRoZSBmaW5hbCByYXkgY29sb3JzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNhdHVyYXRpb24/OiBTY2VuZVByb3BzWyJzYXR1cmF0aW9uIl07CgkJLyoqCgkJICogQW1vdW50IG9mIGdyYWluL25vaXNlIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJbm9pc2VBbW91bnQ/OiBTY2VuZVByb3BzWyJub2lzZUFtb3VudCJdOwoJCS8qKgoJCSAqIEFtb3VudCBvZiB3YXZlIGRpc3RvcnRpb24gYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogU2NlbmVQcm9wc1siZGlzdG9ydGlvbiJdOwoJCS8qKgoJCSAqIEdsb2JhbCByYXkgaW50ZW5zaXR5LiBMb3dlciB2YWx1ZXMgZGltIGFuZCB0aWdodGVuIHJheXMsIGhpZ2hlciB2YWx1ZXMgYnJpZ2h0ZW4gdGhlbS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBTY2VuZVByb3BzWyJpbnRlbnNpdHkiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiNGRkZGRkYiLAoJCWJhY2tncm91bmRDb2xvciA9ICIjMDAwMDAwIiwKCQlhbmNob3JYID0gMC41LAoJCWFuY2hvclkgPSAxLjIsCgkJZGlyZWN0aW9uWCA9IDAuMCwKCQlkaXJlY3Rpb25ZID0gLTEuMCwKCQlzcGVlZCA9IDEuMCwKCQlsaWdodFNwcmVhZCA9IDEuMCwKCQlyYXlMZW5ndGggPSAxLjAsCgkJcHVsc2F0aW5nID0gZmFsc2UsCgkJZmFkZURpc3RhbmNlID0gMS4wLAoJCXNhdHVyYXRpb24gPSAxLjAsCgkJbm9pc2VBbW91bnQgPSAwLjAsCgkJZGlzdG9ydGlvbiA9IDAuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZQoJCQkJe2NvbG9yfQoJCQkJe2JhY2tncm91bmRDb2xvcn0KCQkJCXthbmNob3JYfQoJCQkJe2FuY2hvcll9CgkJCQl7ZGlyZWN0aW9uWH0KCQkJCXtkaXJlY3Rpb25ZfQoJCQkJe3NwZWVkfQoJCQkJe2xpZ2h0U3ByZWFkfQoJCQkJe3JheUxlbmd0aH0KCQkJCXtwdWxzYXRpbmd9CgkJCQl7ZmFkZURpc3RhbmNlfQoJCQkJe3NhdHVyYXRpb259CgkJCQl7bm9pc2VBbW91bnR9CgkJCQl7ZGlzdG9ydGlvbn0KCQkJCXtpbnRlbnNpdHl9CgkJCS8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/god-rays/GodRaysScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0ICIjRkZGRkZGIgoJCSAqLwoJCWNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEhvcml6b250YWwgYW5jaG9yIHBvaW50IG9mIHRoZSByYXkgc291cmNlICgwLTEpLgoJCSAqIEBkZWZhdWx0IDAuNQoJCSAqLwoJCWFuY2hvclg/OiBudW1iZXI7CgkJLyoqCgkJICogVmVydGljYWwgYW5jaG9yIHBvaW50IG9mIHRoZSByYXkgc291cmNlICgwLTEpLgoJCSAqIEBkZWZhdWx0IDEuMgoJCSAqLwoJCWFuY2hvclk/OiBudW1iZXI7CgkJLyoqCgkJICogSG9yaXpvbnRhbCBkaXJlY3Rpb24gb2YgdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJZGlyZWN0aW9uWD86IG51bWJlcjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBkaXJlY3Rpb24gb2YgdGhlIHJheXMuCgkJICogQGRlZmF1bHQgLTEuMAoJCSAqLwoJCWRpcmVjdGlvblk/OiBudW1iZXI7CgkJLyoqCgkJICogU3BlZWQgbXVsdGlwbGllciBmb3IgdGhlIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzcGVlZD86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgc3ByZWFkIG9mIHRoZSBsaWdodCByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWxpZ2h0U3ByZWFkPzogbnVtYmVyOwoJCS8qKgoJCSAqIFRoZSBsZW5ndGggb2YgdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJcmF5TGVuZ3RoPzogbnVtYmVyOwoJCS8qKgoJCSAqIFdoZXRoZXIgdGhlIHJheXMgc2hvdWxkIHB1bHNhdGUuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQlwdWxzYXRpbmc/OiBib29sZWFuOwoJCS8qKgoJCSAqIERpc3RhbmNlIGF0IHdoaWNoIHRoZSByYXlzIHN0YXJ0IHRvIGZhZGUgb3V0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWZhZGVEaXN0YW5jZT86IG51bWJlcjsKCQkvKioKCQkgKiBTYXR1cmF0aW9uIG9mIHRoZSBmaW5hbCByYXkgY29sb3JzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNhdHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogQW1vdW50IG9mIGdyYWluL25vaXNlIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJbm9pc2VBbW91bnQ/OiBudW1iZXI7CgkJLyoqCgkJICogQW1vdW50IG9mIHdhdmUgZGlzdG9ydGlvbiBhcHBsaWVkIHRvIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDAuMAoJCSAqLwoJCWRpc3RvcnRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogR2xvYmFsIHJheSBpbnRlbnNpdHkuIExvd2VyIHZhbHVlcyBkaW0gYW5kIHRpZ2h0ZW4gcmF5cywgaGlnaGVyIHZhbHVlcyBicmlnaHRlbiB0aGVtLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yID0gIiNGRkZGRkYiLAoJCWJhY2tncm91bmRDb2xvciA9ICIjMDAwMDAwIiwKCQlhbmNob3JYID0gMC41LAoJCWFuY2hvclkgPSAxLjIsCgkJZGlyZWN0aW9uWCA9IDAuMCwKCQlkaXJlY3Rpb25ZID0gLTEuMCwKCQlzcGVlZCA9IDEuMCwKCQlsaWdodFNwcmVhZCA9IDEuMCwKCQlyYXlMZW5ndGggPSAxLjAsCgkJcHVsc2F0aW5nID0gZmFsc2UsCgkJZmFkZURpc3RhbmNlID0gMS4wLAoJCXNhdHVyYXRpb24gPSAxLjAsCgkJbm9pc2VBbW91bnQgPSAwLjAsCgkJZGlzdG9ydGlvbiA9IDAuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBtYXRlcmlhbCA9ICRzdGF0ZTxUSFJFRS5TaGFkZXJNYXRlcmlhbD4oKTsKCWNvbnN0IHsgc2l6ZSB9ID0gdXNlVGhyZWx0ZSgpOwoJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVEhSRUUuVmVjdG9yMigxLCAxKTsKCWNvbnN0IHByaW1hcnlDb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuQ29sb3IoKTsKCWNvbnN0IGJhY2tncm91bmRDb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuQ29sb3IoKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdUFuY2hvclg7CgkJdW5pZm9ybSBmbG9hdCB1QW5jaG9yWTsKCQl1bmlmb3JtIHZlYzIgdVJheURpcjsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZDsKCQl1bmlmb3JtIGZsb2F0IHVMaWdodFNwcmVhZDsKCQl1bmlmb3JtIGZsb2F0IHVSYXlMZW5ndGg7CgkJdW5pZm9ybSBib29sIHVQdWxzYXRpbmc7CgkJdW5pZm9ybSBmbG9hdCB1RmFkZURpc3RhbmNlOwoJCXVuaWZvcm0gZmxvYXQgdVNhdHVyYXRpb247CgkJdW5pZm9ybSBmbG9hdCB1Tm9pc2VBbW91bnQ7CgkJdW5pZm9ybSBmbG9hdCB1RGlzdG9ydGlvbjsKCQl1bmlmb3JtIGZsb2F0IHVJbnRlbnNpdHk7CgoJCQlmbG9hdCBub2lzZTIodmVjMiBzdCkgewoJCQkJcmV0dXJuIGZyYWN0KHNpbihkb3Qoc3QsIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1MzEyMyk7CgkJCX0KCgkJCWZsb2F0IGNvbG9yTHVtYSh2ZWMzIGMpIHsKCQkJCXJldHVybiBkb3QoYywgdmVjMygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSk7CgkJCX0KCgkJCXZlYzMgaHVlRnJvbUNvbG9yKHZlYzMgYywgdmVjMyBmYWxsYmFjaykgewoJCQkJZmxvYXQgbSA9IG1heChtYXgoYy5yLCBjLmcpLCBjLmIpOwoJCQkJaWYgKG0gPCAxZS01KSByZXR1cm4gZmFsbGJhY2s7CgkJCQlyZXR1cm4gY2xhbXAoYyAvIG0sIDAuMCwgMS4wKTsKCQkJfQoKCQkJdmVjMyBibGVuZEFkYXB0aXZlKHZlYzMgYmcsIHZlYzMgZWZmZWN0LCBmbG9hdCBzb2Z0bmVzcykgewoJCQkJZmxvYXQgYmdMdW0gPSBjb2xvckx1bWEoYmcpOwoJCQkJZmxvYXQgbGlnaHRCZyA9IHNtb290aHN0ZXAoMC40NSwgMC45NSwgYmdMdW0pOwoJCQkJZmxvYXQgZWRnZSA9IGNsYW1wKHNvZnRuZXNzLCAwLjAsIDEuMCk7CgkJCQlmbG9hdCB0aW50RW5lcmd5ID0gMS4wIC0gZXhwKC00LjAgKiBjb2xvckx1bWEoZWZmZWN0KSk7CgoJCQkJdmVjMyBhZGRpdGl2ZSA9IGJnICsgZWZmZWN0OwoJCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQkJdmVjMyB0aW50VGFyZ2V0ID0gbWl4KGJnLCBlZmZlY3RIdWUsIDAuOSk7CgkJCQl2ZWMzIHRpbnQgPSBtaXgoYmcsIHRpbnRUYXJnZXQsIGVkZ2UgKiB0aW50RW5lcmd5KTsKCgkJCQlyZXR1cm4gbWl4KGFkZGl0aXZlLCB0aW50LCBsaWdodEJnKTsKCQkJfQoKCQlmbG9hdCByYXlTdHJlbmd0aCgKCQkJdmVjMiByYXlTb3VyY2UsCgkJCXZlYzIgcmF5RGlyLAoJCQl2ZWMyIGNvb3JkLAoJCQlmbG9hdCBzZWVkQSwKCQkJZmxvYXQgc2VlZEIsCgkJCWZsb2F0IHNwZWVkLAoJCQlmbG9hdCB0aW1lLAoJCQlmbG9hdCBtYXhEaW0KCQkpIHsKCQkJdmVjMiBzb3VyY2VUb0Nvb3JkID0gY29vcmQgLSByYXlTb3VyY2U7CgkJCXZlYzIgZGlyTm9ybSA9IG5vcm1hbGl6ZShzb3VyY2VUb0Nvb3JkKTsKCQkJZmxvYXQgY29zQW5nbGUgPSBkb3QoZGlyTm9ybSwgcmF5RGlyKTsKCgkJCWZsb2F0IGRpc3RvcnRlZEFuZ2xlID0gY29zQW5nbGUKCQkJCSsgdURpc3RvcnRpb24gKiBzaW4odGltZSAqIDIuMCArIGxlbmd0aChzb3VyY2VUb0Nvb3JkKSAqIDAuMDEpICogMC4yOwoKCQkJZmxvYXQgc3ByZWFkRmFjdG9yID0gcG93KG1heChkaXN0b3J0ZWRBbmdsZSwgMC4wKSwgMS4wIC8gbWF4KHVMaWdodFNwcmVhZCwgMC4wMDEpKTsKCgkJCWZsb2F0IGRpc3QgPSBsZW5ndGgoc291cmNlVG9Db29yZCk7CgkJCWZsb2F0IG1heERpc3QgPSBtYXhEaW0gKiB1UmF5TGVuZ3RoOwoJCQlmbG9hdCBsZW5ndGhGYWxsb2ZmID0gY2xhbXAoKG1heERpc3QgLSBkaXN0KSAvIG1heERpc3QsIDAuMCwgMS4wKTsKCgkJCWZsb2F0IGZhZGVGYWxsb2ZmID0gY2xhbXAoCgkJCQkobWF4RGltICogdUZhZGVEaXN0YW5jZSAtIGRpc3QpIC8gKG1heERpbSAqIHVGYWRlRGlzdGFuY2UpLAoJCQkJMC41LCAxLjAKCQkJKTsKCgkJCWZsb2F0IHB1bHNlID0gdVB1bHNhdGluZyA/ICgwLjggKyAwLjIgKiBzaW4odGltZSAqIHNwZWVkICogMy4wKSkgOiAxLjA7CgoJCQlmbG9hdCBiYXNlU3RyZW5ndGggPSBjbGFtcCgKCQkJCSgwLjQ1ICsgMC4xNSAqIHNpbihkaXN0b3J0ZWRBbmdsZSAqIHNlZWRBICsgdGltZSAqIHNwZWVkKSkgKwoJCQkJKDAuMyAgKyAwLjIgICogY29zKC1kaXN0b3J0ZWRBbmdsZSAqIHNlZWRCICsgdGltZSAqIHNwZWVkKSksCgkJCQkwLjAsIDEuMAoJCQkpOwoKCQkJcmV0dXJuIGJhc2VTdHJlbmd0aCAqIGxlbmd0aEZhbGxvZmYgKiBmYWRlRmFsbG9mZiAqIHNwcmVhZEZhY3RvciAqIHB1bHNlOwoJCX0KCgkJdm9pZCBtYWluSW1hZ2Uob3V0IHZlYzQgY29sLCB2ZWMyIGZyYWdDb29yZCkgewoJCQl2ZWMyIHJlc29sdXRpb24gPSB1UmVzb2x1dGlvbjsKCQkJZmxvYXQgdGltZSAgICAgICA9IHVUaW1lOwoKCQkJdmVjMiBjb29yZCAgPSBmcmFnQ29vcmQ7CgkJCXZlYzIgcmF5UG9zID0gdmVjMih1QW5jaG9yWCwgdUFuY2hvclkpICogcmVzb2x1dGlvbjsKCQkJdmVjMiByYXlEaXIgPSBub3JtYWxpemUodVJheURpcik7CgoJCQlmbG9hdCBtYXhEaW0gPSBsZW5ndGgocmVzb2x1dGlvbik7CgoJCQlmbG9hdCByczEgPSByYXlTdHJlbmd0aChyYXlQb3MsIHJheURpciwgY29vcmQsIDM2LjIyMTQsIDIxLjExMzQ5LCAxLjUgKiB1U3BlZWQsIHRpbWUsIG1heERpbSk7CgkJCWZsb2F0IHJzMiA9IHJheVN0cmVuZ3RoKHJheVBvcywgcmF5RGlyLCBjb29yZCwgMjIuMzk5MSwgMTguMDIzNCwgIDEuMSAqIHVTcGVlZCwgdGltZSwgbWF4RGltKTsKCgkJCQlmbG9hdCBpbnRlbnNpdHlTY2FsZSA9IG1heCh1SW50ZW5zaXR5LCAwLjApOwoJCQkJZmxvYXQgaW50ZW5zaXR5Rm9yU2hhcGUgPSBjbGFtcChpbnRlbnNpdHlTY2FsZSwgMC4wLCAxLjApOwoJCQkJZmxvYXQgc2hhcGVFeHBvbmVudCA9IG1peCgyLjM1LCAxLjM1LCBpbnRlbnNpdHlGb3JTaGFwZSk7CgkJCQlmbG9hdCBzdHJlbmd0aCA9IHJzMSAqIDAuNSArIHJzMiAqIDAuNDsKCQkJCWZsb2F0IHNoYXBlZFN0cmVuZ3RoID0gcG93KGNsYW1wKHN0cmVuZ3RoLCAwLjAsIDEuMCksIHNoYXBlRXhwb25lbnQpOwoJCQkJZmxvYXQgc29mdE1hc2sgPSAxLjAgLSBleHAoLTMuMCAqIHNoYXBlZFN0cmVuZ3RoKTsKCQkJCXZlYzMgcmF5Q29sb3IgPSB1Q29sb3IgKiBzaGFwZWRTdHJlbmd0aCAqIGludGVuc2l0eVNjYWxlOwoKCQkJCWlmICh1Tm9pc2VBbW91bnQgPiAwLjApIHsKCQkJCQlmbG9hdCBuID0gbm9pc2UyKGNvb3JkICogMC4wMSArIHRpbWUgKiAwLjEpOwoJCQkJCWZsb2F0IG5vaXNlTWl4ID0gMS4wIC0gdU5vaXNlQW1vdW50ICsgdU5vaXNlQW1vdW50ICogbjsKCQkJCQlyYXlDb2xvciAqPSBub2lzZU1peDsKCQkJCQlzb2Z0TWFzayAqPSBtaXgoMS4wLCBub2lzZU1peCwgMC41KTsKCQkJCX0KCgkJCQl2ZWMzIHJnYiA9IGJsZW5kQWRhcHRpdmUodUJhY2tncm91bmRDb2xvciwgcmF5Q29sb3IsIHNvZnRNYXNrKTsKCgkJCQlpZiAodVNhdHVyYXRpb24gIT0gMS4wKSB7CgkJCQkJZmxvYXQgZ3JheSA9IGRvdChyZ2IsIHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCkpOwoJCQkJcmdiID0gbWl4KHZlYzMoZ3JheSksIHJnYiwgdVNhdHVyYXRpb24pOwoJCQl9CgoJCQljb2wgPSB2ZWM0KHJnYiwgMS4wKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCXZlYzIgZnJhZ0Nvb3JkID0gdlV2ICogdVJlc29sdXRpb24ueHk7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIGZyYWdDb29yZCk7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQkJI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlyZXNvbHV0aW9uVW5pZm9ybS5zZXQoJHNpemUud2lkdGgsICRzaXplLmhlaWdodCk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlwcmltYXJ5Q29sb3JVbmlmb3JtLnNldChjb2xvcik7CgkJYmFja2dyb3VuZENvbG9yVW5pZm9ybS5zZXQoYmFja2dyb3VuZENvbG9yKTsKCgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVDb2xvci52YWx1ZS5jb3B5KHByaW1hcnlDb2xvclVuaWZvcm0pOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVCYWNrZ3JvdW5kQ29sb3IudmFsdWUuY29weShiYWNrZ3JvdW5kQ29sb3JVbmlmb3JtKTsKCQltYXRlcmlhbC51bmlmb3Jtcy51QW5jaG9yWC52YWx1ZSA9IGFuY2hvclg7CgkJbWF0ZXJpYWwudW5pZm9ybXMudUFuY2hvclkudmFsdWUgPSBhbmNob3JZOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVSYXlEaXIudmFsdWUuc2V0KGRpcmVjdGlvblgsIGRpcmVjdGlvblkpOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVTcGVlZC52YWx1ZSA9IHNwZWVkOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVMaWdodFNwcmVhZC52YWx1ZSA9IGxpZ2h0U3ByZWFkOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVSYXlMZW5ndGgudmFsdWUgPSByYXlMZW5ndGg7CgkJbWF0ZXJpYWwudW5pZm9ybXMudVB1bHNhdGluZy52YWx1ZSA9IHB1bHNhdGluZzsKCQltYXRlcmlhbC51bmlmb3Jtcy51RmFkZURpc3RhbmNlLnZhbHVlID0gZmFkZURpc3RhbmNlOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVTYXR1cmF0aW9uLnZhbHVlID0gc2F0dXJhdGlvbjsKCQltYXRlcmlhbC51bmlmb3Jtcy51Tm9pc2VBbW91bnQudmFsdWUgPSBub2lzZUFtb3VudDsKCQltYXRlcmlhbC51bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJbWF0ZXJpYWwudW5pZm9ybXMudUludGVuc2l0eS52YWx1ZSA9IGludGVuc2l0eTsKCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoJfSk7Cjwvc2NyaXB0PgoKPFQuTWVzaD4KCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJPFQuU2hhZGVyTWF0ZXJpYWwKCQliaW5kOnJlZj17bWF0ZXJpYWx9CgkJe3ZlcnRleFNoYWRlcn0KCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJZGVwdGhUZXN0PXtmYWxzZX0KCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQl1bmlmb3Jtcz17ewoJCQl1VGltZTogeyB2YWx1ZTogMC4wIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1Q29sb3I6IHsgdmFsdWU6IHByaW1hcnlDb2xvclVuaWZvcm0gfSwKCQkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogYmFja2dyb3VuZENvbG9yVW5pZm9ybSB9LAoJCQl1QW5jaG9yWDogeyB2YWx1ZTogYW5jaG9yWCB9LAoJCQl1QW5jaG9yWTogeyB2YWx1ZTogYW5jaG9yWSB9LAoJCQl1UmF5RGlyOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMihkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKSB9LAoJCQl1U3BlZWQ6IHsgdmFsdWU6IHNwZWVkIH0sCgkJCXVMaWdodFNwcmVhZDogeyB2YWx1ZTogbGlnaHRTcHJlYWQgfSwKCQkJdVJheUxlbmd0aDogeyB2YWx1ZTogcmF5TGVuZ3RoIH0sCgkJCXVQdWxzYXRpbmc6IHsgdmFsdWU6IHB1bHNhdGluZyB9LAoJCQl1RmFkZURpc3RhbmNlOiB7IHZhbHVlOiBmYWRlRGlzdGFuY2UgfSwKCQkJdVNhdHVyYXRpb246IHsgdmFsdWU6IHNhdHVyYXRpb24gfSwKCQkJdU5vaXNlQW1vdW50OiB7IHZhbHVlOiBub2lzZUFtb3VudCB9LAoJCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogZGlzdG9ydGlvbiB9LAoJCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBpbnRlbnNpdHkgfSwKCQl9fQoJLz4KPC9ULk1lc2g+Cg==", - "components/halo/Halo.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0hhbG9TY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQ2FtZXJhIHJvdGF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJcm90YXRpb25TcGVlZD86IFNjZW5lUHJvcHNbInJvdGF0aW9uU3BlZWQiXTsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiB0aGUgY2FtZXJhIGZyb20gdGhlIGNlbnRlci4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQljYW1lcmFEaXN0YW5jZT86IFNjZW5lUHJvcHNbImNhbWVyYURpc3RhbmNlIl07CgkJLyoqCgkJICogRmllbGQgb2YgVmlldyAoRk9WKSBvZiB0aGUgY2FtZXJhIGluIGRlZ3JlZXMuCgkJICogQGRlZmF1bHQgNTUuMAoJCSAqLwoJCWZvdj86IFNjZW5lUHJvcHNbImZvdiJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChYKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5YPzogU2NlbmVQcm9wc1sic3VuWCJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChZKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5ZPzogU2NlbmVQcm9wc1sic3VuWSJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChaKS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzdW5aPzogU2NlbmVQcm9wc1sic3VuWiJdOwoJCS8qKgoJCSAqIE92ZXJhbGwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIHNjYXR0ZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IFNjZW5lUHJvcHNbImludGVuc2l0eSJdOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJcm90YXRpb25TcGVlZCA9IDAuNSwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJY2FtZXJhRGlzdGFuY2UgPSAzLjAsCgkJZm92ID0gNTUuMCwKCQlzdW5YID0gMC4wLAoJCXN1blkgPSAwLjAsCgkJc3VuWiA9IDEuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZQoJCQkJe3JvdGF0aW9uU3BlZWR9CgkJCQl7YmFja2dyb3VuZENvbG9yfQoJCQkJe2NhbWVyYURpc3RhbmNlfQoJCQkJe2Zvdn0KCQkJCXtzdW5YfQoJCQkJe3N1bll9CgkJCQl7c3VuWn0KCQkJCXtpbnRlbnNpdHl9CgkJCS8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/halo/HaloScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBDYW1lcmEgcm90YXRpb24gc3BlZWQgbXVsdGlwbGllci4KCQkgKiBAZGVmYXVsdCAwLjUKCQkgKi8KCQlyb3RhdGlvblNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBiYWNrZ3JvdW5kLgoJCSAqIEBkZWZhdWx0ICIjMDAwMDAwIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogRGlzdGFuY2Ugb2YgdGhlIGNhbWVyYSBmcm9tIHRoZSBjZW50ZXIuCgkJICogQGRlZmF1bHQgMy4wCgkJICovCgkJY2FtZXJhRGlzdGFuY2U/OiBudW1iZXI7CgkJLyoqCgkJICogRmllbGQgb2YgVmlldyAoRk9WKSBvZiB0aGUgY2FtZXJhIGluIGRlZ3JlZXMuCgkJICogQGRlZmF1bHQgNTUuMAoJCSAqLwoJCWZvdj86IG51bWJlcjsKCQkvKioKCQkgKiBTdW4gbGlnaHQgZGlyZWN0aW9uIHZlY3RvciAoWCkuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJc3VuWD86IG51bWJlcjsKCQkvKioKCQkgKiBTdW4gbGlnaHQgZGlyZWN0aW9uIHZlY3RvciAoWSkuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJc3VuWT86IG51bWJlcjsKCQkvKioKCQkgKiBTdW4gbGlnaHQgZGlyZWN0aW9uIHZlY3RvciAoWikuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3VuWj86IG51bWJlcjsKCQkvKioKCQkgKiBPdmVyYWxsIGludGVuc2l0eS9icmlnaHRuZXNzIG9mIHRoZSBzY2F0dGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlyb3RhdGlvblNwZWVkID0gMC41LAoJCWJhY2tncm91bmRDb2xvciA9ICIjMDAwMDAwIiwKCQljYW1lcmFEaXN0YW5jZSA9IDMuMCwKCQlmb3YgPSA1NS4wLAoJCXN1blggPSAwLjAsCgkJc3VuWSA9IDAuMCwKCQlzdW5aID0gMS4wLAoJCWludGVuc2l0eSA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IG1hdGVyaWFsID0gJHN0YXRlPFRIUkVFLlNoYWRlck1hdGVyaWFsPigpOwoJY29uc3QgeyBzaXplIH0gPSB1c2VUaHJlbHRlKCk7Cgljb25zdCByZXNvbHV0aW9uVW5pZm9ybSA9IG5ldyBUSFJFRS5WZWN0b3IyKDEsIDEpOwoJY29uc3Qgc3VuRGlyVW5pZm9ybSA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDEpOwoJY29uc3QgYmFja2dyb3VuZENvbG9yVW5pZm9ybSA9IG5ldyBUSFJFRS5Db2xvcigpOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdVJvdGF0aW9uU3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1Q2FtZXJhRGlzdGFuY2U7CgkJdW5pZm9ybSBmbG9hdCB1Rm92OwoJCXVuaWZvcm0gdmVjMyB1U3VuRGlyOwoJCXVuaWZvcm0gZmxvYXQgdUludGVuc2l0eTsKCgkJY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU5OwoJCWNvbnN0IGZsb2F0IE1BWCA9IDEwMDAwLjA7CgkJY29uc3QgZmxvYXQgUl9JTk5FUiA9IDEuMDsKCQljb25zdCBmbG9hdCBSID0gMS41OwoJCWNvbnN0IGludCBOVU1fT1VUX1NDQVRURVIgPSA4OwoJCWNvbnN0IGludCBOVU1fSU5fU0NBVFRFUiA9IDQwOyAvLyBBZGp1c3RlZCBmb3IgcGVyZm9ybWFuY2UgYnV0IGtlcHQgaGlnaCBmb3IgcXVhbGl0eQoKCQkvLyByYXkgaW50ZXJzZWN0cyBzcGhlcmUKCQl2ZWMyIHJheV92c19zcGhlcmUoIHZlYzMgcCwgdmVjMyBkaXIsIGZsb2F0IHIgKSB7CgkJCWZsb2F0IGIgPSBkb3QoIHAsIGRpciApOwoJCQlmbG9hdCBjID0gZG90KCBwLCBwICkgLSByICogcjsKCQkJZmxvYXQgZCA9IGIgKiBiIC0gYzsKCQkJaWYgKCBkIDwgMC4wICkgewoJCQkJcmV0dXJuIHZlYzIoIE1BWCwgLU1BWCApOwoJCQl9CgkJCWQgPSBzcXJ0KCBkICk7CgkJCXJldHVybiB2ZWMyKCAtYiAtIGQsIC1iICsgZCApOwoJCX0KCgkJLy8gbWllCgkJZmxvYXQgcGhhc2VfbWllKCBmbG9hdCBnLCBmbG9hdCBjLCBmbG9hdCBjYyApIHsKCQkJZmxvYXQgZ2cgPSBnICogZzsKCQkJZmxvYXQgYSA9ICggMS4wIC0gZ2cgKSAqICggMS4wICsgY2MgKTsKCQkJZmxvYXQgYiA9IDEuMCArIGdnIC0gMi4wICogZyAqIGM7CgkJCWIgKj0gc3FydCggYiApOwoJCQliICo9IDIuMCArIGdnOwoJCQlyZXR1cm4gKCAzLjAgLyA4LjAgLyBQSSApICogYSAvIGI7CgkJfQoKCQkvLyBSYXlsZWlnaAoJCWZsb2F0IHBoYXNlX3JheSggZmxvYXQgY2MgKSB7CgkJCXJldHVybiAoIDMuMCAvIDE2LjAgLyBQSSApICogKCAxLjAgKyBjYyApOwoJCX0KCgkJCWZsb2F0IGRlbnNpdHkoIHZlYzMgcCwgZmxvYXQgcGggKSB7CgkJCQlyZXR1cm4gZXhwKCAtbWF4KCBsZW5ndGgoIHAgKSAtIFJfSU5ORVIsIDAuMCApIC8gcGggKTsKCQkJfQoKCQkJZmxvYXQgY29sb3JMdW1hKHZlYzMgYykgewoJCQkJcmV0dXJuIGRvdChjLCB2ZWMzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKTsKCQkJfQoKCQkJdmVjMyBodWVGcm9tQ29sb3IodmVjMyBjLCB2ZWMzIGZhbGxiYWNrKSB7CgkJCQlmbG9hdCBtID0gbWF4KG1heChjLnIsIGMuZyksIGMuYik7CgkJCQlpZiAobSA8IDFlLTUpIHJldHVybiBmYWxsYmFjazsKCQkJCXJldHVybiBjbGFtcChjIC8gbSwgMC4wLCAxLjApOwoJCQl9CgoJCQl2ZWMzIGJsZW5kQWRhcHRpdmUodmVjMyBiZywgdmVjMyBlZmZlY3QsIGZsb2F0IHNvZnRuZXNzKSB7CgkJCQlmbG9hdCBiZ0x1bSA9IGNvbG9yTHVtYShiZyk7CgkJCQlmbG9hdCBsaWdodEJnID0gc21vb3Roc3RlcCgwLjQ1LCAwLjk1LCBiZ0x1bSk7CgkJCQlmbG9hdCBlZGdlID0gY2xhbXAoc29mdG5lc3MsIDAuMCwgMS4wKTsKCgkJCQl2ZWMzIGFkZGl0aXZlID0gYmcgKyBlZmZlY3Q7CgkJCQl2ZWMzIGVmZmVjdEh1ZSA9IGh1ZUZyb21Db2xvcihlZmZlY3QsIHZlYzMoMS4wKSk7CgkJCQl2ZWMzIHRpbnRUYXJnZXQgPSBtaXgoYmcsIGVmZmVjdEh1ZSwgMC44NSk7CgkJCQl2ZWMzIHRpbnQgPSBtaXgoYmcsIHRpbnRUYXJnZXQsIGVkZ2UpOwoKCQkJCXJldHVybiBtaXgoYWRkaXRpdmUsIHRpbnQsIGxpZ2h0QmcpOwoJCQl9CgoJCWZsb2F0IG9wdGljKCB2ZWMzIHAsIHZlYzMgcSwgZmxvYXQgcGggKSB7CgkJCXZlYzMgcyA9ICggcSAtIHAgKSAvIGZsb2F0KCBOVU1fT1VUX1NDQVRURVIgKTsKCQkJdmVjMyB2ID0gcCArIHMgKiAwLjU7CgkJCWZsb2F0IHN1bSA9IDAuMDsKCQkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX09VVF9TQ0FUVEVSOyBpKysgKSB7CgkJCQlzdW0gKz0gZGVuc2l0eSggdiwgcGggKTsKCQkJCXYgKz0gczsKCQkJfQoJCQlzdW0gKj0gbGVuZ3RoKCBzICk7CgkJCXJldHVybiBzdW07CgkJfQoKCQl2ZWMzIGluX3NjYXR0ZXIoIHZlYzMgbywgdmVjMyBkaXIsIHZlYzIgZSwgdmVjMyBsICkgewoJCQljb25zdCBmbG9hdCBwaF9yYXkgPSAwLjA1OwoJCQljb25zdCBmbG9hdCBwaF9taWUgPSAwLjAyOwoJCQljb25zdCB2ZWMzIGtfcmF5ID0gdmVjMyggMy44LCAxMy41LCAzMy4xICk7CgkJCWNvbnN0IHZlYzMga19taWUgPSB2ZWMzKCAyMS4wICk7CgkJCWNvbnN0IGZsb2F0IGtfbWllX2V4ID0gMS4xOwoKCQkJdmVjMyBzdW1fcmF5ID0gdmVjMyggMC4wICk7CgkJCXZlYzMgc3VtX21pZSA9IHZlYzMoIDAuMCApOwoJCQlmbG9hdCBuX3JheTAgPSAwLjA7CgkJCWZsb2F0IG5fbWllMCA9IDAuMDsKCQkJZmxvYXQgbGVuID0gKCBlLnkgLSBlLnggKSAvIGZsb2F0KCBOVU1fSU5fU0NBVFRFUiApOwoJCQl2ZWMzIHMgPSBkaXIgKiBsZW47CgkJCXZlYzMgdiA9IG8gKyBkaXIgKiAoIGUueCArIGxlbiAqIDAuNSApOwoKCQkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0lOX1NDQVRURVI7IGkrKywgdiArPSBzICkgewoJCQkJZmxvYXQgZF9yYXkgPSBkZW5zaXR5KCB2LCBwaF9yYXkgKSAqIGxlbjsKCQkJCWZsb2F0IGRfbWllID0gZGVuc2l0eSggdiwgcGhfbWllICkgKiBsZW47CgkJCQluX3JheTAgKz0gZF9yYXk7CgkJCQluX21pZTAgKz0gZF9taWU7CgoJCQkJdmVjMiBmID0gcmF5X3ZzX3NwaGVyZSggdiwgbCwgUiApOwoJCQkJdmVjMyB1ID0gdiArIGwgKiBmLnk7CgkJCQlmbG9hdCBuX3JheTEgPSBvcHRpYyggdiwgdSwgcGhfcmF5ICk7CgkJCQlmbG9hdCBuX21pZTEgPSBvcHRpYyggdiwgdSwgcGhfbWllICk7CgkJCQl2ZWMzIGF0dCA9IGV4cCggLSAoIG5fcmF5MCArIG5fcmF5MSApICoga19yYXkgLSAoIG5fbWllMCArIG5fbWllMSApICoga19taWUgKiBrX21pZV9leCApOwoJCQkJc3VtX3JheSArPSBkX3JheSAqIGF0dDsKCQkJCXN1bV9taWUgKz0gZF9taWUgKiBhdHQ7CgkJCX0KCQkJZmxvYXQgYyAgPSBkb3QoIGRpciwgLWwgKTsKCQkJZmxvYXQgY2MgPSBjICogYzsKCQkJdmVjMyBzY2F0dGVyID0gc3VtX3JheSAqIGtfcmF5ICogcGhhc2VfcmF5KCBjYyApICsgc3VtX21pZSAqIGtfbWllICogcGhhc2VfbWllKCAtMC43OCwgYywgY2MgKTsKCQkJcmV0dXJuIHNjYXR0ZXI7CgkJfQoKCQltYXQzIHJvdDN4eSggdmVjMiBhbmdsZSApIHsKCQkJdmVjMiBjID0gY29zKCBhbmdsZSApOwoJCQl2ZWMyIHMgPSBzaW4oIGFuZ2xlICk7CgkJCXJldHVybiBtYXQzKAoJCQkJYy55ICAgICAgLCAgMC4wLCAtcy55LAoJCQkJcy55ICogcy54LCAgYy54LCAgYy55ICogcy54LAoJCQkJcy55ICogYy54LCAtcy54LCAgYy55ICogYy54CgkJCSk7CgkJfQoKCQl2ZWMzIHJheV9kaXIoIGZsb2F0IGZvdiwgdmVjMiBzaXplLCB2ZWMyIHV2ICkgewoJCQl2ZWMyIHh5ID0gdXYgKiBzaXplIC0gc2l6ZSAqIDAuNTsKCQkJZmxvYXQgY290X2hhbGZfZm92ID0gdGFuKCByYWRpYW5zKCA5MC4wIC0gZm92ICogMC41ICkgKTsKCQkJZmxvYXQgeiA9IHNpemUueSAqIDAuNSAqIGNvdF9oYWxmX2ZvdjsKCQkJcmV0dXJuIG5vcm1hbGl6ZSggdmVjMyggeHksIC16ICkgKTsKCQl9CgoJCXZvaWQgbWFpbkltYWdlKCBvdXQgdmVjNCBmcmFnQ29sb3IsIGluIHZlYzIgdXYgKSB7CgkJCXZlYzMgZGlyID0gcmF5X2RpciggdUZvdiwgdVJlc29sdXRpb24ueHksIHV2ICk7CgkJCXZlYzMgZXllID0gdmVjMyggMC4wLCAwLjAsIHVDYW1lcmFEaXN0YW5jZSApOwoJCQltYXQzIHJvdCA9IHJvdDN4eSggdmVjMiggMC4wLCB1VGltZSAqIHVSb3RhdGlvblNwZWVkICkgKTsKCQkJZGlyID0gcm90ICogZGlyOwoJCQlleWUgPSByb3QgKiBleWU7CgkJCXZlYzMgbCA9IG5vcm1hbGl6ZSh1U3VuRGlyKTsKCQkJdmVjMiBlID0gcmF5X3ZzX3NwaGVyZSggZXllLCBkaXIsIFIgKTsKCQkJaWYgKCBlLnggPiBlLnkgKSB7CgkJCQlmcmFnQ29sb3IgPSB2ZWM0KCB1QmFja2dyb3VuZENvbG9yLCAxLjAgKTsKCQkJCXJldHVybjsKCQkJfQoJCQl2ZWMyIGYgPSByYXlfdnNfc3BoZXJlKCBleWUsIGRpciwgUl9JTk5FUiApOwoJCQllLnkgPSBtaW4oIGUueSwgZi54ICk7CgkJCQl2ZWMzIEkgPSBpbl9zY2F0dGVyKCBleWUsIGRpciwgZSwgbCApOwoJCQkJdmVjMyBoYWxvID0gSSAqIHVJbnRlbnNpdHkgKiAxMC4wOwoJCQkJZmxvYXQgc29mdE1hc2sgPSAxLjAgLSBleHAoLTEuMiAqIGNvbG9yTHVtYShoYWxvKSk7CgkJCQl2ZWMzIHJnYiA9IGJsZW5kQWRhcHRpdmUodUJhY2tncm91bmRDb2xvciwgaGFsbywgc29mdE1hc2spOwoJCQkJZnJhZ0NvbG9yID0gdmVjNCggcmdiLCAxLjAgKTsKCQkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCB2VXYpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CgkJCSNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PgoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KCRzaXplLndpZHRoLCAkc2l6ZS5oZWlnaHQpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJc3VuRGlyVW5pZm9ybS5zZXQoc3VuWCwgc3VuWSwgc3VuWikubm9ybWFsaXplKCk7CgkJYmFja2dyb3VuZENvbG9yVW5pZm9ybS5zZXQoYmFja2dyb3VuZENvbG9yKTsKCgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVSb3RhdGlvblNwZWVkLnZhbHVlID0gcm90YXRpb25TcGVlZDsKCQltYXRlcmlhbC51bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLmNvcHkoYmFja2dyb3VuZENvbG9yVW5pZm9ybSk7CgkJbWF0ZXJpYWwudW5pZm9ybXMudUNhbWVyYURpc3RhbmNlLnZhbHVlID0gY2FtZXJhRGlzdGFuY2U7CgkJbWF0ZXJpYWwudW5pZm9ybXMudUZvdi52YWx1ZSA9IGZvdjsKCQltYXRlcmlhbC51bmlmb3Jtcy51U3VuRGlyLnZhbHVlLmNvcHkoc3VuRGlyVW5pZm9ybSk7CgkJbWF0ZXJpYWwudW5pZm9ybXMudUludGVuc2l0eS52YWx1ZSA9IGludGVuc2l0eTsKCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoJfSk7Cjwvc2NyaXB0PgoKPFQuTWVzaD4KCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJPFQuU2hhZGVyTWF0ZXJpYWwKCQliaW5kOnJlZj17bWF0ZXJpYWx9CgkJe3ZlcnRleFNoYWRlcn0KCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJZGVwdGhUZXN0PXtmYWxzZX0KCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQl1bmlmb3Jtcz17ewoJCQl1VGltZTogeyB2YWx1ZTogMC4wIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBiYWNrZ3JvdW5kQ29sb3JVbmlmb3JtIH0sCgkJCXVSb3RhdGlvblNwZWVkOiB7IHZhbHVlOiByb3RhdGlvblNwZWVkIH0sCgkJCXVDYW1lcmFEaXN0YW5jZTogeyB2YWx1ZTogY2FtZXJhRGlzdGFuY2UgfSwKCQkJdUZvdjogeyB2YWx1ZTogZm92IH0sCgkJCXVTdW5EaXI6IHsgdmFsdWU6IHN1bkRpclVuaWZvcm0uY2xvbmUoKSB9LAoJCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBpbnRlbnNpdHkgfSwKCQl9fQoJLz4KPC9ULk1lc2g+Cg==", + "components/god-rays/GodRays.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dvZFJheXNTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAiI0ZGRkZGRiIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogSG9yaXpvbnRhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJYW5jaG9yWD86IFNjZW5lUHJvcHNbImFuY2hvclgiXTsKCQkvKioKCQkgKiBWZXJ0aWNhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMS4yCgkJICovCgkJYW5jaG9yWT86IFNjZW5lUHJvcHNbImFuY2hvclkiXTsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXJlY3Rpb25YPzogU2NlbmVQcm9wc1siZGlyZWN0aW9uWCJdOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAtMS4wCgkJICovCgkJZGlyZWN0aW9uWT86IFNjZW5lUHJvcHNbImRpcmVjdGlvblkiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBUaGUgc3ByZWFkIG9mIHRoZSBsaWdodCByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWxpZ2h0U3ByZWFkPzogU2NlbmVQcm9wc1sibGlnaHRTcHJlYWQiXTsKCQkvKioKCQkgKiBUaGUgbGVuZ3RoIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXJheUxlbmd0aD86IFNjZW5lUHJvcHNbInJheUxlbmd0aCJdOwoJCS8qKgoJCSAqIFdoZXRoZXIgdGhlIHJheXMgc2hvdWxkIHB1bHNhdGUuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQlwdWxzYXRpbmc/OiBTY2VuZVByb3BzWyJwdWxzYXRpbmciXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBhdCB3aGljaCB0aGUgcmF5cyBzdGFydCB0byBmYWRlIG91dC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlmYWRlRGlzdGFuY2U/OiBTY2VuZVByb3BzWyJmYWRlRGlzdGFuY2UiXTsKCQkvKioKCQkgKiBTYXR1cmF0aW9uIG9mIHRoZSBmaW5hbCByYXkgY29sb3JzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNhdHVyYXRpb24/OiBTY2VuZVByb3BzWyJzYXR1cmF0aW9uIl07CgkJLyoqCgkJICogQW1vdW50IG9mIGdyYWluL25vaXNlIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJbm9pc2VBbW91bnQ/OiBTY2VuZVByb3BzWyJub2lzZUFtb3VudCJdOwoJCS8qKgoJCSAqIEFtb3VudCBvZiB3YXZlIGRpc3RvcnRpb24gYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogU2NlbmVQcm9wc1siZGlzdG9ydGlvbiJdOwoJCS8qKgoJCSAqIEdsb2JhbCByYXkgaW50ZW5zaXR5LiBMb3dlciB2YWx1ZXMgZGltIGFuZCB0aWdodGVuIHJheXMsIGhpZ2hlciB2YWx1ZXMgYnJpZ2h0ZW4gdGhlbS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBTY2VuZVByb3BzWyJpbnRlbnNpdHkiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiNGRkZGRkYiLAoJCWJhY2tncm91bmRDb2xvciA9ICIjMDAwMDAwIiwKCQlhbmNob3JYID0gMC41LAoJCWFuY2hvclkgPSAxLjIsCgkJZGlyZWN0aW9uWCA9IDAuMCwKCQlkaXJlY3Rpb25ZID0gLTEuMCwKCQlzcGVlZCA9IDEuMCwKCQlsaWdodFNwcmVhZCA9IDEuMCwKCQlyYXlMZW5ndGggPSAxLjAsCgkJcHVsc2F0aW5nID0gZmFsc2UsCgkJZmFkZURpc3RhbmNlID0gMS4wLAoJCXNhdHVyYXRpb24gPSAxLjAsCgkJbm9pc2VBbW91bnQgPSAwLjAsCgkJZGlzdG9ydGlvbiA9IDAuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtjb2xvcn0KCQkJe2JhY2tncm91bmRDb2xvcn0KCQkJe2FuY2hvclh9CgkJCXthbmNob3JZfQoJCQl7ZGlyZWN0aW9uWH0KCQkJe2RpcmVjdGlvbll9CgkJCXtzcGVlZH0KCQkJe2xpZ2h0U3ByZWFkfQoJCQl7cmF5TGVuZ3RofQoJCQl7cHVsc2F0aW5nfQoJCQl7ZmFkZURpc3RhbmNlfQoJCQl7c2F0dXJhdGlvbn0KCQkJe25vaXNlQW1vdW50fQoJCQl7ZGlzdG9ydGlvbn0KCQkJe2ludGVuc2l0eX0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/god-rays/GodRaysScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIHJheXMuCgkJICogQGRlZmF1bHQgIiNGRkZGRkYiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBiYWNrZ3JvdW5kLgoJCSAqIEBkZWZhdWx0ICIjMDAwMDAwIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogSG9yaXpvbnRhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJYW5jaG9yWD86IG51bWJlcjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMS4yCgkJICovCgkJYW5jaG9yWT86IG51bWJlcjsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXJlY3Rpb25YPzogbnVtYmVyOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAtMS4wCgkJICovCgkJZGlyZWN0aW9uWT86IG51bWJlcjsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIFRoZSBzcHJlYWQgb2YgdGhlIGxpZ2h0IHJheXMuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJbGlnaHRTcHJlYWQ/OiBudW1iZXI7CgkJLyoqCgkJICogVGhlIGxlbmd0aCBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlyYXlMZW5ndGg/OiBudW1iZXI7CgkJLyoqCgkJICogV2hldGhlciB0aGUgcmF5cyBzaG91bGQgcHVsc2F0ZS4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCXB1bHNhdGluZz86IGJvb2xlYW47CgkJLyoqCgkJICogRGlzdGFuY2UgYXQgd2hpY2ggdGhlIHJheXMgc3RhcnQgdG8gZmFkZSBvdXQuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJZmFkZURpc3RhbmNlPzogbnVtYmVyOwoJCS8qKgoJCSAqIFNhdHVyYXRpb24gb2YgdGhlIGZpbmFsIHJheSBjb2xvcnMuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc2F0dXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBBbW91bnQgb2YgZ3JhaW4vbm9pc2UgYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlub2lzZUFtb3VudD86IG51bWJlcjsKCQkvKioKCQkgKiBBbW91bnQgb2Ygd2F2ZSBkaXN0b3J0aW9uIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBHbG9iYWwgcmF5IGludGVuc2l0eS4gTG93ZXIgdmFsdWVzIGRpbSBhbmQgdGlnaHRlbiByYXlzLCBoaWdoZXIgdmFsdWVzIGJyaWdodGVuIHRoZW0uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogbnVtYmVyOwoJfQoKCWxldCB7CgkJY29sb3IgPSAiI0ZGRkZGRiIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiLAoJCWFuY2hvclggPSAwLjUsCgkJYW5jaG9yWSA9IDEuMiwKCQlkaXJlY3Rpb25YID0gMC4wLAoJCWRpcmVjdGlvblkgPSAtMS4wLAoJCXNwZWVkID0gMS4wLAoJCWxpZ2h0U3ByZWFkID0gMS4wLAoJCXJheUxlbmd0aCA9IDEuMCwKCQlwdWxzYXRpbmcgPSBmYWxzZSwKCQlmYWRlRGlzdGFuY2UgPSAxLjAsCgkJc2F0dXJhdGlvbiA9IDEuMCwKCQlub2lzZUFtb3VudCA9IDAuMCwKCQlkaXN0b3J0aW9uID0gMC4wLAoJCWludGVuc2l0eSA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTx7CgkJdVRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWMyIH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVBbmNob3JYOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1QW5jaG9yWTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJheURpcjogeyB2YWx1ZTogVmVjMiB9OwoJCXVTcGVlZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUxpZ2h0U3ByZWFkOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmF5TGVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UHVsc2F0aW5nOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RmFkZURpc3RhbmNlOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1U2F0dXJhdGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdU5vaXNlQW1vdW50OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUludGVuc2l0eTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9PigpOwoKCWNvbnN0IGNsYW1wMDEgPSAodmFsdWU6IG51bWJlcikgPT4gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgdmFsdWUpKTsKCWNvbnN0IHNyZ2JUb0xpbmVhciA9ICh2YWx1ZTogbnVtYmVyKSA9PgoJCXZhbHVlIDw9IDAuMDQwNDUgPyB2YWx1ZSAvIDEyLjkyIDogTWF0aC5wb3coKHZhbHVlICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7CgoJY29uc3Qgbm9ybWFsaXplVHJpcGxldCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChyLCBnLCBiKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbY2xhbXAwMShyIC8gc2NhbGUpLCBjbGFtcDAxKGcgLyBzY2FsZSksIGNsYW1wMDEoYiAvIHNjYWxlKV07Cgl9OwoKCWNvbnN0IHBhcnNlSGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJCWlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSg0LCA2KSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX07CgoJbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCWNvbnN0IHBhcnNlQ3NzQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKCQlpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQkJY29uc3QgcGFyc2VyQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CgkJCXBhcnNlckNhbnZhcy53aWR0aCA9IDE7CgkJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCQljc3NDb2xvckNvbnRleHQgPSBwYXJzZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCQl9CgkJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gIiMwMDAwMDAiOwoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTsKCQljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCgkJaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgiIyIpKSB7CgkJCXJldHVybiBwYXJzZUhleENvbG9yKG5vcm1hbGl6ZWQpOwoJCX0KCgkJY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9yZ2JhP1woKFteKV0rKVwpL2kpOwoJCWlmICghbWF0Y2gpIHJldHVybiBudWxsOwoJCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkJLnNwbGl0KCIsIikKCQkJLm1hcCgocGFydCkgPT4gTnVtYmVyLnBhcnNlRmxvYXQocGFydC50cmltKCkpKQoJCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJCWlmIChwYXJ0cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKTsKCX07CgoJY29uc3QgdG9SZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgewoJCQljb25zdCBpbnQgPSBNYXRoLm1pbigweGZmZmZmZiwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih2YWx1ZSkpKTsKCQkJcmV0dXJuIFsKCQkJCSgoaW50ID4+IDE2KSAmIDI1NSkgLyAyNTUsCgkJCQkoKGludCA+PiA4KSAmIDI1NSkgLyAyNTUsCgkJCQkoaW50ICYgMjU1KSAvIDI1NSwKCQkJXTsKCQl9CgoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJCWNvbnN0IGhleCA9IHZhbHVlLnRyaW0oKTsKCQkJY29uc3QgcGFyc2VkID0gaGV4LnN0YXJ0c1dpdGgoIiMiKQoJCQkJPyBwYXJzZUhleENvbG9yKGhleCkKCQkJCTogcGFyc2VDc3NDb2xvcihoZXgpOwoJCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJCX0KCgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCgkJaWYgKAoJCQl2YWx1ZSAmJgoJCQl0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmCgkJCSJyIiBpbiB2YWx1ZSAmJgoJCQkiZyIgaW4gdmFsdWUgJiYKCQkJImIiIGluIHZhbHVlCgkJKSB7CgkJCWNvbnN0IHJnYiA9IHZhbHVlIGFzIHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChyZ2IuciwgcmdiLmcsIHJnYi5iKTsKCQl9CgoJCXJldHVybiBmYWxsYmFjazsKCX07CgoJY29uc3QgdG9MaW5lYXJSZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQlyZXR1cm4gW3NyZ2JUb0xpbmVhcihyKSwgc3JnYlRvTGluZWFyKGcpLCBzcmdiVG9MaW5lYXIoYildOwoJfTsKCgljb25zdCBhcHBseUNvbG9yID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdUFuY2hvclg7CgkJdW5pZm9ybSBmbG9hdCB1QW5jaG9yWTsKCQl1bmlmb3JtIHZlYzIgdVJheURpcjsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZDsKCQl1bmlmb3JtIGZsb2F0IHVMaWdodFNwcmVhZDsKCQl1bmlmb3JtIGZsb2F0IHVSYXlMZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1UHVsc2F0aW5nOwoJCXVuaWZvcm0gZmxvYXQgdUZhZGVEaXN0YW5jZTsKCQl1bmlmb3JtIGZsb2F0IHVTYXR1cmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdU5vaXNlQW1vdW50OwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb247CgkJdW5pZm9ybSBmbG9hdCB1SW50ZW5zaXR5OwoKCQlmbG9hdCBub2lzZTIodmVjMiBzdCkgewoJCQlyZXR1cm4gZnJhY3Qoc2luKGRvdChzdCwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzMTIzKTsKCQl9CgoJCWZsb2F0IGRpdGhlck5vaXNlKHZlYzIgcCkgewoJCQlyZXR1cm4gZnJhY3QoNTIuOTgyOTE4OSAqIGZyYWN0KGRvdChwLCB2ZWMyKDAuMDY3MTEwNTYsIDAuMDA1ODM3MTUpKSkpOwoJCX0KCgkJZmxvYXQgY29sb3JMdW1hKHZlYzMgYykgewoJCQlyZXR1cm4gZG90KGMsIHZlYzMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpOwoJCX0KCgkJdmVjMyBodWVGcm9tQ29sb3IodmVjMyBjLCB2ZWMzIGZhbGxiYWNrKSB7CgkJCWZsb2F0IG0gPSBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTsKCQkJaWYgKG0gPCAxZS01KSByZXR1cm4gZmFsbGJhY2s7CgkJCXJldHVybiBjbGFtcChjIC8gbSwgMC4wLCAxLjApOwoJCX0KCgkJdmVjMyBibGVuZEFkYXB0aXZlKHZlYzMgYmcsIHZlYzMgZWZmZWN0LCBmbG9hdCBzb2Z0bmVzcykgewoJCQlmbG9hdCBiZ0x1bSA9IGNvbG9yTHVtYShiZyk7CgkJCWZsb2F0IGxpZ2h0QmcgPSBzbW9vdGhzdGVwKDAuNDUsIDAuOTUsIGJnTHVtKTsKCQkJZmxvYXQgZWRnZSA9IGNsYW1wKHNvZnRuZXNzLCAwLjAsIDEuMCk7CgkJCWZsb2F0IHRpbnRFbmVyZ3kgPSAxLjAgLSBleHAoLTQuMCAqIGNvbG9yTHVtYShlZmZlY3QpKTsKCgkJCXZlYzMgYWRkaXRpdmUgPSBiZyArIGVmZmVjdDsKCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQl2ZWMzIHRpbnRUYXJnZXQgPSBtaXgoYmcsIGVmZmVjdEh1ZSwgMC45KTsKCQkJdmVjMyB0aW50ID0gbWl4KGJnLCB0aW50VGFyZ2V0LCBlZGdlICogdGludEVuZXJneSk7CgoJCQlyZXR1cm4gbWl4KGFkZGl0aXZlLCB0aW50LCBsaWdodEJnKTsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQlmbG9hdCByYXlTdHJlbmd0aCgKCQkJdmVjMiByYXlTb3VyY2UsCgkJCXZlYzIgcmF5RGlyLAoJCQl2ZWMyIGNvb3JkLAoJCQlmbG9hdCBzZWVkQSwKCQkJZmxvYXQgc2VlZEIsCgkJCWZsb2F0IHNwZWVkLAoJCQlmbG9hdCB0aW1lLAoJCQlmbG9hdCBtYXhEaW0KCQkpIHsKCQkJdmVjMiBzb3VyY2VUb0Nvb3JkID0gY29vcmQgLSByYXlTb3VyY2U7CgkJCXZlYzIgZGlyTm9ybSA9IG5vcm1hbGl6ZShzb3VyY2VUb0Nvb3JkKTsKCQkJZmxvYXQgY29zQW5nbGUgPSBkb3QoZGlyTm9ybSwgcmF5RGlyKTsKCgkJCWZsb2F0IGRpc3RvcnRlZEFuZ2xlID0gY29zQW5nbGUKCQkJCSsgdURpc3RvcnRpb24gKiBzaW4odGltZSAqIDIuMCArIGxlbmd0aChzb3VyY2VUb0Nvb3JkKSAqIDAuMDEpICogMC4yOwoKCQkJZmxvYXQgc3ByZWFkRmFjdG9yID0gcG93KG1heChkaXN0b3J0ZWRBbmdsZSwgMC4wKSwgMS4wIC8gbWF4KHVMaWdodFNwcmVhZCwgMC4wMDEpKTsKCgkJCWZsb2F0IGRpc3QgPSBsZW5ndGgoc291cmNlVG9Db29yZCk7CgkJCWZsb2F0IG1heERpc3QgPSBtYXhEaW0gKiB1UmF5TGVuZ3RoOwoJCQlmbG9hdCBsZW5ndGhGYWxsb2ZmID0gY2xhbXAoKG1heERpc3QgLSBkaXN0KSAvIG1heERpc3QsIDAuMCwgMS4wKTsKCgkJCWZsb2F0IGZhZGVGYWxsb2ZmID0gY2xhbXAoCgkJCQkobWF4RGltICogdUZhZGVEaXN0YW5jZSAtIGRpc3QpIC8gKG1heERpbSAqIHVGYWRlRGlzdGFuY2UpLAoJCQkJMC41LCAxLjAKCQkJKTsKCgkJCWZsb2F0IHB1bHNlID0gKHVQdWxzYXRpbmcgPiAwLjUpID8gKDAuOCArIDAuMiAqIHNpbih0aW1lICogc3BlZWQgKiAzLjApKSA6IDEuMDsKCgkJCWZsb2F0IGJhc2VTdHJlbmd0aCA9IGNsYW1wKAoJCQkJKDAuNDUgKyAwLjE1ICogc2luKGRpc3RvcnRlZEFuZ2xlICogc2VlZEEgKyB0aW1lICogc3BlZWQpKSArCgkJCQkoMC4zICArIDAuMiAgKiBjb3MoLWRpc3RvcnRlZEFuZ2xlICogc2VlZEIgKyB0aW1lICogc3BlZWQpKSwKCQkJCTAuMCwgMS4wCgkJCSk7CgoJCQlyZXR1cm4gYmFzZVN0cmVuZ3RoICogbGVuZ3RoRmFsbG9mZiAqIGZhZGVGYWxsb2ZmICogc3ByZWFkRmFjdG9yICogcHVsc2U7CgkJfQoKCQl2b2lkIG1haW5JbWFnZShvdXQgdmVjNCBjb2wsIHZlYzIgZnJhZ0Nvb3JkKSB7CgkJCXZlYzIgcmVzb2x1dGlvbiA9IHVSZXNvbHV0aW9uOwoJCQlmbG9hdCB0aW1lID0gdVRpbWU7CgoJCQl2ZWMyIGNvb3JkID0gZnJhZ0Nvb3JkOwoJCQl2ZWMyIHJheVBvcyA9IHZlYzIodUFuY2hvclgsIHVBbmNob3JZKSAqIHJlc29sdXRpb247CgkJCXZlYzIgcmF5RGlyID0gbm9ybWFsaXplKHVSYXlEaXIpOwoKCQkJZmxvYXQgbWF4RGltID0gbGVuZ3RoKHJlc29sdXRpb24pOwoKCQkJZmxvYXQgcnMxID0gcmF5U3RyZW5ndGgocmF5UG9zLCByYXlEaXIsIGNvb3JkLCAzNi4yMjE0LCAyMS4xMTM0OSwgMS41ICogdVNwZWVkLCB0aW1lLCBtYXhEaW0pOwoJCQlmbG9hdCByczIgPSByYXlTdHJlbmd0aChyYXlQb3MsIHJheURpciwgY29vcmQsIDIyLjM5OTEsIDE4LjAyMzQsIDEuMSAqIHVTcGVlZCwgdGltZSwgbWF4RGltKTsKCgkJCWZsb2F0IGludGVuc2l0eVNjYWxlID0gbWF4KHVJbnRlbnNpdHksIDAuMCk7CgkJCWZsb2F0IGludGVuc2l0eUZvclNoYXBlID0gY2xhbXAoaW50ZW5zaXR5U2NhbGUsIDAuMCwgMS4wKTsKCQkJZmxvYXQgc2hhcGVFeHBvbmVudCA9IG1peCgyLjM1LCAxLjM1LCBpbnRlbnNpdHlGb3JTaGFwZSk7CgkJCWZsb2F0IHN0cmVuZ3RoID0gcnMxICogMC41ICsgcnMyICogMC40OwoJCQlmbG9hdCBzaGFwZWRTdHJlbmd0aCA9IHBvdyhjbGFtcChzdHJlbmd0aCwgMC4wLCAxLjApLCBzaGFwZUV4cG9uZW50KTsKCQkJZmxvYXQgc29mdE1hc2sgPSAxLjAgLSBleHAoLTMuMCAqIHNoYXBlZFN0cmVuZ3RoKTsKCQkJdmVjMyByYXlDb2xvciA9IHVDb2xvciAqIHNoYXBlZFN0cmVuZ3RoICogaW50ZW5zaXR5U2NhbGU7CgoJCQlpZiAodU5vaXNlQW1vdW50ID4gMC4wKSB7CgkJCQlmbG9hdCBuID0gbm9pc2UyKGNvb3JkICogMC4wMSArIHRpbWUgKiAwLjEpOwoJCQkJZmxvYXQgbm9pc2VNaXggPSAxLjAgLSB1Tm9pc2VBbW91bnQgKyB1Tm9pc2VBbW91bnQgKiBuOwoJCQkJcmF5Q29sb3IgKj0gbm9pc2VNaXg7CgkJCQlzb2Z0TWFzayAqPSBtaXgoMS4wLCBub2lzZU1peCwgMC41KTsKCQkJfQoKCQkJdmVjMyByZ2IgPSBibGVuZEFkYXB0aXZlKHVCYWNrZ3JvdW5kQ29sb3IsIHJheUNvbG9yLCBzb2Z0TWFzayk7CgoJCQlpZiAodVNhdHVyYXRpb24gIT0gMS4wKSB7CgkJCQlmbG9hdCBncmF5ID0gZG90KHJnYiwgdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KSk7CgkJCQlyZ2IgPSBtaXgodmVjMyhncmF5KSwgcmdiLCB1U2F0dXJhdGlvbik7CgkJCX0KCgkJCXJnYiArPSAoZGl0aGVyTm9pc2UoZnJhZ0Nvb3JkICsgdmVjMih1VGltZSAqIDYwLjApKSAtIDAuNSkgLyAyNTUuMDsKCQkJcmdiID0gY2xhbXAocmdiLCAwLjAsIDEuMCk7CgoJCQljb2wgPSB2ZWM0KHJnYiwgMS4wKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCXZlYzIgZnJhZ0Nvb3JkID0gdlV2ICogdVJlc29sdXRpb24ueHk7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIGZyYWdDb29yZCk7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQlhcHBseUNvbG9yKHVuaWZvcm1zLnVDb2xvci52YWx1ZSwgY29sb3IsIFsxLCAxLCAxXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJdW5pZm9ybXMudUFuY2hvclgudmFsdWUgPSBhbmNob3JYOwoJCXVuaWZvcm1zLnVBbmNob3JZLnZhbHVlID0gYW5jaG9yWTsKCQl1bmlmb3Jtcy51UmF5RGlyLnZhbHVlLnNldChkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTsKCQl1bmlmb3Jtcy51U3BlZWQudmFsdWUgPSBzcGVlZDsKCQl1bmlmb3Jtcy51TGlnaHRTcHJlYWQudmFsdWUgPSBsaWdodFNwcmVhZDsKCQl1bmlmb3Jtcy51UmF5TGVuZ3RoLnZhbHVlID0gcmF5TGVuZ3RoOwoJCXVuaWZvcm1zLnVQdWxzYXRpbmcudmFsdWUgPSBwdWxzYXRpbmcgPyAxIDogMDsKCQl1bmlmb3Jtcy51RmFkZURpc3RhbmNlLnZhbHVlID0gZmFkZURpc3RhbmNlOwoJCXVuaWZvcm1zLnVTYXR1cmF0aW9uLnZhbHVlID0gc2F0dXJhdGlvbjsKCQl1bmlmb3Jtcy51Tm9pc2VBbW91bnQudmFsdWUgPSBub2lzZUFtb3VudDsKCQl1bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJdW5pZm9ybXMudUludGVuc2l0eS52YWx1ZSA9IGludGVuc2l0eTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbml0aWFsQ29sb3IgPSB0b0xpbmVhclJnYihjb2xvciwgWzEsIDEsIDFdKTsKCQljb25zdCBpbml0aWFsQmFja2dyb3VuZCA9IHRvTGluZWFyUmdiKGJhY2tncm91bmRDb2xvciwgWzAsIDAsIDBdKTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdVRpbWU6IHsgdmFsdWU6IDAuMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUNvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoaW5pdGlhbENvbG9yWzBdLCBpbml0aWFsQ29sb3JbMV0sIGluaXRpYWxDb2xvclsyXSksCgkJCX0sCgkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMygKCQkJCQlpbml0aWFsQmFja2dyb3VuZFswXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZFsxXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZFsyXSwKCQkJCSksCgkJCX0sCgkJCXVBbmNob3JYOiB7IHZhbHVlOiBhbmNob3JYIH0sCgkJCXVBbmNob3JZOiB7IHZhbHVlOiBhbmNob3JZIH0sCgkJCXVSYXlEaXI6IHsgdmFsdWU6IG5ldyBWZWMyKGRpcmVjdGlvblgsIGRpcmVjdGlvblkpIH0sCgkJCXVTcGVlZDogeyB2YWx1ZTogc3BlZWQgfSwKCQkJdUxpZ2h0U3ByZWFkOiB7IHZhbHVlOiBsaWdodFNwcmVhZCB9LAoJCQl1UmF5TGVuZ3RoOiB7IHZhbHVlOiByYXlMZW5ndGggfSwKCQkJdVB1bHNhdGluZzogeyB2YWx1ZTogcHVsc2F0aW5nID8gMSA6IDAgfSwKCQkJdUZhZGVEaXN0YW5jZTogeyB2YWx1ZTogZmFkZURpc3RhbmNlIH0sCgkJCXVTYXR1cmF0aW9uOiB7IHZhbHVlOiBzYXR1cmF0aW9uIH0sCgkJCXVOb2lzZUFtb3VudDogeyB2YWx1ZTogbm9pc2VBbW91bnQgfSwKCQkJdURpc3RvcnRpb246IHsgdmFsdWU6IGRpc3RvcnRpb24gfSwKCQkJdUludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJfTsKCgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/halo/Halo.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0hhbG9TY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQ2FtZXJhIHJvdGF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJcm90YXRpb25TcGVlZD86IFNjZW5lUHJvcHNbInJvdGF0aW9uU3BlZWQiXTsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiB0aGUgY2FtZXJhIGZyb20gdGhlIGNlbnRlci4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQljYW1lcmFEaXN0YW5jZT86IFNjZW5lUHJvcHNbImNhbWVyYURpc3RhbmNlIl07CgkJLyoqCgkJICogRmllbGQgb2YgVmlldyAoRk9WKSBvZiB0aGUgY2FtZXJhIGluIGRlZ3JlZXMuCgkJICogQGRlZmF1bHQgNTUuMAoJCSAqLwoJCWZvdj86IFNjZW5lUHJvcHNbImZvdiJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChYKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5YPzogU2NlbmVQcm9wc1sic3VuWCJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChZKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5ZPzogU2NlbmVQcm9wc1sic3VuWSJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChaKS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzdW5aPzogU2NlbmVQcm9wc1sic3VuWiJdOwoJCS8qKgoJCSAqIE92ZXJhbGwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIHNjYXR0ZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IFNjZW5lUHJvcHNbImludGVuc2l0eSJdOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJcm90YXRpb25TcGVlZCA9IDAuNSwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJY2FtZXJhRGlzdGFuY2UgPSAzLjAsCgkJZm92ID0gNTUuMCwKCQlzdW5YID0gMC4wLAoJCXN1blkgPSAwLjAsCgkJc3VuWiA9IDEuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtyb3RhdGlvblNwZWVkfQoJCQl7YmFja2dyb3VuZENvbG9yfQoJCQl7Y2FtZXJhRGlzdGFuY2V9CgkJCXtmb3Z9CgkJCXtzdW5YfQoJCQl7c3VuWX0KCQkJe3N1blp9CgkJCXtpbnRlbnNpdHl9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/halo/HaloScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIENhbWVyYSByb3RhdGlvbiBzcGVlZCBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDAuNQoJCSAqLwoJCXJvdGF0aW9uU3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiB0aGUgY2FtZXJhIGZyb20gdGhlIGNlbnRlci4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQljYW1lcmFEaXN0YW5jZT86IG51bWJlcjsKCQkvKioKCQkgKiBGaWVsZCBvZiBWaWV3IChGT1YpIG9mIHRoZSBjYW1lcmEgaW4gZGVncmVlcy4KCQkgKiBAZGVmYXVsdCA1NS4wCgkJICovCgkJZm92PzogbnVtYmVyOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChYKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5YPzogbnVtYmVyOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChZKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5ZPzogbnVtYmVyOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChaKS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzdW5aPzogbnVtYmVyOwoJCS8qKgoJCSAqIE92ZXJhbGwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIHNjYXR0ZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCXJvdGF0aW9uU3BlZWQgPSAwLjUsCgkJYmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiLAoJCWNhbWVyYURpc3RhbmNlID0gMy4wLAoJCWZvdiA9IDU1LjAsCgkJc3VuWCA9IDAuMCwKCQlzdW5ZID0gMC4wLAoJCXN1blogPSAxLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdVJvdGF0aW9uU3BlZWQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVDYW1lcmFEaXN0YW5jZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUZvdjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVN1bkRpcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVJbnRlbnNpdHk6IHsgdmFsdWU6IG51bWJlciB9OwoJfT4oKTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKCWNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCgkJcjogbnVtYmVyLAoJCWc6IG51bWJlciwKCQliOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgociwgZywgYikgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwoJfTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSk7Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHsKCQkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJCXJldHVybiBbCgkJCQkoKGludCA+PiAxNikgJiAyNTUpIC8gMjU1LAoJCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkJKGludCAmIDI1NSkgLyAyNTUsCgkJCV07CgkJfQoKCQlpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewoJCQljb25zdCBoZXggPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IGhleC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcihoZXgpCgkJCQk6IHBhcnNlQ3NzQ29sb3IoaGV4KTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgoJCWlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gMykgewoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldCh2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTsKCQl9CgoJCWlmICgKCQkJdmFsdWUgJiYKCQkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCQkiciIgaW4gdmFsdWUgJiYKCQkJImciIGluIHZhbHVlICYmCgkJCSJiIiBpbiB2YWx1ZQoJCSkgewoJCQljb25zdCByZ2IgPSB2YWx1ZSBhcyB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7CgkJfQoKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3Qgc2V0Q29sb3JVbmlmb3JtID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCBzZXRTdW5EaXJlY3Rpb24gPSAodGFyZ2V0OiBWZWMzLCB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB7CgkJY29uc3QgbGVuID0gTWF0aC5oeXBvdCh4LCB5LCB6KTsKCQlpZiAobGVuIDwgMWUtNikgewoJCQl0YXJnZXQuc2V0KDAsIDAsIDEpOwoJCQlyZXR1cm47CgkJfQoJCXRhcmdldC5zZXQoeCAvIGxlbiwgeSAvIGxlbiwgeiAvIGxlbik7Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdVJvdGF0aW9uU3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1Q2FtZXJhRGlzdGFuY2U7CgkJdW5pZm9ybSBmbG9hdCB1Rm92OwoJCXVuaWZvcm0gdmVjMyB1U3VuRGlyOwoJCXVuaWZvcm0gZmxvYXQgdUludGVuc2l0eTsKCgkJY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU5OwoJCWNvbnN0IGZsb2F0IE1BWCA9IDEwMDAwLjA7CgkJY29uc3QgZmxvYXQgUl9JTk5FUiA9IDEuMDsKCQljb25zdCBmbG9hdCBSID0gMS41OwoJCWNvbnN0IGludCBOVU1fT1VUX1NDQVRURVIgPSA4OwoJCWNvbnN0IGludCBOVU1fSU5fU0NBVFRFUiA9IDQwOwoKCQl2ZWMyIHJheV92c19zcGhlcmUodmVjMyBwLCB2ZWMzIGRpciwgZmxvYXQgcikgewoJCQlmbG9hdCBiID0gZG90KHAsIGRpcik7CgkJCWZsb2F0IGMgPSBkb3QocCwgcCkgLSByICogcjsKCQkJZmxvYXQgZCA9IGIgKiBiIC0gYzsKCQkJaWYgKGQgPCAwLjApIHsKCQkJCXJldHVybiB2ZWMyKE1BWCwgLU1BWCk7CgkJCX0KCQkJZCA9IHNxcnQoZCk7CgkJCXJldHVybiB2ZWMyKC1iIC0gZCwgLWIgKyBkKTsKCQl9CgoJCWZsb2F0IHBoYXNlX21pZShmbG9hdCBnLCBmbG9hdCBjLCBmbG9hdCBjYykgewoJCQlmbG9hdCBnZyA9IGcgKiBnOwoJCQlmbG9hdCBhID0gKDEuMCAtIGdnKSAqICgxLjAgKyBjYyk7CgkJCWZsb2F0IGIgPSAxLjAgKyBnZyAtIDIuMCAqIGcgKiBjOwoJCQliICo9IHNxcnQoYik7CgkJCWIgKj0gMi4wICsgZ2c7CgkJCXJldHVybiAoMy4wIC8gOC4wIC8gUEkpICogYSAvIGI7CgkJfQoKCQlmbG9hdCBwaGFzZV9yYXkoZmxvYXQgY2MpIHsKCQkJcmV0dXJuICgzLjAgLyAxNi4wIC8gUEkpICogKDEuMCArIGNjKTsKCQl9CgoJCWZsb2F0IGRlbnNpdHkodmVjMyBwLCBmbG9hdCBwaCkgewoJCQlyZXR1cm4gZXhwKC1tYXgobGVuZ3RoKHApIC0gUl9JTk5FUiwgMC4wKSAvIHBoKTsKCQl9CgoJCWZsb2F0IGNvbG9yTHVtYSh2ZWMzIGMpIHsKCQkJcmV0dXJuIGRvdChjLCB2ZWMzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKTsKCQl9CgoJCXZlYzMgaHVlRnJvbUNvbG9yKHZlYzMgYywgdmVjMyBmYWxsYmFjaykgewoJCQlmbG9hdCBtID0gbWF4KG1heChjLnIsIGMuZyksIGMuYik7CgkJCWlmIChtIDwgMWUtNSkgcmV0dXJuIGZhbGxiYWNrOwoJCQlyZXR1cm4gY2xhbXAoYyAvIG0sIDAuMCwgMS4wKTsKCQl9CgoJCXZlYzMgYmxlbmRBZGFwdGl2ZSh2ZWMzIGJnLCB2ZWMzIGVmZmVjdCwgZmxvYXQgc29mdG5lc3MpIHsKCQkJZmxvYXQgYmdMdW0gPSBjb2xvckx1bWEoYmcpOwoJCQlmbG9hdCBsaWdodEJnID0gc21vb3Roc3RlcCgwLjQ1LCAwLjk1LCBiZ0x1bSk7CgkJCWZsb2F0IGVkZ2UgPSBjbGFtcChzb2Z0bmVzcywgMC4wLCAxLjApOwoKCQkJdmVjMyBhZGRpdGl2ZSA9IGJnICsgZWZmZWN0OwoJCQl2ZWMzIGVmZmVjdEh1ZSA9IGh1ZUZyb21Db2xvcihlZmZlY3QsIHZlYzMoMS4wKSk7CgkJCXZlYzMgdGludFRhcmdldCA9IG1peChiZywgZWZmZWN0SHVlLCAwLjg1KTsKCQkJdmVjMyB0aW50ID0gbWl4KGJnLCB0aW50VGFyZ2V0LCBlZGdlKTsKCgkJCXJldHVybiBtaXgoYWRkaXRpdmUsIHRpbnQsIGxpZ2h0QmcpOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCWZsb2F0IG9wdGljKHZlYzMgcCwgdmVjMyBxLCBmbG9hdCBwaCkgewoJCQl2ZWMzIHMgPSAocSAtIHApIC8gZmxvYXQoTlVNX09VVF9TQ0FUVEVSKTsKCQkJdmVjMyB2ID0gcCArIHMgKiAwLjU7CgkJCWZsb2F0IHN1bSA9IDAuMDsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fT1VUX1NDQVRURVI7IGkrKykgewoJCQkJc3VtICs9IGRlbnNpdHkodiwgcGgpOwoJCQkJdiArPSBzOwoJCQl9CgkJCXN1bSAqPSBsZW5ndGgocyk7CgkJCXJldHVybiBzdW07CgkJfQoKCQl2ZWMzIGluX3NjYXR0ZXIodmVjMyBvLCB2ZWMzIGRpciwgdmVjMiBlLCB2ZWMzIGwpIHsKCQkJY29uc3QgZmxvYXQgcGhfcmF5ID0gMC4wNTsKCQkJY29uc3QgZmxvYXQgcGhfbWllID0gMC4wMjsKCQkJY29uc3QgdmVjMyBrX3JheSA9IHZlYzMoMy44LCAxMy41LCAzMy4xKTsKCQkJY29uc3QgdmVjMyBrX21pZSA9IHZlYzMoMjEuMCk7CgkJCWNvbnN0IGZsb2F0IGtfbWllX2V4ID0gMS4xOwoKCQkJdmVjMyBzdW1fcmF5ID0gdmVjMygwLjApOwoJCQl2ZWMzIHN1bV9taWUgPSB2ZWMzKDAuMCk7CgkJCWZsb2F0IG5fcmF5MCA9IDAuMDsKCQkJZmxvYXQgbl9taWUwID0gMC4wOwoJCQlmbG9hdCBsZW4gPSAoZS55IC0gZS54KSAvIGZsb2F0KE5VTV9JTl9TQ0FUVEVSKTsKCQkJdmVjMyBzID0gZGlyICogbGVuOwoJCQl2ZWMzIHYgPSBvICsgZGlyICogKGUueCArIGxlbiAqIDAuNSk7CgoJCQlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9JTl9TQ0FUVEVSOyBpKyspIHsKCQkJCWZsb2F0IGRfcmF5ID0gZGVuc2l0eSh2LCBwaF9yYXkpICogbGVuOwoJCQkJZmxvYXQgZF9taWUgPSBkZW5zaXR5KHYsIHBoX21pZSkgKiBsZW47CgkJCQluX3JheTAgKz0gZF9yYXk7CgkJCQluX21pZTAgKz0gZF9taWU7CgoJCQkJdmVjMiBmID0gcmF5X3ZzX3NwaGVyZSh2LCBsLCBSKTsKCQkJCXZlYzMgdSA9IHYgKyBsICogZi55OwoJCQkJZmxvYXQgbl9yYXkxID0gb3B0aWModiwgdSwgcGhfcmF5KTsKCQkJCWZsb2F0IG5fbWllMSA9IG9wdGljKHYsIHUsIHBoX21pZSk7CgkJCQl2ZWMzIGF0dCA9IGV4cCgtKG5fcmF5MCArIG5fcmF5MSkgKiBrX3JheSAtIChuX21pZTAgKyBuX21pZTEpICoga19taWUgKiBrX21pZV9leCk7CgkJCQlzdW1fcmF5ICs9IGRfcmF5ICogYXR0OwoJCQkJc3VtX21pZSArPSBkX21pZSAqIGF0dDsKCQkJCXYgKz0gczsKCQkJfQoJCQlmbG9hdCBjID0gZG90KGRpciwgLWwpOwoJCQlmbG9hdCBjYyA9IGMgKiBjOwoJCQl2ZWMzIHNjYXR0ZXIgPSBzdW1fcmF5ICoga19yYXkgKiBwaGFzZV9yYXkoY2MpICsgc3VtX21pZSAqIGtfbWllICogcGhhc2VfbWllKC0wLjc4LCBjLCBjYyk7CgkJCXJldHVybiBzY2F0dGVyOwoJCX0KCgkJbWF0MyByb3QzeHkodmVjMiBhbmdsZSkgewoJCQl2ZWMyIGMgPSBjb3MoYW5nbGUpOwoJCQl2ZWMyIHMgPSBzaW4oYW5nbGUpOwoJCQlyZXR1cm4gbWF0MygKCQkJCWMueSwgMC4wLCAtcy55LAoJCQkJcy55ICogcy54LCBjLngsIGMueSAqIHMueCwKCQkJCXMueSAqIGMueCwgLXMueCwgYy55ICogYy54CgkJCSk7CgkJfQoKCQl2ZWMzIHJheV9kaXIoZmxvYXQgZm92LCB2ZWMyIHNpemUsIHZlYzIgdXYpIHsKCQkJdmVjMiB4eSA9IHV2ICogc2l6ZSAtIHNpemUgKiAwLjU7CgkJCWZsb2F0IGNvdF9oYWxmX2ZvdiA9IHRhbihyYWRpYW5zKDkwLjAgLSBmb3YgKiAwLjUpKTsKCQkJZmxvYXQgeiA9IHNpemUueSAqIDAuNSAqIGNvdF9oYWxmX2ZvdjsKCQkJcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKHh5LCAteikpOwoJCX0KCgkJdm9pZCBtYWluSW1hZ2Uob3V0IHZlYzQgZnJhZ0NvbG9yLCBpbiB2ZWMyIHV2KSB7CgkJCXZlYzMgZGlyID0gcmF5X2Rpcih1Rm92LCB1UmVzb2x1dGlvbi54eSwgdXYpOwoJCQl2ZWMzIGV5ZSA9IHZlYzMoMC4wLCAwLjAsIHVDYW1lcmFEaXN0YW5jZSk7CgkJCW1hdDMgcm90ID0gcm90M3h5KHZlYzIoMC4wLCB1VGltZSAqIHVSb3RhdGlvblNwZWVkKSk7CgkJCWRpciA9IHJvdCAqIGRpcjsKCQkJZXllID0gcm90ICogZXllOwoJCQl2ZWMzIGwgPSBub3JtYWxpemUodVN1bkRpcik7CgkJCXZlYzIgZSA9IHJheV92c19zcGhlcmUoZXllLCBkaXIsIFIpOwoJCQlpZiAoZS54ID4gZS55KSB7CgkJCQlmcmFnQ29sb3IgPSB2ZWM0KHVCYWNrZ3JvdW5kQ29sb3IsIDEuMCk7CgkJCQlyZXR1cm47CgkJCX0KCQkJdmVjMiBmID0gcmF5X3ZzX3NwaGVyZShleWUsIGRpciwgUl9JTk5FUik7CgkJCWUueSA9IG1pbihlLnksIGYueCk7CgkJCXZlYzMgSSA9IGluX3NjYXR0ZXIoZXllLCBkaXIsIGUsIGwpOwoJCQl2ZWMzIGhhbG8gPSBJICogdUludGVuc2l0eSAqIDEwLjA7CgkJCWZsb2F0IHNvZnRNYXNrID0gMS4wIC0gZXhwKC0xLjIgKiBjb2xvckx1bWEoaGFsbykpOwoJCQl2ZWMzIHJnYiA9IGJsZW5kQWRhcHRpdmUodUJhY2tncm91bmRDb2xvciwgaGFsbywgc29mdE1hc2spOwoJCQlmcmFnQ29sb3IgPSB2ZWM0KHJnYiwgMS4wKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIHZVdik7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQlzZXRDb2xvclVuaWZvcm0oCgkJCXVuaWZvcm1zLnVCYWNrZ3JvdW5kQ29sb3IudmFsdWUsCgkJCWJhY2tncm91bmRDb2xvciwKCQkJWzAsIDAsIDBdLAoJCSk7CgkJdW5pZm9ybXMudVJvdGF0aW9uU3BlZWQudmFsdWUgPSByb3RhdGlvblNwZWVkOwoJCXVuaWZvcm1zLnVDYW1lcmFEaXN0YW5jZS52YWx1ZSA9IGNhbWVyYURpc3RhbmNlOwoJCXVuaWZvcm1zLnVGb3YudmFsdWUgPSBmb3Y7CgkJc2V0U3VuRGlyZWN0aW9uKHVuaWZvcm1zLnVTdW5EaXIudmFsdWUsIHN1blgsIHN1blksIHN1blopOwoJCXVuaWZvcm1zLnVJbnRlbnNpdHkudmFsdWUgPSBpbnRlbnNpdHk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbEJhY2tncm91bmQgPSB0b0xpbmVhclJnYihiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJY29uc3QgaW5pdGlhbFN1biA9IG5ldyBWZWMzKDAsIDAsIDEpOwoJCXNldFN1bkRpcmVjdGlvbihpbml0aWFsU3VuLCBzdW5YLCBzdW5ZLCBzdW5aKTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdVRpbWU6IHsgdmFsdWU6IDAuMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUJhY2tncm91bmRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzBdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzFdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzJdLAoJCQkJKSwKCQkJfSwKCQkJdVJvdGF0aW9uU3BlZWQ6IHsgdmFsdWU6IHJvdGF0aW9uU3BlZWQgfSwKCQkJdUNhbWVyYURpc3RhbmNlOiB7IHZhbHVlOiBjYW1lcmFEaXN0YW5jZSB9LAoJCQl1Rm92OiB7IHZhbHVlOiBmb3YgfSwKCQkJdVN1bkRpcjogeyB2YWx1ZTogaW5pdGlhbFN1biB9LAoJCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBpbnRlbnNpdHkgfSwKCQl9OwoKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgeyBnZW9tZXRyeSwgcHJvZ3JhbSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/image-trail/ImageTrail.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFRyYWlsQ29uZmlnIHsKCQkvKioKCQkgKiBUaW1lIGluIG1zIGJlZm9yZSBhbiBpbWFnZSBpcyByZW1vdmVkLgoJCSAqIEBkZWZhdWx0IDYwMAoJCSAqLwoJCWltYWdlTGlmZXNwYW4/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZXJ2YWwgaW4gbXMgZm9yIGNoZWNraW5nIGFuZCByZW1vdmluZyBleHBpcmVkIGltYWdlcy4KCQkgKiBAZGVmYXVsdCAxNgoJCSAqLwoJCXJlbW92YWxUaWNrTXM/OiBudW1iZXI7CgkJLyoqCgkJICogTWluaW11bSBkaXN0YW5jZSBpbiBwaXhlbHMgdGhlIG1vdXNlIG11c3QgbW92ZSB0byBzcGF3biBhIG5ldyBpbWFnZS4KCQkgKiBAZGVmYXVsdCA0MAoJCSAqLwoJCW1vdXNlVGhyZXNob2xkPzogbnVtYmVyOwoJCS8qKgoJCSAqIE1pbmltdW0gbW92ZW1lbnQgcmVxdWlyZWQgdG8gYmUgY29uc2lkZXJlZCBhY3RpdmUuCgkJICogQGRlZmF1bHQgNQoJCSAqLwoJCW1pbk1vdmVtZW50Rm9ySW1hZ2U/OiBudW1iZXI7CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIGZhZGUtaW4gYW5pbWF0aW9uIGluIG1zLgoJCSAqIEBkZWZhdWx0IDYwMAoJCSAqLwoJCWluRHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIGZhZGUtb3V0IGFuaW1hdGlvbiBpbiBtcy4KCQkgKiBAZGVmYXVsdCA4MDAKCQkgKi8KCQlvdXREdXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBGYWN0b3IgdG8gaW5jcmVhc2Ugcm90YXRpb24gYmFzZWQgb24gc3BlZWQuCgkJICogQGRlZmF1bHQgMwoJCSAqLwoJCW1heFJvdGF0aW9uRmFjdG9yPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2Ugcm90YXRpb24gYW5nbGUgaW4gZGVncmVlcy4KCQkgKiBAZGVmYXVsdCAzMAoJCSAqLwoJCWJhc2VSb3RhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBTbW9vdGhpbmcgZmFjdG9yIGZvciBzcGVlZCBjYWxjdWxhdGlvbiAoMC0xKS4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJc3BlZWRTbW9vdGhpbmdGYWN0b3I/OiBudW1iZXI7CgkJLyoqCgkJICogTWluaW11bSBzaXplIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuCgkJICogQGRlZmF1bHQgMjYwCgkJICovCgkJbWluSW1hZ2VTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIE1heGltdW0gc2l6ZSBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLgoJCSAqIEBkZWZhdWx0IDM0MAoJCSAqLwoJCW1heEltYWdlU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBTdGFnZ2VyIGRlbGF5IGZvciByZW1vdmluZyBpbWFnZXMgaW4gbXMuCgkJICogQGRlZmF1bHQgNDAKCQkgKi8KCQlzdGFnZ2VyT3V0PzogbnVtYmVyOwoJfQoKCWNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXF1aXJlZDxUcmFpbENvbmZpZz4gPSB7CgkJaW1hZ2VMaWZlc3BhbjogNjAwLAoJCXJlbW92YWxUaWNrTXM6IDE2LAoJCW1vdXNlVGhyZXNob2xkOiA0MCwKCQltaW5Nb3ZlbWVudEZvckltYWdlOiA1LAoJCWluRHVyYXRpb246IDYwMCwKCQlvdXREdXJhdGlvbjogODAwLAoJCW1heFJvdGF0aW9uRmFjdG9yOiAzLAoJCWJhc2VSb3RhdGlvbjogMzAsCgkJc3BlZWRTbW9vdGhpbmdGYWN0b3I6IDAuMjUsCgkJbWluSW1hZ2VTaXplOiAyNjAsCgkJbWF4SW1hZ2VTaXplOiAzNDAsCgkJc3RhZ2dlck91dDogNDAsCgl9OwoKCWNvbnN0IFBPT0xfQ0FQID0gMjQ7CgoJaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZSBzb3VyY2VzIHRvIHVzZSBmb3IgdGhlIHRyYWlsLgoJCSAqLwoJCWltYWdlczogc3RyaW5nW107CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0cmFpbCBlZmZlY3QuCgkJICovCgkJY29uZmlnPzogVHJhaWxDb25maWc7CgkJW3Byb3A6IHN0cmluZ106IHVua25vd247Cgl9CgoJY29uc3QgcHJvcHM6IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7Cgljb25zdCBjbGFzc05hbWUgPSAkZGVyaXZlZChwcm9wcy5jbGFzcyA/PyAiIik7Cgljb25zdCBpbWFnZXMgPSAkZGVyaXZlZChwcm9wcy5pbWFnZXMgPz8gW10pOwoJY29uc3QgY2ZnID0gJGRlcml2ZWQ8UmVxdWlyZWQ8VHJhaWxDb25maWc+Pih7CgkJLi4uREVGQVVMVF9DT05GSUcsCgkJLi4uKHByb3BzLmNvbmZpZyA/PyB7fSksCgl9KTsKCWNvbnN0IHJlc3RQcm9wcyA9ICRkZXJpdmVkKCgpID0+IHsKCQljb25zdCB7IGNsYXNzOiBfY2xhc3MsIGltYWdlczogX2ltYWdlcywgY29uZmlnOiBfY29uZmlnLCAuLi5yZXN0IH0gPSBwcm9wczsKCQlyZXR1cm4gcmVzdDsKCX0pOwoKCWxldCBjb250YWluZXJSZWY6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyUmVmID0gKG5vZGU6IEhUTUxEaXZFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyUmVmID09PSBub2RlKSB7CgkJCQljb250YWluZXJSZWYgPSBudWxsOwoJCQl9CgkJfTsKCX07CgoJdHlwZSBUcmFpbEl0ZW0gPSB7CgkJZWw6IEhUTUxJbWFnZUVsZW1lbnQ7CgkJcm90YXRpb246IG51bWJlcjsKCQlyZW1vdmVBdDogbnVtYmVyOwoJfTsKCgljb25zdCBzdGF0ZSA9IHsKCQlpbWFnZUluZGV4OiAwLAoJCWlzUG9pbnRlckluOiBmYWxzZSwKCQlpc01vdmluZzogZmFsc2UsCgkJbGFzdE1vdXNlWDogMCwKCQlsYXN0TW91c2VZOiAwLAoJCW1vdXNlWDogMCwKCQltb3VzZVk6IDAsCgkJcHJldk1vdXNlWDogMCwKCQlwcmV2TW91c2VZOiAwLAoJCWxhc3RNb3ZlVGltZTogRGF0ZS5ub3coKSwKCQlsYXN0UmVtb3ZhbFRpbWU6IDAsCgkJc21vb3RoZWRTcGVlZDogMCwKCQltYXhTcGVlZDogMC41LAoJCXJhZjogMCwKCX07CgoJY29uc3QgdHJhaWw6IFRyYWlsSXRlbVtdID0gW107Cgljb25zdCBwb29sOiBIVE1MSW1hZ2VFbGVtZW50W10gPSBbXTsKCgljb25zdCBnZXROZXh0SW1hZ2VTcmMgPSAoKSA9PiB7CgkJaWYgKCFpbWFnZXMubGVuZ3RoKSByZXR1cm4gIiI7CgkJY29uc3QgaWR4ID0gc3RhdGUuaW1hZ2VJbmRleCAlIGltYWdlcy5sZW5ndGg7CgkJc3RhdGUuaW1hZ2VJbmRleCA9IChzdGF0ZS5pbWFnZUluZGV4ICsgMSkgJSBpbWFnZXMubGVuZ3RoOwoJCXJldHVybiBpbWFnZXNbaWR4XSA/PyAiIjsKCX07CgoJY29uc3QgaGFzTW92ZWRFbm91Z2ggPSAoKSA9PiB7CgkJY29uc3QgZHggPSBzdGF0ZS5tb3VzZVggLSBzdGF0ZS5sYXN0TW91c2VYOwoJCWNvbnN0IGR5ID0gc3RhdGUubW91c2VZIC0gc3RhdGUubGFzdE1vdXNlWTsKCQlyZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpID4gY2ZnLm1vdXNlVGhyZXNob2xkOwoJfTsKCgljb25zdCBoYXNNb3ZlZEF0QWxsID0gKCkgPT4gewoJCWNvbnN0IGR4ID0gc3RhdGUubW91c2VYIC0gc3RhdGUucHJldk1vdXNlWDsKCQljb25zdCBkeSA9IHN0YXRlLm1vdXNlWSAtIHN0YXRlLnByZXZNb3VzZVk7CgkJcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KSA+IGNmZy5taW5Nb3ZlbWVudEZvckltYWdlOwoJfTsKCgljb25zdCBjYWxjU3BlZWQgPSAoKSA9PiB7CgkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQljb25zdCBkdCA9IG5vdyAtIHN0YXRlLmxhc3RNb3ZlVGltZTsKCQlpZiAoZHQgPD0gMCkgcmV0dXJuIHN0YXRlLnNtb290aGVkU3BlZWQ7CgoJCWNvbnN0IGRpc3QgPSBNYXRoLmh5cG90KAoJCQlzdGF0ZS5tb3VzZVggLSBzdGF0ZS5wcmV2TW91c2VYLAoJCQlzdGF0ZS5tb3VzZVkgLSBzdGF0ZS5wcmV2TW91c2VZLAoJCSk7CgkJY29uc3QgcmF3ID0gZGlzdCAvIGR0OwoKCQlpZiAocmF3ID4gc3RhdGUubWF4U3BlZWQpIHN0YXRlLm1heFNwZWVkID0gcmF3OwoKCQljb25zdCBub3JtID0gTWF0aC5taW4ocmF3IC8gKHN0YXRlLm1heFNwZWVkIHx8IDAuNSksIDEpOwoJCXN0YXRlLnNtb290aGVkU3BlZWQgPQoJCQlzdGF0ZS5zbW9vdGhlZFNwZWVkICogKDEgLSBjZmcuc3BlZWRTbW9vdGhpbmdGYWN0b3IpICsKCQkJbm9ybSAqIGNmZy5zcGVlZFNtb290aGluZ0ZhY3RvcjsKCQlzdGF0ZS5sYXN0TW92ZVRpbWUgPSBub3c7CgoJCXJldHVybiBzdGF0ZS5zbW9vdGhlZFNwZWVkOwoJfTsKCgljb25zdCBnZXRQb29sZWRJbWFnZSA9ICgpID0+IHsKCQljb25zdCBlbCA9IHBvb2wucG9wKCk7CgkJaWYgKGVsKSByZXR1cm4gZWw7CgoJCWNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwoJCWltZy5jbGFzc05hbWUgPQoJCQkicG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSBhYnNvbHV0ZSB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iOwoJCWltZy5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAiNTAlIDUwJSI7CgkJaW1nLmRyYWdnYWJsZSA9IGZhbHNlOwoJCXJldHVybiBpbWc7Cgl9OwoKCWNvbnN0IHJlY3ljbGVJbWFnZSA9IChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHsKCQlnc2FwLmtpbGxUd2VlbnNPZihpbWcpOwoJCWltZy5yZW1vdmUoKTsKCQlpbWcucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwoJCWltZy5jbGFzc05hbWUgPQoJCQkicG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSBhYnNvbHV0ZSB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iOwoJCWlmIChwb29sLmxlbmd0aCA8IFBPT0xfQ0FQKSBwb29sLnB1c2goaW1nKTsKCX07CgoJY29uc3QgaXNJbnNpZGVDb250YWluZXIgPSAoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpID0+IHsKCQljb25zdCBub2RlID0gY29udGFpbmVyUmVmOwoJCWlmICghbm9kZSkgcmV0dXJuIGZhbHNlOwoJCWNvbnN0IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCXJldHVybiAoCgkJCWNsaWVudFggPj0gcmVjdC5sZWZ0ICYmCgkJCWNsaWVudFggPD0gcmVjdC5yaWdodCAmJgoJCQljbGllbnRZID49IHJlY3QudG9wICYmCgkJCWNsaWVudFkgPD0gcmVjdC5ib3R0b20KCQkpOwoJfTsKCgljb25zdCBzcGF3blRyYWlsID0gKHNwZWVkID0gMC41KSA9PiB7CgkJY29uc3Qgbm9kZSA9IGNvbnRhaW5lclJlZjsKCQlpZiAoIW5vZGUgfHwgIWltYWdlcy5sZW5ndGgpIHJldHVybjsKCgkJY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJY29uc3QgeCA9IHN0YXRlLm1vdXNlWCAtIHJlY3QubGVmdDsKCQljb25zdCB5ID0gc3RhdGUubW91c2VZIC0gcmVjdC50b3A7CgoJCWNvbnN0IHNpemUgPSBNYXRoLnJvdW5kKAoJCQljZmcubWluSW1hZ2VTaXplICsgKGNmZy5tYXhJbWFnZVNpemUgLSBjZmcubWluSW1hZ2VTaXplKSAqIHNwZWVkLAoJCSk7CgkJY29uc3Qgcm90RmFjdG9yID0gMSArIHNwZWVkICogKGNmZy5tYXhSb3RhdGlvbkZhY3RvciAtIDEpOwoJCWNvbnN0IHJvdCA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIGNmZy5iYXNlUm90YXRpb24gKiByb3RGYWN0b3I7CgoJCWNvbnN0IGltZyA9IGdldFBvb2xlZEltYWdlKCk7CgkJaW1nLnNyYyA9IGdldE5leHRJbWFnZVNyYygpOwoJCWltZy53aWR0aCA9IHNpemU7CgkJaW1nLmhlaWdodCA9IHNpemU7CgoJCWltZy5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7CgkJaW1nLnN0eWxlLnRvcCA9IGAke3l9cHhgOwoJCWltZy5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDApIjsKCgkJbm9kZS5hcHBlbmRDaGlsZChpbWcpOwoKCQlnc2FwLnNldChpbWcsIHsgcm90YXRpb246IHJvdCB9KTsKCQlnc2FwLnRvKGltZywgewoJCQlzY2FsZTogMSwKCQkJZHVyYXRpb246IGNmZy5pbkR1cmF0aW9uIC8gMTAwMCwKCQkJZWFzZTogInBvd2VyMi5vdXQiLAoJCX0pOwoKCQl0cmFpbC5wdXNoKHsKCQkJZWw6IGltZywKCQkJcm90YXRpb246IHJvdCwKCQkJcmVtb3ZlQXQ6IERhdGUubm93KCkgKyBjZmcuaW1hZ2VMaWZlc3BhbiwKCQl9KTsKCX07CgoJY29uc3QgdHJ5RW1pdCA9ICgpID0+IHsKCQlpZiAoIXN0YXRlLmlzUG9pbnRlckluKSByZXR1cm47CgkJaWYgKGhhc01vdmVkRW5vdWdoKCkgJiYgaGFzTW92ZWRBdEFsbCgpKSB7CgkJCXN0YXRlLmxhc3RNb3VzZVggPSBzdGF0ZS5tb3VzZVg7CgkJCXN0YXRlLmxhc3RNb3VzZVkgPSBzdGF0ZS5tb3VzZVk7CgkJCWNvbnN0IHNwZWVkID0gY2FsY1NwZWVkKCk7CgkJCXNwYXduVHJhaWwoc3BlZWQpOwoJCQlzdGF0ZS5wcmV2TW91c2VYID0gc3RhdGUubW91c2VYOwoJCQlzdGF0ZS5wcmV2TW91c2VZID0gc3RhdGUubW91c2VZOwoJCX0KCX07CgoJY29uc3QgY3VsbE9sZCA9ICgpID0+IHsKCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCWlmIChub3cgLSBzdGF0ZS5sYXN0UmVtb3ZhbFRpbWUgPCBjZmcucmVtb3ZhbFRpY2tNcykgcmV0dXJuOwoJCWlmICghdHJhaWwubGVuZ3RoKSByZXR1cm47CgoJCWNvbnN0IGV4cGlyZWQgPSB0cmFpbC5maWx0ZXIoKGl0ZW0pID0+IG5vdyA+PSBpdGVtLnJlbW92ZUF0KTsKCQlpZiAoIWV4cGlyZWQubGVuZ3RoKSByZXR1cm47CgoJCWV4cGlyZWQuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHsKCQkJY29uc3QgeyBlbCB9ID0gaXRlbTsKCQkJZ3NhcC50byhlbCwgewoJCQkJZHVyYXRpb246IGNmZy5vdXREdXJhdGlvbiAvIDEwMDAsCgkJCQlzY2FsZTogMCwKCQkJCWVhc2U6ICJwb3dlcjQuaW5PdXQiLAoJCQkJZGVsYXk6IChpbmRleCAqIGNmZy5zdGFnZ2VyT3V0KSAvIDEwMDAsCgkJCQlvbkNvbXBsZXRlOiAoKSA9PiByZWN5Y2xlSW1hZ2UoZWwpLAoJCQl9KTsKCQl9KTsKCgkJZm9yIChsZXQgaSA9IHRyYWlsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7CgkJCWlmIChub3cgPj0gdHJhaWxbaV0ucmVtb3ZlQXQpIHsKCQkJCXRyYWlsLnNwbGljZShpLCAxKTsKCQkJfQoJCX0KCgkJc3RhdGUubGFzdFJlbW92YWxUaW1lID0gbm93OwoJfTsKCgljb25zdCB0aWNrID0gKCkgPT4gewoJCWlmIChzdGF0ZS5pc01vdmluZykgdHJ5RW1pdCgpOwoJCWN1bGxPbGQoKTsKCQlzdGF0ZS5yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7Cgl9OwoKCWNvbnN0IHJlc2V0VHJhaWwgPSAoKSA9PiB7CgkJdHJhaWwuZm9yRWFjaCgoeyBlbCB9KSA9PiB7CgkJCWdzYXAua2lsbFR3ZWVuc09mKGVsKTsKCQkJZWwucmVtb3ZlKCk7CgkJfSk7CgkJdHJhaWwubGVuZ3RoID0gMDsKCX07CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm47CgoJCWNvbnN0IG5vZGUgPSBjb250YWluZXJSZWY7CgkJaWYgKCFub2RlIHx8ICFpbWFnZXMubGVuZ3RoKSByZXR1cm47CgoJCWxldCBwb2ludGVySWRsZVRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsOwoKCQljb25zdCBvblBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHsKCQkJc3RhdGUucHJldk1vdXNlWCA9IHN0YXRlLm1vdXNlWDsKCQkJc3RhdGUucHJldk1vdXNlWSA9IHN0YXRlLm1vdXNlWTsKCQkJc3RhdGUubW91c2VYID0gZXZlbnQuY2xpZW50WDsKCQkJc3RhdGUubW91c2VZID0gZXZlbnQuY2xpZW50WTsKCQkJc3RhdGUuaXNQb2ludGVySW4gPSBpc0luc2lkZUNvbnRhaW5lcihldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTsKCgkJCWlmIChzdGF0ZS5pc1BvaW50ZXJJbikgewoJCQkJc3RhdGUuaXNNb3ZpbmcgPSB0cnVlOwoJCQkJaWYgKHBvaW50ZXJJZGxlVGltZW91dCkgd2luZG93LmNsZWFyVGltZW91dChwb2ludGVySWRsZVRpbWVvdXQpOwoJCQkJcG9pbnRlcklkbGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewoJCQkJCXN0YXRlLmlzTW92aW5nID0gZmFsc2U7CgkJCQkJcG9pbnRlcklkbGVUaW1lb3V0ID0gbnVsbDsKCQkJCX0sIDEwMCk7CgkJCX0KCQl9OwoKCQljb25zdCBvblBvaW50ZXJFbnRlciA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7CgkJCXN0YXRlLmlzUG9pbnRlckluID0gdHJ1ZTsKCQkJc3RhdGUuaXNNb3ZpbmcgPSBmYWxzZTsKCQkJc3RhdGUubW91c2VYID0gZXZlbnQuY2xpZW50WDsKCQkJc3RhdGUubW91c2VZID0gZXZlbnQuY2xpZW50WTsKCQkJc3RhdGUubGFzdE1vdXNlWCA9IGV2ZW50LmNsaWVudFg7CgkJCXN0YXRlLmxhc3RNb3VzZVkgPSBldmVudC5jbGllbnRZOwoJCQlzdGF0ZS5wcmV2TW91c2VYID0gZXZlbnQuY2xpZW50WDsKCQkJc3RhdGUucHJldk1vdXNlWSA9IGV2ZW50LmNsaWVudFk7CgkJCXN0YXRlLmxhc3RNb3ZlVGltZSA9IERhdGUubm93KCk7CgkJfTsKCgkJY29uc3Qgb25Qb2ludGVyTGVhdmUgPSAoKSA9PiB7CgkJCXN0YXRlLmlzUG9pbnRlckluID0gZmFsc2U7CgkJCXN0YXRlLmlzTW92aW5nID0gZmFsc2U7CgkJfTsKCgkJY29uc3Qgb25Ub3VjaE1vdmUgPSAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHsKCQkJaWYgKCFldmVudC50b3VjaGVzLmxlbmd0aCkgcmV0dXJuOwoJCQljb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07CgkJCWNvbnN0IGR4ID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHN0YXRlLnByZXZNb3VzZVgpOwoJCQljb25zdCBkeSA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSBzdGF0ZS5wcmV2TW91c2VZKTsKCQkJaWYgKGR5ID4gZHgpIHJldHVybjsKCgkJCXN0YXRlLnByZXZNb3VzZVggPSBzdGF0ZS5tb3VzZVg7CgkJCXN0YXRlLnByZXZNb3VzZVkgPSBzdGF0ZS5tb3VzZVk7CgkJCXN0YXRlLm1vdXNlWCA9IHRvdWNoLmNsaWVudFg7CgkJCXN0YXRlLm1vdXNlWSA9IHRvdWNoLmNsaWVudFk7CgkJCXN0YXRlLmlzUG9pbnRlckluID0gaXNJbnNpZGVDb250YWluZXIodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7CgkJCWlmIChzdGF0ZS5pc1BvaW50ZXJJbikgewoJCQkJc3RhdGUuaXNNb3ZpbmcgPSB0cnVlOwoJCQl9CgkJfTsKCgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIG9uUG9pbnRlck1vdmUsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKCQlub2RlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsIG9uUG9pbnRlckVudGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7CgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBvblBvaW50ZXJMZWF2ZSwgeyBwYXNzaXZlOiB0cnVlIH0pOwoJCW5vZGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgb25Ub3VjaE1vdmUsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKCgkJc3RhdGUucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAocG9pbnRlcklkbGVUaW1lb3V0KSB3aW5kb3cuY2xlYXJUaW1lb3V0KHBvaW50ZXJJZGxlVGltZW91dCk7CgkJCWNhbmNlbEFuaW1hdGlvbkZyYW1lKHN0YXRlLnJhZik7CgkJCW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBvblBvaW50ZXJNb3ZlKTsKCQkJbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCBvblBvaW50ZXJFbnRlcik7CgkJCW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgb25Qb2ludGVyTGVhdmUpOwoJCQlub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIG9uVG91Y2hNb3ZlKTsKCQkJcmVzZXRUcmFpbCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8ZGl2Cgl7Li4ucmVzdFByb3BzfQoJY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJSZWZ9Cj48L2Rpdj4K", - "components/infinite-gallery/InfiniteGallery.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMsIFQgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgR2FsbGVyeVNjZW5lIGZyb20gIi4vSW5maW5pdGVHYWxsZXJ5U2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIEdhbGxlcnlTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZXMgdG8gZGlzcGxheS4gQ2FuIGJlIHN0cmluZ3MgKFVSTCkgb3Igb2JqZWN0cyB3aXRoIHNyYyBhbmQgYWx0LgoJCSAqLwoJCWltYWdlczogU2NlbmVQcm9wc1siaW1hZ2VzIl07CgkJLyoqCgkJICogU2Nyb2xsIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBOdW1iZXIgb2YgaW1hZ2VzIHZpc2libGUgaW4gdGhlIHR1bm5lbCBhdCBvbmNlLgoJCSAqIEBkZWZhdWx0IDgKCQkgKi8KCQl2aXNpYmxlQ291bnQ/OiBTY2VuZVByb3BzWyJ2aXNpYmxlQ291bnQiXTsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIGZvciBmYWRlIGluL291dCBlZmZlY3RzIGJhc2VkIG9uIGRlcHRoLgoJCSAqLwoJCWZhZGVTZXR0aW5ncz86IFNjZW5lUHJvcHNbImZhZGVTZXR0aW5ncyJdOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIGJsdXIgaW4vb3V0IGVmZmVjdHMgYmFzZWQgb24gZGVwdGguCgkJICovCgkJYmx1clNldHRpbmdzPzogU2NlbmVQcm9wc1siYmx1clNldHRpbmdzIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCXNwZWVkID0gMSwKCQl2aXNpYmxlQ291bnQgPSA4LAoJCWZhZGVTZXR0aW5ncyA9IHsKCQkJZmFkZUluOiB7IHN0YXJ0OiAwLjAxLCBlbmQ6IDAuMjUgfSwKCQkJZmFkZU91dDogeyBzdGFydDogMC40MywgZW5kOiAwLjQ2IH0sCgkJfSwKCQlibHVyU2V0dGluZ3MgPSB7CgkJCWJsdXJJbjogeyBzdGFydDogMC4wLCBlbmQ6IDAuMiB9LAoJCQlibHVyT3V0OiB7IHN0YXJ0OiAwLjQzLCBlbmQ6IDAuNDYgfSwKCQkJbWF4Qmx1cjogOC4wLAoJCX0sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8VC5QZXJzcGVjdGl2ZUNhbWVyYSBtYWtlRGVmYXVsdCBwb3NpdGlvbj17WzAsIDAsIDBdfSBmb3Y9ezU1fSAvPgoJCQk8R2FsbGVyeVNjZW5lCgkJCQl7aW1hZ2VzfQoJCQkJe3NwZWVkfQoJCQkJe3Zpc2libGVDb3VudH0KCQkJCXtmYWRlU2V0dGluZ3N9CgkJCQl7Ymx1clNldHRpbmdzfQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/infinite-gallery/InfiniteGalleryScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyB1c2VUYXNrIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgeyBTUkdCQ29sb3JTcGFjZSB9IGZyb20gInRocmVlIjsKCWltcG9ydCB7IHVzZVRleHR1cmUgfSBmcm9tICJAdGhyZWx0ZS9leHRyYXMiOwoJaW1wb3J0IEltYWdlUGxhbmUgZnJvbSAiLi9JbWFnZVBsYW5lLnN2ZWx0ZSI7CgoJdHlwZSBJbWFnZUl0ZW0gPSBzdHJpbmcgfCB7IHNyYzogc3RyaW5nOyBhbHQ/OiBzdHJpbmcgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFycmF5IG9mIGltYWdlcyB0byBkaXNwbGF5LiBDYW4gYmUgc3RyaW5ncyAoVVJMKSBvciBvYmplY3RzIHdpdGggc3JjIGFuZCBhbHQuCgkJICovCgkJaW1hZ2VzOiBJbWFnZUl0ZW1bXTsKCQkvKioKCQkgKiBTY3JvbGwgc3BlZWQgbXVsdGlwbGllci4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogTnVtYmVyIG9mIGltYWdlcyB2aXNpYmxlIGluIHRoZSB0dW5uZWwgYXQgb25jZS4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJdmlzaWJsZUNvdW50PzogbnVtYmVyOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIGZhZGUgaW4vb3V0IGVmZmVjdHMgYmFzZWQgb24gZGVwdGguCgkJICovCgkJZmFkZVNldHRpbmdzPzogewoJCQlmYWRlSW46IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfTsKCQkJZmFkZU91dDogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OwoJCX07CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgYmx1ciBpbi9vdXQgZWZmZWN0cyBiYXNlZCBvbiBkZXB0aC4KCQkgKi8KCQlibHVyU2V0dGluZ3M/OiB7CgkJCWJsdXJJbjogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OwoJCQlibHVyT3V0OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07CgkJCW1heEJsdXI6IG51bWJlcjsKCQl9OwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCXNwZWVkID0gMSwKCQl2aXNpYmxlQ291bnQgPSA4LAoJCWZhZGVTZXR0aW5ncyA9IHsKCQkJZmFkZUluOiB7IHN0YXJ0OiAwLjA1LCBlbmQ6IDAuMTUgfSwKCQkJZmFkZU91dDogeyBzdGFydDogMC44NSwgZW5kOiAwLjk1IH0sCgkJfSwKCQlibHVyU2V0dGluZ3MgPSB7CgkJCWJsdXJJbjogeyBzdGFydDogMC4wLCBlbmQ6IDAuMSB9LAoJCQlibHVyT3V0OiB7IHN0YXJ0OiAwLjksIGVuZDogMS4wIH0sCgkJCW1heEJsdXI6IDMuMCwKCQl9LAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBERUZBVUxUX0RFUFRIX1JBTkdFID0gNTA7Cgljb25zdCBNQVhfSE9SSVpPTlRBTF9PRkZTRVQgPSA4OwoJY29uc3QgTUFYX1ZFUlRJQ0FMX09GRlNFVCA9IDg7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAp1bmlmb3JtIGZsb2F0IHNjcm9sbEZvcmNlOwp1bmlmb3JtIGZsb2F0IHRpbWU7CnVuaWZvcm0gZmxvYXQgaXNIb3ZlcmVkOwp2YXJ5aW5nIHZlYzIgdlV2Owp2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCnZvaWQgbWFpbigpIHsKICAgIHZVdiA9IHV2OwogICAgdk5vcm1hbCA9IG5vcm1hbDsKCiAgICB2ZWMzIHBvcyA9IHBvc2l0aW9uOwoKICAgIGZsb2F0IGN1cnZlSW50ZW5zaXR5ID0gc2Nyb2xsRm9yY2UgKiAwLjM7CgogICAgZmxvYXQgZGlzdGFuY2VGcm9tQ2VudGVyID0gbGVuZ3RoKHBvcy54eSk7CiAgICBmbG9hdCBjdXJ2ZSA9IGRpc3RhbmNlRnJvbUNlbnRlciAqIGRpc3RhbmNlRnJvbUNlbnRlciAqIGN1cnZlSW50ZW5zaXR5OwoKICAgIGZsb2F0IHJpcHBsZTEgPSBzaW4ocG9zLnggKiAyLjAgKyBzY3JvbGxGb3JjZSAqIDMuMCkgKiAwLjAyOwogICAgZmxvYXQgcmlwcGxlMiA9IHNpbihwb3MueSAqIDIuNSArIHNjcm9sbEZvcmNlICogMi4wKSAqIDAuMDE1OwogICAgZmxvYXQgY2xvdGhFZmZlY3QgPSAocmlwcGxlMSArIHJpcHBsZTIpICogYWJzKGN1cnZlSW50ZW5zaXR5KSAqIDIuMDsKCiAgICBmbG9hdCBmbGFnV2F2ZSA9IDAuMDsKICAgIGlmIChpc0hvdmVyZWQgPiAwLjUpIHsKICAgICAgICBmbG9hdCB3YXZlUGhhc2UgPSBwb3MueCAqIDMuMCArIHRpbWUgKiA4LjA7CiAgICAgICAgZmxvYXQgd2F2ZUFtcGxpdHVkZSA9IHNpbih3YXZlUGhhc2UpICogMC4xOwogICAgICAgIGZsb2F0IGRhbXBlbmluZyA9IHNtb290aHN0ZXAoLTAuNSwgMC41LCBwb3MueCk7CiAgICAgICAgZmxhZ1dhdmUgPSB3YXZlQW1wbGl0dWRlICogZGFtcGVuaW5nOwoKICAgICAgICBmbG9hdCBzZWNvbmRhcnlXYXZlID0gc2luKHBvcy54ICogNS4wICsgdGltZSAqIDEyLjApICogMC4wMyAqIGRhbXBlbmluZzsKICAgICAgICBmbGFnV2F2ZSArPSBzZWNvbmRhcnlXYXZlOwogICAgfQoKICAgIHBvcy56IC09IChjdXJ2ZSArIGNsb3RoRWZmZWN0ICsgZmxhZ1dhdmUpOwoKICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zLCAxLjApOwp9CmA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCnVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGJsdXJBbW91bnQ7CnVuaWZvcm0gZmxvYXQgc2Nyb2xsRm9yY2U7CnZhcnlpbmcgdmVjMiB2VXY7CnZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoKdm9pZCBtYWluKCkgewogICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRChtYXAsIHZVdik7CgogICAgaWYgKGJsdXJBbW91bnQgPiAwLjApIHsKICAgICAgICB2ZWMyIHRleGVsU2l6ZSA9IDEuMCAvIHZlYzIodGV4dHVyZVNpemUobWFwLCAwKSk7CiAgICAgICAgdmVjNCBibHVycmVkID0gdmVjNCgwLjApOwogICAgICAgIGZsb2F0IHRvdGFsID0gMC4wOwoKICAgICAgICBmb3IgKGZsb2F0IHggPSAtMi4wOyB4IDw9IDIuMDsgeCArPSAxLjApIHsKICAgICAgICAgICAgZm9yIChmbG9hdCB5ID0gLTIuMDsgeSA8PSAyLjA7IHkgKz0gMS4wKSB7CiAgICAgICAgICAgICAgICB2ZWMyIG9mZnNldCA9IHZlYzIoeCwgeSkgKiB0ZXhlbFNpemUgKiBibHVyQW1vdW50OwogICAgICAgICAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC8gKDEuMCArIGxlbmd0aCh2ZWMyKHgsIHkpKSk7CiAgICAgICAgICAgICAgICBibHVycmVkICs9IHRleHR1cmUyRChtYXAsIHZVdiArIG9mZnNldCkgKiB3ZWlnaHQ7CiAgICAgICAgICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29sb3IgPSBibHVycmVkIC8gdG90YWw7CiAgICB9CgogICAgZmxvYXQgY3VydmVIaWdobGlnaHQgPSBhYnMoc2Nyb2xsRm9yY2UpICogMC4wNTsKICAgIGNvbG9yLnJnYiArPSB2ZWMzKGN1cnZlSGlnaGxpZ2h0ICogMC4xKTsKCiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgY29sb3IuYSAqIG9wYWNpdHkpOwogICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+Cn0KYDsKCgljb25zdCBub3JtYWxpemVkSW1hZ2VzID0gJGRlcml2ZWQoCgkJaW1hZ2VzLm1hcCgoaW1nKSA9PgoJCQl0eXBlb2YgaW1nID09PSAic3RyaW5nIiA/IHsgc3JjOiBpbWcsIGFsdDogIiIgfSA6IGltZywKCQkpLAoJKTsKCgljb25zdCB0ZXh0dXJlVXJscyA9ICRkZXJpdmVkKG5vcm1hbGl6ZWRJbWFnZXMubWFwKChpbWcpID0+IGltZy5zcmMpKTsKCgljb25zdCB0ZXh0dXJlcyA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUodGV4dHVyZVVybHMsIHsKCQkJdHJhbnNmb3JtOiAodGV4KSA9PiB7CgkJCQl0ZXguY29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlOwoJCQkJcmV0dXJuIHRleDsKCQkJfSwKCQl9KSwKCSk7CgoJY29uc3QgbWF0ZXJpYWxzID0gJGRlcml2ZWQuYnkoKCkgPT4gewoJCXJldHVybiBBcnJheS5mcm9tKAoJCQl7IGxlbmd0aDogdmlzaWJsZUNvdW50IH0sCgkJCSgpID0+CgkJCQluZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewoJCQkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQkJCXVuaWZvcm1zOiB7CgkJCQkJCW1hcDogeyB2YWx1ZTogbnVsbCB9LAoJCQkJCQlvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfSwKCQkJCQkJYmx1ckFtb3VudDogeyB2YWx1ZTogMC4wIH0sCgkJCQkJCXNjcm9sbEZvcmNlOiB7IHZhbHVlOiAwLjAgfSwKCQkJCQkJdGltZTogeyB2YWx1ZTogMC4wIH0sCgkJCQkJCWlzSG92ZXJlZDogeyB2YWx1ZTogMC4wIH0sCgkJCQkJfSwKCQkJCQl2ZXJ0ZXhTaGFkZXIsCgkJCQkJZnJhZ21lbnRTaGFkZXIsCgkJCQl9KSwKCQkpOwoJfSk7CgoJY29uc3Qgc3BhdGlhbFBvc2l0aW9ucyA9ICRkZXJpdmVkLmJ5KCgpID0+IHsKCQljb25zdCBwb3NpdGlvbnM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVtdID0gW107CgkJY29uc3QgbWF4SG9yaXpvbnRhbE9mZnNldCA9IE1BWF9IT1JJWk9OVEFMX09GRlNFVDsKCQljb25zdCBtYXhWZXJ0aWNhbE9mZnNldCA9IE1BWF9WRVJUSUNBTF9PRkZTRVQ7CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgdmlzaWJsZUNvdW50OyBpKyspIHsKCQkJY29uc3QgaG9yaXpvbnRhbEFuZ2xlID0gKGkgKiAyLjYxOCkgJSAoTWF0aC5QSSAqIDIpOwoJCQljb25zdCB2ZXJ0aWNhbEFuZ2xlID0gKGkgKiAxLjYxOCArIE1hdGguUEkgLyAzKSAlIChNYXRoLlBJICogMik7CgoJCQljb25zdCBob3Jpem9udGFsUmFkaXVzID0gKGkgJSAzKSAqIDEuMjsKCQkJY29uc3QgdmVydGljYWxSYWRpdXMgPSAoKGkgKyAxKSAlIDQpICogMC44OwoKCQkJY29uc3QgeCA9CgkJCQkoTWF0aC5zaW4oaG9yaXpvbnRhbEFuZ2xlKSAqIGhvcml6b250YWxSYWRpdXMgKiBtYXhIb3Jpem9udGFsT2Zmc2V0KSAvCgkJCQkzOwoJCQljb25zdCB5ID0KCQkJCShNYXRoLmNvcyh2ZXJ0aWNhbEFuZ2xlKSAqIHZlcnRpY2FsUmFkaXVzICogbWF4VmVydGljYWxPZmZzZXQpIC8gNDsKCgkJCXBvc2l0aW9ucy5wdXNoKHsgeCwgeSB9KTsKCQl9CgkJcmV0dXJuIHBvc2l0aW9uczsKCX0pOwoKCWxldCBzY3JvbGxWZWxvY2l0eSA9IDA7CglsZXQgYXV0b1BsYXkgPSB0cnVlOwoJbGV0IGxhc3RJbnRlcmFjdGlvbiA9IERhdGUubm93KCk7CglsZXQgY2xvY2sgPSBuZXcgVEhSRUUuQ2xvY2soKTsKCgl0eXBlIFBsYW5lRGF0YSA9IHsKCQlpbmRleDogbnVtYmVyOwoJCXo6IG51bWJlcjsKCQlpbWFnZUluZGV4OiBudW1iZXI7CgkJeDogbnVtYmVyOwoJCXk6IG51bWJlcjsKCX07CgoJY29uc3QgdG90YWxJbWFnZXMgPSAkZGVyaXZlZChub3JtYWxpemVkSW1hZ2VzLmxlbmd0aCk7Cgljb25zdCBkZXB0aFJhbmdlID0gREVGQVVMVF9ERVBUSF9SQU5HRTsKCgkvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3ZlbHRlL3ByZWZlci13cml0YWJsZS1kZXJpdmVkCglsZXQgcGxhbmVzRGF0YTogUGxhbmVEYXRhW10gPSAkc3RhdGUoW10pOwoKCSRlZmZlY3QoKCkgPT4gewoJCXBsYW5lc0RhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2aXNpYmxlQ291bnQgfSwgKF8sIGkpID0+ICh7CgkJCWluZGV4OiBpLAoJCQl6OiB2aXNpYmxlQ291bnQgPiAwID8gKChkZXB0aFJhbmdlIC8gdmlzaWJsZUNvdW50KSAqIGkpICUgZGVwdGhSYW5nZSA6IDAsCgkJCWltYWdlSW5kZXg6IHRvdGFsSW1hZ2VzID4gMCA/IGkgJSB0b3RhbEltYWdlcyA6IDAsCgkJCXg6IHNwYXRpYWxQb3NpdGlvbnNbaV0/LnggPz8gMCwKCQkJeTogc3BhdGlhbFBvc2l0aW9uc1tpXT8ueSA/PyAwLAoJCX0pKTsKCX0pOwoKCWNvbnN0IGhhbmRsZVdoZWVsID0gKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7CgkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQlzY3JvbGxWZWxvY2l0eSArPSBldmVudC5kZWx0YVkgKiAwLjAxICogc3BlZWQ7CgkJYXV0b1BsYXkgPSBmYWxzZTsKCQlsYXN0SW50ZXJhY3Rpb24gPSBEYXRlLm5vdygpOwoJfTsKCgljb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7CgkJaWYgKGV2ZW50LmtleSA9PT0gIkFycm93VXAiIHx8IGV2ZW50LmtleSA9PT0gIkFycm93TGVmdCIpIHsKCQkJc2Nyb2xsVmVsb2NpdHkgLT0gMiAqIHNwZWVkOwoJCQlhdXRvUGxheSA9IGZhbHNlOwoJCQlsYXN0SW50ZXJhY3Rpb24gPSBEYXRlLm5vdygpOwoJCX0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dEb3duIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd1JpZ2h0IikgewoJCQlzY3JvbGxWZWxvY2l0eSArPSAyICogc3BlZWQ7CgkJCWF1dG9QbGF5ID0gZmFsc2U7CgkJCWxhc3RJbnRlcmFjdGlvbiA9IERhdGUubm93KCk7CgkJfQoJfTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYW52YXMiKTsKCQlpZiAoY2FudmFzKSB7CgkJCWNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIGhhbmRsZVdoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pOwoJCX0KCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGhhbmRsZUtleURvd24pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY2FudmFzKSBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLCBoYW5kbGVXaGVlbCk7CgkJCXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgaGFuZGxlS2V5RG93bik7CgkJfTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewoJCQlpZiAoRGF0ZS5ub3coKSAtIGxhc3RJbnRlcmFjdGlvbiA+IDMwMDApIHsKCQkJCWF1dG9QbGF5ID0gdHJ1ZTsKCQkJfQoJCX0sIDEwMDApOwoJCXJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTsKCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKGF1dG9QbGF5KSB7CgkJCXNjcm9sbFZlbG9jaXR5ICs9IDAuMyAqIGRlbHRhOwoJCX0KCgkJc2Nyb2xsVmVsb2NpdHkgKj0gMC45NTsKCgkJY29uc3QgdGltZSA9IGNsb2NrLmdldEVsYXBzZWRUaW1lKCk7CgoJCW1hdGVyaWFscy5mb3JFYWNoKChtYXRlcmlhbCkgPT4gewoJCQlpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwudW5pZm9ybXMpIHsKCQkJCW1hdGVyaWFsLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB0aW1lOwoJCQkJbWF0ZXJpYWwudW5pZm9ybXMuc2Nyb2xsRm9yY2UudmFsdWUgPSBzY3JvbGxWZWxvY2l0eTsKCQkJfQoJCX0pOwoKCQljb25zdCBpbWFnZUFkdmFuY2UgPQoJCQl0b3RhbEltYWdlcyA+IDAgPyB2aXNpYmxlQ291bnQgJSB0b3RhbEltYWdlcyB8fCB0b3RhbEltYWdlcyA6IDA7CgkJY29uc3QgdG90YWxSYW5nZSA9IGRlcHRoUmFuZ2U7CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzRGF0YS5sZW5ndGg7IGkrKykgewoJCQljb25zdCBwbGFuZSA9IHBsYW5lc0RhdGFbaV07CgkJCWxldCBuZXdaID0gcGxhbmUueiArIHNjcm9sbFZlbG9jaXR5ICogZGVsdGEgKiAxMDsKCQkJbGV0IHdyYXBzRm9yd2FyZCA9IDA7CgkJCWxldCB3cmFwc0JhY2t3YXJkID0gMDsKCgkJCWlmIChuZXdaID49IHRvdGFsUmFuZ2UpIHsKCQkJCXdyYXBzRm9yd2FyZCA9IE1hdGguZmxvb3IobmV3WiAvIHRvdGFsUmFuZ2UpOwoJCQkJbmV3WiAtPSB0b3RhbFJhbmdlICogd3JhcHNGb3J3YXJkOwoJCQl9IGVsc2UgaWYgKG5ld1ogPCAwKSB7CgkJCQl3cmFwc0JhY2t3YXJkID0gTWF0aC5jZWlsKC1uZXdaIC8gdG90YWxSYW5nZSk7CgkJCQluZXdaICs9IHRvdGFsUmFuZ2UgKiB3cmFwc0JhY2t3YXJkOwoJCQl9CgoJCQlpZiAod3JhcHNGb3J3YXJkID4gMCAmJiBpbWFnZUFkdmFuY2UgPiAwICYmIHRvdGFsSW1hZ2VzID4gMCkgewoJCQkJcGxhbmUuaW1hZ2VJbmRleCA9CgkJCQkJKHBsYW5lLmltYWdlSW5kZXggKyB3cmFwc0ZvcndhcmQgKiBpbWFnZUFkdmFuY2UpICUgdG90YWxJbWFnZXM7CgkJCX0KCgkJCWlmICh3cmFwc0JhY2t3YXJkID4gMCAmJiBpbWFnZUFkdmFuY2UgPiAwICYmIHRvdGFsSW1hZ2VzID4gMCkgewoJCQkJY29uc3Qgc3RlcCA9IHBsYW5lLmltYWdlSW5kZXggLSB3cmFwc0JhY2t3YXJkICogaW1hZ2VBZHZhbmNlOwoJCQkJcGxhbmUuaW1hZ2VJbmRleCA9ICgoc3RlcCAlIHRvdGFsSW1hZ2VzKSArIHRvdGFsSW1hZ2VzKSAlIHRvdGFsSW1hZ2VzOwoJCQl9CgoJCQlwbGFuZS56ID0gKChuZXdaICUgdG90YWxSYW5nZSkgKyB0b3RhbFJhbmdlKSAlIHRvdGFsUmFuZ2U7CgkJCXBsYW5lLnggPSBzcGF0aWFsUG9zaXRpb25zW2ldPy54ID8/IDA7CgkJCXBsYW5lLnkgPSBzcGF0aWFsUG9zaXRpb25zW2ldPy55ID8/IDA7CgoJCQljb25zdCBub3JtYWxpemVkUG9zaXRpb24gPSBwbGFuZS56IC8gdG90YWxSYW5nZTsKCQkJbGV0IG9wYWNpdHkgPSAxOwoKCQkJaWYgKAoJCQkJbm9ybWFsaXplZFBvc2l0aW9uID49IGZhZGVTZXR0aW5ncy5mYWRlSW4uc3RhcnQgJiYKCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA8PSBmYWRlU2V0dGluZ3MuZmFkZUluLmVuZAoJCQkpIHsKCQkJCWNvbnN0IGZhZGVJblByb2dyZXNzID0KCQkJCQkobm9ybWFsaXplZFBvc2l0aW9uIC0gZmFkZVNldHRpbmdzLmZhZGVJbi5zdGFydCkgLwoJCQkJCShmYWRlU2V0dGluZ3MuZmFkZUluLmVuZCAtIGZhZGVTZXR0aW5ncy5mYWRlSW4uc3RhcnQpOwoJCQkJb3BhY2l0eSA9IGZhZGVJblByb2dyZXNzOwoJCQl9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQb3NpdGlvbiA8IGZhZGVTZXR0aW5ncy5mYWRlSW4uc3RhcnQpIHsKCQkJCW9wYWNpdHkgPSAwOwoJCQl9IGVsc2UgaWYgKAoJCQkJbm9ybWFsaXplZFBvc2l0aW9uID49IGZhZGVTZXR0aW5ncy5mYWRlT3V0LnN0YXJ0ICYmCgkJCQlub3JtYWxpemVkUG9zaXRpb24gPD0gZmFkZVNldHRpbmdzLmZhZGVPdXQuZW5kCgkJCSkgewoJCQkJY29uc3QgZmFkZU91dFByb2dyZXNzID0KCQkJCQkobm9ybWFsaXplZFBvc2l0aW9uIC0gZmFkZVNldHRpbmdzLmZhZGVPdXQuc3RhcnQpIC8KCQkJCQkoZmFkZVNldHRpbmdzLmZhZGVPdXQuZW5kIC0gZmFkZVNldHRpbmdzLmZhZGVPdXQuc3RhcnQpOwoJCQkJb3BhY2l0eSA9IDEgLSBmYWRlT3V0UHJvZ3Jlc3M7CgkJCX0gZWxzZSBpZiAobm9ybWFsaXplZFBvc2l0aW9uID4gZmFkZVNldHRpbmdzLmZhZGVPdXQuZW5kKSB7CgkJCQlvcGFjaXR5ID0gMDsKCQkJfQoKCQkJb3BhY2l0eSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG9wYWNpdHkpKTsKCgkJCWxldCBibHVyID0gMDsKCgkJCWlmICgKCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA+PSBibHVyU2V0dGluZ3MuYmx1ckluLnN0YXJ0ICYmCgkJCQlub3JtYWxpemVkUG9zaXRpb24gPD0gYmx1clNldHRpbmdzLmJsdXJJbi5lbmQKCQkJKSB7CgkJCQljb25zdCBibHVySW5Qcm9ncmVzcyA9CgkJCQkJKG5vcm1hbGl6ZWRQb3NpdGlvbiAtIGJsdXJTZXR0aW5ncy5ibHVySW4uc3RhcnQpIC8KCQkJCQkoYmx1clNldHRpbmdzLmJsdXJJbi5lbmQgLSBibHVyU2V0dGluZ3MuYmx1ckluLnN0YXJ0KTsKCQkJCWJsdXIgPSBibHVyU2V0dGluZ3MubWF4Qmx1ciAqICgxIC0gYmx1ckluUHJvZ3Jlc3MpOwoJCQl9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQb3NpdGlvbiA8IGJsdXJTZXR0aW5ncy5ibHVySW4uc3RhcnQpIHsKCQkJCWJsdXIgPSBibHVyU2V0dGluZ3MubWF4Qmx1cjsKCQkJfSBlbHNlIGlmICgKCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA+PSBibHVyU2V0dGluZ3MuYmx1ck91dC5zdGFydCAmJgoJCQkJbm9ybWFsaXplZFBvc2l0aW9uIDw9IGJsdXJTZXR0aW5ncy5ibHVyT3V0LmVuZAoJCQkpIHsKCQkJCWNvbnN0IGJsdXJPdXRQcm9ncmVzcyA9CgkJCQkJKG5vcm1hbGl6ZWRQb3NpdGlvbiAtIGJsdXJTZXR0aW5ncy5ibHVyT3V0LnN0YXJ0KSAvCgkJCQkJKGJsdXJTZXR0aW5ncy5ibHVyT3V0LmVuZCAtIGJsdXJTZXR0aW5ncy5ibHVyT3V0LnN0YXJ0KTsKCQkJCWJsdXIgPSBibHVyU2V0dGluZ3MubWF4Qmx1ciAqIGJsdXJPdXRQcm9ncmVzczsKCQkJfSBlbHNlIGlmIChub3JtYWxpemVkUG9zaXRpb24gPiBibHVyU2V0dGluZ3MuYmx1ck91dC5lbmQpIHsKCQkJCWJsdXIgPSBibHVyU2V0dGluZ3MubWF4Qmx1cjsKCQkJfQoKCQkJYmx1ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKGJsdXJTZXR0aW5ncy5tYXhCbHVyLCBibHVyKSk7CgoJCQljb25zdCBtYXRlcmlhbCA9IG1hdGVyaWFsc1tpXTsKCQkJaWYgKG1hdGVyaWFsICYmIG1hdGVyaWFsLnVuaWZvcm1zKSB7CgkJCQltYXRlcmlhbC51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gb3BhY2l0eTsKCQkJCW1hdGVyaWFsLnVuaWZvcm1zLmJsdXJBbW91bnQudmFsdWUgPSBibHVyOwoJCQl9CgkJfQoJfSk7Cjwvc2NyaXB0PgoKeyNpZiAkdGV4dHVyZXN9Cgl7I2VhY2ggcGxhbmVzRGF0YSBhcyBwbGFuZSwgaSAocGxhbmUuaW5kZXgpfQoJCXtAY29uc3QgdGV4dHVyZSA9ICR0ZXh0dXJlc1twbGFuZS5pbWFnZUluZGV4XX0KCQl7QGNvbnN0IG1hdGVyaWFsID0gbWF0ZXJpYWxzW2ldfQoJCXtAY29uc3Qgd29ybGRaID0gcGxhbmUueiAtIGRlcHRoUmFuZ2UgLyAyfQoKCQl7I2lmIHRleHR1cmUgJiYgbWF0ZXJpYWx9CgkJCXtAY29uc3QgYXNwZWN0ID0gdGV4dHVyZS5pbWFnZQoJCQkJPyB0ZXh0dXJlLmltYWdlLndpZHRoIC8gdGV4dHVyZS5pbWFnZS5oZWlnaHQKCQkJCTogMX0KCQkJe0Bjb25zdCBzY2FsZSA9IGFzcGVjdCA+IDEgPyBbMiAqIGFzcGVjdCwgMiwgMV0gOiBbMiwgMiAvIGFzcGVjdCwgMV19CgoJCQk8SW1hZ2VQbGFuZQoJCQkJe3RleHR1cmV9CgkJCQl7bWF0ZXJpYWx9CgkJCQlwb3NpdGlvbj17W3BsYW5lLngsIHBsYW5lLnksIHdvcmxkWl19CgkJCQlzY2FsZT17c2NhbGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdfQoJCQkvPgoJCXsvaWZ9Cgl7L2VhY2h9CnsvaWZ9Cg==", - "components/infinite-gallery/ImagePlane.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBUIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgdGV4dHVyZSB0byBhcHBseSB0byB0aGUgcGxhbmUuCgkJICovCgkJdGV4dHVyZTogVEhSRUUuVGV4dHVyZTsKCQkvKioKCQkgKiBQb3NpdGlvbiBvZiB0aGUgcGxhbmUgaW4gM0Qgc3BhY2UgW3gsIHksIHpdLgoJCSAqLwoJCXBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07CgkJLyoqCgkJICogU2NhbGUgb2YgdGhlIHBsYW5lIFt4LCB5LCB6XS4KCQkgKi8KCQlzY2FsZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdOwoJCS8qKgoJCSAqIFNoYWRlciBtYXRlcmlhbCB0byB1c2UgZm9yIHRoZSBwbGFuZS4KCQkgKi8KCQltYXRlcmlhbDogVEhSRUUuU2hhZGVyTWF0ZXJpYWw7Cgl9CgoJbGV0IHsgdGV4dHVyZSwgcG9zaXRpb24sIHNjYWxlLCBtYXRlcmlhbCB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBpc0hvdmVyZWQgPSAkc3RhdGUoZmFsc2UpOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmIChtYXRlcmlhbCAmJiB0ZXh0dXJlKSB7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLm1hcC52YWx1ZSA9IHRleHR1cmU7CgkJCW1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQl9Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAobWF0ZXJpYWwgJiYgbWF0ZXJpYWwudW5pZm9ybXMpIHsKCQkJbWF0ZXJpYWwudW5pZm9ybXMuaXNIb3ZlcmVkLnZhbHVlID0gaXNIb3ZlcmVkID8gMS4wIDogMC4wOwoJCX0KCX0pOwo8L3NjcmlwdD4KCjxULk1lc2gKCXtwb3NpdGlvbn0KCXtzY2FsZX0KCXttYXRlcmlhbH0KCW9ucG9pbnRlcmVudGVyPXsoKSA9PiAoaXNIb3ZlcmVkID0gdHJ1ZSl9CglvbnBvaW50ZXJsZWF2ZT17KCkgPT4gKGlzSG92ZXJlZCA9IGZhbHNlKX0KPgoJPFQuUGxhbmVHZW9tZXRyeSBhcmdzPXtbMSwgMSwgMzIsIDMyXX0gLz4KPC9ULk1lc2g+Cg==", + "components/infinite-gallery/InfiniteGallery.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgR2FsbGVyeVNjZW5lIGZyb20gIi4vSW5maW5pdGVHYWxsZXJ5U2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIEdhbGxlcnlTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZXMgdG8gZGlzcGxheS4gQ2FuIGJlIHN0cmluZ3MgKFVSTCkgb3Igb2JqZWN0cyB3aXRoIHNyYyBhbmQgYWx0LgoJCSAqLwoJCWltYWdlczogU2NlbmVQcm9wc1siaW1hZ2VzIl07CgkJLyoqCgkJICogU2Nyb2xsIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBOdW1iZXIgb2YgaW1hZ2VzIHZpc2libGUgaW4gdGhlIHR1bm5lbCBhdCBvbmNlLgoJCSAqIEBkZWZhdWx0IDgKCQkgKi8KCQl2aXNpYmxlQ291bnQ/OiBTY2VuZVByb3BzWyJ2aXNpYmxlQ291bnQiXTsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIGZvciBmYWRlIGluL291dCBlZmZlY3RzIGJhc2VkIG9uIGRlcHRoLgoJCSAqLwoJCWZhZGVTZXR0aW5ncz86IFNjZW5lUHJvcHNbImZhZGVTZXR0aW5ncyJdOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIGJsdXIgaW4vb3V0IGVmZmVjdHMgYmFzZWQgb24gZGVwdGguCgkJICovCgkJYmx1clNldHRpbmdzPzogU2NlbmVQcm9wc1siYmx1clNldHRpbmdzIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCXNwZWVkID0gMSwKCQl2aXNpYmxlQ291bnQgPSA4LAoJCWZhZGVTZXR0aW5ncyA9IHsKCQkJZmFkZUluOiB7IHN0YXJ0OiAwLjAxLCBlbmQ6IDAuMjUgfSwKCQkJZmFkZU91dDogeyBzdGFydDogMC40MywgZW5kOiAwLjQ2IH0sCgkJfSwKCQlibHVyU2V0dGluZ3MgPSB7CgkJCWJsdXJJbjogeyBzdGFydDogMC4wLCBlbmQ6IDAuMiB9LAoJCQlibHVyT3V0OiB7IHN0YXJ0OiAwLjQzLCBlbmQ6IDAuNDYgfSwKCQkJbWF4Qmx1cjogOC4wLAoJCX0sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxHYWxsZXJ5U2NlbmUKCQkJe2ltYWdlc30KCQkJe3NwZWVkfQoJCQl7dmlzaWJsZUNvdW50fQoJCQl7ZmFkZVNldHRpbmdzfQoJCQl7Ymx1clNldHRpbmdzfQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", + "components/infinite-gallery/InfiniteGalleryScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUGxhbmUsCgkJUHJvZ3JhbSwKCQlSYXljYXN0LAoJCVJlbmRlcmVyLAoJCVRleHR1cmUsCgkJVHJhbnNmb3JtLAoJCVZlYzIsCgl9IGZyb20gIm9nbCI7CgoJdHlwZSBJbWFnZUl0ZW0gPSBzdHJpbmcgfCB7IHNyYzogc3RyaW5nOyBhbHQ/OiBzdHJpbmcgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFycmF5IG9mIGltYWdlcyB0byBkaXNwbGF5LiBDYW4gYmUgc3RyaW5ncyAoVVJMKSBvciBvYmplY3RzIHdpdGggc3JjIGFuZCBhbHQuCgkJICovCgkJaW1hZ2VzOiBJbWFnZUl0ZW1bXTsKCQkvKioKCQkgKiBTY3JvbGwgc3BlZWQgbXVsdGlwbGllci4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogTnVtYmVyIG9mIGltYWdlcyB2aXNpYmxlIGluIHRoZSB0dW5uZWwgYXQgb25jZS4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJdmlzaWJsZUNvdW50PzogbnVtYmVyOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIGZhZGUgaW4vb3V0IGVmZmVjdHMgYmFzZWQgb24gZGVwdGguCgkJICovCgkJZmFkZVNldHRpbmdzPzogewoJCQlmYWRlSW46IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfTsKCQkJZmFkZU91dDogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OwoJCX07CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgYmx1ciBpbi9vdXQgZWZmZWN0cyBiYXNlZCBvbiBkZXB0aC4KCQkgKi8KCQlibHVyU2V0dGluZ3M/OiB7CgkJCWJsdXJJbjogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OwoJCQlibHVyT3V0OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07CgkJCW1heEJsdXI6IG51bWJlcjsKCQl9OwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCXNwZWVkID0gMSwKCQl2aXNpYmxlQ291bnQgPSA4LAoJCWZhZGVTZXR0aW5ncyA9IHsKCQkJZmFkZUluOiB7IHN0YXJ0OiAwLjA1LCBlbmQ6IDAuMTUgfSwKCQkJZmFkZU91dDogeyBzdGFydDogMC44NSwgZW5kOiAwLjk1IH0sCgkJfSwKCQlibHVyU2V0dGluZ3MgPSB7CgkJCWJsdXJJbjogeyBzdGFydDogMC4wLCBlbmQ6IDAuMSB9LAoJCQlibHVyT3V0OiB7IHN0YXJ0OiAwLjksIGVuZDogMS4wIH0sCgkJCW1heEJsdXI6IDMuMCwKCQl9LAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIE5vcm1hbGl6ZWRJbWFnZSA9IHsgc3JjOiBzdHJpbmc7IGFsdD86IHN0cmluZyB9OwoKCXR5cGUgUGxhbmVEYXRhID0gewoJCWluZGV4OiBudW1iZXI7CgkJejogbnVtYmVyOwoJCWltYWdlSW5kZXg6IG51bWJlcjsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJfTsKCgl0eXBlIFBsYW5lVW5pZm9ybXMgPSB7CgkJbWFwOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJb3BhY2l0eTogeyB2YWx1ZTogbnVtYmVyIH07CgkJYmx1ckFtb3VudDogeyB2YWx1ZTogbnVtYmVyIH07CgkJc2Nyb2xsRm9yY2U6IHsgdmFsdWU6IG51bWJlciB9OwoJCXRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCWlzSG92ZXJlZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07Cgl9OwoKCXR5cGUgUGxhbmVSdW50aW1lID0gewoJCW1lc2g6IE1lc2g7CgkJcHJvZ3JhbTogUHJvZ3JhbTsKCQl1bmlmb3JtczogUGxhbmVVbmlmb3JtczsKCX07CgoJY29uc3QgREVGQVVMVF9ERVBUSF9SQU5HRSA9IDUwOwoJY29uc3QgTUFYX0hPUklaT05UQUxfT0ZGU0VUID0gODsKCWNvbnN0IE1BWF9WRVJUSUNBTF9PRkZTRVQgPSA4OwoKCWNvbnN0IG5vcm1hbGl6ZUltYWdlcyA9IChpdGVtczogSW1hZ2VJdGVtW10pOiBOb3JtYWxpemVkSW1hZ2VbXSA9PgoJCWl0ZW1zLm1hcCgoaW1nKSA9PiAodHlwZW9mIGltZyA9PT0gInN0cmluZyIgPyB7IHNyYzogaW1nLCBhbHQ6ICIiIH0gOiBpbWcpKTsKCgljb25zdCBtYWtlU3BhdGlhbFBvc2l0aW9ucyA9IChjb3VudDogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10gPT4gewoJCWNvbnN0IHBvc2l0aW9uczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10gPSBbXTsKCgkJZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CgkJCWNvbnN0IGhvcml6b250YWxBbmdsZSA9IChpICogMi42MTgpICUgKE1hdGguUEkgKiAyKTsKCQkJY29uc3QgdmVydGljYWxBbmdsZSA9IChpICogMS42MTggKyBNYXRoLlBJIC8gMykgJSAoTWF0aC5QSSAqIDIpOwoKCQkJY29uc3QgaG9yaXpvbnRhbFJhZGl1cyA9IChpICUgMykgKiAxLjI7CgkJCWNvbnN0IHZlcnRpY2FsUmFkaXVzID0gKChpICsgMSkgJSA0KSAqIDAuODsKCgkJCWNvbnN0IHggPQoJCQkJKE1hdGguc2luKGhvcml6b250YWxBbmdsZSkgKiBob3Jpem9udGFsUmFkaXVzICogTUFYX0hPUklaT05UQUxfT0ZGU0VUKSAvCgkJCQkzOwoJCQljb25zdCB5ID0KCQkJCShNYXRoLmNvcyh2ZXJ0aWNhbEFuZ2xlKSAqIHZlcnRpY2FsUmFkaXVzICogTUFYX1ZFUlRJQ0FMX09GRlNFVCkgLyA0OwoKCQkJcG9zaXRpb25zLnB1c2goeyB4LCB5IH0pOwoJCX0KCgkJcmV0dXJuIHBvc2l0aW9uczsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOwoJCWF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCgkJdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsKCQl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCQl1bmlmb3JtIGZsb2F0IHNjcm9sbEZvcmNlOwoJCXVuaWZvcm0gZmxvYXQgdGltZTsKCQl1bmlmb3JtIGZsb2F0IGlzSG92ZXJlZDsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJdk5vcm1hbCA9IG5vcm1hbDsKCgkJCXZlYzMgcG9zID0gcG9zaXRpb247CgoJCQlmbG9hdCBjdXJ2ZUludGVuc2l0eSA9IHNjcm9sbEZvcmNlICogMC4zOwoJCQlmbG9hdCBkaXN0YW5jZUZyb21DZW50ZXIgPSBsZW5ndGgocG9zLnh5KTsKCQkJZmxvYXQgY3VydmUgPSBkaXN0YW5jZUZyb21DZW50ZXIgKiBkaXN0YW5jZUZyb21DZW50ZXIgKiBjdXJ2ZUludGVuc2l0eTsKCgkJCWZsb2F0IHJpcHBsZTEgPSBzaW4ocG9zLnggKiAyLjAgKyBzY3JvbGxGb3JjZSAqIDMuMCkgKiAwLjAyOwoJCQlmbG9hdCByaXBwbGUyID0gc2luKHBvcy55ICogMi41ICsgc2Nyb2xsRm9yY2UgKiAyLjApICogMC4wMTU7CgkJCWZsb2F0IGNsb3RoRWZmZWN0ID0gKHJpcHBsZTEgKyByaXBwbGUyKSAqIGFicyhjdXJ2ZUludGVuc2l0eSkgKiAyLjA7CgoJCQlmbG9hdCBmbGFnV2F2ZSA9IDAuMDsKCQkJaWYgKGlzSG92ZXJlZCA+IDAuNSkgewoJCQkJZmxvYXQgd2F2ZVBoYXNlID0gcG9zLnggKiAzLjAgKyB0aW1lICogOC4wOwoJCQkJZmxvYXQgd2F2ZUFtcGxpdHVkZSA9IHNpbih3YXZlUGhhc2UpICogMC4xOwoJCQkJZmxvYXQgZGFtcGVuaW5nID0gc21vb3Roc3RlcCgtMC41LCAwLjUsIHBvcy54KTsKCQkJCWZsYWdXYXZlID0gd2F2ZUFtcGxpdHVkZSAqIGRhbXBlbmluZzsKCgkJCQlmbG9hdCBzZWNvbmRhcnlXYXZlID0gc2luKHBvcy54ICogNS4wICsgdGltZSAqIDEyLjApICogMC4wMyAqIGRhbXBlbmluZzsKCQkJCWZsYWdXYXZlICs9IHNlY29uZGFyeVdhdmU7CgkJCX0KCgkJCXBvcy56IC09IChjdXJ2ZSArIGNsb3RoRWZmZWN0ICsgZmxhZ1dhdmUpOwoKCQkJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3MsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKCQl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CgkJdW5pZm9ybSBmbG9hdCBibHVyQW1vdW50OwoJCXVuaWZvcm0gZmxvYXQgc2Nyb2xsRm9yY2U7CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKG1hcCwgdlV2KTsKCgkJCWlmIChibHVyQW1vdW50ID4gMC4wKSB7CgkJCQl2ZWMyIHRleGVsU2l6ZSA9IDEuMCAvIG1heCh1VGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7CgkJCQl2ZWM0IGJsdXJyZWQgPSB2ZWM0KDAuMCk7CgkJCQlmbG9hdCB0b3RhbCA9IDAuMDsKCgkJCQlmb3IgKGZsb2F0IHggPSAtMi4wOyB4IDw9IDIuMDsgeCArPSAxLjApIHsKCQkJCQlmb3IgKGZsb2F0IHkgPSAtMi4wOyB5IDw9IDIuMDsgeSArPSAxLjApIHsKCQkJCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKHgsIHkpICogdGV4ZWxTaXplICogYmx1ckFtb3VudDsKCQkJCQkJZmxvYXQgd2VpZ2h0ID0gMS4wIC8gKDEuMCArIGxlbmd0aCh2ZWMyKHgsIHkpKSk7CgkJCQkJCWJsdXJyZWQgKz0gdGV4dHVyZTJEKG1hcCwgdlV2ICsgb2Zmc2V0KSAqIHdlaWdodDsKCQkJCQkJdG90YWwgKz0gd2VpZ2h0OwoJCQkJCX0KCQkJCX0KCQkJCWNvbG9yID0gYmx1cnJlZCAvIHRvdGFsOwoJCQl9CgoJCQlmbG9hdCBjdXJ2ZUhpZ2hsaWdodCA9IGFicyhzY3JvbGxGb3JjZSkgKiAwLjA1OwoJCQljb2xvci5yZ2IgKz0gdmVjMyhjdXJ2ZUhpZ2hsaWdodCAqIDAuMSk7CgoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgY29sb3IuYSAqIG9wYWNpdHkpOwoJCX0KCWA7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXRJbWFnZUl0ZW1zID0gJHN0YXRlPChpdGVtczogSW1hZ2VJdGVtW10pID0+IHZvaWQ+KCk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRJbWFnZUl0ZW1zKSByZXR1cm47CgkJc2V0SW1hZ2VJdGVtcyhpbWFnZXMpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih2aXNpYmxlQ291bnQpKTsKCQljb25zdCBkZXB0aFJhbmdlID0gREVGQVVMVF9ERVBUSF9SQU5HRTsKCQljb25zdCB0b3RhbFJhbmdlID0gZGVwdGhSYW5nZTsKCQljb25zdCBzcGF0aWFsUG9zaXRpb25zID0gbWFrZVNwYXRpYWxQb3NpdGlvbnMoY291bnQpOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJYW50aWFsaWFzOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCwgewoJCQlmb3Y6IDU1LAoJCQlhc3BlY3Q6IDEsCgkJCW5lYXI6IDAuMSwKCQkJZmFyOiAxMDAsCgkJfSk7CgkJY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgUGxhbmUoZ2wsIHsKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJd2lkdGhTZWdtZW50czogMzIsCgkJCWhlaWdodFNlZ21lbnRzOiAzMiwKCQl9KTsKCgkJY29uc3QgZmFsbGJhY2tUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5NSVJST1JFRF9SRVBFQVQsCgkJCXdyYXBUOiBnbC5NSVJST1JFRF9SRVBFQVQsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCQlhbmlzb3Ryb3B5OiByZW5kZXJlci5wYXJhbWV0ZXJzLm1heEFuaXNvdHJvcHksCgkJfSk7CgoJCWxldCBub3JtYWxpemVkSW1hZ2VzID0gbm9ybWFsaXplSW1hZ2VzKGltYWdlcyk7CgkJbGV0IHRleHR1cmVzOiBUZXh0dXJlW10gPSBbXTsKCQlsZXQgaW1hZ2VMb2FkVG9rZW4gPSAwOwoJCWxldCBkaXNwb3NlZCA9IGZhbHNlOwoKCQljb25zdCBkaXNwb3NlVGV4dHVyZSA9ICh0ZXh0dXJlOiBUZXh0dXJlKSA9PiB7CgkJCWlmICh0ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCX07CgoJCWNvbnN0IHNldFRleHR1cmVzRnJvbUltYWdlcyA9IChpdGVtczogSW1hZ2VJdGVtW10pID0+IHsKCQkJbm9ybWFsaXplZEltYWdlcyA9IG5vcm1hbGl6ZUltYWdlcyhpdGVtcyk7CgkJCWltYWdlTG9hZFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gaW1hZ2VMb2FkVG9rZW47CgoJCQl0ZXh0dXJlcy5mb3JFYWNoKGRpc3Bvc2VUZXh0dXJlKTsKCQkJdGV4dHVyZXMgPSBbXTsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgbm9ybWFsaXplZEltYWdlcy5sZW5ndGg7IGkrKykgewoJCQkJY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJCQl3aWR0aDogMSwKCQkJCQloZWlnaHQ6IDEsCgkJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQkJd3JhcFM6IGdsLk1JUlJPUkVEX1JFUEVBVCwKCQkJCQl3cmFwVDogZ2wuTUlSUk9SRURfUkVQRUFULAoJCQkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCQkJZmxpcFk6IHRydWUsCgkJCQkJYW5pc290cm9weTogcmVuZGVyZXIucGFyYW1ldGVycy5tYXhBbmlzb3Ryb3B5LAoJCQkJfSk7CgkJCQl0ZXh0dXJlcy5wdXNoKHRleHR1cmUpOwoKCQkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQkJaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCQlpZiAoZGlzcG9zZWQgfHwgdG9rZW4gIT09IGltYWdlTG9hZFRva2VuKSByZXR1cm47CgkJCQkJdGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCX07CgkJCQlpbWcuc3JjID0gbm9ybWFsaXplZEltYWdlc1tpXS5zcmM7CgkJCX0KCQl9OwoJCXNldEltYWdlSXRlbXMgPSBzZXRUZXh0dXJlc0Zyb21JbWFnZXM7CgkJc2V0VGV4dHVyZXNGcm9tSW1hZ2VzKGltYWdlcyk7CgoJCWNvbnN0IHBsYW5lc0RhdGE6IFBsYW5lRGF0YVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+ICh7CgkJCWluZGV4OiBpLAoJCQl6OiBjb3VudCA+IDAgPyAoKGRlcHRoUmFuZ2UgLyBjb3VudCkgKiBpKSAlIGRlcHRoUmFuZ2UgOiAwLAoJCQlpbWFnZUluZGV4OiBub3JtYWxpemVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBpICUgbm9ybWFsaXplZEltYWdlcy5sZW5ndGggOiAwLAoJCQl4OiBzcGF0aWFsUG9zaXRpb25zW2ldPy54ID8/IDAsCgkJCXk6IHNwYXRpYWxQb3NpdGlvbnNbaV0/LnkgPz8gMCwKCQl9KSk7CgoJCWNvbnN0IHBsYW5lczogUGxhbmVSdW50aW1lW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoKSA9PiB7CgkJCWNvbnN0IHVuaWZvcm1zOiBQbGFuZVVuaWZvcm1zID0gewoJCQkJbWFwOiB7IHZhbHVlOiBmYWxsYmFja1RleHR1cmUgfSwKCQkJCW9wYWNpdHk6IHsgdmFsdWU6IDEgfSwKCQkJCWJsdXJBbW91bnQ6IHsgdmFsdWU6IDAgfSwKCQkJCXNjcm9sbEZvcmNlOiB7IHZhbHVlOiAwIH0sCgkJCQl0aW1lOiB7IHZhbHVlOiAwIH0sCgkJCQlpc0hvdmVyZWQ6IHsgdmFsdWU6IDAgfSwKCQkJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJfTsKCgkJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCQl1bmlmb3JtcywKCQkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQkJZGVwdGhUZXN0OiB0cnVlLAoJCQkJZGVwdGhXcml0ZTogdHJ1ZSwKCQkJfSk7CgoJCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJCWdlb21ldHJ5LAoJCQkJcHJvZ3JhbSwKCQkJCWZydXN0dW1DdWxsZWQ6IGZhbHNlLAoJCQl9KTsKCQkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQkJcmV0dXJuIHsgbWVzaCwgcHJvZ3JhbSwgdW5pZm9ybXMgfTsKCQl9KTsKCgkJbGV0IHNjcm9sbFZlbG9jaXR5ID0gMDsKCQlsZXQgYXV0b1BsYXkgPSB0cnVlOwoJCWxldCBsYXN0SW50ZXJhY3Rpb24gPSBEYXRlLm5vdygpOwoJCWxldCBlbGFwc2VkVGltZSA9IDA7CgoJCWNvbnN0IGhhbmRsZVdoZWVsID0gKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7CgkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCXNjcm9sbFZlbG9jaXR5ICs9IGV2ZW50LmRlbHRhWSAqIDAuMDEgKiBzcGVlZDsKCQkJYXV0b1BsYXkgPSBmYWxzZTsKCQkJbGFzdEludGVyYWN0aW9uID0gRGF0ZS5ub3coKTsKCQl9OwoKCQljb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7CgkJCWlmIChldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd0xlZnQiKSB7CgkJCQlzY3JvbGxWZWxvY2l0eSAtPSAyICogc3BlZWQ7CgkJCQlhdXRvUGxheSA9IGZhbHNlOwoJCQkJbGFzdEludGVyYWN0aW9uID0gRGF0ZS5ub3coKTsKCQkJfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICJBcnJvd0Rvd24iIHx8IGV2ZW50LmtleSA9PT0gIkFycm93UmlnaHQiKSB7CgkJCQlzY3JvbGxWZWxvY2l0eSArPSAyICogc3BlZWQ7CgkJCQlhdXRvUGxheSA9IGZhbHNlOwoJCQkJbGFzdEludGVyYWN0aW9uID0gRGF0ZS5ub3coKTsKCQkJfQoJCX07CgoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIGhhbmRsZVdoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pOwoJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgaGFuZGxlS2V5RG93bik7CgoJCWNvbnN0IGF1dG9QbGF5SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewoJCQlpZiAoRGF0ZS5ub3coKSAtIGxhc3RJbnRlcmFjdGlvbiA+IDMwMDApIHsKCQkJCWF1dG9QbGF5ID0gdHJ1ZTsKCQkJfQoJCX0sIDEwMDApOwoKCQljb25zdCByYXljYXN0ID0gbmV3IFJheWNhc3QoKTsKCQljb25zdCBwb2ludGVyID0gbmV3IFZlYzIoMCwgMCk7CgkJbGV0IHBvaW50ZXJBY3RpdmUgPSBmYWxzZTsKCQlsZXQgaG92ZXJlZEluZGV4ID0gLTE7CgkJY29uc3QgbWVzaElkVG9JbmRleDogUmVjb3JkPG51bWJlciwgbnVtYmVyPiA9IHt9OwoJCXBsYW5lcy5mb3JFYWNoKChwbGFuZSwgaW5kZXgpID0+IHsKCQkJbWVzaElkVG9JbmRleFtwbGFuZS5tZXNoLmlkXSA9IGluZGV4OwoJCX0pOwoKCQljb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWlmIChyZWN0LndpZHRoIDw9IDAgfHwgcmVjdC5oZWlnaHQgPD0gMCkgcmV0dXJuOwoJCQlwb2ludGVyLnggPSAoKGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCkgKiAyIC0gMTsKCQkJcG9pbnRlci55ID0gLSgoKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodCkgKiAyIC0gMSk7CgkJCXBvaW50ZXJBY3RpdmUgPSB0cnVlOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJMZWF2ZSA9ICgpID0+IHsKCQkJcG9pbnRlckFjdGl2ZSA9IGZhbHNlOwoJCQlpZiAoaG92ZXJlZEluZGV4ICE9PSAtMSkgewoJCQkJaG92ZXJlZEluZGV4ID0gLTE7CgkJCQlmb3IgKGxldCBpID0gMDsgaSA8IHBsYW5lcy5sZW5ndGg7IGkrKykgewoJCQkJCXBsYW5lc1tpXS51bmlmb3Jtcy5pc0hvdmVyZWQudmFsdWUgPSAwOwoJCQkJfQoJCQl9CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoYW5kbGVQb2ludGVyTGVhdmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWNhbWVyYS5wZXJzcGVjdGl2ZSh7CgkJCQlmb3Y6IDU1LAoJCQkJYXNwZWN0OiB3aWR0aCAvIE1hdGgubWF4KDEsIGhlaWdodCksCgkJCQluZWFyOiAwLjEsCgkJCQlmYXI6IDEwMCwKCQkJfSk7CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IHBsYW5lcy5sZW5ndGg7IGkrKykgewoJCQkJcGxhbmVzW2ldLnVuaWZvcm1zLnNjcm9sbEZvcmNlLnZhbHVlID0gc2Nyb2xsVmVsb2NpdHk7CgkJCX0KCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWVsYXBzZWRUaW1lICs9IGRlbHRhOwoKCQkJaWYgKGF1dG9QbGF5KSB7CgkJCQlzY3JvbGxWZWxvY2l0eSArPSAwLjMgKiBkZWx0YTsKCQkJfQoKCQkJc2Nyb2xsVmVsb2NpdHkgKj0gMC45NTsKCgkJCWNvbnN0IHRvdGFsSW1hZ2VzID0gbm9ybWFsaXplZEltYWdlcy5sZW5ndGg7CgkJCWNvbnN0IGltYWdlQWR2YW5jZSA9CgkJCQl0b3RhbEltYWdlcyA+IDAgPyBjb3VudCAlIHRvdGFsSW1hZ2VzIHx8IHRvdGFsSW1hZ2VzIDogMDsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzRGF0YS5sZW5ndGg7IGkrKykgewoJCQkJY29uc3QgcGxhbmVEYXRhID0gcGxhbmVzRGF0YVtpXTsKCQkJCWNvbnN0IHBsYW5lID0gcGxhbmVzW2ldOwoKCQkJCXBsYW5lLnVuaWZvcm1zLnRpbWUudmFsdWUgPSBlbGFwc2VkVGltZTsKCQkJCXBsYW5lLnVuaWZvcm1zLnNjcm9sbEZvcmNlLnZhbHVlID0gc2Nyb2xsVmVsb2NpdHk7CgoJCQkJbGV0IG5ld1ogPSBwbGFuZURhdGEueiArIHNjcm9sbFZlbG9jaXR5ICogZGVsdGEgKiAxMDsKCQkJCWxldCB3cmFwc0ZvcndhcmQgPSAwOwoJCQkJbGV0IHdyYXBzQmFja3dhcmQgPSAwOwoKCQkJCWlmIChuZXdaID49IHRvdGFsUmFuZ2UpIHsKCQkJCQl3cmFwc0ZvcndhcmQgPSBNYXRoLmZsb29yKG5ld1ogLyB0b3RhbFJhbmdlKTsKCQkJCQluZXdaIC09IHRvdGFsUmFuZ2UgKiB3cmFwc0ZvcndhcmQ7CgkJCQl9IGVsc2UgaWYgKG5ld1ogPCAwKSB7CgkJCQkJd3JhcHNCYWNrd2FyZCA9IE1hdGguY2VpbCgtbmV3WiAvIHRvdGFsUmFuZ2UpOwoJCQkJCW5ld1ogKz0gdG90YWxSYW5nZSAqIHdyYXBzQmFja3dhcmQ7CgkJCQl9CgoJCQkJaWYgKHdyYXBzRm9yd2FyZCA+IDAgJiYgaW1hZ2VBZHZhbmNlID4gMCAmJiB0b3RhbEltYWdlcyA+IDApIHsKCQkJCQlwbGFuZURhdGEuaW1hZ2VJbmRleCA9CgkJCQkJCShwbGFuZURhdGEuaW1hZ2VJbmRleCArIHdyYXBzRm9yd2FyZCAqIGltYWdlQWR2YW5jZSkgJSB0b3RhbEltYWdlczsKCQkJCX0KCgkJCQlpZiAod3JhcHNCYWNrd2FyZCA+IDAgJiYgaW1hZ2VBZHZhbmNlID4gMCAmJiB0b3RhbEltYWdlcyA+IDApIHsKCQkJCQljb25zdCBzdGVwID0gcGxhbmVEYXRhLmltYWdlSW5kZXggLSB3cmFwc0JhY2t3YXJkICogaW1hZ2VBZHZhbmNlOwoJCQkJCXBsYW5lRGF0YS5pbWFnZUluZGV4ID0KCQkJCQkJKChzdGVwICUgdG90YWxJbWFnZXMpICsgdG90YWxJbWFnZXMpICUgdG90YWxJbWFnZXM7CgkJCQl9CgoJCQkJcGxhbmVEYXRhLnogPSAoKG5ld1ogJSB0b3RhbFJhbmdlKSArIHRvdGFsUmFuZ2UpICUgdG90YWxSYW5nZTsKCQkJCXBsYW5lRGF0YS54ID0gc3BhdGlhbFBvc2l0aW9uc1tpXT8ueCA/PyAwOwoJCQkJcGxhbmVEYXRhLnkgPSBzcGF0aWFsUG9zaXRpb25zW2ldPy55ID8/IDA7CgoJCQkJY29uc3Qgbm9ybWFsaXplZFBvc2l0aW9uID0gcGxhbmVEYXRhLnogLyB0b3RhbFJhbmdlOwoJCQkJbGV0IG9wYWNpdHkgPSAxOwoKCQkJCWlmICgKCQkJCQlub3JtYWxpemVkUG9zaXRpb24gPj0gZmFkZVNldHRpbmdzLmZhZGVJbi5zdGFydCAmJgoJCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA8PSBmYWRlU2V0dGluZ3MuZmFkZUluLmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgZmFkZUluUHJvZ3Jlc3MgPQoJCQkJCQkobm9ybWFsaXplZFBvc2l0aW9uIC0gZmFkZVNldHRpbmdzLmZhZGVJbi5zdGFydCkgLwoJCQkJCQkoZmFkZVNldHRpbmdzLmZhZGVJbi5lbmQgLSBmYWRlU2V0dGluZ3MuZmFkZUluLnN0YXJ0KTsKCQkJCQlvcGFjaXR5ID0gZmFkZUluUHJvZ3Jlc3M7CgkJCQl9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQb3NpdGlvbiA8IGZhZGVTZXR0aW5ncy5mYWRlSW4uc3RhcnQpIHsKCQkJCQlvcGFjaXR5ID0gMDsKCQkJCX0gZWxzZSBpZiAoCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uID49IGZhZGVTZXR0aW5ncy5mYWRlT3V0LnN0YXJ0ICYmCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uIDw9IGZhZGVTZXR0aW5ncy5mYWRlT3V0LmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgZmFkZU91dFByb2dyZXNzID0KCQkJCQkJKG5vcm1hbGl6ZWRQb3NpdGlvbiAtIGZhZGVTZXR0aW5ncy5mYWRlT3V0LnN0YXJ0KSAvCgkJCQkJCShmYWRlU2V0dGluZ3MuZmFkZU91dC5lbmQgLSBmYWRlU2V0dGluZ3MuZmFkZU91dC5zdGFydCk7CgkJCQkJb3BhY2l0eSA9IDEgLSBmYWRlT3V0UHJvZ3Jlc3M7CgkJCQl9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQb3NpdGlvbiA+IGZhZGVTZXR0aW5ncy5mYWRlT3V0LmVuZCkgewoJCQkJCW9wYWNpdHkgPSAwOwoJCQkJfQoKCQkJCW9wYWNpdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBvcGFjaXR5KSk7CgoJCQkJbGV0IGJsdXIgPSAwOwoKCQkJCWlmICgKCQkJCQlub3JtYWxpemVkUG9zaXRpb24gPj0gYmx1clNldHRpbmdzLmJsdXJJbi5zdGFydCAmJgoJCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA8PSBibHVyU2V0dGluZ3MuYmx1ckluLmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgYmx1ckluUHJvZ3Jlc3MgPQoJCQkJCQkobm9ybWFsaXplZFBvc2l0aW9uIC0gYmx1clNldHRpbmdzLmJsdXJJbi5zdGFydCkgLwoJCQkJCQkoYmx1clNldHRpbmdzLmJsdXJJbi5lbmQgLSBibHVyU2V0dGluZ3MuYmx1ckluLnN0YXJ0KTsKCQkJCQlibHVyID0gYmx1clNldHRpbmdzLm1heEJsdXIgKiAoMSAtIGJsdXJJblByb2dyZXNzKTsKCQkJCX0gZWxzZSBpZiAobm9ybWFsaXplZFBvc2l0aW9uIDwgYmx1clNldHRpbmdzLmJsdXJJbi5zdGFydCkgewoJCQkJCWJsdXIgPSBibHVyU2V0dGluZ3MubWF4Qmx1cjsKCQkJCX0gZWxzZSBpZiAoCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uID49IGJsdXJTZXR0aW5ncy5ibHVyT3V0LnN0YXJ0ICYmCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uIDw9IGJsdXJTZXR0aW5ncy5ibHVyT3V0LmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgYmx1ck91dFByb2dyZXNzID0KCQkJCQkJKG5vcm1hbGl6ZWRQb3NpdGlvbiAtIGJsdXJTZXR0aW5ncy5ibHVyT3V0LnN0YXJ0KSAvCgkJCQkJCShibHVyU2V0dGluZ3MuYmx1ck91dC5lbmQgLSBibHVyU2V0dGluZ3MuYmx1ck91dC5zdGFydCk7CgkJCQkJYmx1ciA9IGJsdXJTZXR0aW5ncy5tYXhCbHVyICogYmx1ck91dFByb2dyZXNzOwoJCQkJfSBlbHNlIGlmIChub3JtYWxpemVkUG9zaXRpb24gPiBibHVyU2V0dGluZ3MuYmx1ck91dC5lbmQpIHsKCQkJCQlibHVyID0gYmx1clNldHRpbmdzLm1heEJsdXI7CgkJCQl9CgoJCQkJYmx1ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKGJsdXJTZXR0aW5ncy5tYXhCbHVyLCBibHVyKSk7CgoJCQkJcGxhbmUudW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG9wYWNpdHk7CgkJCQlwbGFuZS51bmlmb3Jtcy5ibHVyQW1vdW50LnZhbHVlID0gYmx1cjsKCgkJCQljb25zdCB0ZXh0dXJlID0KCQkJCQl0b3RhbEltYWdlcyA+IDAKCQkJCQkJPyAodGV4dHVyZXNbcGxhbmVEYXRhLmltYWdlSW5kZXhdID8/IGZhbGxiYWNrVGV4dHVyZSkKCQkJCQkJOiBmYWxsYmFja1RleHR1cmU7CgkJCQlwbGFuZS51bmlmb3Jtcy5tYXAudmFsdWUgPSB0ZXh0dXJlOwoKCQkJCWNvbnN0IHRleFdpZHRoID0KCQkJCQl0ZXh0dXJlLmltYWdlICYmICJ3aWR0aCIgaW4gdGV4dHVyZS5pbWFnZQoJCQkJCQk/IE1hdGgubWF4KDEsIE51bWJlcih0ZXh0dXJlLmltYWdlLndpZHRoKSB8fCAxKQoJCQkJCQk6IDE7CgkJCQljb25zdCB0ZXhIZWlnaHQgPQoJCQkJCXRleHR1cmUuaW1hZ2UgJiYgImhlaWdodCIgaW4gdGV4dHVyZS5pbWFnZQoJCQkJCQk/IE1hdGgubWF4KDEsIE51bWJlcih0ZXh0dXJlLmltYWdlLmhlaWdodCkgfHwgMSkKCQkJCQkJOiAxOwoJCQkJcGxhbmUudW5pZm9ybXMudVRleHR1cmVTaXplLnZhbHVlLnNldCh0ZXhXaWR0aCwgdGV4SGVpZ2h0KTsKCgkJCQljb25zdCBhc3BlY3QgPSB0ZXhXaWR0aCAvIHRleEhlaWdodDsKCQkJCWlmIChhc3BlY3QgPiAxKSB7CgkJCQkJcGxhbmUubWVzaC5zY2FsZS5zZXQoMiAqIGFzcGVjdCwgMiwgMSk7CgkJCQl9IGVsc2UgewoJCQkJCXBsYW5lLm1lc2guc2NhbGUuc2V0KDIsIDIgLyBNYXRoLm1heChhc3BlY3QsIDAuMDAwMDEpLCAxKTsKCQkJCX0KCgkJCQljb25zdCB3b3JsZFogPSBwbGFuZURhdGEueiAtIGRlcHRoUmFuZ2UgLyAyOwoJCQkJcGxhbmUubWVzaC5wb3NpdGlvbi5zZXQocGxhbmVEYXRhLngsIHBsYW5lRGF0YS55LCB3b3JsZFopOwoJCQl9CgoJCQlpZiAocG9pbnRlckFjdGl2ZSkgewoJCQkJcmF5Y2FzdC5jYXN0TW91c2UoY2FtZXJhLCBbcG9pbnRlci54LCBwb2ludGVyLnldKTsKCQkJCWNvbnN0IGhpdHMgPSByYXljYXN0LmludGVyc2VjdE1lc2hlcygKCQkJCQlwbGFuZXMubWFwKChwbGFuZSkgPT4gcGxhbmUubWVzaCksCgkJCQkJeyBpbmNsdWRlVVY6IGZhbHNlLCBpbmNsdWRlTm9ybWFsOiBmYWxzZSB9LAoJCQkJKTsKCQkJCWNvbnN0IG5leHRIb3ZlciA9CgkJCQkJaGl0cy5sZW5ndGggPiAwID8gKG1lc2hJZFRvSW5kZXhbaGl0c1swXS5pZF0gPz8gLTEpIDogLTE7CgoJCQkJaWYgKG5leHRIb3ZlciAhPT0gaG92ZXJlZEluZGV4KSB7CgkJCQkJaG92ZXJlZEluZGV4ID0gbmV4dEhvdmVyOwoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCXBsYW5lc1tpXS51bmlmb3Jtcy5pc0hvdmVyZWQudmFsdWUgPSBpID09PSBob3ZlcmVkSW5kZXggPyAxIDogMDsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEsIGNsZWFyOiB0cnVlIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCWRpc3Bvc2VkID0gdHJ1ZTsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCXdpbmRvdy5jbGVhckludGVydmFsKGF1dG9QbGF5SW50ZXJ2YWwpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsIGhhbmRsZVdoZWVsKTsKCQkJd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBoYW5kbGVLZXlEb3duKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgaGFuZGxlUG9pbnRlckxlYXZlKTsKCQkJc2V0SW1hZ2VJdGVtcyA9IHVuZGVmaW5lZDsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzLmxlbmd0aDsgaSsrKSB7CgkJCQlwbGFuZXNbaV0ucHJvZ3JhbS5yZW1vdmUoKTsKCQkJfQoJCQlnZW9tZXRyeS5yZW1vdmUoKTsKCQkJdGV4dHVyZXMuZm9yRWFjaChkaXNwb3NlVGV4dHVyZSk7CgkJCWRpc3Bvc2VUZXh0dXJlKGZhbGxiYWNrVGV4dHVyZSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/infinite-gallery/ImagePlane.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIExlZ2FjeSBjb21wYXRpYmlsaXR5IHByb3AgKHVudXNlZCBpbiBPR0wgbWlncmF0aW9uKS4KCQkgKi8KCQl0ZXh0dXJlPzogdW5rbm93bjsKCQkvKioKCQkgKiBMZWdhY3kgY29tcGF0aWJpbGl0eSBwcm9wICh1bnVzZWQgaW4gT0dMIG1pZ3JhdGlvbikuCgkJICovCgkJcG9zaXRpb24/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07CgkJLyoqCgkJICogTGVnYWN5IGNvbXBhdGliaWxpdHkgcHJvcCAodW51c2VkIGluIE9HTCBtaWdyYXRpb24pLgoJCSAqLwoJCXNjYWxlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXJdOwoJCS8qKgoJCSAqIExlZ2FjeSBjb21wYXRpYmlsaXR5IHByb3AgKHVudXNlZCBpbiBPR0wgbWlncmF0aW9uKS4KCQkgKi8KCQltYXRlcmlhbD86IHVua25vd247Cgl9CgoJbGV0IHsKCQl0ZXh0dXJlOiBfdGV4dHVyZSwKCQlwb3NpdGlvbjogX3Bvc2l0aW9uID0gWzAsIDAsIDBdLAoJCXNjYWxlOiBfc2NhbGUgPSBbMSwgMSwgMV0sCgkJbWF0ZXJpYWw6IF9tYXRlcmlhbCwKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0Pgo=", "components/infinite-physics-gallery/InfinitePhysicsGallery.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgdHlwZSB7IEluZmluaXRlUGh5c2ljc0dhbGxlcnlJdGVtIH0gZnJvbSAiLi90eXBlcyI7CgoJaW50ZXJmYWNlIFNjcm9sbFNldHRpbmdzIHsKCQkvKioKCQkgKiBXaGVlbCBzcGVlZCBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDIKCQkgKi8KCQl3aGVlbFNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgZnJpY3Rpb24gYXBwbGllZCB0byBpbmVydGlhIG1vdmVtZW50LgoJCSAqIEBkZWZhdWx0IDAuOTUKCQkgKi8KCQlmcmljdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBFZGdlIHRocmVzaG9sZCBpbiBwaXhlbHMgd2hlcmUgYXV0by1zY3JvbGwgc3RhcnRzLgoJCSAqIEBkZWZhdWx0IDEwMAoJCSAqLwoJCWVkZ2VUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogRWRnZSBhdXRvLXNjcm9sbCBhY2NlbGVyYXRpb24uCgkJICogQGRlZmF1bHQgMgoJCSAqLwoJCWVkZ2VTY3JvbGxTcGVlZD86IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEdhbGxlcnkgaXRlbXMgKGltYWdlcy92aWRlb3MpLgoJCSAqLwoJCWl0ZW1zPzogSW5maW5pdGVQaHlzaWNzR2FsbGVyeUl0ZW1bXTsKCQkvKioKCQkgKiBDZWxsIHdpZHRoIGluIHBpeGVscy4KCQkgKiBAZGVmYXVsdCAzMjAKCQkgKi8KCQljZWxsV2lkdGg/OiBudW1iZXI7CgkJLyoqCgkJICogQ2VsbCBoZWlnaHQgaW4gcGl4ZWxzLgoJCSAqIEBkZWZhdWx0IDQwMAoJCSAqLwoJCWNlbGxIZWlnaHQ/OiBudW1iZXI7CgkJLyoqCgkJICogR2FwIGJldHdlZW4gY2VsbHMgaW4gcGl4ZWxzLgoJCSAqIEBkZWZhdWx0IDI0CgkJICovCgkJZ2FwPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2UgaW5lcnRpYSBmcmljdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjk1CgkJICovCgkJZnJpY3Rpb24/OiBudW1iZXI7CgkJLyoqCgkJICogQWRkaXRpb25hbCBjbGFzc2VzIGFwcGxpZWQgdG8gZWFjaCBtZWRpYSBjZWxsIHdyYXBwZXIuCgkJICovCgkJY2VsbENsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFNjcm9sbCBhbmQgZWRnZS1iZWhhdmlvciBzZXR0aW5ncy4KCQkgKi8KCQlzY3JvbGxTZXR0aW5ncz86IFNjcm9sbFNldHRpbmdzOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgcm9vdCBjbGFzc2VzLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCXR5cGUgRGltZW5zaW9ucyA9IHsKCQljZWxsV2lkdGg6IG51bWJlcjsKCQljZWxsSGVpZ2h0OiBudW1iZXI7CgkJZ2FwOiBudW1iZXI7Cgl9OwoKCXR5cGUgVmlzaWJsZUNlbGwgPSB7CgkJaWQ6IHN0cmluZzsKCQlpdGVtOiBJbmZpbml0ZVBoeXNpY3NHYWxsZXJ5SXRlbTsKCQlwb3NYOiBudW1iZXI7CgkJcG9zWTogbnVtYmVyOwoJfTsKCgljb25zdCBERUZBVUxUX1NDUk9MTF9TRVRUSU5HUzogUmVxdWlyZWQ8U2Nyb2xsU2V0dGluZ3M+ID0gewoJCXdoZWVsU3BlZWQ6IDIsCgkJZnJpY3Rpb246IDAuOTUsCgkJZWRnZVRocmVzaG9sZDogMTAwLAoJCWVkZ2VTY3JvbGxTcGVlZDogMiwKCX07CgoJY29uc3QgTUlOX1BPSU5URVJfRFQgPSA4OwoJY29uc3QgV0hFRUxfREVMVEFfTElNSVQgPSAyMjA7Cgljb25zdCBXSEVFTF9JTVBVTFNFID0gMC4wNDsKCWNvbnN0IERSQUdfVkVMT0NJVFlfQkxFTkQgPSAwLjM7Cgljb25zdCBFREdFX1JFU1BPTlNFID0gMC4yMjsKCWNvbnN0IEVER0VfVkVMT0NJVFlfTVVMVElQTElFUiA9IDIuMjsKCWNvbnN0IE1BWF9WRUxPQ0lUWSA9IDI0OwoKCWxldCB7CgkJaXRlbXMgPSBbXSwKCQljZWxsV2lkdGggPSAzMjAsCgkJY2VsbEhlaWdodCA9IDQwMCwKCQlnYXAgPSAyNCwKCQlmcmljdGlvbiA9IDAuOTUsCgkJY2VsbENsYXNzID0gIiIsCgkJc2Nyb2xsU2V0dGluZ3MgPSB7fSwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJLi4ucmVzdFByb3BzCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBjb250YWluZXJSZWY6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyUmVmID0gKG5vZGU6IEhUTUxEaXZFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyUmVmID09PSBub2RlKSB7CgkJCQljb250YWluZXJSZWYgPSBudWxsOwoJCQl9CgkJfTsKCX07CgoJbGV0IHZpZXdwb3J0U2l6ZSA9ICRzdGF0ZSh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7CglsZXQgaXNEcmFnZ2luZyA9ICRzdGF0ZShmYWxzZSk7CglsZXQgb2Zmc2V0ID0gJHN0YXRlKHsgeDogMCwgeTogMCB9KTsKCgljb25zdCBvZmZzZXRSZWYgPSB7IHg6IDAsIHk6IDAgfTsKCWNvbnN0IHZlbG9jaXR5UmVmID0geyB4OiAwLCB5OiAwIH07Cgljb25zdCBlZGdlVmVsb2NpdHlSZWYgPSB7IHg6IDAsIHk6IDAgfTsKCWNvbnN0IG1vdXNlUG9zUmVmID0geyB4OiAwLCB5OiAwIH07CgoJbGV0IHBvaW50ZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7CglsZXQgbGFzdFBvaW50ZXIgPSB7IHg6IDAsIHk6IDAgfTsKCWxldCBsYXN0UG9pbnRlclRpbWUgPSAwOwoJbGV0IGRyYWdnaW5nUmVmID0gZmFsc2U7CgoJY29uc3Qgbm9ybWFsaXplZEl0ZW1zID0gJGRlcml2ZWQoaXRlbXMpOwoKCWNvbnN0IHJlc29sdmVkU2Nyb2xsU2V0dGluZ3MgPSAkZGVyaXZlZCh7CgkJLi4uREVGQVVMVF9TQ1JPTExfU0VUVElOR1MsCgkJLi4uc2Nyb2xsU2V0dGluZ3MsCgl9KTsKCgljb25zdCByZXNwb25zaXZlRGltZW5zaW9ucyA9ICRkZXJpdmVkLmJ5PERpbWVuc2lvbnM+KCgpID0+IHsKCQljb25zdCB3aWR0aCA9IHZpZXdwb3J0U2l6ZS53aWR0aDsKCgkJaWYgKHdpZHRoID4gMCAmJiB3aWR0aCA8IDY0MCkgewoJCQlyZXR1cm4gewoJCQkJY2VsbFdpZHRoOiBNYXRoLm1pbihjZWxsV2lkdGggKiAwLjcsIHdpZHRoICogMC44NSksCgkJCQljZWxsSGVpZ2h0OiBNYXRoLm1pbihjZWxsSGVpZ2h0ICogMC43LCB3aWR0aCAqIDEuMSksCgkJCQlnYXA6IE1hdGgubWF4KGdhcCAqIDAuNSwgMTIpLAoJCQl9OwoJCX0KCgkJaWYgKHdpZHRoID4gMCAmJiB3aWR0aCA8IDEwMjQpIHsKCQkJcmV0dXJuIHsKCQkJCWNlbGxXaWR0aDogTWF0aC5taW4oY2VsbFdpZHRoICogMC44NSwgd2lkdGggKiAwLjYpLAoJCQkJY2VsbEhlaWdodDogTWF0aC5taW4oY2VsbEhlaWdodCAqIDAuODUsIHdpZHRoICogMC43NSksCgkJCQlnYXA6IE1hdGgubWF4KGdhcCAqIDAuNzUsIDE2KSwKCQkJfTsKCQl9CgoJCXJldHVybiB7CgkJCWNlbGxXaWR0aCwKCQkJY2VsbEhlaWdodCwKCQkJZ2FwLAoJCX07Cgl9KTsKCgljb25zdCB0b3RhbENlbGxXaWR0aCA9ICRkZXJpdmVkKAoJCXJlc3BvbnNpdmVEaW1lbnNpb25zLmNlbGxXaWR0aCArIHJlc3BvbnNpdmVEaW1lbnNpb25zLmdhcCwKCSk7Cgljb25zdCB0b3RhbENlbGxIZWlnaHQgPSAkZGVyaXZlZCgKCQlyZXNwb25zaXZlRGltZW5zaW9ucy5jZWxsSGVpZ2h0ICsgcmVzcG9uc2l2ZURpbWVuc2lvbnMuZ2FwLAoJKTsKCgljb25zdCBzdGFydFggPSAkZGVyaXZlZChNYXRoLmZsb29yKC1vZmZzZXQueCAvIHRvdGFsQ2VsbFdpZHRoKSAtIDEpOwoJY29uc3QgZW5kWCA9ICRkZXJpdmVkKAoJCU1hdGguY2VpbCgodmlld3BvcnRTaXplLndpZHRoIC0gb2Zmc2V0LngpIC8gdG90YWxDZWxsV2lkdGgpICsgMSwKCSk7Cgljb25zdCBzdGFydFkgPSAkZGVyaXZlZChNYXRoLmZsb29yKC1vZmZzZXQueSAvIHRvdGFsQ2VsbEhlaWdodCkgLSAxKTsKCWNvbnN0IGVuZFkgPSAkZGVyaXZlZCgKCQlNYXRoLmNlaWwoKHZpZXdwb3J0U2l6ZS5oZWlnaHQgLSBvZmZzZXQueSkgLyB0b3RhbENlbGxIZWlnaHQpICsgMSwKCSk7CgoJY29uc3QgdmlzaWJsZUNlbGxzID0gJGRlcml2ZWQuYnk8VmlzaWJsZUNlbGxbXT4oKCkgPT4gewoJCWNvbnN0IHJlc29sdmVkSXRlbXMgPSBub3JtYWxpemVkSXRlbXM7CgkJaWYgKCFyZXNvbHZlZEl0ZW1zLmxlbmd0aCkgcmV0dXJuIFtdOwoKCQljb25zdCBjZWxsczogVmlzaWJsZUNlbGxbXSA9IFtdOwoJCWNvbnN0IG1vZCA9ICh2YWx1ZTogbnVtYmVyLCBkaXZpc29yOiBudW1iZXIpID0+CgkJCSgodmFsdWUgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjsKCgkJZm9yIChsZXQgaSA9IHN0YXJ0WDsgaSA8PSBlbmRYOyBpICs9IDEpIHsKCQkJZm9yIChsZXQgaiA9IHN0YXJ0WTsgaiA8PSBlbmRZOyBqICs9IDEpIHsKCQkJCWNvbnN0IGl0ZW1JbmRleCA9IG1vZChpICsgaiAqIDcsIHJlc29sdmVkSXRlbXMubGVuZ3RoKTsKCQkJCWNvbnN0IGl0ZW0gPSByZXNvbHZlZEl0ZW1zW2l0ZW1JbmRleF07CgkJCQljZWxscy5wdXNoKHsKCQkJCQlpZDogYCR7aX0tJHtqfWAsCgkJCQkJaXRlbSwKCQkJCQlwb3NYOiBpICogdG90YWxDZWxsV2lkdGggKyBvZmZzZXQueCwKCQkJCQlwb3NZOiBqICogdG90YWxDZWxsSGVpZ2h0ICsgb2Zmc2V0LnksCgkJCQl9KTsKCQkJfQoJCX0KCgkJcmV0dXJuIGNlbGxzOwoJfSk7CgoJZnVuY3Rpb24gcmVzb2x2ZU1lZGlhU3JjKGl0ZW06IEluZmluaXRlUGh5c2ljc0dhbGxlcnlJdGVtKSB7CgkJaWYgKGl0ZW0udHlwZSA9PT0gImltYWdlIikgewoJCQlyZXR1cm4gaXRlbS5pbWFnZS5zcmM7CgkJfQoJCXJldHVybiBpdGVtLnZpZGVvLnNyYzsKCX0KCglmdW5jdGlvbiByZXNvbHZlQWx0KGl0ZW06IEluZmluaXRlUGh5c2ljc0dhbGxlcnlJdGVtKSB7CgkJcmV0dXJuIGl0ZW0udHlwZSA9PT0gImltYWdlIiA/IGl0ZW0uaW1hZ2UuYWx0IHx8ICIiIDogIiI7Cgl9CgoJZnVuY3Rpb24gdXBkYXRlVmlld3BvcnQoKSB7CgkJY29uc3Qgbm9kZSA9IGNvbnRhaW5lclJlZjsKCQlpZiAoIW5vZGUpIHJldHVybjsKCQl2aWV3cG9ydFNpemUgPSB7CgkJCXdpZHRoOiBub2RlLmNsaWVudFdpZHRoLAoJCQloZWlnaHQ6IG5vZGUuY2xpZW50SGVpZ2h0LAoJCX07Cgl9CgoJZnVuY3Rpb24gY29tbWl0T2Zmc2V0KCkgewoJCW9mZnNldCA9IHsKCQkJeDogb2Zmc2V0UmVmLngsCgkJCXk6IG9mZnNldFJlZi55LAoJCX07Cgl9CgoJZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7CgkJcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpOwoJfQoKCWZ1bmN0aW9uIGRhbXAoCgkJY3VycmVudDogbnVtYmVyLAoJCXRhcmdldDogbnVtYmVyLAoJCXNtb290aGluZzogbnVtYmVyLAoJCWRlbHRhRnJhbWVzOiBudW1iZXIsCgkpIHsKCQljb25zdCBmYWN0b3IgPSAxIC0gTWF0aC5wb3coMSAtIHNtb290aGluZywgZGVsdGFGcmFtZXMpOwoJCXJldHVybiBjdXJyZW50ICsgKHRhcmdldCAtIGN1cnJlbnQpICogZmFjdG9yOwoJfQoKCWZ1bmN0aW9uIGVkZ2VJbmZsdWVuY2UocG9zaXRpb246IG51bWJlciwgc2l6ZTogbnVtYmVyLCB0aHJlc2hvbGQ6IG51bWJlcikgewoJCWlmIChwb3NpdGlvbiA8PSAwIHx8IHNpemUgPD0gMCB8fCB0aHJlc2hvbGQgPD0gMCkgcmV0dXJuIDA7CgkJaWYgKHBvc2l0aW9uIDwgdGhyZXNob2xkKSByZXR1cm4gMSAtIHBvc2l0aW9uIC8gdGhyZXNob2xkOwoJCWlmIChwb3NpdGlvbiA+IHNpemUgLSB0aHJlc2hvbGQpIHJldHVybiAtMSArIChzaXplIC0gcG9zaXRpb24pIC8gdGhyZXNob2xkOwoJCXJldHVybiAwOwoJfQoKCWZ1bmN0aW9uIHNldE1vdXNlUG9zaXRpb24oY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpIHsKCQljb25zdCBub2RlID0gY29udGFpbmVyUmVmOwoJCWlmICghbm9kZSkgcmV0dXJuOwoJCWNvbnN0IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCWNvbnN0IGxvY2FsID0gewoJCQl4OiBjbGllbnRYIC0gcmVjdC5sZWZ0LAoJCQl5OiBjbGllbnRZIC0gcmVjdC50b3AsCgkJfTsKCQltb3VzZVBvc1JlZi54ID0gbG9jYWwueDsKCQltb3VzZVBvc1JlZi55ID0gbG9jYWwueTsKCX0KCglmdW5jdGlvbiByZXNldE1vdXNlUG9zaXRpb24oKSB7CgkJbW91c2VQb3NSZWYueCA9IDA7CgkJbW91c2VQb3NSZWYueSA9IDA7Cgl9CgoJZnVuY3Rpb24gaGFuZGxlUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkgewoJCWlmIChldmVudC5idXR0b24gIT09IDAgJiYgZXZlbnQucG9pbnRlclR5cGUgIT09ICJ0b3VjaCIpIHJldHVybjsKCQlpZiAoIWNvbnRhaW5lclJlZikgcmV0dXJuOwoKCQlkcmFnZ2luZ1JlZiA9IHRydWU7CgkJaXNEcmFnZ2luZyA9IHRydWU7CgkJcG9pbnRlcklkID0gZXZlbnQucG9pbnRlcklkOwoJCXZlbG9jaXR5UmVmLnggPSAwOwoJCXZlbG9jaXR5UmVmLnkgPSAwOwoJCWVkZ2VWZWxvY2l0eVJlZi54ID0gMDsKCQllZGdlVmVsb2NpdHlSZWYueSA9IDA7CgoJCWxhc3RQb2ludGVyID0gewoJCQl4OiBldmVudC5jbGllbnRYLAoJCQl5OiBldmVudC5jbGllbnRZLAoJCX07CgkJbGFzdFBvaW50ZXJUaW1lID0gRGF0ZS5ub3coKTsKCgkJc2V0TW91c2VQb3NpdGlvbihldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTsKCgkJdHJ5IHsKCQkJY29udGFpbmVyUmVmLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CgkJfSBjYXRjaCB7CgkJCS8vIFNvbWUgcG9pbnRlciBzb3VyY2VzIG1heSBub3Qgc3VwcG9ydCBjYXB0dXJlLgoJCX0KCX0KCglmdW5jdGlvbiBoYW5kbGVQb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7CgkJc2V0TW91c2VQb3NpdGlvbihldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTsKCgkJaWYgKCFkcmFnZ2luZ1JlZikgcmV0dXJuOwoJCWlmIChwb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkgcmV0dXJuOwoKCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCWNvbnN0IGR0ID0gTWF0aC5tYXgobm93IC0gbGFzdFBvaW50ZXJUaW1lLCBNSU5fUE9JTlRFUl9EVCk7CgkJY29uc3QgZHggPSBldmVudC5jbGllbnRYIC0gbGFzdFBvaW50ZXIueDsKCQljb25zdCBkeSA9IGV2ZW50LmNsaWVudFkgLSBsYXN0UG9pbnRlci55OwoKCQlvZmZzZXRSZWYueCArPSBkeDsKCQlvZmZzZXRSZWYueSArPSBkeTsKCQljb25zdCBwb2ludGVyVmVsb2NpdHlYID0gZHggKiAoMTYgLyBkdCk7CgkJY29uc3QgcG9pbnRlclZlbG9jaXR5WSA9IGR5ICogKDE2IC8gZHQpOwoJCXZlbG9jaXR5UmVmLnggPQoJCQl2ZWxvY2l0eVJlZi54ICogRFJBR19WRUxPQ0lUWV9CTEVORCArCgkJCXBvaW50ZXJWZWxvY2l0eVggKiAoMSAtIERSQUdfVkVMT0NJVFlfQkxFTkQpOwoJCXZlbG9jaXR5UmVmLnkgPQoJCQl2ZWxvY2l0eVJlZi55ICogRFJBR19WRUxPQ0lUWV9CTEVORCArCgkJCXBvaW50ZXJWZWxvY2l0eVkgKiAoMSAtIERSQUdfVkVMT0NJVFlfQkxFTkQpOwoJCXZlbG9jaXR5UmVmLnggPSBjbGFtcCh2ZWxvY2l0eVJlZi54LCAtTUFYX1ZFTE9DSVRZLCBNQVhfVkVMT0NJVFkpOwoJCXZlbG9jaXR5UmVmLnkgPSBjbGFtcCh2ZWxvY2l0eVJlZi55LCAtTUFYX1ZFTE9DSVRZLCBNQVhfVkVMT0NJVFkpOwoKCQlsYXN0UG9pbnRlciA9IHsKCQkJeDogZXZlbnQuY2xpZW50WCwKCQkJeTogZXZlbnQuY2xpZW50WSwKCQl9OwoJCWxhc3RQb2ludGVyVGltZSA9IG5vdzsKCQljb21taXRPZmZzZXQoKTsKCX0KCglmdW5jdGlvbiBoYW5kbGVQb2ludGVyRW5kKGV2ZW50OiBQb2ludGVyRXZlbnQpIHsKCQlpZiAocG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHJldHVybjsKCgkJZHJhZ2dpbmdSZWYgPSBmYWxzZTsKCQlpc0RyYWdnaW5nID0gZmFsc2U7CgoJCWNvbnN0IG5vZGUgPSBjb250YWluZXJSZWY7CgkJaWYgKG5vZGUpIHsKCQkJdHJ5IHsKCQkJCWlmIChub2RlLmhhc1BvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCkpIHsKCQkJCQlub2RlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwoJCQkJfQoJCQl9IGNhdGNoIHsKCQkJCS8vIElnbm9yZSBjYXB0dXJlIHJlbGVhc2UgZmFpbHVyZXMuCgkJCX0KCQl9CgoJCXBvaW50ZXJJZCA9IG51bGw7Cgl9CgoJZnVuY3Rpb24gaGFuZGxlUG9pbnRlckxlYXZlKCkgewoJCWlmICghZHJhZ2dpbmdSZWYpIHsKCQkJcmVzZXRNb3VzZVBvc2l0aW9uKCk7CgkJfQoJfQoKCWZ1bmN0aW9uIGhhbmRsZVdoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7CgkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQljb25zdCB3aGVlbFNwZWVkID0gcmVzb2x2ZWRTY3JvbGxTZXR0aW5ncy53aGVlbFNwZWVkOwoJCWNvbnN0IGRlbHRhU2NhbGUgPQoJCQlldmVudC5kZWx0YU1vZGUgPT09IDEKCQkJCT8gMTYKCQkJCTogZXZlbnQuZGVsdGFNb2RlID09PSAyCgkJCQkJPyB2aWV3cG9ydFNpemUuaGVpZ2h0IHx8IDgwMAoJCQkJCTogMTsKCQljb25zdCBkZWx0YVggPSBjbGFtcCgKCQkJZXZlbnQuZGVsdGFYICogZGVsdGFTY2FsZSwKCQkJLVdIRUVMX0RFTFRBX0xJTUlULAoJCQlXSEVFTF9ERUxUQV9MSU1JVCwKCQkpOwoJCWNvbnN0IGRlbHRhWSA9IGNsYW1wKAoJCQlldmVudC5kZWx0YVkgKiBkZWx0YVNjYWxlLAoJCQktV0hFRUxfREVMVEFfTElNSVQsCgkJCVdIRUVMX0RFTFRBX0xJTUlULAoJCSk7CgoJCXZlbG9jaXR5UmVmLnggLT0gZGVsdGFYICogd2hlZWxTcGVlZCAqIFdIRUVMX0lNUFVMU0U7CgkJdmVsb2NpdHlSZWYueSAtPSBkZWx0YVkgKiB3aGVlbFNwZWVkICogV0hFRUxfSU1QVUxTRTsKCQl2ZWxvY2l0eVJlZi54ID0gY2xhbXAodmVsb2NpdHlSZWYueCwgLU1BWF9WRUxPQ0lUWSwgTUFYX1ZFTE9DSVRZKTsKCQl2ZWxvY2l0eVJlZi55ID0gY2xhbXAodmVsb2NpdHlSZWYueSwgLU1BWF9WRUxPQ0lUWSwgTUFYX1ZFTE9DSVRZKTsKCX0KCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAodHlwZW9mIHdpbmRvdyA9PT0gInVuZGVmaW5lZCIpIHJldHVybjsKCQlpZiAoIWNvbnRhaW5lclJlZikgcmV0dXJuOwoKCQl1cGRhdGVWaWV3cG9ydCgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZVZpZXdwb3J0KTsKCQlvYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lclJlZik7CgoJCXJldHVybiAoKSA9PiB7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm47CgoJCWNvbnN0IGVkZ2VUaHJlc2hvbGQgPSByZXNvbHZlZFNjcm9sbFNldHRpbmdzLmVkZ2VUaHJlc2hvbGQ7CgkJY29uc3QgZWRnZVNjcm9sbFNwZWVkID0gcmVzb2x2ZWRTY3JvbGxTZXR0aW5ncy5lZGdlU2Nyb2xsU3BlZWQ7CgkJY29uc3QgY29tYmluZWRGcmljdGlvbiA9IGZyaWN0aW9uICogcmVzb2x2ZWRTY3JvbGxTZXR0aW5ncy5mcmljdGlvbjsKCgkJY29uc3QgdXBkYXRlUGh5c2ljcyA9IChfdGltZTogbnVtYmVyLCBkZWx0YU1zOiBudW1iZXIpID0+IHsKCQkJaWYgKCFkcmFnZ2luZ1JlZikgewoJCQkJY29uc3QgZGVsdGFGcmFtZXMgPSBNYXRoLm1heChkZWx0YU1zIC8gMTYuNjY2NywgMC4wMDAxKTsKCQkJCWNvbnN0IGZyaWN0aW9uRmFjdG9yID0gTWF0aC5wb3coY29tYmluZWRGcmljdGlvbiwgZGVsdGFGcmFtZXMpOwoJCQkJdmVsb2NpdHlSZWYueCAqPSBmcmljdGlvbkZhY3RvcjsKCQkJCXZlbG9jaXR5UmVmLnkgKj0gZnJpY3Rpb25GYWN0b3I7CgoJCQkJaWYgKE1hdGguYWJzKHZlbG9jaXR5UmVmLngpIDwgMC4wMSkgdmVsb2NpdHlSZWYueCA9IDA7CgkJCQlpZiAoTWF0aC5hYnModmVsb2NpdHlSZWYueSkgPCAwLjAxKSB2ZWxvY2l0eVJlZi55ID0gMDsKCgkJCQljb25zdCBsb2NhbE1vdXNlWCA9IG1vdXNlUG9zUmVmLng7CgkJCQljb25zdCBsb2NhbE1vdXNlWSA9IG1vdXNlUG9zUmVmLnk7CgkJCQljb25zdCB3aWR0aCA9IHZpZXdwb3J0U2l6ZS53aWR0aDsKCQkJCWNvbnN0IGhlaWdodCA9IHZpZXdwb3J0U2l6ZS5oZWlnaHQ7CgkJCQljb25zdCBlZGdlWCA9IGVkZ2VJbmZsdWVuY2UobG9jYWxNb3VzZVgsIHdpZHRoLCBlZGdlVGhyZXNob2xkKTsKCQkJCWNvbnN0IGVkZ2VZID0gZWRnZUluZmx1ZW5jZShsb2NhbE1vdXNlWSwgaGVpZ2h0LCBlZGdlVGhyZXNob2xkKTsKCQkJCWNvbnN0IGVkZ2VWZWxvY2l0eVRhcmdldFggPQoJCQkJCWVkZ2VYICogZWRnZVNjcm9sbFNwZWVkICogRURHRV9WRUxPQ0lUWV9NVUxUSVBMSUVSOwoJCQkJY29uc3QgZWRnZVZlbG9jaXR5VGFyZ2V0WSA9CgkJCQkJZWRnZVkgKiBlZGdlU2Nyb2xsU3BlZWQgKiBFREdFX1ZFTE9DSVRZX01VTFRJUExJRVI7CgoJCQkJZWRnZVZlbG9jaXR5UmVmLnggPSBkYW1wKAoJCQkJCWVkZ2VWZWxvY2l0eVJlZi54LAoJCQkJCWVkZ2VWZWxvY2l0eVRhcmdldFgsCgkJCQkJRURHRV9SRVNQT05TRSwKCQkJCQlkZWx0YUZyYW1lcywKCQkJCSk7CgkJCQllZGdlVmVsb2NpdHlSZWYueSA9IGRhbXAoCgkJCQkJZWRnZVZlbG9jaXR5UmVmLnksCgkJCQkJZWRnZVZlbG9jaXR5VGFyZ2V0WSwKCQkJCQlFREdFX1JFU1BPTlNFLAoJCQkJCWRlbHRhRnJhbWVzLAoJCQkJKTsKCgkJCQljb25zdCB2ZWxvY2l0eVggPSBjbGFtcCgKCQkJCQl2ZWxvY2l0eVJlZi54ICsgZWRnZVZlbG9jaXR5UmVmLngsCgkJCQkJLU1BWF9WRUxPQ0lUWSwKCQkJCQlNQVhfVkVMT0NJVFksCgkJCQkpOwoJCQkJY29uc3QgdmVsb2NpdHlZID0gY2xhbXAoCgkJCQkJdmVsb2NpdHlSZWYueSArIGVkZ2VWZWxvY2l0eVJlZi55LAoJCQkJCS1NQVhfVkVMT0NJVFksCgkJCQkJTUFYX1ZFTE9DSVRZLAoJCQkJKTsKCgkJCQlpZiAodmVsb2NpdHlYICE9PSAwIHx8IHZlbG9jaXR5WSAhPT0gMCkgewoJCQkJCW9mZnNldFJlZi54ICs9IHZlbG9jaXR5WCAqIGRlbHRhRnJhbWVzOwoJCQkJCW9mZnNldFJlZi55ICs9IHZlbG9jaXR5WSAqIGRlbHRhRnJhbWVzOwoJCQkJCWNvbW1pdE9mZnNldCgpOwoJCQkJfQoJCQl9CgkJfTsKCgkJZ3NhcC50aWNrZXIuYWRkKHVwZGF0ZVBoeXNpY3MpOwoJCXJldHVybiAoKSA9PiB7CgkJCWdzYXAudGlja2VyLnJlbW92ZSh1cGRhdGVQaHlzaWNzKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGRpdgoJe0BhdHRhY2ggYXR0YWNoQ29udGFpbmVyUmVmfQoJY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiBzZWxlY3Qtbm9uZSIsIGNsYXNzTmFtZSl9CglzdHlsZT17YGN1cnNvcjoke2lzRHJhZ2dpbmcgPyAiZ3JhYmJpbmciIDogImdyYWIifTt0b3VjaC1hY3Rpb246bm9uZTtgfQoJb25wb2ludGVyZG93bj17aGFuZGxlUG9pbnRlckRvd259CglvbnBvaW50ZXJtb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX0KCW9ucG9pbnRlcnVwPXtoYW5kbGVQb2ludGVyRW5kfQoJb25wb2ludGVyY2FuY2VsPXtoYW5kbGVQb2ludGVyRW5kfQoJb25wb2ludGVybGVhdmU9e2hhbmRsZVBvaW50ZXJMZWF2ZX0KCW9ud2hlZWw9e2hhbmRsZVdoZWVsfQoJcm9sZT0icHJlc2VudGF0aW9uIgoJey4uLnJlc3RQcm9wc30KPgoJPGRpdiBjbGFzcz0icG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC0wIj4KCQl7I2VhY2ggdmlzaWJsZUNlbGxzIGFzIGNlbGwgKGNlbGwuaWQpfQoJCQl7QGNvbnN0IG1lZGlhU3JjID0gcmVzb2x2ZU1lZGlhU3JjKGNlbGwuaXRlbSl9CgkJCTxkaXYKCQkJCWNsYXNzPSJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIHRvcC0wIGxlZnQtMCB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iCgkJCQlzdHlsZT17YHdpZHRoOiR7cmVzcG9uc2l2ZURpbWVuc2lvbnMuY2VsbFdpZHRofXB4O2hlaWdodDoke3Jlc3BvbnNpdmVEaW1lbnNpb25zLmNlbGxIZWlnaHR9cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKCR7Y2VsbC5wb3NYfXB4LCAke2NlbGwucG9zWX1weCwgMCk7YH0KCQkJPgoJCQkJPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2VsbENsYXNzKX0+CgkJCQkJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBoLWZ1bGwgdy1mdWxsIj4KCQkJCQkJeyNpZiBjZWxsLml0ZW0udHlwZSA9PT0gImltYWdlIiAmJiBtZWRpYVNyY30KCQkJCQkJCTxpbWcKCQkJCQkJCQlzcmM9e21lZGlhU3JjfQoJCQkJCQkJCWFsdD17cmVzb2x2ZUFsdChjZWxsLml0ZW0pfQoJCQkJCQkJCWRyYWdnYWJsZT0iZmFsc2UiCgkJCQkJCQkJY2xhc3M9ImgtZnVsbCB3LWZ1bGwgb2JqZWN0LWNvdmVyIgoJCQkJCQkJLz4KCQkJCQkJey9pZn0KCQkJCQkJeyNpZiBjZWxsLml0ZW0udHlwZSA9PT0gInZpZGVvIiAmJiBtZWRpYVNyY30KCQkJCQkJCTx2aWRlbwoJCQkJCQkJCXNyYz17bWVkaWFTcmN9CgkJCQkJCQkJYXV0b3BsYXkKCQkJCQkJCQltdXRlZAoJCQkJCQkJCWxvb3AKCQkJCQkJCQlwbGF5c2lubGluZQoJCQkJCQkJCWRyYWdnYWJsZT0iZmFsc2UiCgkJCQkJCQkJY2xhc3M9ImgtZnVsbCB3LWZ1bGwgb2JqZWN0LWNvdmVyIgoJCQkJCQkJPjwvdmlkZW8+CgkJCQkJCXsvaWZ9CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJey9lYWNofQoJPC9kaXY+CjwvZGl2Pgo=", "components/infinite-physics-gallery/types.ts": "ZXhwb3J0IGludGVyZmFjZSBJbmZpbml0ZVBoeXNpY3NHYWxsZXJ5SW1hZ2VJdGVtIHsKCS8qKgoJICogT3B0aW9uYWwgc3RhYmxlIGl0ZW0gaWRlbnRpZmllci4KCSAqLwoJaWQ/OiBzdHJpbmcgfCBudW1iZXI7CgkvKioKCSAqIERpc2NyaW1pbmF0b3IgZm9yIGltYWdlIG1lZGlhIGl0ZW1zLgoJICovCgl0eXBlOiAiaW1hZ2UiOwoJLyoqCgkgKiBJbWFnZSBwYXlsb2FkLgoJICovCglpbWFnZTogewoJCS8qKgoJCSAqIEltYWdlIHNvdXJjZSBVUkwgb3IgbG9jYWwgcGF0aC4KCQkgKi8KCQlzcmM6IHN0cmluZzsKCQkvKioKCQkgKiBPcHRpb25hbCBpbWFnZSBhbHQgdGV4dC4KCQkgKi8KCQlhbHQ/OiBzdHJpbmc7Cgl9Owp9CgpleHBvcnQgaW50ZXJmYWNlIEluZmluaXRlUGh5c2ljc0dhbGxlcnlWaWRlb0l0ZW0gewoJLyoqCgkgKiBPcHRpb25hbCBzdGFibGUgaXRlbSBpZGVudGlmaWVyLgoJICovCglpZD86IHN0cmluZyB8IG51bWJlcjsKCS8qKgoJICogRGlzY3JpbWluYXRvciBmb3IgdmlkZW8gbWVkaWEgaXRlbXMuCgkgKi8KCXR5cGU6ICJ2aWRlbyI7CgkvKioKCSAqIFZpZGVvIHBheWxvYWQuCgkgKi8KCXZpZGVvOiB7CgkJLyoqCgkJICogVmlkZW8gc291cmNlIFVSTCBvciBsb2NhbCBwYXRoLgoJCSAqLwoJCXNyYzogc3RyaW5nOwoJfTsKfQoKLyoqCiAqIEl0ZW0gdW5pb24gYWNjZXB0ZWQgYnkgSW5maW5pdGVQaHlzaWNzR2FsbGVyeS4KICogVXNlIGVpdGhlciB0aGUgaW1hZ2Ugc2hhcGUgb3IgdGhlIHZpZGVvIHNoYXBlLgogKi8KZXhwb3J0IHR5cGUgSW5maW5pdGVQaHlzaWNzR2FsbGVyeUl0ZW0gPQoJfCBJbmZpbml0ZVBoeXNpY3NHYWxsZXJ5SW1hZ2VJdGVtCgl8IEluZmluaXRlUGh5c2ljc0dhbGxlcnlWaWRlb0l0ZW07Cg==", - "components/interactive-grid/InteractiveGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0ludGVyYWN0aXZlR3JpZFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCWltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBHcmlkIHJlc29sdXRpb24gKG51bWJlciBvZiBjZWxscyBwZXIgcm93L2NvbHVtbikuCgkJICogQGRlZmF1bHQgMTUKCQkgKi8KCQlncmlkPzogbnVtYmVyOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiBtb3VzZSBpbmZsdWVuY2UuCgkJICogQGRlZmF1bHQgMC4xNQoJCSAqLwoJCW1vdXNlU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgZGlzdG9ydGlvbiBlZmZlY3QuCgkJICogQGRlZmF1bHQgMC4zNQoJCSAqLwoJCXN0cmVuZ3RoPzogbnVtYmVyOwoJCS8qKgoJCSAqIFJlbGF4YXRpb24gZmFjdG9yIGZvciByZXR1cm5pbmcgdG8gb3JpZ2luYWwgc3RhdGUgKDAtMSkuCgkJICogQGRlZmF1bHQgMC45CgkJICovCgkJcmVsYXhhdGlvbj86IG51bWJlcjsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2UsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWdyaWQgPSAxNSwKCQltb3VzZVNpemUgPSAwLjE1LAoJCXN0cmVuZ3RoID0gMC4zNSwKCQlyZWxheGF0aW9uID0gMC45LAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7CglsZXQgY29udGFpbmVyID0gJHN0YXRlPEhUTUxFbGVtZW50PigpOwoJbGV0IG1vdXNlWCA9ICRzdGF0ZSgwKTsKCWxldCBtb3VzZVkgPSAkc3RhdGUoMCk7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyID09PSBub2RlKSB7CgkJCQljb250YWluZXIgPSB1bmRlZmluZWQ7CgkJCX0KCQl9OwoJfTsKCglmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZTogTW91c2VFdmVudCkgewoJCWlmICghY29udGFpbmVyKSByZXR1cm47CgkJY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQltb3VzZVggPSAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7CgkJbW91c2VZID0gKGUuY2xpZW50WSAtIHJlY3QudG9wKSAvIHJlY3QuaGVpZ2h0OwoJfQo8L3NjcmlwdD4KCjxkaXYKCXtAYXR0YWNoIGF0dGFjaENvbnRhaW5lcn0KCWNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfQoJb25tb3VzZW1vdmU9e2hhbmRsZU1vdXNlTW92ZX0KCXsuLi5yZXN0fQo+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfT4KCQkJPFNjZW5lCgkJCQl7aW1hZ2V9CgkJCQl7Z3JpZH0KCQkJCXttb3VzZVNpemV9CgkJCQl7c3RyZW5ndGh9CgkJCQl7cmVsYXhhdGlvbn0KCQkJCXttb3VzZVh9CgkJCQl7bW91c2VZfQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/interactive-grid/InteractiveGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgewoJCVZlY3RvcjIsCgkJRGF0YVRleHR1cmUsCgkJUkdCQUZvcm1hdCwKCQlGbG9hdFR5cGUsCgkJTmVhcmVzdEZpbHRlciwKCQlDbGFtcFRvRWRnZVdyYXBwaW5nLAoJCUxpbmVhckZpbHRlciwKCQlTaGFkZXJNYXRlcmlhbCwKCX0gZnJvbSAidGhyZWUiOwoJaW1wb3J0IHsgdXNlVGV4dHVyZSB9IGZyb20gIkB0aHJlbHRlL2V4dHJhcyI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgcmVzb2x1dGlvbiAobnVtYmVyIG9mIGNlbGxzIHBlciByb3cvY29sdW1uKS4KCQkgKi8KCQlncmlkOiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIG1vdXNlIGluZmx1ZW5jZS4KCQkgKi8KCQltb3VzZVNpemU6IG51bWJlcjsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgZGlzdG9ydGlvbiBlZmZlY3QuCgkJICovCgkJc3RyZW5ndGg6IG51bWJlcjsKCQkvKioKCQkgKiBSZWxheGF0aW9uIGZhY3RvciBmb3IgcmV0dXJuaW5nIHRvIG9yaWdpbmFsIHN0YXRlICgwLTEpLgoJCSAqLwoJCXJlbGF4YXRpb246IG51bWJlcjsKCQkvKioKCQkgKiBDdXJyZW50IG5vcm1hbGl6ZWQgbW91c2UgWCBwb3NpdGlvbi4KCQkgKi8KCQltb3VzZVg6IG51bWJlcjsKCQkvKioKCQkgKiBDdXJyZW50IG5vcm1hbGl6ZWQgbW91c2UgWSBwb3NpdGlvbi4KCQkgKi8KCQltb3VzZVk6IG51bWJlcjsKCX0KCglsZXQgeyBpbWFnZSwgZ3JpZCwgbW91c2VTaXplLCBzdHJlbmd0aCwgcmVsYXhhdGlvbiwgbW91c2VYLCBtb3VzZVkgfTogUHJvcHMgPQoJCSRwcm9wcygpOwoKCWNvbnN0IHsgc2l6ZSB9ID0gdXNlVGhyZWx0ZSgpOwoKCWxldCB0aW1lID0gMDsKCWxldCBtYXRlcmlhbCA9ICRzdGF0ZTxTaGFkZXJNYXRlcmlhbD4oKTsKCglsZXQgY3VycmVudFZYID0gJHN0YXRlKDApOwoJbGV0IGN1cnJlbnRWWSA9ICRzdGF0ZSgwKTsKCWxldCBwcmV2WCA9IDA7CglsZXQgcHJldlkgPSAwOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFZlY3RvcjIoMSwgMSk7Cgljb25zdCB0ZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjdG9yMigxLCAxKTsKCglmdW5jdGlvbiByZWdlbmVyYXRlR3JpZChncmlkU2l6ZTogbnVtYmVyKSB7CgkJY29uc3Qgc2l6ZSA9IGdyaWRTaXplICogZ3JpZFNpemU7CgkJY29uc3QgZGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoNCAqIHNpemUpOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykgewoJCQljb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDI1NSAtIDEyNTsKCQkJY29uc3QgcjEgPSBNYXRoLnJhbmRvbSgpICogMjU1IC0gMTI1OwoJCQljb25zdCBzdHJpZGUgPSBpICogNDsKCgkJCWRhdGFbc3RyaWRlXSA9IHI7CgkJCWRhdGFbc3RyaWRlICsgMV0gPSByMTsKCQkJZGF0YVtzdHJpZGUgKyAyXSA9IHI7CgkJCWRhdGFbc3RyaWRlICsgM10gPSAyNTU7CgkJfQoKCQljb25zdCB0ZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKAoJCQlkYXRhLAoJCQlncmlkU2l6ZSwKCQkJZ3JpZFNpemUsCgkJCVJHQkFGb3JtYXQsCgkJCUZsb2F0VHlwZSwKCQkpOwoJCXRleHR1cmUubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjsKCQl0ZXh0dXJlLm1pbkZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7CgkJdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJcmV0dXJuIHRleHR1cmU7Cgl9CgoJbGV0IGRhdGFUZXh0dXJlID0gJGRlcml2ZWQuYnkoKCkgPT4gewoJCXJldHVybiByZWdlbmVyYXRlR3JpZChncmlkKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWN1cnJlbnRWWCA9IG1vdXNlWCAtIHByZXZYOwoJCWN1cnJlbnRWWSA9IG1vdXNlWSAtIHByZXZZOwoJCXByZXZYID0gbW91c2VYOwoJCXByZXZZID0gbW91c2VZOwoJfSk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAogICAgdmFyeWluZyB2ZWMyIHZVdjsKICAgIHZvaWQgbWFpbigpIHsKICAgICAgdlV2ID0gdXY7CiAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMS4wKTsKICAgIH0KICBgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAogICAgdW5pZm9ybSBmbG9hdCB0aW1lOwogICAgdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwogICAgdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVEYXRhVGV4dHVyZTsKICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwogICAgdmFyeWluZyB2ZWMyIHZVdjsKCiAgICB2ZWMyIGdldENvdmVyVVYodmVjMiB1diwgdmVjMiB0ZXh0dXJlU2l6ZSkgewogICAgICAgIHZlYzIgcyA9IHVSZXNvbHV0aW9uIC8gdGV4dHVyZVNpemU7CiAgICAgICAgZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwogICAgICAgIHZlYzIgc2NhbGVkU2l6ZSA9IHRleHR1cmVTaXplICogc2NhbGU7CiAgICAgICAgdmVjMiBvZmZzZXQgPSAodVJlc29sdXRpb24gLSBzY2FsZWRTaXplKSAqIDAuNTsKICAgICAgICByZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKICAgIH0KCiAgICB2b2lkIG1haW4oKSB7CiAgICAgICAgdmVjMiBjb3ZlclV2ID0gZ2V0Q292ZXJVVih2VXYsIHVUZXh0dXJlU2l6ZSk7CgogICAgICAgIHZlYzQgZGF0YSA9IHRleHR1cmUyRCh1RGF0YVRleHR1cmUsIHZVdik7CiAgICAgICAgdmVjMiBkaXNwbGFjZWRVViA9IGNvdmVyVXYgLSAwLjAyICogZGF0YS5yZzsKCiAgICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgZGlzcGxhY2VkVVYpOwogICAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwogICAgICAgICNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PgogICAgfQogIGA7CgoJY29uc3QgdGV4dHVyZSA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUoaW1hZ2UsIHsKCQkJdHJhbnNmb3JtOiAodGV4KSA9PiB7CgkJCQl0ZXgud3JhcFMgPSBDbGFtcFRvRWRnZVdyYXBwaW5nOwoJCQkJdGV4LndyYXBUID0gQ2xhbXBUb0VkZ2VXcmFwcGluZzsKCQkJCXRleC5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CgkJCQl0ZXgubWFnRmlsdGVyID0gTGluZWFyRmlsdGVyOwoJCQkJcmV0dXJuIHRleDsKCQkJfSwKCQl9KSwKCSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdGV4ID0gJHRleHR1cmU7CgkJaWYgKHRleCAmJiB0ZXguaW1hZ2UpIHsKCQkJdGV4dHVyZVNpemVVbmlmb3JtLnNldCh0ZXguaW1hZ2Uud2lkdGgsIHRleC5pbWFnZS5oZWlnaHQpOwoJCX0KCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJdGltZSArPSBkZWx0YTsKCQlyZXNvbHV0aW9uVW5pZm9ybS5zZXQoJHNpemUud2lkdGgsICRzaXplLmhlaWdodCk7CgkJaWYgKG1hdGVyaWFsICYmIGRhdGFUZXh0dXJlKSB7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB0aW1lOwoKCQkJY29uc3QgZGF0YSA9IGRhdGFUZXh0dXJlLmltYWdlLmRhdGE7CgkJCWlmICghZGF0YSkgcmV0dXJuOwoJCQljb25zdCBzaXplU3EgPSBncmlkOwoJCQljb25zdCBncmlkTW91c2VYID0gc2l6ZVNxICogbW91c2VYOwoJCQljb25zdCBncmlkTW91c2VZID0gc2l6ZVNxICogKDEgLSBtb3VzZVkpOwoJCQljb25zdCBtYXhEaXN0ID0gc2l6ZVNxICogbW91c2VTaXplOwoJCQljb25zdCBhc3BlY3QgPSAkc2l6ZS5oZWlnaHQgLyAkc2l6ZS53aWR0aDsKCQkJY29uc3QgbWF4RGlzdFNxID0gbWF4RGlzdCAqKiAyOwoKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplU3E7IGkrKykgewoJCQkJZm9yIChsZXQgaiA9IDA7IGogPCBzaXplU3E7IGorKykgewoJCQkJCWNvbnN0IGRpc3RhbmNlID0KCQkJCQkJKGdyaWRNb3VzZVggLSBpKSAqKiAyIC8gYXNwZWN0ICsgKGdyaWRNb3VzZVkgLSBqKSAqKiAyOwoKCQkJCQlpZiAoZGlzdGFuY2UgPCBtYXhEaXN0U3EpIHsKCQkJCQkJY29uc3QgaW5kZXggPSA0ICogKGkgKyBzaXplU3EgKiBqKTsKCQkJCQkJbGV0IHBvd2VyID0gbWF4RGlzdCAvIE1hdGguc3FydChkaXN0YW5jZSk7CgkJCQkJCWlmIChwb3dlciA+IDEwKSBwb3dlciA9IDEwOwoKCQkJCQkJZGF0YVtpbmRleF0gKz0gc3RyZW5ndGggKiAxMDAgKiBjdXJyZW50VlggKiBwb3dlcjsKCQkJCQkJZGF0YVtpbmRleCArIDFdIC09IHN0cmVuZ3RoICogMTAwICogY3VycmVudFZZICogcG93ZXI7CgkJCQkJfQoKCQkJCQljb25zdCBpZHggPSA0ICogKGkgKyBzaXplU3EgKiBqKTsKCQkJCQlkYXRhW2lkeF0gKj0gcmVsYXhhdGlvbjsKCQkJCQlkYXRhW2lkeCArIDFdICo9IHJlbGF4YXRpb247CgkJCQl9CgkJCX0KCgkJCWN1cnJlbnRWWCAqPSAwLjk7CgkJCWN1cnJlbnRWWSAqPSAwLjk7CgkJCWRhdGFUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQl9Cgl9KTsKPC9zY3JpcHQ+Cgp7I2lmICR0ZXh0dXJlICYmIGRhdGFUZXh0dXJlfQoJPFQuTWVzaD4KCQk8VC5QbGFuZUdlb21ldHJ5IGFyZ3M9e1syLCAyXX0gLz4KCQk8VC5TaGFkZXJNYXRlcmlhbAoJCQliaW5kOnJlZj17bWF0ZXJpYWx9CgkJCXt2ZXJ0ZXhTaGFkZXJ9CgkJCXtmcmFnbWVudFNoYWRlcn0KCQkJdHJhbnNwYXJlbnQKCQkJdW5pZm9ybXM9e3sKCQkJCXRpbWU6IHsgdmFsdWU6IDAgfSwKCQkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiB0ZXh0dXJlU2l6ZVVuaWZvcm0gfSwKCQkJCXVUZXh0dXJlOiB7IHZhbHVlOiAkdGV4dHVyZSB9LAoJCQkJdURhdGFUZXh0dXJlOiB7IHZhbHVlOiBkYXRhVGV4dHVyZSB9LAoJCQl9fQoJCS8+Cgk8L1QuTWVzaD4Key9pZn0K", - "components/lava-lamp/LavaLamp.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0xhdmFMYW1wU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHsgTm9Ub25lTWFwcGluZyB9IGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIGxhdmEgYmxvYnMuCgkJICogQGRlZmF1bHQgIiMxODE4MWIiCgkJICovCgkJY29sb3I/OiBTY2VuZVByb3BzWyJjb2xvciJdOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBmcmVzbmVsIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQlmcmVzbmVsQ29sb3I/OiBTY2VuZVByb3BzWyJmcmVzbmVsQ29sb3IiXTsKCQkvKioKCQkgKiBTcGVlZCBvZiB0aGUgbGF2YSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIEZyZXNuZWwgcG93ZXIgZm9yIHRoZSBlZGdlIGxpZ2h0aW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQlmcmVzbmVsUG93ZXI/OiBTY2VuZVByb3BzWyJmcmVzbmVsUG93ZXIiXTsKCQkvKioKCQkgKiBCYXNlIHJhZGl1cyBvZiB0aGUgYmxvYnMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXJhZGl1cz86IFNjZW5lUHJvcHNbInJhZGl1cyJdOwoJCS8qKgoJCSAqIFNtb290aG5lc3Mgb2YgdGhlIGJsb2IgYmxlbmRpbmcgKG1ldGFiYWxsIGVmZmVjdCkuCgkJICogQGRlZmF1bHQgMC4xCgkJICovCgkJc21vb3RobmVzcz86IFNjZW5lUHJvcHNbInNtb290aG5lc3MiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiMxODE4MWIiLAoJCWZyZXNuZWxDb2xvciA9ICIjZmY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlmcmVzbmVsUG93ZXIgPSAzLjAsCgkJcmFkaXVzID0gMSwKCQlzbW9vdGhuZXNzID0gMC4xLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUKCQkJCXtjb2xvcn0KCQkJCXtmcmVzbmVsQ29sb3J9CgkJCQl7c3BlZWR9CgkJCQl7ZnJlc25lbFBvd2VyfQoJCQkJe3JhZGl1c30KCQkJCXtzbW9vdGhuZXNzfQoJCQkvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/lava-lamp/LavaLampScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBWZWN0b3I0LCBTaGFkZXJNYXRlcmlhbCwgQ29sb3IgfSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSBsYXZhIGJsb2JzLgoJCSAqIEBkZWZhdWx0ICIjMTgxODFiIgoJCSAqLwoJCWNvbG9yPzogc3RyaW5nOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBmcmVzbmVsIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQlmcmVzbmVsQ29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogU3BlZWQgb2YgdGhlIGxhdmEgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZyZXNuZWwgcG93ZXIgZm9yIHRoZSBlZGdlIGxpZ2h0aW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQlmcmVzbmVsUG93ZXI/OiBudW1iZXI7CgkJLyoqCgkJICogQmFzZSByYWRpdXMgb2YgdGhlIGJsb2JzLgoJCSAqIEBkZWZhdWx0IDEKCQkgKi8KCQlyYWRpdXM/OiBudW1iZXI7CgkJLyoqCgkJICogU21vb3RobmVzcyBvZiB0aGUgYmxvYiBibGVuZGluZyAobWV0YWJhbGwgZWZmZWN0KS4KCQkgKiBAZGVmYXVsdCAwLjEKCQkgKi8KCQlzbW9vdGhuZXNzPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJY29sb3IgPSAiIzE4MTgxYiIsCgkJZnJlc25lbENvbG9yID0gIiNmZjY5MDAiLAoJCXNwZWVkID0gMS4wLAoJCWZyZXNuZWxQb3dlciA9IDMuMCwKCQlyYWRpdXMgPSAxLAoJCXNtb290aG5lc3MgPSAwLjEsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IHsgc2l6ZSB9ID0gdXNlVGhyZWx0ZSgpOwoKCWxldCB0aW1lID0gMDsKCWxldCBtYXRlcmlhbCA9ICRzdGF0ZTxTaGFkZXJNYXRlcmlhbD4oKTsKCgljb25zdCByZXNvbHV0aW9uVW5pZm9ybSA9IG5ldyBWZWN0b3I0KCk7Cgljb25zdCBjb2xvclVuaWZvcm0gPSBuZXcgQ29sb3IoKTsKCWNvbnN0IGZyZXNuZWxDb2xvclVuaWZvcm0gPSBuZXcgQ29sb3IoKTsKCgljb25zdCB1cGRhdGVSZXNvbHV0aW9uID0gKCkgPT4gewoJCWNvbnN0IHdpZHRoID0gJHNpemUud2lkdGg7CgkJY29uc3QgaGVpZ2h0ID0gJHNpemUuaGVpZ2h0OwoJCWNvbnN0IGltYWdlQXNwZWN0ID0gMTsKCQlsZXQgYTEsIGEyOwoKCQlpZiAoaGVpZ2h0IC8gd2lkdGggPiBpbWFnZUFzcGVjdCkgewoJCQlhMSA9ICh3aWR0aCAvIGhlaWdodCkgKiBpbWFnZUFzcGVjdDsKCQkJYTIgPSAxOwoJCX0gZWxzZSB7CgkJCWExID0gMTsKCQkJYTIgPSBoZWlnaHQgLyB3aWR0aCAvIGltYWdlQXNwZWN0OwoJCX0KCgkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KHdpZHRoLCBoZWlnaHQsIGExLCBhMik7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCXVwZGF0ZVJlc29sdXRpb24oKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbG9yVW5pZm9ybS5zZXQoY29sb3IpOwoJCWZyZXNuZWxDb2xvclVuaWZvcm0uc2V0KGZyZXNuZWxDb2xvcik7CgkJaWYgKG1hdGVyaWFsKSB7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVDb2xvci52YWx1ZS5jb3B5KGNvbG9yVW5pZm9ybSk7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVGcmVzbmVsQ29sb3IudmFsdWUuY29weShmcmVzbmVsQ29sb3JVbmlmb3JtKTsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudUZyZXNuZWxQb3dlci52YWx1ZSA9IGZyZXNuZWxQb3dlcjsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudVJhZGl1cy52YWx1ZSA9IHJhZGl1czsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudVNtb290aG5lc3MudmFsdWUgPSBzbW9vdGhuZXNzOwoJCX0KCX0pOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKICAgIHZhcnlpbmcgdmVjMiB2VXY7CiAgICB1bmlmb3JtIGZsb2F0IHVUaW1lOwogICAgdW5pZm9ybSB2ZWM0IHVSZXNvbHV0aW9uOwoKICAgIHZvaWQgbWFpbigpIHsKICAgICAgICB2VXYgPSB1djsKICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7CiAgICB9CiAgYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKICAgIHZhcnlpbmcgdmVjMiB2VXY7CiAgICB1bmlmb3JtIGZsb2F0IHVUaW1lOwogICAgdW5pZm9ybSB2ZWM0IHVSZXNvbHV0aW9uOwogICAgdW5pZm9ybSB2ZWMzIHVDb2xvcjsKICAgIHVuaWZvcm0gdmVjMyB1RnJlc25lbENvbG9yOwogICAgdW5pZm9ybSBmbG9hdCB1RnJlc25lbFBvd2VyOwogICAgdW5pZm9ybSBmbG9hdCB1UmFkaXVzOwogICAgdW5pZm9ybSBmbG9hdCB1U21vb3RobmVzczsKCiAgICBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4OwoKICAgIG1hdDQgcm90YXRpb25NYXRyaXgodmVjMyBheGlzLCBmbG9hdCBhbmdsZSkgewogICAgICAgIGF4aXMgPSBub3JtYWxpemUoYXhpcyk7CiAgICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZSk7CiAgICAgICAgZmxvYXQgYyA9IGNvcyhhbmdsZSk7CiAgICAgICAgZmxvYXQgb2MgPSAxLjAgLSBjOwogICAgICAgIHJldHVybiBtYXQ0KG9jICogYXhpcy54ICogYXhpcy54ICsgYywgICAgICAgICAgIG9jICogYXhpcy54ICogYXhpcy55IC0gYXhpcy56ICogcywgIG9jICogYXhpcy56ICogYXhpcy54ICsgYXhpcy55ICogcywgIDAuMCwKICAgICAgICAgICAgICAgICAgICBvYyAqIGF4aXMueCAqIGF4aXMueSArIGF4aXMueiAqIHMsICBvYyAqIGF4aXMueSAqIGF4aXMueSArIGMsICAgICAgICAgICBvYyAqIGF4aXMueSAqIGF4aXMueiAtIGF4aXMueCAqIHMsICAwLjAsCiAgICAgICAgICAgICAgICAgICAgb2MgKiBheGlzLnogKiBheGlzLnggLSBheGlzLnkgKiBzLCAgb2MgKiBheGlzLnkgKiBheGlzLnogKyBheGlzLnggKiBzLCAgb2MgKiBheGlzLnogKiBheGlzLnogKyBjLCAgICAgICAgICAgMC4wLAogICAgICAgICAgICAgICAgICAgIDAuMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCk7CiAgICB9CgogICAgdmVjMyByb3RhdGUodmVjMyB2LCB2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CiAgICAgICAgbWF0NCBtID0gcm90YXRpb25NYXRyaXgoYXhpcywgYW5nbGUpOwogICAgICAgIHJldHVybiAobSAqIHZlYzQodiwgMS4wKSkueHl6OwogICAgfQoKICAgIGZsb2F0IHNtaW4oIGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGsgKSB7CiAgICAgICAgayAqPSA2LjA7CiAgICAgICAgZmxvYXQgaCA9IG1heCggay1hYnMoYS1iKSwgMC4wICkvazsKICAgICAgICByZXR1cm4gbWluKGEsYikgLSBoKmgqaCprKigxLjAvNi4wKTsKICAgIH0KCiAgICBmbG9hdCBzcGhlcmVTREYodmVjMyBwLCBmbG9hdCByKSB7CiAgICAgICAgcmV0dXJuIGxlbmd0aChwKSAtIHI7CiAgICB9CgogICAgZmxvYXQgc2RmKHZlYzMgcCkgewogICAgICAgIHZlYzMgcDEgPSByb3RhdGUocCwgdmVjMygwLjAsIDAuMCwgMS4wKSwgdVRpbWUvNS4wKTsKICAgICAgICB2ZWMzIHAyID0gcm90YXRlKHAsIHZlYzMoMS4pLCAtdVRpbWUvNS4wKTsKICAgICAgICB2ZWMzIHAzID0gcm90YXRlKHAsIHZlYzMoMS4sIDEuLCAwLiksIC11VGltZS80LjUpOwogICAgICAgIHZlYzMgcDQgPSByb3RhdGUocCwgdmVjMygwLiwgMS4sIDAuKSwgLXVUaW1lLzQuMCk7CgogICAgICAgIGZsb2F0IHIgPSB1UmFkaXVzOwoKICAgICAgICBmbG9hdCBmaW5hbCA9IHNwaGVyZVNERihwMSAtIHZlYzMoLTAuNSwgMC4wLCAwLjApLCAwLjM1ICogcik7CiAgICAgICAgZmxvYXQgbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwMiAtIHZlYzMoMC41NSwgMC4wLCAwLjApLCAwLjMgKiByKTsKICAgICAgICBmaW5hbCA9IHNtaW4oZmluYWwsIG5leHRTcGhlcmUsIHVTbW9vdGhuZXNzKTsKICAgICAgICBuZXh0U3BoZXJlID0gc3BoZXJlU0RGKHAyIC0gdmVjMygtMC44LCAwLjAsIDAuMCksIDAuMiAqIHIpOwogICAgICAgIGZpbmFsID0gc21pbihmaW5hbCwgbmV4dFNwaGVyZSwgdVNtb290aG5lc3MpOwogICAgICAgIG5leHRTcGhlcmUgPSBzcGhlcmVTREYocDMgLSB2ZWMzKDEuMCwgMC4wLCAwLjApLCAwLjE1ICogcik7CiAgICAgICAgZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CiAgICAgICAgbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwNCAtIHZlYzMoMC40NSwgLTAuNDUsIDAuMCksIDAuMTUgKiByKTsKICAgICAgICBmaW5hbCA9IHNtaW4oZmluYWwsIG5leHRTcGhlcmUsIHVTbW9vdGhuZXNzKTsKCiAgICAgICAgcmV0dXJuIGZpbmFsOwogICAgfQoKICAgIHZlYzMgZ2V0Tm9ybWFsKHZlYzMgcCkgewogICAgICAgIGZsb2F0IGQgPSAwLjAwMTsKICAgICAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoCiAgICAgICAgICAgIHNkZihwICsgdmVjMyhkLCAwLjAsIDAuMCkpIC0gc2RmKHAgLSB2ZWMzKGQsIDAuMCwgMC4wKSksCiAgICAgICAgICAgIHNkZihwICsgdmVjMygwLjAsIGQsIDAuMCkpIC0gc2RmKHAgLSB2ZWMzKDAuMCwgZCwgMC4wKSksCiAgICAgICAgICAgIHNkZihwICsgdmVjMygwLjAsIDAuMCwgZCkpIC0gc2RmKHAgLSB2ZWMzKDAuMCwgMC4wLCBkKSkKICAgICAgICApKTsKICAgIH0KCiAgICBmbG9hdCByYXlNYXJjaCh2ZWMzIHJheU9yaWdpbiwgdmVjMyByYXkpIHsKICAgICAgICBmbG9hdCB0ID0gMC4wOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKICAgICAgICAgICAgdmVjMyBwID0gcmF5T3JpZ2luICsgcmF5ICogdDsKICAgICAgICAgICAgZmxvYXQgZCA9IHNkZihwKTsKICAgICAgICAgICAgaWYgKGQgPCAwLjAwMSkgcmV0dXJuIHQ7CiAgICAgICAgICAgIHQgKz0gZDsKICAgICAgICAgICAgaWYgKHQgPiAxMDAuMCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMS4wOwogICAgfQoKICAgIHZvaWQgbWFpbigpIHsKICAgICAgICB2ZWMyIG5ld1VWID0gKHZVdiAtIHZlYzIoMC41KSkgKiB1UmVzb2x1dGlvbi56dyArIHZlYzIoMC41KTsKICAgICAgICB2ZWMzIGNhbWVyYVBvcyA9IHZlYzMoMC4wLCAwLjAsIDUuMCk7CiAgICAgICAgdmVjMyByYXkgPSBub3JtYWxpemUodmVjMygodlV2IC0gdmVjMigwLjUpKSAqIHVSZXNvbHV0aW9uLnp3LCAtMSkpOwoKICAgICAgICBmbG9hdCB0ID0gcmF5TWFyY2goY2FtZXJhUG9zLCByYXkpOwogICAgICAgIGlmICh0ID4gMC4wKSB7CiAgICAgICAgICAgIHZlYzMgcCA9IGNhbWVyYVBvcyArIHJheSAqIHQ7CiAgICAgICAgICAgIHZlYzMgbm9ybWFsID0gZ2V0Tm9ybWFsKHApOwogICAgICAgICAgICBmbG9hdCBmcmVzbmVsID0gcG93KDEuMCArIGRvdChyYXksIG5vcm1hbCksIHVGcmVzbmVsUG93ZXIpOwoKCiAgICAgICAgICAgIHZlYzMgY29sb3IgPSBtaXgodUNvbG9yLCB1RnJlc25lbENvbG9yLCBmcmVzbmVsKTsKCiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIDEuMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsKICAgICAgICB9CiAgICAgICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CiAgICB9CiAgYDsKCgl1c2VUYXNrKChkZWx0YSkgPT4gewoJCXRpbWUgKz0gZGVsdGEgKiBzcGVlZDsKCQlpZiAobWF0ZXJpYWwpIHsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudVRpbWUudmFsdWUgPSB0aW1lOwoJCQltYXRlcmlhbC51bmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5jb3B5KHJlc29sdXRpb25Vbmlmb3JtKTsKCQl9Cgl9KTsKPC9zY3JpcHQ+Cgo8VC5PcnRob2dyYXBoaWNDYW1lcmEKCW1ha2VEZWZhdWx0Cglwb3NpdGlvbj17WzAsIDAsIDJdfQoJbGVmdD17LTAuNX0KCXJpZ2h0PXswLjV9Cgl0b3A9ezAuNX0KCWJvdHRvbT17LTAuNX0KCW5lYXI9ey0xMDAwfQoJZmFyPXsxMDAwfQovPgoKPFQuTWVzaD4KCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJPFQuU2hhZGVyTWF0ZXJpYWwKCQliaW5kOnJlZj17bWF0ZXJpYWx9CgkJe3ZlcnRleFNoYWRlcn0KCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJdW5pZm9ybXM9e3sKCQkJdVRpbWU6IHsgdmFsdWU6IDAgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVDb2xvcjogeyB2YWx1ZTogY29sb3JVbmlmb3JtIH0sCgkJCXVGcmVzbmVsQ29sb3I6IHsgdmFsdWU6IGZyZXNuZWxDb2xvclVuaWZvcm0gfSwKCQkJdUZyZXNuZWxQb3dlcjogeyB2YWx1ZTogZnJlc25lbFBvd2VyIH0sCgkJCXVSYWRpdXM6IHsgdmFsdWU6IHJhZGl1cyB9LAoJCQl1U21vb3RobmVzczogeyB2YWx1ZTogc21vb3RobmVzcyB9LAoJCX19CgkJdHJhbnNwYXJlbnQKCS8+CjwvVC5NZXNoPgo=", + "components/interactive-grid/InteractiveGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9JbnRlcmFjdGl2ZUdyaWRTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogR3JpZCByZXNvbHV0aW9uIChudW1iZXIgb2YgY2VsbHMgcGVyIHJvdy9jb2x1bW4pLgoJCSAqIEBkZWZhdWx0IDE1CgkJICovCgkJZ3JpZD86IG51bWJlcjsKCQkvKioKCQkgKiBSYWRpdXMgb2YgbW91c2UgaW5mbHVlbmNlLgoJCSAqIEBkZWZhdWx0IDAuMTUKCQkgKi8KCQltb3VzZVNpemU/OiBudW1iZXI7CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDAuMzUKCQkgKi8KCQlzdHJlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBSZWxheGF0aW9uIGZhY3RvciBmb3IgcmV0dXJuaW5nIHRvIG9yaWdpbmFsIHN0YXRlICgwLTEpLgoJCSAqIEBkZWZhdWx0IDAuOQoJCSAqLwoJCXJlbGF4YXRpb24/OiBudW1iZXI7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlncmlkID0gMTUsCgkJbW91c2VTaXplID0gMC4xNSwKCQlzdHJlbmd0aCA9IDAuMzUsCgkJcmVsYXhhdGlvbiA9IDAuOSwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoJbGV0IGNvbnRhaW5lciA9ICRzdGF0ZTxIVE1MRWxlbWVudD4oKTsKCWxldCBtb3VzZVggPSAkc3RhdGUoMCk7CglsZXQgbW91c2VZID0gJHN0YXRlKDApOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lciA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lciA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKGNvbnRhaW5lciA9PT0gbm9kZSkgewoJCQkJY29udGFpbmVyID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHsKCQlpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwoJCWNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJbW91c2VYID0gKGUuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoOwoJCW1vdXNlWSA9IChlLmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodDsKCX0KPC9zY3JpcHQ+Cgo8ZGl2Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJ9CgljbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0KCW9ubW91c2Vtb3ZlPXtoYW5kbGVNb3VzZU1vdmV9Cgl7Li4ucmVzdH0KPgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7aW1hZ2V9CgkJCXtncmlkfQoJCQl7bW91c2VTaXplfQoJCQl7c3RyZW5ndGh9CgkJCXtyZWxheGF0aW9ufQoJCQl7bW91c2VYfQoJCQl7bW91c2VZfQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", + "components/interactive-grid/InteractiveGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBHcmlkIHJlc29sdXRpb24gKG51bWJlciBvZiBjZWxscyBwZXIgcm93L2NvbHVtbikuCgkJICovCgkJZ3JpZDogbnVtYmVyOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiBtb3VzZSBpbmZsdWVuY2UuCgkJICovCgkJbW91c2VTaXplOiBudW1iZXI7CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24gZWZmZWN0LgoJCSAqLwoJCXN0cmVuZ3RoOiBudW1iZXI7CgkJLyoqCgkJICogUmVsYXhhdGlvbiBmYWN0b3IgZm9yIHJldHVybmluZyB0byBvcmlnaW5hbCBzdGF0ZSAoMC0xKS4KCQkgKi8KCQlyZWxheGF0aW9uOiBudW1iZXI7CgkJLyoqCgkJICogQ3VycmVudCBub3JtYWxpemVkIG1vdXNlIFggcG9zaXRpb24uCgkJICovCgkJbW91c2VYOiBudW1iZXI7CgkJLyoqCgkJICogQ3VycmVudCBub3JtYWxpemVkIG1vdXNlIFkgcG9zaXRpb24uCgkJICovCgkJbW91c2VZOiBudW1iZXI7Cgl9CgoJbGV0IHsgaW1hZ2UsIGdyaWQsIG1vdXNlU2l6ZSwgc3RyZW5ndGgsIHJlbGF4YXRpb24sIG1vdXNlWCwgbW91c2VZIH06IFByb3BzID0KCQkkcHJvcHMoKTsKCgl0eXBlIEdyaWRTdGF0ZSA9IHsKCQlzaXplOiBudW1iZXI7CgkJZGF0YTogRmxvYXQzMkFycmF5OwoJCXRleHR1cmU6IFRleHR1cmU7Cgl9OwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWMyIH07CgkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07CgkJdURhdGFUZXh0dXJlOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCX07CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXRJbWFnZVNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CglsZXQgc2V0R3JpZFNpemUgPSAkc3RhdGU8KHZhbHVlOiBudW1iZXIpID0+IHZvaWQ+KCk7CgoJbGV0IGN1cnJlbnRWWCA9ICRzdGF0ZSgwKTsKCWxldCBjdXJyZW50VlkgPSAkc3RhdGUoMCk7CglsZXQgcHJldlggPSAwOwoJbGV0IHByZXZZID0gMDsKCgljb25zdCBub3JtYWxpemVHcmlkU2l6ZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZhbHVlKSk7CgoJY29uc3QgY3JlYXRlR3JpZFN0YXRlID0gKGdsOiBSZW5kZXJlclsiZ2wiXSwgZ3JpZFNpemU6IG51bWJlcik6IEdyaWRTdGF0ZSA9PiB7CgkJY29uc3Qgc2l6ZSA9IG5vcm1hbGl6ZUdyaWRTaXplKGdyaWRTaXplKTsKCQljb25zdCB0b3RhbCA9IHNpemUgKiBzaXplOwoJCWNvbnN0IGRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB0b3RhbCk7CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykgewoJCQljb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDI1NSAtIDEyNTsKCQkJY29uc3QgcjEgPSBNYXRoLnJhbmRvbSgpICogMjU1IC0gMTI1OwoJCQljb25zdCBzdHJpZGUgPSBpICogNDsKCQkJZGF0YVtzdHJpZGVdID0gcjsKCQkJZGF0YVtzdHJpZGUgKyAxXSA9IHIxOwoJCQlkYXRhW3N0cmlkZSArIDJdID0gcjsKCQkJZGF0YVtzdHJpZGUgKyAzXSA9IDI1NTsKCQl9CgoJCWNvbnN0IGludGVybmFsRm9ybWF0ID0gZ2wucmVuZGVyZXIuaXNXZWJnbDIKCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTMyRgoJCQk6IGdsLlJHQkE7CgoJCWNvbnN0IHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogZGF0YSwKCQkJd2lkdGg6IHNpemUsCgkJCWhlaWdodDogc2l6ZSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQlpbnRlcm5hbEZvcm1hdCwKCQkJdHlwZTogZ2wuRkxPQVQsCgkJCW1pbkZpbHRlcjogZ2wuTkVBUkVTVCwKCQkJbWFnRmlsdGVyOiBnbC5ORUFSRVNULAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiBmYWxzZSwKCQl9KTsKCgkJcmV0dXJuIHsgc2l6ZSwgZGF0YSwgdGV4dHVyZSB9OwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gZmxvYXQgdGltZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1RGF0YVRleHR1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyB0ZXh0dXJlU2l6ZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBjb3ZlclV2ID0gZ2V0Q292ZXJVVih2VXYsIHVUZXh0dXJlU2l6ZSk7CgkJCXZlYzQgZGF0YSA9IHRleHR1cmUyRCh1RGF0YVRleHR1cmUsIHZVdik7CgkJCXZlYzIgZGlzcGxhY2VkVVYgPSBjb3ZlclV2IC0gMC4wMiAqIGRhdGEucmc7CgkJCXZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVRleHR1cmUsIGRpc3BsYWNlZFVWKTsKCQkJZ2xfRnJhZ0NvbG9yID0gY29sb3I7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQljdXJyZW50VlggPSBtb3VzZVggLSBwcmV2WDsKCQljdXJyZW50VlkgPSBtb3VzZVkgLSBwcmV2WTsKCQlwcmV2WCA9IG1vdXNlWDsKCQlwcmV2WSA9IG1vdXNlWTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0SW1hZ2VTb3VyY2UpIHJldHVybjsKCQlzZXRJbWFnZVNvdXJjZShpbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEdyaWRTaXplKSByZXR1cm47CgkJc2V0R3JpZFNpemUoZ3JpZCk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW1hZ2VUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJZmxpcFk6IHRydWUsCgkJfSk7CgoJCWxldCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGU7CgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZVNpemUudmFsdWUuc2V0KAoJCQkJCWltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoLAoJCQkJCWltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQsCgkJCQkpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgoJCWxldCBncmlkU3RhdGUgPSBjcmVhdGVHcmlkU3RhdGUoZ2wsIGdyaWQpOwoJCWNvbnN0IHJlcGxhY2VHcmlkID0gKHZhbHVlOiBudW1iZXIpID0+IHsKCQkJY29uc3QgcHJldmlvdXNUZXh0dXJlID0gZ3JpZFN0YXRlLnRleHR1cmU7CgkJCWdyaWRTdGF0ZSA9IGNyZWF0ZUdyaWRTdGF0ZShnbCwgdmFsdWUpOwoJCQlsb2NhbFVuaWZvcm1zLnVEYXRhVGV4dHVyZS52YWx1ZSA9IGdyaWRTdGF0ZS50ZXh0dXJlOwoJCQlpZiAocHJldmlvdXNUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUocHJldmlvdXNUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCgkJbG9jYWxVbmlmb3JtcyA9IHsKCQkJdGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1RGF0YVRleHR1cmU6IHsgdmFsdWU6IGdyaWRTdGF0ZS50ZXh0dXJlIH0sCgkJCXVUZXh0dXJlOiB7IHZhbHVlOiBpbWFnZVRleHR1cmUgfSwKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoJCXNldEdyaWRTaXplID0gcmVwbGFjZUdyaWQ7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnRpbWUudmFsdWUgKz0gZGVsdGE7CgoJCQljb25zdCBncmlkU2l6ZSA9IGdyaWRTdGF0ZS5zaXplOwoJCQljb25zdCBkYXRhID0gZ3JpZFN0YXRlLmRhdGE7CgkJCWNvbnN0IGdyaWRNb3VzZVggPSBncmlkU2l6ZSAqIG1vdXNlWDsKCQkJY29uc3QgZ3JpZE1vdXNlWSA9IGdyaWRTaXplICogKDEgLSBtb3VzZVkpOwoJCQljb25zdCBtYXhEaXN0ID0gZ3JpZFNpemUgKiBtb3VzZVNpemU7CgkJCWNvbnN0IHdpZHRoID0gbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS54OwoJCQljb25zdCBoZWlnaHQgPSBsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnk7CgkJCWNvbnN0IGFzcGVjdCA9IHdpZHRoID4gMCA/IGhlaWdodCAvIHdpZHRoIDogMTsKCQkJY29uc3QgbWF4RGlzdFNxID0gbWF4RGlzdCAqIG1heERpc3Q7CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGdyaWRTaXplOyBpKyspIHsKCQkJCWZvciAobGV0IGogPSAwOyBqIDwgZ3JpZFNpemU7IGorKykgewoJCQkJCWNvbnN0IGRpc3RhbmNlID0KCQkJCQkJKChncmlkTW91c2VYIC0gaSkgKiAoZ3JpZE1vdXNlWCAtIGkpKSAvIGFzcGVjdCArCgkJCQkJCShncmlkTW91c2VZIC0gaikgKiAoZ3JpZE1vdXNlWSAtIGopOwoKCQkJCQlpZiAoZGlzdGFuY2UgPCBtYXhEaXN0U3EpIHsKCQkJCQkJY29uc3QgaW5kZXggPSA0ICogKGkgKyBncmlkU2l6ZSAqIGopOwoJCQkJCQlsZXQgcG93ZXIgPSBtYXhEaXN0IC8gTWF0aC5zcXJ0KGRpc3RhbmNlKTsKCQkJCQkJaWYgKCFOdW1iZXIuaXNGaW5pdGUocG93ZXIpIHx8IHBvd2VyID4gMTApIHBvd2VyID0gMTA7CgoJCQkJCQlkYXRhW2luZGV4XSArPSBzdHJlbmd0aCAqIDEwMCAqIGN1cnJlbnRWWCAqIHBvd2VyOwoJCQkJCQlkYXRhW2luZGV4ICsgMV0gLT0gc3RyZW5ndGggKiAxMDAgKiBjdXJyZW50VlkgKiBwb3dlcjsKCQkJCQl9CgoJCQkJCWNvbnN0IGlkeCA9IDQgKiAoaSArIGdyaWRTaXplICogaik7CgkJCQkJZGF0YVtpZHhdICo9IHJlbGF4YXRpb247CgkJCQkJZGF0YVtpZHggKyAxXSAqPSByZWxheGF0aW9uOwoJCQkJfQoJCQl9CgoJCQljdXJyZW50VlggKj0gMC45OwoJCQljdXJyZW50VlkgKj0gMC45OwoJCQlncmlkU3RhdGUudGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlzZXRHcmlkU2l6ZSA9IHVuZGVmaW5lZDsKCQkJaWYgKGdyaWRTdGF0ZS50ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoZ3JpZFN0YXRlLnRleHR1cmUudGV4dHVyZSk7CgkJCX0KCQkJaWYgKGltYWdlVGV4dHVyZS50ZXh0dXJlKSB7CgkJCQlnbC5kZWxldGVUZXh0dXJlKGltYWdlVGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/lava-lamp/LavaLamp.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9MYXZhTGFtcFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIGxhdmEgYmxvYnMuCgkJICogQGRlZmF1bHQgIiMxODE4MWIiCgkJICovCgkJY29sb3I/OiBTY2VuZVByb3BzWyJjb2xvciJdOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBmcmVzbmVsIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQlmcmVzbmVsQ29sb3I/OiBTY2VuZVByb3BzWyJmcmVzbmVsQ29sb3IiXTsKCQkvKioKCQkgKiBTcGVlZCBvZiB0aGUgbGF2YSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIEZyZXNuZWwgcG93ZXIgZm9yIHRoZSBlZGdlIGxpZ2h0aW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQlmcmVzbmVsUG93ZXI/OiBTY2VuZVByb3BzWyJmcmVzbmVsUG93ZXIiXTsKCQkvKioKCQkgKiBCYXNlIHJhZGl1cyBvZiB0aGUgYmxvYnMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXJhZGl1cz86IFNjZW5lUHJvcHNbInJhZGl1cyJdOwoJCS8qKgoJCSAqIFNtb290aG5lc3Mgb2YgdGhlIGJsb2IgYmxlbmRpbmcgKG1ldGFiYWxsIGVmZmVjdCkuCgkJICogQGRlZmF1bHQgMC4xCgkJICovCgkJc21vb3RobmVzcz86IFNjZW5lUHJvcHNbInNtb290aG5lc3MiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiMxODE4MWIiLAoJCWZyZXNuZWxDb2xvciA9ICIjZmY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlmcmVzbmVsUG93ZXIgPSAzLjAsCgkJcmFkaXVzID0gMSwKCQlzbW9vdGhuZXNzID0gMC4xLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtmcmVzbmVsQ29sb3J9CgkJCXtzcGVlZH0KCQkJe2ZyZXNuZWxQb3dlcn0KCQkJe3JhZGl1c30KCQkJe3Ntb290aG5lc3N9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/lava-lamp/LavaLampScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMywKCQlWZWM0LAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgbGF2YSBibG9icy4KCQkgKiBAZGVmYXVsdCAiIzE4MTgxYiIKCQkgKi8KCQljb2xvcj86IHN0cmluZzsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgZnJlc25lbCBlZmZlY3QuCgkJICogQGRlZmF1bHQgIiNmZjY5MDAiCgkJICovCgkJZnJlc25lbENvbG9yPzogc3RyaW5nOwoJCS8qKgoJCSAqIFNwZWVkIG9mIHRoZSBsYXZhIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzcGVlZD86IG51bWJlcjsKCQkvKioKCQkgKiBGcmVzbmVsIHBvd2VyIGZvciB0aGUgZWRnZSBsaWdodGluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMy4wCgkJICovCgkJZnJlc25lbFBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2UgcmFkaXVzIG9mIHRoZSBibG9icy4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJcmFkaXVzPzogbnVtYmVyOwoJCS8qKgoJCSAqIFNtb290aG5lc3Mgb2YgdGhlIGJsb2IgYmxlbmRpbmcgKG1ldGFiYWxsIGVmZmVjdCkuCgkJICogQGRlZmF1bHQgMC4xCgkJICovCgkJc21vb3RobmVzcz86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yID0gIiMxODE4MWIiLAoJCWZyZXNuZWxDb2xvciA9ICIjZmY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlmcmVzbmVsUG93ZXIgPSAzLjAsCgkJcmFkaXVzID0gMSwKCQlzbW9vdGhuZXNzID0gMC4xLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzQgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1RnJlc25lbENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUZyZXNuZWxQb3dlcjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJhZGl1czogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVNtb290aG5lc3M6IHsgdmFsdWU6IG51bWJlciB9OwoJfT4oKTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKCWNvbnN0IHBhcnNlSGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJCWlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSg0LCA2KSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX07CgoJbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCWNvbnN0IHBhcnNlQ3NzQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKCQlpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQkJY29uc3QgcGFyc2VyQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CgkJCXBhcnNlckNhbnZhcy53aWR0aCA9IDE7CgkJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCQljc3NDb2xvckNvbnRleHQgPSBwYXJzZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCQl9CgkJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gIiMwMDAwMDAiOwoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTsKCQljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCgkJaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgiIyIpKSB7CgkJCXJldHVybiBwYXJzZUhleENvbG9yKG5vcm1hbGl6ZWQpOwoJCX0KCgkJY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9yZ2JhP1woKFteKV0rKVwpL2kpOwoJCWlmICghbWF0Y2gpIHJldHVybiBudWxsOwoJCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkJLnNwbGl0KCIsIikKCQkJLm1hcCgocGFydCkgPT4gTnVtYmVyLnBhcnNlRmxvYXQocGFydC50cmltKCkpKQoJCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJCWlmIChwYXJ0cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFsKCQkJY2xhbXAwMShwYXJ0c1swXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1sxXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1syXSAvIHNjYWxlKSwKCQldOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogc3RyaW5nLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CgkJY29uc3QgcGFyc2VkID0gdHJpbW1lZC5zdGFydHNXaXRoKCIjIikKCQkJPyBwYXJzZUhleENvbG9yKHRyaW1tZWQpCgkJCTogcGFyc2VDc3NDb2xvcih0cmltbWVkKTsKCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJfTsKCgljb25zdCB0b0xpbmVhclJnYiA9ICgKCQl2YWx1ZTogc3RyaW5nLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3QgYXBwbHlDb2xvciA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IHN0cmluZywKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjNCB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1RnJlc25lbENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdUZyZXNuZWxQb3dlcjsKCQl1bmlmb3JtIGZsb2F0IHVSYWRpdXM7CgkJdW5pZm9ybSBmbG9hdCB1U21vb3RobmVzczsKCgkJZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODsKCgkJbWF0NCByb3RhdGlvbk1hdHJpeCh2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CgkJCWF4aXMgPSBub3JtYWxpemUoYXhpcyk7CgkJCWZsb2F0IHMgPSBzaW4oYW5nbGUpOwoJCQlmbG9hdCBjID0gY29zKGFuZ2xlKTsKCQkJZmxvYXQgb2MgPSAxLjAgLSBjOwoJCQlyZXR1cm4gbWF0NChvYyAqIGF4aXMueCAqIGF4aXMueCArIGMsICAgICAgICAgICBvYyAqIGF4aXMueCAqIGF4aXMueSAtIGF4aXMueiAqIHMsICBvYyAqIGF4aXMueiAqIGF4aXMueCArIGF4aXMueSAqIHMsICAwLjAsCgkJCQkJCW9jICogYXhpcy54ICogYXhpcy55ICsgYXhpcy56ICogcywgIG9jICogYXhpcy55ICogYXhpcy55ICsgYywgICAgICAgICAgIG9jICogYXhpcy55ICogYXhpcy56IC0gYXhpcy54ICogcywgIDAuMCwKCQkJCQkJb2MgKiBheGlzLnogKiBheGlzLnggLSBheGlzLnkgKiBzLCAgb2MgKiBheGlzLnkgKiBheGlzLnogKyBheGlzLnggKiBzLCAgb2MgKiBheGlzLnogKiBheGlzLnogKyBjLCAgICAgICAgICAgMC4wLAoJCQkJCQkwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjApOwoJCX0KCgkJdmVjMyByb3RhdGUodmVjMyB2LCB2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CgkJCW1hdDQgbSA9IHJvdGF0aW9uTWF0cml4KGF4aXMsIGFuZ2xlKTsKCQkJcmV0dXJuIChtICogdmVjNCh2LCAxLjApKS54eXo7CgkJfQoKCQlmbG9hdCBzbWluKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGspIHsKCQkJayAqPSA2LjA7CgkJCWZsb2F0IGggPSBtYXgoay1hYnMoYS1iKSwgMC4wKS9rOwoJCQlyZXR1cm4gbWluKGEsYikgLSBoKmgqaCprKigxLjAvNi4wKTsKCQl9CgoJCWZsb2F0IHNwaGVyZVNERih2ZWMzIHAsIGZsb2F0IHIpIHsKCQkJcmV0dXJuIGxlbmd0aChwKSAtIHI7CgkJfQoKCQlmbG9hdCBzZGYodmVjMyBwKSB7CgkJCXZlYzMgcDEgPSByb3RhdGUocCwgdmVjMygwLjAsIDAuMCwgMS4wKSwgdVRpbWUvNS4wKTsKCQkJdmVjMyBwMiA9IHJvdGF0ZShwLCB2ZWMzKDEuKSwgLXVUaW1lLzUuMCk7CgkJCXZlYzMgcDMgPSByb3RhdGUocCwgdmVjMygxLiwgMS4sIDAuKSwgLXVUaW1lLzQuNSk7CgkJCXZlYzMgcDQgPSByb3RhdGUocCwgdmVjMygwLiwgMS4sIDAuKSwgLXVUaW1lLzQuMCk7CgoJCQlmbG9hdCByID0gdVJhZGl1czsKCgkJCWZsb2F0IGZpbmFsID0gc3BoZXJlU0RGKHAxIC0gdmVjMygtMC41LCAwLjAsIDAuMCksIDAuMzUgKiByKTsKCQkJZmxvYXQgbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwMiAtIHZlYzMoMC41NSwgMC4wLCAwLjApLCAwLjMgKiByKTsKCQkJZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CgkJCW5leHRTcGhlcmUgPSBzcGhlcmVTREYocDIgLSB2ZWMzKC0wLjgsIDAuMCwgMC4wKSwgMC4yICogcik7CgkJCWZpbmFsID0gc21pbihmaW5hbCwgbmV4dFNwaGVyZSwgdVNtb290aG5lc3MpOwoJCQluZXh0U3BoZXJlID0gc3BoZXJlU0RGKHAzIC0gdmVjMygxLjAsIDAuMCwgMC4wKSwgMC4xNSAqIHIpOwoJCQlmaW5hbCA9IHNtaW4oZmluYWwsIG5leHRTcGhlcmUsIHVTbW9vdGhuZXNzKTsKCQkJbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwNCAtIHZlYzMoMC40NSwgLTAuNDUsIDAuMCksIDAuMTUgKiByKTsKCQkJZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CgoJCQlyZXR1cm4gZmluYWw7CgkJfQoKCQl2ZWMzIGdldE5vcm1hbCh2ZWMzIHApIHsKCQkJZmxvYXQgZCA9IDAuMDAxOwoJCQlyZXR1cm4gbm9ybWFsaXplKHZlYzMoCgkJCQlzZGYocCArIHZlYzMoZCwgMC4wLCAwLjApKSAtIHNkZihwIC0gdmVjMyhkLCAwLjAsIDAuMCkpLAoJCQkJc2RmKHAgKyB2ZWMzKDAuMCwgZCwgMC4wKSkgLSBzZGYocCAtIHZlYzMoMC4wLCBkLCAwLjApKSwKCQkJCXNkZihwICsgdmVjMygwLjAsIDAuMCwgZCkpIC0gc2RmKHAgLSB2ZWMzKDAuMCwgMC4wLCBkKSkKCQkJKSk7CgkJfQoKCQlmbG9hdCByYXlNYXJjaCh2ZWMzIHJheU9yaWdpbiwgdmVjMyByYXkpIHsKCQkJZmxvYXQgdCA9IDAuMDsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykgewoJCQkJdmVjMyBwID0gcmF5T3JpZ2luICsgcmF5ICogdDsKCQkJCWZsb2F0IGQgPSBzZGYocCk7CgkJCQlpZiAoZCA8IDAuMDAxKSByZXR1cm4gdDsKCQkJCXQgKz0gZDsKCQkJCWlmICh0ID4gMTAwLjApIGJyZWFrOwoJCQl9CgkJCXJldHVybiAtMS4wOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMyBjYW1lcmFQb3MgPSB2ZWMzKDAuMCwgMC4wLCA1LjApOwoJCQl2ZWMzIHJheSA9IG5vcm1hbGl6ZSh2ZWMzKCh2VXYgLSB2ZWMyKDAuNSkpICogdVJlc29sdXRpb24uencsIC0xKSk7CgoJCQlmbG9hdCB0ID0gcmF5TWFyY2goY2FtZXJhUG9zLCByYXkpOwoJCQlpZiAodCA+IDAuMCkgewoJCQkJdmVjMyBwID0gY2FtZXJhUG9zICsgcmF5ICogdDsKCQkJCXZlYzMgbm9ybWFsID0gZ2V0Tm9ybWFsKHApOwoJCQkJZmxvYXQgZnJlc25lbCA9IHBvdygxLjAgKyBkb3QocmF5LCBub3JtYWwpLCB1RnJlc25lbFBvd2VyKTsKCQkJCXZlYzMgY29sb3IgPSBtaXgodUNvbG9yLCB1RnJlc25lbENvbG9yLCBmcmVzbmVsKTsKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGNvbG9yKSwgMS4wKTsKCQkJfSBlbHNlIHsKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsKCQkJfQoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudUNvbG9yLnZhbHVlLCBjb2xvciwgWzI0IC8gMjU1LCAyNCAvIDI1NSwgMjcgLyAyNTVdKTsKCQlhcHBseUNvbG9yKHVuaWZvcm1zLnVGcmVzbmVsQ29sb3IudmFsdWUsIGZyZXNuZWxDb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCXVuaWZvcm1zLnVGcmVzbmVsUG93ZXIudmFsdWUgPSBmcmVzbmVsUG93ZXI7CgkJdW5pZm9ybXMudVJhZGl1cy52YWx1ZSA9IHJhZGl1czsKCQl1bmlmb3Jtcy51U21vb3RobmVzcy52YWx1ZSA9IHNtb290aG5lc3M7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbENvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsyNCAvIDI1NSwgMjQgLyAyNTUsIDI3IC8gMjU1XSk7CgkJY29uc3QgaW5pdGlhbEZyZXNuZWxDb2xvciA9IHRvTGluZWFyUmdiKGZyZXNuZWxDb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjNCgxLCAxLCAxLCAxKSB9LAoJCQl1Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhpbml0aWFsQ29sb3JbMF0sIGluaXRpYWxDb2xvclsxXSwgaW5pdGlhbENvbG9yWzJdKSwKCQkJfSwKCQkJdUZyZXNuZWxDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxGcmVzbmVsQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEZyZXNuZWxDb2xvclsxXSwKCQkJCQlpbml0aWFsRnJlc25lbENvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdUZyZXNuZWxQb3dlcjogeyB2YWx1ZTogZnJlc25lbFBvd2VyIH0sCgkJCXVSYWRpdXM6IHsgdmFsdWU6IHJhZGl1cyB9LAoJCQl1U21vb3RobmVzczogeyB2YWx1ZTogc21vb3RobmVzcyB9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgdXBkYXRlUmVzb2x1dGlvbiA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJY29uc3QgaW1hZ2VBc3BlY3QgPSAxOwoJCQlsZXQgYTEgPSAxOwoJCQlsZXQgYTIgPSAxOwoJCQlpZiAoaGVpZ2h0IC8gd2lkdGggPiBpbWFnZUFzcGVjdCkgewoJCQkJYTEgPSAod2lkdGggLyBoZWlnaHQpICogaW1hZ2VBc3BlY3Q7CgkJCQlhMiA9IDE7CgkJCX0gZWxzZSB7CgkJCQlhMSA9IDE7CgkJCQlhMiA9IGhlaWdodCAvIHdpZHRoIC8gaW1hZ2VBc3BlY3Q7CgkJCX0KCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQsIGExLCBhMik7CgkJfTsKCgkJdXBkYXRlUmVzb2x1dGlvbigpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZVJlc29sdXRpb24pOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWxldCB0aW1lID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQl0aW1lICs9IGRlbHRhICogc3BlZWQ7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgPSB0aW1lOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/logo-carousel/LogoCarousel.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyB0eXBlIENvbXBvbmVudCwgb25Nb3VudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgTG9nb0NvbHVtbiBmcm9tICIuL0xvZ29Db2x1bW4uc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWludGVyZmFjZSBMb2dvIHsKCQluYW1lOiBzdHJpbmc7CgkJaWQ6IG51bWJlcjsKCQljb21wb25lbnQ6IENvbXBvbmVudDsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIE51bWJlciBvZiBjb2x1bW5zIHRvIGRpc3RyaWJ1dGUgbG9nb3MgaW50by4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJY29sdW1uQ291bnQ/OiBudW1iZXI7CgkJLyoqCgkJICogQXJyYXkgb2YgbG9nbyBvYmplY3RzIGNvbnRhaW5pbmcgbmFtZSwgaWQsIGFuZCBjb21wb25lbnQuCgkJICovCgkJbG9nb3M6IExvZ29bXTsKCQkvKioKCQkgKiBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBsb2dvIGN5Y2xlcy4KCQkgKiBAZGVmYXVsdCAyMDAwCgkJICovCgkJY3ljbGVJbnRlcnZhbD86IG51bWJlcjsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJfQoKCWxldCB7CgkJY29sdW1uQ291bnQgPSAyLAoJCWxvZ29zLAoJCWN5Y2xlSW50ZXJ2YWwgPSAyMDAwLAoJCWNsYXNzOiBjbGFzc05hbWUsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBpc01vdW50ZWQgPSAkc3RhdGUoZmFsc2UpOwoKCW9uTW91bnQoKCkgPT4gewoJCWlzTW91bnRlZCA9IHRydWU7Cgl9KTsKCgljb25zdCBzaHVmZmxlQXJyYXkgPSA8VCw+KGFycmF5OiBUW10pOiBUW10gPT4gewoJCWNvbnN0IHNodWZmbGVkID0gWy4uLmFycmF5XTsKCQlmb3IgKGxldCBpID0gc2h1ZmZsZWQubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgewoJCQljb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7CgkJCVtzaHVmZmxlZFtpXSwgc2h1ZmZsZWRbal1dID0gW3NodWZmbGVkW2pdLCBzaHVmZmxlZFtpXV07CgkJfQoJCXJldHVybiBzaHVmZmxlZDsKCX07CgoJY29uc3QgZGlzdHJpYnV0ZUxvZ29zID0gKAoJCWFsbExvZ29zOiBMb2dvW10sCgkJY29sdW1uQ291bnQ6IG51bWJlciwKCQlzaHVmZmxlOiBib29sZWFuLAoJKTogTG9nb1tdW10gPT4gewoJCWNvbnN0IHNodWZmbGVkID0gc2h1ZmZsZSA/IHNodWZmbGVBcnJheShhbGxMb2dvcykgOiBbLi4uYWxsTG9nb3NdOwoJCWNvbnN0IGNvbHVtbnM6IExvZ29bXVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29sdW1uQ291bnQgfSwgKCkgPT4gW10pOwoKCQlzaHVmZmxlZC5mb3JFYWNoKChsb2dvLCBpbmRleCkgPT4gewoJCQljb2x1bW5zW2luZGV4ICUgY29sdW1uQ291bnRdLnB1c2gobG9nbyk7CgkJfSk7CgoJCWNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLmNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5sZW5ndGgpKTsKCQljb2x1bW5zLmZvckVhY2goKGNvbCkgPT4gewoJCQl3aGlsZSAoY29sLmxlbmd0aCA8IG1heExlbmd0aCkgewoJCQkJY29sLnB1c2goCgkJCQkJc2h1ZmZsZWRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2h1ZmZsZWQubGVuZ3RoKV0gfHwgc2h1ZmZsZWRbMF0sCgkJCQkpOwoJCQl9CgkJfSk7CgoJCXJldHVybiBjb2x1bW5zOwoJfTsKCglsZXQgbG9nb1NldHMgPSAkZGVyaXZlZChkaXN0cmlidXRlTG9nb3MobG9nb3MsIGNvbHVtbkNvdW50LCBpc01vdW50ZWQpKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigiZmxleCBzcGFjZS14LTQiLCBjbGFzc05hbWUpfT4KCXsjZWFjaCBsb2dvU2V0cyBhcyBsb2dvcywgaW5kZXggKGluZGV4KX0KCQk8TG9nb0NvbHVtbiB7bG9nb3N9IHtpbmRleH0ge2N5Y2xlSW50ZXJ2YWx9IC8+Cgl7L2VhY2h9CjwvZGl2Pgo=", "components/logo-carousel/LogoColumn.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50LCB0eXBlIENvbXBvbmVudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIExvZ28gewoJCW5hbWU6IHN0cmluZzsKCQlpZDogbnVtYmVyOwoJCWNvbXBvbmVudDogQ29tcG9uZW50OwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQXJyYXkgb2YgbG9nb3MgZm9yIHRoaXMgc3BlY2lmaWMgY29sdW1uLgoJCSAqLwoJCWxvZ29zOiBMb2dvW107CgkJLyoqCgkJICogSW5kZXggb2YgdGhlIGNvbHVtbiAodXNlZCBmb3Igb2Zmc2V0IGNhbGN1bGF0aW9uKS4KCQkgKi8KCQlpbmRleDogbnVtYmVyOwoJCS8qKgoJCSAqIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGxvZ28gY3ljbGVzLgoJCSAqIEBkZWZhdWx0IDIwMDAKCQkgKi8KCQljeWNsZUludGVydmFsPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb2x1bW4uCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7Cgl9CgoJbGV0IHsKCQlsb2dvcywKCQlpbmRleCwKCQljeWNsZUludGVydmFsID0gMjAwMCwKCQljbGFzczogY2xhc3NOYW1lLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY3VycmVudEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzRmlyc3QgPSAkc3RhdGUodHJ1ZSk7CgoJZnVuY3Rpb24gZ3NhcFRyYW5zaXRpb24oCgkJbm9kZTogSFRNTEVsZW1lbnQsCgkJcGFyYW1zOiB7IGRpcmVjdGlvbjogImluIiB8ICJvdXQiIH0sCgkpIHsKCQlnc2FwLmtpbGxUd2VlbnNPZihub2RlKTsKCgkJaWYgKHBhcmFtcy5kaXJlY3Rpb24gPT09ICJpbiIpIHsKCQkJaWYgKGlzRmlyc3QpIHsKCQkJCWdzYXAuc2V0KG5vZGUsIHsKCQkJCQl5UGVyY2VudDogMCwKCQkJCQlvcGFjaXR5OiAxLAoJCQkJCWZpbHRlcjogImJsdXIoMHB4KSIsCgkJCQl9KTsKCQkJCXJldHVybiB7CgkJCQkJZHVyYXRpb246IDAsCgkJCQkJdGljazogKCkgPT4ge30sCgkJCQl9OwoJCQl9CgoJCQlnc2FwLmZyb21UbygKCQkJCW5vZGUsCgkJCQl7IHlQZXJjZW50OiAxMCwgb3BhY2l0eTogMCwgZmlsdGVyOiAiYmx1cig4cHgpIiB9LAoJCQkJewoJCQkJCXlQZXJjZW50OiAwLAoJCQkJCW9wYWNpdHk6IDEsCgkJCQkJZmlsdGVyOiAiYmx1cigwcHgpIiwKCQkJCQlkdXJhdGlvbjogMC41LAoJCQkJCWRlbGF5OiAwLjM1LAoJCQkJCWVhc2U6ICJiYWNrLm91dCgxLjIpIiwKCQkJCX0sCgkJCSk7CgkJCXJldHVybiB7CgkJCQlkdXJhdGlvbjogOTAwLAoJCQkJdGljazogKCkgPT4ge30sCgkJCX07CgkJfSBlbHNlIHsKCQkJZ3NhcC50byhub2RlLCB7CgkJCQl5UGVyY2VudDogLTIwLAoJCQkJb3BhY2l0eTogMCwKCQkJCWZpbHRlcjogImJsdXIoNnB4KSIsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyMi5pbiIsCgkJCX0pOwoJCQlyZXR1cm4gewoJCQkJZHVyYXRpb246IDMwMCwKCQkJCXRpY2s6ICgpID0+IHt9LAoJCQl9OwoJCX0KCX0KCglvbk1vdW50KCgpID0+IHsKCQlsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47CgoJCWNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7CgkJbGV0IHRhcmdldFRpbWUgPSBzdGFydFRpbWUgKyBjeWNsZUludGVydmFsICsgaW5kZXggKiAyMDA7CgoJCWNvbnN0IHRpY2sgPSAoKSA9PiB7CgkJCWlzRmlyc3QgPSBmYWxzZTsKCQkJY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgbG9nb3MubGVuZ3RoOwoKCQkJdGFyZ2V0VGltZSArPSBjeWNsZUludGVydmFsOwoKCQkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQkJaWYgKHRhcmdldFRpbWUgPD0gbm93KSB7CgkJCQljb25zdCBkcmlmdCA9IG5vdyAtIHRhcmdldFRpbWU7CgkJCQljb25zdCBjeWNsZXNNaXNzZWQgPSBNYXRoLmZsb29yKGRyaWZ0IC8gY3ljbGVJbnRlcnZhbCkgKyAxOwoJCQkJdGFyZ2V0VGltZSArPSBjeWNsZXNNaXNzZWQgKiBjeWNsZUludGVydmFsOwoJCQl9CgoJCQl0aW1lb3V0ID0gc2V0VGltZW91dCh0aWNrLCB0YXJnZXRUaW1lIC0gbm93KTsKCQl9OwoKCQl0aW1lb3V0ID0gc2V0VGltZW91dCh0aWNrLCB0YXJnZXRUaW1lIC0gc3RhcnRUaW1lKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwoJCX07Cgl9KTsKCglsZXQgQ3VycmVudExvZ29Db21wb25lbnQgPSAkZGVyaXZlZChsb2dvc1tjdXJyZW50SW5kZXhdLmNvbXBvbmVudCk7Cjwvc2NyaXB0PgoKPGRpdgoJY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLTE0IHctMjQgb3ZlcmZsb3ctaGlkZGVuIG1kOmgtMjQgbWQ6dy00OCIsIGNsYXNzTmFtZSl9Cj4KCXsja2V5IGN1cnJlbnRJbmRleH0KCQk8ZGl2CgkJCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgoJCQlzdHlsZT0ib3BhY2l0eTogMTsiCgkJCWluOmdzYXBUcmFuc2l0aW9uPXt7IGRpcmVjdGlvbjogImluIiB9fQoJCQlvdXQ6Z3NhcFRyYW5zaXRpb249e3sgZGlyZWN0aW9uOiAib3V0IiB9fQoJCT4KCQkJPEN1cnJlbnRMb2dvQ29tcG9uZW50CgkJCQljbGFzcz0iaC1hdXRvIG1heC1oLVs3MCVdIHctYXV0byBtYXgtdy1bNzAlXSBvYmplY3QtY29udGFpbiIKCQkJLz4KCQk8L2Rpdj4KCXsva2V5fQo8L2Rpdj4K", "components/macos-dock/MacosDock.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CgoJaW50ZXJmYWNlIERvY2tJdGVtIHsKCQlzcmM6IHN0cmluZzsKCQlhbHQ6IHN0cmluZzsKCQlsYWJlbD86IHN0cmluZzsKCQlocmVmPzogc3RyaW5nOwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQXJyYXkgb2YgZG9jayBpdGVtcyB0byBkaXNwbGF5LgoJCSAqLwoJCWl0ZW1zOiBEb2NrSXRlbVtdOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFzZSB3aWR0aCBvZiBpdGVtcyBpbiAnZW0nLgoJCSAqIEBkZWZhdWx0IDQKCQkgKi8KCQliYXNlV2lkdGg/OiBudW1iZXI7CgkJLyoqCgkJICogTWFnbmlmaWNhdGlvbiBmYWN0b3Igb24gaG92ZXIuCgkJICogQGRlZmF1bHQgMS41CgkJICovCgkJbWFnbmlmaWNhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBtYWduaWZpY2F0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAzCgkJICovCgkJZGlzdGFuY2U/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpdGVtcywKCQljbGFzczogY2xhc3NOYW1lLAoJCWJhc2VXaWR0aCA9IDQsCgkJbWFnbmlmaWNhdGlvbiA9IDEuNSwKCQlkaXN0YW5jZTogaW5mbHVlbmNlRGlzdGFuY2UgPSAzLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgaG92ZXJlZEluZGV4OiBudW1iZXIgfCBudWxsID0gJHN0YXRlKG51bGwpOwoJbGV0IGRvY2tJdGVtczogKEhUTUxMSUVsZW1lbnQgfCBudWxsKVtdID0gJHN0YXRlKFtdKTsKCWxldCBkb2NrVG9vbHRpcHM6IChIVE1MRGl2RWxlbWVudCB8IG51bGwpW10gPSAkc3RhdGUoW10pOwoKCWNvbnN0IGF0dGFjaERvY2tJdGVtID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MTElFbGVtZW50KSA9PiB7CgkJZG9ja0l0ZW1zW2luZGV4XSA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaERvY2tUb29sdGlwID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MRGl2RWxlbWVudCkgPT4gewoJCWRvY2tUb29sdGlwc1tpbmRleF0gPSBub2RlOwoJfTsKCglsZXQgbWF4V2lkdGggPSAkZGVyaXZlZChiYXNlV2lkdGggKiBtYWduaWZpY2F0aW9uKTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBpdGVtRWxlbWVudHMgPSBkb2NrSXRlbXMuZmlsdGVyKAoJCQkoZWwpOiBlbCBpcyBIVE1MTElFbGVtZW50ID0+IGVsICE9PSBudWxsLAoJCSk7CgkJY29uc3QgdG9vbHRpcEVsZW1lbnRzID0gZG9ja1Rvb2x0aXBzLmZpbHRlcigKCQkJKGVsKTogZWwgaXMgSFRNTERpdkVsZW1lbnQgPT4gZWwgIT09IG51bGwsCgkJKTsKCgkJZG9ja0l0ZW1zLmZvckVhY2goKGVsLCBpbmRleCkgPT4gewoJCQlpZiAoIWVsKSByZXR1cm47CgoJCQlsZXQgdGFyZ2V0V2lkdGggPSBiYXNlV2lkdGg7CgoJCQlpZiAoaG92ZXJlZEluZGV4ICE9PSBudWxsKSB7CgkJCQljb25zdCBkaXN0ID0gTWF0aC5hYnMoaG92ZXJlZEluZGV4IC0gaW5kZXgpOwoKCQkJCWlmIChkaXN0IDwgaW5mbHVlbmNlRGlzdGFuY2UpIHsKCQkJCQljb25zdCByYXRpbyA9IChpbmZsdWVuY2VEaXN0YW5jZSAtIGRpc3QpIC8gaW5mbHVlbmNlRGlzdGFuY2U7CgkJCQkJdGFyZ2V0V2lkdGggPSBiYXNlV2lkdGggKyAobWF4V2lkdGggLSBiYXNlV2lkdGgpICogcmF0aW87CgkJCQl9CgkJCX0KCgkJCWdzYXAudG8oZWwsIHsKCQkJCXdpZHRoOiBgJHt0YXJnZXRXaWR0aH1lbWAsCgkJCQlkdXJhdGlvbjogMC41LAoJCQkJZWFzZTogInBvd2VyNC5vdXQiLAoJCQkJb3ZlcndyaXRlOiB0cnVlLAoJCQl9KTsKCQl9KTsKCgkJZG9ja1Rvb2x0aXBzLmZvckVhY2goKGVsLCBpbmRleCkgPT4gewoJCQlpZiAoIWVsKSByZXR1cm47CgoJCQlpZiAoaG92ZXJlZEluZGV4ID09PSBpbmRleCkgewoJCQkJZ3NhcC50byhlbCwgewoJCQkJCW9wYWNpdHk6IDEsCgkJCQkJeVBlcmNlbnQ6IC0xMDAsCgkJCQkJeFBlcmNlbnQ6IC01MCwKCQkJCQlkdXJhdGlvbjogMC41LAoJCQkJCWVhc2U6ICJwb3dlcjQub3V0IiwKCQkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCQl9KTsKCQkJfSBlbHNlIHsKCQkJCWdzYXAudG8oZWwsIHsKCQkJCQlvcGFjaXR5OiAwLAoJCQkJCXlQZXJjZW50OiAtODAsCgkJCQkJeFBlcmNlbnQ6IC01MCwKCQkJCQlkdXJhdGlvbjogMC41LAoJCQkJCWVhc2U6ICJwb3dlcjQub3V0IiwKCQkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCQl9KTsKCQkJfQoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoaXRlbUVsZW1lbnRzLmxlbmd0aCkgewoJCQkJZ3NhcC5raWxsVHdlZW5zT2YoaXRlbUVsZW1lbnRzKTsKCQkJfQoJCQlpZiAodG9vbHRpcEVsZW1lbnRzLmxlbmd0aCkgewoJCQkJZ3NhcC5raWxsVHdlZW5zT2YodG9vbHRpcEVsZW1lbnRzKTsKCQkJfQoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8bmF2IGNsYXNzPXtjbigiZmxleCBpdGVtcy1lbmQganVzdGlmeS1jZW50ZXIgcC00IiwgY2xhc3NOYW1lKX0+Cgk8dWwKCQljbGFzcz0ibS0wIGZsZXggbGlzdC1ub25lIGl0ZW1zLWVuZCBqdXN0aWZ5LWNlbnRlciBnYXAtMCBwLTAiCgkJb25tb3VzZWxlYXZlPXsoKSA9PiAoaG92ZXJlZEluZGV4ID0gbnVsbCl9Cgk+CgkJeyNlYWNoIGl0ZW1zIGFzIGl0ZW0sIGluZGV4IChpbmRleCl9CgkJCTxsaQoJCQkJe0BhdHRhY2ggYXR0YWNoRG9ja0l0ZW0oaW5kZXgpfQoJCQkJY2xhc3M9InJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgoJCQkJc3R5bGU9IndpZHRoOiB7YmFzZVdpZHRofWVtOyIKCQkJCW9ubW91c2VlbnRlcj17KCkgPT4gKGhvdmVyZWRJbmRleCA9IGluZGV4KX0KCQkJPgoJCQkJPGEKCQkJCQlocmVmPXtpdGVtLmhyZWYgfHwgIiMifQoJCQkJCWNsYXNzPSJ6LTEwIGZsZXggaC1mdWxsIHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIgoJCQkJPgoJCQkJCTxpbWcKCQkJCQkJc3JjPXtpdGVtLnNyY30KCQkJCQkJYWx0PXtpdGVtLmFsdH0KCQkJCQkJY2xhc3M9InBvaW50ZXItZXZlbnRzLW5vbmUgaC1mdWxsIHctZnVsbCBvYmplY3QtY29udGFpbiIKCQkJCQkJbG9hZGluZz0iZWFnZXIiCgkJCQkJLz4KCQkJCTwvYT4KCgkJCQl7I2lmIGl0ZW0ubGFiZWx9CgkJCQkJPGRpdgoJCQkJCQl7QGF0dGFjaCBhdHRhY2hEb2NrVG9vbHRpcChpbmRleCl9CgkJCQkJCWNsYXNzPSJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0wIGxlZnQtMS8yIHotMCByb3VuZGVkIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWZpeGVkLWxpZ2h0IHB4LTIgcHktMSB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtYmxhY2sgb3BhY2l0eS0wIHNoYWRvdy1tZCIKCQkJCQk+CgkJCQkJCXtpdGVtLmxhYmVsfQoJCQkJCTwvZGl2PgoJCQkJey9pZn0KCQkJPC9saT4KCQl7L2VhY2h9Cgk8L3VsPgo8L25hdj4K", "components/magnetic/Magnetic.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogU25pcHBldCB0byByZW5kZXIgY29udGVudC4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogQW5pbWF0aW9uIGR1cmF0aW9uIGluIHNlY29uZHMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCWR1cmF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFuaW1hdGlvbiBlYXNpbmcgZnVuY3Rpb24uCgkJICogQGRlZmF1bHQgImVsYXN0aWMub3V0KDEsIDAuMykiCgkJICovCgkJZWFzZT86IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJfQoKCWxldCB7CgkJY2hpbGRyZW4sCgkJZHVyYXRpb24gPSAxLAoJCWVhc2UgPSAiZWxhc3RpYy5vdXQoMSwgMC4zKSIsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgeFRvOiBnc2FwLlF1aWNrVG9GdW5jOwoJbGV0IHlUbzogZ3NhcC5RdWlja1RvRnVuYzsKCgljb25zdCBhdHRhY2hFbGVtZW50ID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJZWxlbWVudCA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKGVsZW1lbnQgPT09IG5vZGUpIHsKCQkJCWVsZW1lbnQgPSB1bmRlZmluZWQ7CgkJCX0KCQl9OwoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlpZiAoIWVsZW1lbnQpIHJldHVybjsKCQljb25zdCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7CgoJCXhUbyA9IGdzYXAucXVpY2tUbyhjdXJyZW50RWxlbWVudCwgIngiLCB7IGR1cmF0aW9uLCBlYXNlIH0pOwoJCXlUbyA9IGdzYXAucXVpY2tUbyhjdXJyZW50RWxlbWVudCwgInkiLCB7IGR1cmF0aW9uLCBlYXNlIH0pOwoKCQljb25zdCBtb3VzZU1vdmUgPSAoZTogTW91c2VFdmVudCkgPT4gewoJCQljb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGU7CgkJCWNvbnN0IHsgaGVpZ2h0LCB3aWR0aCwgbGVmdCwgdG9wIH0gPQoJCQkJY3VycmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSBjbGllbnRYIC0gKGxlZnQgKyB3aWR0aCAvIDIpOwoJCQljb25zdCB5ID0gY2xpZW50WSAtICh0b3AgKyBoZWlnaHQgLyAyKTsKCQkJeFRvKHgpOwoJCQl5VG8oeSk7CgkJfTsKCgkJY29uc3QgbW91c2VMZWF2ZSA9ICgpID0+IHsKCQkJeFRvKDApOwoJCQl5VG8oMCk7CgkJfTsKCgkJY3VycmVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgbW91c2VNb3ZlKTsKCQljdXJyZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgbW91c2VMZWF2ZSk7CgoJCXJldHVybiAoKSA9PiB7CgkJCWN1cnJlbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIG1vdXNlTW92ZSk7CgkJCWN1cnJlbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCBtb3VzZUxlYXZlKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGRpdiB7QGF0dGFjaCBhdHRhY2hFbGVtZW50fSBjbGFzcz17Y2xhc3NOYW1lfSByb2xlPSJwcmVzZW50YXRpb24iPgoJe0ByZW5kZXIgY2hpbGRyZW4/LigpfQo8L2Rpdj4K", "components/marquee/Marquee.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBTY3JvbGxUcmlnZ2VyIH0gZnJvbSAiZ3NhcC9kaXN0L1Njcm9sbFRyaWdnZXIiOwoJaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogR2FwIGJldHdlZW4gbWFycXVlZSBpdGVtcyBpbiBwaXhlbHMuCgkJICogQGRlZmF1bHQgMzIKCQkgKi8KCQlnYXA/OiBudW1iZXI7CgkJLyoqCgkJICogQ29udGVudCB0byBiZSBzY3JvbGxlZCBpbiB0aGUgbWFycXVlZS4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgY29udGVudCB0byBlbnN1cmUgc2VhbWxlc3Mgc2Nyb2xsaW5nLgoJCSAqIEBkZWZhdWx0IDMKCQkgKi8KCQlyZXBlYXQ/OiBudW1iZXI7CgkJLyoqCgkJICogRHVyYXRpb24gb2Ygb25lIGZ1bGwgbG9vcCBpbiBzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDUKCQkgKi8KCQlkdXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBGYWN0b3IgdG8gaW5jcmVhc2Ugc3BlZWQgYmFzZWQgb24gc2Nyb2xsIHZlbG9jaXR5LgoJCSAqIEBkZWZhdWx0IDAuNQoJCSAqLwoJCXZlbG9jaXR5PzogbnVtYmVyOwoJCS8qKgoJCSAqIFdoZXRoZXIgdG8gc2Nyb2xsIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQlyZXZlcnNlZD86IGJvb2xlYW47CgkJLyoqCgkJICogVGhlIGVsZW1lbnQgdG8gd2F0Y2ggZm9yIHNjcm9sbCBldmVudHMgdG8gYWRqdXN0IHZlbG9jaXR5LgoJCSAqLwoJCXNjcm9sbEVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IG51bGw7Cgl9CgoJbGV0IHsKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJZ2FwID0gMzIsCgkJY2hpbGRyZW4sCgkJcmVwZWF0ID0gMywKCQlkdXJhdGlvbiA9IDUsCgkJdmVsb2NpdHkgPSAwLjUsCgkJcmV2ZXJzZWQgPSBmYWxzZSwKCQlzY3JvbGxFbGVtZW50LAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY29udGFpbmVyID0gJHN0YXRlPEhUTUxFbGVtZW50PigpOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lciA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lciA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKGNvbnRhaW5lciA9PT0gbm9kZSkgewoJCQkJY29udGFpbmVyID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJb25Nb3VudCgoKSA9PiB7CgkJcmVnaXN0ZXJQbHVnaW5PbmNlKFNjcm9sbFRyaWdnZXIpOwoKCQljb25zdCBwYXJ0cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbCgiLm1hcnF1ZWUtcGFydCIpOwoJCWlmICghcGFydHM/Lmxlbmd0aCkgcmV0dXJuOwoJCWNvbnN0IHJlc29sdmVkU2Nyb2xsZXIgPQoJCQl0eXBlb2Ygc2Nyb2xsRWxlbWVudCA9PT0gInN0cmluZyIKCQkJCT8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oc2Nyb2xsRWxlbWVudCkKCQkJCTogc2Nyb2xsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJPyBzY3JvbGxFbGVtZW50CgkJCQkJOiBudWxsOwoJCWNvbnN0IHNjcm9sbGVyID0KCQkJcmVzb2x2ZWRTY3JvbGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gcmVzb2x2ZWRTY3JvbGxlciA6IHdpbmRvdzsKCgkJbGV0IGRpcmVjdGlvbiA9IHJldmVyc2VkID8gLTEgOiAxOwoKCQljb25zdCB0aW1lbGluZSA9IGdzYXAudGltZWxpbmUoewoJCQlyZXBlYXQ6IC0xLAoJCQlvblJldmVyc2VDb21wbGV0ZSgpIHsKCQkJCXRoaXMudG90YWxUaW1lKHRoaXMucmF3VGltZSgpICsgdGhpcy5kdXJhdGlvbigpICogMTApOwoJCQl9LAoJCX0pOwoKCQl0aW1lbGluZS50byhwYXJ0cywgewoJCQl4UGVyY2VudDogLTEwMCwKCQkJZWFzZTogIm5vbmUiLAoJCQlkdXJhdGlvbiwKCQl9KTsKCgkJaWYgKHJldmVyc2VkKSB7CgkJCXRpbWVsaW5lLnByb2dyZXNzKDEpOwoJCQl0aW1lbGluZS50aW1lU2NhbGUoLTEpOwoJCX0KCgkJY29uc3QgdHJpZ2dlciA9IFNjcm9sbFRyaWdnZXIuY3JlYXRlKHsKCQkJc2Nyb2xsZXIsCgkJCW9uVXBkYXRlKHNlbGYpIHsKCQkJCWNvbnN0IGN1cnJlbnRTY3JvbGxEaXIgPSBzZWxmLmRpcmVjdGlvbjsKCQkJCWNvbnN0IHRhcmdldERpciA9IHJldmVyc2VkID8gLWN1cnJlbnRTY3JvbGxEaXIgOiBjdXJyZW50U2Nyb2xsRGlyOwoKCQkJCWlmIChkaXJlY3Rpb24gIT09IHRhcmdldERpcikgewoJCQkJCWRpcmVjdGlvbiA9IHRhcmdldERpcjsKCQkJCQlnc2FwLnRvKHRpbWVsaW5lLCB7IHRpbWVTY2FsZTogZGlyZWN0aW9uLCBvdmVyd3JpdGU6IHRydWUgfSk7CgkJCQl9CgoJCQkJY29uc3Qgc2Nyb2xsVmVsID0gc2VsZi5nZXRWZWxvY2l0eSgpOwoJCQkJaWYgKE1hdGguYWJzKHNjcm9sbFZlbCkgPiAwKSB7CgkJCQkJY29uc3QgdGltZVNjYWxlID0KCQkJCQkJZGlyZWN0aW9uICogKDEgKyBNYXRoLmFicyhzY3JvbGxWZWwgKiB2ZWxvY2l0eSkgLyAxMDAwKTsKCQkJCQlnc2FwLnRvKHRpbWVsaW5lLCB7IHRpbWVTY2FsZSwgb3ZlcndyaXRlOiB0cnVlLCBkdXJhdGlvbjogMC4xIH0pOwoJCQkJCWdzYXAudG8odGltZWxpbmUsIHsKCQkJCQkJdGltZVNjYWxlOiBkaXJlY3Rpb24sCgkJCQkJCWR1cmF0aW9uOiAwLjUsCgkJCQkJCWRlbGF5OiAwLjEsCgkJCQkJCW92ZXJ3cml0ZTogImF1dG8iLAoJCQkJCX0pOwoJCQkJfQoJCQl9LAoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl0aW1lbGluZS5raWxsKCk7CgkJCXRyaWdnZXIua2lsbCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8ZGl2IHtAYXR0YWNoIGF0dGFjaENvbnRhaW5lcn0gY2xhc3M9e2NuKCJmbGV4IGgtZnVsbCB3LWZ1bGwiLCBjbGFzc05hbWUpfT4KCXsjZWFjaCBBcnJheShyZXBlYXQpIGFzIF8sIGkgKGkpfQoJCTxkaXYKCQkJY2xhc3M9Im1hcnF1ZWUtcGFydCBmbGV4IHNocmluay0wIgoJCQlzdHlsZTpnYXA9IntnYXB9cHgiCgkJCXN0eWxlOnBhZGRpbmctbGVmdD0ie2dhcCAvIDJ9cHgiCgkJCXN0eWxlOnBhZGRpbmctcmlnaHQ9IntnYXAgLyAyfXB4IgoJCQlhcmlhLWhpZGRlbj17aSA+IDB9CgkJPgoJCQl7QHJlbmRlciBjaGlsZHJlbj8uKCl9CgkJPC9kaXY+Cgl7L2VhY2h9CjwvZGl2Pgo=", - "components/neural-noise/NeuralNoise.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL05ldXJhbE5vaXNlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHsgTm9Ub25lTWFwcGluZyB9IGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFNwZWVkIG9mIHRoZSBub2lzZSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsgY2xhc3M6IGNsYXNzTmFtZSA9ICIiLCBzcGVlZCA9IDEuMCwgLi4ucmVzdCB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IGRwciA9IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8Q2FudmFzIHtkcHJ9IHRvbmVNYXBwaW5nPXtOb1RvbmVNYXBwaW5nfT4KCQkJPFNjZW5lIHtzcGVlZH0gLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/neural-noise/NeuralNoiseScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBWZWN0b3IyLCBTaGFkZXJNYXRlcmlhbCB9IGZyb20gInRocmVlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNwZWVkIG9mIHRoZSBub2lzZSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7Cgl9CgoJbGV0IHsgc3BlZWQgPSAxLjAgfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgdGltZSA9IDA7CglsZXQgbWF0ZXJpYWwgPSAkc3RhdGU8U2hhZGVyTWF0ZXJpYWw+KCk7Cgljb25zdCB7IHNpemUgfSA9IHVzZVRocmVsdGUoKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCiAgICB2YXJ5aW5nIHZlYzIgdlV2OwogICAgdm9pZCBtYWluKCkgewogICAgICB2VXYgPSB1djsKICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAxLjApOwogICAgfQogIGA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCiAgI2lmZGVmIEdMX0VTCiAgICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CiAgI2VuZGlmCiAgdW5pZm9ybSBmbG9hdCB1VGltZTsKICB1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CiAgdmFyeWluZyB2ZWMyIHZVdjsKCiAgdmVjNCBidWZbOF07CgogIHZlYzQgc2lnbW9pZCh2ZWM0IHgpIHsKICAgICAgcmV0dXJuIDEuIC8gKDEuICsgZXhwKC14KSk7CiAgfQoKICB2ZWM0IGNwcG5fZm4odmVjMiBjb29yZGluYXRlLCBmbG9hdCBpbjAsIGZsb2F0IGluMSwgZmxvYXQgaW4yKSB7CiAgICAgIGJ1Zls2XSA9IHZlYzQoY29vcmRpbmF0ZS54LCBjb29yZGluYXRlLnksIDAuMzk0ODMzICsgaW4wLCAwLjM2ICsgaW4xKTsKICAgICAgYnVmWzddID0gdmVjNCgwLjE0ICsgaW4yLCBzcXJ0KGNvb3JkaW5hdGUueCAqIGNvb3JkaW5hdGUueCArIGNvb3JkaW5hdGUueSAqIGNvb3JkaW5hdGUueSksIDAuLCAwLik7CgogICAgICBidWZbMF0gPSBtYXQ0KHZlYzQoNi41NDA0MjYsIC0zLjYxMjYwMywgMC43NTkwODgsIC0xLjEzNjEzMCksIHZlYzQoMi40NTgyNzEsIDMuMTY2MDM2LCAwLjg2MTE3NCwgMS4wODQ4NjEpLCB2ZWM0KC01Ljc2NzQ1NCwgLTUuMzgwMzg2LCAxLjY0NTM5MSwgLTQuNzc0Mjg3KSwgdmVjNCg1LjUyODExNywgLTUuNTQyODY1LCAtMC45MDkyNTMsIDMuMjUxMzQ4KSkgKiBidWZbNl0gKyBtYXQ0KHZlYzQoMi4wNjE0OTEsIC01LjcyMjkxMSwgMy45NzU3NjYsIDEuMzEzNjUxKSwgdmVjNCgtMC41ODMwNDYsIDAuNTgzOTI2LCAtMS43NjYxOTYsIC02LjA0OTMzMCksIHZlYzQoMC4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApLCB2ZWM0KDAuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDAsIC0wLjk3OTk5MCkpICogYnVmWzddICsgdmVjNCgxLjI1MzI4MiwgMS4xMjQzOTEsIC0xLjc5Njk5OCwgMy41MzkzODMpOwogICAgICBidWZbMV0gPSBtYXQ0KHZlYzQoLTMuOTc5NzgzLCAtNi4wNjEyNzQsIDEuNDI5MTMzLCAtNC45MDkwODgpLCB2ZWM0KDAuODYzMTQ2LCAxLjc0MzI5MSwgNi4yNDYyNzksIDEuNjEwNjU0KSwgdmVjNCgyLjQ5NDEzOSwgLTMuNTAxMjA0LCAxLjY0NTQ0OCwgNC45NjEyNDEpLCB2ZWM0KDIuNzQzNTg5LCA4LjIwOTI2MSwgMC4yODU5NjEsIC0xLjE2NTUzOSkpICogYnVmWzZdICsgbWF0NCh2ZWM0KDUuNTg3MDU2LCAtMTIuMDgxOTIzLCAwLjQ3MjYyMywgMTUuODcwODI5KSwgdmVjNCgyLjk4NzUxMSwgMy4xMjk0MzMsIC0xLjY0Njk1MCwgLTAuOTk3MTUyKSwgdmVjNCgwLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCksIHZlYzQoMC4wMDAwMDAsIDAuMDAwMDAwLCAxLjM0MjAzOSwgMC4wMDAwMDApKSAqIGJ1Zls3XSArIHZlYzQoLTUuMDI2OTI2LCAtNi41NzM2MDIsIC0wLjg4MTI0OSwgMy4wMTMyMzgpOwogICAgICBidWZbMF0gPSBzaWdtb2lkKGJ1ZlswXSk7CiAgICAgIGJ1ZlsxXSA9IHNpZ21vaWQoYnVmWzFdKTsKCiAgICAgIGJ1ZlsyXSA9IG1hdDQodmVjNCgtMTUuMjE5NTY4LCA4LjA5NTU0MywgLTEuMDc5MjYxLCAtMS45MzgxOTgpLCB2ZWM0KC01Ljk1MTM2MiwgNS44MDg2MDQsIDIuNjM5Mzc4LCAwLjI5OTY0OSksIHZlYzQoLTcuMzE0NTIzLCA3LjkyNDgxNSwgNC4yMDQ4NjAsIDUuNTcwNTQ4KSwgdmVjNCg1LjM4OTYzMSwgOC45NzkwNTEsIC0xLjkxNDUxOSwgLTAuNDk0OTI4KSkgKiBidWZbNl0gKyBtYXQ0KHZlYzQoLTExLjk2NzE1NCwgLTExLjYwODE1NSwgNi45OTE0NTAsIDEwLjk2NjU2NSksIHZlYzQoMi4wNzAxMDAsIC02LjI2MzE5MiwgLTEuNzA1MDM2LCAtMC42NjcxOTApLCB2ZWM0KDAuNTIzMTA3LCAtMC40NTk0MzAsIDAuMDAwMDAwLCAwLjAwMDAwMCksIHZlYzQoMC4yODQ5ODIsIDAuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKSAqIGJ1Zls3XSArIHZlYzQoLTQuMTcxNjQwLCAtMS45MzI4MDIsIC01LjUyNDU1OCwgLTMuNjQwMTE5KTsKICAgICAgYnVmWzNdID0gbWF0NCh2ZWM0KDIuMzY1NTQyLCAtMTMuNzM4OTIyLCAyLjQ5ODA3NSwgMy4yMzM0NjUpLCB2ZWM0KDAuNjQzMDA3LCAxMS45MjU2MDEsIDEuOTE0MTA1LCAwLjU5OTk1NyksIHZlYzQoLTEuMjIxMTk1LCA0LjQ4MDcyMiwgMS40NzMzOTgsIDMuMTUzNjI0KSwgdmVjNCg1LjAwMzkyNSwgMTMuMDAwNDgxLCAzLjc1ODE4MywgLTQuNTU2MTkwKSkgKiBidWZbNl0gKyBtYXQ0KHZlYzQoLTAuMzk0OTQ1LCA3LjY3NTEwMSwgLTMuMTQyNTY4LCA1LjM1NzY5NSksIHZlYzQoMC42MzkzNjIsIDMuNzE0MzkzLCAtMC44MTA4MzgsIC0wLjM5MTc0OSksIHZlYzQoLTAuNDY0OTQ0LCAwLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSwgdmVjNCgtMC4zODk2MzAsIDAuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKSAqIGJ1Zls3XSArIHZlYzQoLTAuMTE0NDI3LCAtMjEuNjIxODgxLCAwLjcwMTUxNiwgMS4yMzI5NzIpOwogICAgICBidWZbMl0gPSBzaWdtb2lkKGJ1ZlsyXSk7CiAgICAgIGJ1ZlszXSA9IHNpZ21vaWQoYnVmWzNdKTsKCiAgICAgIGJ1Zls0XSA9IG1hdDQodmVjNCg1LjIxNDkxNiwgLTcuMTgzMDI0LCAxLjQ2OTAyMiwgMi42NTkyNjIpLCB2ZWM0KC01LjYwMTg3OCwgLTI1LjM1OTEwMCwgNS4yNTI4MTQsIC0wLjY1NTEyMyksIHZlYzQoLTEwLjU3NzU5MCwgMjQuNDI2MDg3LCAyMS4xMDIxMDQsIDM3LjU0NjY1OCksIHZlYzQoNC4wNjU4MTMsIC0xLjk2MjUyMywgMi4zNDU4ODAsIC0xLjM3MjgxNikpICogYnVmWzBdICsgbWF0NCh2ZWM0KC0xNy42NTI2MDAsIC0xMC41MDc1NTgsIDIuMjU4NzQxLCAxMy45MDM5NzQpLCB2ZWM0KDcuMTUxNTI3LCAtNTAyLjc1NDQzMCwgLTEyLjY0MjUxMywgMS40OTE2MTQpLCB2ZWM0KC0xMC45ODMyNDQsIDIxLjUxODU1MywgLTkuNzAxNzY4LCAtMC43NjM1OTkpLCB2ZWM0KDUuMzgzNjI2LCAxLjQ4MTk1NCwgLTQuMTkxMTYyLCAtMy44OTQ2MzEpKSAqIGJ1ZlsxXSArIG1hdDQodmVjNCgxMi42NjQ0MzEsIC0xNS4xMjk3MTksIDIuMTUxODQxLCAxLjc5NTU5OCksIHZlYzQoLTMwLjQ4MzY1MCwgLTEuODM0NTM2LCAxLjQ1NDI1MywgLTEuMTExODc3KSwgdmVjNCgxOS44NzI3MjMsIC03LjMzNzkzNSwgLTQyLjIyMTI4NiwgLTk4LjUyNzA5MCksIHZlYzQoNy4yMTYzMzgsIC0yLjI2MzkwMiwgLTIuMjcyMTc2LCAtMzYuMTQyMzIzKSkgKiBidWZbMl0gKyBtYXQ0KHZlYzQoLTE2LjI5ODMxNywgMy41NDcyMDAsIC0wLjQzMTYxMiwgLTkuNDQ0NDE3KSwgdmVjNCg1Ny45MzAwMTcsIC0zNC45OTkwMjYsIDE0Ljk1MjgzNiwgLTQuMTUzNDc1KSwgdmVjNCgtMC4wNzQ3MDMsIC0zLjg2NTY0OCwgLTguMTkwNzk1LCAzLjE1MjM5NyksIHZlYzQoLTEyLjU1OTM4NSwgLTcuMDc3NjE5LCAxLjQ5MDQzNywgLTAuODIxMTU0KSkgKiBidWZbM10gKyB2ZWM0KC03LjY3OTE0MCwgMTUuOTI3NDM3LCAxLjMyMDc3MywgLTEuNjY4NjExKTsKICAgICAgYnVmWzVdID0gbWF0NCh2ZWM0KC0yLjA5MTY5OCwgLTAuMzcyNzYyLCAtMy43NzAzODMsIC0yMS4zNjcxNzQpLCB2ZWM0KC01LjY5NzI0NywgLTkuMzU5MDgwLCAwLjkyNTI5MCwgOC44MjU2MTApLCB2ZWM0KDExLjEwMDk0MCwgLTIyLjM0ODA2OCwgMTMuNjI1NzcyLCAtMTguNjkzMjAxKSwgdmVjNCgtMC4zNDI5MDUsIC0zLjk5MDU2MCwgLTIuNDYyNjExLCAtMC40NTAzMzUpKSAqIGJ1ZlswXSArIG1hdDQodmVjNCg2LjY4NzkyOSwgLTQuMzY2MTg0LCAtNi4zMDM3NjUsIC0zLjg2ODExNSksIHZlYzQoMS41NDYyODUsIDYuNTQ4ODkxLCAwLjk5ODY4MSwgLTAuMDgzOTk3KSwgdmVjNCg1LjI3OTc5OCwgLTIuMjE4MDQwLCAzLjcxMjc2OSwgLTAuMjk4Mjk2KSwgdmVjNCgtNS43OTczOTAsIDEwLjEzNDk2MSwgLTIuNTQ0MDg0LCAtNS45NjU2MDUpKSAqIGJ1ZlsxXSArIG1hdDQodmVjNCgtMi41MTMyNTksIC01LjI0MDg3OCwgLTAuOTQyMjQ5LCAtMC4xNjI4NTMpLCB2ZWM0KDAuMjAzMTA4LCAwLjUzNzM4MSwgNS44Mjc3MjgsIC0xLjMwMjQ3NyksIHZlYzQoLTEuMzI2OTkyLCAyLjAxMTEyOSwgLTYuMjQzNTk5LCAtMy43Mjg2MzUpLCB2ZWM0KC0xMy41NjI1NjIsIDkuMTE1ODYxLCAtMC45MTczNzUsIC0zLjYyMzUxMCkpICogYnVmWzJdICsgbWF0NCh2ZWM0KC04LjY0NTAxMywgNi41NTQ2NjcsIC02LjI2MTEwNCwgLTUuNTkzMzM3KSwgdmVjNCgtMC41Nzc4MzEsIC0xLjA3NzI3NSwgMzcuODc1ODgzLCA1LjczNjc2OSksIHZlYzQoMTMuMzcwNDk1LCAzLjcxNDY2NSwgNy4xNDUyMjUsIC00LjU5NTg3OCksIHZlYzQoMi43MTkyMDcsIDMuNjAyMTkxLCAtNS42ODI5OTMsIC0yLjM2NTM0NikpICogYnVmWzNdICsgdmVjNCgtNS45MDAwODEsIC0zLjg4NzExNywgMC41NTI4MjQsIDguNTk1MDMwKTsKICAgICAgYnVmWzRdID0gc2lnbW9pZChidWZbNF0pOwogICAgICBidWZbNV0gPSBzaWdtb2lkKGJ1Zls1XSk7CgogICAgICBidWZbNl0gPSBtYXQ0KHZlYzQoLTEuNjExMDIwLCAyLjM4NzM2OCwgMS40Njc1MjMsIDAuMjA5MTc1KSwgdmVjNCgtMjguNzkzNzM3LCAtNy4xMzkwOTUsIDAuNTY3OTIwLCA0LjY1NjU4MSksIHZlYzQoLTEwLjk0ODYxMCwgMzkuNjYyMzgwLCAwLjc0MzE4NSwgLTEwLjA5NTYwNSksIHZlYzQoLTEuNDk0NzM5LCAtMS41NDgzOTUsIDAuNzMwMTMyLCAyLjE2ODc2OCkpICogYnVmWzBdICsgbWF0NCh2ZWM0KDMuMjU0Nzc1LCAyMS40ODkxMDMsIC0yLjA2NDY4OSwgLTMuMzEwMDU5KSwgdmVjNCgtMy43MzE2NjMsIC0zLjM3OTIxNiwgLTcuMjIzMTkzLCAtMC4yMzY4NTgpLCB2ZWM0KDEzLjMzNDkwOCwgMC43OTE2MDEsIDYuNzQ4ODA0LCA0LjYzMzk0MyksIHZlYzQoLTUuOTE4MzU1LCAtMTcuNDcxMDExLCAtNS43MzI4MDksIC0xLjY0NTE5NykpICogYnVmWzFdICsgbWF0NCh2ZWM0KDAuMTgxOTM0LCAtNy41MzY0NjMsIC03LjIxMzEyMiwgLTQuMTUyNTU3KSwgdmVjNCgtMy41MjIzODIsIC0wLjEyMzU5MywgLTEuMjgxMjM0LCAxLjI1MzY1MyksIHZlYzQoOS43NDUwMTgsIC0yMi44NTM3ODUsIDIuMDYyNDMxLCAwLjA5OTg5MiksIHZlYzQoLTQuMzE5NjMxLCAtMTcuNzMwMDg3LCAxLjc4NzY3MywgNS4zMDI2NzApKSAqIGJ1ZlsyXSArIG1hdDQodmVjNCgtNi41NDU1NjMsIC0xNS43OTAxNzYsIC03LjQwMzgzMiwgLTUuODMyOTE3KSwgdmVjNCgtNDMuNTkxNTgzLCAyOC41NTE5MTIsIC0xNi4wMDE2MTAsIDE4Ljg0NzI4MCksIHZlYzQoMy4wMTY2OTksIDcuNzM5ODM1LCAxLjk3OTM4NCwgOC42NTc1MjIpLCB2ZWM0KC01LjAyMzc1NywgLTQuNDUwNjMzLCAtNC40NzY4MDAsIC01LjUwMTA0NCkpICogYnVmWzNdICsgbWF0NCh2ZWM0KDEuNjk4NTU2LCAtNjcuNDM1OTc4LCA2Ljg5NzcxNSwgMS45MDA0ODMpLCB2ZWM0KDEuODY4MDM1LCAzLjY5ODA4OCwgMi41MjMxMTEsIDMuMzM4MDA1KSwgdmVjNCgxMS4xNTgwMDYsIDEuNzYyMTMwLCAzLjI5MjI0MCwgOC4wNzMxNTcpLCB2ZWM0KC00LjI1NjAzNCwgLTMwNi4xODAzMTIsIDguNTgxOTA0LCAtMTguMTc4Njc2KSkgKiBidWZbNF0gKyBtYXQ0KHZlYzQoMS40Mzc2OTgsIC00LjgzMjA5NSwgMy44NTM0ODAsIC02LjM0ODIxNyksIHZlYzQoMS4zNTQzMzEsIC0xLjI2NDAwNCwgOS45MzI3NTQsIDMuMTEzNDEyKSwgdmVjNCgtNS4yOTQ5MDIsIC0wLjk0OTcwOSwgMC4xMjgxNDIsIDMuMzI2OTY1KSwgdmVjNCgyOS43MzU0MjQsIC00LjkxODI3OCwgNi4xMDQ0MDgsIDQuMzUwMzIzKSkgKiBidWZbNV0gKyB2ZWM0KDcuNDQ1Mjg3LCAxMi4xNjE2MzMsIC0zLjc3MDMzOSwgLTQuNzc1MjE0KTsKICAgICAgYnVmWzddID0gbWF0NCh2ZWM0KC04LjI2NTYwMiwgLTQuNzAyNzAyLCA1LjA5ODIzNCwgMC42MDYwODEpLCB2ZWM0KDcuNjU1ODY0LCAtMTcuMTU5NDkwLCAxNi41MTkzOTAsIC04Ljg4NDQ3OSksIHZlYzQoLTQuMDM2NDc5LCAtMi4zOTQ2ODcsIC0zLjYwODI0NywgLTEuOTg2NjUzKSwgdmVjNCgtMi4yMTY3NzQsIC0xLjgxMzU2NSwgLTUuOTc1OTg3LCA0Ljg4NDY0NSkpICogYnVmWzBdICsgbWF0NCh2ZWM0KDUuMzkzNDA5LCAzLjUwNzY1NSwgLTIuODE5MTEzLCAtMi43MDI4OTcpLCB2ZWM0KC02Ljc0OTcyMywgLTAuMjc4NDQ5LCAxLjQ5NTg3MCwgLTUuMDUxNzE0KSwgdmVjNCgxMy4xMjIyMjYsIDE2LjczNDYzMCwgLTIuOTM5NzQ4LCAtNC4xMDEwMjMpLCB2ZWM0KC0xNS4zODIxODcsIC01LjAzMDQ4MywgLTYuMjU5OTMzLCAxLjU0Njk3MykpICogYnVmWzFdICsgbWF0NCh2ZWM0KDUuMjcyMDM0LCAtMC45NDAxMTYsIC01LjE3MTE0NCwgNC43NTUwMjIpLCB2ZWM0KDUuNDc0ODMxLCA1LjUwODA5NywgMS43NDI1OTEsIC0yLjU5NjczMSksIHZlYzQoMy4xMDA1NDMsIDAuMTYzNDI2LCAtMTA0LjU2MzQxMCwgMTYuOTQ5MTg0KSwgdmVjNCgtNS41NDAyMjUsIC0yLjM5MjAwMSwgMy44MzUwMTAsIC0xLjkzNjQyNSkpICogYnVmWzJdICsgbWF0NCh2ZWM0KC02LjMyMTI1NiwgMS43OTQ2MTIsIC0xMy42MDQxOTIsIC0zLjgwNjA1MiksIHZlYzQoNi42NTgzNDYsIDMxLjkxMTE3NywgMjUuMTY0NDc0LCA5Mi4xNzIzNzgpLCB2ZWM0KDEyLjI5NzU3MywgNC4xNTAzMDQsIC0wLjczMTQ0MCwgNi43Njg0NjcpLCB2ZWM0KC01LjU2Mzk1OCwgNC4wMzQ3NzIsIDUuODI3MTI1LCAwLjU2NTM5MikpICogYnVmWzNdICsgbWF0NCh2ZWM0KDMuNDk5MjQ0LCAtMTk2LjI2ODEwMCwgLTkuNzc3NDU3LCAyLjgxNDI2MyksIHZlYzQoMy40ODA2NTAsIC0zLjE4NDYzNSwgNS40NDMwMDksIDUuMTgwNDIyKSwgdmVjNCgtMi44NTg3ODMsIDE1LjU4NTc5NCwgMS4yODYzOTYsIDIuMDI1MjI4KSwgdmVjNCgtNzEuMjUyNzEwLCAtNjIuNDQxMjQyLCAtOS41MDk1NTAsIDAuNTA2NzAzKSkgKiBidWZbNF0gKyBtYXQ0KHZlYzQoLTEyLjIyOTA1MywgLTEwLjgwMDA1NiwgLTcuMzQ3NDE1LCA0LjM5MDI5NCksIHZlYzQoMTAuNzgyNDEyLCA1LjYzMzczOCwgMC4yODE1ODAsIC00LjczNDg3MiksIHZlYzQoLTEzLjQyMjg4NCwgLTcuMDM5MzkxLCA1Ljg2MjQ0MiwgNi45MzYyNjYpLCB2ZWM0KC0wLjAxNjc2NiwgOC45MTg5ODAsIDIuOTc4MTE0LCA1LjE1MDk1MikpICogYnVmWzVdICsgdmVjNCgyLjI0MTUyNywgLTYuNzA1OTg3LCAtMC45ODg2MTAsIC0zLjM1MTUwOCk7CiAgICAgIGJ1Zls2XSA9IHNpZ21vaWQoYnVmWzZdKTsKICAgICAgYnVmWzddID0gc2lnbW9pZChidWZbN10pOwoKICAgICAgYnVmWzBdID0gbWF0NCh2ZWM0KDEuNjc5NDI2LCAxLjM4MTc0NywgMi45NjI1NDUsIDAuMDAwMDAwKSwgdmVjNCgtMS44ODM0NDEsIC0xLjQ4MDY5NCwgLTMuNTkyNDUyLCAwLjI3Njk2MiksIHZlYzQoLTEuNzUwOTQ0LCAtMS4wOTE4MDYsIC0yLjMxMzM1MiwgMC4wMDAwMDApLCB2ZWM0KDAuMjY2MjIzLCAxLjQzNDY3NCwgMC40NDE3ODUsIDAuMDAwMDAwKSkgKiBidWZbMF0gKyBtYXQ0KHZlYzQoLTAuNjI5OTEwLCAtMS42MTIyNzIsIC0wLjc3MDYwMCwgMC4wMDAwMDApLCB2ZWM0KDAuMTc4MjkwLCAwLjE4MzAwMiwgMS41MTIwODMsIDAuMDAwMDAwKSwgdmVjNCgtMi45NjU0NDAsIC0yLjU4MTk5NCwgLTQuOTAwMTA1LCAwLjAwMDAwMCksIHZlYzQoMC44NTU1ODcsIDEuMTg2ODA4LCAyLjUxNzYzMiwgMC4wMDAwMDApKSAqIGJ1ZlsxXSArIG1hdDQodmVjNCgtMS4yNTg0MzcsIC0xLjA1NTIxNiwgLTIuMTY4ODQwLCAtMC43ODA4NjUpLCB2ZWM0KC0wLjcyMDAyMiwgLTAuNTI2NjYwLCAtMS40MzgyNTEsIDAuMDAwMDAwKSwgdmVjNCgwLjE1MzQ1MywgMC4xNTE5NjEsIDAuMjcyODU0LCAtMC43ODMwNzgpLCB2ZWM0KDEuNTg3MTYyLCAwLjg4NjE5NCwgMC4zNjM2MDMsIDAuMDAwMDAwKSkgKiBidWZbMl0gKyBtYXQ0KHZlYzQoLTEuNTU5MTgwLCAtMC43MTE3MDQsIC00LjM1MTY2MCwgMC4wMTIxNzYpLCB2ZWM0KC0yMi42NDExODcsIC0xOC44MzE0NjgsIC00MS45NTQzNzIsIDAuMDAwMDAwKSwgdmVjNCgwLjYzNzkyMCwgMC41NDcwNjUsIDIuMTg5MzQzLCAtMS4yOTk3MDIpLCB2ZWM0KC0xLjU0ODk4OSwgLTEuMzA3NTkzLCAtMS4xOTMwNzMsIDAuMDAwMDAwKSkgKiBidWZbM10gKyBtYXQ0KHZlYzQoLTAuNDkyNTIxLCAwLjU1MjYzMywgLTEuNTYxNzAyLCAxLjE4MzkzNyksIHZlYzQoMC45NTYwOTMsIDAuMjIxMTAxLCAxLjY0MDIyMSwgMS4xOTk4ODApLCB2ZWM0KC0xLjA1NjA3MSwgLTIuNjY0ODI4LCAwLjg2Mzk4NiwgMC4wMDAwMDApLCB2ZWM0KDEuMTgyNTk4LCAwLjY1MDU4NywgMy40MDYzMzEsIDAuMDAwMDAwKSkgKiBidWZbNF0gKyBtYXQ0KHZlYzQoMC4zNTQ0NjcsIDAuMzI5Mzc5LCAtMC41Mzc1NjQsIDEuMjE0OTA2KSwgdmVjNCgwLjkxODQ0OCwgLTAuNDgxNzc4LCAtMS4wNjE0ODMsIC0xLjI3NDIzMSksIHZlYzQoMi43OTY0NTMsIDEuMDAwMTk2LCA0LjY4NDY2NSwgMC4wMDAwMDApLCB2ZWM0KDAuMTMwNDI2LCAxLjExMjMxNiwgMS40MDg3MTAsIDAuMDAwMDAwKSkgKiBidWZbNV0gKyBtYXQ0KHZlYzQoLTAuODM0MDgxLCAtMS40MDMzMTksIC00LjEwNDA2NywgMC4wMDAwMDApLCB2ZWM0KDMuMTY2NDM2LCAyLjYzODI5NywgNC45NTc2MTUsIDAuODMxNDY1KSwgdmVjNCgtMy4xNzI0NzEsIC0zLjIwNDkwNSwgLTUuNTQ5Mjk1LCAwLjMyMDAxOSksIHZlYzQoLTEuOTAzNDA1LCAtMi4yNDkwOTIsIC01LjMwMTMwNywgMC4wMDAwMDApKSAqIGJ1Zls2XSArIG1hdDQodmVjNCgxLjUyMDM4NCwgLTEuMTAwODM5LCA0LjMxNTI5OSwgMC43ODUyMzApLCB2ZWM0KDEuNTIxMDU2LCAxLjI2NTEzNSwgMi42ODM5MDMsIDAuMDAwMDAwKSwgdmVjNCgyLjk3ODk0NywgMi4zNzk4NDcsIDUuMjM0NzI2LCAwLjAwMDAwMCksIHZlYzQoMi4yMjcwNDIsIDEuNTc1Njc2LCAzLjgwMjg2NCwgMC44Nzk4MDkpKSAqIGJ1Zls3XSArIHZlYzQoLTIuOTAzOTYwLCAtMy42MTcxNDgsIDEuODY1MjQ3LCAwLjAwMDAwMCk7CiAgICAgIGJ1ZlswXSA9IHNpZ21vaWQoYnVmWzBdKTsKCiAgICAgIHJldHVybiB2ZWM0KGJ1ZlswXS54eXosIDEuMCk7CiAgfQoKICB2b2lkIG1haW4oKSB7CiAgICB2ZWMyIHV2ID0gdlV2ICogMi4wIC0gMS4wOwogICAgdXYueSAqPSAtMS4wOwoKICAgIHZlYzQgY29sb3IgPSBjcHBuX2ZuKHV2LCAwLjEgKiBzaW4oMC4zICogdVRpbWUpLCAwLjEgKiBzaW4oMC42OSAqIHVUaW1lKSwgMC4xICogc2luKDAuNDQgKiB1VGltZSkpOwoKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiLCAxLjApOwogIH0KICBgOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJdGltZSArPSBkZWx0YSAqIHNwZWVkOwoJCWlmIChtYXRlcmlhbCkgewoJCQltYXRlcmlhbC51bmlmb3Jtcy51VGltZS52YWx1ZSA9IHRpbWU7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCgkc2l6ZS53aWR0aCwgJHNpemUuaGVpZ2h0KTsKCQl9Cgl9KTsKPC9zY3JpcHQ+Cgo8VC5NZXNoPgoJPFQuUGxhbmVHZW9tZXRyeSBhcmdzPXtbMiwgMl19IC8+Cgk8VC5TaGFkZXJNYXRlcmlhbAoJCWJpbmQ6cmVmPXttYXRlcmlhbH0KCQl7dmVydGV4U2hhZGVyfQoJCXtmcmFnbWVudFNoYWRlcn0KCQl0cmFuc3BhcmVudAoJCXVuaWZvcm1zPXt7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjdG9yMigxLCAxKSB9LAoJCX19CgkvPgo8L1QuTWVzaD4K", - "components/pixelated-image/PixelatedImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1BpeGVsYXRlZEltYWdlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHsgTm9Ub25lTWFwcGluZyB9IGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlzcmM6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBJbml0aWFsIGdyaWQgc2l6ZSBmb3IgdGhlIHBpeGVsYXRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWluaXRpYWxHcmlkU2l6ZT86IFNjZW5lUHJvcHNbImluaXRpYWxHcmlkU2l6ZSJdOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIGVhY2ggc3RlcCBpbiB0aGUgZGVwaXhlbGF0aW9uIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJc3RlcER1cmF0aW9uPzogU2NlbmVQcm9wc1sic3RlcER1cmF0aW9uIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCXNyYywKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJaW5pdGlhbEdyaWRTaXplID0gNi4wLAoJCXN0ZXBEdXJhdGlvbiA9IDAuMTUsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZSBpbWFnZT17c3JjfSB7aW5pdGlhbEdyaWRTaXplfSB7c3RlcER1cmF0aW9ufSAvPgoJCTwvQ2FudmFzPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/pixelated-image/PixelatedImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCB7IFZlY3RvcjIsIE5lYXJlc3RGaWx0ZXIsIExpbmVhckZpbHRlciwgU2hhZGVyTWF0ZXJpYWwgfSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIEluaXRpYWwgZ3JpZCBzaXplIGZvciB0aGUgcGl4ZWxhdGlvbiBlZmZlY3QuCgkJICogQGRlZmF1bHQgNi4wCgkJICovCgkJaW5pdGlhbEdyaWRTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIGVhY2ggc3RlcCBpbiB0aGUgZGVwaXhlbGF0aW9uIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJc3RlcER1cmF0aW9uPzogbnVtYmVyOwoJfQoKCWxldCB7IGltYWdlLCBpbml0aWFsR3JpZFNpemUgPSA2LjAsIHN0ZXBEdXJhdGlvbiA9IDAuMTUgfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCB7IHNpemUgfSA9IHVzZVRocmVsdGUoKTsKCWxldCB0aW1lID0gMDsKCWxldCBjdXJyZW50R3JpZFNpemUgPSAkc3RhdGUoNi4wKTsKCWxldCBpc0RvbmUgPSAkc3RhdGUoZmFsc2UpOwoJbGV0IG1hdGVyaWFsID0gJHN0YXRlPFNoYWRlck1hdGVyaWFsPigpOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFZlY3RvcjIoMSwgMSk7Cgljb25zdCB0ZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjdG9yMigxLCAxKTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBuZXh0V2lkdGggPSAkc2l6ZS53aWR0aDsKCQljb25zdCBuZXh0SGVpZ2h0ID0gJHNpemUuaGVpZ2h0OwoJCXJlc29sdXRpb25Vbmlmb3JtLnNldChuZXh0V2lkdGgsIG5leHRIZWlnaHQpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY3VycmVudEdyaWRTaXplID0gaW5pdGlhbEdyaWRTaXplOwoJCXRpbWUgPSAwOwoJCWlzRG9uZSA9IGZhbHNlOwoJfSk7CgoJY29uc3QgdGV4dHVyZSA9ICRkZXJpdmVkKAoJCXVzZVRleHR1cmUoaW1hZ2UsIHsKCQkJdHJhbnNmb3JtOiAodGV4KSA9PiB7CgkJCQl0ZXgubWFnRmlsdGVyID0gTmVhcmVzdEZpbHRlcjsKCQkJCXRleC5taW5GaWx0ZXIgPSBOZWFyZXN0RmlsdGVyOwoJCQkJdGV4LmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlOwoJCQkJcmV0dXJuIHRleDsKCQkJfSwKCQl9KSwKCSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgdGV4ID0gJHRleHR1cmU7CgkJaWYgKHRleCAmJiB0ZXguaW1hZ2UpIHsKCQkJdGV4dHVyZVNpemVVbmlmb3JtLnNldCh0ZXguaW1hZ2Uud2lkdGgsIHRleC5pbWFnZS5oZWlnaHQpOwoJCX0KCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKCFpc0RvbmUpIHsKCQkJdGltZSArPSBkZWx0YTsKCgkJCWNvbnN0IHN0ZXAgPSBNYXRoLmZsb29yKHRpbWUgLyBzdGVwRHVyYXRpb24pOwoJCQljb25zdCBuZXh0R3JpZCA9IGluaXRpYWxHcmlkU2l6ZSAqIE1hdGgucG93KDIsIHN0ZXApOwoKCQkJY3VycmVudEdyaWRTaXplID0gbmV4dEdyaWQ7CgoJCQlpZiAoY3VycmVudEdyaWRTaXplID4gJHNpemUuaGVpZ2h0KSB7CgkJCQlpc0RvbmUgPSB0cnVlOwoJCQkJaWYgKCR0ZXh0dXJlKSB7CgkJCQkJJHRleHR1cmUubWFnRmlsdGVyID0gTGluZWFyRmlsdGVyOwoJCQkJCSR0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKCQkJCQkkdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKG1hdGVyaWFsKSB7CgkJCW1hdGVyaWFsLnVuaWZvcm1zLnVHcmlkU2l6ZS52YWx1ZSA9IGN1cnJlbnRHcmlkU2l6ZTsKCQkJbWF0ZXJpYWwudW5pZm9ybXMudUlzRG9uZS52YWx1ZSA9IGlzRG9uZTsKCQl9Cgl9KTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCiAgICB2YXJ5aW5nIHZlYzIgdlV2OwogICAgdm9pZCBtYWluKCkgewogICAgICB2VXYgPSB1djsKICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAxLjApOwogICAgfQogIGA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKICAgIHVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKICAgIHVuaWZvcm0gdmVjMiB1VGV4dHVyZVNpemU7CiAgICB1bmlmb3JtIGZsb2F0IHVHcmlkU2l6ZTsKICAgIHVuaWZvcm0gYm9vbCB1SXNEb25lOwoKICAgIHZhcnlpbmcgdmVjMiB2VXY7CgogICAgdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKICAgICAgIHZlYzIgcyA9IHVSZXNvbHV0aW9uIC8gdGV4dHVyZVNpemU7CiAgICAgICBmbG9hdCBzY2FsZSA9IG1heChzLngsIHMueSk7CiAgICAgICB2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwogICAgICAgdmVjMiBvZmZzZXQgPSAodVJlc29sdXRpb24gLSBzY2FsZWRTaXplKSAqIDAuNTsKICAgICAgIHJldHVybiAodXYgKiB1UmVzb2x1dGlvbiAtIG9mZnNldCkgLyBzY2FsZWRTaXplOwogICAgfQoKICAgIHZvaWQgbWFpbigpIHsKICAgICAgIHZlYzIgcyA9IHVSZXNvbHV0aW9uOwogICAgICAgZmxvYXQgcnMgPSBzLnggLyBtYXgocy55LCAwLjAwMDAxKTsKCiAgICAgICB2ZWMyIGdyaWQgPSB2ZWMyKHVHcmlkU2l6ZSAqIHJzLCB1R3JpZFNpemUpOwogICAgICAgdmVjMiBwaXhlbGF0ZWRTY3JlZW5VdiA9IGZsb29yKHZVdiAqIGdyaWQpIC8gZ3JpZCArICgwLjUgLyBncmlkKTsKCiAgICAgICB2ZWMyIGZpbmFsVXYgPSB1SXNEb25lID8gdlV2IDogcGl4ZWxhdGVkU2NyZWVuVXY7CiAgICAgICB2ZWMyIGNvdmVyVXYgPSBnZXRDb3ZlclVWKGZpbmFsVXYsIHVUZXh0dXJlU2l6ZSk7CgogICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgY292ZXJVdik7CiAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKICAgICAgICNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PgogICAgfQogIGA7Cjwvc2NyaXB0PgoKeyNpZiAkdGV4dHVyZX0KCTxULk1lc2g+CgkJPFQuUGxhbmVHZW9tZXRyeSBhcmdzPXtbMiwgMl19IC8+CgkJPFQuU2hhZGVyTWF0ZXJpYWwKCQkJYmluZDpyZWY9e21hdGVyaWFsfQoJCQl7dmVydGV4U2hhZGVyfQoJCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJCXVuaWZvcm1zPXt7CgkJCQl1VGV4dHVyZTogeyB2YWx1ZTogJHRleHR1cmUgfSwKCQkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiB0ZXh0dXJlU2l6ZVVuaWZvcm0gfSwKCQkJCXVHcmlkU2l6ZTogeyB2YWx1ZTogaW5pdGlhbEdyaWRTaXplIH0sCgkJCQl1SXNEb25lOiB7IHZhbHVlOiBmYWxzZSB9LAoJCQl9fQoJCS8+Cgk8L1QuTWVzaD4Key9pZn0K", - "components/plasma-grid/PlasmaGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1BsYXNtYUdyaWRTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgeyBOb1RvbmVNYXBwaW5nIH0gZnJvbSAidGhyZWUiOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBiYXNlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiIzExMTExMyIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogVGhlIGNvbG9yIHVzZWQgZm9yIHRoZSBwbGFzbWEgbm9pc2UgZ3JhZGllbnRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWhpZ2hsaWdodENvbG9yPzogU2NlbmVQcm9wc1siaGlnaGxpZ2h0Q29sb3IiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljb2xvciwKCQloaWdobGlnaHRDb2xvciwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZSB7Y29sb3J9IHtoaWdobGlnaHRDb2xvcn0gLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/plasma-grid/PlasmaGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgYmFzZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIGNvbG9yIHVzZWQgZm9yIHRoZSBwbGFzbWEgbm9pc2UgZ3JhZGllbnRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWhpZ2hsaWdodENvbG9yPzogc3RyaW5nOwoJfQoKCWxldCB7IGNvbG9yID0gIiMxMTExMTMiLCBoaWdobGlnaHRDb2xvciA9ICIjRkY2OTAwIiB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWNvbnN0IHsgc2l6ZSB9ID0gdXNlVGhyZWx0ZSgpOwoKCWxldCBtYWluTWF0ZXJpYWwgPSAkc3RhdGU8VEhSRUUuU2hhZGVyTWF0ZXJpYWw+KCk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBmbG9hdCB1X3RpbWU7CgkJdW5pZm9ybSB2ZWMzIHVfcmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdV9iYXNlQ29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVfZ3JhZGllbnRDb2xvcjsKCgkJZmxvYXQgcmFuZCh2ZWMyIHApIHsKCQkJcmV0dXJuIGZyYWN0KHNpbihkb3QocCwgdmVjMigxMi41NDMsNTE0LjEyMykpKSo0NzMyLjEyKTsKCQl9CgoJCWZsb2F0IG5vaXNlKHZlYzIgcCkgewoJCQl2ZWMyIGYgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBmcmFjdChwKSk7CgkJCXZlYzIgaSA9IGZsb29yKHApOwoJCQlmbG9hdCBhID0gcmFuZChpKTsKCQkJZmxvYXQgYiA9IHJhbmQoaSt2ZWMyKDEuMCwwLjApKTsKCQkJZmxvYXQgYyA9IHJhbmQoaSt2ZWMyKDAuMCwxLjApKTsKCQkJZmxvYXQgZCA9IHJhbmQoaSt2ZWMyKDEuMCwxLjApKTsKCQkJcmV0dXJuIG1peChtaXgoYSwgYiwgZi54KSwgbWl4KGMsIGQsIGYueCksIGYueSk7CgkJfQoKCQl2b2lkIG1haW5JbWFnZSggb3V0IHZlYzQgZnJhZ0NvbG9yLCBpbiB2ZWMyIGZyYWdDb29yZCApIHsKCQkJZmxvYXQgbiA9IDIuMDsKCQkJdmVjMiB1diA9IGZyYWdDb29yZC91X3Jlc29sdXRpb24ueTsKCQkJdmVjMiB1dnAgPSBmcmFnQ29vcmQvdV9yZXNvbHV0aW9uLnh5OwoJCQl1diArPSAwLjc1Km5vaXNlKHV2KjMuMCt1X3RpbWUvMi4wK25vaXNlKHV2KjcuMC11X3RpbWUvMy4wKS8yLjApLzIuMDsKCgkJCWZsb2F0IGdyaWQgPSAobW9kKGZsb29yKCh1dnAueCkqdV9yZXNvbHV0aW9uLngvbiksMi4wKT09MC4wPzEuMDowLjApICoKCQkJCQkJIChtb2QoZmxvb3IoKHV2cC55KSp1X3Jlc29sdXRpb24ueS9uKSwyLjApPT0wLjA/MS4wOjAuMCk7CgoJCQl2ZWMzIGNvbCA9IG1peCh1X2Jhc2VDb2xvciwgdV9ncmFkaWVudENvbG9yLAoJCQkJCQkgICA1LjAgKiB2ZWMzKHBvdygxLjAtbm9pc2UodXYqNC4wLXZlYzIoMC4wLCB1X3RpbWUvMi4wKSksIDUuMCkpKTsKCgkJCWNvbCA9IHBvdyhjb2wsIHZlYzMoMS4wKSk7CgkJCWZsb2F0IGFscGhhID0gZ3JpZDsKCQkJZnJhZ0NvbG9yID0gdmVjNChjb2wsIGFscGhhKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCXZlYzIgZnJhZ0Nvb3JkID0gdlV2ICogdV9yZXNvbHV0aW9uLnh5OwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCBmcmFnQ29vcmQpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CiAgICAgICAgICAgICNpbmNsdWRlIDxjb2xvcnNwYWNlX2ZyYWdtZW50PgoJCX0KCWA7CgoJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTsKCWNvbnN0IGJhc2VDb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuVmVjdG9yMygpOwoJY29uc3QgZ3JhZGllbnRDb2xvclVuaWZvcm0gPSBuZXcgVEhSRUUuVmVjdG9yMygpOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IGJhc2UgPSBuZXcgVEhSRUUuQ29sb3IoY29sb3IpOwoJCWNvbnN0IGdyYWRpZW50ID0gbmV3IFRIUkVFLkNvbG9yKGhpZ2hsaWdodENvbG9yKTsKCgkJYmFzZUNvbG9yVW5pZm9ybS5zZXQoYmFzZS5yLCBiYXNlLmcsIGJhc2UuYik7CgkJZ3JhZGllbnRDb2xvclVuaWZvcm0uc2V0KGdyYWRpZW50LnIsIGdyYWRpZW50LmcsIGdyYWRpZW50LmIpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KCRzaXplLndpZHRoLCAkc2l6ZS5oZWlnaHQsIDEuMCk7Cgl9KTsKCgl1c2VUYXNrKChkZWx0YSkgPT4gewoJCWlmIChtYWluTWF0ZXJpYWwpIHsKCQkJbWFpbk1hdGVyaWFsLnVuaWZvcm1zLnVfdGltZS52YWx1ZSArPSBkZWx0YSAqIDAuNTsKCQl9Cgl9KTsKPC9zY3JpcHQ+Cgo8VC5NZXNoPgoJPFQuUGxhbmVHZW9tZXRyeSBhcmdzPXtbMiwgMl19IC8+Cgk8VC5TaGFkZXJNYXRlcmlhbAoJCWJpbmQ6cmVmPXttYWluTWF0ZXJpYWx9CgkJe3ZlcnRleFNoYWRlcn0KCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJdHJhbnNwYXJlbnQKCQlkZXB0aFRlc3Q9e2ZhbHNlfQoJCWRlcHRoV3JpdGU9e2ZhbHNlfQoJCXVuaWZvcm1zPXt7CgkJCXVfdGltZTogeyB2YWx1ZTogMCB9LAoJCQl1X3Jlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVfYmFzZUNvbG9yOiB7IHZhbHVlOiBiYXNlQ29sb3JVbmlmb3JtIH0sCgkJCXVfZ3JhZGllbnRDb2xvcjogeyB2YWx1ZTogZ3JhZGllbnRDb2xvclVuaWZvcm0gfSwKCQl9fQoJLz4KPC9ULk1lc2g+Cg==", + "components/neural-noise/NeuralNoise.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9OZXVyYWxOb2lzZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFNwZWVkIG9mIHRoZSBub2lzZSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsgY2xhc3M6IGNsYXNzTmFtZSA9ICIiLCBzcGVlZCA9IDEuMCwgLi4ucmVzdCB9OiBQcm9wcyA9ICRwcm9wcygpOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUge3NwZWVkfSAvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/neural-noise/NeuralNoiseScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCX0gZnJvbSAib2dsIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNwZWVkIG9mIHRoZSBub2lzZSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7Cgl9CgoJbGV0IHsgc3BlZWQgPSAxLjAgfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCSNpZmRlZiBHTF9FUwoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQkjZW5kaWYKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2ZWM0IGJ1Zls4XTsKCgkJdmVjNCBzaWdtb2lkKHZlYzQgeCkgewoJCQlyZXR1cm4gMS4gLyAoMS4gKyBleHAoLXgpKTsKCQl9CgoJCXZlYzQgY3Bwbl9mbih2ZWMyIGNvb3JkaW5hdGUsIGZsb2F0IGluMCwgZmxvYXQgaW4xLCBmbG9hdCBpbjIpIHsKCQkJYnVmWzZdID0gdmVjNChjb29yZGluYXRlLngsIGNvb3JkaW5hdGUueSwgMC4zOTQ4MzMgKyBpbjAsIDAuMzYgKyBpbjEpOwoJCQlidWZbN10gPSB2ZWM0KDAuMTQgKyBpbjIsIHNxcnQoY29vcmRpbmF0ZS54ICogY29vcmRpbmF0ZS54ICsgY29vcmRpbmF0ZS55ICogY29vcmRpbmF0ZS55KSwgMC4sIDAuKTsKCgkJCWJ1ZlswXSA9IG1hdDQodmVjNCg2LjU0MDQyNiwgLTMuNjEyNjAzLCAwLjc1OTA4OCwgLTEuMTM2MTMwKSwgdmVjNCgyLjQ1ODI3MSwgMy4xNjYwMzYsIDAuODYxMTc0LCAxLjA4NDg2MSksIHZlYzQoLTUuNzY3NDU0LCAtNS4zODAzODYsIDEuNjQ1MzkxLCAtNC43NzQyODcpLCB2ZWM0KDUuNTI4MTE3LCAtNS41NDI4NjUsIC0wLjkwOTI1MywgMy4yNTEzNDgpKSAqIGJ1Zls2XSArIG1hdDQodmVjNCgyLjA2MTQ5MSwgLTUuNzIyOTExLCAzLjk3NTc2NiwgMS4zMTM2NTEpLCB2ZWM0KC0wLjU4MzA0NiwgMC41ODM5MjYsIC0xLjc2NjE5NiwgLTYuMDQ5MzMwKSwgdmVjNCgwLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCksIHZlYzQoMC4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCwgLTAuOTc5OTkwKSkgKiBidWZbN10gKyB2ZWM0KDEuMjUzMjgyLCAxLjEyNDM5MSwgLTEuNzk2OTk4LCAzLjUzOTM4Myk7CgkJCWJ1ZlsxXSA9IG1hdDQodmVjNCgtMy45Nzk3ODMsIC02LjA2MTI3NCwgMS40MjkxMzMsIC00LjkwOTA4OCksIHZlYzQoMC44NjMxNDYsIDEuNzQzMjkxLCA2LjI0NjI3OSwgMS42MTA2NTQpLCB2ZWM0KDIuNDk0MTM5LCAtMy41MDEyMDQsIDEuNjQ1NDQ4LCA0Ljk2MTI0MSksIHZlYzQoMi43NDM1ODksIDguMjA5MjYxLCAwLjI4NTk2MSwgLTEuMTY1NTM5KSkgKiBidWZbNl0gKyBtYXQ0KHZlYzQoNS41ODcwNTYsIC0xMi4wODE5MjMsIDAuNDcyNjIzLCAxNS44NzA4MjkpLCB2ZWM0KDIuOTg3NTExLCAzLjEyOTQzMywgLTEuNjQ2OTUwLCAtMC45OTcxNTIpLCB2ZWM0KDAuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSwgdmVjNCgwLjAwMDAwMCwgMC4wMDAwMDAsIDEuMzQyMDM5LCAwLjAwMDAwMCkpICogYnVmWzddICsgdmVjNCgtNS4wMjY5MjYsIC02LjU3MzYwMiwgLTAuODgxMjQ5LCAzLjAxMzIzOCk7CgkJCWJ1ZlswXSA9IHNpZ21vaWQoYnVmWzBdKTsKCQkJYnVmWzFdID0gc2lnbW9pZChidWZbMV0pOwoKCQkJYnVmWzJdID0gbWF0NCh2ZWM0KC0xNS4yMTk1NjgsIDguMDk1NTQzLCAtMS4wNzkyNjEsIC0xLjkzODE5OCksIHZlYzQoLTUuOTUxMzYyLCA1LjgwODYwNCwgMi42MzkzNzgsIDAuMjk5NjQ5KSwgdmVjNCgtNy4zMTQ1MjMsIDcuOTI0ODE1LCA0LjIwNDg2MCwgNS41NzA1NDgpLCB2ZWM0KDUuMzg5NjMxLCA4Ljk3OTA1MSwgLTEuOTE0NTE5LCAtMC40OTQ5MjgpKSAqIGJ1Zls2XSArIG1hdDQodmVjNCgtMTEuOTY3MTU0LCAtMTEuNjA4MTU1LCA2Ljk5MTQ1MCwgMTAuOTY2NTY1KSwgdmVjNCgyLjA3MDEwMCwgLTYuMjYzMTkyLCAtMS43MDUwMzYsIC0wLjY2NzE5MCksIHZlYzQoMC41MjMxMDcsIC0wLjQ1OTQzMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSwgdmVjNCgwLjI4NDk4MiwgMC4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpICogYnVmWzddICsgdmVjNCgtNC4xNzE2NDAsIC0xLjkzMjgwMiwgLTUuNTI0NTU4LCAtMy42NDAxMTkpOwoJCQlidWZbM10gPSBtYXQ0KHZlYzQoMi4zNjU1NDIsIC0xMy43Mzg5MjIsIDIuNDk4MDc1LCAzLjIzMzQ2NSksIHZlYzQoMC42NDMwMDcsIDExLjkyNTYwMSwgMS45MTQxMDUsIDAuNTk5OTU3KSwgdmVjNCgtMS4yMjExOTUsIDQuNDgwNzIyLCAxLjQ3MzM5OCwgMy4xNTM2MjQpLCB2ZWM0KDUuMDAzOTI1LCAxMy4wMDA0ODEsIDMuNzU4MTgzLCAtNC41NTYxOTApKSAqIGJ1Zls2XSArIG1hdDQodmVjNCgtMC4zOTQ5NDUsIDcuNjc1MTAxLCAtMy4xNDI1NjgsIDUuMzU3Njk1KSwgdmVjNCgwLjYzOTM2MiwgMy43MTQzOTMsIC0wLjgxMDgzOCwgLTAuMzkxNzQ5KSwgdmVjNCgtMC40NjQ5NDQsIDAuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApLCB2ZWM0KC0wLjM4OTYzMCwgMC4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpICogYnVmWzddICsgdmVjNCgtMC4xMTQ0MjcsIC0yMS42MjE4ODEsIDAuNzAxNTE2LCAxLjIzMjk3Mik7CgkJCWJ1ZlsyXSA9IHNpZ21vaWQoYnVmWzJdKTsKCQkJYnVmWzNdID0gc2lnbW9pZChidWZbM10pOwoKCQkJYnVmWzRdID0gbWF0NCh2ZWM0KDUuMjE0OTE2LCAtNy4xODMwMjQsIDEuNDY5MDIyLCAyLjY1OTI2MiksIHZlYzQoLTUuNjAxODc4LCAtMjUuMzU5MTAwLCA1LjI1MjgxNCwgLTAuNjU1MTIzKSwgdmVjNCgtMTAuNTc3NTkwLCAyNC40MjYwODcsIDIxLjEwMjEwNCwgMzcuNTQ2NjU4KSwgdmVjNCg0LjA2NTgxMywgLTEuOTYyNTIzLCAyLjM0NTg4MCwgLTEuMzcyODE2KSkgKiBidWZbMF0gKyBtYXQ0KHZlYzQoLTE3LjY1MjYwMCwgLTEwLjUwNzU1OCwgMi4yNTg3NDEsIDEzLjkwMzk3NCksIHZlYzQoNy4xNTE1MjcsIC01MDIuNzU0NDMwLCAtMTIuNjQyNTEzLCAxLjQ5MTYxNCksIHZlYzQoLTEwLjk4MzI0NCwgMjEuNTE4NTUzLCAtOS43MDE3NjgsIC0wLjc2MzU5OSksIHZlYzQoNS4zODM2MjYsIDEuNDgxOTU0LCAtNC4xOTExNjIsIC0zLjg5NDYzMSkpICogYnVmWzFdICsgbWF0NCh2ZWM0KDEyLjY2NDQzMSwgLTE1LjEyOTcxOSwgMi4xNTE4NDEsIDEuNzk1NTk4KSwgdmVjNCgtMzAuNDgzNjUwLCAtMS44MzQ1MzYsIDEuNDU0MjUzLCAtMS4xMTE4NzcpLCB2ZWM0KDE5Ljg3MjcyMywgLTcuMzM3OTM1LCAtNDIuMjIxMjg2LCAtOTguNTI3MDkwKSwgdmVjNCg3LjIxNjMzOCwgLTIuMjYzOTAyLCAtMi4yNzIxNzYsIC0zNi4xNDIzMjMpKSAqIGJ1ZlsyXSArIG1hdDQodmVjNCgtMTYuMjk4MzE3LCAzLjU0NzIwMCwgLTAuNDMxNjEyLCAtOS40NDQ0MTcpLCB2ZWM0KDU3LjkzMDAxNywgLTM0Ljk5OTAyNiwgMTQuOTUyODM2LCAtNC4xNTM0NzUpLCB2ZWM0KC0wLjA3NDcwMywgLTMuODY1NjQ4LCAtOC4xOTA3OTUsIDMuMTUyMzk3KSwgdmVjNCgtMTIuNTU5Mzg1LCAtNy4wNzc2MTksIDEuNDkwNDM3LCAtMC44MjExNTQpKSAqIGJ1ZlszXSArIHZlYzQoLTcuNjc5MTQwLCAxNS45Mjc0MzcsIDEuMzIwNzczLCAtMS42Njg2MTEpOwoJCQlidWZbNV0gPSBtYXQ0KHZlYzQoLTIuMDkxNjk4LCAtMC4zNzI3NjIsIC0zLjc3MDM4MywgLTIxLjM2NzE3NCksIHZlYzQoLTUuNjk3MjQ3LCAtOS4zNTkwODAsIDAuOTI1MjkwLCA4LjgyNTYxMCksIHZlYzQoMTEuMTAwOTQwLCAtMjIuMzQ4MDY4LCAxMy42MjU3NzIsIC0xOC42OTMyMDEpLCB2ZWM0KC0wLjM0MjkwNSwgLTMuOTkwNTYwLCAtMi40NjI2MTEsIC0wLjQ1MDMzNSkpICogYnVmWzBdICsgbWF0NCh2ZWM0KDYuNjg3OTI5LCAtNC4zNjYxODQsIC02LjMwMzc2NSwgLTMuODY4MTE1KSwgdmVjNCgxLjU0NjI4NSwgNi41NDg4OTEsIDAuOTk4NjgxLCAtMC4wODM5OTcpLCB2ZWM0KDUuMjc5Nzk4LCAtMi4yMTgwNDAsIDMuNzEyNzY5LCAtMC4yOTgyOTYpLCB2ZWM0KC01Ljc5NzM5MCwgMTAuMTM0OTYxLCAtMi41NDQwODQsIC01Ljk2NTYwNSkpICogYnVmWzFdICsgbWF0NCh2ZWM0KC0yLjUxMzI1OSwgLTUuMjQwODc4LCAtMC45NDIyNDksIC0wLjE2Mjg1MyksIHZlYzQoMC4yMDMxMDgsIDAuNTM3MzgxLCA1LjgyNzcyOCwgLTEuMzAyNDc3KSwgdmVjNCgtMS4zMjY5OTIsIDIuMDExMTI5LCAtNi4yNDM1OTksIC0zLjcyODYzNSksIHZlYzQoLTEzLjU2MjU2MiwgOS4xMTU4NjEsIC0wLjkxNzM3NSwgLTMuNjIzNTEwKSkgKiBidWZbMl0gKyBtYXQ0KHZlYzQoLTguNjQ1MDEzLCA2LjU1NDY2NywgLTYuMjYxMTA0LCAtNS41OTMzMzcpLCB2ZWM0KC0wLjU3NzgzMSwgLTEuMDc3Mjc1LCAzNy44NzU4ODMsIDUuNzM2NzY5KSwgdmVjNCgxMy4zNzA0OTUsIDMuNzE0NjY1LCA3LjE0NTIyNSwgLTQuNTk1ODc4KSwgdmVjNCgyLjcxOTIwNywgMy42MDIxOTEsIC01LjY4Mjk5MywgLTIuMzY1MzQ2KSkgKiBidWZbM10gKyB2ZWM0KC01LjkwMDA4MSwgLTMuODg3MTE3LCAwLjU1MjgyNCwgOC41OTUwMzApOwoJCQlidWZbNF0gPSBzaWdtb2lkKGJ1Zls0XSk7CgkJCWJ1Zls1XSA9IHNpZ21vaWQoYnVmWzVdKTsKCgkJCWJ1Zls2XSA9IG1hdDQodmVjNCgtMS42MTEwMjAsIDIuMzg3MzY4LCAxLjQ2NzUyMywgMC4yMDkxNzUpLCB2ZWM0KC0yOC43OTM3MzcsIC03LjEzOTA5NSwgMC41Njc5MjAsIDQuNjU2NTgxKSwgdmVjNCgtMTAuOTQ4NjEwLCAzOS42NjIzODAsIDAuNzQzMTg1LCAtMTAuMDk1NjA1KSwgdmVjNCgtMS40OTQ3MzksIC0xLjU0ODM5NSwgMC43MzAxMzIsIDIuMTY4NzY4KSkgKiBidWZbMF0gKyBtYXQ0KHZlYzQoMy4yNTQ3NzUsIDIxLjQ4OTEwMywgLTIuMDY0Njg5LCAtMy4zMTAwNTkpLCB2ZWM0KC0zLjczMTY2MywgLTMuMzc5MjE2LCAtNy4yMjMxOTMsIC0wLjIzNjg1OCksIHZlYzQoMTMuMzM0OTA4LCAwLjc5MTYwMSwgNi43NDg4MDQsIDQuNjMzOTQzKSwgdmVjNCgtNS45MTgzNTUsIC0xNy40NzEwMTEsIC01LjczMjgwOSwgLTEuNjQ1MTk3KSkgKiBidWZbMV0gKyBtYXQ0KHZlYzQoMC4xODE5MzQsIC03LjUzNjQ2MywgLTcuMjEzMTIyLCAtNC4xNTI1NTcpLCB2ZWM0KC0zLjUyMjM4MiwgLTAuMTIzNTkzLCAtMS4yODEyMzQsIDEuMjUzNjUzKSwgdmVjNCg5Ljc0NTAxOCwgLTIyLjg1Mzc4NSwgMi4wNjI0MzEsIDAuMDk5ODkyKSwgdmVjNCgtNC4zMTk2MzEsIC0xNy43MzAwODcsIDEuNzg3NjczLCA1LjMwMjY3MCkpICogYnVmWzJdICsgbWF0NCh2ZWM0KC02LjU0NTU2MywgLTE1Ljc5MDE3NiwgLTcuNDAzODMyLCAtNS44MzI5MTcpLCB2ZWM0KC00My41OTE1ODMsIDI4LjU1MTkxMiwgLTE2LjAwMTYxMCwgMTguODQ3MjgwKSwgdmVjNCgzLjAxNjY5OSwgNy43Mzk4MzUsIDEuOTc5Mzg0LCA4LjY1NzUyMiksIHZlYzQoLTUuMDIzNzU3LCAtNC40NTA2MzMsIC00LjQ3NjgwMCwgLTUuNTAxMDQ0KSkgKiBidWZbM10gKyBtYXQ0KHZlYzQoMS42OTg1NTYsIC02Ny40MzU5NzgsIDYuODk3NzE1LCAxLjkwMDQ4MyksIHZlYzQoMS44NjgwMzUsIDMuNjk4MDg4LCAyLjUyMzExMSwgMy4zMzgwMDUpLCB2ZWM0KDExLjE1ODAwNiwgMS43NjIxMzAsIDMuMjkyMjQwLCA4LjA3MzE1NyksIHZlYzQoLTQuMjU2MDM0LCAtMzA2LjE4MDMxMiwgOC41ODE5MDQsIC0xOC4xNzg2NzYpKSAqIGJ1Zls0XSArIG1hdDQodmVjNCgxLjQzNzY5OCwgLTQuODMyMDk1LCAzLjg1MzQ4MCwgLTYuMzQ4MjE3KSwgdmVjNCgxLjM1NDMzMSwgLTEuMjY0MDA0LCA5LjkzMjc1NCwgMy4xMTM0MTIpLCB2ZWM0KC01LjI5NDkwMiwgLTAuOTQ5NzA5LCAwLjEyODE0MiwgMy4zMjY5NjUpLCB2ZWM0KDI5LjczNTQyNCwgLTQuOTE4Mjc4LCA2LjEwNDQwOCwgNC4zNTAzMjMpKSAqIGJ1Zls1XSArIHZlYzQoNy40NDUyODcsIDEyLjE2MTYzMywgLTMuNzcwMzM5LCAtNC43NzUyMTQpOwoJCQlidWZbN10gPSBtYXQ0KHZlYzQoLTguMjY1NjAyLCAtNC43MDI3MDIsIDUuMDk4MjM0LCAwLjYwNjA4MSksIHZlYzQoNy42NTU4NjQsIC0xNy4xNTk0OTAsIDE2LjUxOTM5MCwgLTguODg0NDc5KSwgdmVjNCgtNC4wMzY0NzksIC0yLjM5NDY4NywgLTMuNjA4MjQ3LCAtMS45ODY2NTMpLCB2ZWM0KC0yLjIxNjc3NCwgLTEuODEzNTY1LCAtNS45NzU5ODcsIDQuODg0NjQ1KSkgKiBidWZbMF0gKyBtYXQ0KHZlYzQoNS4zOTM0MDksIDMuNTA3NjU1LCAtMi44MTkxMTMsIC0yLjcwMjg5NyksIHZlYzQoLTYuNzQ5NzIzLCAtMC4yNzg0NDksIDEuNDk1ODcwLCAtNS4wNTE3MTQpLCB2ZWM0KDEzLjEyMjIyNiwgMTYuNzM0NjMwLCAtMi45Mzk3NDgsIC00LjEwMTAyMyksIHZlYzQoLTE1LjM4MjE4NywgLTUuMDMwNDgzLCAtNi4yNTk5MzMsIDEuNTQ2OTczKSkgKiBidWZbMV0gKyBtYXQ0KHZlYzQoNS4yNzIwMzQsIC0wLjk0MDExNiwgLTUuMTcxMTQ0LCA0Ljc1NTAyMiksIHZlYzQoNS40NzQ4MzEsIDUuNTA4MDk3LCAxLjc0MjU5MSwgLTIuNTk2NzMxKSwgdmVjNCgzLjEwMDU0MywgMC4xNjM0MjYsIC0xMDQuNTYzNDEwLCAxNi45NDkxODQpLCB2ZWM0KC01LjU0MDIyNSwgLTIuMzkyMDAxLCAzLjgzNTAxMCwgLTEuOTM2NDI1KSkgKiBidWZbMl0gKyBtYXQ0KHZlYzQoLTYuMzIxMjU2LCAxLjc5NDYxMiwgLTEzLjYwNDE5MiwgLTMuODA2MDUyKSwgdmVjNCg2LjY1ODM0NiwgMzEuOTExMTc3LCAyNS4xNjQ0NzQsIDkyLjE3MjM3OCksIHZlYzQoMTIuMjk3NTczLCA0LjE1MDMwNCwgLTAuNzMxNDQwLCA2Ljc2ODQ2NyksIHZlYzQoLTUuNTYzOTU4LCA0LjAzNDc3MiwgNS44MjcxMjUsIDAuNTY1MzkyKSkgKiBidWZbM10gKyBtYXQ0KHZlYzQoMy40OTkyNDQsIC0xOTYuMjY4MTAwLCAtOS43Nzc0NTcsIDIuODE0MjYzKSwgdmVjNCgzLjQ4MDY1MCwgLTMuMTg0NjM1LCA1LjQ0MzAwOSwgNS4xODA0MjIpLCB2ZWM0KC0yLjg1ODc4MywgMTUuNTg1Nzk0LCAxLjI4NjM5NiwgMi4wMjUyMjgpLCB2ZWM0KC03MS4yNTI3MTAsIC02Mi40NDEyNDIsIC05LjUwOTU1MCwgMC41MDY3MDMpKSAqIGJ1Zls0XSArIG1hdDQodmVjNCgtMTIuMjI5MDUzLCAtMTAuODAwMDU2LCAtNy4zNDc0MTUsIDQuMzkwMjk0KSwgdmVjNCgxMC43ODI0MTIsIDUuNjMzNzM4LCAwLjI4MTU4MCwgLTQuNzM0ODcyKSwgdmVjNCgtMTMuNDIyODg0LCAtNy4wMzkzOTEsIDUuODYyNDQyLCA2LjkzNjI2NiksIHZlYzQoLTAuMDE2NzY2LCA4LjkxODk4MCwgMi45NzgxMTQsIDUuMTUwOTUyKSkgKiBidWZbNV0gKyB2ZWM0KDIuMjQxNTI3LCAtNi43MDU5ODcsIC0wLjk4ODYxMCwgLTMuMzUxNTA4KTsKCQkJYnVmWzZdID0gc2lnbW9pZChidWZbNl0pOwoJCQlidWZbN10gPSBzaWdtb2lkKGJ1Zls3XSk7CgoJCQlidWZbMF0gPSBtYXQ0KHZlYzQoMS42Nzk0MjYsIDEuMzgxNzQ3LCAyLjk2MjU0NSwgMC4wMDAwMDApLCB2ZWM0KC0xLjg4MzQ0MSwgLTEuNDgwNjk0LCAtMy41OTI0NTIsIDAuMjc2OTYyKSwgdmVjNCgtMS43NTA5NDQsIC0xLjA5MTgwNiwgLTIuMzEzMzUyLCAwLjAwMDAwMCksIHZlYzQoMC4yNjYyMjMsIDEuNDM0Njc0LCAwLjQ0MTc4NSwgMC4wMDAwMDApKSAqIGJ1ZlswXSArIG1hdDQodmVjNCgtMC42Mjk5MTAsIC0xLjYxMjI3MiwgLTAuNzcwNjAwLCAwLjAwMDAwMCksIHZlYzQoMC4xNzgyOTAsIDAuMTgzMDAyLCAxLjUxMjA4MywgMC4wMDAwMDApLCB2ZWM0KC0yLjk2NTQ0MCwgLTIuNTgxOTk0LCAtNC45MDAxMDUsIDAuMDAwMDAwKSwgdmVjNCgwLjg1NTU4NywgMS4xODY4MDgsIDIuNTE3NjMyLCAwLjAwMDAwMCkpICogYnVmWzFdICsgbWF0NCh2ZWM0KC0xLjI1ODQzNywgLTEuMDU1MjE2LCAtMi4xNjg4NDAsIC0wLjc4MDg2NSksIHZlYzQoLTAuNzIwMDIyLCAtMC41MjY2NjAsIC0xLjQzODI1MSwgMC4wMDAwMDApLCB2ZWM0KDAuMTUzNDUzLCAwLjE1MTk2MSwgMC4yNzI4NTQsIC0wLjc4MzA3OCksIHZlYzQoMS41ODcxNjIsIDAuODg2MTk0LCAwLjM2MzYwMywgMC4wMDAwMDApKSAqIGJ1ZlsyXSArIG1hdDQodmVjNCgtMS41NTkxODAsIC0wLjcxMTcwNCwgLTQuMzUxNjYwLCAwLjAxMjE3NiksIHZlYzQoLTIyLjY0MTE4NywgLTE4LjgzMTQ2OCwgLTQxLjk1NDM3MiwgMC4wMDAwMDApLCB2ZWM0KDAuNjM3OTIwLCAwLjU0NzA2NSwgMi4xODkzNDMsIC0xLjI5OTcwMiksIHZlYzQoLTEuNTQ4OTg5LCAtMS4zMDc1OTMsIC0xLjE5MzA3MywgMC4wMDAwMDApKSAqIGJ1ZlszXSArIG1hdDQodmVjNCgtMC40OTI1MjEsIDAuNTUyNjMzLCAtMS41NjE3MDIsIDEuMTgzOTM3KSwgdmVjNCgwLjk1NjA5MywgMC4yMjExMDEsIDEuNjQwMjIxLCAxLjE5OTg4MCksIHZlYzQoLTEuMDU2MDcxLCAtMi42NjQ4MjgsIDAuODYzOTg2LCAwLjAwMDAwMCksIHZlYzQoMS4xODI1OTgsIDAuNjUwNTg3LCAzLjQwNjMzMSwgMC4wMDAwMDApKSAqIGJ1Zls0XSArIG1hdDQodmVjNCgwLjM1NDQ2NywgMC4zMjkzNzksIC0wLjUzNzU2NCwgMS4yMTQ5MDYpLCB2ZWM0KDAuOTE4NDQ4LCAtMC40ODE3NzgsIC0xLjA2MTQ4MywgLTEuMjc0MjMxKSwgdmVjNCgyLjc5NjQ1MywgMS4wMDAxOTYsIDQuNjg0NjY1LCAwLjAwMDAwMCksIHZlYzQoMC4xMzA0MjYsIDEuMTEyMzE2LCAxLjQwODcxMCwgMC4wMDAwMDApKSAqIGJ1Zls1XSArIG1hdDQodmVjNCgtMC44MzQwODEsIC0xLjQwMzMxOSwgLTQuMTA0MDY3LCAwLjAwMDAwMCksIHZlYzQoMy4xNjY0MzYsIDIuNjM4Mjk3LCA0Ljk1NzYxNSwgMC44MzE0NjUpLCB2ZWM0KC0zLjE3MjQ3MSwgLTMuMjA0OTA1LCAtNS41NDkyOTUsIDAuMzIwMDE5KSwgdmVjNCgtMS45MDM0MDUsIC0yLjI0OTA5MiwgLTUuMzAxMzA3LCAwLjAwMDAwMCkpICogYnVmWzZdICsgbWF0NCh2ZWM0KDEuNTIwMzg0LCAtMS4xMDA4MzksIDQuMzE1Mjk5LCAwLjc4NTIzMCksIHZlYzQoMS41MjEwNTYsIDEuMjY1MTM1LCAyLjY4MzkwMywgMC4wMDAwMDApLCB2ZWM0KDIuOTc4OTQ3LCAyLjM3OTg0NywgNS4yMzQ3MjYsIDAuMDAwMDAwKSwgdmVjNCgyLjIyNzA0MiwgMS41NzU2NzYsIDMuODAyODY0LCAwLjg3OTgwOSkpICogYnVmWzddICsgdmVjNCgtMi45MDM5NjAsIC0zLjYxNzE0OCwgMS44NjUyNDcsIDAuMDAwMDAwKTsKCQkJYnVmWzBdID0gc2lnbW9pZChidWZbMF0pOwoKCQkJcmV0dXJuIHZlYzQoYnVmWzBdLnh5eiwgMS4wKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiB1diA9IHZVdiAqIDIuMCAtIDEuMDsKCQkJdXYueSAqPSAtMS4wOwoKCQkJdmVjNCBjb2xvciA9IGNwcG5fZm4odXYsIDAuMSAqIHNpbigwLjMgKiB1VGltZSksIDAuMSAqIHNpbigwLjY5ICogdVRpbWUpLCAwLjEgKiBzaW4oMC40NCAqIHVUaW1lKSk7CgoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgMS4wKTsKCQl9CglgOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoJCWNvbnN0IHVuaWZvcm1zID0gewoJCQl1VGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQl9OwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJdW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCQkJdW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGEgKiBzcGVlZDsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/pixelated-image/PixelatedImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9QaXhlbGF0ZWRJbWFnZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlzcmM6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBJbml0aWFsIGdyaWQgc2l6ZSBmb3IgdGhlIHBpeGVsYXRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWluaXRpYWxHcmlkU2l6ZT86IFNjZW5lUHJvcHNbImluaXRpYWxHcmlkU2l6ZSJdOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIGVhY2ggc3RlcCBpbiB0aGUgZGVwaXhlbGF0aW9uIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJc3RlcER1cmF0aW9uPzogU2NlbmVQcm9wc1sic3RlcER1cmF0aW9uIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCXNyYywKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJaW5pdGlhbEdyaWRTaXplID0gNi4wLAoJCXN0ZXBEdXJhdGlvbiA9IDAuMTUsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIGltYWdlPXtzcmN9IHtpbml0aWFsR3JpZFNpemV9IHtzdGVwRHVyYXRpb259IC8+Cgk8L2Rpdj4KPC9kaXY+Cg==", + "components/pixelated-image/PixelatedImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBJbml0aWFsIGdyaWQgc2l6ZSBmb3IgdGhlIHBpeGVsYXRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWluaXRpYWxHcmlkU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBEdXJhdGlvbiBvZiBlYWNoIHN0ZXAgaW4gdGhlIGRlcGl4ZWxhdGlvbiBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMC4xNQoJCSAqLwoJCXN0ZXBEdXJhdGlvbj86IG51bWJlcjsKCX0KCglsZXQgeyBpbWFnZSwgaW5pdGlhbEdyaWRTaXplID0gNi4wLCBzdGVwRHVyYXRpb24gPSAwLjE1IH06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVHcmlkU2l6ZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUlzRG9uZTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgc2V0SW1hZ2VTb3VyY2UgPSAkc3RhdGU8KHNvdXJjZTogc3RyaW5nKSA9PiB2b2lkPigpOwoJbGV0IHJlc2V0QW5pbWF0aW9uID0gJHN0YXRlPCgpID0+IHZvaWQ+KCk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCQl1bmlmb3JtIGZsb2F0IHVHcmlkU2l6ZTsKCQl1bmlmb3JtIGZsb2F0IHVJc0RvbmU7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzYWZlVGV4dHVyZSA9IG1heCh0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyBzYWZlVGV4dHVyZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSBzYWZlVGV4dHVyZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb247CgkJCWZsb2F0IHJzID0gcy54IC8gbWF4KHMueSwgMC4wMDAwMSk7CgoJCQl2ZWMyIGdyaWQgPSB2ZWMyKHVHcmlkU2l6ZSAqIHJzLCB1R3JpZFNpemUpOwoJCQl2ZWMyIHBpeGVsYXRlZFNjcmVlblV2ID0gZmxvb3IodlV2ICogZ3JpZCkgLyBncmlkICsgKDAuNSAvIGdyaWQpOwoKCQkJdmVjMiBmaW5hbFV2ID0gbWl4KHBpeGVsYXRlZFNjcmVlblV2LCB2VXYsIGNsYW1wKHVJc0RvbmUsIDAuMCwgMS4wKSk7CgkJCXZlYzIgY292ZXJVdiA9IGdldENvdmVyVVYoZmluYWxVdiwgdVRleHR1cmVTaXplKTsKCgkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgY292ZXJVdik7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlKSByZXR1cm47CgkJc2V0SW1hZ2VTb3VyY2UoaW1hZ2UpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFyZXNldEFuaW1hdGlvbikgcmV0dXJuOwoJCXJlc2V0QW5pbWF0aW9uKCk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW1hZ2VUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCW1hZ0ZpbHRlcjogZ2wuTkVBUkVTVCwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCB0ZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVUZXh0dXJlOiB7IHZhbHVlOiBpbWFnZVRleHR1cmUgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogdGV4dHVyZVNpemVVbmlmb3JtIH0sCgkJCXVHcmlkU2l6ZTogeyB2YWx1ZTogTWF0aC5tYXgoMSwgaW5pdGlhbEdyaWRTaXplKSB9LAoJCQl1SXNEb25lOiB7IHZhbHVlOiAwIH0sCgkJfTsKCgkJbGV0IGN1cnJlbnRHcmlkU2l6ZSA9IE1hdGgubWF4KDEsIGluaXRpYWxHcmlkU2l6ZSk7CgkJbGV0IGlzRG9uZSA9IGZhbHNlOwoJCWxldCBlbGFwc2VkID0gMDsKCgkJY29uc3QgcmVzZXRTdGF0ZSA9ICgpID0+IHsKCQkJY3VycmVudEdyaWRTaXplID0gTWF0aC5tYXgoMSwgaW5pdGlhbEdyaWRTaXplKTsKCQkJaXNEb25lID0gZmFsc2U7CgkJCWVsYXBzZWQgPSAwOwoJCQlpbWFnZVRleHR1cmUubWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKCQkJaW1hZ2VUZXh0dXJlLm1hZ0ZpbHRlciA9IGdsLk5FQVJFU1Q7CgkJCWltYWdlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJCWxvY2FsVW5pZm9ybXMudUdyaWRTaXplLnZhbHVlID0gY3VycmVudEdyaWRTaXplOwoJCQlsb2NhbFVuaWZvcm1zLnVJc0RvbmUudmFsdWUgPSAwOwoJCX07CgkJcmVzZXRBbmltYXRpb24gPSByZXNldFN0YXRlOwoKCQlsZXQgaW1hZ2VUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEltYWdlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWltYWdlVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZVRva2VuOwoJCQljb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKCQkJaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCWltZy5kZWNvZGluZyA9ICJhc3luYyI7CgkJCWltZy5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IGltYWdlVG9rZW4pIHJldHVybjsKCQkJCWltYWdlVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCXRleHR1cmVTaXplVW5pZm9ybS5zZXQoCgkJCQkJaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMSwKCQkJCQlpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcuaGVpZ2h0IHx8IDEsCgkJCQkpOwoJCQkJcmVzZXRTdGF0ZSgpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgkJc2V0SW1hZ2VTb3VyY2UgPSBsb2FkSW1hZ2U7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoKCQkJaWYgKCFpc0RvbmUpIHsKCQkJCWVsYXBzZWQgKz0gZGVsdGE7CgkJCQljb25zdCBzYWZlU3RlcER1cmF0aW9uID0gTWF0aC5tYXgoMC4wMDAxLCBzdGVwRHVyYXRpb24pOwoJCQkJY29uc3Qgc3RlcCA9IE1hdGguZmxvb3IoZWxhcHNlZCAvIHNhZmVTdGVwRHVyYXRpb24pOwoJCQkJY29uc3QgbmV4dEdyaWQgPSBNYXRoLm1heCgxLCBpbml0aWFsR3JpZFNpemUgKiBNYXRoLnBvdygyLCBzdGVwKSk7CgkJCQljdXJyZW50R3JpZFNpemUgPSBuZXh0R3JpZDsKCgkJCQlpZiAoY3VycmVudEdyaWRTaXplID4gcmVzb2x1dGlvblVuaWZvcm0ueSkgewoJCQkJCWlzRG9uZSA9IHRydWU7CgkJCQkJaW1hZ2VUZXh0dXJlLm1pbkZpbHRlciA9IGdsLkxJTkVBUjsKCQkJCQlpbWFnZVRleHR1cmUubWFnRmlsdGVyID0gZ2wuTElORUFSOwoJCQkJCWltYWdlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJCQl9CgkJCX0KCgkJCWxvY2FsVW5pZm9ybXMudUdyaWRTaXplLnZhbHVlID0gY3VycmVudEdyaWRTaXplOwoJCQlsb2NhbFVuaWZvcm1zLnVJc0RvbmUudmFsdWUgPSBpc0RvbmUgPyAxIDogMDsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJc2V0SW1hZ2VTb3VyY2UgPSB1bmRlZmluZWQ7CgkJCXJlc2V0QW5pbWF0aW9uID0gdW5kZWZpbmVkOwoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/plasma-grid/PlasmaGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9QbGFzbWFHcmlkU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBiYXNlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiIzExMTExMyIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogVGhlIGNvbG9yIHVzZWQgZm9yIHRoZSBwbGFzbWEgbm9pc2UgZ3JhZGllbnRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWhpZ2hsaWdodENvbG9yPzogU2NlbmVQcm9wc1siaGlnaGxpZ2h0Q29sb3IiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljb2xvciwKCQloaWdobGlnaHRDb2xvciwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIHtjb2xvcn0ge2hpZ2hsaWdodENvbG9yfSAvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/plasma-grid/PlasmaGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMywKCX0gZnJvbSAib2dsIjsKCgl0eXBlIENvbG9yUmVwcmVzZW50YXRpb24gPQoJCXwgc3RyaW5nCgkJfCBudW1iZXIKCQl8IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXQoJCXwgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgYmFzZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIFRoZSBjb2xvciB1c2VkIGZvciB0aGUgcGxhc21hIG5vaXNlIGdyYWRpZW50cy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQloaWdobGlnaHRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247Cgl9CgoJbGV0IHsgY29sb3IgPSAiIzExMTExMyIsIGhpZ2hsaWdodENvbG9yID0gIiNGRjY5MDAiIH06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTx7CgkJdV90aW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1X3Jlc29sdXRpb246IHsgdmFsdWU6IFZlYzMgfTsKCQl1X2Jhc2VDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVfZ3JhZGllbnRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJfT4oKTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKCWNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCgkJcjogbnVtYmVyLAoJCWc6IG51bWJlciwKCQliOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgociwgZywgYikgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwoJfTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSk7Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHsKCQkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJCXJldHVybiBbCgkJCQkoKGludCA+PiAxNikgJiAyNTUpIC8gMjU1LAoJCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkJKGludCAmIDI1NSkgLyAyNTUsCgkJCV07CgkJfQoKCQlpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewoJCQljb25zdCBoZXggPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IGhleC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcihoZXgpCgkJCQk6IHBhcnNlQ3NzQ29sb3IoaGV4KTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgoJCWlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gMykgewoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldCh2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTsKCQl9CgoJCWlmICgKCQkJdmFsdWUgJiYKCQkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCQkiciIgaW4gdmFsdWUgJiYKCQkJImciIGluIHZhbHVlICYmCgkJCSJiIiBpbiB2YWx1ZQoJCSkgewoJCQljb25zdCByZ2IgPSB2YWx1ZSBhcyB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7CgkJfQoKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3QgYXBwbHlDb2xvciA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJdGFyZ2V0LnNldChyLCBnLCBiKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBmbG9hdCB1X3RpbWU7CgkJdW5pZm9ybSB2ZWMzIHVfcmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdV9iYXNlQ29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVfZ3JhZGllbnRDb2xvcjsKCgkJZmxvYXQgcmFuZCh2ZWMyIHApIHsKCQkJcmV0dXJuIGZyYWN0KHNpbihkb3QocCwgdmVjMigxMi41NDMsNTE0LjEyMykpKSo0NzMyLjEyKTsKCQl9CgoJCWZsb2F0IG5vaXNlKHZlYzIgcCkgewoJCQl2ZWMyIGYgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBmcmFjdChwKSk7CgkJCXZlYzIgaSA9IGZsb29yKHApOwoJCQlmbG9hdCBhID0gcmFuZChpKTsKCQkJZmxvYXQgYiA9IHJhbmQoaSt2ZWMyKDEuMCwwLjApKTsKCQkJZmxvYXQgYyA9IHJhbmQoaSt2ZWMyKDAuMCwxLjApKTsKCQkJZmxvYXQgZCA9IHJhbmQoaSt2ZWMyKDEuMCwxLjApKTsKCQkJcmV0dXJuIG1peChtaXgoYSwgYiwgZi54KSwgbWl4KGMsIGQsIGYueCksIGYueSk7CgkJfQoKCQl2b2lkIG1haW5JbWFnZSggb3V0IHZlYzQgZnJhZ0NvbG9yLCBpbiB2ZWMyIGZyYWdDb29yZCApIHsKCQkJZmxvYXQgbiA9IDIuMDsKCQkJdmVjMiB1diA9IGZyYWdDb29yZC91X3Jlc29sdXRpb24ueTsKCQkJdmVjMiB1dnAgPSBmcmFnQ29vcmQvdV9yZXNvbHV0aW9uLnh5OwoJCQl1diArPSAwLjc1Km5vaXNlKHV2KjMuMCt1X3RpbWUvMi4wK25vaXNlKHV2KjcuMC11X3RpbWUvMy4wKS8yLjApLzIuMDsKCgkJCWZsb2F0IGdyaWQgPSAobW9kKGZsb29yKCh1dnAueCkqdV9yZXNvbHV0aW9uLngvbiksMi4wKT09MC4wPzEuMDowLjApICoKCQkJCQkJIChtb2QoZmxvb3IoKHV2cC55KSp1X3Jlc29sdXRpb24ueS9uKSwyLjApPT0wLjA/MS4wOjAuMCk7CgoJCQl2ZWMzIGNvbCA9IG1peCh1X2Jhc2VDb2xvciwgdV9ncmFkaWVudENvbG9yLAoJCQkJCQkgICA1LjAgKiB2ZWMzKHBvdygxLjAtbm9pc2UodXYqNC4wLXZlYzIoMC4wLCB1X3RpbWUvMi4wKSksIDUuMCkpKTsKCgkJCWNvbCA9IHBvdyhjb2wsIHZlYzMoMS4wKSk7CgkJCWZsb2F0IGFscGhhID0gZ3JpZDsKCQkJZnJhZ0NvbG9yID0gdmVjNChjb2wsIGFscGhhKTsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQl2ZWMyIGZyYWdDb29yZCA9IHZVdiAqIHVfcmVzb2x1dGlvbi54eTsKCQkJbWFpbkltYWdlKGZyYWdDb2xvciwgZnJhZ0Nvb3JkKTsKCQkJZnJhZ0NvbG9yLnJnYiA9IGxpbmVhclRvU3JnYihmcmFnQ29sb3IucmdiKTsKCQkJZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudV9iYXNlQ29sb3IudmFsdWUsIGNvbG9yLCBbCgkJCTE3IC8gMjU1LAoJCQkxNyAvIDI1NSwKCQkJMTkgLyAyNTUsCgkJXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51X2dyYWRpZW50Q29sb3IudmFsdWUsIGhpZ2hsaWdodENvbG9yLCBbCgkJCTEsCgkJCTEwNSAvIDI1NSwKCQkJMCwKCQldKTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbml0aWFsQmFzZUNvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxNyAvIDI1NSwgMTcgLyAyNTUsIDE5IC8gMjU1XSk7CgkJY29uc3QgaW5pdGlhbEhpZ2hsaWdodENvbG9yID0gdG9MaW5lYXJSZ2IoaGlnaGxpZ2h0Q29sb3IsIFsKCQkJMSwKCQkJMTA1IC8gMjU1LAoJCQkwLAoJCV0pOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zID0gewoJCQl1X3RpbWU6IHsgdmFsdWU6IDAgfSwKCQkJdV9yZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMygxLCAxLCAxKSB9LAoJCQl1X2Jhc2VDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYXNlQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEJhc2VDb2xvclsxXSwKCQkJCQlpbml0aWFsQmFzZUNvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdV9ncmFkaWVudENvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoCgkJCQkJaW5pdGlhbEhpZ2hsaWdodENvbG9yWzBdLAoJCQkJCWluaXRpYWxIaWdobGlnaHRDb2xvclsxXSwKCQkJCQlpbml0aWFsSGlnaGxpZ2h0Q29sb3JbMl0sCgkJCQkpLAoJCQl9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogdHJ1ZSwKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgeyBnZW9tZXRyeSwgcHJvZ3JhbSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVfcmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCwgMSk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVfdGltZS52YWx1ZSArPSBkZWx0YSAqIDAuNTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", "components/preloader/Preloader.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgb25Nb3VudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgSW1hZ2UgewoJCXNyYzogc3RyaW5nOwoJCWFsdD86IHN0cmluZzsKCX0KCglpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMgewoJCS8qKgoJCSAqIEFycmF5IG9mIGltYWdlcyB0byBwcmVsb2FkL2Rpc3BsYXkgZHVyaW5nIHRoZSBzZXF1ZW5jZS4KCQkgKi8KCQlpbWFnZXM6IEltYWdlW107CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB0aGUgcHJlbG9hZGluZyBhbmltYXRpb24gY29tcGxldGVzLgoJCSAqLwoJCW9uQ29tcGxldGU/OiAoKSA9PiB2b2lkOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlvbkNvbXBsZXRlLAoJCS4uLnJlc3RQcm9wcwoJfTogQ29tcG9uZW50UHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY29udGFpbmVyUmVmID0gJHN0YXRlPEhUTUxFbGVtZW50PigpOwoJbGV0IHJldmVhbEltYWdlc1JlZjogSFRNTEVsZW1lbnRbXSA9ICRzdGF0ZShbXSk7CglsZXQgaXNTY2FsZVVwUmVmOiBIVE1MRWxlbWVudFtdID0gJHN0YXRlKFtdKTsKCWxldCBzZWNvbmRMb29wSW1hZ2VzUmVmOiBIVE1MSW1hZ2VFbGVtZW50W10gPSAkc3RhdGUoW10pOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lclJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lclJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaFJldmVhbEltYWdlUmVmID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCXJldmVhbEltYWdlc1JlZltpbmRleF0gPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hTY2FsZVVwUmVmID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWlzU2NhbGVVcFJlZltpbmRleF0gPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hTZWNvbmRMb29wSW1hZ2VSZWYgPQoJCShpbmRleDogbnVtYmVyKSA9PiAobm9kZTogSFRNTEltYWdlRWxlbWVudCkgPT4gewoJCQlzZWNvbmRMb29wSW1hZ2VzUmVmW2luZGV4XSA9IG5vZGU7CgkJfTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCBtaWRkbGVJbmRleCA9IE1hdGguZmxvb3IoaW1hZ2VzLmxlbmd0aCAvIDIpOwoJCWNvbnN0IHJhZGl1c1RhcmdldCA9IGlzU2NhbGVVcFJlZltpbWFnZXMubGVuZ3RoICsgbWlkZGxlSW5kZXhdOwoJCWNvbnN0IGlzU2NhbGVEb3duVGFyZ2V0cyA9IHNlY29uZExvb3BJbWFnZXNSZWYuZmlsdGVyKAoJCQkoXywgaSkgPT4gaSAhPT0gbWlkZGxlSW5kZXgsCgkJKTsKCgkJY29uc3QgdGwgPSBnc2FwLnRpbWVsaW5lKHsKCQkJZGVmYXVsdHM6IHsKCQkJCWVhc2U6ICJleHBvLmluT3V0IiwKCQkJfSwKCQkJb25Db21wbGV0ZTogKCkgPT4gewoJCQkJaWYgKG9uQ29tcGxldGUpIG9uQ29tcGxldGUoKTsKCQkJCWlmIChjb250YWluZXJSZWYpIGNvbnRhaW5lclJlZi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwoJCQl9LAoJCX0pOwoKCQlpZiAocmV2ZWFsSW1hZ2VzUmVmLmxlbmd0aCkgewoJCQl0bC5mcm9tVG8oCgkJCQlyZXZlYWxJbWFnZXNSZWYsCgkJCQl7CgkJCQkJeFBlcmNlbnQ6IDUwMCwKCQkJCX0sCgkJCQl7CgkJCQkJeFBlcmNlbnQ6IC01MDAsCgkJCQkJZHVyYXRpb246IDIuNSwKCQkJCQlzdGFnZ2VyOiAwLjA1LAoJCQkJfSwKCQkJKTsKCQl9CgoJCWlmIChpc1NjYWxlRG93blRhcmdldHMubGVuZ3RoKSB7CgkJCXRsLnRvKAoJCQkJaXNTY2FsZURvd25UYXJnZXRzLAoJCQkJewoJCQkJCXNjYWxlOiAwLjUsCgkJCQkJZHVyYXRpb246IDIsCgkJCQkJc3RhZ2dlcjogewoJCQkJCQllYWNoOiAwLjA1LAoJCQkJCQlmcm9tOiAiZWRnZXMiLAoJCQkJCQllYXNlOiAibm9uZSIsCgkJCQkJfSwKCQkJCQlvbkNvbXBsZXRlOiAoKSA9PiB7CgkJCQkJCWlmIChyYWRpdXNUYXJnZXQpIHsKCQkJCQkJCXJhZGl1c1RhcmdldC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAiMCI7CgkJCQkJCX0KCQkJCQl9LAoJCQkJfSwKCQkJCSItPTAuMSIsCgkJCSk7CgkJfQoKCQlpZiAoaXNTY2FsZVVwUmVmLmxlbmd0aCkgewoJCQl0bC5mcm9tVG8oCgkJCQlpc1NjYWxlVXBSZWYsCgkJCQl7CgkJCQkJd2lkdGg6ICIxMGVtIiwKCQkJCQloZWlnaHQ6ICIxMGVtIiwKCQkJCX0sCgkJCQl7CgkJCQkJd2lkdGg6ICIxMDB2dyIsCgkJCQkJaGVpZ2h0OiAiMTAwZHZoIiwKCQkJCQlkdXJhdGlvbjogMiwKCQkJCX0sCgkJCQkiPCAwLjUiLAoJCQkpOwoJCX0KCgkJcmV0dXJuICgpID0+IHsKCQkJdGwua2lsbCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8ZGl2Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJSZWZ9CgljbGFzcz17Y24oCgkJImZpeGVkIGluc2V0LTAgei05OTkgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIiwKCQljbGFzc05hbWUsCgkpfQoJey4uLnJlc3RQcm9wc30KPgoJPGRpdgoJCWNsYXNzPSJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIKCQlzdHlsZT0ibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgYmxhY2sgNWVtLCBibGFjayBjYWxjKDEwMCUgLSA1ZW0pLCB0cmFuc3BhcmVudCk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgYmxhY2sgNWVtLCBibGFjayBjYWxjKDEwMCUgLSA1ZW0pLCB0cmFuc3BhcmVudCk7IgoJPgoJCTxkaXYgY2xhc3M9InJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiI+CgkJCTxkaXYgY2xhc3M9ImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzAuNWVtXSI+CgkJCQl7I2VhY2ggaW1hZ2VzIGFzIGltYWdlLCBpIChpbWFnZS5zcmMpfQoJCQkJCTxkaXYge0BhdHRhY2ggYXR0YWNoUmV2ZWFsSW1hZ2VSZWYoaSl9IGNsYXNzPSJyZWxhdGl2ZSBweC1bMWVtXSI+CgkJCQkJCTxkaXYKCQkJCQkJCXtAYXR0YWNoIGF0dGFjaFNjYWxlVXBSZWYoaSl9CgkJCQkJCQljbGFzcz0icmVsYXRpdmUgZmxleCBoLVsxMGVtXSB3LVsxMGVtXSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1bMC41ZW1dIgoJCQkJCQk+CgkJCQkJCQk8aW1nCgkJCQkJCQkJbG9hZGluZz0iZWFnZXIiCgkJCQkJCQkJc3JjPXtpbWFnZS5zcmN9CgkJCQkJCQkJYWx0PXtpbWFnZS5hbHQgPz8gIiJ9CgkJCQkJCQkJY2xhc3M9ImFic29sdXRlIGgtZnVsbCB3LWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gb2JqZWN0LWNvdmVyIgoJCQkJCQkJLz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQl7L2VhY2h9CgkJCTwvZGl2PgoKCQkJPGRpdgoJCQkJY2xhc3M9InJlbGF0aXZlIGxlZnQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLVswLjVlbV0iCgkJCT4KCQkJCXsjZWFjaCBpbWFnZXMgYXMgaW1hZ2UsIGkgKGltYWdlLnNyYyl9CgkJCQkJe0Bjb25zdCBpc01pZGRsZSA9IGkgPT09IE1hdGguZmxvb3IoaW1hZ2VzLmxlbmd0aCAvIDIpfQoJCQkJCTxkaXYKCQkJCQkJe0BhdHRhY2ggYXR0YWNoUmV2ZWFsSW1hZ2VSZWYoaW1hZ2VzLmxlbmd0aCArIGkpfQoJCQkJCQljbGFzcz0icmVsYXRpdmUgcHgtWzFlbV0iCgkJCQkJPgoJCQkJCQk8ZGl2CgkJCQkJCQl7QGF0dGFjaCBhdHRhY2hTY2FsZVVwUmVmKGltYWdlcy5sZW5ndGggKyBpKX0KCQkJCQkJCWNsYXNzOmlzLS1yYWRpdXM9e2lzTWlkZGxlfQoJCQkJCQkJc3R5bGU9e2lzTWlkZGxlCgkJCQkJCQkJPyAidHJhbnNpdGlvbjogYm9yZGVyLXJhZGl1cyAwLjVzIGN1YmljLWJlemllcigxLCAwLCAwLCAxKTsiCgkJCQkJCQkJOiAiIn0KCQkJCQkJCWNsYXNzPSJyZWxhdGl2ZSBmbGV4IGgtWzEwZW1dIHctWzEwZW1dIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLVswLjVlbV0ge2lzTWlkZGxlCgkJCQkJCQkJPyAnd2lsbC1jaGFuZ2UtdHJhbnNmb3JtJwoJCQkJCQkJCTogJyd9IgoJCQkJCQk+CgkJCQkJCQk8aW1nCgkJCQkJCQkJe0BhdHRhY2ggYXR0YWNoU2Vjb25kTG9vcEltYWdlUmVmKGkpfQoJCQkJCQkJCWxvYWRpbmc9ImVhZ2VyIgoJCQkJCQkJCXNyYz17aW1hZ2Uuc3JjfQoJCQkJCQkJCWFsdD17aW1hZ2UuYWx0ID8/ICIifQoJCQkJCQkJCWNsYXNzPSJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIG9iamVjdC1jb3ZlciB7aXNNaWRkbGUKCQkJCQkJCQkJPyAnJwoJCQkJCQkJCQk6ICd3aWxsLWNoYW5nZS10cmFuc2Zvcm0nfSIKCQkJCQkJCS8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJey9lYWNofQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTwvZGl2Pgo8L2Rpdj4K", "components/radial-gallery/RadialGallery.svelte": "PHNjcmlwdCBsYW5nPSJ0cyIgZ2VuZXJpY3M9IlQiPgoJaW1wb3J0IHsgb25Nb3VudCwgb25EZXN0cm95IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFByb3BzPFQ+IHsKCQkvKioKCQkgKiBBcnJheSBvZiBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBnYWxsZXJ5LgoJCSAqLwoJCWl0ZW1zOiBUW107CgkJLyoqCgkJICogU25pcHBldCB0byByZW5kZXIgZWFjaCBpdGVtLiBSZWNlaXZlcyB0aGUgaXRlbSBhbmQgaXRzIGluZGV4LgoJCSAqLwoJCWNoaWxkcmVuOiBTbmlwcGV0PFtULCBudW1iZXJdPjsKCQkvKioKCQkgKiBSYWRpdXMgb2YgdGhlIGNpcmN1bGFyIGdhbGxlcnkgaW4gcGl4ZWxzLgoJCSAqIEBkZWZhdWx0IDYwMAoJCSAqLwoJCXJhZGl1cz86IG51bWJlcjsKCQkvKioKCQkgKiBEdXJhdGlvbiBvZiBvbmUgZnVsbCByb3RhdGlvbiBpbiBzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDIwCgkJICovCgkJZHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogV2hldGhlciB0byByb3RhdGUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCXJldmVyc2VkPzogYm9vbGVhbjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGNpcmNsZSBjZW50ZXIgZnJvbSB0aGUgYm90dG9tIGluIHBpeGVscy4KCQkgKiBAZGVmYXVsdCAwCgkJICovCgkJb2Zmc2V0PzogbnVtYmVyOwoJCS8qKgoJCSAqIEdhcCBiZXR3ZWVuIGl0ZW1zIGluIHBpeGVscy4KCQkgKiBAZGVmYXVsdCAwCgkJICovCgkJZ2FwPzogbnVtYmVyOwoJCS8qKgoJCSAqIEVzdGltYXRlZCBzaXplIG9mIGVhY2ggZWxlbWVudCAod2lkdGgpIGZvciBjYWxjdWxhdGlvbi4KCQkgKiBAZGVmYXVsdCAxMDAKCQkgKi8KCQllbGVtZW50U2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJfQoKCWxldCB7CgkJaXRlbXMsCgkJY2hpbGRyZW4sCgkJcmFkaXVzID0gNjAwLAoJCWR1cmF0aW9uID0gMjAsCgkJcmV2ZXJzZWQgPSBmYWxzZSwKCQlvZmZzZXQgPSAwLAoJCWdhcCA9IDAsCgkJZWxlbWVudFNpemUgPSAxMDAsCgkJY2xhc3M6IGNsYXNzTmFtZSwKCX06IFByb3BzPFQ+ID0gJHByb3BzKCk7CgoJbGV0IGNvbnRhaW5lciA9ICRzdGF0ZTxIVE1MRGl2RWxlbWVudD4oKTsKCWxldCB0d2VlbjogZ3NhcC5jb3JlLlR3ZWVuOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lciA9IChub2RlOiBIVE1MRGl2RWxlbWVudCkgPT4gewoJCWNvbnRhaW5lciA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKGNvbnRhaW5lciA9PT0gbm9kZSkgewoJCQkJY29udGFpbmVyID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJbGV0IGRpc3BsYXlJdGVtcyA9ICRkZXJpdmVkLmJ5KCgpID0+IHsKCQljb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiByYWRpdXM7CgkJY29uc3Qgc3BhY2VQZXJJdGVtID0gZWxlbWVudFNpemUgKyBnYXA7CgkJY29uc3QgbmVlZGVkSXRlbXMgPSBNYXRoLmNlaWwoY2lyY3VtZmVyZW5jZSAvIHNwYWNlUGVySXRlbSk7CgoJCWNvbnN0IHJlcGVhdHMgPSBNYXRoLmNlaWwobmVlZGVkSXRlbXMgLyBpdGVtcy5sZW5ndGgpOwoJCXJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiByZXBlYXRzIH0sIChfLCByKSA9PgoJCQlpdGVtcy5tYXAoKGl0ZW0sIGkpID0+ICh7IGl0ZW0sIGtleTogYCR7cn0tJHtpfWAgfSkpLAoJCSkuZmxhdCgpOwoJfSk7CgoJbGV0IGFuZ2xlU3RlcCA9ICRkZXJpdmVkKDM2MCAvIGRpc3BsYXlJdGVtcy5sZW5ndGgpOwoKCW9uTW91bnQoKCkgPT4gewoJCWlmICghY29udGFpbmVyKSByZXR1cm47CgoJCXR3ZWVuID0gZ3NhcC50byhjb250YWluZXIsIHsKCQkJcm90YXRpb246IHJldmVyc2VkID8gLTM2MCA6IDM2MCwKCQkJZHVyYXRpb24sCgkJCXJlcGVhdDogLTEsCgkJCWVhc2U6ICJub25lIiwKCQl9KTsKCgkJcmV0dXJuICgpID0+IHR3ZWVuPy5raWxsKCk7Cgl9KTsKCglvbkRlc3Ryb3koKCkgPT4gdHdlZW4/LmtpbGwoKSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJdHdlZW4/LmR1cmF0aW9uKGR1cmF0aW9uKTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYKCWNsYXNzPXtjbigKCQkicmVsYXRpdmUgZmxleCBoLWZ1bGwgdy1mdWxsIGl0ZW1zLWVuZCBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4iLAoJCWNsYXNzTmFtZSwKCSl9Cj4KCTxkaXYKCQl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJ9CgkJY2xhc3M9ImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgoJCXN0eWxlOndpZHRoPSJ7cmFkaXVzICogMn1weCIKCQlzdHlsZTpoZWlnaHQ9IntyYWRpdXMgKiAyfXB4IgoJCXN0eWxlOmJvdHRvbT0ie29mZnNldCAtIHJhZGl1c31weCIKCT4KCQl7I2VhY2ggZGlzcGxheUl0ZW1zIGFzIHsgaXRlbSwga2V5IH0sIGkgKGtleSl9CgkJCTxkaXYKCQkJCWNsYXNzPSJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiIKCQkJCXN0eWxlOnRyYW5zZm9ybT0icm90YXRlKHtpICogYW5nbGVTdGVwfWRlZykgdHJhbnNsYXRlKDAsIC17cmFkaXVzfXB4KQoJCQkJcm90YXRlKDkwZGVnKSIKCQkJPgoJCQkJPGRpdiBzdHlsZTp0cmFuc2Zvcm09InJvdGF0ZSgtOTBkZWcpIj4KCQkJCQl7QHJlbmRlciBjaGlsZHJlbihpdGVtLCBpKX0KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQl7L2VhY2h9Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/rubiks-cube/RubiksCube.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1J1Ymlrc0N1YmVTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIHNpemUgb2YgdGhlIGluZGl2aWR1YWwgY3ViZWxldHMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNpemU/OiBTY2VuZVByb3BzWyJzaXplIl07CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIHJvdGF0aW9uIGFuaW1hdGlvbiBpbiBzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDEuNQoJCSAqLwoJCWR1cmF0aW9uPzogU2NlbmVQcm9wc1siZHVyYXRpb24iXTsKCQkvKioKCQkgKiBHYXAgYmV0d2VlbiB0aGUgY3ViZWxldHMuCgkJICogQGRlZmF1bHQgMC4wMTUKCQkgKi8KCQlnYXA/OiBTY2VuZVByb3BzWyJnYXAiXTsKCQkvKioKCQkgKiBDb3JuZXIgcmFkaXVzIG9mIHRoZSBjdWJlbGV0cy4KCQkgKiBAZGVmYXVsdCAwLjEyNQoJCSAqLwoJCXJhZGl1cz86IFNjZW5lUHJvcHNbInJhZGl1cyJdOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogU2NlbmVQcm9wc1siZnJlc25lbENvbmZpZyJdOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXNpemUgPSAxLAoJCWR1cmF0aW9uID0gMS41LAoJCWdhcCA9IDAuMDE1LAoJCXJhZGl1cyA9IDAuMTI1LAoJCWZyZXNuZWxDb25maWcsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBkcHIgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPENhbnZhcyB7ZHByfSB0b25lTWFwcGluZz17Tm9Ub25lTWFwcGluZ30+CgkJCTxTY2VuZSB7c2l6ZX0ge2R1cmF0aW9ufSB7Z2FwfSB7cmFkaXVzfSB7ZnJlc25lbENvbmZpZ30gLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/rubiks-cube/RubiksCubeScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBPcmJpdENvbnRyb2xzIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCWltcG9ydCB7IFJvdW5kZWRCb3hHZW9tZXRyeSB9IGZyb20gInRocmVlL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1JvdW5kZWRCb3hHZW9tZXRyeS5qcyI7CglpbXBvcnQgeyBTdmVsdGVTZXQgfSBmcm9tICJzdmVsdGUvcmVhY3Rpdml0eSI7CgoJaW50ZXJmYWNlIEZyZXNuZWxDb25maWcgewoJCS8qKgoJCSAqIEJhc2UgYm9keSBjb2xvciBmb3IgZWFjaCBjdWJlbGV0LgoJCSAqIEBkZWZhdWx0ICIjMTExMTEzIgoJCSAqLwoJCWNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBBY2NlbnQgY29sb3IgYXBwbGllZCBieSB0aGUgRnJlc25lbCByaW0uCgkJICogQGRlZmF1bHQgIiNGRjY5MDAiCgkJICovCgkJcmltQ29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIENvbnRyb2xzIGhvdyB0aWdodCB0aGUgRnJlc25lbCByaW0gaHVnIGlzLgoJCSAqIEhpZ2hlciB2YWx1ZXMgeWllbGQgYSB0aGlubmVyIG91dGxpbmUuCgkJICogQGRlZmF1bHQgNgoJCSAqLwoJCXJpbVBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIEludGVuc2l0eSBtdWx0aXBsaWVyIGZvciB0aGUgRnJlc25lbCByaW0gY29sb3IuCgkJICogQGRlZmF1bHQgMS41CgkJICovCgkJcmltSW50ZW5zaXR5PzogbnVtYmVyOwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogU2l6ZSBvZiBhbiBpbmRpdmlkdWFsIGN1YmVsZXQgZWRnZS4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJc2l6ZTogbnVtYmVyOwoJCS8qKgoJCSAqIFNlY29uZHMgaXQgdGFrZXMgdG8gY29tcGxldGUgYSBmYWNlIHJvdGF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuNQoJCSAqLwoJCWR1cmF0aW9uOiBudW1iZXI7CgkJLyoqCgkJICogR2FwIGJldHdlZW4gY3ViZWxldHMgdG8gYWNjZW50dWF0ZSBzZXBhcmF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuMDE1CgkJICovCgkJZ2FwOiBudW1iZXI7CgkJLyoqCgkJICogQ29ybmVyIHJhZGl1cyBmb3Igc29mdGVuZWQgY3ViZSBlZGdlcy4KCQkgKiBAZGVmYXVsdCAwLjEyNQoJCSAqLwoJCXJhZGl1czogbnVtYmVyOwoJCS8qKgoJCSAqIE9wdGlvbmFsIG92ZXJyaWRlcyBmb3IgdGhlIEZyZXNuZWwgc2hhZGVyIHVuaWZvcm1zLgoJCSAqLwoJCWZyZXNuZWxDb25maWc/OiBGcmVzbmVsQ29uZmlnOwoJfQoKCWxldCB7IHNpemUsIGR1cmF0aW9uLCBnYXAsIHJhZGl1cywgZnJlc25lbENvbmZpZyA9IHt9IH06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBNb3ZlID0gewoJCWF4aXM6ICJ4IiB8ICJ5IiB8ICJ6IjsKCQlsYXllcjogLTEgfCAwIHwgMTsKCQlkaXJlY3Rpb246IDEgfCAtMTsKCQlyb3RhdGlvbkFuZ2xlPzogbnVtYmVyOwoJfTsKCgl0eXBlIEN1YmUgPSB7CgkJaWQ6IHN0cmluZzsKCQlwb3NpdGlvbjogVEhSRUUuVmVjdG9yMzsKCQlxdWF0ZXJuaW9uOiBUSFJFRS5RdWF0ZXJuaW9uOwoJCW9yaWdpbmFsQ29vcmRzOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfTsKCX07CgoJY29uc3QgUE9TU0lCTEVfTU9WRVM6IE1vdmVbXSA9ICgoKSA9PiB7CgkJY29uc3QgbW92ZXM6IE1vdmVbXSA9IFtdOwoJCWZvciAoY29uc3QgYXhpcyBvZiBbIngiLCAieSIsICJ6Il0gYXMgY29uc3QpIHsKCQkJZm9yIChjb25zdCBsYXllciBvZiBbLTEsIDAsIDFdIGFzIGNvbnN0KSB7CgkJCQlmb3IgKGNvbnN0IGRpcmVjdGlvbiBvZiBbMSwgLTFdIGFzIGNvbnN0KSB7CgkJCQkJbW92ZXMucHVzaCh7IGF4aXMsIGxheWVyLCBkaXJlY3Rpb24gfSk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIG1vdmVzOwoJfSkoKTsKCgljb25zdCBlYXNlSW5PdXRDdWJpYyA9ICh0OiBudW1iZXIpID0+CgkJdCA8IDAuNSA/IDQgKiB0ICogdCAqIHQgOiAxIC0gTWF0aC5wb3coLTIgKiB0ICsgMiwgMykgLyAyOwoKCWNvbnN0IGluaXRpYWxpemVDdWJlcyA9ICgpOiBDdWJlW10gPT4gewoJCWNvbnN0IG5ld0N1YmVzOiBDdWJlW10gPSBbXTsKCQljb25zdCBjb29yZHMgPSBbLTEsIDAsIDFdOwoJCWZvciAoY29uc3QgeCBvZiBjb29yZHMpIHsKCQkJZm9yIChjb25zdCB5IG9mIGNvb3JkcykgewoJCQkJZm9yIChjb25zdCB6IG9mIGNvb3JkcykgewoJCQkJCW5ld0N1YmVzLnB1c2goewoJCQkJCQlpZDogYGN1YmUtJHt4fS0ke3l9LSR7en1gLAoJCQkJCQlwb3NpdGlvbjogbmV3IFRIUkVFLlZlY3RvcjMoeCwgeSwgeiksCgkJCQkJCXF1YXRlcm5pb246IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCksCgkJCQkJCW9yaWdpbmFsQ29vcmRzOiB7IHgsIHksIHogfSwKCQkJCQl9KTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gbmV3Q3ViZXM7Cgl9OwoKCWxldCBjdWJlcyA9ICRzdGF0ZTxDdWJlW10+KGluaXRpYWxpemVDdWJlcygpKTsKCWxldCBjdXJyZW50TW92ZSA9ICRzdGF0ZTxNb3ZlIHwgbnVsbD4obnVsbCk7CgoJbGV0IG1haW5Hcm91cCA9ICRzdGF0ZTxUSFJFRS5Hcm91cD4oKTsKCWxldCBsYXllckdyb3VwID0gJHN0YXRlPFRIUkVFLkdyb3VwPigpOwoJbGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7CglsZXQgY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MgPSAwOwoJbGV0IGxhc3RNb3ZlQXhpczogTW92ZVsiYXhpcyJdIHwgbnVsbCA9IG51bGw7CglsZXQgdGltZVNpbmNlTGFzdE1vdmUgPSAwOwoKCWNvbnN0IGluaXRpYWxDYW1lcmFQb3NpdGlvbiA9IHsgeDogMCwgeTogMCwgejogMTAgfTsKCglsZXQgZ2VvbWV0cnkgPSAkZGVyaXZlZChuZXcgUm91bmRlZEJveEdlb21ldHJ5KHNpemUsIHNpemUsIHNpemUsIDIwLCByYWRpdXMpKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwoKCXZvaWQgbWFpbigpIHsKCQl2Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7CgkJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTsKCQl2Vmlld1Bvc2l0aW9uID0gLW12UG9zaXRpb24ueHl6OwoJCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247Cgl9CmA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgl1bmlmb3JtIHZlYzMgY29sb3I7Cgl1bmlmb3JtIHZlYzMgcmltQ29sb3I7Cgl1bmlmb3JtIGZsb2F0IHJpbVBvd2VyOwoJdW5pZm9ybSBmbG9hdCByaW1JbnRlbnNpdHk7CgoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7Cgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKCgl2b2lkIG1haW4oKSB7CgkJdmVjMyBub3JtYWwgPSBub3JtYWxpemUodk5vcm1hbCk7CgkJdmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pOwoKCQlmbG9hdCByaW0gPSAxLjAgLSBtYXgoMC4wLCBkb3Qobm9ybWFsLCB2aWV3RGlyKSk7CgkJcmltID0gcG93KHJpbSwgcmltUG93ZXIpICogcmltSW50ZW5zaXR5OwoKCQl2ZWMzIGZpbmFsQ29sb3IgPSBjb2xvciArIHJpbUNvbG9yICogcmltOwoKCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGZpbmFsQ29sb3IsIDEuMCk7CiAgICAgICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+Cgl9CmA7CgoJY29uc3QgZGVmYXVsdEZyZXNuZWxDb25maWc6IFJlcXVpcmVkPEZyZXNuZWxDb25maWc+ID0gewoJCWNvbG9yOiAiIzExMTExMyIsCgkJcmltQ29sb3I6ICIjRkY2OTAwIiwKCQlyaW1Qb3dlcjogNiwKCQlyaW1JbnRlbnNpdHk6IDEuNSwKCX07CgoJY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewoJCXZlcnRleFNoYWRlciwKCQlmcmFnbWVudFNoYWRlciwKCQl1bmlmb3JtczogewoJCQljb2xvcjogeyB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKGRlZmF1bHRGcmVzbmVsQ29uZmlnLmNvbG9yKSB9LAoJCQlyaW1Db2xvcjogeyB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKGRlZmF1bHRGcmVzbmVsQ29uZmlnLnJpbUNvbG9yKSB9LAoJCQlyaW1Qb3dlcjogeyB2YWx1ZTogZGVmYXVsdEZyZXNuZWxDb25maWcucmltUG93ZXIgfSwKCQkJcmltSW50ZW5zaXR5OiB7IHZhbHVlOiBkZWZhdWx0RnJlc25lbENvbmZpZy5yaW1JbnRlbnNpdHkgfSwKCQl9LAoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgY29uZmlnID0gewoJCQkuLi5kZWZhdWx0RnJlc25lbENvbmZpZywKCQkJLi4uZnJlc25lbENvbmZpZywKCQl9OwoKCQltYXRlcmlhbC51bmlmb3Jtcy5jb2xvci52YWx1ZS5zZXQoY29uZmlnLmNvbG9yKTsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1Db2xvci52YWx1ZS5zZXQoY29uZmlnLnJpbUNvbG9yKTsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1Qb3dlci52YWx1ZSA9IGNvbmZpZy5yaW1Qb3dlcjsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1JbnRlbnNpdHkudmFsdWUgPSBjb25maWcucmltSW50ZW5zaXR5OwoJCW1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCX0pOwoKCWNvbnN0IHJldXNhYmxlVmVjMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7Cgljb25zdCByZXVzYWJsZU1hdHJpeDQgPSBuZXcgVEhSRUUuTWF0cml4NCgpOwoJY29uc3QgcmV1c2FibGVRdWF0ZXJuaW9uID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTsKCgljb25zdCBjcmVhdGVSb3RhdGlvbk1hdHJpeCA9IChheGlzOiBNb3ZlWyJheGlzIl0sIGFuZ2xlOiBudW1iZXIpID0+IHsKCQlyZXVzYWJsZU1hdHJpeDQuaWRlbnRpdHkoKTsKCQlyZXVzYWJsZVF1YXRlcm5pb24uaWRlbnRpdHkoKTsKCQlyZXVzYWJsZVZlYzMuc2V0KDAsIDAsIDApOwoJCXJldXNhYmxlVmVjM1theGlzXSA9IDE7CgkJcmV1c2FibGVRdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUocmV1c2FibGVWZWMzLCBhbmdsZSk7CgkJcmV0dXJuIHJldXNhYmxlTWF0cml4NC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihyZXVzYWJsZVF1YXRlcm5pb24pOwoJfTsKCgljb25zdCBjb21taXRNb3ZlID0gKCkgPT4gewoJCWlmICghY3VycmVudE1vdmUpIHJldHVybjsKCgkJY29uc3QgbW92ZSA9IGN1cnJlbnRNb3ZlOwoJCWNvbnN0IGFuZ2xlID0gKG1vdmUucm90YXRpb25BbmdsZSB8fCBNYXRoLlBJIC8gMikgKiBtb3ZlLmRpcmVjdGlvbjsKCQljb25zdCByb3RNYXRyaXggPSBjcmVhdGVSb3RhdGlvbk1hdHJpeChtb3ZlLmF4aXMsIGFuZ2xlKTsKCgkJY29uc3QgbmV4dEN1YmVzID0gWy4uLmN1YmVzXTsKCgkJbmV4dEN1YmVzLmZvckVhY2goKGN1YmUpID0+IHsKCQkJaWYgKE1hdGgucm91bmQoY3ViZS5wb3NpdGlvblttb3ZlLmF4aXNdKSA9PT0gbW92ZS5sYXllcikgewoJCQkJY3ViZS5wb3NpdGlvbi5hcHBseU1hdHJpeDQocm90TWF0cml4KTsKCQkJCWNvbnN0IGF4aXNWZWMgPSByZXVzYWJsZVZlYzMuc2V0KAoJCQkJCW1vdmUuYXhpcyA9PT0gIngiID8gMSA6IDAsCgkJCQkJbW92ZS5heGlzID09PSAieSIgPyAxIDogMCwKCQkJCQltb3ZlLmF4aXMgPT09ICJ6IiA/IDEgOiAwLAoJCQkJKTsKCQkJCWNvbnN0IGRlbHRhUSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZShheGlzVmVjLCBhbmdsZSk7CgkJCQljdWJlLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoZGVsdGFRKS5ub3JtYWxpemUoKTsKCQkJCWN1YmUucG9zaXRpb24uc2V0KAoJCQkJCU1hdGgucm91bmQoY3ViZS5wb3NpdGlvbi54KSwKCQkJCQlNYXRoLnJvdW5kKGN1YmUucG9zaXRpb24ueSksCgkJCQkJTWF0aC5yb3VuZChjdWJlLnBvc2l0aW9uLnopLAoJCQkJKTsKCQkJfQoJCX0pOwoKCQljdWJlcyA9IG5leHRDdWJlczsKCQlpZiAobGF5ZXJHcm91cCkgbGF5ZXJHcm91cC5yb3RhdGlvbi5zZXQoMCwgMCwgMCk7CgkJaXNBbmltYXRpbmcgPSBmYWxzZTsKCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyA9IDA7CgkJY3VycmVudE1vdmUgPSBudWxsOwoJCXRpbWVTaW5jZUxhc3RNb3ZlID0gMDsKCX07CgoJY29uc3QgYmVnaW5Nb3ZlID0gKG1vdmU6IE1vdmUpID0+IHsKCQlpZiAoaXNBbmltYXRpbmcpIHJldHVybjsKCQljdXJyZW50TW92ZSA9IHsgLi4ubW92ZSwgcm90YXRpb25BbmdsZTogTWF0aC5QSSAvIDIgfTsKCQlpZiAobGF5ZXJHcm91cCkgbGF5ZXJHcm91cC5yb3RhdGlvbi5zZXQoMCwgMCwgMCk7CgkJaXNBbmltYXRpbmcgPSB0cnVlOwoJCWN1cnJlbnRSb3RhdGlvblByb2dyZXNzID0gMDsKCQlsYXN0TW92ZUF4aXMgPSBtb3ZlLmF4aXM7Cgl9OwoKCWNvbnN0IHNlbGVjdE5leHRNb3ZlID0gKCkgPT4gewoJCWNvbnN0IG1vdmVzID0gUE9TU0lCTEVfTU9WRVMuZmlsdGVyKChtKSA9PiBtLmF4aXMgIT09IGxhc3RNb3ZlQXhpcyk7CgkJaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJCWNvbnN0IG1vdmUgPSBtb3Zlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtb3Zlcy5sZW5ndGgpXTsKCQliZWdpbk1vdmUobW92ZSk7Cgl9OwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKG1haW5Hcm91cCkgewoJCQltYWluR3JvdXAucm90YXRpb24ueCArPSBkZWx0YSAqIDAuMzsKCQkJbWFpbkdyb3VwLnJvdGF0aW9uLnkgKz0gZGVsdGEgKiAwLjU7CgkJCW1haW5Hcm91cC5yb3RhdGlvbi56ICs9IGRlbHRhICogMC4yOwoJCX0KCgkJaWYgKGlzQW5pbWF0aW5nICYmIGN1cnJlbnRNb3ZlICYmIGxheWVyR3JvdXApIHsKCQkJY29uc3QgbW92ZSA9IGN1cnJlbnRNb3ZlOwoJCQljb25zdCBwcm9ncmVzc0luYyA9IGRlbHRhIC8gZHVyYXRpb247CgkJCWN1cnJlbnRSb3RhdGlvblByb2dyZXNzID0gTWF0aC5taW4oCgkJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyArIHByb2dyZXNzSW5jLAoJCQkJMSwKCQkJKTsKCgkJCWNvbnN0IGVhc2VkID0gZWFzZUluT3V0Q3ViaWMoY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MpOwoJCQljb25zdCBhbmdsZSA9CgkJCQllYXNlZCAqIChtb3ZlLnJvdGF0aW9uQW5nbGUgfHwgTWF0aC5QSSAvIDIpICogbW92ZS5kaXJlY3Rpb247CgoJCQlpZiAobW92ZS5heGlzID09PSAieCIpIGxheWVyR3JvdXAucm90YXRpb24ueCA9IGFuZ2xlOwoJCQllbHNlIGlmIChtb3ZlLmF4aXMgPT09ICJ5IikgbGF5ZXJHcm91cC5yb3RhdGlvbi55ID0gYW5nbGU7CgkJCWVsc2UgaWYgKG1vdmUuYXhpcyA9PT0gInoiKSBsYXllckdyb3VwLnJvdGF0aW9uLnogPSBhbmdsZTsKCgkJCWlmIChjdXJyZW50Um90YXRpb25Qcm9ncmVzcyA+PSAxKSB7CgkJCQljb21taXRNb3ZlKCk7CgkJCX0KCQl9IGVsc2UgewoJCQl0aW1lU2luY2VMYXN0TW92ZSArPSBkZWx0YTsKCQkJaWYgKHRpbWVTaW5jZUxhc3RNb3ZlID4gMC40KSB7CgkJCQlzZWxlY3ROZXh0TW92ZSgpOwoJCQl9CgkJfQoJfSk7CgoJY29uc3QgYWN0aXZlTGF5ZXJJZHMgPSAkZGVyaXZlZC5ieSgoKSA9PiB7CgkJY29uc3QgaWRzID0gbmV3IFN2ZWx0ZVNldDxzdHJpbmc+KCk7CgkJaWYgKGN1cnJlbnRNb3ZlKSB7CgkJCWN1YmVzLmZvckVhY2goKGMpID0+IHsKCQkJCWlmIChNYXRoLnJvdW5kKGMucG9zaXRpb25bY3VycmVudE1vdmUhLmF4aXNdKSA9PT0gY3VycmVudE1vdmUhLmxheWVyKSB7CgkJCQkJaWRzLmFkZChjLmlkKTsKCQkJCX0KCQkJfSk7CgkJfQoJCXJldHVybiBpZHM7Cgl9KTsKCgljb25zdCBzdGF0aWNDdWJlcyA9ICRkZXJpdmVkKGN1YmVzLmZpbHRlcigoYykgPT4gIWFjdGl2ZUxheWVySWRzLmhhcyhjLmlkKSkpOwoJY29uc3QgYWN0aXZlQ3ViZXMgPSAkZGVyaXZlZChjdWJlcy5maWx0ZXIoKGMpID0+IGFjdGl2ZUxheWVySWRzLmhhcyhjLmlkKSkpOwo8L3NjcmlwdD4KCjxULlBlcnNwZWN0aXZlQ2FtZXJhCgltYWtlRGVmYXVsdAoJcG9zaXRpb249e1sKCQlpbml0aWFsQ2FtZXJhUG9zaXRpb24ueCwKCQlpbml0aWFsQ2FtZXJhUG9zaXRpb24ueSwKCQlpbml0aWFsQ2FtZXJhUG9zaXRpb24ueiwKCV19Cj4KCTxPcmJpdENvbnRyb2xzCgkJZW5hYmxlRGFtcGluZwoJCWVuYWJsZVpvb209e2ZhbHNlfQoJCW9uY3JlYXRlPXsoY29udHJvbHMpID0+IHsKCQkJY29udHJvbHMudGFyZ2V0LnNldCgwLCAwLCAwKTsKCQkJY29udHJvbHMudXBkYXRlKCk7CgkJfX0KCS8+CjwvVC5QZXJzcGVjdGl2ZUNhbWVyYT4KCjxULkdyb3VwIGJpbmQ6cmVmPXttYWluR3JvdXB9PgoJeyNlYWNoIHN0YXRpY0N1YmVzIGFzIGN1YmUgKGN1YmUuaWQpfQoJCTxULk1lc2gKCQkJcG9zaXRpb249e1sKCQkJCWN1YmUucG9zaXRpb24ueCAqIChzaXplICsgZ2FwKSwKCQkJCWN1YmUucG9zaXRpb24ueSAqIChzaXplICsgZ2FwKSwKCQkJCWN1YmUucG9zaXRpb24ueiAqIChzaXplICsgZ2FwKSwKCQkJXX0KCQkJcXVhdGVybmlvbj17WwoJCQkJY3ViZS5xdWF0ZXJuaW9uLngsCgkJCQljdWJlLnF1YXRlcm5pb24ueSwKCQkJCWN1YmUucXVhdGVybmlvbi56LAoJCQkJY3ViZS5xdWF0ZXJuaW9uLncsCgkJCV19CgkJCXtnZW9tZXRyeX0KCQkJe21hdGVyaWFsfQoJCS8+Cgl7L2VhY2h9CgoJPFQuR3JvdXAgYmluZDpyZWY9e2xheWVyR3JvdXB9PgoJCXsjZWFjaCBhY3RpdmVDdWJlcyBhcyBjdWJlIChjdWJlLmlkKX0KCQkJPFQuTWVzaAoJCQkJcG9zaXRpb249e1sKCQkJCQljdWJlLnBvc2l0aW9uLnggKiAoc2l6ZSArIGdhcCksCgkJCQkJY3ViZS5wb3NpdGlvbi55ICogKHNpemUgKyBnYXApLAoJCQkJCWN1YmUucG9zaXRpb24ueiAqIChzaXplICsgZ2FwKSwKCQkJCV19CgkJCQlxdWF0ZXJuaW9uPXtbCgkJCQkJY3ViZS5xdWF0ZXJuaW9uLngsCgkJCQkJY3ViZS5xdWF0ZXJuaW9uLnksCgkJCQkJY3ViZS5xdWF0ZXJuaW9uLnosCgkJCQkJY3ViZS5xdWF0ZXJuaW9uLncsCgkJCQldfQoJCQkJe2dlb21ldHJ5fQoJCQkJe21hdGVyaWFsfQoJCQkvPgoJCXsvZWFjaH0KCTwvVC5Hcm91cD4KPC9ULkdyb3VwPgo=", + "components/rubiks-cube/RubiksCube.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9SdWJpa3NDdWJlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIHNpemUgb2YgdGhlIGluZGl2aWR1YWwgY3ViZWxldHMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNpemU/OiBTY2VuZVByb3BzWyJzaXplIl07CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIHJvdGF0aW9uIGFuaW1hdGlvbiBpbiBzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDEuNQoJCSAqLwoJCWR1cmF0aW9uPzogU2NlbmVQcm9wc1siZHVyYXRpb24iXTsKCQkvKioKCQkgKiBHYXAgYmV0d2VlbiB0aGUgY3ViZWxldHMuCgkJICogQGRlZmF1bHQgMC4wMTUKCQkgKi8KCQlnYXA/OiBTY2VuZVByb3BzWyJnYXAiXTsKCQkvKioKCQkgKiBDb3JuZXIgcmFkaXVzIG9mIHRoZSBjdWJlbGV0cy4KCQkgKiBAZGVmYXVsdCAwLjEyNQoJCSAqLwoJCXJhZGl1cz86IFNjZW5lUHJvcHNbInJhZGl1cyJdOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogU2NlbmVQcm9wc1siZnJlc25lbENvbmZpZyJdOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXNpemUgPSAxLAoJCWR1cmF0aW9uID0gMS41LAoJCWdhcCA9IDAuMDE1LAoJCXJhZGl1cyA9IDAuMTI1LAoJCWZyZXNuZWxDb25maWcsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIHtzaXplfSB7ZHVyYXRpb259IHtnYXB9IHtyYWRpdXN9IHtmcmVzbmVsQ29uZmlnfSAvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/rubiks-cube/RubiksCubeScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IFN2ZWx0ZVNldCB9IGZyb20gInN2ZWx0ZS9yZWFjdGl2aXR5IjsKCWltcG9ydCB7CgkJQm94LAoJCUNhbWVyYSwKCQlNYXQ0LAoJCU1lc2gsCgkJT3JiaXQsCgkJUHJvZ3JhbSwKCQlRdWF0LAoJCVJlbmRlcmVyLAoJCVRyYW5zZm9ybSwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgRnJlc25lbENvbmZpZyB7CgkJLyoqCgkJICogQmFzZSBib2R5IGNvbG9yIGZvciBlYWNoIGN1YmVsZXQuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEFjY2VudCBjb2xvciBhcHBsaWVkIGJ5IHRoZSBGcmVzbmVsIHJpbS4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQlyaW1Db2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQ29udHJvbHMgaG93IHRpZ2h0IHRoZSBGcmVzbmVsIHJpbSBodWcgaXMuCgkJICogSGlnaGVyIHZhbHVlcyB5aWVsZCBhIHRoaW5uZXIgb3V0bGluZS4KCQkgKiBAZGVmYXVsdCA2CgkJICovCgkJcmltUG93ZXI/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBGcmVzbmVsIHJpbSBjb2xvci4KCQkgKiBAZGVmYXVsdCAxLjUKCQkgKi8KCQlyaW1JbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBTaXplIG9mIGFuIGluZGl2aWR1YWwgY3ViZWxldCBlZGdlLgoJCSAqIEBkZWZhdWx0IDEKCQkgKi8KCQlzaXplOiBudW1iZXI7CgkJLyoqCgkJICogU2Vjb25kcyBpdCB0YWtlcyB0byBjb21wbGV0ZSBhIGZhY2Ugcm90YXRpb24uCgkJICogQGRlZmF1bHQgMS41CgkJICovCgkJZHVyYXRpb246IG51bWJlcjsKCQkvKioKCQkgKiBHYXAgYmV0d2VlbiBjdWJlbGV0cyB0byBhY2NlbnR1YXRlIHNlcGFyYXRpb24uCgkJICogQGRlZmF1bHQgMC4wMTUKCQkgKi8KCQlnYXA6IG51bWJlcjsKCQkvKioKCQkgKiBDb3JuZXIgcmFkaXVzIGZvciBzb2Z0ZW5lZCBjdWJlIGVkZ2VzLgoJCSAqIEBkZWZhdWx0IDAuMTI1CgkJICovCgkJcmFkaXVzOiBudW1iZXI7CgkJLyoqCgkJICogT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciB0aGUgRnJlc25lbCBzaGFkZXIgdW5pZm9ybXMuCgkJICovCgkJZnJlc25lbENvbmZpZz86IEZyZXNuZWxDb25maWc7Cgl9CgoJbGV0IHsgc2l6ZSwgZHVyYXRpb24sIGdhcCwgcmFkaXVzLCBmcmVzbmVsQ29uZmlnID0ge30gfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIE1vdmUgPSB7CgkJYXhpczogIngiIHwgInkiIHwgInoiOwoJCWxheWVyOiAtMSB8IDAgfCAxOwoJCWRpcmVjdGlvbjogMSB8IC0xOwoJCXJvdGF0aW9uQW5nbGU/OiBudW1iZXI7Cgl9OwoKCXR5cGUgQ3ViZVN0YXRlID0gewoJCWlkOiBzdHJpbmc7CgkJcG9zaXRpb246IFZlYzM7CgkJcXVhdGVybmlvbjogUXVhdDsKCQltZXNoOiBNZXNoOwoJfTsKCgljb25zdCBQT1NTSUJMRV9NT1ZFUzogTW92ZVtdID0gKCgpID0+IHsKCQljb25zdCBtb3ZlczogTW92ZVtdID0gW107CgkJZm9yIChjb25zdCBheGlzIG9mIFsieCIsICJ5IiwgInoiXSBhcyBjb25zdCkgewoJCQlmb3IgKGNvbnN0IGxheWVyIG9mIFstMSwgMCwgMV0gYXMgY29uc3QpIHsKCQkJCWZvciAoY29uc3QgZGlyZWN0aW9uIG9mIFsxLCAtMV0gYXMgY29uc3QpIHsKCQkJCQltb3Zlcy5wdXNoKHsgYXhpcywgbGF5ZXIsIGRpcmVjdGlvbiB9KTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gbW92ZXM7Cgl9KSgpOwoKCWNvbnN0IGVhc2VJbk91dEN1YmljID0gKHQ6IG51bWJlcikgPT4KCQl0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6IDEgLSBNYXRoLnBvdygtMiAqIHQgKyAyLCAzKSAvIDI7CgoJY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCWNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCgkJcjogbnVtYmVyLAoJCWc6IG51bWJlciwKCQliOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgociwgZywgYikgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwoJfTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbCgkJCWNsYW1wMDEocGFydHNbMF0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMV0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMl0gLyBzY2FsZSksCgkJXTsKCX07CgoJY29uc3QgdG9SZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgewoJCQljb25zdCBpbnQgPSBNYXRoLm1pbigweGZmZmZmZiwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih2YWx1ZSkpKTsKCQkJcmV0dXJuIFsKCQkJCSgoaW50ID4+IDE2KSAmIDI1NSkgLyAyNTUsCgkJCQkoKGludCA+PiA4KSAmIDI1NSkgLyAyNTUsCgkJCQkoaW50ICYgMjU1KSAvIDI1NSwKCQkJXTsKCQl9CgoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IHRyaW1tZWQuc3RhcnRzV2l0aCgiIyIpCgkJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJCTogcGFyc2VDc3NDb2xvcih0cmltbWVkKTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgoJCWlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gMykgewoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldCh2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTsKCQl9CgoJCWlmICgKCQkJdmFsdWUgJiYKCQkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCQkiciIgaW4gdmFsdWUgJiYKCQkJImciIGluIHZhbHVlICYmCgkJCSJiIiBpbiB2YWx1ZQoJCSkgewoJCQljb25zdCByZ2IgPSB2YWx1ZSBhcyB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7CgkJfQoKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3QgZGVmYXVsdEZyZXNuZWxDb25maWc6IFJlcXVpcmVkPEZyZXNuZWxDb25maWc+ID0gewoJCWNvbG9yOiAiIzExMTExMyIsCgkJcmltQ29sb3I6ICIjRkY2OTAwIiwKCQlyaW1Qb3dlcjogNiwKCQlyaW1JbnRlbnNpdHk6IDEuNSwKCX07CgoJY29uc3QgY3JlYXRlUm91bmRlZEJveEdlb21ldHJ5ID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQljdWJlU2l6ZTogbnVtYmVyLAoJCWN1YmVSYWRpdXM6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHNlZ21lbnRzID0gMjA7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgQm94KGdsLCB7CgkJCXdpZHRoOiBjdWJlU2l6ZSwKCQkJaGVpZ2h0OiBjdWJlU2l6ZSwKCQkJZGVwdGg6IGN1YmVTaXplLAoJCQl3aWR0aFNlZ21lbnRzOiBzZWdtZW50cywKCQkJaGVpZ2h0U2VnbWVudHM6IHNlZ21lbnRzLAoJCQlkZXB0aFNlZ21lbnRzOiBzZWdtZW50cywKCQl9KTsKCgkJY29uc3QgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKCQljb25zdCBub3JtYWxBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7CgkJY29uc3QgcG9zaXRpb25zID0gcG9zaXRpb25BdHRyLmRhdGEgYXMgRmxvYXQzMkFycmF5OwoJCWNvbnN0IG5vcm1hbHMgPSBub3JtYWxBdHRyLmRhdGEgYXMgRmxvYXQzMkFycmF5OwoKCQljb25zdCBoYWxmID0gY3ViZVNpemUgKiAwLjU7CgkJY29uc3Qgcm91bmRlZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1YmVSYWRpdXMsIGhhbGYpKTsKCQljb25zdCBpbm5lciA9IE1hdGgubWF4KDAsIGhhbGYgLSByb3VuZGVkKTsKCgkJZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpICs9IDMpIHsKCQkJY29uc3QgeCA9IHBvc2l0aW9uc1tpXTsKCQkJY29uc3QgeSA9IHBvc2l0aW9uc1tpICsgMV07CgkJCWNvbnN0IHogPSBwb3NpdGlvbnNbaSArIDJdOwoKCQkJY29uc3Qgc3ggPSB4IDwgMCA/IC0xIDogMTsKCQkJY29uc3Qgc3kgPSB5IDwgMCA/IC0xIDogMTsKCQkJY29uc3Qgc3ogPSB6IDwgMCA/IC0xIDogMTsKCgkJCWNvbnN0IGF4ID0gTWF0aC5hYnMoeCk7CgkJCWNvbnN0IGF5ID0gTWF0aC5hYnMoeSk7CgkJCWNvbnN0IGF6ID0gTWF0aC5hYnMoeik7CgoJCQljb25zdCBxeCA9IE1hdGgubWF4KGF4IC0gaW5uZXIsIDApOwoJCQljb25zdCBxeSA9IE1hdGgubWF4KGF5IC0gaW5uZXIsIDApOwoJCQljb25zdCBxeiA9IE1hdGgubWF4KGF6IC0gaW5uZXIsIDApOwoJCQljb25zdCBxTGVuID0gTWF0aC5oeXBvdChxeCwgcXksIHF6KTsKCgkJCWxldCBueCA9IDA7CgkJCWxldCBueSA9IDA7CgkJCWxldCBueiA9IDA7CgoJCQlpZiAocUxlbiA+IDFlLTYpIHsKCQkJCW54ID0gcXggLyBxTGVuOwoJCQkJbnkgPSBxeSAvIHFMZW47CgkJCQlueiA9IHF6IC8gcUxlbjsKCQkJfSBlbHNlIHsKCQkJCWlmIChheCA+PSBheSAmJiBheCA+PSBheikgbnggPSAxOwoJCQkJZWxzZSBpZiAoYXkgPj0gYXggJiYgYXkgPj0gYXopIG55ID0gMTsKCQkJCWVsc2UgbnogPSAxOwoJCQl9CgoJCQlub3JtYWxzW2ldID0gbnggKiBzeDsKCQkJbm9ybWFsc1tpICsgMV0gPSBueSAqIHN5OwoJCQlub3JtYWxzW2kgKyAyXSA9IG56ICogc3o7CgoJCQlwb3NpdGlvbnNbaV0gPSBzeCAqIGlubmVyICsgbnggKiBzeCAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMV0gPSBzeSAqIGlubmVyICsgbnkgKiBzeSAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMl0gPSBzeiAqIGlubmVyICsgbnogKiBzeiAqIHJvdW5kZWQ7CgkJfQoKCQlwb3NpdGlvbkF0dHIubmVlZHNVcGRhdGUgPSB0cnVlOwoJCW5vcm1hbEF0dHIubmVlZHNVcGRhdGUgPSB0cnVlOwoJCXJldHVybiBnZW9tZXRyeTsKCX07CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXREaW1lbnNpb25zID0KCQkkc3RhdGU8KG5leHQ6IHsgc2l6ZTogbnVtYmVyOyBnYXA6IG51bWJlcjsgcmFkaXVzOiBudW1iZXIgfSkgPT4gdm9pZD4oKTsKCWxldCBzZXRGcmVzbmVsVW5pZm9ybXMgPSAkc3RhdGU8KGNvbmZpZzogRnJlc25lbENvbmZpZykgPT4gdm9pZD4oKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldERpbWVuc2lvbnMpIHJldHVybjsKCQlzZXREaW1lbnNpb25zKHsgc2l6ZSwgZ2FwLCByYWRpdXMgfSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEZyZXNuZWxVbmlmb3JtcykgcmV0dXJuOwoJCXNldEZyZXNuZWxVbmlmb3JtcyhmcmVzbmVsQ29uZmlnID8/IHt9KTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJYW50aWFsaWFzOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCwgewoJCQlmb3Y6IDU1LAoJCQlhc3BlY3Q6IDEsCgkJCW5lYXI6IDAuMSwKCQkJZmFyOiAxMDAsCgkJfSk7CgkJY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAxMCk7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IG1haW5Hcm91cCA9IG5ldyBUcmFuc2Zvcm0oKTsKCQltYWluR3JvdXAuc2V0UGFyZW50KHNjZW5lKTsKCQljb25zdCBsYXllckdyb3VwID0gbmV3IFRyYW5zZm9ybSgpOwoJCWxheWVyR3JvdXAuc2V0UGFyZW50KG1haW5Hcm91cCk7CgoJCWNvbnN0IG9yYml0ID0gbmV3IE9yYml0KGNhbWVyYSwgewoJCQllbGVtZW50OiB0YXJnZXRDYW52YXMsCgkJCWVuYWJsZVpvb206IGZhbHNlLAoJCQl0YXJnZXQ6IG5ldyBWZWMzKDAsIDAsIDApLAoJCQllYXNlOiAwLjE1LAoJCQlpbmVydGlhOiAwLjg1LAoJCX0pOwoKCQlsZXQgY3ViZVNpemUgPSBzaXplOwoJCWxldCBjdWJlR2FwID0gZ2FwOwoJCWxldCBjdWJlUmFkaXVzID0gcmFkaXVzOwoKCQlsZXQgZ2VvbWV0cnkgPSBjcmVhdGVSb3VuZGVkQm94R2VvbWV0cnkoZ2wsIGN1YmVTaXplLCBjdWJlUmFkaXVzKTsKCgkJY29uc3QgdW5pZm9ybXMgPSB7CgkJCWNvbG9yOiB7IHZhbHVlOiBuZXcgVmVjMygxNyAvIDI1NSwgMTcgLyAyNTUsIDE5IC8gMjU1KSB9LAoJCQlyaW1Db2xvcjogeyB2YWx1ZTogbmV3IFZlYzMoMSwgMTA1IC8gMjU1LCAwKSB9LAoJCQlyaW1Qb3dlcjogeyB2YWx1ZTogNiB9LAoJCQlyaW1JbnRlbnNpdHk6IHsgdmFsdWU6IDEuNSB9LAoJCX07CgoJCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJCWF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsKCgkJCXVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7CgkJCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJCQl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwoKCQkJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkJCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwoKCQkJdm9pZCBtYWluKCkgewoJCQkJdk5vcm1hbCA9IG5vcm1hbGl6ZShub3JtYWxNYXRyaXggKiBub3JtYWwpOwoJCQkJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTsKCQkJCXZWaWV3UG9zaXRpb24gPSAtbXZQb3NpdGlvbi54eXo7CgkJCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJCQl9CgkJYDsKCgkJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCgkJCXVuaWZvcm0gdmVjMyBjb2xvcjsKCQkJdW5pZm9ybSB2ZWMzIHJpbUNvbG9yOwoJCQl1bmlmb3JtIGZsb2F0IHJpbVBvd2VyOwoJCQl1bmlmb3JtIGZsb2F0IHJpbUludGVuc2l0eTsKCgkJCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJCQl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKCgkJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoJCQkJdmVjMyBub3JtYWwgPSBub3JtYWxpemUodk5vcm1hbCk7CgkJCQl2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUodlZpZXdQb3NpdGlvbik7CgkJCQlmbG9hdCByaW0gPSAxLjAgLSBtYXgoMC4wLCBkb3Qobm9ybWFsLCB2aWV3RGlyKSk7CgkJCQlyaW0gPSBwb3cocmltLCByaW1Qb3dlcikgKiByaW1JbnRlbnNpdHk7CgkJCQl2ZWMzIGZpbmFsQ29sb3IgPSBjb2xvciArIHJpbUNvbG9yICogcmltOwoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChsaW5lYXJUb1NyZ2IoZmluYWxDb2xvciksIDEuMCk7CgkJCX0KCQlgOwoKCQljb25zdCBtYXRlcmlhbCA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogZmFsc2UsCgkJCWRlcHRoVGVzdDogdHJ1ZSwKCQkJZGVwdGhXcml0ZTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgY29vcmRzID0gWy0xLCAwLCAxXTsKCQljb25zdCBjdWJlczogQ3ViZVN0YXRlW10gPSBbXTsKCQlmb3IgKGNvbnN0IHggb2YgY29vcmRzKSB7CgkJCWZvciAoY29uc3QgeSBvZiBjb29yZHMpIHsKCQkJCWZvciAoY29uc3QgeiBvZiBjb29yZHMpIHsKCQkJCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJCQkJZ2VvbWV0cnksCgkJCQkJCXByb2dyYW06IG1hdGVyaWFsLAoJCQkJCQlmcnVzdHVtQ3VsbGVkOiBmYWxzZSwKCQkJCQl9KTsKCQkJCQltZXNoLnNldFBhcmVudChtYWluR3JvdXApOwoKCQkJCQljb25zdCBjdWJlOiBDdWJlU3RhdGUgPSB7CgkJCQkJCWlkOiBgY3ViZS0ke3h9LSR7eX0tJHt6fWAsCgkJCQkJCXBvc2l0aW9uOiBuZXcgVmVjMyh4LCB5LCB6KSwKCQkJCQkJcXVhdGVybmlvbjogbmV3IFF1YXQoKSwKCQkJCQkJbWVzaCwKCQkJCQl9OwoJCQkJCWN1YmVzLnB1c2goY3ViZSk7CgkJCQl9CgkJCX0KCQl9CgoJCWNvbnN0IHVwZGF0ZUN1YmVUcmFuc2Zvcm0gPSAoY3ViZTogQ3ViZVN0YXRlKSA9PiB7CgkJCWNvbnN0IHNwYWNpbmcgPSBjdWJlU2l6ZSArIGN1YmVHYXA7CgkJCWN1YmUubWVzaC5wb3NpdGlvbi5zZXQoCgkJCQljdWJlLnBvc2l0aW9uLnggKiBzcGFjaW5nLAoJCQkJY3ViZS5wb3NpdGlvbi55ICogc3BhY2luZywKCQkJCWN1YmUucG9zaXRpb24ueiAqIHNwYWNpbmcsCgkJCSk7CgkJCWN1YmUubWVzaC5xdWF0ZXJuaW9uLmNvcHkoY3ViZS5xdWF0ZXJuaW9uKTsKCQl9OwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB1cGRhdGVDdWJlVHJhbnNmb3JtKGN1YmVzW2ldKTsKCgkJbGV0IGFjdGl2ZUxheWVyU2V0ID0gbmV3IFN2ZWx0ZVNldDxzdHJpbmc+KCk7CgkJbGV0IGN1cnJlbnRNb3ZlOiBNb3ZlIHwgbnVsbCA9IG51bGw7CgkJbGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7CgkJbGV0IGN1cnJlbnRSb3RhdGlvblByb2dyZXNzID0gMDsKCQlsZXQgbGFzdE1vdmVBeGlzOiBNb3ZlWyJheGlzIl0gfCBudWxsID0gbnVsbDsKCQlsZXQgdGltZVNpbmNlTGFzdE1vdmUgPSAwOwoKCQljb25zdCByb3RhdGlvbk1hdHJpeCA9IG5ldyBNYXQ0KCk7CgkJY29uc3QgdGVtcFF1YXQgPSBuZXcgUXVhdCgpOwoJCWNvbnN0IGRlbHRhUXVhdCA9IG5ldyBRdWF0KCk7CgkJY29uc3QgYXhpc1ZlYyA9IG5ldyBWZWMzKCk7CgoJCWNvbnN0IGNyZWF0ZVJvdGF0aW9uTWF0cml4ID0gKGF4aXM6IE1vdmVbImF4aXMiXSwgYW5nbGU6IG51bWJlcikgPT4gewoJCQlheGlzVmVjLnNldCgKCQkJCWF4aXMgPT09ICJ4IiA/IDEgOiAwLAoJCQkJYXhpcyA9PT0gInkiID8gMSA6IDAsCgkJCQlheGlzID09PSAieiIgPyAxIDogMCwKCQkJKTsKCQkJdGVtcFF1YXQuZnJvbUF4aXNBbmdsZShheGlzVmVjLCBhbmdsZSk7CgkJCXJvdGF0aW9uTWF0cml4LmlkZW50aXR5KCkuZnJvbVF1YXRlcm5pb24odGVtcFF1YXQpOwoJCQlyZXR1cm4gcm90YXRpb25NYXRyaXg7CgkJfTsKCgkJY29uc3QgcmVzZXRMYXllckdyb3VwaW5nID0gKCkgPT4gewoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQljdWJlc1tpXS5tZXNoLnNldFBhcmVudChtYWluR3JvdXApOwoJCQl9CgkJCWFjdGl2ZUxheWVyU2V0ID0gbmV3IFN2ZWx0ZVNldCgpOwoJCQlsYXllckdyb3VwLnJvdGF0aW9uLnNldCgwLCAwLCAwKTsKCQl9OwoKCQljb25zdCBzZWxlY3RBY3RpdmVMYXllciA9IChtb3ZlOiBNb3ZlKSA9PiB7CgkJCWFjdGl2ZUxheWVyU2V0ID0gbmV3IFN2ZWx0ZVNldCgpOwoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQljb25zdCBjdWJlID0gY3ViZXNbaV07CgkJCQlpZiAoTWF0aC5yb3VuZChjdWJlLnBvc2l0aW9uW21vdmUuYXhpc10pID09PSBtb3ZlLmxheWVyKSB7CgkJCQkJYWN0aXZlTGF5ZXJTZXQuYWRkKGN1YmUuaWQpOwoJCQkJCWN1YmUubWVzaC5zZXRQYXJlbnQobGF5ZXJHcm91cCk7CgkJCQl9IGVsc2UgewoJCQkJCWN1YmUubWVzaC5zZXRQYXJlbnQobWFpbkdyb3VwKTsKCQkJCX0KCQkJfQoJCQlsYXllckdyb3VwLnJvdGF0aW9uLnNldCgwLCAwLCAwKTsKCQl9OwoKCQljb25zdCBjb21taXRNb3ZlID0gKCkgPT4gewoJCQlpZiAoIWN1cnJlbnRNb3ZlKSByZXR1cm47CgoJCQljb25zdCBtb3ZlID0gY3VycmVudE1vdmU7CgkJCWNvbnN0IGFuZ2xlID0gKG1vdmUucm90YXRpb25BbmdsZSB8fCBNYXRoLlBJIC8gMikgKiBtb3ZlLmRpcmVjdGlvbjsKCQkJY29uc3QgbWF0cml4ID0gY3JlYXRlUm90YXRpb25NYXRyaXgobW92ZS5heGlzLCBhbmdsZSk7CgkJCWF4aXNWZWMuc2V0KAoJCQkJbW92ZS5heGlzID09PSAieCIgPyAxIDogMCwKCQkJCW1vdmUuYXhpcyA9PT0gInkiID8gMSA6IDAsCgkJCQltb3ZlLmF4aXMgPT09ICJ6IiA/IDEgOiAwLAoJCQkpOwoJCQlkZWx0YVF1YXQuZnJvbUF4aXNBbmdsZShheGlzVmVjLCBhbmdsZSk7CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQljb25zdCBjdWJlID0gY3ViZXNbaV07CgkJCQlpZiAoIWFjdGl2ZUxheWVyU2V0LmhhcyhjdWJlLmlkKSkgY29udGludWU7CgoJCQkJY3ViZS5wb3NpdGlvbi5hcHBseU1hdHJpeDQobWF0cml4KTsKCQkJCWN1YmUucG9zaXRpb24uc2V0KAoJCQkJCU1hdGgucm91bmQoY3ViZS5wb3NpdGlvbi54KSwKCQkJCQlNYXRoLnJvdW5kKGN1YmUucG9zaXRpb24ueSksCgkJCQkJTWF0aC5yb3VuZChjdWJlLnBvc2l0aW9uLnopLAoJCQkJKTsKCgkJCQl0ZW1wUXVhdC5tdWx0aXBseShkZWx0YVF1YXQsIGN1YmUucXVhdGVybmlvbik7CgkJCQljdWJlLnF1YXRlcm5pb24uY29weSh0ZW1wUXVhdCkubm9ybWFsaXplKCk7CgkJCQl1cGRhdGVDdWJlVHJhbnNmb3JtKGN1YmUpOwoJCQl9CgoJCQlyZXNldExheWVyR3JvdXBpbmcoKTsKCQkJaXNBbmltYXRpbmcgPSBmYWxzZTsKCQkJY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MgPSAwOwoJCQljdXJyZW50TW92ZSA9IG51bGw7CgkJCXRpbWVTaW5jZUxhc3RNb3ZlID0gMDsKCQl9OwoKCQljb25zdCBiZWdpbk1vdmUgPSAobW92ZTogTW92ZSkgPT4gewoJCQlpZiAoaXNBbmltYXRpbmcpIHJldHVybjsKCQkJY3VycmVudE1vdmUgPSB7IC4uLm1vdmUsIHJvdGF0aW9uQW5nbGU6IE1hdGguUEkgLyAyIH07CgkJCXNlbGVjdEFjdGl2ZUxheWVyKGN1cnJlbnRNb3ZlKTsKCQkJaXNBbmltYXRpbmcgPSB0cnVlOwoJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyA9IDA7CgkJCWxhc3RNb3ZlQXhpcyA9IG1vdmUuYXhpczsKCQl9OwoKCQljb25zdCBzZWxlY3ROZXh0TW92ZSA9ICgpID0+IHsKCQkJY29uc3QgbW92ZXMgPSBQT1NTSUJMRV9NT1ZFUy5maWx0ZXIoKG0pID0+IG0uYXhpcyAhPT0gbGFzdE1vdmVBeGlzKTsKCQkJaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJCQljb25zdCBtb3ZlID0gbW92ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbW92ZXMubGVuZ3RoKV07CgkJCWJlZ2luTW92ZShtb3ZlKTsKCQl9OwoKCQljb25zdCBhcHBseUZyZXNuZWxDb25maWcgPSAoY29uZmlnOiBGcmVzbmVsQ29uZmlnKSA9PiB7CgkJCWNvbnN0IG5leHQgPSB7CgkJCQkuLi5kZWZhdWx0RnJlc25lbENvbmZpZywKCQkJCS4uLmNvbmZpZywKCQkJfTsKCQkJY29uc3QgW2NyLCBjZywgY2JdID0gdG9MaW5lYXJSZ2IobmV4dC5jb2xvciwgWwoJCQkJMTcgLyAyNTUsCgkJCQkxNyAvIDI1NSwKCQkJCTE5IC8gMjU1LAoJCQldKTsKCQkJY29uc3QgW3JyLCByZywgcmJdID0gdG9MaW5lYXJSZ2IobmV4dC5yaW1Db2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCQl1bmlmb3Jtcy5jb2xvci52YWx1ZS5zZXQoY3IsIGNnLCBjYik7CgkJCXVuaWZvcm1zLnJpbUNvbG9yLnZhbHVlLnNldChyciwgcmcsIHJiKTsKCQkJdW5pZm9ybXMucmltUG93ZXIudmFsdWUgPSBuZXh0LnJpbVBvd2VyOwoJCQl1bmlmb3Jtcy5yaW1JbnRlbnNpdHkudmFsdWUgPSBuZXh0LnJpbUludGVuc2l0eTsKCQl9OwoJCXNldEZyZXNuZWxVbmlmb3JtcyA9IGFwcGx5RnJlc25lbENvbmZpZzsKCQlhcHBseUZyZXNuZWxDb25maWcoZnJlc25lbENvbmZpZyA/PyB7fSk7CgoJCWNvbnN0IGFwcGx5RGltZW5zaW9ucyA9IChuZXh0OiB7CgkJCXNpemU6IG51bWJlcjsKCQkJZ2FwOiBudW1iZXI7CgkJCXJhZGl1czogbnVtYmVyOwoJCX0pID0+IHsKCQkJY29uc3QgbmV4dFNpemUgPSBNYXRoLm1heCgwLjAwMDEsIG5leHQuc2l6ZSk7CgkJCWNvbnN0IG5leHRHYXAgPSBNYXRoLm1heCgwLCBuZXh0LmdhcCk7CgkJCWNvbnN0IG5leHRSYWRpdXMgPSBNYXRoLm1heCgwLCBuZXh0LnJhZGl1cyk7CgoJCQljb25zdCBzaG91bGRSZWJ1aWxkID0KCQkJCW5leHRTaXplICE9PSBjdWJlU2l6ZSB8fCBNYXRoLmFicyhuZXh0UmFkaXVzIC0gY3ViZVJhZGl1cykgPiAxZS02OwoKCQkJY3ViZVNpemUgPSBuZXh0U2l6ZTsKCQkJY3ViZUdhcCA9IG5leHRHYXA7CgkJCWN1YmVSYWRpdXMgPSBuZXh0UmFkaXVzOwoKCQkJaWYgKHNob3VsZFJlYnVpbGQpIHsKCQkJCWNvbnN0IHByZXYgPSBnZW9tZXRyeTsKCQkJCWdlb21ldHJ5ID0gY3JlYXRlUm91bmRlZEJveEdlb21ldHJ5KGdsLCBjdWJlU2l6ZSwgY3ViZVJhZGl1cyk7CgkJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJY3ViZXNbaV0ubWVzaC5nZW9tZXRyeSA9IGdlb21ldHJ5OwoJCQkJfQoJCQkJcHJldi5yZW1vdmUoKTsKCQkJfQoKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBjdWJlcy5sZW5ndGg7IGkrKykgewoJCQkJdXBkYXRlQ3ViZVRyYW5zZm9ybShjdWJlc1tpXSk7CgkJCX0KCQl9OwoJCXNldERpbWVuc2lvbnMgPSBhcHBseURpbWVuc2lvbnM7CgkJYXBwbHlEaW1lbnNpb25zKHsgc2l6ZSwgZ2FwLCByYWRpdXMgfSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQljYW1lcmEucGVyc3BlY3RpdmUoewoJCQkJZm92OiA1NSwKCQkJCWFzcGVjdDogd2lkdGggLyBNYXRoLm1heCgxLCBoZWlnaHQpLAoJCQkJbmVhcjogMC4xLAoJCQkJZmFyOiAxMDAsCgkJCX0pOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCgkJCW1haW5Hcm91cC5yb3RhdGlvbi54ICs9IGRlbHRhICogMC4zOwoJCQltYWluR3JvdXAucm90YXRpb24ueSArPSBkZWx0YSAqIDAuNTsKCQkJbWFpbkdyb3VwLnJvdGF0aW9uLnogKz0gZGVsdGEgKiAwLjI7CgoJCQlvcmJpdC51cGRhdGUoKTsKCgkJCWlmIChpc0FuaW1hdGluZyAmJiBjdXJyZW50TW92ZSkgewoJCQkJY29uc3QgcHJvZ3Jlc3NJbmMgPSBkZWx0YSAvIE1hdGgubWF4KDAuMDAwMSwgZHVyYXRpb24pOwoJCQkJY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MgPSBNYXRoLm1pbigKCQkJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyArIHByb2dyZXNzSW5jLAoJCQkJCTEsCgkJCQkpOwoKCQkJCWNvbnN0IGVhc2VkID0gZWFzZUluT3V0Q3ViaWMoY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MpOwoJCQkJY29uc3QgYW5nbGUgPQoJCQkJCWVhc2VkICoKCQkJCQkoY3VycmVudE1vdmUucm90YXRpb25BbmdsZSB8fCBNYXRoLlBJIC8gMikgKgoJCQkJCWN1cnJlbnRNb3ZlLmRpcmVjdGlvbjsKCgkJCQlpZiAoY3VycmVudE1vdmUuYXhpcyA9PT0gIngiKSBsYXllckdyb3VwLnJvdGF0aW9uLnggPSBhbmdsZTsKCQkJCWVsc2UgaWYgKGN1cnJlbnRNb3ZlLmF4aXMgPT09ICJ5IikgbGF5ZXJHcm91cC5yb3RhdGlvbi55ID0gYW5nbGU7CgkJCQllbHNlIGxheWVyR3JvdXAucm90YXRpb24ueiA9IGFuZ2xlOwoKCQkJCWlmIChjdXJyZW50Um90YXRpb25Qcm9ncmVzcyA+PSAxKSB7CgkJCQkJY29tbWl0TW92ZSgpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJdGltZVNpbmNlTGFzdE1vdmUgKz0gZGVsdGE7CgkJCQlpZiAodGltZVNpbmNlTGFzdE1vdmUgPiAwLjQpIHsKCQkJCQlzZWxlY3ROZXh0TW92ZSgpOwoJCQkJfQoJCQl9CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhLCBjbGVhcjogdHJ1ZSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlvcmJpdC5yZW1vdmUoKTsKCQkJc2V0RGltZW5zaW9ucyA9IHVuZGVmaW5lZDsKCQkJc2V0RnJlc25lbFVuaWZvcm1zID0gdW5kZWZpbmVkOwoKCQkJbWF0ZXJpYWwucmVtb3ZlKCk7CgkJCWdlb21ldHJ5LnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/slideshow/Slideshow.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgb25EZXN0cm95LCBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGVuc3VyZU1vdGlvbkNvcmVFYXNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW50ZXJmYWNlIEltYWdlIHsKCQlzcmM6IHN0cmluZzsKCQlhbHQ/OiBzdHJpbmc7Cgl9CgoJaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZXMgdG8gZGlzcGxheSBpbiB0aGUgc2xpZGVzaG93LgoJCSAqLwoJCWltYWdlczogSW1hZ2VbXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoJbGV0IHsKCQlpbWFnZXMsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCS4uLnJlc3RQcm9wcwoJfTogQ29tcG9uZW50UHJvcHMgPSAkcHJvcHMoKTsKCW9uTW91bnQoKCkgPT4gewoJCWVuc3VyZU1vdGlvbkNvcmVFYXNlKCk7Cgl9KTsKCWxldCBzbGlkZXNSZWY6IEhUTUxFbGVtZW50W10gPSAkc3RhdGUoW10pOwoJbGV0IGlubmVyc1JlZjogSFRNTEVsZW1lbnRbXSA9ICRzdGF0ZShbXSk7CglsZXQgY3VycmVudEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7CglsZXQgYWN0aXZlVGltZWxpbmU6IGdzYXAuY29yZS5UaW1lbGluZSB8IG51bGwgPSBudWxsOwoJY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSAxLjU7CgoJY29uc3QgYXR0YWNoU2xpZGUgPSAoaW5kZXg6IG51bWJlcikgPT4gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJc2xpZGVzUmVmW2luZGV4XSA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaElubmVyID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7CgkJaW5uZXJzUmVmW2luZGV4XSA9IG5vZGU7Cgl9OwoJZnVuY3Rpb24gbmF2aWdhdGUodGFyZ2V0SW5kZXg6IG51bWJlcikgewoJCWlmIChpc0FuaW1hdGluZyB8fCB0YXJnZXRJbmRleCA9PT0gY3VycmVudEluZGV4KSByZXR1cm47CgkJaXNBbmltYXRpbmcgPSB0cnVlOwoJCWNvbnN0IGRpcmVjdGlvbiA9IHRhcmdldEluZGV4ID4gY3VycmVudEluZGV4ID8gMSA6IC0xOwoJCWNvbnN0IHByZXZpb3VzSW5kZXggPSBjdXJyZW50SW5kZXg7CgkJY3VycmVudEluZGV4ID0gdGFyZ2V0SW5kZXg7CgkJY29uc3QgY3VycmVudFNsaWRlID0gc2xpZGVzUmVmW3ByZXZpb3VzSW5kZXhdOwoJCWNvbnN0IGN1cnJlbnRJbm5lciA9IGlubmVyc1JlZltwcmV2aW91c0luZGV4XTsKCQljb25zdCB1cGNvbWluZ1NsaWRlID0gc2xpZGVzUmVmW2N1cnJlbnRJbmRleF07CgkJY29uc3QgdXBjb21pbmdJbm5lciA9IGlubmVyc1JlZltjdXJyZW50SW5kZXhdOwoJCWFjdGl2ZVRpbWVsaW5lPy5raWxsKCk7CgkJZ3NhcC5zZXQodXBjb21pbmdTbGlkZSwgeyB6SW5kZXg6IDIwIH0pOwoJCWdzYXAuc2V0KGN1cnJlbnRTbGlkZSwgeyB6SW5kZXg6IDEwIH0pOwoJCWNvbnN0IHRsID0gZ3NhcC50aW1lbGluZSh7CgkJCWRlZmF1bHRzOiB7IGR1cmF0aW9uOiBhbmltYXRpb25EdXJhdGlvbiwgZWFzZTogIm1vdGlvbi1jb3JlLWVhc2UiIH0sCgkJCW9uQ29tcGxldGUoKSB7CgkJCQlpc0FuaW1hdGluZyA9IGZhbHNlOwoJCQkJaWYgKGFjdGl2ZVRpbWVsaW5lID09PSB0bCkgewoJCQkJCWFjdGl2ZVRpbWVsaW5lID0gbnVsbDsKCQkJCX0KCQkJCWdzYXAuc2V0KGN1cnJlbnRTbGlkZSwgeyB6SW5kZXg6IDAsIHhQZXJjZW50OiAwIH0pOwoJCQkJZ3NhcC5zZXQoY3VycmVudElubmVyLCB7IHhQZXJjZW50OiAwIH0pOwoJCQkJZ3NhcC5zZXQodXBjb21pbmdTbGlkZSwgeyB6SW5kZXg6IDEwIH0pOwoJCQl9LAoJCX0pOwoJCWFjdGl2ZVRpbWVsaW5lID0gdGw7CgkJdGwudG8oY3VycmVudFNsaWRlLCB7IHhQZXJjZW50OiAtZGlyZWN0aW9uICogMTAwIH0sIDApCgkJCS50byhjdXJyZW50SW5uZXIsIHsgeFBlcmNlbnQ6IGRpcmVjdGlvbiAqIDc1IH0sIDApCgkJCS5mcm9tVG8odXBjb21pbmdTbGlkZSwgeyB4UGVyY2VudDogZGlyZWN0aW9uICogMTAwIH0sIHsgeFBlcmNlbnQ6IDAgfSwgMCkKCQkJLmZyb21Ubyh1cGNvbWluZ0lubmVyLCB7IHhQZXJjZW50OiAtZGlyZWN0aW9uICogNzUgfSwgeyB4UGVyY2VudDogMCB9LCAwKTsKCX0KCW9uRGVzdHJveSgoKSA9PiB7CgkJYWN0aXZlVGltZWxpbmU/LmtpbGwoKTsKCQlhY3RpdmVUaW1lbGluZSA9IG51bGw7Cgl9KTsKCSRlZmZlY3QoKCkgPT4gewoJCWlmIChzbGlkZXNSZWZbY3VycmVudEluZGV4XSkgewoJCQlnc2FwLnNldChzbGlkZXNSZWZbY3VycmVudEluZGV4XSwgeyB6SW5kZXg6IDEwIH0pOwoJCX0KCX0pOwo8L3NjcmlwdD4KCjxkaXYKCWNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfQoJey4uLnJlc3RQcm9wc30KPgoJeyNlYWNoIGltYWdlcyBhcyBpbWFnZSwgaSAoaW1hZ2Uuc3JjKX0KCQk8ZGl2CgkJCXtAYXR0YWNoIGF0dGFjaFNsaWRlKGkpfQoJCQljbGFzcz0icG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC0wIHotMCBvdmVyZmxvdy1oaWRkZW4gd2lsbC1jaGFuZ2UtW3RyYW5zZm9ybSxvcGFjaXR5XSIKCQk+CgkJCTxpbWcKCQkJCXtAYXR0YWNoIGF0dGFjaElubmVyKGkpfQoJCQkJc3JjPXtpbWFnZS5zcmN9CgkJCQlhbHQ9e2ltYWdlLmFsdCA/PyAiIn0KCQkJCWNsYXNzPSJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIG9iamVjdC1jb3ZlciB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iCgkJCQlkcmFnZ2FibGU9ImZhbHNlIgoJCQkvPgoJCTwvZGl2PgoJey9lYWNofQoJPGRpdgoJCWNsYXNzPSJncm91cCBhYnNvbHV0ZSBib3R0b20tNCBsZWZ0LTEvMiB6LTUwIGZsZXggLXRyYW5zbGF0ZS14LTEvMiBnYXAtMiIKCT4KCQl7I2VhY2ggaW1hZ2VzIGFzIGltYWdlLCBpIChpbWFnZS5zcmMpfQoJCQk8YnV0dG9uCgkJCQlvbmNsaWNrPXsoKSA9PiBuYXZpZ2F0ZShpKX0KCQkJCWNsYXNzPSJyZWxhdGl2ZSBzaXplLTEwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXNtIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTcwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSIKCQkJCWFyaWEtbGFiZWw9IkdvIHRvIHNsaWRlIHtpICsgMX0iCgkJCT4KCQkJCTxpbWcKCQkJCQlzcmM9e2ltYWdlLnNyY30KCQkJCQlhbHQ9e2ltYWdlLmFsdCA/PyAiIn0KCQkJCQljbGFzcz0iaC1mdWxsIHctZnVsbCByb3VuZGVkLXNtIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi03MDAgZWFzZS1bY3ViaWMtYmV6aWVyKDAuNjI1LDAuMDUsMCwxKV0gZ3JvdXAtaG92ZXI6c2NhbGUtODAgaG92ZXI6c2NhbGUtMTAwIgoJCQkJLz4KCQkJPC9idXR0b24+CgkJey9lYWNofQoJPC9kaXY+CjwvZGl2Pgo=", - "components/specular-band/SpecularBand.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCB7IE5vVG9uZU1hcHBpbmcgfSBmcm9tICJ0aHJlZSI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1NwZWN1bGFyQmFuZFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSBzcGVjdWxhciBiYW5kcy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogQW5pbWF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIExlbnMgZGlzdG9ydGlvbiBpbnRlbnNpdHkuCgkJICogQGRlZmF1bHQgMC4yCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBBbW91bnQgb2YgaHVlIHNoaWZ0IGZvciBzZWNvbmRhcnkgYmFuZHMgKGluIGRlZ3JlZXMpLgoJCSAqIEBkZWZhdWx0IDMwLjAKCQkgKi8KCQlodWVTaGlmdD86IFNjZW5lUHJvcHNbImh1ZVNoaWZ0Il07CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eS9icmlnaHRuZXNzIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJc3BlZWQgPSAxLjAsCgkJZGlzdG9ydGlvbiA9IDAuMiwKCQlodWVTaGlmdCA9IDMwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUKCQkJCXtjb2xvcn0KCQkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCQl7c3BlZWR9CgkJCQl7ZGlzdG9ydGlvbn0KCQkJCXtodWVTaGlmdH0KCQkJCXtpbnRlbnNpdHl9CgkJCS8+CgkJPC9DYW52YXM+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/specular-band/SpecularBandScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICJ0aHJlZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSBzcGVjdWxhciBiYW5kcy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQljb2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBBbmltYXRpb24gc3BlZWQgbXVsdGlwbGllci4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzcGVlZD86IG51bWJlcjsKCQkvKioKCQkgKiBMZW5zIGRpc3RvcnRpb24gaW50ZW5zaXR5LgoJCSAqIEBkZWZhdWx0IDAuMgoJCSAqLwoJCWRpc3RvcnRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogQW1vdW50IG9mIGh1ZSBzaGlmdCBmb3Igc2Vjb25kYXJ5IGJhbmRzIChpbiBkZWdyZWVzKS4KCQkgKiBAZGVmYXVsdCAzMC4wCgkJICovCgkJaHVlU2hpZnQ/OiBudW1iZXI7CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eS9icmlnaHRuZXNzIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogbnVtYmVyOwoJfQoKCWxldCB7CgkJY29sb3IgPSAiI0ZGNjkwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiLAoJCXNwZWVkID0gMS4wLAoJCWRpc3RvcnRpb24gPSAwLjIsCgkJaHVlU2hpZnQgPSAzMC4wLAoJCWludGVuc2l0eSA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IG1hdGVyaWFsID0gJHN0YXRlPFRIUkVFLlNoYWRlck1hdGVyaWFsPigpOwoJY29uc3QgeyBzaXplIH0gPSB1c2VUaHJlbHRlKCk7Cgljb25zdCByZXNvbHV0aW9uVW5pZm9ybSA9IG5ldyBUSFJFRS5WZWN0b3IyKDEsIDEpOwoJY29uc3QgcHJpbWFyeUNvbG9yVW5pZm9ybSA9IG5ldyBUSFJFRS5Db2xvcigpOwoJY29uc3QgYmFja2dyb3VuZENvbG9yVW5pZm9ybSA9IG5ldyBUSFJFRS5Db2xvcigpOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMyB1Q29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVCYWNrZ3JvdW5kQ29sb3I7CgkJdW5pZm9ybSBmbG9hdCB1U3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1RGlzdG9ydGlvbjsKCQl1bmlmb3JtIGZsb2F0IHVIdWVTaGlmdDsKCQl1bmlmb3JtIGZsb2F0IHVJbnRlbnNpdHk7CgoJCQltYXQzIGh1ZVJvdChmbG9hdCBhKSB7CgkJCQlmbG9hdCBjID0gY29zKGEpLCBzID0gc2luKGEpLCB0ID0gMS4wIC0gYzsKCQkJCXJldHVybiBtYXQzKAoJCQkJdCouMzMzK2MsICAgIHQqLjMzMy1zKi41NzcsIHQqLjMzMytzKi41NzcsCgkJCQl0Ki4zMzMrcyouNTc3LCB0Ki4zMzMrYywgICB0Ki4zMzMtcyouNTc3LAoJCQkJdCouMzMzLXMqLjU3NywgdCouMzMzK3MqLjU3NywgdCouMzMzK2MKCQkJCSk7CgkJCX0KCgkJCWZsb2F0IGNvbG9yTHVtYSh2ZWMzIGMpIHsKCQkJCXJldHVybiBkb3QoYywgdmVjMygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSk7CgkJCX0KCgkJCXZlYzMgaHVlRnJvbUNvbG9yKHZlYzMgYywgdmVjMyBmYWxsYmFjaykgewoJCQkJZmxvYXQgbSA9IG1heChtYXgoYy5yLCBjLmcpLCBjLmIpOwoJCQkJaWYgKG0gPCAxZS01KSByZXR1cm4gZmFsbGJhY2s7CgkJCQlyZXR1cm4gY2xhbXAoYyAvIG0sIDAuMCwgMS4wKTsKCQkJfQoKCQkJdmVjMyBibGVuZEFkYXB0aXZlKHZlYzMgYmcsIHZlYzMgZWZmZWN0LCBmbG9hdCBzb2Z0bmVzcykgewoJCQkJZmxvYXQgYmdMdW0gPSBjb2xvckx1bWEoYmcpOwoJCQkJZmxvYXQgbGlnaHRCZyA9IHNtb290aHN0ZXAoMC40NSwgMC45NSwgYmdMdW0pOwoJCQkJZmxvYXQgZWRnZSA9IGNsYW1wKHNvZnRuZXNzLCAwLjAsIDEuMCk7CgoJCQkJdmVjMyBhZGRpdGl2ZSA9IGJnICsgZWZmZWN0OwoJCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQkJdmVjMyB0aW50VGFyZ2V0ID0gbWl4KGJnLCBlZmZlY3RIdWUsIDAuOSk7CgkJCQl2ZWMzIHRpbnQgPSBtaXgoYmcsIHRpbnRUYXJnZXQsIGVkZ2UpOwoKCQkJCXJldHVybiBtaXgoYWRkaXRpdmUsIHRpbnQsIGxpZ2h0QmcpOwoJCQl9CgoJCXZvaWQgbWFpbkltYWdlKG91dCB2ZWM0IG8sIHZlYzIgdXYpIHsKCQkJdmVjMiB1ID0gKHV2ICogMi4wIC0gMS4wKTsKCQkJdS54ICo9IHVSZXNvbHV0aW9uLnggLyB1UmVzb2x1dGlvbi55OwoKCQkJZmxvYXQgdGltZSA9IHVUaW1lICogdVNwZWVkOwoKCQkJdSAvPSAwLjUgKyB1RGlzdG9ydGlvbiAqIGRvdCh1LCB1KTsKCQkJdSArPSAwLjIgKiBjb3ModGltZSkgLSA3LjU2OwoKCQkJdmVjMyBiYXNlQ29sb3IgPSB1Q29sb3I7CgoJCQl2ZWMzIHBhbGV0dGVbM107CgkJCXBhbGV0dGVbMF0gPSBiYXNlQ29sb3I7CgkJCXBhbGV0dGVbMV0gPSBodWVSb3QocmFkaWFucyh1SHVlU2hpZnQpKSAqIGJhc2VDb2xvcjsKCQkJcGFsZXR0ZVsyXSA9IGh1ZVJvdChyYWRpYW5zKC11SHVlU2hpZnQpKSAqIGJhc2VDb2xvcjsKCgkJCQl2ZWMzIGNvbCA9IHZlYzMoMC4wKTsKCQkJCWZsb2F0IGVkZ2VGaWVsZCA9IDAuMDsKCQkJCWZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKCQkJCQl2ZWMyIHV2X2xvb3AgPSBzaW4oMS41ICogdS55eCArIDIuMCAqIGNvcyh1IC09IDAuMDEpKTsKCQkJCQlmbG9hdCB2YWwgPSAxLjAgLSBleHAoLTYuMCAvIGV4cCg2LjAgKiBsZW5ndGgodXZfbG9vcCArIHNpbig1LjAgKiB1dl9sb29wLnkgLSAzLjAgKiB0aW1lKSAvIDQuMCkpKTsKCQkJCQl2YWwgPSBwb3coY2xhbXAodmFsLCAwLjAsIDEuMCksIDEuNCk7CgkJCQkJZWRnZUZpZWxkICs9IHZhbDsKCQkJCQljb2wgKz0gdmFsICogcGFsZXR0ZVtpXTsKCQkJCX0KCQkJCXZlYzMgYmFuZHMgPSBjb2wgKiB1SW50ZW5zaXR5OwoJCQkJZmxvYXQgc29mdE1hc2sgPSAxLjAgLSBleHAoLTAuODUgKiBlZGdlRmllbGQgKiB1SW50ZW5zaXR5KTsKCQkJCXZlYzMgcmdiID0gYmxlbmRBZGFwdGl2ZSh1QmFja2dyb3VuZENvbG9yLCBiYW5kcywgc29mdE1hc2spOwoJCQkJbyA9IHZlYzQocmdiLCAxLjApOwoJCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIHZVdik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQkJI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlyZXNvbHV0aW9uVW5pZm9ybS5zZXQoJHNpemUud2lkdGgsICRzaXplLmhlaWdodCk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlwcmltYXJ5Q29sb3JVbmlmb3JtLnNldChjb2xvcik7CgkJYmFja2dyb3VuZENvbG9yVW5pZm9ybS5zZXQoYmFja2dyb3VuZENvbG9yKTsKCgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVDb2xvci52YWx1ZS5jb3B5KHByaW1hcnlDb2xvclVuaWZvcm0pOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVCYWNrZ3JvdW5kQ29sb3IudmFsdWUuY29weShiYWNrZ3JvdW5kQ29sb3JVbmlmb3JtKTsKCQltYXRlcmlhbC51bmlmb3Jtcy51U3BlZWQudmFsdWUgPSBzcGVlZDsKCQltYXRlcmlhbC51bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJbWF0ZXJpYWwudW5pZm9ybXMudUh1ZVNoaWZ0LnZhbHVlID0gaHVlU2hpZnQ7CgkJbWF0ZXJpYWwudW5pZm9ybXMudUludGVuc2l0eS52YWx1ZSA9IGludGVuc2l0eTsKCX0pOwoKCXVzZVRhc2soKGRlbHRhKSA9PiB7CgkJaWYgKCFtYXRlcmlhbCkgcmV0dXJuOwoJCW1hdGVyaWFsLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoJfSk7Cjwvc2NyaXB0PgoKPFQuTWVzaD4KCTxULlBsYW5lR2VvbWV0cnkgYXJncz17WzIsIDJdfSAvPgoJPFQuU2hhZGVyTWF0ZXJpYWwKCQliaW5kOnJlZj17bWF0ZXJpYWx9CgkJe3ZlcnRleFNoYWRlcn0KCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJZGVwdGhUZXN0PXtmYWxzZX0KCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQl1bmlmb3Jtcz17ewoJCQl1VGltZTogeyB2YWx1ZTogMC4wIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1Q29sb3I6IHsgdmFsdWU6IHByaW1hcnlDb2xvclVuaWZvcm0gfSwKCQkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogYmFja2dyb3VuZENvbG9yVW5pZm9ybSB9LAoJCQl1U3BlZWQ6IHsgdmFsdWU6IHNwZWVkIH0sCgkJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBkaXN0b3J0aW9uIH0sCgkJCXVIdWVTaGlmdDogeyB2YWx1ZTogaHVlU2hpZnQgfSwKCQkJdUludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJfX0KCS8+CjwvVC5NZXNoPgo=", + "components/specular-band/SpecularBand.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1NwZWN1bGFyQmFuZFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSBzcGVjdWxhciBiYW5kcy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogQW5pbWF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIExlbnMgZGlzdG9ydGlvbiBpbnRlbnNpdHkuCgkJICogQGRlZmF1bHQgMC4yCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBBbW91bnQgb2YgaHVlIHNoaWZ0IGZvciBzZWNvbmRhcnkgYmFuZHMgKGluIGRlZ3JlZXMpLgoJCSAqIEBkZWZhdWx0IDMwLjAKCQkgKi8KCQlodWVTaGlmdD86IFNjZW5lUHJvcHNbImh1ZVNoaWZ0Il07CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eS9icmlnaHRuZXNzIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJc3BlZWQgPSAxLjAsCgkJZGlzdG9ydGlvbiA9IDAuMiwKCQlodWVTaGlmdCA9IDMwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCXtzcGVlZH0KCQkJe2Rpc3RvcnRpb259CgkJCXtodWVTaGlmdH0KCQkJe2ludGVuc2l0eX0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/specular-band/SpecularBandScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIHNwZWN1bGFyIGJhbmRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEFuaW1hdGlvbiBzcGVlZCBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIExlbnMgZGlzdG9ydGlvbiBpbnRlbnNpdHkuCgkJICogQGRlZmF1bHQgMC4yCgkJICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBBbW91bnQgb2YgaHVlIHNoaWZ0IGZvciBzZWNvbmRhcnkgYmFuZHMgKGluIGRlZ3JlZXMpLgoJCSAqIEBkZWZhdWx0IDMwLjAKCQkgKi8KCQlodWVTaGlmdD86IG51bWJlcjsKCQkvKioKCQkgKiBHbG9iYWwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQljb2xvciA9ICIjRkY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJc3BlZWQgPSAxLjAsCgkJZGlzdG9ydGlvbiA9IDAuMiwKCQlodWVTaGlmdCA9IDMwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdVNwZWVkOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUh1ZVNoaWZ0OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBudW1iZXIgfTsKCX0+KCk7CgoJY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCgljb25zdCBub3JtYWxpemVUcmlwbGV0ID0gKAoJCXI6IG51bWJlciwKCQlnOiBudW1iZXIsCgkJYjogbnVtYmVyLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHIsIGcsIGIpID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFtjbGFtcDAxKHIgLyBzY2FsZSksIGNsYW1wMDEoZyAvIHNjYWxlKSwgY2xhbXAwMShiIC8gc2NhbGUpXTsKCX07CgoJY29uc3QgcGFyc2VIZXhDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJY29uc3QgaGV4ID0gdmFsdWUucmVwbGFjZSgiIyIsICIiKS50cmltKCk7CgkJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleFsxXSArIGhleFsxXSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDAsIDIpLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCXJldHVybiBudWxsOwoJfTsKCglsZXQgY3NzQ29sb3JDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsIHwgdW5kZWZpbmVkOwoJY29uc3QgcGFyc2VDc3NDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwoJCWlmIChjc3NDb2xvckNvbnRleHQgPT09IHVuZGVmaW5lZCkgewoJCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQkJcGFyc2VyQ2FudmFzLndpZHRoID0gMTsKCQkJcGFyc2VyQ2FudmFzLmhlaWdodCA9IDE7CgkJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJCX0KCQlpZiAoIWNzc0NvbG9yQ29udGV4dCkgcmV0dXJuIG51bGw7CgoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7CgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlOwoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBjc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlOwoKCQlpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQkJcmV0dXJuIHBhcnNlSGV4Q29sb3Iobm9ybWFsaXplZCk7CgkJfQoKCQljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CgkJaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7CgkJY29uc3QgcGFydHMgPSBtYXRjaFsxXQoJCQkuc3BsaXQoIiwiKQoJCQkubWFwKChwYXJ0KSA9PiBOdW1iZXIucGFyc2VGbG9hdChwYXJ0LnRyaW0oKSkpCgkJCS5maWx0ZXIoKHBhcnQpID0+IE51bWJlci5pc0Zpbml0ZShwYXJ0KSk7CgkJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQlpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJCWNvbnN0IGludCA9IE1hdGgubWluKDB4ZmZmZmZmLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHZhbHVlKSkpOwoJCQlyZXR1cm4gWwoJCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJCSgoaW50ID4+IDgpICYgMjU1KSAvIDI1NSwKCQkJCShpbnQgJiAyNTUpIC8gMjU1LAoJCQldOwoJCX0KCgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgaGV4ID0gdmFsdWUudHJpbSgpOwoJCQljb25zdCBwYXJzZWQgPSBoZXguc3RhcnRzV2l0aCgiIyIpCgkJCQk/IHBhcnNlSGV4Q29sb3IoaGV4KQoJCQkJOiBwYXJzZUNzc0NvbG9yKGhleCk7CgkJCXJldHVybiBwYXJzZWQgPz8gZmFsbGJhY2s7CgkJfQoKCQlpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID49IDMpIHsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQodmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7CgkJfQoKCQlpZiAoCgkJCXZhbHVlICYmCgkJCXR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgJiYKCQkJInIiIGluIHZhbHVlICYmCgkJCSJnIiBpbiB2YWx1ZSAmJgoJCQkiYiIgaW4gdmFsdWUKCQkpIHsKCQkJY29uc3QgcmdiID0gdmFsdWUgYXMgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHJnYi5yLCByZ2IuZywgcmdiLmIpOwoJCX0KCgkJcmV0dXJuIGZhbGxiYWNrOwoJfTsKCgljb25zdCB0b0xpbmVhclJnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b1JnYih2YWx1ZSwgZmFsbGJhY2spOwoJCXJldHVybiBbc3JnYlRvTGluZWFyKHIpLCBzcmdiVG9MaW5lYXIoZyksIHNyZ2JUb0xpbmVhcihiKV07Cgl9OwoKCWNvbnN0IGFwcGx5Q29sb3IgPSAoCgkJdGFyZ2V0OiBWZWMzLAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b0xpbmVhclJnYih2YWx1ZSwgZmFsbGJhY2spOwoJCXRhcmdldC5zZXQociwgZywgYik7Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdVNwZWVkOwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb247CgkJdW5pZm9ybSBmbG9hdCB1SHVlU2hpZnQ7CgkJdW5pZm9ybSBmbG9hdCB1SW50ZW5zaXR5OwoKCQltYXQzIGh1ZVJvdChmbG9hdCBhKSB7CgkJCWZsb2F0IGMgPSBjb3MoYSksIHMgPSBzaW4oYSksIHQgPSAxLjAgLSBjOwoJCQlyZXR1cm4gbWF0MygKCQkJdCouMzMzK2MsICAgIHQqLjMzMy1zKi41NzcsIHQqLjMzMytzKi41NzcsCgkJCXQqLjMzMytzKi41NzcsIHQqLjMzMytjLCAgIHQqLjMzMy1zKi41NzcsCgkJCXQqLjMzMy1zKi41NzcsIHQqLjMzMytzKi41NzcsIHQqLjMzMytjCgkJCSk7CgkJfQoKCQlmbG9hdCBjb2xvckx1bWEodmVjMyBjKSB7CgkJCXJldHVybiBkb3QoYywgdmVjMygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSk7CgkJfQoKCQl2ZWMzIGh1ZUZyb21Db2xvcih2ZWMzIGMsIHZlYzMgZmFsbGJhY2spIHsKCQkJZmxvYXQgbSA9IG1heChtYXgoYy5yLCBjLmcpLCBjLmIpOwoJCQlpZiAobSA8IDFlLTUpIHJldHVybiBmYWxsYmFjazsKCQkJcmV0dXJuIGNsYW1wKGMgLyBtLCAwLjAsIDEuMCk7CgkJfQoKCQl2ZWMzIGJsZW5kQWRhcHRpdmUodmVjMyBiZywgdmVjMyBlZmZlY3QsIGZsb2F0IHNvZnRuZXNzKSB7CgkJCWZsb2F0IGJnTHVtID0gY29sb3JMdW1hKGJnKTsKCQkJZmxvYXQgbGlnaHRCZyA9IHNtb290aHN0ZXAoMC40NSwgMC45NSwgYmdMdW0pOwoJCQlmbG9hdCBlZGdlID0gY2xhbXAoc29mdG5lc3MsIDAuMCwgMS4wKTsKCgkJCXZlYzMgYWRkaXRpdmUgPSBiZyArIGVmZmVjdDsKCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQl2ZWMzIHRpbnRUYXJnZXQgPSBtaXgoYmcsIGVmZmVjdEh1ZSwgMC45KTsKCQkJdmVjMyB0aW50ID0gbWl4KGJnLCB0aW50VGFyZ2V0LCBlZGdlKTsKCgkJCXJldHVybiBtaXgoYWRkaXRpdmUsIHRpbnQsIGxpZ2h0QmcpOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbkltYWdlKG91dCB2ZWM0IG8sIHZlYzIgdXYpIHsKCQkJdmVjMiB1ID0gKHV2ICogMi4wIC0gMS4wKTsKCQkJdS54ICo9IHVSZXNvbHV0aW9uLnggLyB1UmVzb2x1dGlvbi55OwoKCQkJZmxvYXQgdGltZSA9IHVUaW1lICogdVNwZWVkOwoKCQkJdSAvPSAwLjUgKyB1RGlzdG9ydGlvbiAqIGRvdCh1LCB1KTsKCQkJdSArPSAwLjIgKiBjb3ModGltZSkgLSA3LjU2OwoKCQkJdmVjMyBiYXNlQ29sb3IgPSB1Q29sb3I7CgoJCQl2ZWMzIHBhbGV0dGVbM107CgkJCXBhbGV0dGVbMF0gPSBiYXNlQ29sb3I7CgkJCXBhbGV0dGVbMV0gPSBodWVSb3QocmFkaWFucyh1SHVlU2hpZnQpKSAqIGJhc2VDb2xvcjsKCQkJcGFsZXR0ZVsyXSA9IGh1ZVJvdChyYWRpYW5zKC11SHVlU2hpZnQpKSAqIGJhc2VDb2xvcjsKCgkJCXZlYzMgY29sID0gdmVjMygwLjApOwoJCQlmbG9hdCBlZGdlRmllbGQgPSAwLjA7CgkJCWZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKCQkJCXZlYzIgdXZfbG9vcCA9IHNpbigxLjUgKiB1Lnl4ICsgMi4wICogY29zKHUgLT0gMC4wMSkpOwoJCQkJZmxvYXQgdmFsID0gMS4wIC0gZXhwKC02LjAgLyBleHAoNi4wICogbGVuZ3RoKHV2X2xvb3AgKyBzaW4oNS4wICogdXZfbG9vcC55IC0gMy4wICogdGltZSkgLyA0LjApKSk7CgkJCQl2YWwgPSBwb3coY2xhbXAodmFsLCAwLjAsIDEuMCksIDEuNCk7CgkJCQllZGdlRmllbGQgKz0gdmFsOwoJCQkJY29sICs9IHZhbCAqIHBhbGV0dGVbaV07CgkJCX0KCQkJdmVjMyBiYW5kcyA9IGNvbCAqIHVJbnRlbnNpdHk7CgkJCWZsb2F0IHNvZnRNYXNrID0gMS4wIC0gZXhwKC0wLjg1ICogZWRnZUZpZWxkICogdUludGVuc2l0eSk7CgkJCXZlYzMgcmdiID0gYmxlbmRBZGFwdGl2ZSh1QmFja2dyb3VuZENvbG9yLCBiYW5kcywgc29mdE1hc2spOwoJCQlvID0gdmVjNChyZ2IsIDEuMCk7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCB2VXYpOwoJCQlmcmFnQ29sb3IucmdiID0gbGluZWFyVG9TcmdiKGZyYWdDb2xvci5yZ2IpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXVuaWZvcm1zKSByZXR1cm47CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51Q29sb3IudmFsdWUsIGNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJdW5pZm9ybXMudVNwZWVkLnZhbHVlID0gc3BlZWQ7CgkJdW5pZm9ybXMudURpc3RvcnRpb24udmFsdWUgPSBkaXN0b3J0aW9uOwoJCXVuaWZvcm1zLnVIdWVTaGlmdC52YWx1ZSA9IGh1ZVNoaWZ0OwoJCXVuaWZvcm1zLnVJbnRlbnNpdHkudmFsdWUgPSBpbnRlbnNpdHk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbENvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxLCAxMDUgLyAyNTUsIDBdKTsKCQljb25zdCBpbml0aWFsQmFja2dyb3VuZENvbG9yID0gdG9MaW5lYXJSZ2IoYmFja2dyb3VuZENvbG9yLCBbMCwgMCwgMF0pOwoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhpbml0aWFsQ29sb3JbMF0sIGluaXRpYWxDb2xvclsxXSwgaW5pdGlhbENvbG9yWzJdKSwKCQkJfSwKCQkJdUJhY2tncm91bmRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEJhY2tncm91bmRDb2xvclsxXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZENvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdVNwZWVkOiB7IHZhbHVlOiBzcGVlZCB9LAoJCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogZGlzdG9ydGlvbiB9LAoJCQl1SHVlU2hpZnQ6IHsgdmFsdWU6IGh1ZVNoaWZ0IH0sCgkJCXVJbnRlbnNpdHk6IHsgdmFsdWU6IGludGVuc2l0eSB9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCQkJbG9jYWxVbmlmb3Jtcy51VGltZS52YWx1ZSArPSBkZWx0YTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", "components/split-hover/SplitHover.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU3BsaXRUZXh0IH0gZnJvbSAiZ3NhcC9kaXN0L1NwbGl0VGV4dCI7CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBlbnN1cmVNb3Rpb25Db3JlRWFzZSwgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWludGVyZmFjZSBDb21wb25lbnRQcm9wcyB7CgkJLyoqCgkJICogVGhlIGNvbnRlbnQgdG8gZHVwbGljYXRlIGFuZCBhbmltYXRlIG9uIGhvdmVyLgoJCSAqLwoJCWNoaWxkcmVuPzogU25pcHBldDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEFuIG9wdGlvbmFsIGV4dGVybmFsIGVsZW1lbnQgdGhhdCB0cmlnZ2VycyB0aGUgaG92ZXIgZWZmZWN0LgoJCSAqIElmIG51bGwsIHRoZSBjb21wb25lbnQncyB3cmFwcGVyIHRyaWdnZXJzIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgbnVsbAoJCSAqLwoJCWhvdmVyVGFyZ2V0PzogSFRNTEVsZW1lbnQgfCBudWxsOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2hpbGRyZW4sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWhvdmVyVGFyZ2V0ID0gbnVsbCwKCQkuLi5yZXN0UHJvcHMKCX06IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7CgoJb25Nb3VudCgoKSA9PiB7CgkJcmVnaXN0ZXJQbHVnaW5PbmNlKFNwbGl0VGV4dCk7CgkJZW5zdXJlTW90aW9uQ29yZUVhc2UoKTsKCX0pOwoKCWxldCB3cmFwcGVyUmVmOiBIVE1MU3BhbkVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgb3JpZ2luYWxTcGFuOiBIVE1MU3BhbkVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgY2xvbmVTcGFuOiBIVE1MU3BhbkVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgb3JpZ2luYWxTcGxpdDogU3BsaXRUZXh0IHwgbnVsbCA9IG51bGw7CglsZXQgY2xvbmVTcGxpdDogU3BsaXRUZXh0IHwgbnVsbCA9IG51bGw7CgoJY29uc3QgYXR0YWNoV3JhcHBlclJlZiA9IChub2RlOiBIVE1MU3BhbkVsZW1lbnQpID0+IHsKCQl3cmFwcGVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAod3JhcHBlclJlZiA9PT0gbm9kZSkgewoJCQkJd3JhcHBlclJlZiA9IHVuZGVmaW5lZDsKCQkJfQoJCX07Cgl9OwoKCWNvbnN0IGF0dGFjaE9yaWdpbmFsU3BhbiA9IChub2RlOiBIVE1MU3BhbkVsZW1lbnQpID0+IHsKCQlvcmlnaW5hbFNwYW4gPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmIChvcmlnaW5hbFNwYW4gPT09IG5vZGUpIHsKCQkJCW9yaWdpbmFsU3BhbiA9IHVuZGVmaW5lZDsKCQkJfQoJCX07Cgl9OwoKCWNvbnN0IGF0dGFjaENsb25lU3BhbiA9IChub2RlOiBIVE1MU3BhbkVsZW1lbnQpID0+IHsKCQljbG9uZVNwYW4gPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmIChjbG9uZVNwYW4gPT09IG5vZGUpIHsKCQkJCWNsb25lU3BhbiA9IHVuZGVmaW5lZDsKCQkJfQoJCX07Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuOwoKCQljb25zdCBub2RlID0gaG92ZXJUYXJnZXQgPz8gd3JhcHBlclJlZjsKCQlpZiAoIW5vZGUgfHwgIW9yaWdpbmFsU3BhbiB8fCAhY2xvbmVTcGFuKSByZXR1cm47CgoJCWxldCB0aW1lbGluZTogZ3NhcC5jb3JlLlRpbWVsaW5lIHwgbnVsbCA9IG51bGw7CgoJCW9yaWdpbmFsU3BsaXQgPSBTcGxpdFRleHQuY3JlYXRlKG9yaWdpbmFsU3BhbiwgewoJCQl0eXBlOiAiY2hhcnMiLAoJCQljaGFyc0NsYXNzOiAiaW5saW5lLWJsb2NrIiwKCQkJb25TcGxpdDogKHNlbGYpID0+IHsKCQkJCWNvbnN0IGNsb25lTm9kZSA9IGNsb25lU3BhbjsKCQkJCWlmICghY2xvbmVOb2RlKSByZXR1cm47CgoJCQkJaWYgKGNsb25lU3BsaXQpIGNsb25lU3BsaXQucmV2ZXJ0KCk7CgkJCQljbG9uZVNwbGl0ID0gU3BsaXRUZXh0LmNyZWF0ZShjbG9uZU5vZGUsIHsKCQkJCQl0eXBlOiAiY2hhcnMiLAoJCQkJCWNoYXJzQ2xhc3M6ICJpbmxpbmUtYmxvY2siLAoJCQkJfSk7CgoJCQkJZ3NhcC5zZXQoc2VsZi5jaGFycywgeyB5UGVyY2VudDogMCB9KTsKCQkJCWdzYXAuc2V0KGNsb25lU3BsaXQuY2hhcnMsIHsgeVBlcmNlbnQ6IDEwMCB9KTsKCgkJCQl0aW1lbGluZT8ua2lsbCgpOwoJCQkJdGltZWxpbmUgPSBnc2FwCgkJCQkJLnRpbWVsaW5lKHsgcGF1c2VkOiB0cnVlIH0pCgkJCQkJLnRvKAoJCQkJCQlzZWxmLmNoYXJzLAoJCQkJCQl7CgkJCQkJCQl5UGVyY2VudDogLTEwMCwKCQkJCQkJCXN0YWdnZXI6IDAuMDIsCgkJCQkJCQlkdXJhdGlvbjogMC4zNSwKCQkJCQkJCWVhc2U6ICJtb3Rpb24tY29yZS1lYXNlIiwKCQkJCQkJfSwKCQkJCQkJMCwKCQkJCQkpCgkJCQkJLnRvKAoJCQkJCQljbG9uZVNwbGl0LmNoYXJzLAoJCQkJCQl7CgkJCQkJCQl5UGVyY2VudDogMCwKCQkJCQkJCXN0YWdnZXI6IDAuMDIsCgkJCQkJCQlkdXJhdGlvbjogMC4zNSwKCQkJCQkJCWVhc2U6ICJtb3Rpb24tY29yZS1lYXNlIiwKCQkJCQkJfSwKCQkJCQkJMCwKCQkJCQkpOwoKCQkJCXJldHVybiB0aW1lbGluZTsKCQkJfSwKCQl9KTsKCgkJY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB0aW1lbGluZT8ucGxheSgpOwoJCWNvbnN0IGhhbmRsZUxlYXZlID0gKCkgPT4gdGltZWxpbmU/LnJldmVyc2UoKTsKCgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgaGFuZGxlRW50ZXIpOwoJCW5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIGhhbmRsZUxlYXZlKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgaGFuZGxlRW50ZXIpOwoJCQlub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCBoYW5kbGVMZWF2ZSk7CgkJCXRpbWVsaW5lPy5raWxsKCk7CgkJCW9yaWdpbmFsU3BsaXQ/LnJldmVydCgpOwoJCQljbG9uZVNwbGl0Py5yZXZlcnQoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPHNwYW4KCXsuLi5yZXN0UHJvcHN9CgljbGFzcz17Y24oCgkJImZvbnQtaW5oZXJpdCByZWxhdGl2ZSBpbmxpbmUtZmxleCBvdmVyZmxvdy1oaWRkZW4gYWxpZ24tYmFzZWxpbmUgbGVhZGluZy1ub25lIHRleHQtaW5oZXJpdCIsCgkJY2xhc3NOYW1lLAoJKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCTxzcGFuIHtAYXR0YWNoIGF0dGFjaE9yaWdpbmFsU3Bhbn0+CgkJe0ByZW5kZXIgY2hpbGRyZW4/LigpfQoJPC9zcGFuPgoJPHNwYW4KCQl7QGF0dGFjaCBhdHRhY2hDbG9uZVNwYW59CgkJY2xhc3M9InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQtMCIKCQlhcmlhLWhpZGRlbj0idHJ1ZSIKCT4KCQl7QHJlbmRlciBjaGlsZHJlbj8uKCl9Cgk8L3NwYW4+Cjwvc3Bhbj4K", "components/split-reveal/SplitReveal.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU3BsaXRUZXh0IH0gZnJvbSAiZ3NhcC9kaXN0L1NwbGl0VGV4dCI7CglpbXBvcnQgeyBTY3JvbGxUcmlnZ2VyIH0gZnJvbSAiZ3NhcC9kaXN0L1Njcm9sbFRyaWdnZXIiOwoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgZW5zdXJlTW90aW9uQ29yZUVhc2UsIHJlZ2lzdGVyUGx1Z2luT25jZSB9IGZyb20gIi4uL2hlbHBlcnMvZ3NhcCI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNwbGl0TW9kZSA9ICJsaW5lcyIgfCAid29yZHMiIHwgImNoYXJzIjsKCglpbnRlcmZhY2UgTW9kZVNldHRpbmdzIHsKCQlkdXJhdGlvbj86IG51bWJlcjsKCQlzdGFnZ2VyPzogbnVtYmVyOwoJfQoKCXR5cGUgU3BsaXRSZXZlYWxDb25maWcgPSBQYXJ0aWFsPFJlY29yZDxTcGxpdE1vZGUsIE1vZGVTZXR0aW5ncz4+OwoKCWludGVyZmFjZSBDb21wb25lbnRQcm9wcyB7CgkJLyoqCgkJICogVGhlIGNvbnRlbnQgdG8gYmUgc3BsaXQgYW5kIHJldmVhbGVkLgoJCSAqLwoJCWNoaWxkcmVuPzogU25pcHBldDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSBzcGxpdHRpbmcgbW9kZTogJ2xpbmVzJywgJ3dvcmRzJywgb3IgJ2NoYXJzJy4KCQkgKiBAZGVmYXVsdCAibGluZXMiCgkJICovCgkJbW9kZT86IFNwbGl0TW9kZTsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIGZvciBhbmltYXRpb24gZHVyYXRpb24gYW5kIHN0YWdnZXIgZm9yIGVhY2ggbW9kZS4KCQkgKi8KCQljb25maWc/OiBTcGxpdFJldmVhbENvbmZpZzsKCQkvKioKCQkgKiBEZWxheSBiZWZvcmUgdGhlIGFuaW1hdGlvbiBzdGFydHMgKGluIHNlY29uZHMpLgoJCSAqIEBkZWZhdWx0IDAKCQkgKi8KCQlkZWxheT86IG51bWJlcjsKCQkvKioKCQkgKiBXaGV0aGVyIHRvIHRyaWdnZXIgdGhlIGFuaW1hdGlvbiBvbiBzY3JvbGwuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQl0cmlnZ2VyT25TY3JvbGw/OiBib29sZWFuOwoJCS8qKgoJCSAqIFRoZSBlbGVtZW50IHRvIHVzZSBhcyB0aGUgc2Nyb2xsIHRyaWdnZXIgKG9wdGlvbmFsKS4KCQkgKi8KCQlzY3JvbGxFbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsOwoJCS8qKgoJCSAqIFRoZSBIVE1MIHRhZyB0byB1c2UgZm9yIHRoZSB3cmFwcGVyLgoJCSAqIEBkZWZhdWx0ICJkaXYiCgkJICovCgkJYXM/OiBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA7CgkJW3Byb3A6IHN0cmluZ106IHVua25vd247Cgl9CgoJdHlwZSBSZXF1aXJlZENvbmZpZyA9IFJlY29yZDwKCQlTcGxpdE1vZGUsCgkJeyBkdXJhdGlvbjogbnVtYmVyOyBzdGFnZ2VyOiBudW1iZXIgfQoJPjsKCgljb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWRDb25maWcgPSB7CgkJbGluZXM6IHsgZHVyYXRpb246IDAuOCwgc3RhZ2dlcjogMC4wOCB9LAoJCXdvcmRzOiB7IGR1cmF0aW9uOiAwLjYsIHN0YWdnZXI6IDAuMDYgfSwKCQljaGFyczogeyBkdXJhdGlvbjogMC40LCBzdGFnZ2VyOiAwLjAwOCB9LAoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoU3BsaXRUZXh0LCBTY3JvbGxUcmlnZ2VyKTsKCQllbnN1cmVNb3Rpb25Db3JlRWFzZSgpOwoJfSk7CgoJbGV0IHsKCQljaGlsZHJlbiwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJbW9kZSA9ICJsaW5lcyIgYXMgU3BsaXRNb2RlLAoJCWNvbmZpZywKCQlhcyA9ICJkaXYiIGFzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcCwKCQlkZWxheSA9IDAsCgkJdHJpZ2dlck9uU2Nyb2xsID0gZmFsc2UsCgkJc2Nyb2xsRWxlbWVudCwKCQkuLi5yZXN0UHJvcHMKCX06IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgcmVzb2x2ZWRDb25maWcgPSAkZGVyaXZlZC5ieSgoKSA9PiB7CgkJY29uc3Qgb3ZlcnJpZGVzID0gY29uZmlnPy5bbW9kZV07CgkJY29uc3QgZGVmYXVsdHMgPSBERUZBVUxUX0NPTkZJR1ttb2RlXTsKCQlyZXR1cm4gewoJCQlkdXJhdGlvbjogb3ZlcnJpZGVzPy5kdXJhdGlvbiA/PyBkZWZhdWx0cy5kdXJhdGlvbiwKCQkJc3RhZ2dlcjogb3ZlcnJpZGVzPy5zdGFnZ2VyID8/IGRlZmF1bHRzLnN0YWdnZXIsCgkJfTsKCX0pOwoKCWxldCB3cmFwcGVyUmVmOiBIVE1MU3BhbkVsZW1lbnQgfCBudWxsID0gbnVsbDsKCgljb25zdCBhdHRhY2hXcmFwcGVyUmVmID0gKG5vZGU6IEhUTUxTcGFuRWxlbWVudCkgPT4gewoJCXdyYXBwZXJSZWYgPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmICh3cmFwcGVyUmVmID09PSBub2RlKSB7CgkJCQl3cmFwcGVyUmVmID0gbnVsbDsKCQkJfQoJCX07Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuOwoKCQljb25zdCBub2RlID0gd3JhcHBlclJlZjsKCQlpZiAoIW5vZGUpIHJldHVybjsKCQljb25zdCByZXNvbHZlZFNjcm9sbGVyID0KCQkJdHlwZW9mIHNjcm9sbEVsZW1lbnQgPT09ICJzdHJpbmciCgkJCQk/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHNjcm9sbEVsZW1lbnQpCgkJCQk6IHNjcm9sbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudAoJCQkJCT8gc2Nyb2xsRWxlbWVudAoJCQkJCTogbnVsbDsKCQljb25zdCBzY3JvbGxlciA9CgkJCXJlc29sdmVkU2Nyb2xsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHJlc29sdmVkU2Nyb2xsZXIgOiB3aW5kb3c7CgoJCWNvbnN0IHNwbGl0ID0gU3BsaXRUZXh0LmNyZWF0ZShub2RlLCB7CgkJCXR5cGU6ICJsaW5lcywgd29yZHMsIGNoYXJzIiwKCQkJdGFnOiBhcywKCQkJbWFzazogImxpbmVzIiwKCQl9KTsKCgkJY29uc3QgdGFyZ2V0cyA9CgkJCW1vZGUgPT09ICJsaW5lcyIKCQkJCT8gKHNwbGl0LmxpbmVzID8/IFtdKQoJCQkJOiBtb2RlID09PSAid29yZHMiCgkJCQkJPyAoc3BsaXQud29yZHMgPz8gW10pCgkJCQkJOiAoc3BsaXQuY2hhcnMgPz8gW10pOwoKCQlpZiAoIXRhcmdldHMubGVuZ3RoKSB7CgkJCXNwbGl0LnJldmVydCgpOwoJCQlyZXR1cm47CgkJfQoKCQlnc2FwLnNldCh0YXJnZXRzLCB7IHlQZXJjZW50OiAxMTAgfSk7CgoJCWNvbnN0IHR3ZWVuID0gZ3NhcC50byh0YXJnZXRzLCB7CgkJCXlQZXJjZW50OiAwLAoJCQlkdXJhdGlvbjogcmVzb2x2ZWRDb25maWcuZHVyYXRpb24sCgkJCXN0YWdnZXI6IHJlc29sdmVkQ29uZmlnLnN0YWdnZXIsCgkJCWVhc2U6ICJtb3Rpb24tY29yZS1lYXNlIiwKCQkJbGF6eTogZmFsc2UsCgkJCWRlbGF5OiBkZWxheSwKCQkJc2Nyb2xsVHJpZ2dlcjogdHJpZ2dlck9uU2Nyb2xsCgkJCQk/IHsKCQkJCQkJdHJpZ2dlcjogbm9kZSwKCQkJCQkJc2Nyb2xsZXIsCgkJCQkJCXN0YXJ0OiAidG9wIDg1JSIsCgkJCQkJfQoJCQkJOiB1bmRlZmluZWQsCgkJfSk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXR3ZWVuLmtpbGwoKTsKCQkJc3BsaXQucmV2ZXJ0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxzcGFuCgl7Li4ucmVzdFByb3BzfQoJY2xhc3M9e2NuKCJmb250LWluaGVyaXQgcmVsYXRpdmUgYWxpZ24tYmFzZWxpbmUgdGV4dC1pbmhlcml0IiwgY2xhc3NOYW1lKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9zcGFuPgo=", "components/stacking-words/StackingWords.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU2Nyb2xsVHJpZ2dlciB9IGZyb20gImdzYXAvZGlzdC9TY3JvbGxUcmlnZ2VyIjsKCWltcG9ydCB7IFNwbGl0VGV4dCB9IGZyb20gImdzYXAvZGlzdC9TcGxpdFRleHQiOwoJaW1wb3J0IHsgb25Nb3VudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGV4dC9jb250ZW50IHRvIHNwbGl0IGludG8gbGluZXMgYW5kIHdvcmRzLgoJCSAqLwoJCWNoaWxkcmVuPzogU25pcHBldDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgd3JhcHBlci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBTY3JvbGxUcmlnZ2VyIHN0YXJ0IHBvc2l0aW9uLgoJCSAqIEBkZWZhdWx0ICJ0b3AgOTAlIgoJCSAqLwoJCXN0YXJ0Pzogc3RyaW5nOwoJCS8qKgoJCSAqIFNjcm9sbFRyaWdnZXIgZW5kIHBvc2l0aW9uLgoJCSAqIEBkZWZhdWx0ICJ0b3AgMzAlIgoJCSAqLwoJCWVuZD86IHN0cmluZzsKCQkvKioKCQkgKiBTY3JvbGxUcmlnZ2VyIHNjcnViIHZhbHVlLgoJCSAqIEBkZWZhdWx0IDEuMjM0CgkJICovCgkJc2NydWI/OiBib29sZWFuIHwgbnVtYmVyOwoJCS8qKgoJCSAqIFN0YWdnZXIgYXBwbGllZCBhY3Jvc3Mgd29yZHMgaW5zaWRlIGVhY2ggbGluZS4KCQkgKiBAZGVmYXVsdCAwLjIxCgkJICovCgkJc3RhZ2dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBFYXNpbmcgdXNlZCBmb3Igd29yZCB0cmFuc2xhdGlvbi4KCQkgKiBAZGVmYXVsdCAicG93ZXIzLm91dCIKCQkgKi8KCQllYXNlPzogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSBlbGVtZW50IHRvIHVzZSBhcyB0aGUgc2Nyb2xsZXIuIERlZmF1bHRzIHRvIHdpbmRvdy4KCQkgKi8KCQlzY3JvbGxFbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2hpbGRyZW4sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXN0YXJ0ID0gInRvcCA5MCUiLAoJCWVuZCA9ICJ0b3AgMzAlIiwKCQlzY3J1YiA9IDEuMjM0LAoJCXN0YWdnZXIgPSAwLjIxLAoJCWVhc2UgPSAicG93ZXIzLm91dCIsCgkJc2Nyb2xsRWxlbWVudCwKCQkuLi5yZXN0UHJvcHMKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IHdyYXBwZXJSZWY6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7CglsZXQgc3BsaXRJbnN0YW5jZTogU3BsaXRUZXh0IHwgbnVsbCA9IG51bGw7CglsZXQgbGluZVR3ZWVuczogZ3NhcC5jb3JlLlR3ZWVuW10gPSBbXTsKCWNvbnN0IE9GRlNDUkVFTl9NQVJHSU5fUFggPSA4OwoKCWNvbnN0IGF0dGFjaFdyYXBwZXJSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQl3cmFwcGVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAod3JhcHBlclJlZiA9PT0gbm9kZSkgewoJCQkJd3JhcHBlclJlZiA9IG51bGw7CgkJCX0KCQl9OwoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoU2Nyb2xsVHJpZ2dlciwgU3BsaXRUZXh0KTsKCX0pOwoKCWZ1bmN0aW9uIGtpbGxMaW5lVHdlZW5zKCkgewoJCWxpbmVUd2VlbnMuZm9yRWFjaCgodHdlZW4pID0+IHR3ZWVuLmtpbGwoKSk7CgkJbGluZVR3ZWVucyA9IFtdOwoJfQoKCWFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JMYXlvdXQoKSB7CgkJYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHk7CgkJYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+CgkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpLAoJCSk7CgkJYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+CgkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpLAoJCSk7Cgl9CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm47CgkJY29uc3Qgbm9kZSA9IHdyYXBwZXJSZWY7CgkJaWYgKCFub2RlKSByZXR1cm47CgkJY29uc3QgdHJpZ2dlclN0YXJ0ID0gc3RhcnQ7CgkJY29uc3QgdHJpZ2dlckVuZCA9IGVuZDsKCQljb25zdCB0cmlnZ2VyU2NydWIgPSBzY3J1YjsKCQljb25zdCB3b3JkU3RhZ2dlciA9IHN0YWdnZXI7CgkJY29uc3Qgd29yZEVhc2UgPSBlYXNlOwoJCWNvbnN0IHJlc29sdmVkU2Nyb2xsZXIgPQoJCQl0eXBlb2Ygc2Nyb2xsRWxlbWVudCA9PT0gInN0cmluZyIKCQkJCT8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oc2Nyb2xsRWxlbWVudCkKCQkJCTogc2Nyb2xsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJPyBzY3JvbGxFbGVtZW50CgkJCQkJOiBudWxsOwoJCWNvbnN0IHRyaWdnZXJTY3JvbGxlciA9CgkJCXJlc29sdmVkU2Nyb2xsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHJlc29sdmVkU2Nyb2xsZXIgOiB3aW5kb3c7CgoJCWxldCBjYW5jZWxsZWQgPSBmYWxzZTsKCgkJY29uc3QgaW5pdCA9IGFzeW5jICgpID0+IHsKCQkJYXdhaXQgd2FpdEZvckxheW91dCgpOwoJCQlpZiAoY2FuY2VsbGVkIHx8ICF3cmFwcGVyUmVmKSByZXR1cm47CgoJCQlzcGxpdEluc3RhbmNlPy5yZXZlcnQoKTsKCQkJa2lsbExpbmVUd2VlbnMoKTsKCgkJCXNwbGl0SW5zdGFuY2UgPSBTcGxpdFRleHQuY3JlYXRlKHdyYXBwZXJSZWYsIHsKCQkJCWFyaWE6ICJoaWRkZW4iLAoJCQkJYXV0b1NwbGl0OiB0cnVlLAoJCQkJbGluZXNDbGFzczogInN0YWNraW5nLXdvcmRzLWxpbmUiLAoJCQkJb25TcGxpdDogKHNlbGYpID0+IHsKCQkJCQlraWxsTGluZVR3ZWVucygpOwoKCQkJCQljb25zdCB3b3JkcyA9IChzZWxmLndvcmRzID8/IFtdKSBhcyBIVE1MRWxlbWVudFtdOwoJCQkJCXdvcmRzLmZvckVhY2goKHdvcmQpID0+IHsKCQkJCQkJY29uc3QgcmVjdCA9IHdvcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCQkJCWdzYXAuc2V0KHdvcmQsIHsKCQkJCQkJCXg6CgkJCQkJCQkJd2luZG93LmlubmVyV2lkdGggLQoJCQkJCQkJCXJlY3QubGVmdCArCgkJCQkJCQkJcmVjdC53aWR0aCArCgkJCQkJCQkJT0ZGU0NSRUVOX01BUkdJTl9QWCwKCQkJCQkJfSk7CgkJCQkJfSk7CgoJCQkJCShzZWxmLmxpbmVzID8/IFtdKS5mb3JFYWNoKChsaW5lKSA9PiB7CgkJCQkJCWNvbnN0IHR3ZWVuID0gZ3NhcC50bygKCQkJCQkJCWxpbmUucXVlcnlTZWxlY3RvckFsbCgiLnN0YWNraW5nLXdvcmRzLXdvcmQiKSwKCQkJCQkJCXsKCQkJCQkJCQllYXNlOiB3b3JkRWFzZSwKCQkJCQkJCQlzdGFnZ2VyOiB3b3JkU3RhZ2dlciwKCQkJCQkJCQl4OiAwLAoJCQkJCQkJCXNjcm9sbFRyaWdnZXI6IHsKCQkJCQkJCQkJdHJpZ2dlcjogbGluZSwKCQkJCQkJCQkJc3RhcnQ6IHRyaWdnZXJTdGFydCwKCQkJCQkJCQkJZW5kOiB0cmlnZ2VyRW5kLAoJCQkJCQkJCQlzY3J1YjogdHJpZ2dlclNjcnViLAoJCQkJCQkJCQlzY3JvbGxlcjogdHJpZ2dlclNjcm9sbGVyLAoJCQkJCQkJCQlpbnZhbGlkYXRlT25SZWZyZXNoOiB0cnVlLAoJCQkJCQkJCX0sCgkJCQkJCQl9LAoJCQkJCQkpOwoJCQkJCQlsaW5lVHdlZW5zLnB1c2godHdlZW4pOwoJCQkJCX0pOwoKCQkJCQlTY3JvbGxUcmlnZ2VyLnJlZnJlc2goKTsKCQkJCX0sCgkJCQl0YWc6ICJzcGFuIiwKCQkJCXR5cGU6ICJsaW5lcywgd29yZHMiLAoJCQkJd29yZHNDbGFzczogInN0YWNraW5nLXdvcmRzLXdvcmQiLAoJCQl9KTsKCgkJCWdzYXAuc2V0KHdyYXBwZXJSZWYsIHsgYXV0b0FscGhhOiAxIH0pOwoJCX07CgoJCXZvaWQgaW5pdCgpOwoKCQlyZXR1cm4gKCkgPT4gewoJCQljYW5jZWxsZWQgPSB0cnVlOwoJCQlraWxsTGluZVR3ZWVucygpOwoJCQlzcGxpdEluc3RhbmNlPy5yZXZlcnQoKTsKCQkJc3BsaXRJbnN0YW5jZSA9IG51bGw7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYKCXsuLi5yZXN0UHJvcHN9CgljbGFzcz17Y24oInN0YWNraW5nLXdvcmRzIiwgY2xhc3NOYW1lKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9kaXY+Cgo8c3R5bGU+Cgkuc3RhY2tpbmctd29yZHMgewoJCXZpc2liaWxpdHk6IGhpZGRlbjsKCX0KCgkuc3RhY2tpbmctd29yZHMgOmdsb2JhbCguc3RhY2tpbmctd29yZHMtbGluZSksCgkuc3RhY2tpbmctd29yZHMgOmdsb2JhbCguc3RhY2tpbmctd29yZHMtbGluZS1tYXNrKSB7CgkJZGlzcGxheTogYmxvY2s7Cgl9CgoJLnN0YWNraW5nLXdvcmRzIDpnbG9iYWwoLnN0YWNraW5nLXdvcmRzLXdvcmQpIHsKCQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgkJd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKCX0KPC9zdHlsZT4K", @@ -71,8 +71,8 @@ "components/text-scramble/TextScramble.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU3BsaXRUZXh0IH0gZnJvbSAiZ3NhcC9kaXN0L1NwbGl0VGV4dCI7CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyByZWdpc3RlclBsdWdpbk9uY2UgfSBmcm9tICIuLi9oZWxwZXJzL2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHsKCQkvKioKCQkgKiBUaGUgY29udGVudCB0aGF0IHdpbGwgc2NyYW1ibGUgb24gaG92ZXIuCgkJICovCgkJY2hpbGRyZW4/OiBTbmlwcGV0OwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQW4gb3B0aW9uYWwgZXh0ZXJuYWwgZWxlbWVudCB0aGF0IHRyaWdnZXJzIHRoZSBob3ZlciBlZmZlY3QuCgkJICogQGRlZmF1bHQgbnVsbAoJCSAqLwoJCWhvdmVyVGFyZ2V0PzogSFRNTEVsZW1lbnQgfCBudWxsOwoJCS8qKgoJCSAqIFRvdGFsIGR1cmF0aW9uIG9mIHRoZSBzY3JhbWJsZSBhbmltYXRpb24gKGluIHNlY29uZHMpLgoJCSAqIEBkZWZhdWx0IDAuNgoJCSAqLwoJCXNjcmFtYmxlRHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogRGVsYXkgYmV0d2VlbiBlYWNoIGNoYXJhY3RlcidzIGFuaW1hdGlvbiBzdGFydCAoaW4gc2Vjb25kcykuCgkJICogQGRlZmF1bHQgMC4wMwoJCSAqLwoJCXN0YWdnZXI/OiBudW1iZXI7CgkJLyoqCgkJICogTnVtYmVyIG9mIHNjcmFtYmxlIHN0ZXBzIGVhY2ggY2hhcmFjdGVyIGdvZXMgdGhyb3VnaCBiZWZvcmUgc2V0dGxpbmcuCgkJICogQGRlZmF1bHQgMTIKCQkgKi8KCQljeWNsZXM/OiBudW1iZXI7CgkJLyoqCgkJICogQ2hhcmFjdGVycyB1c2VkIHdoaWxlIHNjcmFtYmxpbmcuIERlZmF1bHRzIHRvIGEgbWl4IG9mIGxldHRlcnMsIG51bWJlcnMsIGFuZCBzeW1ib2xzLgoJCSAqLwoJCWNoYXJhY3RlcnM/OiBzdHJpbmc7CgkJW3Byb3A6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljaGlsZHJlbiwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJaG92ZXJUYXJnZXQgPSBudWxsLAoJCXNjcmFtYmxlRHVyYXRpb24gPSAwLjYsCgkJc3RhZ2dlciA9IDAuMDMsCgkJY3ljbGVzID0gMTIsCgkJY2hhcmFjdGVycyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODkhQCMkJV4mKiIsCgkJLi4ucmVzdFByb3BzCgl9OiBDb21wb25lbnRQcm9wcyA9ICRwcm9wcygpOwoKCW9uTW91bnQoKCkgPT4gewoJCXJlZ2lzdGVyUGx1Z2luT25jZShTcGxpdFRleHQpOwoJfSk7CgoJbGV0IHdyYXBwZXJSZWY6IEhUTUxTcGFuRWxlbWVudCB8IHVuZGVmaW5lZDsKCWxldCBzcGxpdEluc3RhbmNlOiBTcGxpdFRleHQgfCBudWxsID0gbnVsbDsKCWxldCBob3ZlclRpbWVsaW5lOiBnc2FwLmNvcmUuVGltZWxpbmUgfCBudWxsID0gbnVsbDsKCgljb25zdCBhdHRhY2hXcmFwcGVyUmVmID0gKG5vZGU6IEhUTUxTcGFuRWxlbWVudCkgPT4gewoJCXdyYXBwZXJSZWYgPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmICh3cmFwcGVyUmVmID09PSBub2RlKSB7CgkJCQl3cmFwcGVyUmVmID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJY29uc3QgZ2V0UmFuZG9tQ2hhciA9IChwb29sOiBzdHJpbmcpID0+IHsKCQlpZiAoIXBvb2wubGVuZ3RoKSByZXR1cm4gIiI7CgkJY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBwb29sLmxlbmd0aCk7CgkJcmV0dXJuIHBvb2xbaW5kZXhdID8/ICIiOwoJfTsKCgljb25zdCBjcmVhdGVTY3JhbWJsZVRpbWVsaW5lID0gKG5vZGVzOiBIVE1MRWxlbWVudFtdKSA9PiB7CgkJaWYgKCFub2Rlcy5sZW5ndGgpIHJldHVybiBudWxsOwoKCQljb25zdCBwb29sID0gY2hhcmFjdGVycy5sZW5ndGgKCQkJPyBjaGFyYWN0ZXJzCgkJCTogIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSI7CgkJY29uc3QgdGltZWxpbmUgPSBnc2FwLnRpbWVsaW5lKHsgcGF1c2VkOiB0cnVlIH0pOwoJCWNvbnN0IHRvdGFsRHVyYXRpb24gPSBNYXRoLm1heCgwLjEsIHNjcmFtYmxlRHVyYXRpb24pOwoJCWNvbnN0IHN0ZXBDb3VudCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoY3ljbGVzKSk7CgkJY29uc3Qgc3RlcER1cmF0aW9uID0gdG90YWxEdXJhdGlvbiAvIHN0ZXBDb3VudDsKCgkJbm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHsKCQkJY29uc3QgZmluYWxDaGFyID0gbm9kZS5kYXRhc2V0Lm9yaWdpbmFsQ2hhciA/PyBub2RlLnRleHRDb250ZW50ID8/ICIiOwoJCQljb25zdCBjaGFyVGltZWxpbmUgPSBnc2FwLnRpbWVsaW5lKCk7CgoJCQlpZiAoZmluYWxDaGFyLnRyaW0oKS5sZW5ndGggPT09IDApIHsKCQkJCWNoYXJUaW1lbGluZS5jYWxsKCgpID0+IHsKCQkJCQlub2RlLnRleHRDb250ZW50ID0gZmluYWxDaGFyOwoJCQkJfSk7CgkJCX0gZWxzZSB7CgkJCQlmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBDb3VudDsgaSArPSAxKSB7CgkJCQkJY2hhclRpbWVsaW5lLmNhbGwoKCkgPT4gewoJCQkJCQlub2RlLnRleHRDb250ZW50ID0gZ2V0UmFuZG9tQ2hhcihwb29sKTsKCQkJCQl9KTsKCQkJCQljaGFyVGltZWxpbmUudG8oe30sIHsgZHVyYXRpb246IHN0ZXBEdXJhdGlvbiB9KTsKCQkJCX0KCQkJCWNoYXJUaW1lbGluZS5jYWxsKCgpID0+IHsKCQkJCQlub2RlLnRleHRDb250ZW50ID0gZmluYWxDaGFyOwoJCQkJfSk7CgkJCX0KCgkJCXRpbWVsaW5lLmFkZChjaGFyVGltZWxpbmUsIGluZGV4ICogc3RhZ2dlcik7CgkJfSk7CgoJCXJldHVybiB0aW1lbGluZTsKCX07CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm47CgkJaWYgKCF3cmFwcGVyUmVmKSByZXR1cm47CgkJY29uc3Qgbm9kZSA9IHdyYXBwZXJSZWY7CgoJCWNvbnN0IHRhcmdldCA9IGhvdmVyVGFyZ2V0ID8/IG5vZGU7CgkJaWYgKCF0YXJnZXQpIHJldHVybjsKCgkJaG92ZXJUaW1lbGluZT8ua2lsbCgpOwoJCWhvdmVyVGltZWxpbmUgPSBudWxsOwoJCXNwbGl0SW5zdGFuY2U/LnJldmVydCgpOwoKCQlzcGxpdEluc3RhbmNlID0gU3BsaXRUZXh0LmNyZWF0ZShub2RlLCB7CgkJCXR5cGU6ICJjaGFycyIsCgkJCXJlZHVjZVdoaXRlU3BhY2U6IGZhbHNlLAoJCQljaGFyc0NsYXNzOiAiaW5saW5lLWJsb2NrIiwKCQl9KTsKCgkJY29uc3QgY2hhck5vZGVzID0gKHNwbGl0SW5zdGFuY2UuY2hhcnMgPz8gW10pIGFzIEhUTUxFbGVtZW50W107CgoJCWNoYXJOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7CgkJCW5vZGUuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwoJCQlub2RlLmRhdGFzZXQub3JpZ2luYWxDaGFyID0gbm9kZS50ZXh0Q29udGVudCA/PyAiIjsKCgkJCWlmICghbm9kZS50ZXh0Q29udGVudD8udHJpbSgpKSB7CgkJCQlub2RlLnN0eWxlLndoaXRlU3BhY2UgPSAicHJlIjsKCQkJCW5vZGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKCQkJfQoJCX0pOwoKCQlob3ZlclRpbWVsaW5lID0gY3JlYXRlU2NyYW1ibGVUaW1lbGluZShjaGFyTm9kZXMpOwoKCQljb25zdCBoYW5kbGVFbnRlciA9ICgpID0+IHsKCQkJaWYgKCFob3ZlclRpbWVsaW5lKSB7CgkJCQlob3ZlclRpbWVsaW5lID0gY3JlYXRlU2NyYW1ibGVUaW1lbGluZShjaGFyTm9kZXMpOwoJCQl9CgoJCQlob3ZlclRpbWVsaW5lPy5yZXN0YXJ0KCk7CgkJfTsKCgkJY29uc3QgaGFuZGxlTGVhdmUgPSAoKSA9PiB7CgkJCWhvdmVyVGltZWxpbmU/LnByb2dyZXNzKDEpOwoJCX07CgoJCXRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgaGFuZGxlRW50ZXIpOwoJCXRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgaGFuZGxlTGVhdmUpOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGhhbmRsZUVudGVyKTsKCQkJdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCBoYW5kbGVMZWF2ZSk7CgkJCWhvdmVyVGltZWxpbmU/LmtpbGwoKTsKCQkJaG92ZXJUaW1lbGluZSA9IG51bGw7CgkJCXNwbGl0SW5zdGFuY2U/LnJldmVydCgpOwoJCQlzcGxpdEluc3RhbmNlID0gbnVsbDsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPHNwYW4KCXsuLi5yZXN0UHJvcHN9CgljbGFzcz17Y24oImZvbnQtaW5oZXJpdCBpbmxpbmUtYmxvY2sgYWxpZ24tYmFzZWxpbmUgdGV4dC1pbmhlcml0IiwgY2xhc3NOYW1lKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9zcGFuPgo=", "components/video-player/VideoPlayer.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50LCBvbkRlc3Ryb3ksIHRpY2sgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgZ3NhcCB9IGZyb20gImdzYXAvZGlzdC9nc2FwIjsKCWltcG9ydCB7IEZsaXAgfSBmcm9tICJnc2FwL2Rpc3QvRmxpcCI7CglpbXBvcnQgeyBNb3JwaFNWR1BsdWdpbiB9IGZyb20gImdzYXAvZGlzdC9Nb3JwaFNWR1BsdWdpbiI7CglpbXBvcnQgeyByZWdpc3RlclBsdWdpbk9uY2UgfSBmcm9tICIuLi9oZWxwZXJzL2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgVmlkZW9TbGlkZXIgZnJvbSAiLi9WaWRlb1NsaWRlci5zdmVsdGUiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIHNvdXJjZSBVUkwgb2YgdGhlIHZpZGVvLgoJCSAqLwoJCXNyYzogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSBVUkwgb2YgdGhlIHZpZGVvIHBvc3RlciBpbWFnZS4KCQkgKi8KCQlwb3N0ZXI/OiBzdHJpbmc7CgkJLyoqCgkJICogV2hldGhlciB0aGUgdmlkZW8gc2hvdWxkIHN0YXJ0IHBsYXlpbmcgYXV0b21hdGljYWxseS4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCWF1dG9wbGF5PzogYm9vbGVhbjsKCQkvKioKCQkgKiBXaGV0aGVyIHRoZSB2aWRlbyBzaG91bGQgYmUgbXV0ZWQgYnkgZGVmYXVsdC4KCQkgKiBAZGVmYXVsdCB0cnVlCgkJICovCgkJbXV0ZWQ/OiBib29sZWFuOwoKCQkvKioKCQkgKiBXaGV0aGVyIHRoZSB2aWRlbyBzaG91bGQgbG9vcC4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCWxvb3A/OiBib29sZWFuOwoJCS8qKgoJCSAqIFdoZXRoZXIgdG8gcGVybWFuZW50bHkgaGlkZSBjb250cm9scyBhbmQgZGlzYWJsZSBpbnRlcmFjdGlvbi4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCWhpZGVDb250cm9scz86IGJvb2xlYW47CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCX0KCglsZXQgewoJCXNyYywKCQlwb3N0ZXIsCgkJYXV0b3BsYXkgPSBmYWxzZSwKCQltdXRlZCA9ICRiaW5kYWJsZSh0cnVlKSwKCQlsb29wID0gZmFsc2UsCgkJaGlkZUNvbnRyb2xzID0gZmFsc2UsCgkJY2xhc3M6IGNsYXNzTmFtZSwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IHZpZGVvUmVmOiBIVE1MVmlkZW9FbGVtZW50OwoJbGV0IGNvbnRhaW5lclJlZjogSFRNTEVsZW1lbnQ7CglsZXQgY29udHJvbHNSZWY6IEhUTUxFbGVtZW50OwoJbGV0IGJnUmVmOiBIVE1MRWxlbWVudDsKCWxldCBwYXRoUmVmOiBTVkdQYXRoRWxlbWVudDsKCWxldCBwbGF5UGF0aFJlZjogU1ZHUGF0aEVsZW1lbnQ7CglsZXQgbXV0ZVBhdGhSZWY6IFNWR1BhdGhFbGVtZW50OwoJbGV0IGlzUGxheWluZyA9ICRzdGF0ZShmYWxzZSk7CglsZXQgaXNIb3ZlcmVkID0gJHN0YXRlKGZhbHNlKTsKCWxldCBjdXJyZW50VGltZSA9ICRzdGF0ZSgwKTsKCWxldCBkdXJhdGlvbiA9ICRzdGF0ZSgwKTsKCWxldCBpc1NjcnViYmluZyA9ICRzdGF0ZShmYWxzZSk7CglsZXQgaXNMYXlvdXRGdWxsc2NyZWVuID0gJHN0YXRlKGZhbHNlKTsKCWxldCBpc0V4cGFuZGVkID0gJHN0YXRlKGZhbHNlKTsKCWxldCBwbGFjZWhvbGRlcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsKCWxldCBvcmlnaW5hbFBhcmVudDogUGFyZW50Tm9kZSB8IG51bGwgPSBudWxsOwoJbGV0IG9yaWdpbmFsTmV4dFNpYmxpbmc6IE5vZGUgfCBudWxsID0gbnVsbDsKCWxldCBjdXJyZW50VGltZVN0ciA9ICRkZXJpdmVkKGZvcm1hdFRpbWUoY3VycmVudFRpbWUpKTsKCWxldCBkdXJhdGlvblN0ciA9ICRkZXJpdmVkKGZvcm1hdFRpbWUoZHVyYXRpb24pKTsKCWxldCByYWZJZDogbnVtYmVyOwoKCWNvbnN0IGF0dGFjaFZpZGVvUmVmID0gKG5vZGU6IEhUTUxWaWRlb0VsZW1lbnQpID0+IHsKCQl2aWRlb1JlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lclJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lclJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaENvbnRyb2xzUmVmID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJY29udHJvbHNSZWYgPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hCZ1JlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWJnUmVmID0gbm9kZTsKCX07CgoJY29uc3QgYXR0YWNoUGF0aFJlZiA9IChub2RlOiBTVkdQYXRoRWxlbWVudCkgPT4gewoJCXBhdGhSZWYgPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hQbGF5UGF0aFJlZiA9IChub2RlOiBTVkdQYXRoRWxlbWVudCkgPT4gewoJCXBsYXlQYXRoUmVmID0gbm9kZTsKCX07CgoJY29uc3QgYXR0YWNoTXV0ZVBhdGhSZWYgPSAobm9kZTogU1ZHUGF0aEVsZW1lbnQpID0+IHsKCQltdXRlUGF0aFJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGVudGVyUGF0aCA9ICJNMTUgM2g2djYgTTkgMjFIM3YtNiBNMjEgM2wtNyA3IE0zIDIxbDctNyI7Cgljb25zdCBleGl0UGF0aCA9CgkJIk04IDN2M2EyIDIgMCAwIDEtMiAySDMgTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIE0zIDE2aDNhMiAyIDAgMCAxIDIgMnYzIE0xNiAyMXYtM2EyIDIgMCAwIDEgMi0yaDMiOwoJY29uc3QgaWNvblBsYXkgPSAiTTcgNXYxNGwxMS03eiI7Cgljb25zdCBpY29uUGF1c2UgPSAiTTYgNWg0djE0SDZ6bTggMGg0djE0aC00eiI7Cgljb25zdCBpY29uVm9sdW1lID0KCQkiTTMgOXY2aDRsNSA1VjRMNyA5SDN6bTEzLjUgM2MwLTEuNzctMS4wMi0zLjI5LTIuNS00LjAzdjguMDVjMS40OC0uNzMgMi41LTIuMjUgMi41LTQuMDJ6TTE0IDMuMjN2Mi4wNmMyLjg5Ljg2IDUgMy41NCA1IDYuNzFzLTIuMTEgNS44NS01IDYuNzF2Mi4wNmM0LjAxLS45MSA3LTQuNDkgNy04Ljc3cy0yLjk5LTcuODYtNy04Ljc3eiI7Cgljb25zdCBpY29uTXV0ZSA9CgkJIk0xNi41IDEyYzAtMS43Ny0xLjAyLTMuMjktMi41LTQuMDN2Mi4yMWwyLjQ1IDIuNDVjLjAzLS4yLjA1LS40MS4wNS0uNjN6bTIuNSAwYzAgLjk0LS4yIDEuODItLjU0IDIuNjRsMS41MSAxLjUxQzIwLjYzIDE0LjkxIDIxIDEzLjUgMjEgMTJjMC00LjI4LTIuOTktNy44Ni03LTguNzd2Mi4wNmMyLjg5Ljg2IDUgMy41NCA1IDYuNzF6TTQuMjcgM0wzIDQuMjcgNy43MyA5SDN2Nmg0bDUgNXYtNi43M2w0LjI1IDQuMjVjLS42Ny41Mi0xLjQyLjkzLTIuMjUgMS4xOHYyLjA2YzEuMzgtLjMxIDIuNjMtLjk1IDMuNjktMS44MUwxOS43MyAyMSAyMSAxOS43MyA0LjI3IDN6TTEyIDRMOS45MSA2LjA5IDEyIDguMThWNHoiOwoKCW9uTW91bnQoKCkgPT4gewoJCXJlZ2lzdGVyUGx1Z2luT25jZShNb3JwaFNWR1BsdWdpbiwgRmxpcCk7Cgl9KTsKCglhc3luYyBmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuKCkgewoJCWlmICghY29udGFpbmVyUmVmKSByZXR1cm47CgkJY29uc3Qgc3RhdGUgPSBGbGlwLmdldFN0YXRlKGNvbnRhaW5lclJlZiwgeyBwcm9wczogImJvcmRlclJhZGl1cyIgfSk7CgkJaWYgKCFpc0V4cGFuZGVkKSB7CgkJCWlzRXhwYW5kZWQgPSB0cnVlOwoKCQkJaWYgKCFpc0xheW91dEZ1bGxzY3JlZW4pIHsKCQkJCW9yaWdpbmFsUGFyZW50ID0gY29udGFpbmVyUmVmLnBhcmVudE5vZGU7CgkJCQlvcmlnaW5hbE5leHRTaWJsaW5nID0gY29udGFpbmVyUmVmLm5leHRTaWJsaW5nOwoJCQkJY29uc3QgcmVjdCA9IGNvbnRhaW5lclJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJCXBsYWNlaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJCQlwbGFjZWhvbGRlci5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgOwoJCQkJcGxhY2Vob2xkZXIuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgOwoKCQkJCWlmIChvcmlnaW5hbFBhcmVudCkgewoJCQkJCW9yaWdpbmFsUGFyZW50Lmluc2VydEJlZm9yZShwbGFjZWhvbGRlciwgY29udGFpbmVyUmVmKTsKCQkJCX0KCQkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyUmVmKTsKCQkJCWlzTGF5b3V0RnVsbHNjcmVlbiA9IHRydWU7CgkJCX0KCQkJYXdhaXQgdGljaygpOwoKCQkJRmxpcC5mcm9tKHN0YXRlLCB7CgkJCQlkdXJhdGlvbjogMC41LAoJCQkJZWFzZTogInBvd2VyNC5pbk91dCIsCgkJCQlhYnNvbHV0ZTogdHJ1ZSwKCQkJCXpJbmRleDogOTk5OSwKCQkJfSk7CgkJfSBlbHNlIHsKCQkJaXNFeHBhbmRlZCA9IGZhbHNlOwoKCQkJaWYgKHBsYWNlaG9sZGVyKSB7CgkJCQlGbGlwLmZpdChjb250YWluZXJSZWYsIHBsYWNlaG9sZGVyLCB7CgkJCQkJZHVyYXRpb246IDAuNSwKCQkJCQllYXNlOiAicG93ZXI0LmluT3V0IiwKCQkJCQlhYnNvbHV0ZTogdHJ1ZSwKCQkJCQlib3JkZXJSYWRpdXM6ICIxcmVtIiwKCQkJCQlvbkNvbXBsZXRlOiAoKSA9PiB7CgkJCQkJCWlzTGF5b3V0RnVsbHNjcmVlbiA9IGZhbHNlOwoKCQkJCQkJaWYgKHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyLnBhcmVudE5vZGUpIHsKCQkJCQkJCXBsYWNlaG9sZGVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lclJlZiwgcGxhY2Vob2xkZXIpOwoJCQkJCQkJcGxhY2Vob2xkZXIucmVtb3ZlKCk7CgkJCQkJCQlwbGFjZWhvbGRlciA9IG51bGw7CgkJCQkJCX0gZWxzZSBpZiAob3JpZ2luYWxQYXJlbnQpIHsKCQkJCQkJCWlmIChvcmlnaW5hbE5leHRTaWJsaW5nKSB7CgkJCQkJCQkJb3JpZ2luYWxQYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lclJlZiwgb3JpZ2luYWxOZXh0U2libGluZyk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCW9yaWdpbmFsUGFyZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lclJlZik7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZ3NhcC5zZXQoY29udGFpbmVyUmVmLCB7IGNsZWFyUHJvcHM6ICJhbGwiIH0pOwoJCQkJCX0sCgkJCQl9KTsKCQkJfSBlbHNlIHsKCQkJCWlzTGF5b3V0RnVsbHNjcmVlbiA9IGZhbHNlOwoJCQkJYXdhaXQgdGljaygpOwoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIGZvcm1hdFRpbWUoc2Vjb25kczogbnVtYmVyKSB7CgkJaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2Vjb25kcykgfHwgc2Vjb25kcyA8IDApIHJldHVybiAiMDowMCI7CgkJY29uc3QgbSA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTsKCQljb25zdCBzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApOwoJCXJldHVybiBgJHttfToke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7Cgl9CgoJZnVuY3Rpb24gdXBkYXRlVGltZSgpIHsKCQlpZiAodmlkZW9SZWYgJiYgIWlzU2NydWJiaW5nICYmICF2aWRlb1JlZi5wYXVzZWQpIHsKCQkJY3VycmVudFRpbWUgPSB2aWRlb1JlZi5jdXJyZW50VGltZTsKCQl9CgkJcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlVGltZSk7Cgl9CgoJZnVuY3Rpb24gdG9nZ2xlUGxheSgpIHsKCQlpZiAoaGlkZUNvbnRyb2xzKSByZXR1cm47CgkJaWYgKCF2aWRlb1JlZikgcmV0dXJuOwoKCQlpZiAodmlkZW9SZWYucGF1c2VkKSB7CgkJCXZpZGVvUmVmLnBsYXkoKTsKCQl9IGVsc2UgewoJCQl2aWRlb1JlZi5wYXVzZSgpOwoJCX0KCX0KCglmdW5jdGlvbiB0b2dnbGVNdXRlKCkgewoJCWlmICh2aWRlb1JlZikgewoJCQltdXRlZCA9ICFtdXRlZDsKCQl9Cgl9CgoJZnVuY3Rpb24gb25QbGF5KCkgewoJCWlzUGxheWluZyA9IHRydWU7CgkJcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlVGltZSk7Cgl9CgoJZnVuY3Rpb24gb25QYXVzZSgpIHsKCQlpc1BsYXlpbmcgPSBmYWxzZTsKCQljYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7Cgl9CgoJZnVuY3Rpb24gb25Mb2FkZWRNZXRhZGF0YSgpIHsKCQlkdXJhdGlvbiA9IHZpZGVvUmVmLmR1cmF0aW9uOwoJCWN1cnJlbnRUaW1lID0gdmlkZW9SZWYuY3VycmVudFRpbWU7Cgl9CgoJZnVuY3Rpb24gb25FbmRlZCgpIHsKCQlpc1BsYXlpbmcgPSBmYWxzZTsKCQljdXJyZW50VGltZSA9IGR1cmF0aW9uOwoJfQoKCWZ1bmN0aW9uIGhhbmRsZVNjcnViU3RhcnQoKSB7CgkJaXNTY3J1YmJpbmcgPSB0cnVlOwoJCWlmIChpc1BsYXlpbmcpIHsKCQkJdmlkZW9SZWYucGF1c2UoKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaGFuZGxlU2NydWJFbmQoKSB7CgkJaXNTY3J1YmJpbmcgPSBmYWxzZTsKCQlpZiAoaXNQbGF5aW5nKSB7CgkJCXZpZGVvUmVmLnBsYXkoKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaGFuZGxlU2Vlayh0aW1lOiBudW1iZXIpIHsKCQlpZiAodmlkZW9SZWYpIHsKCQkJdmlkZW9SZWYuY3VycmVudFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heCh0aW1lLCAwKSwgZHVyYXRpb24pOwoJCQljdXJyZW50VGltZSA9IHRpbWU7CgkJfQoJfQoKCW9uTW91bnQoKCkgPT4gewoJCWlmICh2aWRlb1JlZikgewoJCQlpZiAodmlkZW9SZWYucmVhZHlTdGF0ZSA+PSAxKSB7CgkJCQlvbkxvYWRlZE1ldGFkYXRhKCk7CgkJCX0KCQl9Cgl9KTsKCglvbkRlc3Ryb3koKCkgPT4gewoJCWlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgIT09ICJ1bmRlZmluZWQiKSB7CgkJCWNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTsKCQl9CgkJaWYgKAoJCQlpc0xheW91dEZ1bGxzY3JlZW4gJiYKCQkJY29udGFpbmVyUmVmICYmCgkJCWRvY3VtZW50LmJvZHkuY29udGFpbnMoY29udGFpbmVyUmVmKQoJCSkgewoJCQlkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNvbnRhaW5lclJlZik7CgkJfQoJCWlmIChwbGFjZWhvbGRlciAmJiBwbGFjZWhvbGRlci5wYXJlbnROb2RlKSB7CgkJCXBsYWNlaG9sZGVyLnJlbW92ZSgpOwoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghcGxheVBhdGhSZWYpIHJldHVybjsKCgkJaWYgKGlzUGxheWluZykgewoJCQlnc2FwLnRvKHBsYXlQYXRoUmVmLCB7CgkJCQltb3JwaFNWRzogaWNvblBhdXNlLAoJCQkJZHVyYXRpb246IDAuMywKCQkJCWVhc2U6ICJwb3dlcjQuaW5PdXQiLAoJCQl9KTsKCQl9IGVsc2UgewoJCQlnc2FwLnRvKHBsYXlQYXRoUmVmLCB7CgkJCQltb3JwaFNWRzogaWNvblBsYXksCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5pbk91dCIsCgkJCX0pOwoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghbXV0ZVBhdGhSZWYpIHJldHVybjsKCgkJaWYgKG11dGVkKSB7CgkJCWdzYXAudG8obXV0ZVBhdGhSZWYsIHsKCQkJCW1vcnBoU1ZHOiBpY29uTXV0ZSwKCQkJCWR1cmF0aW9uOiAwLjMsCgkJCQllYXNlOiAicG93ZXI0LmluT3V0IiwKCQkJfSk7CgkJfSBlbHNlIHsKCQkJZ3NhcC50byhtdXRlUGF0aFJlZiwgewoJCQkJbW9ycGhTVkc6IGljb25Wb2x1bWUsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5pbk91dCIsCgkJCX0pOwoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghcGF0aFJlZikgcmV0dXJuOwoKCQlpZiAoaXNFeHBhbmRlZCkgewoJCQlnc2FwLnRvKHBhdGhSZWYsIHsKCQkJCW1vcnBoU1ZHOiBleGl0UGF0aCwKCQkJCWR1cmF0aW9uOiAwLjMsCgkJCQllYXNlOiAicG93ZXI0LmluT3V0IiwKCQkJfSk7CgkJfSBlbHNlIHsKCQkJZ3NhcC50byhwYXRoUmVmLCB7CgkJCQltb3JwaFNWRzogZW50ZXJQYXRoLAoJCQkJZHVyYXRpb246IDAuMywKCQkJCWVhc2U6ICJwb3dlcjQuaW5PdXQiLAoJCQl9KTsKCQl9Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWNvbnRyb2xzUmVmIHx8ICFiZ1JlZiB8fCBoaWRlQ29udHJvbHMpIHJldHVybjsKCgkJaWYgKGlzSG92ZXJlZCB8fCAhaXNQbGF5aW5nKSB7CgkJCWdzYXAudG8oYmdSZWYsIHsKCQkJCW9wYWNpdHk6IDEsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5vdXQiLAoJCQkJb3ZlcndyaXRlOiB0cnVlLAoJCQl9KTsKCQkJZ3NhcC50byhjb250cm9sc1JlZi5jaGlsZHJlbiwgewoJCQkJeTogMCwKCQkJCW9wYWNpdHk6IDEsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5vdXQiLAoJCQkJb3ZlcndyaXRlOiB0cnVlLAoJCQl9KTsKCQkJZ3NhcC5zZXQoY29udHJvbHNSZWYsIHsgcG9pbnRlckV2ZW50czogImF1dG8iIH0pOwoJCX0gZWxzZSB7CgkJCWdzYXAudG8oYmdSZWYsIHsKCQkJCW9wYWNpdHk6IDAsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5pbiIsCgkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCX0pOwoJCQlnc2FwLnRvKGNvbnRyb2xzUmVmLmNoaWxkcmVuLCB7CgkJCQl5OiAyMCwKCQkJCW9wYWNpdHk6IDAsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5pbiIsCgkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCX0pOwoJCQlnc2FwLnNldChjb250cm9sc1JlZiwgeyBwb2ludGVyRXZlbnRzOiAibm9uZSIgfSk7CgkJfQoJfSk7Cjwvc2NyaXB0PgoKPGRpdgoJe0BhdHRhY2ggYXR0YWNoQ29udGFpbmVyUmVmfQoJb25tb3VzZWVudGVyPXsoKSA9PiAoaXNIb3ZlcmVkID0gdHJ1ZSl9Cglvbm1vdXNlbGVhdmU9eygpID0+IChpc0hvdmVyZWQgPSBmYWxzZSl9Cglyb2xlPSJyZWdpb24iCglhcmlhLWxhYmVsPSJWaWRlbyBQbGF5ZXIiCgljbGFzcz17Y24oCgkJImdyb3VwIGJnLWZpeGVkLWRhcmsgcmVsYXRpdmUgZmxleCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXNtIiwKCQlpc0xheW91dEZ1bGxzY3JlZW4KCQkJPyAiZml4ZWQgaW5zZXQtMCB6LTUwIGgtc2NyZWVuIHctc2NyZWVuIHJvdW5kZWQtbm9uZSIKCQkJOiAiYXNwZWN0LXZpZGVvIHctZnVsbCBtYXgtdy0zeGwgcm91bmRlZC14bCIsCgkJY2xhc3NOYW1lLAoJKX0KPgoJPCEtLSBzdmVsdGUtaWdub3JlIGExMXlfbWVkaWFfaGFzX2NhcHRpb24gLS0+Cgk8dmlkZW8KCQl7QGF0dGFjaCBhdHRhY2hWaWRlb1JlZn0KCQl7c3JjfQoJCXtwb3N0ZXJ9CgkJe2F1dG9wbGF5fQoJCWJpbmQ6bXV0ZWQKCQl7bG9vcH0KCQljbGFzcz0iaC1mdWxsIHctZnVsbCBvYmplY3QtY292ZXIiCgkJcGxheXNpbmxpbmUKCQlvbnBsYXk9e29uUGxheX0KCQlvbnBhdXNlPXtvblBhdXNlfQoJCW9ubG9hZGVkbWV0YWRhdGE9e29uTG9hZGVkTWV0YWRhdGF9CgkJb25lbmRlZD17b25FbmRlZH0KCQlvbmNsaWNrPXt0b2dnbGVQbGF5fQoJPjwvdmlkZW8+CgoJPGRpdgoJCXtAYXR0YWNoIGF0dGFjaEJnUmVmfQoJCWNsYXNzPXtjbigKCQkJInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMCBib3R0b20tMCBsZWZ0LTAgei0xMCBoLTMyIGJnLWxpbmVhci10by10IGZyb20tYmxhY2svNzAgdmlhLWJsYWNrLzQ1IHRvLXRyYW5zcGFyZW50IG9wYWNpdHktMCIsCgkJCWhpZGVDb250cm9scyAmJiAiaGlkZGVuIiwKCQkpfQoJPjwvZGl2PgoKCTxkaXYKCQl7QGF0dGFjaCBhdHRhY2hDb250cm9sc1JlZn0KCQljbGFzcz17Y24oCgkJCSJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHJpZ2h0LTAgYm90dG9tLTAgbGVmdC0wIHotMjAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcHgtNCBwdC0xMCBwYi00IiwKCQkJaGlkZUNvbnRyb2xzICYmICJoaWRkZW4iLAoJCSl9Cgk+CgkJPGJ1dHRvbgoJCQlvbmNsaWNrPXt0b2dnbGVQbGF5fQoJCQljbGFzcz0iZmxleCBzaXplLTggdHJhbnNsYXRlLXktNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLWZpeGVkLWxpZ2h0LzEwIHRleHQtZml4ZWQtbGlnaHQgb3BhY2l0eS0wIGJhY2tkcm9wLWJsdXItbWQgdHJhbnNpdGlvbi1bYmFja2dyb3VuZC1jb2xvcixzY2FsZV0gZHVyYXRpb24tMTUwIGVhc2Utb3V0IGhvdmVyOmJnLWZpeGVkLWxpZ2h0LzIwIGFjdGl2ZTpzY2FsZS05NSIKCQkJYXJpYS1sYWJlbD17aXNQbGF5aW5nID8gIlBhdXNlIiA6ICJQbGF5In0KCQk+CgkJCTxzdmcKCQkJCXdpZHRoPSIxNiIKCQkJCWhlaWdodD0iMTYiCgkJCQl2aWV3Qm94PSIwIDAgMjQgMjQiCgkJCQlmaWxsPSJjdXJyZW50Q29sb3IiCgkJCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCgkJCT4KCQkJCTxwYXRoIHtAYXR0YWNoIGF0dGFjaFBsYXlQYXRoUmVmfSBkPXtpY29uUGxheX0gLz4KCQkJPC9zdmc+CgkJPC9idXR0b24+CgoJCTxkaXYgY2xhc3M9ImZsZXgtMSB0cmFuc2xhdGUteS01IG9wYWNpdHktMCI+CgkJCTxWaWRlb1NsaWRlcgoJCQkJe2N1cnJlbnRUaW1lfQoJCQkJe2R1cmF0aW9ufQoJCQkJb25TY3J1YlN0YXJ0PXtoYW5kbGVTY3J1YlN0YXJ0fQoJCQkJb25TY3J1YkVuZD17aGFuZGxlU2NydWJFbmR9CgkJCQlvblNlZWs9e2hhbmRsZVNlZWt9CgkJCS8+CgkJPC9kaXY+CgoJCTxkaXYKCQkJY2xhc3M9ImZsZXggdHJhbnNsYXRlLXktNSBpdGVtcy1jZW50ZXIgZ2FwLTEgZm9udC1tb25vIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHRleHQtZml4ZWQtbGlnaHQgb3BhY2l0eS0wIgoJCT4KCQkJPHNwYW4gY2xhc3M9InRleHQtZml4ZWQtbGlnaHQvNzAiPntjdXJyZW50VGltZVN0cn08L3NwYW4+CgkJCTxzcGFuPi88L3NwYW4+CgkJCTxzcGFuPntkdXJhdGlvblN0cn08L3NwYW4+CgkJPC9kaXY+CgoJCTxidXR0b24KCQkJb25jbGljaz17dG9nZ2xlTXV0ZX0KCQkJY2xhc3M9ImZsZXggc2l6ZS04IHRyYW5zbGF0ZS15LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1maXhlZC1saWdodC8xMCB0ZXh0LWZpeGVkLWxpZ2h0IG9wYWNpdHktMCBiYWNrZHJvcC1ibHVyLW1kIHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3Isc2NhbGVdIGR1cmF0aW9uLTE1MCBlYXNlLW91dCBob3ZlcjpiZy1maXhlZC1saWdodC8yMCIKCQkJYXJpYS1sYWJlbD17bXV0ZWQgPyAiVW5tdXRlIiA6ICJNdXRlIn0KCQk+CgkJCTxzdmcKCQkJCXdpZHRoPSIxNiIKCQkJCWhlaWdodD0iMTYiCgkJCQl2aWV3Qm94PSIwIDAgMjQgMjQiCgkJCQlmaWxsPSJjdXJyZW50Q29sb3IiCgkJCQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCgkJCT4KCQkJCTxwYXRoIHtAYXR0YWNoIGF0dGFjaE11dGVQYXRoUmVmfSBkPXtpY29uVm9sdW1lfSAvPgoJCQk8L3N2Zz4KCQk8L2J1dHRvbj4KCgkJPGJ1dHRvbgoJCQlvbmNsaWNrPXt0b2dnbGVGdWxsc2NyZWVufQoJCQljbGFzcz0iZmxleCBzaXplLTggdHJhbnNsYXRlLXktNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJnLWZpeGVkLWxpZ2h0LzEwIHRleHQtZml4ZWQtbGlnaHQgb3BhY2l0eS0wIGJhY2tkcm9wLWJsdXItbWQgdHJhbnNpdGlvbi1bYmFja2dyb3VuZC1jb2xvcixzY2FsZV0gZHVyYXRpb24tMTUwIGVhc2Utb3V0IGhvdmVyOmJnLWZpeGVkLWxpZ2h0LzIwIgoJCQlhcmlhLWxhYmVsPXtpc0V4cGFuZGVkID8gIkV4aXQgRnVsbHNjcmVlbiIgOiAiRW50ZXIgRnVsbHNjcmVlbiJ9CgkJPgoJCQk8c3ZnCgkJCQl3aWR0aD0iMTYiCgkJCQloZWlnaHQ9IjE2IgoJCQkJdmlld0JveD0iMCAwIDI0IDI0IgoJCQkJZmlsbD0ibm9uZSIKCQkJCXN0cm9rZT0iY3VycmVudENvbG9yIgoJCQkJc3Ryb2tlLXdpZHRoPSIyIgoJCQkJc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgoJCQkJc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIKCQkJPgoJCQkJPHBhdGgge0BhdHRhY2ggYXR0YWNoUGF0aFJlZn0gZD17ZW50ZXJQYXRofSAvPgoJCQk8L3N2Zz4KCQk8L2J1dHRvbj4KCTwvZGl2Pgo8L2Rpdj4K", "components/video-player/VideoSlider.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgY3VycmVudCBwbGF5YmFjayB0aW1lIGluIHNlY29uZHMuCgkJICovCgkJY3VycmVudFRpbWU6IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHZpZGVvIGluIHNlY29uZHMuCgkJICovCgkJZHVyYXRpb246IG51bWJlcjsKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiBzY3J1YmJpbmcgc3RhcnRzLgoJCSAqLwoJCW9uU2NydWJTdGFydDogKCkgPT4gdm9pZDsKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiBzY3J1YmJpbmcgZW5kcy4KCQkgKi8KCQlvblNjcnViRW5kOiAoKSA9PiB2b2lkOwoJCS8qKgoJCSAqIENhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIHNlZWtpbmcgdG8gYSBzcGVjaWZpYyB0aW1lLgoJCSAqLwoJCW9uU2VlazogKHRpbWU6IG51bWJlcikgPT4gdm9pZDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJfQoKCWxldCB7CgkJY3VycmVudFRpbWUsCgkJZHVyYXRpb24sCgkJb25TY3J1YlN0YXJ0LAoJCW9uU2NydWJFbmQsCgkJb25TZWVrLAoJCWNsYXNzOiBjbGFzc05hbWUsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBzbGlkZXJSZWY6IEhUTUxFbGVtZW50OwoJbGV0IHRodW1iUmVmOiBIVE1MRWxlbWVudDsKCWxldCBob3ZlclRpbWVSZWY6IEhUTUxFbGVtZW50OwoKCWNvbnN0IGF0dGFjaFNsaWRlclJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCXNsaWRlclJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaFRodW1iUmVmID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJdGh1bWJSZWYgPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hIb3ZlclRpbWVSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQlob3ZlclRpbWVSZWYgPSBub2RlOwoJfTsKCglsZXQgaXNIb3ZlcmVkID0gJHN0YXRlKGZhbHNlKTsKCWxldCBpc0RyYWdnaW5nID0gJHN0YXRlKGZhbHNlKTsKCWxldCBob3ZlclRpbWUgPSAkc3RhdGUoMCk7CglsZXQgaG92ZXJYID0gJHN0YXRlKDApOwoJbGV0IHNhZmVEdXJhdGlvbiA9ICRkZXJpdmVkKE1hdGgubWF4KGR1cmF0aW9uIHx8IDAsIDApKTsKCWxldCBzYWZlQ3VycmVudFRpbWUgPSAkZGVyaXZlZCgKCQlNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50VGltZSB8fCAwLCBzYWZlRHVyYXRpb24pKSwKCSk7CglsZXQgaXNEaXNhYmxlZCA9ICRkZXJpdmVkKHNhZmVEdXJhdGlvbiA8PSAwKTsKCglmdW5jdGlvbiBmb3JtYXRUaW1lKHNlY29uZHM6IG51bWJlcikgewoJCWlmICghTnVtYmVyLmlzRmluaXRlKHNlY29uZHMpIHx8IHNlY29uZHMgPCAwKSByZXR1cm4gIjAwOjAwIjsKCQljb25zdCBtID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApOwoJCWNvbnN0IHMgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7CgkJcmV0dXJuIGAke20udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfToke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7Cgl9CgoJZnVuY3Rpb24gaGFuZGxlUG9pbnRlck1vdmUoZTogUG9pbnRlckV2ZW50KSB7CgkJaWYgKGlzRGlzYWJsZWQpIHJldHVybjsKCQljb25zdCBib3VuZHMgPSBzbGlkZXJSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJaWYgKGJvdW5kcy53aWR0aCA8PSAwKSByZXR1cm47CgkJY29uc3QgY2xpZW50WCA9IGUuY2xpZW50WDsKCgkJbGV0IHggPSBjbGllbnRYIC0gYm91bmRzLmxlZnQ7CgkJY29uc3QgY2xhbXBlZFggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih4LCBib3VuZHMud2lkdGgpKTsKCQljb25zdCBwZXJjZW50ID0gY2xhbXBlZFggLyBib3VuZHMud2lkdGg7CgoJCWhvdmVyVGltZSA9IHBlcmNlbnQgKiBkdXJhdGlvbjsKCQlob3ZlclggPSBjbGFtcGVkWDsKCgkJaWYgKGlzRHJhZ2dpbmcpIHsKCQkJb25TZWVrKGhvdmVyVGltZSk7CgkJfQoJfQoKCWZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKGU6IFBvaW50ZXJFdmVudCkgewoJCWlmIChpc0Rpc2FibGVkKSByZXR1cm47CgkJc2xpZGVyUmVmLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTsKCQlpc0RyYWdnaW5nID0gdHJ1ZTsKCQlvblNjcnViU3RhcnQoKTsKCQloYW5kbGVQb2ludGVyTW92ZShlKTsKCX0KCglmdW5jdGlvbiBoYW5kbGVQb2ludGVyVXAoZTogUG9pbnRlckV2ZW50KSB7CgkJc2xpZGVyUmVmLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7CgkJaXNEcmFnZ2luZyA9IGZhbHNlOwoJCW9uU2NydWJFbmQoKTsKCX0KCglmdW5jdGlvbiBoYW5kbGVQb2ludGVyTGVhdmUoKSB7CgkJaWYgKCFpc0RyYWdnaW5nKSB7CgkJCWlzSG92ZXJlZCA9IGZhbHNlOwoJCX0KCX0KCglmdW5jdGlvbiBjbGFtcFRpbWUodGltZTogbnVtYmVyKSB7CgkJcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRpbWUsIHNhZmVEdXJhdGlvbikpOwoJfQoKCWZ1bmN0aW9uIGhhbmRsZUtleURvd24oZTogS2V5Ym9hcmRFdmVudCkgewoJCWlmIChpc0Rpc2FibGVkKSByZXR1cm47CgoJCWNvbnN0IHNtYWxsU3RlcCA9IE1hdGgubWF4KHNhZmVEdXJhdGlvbiAvIDEwMCwgMC4xKTsKCQljb25zdCBsYXJnZVN0ZXAgPSBNYXRoLm1heChzYWZlRHVyYXRpb24gLyAxMCwgMSk7CgkJbGV0IG5leHRUaW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDsKCgkJc3dpdGNoIChlLmtleSkgewoJCQljYXNlICJBcnJvd0xlZnQiOgoJCQljYXNlICJBcnJvd0Rvd24iOgoJCQkJbmV4dFRpbWUgPSBzYWZlQ3VycmVudFRpbWUgLSBzbWFsbFN0ZXA7CgkJCQlicmVhazsKCQkJY2FzZSAiQXJyb3dSaWdodCI6CgkJCWNhc2UgIkFycm93VXAiOgoJCQkJbmV4dFRpbWUgPSBzYWZlQ3VycmVudFRpbWUgKyBzbWFsbFN0ZXA7CgkJCQlicmVhazsKCQkJY2FzZSAiUGFnZURvd24iOgoJCQkJbmV4dFRpbWUgPSBzYWZlQ3VycmVudFRpbWUgLSBsYXJnZVN0ZXA7CgkJCQlicmVhazsKCQkJY2FzZSAiUGFnZVVwIjoKCQkJCW5leHRUaW1lID0gc2FmZUN1cnJlbnRUaW1lICsgbGFyZ2VTdGVwOwoJCQkJYnJlYWs7CgkJCWNhc2UgIkhvbWUiOgoJCQkJbmV4dFRpbWUgPSAwOwoJCQkJYnJlYWs7CgkJCWNhc2UgIkVuZCI6CgkJCQluZXh0VGltZSA9IHNhZmVEdXJhdGlvbjsKCQkJCWJyZWFrOwoJCX0KCgkJaWYgKG5leHRUaW1lID09PSBudWxsKSByZXR1cm47CgoJCWUucHJldmVudERlZmF1bHQoKTsKCQlvblNjcnViU3RhcnQoKTsKCQlvblNlZWsoY2xhbXBUaW1lKG5leHRUaW1lKSk7CgkJb25TY3J1YkVuZCgpOwoJfQoKCWxldCBwcm9ncmVzc1BlcmNlbnQgPSAkZGVyaXZlZCgKCQlzYWZlRHVyYXRpb24gPiAwID8gKHNhZmVDdXJyZW50VGltZSAvIHNhZmVEdXJhdGlvbikgKiAxMDAgOiAwLAoJKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNsaWRlclJlZiB8fCAhdGh1bWJSZWYgfHwgIWhvdmVyVGltZVJlZikgcmV0dXJuOwoKCQlpZiAoaXNIb3ZlcmVkIHx8IGlzRHJhZ2dpbmcpIHsKCQkJZ3NhcC50byhzbGlkZXJSZWYsIHsKCQkJCWhlaWdodDogMjgsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5vdXQiLAoJCQl9KTsKCQkJZ3NhcC50byh0aHVtYlJlZiwgewoJCQkJb3BhY2l0eTogMSwKCQkJCXg6IGhvdmVyWCwKCQkJCWR1cmF0aW9uOiAwLjEsCgkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCX0pOwoJCQlnc2FwLnRvKGhvdmVyVGltZVJlZiwgewoJCQkJb3BhY2l0eTogMSwKCQkJCXg6IGhvdmVyWCwKCQkJCWR1cmF0aW9uOiAwLjEsCgkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCX0pOwoJCX0gZWxzZSB7CgkJCWdzYXAudG8oc2xpZGVyUmVmLCB7CgkJCQloZWlnaHQ6IDYsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyNC5vdXQiLAoJCQl9KTsKCQkJZ3NhcC50byh0aHVtYlJlZiwgewoJCQkJb3BhY2l0eTogMCwKCQkJCWR1cmF0aW9uOiAwLjIsCgkJCX0pOwoJCQlnc2FwLnRvKGhvdmVyVGltZVJlZiwgewoJCQkJb3BhY2l0eTogMCwKCQkJCWR1cmF0aW9uOiAwLjIsCgkJCX0pOwoJCX0KCgkJcmV0dXJuICgpID0+IHsKCQkJZ3NhcC5raWxsVHdlZW5zT2YoW3NsaWRlclJlZiwgdGh1bWJSZWYsIGhvdmVyVGltZVJlZl0pOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8ZGl2CgljbGFzcz17Y24oCgkJInJlbGF0aXZlIGZsZXggaC0xMCB3LWZ1bGwgdG91Y2gtbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc2VsZWN0LW5vbmUiLAoJCWNsYXNzTmFtZSwKCSl9Cglyb2xlPSJzbGlkZXIiCgl0YWJpbmRleD17aXNEaXNhYmxlZCA/IC0xIDogMH0KCWFyaWEtbGFiZWw9IlZpZGVvIHRpbWVsaW5lIgoJYXJpYS1kaXNhYmxlZD17aXNEaXNhYmxlZH0KCWFyaWEtdmFsdWVtaW49ezB9CglhcmlhLXZhbHVlbWF4PXtzYWZlRHVyYXRpb259CglhcmlhLXZhbHVlbm93PXtzYWZlQ3VycmVudFRpbWV9CglhcmlhLXZhbHVldGV4dD17Zm9ybWF0VGltZShzYWZlQ3VycmVudFRpbWUpfQoJb25wb2ludGVyZW50ZXI9eygpID0+IChpc0hvdmVyZWQgPSB0cnVlKX0KCW9ucG9pbnRlcmxlYXZlPXtoYW5kbGVQb2ludGVyTGVhdmV9CglvbnBvaW50ZXJtb3ZlPXtoYW5kbGVQb2ludGVyTW92ZX0KCW9ucG9pbnRlcmRvd249e2hhbmRsZVBvaW50ZXJEb3dufQoJb25wb2ludGVydXA9e2hhbmRsZVBvaW50ZXJVcH0KCW9ua2V5ZG93bj17aGFuZGxlS2V5RG93bn0KPgoJPGRpdgoJCXtAYXR0YWNoIGF0dGFjaFNsaWRlclJlZn0KCQljbGFzcz0icmVsYXRpdmUgaC0xLjUgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWxnIGJnLWZpeGVkLWxpZ2h0LzEwIGJhY2tkcm9wLWJsdXItbWQgdHJhbnNpdGlvbi1baGVpZ2h0XSIKCT4KCQk8ZGl2CgkJCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGgtZnVsbCB3LWZ1bGwgb3JpZ2luLWxlZnQgYmctZml4ZWQtbGlnaHQvMjAgYmFja2Ryb3AtYmx1ci1tZCIKCQkJc3R5bGU9InRyYW5zZm9ybTogc2NhbGVYKHtwcm9ncmVzc1BlcmNlbnQgLyAxMDB9KSIKCQk+PC9kaXY+Cgk8L2Rpdj4KCgk8ZGl2CgkJe0BhdHRhY2ggYXR0YWNoVGh1bWJSZWZ9CgkJY2xhc3M9InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgbGVmdC0wIGgtZnVsbCB3LXB4IGJnLWFjY2VudCBvcGFjaXR5LTAiCgk+PC9kaXY+CgoJPGRpdgoJCXtAYXR0YWNoIGF0dGFjaEhvdmVyVGltZVJlZn0KCQljbGFzcz0icG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSAtdG9wLTggbGVmdC0wIC10cmFuc2xhdGUteC0xLzIgcm91bmRlZCBiZy1maXhlZC1saWdodC8xMCBweC0xLjUgcHktMC41IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBsZWFkaW5nLW5vbmUgdGV4dC1maXhlZC1saWdodCBvcGFjaXR5LTAgc2hhZG93LXNtIGJhY2tkcm9wLWJsdXItbWQiCgk+CgkJe2Zvcm1hdFRpbWUoaG92ZXJUaW1lKX0KCTwvZGl2Pgo8L2Rpdj4K", - "components/water-ripple/WaterRipple.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1dhdGVyUmlwcGxlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHsgTm9Ub25lTWFwcGluZyB9IGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlzcmM6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBTaXplIG9mIHRoZSByaXBwbGUgYnJ1c2guCgkJICogQGRlZmF1bHQgMTAwCgkJICovCgkJYnJ1c2hTaXplPzogU2NlbmVQcm9wc1siYnJ1c2hTaXplIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCXNyYywKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJYnJ1c2hTaXplID0gMTAwLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUgaW1hZ2U9e3NyY30ge2JydXNoU2l6ZX0gLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/water-ripple/WaterRippleScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyB1c2VUZXh0dXJlIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCWltcG9ydCBicnVzaFVybCBmcm9tICIuLi9hc3NldHMvd2F0ZXItcmlwcGxlLWJydXNoLnBuZyI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIFNpemUgb2YgdGhlIHJpcHBsZSBicnVzaC4KCQkgKiBAZGVmYXVsdCAxMDAKCQkgKi8KCQlicnVzaFNpemU/OiBudW1iZXI7Cgl9CgoJbGV0IHsgaW1hZ2UsIGJydXNoU2l6ZSA9IDEwMCB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCB7IHNpemUsIHJlbmRlcmVyIH0gPSB1c2VUaHJlbHRlKCk7CgoJY29uc3QgbWF4ID0gMTAwOwoJY29uc3QgbWVzaFJlZnM6IFRIUkVFLk1lc2hbXSA9IFtdOwoJY29uc3QgYnJ1c2hTY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpOwoJY29uc3QgYnJ1c2hDYW1lcmEgPSBuZXcgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhKC0xLCAxLCAxLCAtMSwgMCwgMTApOwoKCWxldCBmYm9CYXNlID0gJHN0YXRlPFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpOwoKCWxldCBjdXJyZW50V2F2ZSA9IDA7CglsZXQgcHJldk1vdXNlID0gbmV3IFRIUkVFLlZlY3RvcjIoMCwgMCk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdURpc3BsYWNlbWVudDsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQlmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4OwoKCQl2ZWMyIGdldENvdmVyVVYodmVjMiB1diwgdmVjMiB0ZXh0dXJlU2l6ZSkgewoJCQl2ZWMyIHMgPSB1UmVzb2x1dGlvbiAvIHRleHR1cmVTaXplOwoJCQlmbG9hdCBzY2FsZSA9IG1heChzLngsIHMueSk7CgkJCXZlYzIgc2NhbGVkU2l6ZSA9IHRleHR1cmVTaXplICogc2NhbGU7CgkJCXZlYzIgb2Zmc2V0ID0gKHVSZXNvbHV0aW9uIC0gc2NhbGVkU2l6ZSkgKiAwLjU7CgkJCXJldHVybiAodXYgKiB1UmVzb2x1dGlvbiAtIG9mZnNldCkgLyBzY2FsZWRTaXplOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWMyIGNvdmVyVXYgPSBnZXRDb3ZlclVWKHZVdiwgdVRleHR1cmVTaXplKTsKCgkJCXZlYzIgdlV2U2NyZWVuID0gdlV2OwoKCQkJdmVjNCBkaXNwbGFjZW1lbnQgPSB0ZXh0dXJlMkQodURpc3BsYWNlbWVudCwgdlV2U2NyZWVuKTsKCQkJZmxvYXQgdGhldGEgPSBkaXNwbGFjZW1lbnQuciAqIDIuMCAqIFBJOwoKCQkJdmVjMiBkaXIgPSB2ZWMyKHNpbih0aGV0YSksIGNvcyh0aGV0YSkpOwoJCQl2ZWMyIGZpbmFsVXYgPSBjb3ZlclV2ICsgZGlyICogZGlzcGxhY2VtZW50LnIgKiAwLjA1OwoKCQkJdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgZmluYWxVdik7CgoJCQlnbF9GcmFnQ29sb3IgPSBjb2xvcjsKCQkJI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+CgkJfQoJYDsKCgljb25zdCByZXNvbHV0aW9uVW5pZm9ybSA9IG5ldyBUSFJFRS5WZWN0b3IyKDEsIDEpOwoJY29uc3QgdGV4dHVyZVNpemVVbmlmb3JtID0gbmV3IFRIUkVFLlZlY3RvcjIoMSwgMSk7CglsZXQgbWFpbk1hdGVyaWFsID0gJHN0YXRlPFRIUkVFLlNoYWRlck1hdGVyaWFsPigpOwoKCWNvbnN0IHRleHR1cmVzID0gJGRlcml2ZWQoCgkJdXNlVGV4dHVyZShbYnJ1c2hVcmwsIGltYWdlXSwgewoJCQl0cmFuc2Zvcm06ICh0ZXgpID0+IHsKCQkJCXRleC5jb2xvclNwYWNlID0gVEhSRUUuU1JHQkNvbG9yU3BhY2U7CgkJCQlyZXR1cm4gdGV4OwoJCQl9LAoJCX0pLAoJKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoJHRleHR1cmVzICYmICR0ZXh0dXJlc1swXSkgewoJCQljb25zdCBicnVzaFRleHR1cmUgPSAkdGV4dHVyZXNbMF07CgkJCWJydXNoVGV4dHVyZS5yb3RhdGlvbiA9IDA7CgoJCQl3aGlsZSAoYnJ1c2hTY2VuZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CgkJCQlicnVzaFNjZW5lLnJlbW92ZShicnVzaFNjZW5lLmNoaWxkcmVuWzBdKTsKCQkJfQoJCQltZXNoUmVmcy5sZW5ndGggPSAwOwoKCQkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShicnVzaFNpemUsIGJydXNoU2l6ZSwgMSwgMSk7CgkJCWNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHsKCQkJCW1hcDogYnJ1c2hUZXh0dXJlLAoJCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCQlvcGFjaXR5OiAwLAoJCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCQkJYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsCgkJCX0pOwoKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBtYXg7IGkrKykgewoJCQkJY29uc3QgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCBtYXRlcmlhbC5jbG9uZSgpKTsKCQkJCW1lc2gudmlzaWJsZSA9IGZhbHNlOwoJCQkJbWVzaC5yb3RhdGlvbi56ID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyOwoJCQkJYnJ1c2hTY2VuZS5hZGQobWVzaCk7CgkJCQltZXNoUmVmcy5wdXNoKG1lc2gpOwoJCQl9CgkJfQoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3Qgd2lkdGggPSAkc2l6ZS53aWR0aDsKCQljb25zdCBoZWlnaHQgPSAkc2l6ZS5oZWlnaHQ7CgoJCXJlc29sdXRpb25Vbmlmb3JtLnNldCh3aWR0aCwgaGVpZ2h0KTsKCgkJYnJ1c2hDYW1lcmEubGVmdCA9IC13aWR0aCAvIDI7CgkJYnJ1c2hDYW1lcmEucmlnaHQgPSB3aWR0aCAvIDI7CgkJYnJ1c2hDYW1lcmEudG9wID0gaGVpZ2h0IC8gMjsKCQlicnVzaENhbWVyYS5ib3R0b20gPSAtaGVpZ2h0IC8gMjsKCQlicnVzaENhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CgoJCWNvbnN0IHRhcmdldCA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCB7CgkJCW1pbkZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLAoJCQltYWdGaWx0ZXI6IFRIUkVFLkxpbmVhckZpbHRlciwKCQkJZm9ybWF0OiBUSFJFRS5SR0JBRm9ybWF0LAoJCX0pOwoKCQlmYm9CYXNlID0gdGFyZ2V0OwoKCQlyZXR1cm4gKCkgPT4gewoJCQl0YXJnZXQuZGlzcG9zZSgpOwoJCX07Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoJHRleHR1cmVzICYmICR0ZXh0dXJlc1sxXSAmJiAkdGV4dHVyZXNbMV0uaW1hZ2UpIHsKCQkJdGV4dHVyZVNpemVVbmlmb3JtLnNldCgKCQkJCSR0ZXh0dXJlc1sxXS5pbWFnZS53aWR0aCwKCQkJCSR0ZXh0dXJlc1sxXS5pbWFnZS5oZWlnaHQsCgkJCSk7CgkJfQoJfSk7CgoJY29uc3Qgc2V0TmV3V2F2ZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gewoJCWNvbnN0IG1lc2ggPSBtZXNoUmVmc1tpbmRleF07CgkJaWYgKG1lc2gpIHsKCQkJbWVzaC5wb3NpdGlvbi54ID0geDsKCQkJbWVzaC5wb3NpdGlvbi55ID0geTsKCQkJbWVzaC52aXNpYmxlID0gdHJ1ZTsKCQkJKG1lc2gubWF0ZXJpYWwgYXMgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwpLm9wYWNpdHkgPSAxOwoJCQltZXNoLnNjYWxlLnNldCgxLjUsIDEuNSwgMS41KTsKCQl9Cgl9OwoKCWNvbnN0IG9uUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7CgkJY29uc3QgcmVjdCA9IHJlbmRlcmVyLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIHJlY3Qud2lkdGggLyAyOwoJCWNvbnN0IHkgPSAtKGUuY2xpZW50WSAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQgLyAyKTsKCgkJaWYgKE1hdGguYWJzKHggLSBwcmV2TW91c2UueCkgPiA0IHx8IE1hdGguYWJzKHkgLSBwcmV2TW91c2UueSkgPiA0KSB7CgkJCWN1cnJlbnRXYXZlID0gKGN1cnJlbnRXYXZlICsgMSkgJSBtYXg7CgkJCXNldE5ld1dhdmUoeCwgeSwgY3VycmVudFdhdmUpOwoJCQlwcmV2TW91c2Uuc2V0KHgsIHkpOwoJCX0KCX07CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgY2FudmFzID0gcmVuZGVyZXIuZG9tRWxlbWVudDsKCQljYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBvblBvaW50ZXJNb3ZlKTsKCQlyZXR1cm4gKCkgPT4gewoJCQljYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBvblBvaW50ZXJNb3ZlKTsKCQl9OwoJfSk7CgoJdXNlVGFzaygoZGVsdGEpID0+IHsKCQlpZiAoIWZib0Jhc2UgfHwgISR0ZXh0dXJlcyB8fCAhJHRleHR1cmVzWzFdKSByZXR1cm47CgoJCWNvbnN0IHRpbWVTY2FsZSA9IGRlbHRhICogNjA7CgoJCW1lc2hSZWZzLmZvckVhY2goKG1lc2gpID0+IHsKCQkJaWYgKG1lc2gudmlzaWJsZSkgewoJCQkJbWVzaC5yb3RhdGlvbi56ICs9IDAuMDIgKiB0aW1lU2NhbGU7CgkJCQkobWVzaC5tYXRlcmlhbCBhcyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCkub3BhY2l0eSAqPSBNYXRoLnBvdygKCQkJCQkwLjk2LAoJCQkJCXRpbWVTY2FsZSwKCQkJCSk7CgkJCQltZXNoLnNjYWxlLnggPSAwLjk4MiAqIG1lc2guc2NhbGUueCArIDAuMTA4ICogdGltZVNjYWxlOwoJCQkJY29uc3QgZGVjYXkgPSBNYXRoLnBvdygwLjk2LCB0aW1lU2NhbGUpOwoJCQkJKG1lc2gubWF0ZXJpYWwgYXMgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwpLm9wYWNpdHkgKj0gZGVjYXk7CgoJCQkJbWVzaC5zY2FsZS54ID0gMC45ODIgKiBtZXNoLnNjYWxlLnggKyAwLjEwODsKCQkJCW1lc2guc2NhbGUueSA9IDAuOTgyICogbWVzaC5zY2FsZS55ICsgMC4xMDg7CgoJCQkJaWYgKChtZXNoLm1hdGVyaWFsIGFzIFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKS5vcGFjaXR5IDwgMC4wMDIpIHsKCQkJCQltZXNoLnZpc2libGUgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCX0pOwoKCQljb25zdCBjdXJyZW50UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7CgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGZib0Jhc2UpOwoJCXJlbmRlcmVyLmNsZWFyKCk7CgkJcmVuZGVyZXIucmVuZGVyKGJydXNoU2NlbmUsIGJydXNoQ2FtZXJhKTsKCgkJaWYgKG1haW5NYXRlcmlhbCkgewoJCQltYWluTWF0ZXJpYWwudW5pZm9ybXMudURpc3BsYWNlbWVudC52YWx1ZSA9IGZib0Jhc2UudGV4dHVyZTsKCQkJbWFpbk1hdGVyaWFsLnVuaWZvcm1zLnVUZXh0dXJlLnZhbHVlID0gJHRleHR1cmVzWzFdOwoJCX0KCgkJcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGN1cnJlbnRSZW5kZXJUYXJnZXQpOwoJfSk7Cjwvc2NyaXB0PgoKeyNpZiAkdGV4dHVyZXMgJiYgJHRleHR1cmVzWzFdfQoJPFQuTWVzaD4KCQk8VC5QbGFuZUdlb21ldHJ5IGFyZ3M9e1syLCAyXX0gLz4KCQk8VC5TaGFkZXJNYXRlcmlhbAoJCQliaW5kOnJlZj17bWFpbk1hdGVyaWFsfQoJCQl7dmVydGV4U2hhZGVyfQoJCQl7ZnJhZ21lbnRTaGFkZXJ9CgkJCXVuaWZvcm1zPXt7CgkJCQl1VGV4dHVyZTogeyB2YWx1ZTogJHRleHR1cmVzWzFdIH0sCgkJCQl1RGlzcGxhY2VtZW50OiB7IHZhbHVlOiBudWxsIH0sCgkJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogcmVzb2x1dGlvblVuaWZvcm0gfSwKCQkJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogdGV4dHVyZVNpemVVbmlmb3JtIH0sCgkJCX19CgkJLz4KCTwvVC5NZXNoPgp7L2lmfQo=", + "components/water-ripple/WaterRipple.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9XYXRlclJpcHBsZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlzcmM6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBTaXplIG9mIHRoZSByaXBwbGUgYnJ1c2guCgkJICogQGRlZmF1bHQgMTAwCgkJICovCgkJYnJ1c2hTaXplPzogU2NlbmVQcm9wc1siYnJ1c2hTaXplIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCXNyYywKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJYnJ1c2hTaXplID0gMTAwLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZSBpbWFnZT17c3JjfSB7YnJ1c2hTaXplfSAvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/water-ripple/WaterRippleScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUGxhbmUsCgkJUHJvZ3JhbSwKCQlSZW5kZXJUYXJnZXQsCgkJUmVuZGVyZXIsCgkJVGV4dHVyZSwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCX0gZnJvbSAib2dsIjsKCWltcG9ydCBicnVzaFVybCBmcm9tICIuLi9hc3NldHMvd2F0ZXItcmlwcGxlLWJydXNoLnBuZyI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIFNpemUgb2YgdGhlIHJpcHBsZSBicnVzaC4KCQkgKiBAZGVmYXVsdCAxMDAKCQkgKi8KCQlicnVzaFNpemU/OiBudW1iZXI7Cgl9CgoJbGV0IHsgaW1hZ2UsIGJydXNoU2l6ZSA9IDEwMCB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXVUZXh0dXJlOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdURpc3BsYWNlbWVudDogeyB2YWx1ZTogVGV4dHVyZSB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWMyIH07CgkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07Cgl9OwoKCXR5cGUgQnJ1c2hXYXZlID0gewoJCW1lc2g6IE1lc2g7CgkJb3BhY2l0eVVuaWZvcm06IHsgdmFsdWU6IG51bWJlciB9OwoJCXNjYWxlWDogbnVtYmVyOwoJCXNjYWxlWTogbnVtYmVyOwoJfTsKCgljb25zdCBNQVhfV0FWRVMgPSAxMDA7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXRJbWFnZVNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CglsZXQgc2V0QnJ1c2hTaXplID0gJHN0YXRlPCh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkPigpOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCB0ZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVEaXNwbGFjZW1lbnQ7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMiB1VGV4dHVyZVNpemU7CgoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzYWZlVGV4dHVyZSA9IG1heCh0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyBzYWZlVGV4dHVyZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSBzYWZlVGV4dHVyZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBjb3ZlclV2ID0gZ2V0Q292ZXJVVih2VXYsIHVUZXh0dXJlU2l6ZSk7CgkJCXZlYzQgZGlzcGxhY2VtZW50ID0gdGV4dHVyZTJEKHVEaXNwbGFjZW1lbnQsIHZVdik7CgkJCWZsb2F0IHRoZXRhID0gZGlzcGxhY2VtZW50LnIgKiAyLjAgKiBQSTsKCQkJdmVjMiBkaXIgPSB2ZWMyKHNpbih0aGV0YSksIGNvcyh0aGV0YSkpOwoJCQl2ZWMyIGZpbmFsVXYgPSBjb3ZlclV2ICsgZGlyICogZGlzcGxhY2VtZW50LnIgKiAwLjA1OwoJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVRleHR1cmUsIGZpbmFsVXYpOwoJCX0KCWA7CgoJY29uc3QgYnJ1c2hWZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsKCQl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgYnJ1c2hGcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gc2FtcGxlcjJEIHVCcnVzaDsKCQl1bmlmb3JtIGZsb2F0IHVPcGFjaXR5OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCB0ZXggPSB0ZXh0dXJlMkQodUJydXNoLCB2VXYpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleC5yZ2IgKiB1T3BhY2l0eSwgdGV4LmEgKiB1T3BhY2l0eSk7CgkJfQoJYDsKCgljb25zdCBkaXNwb3NlVGFyZ2V0ID0gKGdsOiBSZW5kZXJlclsiZ2wiXSwgdGFyZ2V0OiBSZW5kZXJUYXJnZXQpID0+IHsKCQl0YXJnZXQudGV4dHVyZXMuZm9yRWFjaCgodGV4dHVyZSkgPT4gewoJCQlpZiAodGV4dHVyZS50ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUudGV4dHVyZSk7CgkJfSk7CgkJaWYgKHRhcmdldC5kZXB0aFRleHR1cmU/LnRleHR1cmUpCgkJCWdsLmRlbGV0ZVRleHR1cmUodGFyZ2V0LmRlcHRoVGV4dHVyZS50ZXh0dXJlKTsKCQlpZiAodGFyZ2V0LmRlcHRoQnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoQnVmZmVyKTsKCQlpZiAodGFyZ2V0LnN0ZW5jaWxCdWZmZXIpIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0YXJnZXQuc3RlbmNpbEJ1ZmZlcik7CgkJaWYgKHRhcmdldC5kZXB0aFN0ZW5jaWxCdWZmZXIpCgkJCWdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0YXJnZXQuZGVwdGhTdGVuY2lsQnVmZmVyKTsKCQlpZiAodGFyZ2V0LmJ1ZmZlcikgZ2wuZGVsZXRlRnJhbWVidWZmZXIodGFyZ2V0LmJ1ZmZlcik7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0SW1hZ2VTb3VyY2UpIHJldHVybjsKCQlzZXRJbWFnZVNvdXJjZShpbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEJydXNoU2l6ZSkgcmV0dXJuOwoJCXNldEJydXNoU2l6ZShicnVzaFNpemUpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBicnVzaENhbWVyYSA9IG5ldyBDYW1lcmEoZ2wsIHsKCQkJbGVmdDogLTEsCgkJCXJpZ2h0OiAxLAoJCQl0b3A6IDEsCgkJCWJvdHRvbTogLTEsCgkJCW5lYXI6IDAsCgkJCWZhcjogMTAsCgkJfSk7CgkJYnJ1c2hDYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGJydXNoU2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgoJCWNvbnN0IGZ1bGxzY3JlZW5HZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgkJbGV0IGJydXNoUGl4ZWxTaXplID0gTWF0aC5tYXgoMSwgYnJ1c2hTaXplKTsKCQljb25zdCBicnVzaEdlb21ldHJ5ID0gbmV3IFBsYW5lKGdsLCB7CgkJCXdpZHRoOiBicnVzaFBpeGVsU2l6ZSwKCQkJaGVpZ2h0OiBicnVzaFBpeGVsU2l6ZSwKCQl9KTsKCgkJY29uc3QgaW1hZ2VUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgYnJ1c2hUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAwXSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQljb25zdCBkaXNwbGFjZW1lbnRUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB7CgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQltYWdGaWx0ZXI6IGdsLkxJTkVBUiwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCX0pOwoKCQljb25zdCBtYWluVW5pZm9ybXM6IFVuaWZvcm1TdGF0ZSA9IHsKCQkJdVRleHR1cmU6IHsgdmFsdWU6IGltYWdlVGV4dHVyZSB9LAoJCQl1RGlzcGxhY2VtZW50OiB7IHZhbHVlOiBkaXNwbGFjZW1lbnRUYXJnZXQudGV4dHVyZSB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogcmVzb2x1dGlvblVuaWZvcm0gfSwKCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiB0ZXh0dXJlU2l6ZVVuaWZvcm0gfSwKCQl9OwoKCQljb25zdCBtYWluUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBtYWluVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWFpbk1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQlnZW9tZXRyeTogZnVsbHNjcmVlbkdlb21ldHJ5LAoJCQlwcm9ncmFtOiBtYWluUHJvZ3JhbSwKCQkJZnJ1c3R1bUN1bGxlZDogZmFsc2UsCgkJfSk7CgkJbWFpbk1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3Qgd2F2ZXM6IEJydXNoV2F2ZVtdID0gW107CgkJZm9yIChsZXQgaSA9IDA7IGkgPCBNQVhfV0FWRVM7IGkrKykgewoJCQljb25zdCBvcGFjaXR5VW5pZm9ybSA9IHsgdmFsdWU6IDAgfTsKCQkJY29uc3QgYnJ1c2hQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJCXZlcnRleDogYnJ1c2hWZXJ0ZXhTaGFkZXIsCgkJCQlmcmFnbWVudDogYnJ1c2hGcmFnbWVudFNoYWRlciwKCQkJCXVuaWZvcm1zOiB7CgkJCQkJdUJydXNoOiB7IHZhbHVlOiBicnVzaFRleHR1cmUgfSwKCQkJCQl1T3BhY2l0eTogb3BhY2l0eVVuaWZvcm0sCgkJCQl9LAoJCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJCQljdWxsRmFjZTogbnVsbCwKCQkJfSk7CgkJCWJydXNoUHJvZ3JhbS5zZXRCbGVuZEZ1bmMoZ2wuU1JDX0FMUEhBLCBnbC5PTkUpOwoKCQkJY29uc3QgYnJ1c2hNZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJCWdlb21ldHJ5OiBicnVzaEdlb21ldHJ5LAoJCQkJcHJvZ3JhbTogYnJ1c2hQcm9ncmFtLAoJCQkJZnJ1c3R1bUN1bGxlZDogZmFsc2UsCgkJCX0pOwoJCQlicnVzaE1lc2gudmlzaWJsZSA9IGZhbHNlOwoJCQlicnVzaE1lc2gucm90YXRpb24ueiA9IE1hdGgucmFuZG9tKCkgKiBNYXRoLlBJICogMjsKCQkJYnJ1c2hNZXNoLnNldFBhcmVudChicnVzaFNjZW5lKTsKCgkJCXdhdmVzLnB1c2goewoJCQkJbWVzaDogYnJ1c2hNZXNoLAoJCQkJb3BhY2l0eVVuaWZvcm0sCgkJCQlzY2FsZVg6IDEuNSwKCQkJCXNjYWxlWTogMS41LAoJCQl9KTsKCQl9CgoJCWxldCBpbWFnZVRva2VuID0gMDsKCQlsZXQgYnJ1c2hUb2tlbiA9IDA7CgkJbGV0IGRpc3Bvc2VkID0gZmFsc2U7CgoJCWNvbnN0IGxvYWRJbWFnZSA9IChzb3VyY2U6IHN0cmluZykgPT4gewoJCQlpbWFnZVRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gaW1hZ2VUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKGRpc3Bvc2VkIHx8IHRva2VuICE9PSBpbWFnZVRva2VuKSByZXR1cm47CgkJCQlpbWFnZVRleHR1cmUuaW1hZ2UgPSBpbWc7CgkJCQl0ZXh0dXJlU2l6ZVVuaWZvcm0uc2V0KAoJCQkJCWltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoIHx8IDEsCgkJCQkJaW1nLm5hdHVyYWxIZWlnaHQgfHwgaW1nLmhlaWdodCB8fCAxLAoJCQkJKTsKCQkJfTsKCQkJaW1nLnNyYyA9IHNvdXJjZTsKCQl9OwoKCQljb25zdCBsb2FkQnJ1c2ggPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJYnJ1c2hUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGJydXNoVG9rZW47CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmIChkaXNwb3NlZCB8fCB0b2tlbiAhPT0gYnJ1c2hUb2tlbikgcmV0dXJuOwoJCQkJYnJ1c2hUZXh0dXJlLmltYWdlID0gaW1nOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoJCXNldEJydXNoU2l6ZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7CgkJCWJydXNoUGl4ZWxTaXplID0gTWF0aC5tYXgoMSwgdmFsdWUpOwoJCX07CgoJCWxldCBjdXJyZW50V2F2ZSA9IDA7CgkJY29uc3QgcHJldk1vdXNlID0gbmV3IFZlYzIoMCwgMCk7CgoJCWNvbnN0IHNldE5ld1dhdmUgPSAoeDogbnVtYmVyLCB5OiBudW1iZXIsIGluZGV4OiBudW1iZXIpID0+IHsKCQkJY29uc3Qgd2F2ZSA9IHdhdmVzW2luZGV4XTsKCQkJaWYgKCF3YXZlKSByZXR1cm47CgkJCXdhdmUubWVzaC5wb3NpdGlvbi54ID0geDsKCQkJd2F2ZS5tZXNoLnBvc2l0aW9uLnkgPSB5OwoJCQl3YXZlLm1lc2gudmlzaWJsZSA9IHRydWU7CgkJCXdhdmUub3BhY2l0eVVuaWZvcm0udmFsdWUgPSAxOwoJCQl3YXZlLnNjYWxlWCA9IDEuNTsKCQkJd2F2ZS5zY2FsZVkgPSAxLjU7CgkJCXdhdmUubWVzaC5zY2FsZS5zZXQod2F2ZS5zY2FsZVgsIHdhdmUuc2NhbGVZLCAxLjUpOwoJCX07CgoJCWNvbnN0IG9uUG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gewoJCQljb25zdCByZWN0ID0gdGFyZ2V0Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIHJlY3Qud2lkdGggLyAyOwoJCQljb25zdCB5ID0gLShldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCAvIDIpOwoKCQkJaWYgKE1hdGguYWJzKHggLSBwcmV2TW91c2UueCkgPiA0IHx8IE1hdGguYWJzKHkgLSBwcmV2TW91c2UueSkgPiA0KSB7CgkJCQljdXJyZW50V2F2ZSA9IChjdXJyZW50V2F2ZSArIDEpICUgTUFYX1dBVkVTOwoJCQkJc2V0TmV3V2F2ZSh4LCB5LCBjdXJyZW50V2F2ZSk7CgkJCQlwcmV2TW91c2Uuc2V0KHgsIHkpOwoJCQl9CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgb25Qb2ludGVyTW92ZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KHdpZHRoLCBoZWlnaHQpOwoKCQkJYnJ1c2hDYW1lcmEubGVmdCA9IC13aWR0aCAvIDI7CgkJCWJydXNoQ2FtZXJhLnJpZ2h0ID0gd2lkdGggLyAyOwoJCQlicnVzaENhbWVyYS50b3AgPSBoZWlnaHQgLyAyOwoJCQlicnVzaENhbWVyYS5ib3R0b20gPSAtaGVpZ2h0IC8gMjsKCQkJYnJ1c2hDYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOwoKCQkJZGlzcGxhY2VtZW50VGFyZ2V0LnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCQlsb2FkQnJ1c2goYnJ1c2hVcmwpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXNUaW1lID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXNUaW1lID8gKG5vdyAtIHByZXZpb3VzVGltZSkgLyAxMDAwIDogMDsKCQkJcHJldmlvdXNUaW1lID0gbm93OwoJCQljb25zdCB0aW1lU2NhbGUgPSBkZWx0YSAqIDYwOwoKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCB3YXZlcy5sZW5ndGg7IGkrKykgewoJCQkJY29uc3Qgd2F2ZSA9IHdhdmVzW2ldOwoJCQkJaWYgKCF3YXZlLm1lc2gudmlzaWJsZSkgY29udGludWU7CgoJCQkJd2F2ZS5tZXNoLnJvdGF0aW9uLnogKz0gMC4wMiAqIHRpbWVTY2FsZTsKCQkJCXdhdmUub3BhY2l0eVVuaWZvcm0udmFsdWUgKj0gTWF0aC5wb3coMC45NiwgdGltZVNjYWxlKTsKCQkJCXdhdmUuc2NhbGVYID0gMC45ODIgKiB3YXZlLnNjYWxlWCArIDAuMTA4ICogdGltZVNjYWxlOwoKCQkJCWNvbnN0IGRlY2F5ID0gTWF0aC5wb3coMC45OSwgdGltZVNjYWxlKTsKCQkJCXdhdmUub3BhY2l0eVVuaWZvcm0udmFsdWUgKj0gZGVjYXk7CgkJCQl3YXZlLnNjYWxlWCA9IDAuOTgyICogd2F2ZS5zY2FsZVggKyAwLjEwODsKCQkJCXdhdmUuc2NhbGVZID0gMC45ODIgKiB3YXZlLnNjYWxlWSArIDAuMTA4OwoJCQkJd2F2ZS5tZXNoLnNjYWxlLnNldCh3YXZlLnNjYWxlWCwgd2F2ZS5zY2FsZVksIDEuNSk7CgoJCQkJaWYgKHdhdmUub3BhY2l0eVVuaWZvcm0udmFsdWUgPCAwLjAwMikgewoJCQkJCXdhdmUubWVzaC52aXNpYmxlID0gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCXJlbmRlcmVyLnJlbmRlcih7CgkJCQlzY2VuZTogYnJ1c2hTY2VuZSwKCQkJCWNhbWVyYTogYnJ1c2hDYW1lcmEsCgkJCQl0YXJnZXQ6IGRpc3BsYWNlbWVudFRhcmdldCwKCQkJCWNsZWFyOiB0cnVlLAoJCQl9KTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEsIGNsZWFyOiB0cnVlIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCWRpc3Bvc2VkID0gdHJ1ZTsKCQkJaW1hZ2VUb2tlbiArPSAxOwoJCQlicnVzaFRva2VuICs9IDE7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIG9uUG9pbnRlck1vdmUpOwoJCQlzZXRJbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJc2V0QnJ1c2hTaXplID0gdW5kZWZpbmVkOwoKCQkJbWFpblByb2dyYW0ucmVtb3ZlKCk7CgkJCXdhdmVzLmZvckVhY2goKHdhdmUpID0+IHdhdmUubWVzaC5wcm9ncmFtLnJlbW92ZSgpKTsKCQkJZnVsbHNjcmVlbkdlb21ldHJ5LnJlbW92ZSgpOwoJCQlicnVzaEdlb21ldHJ5LnJlbW92ZSgpOwoJCQlkaXNwb3NlVGFyZ2V0KGdsLCBkaXNwbGFjZW1lbnRUYXJnZXQpOwoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQlpZiAoYnJ1c2hUZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUoYnJ1c2hUZXh0dXJlLnRleHR1cmUpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "assets/water-ripple-brush.png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4OWY5Njk1OC1lODMwLTBkNGUtYmJiOS1kYTU1YzZjNmI3OTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUY5Q0FGQjZDRUY5MTFFOEJCOUI4NTBFQTBDODA4QTEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUY5Q0FGQjVDRUY5MTFFOEJCOUI4NTBFQTBDODA4QTEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NzQ1ZDZiZDEtYmUyZS04ZDQyLTk5NDctY2VhNTMxOWIxOWJhIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg5Zjk2OTU4LWU4MzAtMGQ0ZS1iYmI5LWRhNTVjNmM2Yjc5NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pkqyp+EAAMZ5SURBVHja7F2LcuM8r6Oc7/2f+NQ62/3tLE3zAkpKr9RMp22SpklsCyBIgq33TrVq1apVq1at37W2+ghq1apVq1atIgC1atWqVatWrSIAtWrVqlWrVq0iALVq1apVq1atIgC1atWqVatWrSIAtWrVqlWrVq0iALVq1apVq1atIgC1atWqVatWrSIAtWrVqlWrVq0iALVq1apVq1atIgC1atWqVatWrSIAtWrVqlWrVq0iALVq1apVq1atIgC1atWqVatWrSIAtWrVqlWrVq0iALVq1apVq1atIgC1atWqVatWrSIAtWrVqlWrVhGAWrVq1apVq1YRgFq1atWqVavWD13/ffYLaK3VUahV68/a9z11MWzb1utT+92r9zoFan1jAlCrVgH7GBH+s/m3CACKJNSqVasIQK1anwD2r1a4oue3SEIRg1q1ahUBqFVrEeB/1XSW9rokMShCUKtWEYBatWqBoP/d61f46y9CUKtWEYBatWp9AOi/qnhr5vUVIahV63et9tlVpNUFUOsng75xfb36pO+vuM6KEHy9VV0AtYoA1Kr1RUBfXE/to8/74HruK1/D+b+KDBQBqFUEoAhArW8N/IOteC7gC1n9064t53/3FddiqQNFAGoVASgCUOvHAz+7ZlTAD66pjzrhe3TNGa+zCEERgFpFAIoA1CrgVzbbBgLpVz2xu3UdeoRgVbqgSEERgFpFAIoA1PoWwC+jfUdWR5/00xUA5LEGIegrr9tSCYoA1CoCUEeh1pcCfk/iT4L56Mkd/d3oRdtf9bjVhKBIQRGAWkUAatVasUk28HEX8DWi/fYKQvD+/CMpieBvkIs7/ZgoXbDyui6VoAhArSIAtWq9Ouoflfizt1/uX3X9sdcdPeHy+4sQFAGoVQSgCECtbxv1J6P9NkIEtIgdfZ3AddQ1YACJweh9JiEwwOllhOC3koEiALWKANSqlYz6udyvABYK/DARcIB+1QXQI3KQIAXZ2yGQ/6iiwt9EBooA1CoCUKtWLurPAD9ym/r7ZAphGQEg3QGwLwD+lDoAGBMtIwS/hQwUAahVBKBWgT8A/o7cPwzy1u/K6/kyBMAA2579u1lCwP//q02JfioRKAJQqwhArV+7EpI/GvVnfvdAfzhd8AIi0NHHOOmBV6QL1Me9ypToJ6oCRQBqFQGoVVE/GPUPAr95nwP6WWIxQggy4OsBugv2hkLwoYRAAbtpMvATiEARgFpFAGoV+BuPGZD7w59B0EeJwSolYCXom/ctTBegpEBNA6wiA9+dCBQBqFUEoFaBfwCqBvivAH70tleoAGi03ZM/Q/ctTBek719NBr4rESgCUKsIQK0Cf7YhyqIABfwRItCU6yQL+qOKwCoVoL/4Z6vF8CMIAUQGfjoRKAJQqwhArR+/kGI/UPKPgBgBfu/vkMe+ggTMgP8yQmARhAWEYIYMpFWB70IEigDUKgJQ61dH/RqIJsBfvS0A/tHv1m2X35FrUooci8F/lBi4v3+Q/0BfqQp8dSJQBKBWEYBaBf4++KNRfxP/0/s+TQoGxwnD0b8A3CzQr1AHVAIgLJFnCwrD2y1V4CcQgSIAtYoA1CrwXxD1c3B3FICIBESAH6UGEEKQqfg/yQAC8hliME0OeP1AsqBwiAz8RCJQBKBWEYBavw78jWK/DPgjcv/0z6CaMKoEINJ/VyJi7b5ZVeAV9QJTpkavJgLv67PJQBGAWkUAav028G/BVL2M5B8RAA/g3d+V50ULBL3boqr7dKR/AG9WFVitDqgkxVEHRsnBUiIgQfijCUERgFpFAGr9iAXa+o7k+93vB3nIAv3tNhHto2kD/jqyCoAKikbuPwJ5K2Xg/T1KDKz7w8eD4D+qCiwlAp9BCIoA1CoCUOvHR/2rwX8C9NXbjedD0wOIGgCBvwAvlASoP7PnWKEKDKsDQWogc98QEZjdp7Q9dhUxKAJQqwhArV8F/gPFfhb4ZkDfvY89n0UQLAUATQdEQIaAcwTuyM+ROpAlBkP3B6mPKZVgpbHQq4lBEYBaRQBqfcsFmvtkiv0sEmBF/5C0D4K+9RhEEfhwAqCQgBQRWKwODJMFIEUwlS7wVIFX7V9yT/ZIQRGAWkUAav3IqH+w2E/eZhXmpcB+APgRFWGYABzvI8r5I4C+hBQYqsDI9+HbwILIDBHwbncfs3pfs+oKigDUKgJQ60dF/RoIzhb7KQV6CAnYAGDfEuRAJR+OPwCEDdZ3R+YPf19EBFbWDsAphhcRgdt97/8n2D9fRgxYF0gxgFpFAGr9jKh/MfhH+X7kazPA3SIHW6AKHKd98+oCIiUgI//LVj8N/L3bo79VwX6gtXDGqEj922SdQHaccff2swwxmN0Dv4onQa05ZacIQK1fHfXLfP/iYj+UBGgAvgXgH92faRXMqAARaKLRfYoYKFH+SPHgCDkYUgcWEIGIDECkINjwl5CCIgNFAIoA1PpWwM/VARFBTRX7kS3JUwDUm/jbzQD3zXgMkj6YJQEI+JsgzaP6/r9iC48AmAQhmyoIigdnwD/8vqBgMEMGwscCasFUC+J3G21cBKAIQK3fB/zHaXDbDFcX+8FSvwB3Dfw3hBxQvi4gUjw8kIIVAAvchdQPkwCKUwVEccEhgX83RRCMmQiIChBtlNmN1CUGyr483HlQqkARgCIAtT7qhG6Zxyry6KjkzyP+DPhH0f1mgL9KDAAFIdsRgAJJFP1DRGCWBCjPASkSgkCgJGCIEChKwCpnwZcSgxXqQBUNFgEoAlDrS0X9C8A/W+znyfUm8Af3ReQg+hohADJqRUhA+kshBdHzRkQgJAYGGZglBxbo94l5A6NgP0QgjLTBjxhtXASgCECtXwD8xkY2PMxHgL9FAjYk+v/zPBfAlz8f93vAH6YEKJ8GyET/RHn53/vaaSxVgBIBq1ZghDyg5EAFemAaoTaICQHzVWoBZFCUuR6LCBQBKAJQa/TkbdnHBsAfAb4FlF6xHwT8BohvigKg3idu1757ROAzCcC+QBGAUwZOZJ9pRUylFmiunZA4OeD7Je8uUG5fQQxm1AZYFai0QBGAIgC1Xhr1A3I/Eu3fov9ksV8E/BzYI+DfFNIwQgKI7FSA/Ly0TT0DhiPgvy8iAVZ0DxMCIBVh/Z4lBGb0j4CwRQzkfUlgD/9mZqphqQFFAIoA1FoW9WvA74D/CpOfNPADkb8L/s59EQnIEIAbGTAq2bOFf/sEMdhnCIHjQ5AB/xGHQ4sQICQgUw/Qo2jbUhLA5+pZIoBG+aUGFAEoAlBrNupvxkYUtbhBff4Liv0s6V5+8Zy/+aXUBWg/W68nRQAC4Eej/yz4fwlCkCABM2qAdVsGjFMR/vn+RW3BzP+yiACkBhQJKAJQBKDWUNSvsYSFUT8yyQ+K+hVwbwaoZwiARwQ8QkKU7waY6QDYJ8E/RQhQMvABaYUI/FemAoYjeoMATI83zqgBlRIoAlAEoFYG/Efk/gz4W/l+IqzSH436IQKQIAhIGmC0EDDjATAC7DstJAMIwDuP2QcIwEx3wIq5AaO3yQg+81pQIlBqQBGAIgC19JXx7ye9yG8k6ieyJX8v2m8I8AsC4JKA4zGP7H1k1xIMEwDRPmk6AR6Wvgj4jxAAhAyEtwMkAH1cRj0YVQJepQZEj+kOAE+9thE1oEhAEYAiABX1f0bUPzLJL5L+s9H9YwD8LULgpQPM9+9U/nsqgPT5R8B6p3VkwCQCmSifPXanufQBgT+PEIFRcpCyJQZtjKH7smpAkYAiAEUACvw9ULf+dtjgR5H8idZU+kfg/9AIgHcf5dMAs34AFmA9gV/cZgHvnvw5SwZ2kAS4JAJ8/OWxx2eQmVWwQgWAo3vw/5j3B5bG4evMqgFVF1AEoAjALwd/p9BvSdQvFITINS+T8/ck/4cT+XMC4IH/g+JUQEQAspbAavTPWgU1NQAF85cTA/EaQxVBee1oHQKRb0SEEoDZwrxMxA/dFrSEptQAh8CUGlAEoAhAgX9f1dePRP1etD+a8+f3RdL+QyEHD+VvHxahIMwfACYAB7B7JGC0ADAC+FUkwSMB0GsCUgI7JQ2GRgjAQKX+CPh39DFinHPmf0o1oUhAEYAiAAX+90P16qj/GIOKSv5wzp+CvL8R2UsCEIE/kg4YJgDCW6F/AQKw0zyB8EhA+PPxd2krY+fzykbREAEIjhkK/vD35P9TAZ0VlBYJKAJQBKDAPwX+q6J+ogGDH6TN7wRtRgweSQKAqgEZYyDUDCjjBIiQABTAR4hAeFtAAKC0AlgsSLS+GyAd9SvR+sj3nlQEskWGmutkEYAiAEUACvz7ElMfGq/0t6J/a2Kfl++PgP3B5H+EBGi/Z+oAvM/rVQQABewV5MAjASvSD2gLIQr+ryABKFgjLoaeApCqJ3BAvUhAEYAiAAX+t7/LWvkioI+QgKjiH8n5W7K/Fvmb99NcGsCbC+ARqxUEYAa0V5GFy3dBApDngzsPOMie3QEG8KaK6hz73iF53wDv4Z/F64LITZGAIgBFAIoAzIL/jJ8/0YCvP2G9/l5R3wXohey/ggQgNQCr3AA/kgDsK55jkACgBkWZOQFZBQABU1jWd0YmZ36P1ICoyLFIwC8gAP/VISjwnwT/Gcl/hewP2/s64K8SgD+bmpT/H45i4KUCtG6AFa2A0TyACPw342fvtuz3TXxvx32j3/nPu7hd/j5bCDj982m040T6NxBn/gVkjEBu4O/EPi953jTl8Y29hpYB9ezja32NVQpAgf+HgP+k5J+R/RuN5/zlz5oK8CCsdmBlCqAB4J8hAUgXwCu+Dz8mUAdWdgOE0fEAGVCjfUfuR+ccUEbhGCg+jKyISwkoBaDWLwf/sMrf+Tkj+U85/JHd4+8SgEMFeP++kZ8WyDoDvtQMyAEIHtmjSgAC2lvwvYFqwOUxx+e+J1SBYQLA3ROlyx6P5AMPAKQ+4/x3t2OkzXII7Jzl9dsJ6OMH1RYtsm/g89cqBaAUgG9EAFaC/0rJf1b2R1v5HhYJoHsngEcCEFdA7T0Rfb1WwFXRPXwbWAewTAEQIEw0PhXQPR5BtC9JwMqxydpzR8rHlBJQKkApALW+X/Q/Cv7ZEb4oAUCK/mbb/WACYNxupgCOyFUzIspOBXx+ptK7ncbTACdYbo4KMPI9ivxvkf5hLdmdx2XrAsIvJfKOIviZn295fQXEKYj494QisAPROq8LWK4EVD1AKQClAHxv6b8xoBkGfyX6zxr8ZEx+mhZ5K+1+UfRv3s5TAaT7A7wDf6YGYEkKgBOC942XTXiTA3GyXgCjCkB4P4v0R2sF0gqABGF6UeU/Yb37XqEfNLwJmKXgKQiWCrFECSgC8D0UgCIARQBcUx92fsCgDxCAUcm/kT/UJyP9pwlAQgX4UAIgfo4mA6I99KOy/yjQzxCBEAC/GPhHkn80BCmyQw7JwAgJUKYPViqgUgC1fpD034LbXw3+ka9/C2R/1OI3C/Le/asJAFHOCyAkACL/zIvq+vE58WjzlBC8Yr5zKtQ7udr/t9c3TcaP0gDWz95tagrgfB8SUA3gf9UIYNTRLyryu7Q2HtcRJwLtfK/Ms98q8pRpASsVYKUDTjC3JP9KBXzjVQSgpH/3vvY/HTkiA0ilfzbXj4B+I2w8b1jtnwD/lQRAvk+icS+ATDdAE5HgpdKekwGyq/QvRCAB7sjPe5YAHOmO7QDMGeMfJMIdavvziMBBpJ4kTYC9RgQ4CSCmBGwK6N9uY5MlPRLwBHgxiVKCfnUGFAGo9c2WKf0bxAGp+M9E/yjwZyv+/wLxe65+sfQfkYjQCZCBJa9laAfoNu6VcDzWS890QcyiaJOnAJoSITZFIfCAN7oN/XkH1QDt+ybl8ONzXdH3jxKAjALgfUllhqsqmvkR/06KEkAGEciQgAshOAkIEwVC0C8VoAhAre8l/SNFfzPgD/X3073wLy39KyRgJfhDdsBH0eBNxeBkgJMA5bM1FQAlJ2v1tvOCQK1a3nLTQwlABOLyMbs4/sORv3w/p3rhqAASJLMRf0YFmHJmVNIrZ4rm7J7Y2fmxK0qApgh4JIAE8BPhnQGVCigCUOubRv/eYzzJ/wb+g8Dv5voPIE9L/yD4b5PgfwN+2QJI+VkAnvzfElHopdhLKzYTpIBL+5dI8wSdE5QiMnAClCCDO/BzVyLcZhATpP0vivqhqnYWYT+BUwN+3oVx/k5x+57VhmmmVxgJuBCB43ZSVIDNIwGMUCJ1Aec5QqRbCtf6LkBQXQC/LvpHRvk20QIYSv5sY5qW+wdl/6zhDwL6oU8Aawv0UgDWOODGNvFm2CV7x2609Sw7GGikE+Dy+4GKXuX/s2OAPTaq/Fcr3jWHvUnJ3/JeQFIAXSFlmc6LnfSOivM27TONui+iqYmZkcPwZ1gqgHtelQJQ61OVAIsMevI/JwxLcv2Uq/ZXC/44KAde/urXGcFL9z/W4591AFRJDgd/8TuaBug8QhW3RwVou5IG2J0I3Lr9lo/WInumKIRKgFQfmJIQDv+ZBH/ts3T37yQJ4EpARLh25bqRt7VDXuefvaZYaN0cNyUgUAO6fJxTFEiVCqgUQK2vH/1nAF8D/lHwlyTAc/nzSIAl/yNT+26AL+8/AN8r8vPy/jcHQFEPgI4ChuyAxcbqVZuTAvgICeAy7y7+/y0fPflzlAIwJ/+9g5LI/6fA/wQ/hwOg9QBWJL0rJEAD/k1G+9b5ooAxrwmISADaZmoWBVYqoAhArR8g/bOWv6joLwJ+1Mo309/fnCj7EZAAVQVgQG1J/9H/cMFf/J7N/yMtgM0AnmYRAHQCnQWeLDp+AvdJPqy8OPizJBZp8KdrHn4I/DkJACXakZkMkgSokr8T7d+IuKYEKOlVz8aZnL8jMooCs/4ApQIUAaj1tRYi/Vvyf7bXPwX+SvFfZsrfmQ64WPYqMr4H+Gj0r4I/4WOAEfBvQIQWVczL6nfNMEabD0B0LWpTgU+Zkmf+zIimpSZcCA13vGPtaF7R3zD4Szmc/NoL672a0T9dizDV3L7x9SZIgEXOvSWLDC/vz3D7M30CKhVQBKDW947+CZScb8B+bkSKEoA6+oVDfRwSgMr/G5PyNWMgD/BhqZ/m7X8zkwC14+YOc6G4Wl46yJFBBGT0SOJniABYZEFE7jJNcUadVqvfpUhNqYvIAH+2Ojnb+29F/Srw01Xaf9NaRg8w5qqAFc1b45klyFtkQJoEVSqgCECt7xLxy59B6b/ZamlrSdtfdKKfRQJmcv9bQATMYr4E4KMjgJHoHx0JjIC/t6x+cZkv3gISoIELOY/dNIWBgbtWqyB7/slQAFLAD5BjCiL/CwHgHgwe+B+tlbKqX6YCOBE4o+iQKDokgDQVgLWFSkXAVZycVECpAEUAan2h6N9CcVJIgKYcoJP9Mnl+t9J/AvwjW+DoNqSnP5L1Ufkfqf4f6ZnVNmbNCZAE8BPhY4DbBCHQTGtIa0czivu67L1nz6HVJYRgr1wL5MjhpgqgTGOUlf83FeBICbwp0f/t+wGib9G5IUgAt3Qm51ho6QA1FaCQBIh8FgkoAlDrk6N/urr3UaAA3HrWFSlyI2zQj/Z7Jt+PePBDhXvJaD9DZFoC/F0CoER7aoQ32FeMeEMg4N8UpSC6X3Os28gfbkOEtflFFf0mwRIzMDLgelEjjJG9Vp//zt7vG92LIDkJUF97EPF3QcCQzhOrFVBzBEwPDKpVBKDWJ0f/APBrUZJn/IO0/EHA7xQBetI9XLhH926ACPSt6L8Bv6tfSv+/tRmr0SrfqA3JNpKwEQJgkcYofRGBvgX+XIWQdsZEes5fjfYVEmC93wa+/8tzK+AoyQnS878z0LeAX/s5IiXkKBYkVAD5/k/r4TAVIPwDYNAvFaAIQK2vG/1bKoCrDhhkYCTiRyL27O0e4EftiJ6aYRb5Ka1b2fY/pFfbKgbUQL47z239nWYFGxIAdm4hBGfTgJ+UOfZam58X7Ruyfkt+945HqgWQlGK/d7LL5H/PMOkNjQ/+4WzXvCK063SX+0Lg1loFgUUAan3H6N+Jitqir80gAltAFKIuADT63xSrXgTwI4MiN8I3erUjZ7/sGGBLYm0OCfBAn7TozwJ/AicEihRRJ9tuWiMB2nvUigU50Hfn2sgA/rPIzkkFaKB2qVlwUgDy57cjBbCxKF8DfTl4C7FT18jJ5qgAVirA22fKG6AIQK3vEv0rkZkGUhSoAUT5fL+nArQgYr+QAWHZ6+XwM6pDiyJ67fYgGm7AZ3cCWEPJnjLFrQMb7W0zZ8/dDQk3BH9hEOQRBKJruqIpZNQa6SuHAEkTIvnZXD6355u/nvvhz4d6gJAyzTPBKwDkXzLvz4lA86J/R6K/+D6IkcGWCqARAC+NdDnuQUGgG8wUCSgCUOu10X+U+0QUgOf9A61/WQCGivMm2/PQPv2NYlnfi+TVz14ArknawKFZjZyebWuDzeZtnefQWhDlOau1KKpRrFO8dwOmIM/fxP+yBi+ZZECQgEhF8eYujET/1rnmqnviM0WskXl3wCUVoDyXdiyqILAIQK0vFO1bZMDL80ORPwD+ntQfEYTROoFsTz5iUoSa9Xjgf/sMrar+WV4YgNJnnItquxhXHRxSwdUBkzxwEiLTCgzsSUT1GoEl7zgrCkKkAqD5fzT6z54L2iAirkxsDvDLYV+8hsA1CaqCwCIAtT4v+g+JQdDvPxP5o1J/ttIeLdDLfM+QEyTi12T82R5+CiTYDhIBhAR0wlz8EAKS8doPOxSAKn5JAqCIH+hkUdUB57V7hYBW/h+N/skiPcbxegTEUHutLtFVlADr+FdBYBGAWp8A/m7071RBewqAtgGOpADQyD87CniUDLQo2hegT54UOxjRR7lVpAjLAx9v87fmAxBABKL/AROCQPpvDgkwz3/hbCkl/Jkv0oiAeN2hAiDc/pDo3yM+2rF4iNfwcF7TRteiwO6Qnki1yRQElgpQBKDWB0qxmuWvRRq8lj8piUoigETWHuhnq/OXSvsB6JNR5JQFe9dZjbDiqyxAd1ABsCYCdhobwJNWEhhYXyR/kRLQjsENsPi56VhWo2qQ9r+saPzpTsjG/kYFgFr0755nRmHfKdc/yLBPNkhAUwjBrpyXKwoCSwUoAlDro6J/sbkOR/+kzCKnfCoA8QiI2u42wux2w81dG6xCubxrhgSQEdmPevh7JCAD5jNA38HntVQI5TRtcu78DWiV9jxV5pckgP7XOcJv2+ie3kJnNZjHI2gBtEb/7ij4B8f9Ib5HX5IE7HR3/iR2XCxCN+0QWCpAEYBaCyJ+LWIJKpnh6D9RBBi1ATYQ7FEFIPLk94x5iLCaCC+6jwDfAn4kQrI2UnQmvQfYOwgU6JdHPCz1QVUKDKtj6dlvklRBAjZ22+2c0QgCYQWg5ICx5QD4phCAt0HwvwD/oQzcSIDiTWCRgNHWwIi8VkFgEYBaL47+swQBjv5BSXXEIGiFAuD9TE6vvvk72H4niUBXNsuMHOptkhkCgJCAPSADkY3tKrKgvTfL1teS+k01SgN8AfbafUiB4AgBkBG/zPm/gc9PCpirhMBRAuSsBZMEKK2eL1MBahUBqIWB/0dF/5nCuBnwzz7OjdSCaF8D+kj614rzRuX7kc0PKdgbyePPgP8e/O1MDYHCAW6V/lqRnxndS9A/UwCMIETnGjkkwDoGXgogqvxHwf8J4iz6l4V+/PU04z6LBKiGTqUCFAGo9Xlr9cAfZLMb7QIYBXWUGES++7f3CEb40o2O6O5ON5q7H0kpoOBPFOf6VykAliqAEAEE+D0lgIQi5dWCcNDnRGBjBOFJBnh9gDjno2tPk9f5ACRt3C9M/hzwl/9zM1QAzW1RIwSX926oAERlDlQEoNaHR//IFLfswB9PFZiJ/jOT8lLRflS570T7yMatbXTSlhaJehAiEHUKRERgRgHYARKQJQPW/6ABAmBV3WtFfmQQ1FvbKEsNXFJPGhkgY3KjuLY8BWAzIn3E9Kez9zySZnkC+1EHsCGPVZQATQWggAyUClAEoNYXUwtG257aC75gUx6em1Wq910Sk8znewpAV6J+Pvp1GwD9DkRWlFQAMvL/SgKQjfyjVkHv8yHFYVAzADLbTZVZE00hA7I4kEg4BLLXwCcUniOMQwVAdjcAo4Yvn3dgif04Xo8E9135fMxCQKECRMBfKkARgFrfIPqnQBG4Fc4tMgFCAJ80wFeifpXYvAD0pcf7pmx+HgnQJudppEDdSB0S8Orof7X0nwV/7fNQVQHeGRAUqmpzJRpdB0zdOkjE85FCSC7vj8n1jQyjHYPQWK19WhEf0u63KdF9OhVAfuqrVIAiALW+SJS/Ivqflf6hqF6RcdXbovcxCPjR5DkLVL3I3xvmYpGAqBugDxAAxJv+o8F/JO/vDjpyyCslnSvlgKlbcaCWBjh/FuOJrXNqppvgoQH/AZA7YYO0dvFdKgFRO6BXCFkqQBGAWp8Y/dOLo38ejTdPKkRAnvRqfVI2WlXqXxjhUwCc8me5iZKyiWpRvwX8yHFFiwCzlf8eiGer/dHq/+j9hNK/pQYIr36XWBJgM80KATfl70n73/w9HqTgfI37JAE4o/IHUxakCrBTPC1TpgE2VAVQgLxUgCIAtT4I/KPIPhP9m8DqsX4FmBUl9i6VAsV6yGS2qY+W7Gp+BPS7AvibAfy7E/VHEwMtkEPAP3pPqPT/ChJAAQHQjpcF/kS6i6ImpZ/XFVFuloVqWc3PY8VV83a+iRTASQKQc/XBAZ9i+Z//vgfkJlIBMiph+QIUAaj1Qauhj5ms/CfyCwBJRvtSGlU22izoe+oESgwi0I/y+13ZLHkPtQT/nTCXwQYSAC8y9MAfVQBW5P9HI3/UJwGJkLXjeGOlwknQamu1ZlVorpK3Y8b+hzyfenCORwY+WmHfbvyeJQGN7HoAqxjwQ30BahUB+O3RP1T454xORQrniBJ1ADyKEqkBUhSDEdAfzfGjLXwW6BPp7VuUVC1Q8I/Um4+S/0cJQKbwT3v93rHvZKdWomNNiirQNAthYLjVRrHHhFXERywK9ggcKSRgI1vid4E+6AxAFACvGNBK0cyqAObeWGmAIgC18koBYvWLAhsRbrwTSfkh6AOA74E8ARK0BfpmB4Tz3nris6BBBeCVzn8zUf8I+HfgvJXniIxWiXJ1BhKkVVdBcupZBBHwzmP+Op6vV4CY9pk8I3HWjSDTASoJAABfUznkZyp/91SA9IwAA8RrUmARgIr+Z6N/IXUi0T+RPX0MiXgpitoB4pEFfQ/8mxPtZyJ9JOrvhHkYIAoAAv4UAOmr5f/Ryn+iXO4/6jY5jw0ZsnXKXpjL+FpOXyO5USugADL5una6j93VWvU6A/QeAHsW+Hfjd5kKQGoBrIJA5aNu3vTLUgGKANRaEv7rY38jgG5J8A/lUHqNSU9ky+s59Y3I+zNRPxr9t+T7nyUAHwX+WQKAgr/maz9iPEQK2D9/FfUrF5JNWCGgXLKAlJTjJWtPNvGzamjk3OZ1O1j1LKjzppcKkJ9tBrhLBSgCUNF/NvonuwAQKapDAZAoVym8AvRngV8r5LM2QLkZEtn56Ez6gxYQgJnq/8ii91WFf1m7X/l5bUG0zRWBRrjpUOSxoLUUegoBifob73rehGrVFFKzKSSgJYFem6rZDEUAJgHGNa3WAZzBiCjArGLAIgC1Xi0EBNH4VP4/8Rpme/dHgN/q0x+R9rsB+JmcPwL8H5n/n1EAUBWAEgTA6zjhx4MCMiun61kKQfS5qkSA/28tDWCd20ZhrldktxkkAAH/llABduP/Zc5rrxuA1zzK26oYsAhArU+M/q3I3gOoEUfBqY9nEPjJuM0y7vFAJyv3z1b/owZAHzH5b1YBQKJtj4hu4njwvPko+M8QlW4oWJIYXIxxlMdKIyir2NAD5RHw99IqSDtrMwyW0sZAVQxYBKDW50b/SP4fAX5YCUjo/lrUPwL8kaS/EvBfLf8j4B8pALP2v58R/bcA/JHnyHx5pMqqdu8C7C/gpSgAt8hZ1BWsHLBlVf+n6wC4wZdSC/BhxYC1igD8huifXhz9oxEqNGaX4qE+o8CvbSzdkW/5hkZk2682APA3wosfV4H/iALwkfL/auOfaOKkNbjGeo5GeC57A9+DpgJ055jdEI9/BpoPgUGUEUKwJX8emtdBtqMn0QcXA1YaoAjAb4ziV0f/zdlAvZ89MoDk+NsA8CNDeEZc+dAWJ7T7YbTyfzb/j4L/iv7/V7X+aZ+hNr0uQ5IjsN8HlAIL4OBIlsnml/PBUAqyA41Gxm67aQA5YdEAfjOiN/aEcgYsAlBrIvr31IQlg3+cTZUQMuCA2Uj/Pgr8RPg0vhlZPzI7WgX+EQl4FQEYIQFEvhlPBxQtS1begsi8BSrCHqgA2vwGr4jQG17kHSeTEPHx19o5I4nApHthS35OiPGX6gyodEdUGqAIwO9eyeK/UDo92m1Gi/QQqboZ0QkFBCED/iPAj47hHQF3FOQzqRSLCGRIwKvsf1e1/a2S/+U5sTmkyFO93kDAs5QBWVi4JcCqJ2/Xug60OQamLD+jFCiDvNRZHxS3A1rjmisNUASg1gIl4Ha7QgKsqWiRAuBGq1pb1ETkb+X5mwEg+wTo04IIHwX+ldH/SgKAAv6r+/6j6F8jAFF+3jv2Ggnwzh2NBBDdjXoyxyxlTKSpA8p1HE3shNMH5/9g+0jmOqg0QBGAWi+I/hsQOV02Ci4hGuYkaESaGVmbUTCQwr5VoI9G8BlgzxZPriAAq1IAoxH/TOFftvofIQAZ0myRgOg82p1jZMnlURogSgvAhEDZR8zz2QB1t8VvkEhXGqAIQK3PVAcUB7NM+x9F5OCQ30YAnxLRfgT67rCSiWh99HHDispE9J8lAZmWvmzhXyrfDYA/QgB6QExP0CeDBLwFyk90jLQJhRqIoSqARRYMDtA0QyJXGTDkfVcpMOR/T42sNEARgFqLo3/1Pqv47/2aFVPPCHzulrwNBXwiTOL3In9SCEGnMSOeVT9ngX9lAWAEKqM2wOjfjBT/EeGGUhkCYAE/KWD/5jw2Q2wjKdw6XjthnRQhiVImG0ZzN6A0AECqEdXm7/egM6jSAEUAao1E+oYUyFt3KIgKIqC3Cv1mI38PILoB9DPtdyPgPXMbSgDQz9D6eaQAcEQNsP6WaDz/74HJNkEAomumKUSAKG9wJdsTNUvpSAFY6aiIkgFrT0Cj+2gM8o0EMO9fD+QrDVAEoKL/5H0X9zGjwC8azhOB/8jAmqhH2rP81Kr7aVGkj34fvW808m8A+HvRf5YEIPJ+tuo/Av9Ofo2JFkXKyX8jBMCL/skgA9ZxkVP7iHy/CIQAnJ81kl6JyDJCBrJ1LNm6GdMoqYtWhhVAX2mAIgA/AfxR0EcGolibgMXkrUg/+9rIAf0I8DWZ3yuwWg34H/kdOX7dIQOv7gSYqfpf1f63CxVglgBkfo4+d0kGkImFlFAAdsLrLaDPILsPgKBPgQJAFhE4Xk83/gZ9rlpFAH4M+M8Mzrnk/YMOgOZFn6y4b9S3PirwszasPRHx9wnQH71vxd9kQMdTAiLgj4hABuwzRX8r2//QFsC+4rpJEID3r4dznkckwPuMd8rPWRhqJxRGQx6JJoo7g7TjRpRrB6xVBKAi/+TmZBb/WbIfu099jsFRvRlrVI/F74bk2Gms6n7ktleSB28zHQF/CgCfkmA+U/SHyP9EmPvfKwgAcj1ZqstDeb/nIJ0sASCAAEgisCc+A4QIyH3Auw6QIkByIvewHVCxRa4RwUUAfhX4t+Qmlpb/xWsiug/pmTGnsQA/A/4URP+d5nrsR39eQRKQz7cBgLTSCni0GC3r+z/a/z9CAEZ9AjyAfggiEM0GsM7NHqgAGgHYDXUA6RyAPoNzAxBEoCX3oeaoAFpQIm+fbgesVQTgp0T+WTBuI4SDRwCDklzU5kdJ8O+ESf0jkXYUdb+KKMxG/hkV4KNJANGY+Y8VZfKfrQ6AM030cAAaieop8Tgp+/P/v5M+Ule+L3n+e+qMBf4jA5jg98+IAGL1i57Hly4A2ZacAPcC/SIAPxb80QsKAjvE7UuR/zKR6gjwWxuRFjXJ2/uLAT/796OkYFZlQaL/FQTg1dE/GdEjkT9XXvrvy//5mPwsreick41NEAFpCaw5C3r/H00FWKmBjDKCbUZ32/AGAD86GjiTrql2wCIAvw78Z+5v1kUcygCTb3cA+OXfEY0V9o2CPUICVigHo68tG/2vVgFeGf1bx7MFwNEMYJ6J8hFZnv8vCf6bogAgrbeRJwAnAm9kpwNeRQjUvUSpG9LmgpigHeTpp8G+6gCKAHx38B/JN6v/G8D2rH+/Fe1ngd8DfyK9cOgV8wja5Gcz0lo2OjOBFhGAleSAXkgAolHA5Pwv1FUPyZfLoj8L/K3xu/RCFQDt5KBZEmCohZcphdp+wwD56QZ47FFdCUSqDqAIwPdd+763yR766XoBLv8bLoCrI3/tdXfg77Tq/hGpPxvhr1BgRlWBzyQAs8AfPWcGZKL8PzoK2Prfj+CzRMmAJB0IAdCUAAquE48AcCLwCiXAvV6lu6hTVNyCQT+k7FE8UMn6AdQqAvAto/6Z6PLyXfP/50U2Vh1AEvy9SB0FfERF8AyDEGCdJVKjqZhZ8F9NACgJ/BliQDSe+0ccAIn0IsANeG0PBfxRFcBTD0YIgNcy5xESazYD+jVqLWxex2ImgKngaHVH3pS/8gEoAvDrov5DJgvB3wJ2ADyeLByotp0Bzh78HZLzH5H5V6omr1YFVkX/CAGgAJSzYE+0RvZfUQOAtAJa//sRgG4E/jtdq/0f7LsH/hthfvkEHJMM+KNKgKV6zF002H7z8kLAqgMoAvDlon5ldC4M/uLv3el/xIYALWTZHYhioos8Mwq4Oc/zGaHDylqB0fcS+cD3BBEYrRWInt8Ckh58LlYaQKoAyOu1wD/yB0DA/3wdvBWxkV4HgBQCkqPceKkAKyWQUQPIIALIZ5W9PjIgXjJ/EYCfF/XPgD/5lr6qUsBzci8gAjNMHwH/Dm4sr3z9ryACsyQGIQHZdECGHKyO/j0FgJ8bmgzv+eFrAPdIRN4c8Pn/lNH/TlgKADHX8VIBmaLAGTWgBwRu5Hp5ZS6/yEIRgO8X9f+biglbcWqbpXr/GflbxYBgKmE1OfBAPxwa8qpD+SIysOp263V+FAmgF4G/dS5n6gC2IJK1lADUBOmh/M6/b4IINMI6AUZUgJGuALQgMOOWGHYMiH0mAucm/YBXTQasVQTgy0b9nEBYXvwg+LskQKoBxFIDtysxpxCgPbydsJZCb8rXDAHoix/3alUg+zozaQBaAPYzVf8ICdCUgB6QAHJeu/beETKwGWRgEwqAjP4jBSDbEkhkFwRm0wFZQuAVTdoH8z3x/r+gx7L/lgOB5F5VnQBFAH521B+AQRb8oToAcCb4yEAV5KK1on4CwB9pJ1xFCGZkzlfeH0myaEcAqgiggB9J71kCQM55idYCEPhZeJ7+G9k1AJuiAFg1ABvlh+d4JA1NB7w5SgDaGTB8XWTTjcm26SoELALwNcHfivoN4F8J/m7bmVQDFtUDzA73QZn+q6L6PvG3IxH9ylTGSEtgJqLPRv19wWeHmAFtgjhuCRCVLYIeCdgMIpDJ/0cqQESkkTkNmuz/RtgQoZ3wNs8VKtmswlZAXgTgY1dS8g/lfhD4R8E/9OSe7Arokxcl6iBIpLsIrhjm8gqysMruefRYrFIC0PtXEgCZ/tGm6WkkAPUF8F7/wyEBm/Jd5v9RH4DNIDfRtYSMct4DNcAyDbLUAKJ1Lo9FEIoAVNQvivxGov4sCYjUgBEDQAuwo/y9B/xexD8iQ2b+ZmX0v1IlWEUAMuA/Eun3xOtAwb8DKoBHepEWN8vTXxv2Y+X8HwHweykAtBiQCPNsyCoBmamC0bkQKS+1igD8ePB3o36nwn+ECEyPwBXDOkYjdxT4o40tI++vAv9VxOIzwZ8oXww4ow4g3xvlLYAth7hIBdDOeSsdgNQ1IMDPnf92MPrfKE9iPAJADmhHSoCVBpgxevJ8BJD5AiseU6sIwOeAP9me2Kuj/lEFIEoBoO5zkWVvljiMAmuGHPSBx7xaAcgShSwxQXrhZyJ85PnQ142APylEgHvsS8COomV5vxb9S7DXTH+Q6H8j3cyIyE8DIJ+zN/gnmhEQKQJWSgA9J77KdVSrCMBrwV/5Ww38V46RHQH/KCUwC/4ZEiA3hSwZGI3oVygBr2wTXBn9I+AffW/J58h+ptpMifP7rigAfO1OJK2pAJHNr4z+H8bPmeg/SgFk0gAjSoA1HEirB0C7AiLb6c8iy0UyigB8apR2Iw4fEPVnwP/2vCI90RaBfyPM+382cujJ37+bGjCjAGRVAAvwZ/P9mSmQRFiLqJYS4GqA9tl5PgHdAH4t+ke+MuCfSQNYxwGpCciOEh6pCxhV7T40qKtWwCIAq6J/taI/EfXPOv2NfFefb6AjYAT85UaQmSA4Auaro/+vuHEgrzUD1gjQrwL/LAmw5kE0oQZYSkDG7EYSAYQANIpNgNBCwAYeV9QtcAURGJ0s+eWJQa0iAEvAP/F7ys53ERkwn4cVMKBOfYjsj6QEZqLaV/yeJQVfHfw10GiDCgHyc1ukBHiPkWC5K+SgO0QgQwZGo/6sAoB4eEQqAJFfDxClBaxCQtQbwHqt/YtfR7WKAKwF/2iIz2Ckf7lNjBKe+j6pAGgb/0hObgTQslHody0IzL4er8VynwD5BjymL3w/neLUlJYG4OffLl73iCqQyffPKgARCYiKAskBdY0EIIQgMzUSJQa1igD8evCHbmPP2UTQvio1QKAnAGrb+5Gg/1NJQJv8/Eak+gjwkYhuhYWyVzCKFAVyMrAFRAAFfet2C/SRFsCoDgBNBaBkZjUJQM/Nj76eqiiwCMCHbMhZ8IelfVFDcPnOkVojB+Ix8P8WqoIH/FE1/2gEsAroV5CAj9642uD/WE2iWgT4mVkY8JuPi7OaoQhoRX472dME34QCYJGA5oD+niAAmSLAkVTAKAmILIFnhgdFr7FWEYBvFf2vBH8EiMOIAHjMTIohikBHCvkyUeMK4P+MyH9k8t1qUpF9nzJa2sV5nVUmbmNdHdCXhFc9rxxywNUArUtgM8hAZ0RASwnsdPX+1xSAXSEECPBbY4GzKsAMCUCLBD3yEAF/X3RN1SoC8C3Bf1ie59G7pgR46gDpFf5wWsKpB+gLQCsL/iNg/+rof2bzagueY+Y1ajUbXoTvHvPjccjgph5ce5eRsMo52ZT7LOWpGUqA1iq4i0hfGzPcHPDfJyP/mTQAOdG1l6/fQSJgFQNm2gK/6ryAWkUAxtXKBPi/tH0vUBG8TcSdERBsNCPjamcj/dl89grgH1U3JEC9nNMOAIZHhDsjk5oM34D3rSkJmhOlVAIuj9PUCGVuPAFkoAvAJqEIaJ0uFvhr3zX14ZUEwAPbTDrAIwLZQUsrp0TWKgLwJaL/leCfkf1HiIVKBhz73+xG88pofyUReJUKEN2/Otr3jtFQSyUI+hbgNy+SB68/VGVrCiG4qRVCubI6Fiwb4Ua6tbBnUWyB/0j0PzLe27sWIjVgT5CBlUODrH2hhgcVAfi6kf4g+MMV+DTWw5/O6SMzAM6NeXBS4EcD/meAPwL8fcE5R4Ov3fw7hWhqj5Hnkwb4lhqgRevNiv7Z4zrrbGmChJzRfmd/s2lkgNfHkj1LwLIRluOGW0AEmhH5NyP638ifcogofiNKwKgagAA/kW8VjJpPZQKHWkUAXh79o387Je2zzc2r/J8t+Lttzka0pBGBHhAB1IZ25uevHvmPRPtt4P8OPVaAsdXPz89HCZ6q/P/nto3LCQkyc3n4gdqNkwESXv7vD+HXnTZk63iMJBOy7mEnvWbAiso9IiBJQFOIQHOIx0gh4EhRIEoEshF/ZlhQxi+iAL8IwKeCv5szZxuN9Tg0mteK/dCBPpnoX1Mw0Ci/JZj5LKh/pBKwggBko32IKLyizc55/V0AfyO9juQC+ICi0AIy0h214H8h/rZ18Vpuj+N+GJzYMiIggd+aYmlF5JsC+t0hCh7Yj7QCop9vdC3OFAhmBgWhhYHLCG6tIgArF7SRsYjdegwM/gM/I6APb8hO1b9HEGaj+RECMFoAuJIAZKN99/EfAPZkRPuXnwUwcxKgjnFWyEGU01fftzy/Dpn/7//f9/32f9/vZwT8EpWz258Dro7fd0YEtPHDHli/0V3CRwhAFvRHSAB6zEfrAmbVgK80MbBWEYDpDdeb9JeJ3NvgfYgKAIN/AHrnRq/JqaMS5CtIwUcRgAb+H3mO9QXHYvbx1jCdzoCWBJjJc1wtVhV/a10j3vXoKgR/zr2NRfp///9xTlpK3MHN+4VQHERX8wroAIBHj9kSBIAmFYBXkIBVRCBSG8j4350q918E4ItH/+ke/AjgWTFVhhxkVIBww2BFVJak2AISMDtzfoQUrCIA0SbjeerfnsOphkfzts0DSEeNaYnnlKCvkdtmgP7lnPvzHM1QEbJkwLIgPgkoB+Jnhf7pccFBnp+3JxFg93dhod0plvZn7xsF/9E6gBVKQIYIoGOCkUr/AvwiAF+cIfjFeu6FfAYu4EawYmMYUTtulrDHa+4Tm80MAUDIAPL7SMQfgr/o4LBAtSnvQZXSM9GyQwq813Mr8BOv51aFL8+/gzzI2zQSGaXJnq+fE5Ij93953/1ftex2APtNqTjSA89on322nf6lCM5Uwk5+q2DUojfyRTRXBNiA4xud+6NdAqMpgKz0/1IScOzBRTQ8jAOdPF8Jsi87+DPRvyaBUi6Hb0X/6AaRVR+QzxrKuwv5dAToV6gBryQBlhJinEq9AeeRBYgteW5C6w9wuu9PAW7v3G7s941F/X9/P/0BtOJVqwWQKQbq8XCc/v7+zt7fXzA/Hn4yhzO65497nrfnU/N/oewzUUS/MtKfUfqy5l0Zgj76NaIWIMWJmqIwEhBYe96XW5+Nv6UA2AclU4CXBf8VJCAd9bMiQK1n+vk9YM5RxIEQgxEyMEoCtNtlJO8V7KFk0SIOVsqlJaM6NGLiUXt3SL8E/E2CuiAF4fkpUg1WIaqM5HmF//M8OQhEP0C+H3+3nYB/kpJ3NeLPbby4j5ih0ZMQBJ0CXQF8SyGgRVH/iAKQud4jv/7syF/k8SNR/xCw1yoFYFQBQDZ0VPoPL/qAAKwgAdb7coFa2KqqmwN7DGIB2oHNZlYFmI38w/SGct50J4q+fe4acXDIhHr8wKilU1x/ELlRXqJ6DviMRDTtXJbXh4j40/UAggCc5+jl/DnSBVwV6Ie8f953K/5j8n93FAGN0DeQAIyC/qvqfRAVgADgR0gB2i5ItNZSuBSAUgCGwH+ImChkwNowpJnKK9uEEEDpgBpAihIQ/X22FXAmJTAD+h35PIQFbnfUHfX84rn0yBUPIaVAMWBPEEFVsmf/YzPO4025X3vsKfd7I66tDa/zQ8Ck/lMl4JL/frYKHorAzl5fP+7bT4XgVBa4YyDvDgBULtRJkF4I/KtVgEiZyxKBzOvIFvLWKgLwegHCiJZkpBRFClJVWVU4ZIIQuBGYoCcirmb8jEbOkRFJtPGMkIDMbU1RodHImQ6AsT6nprXQAecXdF6Kljb5vz1lzzte2yGLmx7271o7i+q3zDmr+QYgQNWPxQpRt+O99+O1nkTgr+x/vMenl337351/6yOEUZDmcLkzcqA5BlokAAH1jwL/kXqACPyjaD2bKoAi9QSRqVUEYAngzxAFK8qaAf9stbD1njpIAkLgZ+OFs86ASPSxKgWAbBDdAKIWRNXdKqbzUkRKsZx7/kVpMG2mA4uA/6H69s+t94ls1/a9y9dRRc9/3/jvjARo5+X2799uUgWIWmQ1JsbVgM5MgE7J/zKl7yABb3/ufrzjPrc1fr+TkYDuXQPss/VIgFQFOr3W6CurAKCju7PFvVkSUJF/EYDPXQn5fyT696R/dVNdSARQBWB0QE035OjutJ9FAz9WOgCOFPw1R3puxmO1orbmgDuvfI827cgyVyMDXSEBz+dioK+eB0eB3Pl+vPN1O3+n/1X+P//+/LvjsVtwnhMjB+r1qNgM3wjhO8E5iQAjAO+va2ektB2R/Nmyux9kYBPnLS9w7UYHQncIsnabVieAEgOitc6f6LU/kxIgAPg7YUN/PswIqFoBSwFYGf1rkbkS0EEkYKOxgsCMjBzVAHQkepCRM+AVMFIXsFoByDj0NdJb2C65fQPMok391hLHQJmS7+VS4OaAvxp9czAXJGAjURDMUwRMCdg4YeDnuUIUPOXEe1/8/HjK++8R/zu4nyTkSAU8P4MT8I/zej9TAey9kCARl66X43Fa/UtXziUE7Psg2K9oB6TktYmQAEoCPzoXoCr/iwB8KWKARP+eCvAESYcEIPPDiew0QLQJIIV8buRPNrtBL9JMLn9EAfCe6/K+ncI8DkydFDObA/g35dwwxzwb/hHIxu2BjfeYSN16vo6DfDTF1pd4hM8AnpOAM/p/pgrE32jkwqujIQNwZaX5fgD1zn5vZ87/f5zqbzrgnQQ8Tt4ljv3ZFdAt4qFYCFujgb2RwR7wd1on/yNdTiuVgEgRyKiABfRFAF4j90yoAZmKaujLIAEbjaUBQinZif6bF9lHoD7RqtkHNh1ks4iqtzsgkcqRtLeWOAnknAjIVIBGCqzvPDq9H5KLdN0EcF2OJeuB986DZ0EdJ3snERAqRWPjeiUJ2I6/+asGMNXgqQTwmgF+7jMSwCvyW3CsL6B/tvOd0f9x+/l6d/Z+z7oATgI6HxrAFAH+eVrA7xHViAT0BcCfIQBovc6oSpcZAPRlgL/SAKUAZA1zkOg/UgOyhGGjfBFg5AsPFQQ6UwJXXLAzEwOz6gEZJOfW4qiA+wXMxe+b+Dv1cdbx0j7bMwIXRECL9kkhBOffauDVHFK0GerAKeHL6P/8eWN1Apt8LCcKTGHYjte9sRz983NhE/y68VovKYAzv38APCcY2gf8lwSw1sDtVA3EDIFbN4zRdUEGmCMktC36Hl37qIV3tlgXUQdeDfzRe2tUikIRgAEygLb8IWBODnB70T/aYoUoACMtfJoJy+Vu5qL2ahKQ3UDM3L4cFiPej2WKIwF9O0GLP4auZjibIffy5ydgwJKqxmj1FgrwN/QcN0gtLyhsPN8vztNn1H+mBFjR4MbUg43VBJwth1xduLxf7vUvZOUTuLcT/I/b3o7b347Pd1fI7Bs7NjvraHkeh+M17RK0gYixO6BvdQ+MfJfHr2cUvhcqdKiRz6dE/KUC/EICsMr8ZyD6nzECQtMBCPhHjFjdJAw/AFRRWLHZZDYkl6gwGd0EQxD8mwR9AfyISuORAK4EdN6+xz9rTriY570GMIjSdSsa1Ab9iMc9bzsfewC9TAmcCsCDWI0AVwo4+DM14OQ4N2BhB/E98n9jBOTteK439hrfDBWLpz42pii0AFA7SxdEhlgtIANZEqCBfgb8R0dQv2rC56uCOLTduUjAL1cAUpbATJpEo39UIUDAH00DWO8rdVE44N81RWHBBYRMLhsB/4gUWOB/GstzgN84MeBV86zY7VQHvM6NmzTtpFrOVjctsu+AxOzWPFh1AifQK4N7bsT3kNFlF8FJBLaTCDCS0ARJuNQDnJ+N0p7Jbah39n/eGJG4gP9JZt5fxukdcPz9OyF5O7oFNl4LwCYTvt/HicEujllXvAS845IlCChhIIMkdEf9G70uZ8Z+E3iNlxJQBOBLkIGWeKwX/RPh+f+NxtMA0WvuyO0B+GubS0YeRaxCsyqARyCi4xqB/xklPvPUDOg2WeUulAIzBSBkZ0kC+gGsMu99coddArVzjJocq5u5Hqx2QjEPgDiZOAoBpXsgB/vtKMbj9zWWNpCfTxfyzc6i9p2u0n/j4C8j9z9P+d+fb/9H//wDOvMP2OhqEdz/5xv0JAE3wHLO+RFlICIDSOTfAuAftQtG1IBRZQD53Ah8z8MqQJGAH0gAVsj/8sLhlcuUbNUT7mpROiDTEmipANqFgbYAeuDfBkkAurmMRCXm6zcsZ5vWlsf8/2VE/wQw9rebogI0IZFz+bwFqgvv4z+lZj605ilZs+j9BhaADwAlj79UCJogAkIQ+N/7Zr35Z8vgQxCBMy2wsc/nMkCIdaTw/D9vA9wNoqUpV2/s7y9FfAz5N0Ym9gBEPFWmL/rcPQWAKHbuzPheoBE78vOXie4zJKDW71QASANTr/iPjRIlRya9tf/RfDcAUd4OOBP9o+B/IwFOQduo9DgSMXjg7/kj8HG5mxLNy++beOzGAGwLjtNF9uekiUXsHPC7IAibAL6eUXmUz685ik1TwK4LheD87M7XS4qvwMYUgY0TAe4Z8P65sL+9EMrT/lchAG/sGnsTZOWiIhxKP28V3JhZUBdtldp7J04OpHIDRKgQyUreb/2MHOPRa9Mj4ysd/VC1A6lLqnqAIgBmtKxGZVbxnzLoBfb4HnAD3ChnB5xmwdJTHgR/Pls9C/wrcpJZCZFH//w9SWlfy+9vEvgNYnCbmKfk2psWRTKw4mRqP4+NAvy392ykBVBw6c7ra97fGoWE53vfjtsu5/NJBNjnzxUVWZzYGcnQxvG+0b0+4f1xD/Y3D/4+WdR/KhWd3Xx6KpBQW26fqeKeaXkGWKC1AuyjY9Rp3CUwo8KNmnTNBg9FAooAXA/iCpIAFP9F0T+Xm0ckf6QOICIAmV7glgT/4ZzbJCmITH3U2xJFnE+jG9nbft6uEIR3IHvQ3fu+WYRLq3QXPvdNKAOmxJvM93tycTceA1d1c/A+Jiby9ID87LWiQJ6i6YcyQPSvYp/onmI5iUI/cvcPBvxcRXm2ER6P7fSvdXATSlhn7a4agKOTMqOizBWA85EkYJYIfETkXySgFAAIIBAgRZzVtOeaifazdQBEmOXn5QJQpP8U+IshLJlNbrReIJRMtfSM4kOvVfRfwJ9En7tCAiTwXzoCtNy/Bv4HCD0jf1bsd4LbJsCPkrn+HmywFoCFqYCIGMiuAi7xy3P97CrgjyfFSe84TrvWycA+l/eCPw7oJ/g/SB9eszPAJ1kTIFIE4tS6kAT5OaFKwCzoZ+7L7JFZ5a0P/D9uxpUBfgnURQKKAEyTgdv9QfGfpQBwJWHFWGCvDoDIdwGL+v2tIsII/F8h50WbSE9G+cSK+y7Hxmjnu4H/ARo38D/UgVs6gBe1KYrSBSAY+J/fn4V/zNzn8rmC4G+5siHHSDPg2RViwAvm3OuJEYHOiQA/Dqwe4JI6YaoBn9yntedxcsXBvjEloLNj1hnAb0x1aazmgANN1JJpkSiLaL1CCZjdD/uCa3T8RTB7ZoQEnIZR3E5akgJjemmRgJ9IAFbJ/4nnQgv7UFUAqQMgwmoAkLy/Ff2Hsj+7QDJdBiObSkQITOlfqewnsr0aeA3AKUk/GGA8FIKwMeCXLYBN+byf0f8hVZ+f4ZnvPyv9NwG6TaQCEP/1aCY7OoRnp2sFfTQO1iMCEtiJKyUn2LPJgyQlflLy8OxzleD/92d2nm7K/ZfXz8mAmBXQFBLXDaCJUgS0QCVYQRpmvAKypMCN9g17a+hn7vQlSQHpds5FAn6ZApCW/0XkTwaIu9E/KZ0ASSVgI9wLAGXZFnhKIhA5k2WKel4V4WTAX0adF3mfe9tz8D/uf0gSwAvZGLDcFBoF/E/Z/wSaS++7FvmLHH80kc2S65HNb2fvoxtkQJPnkS8rPSAJwsVpkHfdPB6PdlTyn8WFxAyCNk5WDs+BnQE9J1XEjh9/X5s4/08/gGdNgKKcdSPabwHwZ6+TzH2jPfIrRgq7r8uK8IVdZ5oESFLFyVvyM/jVJOA3OwF6kX+q8E+CgDEgZtYWOH3BAmY/0SQzerEKMKP+QOqMlvfnIM6lfQn+R+/6Q6YGrOPT/iX2tZy/jLB3Bv6uIQ8o/Y+qKhxMSYDkBqQGLDUgKhpsZ4qAKSq3NMD52piHwLPK/6jH6ELu71KxOf6wi2PPo/bzRb0p5/zz/QhpuSnthNr7Dx02J1UC1Bo4ug3dO3vyGrWA23vPGffDLgOBIgG/gACskP+VFr9I9ifye/RHI/4ZMyAkh95EH7Mn/aOVuC8/xAD4Z/L+srr/IhFrkf8B/mYaQCg+nHTJnP/O7rvVDUTmQUqkzwF3D8hAM+T+zSEB5+N3T+UKzmuKUgVKOoB/PmfEL4/tGfFvvP1v/98TPDQCINSCXXs+fs4wd8bLuQhOzezO9YnY986oBDNkILoGG7IP8I6O4H1HpGCELMyoIb+SBPxEBQCW/8VQEqLBwj/K5/63xH0eCXFPZsfAiICoP2sA9Mo0QCRfonn/JvL+HCA08H844L8J8G9K5N+Y7L9LyV/2v4MSvyf7e5G4Bkw8ApYRvyQF3vltKQXNSCfI49pEO6FGEHjRHs/bNxHlb85XV97rudk/VYKDBHjAzHPQ1hAiRBXIkIOsSoA8l/datffURPCE+nGgCoAF/illACgWLBLwnQlAIvpvCx4Dg/tk5T9SA5BOA4h0gBX9WwqABLbIr/zDpf+g5U+29WnS/4Pdr4G/RgJOwJCDf86qfa3H/2x9e0uqIFGO3VICoo2cA7KmAJCiBpCIoqU5j0cKyPjZNRsSRkPnbZII7DxVQHqHBwd++R7ktMaoGDajtCCAOKMKoNE1QgQauk8q5mmIeuCBvQf+Q8qALBYsEvDzFQA0+s94/kfPkYn+t8XyPyFgbBQyhcBPejFUGrBH/1a+Xyn9W8fYyvsLwx9Z9McBX/v57xcD/sbLxM9olYHDs9KfF5ZJMDNAO5qz/uxld8A/u9l5JICfe2/GuS5JwG6cy7sivZsgqhQPPiV6ftupBLwrLXy4E90LN2VrIP/axPsjJxqVn2sUSUee/aOqQPY+D/SRwVqeuuj9TeZ/o+A/pQwUCfiGBGBF9C+iRk4EEAWAPjj6Hy4CFOAfFf6RIf+bKYHkMZgZF9odef8SPPLXq+T9La//TQP/P58dJwJNKADSme6pshjOfjyS7UHEz0Fe3reLv9+BNAAZxxutBXgzrgkP3HeQTGsb/e21el0EbCDRc+YA/Wv15HL/bYKh9cWcA29AwVUAQ/6PTHuQ9ACaDshI6RnQV6+xgIS7161o4bz97rye1coABaZCv2b9JAUAiv4nPf+z43+3idtgAsA3IYPEeIV/8rX3+9PD7NcbO7zymPKo79L+J1zntM9Z6/N/cPB/B/73NMAhMT8U+f8y+Y+TLBH186g1IjzdIQFeP772OwWRKlILwF//g7BagDeFMDRHGZBphS3akA1F4CQB5zXAAV/K/5YCYLUGRnJ8dB2sIgLIyG4U+FHnQFR9c//eSNu5e5YgBQSQA6ibwOkQCIsbf6IK8K0IwMLcf3Mimo+M/hEyEMn/Fiv2rH89BeDyHoO82YfVAWiqjUJsNLC38sFWod+FCPDon8v/p4x/5v7ZIJ/b8QD6+nfS7Wq1+7XHRj4AVprBqwXQCgD5egMIt5YyIANcUyqXJAJsxsDOGNml6NO7FnkRYECILy2xvNXNILszRAAtpFsB9jd1LZiw2ZIpgZHrPSICnhqwcqbAjyUBP0UBmIr+AdlfjcbFnPlRkEdmAiApjb+Ab9hgEsXtfpdNT1MVBiYBfkT0T1r0zzd+p/J/A8B/Y17x5zCbS/7/JFoyt+9M7LOc9XaDBBBhjnyeLwDUxuWQAP48u3O+WyqARRj4/3qjuw02eamN989YpgX4ecAshy0F4LQH5sdUu161VMvls+TXIdnWwSM1AgjQI2DfIyAHIv4WRfgfSASQQMhyNC0S8J0IwAdF/7Dj3wKHP2QUsDcIqGsXi5NPs6r/zecSaYCPcvtDo39Kfv6bkQa4yP8KEThNgJ4DbFjfHwf6xgCcR/2RRa/lxY9E/BEBsMhHphZA9s4j1x8K/vJ9y9oBrTZAIwFNSwmQXYugpTsuo4LpXzuged7zVjiDHHuDsTKDfdBoP3oeVK6Pho+1xH77KiIQfbeUgmkSUArA94j+PQKBTvxb2e63OaCP1gCgkVyfiP41ebR/wjHtQfRPTrTGo39roI+nAmwsd8zd5HjP/wk+XEr3ivyygC4Jwe78vUY0IvMYCRC7A45W++Jom21X9h5OAqxzvo8oAbxA0Hmf52wAXihIjAS4TpqKFW24JQWfT2bELyr5hyoi+WnHZgRjbfL6hgHXqBdA1ICIBMB70E9SAb4FARiM/lsA/MggHyuNkC3gGzUBimoAtBNbuzA00qBG/+AG9lWif/V3UfGvmv4Ilz9ZBPgkZnwGwAkMIvInuprZRKY9FAA8EukTxa2CCPBYudEdIAFw5bjyuh/Hzw/2+6YoFJvx96rywUiAdi1z8JczASTB35i18K4oAV6rGTfMQq6VTAQ/mtu3ov0WgL40/smqAJ7lcGQoNlJfhKoDWltgak/7KSTguysAw8QgG/0HUf8ICdgSKsCM1NYD2V/OMfA/yDgVMEsOkNz/jcRx4x9A+t8On/+z3U977EOA/6aAf1eIAFcE9gC8zFn15Ff/e7UBiAIgzwsNTCwSsE9cYxz8+e/8Oz+Ou0hNRO/5cr38bcX4HyNoBhEw0wSyJuAgAbIWQJX9RQthW0wCZmR+LYoO/U0couAScYAQRh4LaNCRKRS8FQnygUW/rT3wyxOArxD9g5L/Bn6NpABmCICX+7f6/a1UwKvHlaLP66VF1F7/E8y5EiD6/DcF+D3wv/3sANQOfGlKgCX9E2H5f6SDwzt2KPgjG353lAAu/8tq/O4AyO05mQrQeSpAKwaUv7P8/9/XckTzT4JwADtFKsAgSKMkYCby18CcwL0PIQDZvboHUT+0pwizsagGAB149itSAd9ZAXh59L/A3AepBYi6AFZH/2rkr0T6X+Mg/zNoagahk3LxzRSGGwIZZEzm+k+C0BgJOKNKbk6D9PFn8vwjdQJEc1MBo802SwK0wr2H8phNAP+D7nMINiWKbgEJgMgs3d0Bdxb1P0mIqAl4JwHS44EcFYASEe40uHsReXDt3H5WOpxoIRGIapQyrXwe8KOKwPN5jXTAjyUBX5oAfHb0z8BjBugj0EEVACLcWe/y+RntTV7kL1uaRmS5ZaROuDR6kuNmkCqe038YQ4CehX4c/Jnpj9fiF7X3ISoA2uPvgX/mWGSkziwJ+D8H+LuQ/PnPcnAPTwFsQZTd+bHhBYFkzyiQ7+ss5uvMF0AWBnY2LIg8FeD9NSiP+zDubIzMJhD8IwKApAOQ63wU/NUWTGXPQhUBmd78FZ0A31UBGCUGUSuZlPuJcrl+c1zsoAJAlCgABOR/CgjG7TNxiMBHXCAtmGiI1GvcCNhpGkPGtD8G/iTB35D8CQD87gB/d6R/zQIYBf8OyvPIMbVaAj2TIw/0uwD6h1ACLhP7yB9h240NXzr7XaJ9uvoCXI5f/+f3uxFjAZScYidIQEa1mw2evEjdJALO/hf9nN2bUYle/gy9d6cdejTV8CNVgC9LAF4U/ZMX+Sdy/Sa4ACpAVgHwLqqwcIYPO3Jy+CEZEAz7w9jx+fqD1r9brQLvBBC/m1+8GBAAfwuE90TUj9QAyI0P8f5H5i40gAR0uo/RlcY40YTDrqQD5M8PQwmQRMCbSdHJn5gnh0I9wf6Q9btBAuQY4iO4v6kAkA/A4R64Kr/WgL2zBcDveZsQxTVSoyTASudQAPwWGbA8FyASwPa0jHPgtycB31EBmIn+3QvgZPgAEfCi/C15v0cCLBYPe/MfkublfRkDUSClBDQ8GSEI5t+cDodHpb/6uvhgGOVYXmx8PcLGP5uN7fBBFLeT37ef+X1W9s+0TFnnFd8MdwP8NRIQWR4T3Yv/HgrR4OkZq3hVld0dJYsX/skWwPfi0L+fpSQCrL9f1gm0I7rXQOOWCjjPoQXgb1bZB2lPdy909jyivFEask93A5g14G/keEBoewcrDIQmCiqdEUPtgUUAPo8MINF/KIEhESYI+kgnwKgCYFXRyhYxxNIY+Vy+kj+A+5kYVrBe+mUTwM+d/aLIfye/2v/Nkfw78DtSDzAC/p7k7JEALW++G0RCAv9OevGfLAKUBYEy+t+U81n7TJ75errn/58/n8DP1IBLS+BBAs8MAP+ZGwV5x+DVKkC4Jw4CP0IGZlSAbhABj/g2iv0xEBJAFMw0CdTSH6MCfEkC4Fwcs9F/S6YAkFz+llAHIhVgpABQnpByU25KBN8CZcRMAXxGLcD7/3Z6l29fggRsSjHnpa3vfK5jI98c8CdH9o/y+yNpAC3vH22oQx/xBAnw0lQywteUAPl9F0rAg+5dASTA3ANfUq69G/CzaP/BzwsW5b/ffQ4a2g5w0eohvM8x2t+GiTBY9DwK/NmWaVKur8v1rBEABtbdAfv03qGQgDAlMKpwfjcS8FPaANHonzxiYFT9IwCvATrqCYCmALQT0mOpZKU4QCbvEoGAJS85vuf/cnKaECFw0h688r8BwE/KZmRN8svm/73NLsr7rzgGPVCXLBJAggjIIj8ylAtN+uffNRVAmhahcz+eoH2A/ybASG7iF08Abuxz3HdRCdBUwOI9LxP4jAB/NJjMKp6+Xb8AYT0J1kkEMm20oTeFIAHROX62f/bf0BXw5QjA4hxZ1lufJqP9LAmwCIYnrSEnJFrBOyLjWbUAywdqsALGiMTdXqtUAUjUCljvM8j1S+BHIvk3APQ9178o729+xo/Hw7zv7e0N9ZXXSICWs9XSAp6FsZT7HwbwPxwpWCVvzA6YRPqAjsj/xPLNAJWNtQN2i9RkUwGOkVAW9LNTTjO1TbAKALQLoqSzCyLAVYEI7DeEDAgF01IDbnUBPz0V8J0UADctMBr9LxrsowE/UgeQSQGQwl6bwYa1oq0M+LtqwEd6A7ARx80oArTIG4khLqGykgT/Tnoh35sA/YwHwKqBPxRtQEEeOiIBXYn8tbSA9AzYFVAn8msCOCngmz7/H94+8RfMD1CRkb+Xtrgcd6YCaPUIO/ljfF8CBkZaDAl+EPDP2ptH6pwV+VvkVov0t0AB2BAi4KgBUcT/46YG/jQfgEz078n+q4A/MgSKCIC3SWknn5v/5++TVbhmTD7UeQELUgFQxHACNB/9OqIO8McAPdpWm58F/kghICr9W8N/psB/AQmw1i4+d63oL1ICPLWD36elIrw8uPXYp/nPEXE+RDT6HBF8kgDWZ74LZSkC/qakMHpyb7P8+SkIHry9bhshAuL5iOJ6ojD65z+L6J+cYEcjAggJsM7t6VTAd1EBvhQBGCj+m4n+I9kf6f9HwL4Ft420AGpmGVH0r8p3ggigBkTePIGXqQGKvO8dQyvFQ9LVD4j4tc0Hkf6zXQBeyx+qmKQfnyQB6HHdnfMXsTTWnAS1a3wjvaWxCTdAEmkKLYomJv0/tNfESMATAN8Xmxi4UgXI1DiEJmfgvhaSAqBl0CNjkH22Iv1vxu+7AfoqCXDUS7dFcCQVUArAF4/+wap/r3UPAfiIFKwqAJTRvwn+5Ew9c763hPz/8osi6a6W4qFGusWL+N8WSf9oy19fAf4LSYBWxKelnzwVgBzJ37q+tcJACxB5VLeTP7GQxOu15Gf++ZwkwAV+xRmwGQTG3PMyNueO6tcobkm+/QyopURYLYAr+3NV5ryPkQIyiIAEfeQYE2EtgmnQ/w4qwLfvApiJ/oOqf2R6Hwr8bSEBINJbZbT+7NHWHpPJD7QDIrd/GHEIpGXLcSxr7zsq/Xub4kvAf4AEEPnFgbIugIP1RnpBnXcMkKj2+XeiAJA7SJ6eAPz1RsD0NzXBuwIUx0DpUxCpACOtzLfrj+KK/9se54D3BpCATWulpXwxsacAWF9/jxc7DmQQAc2gag/OZU+t8VwCf4QK8GUIACj/N03SSdjEjshiFlhHZED9OiqPpTtdhgBYFpkI+F82K6ctMJLzZItPyHQ/y0oYiOyJ7r7z1uYUAf2bI/3vDomQBYb0keC/kAR4UwjRLgGiOO1kRuNHeojIdw3szvl9RqAPFnHKToRdTg0kPSV2Oc+YwVQf3CPD/RDc3xq4n/HIP5payveFUAEwgNybkElkG0xtKAnQzm+lHoCUFMAQ6H91FeC7FwE2gwSE0T/RsPf/KOjfFICjwGiEABDZVbK7Bfjaxar0xxPFxYGXjYWf4OyEVzfCjyoYdCJ9LXp4BKqARQDeEooA6vRHhA/2odWbC0ACIsmUjMgYNQ9CgH83Il5ZIKpG5ew97mzSpCxIJHFu8PkEm5gTYKkAN/n/BBJpQhUFPdnppkpqryUUTYQYyOfQBqmZexjr+aco8ld+5sAfkQGTNAXpzMu5bexr314F+O5WwJoSMBv9Z8G/eTK/M4RmxARIA9ZdUQBIiWzdXl6jKyBs6+EXkcd2F/pqZ6elIYCrkSePALyR3vrnyf7eLADU6vel4M+f9z1aTXgFyEE9MhVASkogIgDa+bobZGBziP4ToI4xwV15zSQIAvHI/1DqLgRAISK8CFAdLHOS3wkSjKY7o+4mtKaJR/7Z1mUoBXAgKznR/wX42ePJIAORItCcqJ8MlXAK9L+yCvAlCMCo/O8xOqVHNuvznwH/qA5AGzvbBlIAWvS/OQoApAQQZhikPobnJNlJ/tE5/VEyoG0YlgpwbkJvSdCPiv3UjZHWO/2l1hGtzqQErMdrG7Wl7slzWCvGIyeN8JyGeQAiaekWZX68lP13+uca+ffnww1wM0iNmm5yIk7X0TMb/Q8GN16tUlSztFHeEIgbMmmV/1r0/1QPRC+/RgKQmiYvmOhKKuDHqQDfuQuggQRCjf4DtSAL/lA64IwkTlYt6gEiAtCDyFRTAAgEfksyjC4gpBXwMwHeMxHRptu9GaQLbfGL8v+I29+H5v1flBKQm2En20KYg+juAJhF1Ezw18DqvYjvXQVQggUN+DcR/UsVYD8HBDlA3BP7Wqd8lxM5t2eAP7I09zqivFHCIQGg+/jlLs6Jm+IpUghSYUKIAFIMiBDbb60C/IhpgI78Tw6IZVSAIcDXNhA+p16kCrSiPG1ztar/uyKzNtLbs1aQgKac5FIJeCUr1qaHZcmBVihk9axH7X9vRoqgJ6V/+irgD5IAjZxqoKa5BlqSbUsQOTNAOP0ijuh/Y7dzS+Dz85QE5fJ1RP8bi/69VltNBYvmdmSjfxf0EwGOupedY7QpTltudB+/TYTXMVEg/cvvYstRC/RCIvDP3ycksj9aBfh0AjAp/1/kflbQQwGIyRMWscREmHH2KyP/NyPisXKhVvQf1gSAJMAiUj0wzkA3QBT8vRGiFoi04HOSm9MORPtvBsAj0v+n5/0REpCoC9Aip+ZItlrUh8j/t8LJA9y9a/7vHvHncX+fT5gFXYYUcdDXrlmu2im2011JqzzJsXF9zHqceOpmCPqUa2lGvAEQAiAnMjbhsmiB/7OI08tkKecQbxElBubRfjOtAhQBeIH8T0Y+muJpced1mLXHzMhmqiKgqQAiBUAUewBEHQBa9K/NVu+TJODJwMXn/9Ge2Rqo7qRXj8tWu43s+fIS0N8MFQAZC6zZCpMB/l9uQ3kHy/cBQwEJ0CKpiARIW9eRL3Wd0x5PUsAiv7//i5nyyLqajREHeb2ebYByuJQlzfP3hUjBwx4nycg/M65cK3CeHWUekfQM+Pfg/agFqIYS4KVohlWAr5gG+BFdAEoKwFIAUiNkE8A/mhaY9QDw8v89SAGsUAK02QBaMeB5fG4PTKoE3ZDoSQC2BuLN2Ew2QxUg0gsANRIQTf2zpH/6ytK/RQIGugQsSZwMUtQIGwRjgT6JyP6c+cDtgXkbrEWeJRHgEb9VMyKvj+64VjaAJKc8ToDZJrNqpZYiQDsBEBOgnbVoyuu1GQS+KeonrAQYe8uvUAG+KgFIVf878r8a9bPWN6tPNhqOsc0qARMEgAjL/3sAj3YFoG2BqieAohI0ZSwnqhpEFbsdSAXsQcRKTkrB8gCIcv/fWvqfVANQJaCBx8+bz3A5nzjoctA/W/VYIeDTpZDZzz5BQhbnCr9/a4+ZAYbVDqdR1I8olSYZYKnULQi4rGvWIn9aKmiXqiP5HSewEuCoFKMqQBGAJNCn5X+jfgApXsuOAvaYbpo9DxIAy//fy/9b/uzqBaJ0IkDDdcQFSd4FYuTsoglpCMBYFqHNifBlFOcNrdlBEoB0AKSk/6/aQwyoAehEQf44TQHQyFgnf7SsVASauO2yJ3CTHovcyr8JQJ842ZCkJDrPRxxOjcl8bXBvQlRMzSJ4JpV5+iR4il2klnVHDdjFfkeGIgW3Bjpk71ukAb51CsCo/qcI/DWgSw4G8i6mFeOALQJgAROS/0fB34swRtIAsysqLtOIgCUjaxvQ5nzeyARADehHp/x9G/DXiIBByC0SYKW0GsXV/4SmA6QioEwI5IQgM0PDDWQ42B/dCFF++fZ70uE0O9rc3aeU6P9BuVkmQ0WADPx3T10xvAC0YVNe11MX+57VzfJjVYDvbgWsRZ6EXKASwIyugC1xMWWZtkUANPJieQCg+X9U9ie61wC0QF3x0gAzhkBRQZw2XCaS/TXnxB5sUlYePxr2s8Tt75sRcoQERLchHgm7ofhQ9Hl6UyQDkLa8BmTNQcv+X2+fSjicUoIEZLxMHmRbnI+4mbrBjMj/WwWA1nNtyv7nEgHRsZRSAb4DOf/JCkBTgJ/Irh8Ykc5WtfhZkwUjAkAKEeBA5uX/KQv+cuMQJCB0+jrrMJyJga9QBMgAjF1RCrTRtNGFvidVAKvyXyM131L6nyQBVqeAF31Z5ElruXyQnhILVwDSLfhbS4FECvvU6FK7trwUBWEDgELgd3L/JyFojvKJ5teR/L9LIFgbH0IELOVT7mmQCqAVOn/HNMBXJAAtksb478nWv2bJ30npLGqbyRAHRGLUNkLZ2mZJX1DBn3z/Tj0AAWmARrgRSri5AukAebucE65JeBvdaw808M+SgF8j/Q+QADOaIr8dbLMkY+NvHnTv/ujOnoIUgH3Ivmfk/bVrS03HDfr/b0D0f1MCzjoAUQDo7RdeC6CW/4+IAAVKEKKAanMsXBXAuDarC2Amgh99rJSp0XGUlG+fQUAf8dJeUQQoUwCaAgC5/1GuHiBq82mBNLbqIrEqyL1+cr6R8OK/BigKmrGPZfSDkoAfI/0nSEAPwJgc5USSuizJIrLbRDvZNrDoMVvh49DZPuRdd9noP7I2b+R3ADzILwj0SED0eXn5/+iz0pQEz/vE2g8tFSAqXv72LYH//cS9B1QAKCGdZQoEPSvh6GL0iIt2UmXz/12JjDzwRwqfvG4A1e2s/wtnmlLIE0WKnrTcKLb7bcrnYknSpIANmudH8/4/KvqfVAK8eRcUfL6aSiPP3c1JMVj/kwxZP7JvRivFb88fFP+1xB63ZJx5QAS0iYEjNQD7IY3vwb7TxTUigd8jAzcSIAr5TK8KLf0C1jp96TTAdx4GRMaHSkINgIlCooDGA37IRWsgBRCZAFmSv8Z61X7YAPwb5boBzDwZO0hIoR+ST/byitLnvxmSX3Oivm5E+d53Mt7jrwD/ATWnUd75zwJ+i/BG454j0pGa2ZC436tnQid2UtDJBA81M6L/B42nMtW03Tn4h1Xjd0ABkGOBuwP8GSXAIgEq5vyU6/QnKQAc/D33P5dBy9x30BWAmGwgtQJRnr0HCsCs0U+kjCBRCJoGiDbCbmyMzYj4rcjCGjIjPx9zg2IKADkyv+fwhw4q+m2AH02+swjYFkT8cmJjpGZ5igIR1pHQg9fvRf9qZEhx6jKrXo4MNXuAtzeWMkilAJQxwDsS6BkKgAT+VP2TICDWIDat0PlbpwG+bRsgl8ialaD551EfSdhmznuyt9Zrk8koAJrELXPacoOdJQItiEKgNMBgr2xzZNqoWrcJ8N4MOZjIHmXclRQAkd/Wl837/4roHxgn3JxUDgXAa9VjnMf7DSQAmcLOHSAImSmVPHrvyp6FKG+oj0mjMffSUAU4LZWly6rWzeCoOPw9WdM5iREG7ZyQ6g9UE6WQgCgVgLpcRmTvU6/5r0YA4A4ApX3DBSUnevUKa27SeGLYBvJz1D7jnURRdAuDvyH9E8XFR5k0wKuiSLl4TYT3GOv86Y4KgOb6C/znjquXPvGA+k1cD2exJ79mtOO9U66+o4tzIiP3kxOsNCV4CfcucE8amWPyAEhBE2qA1WZnHU9t9G+kqHiA3xeooT1KBVQK4HNIQW43MVpqPOk6ioLB6YHZ0cJo3ozAFECm4p8ozjNGZIuCNMCsIVAmgiRFAbAIUZRG8CJPorznf6UDfCIXtQPKyY4cpDn4vzEFQB6HZpwnWW8HtG5AAz7zOgLtzTNV/9nOJWsOQKQCZIsAu0ECKJkasgqdO5IOcNqdzRZmwzK6nAC/GlmwVAJ2kaWGbJBwDaT8TIGs/J5NAaTlfibZRUQAGvc5Yf6DXEQeofCifTkPoBNmuaxt5mgLGrwh/PToX0kDIP3WUa8/3/DfhOQv5X/NJIaUY/pmEAuk86BTrhhQfd9Ze/NE9B8NNcvWAqCFgN5nYbXpqiqAGADUg8g/owJY+37YERBMNEX2pyIAH6waNCGvZafgWSkCGiAEM22AWgpguP9fGf9LwEWsWQhrH3Z/IVuOXLsyMrOXCkAjPyrpf0oRsNQcrbNjFwSPpwK0Pc6q95AWz9Fo56l0j6NWIvMCUPCfGgUcqADWbADpRNoAhU3WTuxGesST/JEvK/VJRvRPQBqAjL1ttt6pCMBHkgQj30YR+7Z+5grBwEWq/a8ObAqzsn+2ELABn5PKgOVmF7BoJA1AFHdMZCLPDAkgR/YtcM+Df3NSABoJeBME4M3YYDvpkyFlbcGb+NLGPCORv1UUaLmZdiTY4PeB+wwyzySrAjwWpQC4+vI8B4SKGOX9p1KglKwFeJG9+a9TANon/Q8192YU2nje91GF/CVdMEkCkPc4K/sT8B7RyCQE9PP/GhO9skARVu4OEgqkFYwG5d9aca81YvnLK8ativ83QRoaQAC84U6ZThDvXLtcL8JppkVKG9k1TEjRH1QEaKgAyOyTyApYfjZoAaAW0cMmZxQXPVvR+fP7eZx+Sh3AT1cAmujXvFxgWr5NSQ8QAJDuhekUmoQEIGFmtLL2AEl/oEWBpjRmsOk+SBCRtkCtlgKVpJE8f3T775Xb8q6AFIC+9IvneX9Z/PdwyIZ8/jclFWApAZEqlAGGlrjGKXF9ZuzMZ2sCUkZA2jWlRP8bIP1bRaKzLrCmG2QXrU5URYBfRtKXhYBuBGtJOqyPFQV/AlQBSoAtKYRkmgAo8j+qaKCbl6wDyLYCNgAYtAgyUgMQOTYCIaK4yr9Af00awFMCdiXKbwr4k5CNd0cB6A7YW6C/B/J/VAtwSUMaSqG634CqYjbyHzEG8lQAS9nhvfzIkCxrAJoH+miHlKcCNCsFcJJZpw7AC0CKAHzh1IFKBJ5n5L2DoIEsvjnSXthu54wDJYodDDUlgtDNBiAZkqzw/9cnjrXXJobOBfAKeRAFwKsJqPWaNICmtOyKXNwc4OcRpBwR7BEAWUxoFQRGA6DS53l0jSfBP2NYZpKAY+KfNirYKgJUCYCo4PdUNXnsiPyWvzToM8v4aD80iwGBWoByAvxpKqZ14BWVoNH8BK/bvzlyhVy5iOoUMv8LIQEX1URxxfJUlRkvgBURJTKJjgrsX0qmM2kAq/WV54r5hm9Fm5oCQKS7DXoEQCMDSNGnNzdeBhWEqIQnkR8o/LOAHlYCnLqAy/9VOoosAiAtuzXw93L9M14oBKoAXdjMr552+mlk4bsRgNH88GqlQbLbs6BNjiW2ovpMaoAMcNUK3hCDC7ibwXqc8t40WewrRJKj55J6Me77Ttu2ffmL+geoAVbBmOwIkI6Obw4B4IBxO7QGCZDpAG8GgaYGaOfT5bwwBv9Ye01mhLk3eGyEBDRLFaBcF0B3jrE8Rpq/vxbtbwghMPZECoK0/pOv5/8++WL/SdFNqBoYhYWInbEF9jK6HSl0yZAAImAuwIQXQPYiQ10C0+ffO9hrr++4HfF37+9k4Xj883dFPWq/3AvAc3O0xjzvnkJlEABZMKg9xlIBvBSAF/2ToTZwwuxdC4gh0MjY8gwJQOoJvBSAtY91puJYyok22XQHSECU+iTC6wBU9aYrhU5UXQBfKoJYIR2PqgZNAuL7+cEl/MTFTqRX0UZ5/KiVKAL+TDtgC95PD6IfVDUIndSyywJ6JyLVHqOpEPK538nD8z5OBn4TCQDTAJEKYBEBcoDdur4iAoAWBHrGUJdzxnBFTBX/GSY2G+E5f3QqIBLpa/eRs48h3R1W9X9K8leKwNO/G2PNPUOgIgBfiBS82pAlkuq1qBixymxA1Jq1/iWiYddDeDogCObRVL/pY+CAfks+Zw8AP7rtFknIdEIpASq5jVQAmQpAFICILMhefyvvvyvRf9QN0hPnrFv8l8j/R9NJ0cFAq6yAtbqODVQAwsg/kPlRMzOioIg52OO+TSfAfz98M0EsX1dtWlHko7Ji0VUQ+VO7EWdCHrQeR5QoBrT+ryhUtKJqXsj4imPTgCifggjyjNwvn/cf4C4S8NprVTu/ebEYiZ8jFcEyAZIEYKf8iGCtNoAIKP6juCtotMcfyfu3RYpApgZA27O2QAEIgxqjuymjXjYjqteuzW9j81sKAC4layqBZ/qypO/bqqIPwLaDm4Mnb6GmIsjFZKYbJsYCT104AeC7hZbsb62BTPL5T0JQJOC1KgAZSoCnAFjukER6y+FOcTogM/hJPeYsFegpE2Zh7+AMgAaAf0QCGnhfC64hrYhzm1A2M0EPVFcx6WXybdZ/32RDaIs3F+/3PvF8GfCP8vRR1GpdKBHwo9F/pACYm5ZomVntBRCBP5rfayLCb+DxvUV0LLePqANFAsZVAAm6XVEG+H0b6aOfI2c6LRWAWgBb0T/qEJiZVoe2/Y1K/WiXgPcayNljtYFmlhKQ8f0fUQEukb/hZfIZrcy/igB4w1oQIoAUAiK93bPRfzi8R4Dk5SR0xhUjm8johYE4FVKwKRFdPf6nAd17jvf/Y7UkOtHU8/tBFm6ExzBjMU2J+Hs91YED0IsEvE4hkAWAm3Jbp7gwzVMBdrJl/j0IGKwpcVGUa15zSuS/kZ/7R/L+yP2N/Jy/VQOALA38n/K/49ufclRNqKAkgpgfvf77IZsBMneako+JwD9T8JNDuH+2oCMKANLqgjgQjrQDZloBR8H/qsv9a63sDuBr4L85kp8lE6vE6zhW+/Eed6YqvIN6kYC78pW9rntwXDRDmV2J/pEiQCvK5ySARqJ/pQ2YHAVwxPnPAmdE8kfVAYQMWIGCVgCIBC1EOQOzMHAxhvlEx6cIwBcF/g7+jMxrjwC/O7dHJAByljOi2h5E1DNtgNmCQHTSYguUig48jx8+MMCUbXcWUWHgv3mgJGo0tON/uoT9lZuP3uCNg/ahMuxKnYAKFkJB+FEkAAR/TxX0omsC5ORIAdgNJUCr/CfChkRprX9IC+9ovr+B4B/l9jOPiyYBWtd82NLH37/R+kiU9DF5cXT/rdwAf6IPgLdxoCCMqgHocyFGIXyTvIzqFVFuC06cTBsfJdQARAHQZDSzJeZ4r0umajl5fFLAv4nI33I51I6jLELjCsAZse3s/f8lBWedAFMEyIkYL2rATyABg+BvRY/885JtZDvZFeRIUGEN+9lJTxVoe01zyIC3N8lJoNkCP7TiH1EBNsp3F0gFIApg1H2KXUeeix9Ron5JuLRKQoBONS0F4IWAvfLvosd4I0d7ENmjKsEQe+TnopOLpkAaG3H8y9QCQLl2WQsggYynOmbMNA7w3wJ1Qz6GbzC3ugtZ6W+oAP0AdK4A9MMqtbPfNWDXUgI/kgRo4M/fmyRvrJDSu649/4jdCQZaQO6RAr9d+V+z0f9M658nx6+o8N8Sf+tJ8mjRYwT6RHY7pTeISAYmM8D/IwoBf1oboCUXRq1+BGwKngIQPXZUSiJA1ejBBUEAyBOoBrTsBma0AiJTtaALDOzx//vFiIJlqkLscXwDvx3XP6/7bwR4RPacCHShAJD0RXj/G6N18BYxSRLw/vvj8fgWG8/b21uT9sf8eFktlwohQBQB7zHenAivJVimBBr5BkDe/oJE/6Otfaj8j6oAUW0A+lrQfc5y7oss0j31MVIwRyX6HzUT4LsQgIxa0IOLDWH8yO3kbAQWSUgRBGMUsaUAdKJpx7+sGkAAg26k99GiF5KW+vgbbStTGLtFZI5cvAb+l95l3kaoWLb2f3f1M/9/IQKnBP1OCJgCsLMo/iwS/PsdSQlwEvD+/aurAe/AL4EbIGrWbRdCJsiApwKECkug4PWAEFj7QFsV/Rt9/1HeHc3rR62B6IAh1AMgJABKjj9SIrUg5ddU8P9UAjDbCog8FjHwWFEwSM6GkZVRyYlgRux+M1W3BEqU5sY+YQpkkqP352QDdzxFA+mTvrQFKrK1NrmsM1J25oT/gvwR5f+9/SAZ/fDB33ia4HQZFLL3tysOPEEfUGciAulJu9ZERmuf6IRPfexBcODtBWSodTPRP6oOoL37o1MA0doAj9B4drroPmWCvzJsLXJbrPXNFAACLmDrQkNy/N1h9Yj03wE1YPxN/gMjyJgmKeFnLkKkEyBKL1za5wwQg9QBBgRoVwJZkRKTnZuWs1bSABrwn4B/koCnGnCQBa4GaJHKt6oL0EAfiPa825C87oVYKIqApgahBj0dkPe7Q/Atm+909E/jHQCoac+IOhC1AKJKoRa8ELC3mOCvKaYF/D+bAHjOYZEKMKsAIGkBL1LwKoRvnQBHsZwlh4+4AbqPOYBlNF1ACPCT3wkwLAwor++yeR3/z5JJb88hCjG14/+MNN9z/6cXwHm8NDXASgl8l7oAKfE7kX4U7UcRWij7SmWEYg8BIqx2x5pb3wOVwZL9o+ifxHmHgHujnLHPTDrAA/vRFICWtoP2lR9Yuf8pRP6/L/CmP6oTIAJptBMgowZQ8LOlbmvSuRfxm97ZciNhlfda8c35/yMSQJQrGLy9ft7yt6ITAIgsz/e5sby/RQJu/gAM5OR58reX+Q8A7cRaAE/wV9SAW0rgIAFWq2BoGvQRdQELJX71MYqF8+UxIkVyO++U1ABa9EfANR6Bv5SgKSHjkyDdI8Y/2eI/tMI/YykMR/+KVXj0d5rF+EeD/3JltxSA15AFC/hbUqZHigMRckGBGoCAWKRqQF4AxqhMNep3SEDGN0D7u+5sCCjZkamAptj6Xv738Rj+3tTIhhcFGo6M2nnRDn+BJ8ifqQC6up3tLOd/KgbECAEHVqgu4NXOga+I9o3qf7e9ixEEs13wPL4GEYh+1743kBA8ASogAaZiZVjeRha/LZDmMz7+KzsAzPfO2/EJa4FcoQx+ZMT+rQjCVyUAHz0TAK0DiKYIjkwK6+QUKwkDCwsE0V5akpuNbIcDSAARXmxobnxHhTwKWKGToFEM6PoABNLpxRvg7N1no4FvKsD5mk4ycgBU41I/UwT6EblHdQH00SRgcbQfgr4imUdz2i+vSSMCAQmIyDlS06O6kTISAEf//DFO9I/k4WdsfiPJ31MIIgtgeV73IGi5DOVRxor/JOm/CMBiJoYUAnrRQFQIhBKBpbJRMPQGZdPP3vyTBJwgD5KA0UJA+ftIIWCmrch7TZskSEcEvrEUgVqNfQD7mbaQbnF/N8ET6A9VQCMBJ9Afaf9nSuBUA56PA/wClpKAF0b7WnGcC/qMDDXl729EQPEb6Py9gOCfnQdyC0qEoZRXzKpel5PRf1b6R1wAPQUAagFkqT1tKqP6d+fx546oHyDh/0iZ/ycTgNFCwIyk78n53m09kI4zoJ+dCtiMjdM0vwHTAR6oI+03qy2BtejSLH7kqQIJ/Md9clMkEsVmdDUG4tH/xmT/dyLwdpKA8/k58WJKwJnzP9UAXhfQ6Oo09xISICP+mWjfmMdAdO+uaMbUS1mAaY6c5gZLLG0izw1JBLKKXU9cd1YQ4kb/QcFfJvrP5vhnXAAtUkJk9+R7vg1aFwQtiP5rouZXJgDHhre6ENCawBb17o8WAWY2DTTib4ocFka5fI71zCARZSaBVAKIctbD2sZ5c2gzpnR10luGwlSD/HyOVIFMk/wtDPwbjv8hASc5EJ+hfC3Eov+NrnPjTyLwdn5epxrw5/Y3BmCt/ZMCTg7wrAs47yJ9mBBEAoIonsCIP2zfsyR+APRV4ihz/hLYTxJ2EgFFDeiSCChpgSz4e6ZNmXkHMwN9Xh39Zzz/kfRfBxRLbUw6AvCz4N7plxOEr6wAINH96HN5LXwWIegA6CPFgNGmIC8EbSCQGWlwgJ4lAQroX2RKQQbIUSC8QsCzKyC6sE0QMuxm0R7sy6Z2kID3nx/875h6wI/pRtfBMaca8MY+r12oAXQQgbNL4BnBCiWAdwtsQJugahhkSOC3pYD/aLTflEI49TbxPG7Ln+EG2I/Pr7O0QGepk0swYJgIecGDB/7eddxBckyKy1/kxLc6+o/6+jMpAaT+x7LTter8VpKA0c6s0RRBn3y9lQIAZX0PFLNOYCNFgFEtwdTJ4FQW98SmM/N1A89ACSCK23ossxZEYs1EtLfXc8r9TI7fZHsgUwE2xWFMGw7DUwBnHv8vGTjVgHOTO3L/b2dKgJGAv3eQ8As43xZKAjQ1YCXwayTLyuuLc3dTovum/L15Dh0AfyEDDP1PQtCY90IDSUB3wN/bj6xCxtnIP4r+0QE9KDFA1QJkFoGU/5H8/6XOyVACo0i+g/ss6s0yg1ffIg3xU4oALXKAFgL2QB7KRP8dPBEyJ0UkwUZVtUtUAJ5eoFwngKUAvGQ0MLABnyDwNyrnhY5HKuDBUwEyfXDIzs80wBmpixTAzkD/VAR2kfv/mxJg6QCSfgFcJThIQM9ME5z83KJK/lDiF+mWW6rKiIZlSugGEmd9A1NO+ln3cPxwUVU4AIl0AFoUFhn6IETcIj1ZZ7/IBGjll2dAFBUAotMbo3qiz5D20zVblQIY3a3X1wGghYAZEO/JkyOqNUAjf2tzNsF+Vva3Ni8WMUdpAHRwkGcINH1aBcB2UzRYxM+LAlUVgJEAmQbgX42pAmcq4AKOzMSHWJHgibRcWbDy3K5r4ArgF1G7BvQ3iV9G+UpnRdOeRyEFcq94XhsHCejH53ieQ/vJAhjRupFkVCEJPkcZ/UfkQBIndNofYse7EuyReoC0AZD4jKL8/6rgMBPh/7p6gO+oAGQNgSwTIESez/iAZwgEshlHbNgsrBlwFEurAIESgKgQ3ZjTTUAqAPKFOPPAWisaTxeckwKZEnCmA56pgfM+ZihEVhpAEoDj+xv7DN/kjncCvKgJOAFto+sM+ogEIEQAHsjDI38FsC+RrPisT+K0GcB3qhqXxygpG06Kz/Oms0LAziT/jb3njQ7zJc0qWLRZRqmozN4zOogrAljUxneWBHhOg5ABkCL/W0rlq01+ELM35G+QQtEiAC8E+5nJgESxGyBqB0ygNDQtHSmWwFH+vxsRu2oMlCUITuQPGwLx9i0m+48aAkHnAK8glx0Ah9z+jFi5EiC6Ah5ndf5pOnSqAEwN2B0CsHEScHyeb5aZjVCC9oOI7PycAEgAUd4/oSHAL3/nEb92Xmm3CffGLSIgvEiSpwGEYvJUYw4ytbHbKQKjQCG0ov8eyNaQPwflHP4y7n4rVYEo999E37+mTqEyf3a08Igi4P2MPt/sXv9pJOIn1ABQEP00mhsKNKsAjKgAGhloRkrgNoNcbjqGiU9mE8qQASI/76mCuawBENFBX3VhKTPqeZ94Yzn+ppAArgRIEtDZoCFVAXAiRFcFGCABo4qTlPtvx5oDvyRTwmeCGFickX6kLpFCLPl77aLFjxfu7XRtx+SqSTtNl5zPpo1Ed4pd9Kui/1fK/yvsfxsYzVtEiu8nr1YBVlTn/4h0wU8hACOFgBRE9pEXAML6Oo1JRrK62tqobu9ZGf4DRWO0tlMgIgKW7HqzVV14od2OBZP/n6/tVAN4YaAgAc0gASdAd4MA8M3z/+SLY5K/SQJOYEuQACQFoEXbqjMdl/M5mBsGU9xYyTsHue3ypahQQQKNiO9OKqY5KtnfxyvTBL1UiXotstQYFP0PDPuBI31mbvVMYdG64j+rAND8bJz0lCS+SBcFeo2vCsKye/e3IwVfhgB8QiEg6gWAKgWoCpCRnORAmqYA5eWiMQb+kCAUw1+KGyDU70yAIZDwPvCkbPSYh5+3IAGkkIDtIAHtjGKP20iQgO1UAg75+c0gAG/ieKBFjxfXQYcEoKkRz8jnUqUvQJ2D+MYes4nHbA7p3AjrkZepsOd1eBYAis9452oJIwjtbK9MpACQz64rqtZHRP+wEsAJASMDiKwfgf6WPGbNIfyzIX8ml59NEXz5Xv6frgCsMAQa8QLwToRsi0gHTtqekBktpmzNBFgW9RtugETj7YAtuRlbUq31WYQXMPMNkJPmeER8dgdoJKBzJeAgSmfOfyd97LJ1/Iib2/B2tuO5nuODDRLQHZVI/Tx51M/AnPh5YwD/JZIXEv9mgf6ZXiGlHVDrKmEV/7dr7+is4HbMJ/jsggyH1fwB6VQ/R8X/wFVaFkb/3u0PiwwIRQCx/k3b/wL7YJNBzkJ5HyX/aLC2WoUsAvAiqT9DHlCzCKQGAJGjpk8AZzStB46vkvy9aAeRmqWE+txMg8FAHVESRqM7pT6AmBpA5yZ63sZIADEl4AS/kwi8EVYt7RLFfx5BF5MglQSQPUrYjPgl4POoXgN/AfySEFyiRCH3qykAuncBeNfUs9jvHKzEUyQUm2L1QKIOo/+zZoWfuwMEeJXlL/L1MEjACvOfy3FTigBlcNJJrwvKtgCPOvL1D8KqUgC+GEmIOgEISAN4kj/iRpUtztJkNWtQirbJLLEEnlABIgXgQgQmDYG8FIA3rOl2G58ZwOV/unYOXEDrKDJ7NxHqotvizSJ11v+XtQBC5t9F1LsrAN/p33CcJomNdmy0XH4E7qdXglQGmAKAAMimhILnucuPyS7OiZP8NEZ4dkYmekQCmFGQpzBZx64Jgh5di2gXzrCV70DO33MRREkAAak3aDJiMiU2Ash98P5R4P/SROBLEYCJOgApL2XSBhGwjyoAq06Cm3RsbDTdizJkbYBoDRypDSAaqwW4vXbW231ROsAiQKsgUvaEWxe7eeGfUT1PC0gSQNcWuHNwT2fg+ObMTDCJCMtxW6Ry55G6sA2WRIAiaZvJ/ptyLlxskk9gP8FfEoPg9+dz8noS7TPiQHB+psfn0pjEfxKDjUXkFwJ2Hqck0Hv+AFGRrkd+tce9auBPZvRvZPSDtABa0b9FxrQUwGxdwKvc+37kqOCfqABkIn8EpEcVgBWmQJosZlkAZ2w2b8WCWZXAmQwYpQFUFYBLqkpkTIlNwTIe6UIijlSBS1pA9OtfigT5Yw6/gH4Qgf2QXumQ8f+z0kynne3x9Qg2s34C9gn8x+87cxKEigDlMedgfRbznbdxEsDAf9NIAmGFZCY4cvLHPhsZ+b9/xudn9cz5O+B/O0fZtMUsyZSE1ZtU2YKfVw38mfEByPT7bxS7+L3SACjj3ZBx/uufhFNFABbL/mg6AG3xW2H40EeiUI8QGL3zLkP3NqQBB0EivDbANASi8UJAzxgJneaIpAakGnCZC3BKzuwxnRW6vZ3v8wAZDu4PAfqdR7Hvtxk1Ak8yw9zwzt/78X+jCXaWuc8mpH8Z5Uvwlz/folM2U2ETalZYF3GCP1NEnjUPZzqEVfxfxkYr4G9G/+dshsT13boixUWAP5iKm43+R4b/RKkB2bPvef5rMxI+A0gzwdiPnwPwnQjAytHAGWnHA+dZFWCE/TUj+rCilSGp3mglzBQ5hZuhBH+gEDA67la04R0TTxFQ6wIMNeD5/x+Px5OYnYN9jHP3waT8B0tZPET6gjsJdlbkR2TUArCakcjaVj2mHPwZcD/Yfe+3P9h7e0iQkIRAOac2cb7JqPCvtS+v/udpjvNYMMmfv5+NdUPcZGVgBgAi//eACGfBHxnyg4B/duwvUvUftQRHKp3V6kvajI3g+Uba8vrk7xSowEUAPpEMoJ0AaCsgeuBXkw3tMSHBMQoDrV5bpDgPJSIZVYDIzn92hQjcoqugGBCxee2DX7fjxVwDiUeacvre9g9p9lNqZgB5Pv9/nhrAiAIZt/FuAP4/uvIZmtG/BjzSVIbsNrOHUAsiN7lNpKEu2H8W5p1RP0upbMp7OfP9EvQJAP1UxO9ce5pL5+16ANNsUe/9CPgj0X6jZPsfL0QOull4qo+cNMBq69+PUhe+LQn4yTUA0QHrgeyDmPmgBkBRQaGmEngDSJrojU5vXpF0b21UygU74geAbMTP2xzw9ybgSbe4BoD9TlhHB4/CpSLw/P2cHcBAjdcDaCrEZvx8eS1/nuuNRdCaEuANTpLHTWvVuwxCEoD/kPc57nNqQZm0pmbFfJ1H9cfPO/usebGolPotcopO/csqcajD4k1dG/ACeHXkv6T9D1BrI/VgBIizrYArugB+jDnQlyMAk50AGih4gIrI8SOdAKjBxHBKgF1AnUnnz/dnjV8l37531v4XNUSRm2JXQN/baPuAOqSB/VkwtwsQRVIGm5SjT/BnrXfP0bNi4z+j1Z2B6vnzxlIHTyWAFcJp54zWEsgJz6VtTVr8kl+AJsH/IVIApvFMBP78NUnwP88Jkeffef0AFwQWAX6m6NSK+q1I9pLmmBgHHEXvqHVwNOo34wpqqa2auvdVovZaP1ABiCJnxCt91A0wKjjrIDnoA2mMW95cpAbQ6nz+fDMkAC0EdCN/4xihpIB/VtpkPg3cd/HzrhAEVx2wzITImERI/ybXPYnFIXXLVsYubruBP0sDdLn5GoOkpGPfxvr6nyB/vLb/hALwOO8/fnbB/3T+E+eXzOU/ZX9W/PdMo5znJCvuu6WtXhDte9J0NAJ7hFR73glRkR4C/i0h/3vgrxVVeuRb+pm0xOeejcR/ZMteEQAc/FFCEIHvjBcAOlsgShtEyoX/Iuzc5GwdgAf8mU0UkVWjx3uqjgbc3J53FymCXSEDVtEgl9+bRQbEwBlebMffCwfyLSArJFUIQwHYg2OxMVnaM5f5j6UCHhYJyET/5+chcvlnaqWz/P8bORX9LwJ8WIVziJVLhsGOm20C+KNoP6oFMImI6OKQ7z0aAJQx+1mtBKC2779GkfhOBGC06h+1A36FGyAyXZACYoG8bzVCPjcXRf6lQKrMRP/oxncjDrwTQCgYCBlA0gDSB0AjBVL+5+DPB/pwz3n+vh7i9dwiIwFSfALd8/mEH78sFIQ8C85WQEU9iIpCn0BwTj6kf3n+B4/83/vu/9z/vO0Efvk40qv/NxHxNwH8z0j/AH4S+X0p/c9swo3GCnqb0n7reQBQoBpEo3bT1fmJFABiRmQSOIrnbzyVAeX65uqk1QGwCmRXeP2XEdAXJAMjpCAyBXqFG2D0XF7LWksoGW5awNicECMfVAGIZDt5oXujgSnYXLSL06vt6EqkL1UA/oWAP4+4N3RDYsoAbzG8GQwdgK5551+i/+M48+l3FMizFwWArsVpJwl40L0g8H2/eDAScCMClgJwqh8n8LMcP7f8fXoYiOl9HQT9TGEuEhA048Lq0kmTkeuITBNhMzq2gBSMqgDoVMZmRPzeZFIz/29E/ZqPwGin1isw5pXdXkUAPlAdiAhDtkJ0NPJPt5x5rBokGZeL6tjoJRhLm+FVCoCqNoAS4Pk6u9wpAHVHIwNeQd/ufHWFFPC/8whRB4hAE1MIyVIEjMj+kj5gJEArArSOLwd5PuvgBPbH4XD4bPM7APpSGEiiHZCuNQCNAX8TVf1dtgA6Ej9Ss5O9hjVVwOr3Jy1aFeBvkelRK+1M9I/k9KMaAWv8d6R4eM6kjRUqv0JS74vx5EtL9z+aACzoBFhx0BHpfpQEaAzTIgtooRzy3rQIXGXltsmZCXio3El0r6DmBYFaJwDCyJHCQQ7azVAB3gSonr//3/H9beDz4LUE8njwgT1NDCB6GvOwa2JTzkeNBKjdFDKa03z/6Trw6ASCZ2EgJwVCBZAkQHr+P3MAJxEQ1f4e8EdktxtkblbFa8nHuS2JNF4MmIn+0SJCyPIbTAFo1662X2XHB38ns51vRxZ+kw+A1xIWyT6zkT1iRRv9H8/8KLKzRE9QbTAHqgCEqQSlMwGd15696BAVYFeieSn7y9f4ppAH/j835f1r4ESCjPAe/zM98PzYhFIgP+ctubla5jSy9/9ZE0CsO0BMm+OR/4MBhJT/b3leEfE/CVpgxzs6hbMrZCCrIpqfK49swSmdWSKwspMg/aV0BBH5w5XQtN5HAu9HTQMsAvDFWNhsK6A3E2CF0xzy1ShuhUPMa+DNzdPqjEJCAknBbMGP93l4tQBEeo+8zOvznD//rhEBbu7TLLlYAaE9UJT4OGIePT9/F2RgE4RE8wOwwGiTI2o5yJ9kgEn+l0iSjwMWj7tVjRugT3TN8XdDPdknr6FIgYM3f92kEo7+iXKjgWdSBJESsIGgTxTn//nnkZnr8SsibUfpLgLwwZF/thWQCB8chDjNbYR70c8AOloR2zKyp/DwN+sAgjSDR0JGhgJZXu3kyPFWFPYWfLfODZmXbwrx8CTqaBLhZSNm8rwsTrTO+Sae0/Plj2TnJhSCi4JAeuU4aSCvRPwNUOisds09IAtEsSdHNETpYuQDeNeryovylCNEADHygQv/nEg/sus9uzlWKHl9wT63Om3wY9WBn2wERIFkjlT6ZybJZb5kAZqUwlEC0AJlArK0hT9cVkDmjCj+K4lqhX7cf97YOPvERe/J/5JYdEcBaCLip0CO5sN7NiPy644KoMnTl+9KWoCDJ2q5fAFZ0VdPLKJHgOkC8Mzk5/bFVQv2fjQPB9mt4eX1d4MEWMZOsv6DCHcBVc8DC/iV8cDeREJtXsDlvsnpgZ57nzuR0SAt5mTPD5L6kf1q1dyWSgF8I4D/CJY3C/xotK/51vPirui1R/lQojETjAaU8F42QUcqvbgTJhwBvds7xS1JmgLTDBKwi+ifHAKpRccRQeNeA9EMgkvLHIvetV501AFTBShNwj9bEwGA9xz6vHPNItu7QpR4sSbSvYGQdvkZZYfSzHQIeHUBREBufoAkeP9blfuNwUfcfvyj9v/M7wg5+NUE4TsrAFkvgMxUwNU5fBnxb+Q71O2kG9hkyAtsIDO5zII/rVea7u2HXn3DJUmmTBxDnB87i3DJODZa5PMGgABXAXaFAGiExVICvLTA5VzQKuSFq2AfOGamdK2AvLsY2G/O/0er+E+wfxsE/538IkDtM26DAUjGBbNR7McRDQ8iQLofGed9e71c0Rsc5BOBMSLrj4L/K1sGiwB8U3VgRRogivB3A/w9+VmTK7UWL88z/0OKoaJNbkXPb/tXKZMZ4GSlAkhEl/y17wr4e8+9M/l/Jz0Xa72mnX33JGukep0sUsDIwa0NS6kFOMFe/p11XkhigF6T1vvbX/A1Ev1n95Nb+ks5hTUlwIrCbwpNMJfDek3IpM7bY9lrRUd7zwI/YtX76nG8v3Z2wJclAAunApIjDWci6awy4BX8WT7vO92NZKRq0AYUDOSCy4Dr6EaAzgO4kJtkcRESPWjHhuieDtDOHx71n7d5VdXeZ7tTXB9AhLerqp8n8xlIEYcBy90GHBeN2GRA/S24LVJVUDAaeu9ndKwUCXr5f0sBIADgM9E9OeSDkxSLvK+M+mdAeMSopwYE/XAFwGPv3lAdtHAuI/FHXvNa9XYTAIQoAFF0lfEaQPtkvwxHdCRby/8eGQ/snVMPBbQu3vd0rwFoAODsTtS/07gN9WxFtdcxEsnp1saLTl58S3x1QAHY6e69gBLGNOFJAmh2JkcU8VvPG87nIHvYz8roelTORwKY2e6prIJcBOCLgz9CCmajfZQIbEY0r5GAW0BGersXgRIr4o+ODCyaipDk7wsmg2nWuy2hcuzi8/U2a04CLPl/c6KwyFPCIgQjFtIEgDOiLmS7YBrFA680i2X+/f8csEdVgchTYySKbEGEHKoDfPgN+TJ9RgHwono+fTCryCF7bAevM++89wjy/7N3Jcqt6zoS1Jv//+Ibad6dOTnFMFgaIOTYTqMqFVveZFliNxobMs8BrXJC8wSu5HNJAH4Y4HcSAbN5ABboW7H+U74n981ArpUDrl7u6Vz4AwCVTJ+BneQaRCocCgkYDTXElYZP6+8UeS9W6Z/VhAVRAarE09u/yPuy5rd7hHA+Vt5i7YWpLMl/BvB/FEDXSICXGKjlVAhAcMNzaUnKSwMp2h/Dy+xfcgrU9/8MnzaP3Y1GkiNzTZBzLVpzsgCc6RVwAbffxl5dAUC8eo8EIElK2bK+Ve7XvH4rDLDmAJyBhId0BIxUALTfwS0XggL82WZAFXYvYudYRDKmV/p3CJ6oFXk9FSK3vs9wiM0wPHYkfHQGHujhLP4zQH8stzXQ/0cB/38ETwC0ui9eyrFCz9mqQgU/B/kMo+fA/PpdKT/bRC26ZhAFAGmL7ilViGOTWc8qFQokAE9EEMTwlEcgNSGLsAbwh+gxfw30PwTLsIVqrYP9zrRTjbyl9Az1JyCI6wK2erQICZh74K/y//z7Io15Iu/GWihPkLSJfI93WyRLKz1FGiZZ52o0i0Hz/jXv3gP/9blabgEqM0eL+3jS9S3TiTALckMhzOIoR2jFVAT0lneend9SAXBWAbwZ+A/D84su7krc3/LyPfl/LTkbDvCgBKDiOe6QgJ+4aJBmQMg2KyRwGh6/KArAKfbUNgFVgGhBWgmAiD5MSOtvcBnKx1i+738A0PeqWubjisxD+JCvjZA0oEfA/3TAHyEBEhDw8YLrHnqNWh70SF43l2BNdiInSwBSG6kH0QwX2qsQgI1SQKSZxxV4PJUSv9XLPwACkGnleiQJgEjcejabELibbPMMi6MXXtAI3fobaBMFo98zW0d9gapABP7aYjgMJQAJb83f5Z+FOHySniMgpKgCYMX+vcS/MzjHo3wJTSV5VrWroxnOFayRKPFGFSwkoTQ6xyOi4a1jApLCO38nEoBm7z4r1WWSAa0FcE3k0yR+7fkfkmvqsQLPARIAzes6ASJQVQQe5ekPYKGLOgRmSMAwPKNr+W1X8EN7rGcW8KhyIPKmLGXpVI7vKX7nOsu7t0Yla6GojyQJQDoBdoD/q62FFwjwaJjTC+No2+7qoJrNeUGnuEbX3I6C8FJqwzuEAKJEQEvuyyYDejFSixhYt5FhM6J4VkP0kEBEABDwPwEpzltY7lpM/7YDBhKjhtgjlCskQANxjQBYCo8kSEA07tn6Hc5AAvUWpLW3BNIa2btGvNJHawYCqgRo4P8Bev5R3D8anvSKhCAiPMhjSCJuF/h76gAK9KgCgKqXd/bcIAH4QaXAkz/REIAW871A0Ndi/0jP+UP0ufMDJAAREUCGqFQumExjFbUT4FTytFMxoNWBD8c7vhZVR4zfIJL9kdGql2Cd9CSQTk9AHp0/Swt1rBUoVinjGjKI4v9arH4FdIsIzFUDXue/DPhn1o2dNafiNXZ4xZnzBiWN3n7vzkvJqpI7xKKrBfpL29MTgJvyAETquQCWEhCNlfXkfwT4rwWQBuBJIj3XkfwAZIbAdfN5IMVFFWH72njacwHJtUkTIvmjBMALC2RAwpN5rffUeliIsY9aG2SrsZUECoBVBqgBfzXmH4H/IzP8s5PqdkIBux53tiuo9xtfie27JcyVBMDdx8u4RgJwj3ePyHnorPisCmB19bM8/8wFfSieKTL/vXpRIiQg41U9yzkioCJkqQErmbsSoO/1Z0eTBDMenfX7aOWQVkfEiDwczjFAFAArDBDF+zvA31Kg7gb+bIe7Sv8OdP3yJo+eyu+bJR/ebxb1bKiUMFcHvL3CekYCAC70UQMLz/PLXjQREfiQXF9vD2QPQ3oWwfqvIxdlNvEm2vdXOGescICmBmQBPzMKNlICkLapiDqzEsgTICDrufQfRfo/HOVgnYCYGfjjxfozFS3a9Y946aP5vEOl9CwRqMrw69yRtZdE1ANAQM/9BB7b9fxRuV+AY+5dP29BEn5jDoBHBK5A3tdIAFLa97GxSGghALTOHGHl1Qsvusie4QLxYutD7NamVpe8FdijbRUFYBTPEZF8HFer279EL+OTSf4fSvjASm69DCKqKQEz0H8YRNULV0WLugf+svFboL9VZhpeBdij7qRWjpK13mnDx67NdeYM1iBkRHaX918ZgPZW7YFfggAk8wCyWb1aCEBuIAGZuL92Yc37qcmungoQXZjV8sAKSHWDO7Id6QthkQAJlKUrAP4rAP8OEoDI/lFHN00JsI6tNuDKmmMxv3dEAj6CEEHk8V+yD/6PckzQ/A2UBHiDx1bgX9cw7Xf2ho+NgHB5JO9yHA+P6HWRAXQAEbqGcRjQE8m4mTCAt4hG5X4ZEiAbizmSA5DJA8jE2XazcT357FnUIKsM1CICXk8AURZLhBCI4V1lmgVJ4rhb18na08IjoV7yHzph0wOGCPjX9z0Tcu4Az43uMADibVZlfMvzX715TQEQ+T50zPtdB0A8vXDNWbiPqpcZhwUli2/j7f/GEIDn4YnhEUUX4nzRaI1PhuENoZ4/MmoV7R4YyXMI8+7w/nc8+ozMHykCEQkQ51xB2w9fhvx/iV8CaKkB4uzX7ohUTfo/lW0aAVj324v/S/IcRKb53QX+4+a1aEcFsJQ8bQR5BPza0LFD7MmjaK5RBPzIH6IYdOYKVElbNmRAAvBg0EdUgCsJwpchoWkXl4g9MQ056VACMACgiBbfqDcAujDtXEAoIegeHax5NcPxnKOWqBlC4D0ugeQaHesLkL8vQ8FaVSdNATmd897ztpDMb3ShD8H/z7jpb/v0b2+JYdeXRpUaWZkfAYUoBHkA90+xp416+Sja90bXmC4CEKkAXsiyogZkEwZR4H8ZteBlCICTB4CCPNod0AsDWJKZxqolAfxXYgGwhs9kwgDRxXlJXV5DPM8OxWCHTHget6cWZEvHPEIwBBtnHZGNLOFCu+BZrZCjShQrBDBAYK+Uparg/wn8BviPisy/vm4hENEgHdS5yEj+1thxC/yjvCFr8FhVZez4u0DgR88dkVx1gICvYQjgBVQACRZ2KwxgNUtZVQABiEC0KEjg/XeFAdC4a+aC8r7bHWC+oxBEROAKZG1LQkYIweXI/1Vi1HWsh+PVIKCSUbV2pFyNdH62jlad+/WxqcPkUHD92/f6d/sfEjBGvjtVZaiTlsx3KMCfGTqmnc/rxMsDIHcVB8Mb5vRRCA9cG+EBETx/qc3Lf5YmQO9KAKoqgCUFI0k2AgI+Kvt3EwA0DGBl5FY7BN49GGMI1kO/4qlHJBFZDCI5HwkZVCRIET/3xeseKaK3Qv6Q7x0oEYCwzgltrLEVbjqV16zqwt/vMuPyBPDfnPbPERPasfFeV+hK2aUEaB5+duoosn+eytOhAFgDn3ZyA7LOiiSUyt0W51QAHhgGqHh9HuPTlABrsT8TsmJmFvbakSsiAANccKLEq8q0QOQig2cDXLOL9v8rLyrDVycJWr9ZFCtGyai1T5fkK0cEPIe9c8+qCJhDWh+F864CeivIW+fY8MjTAt7fSI7h9VsEcMzyfxH8L8nlGnklfRYJWGP+HxLH8LV9WImfSG8S4Afg7SNkIAL/zv4BOyScBOCJwgBRRUCXElD13pDQQ2ceADInAPX+kYsnKr3RSN/4k6zVdUFlJpyNwoWPKgcDPB86iEBVQfnmXU+3j6TqFTW6iYYYWf06ZmkfVWgGeL+DBGgjx0VqNf6Rt+8NHIvOO03+v+SeHCNt7oN1P5MsmE0ItM63TPz/pcsF34kAIO1/kb4AiBJwNu6zJaP9R+zSq2oegCQJQJYIRBdPVfmpArypGPzJENtRi5DfdCQWhwE83u1hWP0NvOtlbXFdVQBE7FHcgp5LnzF94D0QVQcpw/ySCLicQ5nZJIjqp5Xxad4+2pAMWQuya0uFAHiTH72xzxER2MkjsRTMlwf5tyIAhemAUYMgdJHMhgQy3p11ch6i12Hv5gGI5FpvZvsDZLz86sWEJvqpz5tGDGeIwCPJQPU47fRfiMBfxA+roNeTlw8gEbGcrn+kw2MW+D1C862891N4AGSBSptahAhoY8dFsHDSTxMALQ/AUwE+QCdlt1kQsn6V1q1nSgB8NwUAUQQyC9u6uGkynIg9RrXq+Xt/83ewZrBXLno0FFApz7qdE4oeFw6TAz8zvT+JAKg83EEGRLDyvCoBGOBxFEN1sjzpyn5G3QvV80eJ2yNNvaJjgCoAkTIwEmtR5bpfG/kcCuh780dQ7z8iACL5YUAoAfAUAo8IIK2CT8FCl1Jcv15WEXhJAtCQDGg1YZFAPvbCAVUiEMlR3sUZtQRGL1akORDq+aNxzQ7QT73Gkv0XIrCCDty7IBEcRkgEUuqY2Y4uXt55710jI/E5SJ7D3/e+vqfko4m8aDInCvwqyW6oCsiMHLfq+zOef0QAVudCOxbILACUAEQVAVFSYMXzF4kTmJE1WpLnNQnAD3j+mgrgDYGxfkBLDdD6aKMXnfWcsUkAIrlOHHBH2XXErB/Nmt34fyT7Gwv5UErC9C+kZ59nyW1LK9or2On5c8CYtgX+I/l7XujiqST2ZSb5dXv/1tjnb+eH8xtm6tGjSX3I5FGvGZGXbKjlEiBrSjUR0AsFoGSg2gfAAv9L3nD4z28gAFlVILOIfV4gKxlYgf/YVALWHuxdBABZBBAlIFsZ0NlBa4jfUMf1Zi3Z38PdjdKvChmAcwOumJkMkKyo7zl9by+kkgltiOPJD+X7ICG6zPEeifsICVjVgSgZESUG2tCx3SmjCFhbFUbWd6+UGGcUgIgMVEsEd0v/mAT40xYkA0bNgLxpbuiiNZOBCglA4n7HDQQA9QQiKa8K8rvxtgxB+AT7bx7/1NFtBsS7LuwqGYjO6+7BNSMiCUDv/JCErb+NxD0jEGDt8PyzJGAUySKqBCBEAPkt1vf+j/h9RqL5AR0KgJcMmO0FsDvWPNshUKTQ5+TZEgBfXgFIVARkQwED/HFXRWBNEPRKgA5wYRgFAjDAxQC5cDtGA0ejalFmbXr/f86DL4/NHqwG8ErHuEfOiR9P+Blhq2zlOI3kflzJ53kgjhCiv539pg6AY/791/vrey5Dg8xQwEqanCTS4cjPnuR/ij9tNEP4j+VvrTjoqi7KhgGicECkBGQmCXZm/r+kKvBbqgAsVcAiBuIQgfWHXptziOjVAh4ga724NRUgIgBdndlOyYUDMnW2j/L+I0kZkdDvPj8rQD2aj9f3HfsKYp0VC1fTcQnJgQb4ayVBdN+5ljyynW2fO5xrcIg/yjer9P1HfPkfif+PwjqiAfKH1BICvVwAqz3wznyJt+0B8BYEYDMUIIYq4C1E2gmghQOiaVvW/Uj6r05lQ5k7ogKchQtp9wJKef+AkvNoj/+RAO8CeybZESADHft1fb2kh7Vvl/KcsX4vC/Cd/YDCANM6M5ad+Ha9BYfKA/6IBESkJPL8Lfnf6i56V5dRNB/glFpCYLYbYAT6qPPyMvL/uysAyIUX5QNkfrSVBGgqgEUGNODXbkfzALLVAB4JiMZsVksCrQtop0ueSNwH4FVYvJXs5iPK1zyHS/OIDVBHFKNvrysSFoiIKfv3Lc6vgXsT4KvAuoQ+onBARLY0x8MDUBFs6ijqma/y/6piHlKrLEIHjqEqANIuGJkJ0JG75J2/7APwQiqAFwq4iwSsoYHVOz2c21fC+8+qANVQgEcCRO5tCtTh/Y9nPp+NOPJlSd2aBx+0qPVA/c5jM/KH4kLO5RYPP/HcKBzwrURQIQLamoMQgeg4auQekf61FsM7pcVRGDGTD+ABPzoyWNsvhMBkkv9IAF6EBKCKQJUEDOOi8ti7Bf6HowJE5UDZC9dTAXaUAGny/ocRt894/8908Y4IkJUac1RWr4DvnRUGFRUE2Z+R/B5VMhCqApOaorUMHgUSYE0XtcgAMlvkNLx/r8mQd/yzvUW8CYEoEUCmCu7MBNC+I+L9v5T8/1YEoLDAoM2CKiTAIgKIjJgB/wPw/rO1wV0koAP8IRXA8f4fqgCgOYWOLDwKn5EF9upzxgOuSRTU7/D2t8sDjWqB6Df3SICApADpIqrNFrGmDFZmjIjgFUXoGGAU7E/BB5o9um8JFYAnVQE6ScDqkR8NRGA44K+N68yWA6IqAEoCsgk3CPhrpX1jmgCH9HGottpNAWGmoMDy6ouliLvgXnl9ZUxyBfTvAv87QgZWeGBM5AAhASL6GHCURKFzBQ4Q/LsIQEYFiPr/I0OBMl0BPS+/0iiIBODNSIB2kaLef4UIzDO5tW2X+PW6GQUAIQCX1CsBrAtsazzwBJbRwBpXBWjw2re9480Wwh3A2fVdkDkUXcSmA/zbkwUNNUBAEiAKEahMH0XA/wLB/47GYpmmPh+AQoA0BUJylUTqSYEvJ/+/JQEAf7QsCbC80m4ikAX+XQXAOokRDyKTCOiVBcLev9QT/7bla6MrXutnSF8/gB0JvYsUXE2fnf0OP0EEVkJpkvuABGhEQJs+egaAfzhKngf+R9GRyDoOWSLwAW7LtCxHOv69tff/FATgpl4smf7/GSUgNW5WAf2ZDERZtyvwz97+JXH8H6kVvpIX8m73v6vxXPGAHwaWdTHekPK7POcOELyTDHR+p2vz9btgnyEBmePmthA2SIC3nmihAS8RUOsi6oG/1gBIGgmApwLsKAJRDkA1+a9tmNnP9hr73QrAo0kAat5c78O5CDUSgJYBZjq1oaN9M+M206N71+M8ef0Z4K987iNAvMv73gX90XwMupSBLgVglwR0Ey6LBGhr0bpmWKFDr3RYKyPWGv8gyX+7BKCTBHi9/6PS5UrL8sj7f9n+AO8eArgk36ikSgJ2KgUQMqB5+Bnwr/YEQBUBNBSwk2mLxPzdJjiACnAXkHcAftULzTwHPm4ZZaV4Pf6E998WKplAPuolgIBG1GNESxj2mp15wN9BAESwfiIRCYjIgZVc2DHox/o9mAT4JiQAnQ/QQQK8SgEBwd6S/j35v9I3HLmoM3G2nUU+G/MPJ9oFMl1nX/5HAj4C8FGL3DYFwDju0PjlBFm4C/TbkiQDEoCokh4JiHKJIuBH1pLq2pEZMuYBeWYbOshMJE7+Q2cAvHR3wN/aB+BOEoB+hsW+D+fxqFEHwt7Rhh4VFaBjSFDk/YskYv5Lid3dXvp48HuHgB+Qm524N6ImmY8VpuZ1k4DKsbhTtdCO3zBIgHXtWwnDVvtwtPRvt6NohghEZCC6XZ1Vgkr/LZVMJADPowJ0kQAByUBkHjGIYnVIDkC2GgBVASqJNhHQi+P9i+Ax/y6Jvrusbje+nBl6k3lM3eaRKKC8zdzmqAUDUAvKBEAjR8ZI4J11R5Skv2FsR0mAt15YlULZDqKV/KHIaYj6ieyAfXVoWQbQ364x0G9SAO4mAdV8gCtQAiJigHr/aFMgjwFniYDHsqMLam77OwRL9PMGsex453clh4XbNzz4tNyt9c/403gpPom/HvMLnGeQXlSDTojw7bVGX3l/hHxE32OsiodWdbLsizepNFozNCKQTRrOrBuo04CWEqOEYHdYWabcryLxvwxRGM9epvAAGS672LslPg6DRsG78odcwF0qQMTyvT4A6VbBSu//CwSGuzzx27ZtyvUw+CkdB7uS4NDF8nJk/51rOSP7Q6QIzFUIv6+nlljjmY39jxS/u9eOyPtH1gcPrKsefrVJWXVa6VtMBmQjoHuVAHEUAXQ/fpoAVEiASF8fAGS4z9wd8FEgvxVPnz1NZd+3OtBtgmFW8SiB4bSflwOCV/E3a8kFAL3/K1grPEXQChF464y23fLwRfarhjoUABE8HLAL9ujI30x78krOEgnALyYBElz4yL5lycHVQAA6SIAARCC6iCqx/hGQgGpZ3HbHuCjrvhn8K8AfyuFFMIwWz2v5rCsBvB3gb95OfN+ol4hFAqKMf4tArETAIwGIUhARgKoCEJGAqGvfKbnuo1mvP5L631r6txaf32Z3dxvzpLvoYkRYvNxwMVdIQHYbJLNdtZPTOqfvkNTVx8CkvMxnrvH5bEjq2zbw/dDzRT13PvMBwHMLWoSDJL076v+tz0evk2//l/7wX24DxMPbf2TdQdYk9FyIOolWSEAG4DMNfiInBVqTSABIAtCFO5sXUCUE1v0dAhBd3Ajrl90LLFvD/1lvDYzM7ewdj8TVw8cKmfwDPfcMsM/Gxb1zJ/L8L4MQVBfaKMHzFvBXPvtKgv+1AP2lkKadPIjMmtPlLOyoAFlAz3b0I/iTAMQXszM98A4SgCoC1fsZRp8lAtkFL3uBaSpA+JtsAP523Djpmbe9NtiX6v9WBQC5PQEeXI7leMkdVREQ0TEAHCXFl/Hdr4AkVUhABPSPIgAR+Gf/TvC9M+BvbXtL8CcBkC+NYn6CBHSQgewFjl7ciHSbbZ6RyehPzYp34ujVhLBwoEvBkx6Bx1/29hvAf5cE7J4vFhlwzxely553P9sLwdwHgABAcvjynaMQgXdsOtaiuwhAVgnY9fKRkeSZJj9v2x+ABGDyJookIAUczWSgAv47Hh1ykbRIvMmM/pEkAKW4uRQl9fn5U119B9gj59AuGagQgFJsXPx4OOwJG3kCXSqHR1gyw7RmAvDlORO5qABShgh0gT/yO6PlwVWgj457Ro38Fd7/v8ZWwF/JwP9dfOd5Pqpr4HqhIkwzW46Y6aQXndhZMoC+j0rMGrLjq+AfAX/431IIgnnxVbKBgv9PEoDdEBG60I4lL2S33PFKervaKF60LFjEzvivXFve9d4Z9omcgEovkS7Avw38/5/Lv7YDTQKgeJ5/ftg7SIBIvW9A9FnR/3WRybLXa/N+6vMUL1kcD3vbq/cAEgT+sfnZLnHYAP9dAlBJGk0nxWn/P1dXo5oAUgPAYTxVgrN+Fw/0vwF6oRlSNl8iKknumIdwgfu400sEVVZQ0G9RKd/BSAB8dtdJAgQE6iwoI/uYHqIDXATX5nM98E+FWZTs/zbQVDz2OyX3nf/Z29Y27XtDao0Ru94uF52bBiV7BKytobsSHP8SlEWu10hANBfjMpyQIVIaUINex8MhKTvev0eWqiETkT7Q76pCeQtyQAJwPwkQyXcOzKgBAnj9w9jfnZP4rlaYY5ngtxvPr4Bm6XGQLKDKwh2gr+7vUgmTVgE+EXpp5lNNkHMX7Ql000QA+D5onXvkvX5O2tsh8BkloDpdc+dxxBHIVknsNBuzthH8SQB+lARYIFwJDWQBOlIjdq37QijF9Q3w2gbM5X3NhEzneZ6i0CHph/s23/+zn99eB4Q40h6yQga6PLnSeee0MixVwxjfaf47RC9d+6Z0BcOSIi+7SxHIXJfX5j5WVKGdviMEfxKA20mAOKDvkQBpBH3Pq7C8/9HweTsgb3mVUOy8INFnKiu6yjIj4O9QJ9z7AZkRqQ+CCRf9KZbfPiwqOBd3BhuZ30/J0o/q1T/tWO6b68WS/4Ac6ztn1qM5Q2g+QAbAq0mkiDryq8GfBKCXBESgH3nld6gB0f50KwKZxRQdS9uV9LbTfdF87uRVRwpBR+ghRVYU0K+Uks5Ky3pNZDy+6498n5kiqYKBkm/gLt7AIAM489/Y//maXaX/Y9k+kwBEobP2pTrFboe0Z5WFjmqQndj+Vtvp32AkAI8hAcjFjqgBI/B+RmJ79Xm7XkTmeSH4/1ncLQ87Oz71y/Y/Nfvm4wH4WwC8C/Lhd1mOxc7sCIuUIV6eClATCcg2crES8O5SopCuf9q+HoYCgJzXmUmC0THvBLkr8fpMQ6juctGqzI+UJb8lQSABeAwJQFh+JjxQKR1EgL6DBKDvfYkvM3d2TswOVdIA/tvfRBAk+ThKCmDA/yRCG4pGJRFQy9APS7z+vOjvX6AK7Hi68GTBJfF0/U7a94qy/VePX/P8x1Si+OUaV6oAvOu5On2zI9y4SwKqhKAD+H81+JMA/CwJsIBfEuDfkTPQ7eF7cdiIYPz16p2GOR2AHz4egT/6nIAkVL8Hqja43/tz/6cqgBQBWLqgXIs0f0frV4sIqIt9oVrAmva3XpsaCdCk/9MisQrwf7nWp/4FWXJfiYVnwD3z/DuIQOU2wZ8E4GVIgABqQIYI3EkSrJJCNA/CXYiDBD8rDp8hAQiwH1XwFz2UILLnqX+T+ZVQBQT8giUougqAsVCHoG+EAdBBL56nmwWvOa/A+n6Xcj2un38A3v9QiL1HAkYAQFaPgUfkBWTa497RTnw3q//Xgz8JwHORABEsNyAC/x3AR17r9RFAQhzY6uJPyssAvPacYwf8gccyfyWlYgZ9J+aPkpYtAmBI/xEJ8GbBH5EKoA3R2SACV3DdovL/GXj/3m2VBDjX5hUQAu/YtIFk4T2uwmOdsf0LXdt/A4aRAPwsCch4yxXwz+QKIA2JRPzuYUhuQ3hInUl5WuUA6gGPJJjvbCspBTskoAL+QQJlRgFAEuS+5QH89+PPBDHQ1APL23WrBILSOuu8XYFfs0MhAWM5Vy3Qz6h7neGAHTWgWhbYSQ5aCc1xHNdvGpBHAvBYEiCbaoD8APijsf1d4J+Pp0UCTE93TYIDgPHQ7k+gejjPPxASYLxP6Q/18q398ZIEjRCFRQS+ndNLnT9CAE4H8N37S+hABTpnrHDWS70Aj9yr9Y88/RXov2wDEwF3cyYqBKDaaCjroXd5+PT6SQCeggTsqgEIMegC/wj4L2PbCL4n1JxFIQEjQSQ87zgE9j+vPTaeg4I/TA5uUjlE7HJGmAAIHv8/JyDXSMAs/39uOxxyIAs5qHq72nUXdey8DNAXy+ufjvOl/BaVqh6UHGSPS8fn3kUKsiBP8CcBeAkSgIA+AvzItq7tXtWCtpgiREAC2RmWzBXQtMD/cLYd4PO/3P6vHZLLKQifo3nxCilIKQ7K68sEYKnxF8ujn55zGv+tbf/qs6ejArixb6NxETqwC1XKRAypf/n9Lu/cXgCpWhIoAUG7iwDskoAO7/7KrNu/FbNIAG4gAf9e5+d57oQEItCPtv0E8HuAXz2Ws+cUEYVMcl0I+BOAH53EIAHUKJCXEhVX4FfyAf7+/0Szaare3/PNKf3zFADk/5pB/+nlH6KHBSwisO7fAG9nwH8+ViK21B/9llrpYgb8PTKQrQzIZPlnn3P3hFEI0H9bvJ8E4EH2uSg2qAFV0Ee3dwN/JKGWJpAtdeoW2EtAAjwQ1v6HRODfxxSpfyUS44/nGoFyiSTMXmUQdjgkzgmQtW/BXIuu1ciDffHPCahnkPcIwDcSMHn+yMjdKCxgldpa52XUaGh9Py/e764dywHvGOxzRyigI1GwG9xhNCf4kwA8RA1IkAApEIFd0L8D+DOEB1YKjE5t4hGBIAcgBH/l9rdtqFKg5AygoA8ThomQVMiGLORAOx+HAxpR5n4E9mu9/Ar+s+c/Fu//FD0nQCvf04hANHfjmnNSjCoCr8ZfJJmzAYD/BXj+0XCeR4UDdt+nrWkRgZ8E4FlJQASImZBBFfQzwC8Sx/xbQwJAUuC3HADBKgMQ8HcfWzz9Q/TEwcPw1CPQh4nC534s3zdbiSCCTQMMy/+UZD/Ly9fuf8bC53PokyDM7z3EbzQ0JNfP/ovX/wn4Tvkg5P1XOhM2AGXUC+DRpYGdoJ5CcoI/CcCrkADZIAKRkpB5LVJ5gCb+oR7/cMB/zqr+tl0jAcp/NC9gBfhjAtaQEIBqQyZvIF2WOJMBwSoTouMHg/8CwJ7Xr5GAsRKB6f8M/kO+5gd4KgQUz196/48AbNweHZ8KxCfoOArC3cRgJQId7YKvxn27DfQJ/CQAT0MCwOTAXSIQefgoGcjW+WenEcKqwNyzPiAMLtBPiW4ZkF3/PqX2wyEKM0lAEgwrpCBNHD4/V/DOgCUFYJHlL8DrP5f9PSeAn//OP7/hSgrOAPwvCUpgDeCHr0Eva98o4bwT9B8dBqiC813vS/AnAXg++/dE/PeETJCAzCJUfQ7q/VvAr5EAZBoiOjXQHOdutAvOTBFEQV8F+oUEdBOBDhLgViLMOQNL2Zo7DngBO6Tu34v3f/kzgH8O58zgr1UgnBlSLlg+y2V47nCVwE1evwDgLVILA3QqAI94PoGfBOA1SEBBDUCIAOL53+X9CwjmyHfMNPsRZ2qgCf6fHlmhuc4XwI9IgEy5AaLnBxyLZ65VC6DAniEDahWBQZQsEhbF/9emPqrU73Qo9BSfcwLVtefAEREBpZpheB79dI5VWmjfDfgZ0ERIgEci7gbu7eP4L/BPvxmNBOCt1ADU40efm+1FUC37Q0hDKVHQQgllPK5oHqVRYnigf5+5ARERmIBeqxo4FkD+BuBKlcFujoF23yQAzrnjEYBLAX60PbEoas0K/iJ6zwCR7935ZCENJsldG8NMGfk7ffkrr7kSoF4B6EeVAt4G+DPoE/hJAH6LGrBDBrJEACEBqFePtkGOiIHVIXBexLUQgVc5kO3WhxABs4JgKgs8lhJBN1zgEIIqCfjcJoLnAVwOUM0tfDVwnv8+HPAfgPcekYDhvO7btbPZES47qS8CfmQbQh4yr72Sz3ko0NPbJwGgGlADeJQ0ZCcUSqACZMhBuykkQAV9MBSwArn62OTlz7K+mycgX8sIIWBfCYF8DTFkCAFSDYB4n5d87d2vNfJBeg+o57BTe39MJCAKXajnPgD8KJBWRhHvkIMr8bloMqBHYH4M7OntkwBQDXicKoD27s/kAFTnAVReu3p+67S7b2RgAqe/2wJSgBCCuWMgrAwo5AFqYASQgqingKWUuAqAkYE/N/W5xOneaEVxDPC3gH9NZhQxsvmVmQCdHv8VeOJIdUIVZNsa5tz8ngR9EgCapwb838q2RwQqqgDq+e/kAFQ9/y21YOok6JVjRcOE0MqBSBmwKgSsVsQasEOdDK2cAgE6AgbnDtIB0BqGExLUpSzvMG5b3fO+/W8Y+IKM2rWGEVXeH5Xx78wBuDP+T9AnAaBZJGC9CB4YHqiQgF3v3Wuy0kYCVm9yaSI0kiSgUkaotRFOEQKHGLgKgZFEmEkEzBKA2TM/kTK4BfTncIIs96NJiRroWwl8WS89M4mw8v4ISaiQiQ4F4Tbgn9c6gj4JAG25CJpUAbSU8K4cAGTcMbqvGcXBApyxHGe1r4AycKdjgp9HCFQCYJQRQiRACS0M4LtZZGyW568/BddrE6C1e58aglFK+Wagz4D+mlMQ1ednQTcCdgmIwaO8/yy4d0zm2wJ7Aj4JAO2xqkA28/4ncwC8PgRbYsACQsNoK2ySAcHnDHhKgDdrwMoP+Ab6gXpgTik0AFUETwKch+7Mvfm/NOyZCYOjIszAPxbwP+R7KGEohC6b4Y4AbwbsK38V7z8D/gI8tysJ0AV6gj0JAK1ZFdggA5EHnpH/M30AIhUCJRNl718jA4tMPYAmQysxEMkN4cmQAfcxNCTghAIy7YAtEJzb8kZAMgO+BfyXfE/us0gZAnrSBOCncRslEDskoRKv3/XiU9P2CPQkALQfIgMbRKAac99RAZDFJSIhVfAPVyej9SvcZGjdLthEQmRAUXZaoVc+uEsAxAC8T0XgWF53GF5/NBp3lfil8FtXvPgI4KPnoa9HZH+0ZS+qMCCePoTirMknAaA9ARnYIAJZsN9RATJKANqKeL2dkVqvgHwMjRgouQNa4yFZgMsEukTFQXZKINIbwCMAEhznL1iwAP866Ody7ofHKNFT30rey3jkZ9H73wF9L+HQIl/i/B4SqAhVVYDATwJAezMiUB3hm1UBROJRqxrwiOgDWDKDhqoxU0Ug+F5zvoQNNCIQvSFCDDpJAKoCRL/HOgPg9EBelCZMSplgZYiOB6Io0J/J55wBOTgTpEAEyzkQ2Ss73FbJGkoraSQAtCdVBBDPH1EBPKKQGXCEev3DWUTF8JosjyrtIXkd7ZKDhzxiIOj7gJ95SL4McCVjmhoSJU96j2W9fUl6+Gdx21kkAdV8AQT8xSE80XlfPc8J/iQAtFchAn/Ktbra82aUAiscIJLrB4AoAJdCBBDvv9IONbsAZgANbVjkzTqwxvyiXj9CADzFZsj3LoBi7F/0Xoi3jybeWaCcAe47SQBKDkRw+T9zPzy/Cf4kALQXtE0SgCQKIv0ALBVABBtfvIL/ALx/tHubGJ6kJMhDyxAVIwFxOERh7XYoDph7pX5oEmA0Hlcb8pMlFZm+9hXv/7yZBGi3MyRAkuewdJx7NBIAGklAhiSgOQDVXABLBRig9y8g+EfbUPBHXtv1e34jT0GGvBfbH8Dzvhz/OfkLaL6TPb+0366jdO8CwblCAlBSgYYgMnH/Sve/1LlJ758EgPY7SMBuQmBnRYClAlzKZ3b/IYpCpARESWmSALXM2ORHnEti/DY7wF/N3j8NcI/uW4CduX8C+5HpISBSUwcyCkrnyF8aCQDtF5CAqgpgvUbz8CsqQIUERJ5VpmZcEkBlgV5GGveIgVcZYYVnKg2aoha1iDePxrqznr4G1BEZ6FIBIvCvNBKKvH/kN7p21wyunCQAtN9FAiqeZlYFyFQDeCpA1XO6+6/7MwdIBi6HJA2JkzEHQNKixjVIolrF2/dK7CyQ18jAIwhANt+g63xCgf/WMBWNBID2utbR6W84XiiqAIgBSivAdYHtPMveuq09X3t83XZKX8hCwMeG4VVapXzeJD0vC72bDJ0O6J+Bh6+B/RkQgGycvhoSQCoIogTAivefHR9MIwGgUQUoqwCROiCClQUOcFGLgFUDcw+8kfeKSIFFAixycwXPm+1w9u0w7s/HbG3XmwGWLkDPlNOh3nzmb6eE79z8HtlugsjxlqL3764TXC1JAGhUASLPHykLjEIBohACz0vtntDmkQTr9vpccW5nwP5I7LP1uhn85059WrterceAlyxWBXgPuD0PHknm6yAAFfBHQwkoCahOD8y0D06TARoJAI0qgICEIPL8K6GA3TAAogJEIK+9Vpb/FhFAPPusHQEZOJfba7te6/fMlFRGNfCn+JJ+lDR3bv59SE8i4KM6B1YILQGdRgJAaycB3XMCqr0Bonh0pmSsQgI0wB+G9295/rf/nMG2ed8ORwGIyg5F8AY7J+jV7wD9h3P/o+j9ZyX6XVWgmuuBev9pgkD5nwSARkNIQDUUECWkeYtWlQDskABxtkVAP276Xea/Q3n8UG6P6X7UErhKALLA/QGCOwL60Ws7kgB3chyy7YKR3z8Cd8r/NBIAWkkFyJKEznwAAYDIAyYxlIRVpvf+R8A/Ao/b8tJQYLf+juC1h0MErNa93jwApN++B/YZwK949R8AQciEALLlel0hg+oI4Tbvn0YCQKNlVACPBIhDBkTy+QAjIABz3NtKmvMS+CTh8aNEJQPyB/i+3mvXbVo/gC4FwJLyPwAioIG+9/9Dea+PAtGoJgBWSUAlrJCN97d5+ZT/SQBoVAEqJCCjDmjEQAIi0JkLIKIn7WmEwCMjyKKLdATM/B3Jx8ey3VMAkO/ldeKzwN0Db/S/RyKQsEA1BNBFAnaea51LVe+fIE8CQKOlSEBGKYjmAHghAQtgrUVsLXNDMu6tRD1vOA5CdjRw90C/2hxoBMCief6n+CGAHQUgIgCnAvofSTKAKABeKGGnT/8jCEEG+CPAp/dPIwGgtdpOKGAnKRAB3DUMEHnJp0EG0Ol4WeCvALkG6vOf9xyNDMzHey4H1MB/3EgAKn8W6J8BgUAUgGxS3k+1k9bOr+xgKnr/JAA0WlkFeBQJQBaqKBywowQgwC/it8YVENA7AN8C/kO5PQP/KXgIwDq+GgnwvPV/isB/Jp6HKgCV+H+VBIjsgX+12Q+NRgJAewkSIAk1QFsMtQ54USlgVQ2JPHwJAPtKPK6B/RE8rpGAqA9AVMmQUQC6vP+PgARYKsBd8X+RfaCXDfDfGfRzedc+V0ASABqtah0kQEA1YCUHc5tbrRXubEcA/JEHnBmIk/XiI+/eIgJHQAKG8j9TBigBcK3gaiXureD9j3E7IgGVEEBX/F9u3I6CPyL9R6SVRgJAo7WpAHeRABG7lbAkVICdVryZuH42no948Mj24Wx7BAG4pJ4D8E8DKeiK/+/I87vbZAP8y4BP758EgEZ7dhIg4ocFLBVg7Q2AEoFKHT8K/Na2EwD7ARKAERCBCPyt9syIAhDlAVjgnskPsAhApADsDuW56/4u+DPxj0YCQHs7EpBZwJDSwCgE0AX4KPCfIIhntiHgf0iuDNBSATKJgCegADzK++8E/47H5CfAn94/CQCNtmN3k4DI8/dUAE8NOBu+dwb4Pe++kxBE4I+EAET62wGjyYA7VQI72f8ZAtB9Owv6SBdAiORz+SIBoNF2VIA7SYBIvkeApQJkScBOR75T7Hp8Lzvfu515DAH/w/H+u5oBdfcDeAbvvwLmUddKkR7wp/RPIwGgvQ0JEMk3CppVgCoJsCbsISQgAnsL+DNkACUGqPxvgf8wQAdNBEQIwAl4/kj5n6YAXA0EoMN7r4L8beBP758EgEZ7VxKglQhaJGAE4O8N21m7+XkVCCjwjyIRQEhANQnQA7ZVVs+EATKKADJHwPP8u8D/EYBP8KeRANBelgRYAPIoEnAuIO6RgJkMaECv3bcIwADA/wSB3/Pks15/pQSw2g4YVQEi8Pe8fsv775L/RezBO50effaxNNjTaCQAtEeTAEsN6CYB3gLokQAL7KwkuBX4j4AADAD8EaDeJQQZ738nB+ByvO1oYA8q80dTArsa/4jsN+K5C/AR8Kf3TyMBoP0KEhCpATPQrqTAIwSr5384wL9uQ9SG0UAEsl7/Cv7aIKAdAoAmAyITAk+JW/0i3r/n+Z/S24VvB9wRwCf400gAaM9BAv77J+d5VvMCNC/+LhKgAf9wwFgjAt7/dR9HQAZGgQjsgn+2BwBKAET8EMBlgDUyKhgFfivpr5r4t+v1V4F9N8ZP8KeRANAeY9d1dScHeqV/u6ODLTVAG44jxn8N/EdAAKwRvCgR2FEHEO9/hwCI5PIAIiUgAvxI8t8d+CMFErDjxVc9/TT402gkALTb1ICbSIBIfnAQ2ixIIwKWEnBNgLmC/2EQgDnBzxrBeyifPUAQ7wT/bgJwOR55pARECYOn7Cf9nYL157/D2+8Gfgj86f3TSABoz0ICNICxvP+7SMAK/J4SYJGAYRABTQVYScEuMUC3Zev/IwIgspcHgKgB6G006a9b+n+EV0/wp5EA0F6LBDTkBUTJgd0kwCIEh0IQNOC3wF/bpoH+MIjISIL5Dvh3E4AdEoDc70r6Q8r9dghAF9CXJX+CP+3bOfFv7PaXAxXPgpstUSUwgG1aaZ73X8tsj7ZHEnnmOcjrq+9VIQeV8r9dAuCFAVAikPX6q6N+Uc+/IuujAJ4BeYL/z65tVABotGjx2cgLqCoBkQpwBcCmKQHW3+UA65UkAKcD/hl1oAr8OwRAHO+/QgI8cnBJrdPfIzz/R3j3V+b64ypEIwGgkQTgn1/523ltlhgghCCzrSL/Z1QArypglxBE8f6f8PzvBHmCP40EgPZ6JADMC9CSA5FeAcgo4Sz56CAGaLjBe/4BKAWH9IQhRHKtgEX8TPpT4g6BkZzfCfynsZ93eP5Z0G8B/uM4rt8e3qWRANCezBr6BWSbBH3hIMHiOgLAz5AB2SADInhowFMEsgRAJB8CQBWASAlAVQGkuU+l1r/T87/Dq6fXTyMBoL2PGnAzCZCAEGTIgAb6HhGQjW0VtSCbOxB9ngX+I1AAEBJwJojAteHx313uhxKBqrefBn6CP40EgPZSJCAREsiQAA38KyGBFeQ10L8KQJ+9XyUIO+DvAb+nAOySgIgMIP8rjX46Jf9d0E8DPyV/WmkNZhkgywCfwUA14I4yQet/VEpYeaz6HrvqwB3e/w4B8PICrk1vP/L8RbDRvhXg7/Dm0wsywf9H1y0SABIA2guRgAzwo9vuun2nOtBFANAwgAAeegbskfK+O7v8/SjofwL/eZ5cOGgkACQAJAEACehUBbq37ZCCDPiL1JL/KgQgUgPOBBlAPf0T+HwJiMAO8GcqTsr26fXT86eRAJAA/EYSgBABixR0EYIIOIfshRtE8JBBlhggnv9OCEASKkCGEGS9fpGecr8ItG/z9DXgn64VLhi0sjEJkPaMpKwzOVCkViWQ4iziJx12EYguZQAlHgj4Z0lANj+gIvFXRvtmFYCHgf4n8BPwaVQAqABQDcgrAR6g7YYKulSEqkqwk0OAqhTWMb0AErBDBCoEQOTeUj8E1NsW1Qj4SQhoJAAkACQBtpeKhAQqRKBKBjqJAAr8FdDPtAK2QBQF5QoJEOlt8LML/O2gjwA8CQCNBIAEgCSgrgZUicAOGegkBju3M8CP5ABot7NqQIUYeAQj8v4jBeAhwJ8BfRIAGgkACQBJwB4J6FQH7iALXUSgCvxdBEAAz7xCAkTu9/pvBf4q6JMA0EgASAB+7e8FJAd2qQGPIAkd6kFHJULmu0ZgGCUERopAdVvk9SMKwK3A3wH6JAA0EgASAKoBdRKwSwQ6iEE3IehKOIz2uZsERMCOevp3TvPbAv5u0CcBoJEAkACQBOAkAFUDflI16CIEHdULWfCXAFyR/2jJHkIkOr3+UmveR4E0CQCNBIAE4Ff/fpshgZ8kB1X1YIcQZLz/DBG4NolANlyQIRgV8C8D/yPXVBIAGgkACQDVgH014A6CcKeaMG7aVvX8u5SAjHePAP6twH+nvE8CQCMBIAGgPZYEPJIgINvuIgSZz9kBfxSgs2QgC/it4P8snflIAGgkACQAtOn3TIQEEKAbN27/KUJwJ/hH4LurDEhx21sBPwkAjQSABIDWQwJ2iED3Y9kwQmdpYhf475CATk+/DfyftRc/CQCNBIAEgNZHBHbJQLeqsDPnIAv21QTADMDuEIGHA/8n+D/rOkkCQCMBIAGg9ZMAFPw6nvNThKAD9Ktk4I7b7V7/s6+PJAA0EgASANq9RCADih3PyzzWUWmQJSG7KkAHuN8K/K8CriQANBIAEgBa4rfeJAJZUOwiDtWOhncDfgcheATQv43XTwJAIwEgAaD9PBGoguadKsEoPu8OApDprndt3v9VwE8CQCMBIAGgPRcReAVCsKM2dBGAbkDfauP7quBPAkAjASABoDWeAzeQgSqg7iYX3vHY3SpAF8C/PfCTANBIAEgAaK9HBu5UCe4uX3yEEnDXa94O/EkAaCQAJAC01ycDP0UI7gb+LEBfNzz2lsBPAkAjASABoP3QefIAQpAF5keA/egA4SZCkP7MdwN/EgAaCQAJAO391YE7VYJHqQBX0/NKY3rfdZ0jAaCRAJAA0J7sHHpSUvCMJ/vV9JxfB/4kALRd+x8eAhqtfxGe58TfTAquBMhfL6AAbIP+bwB+Go0EgEYjKdghBG2A+0MkwTzGBH8ajQSARvvtpOD6AW//YYBP4KfRSABotLclBQ9QCe4kB7ch8nycCPw0GgkAjfZ2pOCB+QS3AjZBn0YjAaDRaM+vEhD0aTQSABqNRpXgZwCfoE+jkQDQaLRNleBZSQEBn0YjAaDRaD9ACh5FDKzPJuDTaD9jgxcfjUaj0Wi/zw4eAhqNRqPRSABoNBqNRqORANBoNBqNRiMBoNFoNBqNRgJAo9FoNBqNBIBGo9FoNBoJAI1Go9FoNBIAGo1Go9FoJAA0Go1Go9FIAGg0Go1Go5EA0Gg0Go1GIwGg0Wg0Go1GAkCj0Wg0Go0EgEaj0Wg0GgkAjUaj0Wg0EgAajUaj0WgkADQajUaj0UgAaDQajUYjAaDRaDQajUYCQKPRaDQajQSARqPRaDQaCQCNRqPRaDQSABqNRqPRaK9j/yvAAMqP4BiPw+m1AAAAAElFTkSuQmCC", "components/weight-wave/WeightWave.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyB0aWNrIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBTcGxpdFRleHQgfSBmcm9tICJnc2FwL2Rpc3QvU3BsaXRUZXh0IjsKCWltcG9ydCB7IG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IHJlZ2lzdGVyUGx1Z2luT25jZSB9IGZyb20gIi4uL2hlbHBlcnMvZ3NhcCI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMgewoJCS8qKgoJCSAqIFRoZSBjb250ZW50IHRvIGJlIHNwbGl0IGFuZCBhbmltYXRlZC4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogVGhlIHN0YW5kYXJkIGZvbnQgd2VpZ2h0IHdoZW4gbm90IGhvdmVyaW5nLgoJCSAqIEBkZWZhdWx0IDM1MAoJCSAqLwoJCWJhc2VXZWlnaHQ/OiBudW1iZXI7CgkJLyoqCgkJICogVGhlIHRhcmdldCBmb250IHdlaWdodCBmb3IgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgoJCSAqIEBkZWZhdWx0IDc1MAoJCSAqLwoJCWhvdmVyV2VpZ2h0PzogbnVtYmVyOwoJCS8qKgoJCSAqIEhvdyBtYW55IGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBjdXJzb3IgYXJlIGFmZmVjdGVkLgoJCSAqIEBkZWZhdWx0IDMKCQkgKi8KCQlpbmZsdWVuY2VSYWRpdXM/OiBudW1iZXI7CgkJLyoqCgkJICogQ29udHJvbHMgdGhlIGN1cnZlIG9mIHRoZSB3ZWlnaHQgZHJvcC1vZmYuIEhpZ2hlciB2YWx1ZXMgY3JlYXRlIGEgc2hhcnBlciBwZWFrLgoJCSAqIEBkZWZhdWx0IDEuNQoJCSAqLwoJCWZhbGxvZmZQb3dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBBbmltYXRpb24gZHVyYXRpb24gaW4gc2Vjb25kcy4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlkdXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBHU0FQIGVhc2luZyBmdW5jdGlvbiBzdHJpbmcuCgkJICogQGRlZmF1bHQgInBvd2VyMy5vdXQiCgkJICovCgkJZWFzZT86IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2hpbGRyZW4sCgkJYmFzZVdlaWdodCA9IDM1MCwKCQlob3ZlcldlaWdodCA9IDc1MCwKCQlpbmZsdWVuY2VSYWRpdXMgPSAzLAoJCWZhbGxvZmZQb3dlciA9IDEuNSwKCQlkdXJhdGlvbiA9IDEuMCwKCQllYXNlID0gInBvd2VyMy5vdXQiLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQkuLi5yZXN0UHJvcHMKCX06IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7CgoJb25Nb3VudCgoKSA9PiB7CgkJcmVnaXN0ZXJQbHVnaW5PbmNlKFNwbGl0VGV4dCk7Cgl9KTsKCglsZXQgd3JhcHBlclJlZjogSFRNTFNwYW5FbGVtZW50IHwgdW5kZWZpbmVkOwoJbGV0IHNwbGl0SW5zdGFuY2U6IFNwbGl0VGV4dCB8IG51bGwgPSBudWxsOwoJbGV0IGNoYXJOb2RlczogSFRNTEVsZW1lbnRbXSA9IFtdOwoJbGV0IGNoYXJQb3NpdGlvbnM6IHsgeDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH1bXSA9IFtdOwoKCWNvbnN0IGF0dGFjaFdyYXBwZXJSZWYgPSAobm9kZTogSFRNTFNwYW5FbGVtZW50KSA9PiB7CgkJd3JhcHBlclJlZiA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKHdyYXBwZXJSZWYgPT09IG5vZGUpIHsKCQkJCXdyYXBwZXJSZWYgPSB1bmRlZmluZWQ7CgkJCX0KCQl9OwoJfTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAodHlwZW9mIHdpbmRvdyA9PT0gInVuZGVmaW5lZCIpIHJldHVybjsKCQlpZiAoIXdyYXBwZXJSZWYpIHJldHVybjsKCQljb25zdCBub2RlID0gd3JhcHBlclJlZjsKCgkJaWYgKHNwbGl0SW5zdGFuY2UpIHsKCQkJc3BsaXRJbnN0YW5jZS5yZXZlcnQoKTsKCQl9CgoJCXNwbGl0SW5zdGFuY2UgPSBuZXcgU3BsaXRUZXh0KG5vZGUsIHsKCQkJdHlwZTogImNoYXJzIiwKCQkJcmVkdWNlV2hpdGVTcGFjZTogZmFsc2UsCgkJfSk7CgoJCWNoYXJOb2RlcyA9IChzcGxpdEluc3RhbmNlLmNoYXJzID8/IFtdKSBhcyBIVE1MRWxlbWVudFtdOwoKCQljaGFyTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4gewoJCQlub2RlLnN0eWxlLmZvbnRXZWlnaHQgPSBTdHJpbmcoYmFzZVdlaWdodCk7CgkJCW5vZGUuc3R5bGUuZm9udFZhcmlhdGlvblNldHRpbmdzID0gYCJ3Z2h0IiAke2Jhc2VXZWlnaHR9YDsKCQkJbm9kZS5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CgoJCQlpZiAoIW5vZGUudGV4dENvbnRlbnQ/LnRyaW0oKSkgewoJCQkJbm9kZS5zdHlsZS53aGl0ZVNwYWNlID0gInByZSI7CgkJCQlub2RlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CgkJCQlub2RlLnN0eWxlLm1pbldpZHRoID0gIjAuMjVlbSI7CgkJCX0KCQl9KTsKCgkJdGljaygpLnRoZW4oKCkgPT4gewoJCQljaGFyUG9zaXRpb25zID0gY2hhck5vZGVzLm1hcCgobm9kZSkgPT4gewoJCQkJY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCQlyZXR1cm4gewoJCQkJCXg6IHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyLAoJCQkJCXdpZHRoOiByZWN0LndpZHRoLAoJCQkJfTsKCQkJfSk7CgkJfSk7CgoJCWNvbnN0IGNhbGN1bGF0ZVdlaWdodCA9IChkaXN0YW5jZTogbnVtYmVyKSA9PiB7CgkJCWlmIChpbmZsdWVuY2VSYWRpdXMgPD0gMCkgcmV0dXJuIGJhc2VXZWlnaHQ7CgkJCWlmIChkaXN0YW5jZSA+IGluZmx1ZW5jZVJhZGl1cyArIDEpIHJldHVybiBiYXNlV2VpZ2h0OwoKCQkJY29uc3Qgbm9ybWFsaXplZCA9IE1hdGgubWF4KDAsIDEgLSBkaXN0YW5jZSAvIChpbmZsdWVuY2VSYWRpdXMgKyAxKSk7CgkJCWNvbnN0IHNoYXBlZCA9IE1hdGgucG93KG5vcm1hbGl6ZWQsIGZhbGxvZmZQb3dlcik7CgoJCQlyZXR1cm4gYmFzZVdlaWdodCArIChob3ZlcldlaWdodCAtIGJhc2VXZWlnaHQpICogc2hhcGVkOwoJCX07CgoJCWNvbnN0IGFwcGx5R3NhcCA9IChub2RlOiBIVE1MRWxlbWVudCwgd2VpZ2h0OiBudW1iZXIpID0+IHsKCQkJZ3NhcC50byhub2RlLCB7CgkJCQlmb250V2VpZ2h0OiB3ZWlnaHQsCgkJCQlmb250VmFyaWF0aW9uU2V0dGluZ3M6IGAid2dodCIgJHt3ZWlnaHR9YCwKCQkJCWR1cmF0aW9uLAoJCQkJZWFzZSwKCQkJCW92ZXJ3cml0ZTogImF1dG8iLAoJCQl9KTsKCQl9OwoKCQljb25zdCBhbmltYXRlV2VpZ2h0cyA9ICh0YXJnZXRJbmRleDogbnVtYmVyIHwgbnVsbCkgPT4gewoJCQlpZiAoIWNoYXJOb2Rlcy5sZW5ndGgpIHJldHVybjsKCQkJY2hhck5vZGVzLmZvckVhY2goKG5vZGUsIGkpID0+IHsKCQkJCWNvbnN0IHdlaWdodCA9CgkJCQkJdGFyZ2V0SW5kZXggPT09IG51bGwKCQkJCQkJPyBiYXNlV2VpZ2h0CgkJCQkJCTogY2FsY3VsYXRlV2VpZ2h0KE1hdGguYWJzKGkgLSB0YXJnZXRJbmRleCkpOwoJCQkJYXBwbHlHc2FwKG5vZGUsIHdlaWdodCk7CgkJCX0pOwoJCX07CgoJCWNvbnN0IGhhbmRsZU1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7CgkJCWlmICghY2hhck5vZGVzLmxlbmd0aCB8fCAhY2hhclBvc2l0aW9ucy5sZW5ndGgpIHJldHVybjsKCQkJY29uc3QgbW91c2VYID0gZS5jbGllbnRYOwoKCQkJY2hhck5vZGVzLmZvckVhY2goKG5vZGUsIGkpID0+IHsKCQkJCWNvbnN0IHsgeCwgd2lkdGggfSA9IGNoYXJQb3NpdGlvbnNbaV07CgkJCQljb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKG1vdXNlWCAtIHgpIC8gd2lkdGg7CgkJCQljb25zdCB3ZWlnaHQgPSBjYWxjdWxhdGVXZWlnaHQoZGlzdGFuY2UpOwoJCQkJYXBwbHlHc2FwKG5vZGUsIHdlaWdodCk7CgkJCX0pOwoJCX07CgoJCWNvbnN0IGhhbmRsZUxlYXZlID0gKCkgPT4gewoJCQlhbmltYXRlV2VpZ2h0cyhudWxsKTsKCQl9OwoKCQlub2RlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlTW92ZSk7CgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoYW5kbGVMZWF2ZSk7CgoJCXJldHVybiAoKSA9PiB7CgkJCW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVNb3ZlKTsKCQkJbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoYW5kbGVMZWF2ZSk7CgkJCXNwbGl0SW5zdGFuY2U/LnJldmVydCgpOwoJCQlzcGxpdEluc3RhbmNlID0gbnVsbDsKCQkJY2hhck5vZGVzID0gW107CgkJCWNoYXJQb3NpdGlvbnMgPSBbXTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPHNwYW4KCXsuLi5yZXN0UHJvcHN9CgljbGFzcz17Y24oImZvbnQtaW5oZXJpdCBpbmxpbmUtYmxvY2sgYWxpZ24tYmFzZWxpbmUgdGV4dC1pbmhlcml0IiwgY2xhc3NOYW1lKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9zcGFuPgo=", "tokens/motion-core.css": "QGltcG9ydCAidGFpbHdpbmRjc3MiOwoKQHZhcmlhbnQgZGFyayAoJjp3aGVyZSguZGFyaywgLmRhcmsgKikpOwoKOnJvb3QgewoJLS1iYXNlLWh1ZTogMjY1OwoKCS0tcmFkaXVzLWJhc2U6IDAuMjc1cmVtOwoKCS0tYmFja2dyb3VuZC1pbnNldDogb2tsY2goMC45NzY0IDAuMDAxMyB2YXIoLS1iYXNlLWh1ZSkpOwoJLS1iYWNrZ3JvdW5kOiBva2xjaCgxIDAgMCk7CgktLWJhY2tncm91bmQtbXV0ZWQ6IG9rbGNoKDAuOTU2IDAuMDAyIHZhcigtLWJhc2UtaHVlKSk7CgktLWZpeGVkLWxpZ2h0OiBva2xjaCgxIDAgMCk7CgktLWZpeGVkLWRhcms6IG9rbGNoKDAuMTgzIDAuMDA2IHZhcigtLWJhc2UtaHVlKSk7CgktLWZvcmVncm91bmQ6IG9rbGNoKDAuMTg4MSAwLjAwNiB2YXIoLS1iYXNlLWh1ZSkpOwoJLS1mb3JlZ3JvdW5kLW11dGVkOiBva2xjaCgwLjU0OTMgMC4wMDgxIHZhcigtLWJhc2UtaHVlKSk7CgktLWFjY2VudDogb2tsY2goMC42OTk2IDAuMjAxOTU5IDQ0LjQ0MTQpOwoJLS1hY2NlbnQtc2Vjb25kYXJ5OiBva2xjaCgwLjUwOTYgMC4xNTE5NTkgNDQuNDQxNCk7CgktLWJvcmRlcjogb2tsY2goMC40MjI0IDAuMDAxMyB2YXIoLS1iYXNlLWh1ZSkgLyAwLjEpOwoKCS0tc2hhZG93LXhzOiAwcHggMXB4IDFweCAtMC41cHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKCS0tc2hhZG93LXNtOgoJCTBweCAxcHggMXB4IC0wLjVweCByZ2JhKDAsIDAsIDAsIDAuMDYpLAoJCTBweCAzcHggM3B4IC0xLjVweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwoJLS1zaGFkb3ctbWQ6CgkJMHB4IDFweCAxcHggLTAuNXB4IHJnYmEoMCwgMCwgMCwgMC4wNiksCgkJMHB4IDNweCAzcHggLTEuNXB4IHJnYmEoMCwgMCwgMCwgMC4wNiksIDBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKCS0tc2hhZG93LWxnOgoJCTBweCAxcHggMXB4IC0wLjVweCByZ2JhKDAsIDAsIDAsIDAuMDYpLAoJCTBweCAzcHggM3B4IC0xLjVweCByZ2JhKDAsIDAsIDAsIDAuMDYpLAoJCTBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjA2KSwgMHB4IDEycHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CgktLXNoYWRvdy14bDoKCQkwcHggMXB4IDFweCAtMC41cHggcmdiYSgwLCAwLCAwLCAwLjA2KSwKCQkwcHggM3B4IDNweCAtMS41cHggcmdiYSgwLCAwLCAwLCAwLjA2KSwKCQkwcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4wNiksCgkJMHB4IDEycHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNiksCgkJMHB4IDI0cHggMjRweCAtMTJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwoJLS1zaGFkb3ctMnhsOgoJCTBweCAxcHggMXB4IC0wLjVweCByZ2JhKDAsIDAsIDAsIDAuMDYpLAoJCTBweCAzcHggM3B4IC0xLjVweCByZ2JhKDAsIDAsIDAsIDAuMDYpLAoJCTBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjA2KSwKCQkwcHggMTJweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjA2KSwKCQkwcHggMjRweCAyNHB4IC0xMnB4IHJnYmEoMCwgMCwgMCwgMC4wNiksCgkJMHB4IDQ4cHggNDhweCAtMjRweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwp9CgouZGFyayB7CgktLWJhY2tncm91bmQtaW5zZXQ6IG9rbGNoKDAuMjA5OSAwLjAwMzkgdmFyKC0tYmFzZS1odWUpKTsKCS0tYmFja2dyb3VuZDogb2tsY2goMC4yNTc0IDAuMDA1NiB2YXIoLS1iYXNlLWh1ZSkpOwoJLS1iYWNrZ3JvdW5kLW11dGVkOiBva2xjaCgwLjI4MyAwLjAwOTEgdmFyKC0tYmFzZS1odWUpKTsKCS0tZm9yZWdyb3VuZDogb2tsY2goMC45Njc0IDAuMDAxMyB2YXIoLS1iYXNlLWh1ZSkpOwoJLS1mb3JlZ3JvdW5kLW11dGVkOiBva2xjaCgwLjY2OSAwLjAxMDcgdmFyKC0tYmFzZS1odWUpKTsKCS0tYWNjZW50OiBva2xjaCgwLjY5OTYgMC4xODE5NTkgNDQuNDQxNCk7CgktLWFjY2VudC1zZWNvbmRhcnk6IG9rbGNoKDAuNTA5NiAwLjEzMTk1OSA0NC40NDE0KTsKCS0tYm9yZGVyOiBva2xjaCgwLjk5OSAwLjAxMyB2YXIoLS1iYXNlLWh1ZSkgLyAwLjA1KTsKfQoKQHRoZW1lIHsKCS0tY29sb3ItZml4ZWQtbGlnaHQ6IHZhcigtLWZpeGVkLWxpZ2h0KTsKCS0tY29sb3ItZml4ZWQtZGFyazogdmFyKC0tZml4ZWQtZGFyayk7CgktLWNvbG9yLWJhY2tncm91bmQtaW5zZXQ6IHZhcigtLWJhY2tncm91bmQtaW5zZXQpOwoJLS1jb2xvci1iYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKCS0tY29sb3ItYmFja2dyb3VuZC1tdXRlZDogdmFyKC0tYmFja2dyb3VuZC1tdXRlZCk7CgktLWNvbG9yLWZvcmVncm91bmQ6IHZhcigtLWZvcmVncm91bmQpOwoJLS1jb2xvci1mb3JlZ3JvdW5kLW11dGVkOiB2YXIoLS1mb3JlZ3JvdW5kLW11dGVkKTsKCS0tY29sb3ItYWNjZW50OiB2YXIoLS1hY2NlbnQpOwoJLS1jb2xvci1hY2NlbnQtc2Vjb25kYXJ5OiB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5KTsKCS0tY29sb3ItYm9yZGVyOiB2YXIoLS1ib3JkZXIpOwoKCS0tcmFkaXVzLXhzOiBjYWxjKHZhcigtLXJhZGl1cy1iYXNlKSAqIDEpOwoJLS1yYWRpdXMtc206IGNhbGModmFyKC0tcmFkaXVzLWJhc2UpICogMik7CgktLXJhZGl1cy1tZDogY2FsYyh2YXIoLS1yYWRpdXMtYmFzZSkgKiAzKTsKCS0tcmFkaXVzLWxnOiBjYWxjKHZhcigtLXJhZGl1cy1iYXNlKSAqIDQpOwoJLS1yYWRpdXMteGw6IGNhbGModmFyKC0tcmFkaXVzLWJhc2UpICogNik7CgktLXJhZGl1cy0yeGw6IGNhbGModmFyKC0tcmFkaXVzLWJhc2UpICogOCk7CgktLXJhZGl1cy0zeGw6IGNhbGModmFyKC0tcmFkaXVzLWJhc2UpICogMTIpOwoJLS1yYWRpdXMtNHhsOiBjYWxjKHZhcigtLXJhZGl1cy1iYXNlKSAqIDE2KTsKCS0tcmFkaXVzLWZ1bGw6IDk5OTlweDsKCgktLXNoYWRvdy14czogdmFyKC0tc2hhZG93LXhzKTsKCS0tc2hhZG93LXNtOiB2YXIoLS1zaGFkb3ctc20pOwoJLS1zaGFkb3ctbWQ6IHZhcigtLXNoYWRvdy1tZCk7CgktLXNoYWRvdy1sZzogdmFyKC0tc2hhZG93LWxnKTsKCS0tc2hhZG93LXhsOiB2YXIoLS1zaGFkb3cteGwpOwoJLS1zaGFkb3ctMnhsOiB2YXIoLS1zaGFkb3ctMnhsKTsKfQo=" diff --git a/apps/web/static/registry/registry.json b/apps/web/static/registry/registry.json index 5040638..22830ed 100644 --- a/apps/web/static/registry/registry.json +++ b/apps/web/static/registry/registry.json @@ -21,13 +21,9 @@ "description": "A retro-styled renderer that converts images into character-based visuals with configurable scanlines.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -49,14 +45,10 @@ "description": "A 3D card with rounded corners that displays an image and responds to head tracking for a parallax effect.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.0.0", "@mediapipe/tasks-vision": "^0.10.22-rc.20250304", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -116,13 +108,9 @@ "description": "An image display component that applies various ordered dithering algorithms (Bayer, Halftone, Void & Cluster).", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -145,13 +133,9 @@ "category": "canvas", "introducedAt": "2026-04-02", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -259,13 +243,9 @@ "category": "canvas", "introducedAt": "2026-04-04", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -287,12 +267,9 @@ "description": "A physics-based fluid simulation with pointer interaction.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -314,13 +291,9 @@ "description": "A refractive view simulating moving glass rods that distort the underlying texture with chromatic aberration.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -342,14 +315,10 @@ "description": "A slideshow component featuring organic glass bubble transitions with refraction and chromatic aberration.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", "gsap": "^3.14.2", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -371,12 +340,9 @@ "description": "Animated silk-like cloth shader with fine glitter noise and subtle vignette depth shading.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -439,12 +405,9 @@ "category": "canvas", "introducedAt": "2026-03-18", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -467,12 +430,9 @@ "category": "canvas", "introducedAt": "2026-03-18", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -517,13 +477,9 @@ "description": "A 3D gallery that endlessly scrolls through textured planes with cloth-like distortion and scroll-driven transitions.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -576,13 +532,9 @@ "description": "A physics-based grid simulation that distorts an image in response to cursor movement.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -604,12 +556,9 @@ "description": "A smooth and organic lava lamp effect using raymarching shaders and SDFs.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -730,12 +679,9 @@ "description": "A generative organic pattern using Compositional Pattern Producing Networks (CPPN).", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -757,13 +703,9 @@ "description": "A media revealer that animates blocky pixel grids which progressively sharpen to full resolution.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -785,12 +727,9 @@ "description": "A fluid, pixelated noise pattern useful for backgrounds.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -858,13 +797,9 @@ "description": "A dynamic Rubik's Cube that continuously rotates while a Fresnel rim glow traces each edge.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -914,12 +849,9 @@ "category": "canvas", "introducedAt": "2026-03-18", "dependencies": { - "@threlte/core": "^8.3.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { @@ -1103,13 +1035,9 @@ "description": "A fluid distortion effect simulating water ripples triggered by interaction.", "category": "canvas", "dependencies": { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", - "three": "^0.182.0" - }, - "devDependencies": { - "@types/three": "^0.182.0" + "ogl": "^1.0.11" }, + "devDependencies": {}, "internalDependencies": [], "files": [ { From 917663278e2cb244dc11d35116a38d5d96edf128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Wed, 15 Apr 2026 19:04:30 +0200 Subject: [PATCH 07/24] refactor(motion-core): extract shared canvas color and pointer helpers --- .../ascii-renderer/AsciiRendererScene.svelte | 74 +-------- .../components/ascii-renderer/component.json | 4 + .../dithered-image/DitheredImageScene.svelte | 116 +------------ .../components/dithered-image/component.json | 4 + .../FluidImageRevealScene.svelte | 42 ++--- .../fluid-image-reveal/component.json | 4 + .../FluidSimulationScene.svelte | 155 ++---------------- .../fluid-simulation/component.json | 8 + .../glitter-cloth/GlitterClothScene.svelte | 110 +------------ .../components/glitter-cloth/component.json | 4 + .../components/god-rays/GodRaysScene.svelte | 113 +------------ .../lib/components/god-rays/component.json | 4 + .../src/lib/components/halo/HaloScene.svelte | 113 +------------ .../src/lib/components/halo/component.json | 4 + .../components/lava-lamp/LavaLampScene.svelte | 75 +-------- .../lib/components/lava-lamp/component.json | 4 + .../plasma-grid/PlasmaGridScene.svelte | 113 +------------ .../lib/components/plasma-grid/component.json | 4 + .../rubiks-cube/RubiksCubeScene.svelte | 117 +------------ .../lib/components/rubiks-cube/component.json | 4 + .../specular-band/SpecularBandScene.svelte | 113 +------------ .../components/specular-band/component.json | 4 + packages/motion-core/src/lib/helpers/color.ts | 120 ++++++++++++++ .../src/lib/helpers/fluid-pointer.ts | 60 +++++++ 24 files changed, 267 insertions(+), 1102 deletions(-) create mode 100644 packages/motion-core/src/lib/helpers/color.ts create mode 100644 packages/motion-core/src/lib/helpers/fluid-pointer.ts diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte index 70f0d6d..f2889d3 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte @@ -11,6 +11,7 @@ Vec2, Vec3, } from "ogl"; + import { toLinearRgb } from "../../helpers/color"; interface Props { /** @@ -74,79 +75,6 @@ let imageWidth = 1; let imageHeight = 1; - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - const scale = Math.max(parts[0], parts[1], parts[2]) > 1 ? 255 : 1; - return [ - clamp01(parts[0] / scale), - clamp01(parts[1] / scale), - clamp01(parts[2] / scale), - ]; - }; - - const toRgb = ( - value: string, - fallback: [number, number, number], - ): [number, number, number] => { - const trimmed = value.trim(); - const parsed = trimmed.startsWith("#") - ? parseHexColor(trimmed) - : parseCssColor(trimmed); - return parsed ?? fallback; - }; - - const toLinearRgb = ( - value: string, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const updateCoverUniforms = () => { if ( canvasWidth <= 0 || diff --git a/packages/motion-core/src/lib/components/ascii-renderer/component.json b/packages/motion-core/src/lib/components/ascii-renderer/component.json index e260237..d3d2140 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/component.json +++ b/packages/motion-core/src/lib/components/ascii-renderer/component.json @@ -19,6 +19,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte index 9595381..533f4dd 100644 --- a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte +++ b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte @@ -11,13 +11,9 @@ Vec2, Vec3, } from "ogl"; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; type DitherMap = "bayer4x4" | "bayer8x8" | "halftone" | "voidAndCluster"; - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; interface Props { /** @@ -120,116 +116,6 @@ const colorUniform = new Vec3(1, 105 / 255, 0); const backgroundColorUniform = new Vec3(17 / 255, 17 / 255, 19 / 255); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - const scale = Math.max(parts[0], parts[1], parts[2]) > 1 ? 255 : 1; - return [ - clamp01(parts[0] / scale), - clamp01(parts[1] / scale), - clamp01(parts[2] / scale), - ]; - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const trimmed = value.trim(); - const parsed = trimmed.startsWith("#") - ? parseHexColor(trimmed) - : parseCssColor(trimmed); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const applyColor = ( target: Vec3, value: ColorRepresentation, diff --git a/packages/motion-core/src/lib/components/dithered-image/component.json b/packages/motion-core/src/lib/components/dithered-image/component.json index e6b4a4d..d2ff931 100644 --- a/packages/motion-core/src/lib/components/dithered-image/component.json +++ b/packages/motion-core/src/lib/components/dithered-image/component.json @@ -19,6 +19,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte index 96d4a28..22ff36f 100644 --- a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte +++ b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte @@ -10,6 +10,7 @@ Vec2, Vec3, } from "ogl"; + import { updateFluidPointerState } from "../../helpers/fluid-pointer"; interface Props { /** @@ -102,42 +103,23 @@ const pointerForceInitialLerp = 0.2; const pointerForceLerp = 0.55; - const clamp = (value: number, min: number, max: number) => - Math.min(max, Math.max(min, value)); - const lerp = (a: number, b: number, t: number) => a + (b - a) * t; - const updatePointerPosition = ( px: number, py: number, width: number, height: number, ) => { - const prevX = pointerState.x; - const prevY = pointerState.y; - const targetDx = clamp( - 5 * (px - prevX), - -pointerForceClamp, - pointerForceClamp, - ); - const targetDy = clamp( - 5 * (py - prevY), - -pointerForceClamp, - pointerForceClamp, - ); - const lerpFactor = pointerState.initialized - ? pointerForceLerp - : pointerForceInitialLerp; - - pointerState.moved = true; - pointerState.dx = lerp(pointerState.dx, targetDx, lerpFactor); - pointerState.dy = lerp(pointerState.dy, targetDy, lerpFactor); - pointerState.x = px; - pointerState.y = py; - pointerState.initialized = true; - - if (width > 0 && height > 0) { - pointerUv.set(px / width, 1 - py / height); - } + updateFluidPointerState({ + state: pointerState, + uv: pointerUv, + x: px, + y: py, + width, + height, + forceClamp: pointerForceClamp, + initialLerp: pointerForceInitialLerp, + lerp: pointerForceLerp, + }); }; const vertexShader = ` diff --git a/packages/motion-core/src/lib/components/fluid-image-reveal/component.json b/packages/motion-core/src/lib/components/fluid-image-reveal/component.json index 85ec10c..caa03f4 100644 --- a/packages/motion-core/src/lib/components/fluid-image-reveal/component.json +++ b/packages/motion-core/src/lib/components/fluid-image-reveal/component.json @@ -20,6 +20,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/fluid-pointer.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte b/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte index c25b519..a26a64b 100644 --- a/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte +++ b/packages/motion-core/src/lib/components/fluid-simulation/FluidSimulationScene.svelte @@ -9,12 +9,8 @@ Vec2, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; + import { updateFluidPointerState } from "../../helpers/fluid-pointer"; interface Props { /** @@ -103,116 +99,6 @@ const pointerForceInitialLerp = 0.2; const pointerForceLerp = 0.55; - const clamp = (value: number, min: number, max: number) => - Math.min(max, Math.max(min, value)); - const lerp = (a: number, b: number, t: number) => a + (b - a) * t; - const clamp01 = (value: number) => clamp(value, 0, 1); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - const scale = Math.max(parts[0], parts[1], parts[2]) > 1 ? 255 : 1; - return [ - clamp01(parts[0] / scale), - clamp01(parts[1] / scale), - clamp01(parts[2] / scale), - ]; - }; - - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - if (typeof value === "string") { - const trimmed = value.trim(); - const parsed = trimmed.startsWith("#") - ? parseHexColor(trimmed) - : parseCssColor(trimmed); - return parsed ?? fallback; - } - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - $effect(() => { const [r, g, b] = toLinearRgb(color, [1, 105 / 255, 0]); splatColor.set(r, g, b); @@ -224,32 +110,17 @@ width: number, height: number, ) => { - const prevX = pointerState.x; - const prevY = pointerState.y; - const targetDx = clamp( - 5 * (px - prevX), - -pointerForceClamp, - pointerForceClamp, - ); - const targetDy = clamp( - 5 * (py - prevY), - -pointerForceClamp, - pointerForceClamp, - ); - const lerpFactor = pointerState.initialized - ? pointerForceLerp - : pointerForceInitialLerp; - - pointerState.moved = true; - pointerState.dx = lerp(pointerState.dx, targetDx, lerpFactor); - pointerState.dy = lerp(pointerState.dy, targetDy, lerpFactor); - pointerState.x = px; - pointerState.y = py; - pointerState.initialized = true; - - if (width > 0 && height > 0) { - pointerUv.set(px / width, 1 - py / height); - } + updateFluidPointerState({ + state: pointerState, + uv: pointerUv, + x: px, + y: py, + width, + height, + forceClamp: pointerForceClamp, + initialLerp: pointerForceInitialLerp, + lerp: pointerForceLerp, + }); }; const vertexShader = ` diff --git a/packages/motion-core/src/lib/components/fluid-simulation/component.json b/packages/motion-core/src/lib/components/fluid-simulation/component.json index ec5a0b2..09f30fe 100644 --- a/packages/motion-core/src/lib/components/fluid-simulation/component.json +++ b/packages/motion-core/src/lib/components/fluid-simulation/component.json @@ -19,6 +19,14 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" + }, + { + "path": "../../helpers/fluid-pointer.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte b/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte index b1900e7..7e0b637 100644 --- a/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte +++ b/packages/motion-core/src/lib/components/glitter-cloth/GlitterClothScene.svelte @@ -10,12 +10,12 @@ Vec2, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { + clamp01, + type ColorRepresentation, + srgbToLinear, + toRgb, + } from "../../helpers/color"; interface Props { /** @@ -94,104 +94,6 @@ let canvas = $state(); let uniforms = $state(); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - return normalizeTriplet(parts[0], parts[1], parts[2]); - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const trimmed = value.trim(); - const parsed = trimmed.startsWith("#") - ? parseHexColor(trimmed) - : parseCssColor(trimmed); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - const toLinearTriplet = ( value: [number, number, number], ): [number, number, number] => [ diff --git a/packages/motion-core/src/lib/components/glitter-cloth/component.json b/packages/motion-core/src/lib/components/glitter-cloth/component.json index 017b511..c02e579 100644 --- a/packages/motion-core/src/lib/components/glitter-cloth/component.json +++ b/packages/motion-core/src/lib/components/glitter-cloth/component.json @@ -19,6 +19,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte b/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte index 9d7ab08..f848694 100644 --- a/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte +++ b/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte @@ -10,12 +10,7 @@ Vec2, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; interface Props { /** @@ -133,112 +128,6 @@ uIntensity: { value: number }; }>(); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - return normalizeTriplet(parts[0], parts[1], parts[2]); - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const hex = value.trim(); - const parsed = hex.startsWith("#") - ? parseHexColor(hex) - : parseCssColor(hex); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const applyColor = ( target: Vec3, value: ColorRepresentation, diff --git a/packages/motion-core/src/lib/components/god-rays/component.json b/packages/motion-core/src/lib/components/god-rays/component.json index c7b603e..d0aaa95 100644 --- a/packages/motion-core/src/lib/components/god-rays/component.json +++ b/packages/motion-core/src/lib/components/god-rays/component.json @@ -20,6 +20,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/halo/HaloScene.svelte b/packages/motion-core/src/lib/components/halo/HaloScene.svelte index 7c79c26..31d466e 100644 --- a/packages/motion-core/src/lib/components/halo/HaloScene.svelte +++ b/packages/motion-core/src/lib/components/halo/HaloScene.svelte @@ -10,12 +10,7 @@ Vec2, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; interface Props { /** @@ -83,112 +78,6 @@ uIntensity: { value: number }; }>(); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - return normalizeTriplet(parts[0], parts[1], parts[2]); - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const hex = value.trim(); - const parsed = hex.startsWith("#") - ? parseHexColor(hex) - : parseCssColor(hex); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const setColorUniform = ( target: Vec3, value: ColorRepresentation, diff --git a/packages/motion-core/src/lib/components/halo/component.json b/packages/motion-core/src/lib/components/halo/component.json index f1e4e80..0ab229c 100644 --- a/packages/motion-core/src/lib/components/halo/component.json +++ b/packages/motion-core/src/lib/components/halo/component.json @@ -20,6 +20,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte b/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte index 0ffcfea..953707a 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte +++ b/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte @@ -10,6 +10,7 @@ Vec3, Vec4, } from "ogl"; + import { toLinearRgb } from "../../helpers/color"; interface Props { /** @@ -64,80 +65,6 @@ uSmoothness: { value: number }; }>(); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - const scale = Math.max(parts[0], parts[1], parts[2]) > 1 ? 255 : 1; - return [ - clamp01(parts[0] / scale), - clamp01(parts[1] / scale), - clamp01(parts[2] / scale), - ]; - }; - - const toRgb = ( - value: string, - fallback: [number, number, number], - ): [number, number, number] => { - const trimmed = value.trim(); - const parsed = trimmed.startsWith("#") - ? parseHexColor(trimmed) - : parseCssColor(trimmed); - return parsed ?? fallback; - }; - - const toLinearRgb = ( - value: string, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const applyColor = ( target: Vec3, value: string, diff --git a/packages/motion-core/src/lib/components/lava-lamp/component.json b/packages/motion-core/src/lib/components/lava-lamp/component.json index 6051bb3..cc39a8d 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/component.json +++ b/packages/motion-core/src/lib/components/lava-lamp/component.json @@ -19,6 +19,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte index b8a0cc7..512a6d3 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte +++ b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte @@ -9,12 +9,7 @@ Triangle, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; interface Props { /** @@ -39,112 +34,6 @@ u_gradientColor: { value: Vec3 }; }>(); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - return normalizeTriplet(parts[0], parts[1], parts[2]); - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const hex = value.trim(); - const parsed = hex.startsWith("#") - ? parseHexColor(hex) - : parseCssColor(hex); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const applyColor = ( target: Vec3, value: ColorRepresentation, diff --git a/packages/motion-core/src/lib/components/plasma-grid/component.json b/packages/motion-core/src/lib/components/plasma-grid/component.json index 04e9fc4..0348d5c 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/component.json +++ b/packages/motion-core/src/lib/components/plasma-grid/component.json @@ -19,6 +19,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte index 954198d..50e398a 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte +++ b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte @@ -13,12 +13,7 @@ Transform, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; interface FresnelConfig { /** @@ -102,116 +97,6 @@ const easeInOutCubic = (t: number) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2; - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - const scale = Math.max(parts[0], parts[1], parts[2]) > 1 ? 255 : 1; - return [ - clamp01(parts[0] / scale), - clamp01(parts[1] / scale), - clamp01(parts[2] / scale), - ]; - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const trimmed = value.trim(); - const parsed = trimmed.startsWith("#") - ? parseHexColor(trimmed) - : parseCssColor(trimmed); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const defaultFresnelConfig: Required = { color: "#111113", rimColor: "#FF6900", diff --git a/packages/motion-core/src/lib/components/rubiks-cube/component.json b/packages/motion-core/src/lib/components/rubiks-cube/component.json index 73e1651..8b077cd 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/component.json +++ b/packages/motion-core/src/lib/components/rubiks-cube/component.json @@ -19,6 +19,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte b/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte index 06cf754..ce901c0 100644 --- a/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte +++ b/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte @@ -10,12 +10,7 @@ Vec2, Vec3, } from "ogl"; - - type ColorRepresentation = - | string - | number - | readonly [number, number, number] - | { r: number; g: number; b: number }; + import { type ColorRepresentation, toLinearRgb } from "../../helpers/color"; interface Props { /** @@ -71,112 +66,6 @@ uIntensity: { value: number }; }>(); - const clamp01 = (value: number) => Math.min(1, Math.max(0, value)); - const srgbToLinear = (value: number) => - value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); - - const normalizeTriplet = ( - r: number, - g: number, - b: number, - ): [number, number, number] => { - const scale = Math.max(r, g, b) > 1 ? 255 : 1; - return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; - }; - - const parseHexColor = (value: string): [number, number, number] | null => { - const hex = value.replace("#", "").trim(); - if (hex.length === 3 || hex.length === 4) { - const r = Number.parseInt(hex[0] + hex[0], 16); - const g = Number.parseInt(hex[1] + hex[1], 16); - const b = Number.parseInt(hex[2] + hex[2], 16); - return [r / 255, g / 255, b / 255]; - } - if (hex.length === 6 || hex.length === 8) { - const r = Number.parseInt(hex.slice(0, 2), 16); - const g = Number.parseInt(hex.slice(2, 4), 16); - const b = Number.parseInt(hex.slice(4, 6), 16); - return [r / 255, g / 255, b / 255]; - } - return null; - }; - - let cssColorContext: CanvasRenderingContext2D | null | undefined; - const parseCssColor = (value: string): [number, number, number] | null => { - if (typeof document === "undefined") return null; - if (cssColorContext === undefined) { - const parserCanvas = document.createElement("canvas"); - parserCanvas.width = 1; - parserCanvas.height = 1; - cssColorContext = parserCanvas.getContext("2d"); - } - if (!cssColorContext) return null; - - cssColorContext.fillStyle = "#000000"; - cssColorContext.fillStyle = value; - const normalized = cssColorContext.fillStyle; - - if (normalized.startsWith("#")) { - return parseHexColor(normalized); - } - - const match = normalized.match(/rgba?\(([^)]+)\)/i); - if (!match) return null; - const parts = match[1] - .split(",") - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 3) return null; - return normalizeTriplet(parts[0], parts[1], parts[2]); - }; - - const toRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - if (typeof value === "number" && Number.isFinite(value)) { - const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); - return [ - ((int >> 16) & 255) / 255, - ((int >> 8) & 255) / 255, - (int & 255) / 255, - ]; - } - - if (typeof value === "string") { - const hex = value.trim(); - const parsed = hex.startsWith("#") - ? parseHexColor(hex) - : parseCssColor(hex); - return parsed ?? fallback; - } - - if (Array.isArray(value) && value.length >= 3) { - return normalizeTriplet(value[0], value[1], value[2]); - } - - if ( - value && - typeof value === "object" && - "r" in value && - "g" in value && - "b" in value - ) { - const rgb = value as { r: number; g: number; b: number }; - return normalizeTriplet(rgb.r, rgb.g, rgb.b); - } - - return fallback; - }; - - const toLinearRgb = ( - value: ColorRepresentation, - fallback: [number, number, number], - ): [number, number, number] => { - const [r, g, b] = toRgb(value, fallback); - return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; - }; - const applyColor = ( target: Vec3, value: ColorRepresentation, diff --git a/packages/motion-core/src/lib/components/specular-band/component.json b/packages/motion-core/src/lib/components/specular-band/component.json index f8f367e..e6ebe1e 100644 --- a/packages/motion-core/src/lib/components/specular-band/component.json +++ b/packages/motion-core/src/lib/components/specular-band/component.json @@ -20,6 +20,10 @@ { "path": "../../utils/cn.ts", "target": "utils" + }, + { + "path": "../../helpers/color.ts", + "target": "helpers" } ] } diff --git a/packages/motion-core/src/lib/helpers/color.ts b/packages/motion-core/src/lib/helpers/color.ts new file mode 100644 index 0000000..3f364e7 --- /dev/null +++ b/packages/motion-core/src/lib/helpers/color.ts @@ -0,0 +1,120 @@ +export type ColorRepresentation = + | string + | number + | readonly [number, number, number] + | { r: number; g: number; b: number }; + +const clamp = (value: number, min: number, max: number) => + Math.min(max, Math.max(min, value)); + +export const clamp01 = (value: number) => clamp(value, 0, 1); + +export const srgbToLinear = (value: number) => + value <= 0.04045 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4); + +export const normalizeTriplet = ( + r: number, + g: number, + b: number, +): [number, number, number] => { + const scale = Math.max(r, g, b) > 1 ? 255 : 1; + return [clamp01(r / scale), clamp01(g / scale), clamp01(b / scale)]; +}; + +export const parseHexColor = ( + value: string, +): [number, number, number] | null => { + const hex = value.replace("#", "").trim(); + if (hex.length === 3 || hex.length === 4) { + const r = Number.parseInt(hex[0] + hex[0], 16); + const g = Number.parseInt(hex[1] + hex[1], 16); + const b = Number.parseInt(hex[2] + hex[2], 16); + return [r / 255, g / 255, b / 255]; + } + if (hex.length === 6 || hex.length === 8) { + const r = Number.parseInt(hex.slice(0, 2), 16); + const g = Number.parseInt(hex.slice(2, 4), 16); + const b = Number.parseInt(hex.slice(4, 6), 16); + return [r / 255, g / 255, b / 255]; + } + return null; +}; + +let cssColorContext: CanvasRenderingContext2D | null | undefined; + +export const parseCssColor = ( + value: string, +): [number, number, number] | null => { + if (typeof document === "undefined") return null; + if (cssColorContext === undefined) { + const parserCanvas = document.createElement("canvas"); + parserCanvas.width = 1; + parserCanvas.height = 1; + cssColorContext = parserCanvas.getContext("2d"); + } + if (!cssColorContext) return null; + + cssColorContext.fillStyle = "#000000"; + cssColorContext.fillStyle = value; + const normalized = cssColorContext.fillStyle; + + if (normalized.startsWith("#")) { + return parseHexColor(normalized); + } + + const match = normalized.match(/rgba?\(([^)]+)\)/i); + if (!match) return null; + const parts = match[1] + .split(",") + .map((part) => Number.parseFloat(part.trim())) + .filter((part) => Number.isFinite(part)); + if (parts.length < 3) return null; + return normalizeTriplet(parts[0], parts[1], parts[2]); +}; + +export const toRgb = ( + value: ColorRepresentation, + fallback: [number, number, number], +): [number, number, number] => { + if (typeof value === "number" && Number.isFinite(value)) { + const int = Math.min(0xffffff, Math.max(0, Math.floor(value))); + return [ + ((int >> 16) & 255) / 255, + ((int >> 8) & 255) / 255, + (int & 255) / 255, + ]; + } + + if (typeof value === "string") { + const trimmed = value.trim(); + const parsed = trimmed.startsWith("#") + ? parseHexColor(trimmed) + : parseCssColor(trimmed); + return parsed ?? fallback; + } + + if (Array.isArray(value) && value.length >= 3) { + return normalizeTriplet(value[0], value[1], value[2]); + } + + if ( + value && + typeof value === "object" && + "r" in value && + "g" in value && + "b" in value + ) { + const rgb = value as { r: number; g: number; b: number }; + return normalizeTriplet(rgb.r, rgb.g, rgb.b); + } + + return fallback; +}; + +export const toLinearRgb = ( + value: ColorRepresentation, + fallback: [number, number, number], +): [number, number, number] => { + const [r, g, b] = toRgb(value, fallback); + return [srgbToLinear(r), srgbToLinear(g), srgbToLinear(b)]; +}; diff --git a/packages/motion-core/src/lib/helpers/fluid-pointer.ts b/packages/motion-core/src/lib/helpers/fluid-pointer.ts new file mode 100644 index 0000000..8d1447e --- /dev/null +++ b/packages/motion-core/src/lib/helpers/fluid-pointer.ts @@ -0,0 +1,60 @@ +export interface FluidPointerState { + x: number; + y: number; + dx: number; + dy: number; + moved: boolean; + initialized: boolean; +} + +interface Vec2Like { + set(x: number, y: number): unknown; +} + +interface UpdateFluidPointerOptions { + state: FluidPointerState; + uv: Vec2Like; + x: number; + y: number; + width: number; + height: number; + forceClamp: number; + initialLerp: number; + lerp: number; + forceScale?: number; +} + +const clamp = (value: number, min: number, max: number) => + Math.min(max, Math.max(min, value)); + +const mix = (a: number, b: number, t: number) => a + (b - a) * t; + +export const updateFluidPointerState = ({ + state, + uv, + x, + y, + width, + height, + forceClamp, + initialLerp, + lerp, + forceScale = 5, +}: UpdateFluidPointerOptions): void => { + const prevX = state.x; + const prevY = state.y; + const targetDx = clamp(forceScale * (x - prevX), -forceClamp, forceClamp); + const targetDy = clamp(forceScale * (y - prevY), -forceClamp, forceClamp); + const lerpFactor = state.initialized ? lerp : initialLerp; + + state.moved = true; + state.dx = mix(state.dx, targetDx, lerpFactor); + state.dy = mix(state.dy, targetDy, lerpFactor); + state.x = x; + state.y = y; + state.initialized = true; + + if (width > 0 && height > 0) { + uv.set(x / width, 1 - y / height); + } +}; From 3d1863596e8ec054150d7c9f08b75dc8d994fc51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Wed, 15 Apr 2026 19:16:11 +0200 Subject: [PATCH 08/24] feat(canvas): standardize default backgroundColor to #17181A --- .../src/routes/docs/ascii-renderer/+page.svx | 12 ++--- .../src/routes/docs/dithered-image/+page.svx | 12 ++--- apps/web/src/routes/docs/god-rays/+page.svx | 12 ++--- apps/web/src/routes/docs/halo/+page.svx | 12 ++--- .../src/routes/docs/specular-band/+page.svx | 12 ++--- apps/web/static/registry/components.json | 36 +++++++------- apps/web/static/registry/registry.json | 48 +++++++++++++++++++ .../ascii-renderer/AsciiRenderer.svelte | 4 +- .../ascii-renderer/AsciiRendererScene.svelte | 12 +++-- .../dithered-image/DitheredImage.svelte | 4 +- .../dithered-image/DitheredImageScene.svelte | 18 +++---- .../lib/components/god-rays/GodRays.svelte | 4 +- .../components/god-rays/GodRaysScene.svelte | 16 +++++-- .../src/lib/components/halo/Halo.svelte | 4 +- .../src/lib/components/halo/HaloScene.svelte | 10 ++-- .../specular-band/SpecularBand.svelte | 4 +- .../specular-band/SpecularBandScene.svelte | 16 +++++-- 17 files changed, 155 insertions(+), 81 deletions(-) diff --git a/apps/web/src/routes/docs/ascii-renderer/+page.svx b/apps/web/src/routes/docs/ascii-renderer/+page.svx index 0366608..6d26e5a 100644 --- a/apps/web/src/routes/docs/ascii-renderer/+page.svx +++ b/apps/web/src/routes/docs/ascii-renderer/+page.svx @@ -87,12 +87,12 @@ import { AsciiRenderer } from "$lib/motion-core"; default: '"#00ff00"', description: "Color of the ASCII characters.", }, - { - prop: "backgroundColor", - type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', - default: '"#000000"', - description: "Background color of the canvas.", - }, + { + prop: "backgroundColor", + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', + default: '"#17181A"', + description: "Background color of the canvas.", + }, { prop: "class", type: "string", diff --git a/apps/web/src/routes/docs/dithered-image/+page.svx b/apps/web/src/routes/docs/dithered-image/+page.svx index 4e1c941..b8840f0 100644 --- a/apps/web/src/routes/docs/dithered-image/+page.svx +++ b/apps/web/src/routes/docs/dithered-image/+page.svx @@ -87,12 +87,12 @@ import { DitheredImage } from "$lib/motion-core"; default: '"#ff6900"', description: "The primary color of the dithered dots.", }, - { - prop: "backgroundColor", - type: "string | number | [number, number, number] | { r: number; g: number; b: number }", - default: '"#111113"', - description: "The background color of the dithered image.", - }, + { + prop: "backgroundColor", + type: "string | number | [number, number, number] | { r: number; g: number; b: number }", + default: '"#17181A"', + description: "The background color of the dithered image.", + }, { prop: "threshold", type: "number", diff --git a/apps/web/src/routes/docs/god-rays/+page.svx b/apps/web/src/routes/docs/god-rays/+page.svx index a892ff9..ff99134 100644 --- a/apps/web/src/routes/docs/god-rays/+page.svx +++ b/apps/web/src/routes/docs/god-rays/+page.svx @@ -63,12 +63,12 @@ import { GodRays } from "$lib/motion-core"; default: '"#FFFFFF"', description: "Base color of the rays.", }, - { - prop: "backgroundColor", - type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', - default: '"#000000"', - description: "Color of the background behind the rays.", - }, + { + prop: "backgroundColor", + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', + default: '"#17181A"', + description: "Color of the background behind the rays.", + }, { prop: "anchorX", type: "number", diff --git a/apps/web/src/routes/docs/halo/+page.svx b/apps/web/src/routes/docs/halo/+page.svx index 2f03dec..7aa8f4f 100644 --- a/apps/web/src/routes/docs/halo/+page.svx +++ b/apps/web/src/routes/docs/halo/+page.svx @@ -63,12 +63,12 @@ import { Halo } from "$lib/motion-core"; default: "0.5", description: "Camera rotation speed multiplier.", }, - { - prop: "backgroundColor", - type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', - default: '"#000000"', - description: "Color of the background behind the scattering effect.", - }, + { + prop: "backgroundColor", + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', + default: '"#17181A"', + description: "Color of the background behind the scattering effect.", + }, { prop: "cameraDistance", type: "number", diff --git a/apps/web/src/routes/docs/specular-band/+page.svx b/apps/web/src/routes/docs/specular-band/+page.svx index ba3484b..ae0faf7 100644 --- a/apps/web/src/routes/docs/specular-band/+page.svx +++ b/apps/web/src/routes/docs/specular-band/+page.svx @@ -63,12 +63,12 @@ import { SpecularBand } from "$lib/motion-core"; default: '"#FF6900"', description: "Base color of the specular bands.", }, - { - prop: "backgroundColor", - type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', - default: '"#000000"', - description: "Color of the background behind the bands.", - }, + { + prop: "backgroundColor", + type: 'string | number | [number, number, number] | { r: number; g: number; b: number }', + default: '"#17181A"', + description: "Color of the background behind the bands.", + }, { prop: "speed", type: "number", diff --git a/apps/web/static/registry/components.json b/apps/web/static/registry/components.json index eebe84a..3394656 100644 --- a/apps/web/static/registry/components.json +++ b/apps/web/static/registry/components.json @@ -1,7 +1,8 @@ { - "components/ascii-renderer/AsciiRenderer.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9Bc2NpaVJlbmRlcmVyU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgZGVuc2l0eSBmb3IgdGhlIEFTQ0lJIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAyNQoJCSAqLwoJCWRlbnNpdHk/OiBTY2VuZVByb3BzWyJkZW5zaXR5Il07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZ2VuZXJhdGlvbiB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgMjUKCQkgKi8KCQlzdHJlbmd0aD86IFNjZW5lUHJvcHNbInN0cmVuZ3RoIl07CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgQVNDSUkgY2hhcmFjdGVycy4KCQkgKiBAZGVmYXVsdCAiIzAwZmYwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJc3JjLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkZW5zaXR5ID0gMjUsCgkJc3RyZW5ndGggPSAyNSwKCQljb2xvciA9ICIjMDBmZjAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIGltYWdlPXtzcmN9IHtkZW5zaXR5fSB7c3RyZW5ndGh9IHtjb2xvcn0ge2JhY2tncm91bmRDb2xvcn0gLz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/ascii-renderer/AsciiRendererScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgZGVuc2l0eSBmb3IgdGhlIEFTQ0lJIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAyNS4wCgkJICovCgkJZGVuc2l0eT86IG51bWJlcjsKCQkvKioKCQkgKiBJbnRlbnNpdHkgb2YgdGhlIEFTQ0lJIGNoYXJhY3RlciBnZW5lcmF0aW9uIHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCAyNS4wCgkJICovCgkJc3RyZW5ndGg/OiBudW1iZXI7CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgQVNDSUkgY2hhcmFjdGVycy4KCQkgKiBAZGVmYXVsdCAiIzAwZmYwMCIKCQkgKi8KCQljb2xvcj86IHN0cmluZzsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMDAwMDAwIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IHN0cmluZzsKCX0KCglsZXQgewoJCWltYWdlLAoJCWRlbnNpdHkgPSAyNS4wLAoJCXN0cmVuZ3RoID0gMjUuMCwKCQljb2xvciA9ICIjMDBmZjAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXVUaW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVUZXh0dXJlOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdUNvdmVyU2NhbGU6IHsgdmFsdWU6IFZlYzIgfTsKCQl1Q292ZXJPZmZzZXQ6IHsgdmFsdWU6IFZlYzIgfTsKCQl1RGVuc2l0eTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCgljb25zdCByZXNvbHV0aW9uVW5pZm9ybSA9IG5ldyBWZWMyKDEsIDEpOwoJY29uc3QgY292ZXJTY2FsZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCWNvbnN0IGNvdmVyT2Zmc2V0VW5pZm9ybSA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3QgY29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMCwgMSwgMCk7Cgljb25zdCBiYWNrZ3JvdW5kQ29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMCwgMCwgMCk7CgoJbGV0IGNhbnZhc1dpZHRoID0gMTsKCWxldCBjYW52YXNIZWlnaHQgPSAxOwoJbGV0IGltYWdlV2lkdGggPSAxOwoJbGV0IGltYWdlSGVpZ2h0ID0gMTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoJY29uc3QgcGFyc2VIZXhDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJY29uc3QgaGV4ID0gdmFsdWUucmVwbGFjZSgiIyIsICIiKS50cmltKCk7CgkJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleFsxXSArIGhleFsxXSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDAsIDIpLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCXJldHVybiBudWxsOwoJfTsKCglsZXQgY3NzQ29sb3JDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsIHwgdW5kZWZpbmVkOwoJY29uc3QgcGFyc2VDc3NDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwoJCWlmIChjc3NDb2xvckNvbnRleHQgPT09IHVuZGVmaW5lZCkgewoJCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQkJcGFyc2VyQ2FudmFzLndpZHRoID0gMTsKCQkJcGFyc2VyQ2FudmFzLmhlaWdodCA9IDE7CgkJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJCX0KCQlpZiAoIWNzc0NvbG9yQ29udGV4dCkgcmV0dXJuIG51bGw7CgoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7CgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlOwoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBjc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlOwoKCQlpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQkJcmV0dXJuIHBhcnNlSGV4Q29sb3Iobm9ybWFsaXplZCk7CgkJfQoKCQljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CgkJaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7CgkJY29uc3QgcGFydHMgPSBtYXRjaFsxXQoJCQkuc3BsaXQoIiwiKQoJCQkubWFwKChwYXJ0KSA9PiBOdW1iZXIucGFyc2VGbG9hdChwYXJ0LnRyaW0oKSkpCgkJCS5maWx0ZXIoKHBhcnQpID0+IE51bWJlci5pc0Zpbml0ZShwYXJ0KSk7CgkJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSkgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gWwoJCQljbGFtcDAxKHBhcnRzWzBdIC8gc2NhbGUpLAoJCQljbGFtcDAxKHBhcnRzWzFdIC8gc2NhbGUpLAoJCQljbGFtcDAxKHBhcnRzWzJdIC8gc2NhbGUpLAoJCV07Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBzdHJpbmcsCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQljb25zdCBwYXJzZWQgPSB0cmltbWVkLnN0YXJ0c1dpdGgoIiMiKQoJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCXJldHVybiBwYXJzZWQgPz8gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBzdHJpbmcsCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQlyZXR1cm4gW3NyZ2JUb0xpbmVhcihyKSwgc3JnYlRvTGluZWFyKGcpLCBzcmdiVG9MaW5lYXIoYildOwoJfTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKCkgPT4gewoJCWlmICgKCQkJY2FudmFzV2lkdGggPD0gMCB8fAoJCQljYW52YXNIZWlnaHQgPD0gMCB8fAoJCQlpbWFnZVdpZHRoIDw9IDAgfHwKCQkJaW1hZ2VIZWlnaHQgPD0gMAoJCSkgewoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBzY3JlZW5Bc3BlY3QgPSBjYW52YXNXaWR0aCAvIGNhbnZhc0hlaWdodDsKCQljb25zdCBpbWFnZUFzcGVjdCA9IGltYWdlV2lkdGggLyBpbWFnZUhlaWdodDsKCgkJbGV0IHNjYWxlWCA9IDE7CgkJbGV0IHNjYWxlWSA9IDE7CgkJbGV0IG9mZnNldFggPSAwOwoJCWxldCBvZmZzZXRZID0gMDsKCgkJaWYgKHNjcmVlbkFzcGVjdCA+IGltYWdlQXNwZWN0KSB7CgkJCXNjYWxlWSA9IGltYWdlQXNwZWN0IC8gc2NyZWVuQXNwZWN0OwoJCQlvZmZzZXRZID0gKDEgLSBzY2FsZVkpICogMC41OwoJCX0gZWxzZSB7CgkJCXNjYWxlWCA9IHNjcmVlbkFzcGVjdCAvIGltYWdlQXNwZWN0OwoJCQlvZmZzZXRYID0gKDEgLSBzY2FsZVgpICogMC41OwoJCX0KCgkJY292ZXJTY2FsZVVuaWZvcm0uc2V0KHNjYWxlWCwgc2NhbGVZKTsKCQljb3Zlck9mZnNldFVuaWZvcm0uc2V0KG9mZnNldFgsIG9mZnNldFkpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwoJCXVuaWZvcm0gdmVjMiB1Q292ZXJTY2FsZTsKCQl1bmlmb3JtIHZlYzIgdUNvdmVyT2Zmc2V0OwoJCXVuaWZvcm0gZmxvYXQgdURlbnNpdHk7CgkJdW5pZm9ybSBmbG9hdCB1U3RyZW5ndGg7CgkJdW5pZm9ybSB2ZWMzIHVDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdUJhY2tncm91bmRDb2xvcjsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMiBtaXJyb3JlZCh2ZWMyIHZhbHVlKSB7CgkJCXZlYzIgbSA9IG1vZCh2YWx1ZSwgMi4wKTsKCQkJcmV0dXJuIG1peChtLCAyLjAgLSBtLCBzdGVwKDEuMCwgbSkpOwoJCX0KCgkJZmxvYXQgZGlnaXQodmVjMiBwLCBmbG9hdCBpbnRlbnNpdHkpewoJCQlwID0gKGZyYWN0KHApIC0gMC41KSAqIDEuMiArIDAuNTsKCgkJCWlmIChwLnggPCAwLjAgfHwgcC54ID4gMS4wIHx8IHAueSA8IDAuMCB8fCBwLnkgPiAxLjApIHJldHVybiAwLjA7CgoJCQlmbG9hdCB4ID0gZnJhY3QocC54ICogNS4wKTsKCQkJZmxvYXQgeSA9IGZyYWN0KCgxLjAgLSBwLnkpICogNS4wKTsKCQkJaW50IGkgPSBpbnQoZmxvb3IoKDEuMCAtIHAueSkgKiA1LjApKTsKCQkJaW50IGogPSBpbnQoZmxvb3IocC54ICogNS4wKSk7CgkJCWludCBuID0gKGktMikqKGktMikrKGotMikqKGotMik7CgkJCWZsb2F0IGYgPSBmbG9hdChuKS8xNi4wOwoJCQlmbG9hdCBpc09uID0gc21vb3Roc3RlcCgwLjEsIDAuMiwgaW50ZW5zaXR5IC0gZik7CgkJCXJldHVybiBpc09uICogKDAuMiArIHkqNC4wLzUuMCkgKiAoMC43NSArIHgvNC4wKTsKCQl9CgoJCWZsb2F0IG9uT2ZmKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMpIHsKCQkJcmV0dXJuIHN0ZXAoYywgc2luKHVUaW1lICsgYSpjb3ModVRpbWUqYikpKTsKCQl9CgoJCWZsb2F0IGRpc3BsYWNlKHZlYzIgbG9vaykgewoJCQlmbG9hdCB5ID0gKGxvb2sueSAtIG1vZCh1VGltZS80LjAsIDEuMCkpOwoJCQlmbG9hdCB3aW5kb3cgPSAxLjAgLyAoMS4wICsgNTAuMCAqIHkgKiB5KTsKCQkJcmV0dXJuIHNpbihsb29rLnkgKiAyMC4wICsgdVRpbWUpLzgwLjAgKiBvbk9mZig0LjAsIDIuMCwgMC44KSAqICgxLjAgKyBjb3ModVRpbWUqNjAuMCkpICogd2luZG93OwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBwID0gdlV2OwoJCQlmbG9hdCBhc3BlY3QgPSB1UmVzb2x1dGlvbi54IC8gbWF4KHVSZXNvbHV0aW9uLnksIDEuMCk7CgkJCXAueCAqPSBhc3BlY3Q7CgoJCQl2ZWMyIHBEaXNwbGFjZWQgPSBwOwoJCQlwRGlzcGxhY2VkLnggKz0gZGlzcGxhY2UocCkgKiAwLjU7CgoJCQl2ZWMyIGdyaWQgPSB2ZWMyKDMuMCwgMS4wKSAqIHVEZW5zaXR5OwoKCQkJdmVjMiBjZWxsSW5kZXggPSBmbG9vcihwRGlzcGxhY2VkICogZ3JpZCk7CgkJCXZlYzIgY2VsbENlbnRlclAgPSAoY2VsbEluZGV4ICsgMC41KSAvIGdyaWQ7CgoJCQl2ZWMyIGNlbGxDZW50ZXJVViA9IGNlbGxDZW50ZXJQOwoJCQljZWxsQ2VudGVyVVYueCAvPSBhc3BlY3Q7CgoJCQl2ZWMyIGNlbGxDZW50ZXJVVkNvdmVyID0gKGNlbGxDZW50ZXJVViAqIHVDb3ZlclNjYWxlKSArIHVDb3Zlck9mZnNldDsKCQkJdmVjMyB0ZXhDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgbWlycm9yZWQoY2VsbENlbnRlclVWQ292ZXIpKS5yZ2I7CgoJCQlmbG9hdCBpbnRlbnNpdHkgPSBkb3QodGV4Q29sb3IsIHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCkpOwoJCQlpbnRlbnNpdHkgPSBwb3coaW50ZW5zaXR5LCAyLjgpOwoKCQkJZmxvYXQgYmFyID0gbW9kKHAueSArIHVUaW1lICogMjAuMCwgMS4wKSA8IDAuMiA/IDEuNCA6IDEuMDsKCgkJCXZlYzIgZ3JpZFAgPSBwRGlzcGxhY2VkICogZ3JpZDsKCQkJZmxvYXQgbWlkZGxlID0gZGlnaXQoZ3JpZFAsIGludGVuc2l0eSAqIDEuMyAqIHVTdHJlbmd0aCk7CgoJCQlmbG9hdCBvZmYgPSAwLjAwMjsKCQkJZmxvYXQgc3VtID0gMC4wOwoJCQlmb3IgKGZsb2F0IGkgPSAtMS4wOyBpIDwgMi4wOyBpICs9IDEuMCkgewoJCQkJZm9yIChmbG9hdCBqID0gLTEuMDsgaiA8IDIuMDsgaiArPSAxLjApIHsKCQkJCQl2ZWMyIG9mZnNldEdyaWRQID0gZ3JpZFAgKyB2ZWMyKG9mZiAqIGkgKiBncmlkLngsIG9mZiAqIGogKiBncmlkLnkpOwoJCQkJCXN1bSArPSBkaWdpdChvZmZzZXRHcmlkUCwgaW50ZW5zaXR5ICogMS4zICogdVN0cmVuZ3RoKTsKCQkJCX0KCQkJfQoKCQkJdmVjMyBlbWlzc2lvbiA9IHZlYzMoMC42KSAqIG1pZGRsZSArIHN1bSAvIDE1LjAgKiB1Q29sb3IgKiBiYXI7CgkJCXZlYzMgZmluYWxDb2xvciA9IHVCYWNrZ3JvdW5kQ29sb3IgKyBlbWlzc2lvbjsKCgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGZpbmFsQ29sb3IpLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVEZW5zaXR5LnZhbHVlID0gZGVuc2l0eTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQl1bmlmb3Jtcy51U3RyZW5ndGgudmFsdWUgPSBzdHJlbmd0aDsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKGNvbG9yLCBbMCwgMSwgMF0pOwoJCWNvbG9yVW5pZm9ybS5zZXQociwgZywgYik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b0xpbmVhclJnYihiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJYmFja2dyb3VuZENvbG9yVW5pZm9ybS5zZXQociwgZywgYik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlKSByZXR1cm47CgkJc2V0SW1hZ2VTb3VyY2UoaW1hZ2UpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGltYWdlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBjb3ZlclNjYWxlVW5pZm9ybSB9LAoJCQl1Q292ZXJPZmZzZXQ6IHsgdmFsdWU6IGNvdmVyT2Zmc2V0VW5pZm9ybSB9LAoJCQl1RGVuc2l0eTogeyB2YWx1ZTogZGVuc2l0eSB9LAoJCQl1U3RyZW5ndGg6IHsgdmFsdWU6IHN0cmVuZ3RoIH0sCgkJCXVDb2xvcjogeyB2YWx1ZTogY29sb3JVbmlmb3JtIH0sCgkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IGJhY2tncm91bmRDb2xvclVuaWZvcm0gfSwKCQl9OwoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQlsZXQgZGlzcG9zZWQgPSBmYWxzZTsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKGRpc3Bvc2VkIHx8IHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJaW1hZ2VXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoIHx8IDE7CgkJCQlpbWFnZUhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMTsKCQkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCQkJfTsKCQkJaW1nLnNyYyA9IHNvdXJjZTsKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtLCBmcnVzdHVtQ3VsbGVkOiBmYWxzZSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJY2FudmFzV2lkdGggPSB3aWR0aDsKCQkJY2FudmFzSGVpZ2h0ID0gaGVpZ2h0OwoJCQlyZXNvbHV0aW9uVW5pZm9ybS5zZXQod2lkdGgsIGhlaWdodCk7CgkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCQl9OwoKCQlyZXNpemUoKTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJZGlzcG9zZWQgPSB0cnVlOwoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlzZXRJbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJcHJvZ3JhbS5yZW1vdmUoKTsKCQkJZ2VvbWV0cnkucmVtb3ZlKCk7CgkJCWlmIChpbWFnZVRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZShpbWFnZVRleHR1cmUudGV4dHVyZSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/ascii-renderer/AsciiRenderer.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9Bc2NpaVJlbmRlcmVyU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEdyaWQgZGVuc2l0eSBmb3IgdGhlIEFTQ0lJIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAyNQoJCSAqLwoJCWRlbnNpdHk/OiBTY2VuZVByb3BzWyJkZW5zaXR5Il07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZ2VuZXJhdGlvbiB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgMjUKCQkgKi8KCQlzdHJlbmd0aD86IFNjZW5lUHJvcHNbInN0cmVuZ3RoIl07CgkJLyoqCgkJICogRm9yZWdyb3VuZCBjb2xvciBvZiB0aGUgQVNDSUkgY2hhcmFjdGVycy4KCQkgKiBAZGVmYXVsdCAiIzAwZmYwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzE3MTgxQSIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJc3JjLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkZW5zaXR5ID0gMjUsCgkJc3RyZW5ndGggPSAyNSwKCQljb2xvciA9ICIjMDBmZjAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzE3MTgxQSIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIGltYWdlPXtzcmN9IHtkZW5zaXR5fSB7c3RyZW5ndGh9IHtjb2xvcn0ge2JhY2tncm91bmRDb2xvcn0gLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/ascii-renderer/AsciiRendererScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CglpbXBvcnQgeyB0b0xpbmVhclJnYiB9IGZyb20gIi4uL2hlbHBlcnMvY29sb3IiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBHcmlkIGRlbnNpdHkgZm9yIHRoZSBBU0NJSSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMjUuMAoJCSAqLwoJCWRlbnNpdHk/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZ2VuZXJhdGlvbiB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgMjUuMAoJCSAqLwoJCXN0cmVuZ3RoPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3Igb2YgdGhlIEFTQ0lJIGNoYXJhY3RlcnMuCgkJICogQGRlZmF1bHQgIiMwMGZmMDAiCgkJICovCgkJY29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFja2dyb3VuZCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiIzE3MTgxQSIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQlkZW5zaXR5ID0gMjUuMCwKCQlzdHJlbmd0aCA9IDI1LjAsCgkJY29sb3IgPSAiIzAwZmYwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMxNzE4MUEiLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIFVuaWZvcm1TdGF0ZSA9IHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGV4dHVyZTogeyB2YWx1ZTogVGV4dHVyZSB9OwoJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBWZWMyIH07CgkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBWZWMyIH07CgkJdURlbnNpdHk6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVTdHJlbmd0aDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJfTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPFVuaWZvcm1TdGF0ZT4oKTsKCWxldCBzZXRJbWFnZVNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCWNvbnN0IGNvdmVyU2NhbGVVbmlmb3JtID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCBjb3Zlck9mZnNldFVuaWZvcm0gPSBuZXcgVmVjMigwLCAwKTsKCWNvbnN0IGNvbG9yVW5pZm9ybSA9IG5ldyBWZWMzKDAsIDEsIDApOwoJY29uc3QgYmFja2dyb3VuZENvbG9yVW5pZm9ybSA9IG5ldyBWZWMzKDIzIC8gMjU1LCAyNCAvIDI1NSwgMjYgLyAyNTUpOwoKCWxldCBjYW52YXNXaWR0aCA9IDE7CglsZXQgY2FudmFzSGVpZ2h0ID0gMTsKCWxldCBpbWFnZVdpZHRoID0gMTsKCWxldCBpbWFnZUhlaWdodCA9IDE7CgoJY29uc3QgdXBkYXRlQ292ZXJVbmlmb3JtcyA9ICgpID0+IHsKCQlpZiAoCgkJCWNhbnZhc1dpZHRoIDw9IDAgfHwKCQkJY2FudmFzSGVpZ2h0IDw9IDAgfHwKCQkJaW1hZ2VXaWR0aCA8PSAwIHx8CgkJCWltYWdlSGVpZ2h0IDw9IDAKCQkpIHsKCQkJcmV0dXJuOwoJCX0KCgkJY29uc3Qgc2NyZWVuQXNwZWN0ID0gY2FudmFzV2lkdGggLyBjYW52YXNIZWlnaHQ7CgkJY29uc3QgaW1hZ2VBc3BlY3QgPSBpbWFnZVdpZHRoIC8gaW1hZ2VIZWlnaHQ7CgoJCWxldCBzY2FsZVggPSAxOwoJCWxldCBzY2FsZVkgPSAxOwoJCWxldCBvZmZzZXRYID0gMDsKCQlsZXQgb2Zmc2V0WSA9IDA7CgoJCWlmIChzY3JlZW5Bc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQlzY2FsZVkgPSBpbWFnZUFzcGVjdCAvIHNjcmVlbkFzcGVjdDsKCQkJb2Zmc2V0WSA9ICgxIC0gc2NhbGVZKSAqIDAuNTsKCQl9IGVsc2UgewoJCQlzY2FsZVggPSBzY3JlZW5Bc3BlY3QgLyBpbWFnZUFzcGVjdDsKCQkJb2Zmc2V0WCA9ICgxIC0gc2NhbGVYKSAqIDAuNTsKCQl9CgoJCWNvdmVyU2NhbGVVbmlmb3JtLnNldChzY2FsZVgsIHNjYWxlWSk7CgkJY292ZXJPZmZzZXRVbmlmb3JtLnNldChvZmZzZXRYLCBvZmZzZXRZKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgdUNvdmVyU2NhbGU7CgkJdW5pZm9ybSB2ZWMyIHVDb3Zlck9mZnNldDsKCQl1bmlmb3JtIGZsb2F0IHVEZW5zaXR5OwoJCXVuaWZvcm0gZmxvYXQgdVN0cmVuZ3RoOwoJCXVuaWZvcm0gdmVjMyB1Q29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVCYWNrZ3JvdW5kQ29sb3I7CgoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZlYzIgbWlycm9yZWQodmVjMiB2YWx1ZSkgewoJCQl2ZWMyIG0gPSBtb2QodmFsdWUsIDIuMCk7CgkJCXJldHVybiBtaXgobSwgMi4wIC0gbSwgc3RlcCgxLjAsIG0pKTsKCQl9CgoJCWZsb2F0IGRpZ2l0KHZlYzIgcCwgZmxvYXQgaW50ZW5zaXR5KXsKCQkJcCA9IChmcmFjdChwKSAtIDAuNSkgKiAxLjIgKyAwLjU7CgoJCQlpZiAocC54IDwgMC4wIHx8IHAueCA+IDEuMCB8fCBwLnkgPCAwLjAgfHwgcC55ID4gMS4wKSByZXR1cm4gMC4wOwoKCQkJZmxvYXQgeCA9IGZyYWN0KHAueCAqIDUuMCk7CgkJCWZsb2F0IHkgPSBmcmFjdCgoMS4wIC0gcC55KSAqIDUuMCk7CgkJCWludCBpID0gaW50KGZsb29yKCgxLjAgLSBwLnkpICogNS4wKSk7CgkJCWludCBqID0gaW50KGZsb29yKHAueCAqIDUuMCkpOwoJCQlpbnQgbiA9IChpLTIpKihpLTIpKyhqLTIpKihqLTIpOwoJCQlmbG9hdCBmID0gZmxvYXQobikvMTYuMDsKCQkJZmxvYXQgaXNPbiA9IHNtb290aHN0ZXAoMC4xLCAwLjIsIGludGVuc2l0eSAtIGYpOwoJCQlyZXR1cm4gaXNPbiAqICgwLjIgKyB5KjQuMC81LjApICogKDAuNzUgKyB4LzQuMCk7CgkJfQoKCQlmbG9hdCBvbk9mZihmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjKSB7CgkJCXJldHVybiBzdGVwKGMsIHNpbih1VGltZSArIGEqY29zKHVUaW1lKmIpKSk7CgkJfQoKCQlmbG9hdCBkaXNwbGFjZSh2ZWMyIGxvb2spIHsKCQkJZmxvYXQgeSA9IChsb29rLnkgLSBtb2QodVRpbWUvNC4wLCAxLjApKTsKCQkJZmxvYXQgd2luZG93ID0gMS4wIC8gKDEuMCArIDUwLjAgKiB5ICogeSk7CgkJCXJldHVybiBzaW4obG9vay55ICogMjAuMCArIHVUaW1lKS84MC4wICogb25PZmYoNC4wLCAyLjAsIDAuOCkgKiAoMS4wICsgY29zKHVUaW1lKjYwLjApKSAqIHdpbmRvdzsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzIgcCA9IHZVdjsKCQkJZmxvYXQgYXNwZWN0ID0gdVJlc29sdXRpb24ueCAvIG1heCh1UmVzb2x1dGlvbi55LCAxLjApOwoJCQlwLnggKj0gYXNwZWN0OwoKCQkJdmVjMiBwRGlzcGxhY2VkID0gcDsKCQkJcERpc3BsYWNlZC54ICs9IGRpc3BsYWNlKHApICogMC41OwoKCQkJdmVjMiBncmlkID0gdmVjMigzLjAsIDEuMCkgKiB1RGVuc2l0eTsKCgkJCXZlYzIgY2VsbEluZGV4ID0gZmxvb3IocERpc3BsYWNlZCAqIGdyaWQpOwoJCQl2ZWMyIGNlbGxDZW50ZXJQID0gKGNlbGxJbmRleCArIDAuNSkgLyBncmlkOwoKCQkJdmVjMiBjZWxsQ2VudGVyVVYgPSBjZWxsQ2VudGVyUDsKCQkJY2VsbENlbnRlclVWLnggLz0gYXNwZWN0OwoKCQkJdmVjMiBjZWxsQ2VudGVyVVZDb3ZlciA9IChjZWxsQ2VudGVyVVYgKiB1Q292ZXJTY2FsZSkgKyB1Q292ZXJPZmZzZXQ7CgkJCXZlYzMgdGV4Q29sb3IgPSB0ZXh0dXJlMkQodVRleHR1cmUsIG1pcnJvcmVkKGNlbGxDZW50ZXJVVkNvdmVyKSkucmdiOwoKCQkJZmxvYXQgaW50ZW5zaXR5ID0gZG90KHRleENvbG9yLCB2ZWMzKDAuMjk5LCAwLjU4NywgMC4xMTQpKTsKCQkJaW50ZW5zaXR5ID0gcG93KGludGVuc2l0eSwgMi44KTsKCgkJCWZsb2F0IGJhciA9IG1vZChwLnkgKyB1VGltZSAqIDIwLjAsIDEuMCkgPCAwLjIgPyAxLjQgOiAxLjA7CgoJCQl2ZWMyIGdyaWRQID0gcERpc3BsYWNlZCAqIGdyaWQ7CgkJCWZsb2F0IG1pZGRsZSA9IGRpZ2l0KGdyaWRQLCBpbnRlbnNpdHkgKiAxLjMgKiB1U3RyZW5ndGgpOwoKCQkJZmxvYXQgb2ZmID0gMC4wMDI7CgkJCWZsb2F0IHN1bSA9IDAuMDsKCQkJZm9yIChmbG9hdCBpID0gLTEuMDsgaSA8IDIuMDsgaSArPSAxLjApIHsKCQkJCWZvciAoZmxvYXQgaiA9IC0xLjA7IGogPCAyLjA7IGogKz0gMS4wKSB7CgkJCQkJdmVjMiBvZmZzZXRHcmlkUCA9IGdyaWRQICsgdmVjMihvZmYgKiBpICogZ3JpZC54LCBvZmYgKiBqICogZ3JpZC55KTsKCQkJCQlzdW0gKz0gZGlnaXQob2Zmc2V0R3JpZFAsIGludGVuc2l0eSAqIDEuMyAqIHVTdHJlbmd0aCk7CgkJCQl9CgkJCX0KCgkJCXZlYzMgZW1pc3Npb24gPSB2ZWMzKDAuNikgKiBtaWRkbGUgKyBzdW0gLyAxNS4wICogdUNvbG9yICogYmFyOwoJCQl2ZWMzIGZpbmFsQ29sb3IgPSB1QmFja2dyb3VuZENvbG9yICsgZW1pc3Npb247CgoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihmaW5hbENvbG9yKSwgMS4wKTsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQl1bmlmb3Jtcy51RGVuc2l0eS52YWx1ZSA9IGRlbnNpdHk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXVuaWZvcm1zKSByZXR1cm47CgkJdW5pZm9ybXMudVN0cmVuZ3RoLnZhbHVlID0gc3RyZW5ndGg7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b0xpbmVhclJnYihjb2xvciwgWzAsIDEsIDBdKTsKCQljb2xvclVuaWZvcm0uc2V0KHIsIGcsIGIpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IoYmFja2dyb3VuZENvbG9yLCBbCgkJCTIzIC8gMjU1LAoJCQkyNCAvIDI1NSwKCQkJMjYgLyAyNTUsCgkJXSk7CgkJYmFja2dyb3VuZENvbG9yVW5pZm9ybS5zZXQociwgZywgYik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlKSByZXR1cm47CgkJc2V0SW1hZ2VTb3VyY2UoaW1hZ2UpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGltYWdlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiByZXNvbHV0aW9uVW5pZm9ybSB9LAoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBjb3ZlclNjYWxlVW5pZm9ybSB9LAoJCQl1Q292ZXJPZmZzZXQ6IHsgdmFsdWU6IGNvdmVyT2Zmc2V0VW5pZm9ybSB9LAoJCQl1RGVuc2l0eTogeyB2YWx1ZTogZGVuc2l0eSB9LAoJCQl1U3RyZW5ndGg6IHsgdmFsdWU6IHN0cmVuZ3RoIH0sCgkJCXVDb2xvcjogeyB2YWx1ZTogY29sb3JVbmlmb3JtIH0sCgkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IGJhY2tncm91bmRDb2xvclVuaWZvcm0gfSwKCQl9OwoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQlsZXQgZGlzcG9zZWQgPSBmYWxzZTsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKGRpc3Bvc2VkIHx8IHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJaW1hZ2VXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoIHx8IDE7CgkJCQlpbWFnZUhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMTsKCQkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCQkJfTsKCQkJaW1nLnNyYyA9IHNvdXJjZTsKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtLCBmcnVzdHVtQ3VsbGVkOiBmYWxzZSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJY2FudmFzV2lkdGggPSB3aWR0aDsKCQkJY2FudmFzSGVpZ2h0ID0gaGVpZ2h0OwoJCQlyZXNvbHV0aW9uVW5pZm9ybS5zZXQod2lkdGgsIGhlaWdodCk7CgkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoKTsKCQl9OwoKCQlyZXNpemUoKTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJZGlzcG9zZWQgPSB0cnVlOwoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlzZXRJbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJcHJvZ3JhbS5yZW1vdmUoKTsKCQkJZ2VvbWV0cnkucmVtb3ZlKCk7CgkJCWlmIChpbWFnZVRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZShpbWFnZVRleHR1cmUudGV4dHVyZSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "utils/cn.ts": "aW1wb3J0IHsgdHlwZSBDbGFzc1ZhbHVlLCBjbHN4IH0gZnJvbSAiY2xzeCI7CmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICJ0YWlsd2luZC1tZXJnZSI7CgpleHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHsKCXJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSk7Cn0K", + "helpers/color.ts": "ZXhwb3J0IHR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9Cgl8IHN0cmluZwoJfCBudW1iZXIKCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgl8IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoKY29uc3QgY2xhbXAgPSAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PgoJTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7CgpleHBvcnQgY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBjbGFtcCh2YWx1ZSwgMCwgMSk7CgpleHBvcnQgY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+Cgl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCglyOiBudW1iZXIsCglnOiBudW1iZXIsCgliOiBudW1iZXIsCik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7Cgljb25zdCBzY2FsZSA9IE1hdGgubWF4KHIsIGcsIGIpID4gMSA/IDI1NSA6IDE7CglyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwp9OwoKZXhwb3J0IGNvbnN0IHBhcnNlSGV4Q29sb3IgPSAoCgl2YWx1ZTogc3RyaW5nLAopOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07Cgl9CglpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCX0KCXJldHVybiBudWxsOwp9OwoKbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCmV4cG9ydCBjb25zdCBwYXJzZUNzc0NvbG9yID0gKAoJdmFsdWU6IHN0cmluZywKKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CglpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CglpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJfQoJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7Cgljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7Cgljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCglpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCX0KCgljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CglpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkuc3BsaXQoIiwiKQoJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSk7Cn07CgpleHBvcnQgY29uc3QgdG9SZ2IgPSAoCgl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CglpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJcmV0dXJuIFsKCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkoaW50ICYgMjU1KSAvIDI1NSwKCQldOwoJfQoKCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQljb25zdCBwYXJzZWQgPSB0cmltbWVkLnN0YXJ0c1dpdGgoIiMiKQoJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCXJldHVybiBwYXJzZWQgPz8gZmFsbGJhY2s7Cgl9CgoJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQodmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7Cgl9CgoJaWYgKAoJCXZhbHVlICYmCgkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCSJyIiBpbiB2YWx1ZSAmJgoJCSJnIiBpbiB2YWx1ZSAmJgoJCSJiIiBpbiB2YWx1ZQoJKSB7CgkJY29uc3QgcmdiID0gdmFsdWUgYXMgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7Cgl9CgoJcmV0dXJuIGZhbGxiYWNrOwp9OwoKZXhwb3J0IGNvbnN0IHRvTGluZWFyUmdiID0gKAoJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCglmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAopOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCXJldHVybiBbc3JnYlRvTGluZWFyKHIpLCBzcmdiVG9MaW5lYXIoZyksIHNyZ2JUb0xpbmVhcihiKV07Cn07Cg==", "components/card-3d/Card3D.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9DYXJkM0RTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IEZhY2VUcmFja2VyIGZyb20gIi4vQ2FyZDNERmFjZVRyYWNrZXIuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogV2lkdGggb2YgdGhlIGNhcmQuCgkJICogQGRlZmF1bHQgMy4yCgkJICovCgkJd2lkdGg/OiBTY2VuZVByb3BzWyJ3aWR0aCJdOwoJCS8qKgoJCSAqIEhlaWdodCBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJaGVpZ2h0PzogU2NlbmVQcm9wc1siaGVpZ2h0Il07CgkJLyoqCgkJICogRGVwdGgvdGhpY2tuZXNzIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDAuMDgKCQkgKi8KCQlkZXB0aD86IFNjZW5lUHJvcHNbImRlcHRoIl07CgkJLyoqCgkJICogQ29ybmVyIHJhZGl1cyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJcmFkaXVzPzogU2NlbmVQcm9wc1sicmFkaXVzIl07CgkJLyoqCgkJICogU2hvdyB0aGUgY2FtZXJhIHByZXZpZXcgd2hlbiB0cmFja2luZyBpcyBlbmFibGVkLgoJCSAqIEBkZWZhdWx0IGZhbHNlCgkJICovCgkJc2hvd1ByZXZpZXc/OiBib29sZWFuOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWltYWdlLAoJCXdpZHRoID0gMy4yLAoJCWhlaWdodCA9IDIsCgkJZGVwdGggPSAwLjA4LAoJCXJhZGl1cyA9IDAuMTUsCgkJc2hvd1ByZXZpZXcgPSBmYWxzZSwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBoZWFkUG9zaXRpb24gPSAkc3RhdGUoeyB4OiAwLCB5OiAwLCB6OiAwIH0pOwoKCWZ1bmN0aW9uIGhhbmRsZUhlYWRNb3ZlKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSkgewoJCWhlYWRQb3NpdGlvbiA9IHBvc2l0aW9uOwoJfQo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUge2ltYWdlfSB7d2lkdGh9IHtoZWlnaHR9IHtkZXB0aH0ge3JhZGl1c30ge2hlYWRQb3NpdGlvbn0gLz4KCTwvZGl2Pgo8L2Rpdj4KCjxGYWNlVHJhY2tlciBvbkhlYWRNb3ZlPXtoYW5kbGVIZWFkTW92ZX0ge3Nob3dQcmV2aWV3fSAvPgo=", "components/card-3d/Card3DScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQm94LAoJCUNhbWVyYSwKCQlNZXNoLAoJCVByb2dyYW0sCgkJUmVuZGVyZXIsCgkJVGV4dHVyZSwKCQlUcmFuc2Zvcm0sCgl9IGZyb20gIm9nbCI7CgoJaW50ZXJmYWNlIEhlYWRQb3NpdGlvbiB7CgkJeDogbnVtYmVyOwoJCXk6IG51bWJlcjsKCQl6OiBudW1iZXI7Cgl9CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIFdpZHRoIG9mIHRoZSBjYXJkLgoJCSAqIEBkZWZhdWx0IDMuMgoJCSAqLwoJCXdpZHRoPzogbnVtYmVyOwoJCS8qKgoJCSAqIEhlaWdodCBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJaGVpZ2h0PzogbnVtYmVyOwoJCS8qKgoJCSAqIERlcHRoL3RoaWNrbmVzcyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjA4CgkJICovCgkJZGVwdGg/OiBudW1iZXI7CgkJLyoqCgkJICogQ29ybmVyIHJhZGl1cyBvZiB0aGUgY2FyZC4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJcmFkaXVzPzogbnVtYmVyOwoJCS8qKgoJCSAqIEhlYWQgcG9zaXRpb24gZm9yIHBhcmFsbGF4IGVmZmVjdC4KCQkgKi8KCQloZWFkUG9zaXRpb24/OiBIZWFkUG9zaXRpb247Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQl3aWR0aCA9IDMuMiwKCQloZWlnaHQgPSAyLAoJCWRlcHRoID0gMC4wOCwKCQlyYWRpdXMgPSAwLjE1LAoJCWhlYWRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCwgejogMCB9LAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHNldERpbWVuc2lvbnMgPQoJCSRzdGF0ZTwKCQkJKG5leHQ6IHsKCQkJCXdpZHRoOiBudW1iZXI7CgkJCQloZWlnaHQ6IG51bWJlcjsKCQkJCWRlcHRoOiBudW1iZXI7CgkJCQlyYWRpdXM6IG51bWJlcjsKCQkJfSkgPT4gdm9pZAoJCT4oKTsKCWxldCBzZXRJbWFnZVNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgaW5pdGlhbENhbWVyYVBvc2l0aW9uID0geyB4OiAwLCB5OiAwLCB6OiA1IH07Cgljb25zdCBsZXJwRmFjdG9yID0gMC4xOwoJbGV0IHNtb290aGVkUm90YXRpb24gPSB7IHg6IDAsIHk6IDAgfTsKCgljb25zdCBjcmVhdGVSb3VuZGVkQ2FyZEdlb21ldHJ5ID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQljYXJkV2lkdGg6IG51bWJlciwKCQljYXJkSGVpZ2h0OiBudW1iZXIsCgkJY2FyZERlcHRoOiBudW1iZXIsCgkJY2FyZFJhZGl1czogbnVtYmVyLAoJKSA9PiB7CgkJY29uc3Qgd2lkdGhTZWdtZW50cyA9IE1hdGgubWF4KDEyLCBNYXRoLnJvdW5kKGNhcmRXaWR0aCAqIDEwKSk7CgkJY29uc3QgaGVpZ2h0U2VnbWVudHMgPSBNYXRoLm1heCgxMiwgTWF0aC5yb3VuZChjYXJkSGVpZ2h0ICogMTApKTsKCQljb25zdCBkZXB0aFNlZ21lbnRzID0gMjsKCgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgQm94KGdsLCB7CgkJCXdpZHRoOiBjYXJkV2lkdGgsCgkJCWhlaWdodDogY2FyZEhlaWdodCwKCQkJZGVwdGg6IGNhcmREZXB0aCwKCQkJd2lkdGhTZWdtZW50cywKCQkJaGVpZ2h0U2VnbWVudHMsCgkJCWRlcHRoU2VnbWVudHMsCgkJfSk7CgoJCWNvbnN0IHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CgkJY29uc3Qgbm9ybWFsQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsOwoJCWNvbnN0IHBvc2l0aW9ucyA9IHBvc2l0aW9uQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCQljb25zdCBub3JtYWxzID0gbm9ybWFsQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCgkJY29uc3QgaGFsZlcgPSBjYXJkV2lkdGggKiAwLjU7CgkJY29uc3QgaGFsZkggPSBjYXJkSGVpZ2h0ICogMC41OwoJCWNvbnN0IHJvdW5kZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYXJkUmFkaXVzLCBoYWxmVywgaGFsZkgpKTsKCQljb25zdCBpbm5lclcgPSBNYXRoLm1heCgwLCBoYWxmVyAtIHJvdW5kZWQpOwoJCWNvbnN0IGlubmVySCA9IE1hdGgubWF4KDAsIGhhbGZIIC0gcm91bmRlZCk7CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAzKSB7CgkJCWNvbnN0IHggPSBwb3NpdGlvbnNbaV07CgkJCWNvbnN0IHkgPSBwb3NpdGlvbnNbaSArIDFdOwoJCQljb25zdCB6ID0gcG9zaXRpb25zW2kgKyAyXTsKCgkJCWNvbnN0IHN4ID0geCA8IDAgPyAtMSA6IDE7CgkJCWNvbnN0IHN5ID0geSA8IDAgPyAtMSA6IDE7CgoJCQljb25zdCBheCA9IE1hdGguYWJzKHgpOwoJCQljb25zdCBheSA9IE1hdGguYWJzKHkpOwoKCQkJY29uc3QgcXggPSBNYXRoLm1heChheCAtIGlubmVyVywgMCk7CgkJCWNvbnN0IHF5ID0gTWF0aC5tYXgoYXkgLSBpbm5lckgsIDApOwoJCQljb25zdCBxTGVuID0gTWF0aC5oeXBvdChxeCwgcXkpOwoKCQkJbGV0IG54TG9jYWwgPSAwOwoJCQlsZXQgbnlMb2NhbCA9IDA7CgoJCQlpZiAocUxlbiA+IDFlLTYpIHsKCQkJCW54TG9jYWwgPSBxeCAvIHFMZW47CgkJCQlueUxvY2FsID0gcXkgLyBxTGVuOwoJCQl9IGVsc2UgaWYgKGF4ID49IGF5KSB7CgkJCQlueExvY2FsID0gMTsKCQkJfSBlbHNlIHsKCQkJCW55TG9jYWwgPSAxOwoJCQl9CgoJCQlwb3NpdGlvbnNbaV0gPSBzeCAqIGlubmVyVyArIG54TG9jYWwgKiBzeCAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMV0gPSBzeSAqIGlubmVySCArIG55TG9jYWwgKiBzeSAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMl0gPSB6OwoKCQkJaWYgKE1hdGguYWJzKG5vcm1hbHNbaSArIDJdKSA+IDAuOSkgewoJCQkJbm9ybWFsc1tpXSA9IDA7CgkJCQlub3JtYWxzW2kgKyAxXSA9IDA7CgkJCQlub3JtYWxzW2kgKyAyXSA9IG5vcm1hbHNbaSArIDJdID4gMCA/IDEgOiAtMTsKCQkJfSBlbHNlIHsKCQkJCW5vcm1hbHNbaV0gPSBueExvY2FsICogc3g7CgkJCQlub3JtYWxzW2kgKyAxXSA9IG55TG9jYWwgKiBzeTsKCQkJCW5vcm1hbHNbaSArIDJdID0gMDsKCQkJfQoJCX0KCgkJcG9zaXRpb25BdHRyLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQlub3JtYWxBdHRyLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCQlyZXR1cm4gZ2VvbWV0cnk7Cgl9OwoKCWNvbnN0IGFwcGx5Q292ZXJVVk1hcHBpbmcgPSAoCgkJZ2VvbWV0cnk6IEJveCwKCQljYXJkV2lkdGg6IG51bWJlciwKCQljYXJkSGVpZ2h0OiBudW1iZXIsCgkJaW1hZ2VXaWR0aDogbnVtYmVyLAoJCWltYWdlSGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQljb25zdCB1dkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnV2OwoJCWNvbnN0IHBvc0F0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOwoJCWNvbnN0IG5vcm1hbEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDsKCQlpZiAoIXV2QXR0ciB8fCAhcG9zQXR0ciB8fCAhbm9ybWFsQXR0cikgcmV0dXJuOwoKCQljb25zdCB1dnMgPSB1dkF0dHIuZGF0YSBhcyBGbG9hdDMyQXJyYXk7CgkJY29uc3QgcG9zaXRpb25zID0gcG9zQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCQljb25zdCBub3JtYWxzID0gbm9ybWFsQXR0ci5kYXRhIGFzIEZsb2F0MzJBcnJheTsKCgkJY29uc3QgaW1hZ2VBc3BlY3QgPSBNYXRoLm1heCgxZS02LCBpbWFnZVdpZHRoIC8gaW1hZ2VIZWlnaHQpOwoJCWNvbnN0IGNhcmRBc3BlY3QgPSBNYXRoLm1heCgxZS02LCBjYXJkV2lkdGggLyBjYXJkSGVpZ2h0KTsKCgkJbGV0IHNjYWxlVSA9IDE7CgkJbGV0IHNjYWxlViA9IDE7CgkJbGV0IG9mZnNldFUgPSAwOwoJCWxldCBvZmZzZXRWID0gMDsKCgkJaWYgKGNhcmRBc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQlzY2FsZVYgPSBpbWFnZUFzcGVjdCAvIGNhcmRBc3BlY3Q7CgkJCW9mZnNldFYgPSAoMSAtIHNjYWxlVikgKiAwLjU7CgkJfSBlbHNlIHsKCQkJc2NhbGVVID0gY2FyZEFzcGVjdCAvIGltYWdlQXNwZWN0OwoJCQlvZmZzZXRVID0gKDEgLSBzY2FsZVUpICogMC41OwoJCX0KCgkJY29uc3QgY291bnQgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMzsKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3QgbmkgPSBpICogMzsKCQkJY29uc3QgdWkgPSBpICogMjsKCgkJCWlmIChNYXRoLmFicyhub3JtYWxzW25pICsgMl0pIDw9IDAuOSkgY29udGludWU7CgoJCQljb25zdCB4ID0gcG9zaXRpb25zW25pXTsKCQkJY29uc3QgeSA9IHBvc2l0aW9uc1tuaSArIDFdOwoJCQlsZXQgdSA9ICh4ICsgY2FyZFdpZHRoICogMC41KSAvIGNhcmRXaWR0aDsKCQkJbGV0IHYgPSAoeSArIGNhcmRIZWlnaHQgKiAwLjUpIC8gY2FyZEhlaWdodDsKCgkJCXUgPSB1ICogc2NhbGVVICsgb2Zmc2V0VTsKCQkJdiA9IHYgKiBzY2FsZVYgKyBvZmZzZXRWOwoKCQkJdXZzW3VpXSA9IHU7CgkJCXV2c1t1aSArIDFdID0gdjsKCQl9CgoJCXV2QXR0ci5uZWVkc1VwZGF0ZSA9IHRydWU7Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0RGltZW5zaW9ucykgcmV0dXJuOwoJCXNldERpbWVuc2lvbnMoeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgcmFkaXVzIH0pOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRJbWFnZVNvdXJjZSkgcmV0dXJuOwoJCXNldEltYWdlU291cmNlKGltYWdlKTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJYW50aWFsaWFzOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCwgewoJCQlmb3Y6IDUwLAoJCQlhc3BlY3Q6IDEsCgkJCW5lYXI6IDAuMSwKCQkJZmFyOiAxMDAsCgkJfSk7CgkJY2FtZXJhLnBvc2l0aW9uLnNldCgKCQkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLngsCgkJCWluaXRpYWxDYW1lcmFQb3NpdGlvbi55LAoJCQlpbml0aWFsQ2FtZXJhUG9zaXRpb24ueiwKCQkpOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBncm91cCA9IG5ldyBUcmFuc2Zvcm0oKTsKCQlncm91cC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJZmxpcFk6IHRydWUsCgkJfSk7CgoJCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoKCQkJdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsKCQkJdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7CgoJCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQkJdm9pZCBtYWluKCkgewoJCQkJdlV2ID0gdXY7CgkJCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJCQl9CgkJYDsKCgkJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlOwoJCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQkJdm9pZCBtYWluKCkgewoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVUZXh0dXJlLCB2VXYpOwoJCQl9CgkJYDsKCgkJY29uc3QgdW5pZm9ybXMgPSB7CgkJCXVUZXh0dXJlOiB7IHZhbHVlOiB0ZXh0dXJlIH0sCgkJfTsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogZmFsc2UsCgkJCWRlcHRoVGVzdDogdHJ1ZSwKCQkJZGVwdGhXcml0ZTogdHJ1ZSwKCQl9KTsKCgkJbGV0IGNhcmRXaWR0aCA9IHdpZHRoOwoJCWxldCBjYXJkSGVpZ2h0ID0gaGVpZ2h0OwoJCWxldCBjYXJkRGVwdGggPSBkZXB0aDsKCQlsZXQgY2FyZFJhZGl1cyA9IHJhZGl1czsKCQlsZXQgaW1hZ2VXaWR0aCA9IDE7CgkJbGV0IGltYWdlSGVpZ2h0ID0gMTsKCgkJbGV0IGdlb21ldHJ5ID0gY3JlYXRlUm91bmRlZENhcmRHZW9tZXRyeSgKCQkJZ2wsCgkJCU1hdGgubWF4KDAuMDAxLCBjYXJkV2lkdGgpLAoJCQlNYXRoLm1heCgwLjAwMSwgY2FyZEhlaWdodCksCgkJCU1hdGgubWF4KDAuMDAwMSwgY2FyZERlcHRoKSwKCQkJTWF0aC5tYXgoMCwgY2FyZFJhZGl1cyksCgkJKTsKCQlhcHBseUNvdmVyVVZNYXBwaW5nKAoJCQlnZW9tZXRyeSwKCQkJY2FyZFdpZHRoLAoJCQljYXJkSGVpZ2h0LAoJCQlpbWFnZVdpZHRoLAoJCQlpbWFnZUhlaWdodCwKCQkpOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJZ2VvbWV0cnksCgkJCXByb2dyYW0sCgkJCWZydXN0dW1DdWxsZWQ6IGZhbHNlLAoJCX0pOwoJCW1lc2guc2V0UGFyZW50KGdyb3VwKTsKCgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJdGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWltYWdlV2lkdGggPSBpbWcubmF0dXJhbFdpZHRoIHx8IGltZy53aWR0aCB8fCAxOwoJCQkJaW1hZ2VIZWlnaHQgPSBpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcuaGVpZ2h0IHx8IDE7CgkJCQlhcHBseUNvdmVyVVZNYXBwaW5nKAoJCQkJCWdlb21ldHJ5LAoJCQkJCWNhcmRXaWR0aCwKCQkJCQljYXJkSGVpZ2h0LAoJCQkJCWltYWdlV2lkdGgsCgkJCQkJaW1hZ2VIZWlnaHQsCgkJCQkpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgkJc2V0SW1hZ2VTb3VyY2UgPSBsb2FkSW1hZ2U7CgoJCWNvbnN0IHVwZGF0ZURpbWVuc2lvbnMgPSAobmV4dDogewoJCQl3aWR0aDogbnVtYmVyOwoJCQloZWlnaHQ6IG51bWJlcjsKCQkJZGVwdGg6IG51bWJlcjsKCQkJcmFkaXVzOiBudW1iZXI7CgkJfSkgPT4gewoJCQljb25zdCBuZXh0V2lkdGggPSBNYXRoLm1heCgwLjAwMSwgbmV4dC53aWR0aCk7CgkJCWNvbnN0IG5leHRIZWlnaHQgPSBNYXRoLm1heCgwLjAwMSwgbmV4dC5oZWlnaHQpOwoJCQljb25zdCBuZXh0RGVwdGggPSBNYXRoLm1heCgwLjAwMDEsIG5leHQuZGVwdGgpOwoJCQljb25zdCBuZXh0UmFkaXVzID0gTWF0aC5tYXgoMCwgbmV4dC5yYWRpdXMpOwoKCQkJY29uc3QgbmVlZHNSZWJ1aWxkID0KCQkJCW5leHRXaWR0aCAhPT0gY2FyZFdpZHRoIHx8CgkJCQluZXh0SGVpZ2h0ICE9PSBjYXJkSGVpZ2h0IHx8CgkJCQluZXh0RGVwdGggIT09IGNhcmREZXB0aCB8fAoJCQkJbmV4dFJhZGl1cyAhPT0gY2FyZFJhZGl1czsKCgkJCWNhcmRXaWR0aCA9IG5leHRXaWR0aDsKCQkJY2FyZEhlaWdodCA9IG5leHRIZWlnaHQ7CgkJCWNhcmREZXB0aCA9IG5leHREZXB0aDsKCQkJY2FyZFJhZGl1cyA9IG5leHRSYWRpdXM7CgoJCQlpZiAoIW5lZWRzUmVidWlsZCkgcmV0dXJuOwoKCQkJY29uc3QgcHJldmlvdXNHZW9tZXRyeSA9IGdlb21ldHJ5OwoJCQlnZW9tZXRyeSA9IGNyZWF0ZVJvdW5kZWRDYXJkR2VvbWV0cnkoCgkJCQlnbCwKCQkJCWNhcmRXaWR0aCwKCQkJCWNhcmRIZWlnaHQsCgkJCQljYXJkRGVwdGgsCgkJCQljYXJkUmFkaXVzLAoJCQkpOwoJCQlhcHBseUNvdmVyVVZNYXBwaW5nKAoJCQkJZ2VvbWV0cnksCgkJCQljYXJkV2lkdGgsCgkJCQljYXJkSGVpZ2h0LAoJCQkJaW1hZ2VXaWR0aCwKCQkJCWltYWdlSGVpZ2h0LAoJCQkpOwoJCQltZXNoLmdlb21ldHJ5ID0gZ2VvbWV0cnk7CgkJCXByZXZpb3VzR2VvbWV0cnkucmVtb3ZlKCk7CgkJfTsKCQlzZXREaW1lbnNpb25zID0gdXBkYXRlRGltZW5zaW9uczsKCQl1cGRhdGVEaW1lbnNpb25zKHsgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHJhZGl1cyB9KTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgbmV4dEhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKG5leHRXaWR0aCwgbmV4dEhlaWdodCk7CgkJCWNhbWVyYS5wZXJzcGVjdGl2ZSh7CgkJCQlmb3Y6IDUwLAoJCQkJYXNwZWN0OiBuZXh0V2lkdGggLyBNYXRoLm1heCgxLCBuZXh0SGVpZ2h0KSwKCQkJCW5lYXI6IDAuMSwKCQkJCWZhcjogMTAwLAoJCQl9KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQljb25zdCB0YXJnZXRSb3RhdGlvblkgPSAtaGVhZFBvc2l0aW9uLnggKiAwLjU7CgkJCWNvbnN0IHRhcmdldFJvdGF0aW9uWCA9IGhlYWRQb3NpdGlvbi55ICogMC40OwoKCQkJc21vb3RoZWRSb3RhdGlvbi54ICs9ICh0YXJnZXRSb3RhdGlvblggLSBzbW9vdGhlZFJvdGF0aW9uLngpICogbGVycEZhY3RvcjsKCQkJc21vb3RoZWRSb3RhdGlvbi55ICs9ICh0YXJnZXRSb3RhdGlvblkgLSBzbW9vdGhlZFJvdGF0aW9uLnkpICogbGVycEZhY3RvcjsKCgkJCWdyb3VwLnJvdGF0aW9uLnggPSBzbW9vdGhlZFJvdGF0aW9uLng7CgkJCWdyb3VwLnJvdGF0aW9uLnkgPSBzbW9vdGhlZFJvdGF0aW9uLnk7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhLCBjbGVhcjogdHJ1ZSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlzZXREaW1lbnNpb25zID0gdW5kZWZpbmVkOwoJCQlzZXRJbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCgkJCWlmICh0ZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZS50ZXh0dXJlKTsKCQkJcHJvZ3JhbS5yZW1vdmUoKTsKCQkJZ2VvbWV0cnkucmVtb3ZlKCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/card-3d/Card3DFaceTracker.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50LCBvbkRlc3Ryb3kgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgRmFjZUxhbmRtYXJrZXIsIEZpbGVzZXRSZXNvbHZlciB9IGZyb20gIkBtZWRpYXBpcGUvdGFza3MtdmlzaW9uIjsKCWltcG9ydCB7IHBvcnRhbCB9IGZyb20gIi4uL3V0aWxzL3VzZS1wb3J0YWwiOwoKCWludGVyZmFjZSBIZWFkUG9zaXRpb24gewoJCXg6IG51bWJlcjsKCQl5OiBudW1iZXI7CgkJejogbnVtYmVyOwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBoZWFkIHBvc2l0aW9uIGNoYW5nZXMuCgkJICovCgkJb25IZWFkTW92ZTogKHBvc2l0aW9uOiBIZWFkUG9zaXRpb24pID0+IHZvaWQ7CgkJLyoqCgkJICogV2hldGhlciB0byBzaG93IHRoZSB2aWRlbyBwcmV2aWV3LgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlzaG93UHJldmlldz86IGJvb2xlYW47CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCX0KCglsZXQgewoJCW9uSGVhZE1vdmUsCgkJc2hvd1ByZXZpZXcgPSB0cnVlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IHZpZGVvID0gJHN0YXRlPEhUTUxWaWRlb0VsZW1lbnQ+KCk7CglsZXQgZmFjZUxhbmRtYXJrZXI6IEZhY2VMYW5kbWFya2VyIHwgbnVsbCA9IG51bGw7CglsZXQgYW5pbWF0aW9uRnJhbWVJZDogbnVtYmVyOwoJbGV0IGlzUnVubmluZyA9ICRzdGF0ZShmYWxzZSk7CglsZXQgZXJyb3IgPSAkc3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7CgoJY29uc3QgYXR0YWNoVmlkZW8gPSAobm9kZTogSFRNTFZpZGVvRWxlbWVudCkgPT4gewoJCXZpZGVvID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAodmlkZW8gPT09IG5vZGUpIHsKCQkJCXZpZGVvID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJb25Nb3VudChhc3luYyAoKSA9PiB7CgkJdHJ5IHsKCQkJY29uc3QgZmlsZXNldFJlc29sdmVyID0gYXdhaXQgRmlsZXNldFJlc29sdmVyLmZvclZpc2lvblRhc2tzKAoJCQkJImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQG1lZGlhcGlwZS90YXNrcy12aXNpb25AbGF0ZXN0L3dhc20iLAoJCQkpOwoKCQkJZmFjZUxhbmRtYXJrZXIgPSBhd2FpdCBGYWNlTGFuZG1hcmtlci5jcmVhdGVGcm9tT3B0aW9ucyhmaWxlc2V0UmVzb2x2ZXIsIHsKCQkJCWJhc2VPcHRpb25zOiB7CgkJCQkJbW9kZWxBc3NldFBhdGg6CgkJCQkJCSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vbWVkaWFwaXBlLW1vZGVscy9mYWNlX2xhbmRtYXJrZXIvZmFjZV9sYW5kbWFya2VyL2Zsb2F0MTYvMS9mYWNlX2xhbmRtYXJrZXIudGFzayIsCgkJCQkJZGVsZWdhdGU6ICJHUFUiLAoJCQkJfSwKCQkJCXJ1bm5pbmdNb2RlOiAiVklERU8iLAoJCQkJbnVtRmFjZXM6IDEsCgkJCQlvdXRwdXRGYWNlQmxlbmRzaGFwZXM6IGZhbHNlLAoJCQkJb3V0cHV0RmFjaWFsVHJhbnNmb3JtYXRpb25NYXRyaXhlczogdHJ1ZSwKCQkJfSk7CgoJCQlhd2FpdCBzdGFydENhbWVyYSgpOwoJCX0gY2F0Y2ggKGUpIHsKCQkJZXJyb3IgPQoJCQkJZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogIkZhaWxlZCB0byBpbml0aWFsaXplIGZhY2UgdHJhY2tpbmciOwoJCQljb25zb2xlLmVycm9yKCJGYWNlVHJhY2tlciBpbml0IGVycm9yOiIsIGUpOwoJCX0KCX0pOwoKCW9uRGVzdHJveSgoKSA9PiB7CgkJaWYgKGFuaW1hdGlvbkZyYW1lSWQpIHsKCQkJY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uRnJhbWVJZCk7CgkJfQoJCWlmICh2aWRlbz8uc3JjT2JqZWN0KSB7CgkJCWNvbnN0IHRyYWNrcyA9ICh2aWRlby5zcmNPYmplY3QgYXMgTWVkaWFTdHJlYW0pLmdldFRyYWNrcygpOwoJCQl0cmFja3MuZm9yRWFjaCgodHJhY2spID0+IHRyYWNrLnN0b3AoKSk7CgkJfQoJCWlmIChmYWNlTGFuZG1hcmtlcikgewoJCQlmYWNlTGFuZG1hcmtlci5jbG9zZSgpOwoJCX0KCX0pOwoKCWFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2FtZXJhKCkgewoJCWlmICghdmlkZW8pIHJldHVybjsKCQl0cnkgewoJCQljb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7CgkJCQl2aWRlbzogeyBmYWNpbmdNb2RlOiAidXNlciIsIHdpZHRoOiA2NDAsIGhlaWdodDogNDgwIH0sCgkJCX0pOwoJCQl2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07CgkJCWF3YWl0IHZpZGVvLnBsYXkoKTsKCQkJaXNSdW5uaW5nID0gdHJ1ZTsKCQkJZGV0ZWN0RmFjZSgpOwoJCX0gY2F0Y2ggKGUpIHsKCQkJZXJyb3IgPSAiQ2FtZXJhIGFjY2VzcyBkZW5pZWQiOwoJCQljb25zb2xlLmVycm9yKCJDYW1lcmEgZXJyb3I6IiwgZSk7CgkJfQoJfQoKCWZ1bmN0aW9uIGRldGVjdEZhY2UoKSB7CgkJaWYgKCFmYWNlTGFuZG1hcmtlciB8fCAhdmlkZW8gfHwgdmlkZW8ucmVhZHlTdGF0ZSA8IDIpIHsKCQkJYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkZXRlY3RGYWNlKTsKCQkJcmV0dXJuOwoJCX0KCgkJY29uc3QgcmVzdWx0cyA9IGZhY2VMYW5kbWFya2VyLmRldGVjdEZvclZpZGVvKHZpZGVvLCBwZXJmb3JtYW5jZS5ub3coKSk7CgoJCWlmIChyZXN1bHRzLmZhY2VMYW5kbWFya3MgJiYgcmVzdWx0cy5mYWNlTGFuZG1hcmtzLmxlbmd0aCA+IDApIHsKCQkJY29uc3QgbGFuZG1hcmtzID0gcmVzdWx0cy5mYWNlTGFuZG1hcmtzWzBdOwoKCQkJY29uc3Qgbm9zZSA9IGxhbmRtYXJrc1sxXTsKCgkJCWNvbnN0IHggPSAobm9zZS54IC0gMC41KSAqIDI7CgkJCWNvbnN0IHkgPSAobm9zZS55IC0gMC41KSAqIDI7CgoJCQljb25zdCBsZWZ0RWFyID0gbGFuZG1hcmtzWzIzNF07CgkJCWNvbnN0IHJpZ2h0RWFyID0gbGFuZG1hcmtzWzQ1NF07CgkJCWNvbnN0IGZhY2VXaWR0aCA9IE1hdGguYWJzKHJpZ2h0RWFyLnggLSBsZWZ0RWFyLngpOwoKCQkJY29uc3QgeiA9ICgwLjQgLSBmYWNlV2lkdGgpICogNTsKCgkJCW9uSGVhZE1vdmUoeyB4LCB5LCB6IH0pOwoJCX0KCgkJYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShkZXRlY3RGYWNlKTsKCX0KPC9zY3JpcHQ+Cgp7I2lmIHNob3dQcmV2aWV3fQoJPGRpdiB1c2U6cG9ydGFsIGNsYXNzPSJmaXhlZCByaWdodC00IGJvdHRvbS00IHotNTAgcm91bmRlZC1sZyB7Y2xhc3NOYW1lfSI+CgkJPHZpZGVvCgkJCXtAYXR0YWNoIGF0dGFjaFZpZGVvfQoJCQlwbGF5c2lubGluZQoJCQltdXRlZAoJCQljbGFzcz0iaC0zMCB3LTQwIC1zY2FsZS14LTEwMCByb3VuZGVkLWxnIgoJCT48L3ZpZGVvPgoJCXsjaWYgZXJyb3J9CgkJCTxkaXYKCQkJCWNsYXNzPSJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWNlbnRlciB0ZXh0LXhzIHRleHQtYWNjZW50IgoJCQk+CgkJCQl7ZXJyb3J9CgkJCTwvZGl2PgoJCXsvaWZ9CgkJeyNpZiAhaXNSdW5uaW5nICYmICFlcnJvcn0KCQkJPGRpdgoJCQkJY2xhc3M9ImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtY2VudGVyIHRleHQteHMgdGV4dC1mb3JlZ3JvdW5kIgoJCQk+CgkJCQlJbml0aWFsaXppbmcgY2FtZXJhLi4uCgkJCTwvZGl2PgoJCXsvaWZ9Cgk8L2Rpdj4KezplbHNlfQoJPHZpZGVvIHtAYXR0YWNoIGF0dGFjaFZpZGVvfSBwbGF5c2lubGluZSBtdXRlZCBjbGFzcz0iaGlkZGVuIj48L3ZpZGVvPgp7L2lmfQo=", @@ -9,8 +10,8 @@ "components/card-stack/CardStack.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBTY3JvbGxUcmlnZ2VyIH0gZnJvbSAiZ3NhcC9kaXN0L1Njcm9sbFRyaWdnZXIiOwoJaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBjYXJkcyB0byBzdGFjay4gVXNlIHRoZSBgQ2FyZGAgY29tcG9uZW50IGZvciBiZXN0IHJlc3VsdHMuCgkJICovCgkJY2hpbGRyZW4/OiBTbmlwcGV0OwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIHNjYWxlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFja2VkIGNhcmRzLgoJCSAqIEBkZWZhdWx0IDAuMDUKCQkgKi8KCQlzY2FsZUZhY3Rvcj86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgdmVydGljYWwgb2Zmc2V0IChpbiBwaXhlbHMpIGJldHdlZW4gc3RhY2tlZCBjYXJkcy4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCW9mZnNldD86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgdmVydGljYWwgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gd2hlcmUgdGhlIGZpcnN0IGNhcmQgc3RvcHMuCgkJICogQGRlZmF1bHQgMAoJCSAqLwoJCXRvcE9mZnNldD86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgZWxlbWVudCB0byB1c2UgYXMgdGhlIHNjcm9sbGVyLiBEZWZhdWx0cyB0byB3aW5kb3cuCgkJICovCgkJc2Nyb2xsRWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgbnVsbDsKCX0KCglsZXQgewoJCWNoaWxkcmVuLAoJCWNsYXNzOiBjbGFzc05hbWUsCgkJc2NhbGVGYWN0b3IgPSAwLjA1LAoJCW9mZnNldCA9IDEwLAoJCXRvcE9mZnNldCA9IDAsCgkJc2Nyb2xsRWxlbWVudCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyID09PSBub2RlKSB7CgkJCQljb250YWluZXIgPSB1bmRlZmluZWQ7CgkJCX0KCQl9OwoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoU2Nyb2xsVHJpZ2dlcik7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwoJCWNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXI7CgoJCWNvbnN0IGNhcmRzID0gQXJyYXkuZnJvbSgKCQkJY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY2FyZC1zdGFjay1pdGVtIiksCgkJKSBhcyBIVE1MRWxlbWVudFtdOwoKCQlpZiAoY2FyZHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCWNvbnN0IGN0eCA9IGdzYXAuY29udGV4dCgoKSA9PiB7CgkJCWNvbnN0IGxhc3RDYXJkID0gY2FyZHNbY2FyZHMubGVuZ3RoIC0gMV07CgkJCWNvbnN0IHJlc29sdmVkU2Nyb2xsZXIgPQoJCQkJdHlwZW9mIHNjcm9sbEVsZW1lbnQgPT09ICJzdHJpbmciCgkJCQkJPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihzY3JvbGxFbGVtZW50KQoJCQkJCTogc2Nyb2xsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJCT8gc2Nyb2xsRWxlbWVudAoJCQkJCQk6IG51bGw7CgkJCWNvbnN0IHNjcm9sbGVyID0KCQkJCXJlc29sdmVkU2Nyb2xsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHJlc29sdmVkU2Nyb2xsZXIgOiB3aW5kb3c7CgoJCQljb25zdCBzY3JvbGxlckhlaWdodCA9CgkJCQlzY3JvbGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJPyBzY3JvbGxlci5jbGllbnRIZWlnaHQKCQkJCQk6IHdpbmRvdy5pbm5lckhlaWdodDsKCgkJCWNvbnN0IGxhc3RDYXJkSGVpZ2h0ID0gbGFzdENhcmQub2Zmc2V0SGVpZ2h0OwoJCQljb25zdCB0YXJnZXRQb3MgPSB0b3BPZmZzZXQgKyAoY2FyZHMubGVuZ3RoIC0gMSkgKiBvZmZzZXQ7CgkJCWNvbnN0IGV4dHJhUGFkZGluZyA9IE1hdGgubWF4KAoJCQkJMCwKCQkJCXNjcm9sbGVySGVpZ2h0IC0gbGFzdENhcmRIZWlnaHQgLSB0YXJnZXRQb3MsCgkJCSk7CgoJCQlpZiAoZXh0cmFQYWRkaW5nID4gMCkgewoJCQkJZ3NhcC5zZXQoY29udGFpbmVyRWxlbWVudCwgeyBwYWRkaW5nQm90dG9tOiBleHRyYVBhZGRpbmcgfSk7CgkJCX0KCgkJCWNhcmRzLmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7CgkJCQljb25zdCBjYXJkVG9wID0gdG9wT2Zmc2V0ICsgaW5kZXggKiBvZmZzZXQ7CgoJCQkJZ3NhcC5zZXQoY2FyZCwgewoJCQkJCXRyYW5zZm9ybU9yaWdpbjogInRvcCBjZW50ZXIiLAoJCQkJCXpJbmRleDogaW5kZXgsCgkJCQkJcG9zaXRpb246ICJzdGlja3kiLAoJCQkJCXRvcDogYCR7Y2FyZFRvcH1weGAsCgkJCQl9KTsKCgkJCQljb25zdCB0bCA9IGdzYXAudGltZWxpbmUoewoJCQkJCXNjcm9sbFRyaWdnZXI6IHsKCQkJCQkJdHJpZ2dlcjogY2FyZCwKCQkJCQkJc3RhcnQ6IGB0b3AgdG9wKz0ke2NhcmRUb3B9YCwKCQkJCQkJZW5kVHJpZ2dlcjogY29udGFpbmVyRWxlbWVudCwKCQkJCQkJZW5kOiAiYm90dG9tIGJvdHRvbSIsCgkJCQkJCXNjcnViOiB0cnVlLAoJCQkJCQlzY3JvbGxlciwKCQkJCQkJaW52YWxpZGF0ZU9uUmVmcmVzaDogdHJ1ZSwKCQkJCQl9LAoJCQkJfSk7CgoJCQkJY29uc3QgdGFyZ2V0U2NhbGUgPSAxIC0gKGNhcmRzLmxlbmd0aCAtIDEgLSBpbmRleCkgKiBzY2FsZUZhY3RvcjsKCgkJCQlpZiAoaW5kZXggPCBjYXJkcy5sZW5ndGggLSAxKSB7CgkJCQkJdGwudG8oY2FyZCwgewoJCQkJCQlzY2FsZTogdGFyZ2V0U2NhbGUsCgkJCQkJCWVhc2U6ICJub25lIiwKCQkJCQl9KTsKCQkJCX0KCQkJfSk7CgkJfSwgY29udGFpbmVyRWxlbWVudCk7CgoJCXJldHVybiAoKSA9PiB7CgkJCWN0eC5yZXZlcnQoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGRpdiB7QGF0dGFjaCBhdHRhY2hDb250YWluZXJ9IGNsYXNzPXtjbigicmVsYXRpdmUgdy1mdWxsIiwgY2xhc3NOYW1lKX0+Cgl7QHJlbmRlciBjaGlsZHJlbj8uKCl9CjwvZGl2Pgo=", "components/card-stack/CardStackItem.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgY29udGVudCBvZiB0aGUgY2FyZC4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3Nlcy4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGlubGluZSBzdHlsZXMuCgkJICovCgkJc3R5bGU/OiBzdHJpbmc7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgeyBjaGlsZHJlbiwgY2xhc3M6IGNsYXNzTmFtZSwgc3R5bGUsIC4uLnByb3BzIH06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdgoJY2xhc3M9e2NuKAoJCSJjYXJkLXN0YWNrLWl0ZW0gcmVsYXRpdmUgZmxleCBmbGV4LWNvbCB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iLAoJCWNsYXNzTmFtZSwKCSl9Cgl7c3R5bGV9Cgl7Li4ucHJvcHN9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9kaXY+Cg==", "helpers/gsap.ts": "aW1wb3J0IHsgZ3NhcCB9IGZyb20gImdzYXAvZGlzdC9nc2FwIjsKaW1wb3J0IHsgQ3VzdG9tRWFzZSB9IGZyb20gImdzYXAvZGlzdC9DdXN0b21FYXNlIjsKCmNvbnN0IHJlZ2lzdGVyZWRQbHVnaW5zID0gbmV3IFNldDxvYmplY3Q+KCk7Cgpjb25zdCBNT1RJT05fQ09SRV9FQVNFX05BTUUgPSAibW90aW9uLWNvcmUtZWFzZSI7CmNvbnN0IE1PVElPTl9DT1JFX0VBU0VfQ1VSVkUgPSAiMC42MjUsIDAuMDUsIDAsIDEiOwoKbGV0IG1vdGlvbkNvcmVFYXNlUmVnaXN0ZXJlZCA9IGZhbHNlOwoKZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luT25jZSguLi5wbHVnaW5zOiBvYmplY3RbXSkgewoJY29uc3QgdW5pcXVlID0gcGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIXJlZ2lzdGVyZWRQbHVnaW5zLmhhcyhwbHVnaW4pKTsKCWlmICghdW5pcXVlLmxlbmd0aCkgcmV0dXJuOwoKCWdzYXAucmVnaXN0ZXJQbHVnaW4oLi4udW5pcXVlKTsKCXVuaXF1ZS5mb3JFYWNoKChwbHVnaW4pID0+IHsKCQlyZWdpc3RlcmVkUGx1Z2lucy5hZGQocGx1Z2luKTsKCX0pOwp9CgpleHBvcnQgZnVuY3Rpb24gZW5zdXJlTW90aW9uQ29yZUVhc2UoKSB7CglyZWdpc3RlclBsdWdpbk9uY2UoQ3VzdG9tRWFzZSk7CglpZiAoIW1vdGlvbkNvcmVFYXNlUmVnaXN0ZXJlZCkgewoJCUN1c3RvbUVhc2UuY3JlYXRlKE1PVElPTl9DT1JFX0VBU0VfTkFNRSwgTU9USU9OX0NPUkVfRUFTRV9DVVJWRSk7CgkJbW90aW9uQ29yZUVhc2VSZWdpc3RlcmVkID0gdHJ1ZTsKCX0KCXJldHVybiBNT1RJT05fQ09SRV9FQVNFX05BTUU7Cn0K", - "components/dithered-image/DitheredImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9EaXRoZXJlZEltYWdlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFR5cGUgb2YgZGl0aGVyaW5nIG1hcCB0byB1c2UuCgkJICogQGRlZmF1bHQgImJheWVyNHg0IgoJCSAqLwoJCWRpdGhlck1hcD86IFNjZW5lUHJvcHNbImRpdGhlck1hcCJdOwoJCS8qKgoJCSAqIFBpeGVsIHNpemUgb2YgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXBpeGVsU2l6ZT86IFNjZW5lUHJvcHNbInBpeGVsU2l6ZSJdOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTExMTEzIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IFNjZW5lUHJvcHNbImJhY2tncm91bmRDb2xvciJdOwoJCS8qKgoJCSAqIFRocmVzaG9sZCBmb3IgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJdGhyZXNob2xkPzogU2NlbmVQcm9wc1sidGhyZXNob2xkIl07CgoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlzcmMsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpdGhlck1hcCA9ICJiYXllcjR4NCIsCgkJcGl4ZWxTaXplID0gMSwKCQljb2xvciA9ICIjZmY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzExMTExMyIsCgkJdGhyZXNob2xkID0gMC4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQlpbWFnZT17c3JjfQoJCQl7ZGl0aGVyTWFwfQoJCQl7cGl4ZWxTaXplfQoJCQl7Y29sb3J9CgkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCXt0aHJlc2hvbGR9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/dithered-image/DitheredImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CgoJdHlwZSBEaXRoZXJNYXAgPSAiYmF5ZXI0eDQiIHwgImJheWVyOHg4IiB8ICJoYWxmdG9uZSIgfCAidm9pZEFuZENsdXN0ZXIiOwoJdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uID0KCQl8IHN0cmluZwoJCXwgbnVtYmVyCgkJfCByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0KCQl8IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBUeXBlIG9mIGRpdGhlcmluZyBtYXAgdG8gdXNlLgoJCSAqIEBkZWZhdWx0ICJiYXllcjR4NCIKCQkgKi8KCQlkaXRoZXJNYXA/OiBEaXRoZXJNYXA7CgkJLyoqCgkJICogUGl4ZWwgc2l6ZSBvZiB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJcGl4ZWxTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTExMTEzIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogVGhyZXNob2xkIGZvciB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQl0aHJlc2hvbGQ/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQlkaXRoZXJNYXAgPSAiYmF5ZXI0eDQiLAoJCXBpeGVsU2l6ZSA9IDEsCgkJY29sb3IgPSAiI2ZmNjkwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMxMTExMTMiLAoJCXRocmVzaG9sZCA9IDAuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBUaHJlc2hvbGRTdGF0ZSA9IHsKCQlzaXplOiBudW1iZXI7CgkJdGV4dHVyZTogVGV4dHVyZTsKCX07CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1VGhyZXNob2xkTWFwOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1TWFwU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBWZWMyIH07CgkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBWZWMyIH07CgkJdVBpeGVsU2l6ZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVRocmVzaG9sZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJfTsKCgljb25zdCB0aHJlc2hvbGRNYXBzRGF0YTogUmVjb3JkPERpdGhlck1hcCwgbnVtYmVyW10+ID0gewoJCWJheWVyNHg0OiBbMCwgOCwgMiwgMTAsIDEyLCA0LCAxNCwgNiwgMywgMTEsIDEsIDksIDE1LCA3LCAxMywgNV0sCgkJYmF5ZXI4eDg6IFsKCQkJMCwgMzIsIDgsIDQwLCAyLCAzNCwgMTAsIDQyLCA0OCwgMTYsIDU2LCAyNCwgNTAsIDE4LCA1OCwgMjYsIDEyLCA0NCwgNCwKCQkJMzYsIDE0LCA0NiwgNiwgMzgsIDYwLCAyOCwgNTIsIDIwLCA2MiwgMzAsIDU0LCAyMiwgMywgMzUsIDExLCA0MywgMSwgMzMsCgkJCTksIDQxLCA1MSwgMTksIDU5LCAyNywgNDksIDE3LCA1NywgMjUsIDE1LCA0NywgNywgMzksIDEzLCA0NSwgNSwgMzcsIDYzLAoJCQkzMSwgNTUsIDIzLCA2MSwgMjksIDUzLCAyMSwKCQldLAoJCWhhbGZ0b25lOiBbCgkJCTI0LCAxMCwgMTIsIDI2LCAzNSwgNDcsIDQ5LCAzNywgOCwgMCwgMiwgMTQsIDQ1LCA1OSwgNjEsIDUxLCAyMiwgNiwgNCwgMTYsCgkJCTQzLCA1NywgNjMsIDUzLCAzMCwgMjAsIDE4LCAyOCwgMzMsIDQxLCA1NSwgMzksIDM0LCA0NiwgNDgsIDM2LCAyNSwgMTEsCgkJCTEzLCAyNywgNDQsIDU4LCA2MCwgNTAsIDksIDEsIDMsIDE1LCA0MiwgNTYsIDYyLCA1MiwgMjMsIDcsIDUsIDE3LCAzMiwgNDAsCgkJCTU0LCAzOCwgMzEsIDIxLCAxOSwgMjksCgkJXSwKCQl2b2lkQW5kQ2x1c3RlcjogWwoJCQkxMzEsIDE4NywgOCwgNzgsIDUwLCAxOCwgMTM0LCA4OSwgMTU1LCAxMDIsIDI5LCA5NSwgMTg0LCA3MywgMjIsIDg2LCAxMTMsCgkJCTE3MSwgMTQyLCAxMDUsIDM0LCAxNjYsIDksIDYwLCAxNTEsIDEyOCwgNDAsIDExMCwgMTY4LCAxMzcsIDQ1LCAyOCwgNjQsCgkJCTE4OCwgODIsIDU0LCAxMjQsIDE4OSwgODAsIDEzLCAxNTYsIDU2LCA3LCA2MSwgMTg2LCAxMjEsIDE1NCwgNiwgMTA4LCAxNzcsCgkJCTI0LCAxMDAsIDM4LCAxNzYsIDkzLCAxMjMsIDgzLCAxNDgsIDk2LCAxNywgODgsIDEzMywgNDQsIDE0NSwgNjksIDE2MSwKCQkJMTM5LCA3MiwgMzAsIDE4MSwgMTE1LCAyNywgMTYzLCA0NywgMTc4LCA2NSwgMTY0LCAxNCwgMTIwLCA0OCwgNSwgMTI3LAoJCQkxNTMsIDUyLCAxOTAsIDU4LCAxMjYsIDgxLCAxMTYsIDIxLCAxMDYsIDc3LCAxNzMsIDkyLCAxOTEsIDYzLCA5OSwgMTIsIDc2LAoJCQkxNDQsIDQsIDE4NSwgMzcsIDE0OSwgMTkyLCAzOSwgMTM1LCAyMywgMTE3LCAzMSwgMTcwLCAxMzIsIDM1LCAxNzIsIDEwMywKCQkJNjYsIDEyOSwgNzksIDMsIDk3LCA1NywgMTU5LCA3MCwgMTQxLCA1MywgOTQsIDExNCwgMjAsIDQ5LCAxNTgsIDE5LCAxNDYsCgkJCTE2OSwgMTIyLCAxODMsIDExLCAxMDQsIDE4MCwgMiwgMTY1LCAxNTIsIDg3LCAxODIsIDExOCwgOTEsIDQyLCA2NywgMjUsCgkJCTg0LCAxNDcsIDQzLCA4NSwgMTI1LCA2OCwgMTYsIDEzNiwgNzEsIDEwLCAxOTMsIDExMiwgMTYwLCAxMzgsIDUxLCAxMTEsCgkJCTE2MiwgMjYsIDE5NCwgNDYsIDE3NCwgMTA3LCA0MSwgMTQzLCAzMywgNzQsIDEsIDEwMSwgMTk1LCAxNSwgNzUsIDE0MCwKCQkJMTA5LCA5MCwgMzIsIDYyLCAxNTcsIDk4LCAxNjcsIDExOSwgMTc5LCA1OSwgMzYsIDEzMCwgMTc1LCA1NSwgMCwgMTUwLAoJCV0sCgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCWxldCBzZXREaXRoZXJNYXAgPSAkc3RhdGU8KG1hcDogRGl0aGVyTWFwKSA9PiB2b2lkPigpOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCBtYXBTaXplVW5pZm9ybSA9IG5ldyBWZWMyKDQsIDQpOwoJY29uc3QgY292ZXJTY2FsZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCWNvbnN0IGNvdmVyT2Zmc2V0VW5pZm9ybSA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3QgY29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMSwgMTA1IC8gMjU1LCAwKTsKCWNvbnN0IGJhY2tncm91bmRDb2xvclVuaWZvcm0gPSBuZXcgVmVjMygxNyAvIDI1NSwgMTcgLyAyNTUsIDE5IC8gMjU1KTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoJY29uc3Qgbm9ybWFsaXplVHJpcGxldCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChyLCBnLCBiKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbY2xhbXAwMShyIC8gc2NhbGUpLCBjbGFtcDAxKGcgLyBzY2FsZSksIGNsYW1wMDEoYiAvIHNjYWxlKV07Cgl9OwoKCWNvbnN0IHBhcnNlSGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJCWlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSg0LCA2KSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX07CgoJbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCWNvbnN0IHBhcnNlQ3NzQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKCQlpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQkJY29uc3QgcGFyc2VyQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CgkJCXBhcnNlckNhbnZhcy53aWR0aCA9IDE7CgkJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCQljc3NDb2xvckNvbnRleHQgPSBwYXJzZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCQl9CgkJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gIiMwMDAwMDAiOwoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTsKCQljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCgkJaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgiIyIpKSB7CgkJCXJldHVybiBwYXJzZUhleENvbG9yKG5vcm1hbGl6ZWQpOwoJCX0KCgkJY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9yZ2JhP1woKFteKV0rKVwpL2kpOwoJCWlmICghbWF0Y2gpIHJldHVybiBudWxsOwoJCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkJLnNwbGl0KCIsIikKCQkJLm1hcCgocGFydCkgPT4gTnVtYmVyLnBhcnNlRmxvYXQocGFydC50cmltKCkpKQoJCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJCWlmIChwYXJ0cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFsKCQkJY2xhbXAwMShwYXJ0c1swXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1sxXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1syXSAvIHNjYWxlKSwKCQldOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQlpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJCWNvbnN0IGludCA9IE1hdGgubWluKDB4ZmZmZmZmLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHZhbHVlKSkpOwoJCQlyZXR1cm4gWwoJCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJCSgoaW50ID4+IDgpICYgMjU1KSAvIDI1NSwKCQkJCShpbnQgJiAyNTUpIC8gMjU1LAoJCQldOwoJCX0KCgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQkJY29uc3QgcGFyc2VkID0gdHJpbW1lZC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcih0cmltbWVkKQoJCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJCX0KCgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCgkJaWYgKAoJCQl2YWx1ZSAmJgoJCQl0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmCgkJCSJyIiBpbiB2YWx1ZSAmJgoJCQkiZyIgaW4gdmFsdWUgJiYKCQkJImIiIGluIHZhbHVlCgkJKSB7CgkJCWNvbnN0IHJnYiA9IHZhbHVlIGFzIHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChyZ2IuciwgcmdiLmcsIHJnYi5iKTsKCQl9CgoJCXJldHVybiBmYWxsYmFjazsKCX07CgoJY29uc3QgdG9MaW5lYXJSZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQlyZXR1cm4gW3NyZ2JUb0xpbmVhcihyKSwgc3JnYlRvTGluZWFyKGcpLCBzcmdiVG9MaW5lYXIoYildOwoJfTsKCgljb25zdCBhcHBseUNvbG9yID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCBjcmVhdGVUaHJlc2hvbGRUZXh0dXJlID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQltYXA6IERpdGhlck1hcCwKCSk6IFRocmVzaG9sZFN0YXRlID0+IHsKCQljb25zdCBkYXRhID0gdGhyZXNob2xkTWFwc0RhdGFbbWFwXSA/PyB0aHJlc2hvbGRNYXBzRGF0YS5iYXllcjR4NDsKCQljb25zdCBzaXplID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChNYXRoLnNxcnQoZGF0YS5sZW5ndGgpKSk7CgkJY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aDsKCQljb25zdCBwaXhlbHMgPSBuZXcgVWludDhBcnJheShzaXplICogc2l6ZSAqIDQpOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3Qgc3RyaWRlID0gaSAqIDQ7CgkJCWNvbnN0IHZhbHVlID0gTWF0aC5yb3VuZCgoZGF0YVtpXSAvIGNvdW50KSAqIDI1NSk7CgkJCXBpeGVsc1tzdHJpZGVdID0gdmFsdWU7CgkJCXBpeGVsc1tzdHJpZGUgKyAxXSA9IHZhbHVlOwoJCQlwaXhlbHNbc3RyaWRlICsgMl0gPSB2YWx1ZTsKCQkJcGl4ZWxzW3N0cmlkZSArIDNdID0gMjU1OwoJCX0KCgkJY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBwaXhlbHMsCgkJCXdpZHRoOiBzaXplLAoJCQloZWlnaHQ6IHNpemUsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5ORUFSRVNULAoJCQltYWdGaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCXdyYXBTOiBnbC5SRVBFQVQsCgkJCXdyYXBUOiBnbC5SRVBFQVQsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiBmYWxzZSwKCQl9KTsKCgkJcmV0dXJuIHsgc2l6ZSwgdGV4dHVyZSB9OwoJfTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKAoJCXJlc29sdXRpb25XaWR0aDogbnVtYmVyLAoJCXJlc29sdXRpb25IZWlnaHQ6IG51bWJlciwKCQlpbWFnZVdpZHRoOiBudW1iZXIsCgkJaW1hZ2VIZWlnaHQ6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHNhZmVXaWR0aCA9IE1hdGgubWF4KDEsIHJlc29sdXRpb25XaWR0aCk7CgkJY29uc3Qgc2FmZUhlaWdodCA9IE1hdGgubWF4KDEsIHJlc29sdXRpb25IZWlnaHQpOwoJCWNvbnN0IHNhZmVJbWFnZVdpZHRoID0gTWF0aC5tYXgoMSwgaW1hZ2VXaWR0aCk7CgkJY29uc3Qgc2FmZUltYWdlSGVpZ2h0ID0gTWF0aC5tYXgoMSwgaW1hZ2VIZWlnaHQpOwoKCQljb25zdCBzY3JlZW5Bc3BlY3QgPSBzYWZlV2lkdGggLyBzYWZlSGVpZ2h0OwoJCWNvbnN0IGltYWdlQXNwZWN0ID0gc2FmZUltYWdlV2lkdGggLyBzYWZlSW1hZ2VIZWlnaHQ7CgoJCWxldCBzY2FsZVggPSAxOwoJCWxldCBzY2FsZVkgPSAxOwoJCWxldCBvZmZzZXRYID0gMDsKCQlsZXQgb2Zmc2V0WSA9IDA7CgoJCWlmIChzY3JlZW5Bc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQlzY2FsZVkgPSBpbWFnZUFzcGVjdCAvIHNjcmVlbkFzcGVjdDsKCQkJb2Zmc2V0WSA9ICgxIC0gc2NhbGVZKSAqIDAuNTsKCQl9IGVsc2UgewoJCQlzY2FsZVggPSBzY3JlZW5Bc3BlY3QgLyBpbWFnZUFzcGVjdDsKCQkJb2Zmc2V0WCA9ICgxIC0gc2NhbGVYKSAqIDAuNTsKCQl9CgoJCWNvdmVyU2NhbGVVbmlmb3JtLnNldChzY2FsZVgsIHNjYWxlWSk7CgkJY292ZXJPZmZzZXRVbmlmb3JtLnNldChvZmZzZXRYLCBvZmZzZXRZKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGhyZXNob2xkTWFwOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdU1hcFNpemU7CgkJdW5pZm9ybSB2ZWMyIHVDb3ZlclNjYWxlOwoJCXVuaWZvcm0gdmVjMiB1Q292ZXJPZmZzZXQ7CgkJdW5pZm9ybSBmbG9hdCB1UGl4ZWxTaXplOwoJCXVuaWZvcm0gZmxvYXQgdVRocmVzaG9sZDsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQlmbG9hdCBnZXRMdW1pbmFuY2UodmVjMyBjb2xvclZhbHVlKSB7CgkJCXJldHVybiBkb3QoY29sb3JWYWx1ZSwgdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KSk7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQlmbG9hdCBwaXhlbCA9IG1heCgxLjAsIHVQaXhlbFNpemUpOwoJCQl2ZWMyIHBpeGVsQ29vcmQgPSBmbG9vcihnbF9GcmFnQ29vcmQueHkgLyBwaXhlbCk7CgkJCXZlYzIgY2VudGVyUGl4ZWwgPSBwaXhlbENvb3JkICogcGl4ZWwgKyAocGl4ZWwgKiAwLjUpOwoJCQl2ZWMyIGNlbnRlclV2ID0gY2VudGVyUGl4ZWwgLyB1UmVzb2x1dGlvbjsKCgkJCXZlYzIgY292ZXJTY2FsZSA9IG1heCh1Q292ZXJTY2FsZSwgdmVjMigwLjAwMDAxKSk7CgkJCXZlYzIgaW1hZ2VVdiA9IGNvdmVyU2NhbGUgKiBjZW50ZXJVdiArIHVDb3Zlck9mZnNldDsKCQkJdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgaW1hZ2VVdik7CgoJCQl2ZWMyIG1hcFV2ID0gbW9kKHBpeGVsQ29vcmQsIHVNYXBTaXplKSAvIHVNYXBTaXplOwoJCQltYXBVdiArPSAoMC41IC8gdU1hcFNpemUpOwoJCQlmbG9hdCB0aHJlc2hvbGRWYWx1ZSA9IHRleHR1cmUyRCh1VGhyZXNob2xkTWFwLCBtYXBVdikucjsKCgkJCWZsb2F0IGx1bSA9IGdldEx1bWluYW5jZSh0ZXhDb2xvci5yZ2IpOwoJCQlmbG9hdCBkaXRoZXIgPSBzdGVwKHRocmVzaG9sZFZhbHVlICsgdVRocmVzaG9sZCwgbHVtKTsKCQkJdmVjMyBkaXRoZXJlZENvbG9yID0gbWl4KHVCYWNrZ3JvdW5kQ29sb3IsIHVDb2xvciwgZGl0aGVyKTsKCgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGRpdGhlcmVkQ29sb3IpLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWUgPSBNYXRoLm1heCgxLCBwaXhlbFNpemUpOwoJCXVuaWZvcm1zLnVUaHJlc2hvbGQudmFsdWUgPSB0aHJlc2hvbGQ7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51Q29sb3IudmFsdWUsIGNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFsKCQkJMTcgLyAyNTUsCgkJCTE3IC8gMjU1LAoJCQkxOSAvIDI1NSwKCQldKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0SW1hZ2VTb3VyY2UpIHJldHVybjsKCQlzZXRJbWFnZVNvdXJjZShpbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldERpdGhlck1hcCkgcmV0dXJuOwoJCXNldERpdGhlck1hcChkaXRoZXJNYXApOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGltYWdlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQlsZXQgY3VycmVudEltYWdlV2lkdGggPSAxOwoJCWxldCBjdXJyZW50SW1hZ2VIZWlnaHQgPSAxOwoJCWxldCBpbWFnZUxvYWRUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEltYWdlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWltYWdlTG9hZFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gaW1hZ2VMb2FkVG9rZW47CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VMb2FkVG9rZW4pIHJldHVybjsKCQkJCWltYWdlVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWN1cnJlbnRJbWFnZVdpZHRoID0gaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMTsKCQkJCWN1cnJlbnRJbWFnZUhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMTsKCQkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoCgkJCQkJcmVzb2x1dGlvblVuaWZvcm0ueCwKCQkJCQlyZXNvbHV0aW9uVW5pZm9ybS55LAoJCQkJCWN1cnJlbnRJbWFnZVdpZHRoLAoJCQkJCWN1cnJlbnRJbWFnZUhlaWdodCwKCQkJCSk7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IHRocmVzaG9sZFN0YXRlID0gY3JlYXRlVGhyZXNob2xkVGV4dHVyZShnbCwgZGl0aGVyTWFwKTsKCQljb25zdCBzZXRUaHJlc2hvbGRNYXBUZXh0dXJlID0gKG1hcDogRGl0aGVyTWFwKSA9PiB7CgkJCXRocmVzaG9sZFN0YXRlID0gY3JlYXRlVGhyZXNob2xkVGV4dHVyZShnbCwgbWFwKTsKCQkJaWYgKHVuaWZvcm1zKSB7CgkJCQl1bmlmb3Jtcy51VGhyZXNob2xkTWFwLnZhbHVlID0gdGhyZXNob2xkU3RhdGUudGV4dHVyZTsKCQkJCXVuaWZvcm1zLnVNYXBTaXplLnZhbHVlLnNldCh0aHJlc2hvbGRTdGF0ZS5zaXplLCB0aHJlc2hvbGRTdGF0ZS5zaXplKTsKCQkJfQoJCQltYXBTaXplVW5pZm9ybS5zZXQodGhyZXNob2xkU3RhdGUuc2l6ZSwgdGhyZXNob2xkU3RhdGUuc2l6ZSk7CgkJfTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVUaHJlc2hvbGRNYXA6IHsgdmFsdWU6IHRocmVzaG9sZFN0YXRlLnRleHR1cmUgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVNYXBTaXplOiB7IHZhbHVlOiBtYXBTaXplVW5pZm9ybSB9LAoJCQl1Q292ZXJTY2FsZTogeyB2YWx1ZTogY292ZXJTY2FsZVVuaWZvcm0gfSwKCQkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBjb3Zlck9mZnNldFVuaWZvcm0gfSwKCQkJdVBpeGVsU2l6ZTogeyB2YWx1ZTogTWF0aC5tYXgoMSwgcGl4ZWxTaXplKSB9LAoJCQl1VGhyZXNob2xkOiB7IHZhbHVlOiB0aHJlc2hvbGQgfSwKCQkJdUNvbG9yOiB7IHZhbHVlOiBjb2xvclVuaWZvcm0gfSwKCQkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogYmFja2dyb3VuZENvbG9yVW5pZm9ybSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoJCXNldERpdGhlck1hcCA9IHNldFRocmVzaG9sZE1hcFRleHR1cmU7CgoJCWFwcGx5Q29sb3IoY29sb3JVbmlmb3JtLCBjb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWFwcGx5Q29sb3IoYmFja2dyb3VuZENvbG9yVW5pZm9ybSwgYmFja2dyb3VuZENvbG9yLCBbCgkJCTE3IC8gMjU1LAoJCQkxNyAvIDI1NSwKCQkJMTkgLyAyNTUsCgkJXSk7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IGZhbHNlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCXJlc29sdXRpb25Vbmlmb3JtLnNldChnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwoJCQl1cGRhdGVDb3ZlclVuaWZvcm1zKAoJCQkJcmVzb2x1dGlvblVuaWZvcm0ueCwKCQkJCXJlc29sdXRpb25Vbmlmb3JtLnksCgkJCQljdXJyZW50SW1hZ2VXaWR0aCwKCQkJCWN1cnJlbnRJbWFnZUhlaWdodCwKCQkJKTsKCQl9OwoKCQlyZXNpemUoKTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlzZXREaXRoZXJNYXAgPSB1bmRlZmluZWQ7CgkJCWlmICh0aHJlc2hvbGRTdGF0ZS50ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGhyZXNob2xkU3RhdGUudGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/dithered-image/DitheredImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9EaXRoZXJlZEltYWdlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBpbWFnZSBzb3VyY2UgVVJMLgoJCSAqLwoJCXNyYzogU2NlbmVQcm9wc1siaW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFR5cGUgb2YgZGl0aGVyaW5nIG1hcCB0byB1c2UuCgkJICogQGRlZmF1bHQgImJheWVyNHg0IgoJCSAqLwoJCWRpdGhlck1hcD86IFNjZW5lUHJvcHNbImRpdGhlck1hcCJdOwoJCS8qKgoJCSAqIFBpeGVsIHNpemUgb2YgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXBpeGVsU2l6ZT86IFNjZW5lUHJvcHNbInBpeGVsU2l6ZSJdOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTcxODFBIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IFNjZW5lUHJvcHNbImJhY2tncm91bmRDb2xvciJdOwoJCS8qKgoJCSAqIFRocmVzaG9sZCBmb3IgdGhlIGRpdGhlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJdGhyZXNob2xkPzogU2NlbmVQcm9wc1sidGhyZXNob2xkIl07CgoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlzcmMsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpdGhlck1hcCA9ICJiYXllcjR4NCIsCgkJcGl4ZWxTaXplID0gMSwKCQljb2xvciA9ICIjZmY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzE3MTgxQSIsCgkJdGhyZXNob2xkID0gMC4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQlpbWFnZT17c3JjfQoJCQl7ZGl0aGVyTWFwfQoJCQl7cGl4ZWxTaXplfQoJCQl7Y29sb3J9CgkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCXt0aHJlc2hvbGR9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/dithered-image/DitheredImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CglpbXBvcnQgeyB0eXBlIENvbG9yUmVwcmVzZW50YXRpb24sIHRvTGluZWFyUmdiIH0gZnJvbSAiLi4vaGVscGVycy9jb2xvciI7CgoJdHlwZSBEaXRoZXJNYXAgPSAiYmF5ZXI0eDQiIHwgImJheWVyOHg4IiB8ICJoYWxmdG9uZSIgfCAidm9pZEFuZENsdXN0ZXIiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBUeXBlIG9mIGRpdGhlcmluZyBtYXAgdG8gdXNlLgoJCSAqIEBkZWZhdWx0ICJiYXllcjR4NCIKCQkgKi8KCQlkaXRoZXJNYXA/OiBEaXRoZXJNYXA7CgkJLyoqCgkJICogUGl4ZWwgc2l6ZSBvZiB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJcGl4ZWxTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZvcmVncm91bmQgY29sb3IgKGRvdHMpLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBCYWNrZ3JvdW5kIGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjMTcxODFBIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogVGhyZXNob2xkIGZvciB0aGUgZGl0aGVyaW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQl0aHJlc2hvbGQ/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpbWFnZSwKCQlkaXRoZXJNYXAgPSAiYmF5ZXI0eDQiLAoJCXBpeGVsU2l6ZSA9IDEsCgkJY29sb3IgPSAiI2ZmNjkwMCIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMxNzE4MUEiLAoJCXRocmVzaG9sZCA9IDAuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBUaHJlc2hvbGRTdGF0ZSA9IHsKCQlzaXplOiBudW1iZXI7CgkJdGV4dHVyZTogVGV4dHVyZTsKCX07CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1VGhyZXNob2xkTWFwOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1TWFwU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVDb3ZlclNjYWxlOiB7IHZhbHVlOiBWZWMyIH07CgkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBWZWMyIH07CgkJdVBpeGVsU2l6ZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVRocmVzaG9sZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJfTsKCgljb25zdCB0aHJlc2hvbGRNYXBzRGF0YTogUmVjb3JkPERpdGhlck1hcCwgbnVtYmVyW10+ID0gewoJCWJheWVyNHg0OiBbMCwgOCwgMiwgMTAsIDEyLCA0LCAxNCwgNiwgMywgMTEsIDEsIDksIDE1LCA3LCAxMywgNV0sCgkJYmF5ZXI4eDg6IFsKCQkJMCwgMzIsIDgsIDQwLCAyLCAzNCwgMTAsIDQyLCA0OCwgMTYsIDU2LCAyNCwgNTAsIDE4LCA1OCwgMjYsIDEyLCA0NCwgNCwKCQkJMzYsIDE0LCA0NiwgNiwgMzgsIDYwLCAyOCwgNTIsIDIwLCA2MiwgMzAsIDU0LCAyMiwgMywgMzUsIDExLCA0MywgMSwgMzMsCgkJCTksIDQxLCA1MSwgMTksIDU5LCAyNywgNDksIDE3LCA1NywgMjUsIDE1LCA0NywgNywgMzksIDEzLCA0NSwgNSwgMzcsIDYzLAoJCQkzMSwgNTUsIDIzLCA2MSwgMjksIDUzLCAyMSwKCQldLAoJCWhhbGZ0b25lOiBbCgkJCTI0LCAxMCwgMTIsIDI2LCAzNSwgNDcsIDQ5LCAzNywgOCwgMCwgMiwgMTQsIDQ1LCA1OSwgNjEsIDUxLCAyMiwgNiwgNCwgMTYsCgkJCTQzLCA1NywgNjMsIDUzLCAzMCwgMjAsIDE4LCAyOCwgMzMsIDQxLCA1NSwgMzksIDM0LCA0NiwgNDgsIDM2LCAyNSwgMTEsCgkJCTEzLCAyNywgNDQsIDU4LCA2MCwgNTAsIDksIDEsIDMsIDE1LCA0MiwgNTYsIDYyLCA1MiwgMjMsIDcsIDUsIDE3LCAzMiwgNDAsCgkJCTU0LCAzOCwgMzEsIDIxLCAxOSwgMjksCgkJXSwKCQl2b2lkQW5kQ2x1c3RlcjogWwoJCQkxMzEsIDE4NywgOCwgNzgsIDUwLCAxOCwgMTM0LCA4OSwgMTU1LCAxMDIsIDI5LCA5NSwgMTg0LCA3MywgMjIsIDg2LCAxMTMsCgkJCTE3MSwgMTQyLCAxMDUsIDM0LCAxNjYsIDksIDYwLCAxNTEsIDEyOCwgNDAsIDExMCwgMTY4LCAxMzcsIDQ1LCAyOCwgNjQsCgkJCTE4OCwgODIsIDU0LCAxMjQsIDE4OSwgODAsIDEzLCAxNTYsIDU2LCA3LCA2MSwgMTg2LCAxMjEsIDE1NCwgNiwgMTA4LCAxNzcsCgkJCTI0LCAxMDAsIDM4LCAxNzYsIDkzLCAxMjMsIDgzLCAxNDgsIDk2LCAxNywgODgsIDEzMywgNDQsIDE0NSwgNjksIDE2MSwKCQkJMTM5LCA3MiwgMzAsIDE4MSwgMTE1LCAyNywgMTYzLCA0NywgMTc4LCA2NSwgMTY0LCAxNCwgMTIwLCA0OCwgNSwgMTI3LAoJCQkxNTMsIDUyLCAxOTAsIDU4LCAxMjYsIDgxLCAxMTYsIDIxLCAxMDYsIDc3LCAxNzMsIDkyLCAxOTEsIDYzLCA5OSwgMTIsIDc2LAoJCQkxNDQsIDQsIDE4NSwgMzcsIDE0OSwgMTkyLCAzOSwgMTM1LCAyMywgMTE3LCAzMSwgMTcwLCAxMzIsIDM1LCAxNzIsIDEwMywKCQkJNjYsIDEyOSwgNzksIDMsIDk3LCA1NywgMTU5LCA3MCwgMTQxLCA1MywgOTQsIDExNCwgMjAsIDQ5LCAxNTgsIDE5LCAxNDYsCgkJCTE2OSwgMTIyLCAxODMsIDExLCAxMDQsIDE4MCwgMiwgMTY1LCAxNTIsIDg3LCAxODIsIDExOCwgOTEsIDQyLCA2NywgMjUsCgkJCTg0LCAxNDcsIDQzLCA4NSwgMTI1LCA2OCwgMTYsIDEzNiwgNzEsIDEwLCAxOTMsIDExMiwgMTYwLCAxMzgsIDUxLCAxMTEsCgkJCTE2MiwgMjYsIDE5NCwgNDYsIDE3NCwgMTA3LCA0MSwgMTQzLCAzMywgNzQsIDEsIDEwMSwgMTk1LCAxNSwgNzUsIDE0MCwKCQkJMTA5LCA5MCwgMzIsIDYyLCAxNTcsIDk4LCAxNjcsIDExOSwgMTc5LCA1OSwgMzYsIDEzMCwgMTc1LCA1NSwgMCwgMTUwLAoJCV0sCgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCWxldCBzZXREaXRoZXJNYXAgPSAkc3RhdGU8KG1hcDogRGl0aGVyTWFwKSA9PiB2b2lkPigpOwoKCWNvbnN0IHJlc29sdXRpb25Vbmlmb3JtID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCBtYXBTaXplVW5pZm9ybSA9IG5ldyBWZWMyKDQsIDQpOwoJY29uc3QgY292ZXJTY2FsZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCWNvbnN0IGNvdmVyT2Zmc2V0VW5pZm9ybSA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3QgY29sb3JVbmlmb3JtID0gbmV3IFZlYzMoMSwgMTA1IC8gMjU1LCAwKTsKCWNvbnN0IGJhY2tncm91bmRDb2xvclVuaWZvcm0gPSBuZXcgVmVjMygyMyAvIDI1NSwgMjQgLyAyNTUsIDI2IC8gMjU1KTsKCgljb25zdCBhcHBseUNvbG9yID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCBjcmVhdGVUaHJlc2hvbGRUZXh0dXJlID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQltYXA6IERpdGhlck1hcCwKCSk6IFRocmVzaG9sZFN0YXRlID0+IHsKCQljb25zdCBkYXRhID0gdGhyZXNob2xkTWFwc0RhdGFbbWFwXSA/PyB0aHJlc2hvbGRNYXBzRGF0YS5iYXllcjR4NDsKCQljb25zdCBzaXplID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChNYXRoLnNxcnQoZGF0YS5sZW5ndGgpKSk7CgkJY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aDsKCQljb25zdCBwaXhlbHMgPSBuZXcgVWludDhBcnJheShzaXplICogc2l6ZSAqIDQpOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3Qgc3RyaWRlID0gaSAqIDQ7CgkJCWNvbnN0IHZhbHVlID0gTWF0aC5yb3VuZCgoZGF0YVtpXSAvIGNvdW50KSAqIDI1NSk7CgkJCXBpeGVsc1tzdHJpZGVdID0gdmFsdWU7CgkJCXBpeGVsc1tzdHJpZGUgKyAxXSA9IHZhbHVlOwoJCQlwaXhlbHNbc3RyaWRlICsgMl0gPSB2YWx1ZTsKCQkJcGl4ZWxzW3N0cmlkZSArIDNdID0gMjU1OwoJCX0KCgkJY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBwaXhlbHMsCgkJCXdpZHRoOiBzaXplLAoJCQloZWlnaHQ6IHNpemUsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5ORUFSRVNULAoJCQltYWdGaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCXdyYXBTOiBnbC5SRVBFQVQsCgkJCXdyYXBUOiBnbC5SRVBFQVQsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiBmYWxzZSwKCQl9KTsKCgkJcmV0dXJuIHsgc2l6ZSwgdGV4dHVyZSB9OwoJfTsKCgljb25zdCB1cGRhdGVDb3ZlclVuaWZvcm1zID0gKAoJCXJlc29sdXRpb25XaWR0aDogbnVtYmVyLAoJCXJlc29sdXRpb25IZWlnaHQ6IG51bWJlciwKCQlpbWFnZVdpZHRoOiBudW1iZXIsCgkJaW1hZ2VIZWlnaHQ6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHNhZmVXaWR0aCA9IE1hdGgubWF4KDEsIHJlc29sdXRpb25XaWR0aCk7CgkJY29uc3Qgc2FmZUhlaWdodCA9IE1hdGgubWF4KDEsIHJlc29sdXRpb25IZWlnaHQpOwoJCWNvbnN0IHNhZmVJbWFnZVdpZHRoID0gTWF0aC5tYXgoMSwgaW1hZ2VXaWR0aCk7CgkJY29uc3Qgc2FmZUltYWdlSGVpZ2h0ID0gTWF0aC5tYXgoMSwgaW1hZ2VIZWlnaHQpOwoKCQljb25zdCBzY3JlZW5Bc3BlY3QgPSBzYWZlV2lkdGggLyBzYWZlSGVpZ2h0OwoJCWNvbnN0IGltYWdlQXNwZWN0ID0gc2FmZUltYWdlV2lkdGggLyBzYWZlSW1hZ2VIZWlnaHQ7CgoJCWxldCBzY2FsZVggPSAxOwoJCWxldCBzY2FsZVkgPSAxOwoJCWxldCBvZmZzZXRYID0gMDsKCQlsZXQgb2Zmc2V0WSA9IDA7CgoJCWlmIChzY3JlZW5Bc3BlY3QgPiBpbWFnZUFzcGVjdCkgewoJCQlzY2FsZVkgPSBpbWFnZUFzcGVjdCAvIHNjcmVlbkFzcGVjdDsKCQkJb2Zmc2V0WSA9ICgxIC0gc2NhbGVZKSAqIDAuNTsKCQl9IGVsc2UgewoJCQlzY2FsZVggPSBzY3JlZW5Bc3BlY3QgLyBpbWFnZUFzcGVjdDsKCQkJb2Zmc2V0WCA9ICgxIC0gc2NhbGVYKSAqIDAuNTsKCQl9CgoJCWNvdmVyU2NhbGVVbmlmb3JtLnNldChzY2FsZVgsIHNjYWxlWSk7CgkJY292ZXJPZmZzZXRVbmlmb3JtLnNldChvZmZzZXRYLCBvZmZzZXRZKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGhyZXNob2xkTWFwOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdU1hcFNpemU7CgkJdW5pZm9ybSB2ZWMyIHVDb3ZlclNjYWxlOwoJCXVuaWZvcm0gdmVjMiB1Q292ZXJPZmZzZXQ7CgkJdW5pZm9ybSBmbG9hdCB1UGl4ZWxTaXplOwoJCXVuaWZvcm0gZmxvYXQgdVRocmVzaG9sZDsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQlmbG9hdCBnZXRMdW1pbmFuY2UodmVjMyBjb2xvclZhbHVlKSB7CgkJCXJldHVybiBkb3QoY29sb3JWYWx1ZSwgdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KSk7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQlmbG9hdCBwaXhlbCA9IG1heCgxLjAsIHVQaXhlbFNpemUpOwoJCQl2ZWMyIHBpeGVsQ29vcmQgPSBmbG9vcihnbF9GcmFnQ29vcmQueHkgLyBwaXhlbCk7CgkJCXZlYzIgY2VudGVyUGl4ZWwgPSBwaXhlbENvb3JkICogcGl4ZWwgKyAocGl4ZWwgKiAwLjUpOwoJCQl2ZWMyIGNlbnRlclV2ID0gY2VudGVyUGl4ZWwgLyB1UmVzb2x1dGlvbjsKCgkJCXZlYzIgY292ZXJTY2FsZSA9IG1heCh1Q292ZXJTY2FsZSwgdmVjMigwLjAwMDAxKSk7CgkJCXZlYzIgaW1hZ2VVdiA9IGNvdmVyU2NhbGUgKiBjZW50ZXJVdiArIHVDb3Zlck9mZnNldDsKCQkJdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgaW1hZ2VVdik7CgoJCQl2ZWMyIG1hcFV2ID0gbW9kKHBpeGVsQ29vcmQsIHVNYXBTaXplKSAvIHVNYXBTaXplOwoJCQltYXBVdiArPSAoMC41IC8gdU1hcFNpemUpOwoJCQlmbG9hdCB0aHJlc2hvbGRWYWx1ZSA9IHRleHR1cmUyRCh1VGhyZXNob2xkTWFwLCBtYXBVdikucjsKCgkJCWZsb2F0IGx1bSA9IGdldEx1bWluYW5jZSh0ZXhDb2xvci5yZ2IpOwoJCQlmbG9hdCBkaXRoZXIgPSBzdGVwKHRocmVzaG9sZFZhbHVlICsgdVRocmVzaG9sZCwgbHVtKTsKCQkJdmVjMyBkaXRoZXJlZENvbG9yID0gbWl4KHVCYWNrZ3JvdW5kQ29sb3IsIHVDb2xvciwgZGl0aGVyKTsKCgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGRpdGhlcmVkQ29sb3IpLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWUgPSBNYXRoLm1heCgxLCBwaXhlbFNpemUpOwoJCXVuaWZvcm1zLnVUaHJlc2hvbGQudmFsdWUgPSB0aHJlc2hvbGQ7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51Q29sb3IudmFsdWUsIGNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFsKCQkJMjMgLyAyNTUsCgkJCTI0IC8gMjU1LAoJCQkyNiAvIDI1NSwKCQldKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0SW1hZ2VTb3VyY2UpIHJldHVybjsKCQlzZXRJbWFnZVNvdXJjZShpbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldERpdGhlck1hcCkgcmV0dXJuOwoJCXNldERpdGhlck1hcChkaXRoZXJNYXApOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGltYWdlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQlsZXQgY3VycmVudEltYWdlV2lkdGggPSAxOwoJCWxldCBjdXJyZW50SW1hZ2VIZWlnaHQgPSAxOwoJCWxldCBpbWFnZUxvYWRUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEltYWdlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWltYWdlTG9hZFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gaW1hZ2VMb2FkVG9rZW47CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VMb2FkVG9rZW4pIHJldHVybjsKCQkJCWltYWdlVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWN1cnJlbnRJbWFnZVdpZHRoID0gaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMTsKCQkJCWN1cnJlbnRJbWFnZUhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMTsKCQkJCXVwZGF0ZUNvdmVyVW5pZm9ybXMoCgkJCQkJcmVzb2x1dGlvblVuaWZvcm0ueCwKCQkJCQlyZXNvbHV0aW9uVW5pZm9ybS55LAoJCQkJCWN1cnJlbnRJbWFnZVdpZHRoLAoJCQkJCWN1cnJlbnRJbWFnZUhlaWdodCwKCQkJCSk7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IHRocmVzaG9sZFN0YXRlID0gY3JlYXRlVGhyZXNob2xkVGV4dHVyZShnbCwgZGl0aGVyTWFwKTsKCQljb25zdCBzZXRUaHJlc2hvbGRNYXBUZXh0dXJlID0gKG1hcDogRGl0aGVyTWFwKSA9PiB7CgkJCXRocmVzaG9sZFN0YXRlID0gY3JlYXRlVGhyZXNob2xkVGV4dHVyZShnbCwgbWFwKTsKCQkJaWYgKHVuaWZvcm1zKSB7CgkJCQl1bmlmb3Jtcy51VGhyZXNob2xkTWFwLnZhbHVlID0gdGhyZXNob2xkU3RhdGUudGV4dHVyZTsKCQkJCXVuaWZvcm1zLnVNYXBTaXplLnZhbHVlLnNldCh0aHJlc2hvbGRTdGF0ZS5zaXplLCB0aHJlc2hvbGRTdGF0ZS5zaXplKTsKCQkJfQoJCQltYXBTaXplVW5pZm9ybS5zZXQodGhyZXNob2xkU3RhdGUuc2l6ZSwgdGhyZXNob2xkU3RhdGUuc2l6ZSk7CgkJfTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVUaHJlc2hvbGRNYXA6IHsgdmFsdWU6IHRocmVzaG9sZFN0YXRlLnRleHR1cmUgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVNYXBTaXplOiB7IHZhbHVlOiBtYXBTaXplVW5pZm9ybSB9LAoJCQl1Q292ZXJTY2FsZTogeyB2YWx1ZTogY292ZXJTY2FsZVVuaWZvcm0gfSwKCQkJdUNvdmVyT2Zmc2V0OiB7IHZhbHVlOiBjb3Zlck9mZnNldFVuaWZvcm0gfSwKCQkJdVBpeGVsU2l6ZTogeyB2YWx1ZTogTWF0aC5tYXgoMSwgcGl4ZWxTaXplKSB9LAoJCQl1VGhyZXNob2xkOiB7IHZhbHVlOiB0aHJlc2hvbGQgfSwKCQkJdUNvbG9yOiB7IHZhbHVlOiBjb2xvclVuaWZvcm0gfSwKCQkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogYmFja2dyb3VuZENvbG9yVW5pZm9ybSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoJCXNldERpdGhlck1hcCA9IHNldFRocmVzaG9sZE1hcFRleHR1cmU7CgoJCWFwcGx5Q29sb3IoY29sb3JVbmlmb3JtLCBjb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWFwcGx5Q29sb3IoYmFja2dyb3VuZENvbG9yVW5pZm9ybSwgYmFja2dyb3VuZENvbG9yLCBbCgkJCTIzIC8gMjU1LAoJCQkyNCAvIDI1NSwKCQkJMjYgLyAyNTUsCgkJXSk7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IGZhbHNlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCXJlc29sdXRpb25Vbmlmb3JtLnNldChnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwoJCQl1cGRhdGVDb3ZlclVuaWZvcm1zKAoJCQkJcmVzb2x1dGlvblVuaWZvcm0ueCwKCQkJCXJlc29sdXRpb25Vbmlmb3JtLnksCgkJCQljdXJyZW50SW1hZ2VXaWR0aCwKCQkJCWN1cnJlbnRJbWFnZUhlaWdodCwKCQkJKTsKCQl9OwoKCQlyZXNpemUoKTsKCQlsb2FkSW1hZ2UoaW1hZ2UpOwoKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlzZXREaXRoZXJNYXAgPSB1bmRlZmluZWQ7CgkJCWlmICh0aHJlc2hvbGRTdGF0ZS50ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGhyZXNob2xkU3RhdGUudGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/fake-3d-image/Fake3DImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9GYWtlM0RJbWFnZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGNvbG9yIHRleHR1cmUuCgkJICovCgkJY29sb3JTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBncmF5c2NhbGUgZGVwdGggbWFwIHRleHR1cmUuCgkJICovCgkJZGVwdGhTcmM6IHN0cmluZzsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpc3BsYWNlbWVudCB0aHJlc2hvbGQuCgkJICogQGRlZmF1bHQgOAoJCSAqLwoJCXhUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogVmVydGljYWwgZGlzcGxhY2VtZW50IHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJeVRocmVzaG9sZD86IG51bWJlcjsKCQkvKioKCQkgKiBQb2ludGVyIHNlbnNpdGl2aXR5IG11bHRpcGxpZXIgYXBwbGllZCBiZWZvcmUgZGlzcGxhY2VtZW50IHRocmVzaG9sZGluZy4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJc2Vuc2l0aXZpdHk/OiBudW1iZXI7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY29sb3JTcmMsCgkJZGVwdGhTcmMsCgkJeFRocmVzaG9sZCA9IDgsCgkJeVRocmVzaG9sZCA9IDgsCgkJc2Vuc2l0aXZpdHkgPSAwLjI1LAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUge2NvbG9yU3JjfSB7ZGVwdGhTcmN9IHt4VGhyZXNob2xkfSB7eVRocmVzaG9sZH0ge3NlbnNpdGl2aXR5fSAvPgoJPC9kaXY+CjwvZGl2Pgo=", "components/fake-3d-image/Fake3DImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogU291cmNlIFVSTCBvZiB0aGUgY29sb3IgdGV4dHVyZS4KCQkgKi8KCQljb2xvclNyYzogc3RyaW5nOwoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGdyYXlzY2FsZSBkZXB0aCBtYXAgdGV4dHVyZS4KCQkgKi8KCQlkZXB0aFNyYzogc3RyaW5nOwoJCS8qKgoJCSAqIEhvcml6b250YWwgZGlzcGxhY2VtZW50IHRocmVzaG9sZC4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJeFRocmVzaG9sZD86IG51bWJlcjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBkaXNwbGFjZW1lbnQgdGhyZXNob2xkLgoJCSAqIEBkZWZhdWx0IDgKCQkgKi8KCQl5VGhyZXNob2xkPzogbnVtYmVyOwoJCS8qKgoJCSAqIFBvaW50ZXIgc2Vuc2l0aXZpdHkgbXVsdGlwbGllciBhcHBsaWVkIGJlZm9yZSBkaXNwbGFjZW1lbnQgdGhyZXNob2xkaW5nLgoJCSAqIEBkZWZhdWx0IDAuMjUKCQkgKi8KCQlzZW5zaXRpdml0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yU3JjLAoJCWRlcHRoU3JjLAoJCXhUaHJlc2hvbGQgPSA4LAoJCXlUaHJlc2hvbGQgPSA4LAoJCXNlbnNpdGl2aXR5ID0gMC4yNSwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdU9yaWdpbmFsVGV4dHVyZTogeyB2YWx1ZTogVGV4dHVyZSB9OwoJCXVEZXB0aFRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1TW91c2U6IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGhyZXNob2xkOiB7IHZhbHVlOiBWZWMyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1T3JpZ2luYWxUZXh0dXJlU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVEZXB0aFRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldENvbG9yU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCWxldCBzZXREZXB0aFNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgdGFyZ2V0UG9pbnRlciA9IG5ldyBWZWMyKDAsIDApOwoJY29uc3Qgc21vb3RoUG9pbnRlciA9IG5ldyBWZWMyKDAsIDApOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1T3JpZ2luYWxUZXh0dXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVEZXB0aFRleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIHVNb3VzZTsKCQl1bmlmb3JtIHZlYzIgdVRocmVzaG9sZDsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVPcmlnaW5hbFRleHR1cmVTaXplOwoJCXVuaWZvcm0gdmVjMiB1RGVwdGhUZXh0dXJlU2l6ZTsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2ZWMyIG1pcnJvcmVkKHZlYzIgdmFsdWUpIHsKCQkJdmVjMiBtID0gbW9kKHZhbHVlLCAyLjApOwoJCQlyZXR1cm4gbWl4KG0sIDIuMCAtIG0sIHN0ZXAoMS4wLCBtKSk7CgkJfQoKCQl2ZWMyIGdldENvdmVyVVYodmVjMiB1diwgdmVjMiB0ZXh0dXJlU2l6ZSkgewoJCQl2ZWMyIHNhZmVUZXh0dXJlID0gbWF4KHRleHR1cmVTaXplLCB2ZWMyKDEuMCkpOwoJCQl2ZWMyIHMgPSB1UmVzb2x1dGlvbiAvIHNhZmVUZXh0dXJlOwoJCQlmbG9hdCBzY2FsZSA9IG1heChzLngsIHMueSk7CgkJCXZlYzIgc2NhbGVkU2l6ZSA9IHNhZmVUZXh0dXJlICogc2NhbGU7CgkJCXZlYzIgb2Zmc2V0ID0gKHVSZXNvbHV0aW9uIC0gc2NhbGVkU2l6ZSkgKiAwLjU7CgkJCXJldHVybiAodXYgKiB1UmVzb2x1dGlvbiAtIG9mZnNldCkgLyBzY2FsZWRTaXplOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWMyIGJhc2VVdiA9IG1pcnJvcmVkKGdldENvdmVyVVYodlV2LCB1T3JpZ2luYWxUZXh0dXJlU2l6ZSkpOwoJCQl2ZWMyIGRlcHRoVXYgPSBtaXJyb3JlZChnZXRDb3ZlclVWKHZVdiwgdURlcHRoVGV4dHVyZVNpemUpKTsKCQkJZmxvYXQgZGVwdGggPSB0ZXh0dXJlMkQodURlcHRoVGV4dHVyZSwgZGVwdGhVdikucjsKCgkJCXZlYzIgc2FmZVRocmVzaG9sZCA9IG1heCh1VGhyZXNob2xkLCB2ZWMyKDAuMDAwMDEpKTsKCQkJdmVjMiBmYWtlM2QgPSB2ZWMyKAoJCQkJYmFzZVV2LnggKyAoZGVwdGggLSAwLjUpICogdU1vdXNlLnggLyBzYWZlVGhyZXNob2xkLngsCgkJCQliYXNlVXYueSArIChkZXB0aCAtIDAuNSkgKiB1TW91c2UueSAvIHNhZmVUaHJlc2hvbGQueQoJCQkpOwoKCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVPcmlnaW5hbFRleHR1cmUsIG1pcnJvcmVkKGZha2UzZCkpOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCXVuaWZvcm1zLnVUaHJlc2hvbGQudmFsdWUuc2V0KHhUaHJlc2hvbGQsIHlUaHJlc2hvbGQpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRDb2xvclNvdXJjZSkgcmV0dXJuOwoJCXNldENvbG9yU291cmNlKGNvbG9yU3JjKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0RGVwdGhTb3VyY2UpIHJldHVybjsKCQlzZXREZXB0aFNvdXJjZShkZXB0aFNyYyk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgY29sb3JUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgZGVwdGhUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFsxMjcsIDEyNywgMTI3LCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCBtb3VzZVVuaWZvcm0gPSBuZXcgVmVjMigwLCAwKTsKCQljb25zdCB0aHJlc2hvbGRVbmlmb3JtID0gbmV3IFZlYzIoeFRocmVzaG9sZCwgeVRocmVzaG9sZCk7CgkJY29uc3QgY29sb3JUZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCBkZXB0aFRleHR1cmVTaXplVW5pZm9ybSA9IG5ldyBWZWMyKDEsIDEpOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVPcmlnaW5hbFRleHR1cmU6IHsgdmFsdWU6IGNvbG9yVGV4dHVyZSB9LAoJCQl1RGVwdGhUZXh0dXJlOiB7IHZhbHVlOiBkZXB0aFRleHR1cmUgfSwKCQkJdU1vdXNlOiB7IHZhbHVlOiBtb3VzZVVuaWZvcm0gfSwKCQkJdVRocmVzaG9sZDogeyB2YWx1ZTogdGhyZXNob2xkVW5pZm9ybSB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogcmVzb2x1dGlvblVuaWZvcm0gfSwKCQkJdU9yaWdpbmFsVGV4dHVyZVNpemU6IHsgdmFsdWU6IGNvbG9yVGV4dHVyZVNpemVVbmlmb3JtIH0sCgkJCXVEZXB0aFRleHR1cmVTaXplOiB7IHZhbHVlOiBkZXB0aFRleHR1cmVTaXplVW5pZm9ybSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQlsZXQgY29sb3JUb2tlbiA9IDA7CgkJY29uc3QgbG9hZENvbG9yID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWNvbG9yVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBjb2xvclRva2VuOwoJCQljb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKCQkJaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCWltZy5kZWNvZGluZyA9ICJhc3luYyI7CgkJCWltZy5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IGNvbG9yVG9rZW4pIHJldHVybjsKCQkJCWNvbG9yVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCWNvbG9yVGV4dHVyZVNpemVVbmlmb3JtLnNldCgKCQkJCQlpbWcubmF0dXJhbFdpZHRoIHx8IGltZy53aWR0aCB8fCAxLAoJCQkJCWltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQgfHwgMSwKCQkJCSk7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IGRlcHRoVG9rZW4gPSAwOwoJCWNvbnN0IGxvYWREZXB0aCA9IChzb3VyY2U6IHN0cmluZykgPT4gewoJCQlkZXB0aFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gZGVwdGhUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBkZXB0aFRva2VuKSByZXR1cm47CgkJCQlkZXB0aFRleHR1cmUuaW1hZ2UgPSBpbWc7CgkJCQlkZXB0aFRleHR1cmVTaXplVW5pZm9ybS5zZXQoCgkJCQkJaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMSwKCQkJCQlpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcuaGVpZ2h0IHx8IDEsCgkJCQkpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgoJCXNldENvbG9yU291cmNlID0gbG9hZENvbG9yOwoJCXNldERlcHRoU291cmNlID0gbG9hZERlcHRoOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCXJlc29sdXRpb25Vbmlmb3JtLnNldChnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHsKCQkJY29uc3QgcmVjdCA9IHRhcmdldENhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgeCA9ICgoZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoKSAqIDIgLSAxOwoJCQljb25zdCB5ID0gLSgoKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodCkgKiAyIC0gMSk7CgkJCXRhcmdldFBvaW50ZXIuc2V0KHgsIHkpOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJMZWF2ZSA9ICgpID0+IHsKCQkJdGFyZ2V0UG9pbnRlci5zZXQoMCwgMCk7CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoYW5kbGVQb2ludGVyTGVhdmUpOwoKCQlyZXNpemUoKTsKCQlsb2FkQ29sb3IoY29sb3JTcmMpOwoJCWxvYWREZXB0aChkZXB0aFNyYyk7CgoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCgkJCWNvbnN0IHRhcmdldFggPSB0YXJnZXRQb2ludGVyLnggKiBzZW5zaXRpdml0eTsKCQkJY29uc3QgdGFyZ2V0WSA9IHRhcmdldFBvaW50ZXIueSAqIHNlbnNpdGl2aXR5OwoJCQljb25zdCBsZXJwID0gTWF0aC5taW4oMSwgNSAqIGRlbHRhKTsKCQkJc21vb3RoUG9pbnRlci54ICs9ICh0YXJnZXRYIC0gc21vb3RoUG9pbnRlci54KSAqIGxlcnA7CgkJCXNtb290aFBvaW50ZXIueSArPSAodGFyZ2V0WSAtIHNtb290aFBvaW50ZXIueSkgKiBsZXJwOwoJCQltb3VzZVVuaWZvcm0uc2V0KHNtb290aFBvaW50ZXIueCwgc21vb3RoUG9pbnRlci55KTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgaGFuZGxlUG9pbnRlckxlYXZlKTsKCQkJc2V0Q29sb3JTb3VyY2UgPSB1bmRlZmluZWQ7CgkJCXNldERlcHRoU291cmNlID0gdW5kZWZpbmVkOwoJCQlpZiAoY29sb3JUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoY29sb3JUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJCWlmIChkZXB0aFRleHR1cmUudGV4dHVyZSkgewoJCQkJZ2wuZGVsZXRlVGV4dHVyZShkZXB0aFRleHR1cmUudGV4dHVyZSk7CgkJCX0KCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", "components/flip-card-stack/FlipCardStack.svelte": "PHNjcmlwdCBsYW5nPSJ0cyIgZ2VuZXJpY3M9IlQiPgoJaW1wb3J0IHsgb25EZXN0cm95IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CgoJaW50ZXJmYWNlIFByb3BzPFQ+IHsKCQkvKioKCQkgKiBJdGVtcyByZW5kZXJlZCBhcyBjYXJkcyBpbiB0aGUgc3RhY2suCgkJICovCgkJaXRlbXM6IFRbXTsKCQkvKioKCQkgKiBTbmlwcGV0IHVzZWQgdG8gcmVuZGVyIGVhY2ggY2FyZC4gUmVjZWl2ZXMgaXRlbSBhbmQgb3JpZ2luYWwgaW5kZXguCgkJICovCgkJY2hpbGRyZW46IFNuaXBwZXQ8W1QsIG51bWJlcl0+OwoJCS8qKgoJCSAqIFZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBjYXJkcy4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJc3RhY2tPZmZzZXQ/OiBudW1iZXI7CgkJLyoqCgkJICogUm90YXRpb24gc3RlcCAoZGVnKSBmb3IgZWFjaCBjYXJkIGJlbG93IHRoZSB0b3AgY2FyZC4KCQkgKiBAZGVmYXVsdCAtMTAKCQkgKi8KCQlzdGFja1JvdGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIE1pbmltdW0gZHJhZyBkaXN0YW5jZSByZXF1aXJlZCB0byBzZW5kIHRoZSB0b3AgY2FyZCB0byB0aGUgYmFjay4KCQkgKiBAZGVmYXVsdCA4MAoJCSAqLwoJCWRyYWdUaHJlc2hvbGQ/OiBudW1iZXI7CgkJLyoqCgkJICogU3RhY2sgYW5pbWF0aW9uIGR1cmF0aW9uIGluIHNlY29uZHMuCgkJICogQGRlZmF1bHQgMC4zCgkJICovCgkJZHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogR1NBUCBlYXNlIHN0cmluZy4KCQkgKiBAZGVmYXVsdCAicG93ZXIyLm91dCIKCQkgKi8KCQllYXNlPzogc3RyaW5nOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSByb290IGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlbcHJvcDogc3RyaW5nXTogdW5rbm93bjsKCX0KCglpbnRlcmZhY2UgQ2FyZFRyYW5zZm9ybSB7CgkJekluZGV4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCXJvdGF0aW9uOiBudW1iZXI7CgkJc2NhbGU6IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgRHJhZ1N0YXRlIHsKCQlwb2ludGVySWQ6IG51bWJlcjsKCQlzdGFydFg6IG51bWJlcjsKCQlzdGFydFk6IG51bWJlcjsKCQljdXJyZW50WDogbnVtYmVyOwoJCWN1cnJlbnRZOiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpdGVtcywKCQljaGlsZHJlbiwKCQlzdGFja09mZnNldCA9IDgsCgkJc3RhY2tSb3RhdGlvbiA9IC0xMCwKCQlkcmFnVGhyZXNob2xkID0gODAsCgkJZHVyYXRpb24gPSAwLjMsCgkJZWFzZSA9ICJwb3dlcjIub3V0IiwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJLi4ucmVzdFByb3BzCgl9OiBQcm9wczxUPiA9ICRwcm9wcygpOwoKCWxldCBjYXJkUmVmcyA9ICRzdGF0ZTxBcnJheTxIVE1MRGl2RWxlbWVudCB8IG51bGw+PihbXSk7CglsZXQgaGFzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKCWxldCBkcmFnZ2luZ0NhcmRJbmRleCA9ICRzdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTsKCWxldCBjYXJkT3JkZXIgPSAkc3RhdGU8bnVtYmVyW10+KFtdKTsKCWxldCBkcmFnU3RhdGU6IERyYWdTdGF0ZSB8IG51bGwgPSBudWxsOwoKCWNvbnN0IHRvcENhcmRJbmRleCA9ICRkZXJpdmVkKGNhcmRPcmRlcltjYXJkT3JkZXIubGVuZ3RoIC0gMV0gPz8gLTEpOwoJY29uc3QgcmVzb2x2ZWRFYXNlID0gJGRlcml2ZWQoZWFzZSk7CgoJZnVuY3Rpb24gZ2V0Q2FyZFRyYW5zZm9ybShjYXJkSW5kZXg6IG51bWJlcik6IENhcmRUcmFuc2Zvcm0gfCBudWxsIHsKCQljb25zdCBzdGFja1Bvc2l0aW9uID0gY2FyZE9yZGVyLmluZGV4T2YoY2FyZEluZGV4KTsKCQlpZiAoc3RhY2tQb3NpdGlvbiA9PT0gLTEpIHJldHVybiBudWxsOwoKCQljb25zdCBwb3NpdGlvbkZyb21Cb3R0b20gPSBjYXJkT3JkZXIubGVuZ3RoIC0gMSAtIHN0YWNrUG9zaXRpb247CgkJcmV0dXJuIHsKCQkJekluZGV4OiBzdGFja1Bvc2l0aW9uICsgMSwKCQkJeTogLXBvc2l0aW9uRnJvbUJvdHRvbSAqIHN0YWNrT2Zmc2V0LAoJCQlyb3RhdGlvbjogcG9zaXRpb25Gcm9tQm90dG9tICogc3RhY2tSb3RhdGlvbiwKCQkJc2NhbGU6IDEgLSBwb3NpdGlvbkZyb21Cb3R0b20gKiAwLjAyLAoJCX07Cgl9CgoJZnVuY3Rpb24gc2V0Q2FyZFJlZihpbmRleDogbnVtYmVyLCBub2RlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwpIHsKCQljb25zdCBuZXh0ID0gWy4uLmNhcmRSZWZzXTsKCQluZXh0W2luZGV4XSA9IG5vZGU7CgkJY2FyZFJlZnMgPSBuZXh0OwoJfQoKCWZ1bmN0aW9uIHJlZ2lzdGVyQ2FyZFJlZihub2RlOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgewoJCXNldENhcmRSZWYoaW5kZXgsIG5vZGUpOwoJCXJldHVybiB7CgkJCXVwZGF0ZShuZXh0SW5kZXg6IG51bWJlcikgewoJCQkJaWYgKG5leHRJbmRleCA9PT0gaW5kZXgpIHJldHVybjsKCQkJCXNldENhcmRSZWYoaW5kZXgsIG51bGwpOwoJCQkJaW5kZXggPSBuZXh0SW5kZXg7CgkJCQlzZXRDYXJkUmVmKGluZGV4LCBub2RlKTsKCQkJfSwKCQkJZGVzdHJveSgpIHsKCQkJCXNldENhcmRSZWYoaW5kZXgsIG51bGwpOwoJCQl9LAoJCX07Cgl9CgoJZnVuY3Rpb24gYW5pbWF0ZVN0YWNrKGltbWVkaWF0ZTogYm9vbGVhbikgewoJCWZvciAoY29uc3QgW2luZGV4XSBvZiBpdGVtcy5lbnRyaWVzKCkpIHsKCQkJY29uc3Qgbm9kZSA9IGNhcmRSZWZzW2luZGV4XTsKCQkJaWYgKCFub2RlKSBjb250aW51ZTsKCgkJCWNvbnN0IHRyYW5zZm9ybSA9IGdldENhcmRUcmFuc2Zvcm0oaW5kZXgpOwoJCQlpZiAoIXRyYW5zZm9ybSkgY29udGludWU7CgkJCWlmIChkcmFnZ2luZ0NhcmRJbmRleCA9PT0gaW5kZXgpIGNvbnRpbnVlOwoKCQkJY29uc3QgdmFycyA9IHsKCQkJCXg6IDAsCgkJCQl5OiB0cmFuc2Zvcm0ueSwKCQkJCXJvdGF0aW9uOiB0cmFuc2Zvcm0ucm90YXRpb24sCgkJCQlzY2FsZTogdHJhbnNmb3JtLnNjYWxlLAoJCQl9OwoKCQkJaWYgKGltbWVkaWF0ZSkgewoJCQkJZ3NhcC5zZXQobm9kZSwgdmFycyk7CgkJCX0gZWxzZSB7CgkJCQlnc2FwLnRvKG5vZGUsIHsKCQkJCQkuLi52YXJzLAoJCQkJCWR1cmF0aW9uLAoJCQkJCWVhc2U6IHJlc29sdmVkRWFzZSwKCQkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCQl9KTsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiByZXNldERyYWdnZWRDYXJkKG5vZGU6IEhUTUxEaXZFbGVtZW50KSB7CgkJZ3NhcC50byhub2RlLCB7CgkJCXg6IDAsCgkJCXk6IDAsCgkJCXJvdGF0aW9uOiAwLAoJCQlzY2FsZTogMSwKCQkJZHVyYXRpb24sCgkJCWVhc2U6IHJlc29sdmVkRWFzZSwKCQkJb3ZlcndyaXRlOiB0cnVlLAoJCX0pOwoJfQoKCWZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQsIGNhcmRJbmRleDogbnVtYmVyKSB7CgkJaWYgKGNhcmRJbmRleCAhPT0gdG9wQ2FyZEluZGV4KSByZXR1cm47CgkJY29uc3Qgbm9kZSA9IGNhcmRSZWZzW2NhcmRJbmRleF07CgkJaWYgKCFub2RlKSByZXR1cm47CgoJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJZHJhZ2dpbmdDYXJkSW5kZXggPSBjYXJkSW5kZXg7CgkJZHJhZ1N0YXRlID0gewoJCQlwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKCQkJc3RhcnRYOiBldmVudC5jbGllbnRYLAoJCQlzdGFydFk6IGV2ZW50LmNsaWVudFksCgkJCWN1cnJlbnRYOiAwLAoJCQljdXJyZW50WTogMCwKCQl9OwoKCQl0cnkgewoJCQlub2RlLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CgkJfSBjYXRjaCB7CgkJCS8vIFNvbWUgcG9pbnRlciBzb3VyY2VzIG1heSBub3QgYWxsb3cgY2FwdHVyZTsgZHJhZyBzdGlsbCB3b3Jrcy4KCQl9CgoJCWdzYXAua2lsbFR3ZWVuc09mKG5vZGUpOwoJCWdzYXAudG8obm9kZSwgewoJCQlzY2FsZTogMS4wNSwKCQkJcm90YXRpb246IDAsCgkJCWR1cmF0aW9uOiAwLjA1LAoJCQllYXNlOiAicG93ZXIyLm91dCIsCgkJCW92ZXJ3cml0ZTogdHJ1ZSwKCQl9KTsKCX0KCglmdW5jdGlvbiBoYW5kbGVQb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50LCBjYXJkSW5kZXg6IG51bWJlcikgewoJCWlmIChjYXJkSW5kZXggIT09IGRyYWdnaW5nQ2FyZEluZGV4IHx8ICFkcmFnU3RhdGUpIHJldHVybjsKCQlpZiAoZXZlbnQucG9pbnRlcklkICE9PSBkcmFnU3RhdGUucG9pbnRlcklkKSByZXR1cm47CgoJCWNvbnN0IG5vZGUgPSBjYXJkUmVmc1tjYXJkSW5kZXhdOwoJCWlmICghbm9kZSkgcmV0dXJuOwoKCQljb25zdCBkeCA9IGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUuc3RhcnRYOwoJCWNvbnN0IGR5ID0gZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5zdGFydFk7CgkJY29uc3QgeCA9IGdzYXAudXRpbHMuY2xhbXAoLTE1MCwgMTUwLCBkeCk7CgkJY29uc3QgeSA9IGdzYXAudXRpbHMuY2xhbXAoLTE1MCwgMTUwLCBkeSk7CgoJCWRyYWdTdGF0ZS5jdXJyZW50WCA9IHg7CgkJZHJhZ1N0YXRlLmN1cnJlbnRZID0geTsKCgkJZ3NhcC5zZXQobm9kZSwgewoJCQl4LAoJCQl5LAoJCQlyb3RhdGlvbjogMCwKCQkJc2NhbGU6IDEuMDUsCgkJfSk7Cgl9CgoJZnVuY3Rpb24gaGFuZGxlUG9pbnRlckVuZChldmVudDogUG9pbnRlckV2ZW50LCBjYXJkSW5kZXg6IG51bWJlcikgewoJCWlmIChjYXJkSW5kZXggIT09IGRyYWdnaW5nQ2FyZEluZGV4IHx8ICFkcmFnU3RhdGUpIHJldHVybjsKCQlpZiAoZXZlbnQucG9pbnRlcklkICE9PSBkcmFnU3RhdGUucG9pbnRlcklkKSByZXR1cm47CgoJCWNvbnN0IG5vZGUgPSBjYXJkUmVmc1tjYXJkSW5kZXhdOwoJCWlmICghbm9kZSkgewoJCQlkcmFnU3RhdGUgPSBudWxsOwoJCQlkcmFnZ2luZ0NhcmRJbmRleCA9IG51bGw7CgkJCXJldHVybjsKCQl9CgoJCXRyeSB7CgkJCWlmIChub2RlLmhhc1BvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCkpIHsKCQkJCW5vZGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CgkJCX0KCQl9IGNhdGNoIHsKCQkJLy8gSWdub3JlIGNhcHR1cmUtcmVsZWFzZSBmYWlsdXJlcyBmcm9tIHVuc3VwcG9ydGVkIHBvaW50ZXIgc291cmNlcy4KCQl9CgoJCWNvbnN0IGRyYWdEaXN0YW5jZSA9CgkJCU1hdGguYWJzKGRyYWdTdGF0ZS5jdXJyZW50WCkgKyBNYXRoLmFicyhkcmFnU3RhdGUuY3VycmVudFkpOwoJCWNvbnN0IHNob3VsZE1vdmVUb0JhY2sgPSBkcmFnRGlzdGFuY2UgPj0gZHJhZ1RocmVzaG9sZDsKCgkJZHJhZ1N0YXRlID0gbnVsbDsKCQlkcmFnZ2luZ0NhcmRJbmRleCA9IG51bGw7CgoJCWlmICghc2hvdWxkTW92ZVRvQmFjaykgewoJCQlyZXNldERyYWdnZWRDYXJkKG5vZGUpOwoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBkcmFnZ2VkUG9zaXRpb24gPSBjYXJkT3JkZXIuaW5kZXhPZihjYXJkSW5kZXgpOwoJCWlmIChkcmFnZ2VkUG9zaXRpb24gPT09IC0xKSB7CgkJCXJlc2V0RHJhZ2dlZENhcmQobm9kZSk7CgkJCXJldHVybjsKCQl9CgoJCWNvbnN0IG5leHRPcmRlciA9IFsuLi5jYXJkT3JkZXJdOwoJCWNvbnN0IFtkcmFnZ2VkXSA9IG5leHRPcmRlci5zcGxpY2UoZHJhZ2dlZFBvc2l0aW9uLCAxKTsKCQlpZiAoZHJhZ2dlZCA9PT0gdW5kZWZpbmVkKSB7CgkJCXJlc2V0RHJhZ2dlZENhcmQobm9kZSk7CgkJCXJldHVybjsKCQl9CgoJCW5leHRPcmRlci51bnNoaWZ0KGRyYWdnZWQpOwoJCWNhcmRPcmRlciA9IG5leHRPcmRlcjsKCX0KCgkkZWZmZWN0LnByZSgoKSA9PiB7CgkJY29uc3QgYWxsSW5kZXhlcyA9IGl0ZW1zLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTsKCQljb25zdCBpc1NhbWVTZXQgPQoJCQlhbGxJbmRleGVzLmxlbmd0aCA9PT0gY2FyZE9yZGVyLmxlbmd0aCAmJgoJCQlhbGxJbmRleGVzLmV2ZXJ5KChpbmRleCkgPT4gY2FyZE9yZGVyLmluY2x1ZGVzKGluZGV4KSk7CgkJaWYgKCFpc1NhbWVTZXQpIHsKCQkJY2FyZE9yZGVyID0gYWxsSW5kZXhlczsKCQl9Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWl0ZW1zLmxlbmd0aCkgewoJCQloYXNJbml0aWFsaXplZCA9IGZhbHNlOwoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBhbGxSZWFkeSA9IGl0ZW1zLmV2ZXJ5KChfLCBpbmRleCkgPT4gQm9vbGVhbihjYXJkUmVmc1tpbmRleF0pKTsKCQlpZiAoIWFsbFJlYWR5KSByZXR1cm47CgoJCWFuaW1hdGVTdGFjayghaGFzSW5pdGlhbGl6ZWQpOwoJCWhhc0luaXRpYWxpemVkID0gdHJ1ZTsKCX0pOwoKCW9uRGVzdHJveSgoKSA9PiB7CgkJZm9yIChjb25zdCBub2RlIG9mIGNhcmRSZWZzKSB7CgkJCWlmIChub2RlKSB7CgkJCQlnc2FwLmtpbGxUd2VlbnNPZihub2RlKTsKCQkJfQoJCX0KCX0pOwo8L3NjcmlwdD4KCjxkaXYKCWNsYXNzPXtjbigicmVsYXRpdmUgaW5saW5lLWdyaWQgW3BlcnNwZWN0aXZlOjEwMDBweF0iLCBjbGFzc05hbWUpfQoJey4uLnJlc3RQcm9wc30KPgoJeyNpZiBpdGVtcy5sZW5ndGggPiAwfQoJCXsjZWFjaCBjYXJkT3JkZXIgYXMgY2FyZEluZGV4IChgY2FyZC0ke2NhcmRJbmRleH1gKX0KCQkJe0Bjb25zdCBpdGVtID0gaXRlbXNbY2FyZEluZGV4XX0KCQkJe0Bjb25zdCB0cmFuc2Zvcm0gPSBnZXRDYXJkVHJhbnNmb3JtKGNhcmRJbmRleCl9CgkJCXsjaWYgaXRlbX0KCQkJCTxkaXYKCQkJCQl1c2U6cmVnaXN0ZXJDYXJkUmVmPXtjYXJkSW5kZXh9CgkJCQkJY2xhc3M9ImNvbC1zdGFydC0xIHJvdy1zdGFydC0xIHNlbGVjdC1ub25lIgoJCQkJCXJvbGU9InByZXNlbnRhdGlvbiIKCQkJCQlzdHlsZT17YHotaW5kZXg6JHtkcmFnZ2luZ0NhcmRJbmRleCA9PT0gY2FyZEluZGV4ID8gaXRlbXMubGVuZ3RoICsgMTAgOiAodHJhbnNmb3JtPy56SW5kZXggPz8gMSl9O3RvdWNoLWFjdGlvbjoke2NhcmRJbmRleCA9PT0gdG9wQ2FyZEluZGV4ID8gIm5vbmUiIDogImF1dG8ifTtjdXJzb3I6JHtjYXJkSW5kZXggPT09IHRvcENhcmRJbmRleCA/IChkcmFnZ2luZ0NhcmRJbmRleCA9PT0gY2FyZEluZGV4ID8gImdyYWJiaW5nIiA6ICJncmFiIikgOiAiZGVmYXVsdCJ9O2B9CgkJCQkJb25wb2ludGVyZG93bj17KGV2ZW50KSA9PiBoYW5kbGVQb2ludGVyRG93bihldmVudCwgY2FyZEluZGV4KX0KCQkJCQlvbnBvaW50ZXJtb3ZlPXsoZXZlbnQpID0+IGhhbmRsZVBvaW50ZXJNb3ZlKGV2ZW50LCBjYXJkSW5kZXgpfQoJCQkJCW9ucG9pbnRlcnVwPXsoZXZlbnQpID0+IGhhbmRsZVBvaW50ZXJFbmQoZXZlbnQsIGNhcmRJbmRleCl9CgkJCQkJb25wb2ludGVyY2FuY2VsPXsoZXZlbnQpID0+IGhhbmRsZVBvaW50ZXJFbmQoZXZlbnQsIGNhcmRJbmRleCl9CgkJCQk+CgkJCQkJe0ByZW5kZXIgY2hpbGRyZW4oaXRlbSwgY2FyZEluZGV4KX0KCQkJCTwvZGl2PgoJCQl7L2lmfQoJCXsvZWFjaH0KCXsvaWZ9CjwvZGl2Pgo=", @@ -18,24 +19,25 @@ "components/flip-grid/FlipGridItem.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogU25pcHBldCB0byByZW5kZXIgdGhlIGl0ZW0gY29udGVudC4KCQkgKi8KCQljaGlsZHJlbj86IFNuaXBwZXQ7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgRkxJUCBhbmltYXRpb24uCgkJICovCgkJaWQ6IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGlubGluZSBzdHlsZXMuCgkJICovCgkJc3R5bGU/OiBzdHJpbmc7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNoaWxkcmVuLAoJCWNsYXNzOiBjbGFzc05hbWUgPSB1bmRlZmluZWQsCgkJaWQsCgkJc3R5bGUgPSB1bmRlZmluZWQsCgkJLi4ucHJvcHMKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdgoJY2xhc3M9e2NuKCJmbGlwLWdyaWQtaXRlbSIsIGNsYXNzTmFtZSl9CglkYXRhLWZsaXAtaWQ9e2lkfQoJe3N0eWxlfQoJey4uLnByb3BzfQo+Cgl7QHJlbmRlciBjaGlsZHJlbj8uKCl9CjwvZGl2Pgo=", "components/floating-menu/FloatingMenu.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyB1bnRyYWNrIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgeyBTcGxpdFRleHQgfSBmcm9tICJnc2FwL2Rpc3QvU3BsaXRUZXh0IjsKCWltcG9ydCB7IG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAiY2xzeCI7CgoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGVuc3VyZU1vdGlvbkNvcmVFYXNlLCByZWdpc3RlclBsdWdpbk9uY2UgfSBmcm9tICIuLi9oZWxwZXJzL2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgeyBwb3J0YWwgfSBmcm9tICIuLi91dGlscy91c2UtcG9ydGFsIjsKCgl0eXBlIE1lbnVWYXJpYW50ID0gImRlZmF1bHQiIHwgIm11dGVkIjsKCglpbnRlcmZhY2UgTWVudUxpbmsgewoJCS8qKgoJCSAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBsaW5rLgoJCSAqLwoJCWxhYmVsOiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIFVSTCB0aGUgbGluayBwb2ludHMgdG8uCgkJICovCgkJaHJlZjogc3RyaW5nOwoJfQoKCWludGVyZmFjZSBNZW51QnV0dG9uIHsKCQkvKioKCQkgKiBUaGUgdGV4dCB0byBkaXNwbGF5IG9uIHRoZSBidXR0b24uCgkJICovCgkJbGFiZWw6IHN0cmluZzsKCQkvKioKCQkgKiBUaGUgVVJMIHRoZSBidXR0b24gbGlua3MgdG8uCgkJICovCgkJaHJlZjogc3RyaW5nOwoJfQoKCWludGVyZmFjZSBNZW51R3JvdXAgewoJCS8qKgoJCSAqIFRoZSB0aXRsZSBvZiB0aGUgbWVudSBncm91cCwgZGlzcGxheWVkIGFib3ZlIHRoZSBsaW5rcy4KCQkgKi8KCQl0aXRsZTogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSB2aXN1YWwgc3R5bGUgdmFyaWFudCBvZiB0aGUgZ3JvdXAuCgkJICogJ211dGVkJyBhZGRzIGEgYmFja2dyb3VuZCBjb2xvci4KCQkgKi8KCQl2YXJpYW50PzogTWVudVZhcmlhbnQ7CgkJLyoqCgkJICogQXJyYXkgb2YgbGlua3MgdG8gZGlzcGxheSB3aXRoaW4gdGhpcyBncm91cC4KCQkgKi8KCQlsaW5rczogTWVudUxpbmtbXTsKCX0KCglpbnRlcmZhY2UgRmxvYXRpbmdNZW51Q2xhc3NlcyB7CgkJcm9vdD86IENsYXNzVmFsdWU7CgkJb3ZlcmxheT86IENsYXNzVmFsdWU7CgkJaGVhZGVyPzogQ2xhc3NWYWx1ZTsKCQl0b2dnbGVCdXR0b24/OiBDbGFzc1ZhbHVlOwoJCXRvZ2dsZUxpbmU/OiBDbGFzc1ZhbHVlOwoJCWxvZ28/OiBDbGFzc1ZhbHVlOwoJCWFjdGlvbnM/OiBDbGFzc1ZhbHVlOwoJCXByaW1hcnlCdXR0b24/OiBDbGFzc1ZhbHVlOwoJCXNlY29uZGFyeUJ1dHRvbj86IENsYXNzVmFsdWU7CgkJbWVudVdyYXBwZXI/OiBDbGFzc1ZhbHVlOwoJCWdyaWQ/OiBDbGFzc1ZhbHVlOwoJCWdyb3VwPzogQ2xhc3NWYWx1ZTsKCQlncm91cE11dGVkPzogQ2xhc3NWYWx1ZTsKCQlncm91cFRpdGxlPzogQ2xhc3NWYWx1ZTsKCQlsaW5rPzogQ2xhc3NWYWx1ZTsKCQlsaW5rVGV4dD86IENsYXNzVmFsdWU7CgkJbGlua1VuZGVybGluZT86IENsYXNzVmFsdWU7CgkJZGl2aWRlcj86IENsYXNzVmFsdWU7Cgl9CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBHcm91cHMgb2YgbGlua3MgdG8gZGlzcGxheSBpbiB0aGUgbWVudS4KCQkgKi8KCQltZW51R3JvdXBzOiBNZW51R3JvdXBbXTsKCQkvKioKCQkgKiBTbmlwcGV0IGZvciB0aGUgbG9nbyBpY29uIChhbmQgb3B0aW9uYWwgdGV4dCkuCgkJICovCgkJbG9nbz86IFNuaXBwZXQ7CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHByaW1hcnkgYnV0dG9uIGluIHRoZSBoZWFkZXIuCgkJICovCgkJcHJpbWFyeUJ1dHRvbj86IE1lbnVCdXR0b247CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24gaW4gdGhlIGhlYWRlci4KCQkgKi8KCQlzZWNvbmRhcnlCdXR0b24/OiBNZW51QnV0dG9uOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIGNsYXNzZXMgZm9yIHNwZWNpZmljIG1lbnUgc2xvdHMuCgkJICovCgkJY2xhc3Nlcz86IEZsb2F0aW5nTWVudUNsYXNzZXM7CgkJLyoqCgkJICogVGhlIHRhcmdldCBlbGVtZW50IG9yIHNlbGVjdG9yIHRvIGFwcGVuZCB0aGUgbWVudSB0by4KCQkgKiBVc2VmdWwgZm9yIGNvbnRhaW5tZW50IGluIGRlbW9zIG9yIHNwZWNpZmljIGNvbnRhaW5lcnMuCgkJICogQGRlZmF1bHQgImJvZHkiCgkJICovCgkJcG9ydGFsVGFyZ2V0PzogSFRNTEVsZW1lbnQgfCBzdHJpbmc7Cgl9CgoJbGV0IHsKCQltZW51R3JvdXBzLAoJCWxvZ28sCgkJcHJpbWFyeUJ1dHRvbiwKCQlzZWNvbmRhcnlCdXR0b24sCgkJY2xhc3M6IGNsYXNzTmFtZSwKCQljbGFzc2VzLAoJCXBvcnRhbFRhcmdldCA9ICJib2R5IiwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGlzT3BlbiA9ICRzdGF0ZShmYWxzZSk7CglsZXQgdGltZWxpbmU6IGdzYXAuY29yZS5UaW1lbGluZSB8IG51bGwgPSBudWxsOwoKCWxldCBjb250YWluZXJSZWY6IEhUTUxFbGVtZW50OwoJbGV0IG1lbnVXcmFwcGVyUmVmOiBIVE1MRWxlbWVudDsKCWxldCBsaW5lMVJlZjogSFRNTEVsZW1lbnQ7CglsZXQgbGluZTJSZWY6IEhUTUxFbGVtZW50OwoJbGV0IG92ZXJsYXlSZWY6IEhUTUxFbGVtZW50OwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lclJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lclJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaE1lbnVXcmFwcGVyUmVmID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJbWVudVdyYXBwZXJSZWYgPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hMaW5lMVJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWxpbmUxUmVmID0gbm9kZTsKCX07CgoJY29uc3QgYXR0YWNoTGluZTJSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQlsaW5lMlJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaE92ZXJsYXlSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQlvdmVybGF5UmVmID0gbm9kZTsKCX07CgoJZnVuY3Rpb24gdG9nZ2xlKCkgewoJCWlmICghdGltZWxpbmUpIHJldHVybjsKCQlpc09wZW4gPSAhaXNPcGVuOwoJCWlmIChpc09wZW4pIHsKCQkJdGltZWxpbmUucGxheSgpOwoJCX0gZWxzZSB7CgkJCXRpbWVsaW5lLnJldmVyc2UoKTsKCQl9Cgl9CgoJb25Nb3VudCgoKSA9PiB7CgkJcmVnaXN0ZXJQbHVnaW5PbmNlKFNwbGl0VGV4dCk7CgkJZW5zdXJlTW90aW9uQ29yZUVhc2UoKTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghbWVudUdyb3Vwcy5sZW5ndGgpIHJldHVybjsKCgkJbGV0IGNhbmNlbGxlZCA9IGZhbHNlOwoJCWxldCBzcGxpdHM6IFNwbGl0VGV4dFtdID0gW107CgoJCWNvbnN0IGluaXQgPSBhc3luYyAoKSA9PiB7CgkJCWF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5OwoJCQlpZiAoY2FuY2VsbGVkKSByZXR1cm47CgoJCQljb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwoJCQljb25zdCBpc01vYmlsZSA9IHdpZHRoIDwgNzY4OwoJCQljb25zdCBpc1RhYmxldCA9IHdpZHRoID49IDc2OCAmJiB3aWR0aCA8IDEwMjQ7CgoJCQlsZXQgbWF4V2lkdGhPcGVuID0gIjc1JSI7CgkJCWxldCBtYXhXaWR0aEluaXRpYWwgPSAiNTAlIjsKCgkJCWlmIChpc01vYmlsZSkgewoJCQkJbWF4V2lkdGhPcGVuID0gIjEwMCUiOwoJCQkJbWF4V2lkdGhJbml0aWFsID0gIjk1JSI7CgkJCX0gZWxzZSBpZiAoaXNUYWJsZXQpIHsKCQkJCW1heFdpZHRoT3BlbiA9ICI4NSUiOwoJCQkJbWF4V2lkdGhJbml0aWFsID0gIjcwJSI7CgkJCX0KCgkJCWdzYXAuc2V0KG92ZXJsYXlSZWYsIHsgYXV0b0FscGhhOiAwIH0pOwoJCQlnc2FwLnNldChjb250YWluZXJSZWYsIHsgbWF4V2lkdGg6IG1heFdpZHRoSW5pdGlhbCB9KTsKCQkJZ3NhcC5zZXQobWVudVdyYXBwZXJSZWYsIHsgaGVpZ2h0OiAwLCBhdXRvQWxwaGE6IDAgfSk7CgoJCQljb25zdCBsaW5rRWxlbWVudHMgPSBnc2FwLnV0aWxzLnRvQXJyYXkoCgkJCQlgW2RhdGEtc2xvdD0ibGluay10ZXh0Il1gLAoJCQkJbWVudVdyYXBwZXJSZWYsCgkJCSkgYXMgSFRNTEVsZW1lbnRbXTsKCgkJCXNwbGl0cyA9IGxpbmtFbGVtZW50cy5tYXAoKGVsKSA9PgoJCQkJU3BsaXRUZXh0LmNyZWF0ZShlbCwgeyB0eXBlOiAibGluZXMiLCBtYXNrOiAibGluZXMiIH0pLAoJCQkpOwoJCQljb25zdCBhbGxMaW5lcyA9IHNwbGl0cy5mbGF0TWFwKChzKSA9PiBzLmxpbmVzKTsKCgkJCXRpbWVsaW5lID0gZ3NhcC50aW1lbGluZSh7CgkJCQlwYXVzZWQ6IHRydWUsCgkJCQlkZWZhdWx0czogeyBlYXNlOiAibW90aW9uLWNvcmUtZWFzZSIsIGR1cmF0aW9uOiAwLjUgfSwKCQkJfSk7CgoJCQl0aW1lbGluZQoJCQkJLnRvKAoJCQkJCWNvbnRhaW5lclJlZiwKCQkJCQl7CgkJCQkJCW1heFdpZHRoOiBtYXhXaWR0aE9wZW4sCgkJCQkJCS4uLihpc01vYmlsZQoJCQkJCQkJPyB7CgkJCQkJCQkJCXRvcDogMCwKCQkJCQkJCQkJcGFkZGluZ1RvcDogIjAuNXJlbSIsCgkJCQkJCQkJCWJvcmRlclRvcExlZnRSYWRpdXM6IDAsCgkJCQkJCQkJCWJvcmRlclRvcFJpZ2h0UmFkaXVzOiAwLAoJCQkJCQkJCX0KCQkJCQkJCToge30pLAoJCQkJCX0sCgkJCQkJMCwKCQkJCSkKCQkJCS50byhvdmVybGF5UmVmLCB7IGF1dG9BbHBoYTogMSB9LCAwKQoJCQkJLnRvKG1lbnVXcmFwcGVyUmVmLCB7IGhlaWdodDogImF1dG8iLCBhdXRvQWxwaGE6IDEgfSwgMC4yKQoJCQkJLnRvKFtsaW5lMVJlZiwgbGluZTJSZWZdLCB7IHk6IDAsIGR1cmF0aW9uOiAwLjQgfSwgMC4yKQoJCQkJLnRvKGxpbmUxUmVmLCB7IHJvdGF0aW9uOiA0NSwgZHVyYXRpb246IDAuNCB9LCAwLjIpCgkJCQkudG8obGluZTJSZWYsIHsgcm90YXRpb246IC00NSwgZHVyYXRpb246IDAuNCB9LCAwLjIpOwoKCQkJaWYgKGFsbExpbmVzLmxlbmd0aCkgewoJCQkJdGltZWxpbmUuZnJvbSgKCQkJCQlhbGxMaW5lcywKCQkJCQl7CgkJCQkJCXlQZXJjZW50OiAxMDAsCgkJCQkJCWF1dG9BbHBoYTogMCwKCQkJCQkJc3RhZ2dlcjogMC4wMiwKCQkJCQl9LAoJCQkJCTAuMywKCQkJCSk7CgkJCX0KCgkJCWlmICh1bnRyYWNrKCgpID0+IGlzT3BlbikpIHsKCQkJCXRpbWVsaW5lLnByb2dyZXNzKDEpOwoJCQl9CgkJfTsKCgkJaW5pdCgpOwoKCQlyZXR1cm4gKCkgPT4gewoJCQljYW5jZWxsZWQgPSB0cnVlOwoJCQlpZiAodGltZWxpbmUpIHsKCQkJCXRpbWVsaW5lLmtpbGwoKTsKCQkJCXRpbWVsaW5lID0gbnVsbDsKCQkJfQoJCQlzcGxpdHMuZm9yRWFjaCgocykgPT4gcy5yZXZlcnQoKSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYKCXVzZTpwb3J0YWw9e3BvcnRhbFRhcmdldH0KCXtAYXR0YWNoIGF0dGFjaE92ZXJsYXlSZWZ9CglkYXRhLXNsb3Q9Im92ZXJsYXkiCgljbGFzcz17Y24oCgkJInBvaW50ZXItZXZlbnRzLW5vbmUgZml4ZWQgaW5zZXQtMCB6LTQwIGJnLWJhY2tncm91bmQtaW5zZXQvODAgb3BhY2l0eS0wIGRhdGEtW29wZW49dHJ1ZV06cG9pbnRlci1ldmVudHMtYXV0byIsCgkJY2xhc3Nlcz8ub3ZlcmxheSwKCSl9CglkYXRhLW9wZW49e2lzT3Blbn0KCW9uY2xpY2s9e3RvZ2dsZX0KCW9ua2V5ZG93bj17KGUpID0+IHsKCQlpZiAoZS5rZXkgPT09ICJFc2NhcGUiICYmIGlzT3BlbikgewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCXRvZ2dsZSgpOwoJCX0KCX19Cglyb2xlPSJidXR0b24iCgl0YWJpbmRleD0iLTEiCglhcmlhLWxhYmVsPSJDbG9zZSBtZW51Igo+PC9kaXY+Cgo8ZGl2Cgl1c2U6cG9ydGFsPXtwb3J0YWxUYXJnZXR9Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJSZWZ9CglkYXRhLXNsb3Q9InJvb3QiCgljbGFzcz17Y24oCgkJImZpeGVkIHRvcC0yIGxlZnQtMS8yIHotNTAgdy1mdWxsIG1heC13LVs5NXZ3XSAtdHJhbnNsYXRlLXgtMS8yIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQgc2hhZG93LW1kIG1kOnRvcC00IG1kOm1heC13LVs3MHZ3XSBsZzptYXgtdy1bNTB2d10iLAoJCWNsYXNzTmFtZSwKCQljbGFzc2VzPy5yb290LAoJKX0KPgoJPGRpdgoJCWRhdGEtc2xvdD0iaGVhZGVyIgoJCWNsYXNzPXtjbigKCQkJInJlbGF0aXZlIHotMjAgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTEiLAoJCQljbGFzc2VzPy5oZWFkZXIsCgkJKX0KCT4KCQk8YnV0dG9uCgkJCW9uY2xpY2s9e3RvZ2dsZX0KCQkJZGF0YS1zbG90PSJ0b2dnbGUtYnV0dG9uIgoJCQljbGFzcz17Y24oCgkJCQkiZ3JvdXAgcmVsYXRpdmUgZmxleCBoLTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXNtIHByLTIgdHJhbnNpdGlvbi1bYmFja2dyb3VuZC1jb2xvcl0gZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGhvdmVyOmJnLWFjY2VudC8xMCIsCgkJCQljbGFzc2VzPy50b2dnbGVCdXR0b24sCgkJCSl9CgkJCWFyaWEtbGFiZWw9IlRvZ2dsZSBtZW51IgoJCT4KCQkJPGRpdiBjbGFzcz0icmVsYXRpdmUgZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIj4KCQkJCTxzcGFuCgkJCQkJe0BhdHRhY2ggYXR0YWNoTGluZTFSZWZ9CgkJCQkJZGF0YS1zbG90PSJ0b2dnbGUtbGluZSIKCQkJCQljbGFzcz17Y24oCgkJCQkJCSJhYnNvbHV0ZSBoLXB4IHctNiBiZy1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBncm91cC1ob3ZlcjpiZy1hY2NlbnQiLAoJCQkJCQljbGFzc2VzPy50b2dnbGVMaW5lLAoJCQkJCSl9CgkJCQkJc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpIgoJCQkJPjwvc3Bhbj4KCQkJCTxzcGFuCgkJCQkJe0BhdHRhY2ggYXR0YWNoTGluZTJSZWZ9CgkJCQkJZGF0YS1zbG90PSJ0b2dnbGUtbGluZSIKCQkJCQljbGFzcz17Y24oCgkJCQkJCSJhYnNvbHV0ZSBoLXB4IHctNiBiZy1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBncm91cC1ob3ZlcjpiZy1hY2NlbnQiLAoJCQkJCQljbGFzc2VzPy50b2dnbGVMaW5lLAoJCQkJCSl9CgkJCQkJc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KSIKCQkJCT48L3NwYW4+CgkJCTwvZGl2PgoJCQk8c3BhbgoJCQkJY2xhc3M9Im1sLTEgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJhbnNpdGlvbi1bY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBncm91cC1ob3Zlcjp0ZXh0LWFjY2VudCIKCQkJPgoJCQkJTWVudQoJCQk8L3NwYW4+CgkJPC9idXR0b24+CgoJCTxkaXYKCQkJY2xhc3M9ImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRyYW5zZm9ybS1ncHUiCgkJCXN0eWxlPSJiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IgoJCT4KCQkJeyNpZiBsb2dvfQoJCQkJPGRpdgoJCQkJCWRhdGEtc2xvdD0ibG9nbyIKCQkJCQljbGFzcz17Y24oImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIiwgY2xhc3Nlcz8ubG9nbyl9CgkJCQk+CgkJCQkJe0ByZW5kZXIgbG9nbygpfQoJCQkJPC9kaXY+CgkJCXsvaWZ9CgkJPC9kaXY+CgoJCTxkaXYKCQkJZGF0YS1zbG90PSJhY3Rpb25zIgoJCQljbGFzcz17Y24oImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIiwgY2xhc3Nlcz8uYWN0aW9ucyl9CgkJPgoJCQl7I2lmIHNlY29uZGFyeUJ1dHRvbn0KCQkJCTxhCgkJCQkJaHJlZj17c2Vjb25kYXJ5QnV0dG9uLmhyZWZ9CgkJCQkJZGF0YS1zbG90PSJzZWNvbmRhcnktYnV0dG9uIgoJCQkJCWNsYXNzPXtjbigKCQkJCQkJImhpZGRlbiBoLTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXNtIHB4LTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJhbnNpdGlvbi1bYmFja2dyb3VuZC1jb2xvcixjb2xvcl0gZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGhvdmVyOmJnLWJhY2tncm91bmQtbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIG1kOmZsZXgiLAoJCQkJCQljbGFzc2VzPy5zZWNvbmRhcnlCdXR0b24sCgkJCQkJKX0KCQkJCT4KCQkJCQl7c2Vjb25kYXJ5QnV0dG9uLmxhYmVsfQoJCQkJPC9hPgoJCQl7L2lmfQoJCQl7I2lmIHByaW1hcnlCdXR0b259CgkJCQk8YQoJCQkJCWhyZWY9e3ByaW1hcnlCdXR0b24uaHJlZn0KCQkJCQlkYXRhLXNsb3Q9InByaW1hcnktYnV0dG9uIgoJCQkJCWNsYXNzPXtjbigKCQkJCQkJImZsZXggaC0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1zbSBiZy1hY2NlbnQvMTAgcHgtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYWNjZW50IHRyYW5zaXRpb24tW2JhY2tncm91bmQtY29sb3JdIGR1cmF0aW9uLTQwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSBob3ZlcjpiZy1hY2NlbnQvMjAiLAoJCQkJCQljbGFzc2VzPy5wcmltYXJ5QnV0dG9uLAoJCQkJCSl9CgkJCQk+CgkJCQkJe3ByaW1hcnlCdXR0b24ubGFiZWx9CgkJCQk8L2E+CgkJCXsvaWZ9CgkJPC9kaXY+Cgk8L2Rpdj4KCgk8ZGl2CgkJe0BhdHRhY2ggYXR0YWNoTWVudVdyYXBwZXJSZWZ9CgkJZGF0YS1zbG90PSJtZW51LXdyYXBwZXIiCgkJY2xhc3M9e2NuKAoJCQkiaC0wIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLXQgYm9yZGVyLWJvcmRlciBvcGFjaXR5LTAiLAoJCQljbGFzc2VzPy5tZW51V3JhcHBlciwKCQkpfQoJPgoJCTxkaXYKCQkJZGF0YS1zbG90PSJncmlkIgoJCQljbGFzcz17Y24oCgkJCQkiZ3JpZCBtYXgtaC1bNjV2aF0gZ3JpZC1jb2xzLTEgZ2FwLTQgb3ZlcmZsb3cteS1hdXRvIG92ZXJzY3JvbGwtY29udGFpbiBwLTQgbWQ6bWF4LWgtbm9uZSBtZDpncmlkLWNvbHMtMyBtZDpvdmVyZmxvdy12aXNpYmxlIiwKCQkJCWNsYXNzZXM/LmdyaWQsCgkJCSl9CgkJPgoJCQl7I2VhY2ggbWVudUdyb3VwcyBhcyBncm91cCAoZ3JvdXAudGl0bGUpfQoJCQkJPGRpdgoJCQkJCWRhdGEtc2xvdD0iZ3JvdXAiCgkJCQkJY2xhc3M9e2NuKAoJCQkJCQkiZmxleCBmbGV4LWNvbCBnYXAtNCByb3VuZGVkLXNtIHAtNCB0cmFuc2l0aW9uLWNvbG9ycyBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSIsCgkJCQkJCWdyb3VwLnZhcmlhbnQgPT09ICJtdXRlZCIKCQkJCQkJCT8gImJnLWJhY2tncm91bmQtbXV0ZWQiCgkJCQkJCQk6ICJiZy10cmFuc3BhcmVudCIsCgkJCQkJCWNsYXNzZXM/Lmdyb3VwLAoJCQkJCQlncm91cC52YXJpYW50ID09PSAibXV0ZWQiICYmIGNsYXNzZXM/Lmdyb3VwTXV0ZWQsCgkJCQkJKX0KCQkJCT4KCQkJCQk8aDMKCQkJCQkJZGF0YS1zbG90PSJncm91cC10aXRsZSIKCQkJCQkJY2xhc3M9e2NuKAoJCQkJCQkJIm1vbm8gdGV4dC14cyBmb250LW1lZGl1bSB0cmFja2luZy13aWRlciB0ZXh0LWZvcmVncm91bmQtbXV0ZWQvNTAgdXBwZXJjYXNlIiwKCQkJCQkJCWNsYXNzZXM/Lmdyb3VwVGl0bGUsCgkJCQkJCSl9CgkJCQkJPgoJCQkJCQl7Z3JvdXAudGl0bGV9CgkJCQkJPC9oMz4KCQkJCQk8ZGl2IGNsYXNzPSJtdC00IGZsZXggZmxleC1jb2wgZ2FwLTQiPgoJCQkJCQl7I2VhY2ggZ3JvdXAubGlua3MgYXMgbGluaywgaSAobGluay5ocmVmICsgbGluay5sYWJlbCl9CgkJCQkJCQk8YQoJCQkJCQkJCWhyZWY9e2xpbmsuaHJlZn0KCQkJCQkJCQlkYXRhLXNsb3Q9ImxpbmsiCgkJCQkJCQkJY2xhc3M9e2NuKAoJCQkJCQkJCQkiZ3JvdXAvbGluayByZWxhdGl2ZSBibG9jayB3LWZpdCB0ZXh0LTJ4bCBmb250LW5vcm1hbCB0ZXh0LWZvcmVncm91bmQtbXV0ZWQgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGhvdmVyOnRleHQtZm9yZWdyb3VuZCIsCgkJCQkJCQkJCWNsYXNzZXM/LmxpbmssCgkJCQkJCQkJKX0KCQkJCQkJCT4KCQkJCQkJCQk8c3BhbiBjbGFzcz0icmVsYXRpdmUgei0xMCBibG9jayBsZWFkaW5nLXRpZ2h0Ij4KCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCWRhdGEtc2xvdD0ibGluay10ZXh0IgoJCQkJCQkJCQkJY2xhc3M9e2NuKAoJCQkJCQkJCQkJCSJtZW51LWxpbmstdGV4dCBibG9jayB3aGl0ZXNwYWNlLW5vd3JhcCIsCgkJCQkJCQkJCQkJY2xhc3Nlcz8ubGlua1RleHQsCgkJCQkJCQkJCQkpfQoJCQkJCQkJCQk+CgkJCQkJCQkJCQl7bGluay5sYWJlbH0KCQkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQk8c3BhbgoJCQkJCQkJCQlkYXRhLXNsb3Q9ImxpbmstdW5kZXJsaW5lIgoJCQkJCQkJCQljbGFzcz17Y24oCgkJCQkJCQkJCQkiYWJzb2x1dGUgLWJvdHRvbS0xIGxlZnQtMCBoLXB4IHctZnVsbCBvcmlnaW4tcmlnaHQgc2NhbGUteC0wIGJnLWZvcmVncm91bmQgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNDAwIGVhc2UtW2N1YmljLWJlemllcigwLjYyNSwwLjA1LDAsMSldIGdyb3VwLWhvdmVyL2xpbms6b3JpZ2luLWxlZnQgZ3JvdXAtaG92ZXIvbGluazpzY2FsZS14LTEwMCIsCgkJCQkJCQkJCQljbGFzc2VzPy5saW5rVW5kZXJsaW5lLAoJCQkJCQkJCQkpfQoJCQkJCQkJCT48L3NwYW4+CgkJCQkJCQk8L2E+CgkJCQkJCQl7I2lmIGkgPCBncm91cC5saW5rcy5sZW5ndGggLSAxfQoJCQkJCQkJCTxocgoJCQkJCQkJCQlkYXRhLXNsb3Q9ImRpdmlkZXIiCgkJCQkJCQkJCWNsYXNzPXtjbigiYm9yZGVyLWJvcmRlciIsIGNsYXNzZXM/LmRpdmlkZXIpfQoJCQkJCQkJCS8+CgkJCQkJCQl7L2lmfQoJCQkJCQl7L2VhY2h9CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJey9lYWNofQoJCTwvZGl2PgoJPC9kaXY+CjwvZGl2Pgo=", "components/fluid-image-reveal/FluidImageReveal.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0ZsdWlkSW1hZ2VSZXZlYWxTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBTY2VuZVByb3BzWyJiYXNlSW1hZ2UiXTsKCQkvKioKCQkgKiBTb3VyY2UgVVJMIG9mIHRoZSBpbWFnZSByZXZlYWxlZCBieSB0aGUgZmx1aWQgbWFzay4KCQkgKi8KCQlyZXZlYWxJbWFnZTogU2NlbmVQcm9wc1sicmV2ZWFsSW1hZ2UiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIERpc3NpcGF0aW9uIGZhY3RvciBmb3IgdGhlIHJldmVhbCBtYXNrLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQlkaXNzaXBhdGlvbj86IFNjZW5lUHJvcHNbImRpc3NpcGF0aW9uIl07CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogU2NlbmVQcm9wc1sicG9pbnRlclNpemUiXTsKCQkvKioKCQkgKiBGbHVpZCB2ZWxvY2l0eSBkaXNzaXBhdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJdmVsb2NpdHlEaXNzaXBhdGlvbj86IFNjZW5lUHJvcHNbInZlbG9jaXR5RGlzc2lwYXRpb24iXTsKCQkvKioKCQkgKiBQcmVzc3VyZSBpdGVyYXRpb25zLiBNb3JlIGl0ZXJhdGlvbnMgPSBtb3JlIGFjY3VyYXRlIGJ1dCBzbG93ZXIuCgkJICogQGRlZmF1bHQgMTAKCQkgKi8KCQlwcmVzc3VyZUl0ZXJhdGlvbnM/OiBTY2VuZVByb3BzWyJwcmVzc3VyZUl0ZXJhdGlvbnMiXTsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IFNjZW5lUHJvcHNbImJsZW5kU29mdG5lc3MiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkaXNzaXBhdGlvbiA9IDAuOTYsCgkJcG9pbnRlclNpemUgPSAwLjAwNSwKCQl2ZWxvY2l0eURpc3NpcGF0aW9uID0gMC45NiwKCQlwcmVzc3VyZUl0ZXJhdGlvbnMgPSAxMCwKCQlibGVuZFNvZnRuZXNzID0gMC4yMiwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUKCQkJe2Jhc2VJbWFnZX0KCQkJe3JldmVhbEltYWdlfQoJCQl7ZGlzc2lwYXRpb259CgkJCXtwb2ludGVyU2l6ZX0KCQkJe3ZlbG9jaXR5RGlzc2lwYXRpb259CgkJCXtwcmVzc3VyZUl0ZXJhdGlvbnN9CgkJCXtibGVuZFNvZnRuZXNzfQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/fluid-image-reveal/FluidImageRevealScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlclRhcmdldCwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyaWFuZ2xlLAoJCVZlYzIsCgkJVmVjMywKCX0gZnJvbSAib2dsIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogU291cmNlIFVSTCBvZiB0aGUgaW1hZ2UgcmV2ZWFsZWQgYnkgdGhlIGZsdWlkIG1hc2suCgkJICovCgkJcmV2ZWFsSW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSByZXZlYWwgbWFzay4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZsdWlkIHZlbG9jaXR5IGRpc3NpcGF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQl2ZWxvY2l0eURpc3NpcGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIFByZXNzdXJlIGl0ZXJhdGlvbnMuIE1vcmUgaXRlcmF0aW9ucyA9IG1vcmUgYWNjdXJhdGUgYnV0IHNsb3dlci4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCXByZXNzdXJlSXRlcmF0aW9ucz86IG51bWJlcjsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IG51bWJlcjsKCX0KCgl0eXBlIFBvaW50ZXJTdGF0ZSA9IHsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCWR4OiBudW1iZXI7CgkJZHk6IG51bWJlcjsKCQltb3ZlZDogYm9vbGVhbjsKCQlpbml0aWFsaXplZDogYm9vbGVhbjsKCX07CgoJdHlwZSBDYW52YXNNZXRyaWNzID0gewoJCXdpZHRoOiBudW1iZXI7CgkJaGVpZ2h0OiBudW1iZXI7Cgl9OwoKCXR5cGUgRG91YmxlRkJPID0gewoJCXJlYWQ6IFJlbmRlclRhcmdldDsKCQl3cml0ZTogUmVuZGVyVGFyZ2V0OwoJCXN3YXA6ICgpID0+IHZvaWQ7Cgl9OwoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJCWJsZW5kU29mdG5lc3MgPSAwLjIyLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHNldEJhc2VTb3VyY2UgPSAkc3RhdGU8KHNvdXJjZTogc3RyaW5nKSA9PiB2b2lkPigpOwoJbGV0IHNldFJldmVhbFNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgcG9pbnRlclN0YXRlID0gJHN0YXRlPFBvaW50ZXJTdGF0ZT4oewoJCXg6IDAsCgkJeTogMCwKCQlkeDogMCwKCQlkeTogMCwKCQltb3ZlZDogZmFsc2UsCgkJaW5pdGlhbGl6ZWQ6IGZhbHNlLAoJfSk7Cgljb25zdCBjYW52YXNNZXRyaWNzID0gJHN0YXRlPENhbnZhc01ldHJpY3M+KHsKCQl3aWR0aDogMSwKCQloZWlnaHQ6IDEsCgl9KTsKCgljb25zdCBwb2ludGVyVXYgPSBuZXcgVmVjMigpOwoJY29uc3QgYmFzZVRleHR1cmVTaXplID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCByZXZlYWxUZXh0dXJlU2l6ZSA9IG5ldyBWZWMyKDEsIDEpOwoKCWNvbnN0IHBvaW50ZXJGb3JjZUNsYW1wID0gNDUwOwoJY29uc3QgcG9pbnRlckZvcmNlSW5pdGlhbExlcnAgPSAwLjI7Cgljb25zdCBwb2ludGVyRm9yY2VMZXJwID0gMC41NTsKCgljb25zdCBjbGFtcCA9ICh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+CgkJTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7Cgljb25zdCBsZXJwID0gKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpID0+IGEgKyAoYiAtIGEpICogdDsKCgljb25zdCB1cGRhdGVQb2ludGVyUG9zaXRpb24gPSAoCgkJcHg6IG51bWJlciwKCQlweTogbnVtYmVyLAoJCXdpZHRoOiBudW1iZXIsCgkJaGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQljb25zdCBwcmV2WCA9IHBvaW50ZXJTdGF0ZS54OwoJCWNvbnN0IHByZXZZID0gcG9pbnRlclN0YXRlLnk7CgkJY29uc3QgdGFyZ2V0RHggPSBjbGFtcCgKCQkJNSAqIChweCAtIHByZXZYKSwKCQkJLXBvaW50ZXJGb3JjZUNsYW1wLAoJCQlwb2ludGVyRm9yY2VDbGFtcCwKCQkpOwoJCWNvbnN0IHRhcmdldER5ID0gY2xhbXAoCgkJCTUgKiAocHkgLSBwcmV2WSksCgkJCS1wb2ludGVyRm9yY2VDbGFtcCwKCQkJcG9pbnRlckZvcmNlQ2xhbXAsCgkJKTsKCQljb25zdCBsZXJwRmFjdG9yID0gcG9pbnRlclN0YXRlLmluaXRpYWxpemVkCgkJCT8gcG9pbnRlckZvcmNlTGVycAoJCQk6IHBvaW50ZXJGb3JjZUluaXRpYWxMZXJwOwoKCQlwb2ludGVyU3RhdGUubW92ZWQgPSB0cnVlOwoJCXBvaW50ZXJTdGF0ZS5keCA9IGxlcnAocG9pbnRlclN0YXRlLmR4LCB0YXJnZXREeCwgbGVycEZhY3Rvcik7CgkJcG9pbnRlclN0YXRlLmR5ID0gbGVycChwb2ludGVyU3RhdGUuZHksIHRhcmdldER5LCBsZXJwRmFjdG9yKTsKCQlwb2ludGVyU3RhdGUueCA9IHB4OwoJCXBvaW50ZXJTdGF0ZS55ID0gcHk7CgkJcG9pbnRlclN0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTsKCgkJaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CgkJCXBvaW50ZXJVdi5zZXQocHggLyB3aWR0aCwgMSAtIHB5IC8gaGVpZ2h0KTsKCQl9Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZhcnlpbmcgdmVjMiB2TDsKCQl2YXJ5aW5nIHZlYzIgdlI7CgkJdmFyeWluZyB2ZWMyIHZUOwoJCXZhcnlpbmcgdmVjMiB2QjsKCQl1bmlmb3JtIHZlYzIgdVRleGVsOwoKCQl2b2lkIG1haW4gKCkgewoJCQl2VXYgPSB1djsKCQkJdkwgPSB2VXYgLSB2ZWMyKHVUZXhlbC54LCAwLik7CgkJCXZSID0gdlV2ICsgdmVjMih1VGV4ZWwueCwgMC4pOwoJCQl2VCA9IHZVdiArIHZlYzIoMC4sIHVUZXhlbC55KTsKCQkJdkIgPSB2VXYgLSB2ZWMyKDAuLCB1VGV4ZWwueSk7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgYWR2ZWN0aW9uU2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1SW5wdXQ7CgkJdW5pZm9ybSB2ZWMyIHVUZXhlbDsKCQl1bmlmb3JtIGZsb2F0IHVEdDsKCQl1bmlmb3JtIGZsb2F0IHVEaXNzaXBhdGlvbjsKCgkJdmVjNCBiaWxlcnAgKHNhbXBsZXIyRCBzYW0sIHZlYzIgdXYsIHZlYzIgdHNpemUpIHsKCQkJdmVjMiBzdCA9IHV2IC8gdHNpemUgLSAwLjU7CgkJCXZlYzIgaXV2ID0gZmxvb3Ioc3QpOwoJCQl2ZWMyIGZ1diA9IGZyYWN0KHN0KTsKCQkJdmVjNCBhID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMC41LCAwLjUpKSAqIHRzaXplKTsKCQkJdmVjNCBiID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMS41LCAwLjUpKSAqIHRzaXplKTsKCQkJdmVjNCBjID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMC41LCAxLjUpKSAqIHRzaXplKTsKCQkJdmVjNCBkID0gdGV4dHVyZTJEKHNhbSwgKGl1diArIHZlYzIoMS41LCAxLjUpKSAqIHRzaXplKTsKCQkJcmV0dXJuIG1peChtaXgoYSwgYiwgZnV2LngpLCBtaXgoYywgZCwgZnV2LngpLCBmdXYueSk7CgkJfQoKCQl2b2lkIG1haW4gKCkgewoJCQl2ZWMyIGNvb3JkID0gdlV2IC0gdUR0ICogYmlsZXJwKHVWZWxvY2l0eSwgdlV2LCB1VGV4ZWwpLnh5ICogdVRleGVsOwoJCQlnbF9GcmFnQ29sb3IgPSB1RGlzc2lwYXRpb24gKiBiaWxlcnAodUlucHV0LCBjb29yZCwgdVRleGVsKTsKCQkJZ2xfRnJhZ0NvbG9yLmEgPSAxLjsKCQl9CglgOwoKCWNvbnN0IGRpdmVyZ2VuY2VTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2TDsKCQl2YXJ5aW5nIHZlYzIgdlI7CgkJdmFyeWluZyB2ZWMyIHZUOwoJCXZhcnlpbmcgdmVjMiB2QjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlQpLnk7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2QikueTsKCQkJZmxvYXQgZGl2ID0gLjYgKiAoUiAtIEwgKyBUIC0gQik7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZGl2LCAwLiwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IHByZXNzdXJlU2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZhcnlpbmcgdmVjMiB2TDsKCQl2YXJ5aW5nIHZlYzIgdlI7CgkJdmFyeWluZyB2ZWMyIHZUOwoJCXZhcnlpbmcgdmVjMiB2QjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1UHJlc3N1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdURpdmVyZ2VuY2U7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlQpLng7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2QikueDsKCQkJZmxvYXQgZGl2ZXJnZW5jZSA9IHRleHR1cmUyRCh1RGl2ZXJnZW5jZSwgdlV2KS54OwoJCQlmbG9hdCBwcmVzc3VyZSA9IChMICsgUiArIEIgKyBUIC0gZGl2ZXJnZW5jZSkgKiAwLjI1OwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHByZXNzdXJlLCAwLiwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IGdyYWRpZW50U3VidHJhY3RTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VmVsb2NpdHk7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCWZsb2F0IEwgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2TCkueDsKCQkJZmxvYXQgUiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZSKS54OwoJCQlmbG9hdCBUID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlQpLng7CgkJCWZsb2F0IEIgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2QikueDsKCQkJdmVjMiB2ZWxvY2l0eSA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZVdikueHk7CgkJCXZlbG9jaXR5Lnh5IC09IHZlYzIoUiAtIEwsIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWxvY2l0eSwgMC4sIDEuKTsKCQl9CglgOwoKCWNvbnN0IHNwbGF0U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKCQl1bmlmb3JtIGZsb2F0IHVSYXRpbzsKCQl1bmlmb3JtIHZlYzMgdVBvaW50VmFsdWU7CgkJdW5pZm9ybSB2ZWMyIHVQb2ludDsKCQl1bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgcCA9IHZVdiAtIHVQb2ludC54eTsKCQkJcC54ICo9IHVSYXRpbzsKCQkJdmVjMyBzcGxhdCA9IHBvdygyLiwgLWRvdChwLCBwKSAvIHVQb2ludFNpemUpICogdVBvaW50VmFsdWU7CgkJCXZlYzMgYmFzZSA9IHRleHR1cmUyRCh1SW5wdXQsIHZVdikueHl6OwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2UgKyBzcGxhdCwgMS4pOwoJCX0KCWA7CgoJY29uc3Qgb3V0cHV0VmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3Qgb3V0cHV0U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVNYXNrVGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1QmFzZVRleHR1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVJldmVhbFRleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMiB1QmFzZVRleHR1cmVTaXplOwoJCXVuaWZvcm0gdmVjMiB1UmV2ZWFsVGV4dHVyZVNpemU7CgkJdW5pZm9ybSB2ZWMyIHVNYXNrVGV4ZWw7CgkJdW5pZm9ybSBmbG9hdCB1QmxlbmRTb2Z0bmVzczsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzYWZlVGV4dHVyZSA9IG1heCh0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyBzYWZlVGV4dHVyZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSBzYWZlVGV4dHVyZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCWZsb2F0IHNhbXBsZU1hc2sodmVjMiB1dikgewoJCQl2ZWMzIG1hc2tEYXRhID0gdGV4dHVyZTJEKHVNYXNrVGV4dHVyZSwgdXYpLnJnYjsKCQkJcmV0dXJuIGNsYW1wKG1heChtYXNrRGF0YS5yLCBtYXgobWFza0RhdGEuZywgbWFza0RhdGEuYikpLCAwLjAsIDEuMCk7CgkJfQoKCQlmbG9hdCBnZXRTbW9vdGhNYXNrKHZlYzIgdXYpIHsKCQkJdmVjMiB0ID0gdU1hc2tUZXhlbDsKCQkJZmxvYXQgbSA9IDAuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigtdC54LCAtdC55KSkgKiAxLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoMC4wLCAtdC55KSkgKiAyLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIodC54LCAtdC55KSkgKiAxLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIoLXQueCwgMC4wKSkgKiAyLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1dikgKiA0LjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIodC54LCAwLjApKSAqIDIuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigtdC54LCB0LnkpKSAqIDEuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigwLjAsIHQueSkpICogMi4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKHQueCwgdC55KSkgKiAxLjA7CgkJCXJldHVybiBtIC8gMTYuMDsKCQl9CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgYmFzZVV2ID0gZ2V0Q292ZXJVVih2VXYsIHVCYXNlVGV4dHVyZVNpemUpOwoJCQl2ZWMyIHJldmVhbFV2ID0gZ2V0Q292ZXJVVih2VXYsIHVSZXZlYWxUZXh0dXJlU2l6ZSk7CgoJCQl2ZWMzIGJhc2VDb2xvciA9IHRleHR1cmUyRCh1QmFzZVRleHR1cmUsIGJhc2VVdikucmdiOwoJCQl2ZWMzIHJldmVhbENvbG9yID0gdGV4dHVyZTJEKHVSZXZlYWxUZXh0dXJlLCByZXZlYWxVdikucmdiOwoKCQkJZmxvYXQgcmF3TWFzayA9IGdldFNtb290aE1hc2sodlV2KTsKCQkJZmxvYXQgc29mdG5lc3MgPSBjbGFtcCh1QmxlbmRTb2Z0bmVzcywgMC4wMSwgMC40OSk7CgkJCWZsb2F0IG1hc2sgPSBzbW9vdGhzdGVwKDAuNSAtIHNvZnRuZXNzLCAwLjUgKyBzb2Z0bmVzcywgcmF3TWFzayk7CgoJCQl2ZWMzIGNvbG9yID0gbWl4KGJhc2VDb2xvciwgcmV2ZWFsQ29sb3IsIG1hc2spOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCAxLjApOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRCYXNlU291cmNlKSByZXR1cm47CgkJc2V0QmFzZVNvdXJjZShiYXNlSW1hZ2UpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRSZXZlYWxTb3VyY2UpIHJldHVybjsKCQlzZXRSZXZlYWxTb3VyY2UocmV2ZWFsSW1hZ2UpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgYmFzZVRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDI1NV0pLAoJCQl3aWR0aDogMSwKCQkJaGVpZ2h0OiAxLAoJCQlmb3JtYXQ6IGdsLlJHQkEsCgkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQltYWdGaWx0ZXI6IGdsLkxJTkVBUiwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IHRydWUsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQljb25zdCByZXZlYWxUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiB0cnVlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJbGV0IGJhc2VUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEJhc2VJbWFnZSA9IChzb3VyY2U6IHN0cmluZykgPT4gewoJCQliYXNlVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBiYXNlVG9rZW47CgkJCWNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7CgkJCWltYWdlLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCWltYWdlLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1hZ2Uub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBiYXNlVG9rZW4pIHJldHVybjsKCQkJCWJhc2VUZXh0dXJlLmltYWdlID0gaW1hZ2U7CgkJCQliYXNlVGV4dHVyZVNpemUuc2V0KAoJCQkJCWltYWdlLm5hdHVyYWxXaWR0aCB8fCBpbWFnZS53aWR0aCB8fCAxLAoJCQkJCWltYWdlLm5hdHVyYWxIZWlnaHQgfHwgaW1hZ2UuaGVpZ2h0IHx8IDEsCgkJCQkpOwoJCQl9OwoJCQlpbWFnZS5zcmMgPSBzb3VyY2U7CgkJfTsKCgkJbGV0IHJldmVhbFRva2VuID0gMDsKCQljb25zdCBsb2FkUmV2ZWFsSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJcmV2ZWFsVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSByZXZlYWxUb2tlbjsKCQkJY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKCQkJaW1hZ2UuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1hZ2UuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWFnZS5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IHJldmVhbFRva2VuKSByZXR1cm47CgkJCQlyZXZlYWxUZXh0dXJlLmltYWdlID0gaW1hZ2U7CgkJCQlyZXZlYWxUZXh0dXJlU2l6ZS5zZXQoCgkJCQkJaW1hZ2UubmF0dXJhbFdpZHRoIHx8IGltYWdlLndpZHRoIHx8IDEsCgkJCQkJaW1hZ2UubmF0dXJhbEhlaWdodCB8fCBpbWFnZS5oZWlnaHQgfHwgMSwKCQkJCSk7CgkJCX07CgkJCWltYWdlLnNyYyA9IHNvdXJjZTsKCQl9OwoKCQlzZXRCYXNlU291cmNlID0gbG9hZEJhc2VJbWFnZTsKCQlzZXRSZXZlYWxTb3VyY2UgPSBsb2FkUmV2ZWFsSW1hZ2U7CgoJCWNvbnN0IGhhbGZGbG9hdEV4dCA9IGdsLnJlbmRlcmVyLmV4dGVuc2lvbnNbIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiXSBhcwoJCQl8IHsgSEFMRl9GTE9BVF9PRVM6IG51bWJlciB9CgkJCXwgdW5kZWZpbmVkOwoJCWNvbnN0IHRleHR1cmVUeXBlID0gZ2wucmVuZGVyZXIuaXNXZWJnbDIKCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuSEFMRl9GTE9BVAoJCQk6IChoYWxmRmxvYXRFeHQ/LkhBTEZfRkxPQVRfT0VTID8/IGdsLkZMT0FUKTsKCQljb25zdCBpbnRlcm5hbEZvcm1hdCA9IGdsLnJlbmRlcmVyLmlzV2ViZ2wyCgkJCT8gdGV4dHVyZVR5cGUgPT09IGdsLkZMT0FUCgkJCQk/IChnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KS5SR0JBMzJGCgkJCQk6IChnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KS5SR0JBMTZGCgkJCTogZ2wuUkdCQTsKCgkJY29uc3QgY3JlYXRlRkJPID0gKHc6IG51bWJlciwgaDogbnVtYmVyKSA9PgoJCQluZXcgUmVuZGVyVGFyZ2V0KGdsLCB7CgkJCQl3aWR0aDogdywKCQkJCWhlaWdodDogaCwKCQkJCXR5cGU6IHRleHR1cmVUeXBlLAoJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJaW50ZXJuYWxGb3JtYXQsCgkJCQltaW5GaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCQltYWdGaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCQlkZXB0aDogZmFsc2UsCgkJCQlzdGVuY2lsOiBmYWxzZSwKCQkJfSk7CgoJCWNvbnN0IGNyZWF0ZURvdWJsZUZCTyA9ICh3OiBudW1iZXIsIGg6IG51bWJlcik6IERvdWJsZUZCTyA9PiB7CgkJCWNvbnN0IGRvdWJsZUZCTzogRG91YmxlRkJPID0gewoJCQkJcmVhZDogY3JlYXRlRkJPKHcsIGgpLAoJCQkJd3JpdGU6IGNyZWF0ZUZCTyh3LCBoKSwKCQkJCXN3YXA6ICgpID0+IHsKCQkJCQljb25zdCB0ZW1wID0gZG91YmxlRkJPLnJlYWQ7CgkJCQkJZG91YmxlRkJPLnJlYWQgPSBkb3VibGVGQk8ud3JpdGU7CgkJCQkJZG91YmxlRkJPLndyaXRlID0gdGVtcDsKCQkJCX0sCgkJCX07CgkJCXJldHVybiBkb3VibGVGQk87CgkJfTsKCgkJY29uc3QgZGVuc2l0eSA9IGNyZWF0ZURvdWJsZUZCTygxMjgsIDEyOCk7CgkJY29uc3QgdmVsb2NpdHkgPSBjcmVhdGVEb3VibGVGQk8oMTI4LCAxMjgpOwoJCWNvbnN0IHByZXNzdXJlID0gY3JlYXRlRG91YmxlRkJPKDEyOCwgMTI4KTsKCQljb25zdCBkaXZlcmdlbmNlID0gY3JlYXRlRkJPKDEyOCwgMTI4KTsKCgkJY29uc3QgdGV4ZWwgPSBuZXcgVmVjMigxIC8gMTI4LCAxIC8gMTI4KTsKCQljb25zdCBhZHZlY3Rpb25Vbmlmb3JtcyA9IHsKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdUlucHV0OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCQl1RHQ6IHsgdmFsdWU6IDEgLyA2MCB9LAoJCQl1RGlzc2lwYXRpb246IHsgdmFsdWU6IHZlbG9jaXR5RGlzc2lwYXRpb24gfSwKCQl9OwoJCWNvbnN0IGRpdmVyZ2VuY2VVbmlmb3JtcyA9IHsKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCX07CgkJY29uc3QgcHJlc3N1cmVVbmlmb3JtcyA9IHsKCQkJdVByZXNzdXJlOiB7IHZhbHVlOiBwcmVzc3VyZS5yZWFkLnRleHR1cmUgfSwKCQkJdURpdmVyZ2VuY2U6IHsgdmFsdWU6IGRpdmVyZ2VuY2UudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJfTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0VW5pZm9ybXMgPSB7CgkJCXVQcmVzc3VyZTogeyB2YWx1ZTogcHJlc3N1cmUucmVhZC50ZXh0dXJlIH0sCgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQl9OwoJCWNvbnN0IHNwbGF0VW5pZm9ybXMgPSB7CgkJCXVJbnB1dDogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVSYXRpbzogeyB2YWx1ZTogMSB9LAoJCQl1UG9pbnRWYWx1ZTogeyB2YWx1ZTogbmV3IFZlYzMoKSB9LAoJCQl1UG9pbnQ6IHsgdmFsdWU6IHBvaW50ZXJVdiB9LAoJCQl1UG9pbnRTaXplOiB7IHZhbHVlOiBwb2ludGVyU2l6ZSB9LAoJCX07CgkJY29uc3Qgb3V0cHV0VW5pZm9ybXMgPSB7CgkJCXVNYXNrVGV4dHVyZTogeyB2YWx1ZTogZGVuc2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdUJhc2VUZXh0dXJlOiB7IHZhbHVlOiBiYXNlVGV4dHVyZSB9LAoJCQl1UmV2ZWFsVGV4dHVyZTogeyB2YWx1ZTogcmV2ZWFsVGV4dHVyZSB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUJhc2VUZXh0dXJlU2l6ZTogeyB2YWx1ZTogYmFzZVRleHR1cmVTaXplIH0sCgkJCXVSZXZlYWxUZXh0dXJlU2l6ZTogeyB2YWx1ZTogcmV2ZWFsVGV4dHVyZVNpemUgfSwKCQkJdU1hc2tUZXhlbDogeyB2YWx1ZTogbmV3IFZlYzIoMSAvIDEyOCwgMSAvIDEyOCkgfSwKCQkJdUJsZW5kU29mdG5lc3M6IHsgdmFsdWU6IGJsZW5kU29mdG5lc3MgfSwKCQl9OwoKCQljb25zdCBhZHZlY3Rpb25Qcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBhZHZlY3Rpb25TaGFkZXIsCgkJCXVuaWZvcm1zOiBhZHZlY3Rpb25Vbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3QgZGl2ZXJnZW5jZVByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGRpdmVyZ2VuY2VTaGFkZXIsCgkJCXVuaWZvcm1zOiBkaXZlcmdlbmNlVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IHByZXNzdXJlUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogcHJlc3N1cmVTaGFkZXIsCgkJCXVuaWZvcm1zOiBwcmVzc3VyZVVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciwKCQkJdW5pZm9ybXM6IGdyYWRpZW50U3VidHJhY3RVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3Qgc3BsYXRQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBzcGxhdFNoYWRlciwKCQkJdW5pZm9ybXM6IHNwbGF0VW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IG91dHB1dFByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IG91dHB1dFZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IG91dHB1dFNoYWRlciwKCQkJdW5pZm9ybXM6IG91dHB1dFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgdHJpYW5nbGUgPSBuZXcgVHJpYW5nbGUoZ2wpOwoJCWNvbnN0IHNpbU1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQlnZW9tZXRyeTogdHJpYW5nbGUsCgkJCXByb2dyYW06IGFkdmVjdGlvblByb2dyYW0sCgkJfSk7CgkJY29uc3Qgb3V0cHV0TWVzaCA9IG5ldyBNZXNoKGdsLCB7CgkJCWdlb21ldHJ5OiB0cmlhbmdsZSwKCQkJcHJvZ3JhbTogb3V0cHV0UHJvZ3JhbSwKCQl9KTsKCgkJY29uc3QgcmVuZGVyUGFzcyA9IChwcm9ncmFtOiBQcm9ncmFtLCB0YXJnZXQ6IFJlbmRlclRhcmdldCkgPT4gewoJCQlzaW1NZXNoLnByb2dyYW0gPSBwcm9ncmFtOwoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZTogc2ltTWVzaCwgdGFyZ2V0LCBjbGVhcjogdHJ1ZSB9KTsKCQl9OwoKCQljb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChlOiBQb2ludGVyRXZlbnQpID0+IHsKCQkJY29uc3QgcmVjdCA9IHRhcmdldENhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDsKCQkJY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wOwoJCQl1cGRhdGVQb2ludGVyUG9zaXRpb24oeCwgeSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX07CgoJCWNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IChlOiBUb3VjaEV2ZW50KSA9PiB7CgkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF07CgkJCWlmICghdG91Y2gpIHJldHVybjsKCQkJY29uc3QgcmVjdCA9IHRhcmdldENhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3QgeCA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJCWNvbnN0IHkgPSB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3A7CgkJCXVwZGF0ZVBvaW50ZXJQb3NpdGlvbih4LCB5LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUsIHsKCQkJcGFzc2l2ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IHJlc2l6ZVNpbXVsYXRpb24gPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWNhbnZhc01ldHJpY3Mud2lkdGggPSB3aWR0aDsKCQkJY2FudmFzTWV0cmljcy5oZWlnaHQgPSBoZWlnaHQ7CgoJCQljb25zdCBzaW1SZXNYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAqIDAuNSkpOwoJCQljb25zdCBzaW1SZXNZID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgKiAwLjUpKTsKCgkJCWRlbnNpdHkucmVhZC5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlkZW5zaXR5LndyaXRlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXZlbG9jaXR5LnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJdmVsb2NpdHkud3JpdGUuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJcHJlc3N1cmUucmVhZC5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlwcmVzc3VyZS53cml0ZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlkaXZlcmdlbmNlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgoJCQljb25zdCB0ZXhlbFggPSAxIC8gc2ltUmVzWDsKCQkJY29uc3QgdGV4ZWxZID0gMSAvIHNpbVJlc1k7CgkJCXRleGVsLnNldCh0ZXhlbFgsIHRleGVsWSk7CgoJCQlvdXRwdXRVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQoZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTsKCQkJb3V0cHV0VW5pZm9ybXMudU1hc2tUZXhlbC52YWx1ZS5zZXQodGV4ZWxYLCB0ZXhlbFkpOwoKCQkJaWYgKGNhbnZhc01ldHJpY3Mud2lkdGggPiAwICYmIGNhbnZhc01ldHJpY3MuaGVpZ2h0ID4gMCkgewoJCQkJcG9pbnRlclV2LnNldCgKCQkJCQlwb2ludGVyU3RhdGUueCAvIGNhbnZhc01ldHJpY3Mud2lkdGgsCgkJCQkJMSAtIHBvaW50ZXJTdGF0ZS55IC8gY2FudmFzTWV0cmljcy5oZWlnaHQsCgkJCQkpOwoJCQl9CgkJfTsKCgkJcmVzaXplU2ltdWxhdGlvbigpOwoJCWxvYWRCYXNlSW1hZ2UoYmFzZUltYWdlKTsKCQlsb2FkUmV2ZWFsSW1hZ2UocmV2ZWFsSW1hZ2UpOwoKCQljb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemVTaW11bGF0aW9uKTsKCQlyZXNpemVPYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KSB7CgkJCXJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoJCX0KCgkJY29uc3QgZGlzcG9zZVRhcmdldCA9ICh0YXJnZXQ6IFJlbmRlclRhcmdldCkgPT4gewoJCQl0YXJnZXQudGV4dHVyZXMuZm9yRWFjaCgodGV4dHVyZSkgPT4gewoJCQkJaWYgKHRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlLnRleHR1cmUpOwoJCQl9KTsKCQkJaWYgKHRhcmdldC5kZXB0aFRleHR1cmU/LnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGFyZ2V0LmRlcHRoVGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCQlpZiAodGFyZ2V0LmRlcHRoQnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoQnVmZmVyKTsKCQkJaWYgKHRhcmdldC5zdGVuY2lsQnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LnN0ZW5jaWxCdWZmZXIpOwoJCQlpZiAodGFyZ2V0LmRlcHRoU3RlbmNpbEJ1ZmZlcikgewoJCQkJZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5kZXB0aFN0ZW5jaWxCdWZmZXIpOwoJCQl9CgkJCWlmICh0YXJnZXQuYnVmZmVyKSBnbC5kZWxldGVGcmFtZWJ1ZmZlcih0YXJnZXQuYnVmZmVyKTsKCQl9OwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQljb25zdCBkdCA9IDEgLyA2MDsKCQkJY29uc3Qgd2lkdGggPSBjYW52YXNNZXRyaWNzLndpZHRoIHx8IHRhcmdldENhbnZhcy5jbGllbnRXaWR0aCB8fCAxOwoJCQljb25zdCBoZWlnaHQgPSBjYW52YXNNZXRyaWNzLmhlaWdodCB8fCB0YXJnZXRDYW52YXMuY2xpZW50SGVpZ2h0IHx8IDE7CgkJCWNvbnN0IGFzcGVjdCA9IGhlaWdodCA+IDAgPyB3aWR0aCAvIGhlaWdodCA6IDE7CgoJCQlpZiAocG9pbnRlclN0YXRlLm1vdmVkKSB7CgkJCQlzcGxhdFVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJCXNwbGF0VW5pZm9ybXMudVJhdGlvLnZhbHVlID0gYXNwZWN0OwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnQudmFsdWUuc2V0KHBvaW50ZXJVdi54LCBwb2ludGVyVXYueSk7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludFZhbHVlLnZhbHVlLnNldCgKCQkJCQlwb2ludGVyU3RhdGUuZHgsCgkJCQkJLXBvaW50ZXJTdGF0ZS5keSwKCQkJCQkxLAoJCQkJKTsKCQkJCXNwbGF0VW5pZm9ybXMudVBvaW50U2l6ZS52YWx1ZSA9IHBvaW50ZXJTaXplOwoJCQkJcmVuZGVyUGFzcyhzcGxhdFByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJCXZlbG9jaXR5LnN3YXAoKTsKCgkJCQlzcGxhdFVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnRWYWx1ZS52YWx1ZS5zZXQoMSwgMSwgMSk7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCQlkZW5zaXR5LnN3YXAoKTsKCgkJCQlwb2ludGVyU3RhdGUubW92ZWQgPSBmYWxzZTsKCQkJfQoKCQkJZGl2ZXJnZW5jZVVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyUGFzcyhkaXZlcmdlbmNlUHJvZ3JhbSwgZGl2ZXJnZW5jZSk7CgoJCQlwcmVzc3VyZVVuaWZvcm1zLnVEaXZlcmdlbmNlLnZhbHVlID0gZGl2ZXJnZW5jZS50ZXh0dXJlOwoJCQljb25zdCBpdGVyYXRpb25zID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihwcmVzc3VyZUl0ZXJhdGlvbnMpKTsKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKCQkJCXByZXNzdXJlVW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCQkJcmVuZGVyUGFzcyhwcmVzc3VyZVByb2dyYW0sIHByZXNzdXJlLndyaXRlKTsKCQkJCXByZXNzdXJlLnN3YXAoKTsKCQkJfQoKCQkJZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zLnVQcmVzc3VyZS52YWx1ZSA9IHByZXNzdXJlLnJlYWQudGV4dHVyZTsKCQkJZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyUGFzcyhncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQl2ZWxvY2l0eS5zd2FwKCk7CgoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RHQudmFsdWUgPSBkdDsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51SW5wdXQudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVEaXNzaXBhdGlvbi52YWx1ZSA9IHZlbG9jaXR5RGlzc2lwYXRpb247CgkJCXJlbmRlclBhc3MoYWR2ZWN0aW9uUHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQl2ZWxvY2l0eS5zd2FwKCk7CgoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RGlzc2lwYXRpb24udmFsdWUgPSBkaXNzaXBhdGlvbjsKCQkJcmVuZGVyUGFzcyhhZHZlY3Rpb25Qcm9ncmFtLCBkZW5zaXR5LndyaXRlKTsKCQkJZGVuc2l0eS5zd2FwKCk7CgoJCQlvdXRwdXRVbmlmb3Jtcy51TWFza1RleHR1cmUudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJb3V0cHV0VW5pZm9ybXMudUJsZW5kU29mdG5lc3MudmFsdWUgPSBibGVuZFNvZnRuZXNzOwoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZTogb3V0cHV0TWVzaCwgY2xlYXI6IHRydWUgfSk7CgoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlyZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGhhbmRsZVRvdWNoTW92ZSk7CgkJCXNldEJhc2VTb3VyY2UgPSB1bmRlZmluZWQ7CgkJCXNldFJldmVhbFNvdXJjZSA9IHVuZGVmaW5lZDsKCgkJCWRpc3Bvc2VUYXJnZXQoZGVuc2l0eS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldChkZW5zaXR5LndyaXRlKTsKCQkJZGlzcG9zZVRhcmdldCh2ZWxvY2l0eS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldCh2ZWxvY2l0eS53cml0ZSk7CgkJCWRpc3Bvc2VUYXJnZXQocHJlc3N1cmUucmVhZCk7CgkJCWRpc3Bvc2VUYXJnZXQocHJlc3N1cmUud3JpdGUpOwoJCQlkaXNwb3NlVGFyZ2V0KGRpdmVyZ2VuY2UpOwoKCQkJaWYgKGJhc2VUZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUoYmFzZVRleHR1cmUudGV4dHVyZSk7CgkJCWlmIChyZXZlYWxUZXh0dXJlLnRleHR1cmUpIGdsLmRlbGV0ZVRleHR1cmUocmV2ZWFsVGV4dHVyZS50ZXh0dXJlKTsKCgkJCWFkdmVjdGlvblByb2dyYW0ucmVtb3ZlKCk7CgkJCWRpdmVyZ2VuY2VQcm9ncmFtLnJlbW92ZSgpOwoJCQlwcmVzc3VyZVByb2dyYW0ucmVtb3ZlKCk7CgkJCWdyYWRpZW50U3VidHJhY3RQcm9ncmFtLnJlbW92ZSgpOwoJCQlzcGxhdFByb2dyYW0ucmVtb3ZlKCk7CgkJCW91dHB1dFByb2dyYW0ucmVtb3ZlKCk7CgkJCXRyaWFuZ2xlLnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/fluid-image-reveal/FluidImageRevealScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlclRhcmdldCwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyaWFuZ2xlLAoJCVZlYzIsCgkJVmVjMywKCX0gZnJvbSAib2dsIjsKCWltcG9ydCB7IHVwZGF0ZUZsdWlkUG9pbnRlclN0YXRlIH0gZnJvbSAiLi4vaGVscGVycy9mbHVpZC1wb2ludGVyIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNvdXJjZSBVUkwgb2YgdGhlIGJhc2UgaW1hZ2UuCgkJICovCgkJYmFzZUltYWdlOiBzdHJpbmc7CgkJLyoqCgkJICogU291cmNlIFVSTCBvZiB0aGUgaW1hZ2UgcmV2ZWFsZWQgYnkgdGhlIGZsdWlkIG1hc2suCgkJICovCgkJcmV2ZWFsSW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSByZXZlYWwgbWFzay4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZsdWlkIHZlbG9jaXR5IGRpc3NpcGF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQl2ZWxvY2l0eURpc3NpcGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIFByZXNzdXJlIGl0ZXJhdGlvbnMuIE1vcmUgaXRlcmF0aW9ucyA9IG1vcmUgYWNjdXJhdGUgYnV0IHNsb3dlci4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCXByZXNzdXJlSXRlcmF0aW9ucz86IG51bWJlcjsKCQkvKioKCQkgKiBTb2Z0bmVzcyBvZiB0aGUgcmV2ZWFsIHRyYW5zaXRpb24gZWRnZS4KCQkgKiBAZGVmYXVsdCAwLjIyCgkJICovCgkJYmxlbmRTb2Z0bmVzcz86IG51bWJlcjsKCX0KCgl0eXBlIFBvaW50ZXJTdGF0ZSA9IHsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJCWR4OiBudW1iZXI7CgkJZHk6IG51bWJlcjsKCQltb3ZlZDogYm9vbGVhbjsKCQlpbml0aWFsaXplZDogYm9vbGVhbjsKCX07CgoJdHlwZSBDYW52YXNNZXRyaWNzID0gewoJCXdpZHRoOiBudW1iZXI7CgkJaGVpZ2h0OiBudW1iZXI7Cgl9OwoKCXR5cGUgRG91YmxlRkJPID0gewoJCXJlYWQ6IFJlbmRlclRhcmdldDsKCQl3cml0ZTogUmVuZGVyVGFyZ2V0OwoJCXN3YXA6ICgpID0+IHZvaWQ7Cgl9OwoKCWxldCB7CgkJYmFzZUltYWdlLAoJCXJldmVhbEltYWdlLAoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJCWJsZW5kU29mdG5lc3MgPSAwLjIyLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHNldEJhc2VTb3VyY2UgPSAkc3RhdGU8KHNvdXJjZTogc3RyaW5nKSA9PiB2b2lkPigpOwoJbGV0IHNldFJldmVhbFNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CgoJY29uc3QgcG9pbnRlclN0YXRlID0gJHN0YXRlPFBvaW50ZXJTdGF0ZT4oewoJCXg6IDAsCgkJeTogMCwKCQlkeDogMCwKCQlkeTogMCwKCQltb3ZlZDogZmFsc2UsCgkJaW5pdGlhbGl6ZWQ6IGZhbHNlLAoJfSk7Cgljb25zdCBjYW52YXNNZXRyaWNzID0gJHN0YXRlPENhbnZhc01ldHJpY3M+KHsKCQl3aWR0aDogMSwKCQloZWlnaHQ6IDEsCgl9KTsKCgljb25zdCBwb2ludGVyVXYgPSBuZXcgVmVjMigpOwoJY29uc3QgYmFzZVRleHR1cmVTaXplID0gbmV3IFZlYzIoMSwgMSk7Cgljb25zdCByZXZlYWxUZXh0dXJlU2l6ZSA9IG5ldyBWZWMyKDEsIDEpOwoKCWNvbnN0IHBvaW50ZXJGb3JjZUNsYW1wID0gNDUwOwoJY29uc3QgcG9pbnRlckZvcmNlSW5pdGlhbExlcnAgPSAwLjI7Cgljb25zdCBwb2ludGVyRm9yY2VMZXJwID0gMC41NTsKCgljb25zdCB1cGRhdGVQb2ludGVyUG9zaXRpb24gPSAoCgkJcHg6IG51bWJlciwKCQlweTogbnVtYmVyLAoJCXdpZHRoOiBudW1iZXIsCgkJaGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQl1cGRhdGVGbHVpZFBvaW50ZXJTdGF0ZSh7CgkJCXN0YXRlOiBwb2ludGVyU3RhdGUsCgkJCXV2OiBwb2ludGVyVXYsCgkJCXg6IHB4LAoJCQl5OiBweSwKCQkJd2lkdGgsCgkJCWhlaWdodCwKCQkJZm9yY2VDbGFtcDogcG9pbnRlckZvcmNlQ2xhbXAsCgkJCWluaXRpYWxMZXJwOiBwb2ludGVyRm9yY2VJbml0aWFsTGVycCwKCQkJbGVycDogcG9pbnRlckZvcmNlTGVycCwKCQl9KTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gdmVjMiB1VGV4ZWw7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZVdiA9IHV2OwoJCQl2TCA9IHZVdiAtIHZlYzIodVRleGVsLngsIDAuKTsKCQkJdlIgPSB2VXYgKyB2ZWMyKHVUZXhlbC54LCAwLik7CgkJCXZUID0gdlV2ICsgdmVjMigwLiwgdVRleGVsLnkpOwoJCQl2QiA9IHZVdiAtIHZlYzIoMC4sIHVUZXhlbC55KTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBhZHZlY3Rpb25TaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVZlbG9jaXR5OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKCQl1bmlmb3JtIHZlYzIgdVRleGVsOwoJCXVuaWZvcm0gZmxvYXQgdUR0OwoJCXVuaWZvcm0gZmxvYXQgdURpc3NpcGF0aW9uOwoKCQl2ZWM0IGJpbGVycCAoc2FtcGxlcjJEIHNhbSwgdmVjMiB1diwgdmVjMiB0c2l6ZSkgewoJCQl2ZWMyIHN0ID0gdXYgLyB0c2l6ZSAtIDAuNTsKCQkJdmVjMiBpdXYgPSBmbG9vcihzdCk7CgkJCXZlYzIgZnV2ID0gZnJhY3Qoc3QpOwoJCQl2ZWM0IGEgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGIgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGMgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDEuNSkpICogdHNpemUpOwoJCQl2ZWM0IGQgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDEuNSkpICogdHNpemUpOwoJCQlyZXR1cm4gbWl4KG1peChhLCBiLCBmdXYueCksIG1peChjLCBkLCBmdXYueCksIGZ1di55KTsKCQl9CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgY29vcmQgPSB2VXYgLSB1RHQgKiBiaWxlcnAodVZlbG9jaXR5LCB2VXYsIHVUZXhlbCkueHkgKiB1VGV4ZWw7CgkJCWdsX0ZyYWdDb2xvciA9IHVEaXNzaXBhdGlvbiAqIGJpbGVycCh1SW5wdXQsIGNvb3JkLCB1VGV4ZWwpOwoJCQlnbF9GcmFnQ29sb3IuYSA9IDEuOwoJCX0KCWA7CgoJY29uc3QgZGl2ZXJnZW5jZVNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2VCkueTsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZCKS55OwoJCQlmbG9hdCBkaXYgPSAuNiAqIChSIC0gTCArIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXYsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgcHJlc3N1cmVTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1RGl2ZXJnZW5jZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQlmbG9hdCBkaXZlcmdlbmNlID0gdGV4dHVyZTJEKHVEaXZlcmdlbmNlLCB2VXYpLng7CgkJCWZsb2F0IHByZXNzdXJlID0gKEwgKyBSICsgQiArIFQgLSBkaXZlcmdlbmNlKSAqIDAuMjU7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQocHJlc3N1cmUsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzIgdkw7CgkJdmFyeWluZyB2ZWMyIHZSOwoJCXZhcnlpbmcgdmVjMiB2VDsKCQl2YXJ5aW5nIHZlYzIgdkI7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVByZXNzdXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQl2ZWMyIHZlbG9jaXR5ID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlV2KS54eTsKCQkJdmVsb2NpdHkueHkgLT0gdmVjMihSIC0gTCwgVCAtIEIpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlbG9jaXR5LCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3Qgc3BsYXRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUlucHV0OwoJCXVuaWZvcm0gZmxvYXQgdVJhdGlvOwoJCXVuaWZvcm0gdmVjMyB1UG9pbnRWYWx1ZTsKCQl1bmlmb3JtIHZlYzIgdVBvaW50OwoJCXVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBwID0gdlV2IC0gdVBvaW50Lnh5OwoJCQlwLnggKj0gdVJhdGlvOwoJCQl2ZWMzIHNwbGF0ID0gcG93KDIuLCAtZG90KHAsIHApIC8gdVBvaW50U2l6ZSkgKiB1UG9pbnRWYWx1ZTsKCQkJdmVjMyBiYXNlID0gdGV4dHVyZTJEKHVJbnB1dCwgdlV2KS54eXo7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZSArIHNwbGF0LCAxLik7CgkJfQoJYDsKCgljb25zdCBvdXRwdXRWZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBvdXRwdXRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdU1hc2tUZXh0dXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVCYXNlVGV4dHVyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1UmV2ZWFsVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVCYXNlVGV4dHVyZVNpemU7CgkJdW5pZm9ybSB2ZWMyIHVSZXZlYWxUZXh0dXJlU2l6ZTsKCQl1bmlmb3JtIHZlYzIgdU1hc2tUZXhlbDsKCQl1bmlmb3JtIGZsb2F0IHVCbGVuZFNvZnRuZXNzOwoKCQl2ZWMyIGdldENvdmVyVVYodmVjMiB1diwgdmVjMiB0ZXh0dXJlU2l6ZSkgewoJCQl2ZWMyIHNhZmVUZXh0dXJlID0gbWF4KHRleHR1cmVTaXplLCB2ZWMyKDEuMCkpOwoJCQl2ZWMyIHMgPSB1UmVzb2x1dGlvbiAvIHNhZmVUZXh0dXJlOwoJCQlmbG9hdCBzY2FsZSA9IG1heChzLngsIHMueSk7CgkJCXZlYzIgc2NhbGVkU2l6ZSA9IHNhZmVUZXh0dXJlICogc2NhbGU7CgkJCXZlYzIgb2Zmc2V0ID0gKHVSZXNvbHV0aW9uIC0gc2NhbGVkU2l6ZSkgKiAwLjU7CgkJCXJldHVybiAodXYgKiB1UmVzb2x1dGlvbiAtIG9mZnNldCkgLyBzY2FsZWRTaXplOwoJCX0KCgkJZmxvYXQgc2FtcGxlTWFzayh2ZWMyIHV2KSB7CgkJCXZlYzMgbWFza0RhdGEgPSB0ZXh0dXJlMkQodU1hc2tUZXh0dXJlLCB1dikucmdiOwoJCQlyZXR1cm4gY2xhbXAobWF4KG1hc2tEYXRhLnIsIG1heChtYXNrRGF0YS5nLCBtYXNrRGF0YS5iKSksIDAuMCwgMS4wKTsKCQl9CgoJCWZsb2F0IGdldFNtb290aE1hc2sodmVjMiB1dikgewoJCQl2ZWMyIHQgPSB1TWFza1RleGVsOwoJCQlmbG9hdCBtID0gMC4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKC10LngsIC10LnkpKSAqIDEuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigwLjAsIC10LnkpKSAqIDIuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMih0LngsIC10LnkpKSAqIDEuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMigtdC54LCAwLjApKSAqIDIuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2KSAqIDQuMDsKCQkJbSArPSBzYW1wbGVNYXNrKHV2ICsgdmVjMih0LngsIDAuMCkpICogMi4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKC10LngsIHQueSkpICogMS4wOwoJCQltICs9IHNhbXBsZU1hc2sodXYgKyB2ZWMyKDAuMCwgdC55KSkgKiAyLjA7CgkJCW0gKz0gc2FtcGxlTWFzayh1diArIHZlYzIodC54LCB0LnkpKSAqIDEuMDsKCQkJcmV0dXJuIG0gLyAxNi4wOwoJCX0KCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBiYXNlVXYgPSBnZXRDb3ZlclVWKHZVdiwgdUJhc2VUZXh0dXJlU2l6ZSk7CgkJCXZlYzIgcmV2ZWFsVXYgPSBnZXRDb3ZlclVWKHZVdiwgdVJldmVhbFRleHR1cmVTaXplKTsKCgkJCXZlYzMgYmFzZUNvbG9yID0gdGV4dHVyZTJEKHVCYXNlVGV4dHVyZSwgYmFzZVV2KS5yZ2I7CgkJCXZlYzMgcmV2ZWFsQ29sb3IgPSB0ZXh0dXJlMkQodVJldmVhbFRleHR1cmUsIHJldmVhbFV2KS5yZ2I7CgoJCQlmbG9hdCByYXdNYXNrID0gZ2V0U21vb3RoTWFzayh2VXYpOwoJCQlmbG9hdCBzb2Z0bmVzcyA9IGNsYW1wKHVCbGVuZFNvZnRuZXNzLCAwLjAxLCAwLjQ5KTsKCQkJZmxvYXQgbWFzayA9IHNtb290aHN0ZXAoMC41IC0gc29mdG5lc3MsIDAuNSArIHNvZnRuZXNzLCByYXdNYXNrKTsKCgkJCXZlYzMgY29sb3IgPSBtaXgoYmFzZUNvbG9yLCByZXZlYWxDb2xvciwgbWFzayk7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIDEuMCk7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEJhc2VTb3VyY2UpIHJldHVybjsKCQlzZXRCYXNlU291cmNlKGJhc2VJbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldFJldmVhbFNvdXJjZSkgcmV0dXJuOwoJCXNldFJldmVhbFNvdXJjZShyZXZlYWxJbWFnZSk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBiYXNlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCWltYWdlOiBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSksCgkJCXdpZHRoOiAxLAoJCQloZWlnaHQ6IDEsCgkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCW1hZ0ZpbHRlcjogZ2wuTElORUFSLAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogdHJ1ZSwKCQkJZmxpcFk6IHRydWUsCgkJfSk7CgoJCWNvbnN0IHJldmVhbFRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDI1NV0pLAoJCQl3aWR0aDogMSwKCQkJaGVpZ2h0OiAxLAoJCQlmb3JtYXQ6IGdsLlJHQkEsCgkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQltYWdGaWx0ZXI6IGdsLkxJTkVBUiwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IHRydWUsCgkJCWZsaXBZOiB0cnVlLAoJCX0pOwoKCQlsZXQgYmFzZVRva2VuID0gMDsKCQljb25zdCBsb2FkQmFzZUltYWdlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWJhc2VUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGJhc2VUb2tlbjsKCQkJY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKCQkJaW1hZ2UuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1hZ2UuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWFnZS5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IGJhc2VUb2tlbikgcmV0dXJuOwoJCQkJYmFzZVRleHR1cmUuaW1hZ2UgPSBpbWFnZTsKCQkJCWJhc2VUZXh0dXJlU2l6ZS5zZXQoCgkJCQkJaW1hZ2UubmF0dXJhbFdpZHRoIHx8IGltYWdlLndpZHRoIHx8IDEsCgkJCQkJaW1hZ2UubmF0dXJhbEhlaWdodCB8fCBpbWFnZS5oZWlnaHQgfHwgMSwKCQkJCSk7CgkJCX07CgkJCWltYWdlLnNyYyA9IHNvdXJjZTsKCQl9OwoKCQlsZXQgcmV2ZWFsVG9rZW4gPSAwOwoJCWNvbnN0IGxvYWRSZXZlYWxJbWFnZSA9IChzb3VyY2U6IHN0cmluZykgPT4gewoJCQlyZXZlYWxUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IHJldmVhbFRva2VuOwoJCQljb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpOwoJCQlpbWFnZS5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWFnZS5kZWNvZGluZyA9ICJhc3luYyI7CgkJCWltYWdlLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gcmV2ZWFsVG9rZW4pIHJldHVybjsKCQkJCXJldmVhbFRleHR1cmUuaW1hZ2UgPSBpbWFnZTsKCQkJCXJldmVhbFRleHR1cmVTaXplLnNldCgKCQkJCQlpbWFnZS5uYXR1cmFsV2lkdGggfHwgaW1hZ2Uud2lkdGggfHwgMSwKCQkJCQlpbWFnZS5uYXR1cmFsSGVpZ2h0IHx8IGltYWdlLmhlaWdodCB8fCAxLAoJCQkJKTsKCQkJfTsKCQkJaW1hZ2Uuc3JjID0gc291cmNlOwoJCX07CgoJCXNldEJhc2VTb3VyY2UgPSBsb2FkQmFzZUltYWdlOwoJCXNldFJldmVhbFNvdXJjZSA9IGxvYWRSZXZlYWxJbWFnZTsKCgkJY29uc3QgaGFsZkZsb2F0RXh0ID0gZ2wucmVuZGVyZXIuZXh0ZW5zaW9uc1siT0VTX3RleHR1cmVfaGFsZl9mbG9hdCJdIGFzCgkJCXwgeyBIQUxGX0ZMT0FUX09FUzogbnVtYmVyIH0KCQkJfCB1bmRlZmluZWQ7CgkJY29uc3QgdGV4dHVyZVR5cGUgPSBnbC5yZW5kZXJlci5pc1dlYmdsMgoJCQk/IChnbCBhcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KS5IQUxGX0ZMT0FUCgkJCTogKGhhbGZGbG9hdEV4dD8uSEFMRl9GTE9BVF9PRVMgPz8gZ2wuRkxPQVQpOwoJCWNvbnN0IGludGVybmFsRm9ybWF0ID0gZ2wucmVuZGVyZXIuaXNXZWJnbDIKCQkJPyB0ZXh0dXJlVHlwZSA9PT0gZ2wuRkxPQVQKCQkJCT8gKGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpLlJHQkEzMkYKCQkJCTogKGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpLlJHQkExNkYKCQkJOiBnbC5SR0JBOwoKCQljb25zdCBjcmVhdGVGQk8gPSAodzogbnVtYmVyLCBoOiBudW1iZXIpID0+CgkJCW5ldyBSZW5kZXJUYXJnZXQoZ2wsIHsKCQkJCXdpZHRoOiB3LAoJCQkJaGVpZ2h0OiBoLAoJCQkJdHlwZTogdGV4dHVyZVR5cGUsCgkJCQlmb3JtYXQ6IGdsLlJHQkEsCgkJCQlpbnRlcm5hbEZvcm1hdCwKCQkJCW1pbkZpbHRlcjogZ2wuTkVBUkVTVCwKCQkJCW1hZ0ZpbHRlcjogZ2wuTkVBUkVTVCwKCQkJCWRlcHRoOiBmYWxzZSwKCQkJCXN0ZW5jaWw6IGZhbHNlLAoJCQl9KTsKCgkJY29uc3QgY3JlYXRlRG91YmxlRkJPID0gKHc6IG51bWJlciwgaDogbnVtYmVyKTogRG91YmxlRkJPID0+IHsKCQkJY29uc3QgZG91YmxlRkJPOiBEb3VibGVGQk8gPSB7CgkJCQlyZWFkOiBjcmVhdGVGQk8odywgaCksCgkJCQl3cml0ZTogY3JlYXRlRkJPKHcsIGgpLAoJCQkJc3dhcDogKCkgPT4gewoJCQkJCWNvbnN0IHRlbXAgPSBkb3VibGVGQk8ucmVhZDsKCQkJCQlkb3VibGVGQk8ucmVhZCA9IGRvdWJsZUZCTy53cml0ZTsKCQkJCQlkb3VibGVGQk8ud3JpdGUgPSB0ZW1wOwoJCQkJfSwKCQkJfTsKCQkJcmV0dXJuIGRvdWJsZUZCTzsKCQl9OwoKCQljb25zdCBkZW5zaXR5ID0gY3JlYXRlRG91YmxlRkJPKDEyOCwgMTI4KTsKCQljb25zdCB2ZWxvY2l0eSA9IGNyZWF0ZURvdWJsZUZCTygxMjgsIDEyOCk7CgkJY29uc3QgcHJlc3N1cmUgPSBjcmVhdGVEb3VibGVGQk8oMTI4LCAxMjgpOwoJCWNvbnN0IGRpdmVyZ2VuY2UgPSBjcmVhdGVGQk8oMTI4LCAxMjgpOwoKCQljb25zdCB0ZXhlbCA9IG5ldyBWZWMyKDEgLyAxMjgsIDEgLyAxMjgpOwoJCWNvbnN0IGFkdmVjdGlvblVuaWZvcm1zID0gewoJCQl1VmVsb2NpdHk6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1SW5wdXQ6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJCXVEdDogeyB2YWx1ZTogMSAvIDYwIH0sCgkJCXVEaXNzaXBhdGlvbjogeyB2YWx1ZTogdmVsb2NpdHlEaXNzaXBhdGlvbiB9LAoJCX07CgkJY29uc3QgZGl2ZXJnZW5jZVVuaWZvcm1zID0gewoJCQl1VmVsb2NpdHk6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJfTsKCQljb25zdCBwcmVzc3VyZVVuaWZvcm1zID0gewoJCQl1UHJlc3N1cmU6IHsgdmFsdWU6IHByZXNzdXJlLnJlYWQudGV4dHVyZSB9LAoJCQl1RGl2ZXJnZW5jZTogeyB2YWx1ZTogZGl2ZXJnZW5jZS50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQl9OwoJCWNvbnN0IGdyYWRpZW50U3VidHJhY3RVbmlmb3JtcyA9IHsKCQkJdVByZXNzdXJlOiB7IHZhbHVlOiBwcmVzc3VyZS5yZWFkLnRleHR1cmUgfSwKCQkJdVZlbG9jaXR5OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCX07CgkJY29uc3Qgc3BsYXRVbmlmb3JtcyA9IHsKCQkJdUlucHV0OiB7IHZhbHVlOiB2ZWxvY2l0eS5yZWFkLnRleHR1cmUgfSwKCQkJdVJhdGlvOiB7IHZhbHVlOiAxIH0sCgkJCXVQb2ludFZhbHVlOiB7IHZhbHVlOiBuZXcgVmVjMygpIH0sCgkJCXVQb2ludDogeyB2YWx1ZTogcG9pbnRlclV2IH0sCgkJCXVQb2ludFNpemU6IHsgdmFsdWU6IHBvaW50ZXJTaXplIH0sCgkJfTsKCQljb25zdCBvdXRwdXRVbmlmb3JtcyA9IHsKCQkJdU1hc2tUZXh0dXJlOiB7IHZhbHVlOiBkZW5zaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1QmFzZVRleHR1cmU6IHsgdmFsdWU6IGJhc2VUZXh0dXJlIH0sCgkJCXVSZXZlYWxUZXh0dXJlOiB7IHZhbHVlOiByZXZlYWxUZXh0dXJlIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1QmFzZVRleHR1cmVTaXplOiB7IHZhbHVlOiBiYXNlVGV4dHVyZVNpemUgfSwKCQkJdVJldmVhbFRleHR1cmVTaXplOiB7IHZhbHVlOiByZXZlYWxUZXh0dXJlU2l6ZSB9LAoJCQl1TWFza1RleGVsOiB7IHZhbHVlOiBuZXcgVmVjMigxIC8gMTI4LCAxIC8gMTI4KSB9LAoJCQl1QmxlbmRTb2Z0bmVzczogeyB2YWx1ZTogYmxlbmRTb2Z0bmVzcyB9LAoJCX07CgoJCWNvbnN0IGFkdmVjdGlvblByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGFkdmVjdGlvblNoYWRlciwKCQkJdW5pZm9ybXM6IGFkdmVjdGlvblVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBkaXZlcmdlbmNlUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZGl2ZXJnZW5jZVNoYWRlciwKCQkJdW5pZm9ybXM6IGRpdmVyZ2VuY2VVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3QgcHJlc3N1cmVQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBwcmVzc3VyZVNoYWRlciwKCQkJdW5pZm9ybXM6IHByZXNzdXJlVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IGdyYWRpZW50U3VidHJhY3RQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBncmFkaWVudFN1YnRyYWN0U2hhZGVyLAoJCQl1bmlmb3JtczogZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBzcGxhdFByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IHNwbGF0U2hhZGVyLAoJCQl1bmlmb3Jtczogc3BsYXRVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3Qgb3V0cHV0UHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogb3V0cHV0VmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogb3V0cHV0U2hhZGVyLAoJCQl1bmlmb3Jtczogb3V0cHV0VW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCB0cmlhbmdsZSA9IG5ldyBUcmlhbmdsZShnbCk7CgkJY29uc3Qgc2ltTWVzaCA9IG5ldyBNZXNoKGdsLCB7CgkJCWdlb21ldHJ5OiB0cmlhbmdsZSwKCQkJcHJvZ3JhbTogYWR2ZWN0aW9uUHJvZ3JhbSwKCQl9KTsKCQljb25zdCBvdXRwdXRNZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJZ2VvbWV0cnk6IHRyaWFuZ2xlLAoJCQlwcm9ncmFtOiBvdXRwdXRQcm9ncmFtLAoJCX0pOwoKCQljb25zdCByZW5kZXJQYXNzID0gKHByb2dyYW06IFByb2dyYW0sIHRhcmdldDogUmVuZGVyVGFyZ2V0KSA9PiB7CgkJCXNpbU1lc2gucHJvZ3JhbSA9IHByb2dyYW07CgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lOiBzaW1NZXNoLCB0YXJnZXQsIGNsZWFyOiB0cnVlIH0pOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gewoJCQljb25zdCByZWN0ID0gdGFyZ2V0Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB4ID0gZS5jbGllbnRYIC0gcmVjdC5sZWZ0OwoJCQljb25zdCB5ID0gZS5jbGllbnRZIC0gcmVjdC50b3A7CgkJCXVwZGF0ZVBvaW50ZXJQb3NpdGlvbih4LCB5LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CgkJfTsKCgkJY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gKGU6IFRvdWNoRXZlbnQpID0+IHsKCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQljb25zdCB0b3VjaCA9IGUudG91Y2hlc1swXTsKCQkJaWYgKCF0b3VjaCkgcmV0dXJuOwoJCQljb25zdCByZWN0ID0gdGFyZ2V0Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB4ID0gdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdDsKCQkJY29uc3QgeSA9IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcDsKCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHgsIHksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKCQl9OwoKCQl0YXJnZXRDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVQb2ludGVyTW92ZSk7CgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGhhbmRsZVRvdWNoTW92ZSwgewoJCQlwYXNzaXZlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgcmVzaXplU2ltdWxhdGlvbiA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJY2FudmFzTWV0cmljcy53aWR0aCA9IHdpZHRoOwoJCQljYW52YXNNZXRyaWNzLmhlaWdodCA9IGhlaWdodDsKCgkJCWNvbnN0IHNpbVJlc1ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoICogMC41KSk7CgkJCWNvbnN0IHNpbVJlc1kgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAqIDAuNSkpOwoKCQkJZGVuc2l0eS5yZWFkLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCWRlbnNpdHkud3JpdGUuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJdmVsb2NpdHkucmVhZC5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQl2ZWxvY2l0eS53cml0ZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQlwcmVzc3VyZS5yZWFkLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXByZXNzdXJlLndyaXRlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCWRpdmVyZ2VuY2Uuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCgkJCWNvbnN0IHRleGVsWCA9IDEgLyBzaW1SZXNYOwoJCQljb25zdCB0ZXhlbFkgPSAxIC8gc2ltUmVzWTsKCQkJdGV4ZWwuc2V0KHRleGVsWCwgdGV4ZWxZKTsKCgkJCW91dHB1dFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldChnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQpOwoJCQlvdXRwdXRVbmlmb3Jtcy51TWFza1RleGVsLnZhbHVlLnNldCh0ZXhlbFgsIHRleGVsWSk7CgoJCQlpZiAoY2FudmFzTWV0cmljcy53aWR0aCA+IDAgJiYgY2FudmFzTWV0cmljcy5oZWlnaHQgPiAwKSB7CgkJCQlwb2ludGVyVXYuc2V0KAoJCQkJCXBvaW50ZXJTdGF0ZS54IC8gY2FudmFzTWV0cmljcy53aWR0aCwKCQkJCQkxIC0gcG9pbnRlclN0YXRlLnkgLyBjYW52YXNNZXRyaWNzLmhlaWdodCwKCQkJCSk7CgkJCX0KCQl9OwoKCQlyZXNpemVTaW11bGF0aW9uKCk7CgkJbG9hZEJhc2VJbWFnZShiYXNlSW1hZ2UpOwoJCWxvYWRSZXZlYWxJbWFnZShyZXZlYWxJbWFnZSk7CgoJCWNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZVNpbXVsYXRpb24pOwoJCXJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpIHsKCQkJcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgkJfQoKCQljb25zdCBkaXNwb3NlVGFyZ2V0ID0gKHRhcmdldDogUmVuZGVyVGFyZ2V0KSA9PiB7CgkJCXRhcmdldC50ZXh0dXJlcy5mb3JFYWNoKCh0ZXh0dXJlKSA9PiB7CgkJCQlpZiAodGV4dHVyZS50ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUudGV4dHVyZSk7CgkJCX0pOwoJCQlpZiAodGFyZ2V0LmRlcHRoVGV4dHVyZT8udGV4dHVyZSkgewoJCQkJZ2wuZGVsZXRlVGV4dHVyZSh0YXJnZXQuZGVwdGhUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJCWlmICh0YXJnZXQuZGVwdGhCdWZmZXIpIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0YXJnZXQuZGVwdGhCdWZmZXIpOwoJCQlpZiAodGFyZ2V0LnN0ZW5jaWxCdWZmZXIpIGdsLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0YXJnZXQuc3RlbmNpbEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuZGVwdGhTdGVuY2lsQnVmZmVyKSB7CgkJCQlnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoU3RlbmNpbEJ1ZmZlcik7CgkJCX0KCQkJaWYgKHRhcmdldC5idWZmZXIpIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKHRhcmdldC5idWZmZXIpOwoJCX07CgoJCWxldCByYWYgPSAwOwoJCWNvbnN0IHRpY2sgPSAoKSA9PiB7CgkJCWNvbnN0IGR0ID0gMSAvIDYwOwoJCQljb25zdCB3aWR0aCA9IGNhbnZhc01ldHJpY3Mud2lkdGggfHwgdGFyZ2V0Q2FudmFzLmNsaWVudFdpZHRoIHx8IDE7CgkJCWNvbnN0IGhlaWdodCA9IGNhbnZhc01ldHJpY3MuaGVpZ2h0IHx8IHRhcmdldENhbnZhcy5jbGllbnRIZWlnaHQgfHwgMTsKCQkJY29uc3QgYXNwZWN0ID0gaGVpZ2h0ID4gMCA/IHdpZHRoIC8gaGVpZ2h0IDogMTsKCgkJCWlmIChwb2ludGVyU3RhdGUubW92ZWQpIHsKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQkJc3BsYXRVbmlmb3Jtcy51UmF0aW8udmFsdWUgPSBhc3BlY3Q7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludC52YWx1ZS5zZXQocG9pbnRlclV2LngsIHBvaW50ZXJVdi55KTsKCQkJCXNwbGF0VW5pZm9ybXMudVBvaW50VmFsdWUudmFsdWUuc2V0KAoJCQkJCXBvaW50ZXJTdGF0ZS5keCwKCQkJCQktcG9pbnRlclN0YXRlLmR5LAoJCQkJCTEsCgkJCQkpOwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnRTaXplLnZhbHVlID0gcG9pbnRlclNpemU7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gZGVuc2l0eS5yZWFkLnRleHR1cmU7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludFZhbHVlLnZhbHVlLnNldCgxLCAxLCAxKTsKCQkJCXJlbmRlclBhc3Moc3BsYXRQcm9ncmFtLCBkZW5zaXR5LndyaXRlKTsKCQkJCWRlbnNpdHkuc3dhcCgpOwoKCQkJCXBvaW50ZXJTdGF0ZS5tb3ZlZCA9IGZhbHNlOwoJCQl9CgoJCQlkaXZlcmdlbmNlVW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlyZW5kZXJQYXNzKGRpdmVyZ2VuY2VQcm9ncmFtLCBkaXZlcmdlbmNlKTsKCgkJCXByZXNzdXJlVW5pZm9ybXMudURpdmVyZ2VuY2UudmFsdWUgPSBkaXZlcmdlbmNlLnRleHR1cmU7CgkJCWNvbnN0IGl0ZXJhdGlvbnMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHByZXNzdXJlSXRlcmF0aW9ucykpOwoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgewoJCQkJcHJlc3N1cmVVbmlmb3Jtcy51UHJlc3N1cmUudmFsdWUgPSBwcmVzc3VyZS5yZWFkLnRleHR1cmU7CgkJCQlyZW5kZXJQYXNzKHByZXNzdXJlUHJvZ3JhbSwgcHJlc3N1cmUud3JpdGUpOwoJCQkJcHJlc3N1cmUuc3dhcCgpOwoJCQl9CgoJCQlncmFkaWVudFN1YnRyYWN0VW5pZm9ybXMudVByZXNzdXJlLnZhbHVlID0gcHJlc3N1cmUucmVhZC50ZXh0dXJlOwoJCQlncmFkaWVudFN1YnRyYWN0VW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlyZW5kZXJQYXNzKGdyYWRpZW50U3VidHJhY3RQcm9ncmFtLCB2ZWxvY2l0eS53cml0ZSk7CgkJCXZlbG9jaXR5LnN3YXAoKTsKCgkJCWFkdmVjdGlvblVuaWZvcm1zLnVEdC52YWx1ZSA9IGR0OwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVJbnB1dC52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudURpc3NpcGF0aW9uLnZhbHVlID0gdmVsb2NpdHlEaXNzaXBhdGlvbjsKCQkJcmVuZGVyUGFzcyhhZHZlY3Rpb25Qcm9ncmFtLCB2ZWxvY2l0eS53cml0ZSk7CgkJCXZlbG9jaXR5LnN3YXAoKTsKCgkJCWFkdmVjdGlvblVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUlucHV0LnZhbHVlID0gZGVuc2l0eS5yZWFkLnRleHR1cmU7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVEaXNzaXBhdGlvbi52YWx1ZSA9IGRpc3NpcGF0aW9uOwoJCQlyZW5kZXJQYXNzKGFkdmVjdGlvblByb2dyYW0sIGRlbnNpdHkud3JpdGUpOwoJCQlkZW5zaXR5LnN3YXAoKTsKCgkJCW91dHB1dFVuaWZvcm1zLnVNYXNrVGV4dHVyZS52YWx1ZSA9IGRlbnNpdHkucmVhZC50ZXh0dXJlOwoJCQlvdXRwdXRVbmlmb3Jtcy51QmxlbmRTb2Z0bmVzcy52YWx1ZSA9IGJsZW5kU29mdG5lc3M7CgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lOiBvdXRwdXRNZXNoLCBjbGVhcjogdHJ1ZSB9KTsKCgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCXJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgaGFuZGxlVG91Y2hNb3ZlKTsKCQkJc2V0QmFzZVNvdXJjZSA9IHVuZGVmaW5lZDsKCQkJc2V0UmV2ZWFsU291cmNlID0gdW5kZWZpbmVkOwoKCQkJZGlzcG9zZVRhcmdldChkZW5zaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KGRlbnNpdHkud3JpdGUpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LndyaXRlKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS53cml0ZSk7CgkJCWRpc3Bvc2VUYXJnZXQoZGl2ZXJnZW5jZSk7CgoJCQlpZiAoYmFzZVRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZShiYXNlVGV4dHVyZS50ZXh0dXJlKTsKCQkJaWYgKHJldmVhbFRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZShyZXZlYWxUZXh0dXJlLnRleHR1cmUpOwoKCQkJYWR2ZWN0aW9uUHJvZ3JhbS5yZW1vdmUoKTsKCQkJZGl2ZXJnZW5jZVByb2dyYW0ucmVtb3ZlKCk7CgkJCXByZXNzdXJlUHJvZ3JhbS5yZW1vdmUoKTsKCQkJZ3JhZGllbnRTdWJ0cmFjdFByb2dyYW0ucmVtb3ZlKCk7CgkJCXNwbGF0UHJvZ3JhbS5yZW1vdmUoKTsKCQkJb3V0cHV0UHJvZ3JhbS5yZW1vdmUoKTsKCQkJdHJpYW5nbGUucmVtb3ZlKCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "helpers/fluid-pointer.ts": "ZXhwb3J0IGludGVyZmFjZSBGbHVpZFBvaW50ZXJTdGF0ZSB7Cgl4OiBudW1iZXI7Cgl5OiBudW1iZXI7CglkeDogbnVtYmVyOwoJZHk6IG51bWJlcjsKCW1vdmVkOiBib29sZWFuOwoJaW5pdGlhbGl6ZWQ6IGJvb2xlYW47Cn0KCmludGVyZmFjZSBWZWMyTGlrZSB7CglzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiB1bmtub3duOwp9CgppbnRlcmZhY2UgVXBkYXRlRmx1aWRQb2ludGVyT3B0aW9ucyB7CglzdGF0ZTogRmx1aWRQb2ludGVyU3RhdGU7Cgl1djogVmVjMkxpa2U7Cgl4OiBudW1iZXI7Cgl5OiBudW1iZXI7Cgl3aWR0aDogbnVtYmVyOwoJaGVpZ2h0OiBudW1iZXI7Cglmb3JjZUNsYW1wOiBudW1iZXI7Cglpbml0aWFsTGVycDogbnVtYmVyOwoJbGVycDogbnVtYmVyOwoJZm9yY2VTY2FsZT86IG51bWJlcjsKfQoKY29uc3QgY2xhbXAgPSAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PgoJTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7Cgpjb25zdCBtaXggPSAoYTogbnVtYmVyLCBiOiBudW1iZXIsIHQ6IG51bWJlcikgPT4gYSArIChiIC0gYSkgKiB0OwoKZXhwb3J0IGNvbnN0IHVwZGF0ZUZsdWlkUG9pbnRlclN0YXRlID0gKHsKCXN0YXRlLAoJdXYsCgl4LAoJeSwKCXdpZHRoLAoJaGVpZ2h0LAoJZm9yY2VDbGFtcCwKCWluaXRpYWxMZXJwLAoJbGVycCwKCWZvcmNlU2NhbGUgPSA1LAp9OiBVcGRhdGVGbHVpZFBvaW50ZXJPcHRpb25zKTogdm9pZCA9PiB7Cgljb25zdCBwcmV2WCA9IHN0YXRlLng7Cgljb25zdCBwcmV2WSA9IHN0YXRlLnk7Cgljb25zdCB0YXJnZXREeCA9IGNsYW1wKGZvcmNlU2NhbGUgKiAoeCAtIHByZXZYKSwgLWZvcmNlQ2xhbXAsIGZvcmNlQ2xhbXApOwoJY29uc3QgdGFyZ2V0RHkgPSBjbGFtcChmb3JjZVNjYWxlICogKHkgLSBwcmV2WSksIC1mb3JjZUNsYW1wLCBmb3JjZUNsYW1wKTsKCWNvbnN0IGxlcnBGYWN0b3IgPSBzdGF0ZS5pbml0aWFsaXplZCA/IGxlcnAgOiBpbml0aWFsTGVycDsKCglzdGF0ZS5tb3ZlZCA9IHRydWU7CglzdGF0ZS5keCA9IG1peChzdGF0ZS5keCwgdGFyZ2V0RHgsIGxlcnBGYWN0b3IpOwoJc3RhdGUuZHkgPSBtaXgoc3RhdGUuZHksIHRhcmdldER5LCBsZXJwRmFjdG9yKTsKCXN0YXRlLnggPSB4OwoJc3RhdGUueSA9IHk7CglzdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7CgoJaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CgkJdXYuc2V0KHggLyB3aWR0aCwgMSAtIHkgLyBoZWlnaHQpOwoJfQp9Owo=", "components/fluid-simulation/FluidSimulation.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9GbHVpZFNpbXVsYXRpb25TY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSBmbHVpZC4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBTY2VuZVByb3BzWyJkaXNzaXBhdGlvbiJdOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgcG9pbnRlciBpbmZsdWVuY2UuCgkJICogQGRlZmF1bHQgMC4wMDUKCQkgKi8KCQlwb2ludGVyU2l6ZT86IFNjZW5lUHJvcHNbInBvaW50ZXJTaXplIl07CgkJLyoqCgkJICogRmx1aWQgc3BsYXQgY29sb3IuCgkJICogQGRlZmF1bHQgIiNmZjY5MDAiCgkJICovCgkJY29sb3I/OiBTY2VuZVByb3BzWyJjb2xvciJdOwoJCS8qKgoJCSAqIEZsdWlkIHZlbG9jaXR5IGRpc3NpcGF0aW9uLgoJCSAqIEBkZWZhdWx0IDAuOTYKCQkgKi8KCQl2ZWxvY2l0eURpc3NpcGF0aW9uPzogU2NlbmVQcm9wc1sidmVsb2NpdHlEaXNzaXBhdGlvbiJdOwoJCS8qKgoJCSAqIFByZXNzdXJlIGl0ZXJhdGlvbnMuIE1vcmUgaXRlcmF0aW9ucyA9IG1vcmUgYWNjdXJhdGUgYnV0IHNsb3dlci4KCQkgKiBAZGVmYXVsdCAxMAoJCSAqLwoJCXByZXNzdXJlSXRlcmF0aW9ucz86IFNjZW5lUHJvcHNbInByZXNzdXJlSXRlcmF0aW9ucyJdOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCWNvbG9yID0gIiNmZjY5MDAiLAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7ZGlzc2lwYXRpb259CgkJCXtwb2ludGVyU2l6ZX0KCQkJe2NvbG9yfQoJCQl7dmVsb2NpdHlEaXNzaXBhdGlvbn0KCQkJe3ByZXNzdXJlSXRlcmF0aW9uc30KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/fluid-simulation/FluidSimulationScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlclRhcmdldCwKCQlSZW5kZXJlciwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CgoJdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uID0KCQl8IHN0cmluZwoJCXwgbnVtYmVyCgkJfCByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0KCQl8IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogRGlzc2lwYXRpb24gZmFjdG9yIGZvciB0aGUgZmx1aWQuCgkJICogQGRlZmF1bHQgMC45NgoJCSAqLwoJCWRpc3NpcGF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgcG9pbnRlciBpbmZsdWVuY2UuCgkJICogQGRlZmF1bHQgMC4wMDUKCQkgKi8KCQlwb2ludGVyU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBGbHVpZCBzcGxhdCBjb2xvci4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQljb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogRmx1aWQgdmVsb2NpdHkgZGlzc2lwYXRpb24uCgkJICogQGRlZmF1bHQgMC45NgoJCSAqLwoJCXZlbG9jaXR5RGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUHJlc3N1cmUgaXRlcmF0aW9ucy4gTW9yZSBpdGVyYXRpb25zID0gbW9yZSBhY2N1cmF0ZSBidXQgc2xvd2VyLgoJCSAqIEBkZWZhdWx0IDEwCgkJICovCgkJcHJlc3N1cmVJdGVyYXRpb25zPzogbnVtYmVyOwoJfQoKCXR5cGUgUG9pbnRlclN0YXRlID0gewoJCXg6IG51bWJlcjsKCQl5OiBudW1iZXI7CgkJZHg6IG51bWJlcjsKCQlkeTogbnVtYmVyOwoJCW1vdmVkOiBib29sZWFuOwoJCWluaXRpYWxpemVkOiBib29sZWFuOwoJfTsKCgl0eXBlIFByZXZpZXdTdGF0ZSA9IHsKCQllbmFibGVkOiBib29sZWFuOwoJCXRpbWVNczogbnVtYmVyOwoJfTsKCgl0eXBlIENhbnZhc01ldHJpY3MgPSB7CgkJd2lkdGg6IG51bWJlcjsKCQloZWlnaHQ6IG51bWJlcjsKCX07CgoJdHlwZSBEb3VibGVGQk8gPSB7CgkJcmVhZDogUmVuZGVyVGFyZ2V0OwoJCXdyaXRlOiBSZW5kZXJUYXJnZXQ7CgkJc3dhcDogKCkgPT4gdm9pZDsKCX07CgoJbGV0IHsKCQlkaXNzaXBhdGlvbiA9IDAuOTYsCgkJcG9pbnRlclNpemUgPSAwLjAwNSwKCQljb2xvciA9ICIjZmY2OTAwIiwKCQl2ZWxvY2l0eURpc3NpcGF0aW9uID0gMC45NiwKCQlwcmVzc3VyZUl0ZXJhdGlvbnMgPSAxMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCgljb25zdCBwb2ludGVyU3RhdGUgPSAkc3RhdGU8UG9pbnRlclN0YXRlPih7CgkJeDogMCwKCQl5OiAwLAoJCWR4OiAwLAoJCWR5OiAwLAoJCW1vdmVkOiBmYWxzZSwKCQlpbml0aWFsaXplZDogZmFsc2UsCgl9KTsKCWNvbnN0IHByZXZpZXdTdGF0ZSA9ICRzdGF0ZTxQcmV2aWV3U3RhdGU+KHsKCQllbmFibGVkOiB0cnVlLAoJCXRpbWVNczogMCwKCX0pOwoJY29uc3QgY2FudmFzTWV0cmljcyA9ICRzdGF0ZTxDYW52YXNNZXRyaWNzPih7CgkJd2lkdGg6IDEsCgkJaGVpZ2h0OiAxLAoJfSk7CgoJY29uc3QgcG9pbnRlclV2ID0gbmV3IFZlYzIoKTsKCWNvbnN0IHNwbGF0Q29sb3IgPSBuZXcgVmVjMygpOwoKCWNvbnN0IHBvaW50ZXJGb3JjZUNsYW1wID0gNDUwOwoJY29uc3QgcG9pbnRlckZvcmNlSW5pdGlhbExlcnAgPSAwLjI7Cgljb25zdCBwb2ludGVyRm9yY2VMZXJwID0gMC41NTsKCgljb25zdCBjbGFtcCA9ICh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+CgkJTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7Cgljb25zdCBsZXJwID0gKGE6IG51bWJlciwgYjogbnVtYmVyLCB0OiBudW1iZXIpID0+IGEgKyAoYiAtIGEpICogdDsKCWNvbnN0IGNsYW1wMDEgPSAodmFsdWU6IG51bWJlcikgPT4gY2xhbXAodmFsdWUsIDAsIDEpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbCgkJCWNsYW1wMDEocGFydHNbMF0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMV0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMl0gLyBzY2FsZSksCgkJXTsKCX07CgoJY29uc3Qgbm9ybWFsaXplVHJpcGxldCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChyLCBnLCBiKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbY2xhbXAwMShyIC8gc2NhbGUpLCBjbGFtcDAxKGcgLyBzY2FsZSksIGNsYW1wMDEoYiAvIHNjYWxlKV07Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHsKCQkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJCXJldHVybiBbCgkJCQkoKGludCA+PiAxNikgJiAyNTUpIC8gMjU1LAoJCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkJKGludCAmIDI1NSkgLyAyNTUsCgkJCV07CgkJfQoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IHRyaW1tZWQuc3RhcnRzV2l0aCgiIyIpCgkJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJCTogcGFyc2VDc3NDb2xvcih0cmltbWVkKTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCQlpZiAoCgkJCXZhbHVlICYmCgkJCXR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgJiYKCQkJInIiIGluIHZhbHVlICYmCgkJCSJnIiBpbiB2YWx1ZSAmJgoJCQkiYiIgaW4gdmFsdWUKCQkpIHsKCQkJY29uc3QgcmdiID0gdmFsdWUgYXMgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHJnYi5yLCByZ2IuZywgcmdiLmIpOwoJCX0KCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJJGVmZmVjdCgoKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxLCAxMDUgLyAyNTUsIDBdKTsKCQlzcGxhdENvbG9yLnNldChyLCBnLCBiKTsKCX0pOwoKCWNvbnN0IHVwZGF0ZVBvaW50ZXJQb3NpdGlvbiA9ICgKCQlweDogbnVtYmVyLAoJCXB5OiBudW1iZXIsCgkJd2lkdGg6IG51bWJlciwKCQloZWlnaHQ6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHByZXZYID0gcG9pbnRlclN0YXRlLng7CgkJY29uc3QgcHJldlkgPSBwb2ludGVyU3RhdGUueTsKCQljb25zdCB0YXJnZXREeCA9IGNsYW1wKAoJCQk1ICogKHB4IC0gcHJldlgpLAoJCQktcG9pbnRlckZvcmNlQ2xhbXAsCgkJCXBvaW50ZXJGb3JjZUNsYW1wLAoJCSk7CgkJY29uc3QgdGFyZ2V0RHkgPSBjbGFtcCgKCQkJNSAqIChweSAtIHByZXZZKSwKCQkJLXBvaW50ZXJGb3JjZUNsYW1wLAoJCQlwb2ludGVyRm9yY2VDbGFtcCwKCQkpOwoJCWNvbnN0IGxlcnBGYWN0b3IgPSBwb2ludGVyU3RhdGUuaW5pdGlhbGl6ZWQKCQkJPyBwb2ludGVyRm9yY2VMZXJwCgkJCTogcG9pbnRlckZvcmNlSW5pdGlhbExlcnA7CgoJCXBvaW50ZXJTdGF0ZS5tb3ZlZCA9IHRydWU7CgkJcG9pbnRlclN0YXRlLmR4ID0gbGVycChwb2ludGVyU3RhdGUuZHgsIHRhcmdldER4LCBsZXJwRmFjdG9yKTsKCQlwb2ludGVyU3RhdGUuZHkgPSBsZXJwKHBvaW50ZXJTdGF0ZS5keSwgdGFyZ2V0RHksIGxlcnBGYWN0b3IpOwoJCXBvaW50ZXJTdGF0ZS54ID0gcHg7CgkJcG9pbnRlclN0YXRlLnkgPSBweTsKCQlwb2ludGVyU3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQlpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKCQkJcG9pbnRlclV2LnNldChweCAvIHdpZHRoLCAxIC0gcHkgLyBoZWlnaHQpOwoJCX0KCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gdmVjMiB1VGV4ZWw7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZVdiA9IHV2OwoJCQl2TCA9IHZVdiAtIHZlYzIodVRleGVsLngsIDAuKTsKCQkJdlIgPSB2VXYgKyB2ZWMyKHVUZXhlbC54LCAwLik7CgkJCXZUID0gdlV2ICsgdmVjMigwLiwgdVRleGVsLnkpOwoJCQl2QiA9IHZVdiAtIHZlYzIoMC4sIHVUZXhlbC55KTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBhZHZlY3Rpb25TaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVZlbG9jaXR5OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKCQl1bmlmb3JtIHZlYzIgdVRleGVsOwoJCXVuaWZvcm0gZmxvYXQgdUR0OwoJCXVuaWZvcm0gZmxvYXQgdURpc3NpcGF0aW9uOwoKCQl2ZWM0IGJpbGVycCAoc2FtcGxlcjJEIHNhbSwgdmVjMiB1diwgdmVjMiB0c2l6ZSkgewoJCQl2ZWMyIHN0ID0gdXYgLyB0c2l6ZSAtIDAuNTsKCQkJdmVjMiBpdXYgPSBmbG9vcihzdCk7CgkJCXZlYzIgZnV2ID0gZnJhY3Qoc3QpOwoJCQl2ZWM0IGEgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGIgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGMgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDEuNSkpICogdHNpemUpOwoJCQl2ZWM0IGQgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDEuNSkpICogdHNpemUpOwoJCQlyZXR1cm4gbWl4KG1peChhLCBiLCBmdXYueCksIG1peChjLCBkLCBmdXYueCksIGZ1di55KTsKCQl9CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgY29vcmQgPSB2VXYgLSB1RHQgKiBiaWxlcnAodVZlbG9jaXR5LCB2VXYsIHVUZXhlbCkueHkgKiB1VGV4ZWw7CgkJCWdsX0ZyYWdDb2xvciA9IHVEaXNzaXBhdGlvbiAqIGJpbGVycCh1SW5wdXQsIGNvb3JkLCB1VGV4ZWwpOwoJCQlnbF9GcmFnQ29sb3IuYSA9IDEuOwoJCX0KCWA7CgoJY29uc3QgZGl2ZXJnZW5jZVNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2VCkueTsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZCKS55OwoJCQlmbG9hdCBkaXYgPSAuNiAqIChSIC0gTCArIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXYsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgcHJlc3N1cmVTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1RGl2ZXJnZW5jZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQlmbG9hdCBkaXZlcmdlbmNlID0gdGV4dHVyZTJEKHVEaXZlcmdlbmNlLCB2VXYpLng7CgkJCWZsb2F0IHByZXNzdXJlID0gKEwgKyBSICsgQiArIFQgLSBkaXZlcmdlbmNlKSAqIDAuMjU7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQocHJlc3N1cmUsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzIgdkw7CgkJdmFyeWluZyB2ZWMyIHZSOwoJCXZhcnlpbmcgdmVjMiB2VDsKCQl2YXJ5aW5nIHZlYzIgdkI7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVByZXNzdXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQl2ZWMyIHZlbG9jaXR5ID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlV2KS54eTsKCQkJdmVsb2NpdHkueHkgLT0gdmVjMihSIC0gTCwgVCAtIEIpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlbG9jaXR5LCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3Qgc3BsYXRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUlucHV0OwoJCXVuaWZvcm0gZmxvYXQgdVJhdGlvOwoJCXVuaWZvcm0gdmVjMyB1UG9pbnRWYWx1ZTsKCQl1bmlmb3JtIHZlYzIgdVBvaW50OwoJCXVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBwID0gdlV2IC0gdVBvaW50Lnh5OwoJCQlwLnggKj0gdVJhdGlvOwoJCQl2ZWMzIHNwbGF0ID0gcG93KDIuLCAtZG90KHAsIHApIC8gdVBvaW50U2l6ZSkgKiB1UG9pbnRWYWx1ZTsKCQkJdmVjMyBiYXNlID0gdGV4dHVyZTJEKHVJbnB1dCwgdlV2KS54eXo7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZSArIHNwbGF0LCAxLik7CgkJfQoJYDsKCgljb25zdCBvdXRwdXRWZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IG91dHB1dFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMyBDID0gdGV4dHVyZTJEKHVUZXh0dXJlLCB2VXYpLnJnYjsKCQkJZmxvYXQgYSA9IG1heChDLnIsIG1heChDLmcsIEMuYikpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihDKSwgYSk7CgkJfQoJYDsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBoYWxmRmxvYXRFeHQgPSBnbC5yZW5kZXJlci5leHRlbnNpb25zWyJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Il0gYXMKCQkJfCB7IEhBTEZfRkxPQVRfT0VTOiBudW1iZXIgfQoJCQl8IHVuZGVmaW5lZDsKCQljb25zdCB0ZXh0dXJlVHlwZSA9IGdsLnJlbmRlcmVyLmlzV2ViZ2wyCgkJCT8gKGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpLkhBTEZfRkxPQVQKCQkJOiAoaGFsZkZsb2F0RXh0Py5IQUxGX0ZMT0FUX09FUyA/PyBnbC5GTE9BVCk7CgkJY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBnbC5yZW5kZXJlci5pc1dlYmdsMgoJCQk/IHRleHR1cmVUeXBlID09PSBnbC5GTE9BVAoJCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTMyRgoJCQkJOiAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTE2RgoJCQk6IGdsLlJHQkE7CgoJCWNvbnN0IGNyZWF0ZUZCTyA9ICh3OiBudW1iZXIsIGg6IG51bWJlcikgPT4KCQkJbmV3IFJlbmRlclRhcmdldChnbCwgewoJCQkJd2lkdGg6IHcsCgkJCQloZWlnaHQ6IGgsCgkJCQl0eXBlOiB0ZXh0dXJlVHlwZSwKCQkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJCWludGVybmFsRm9ybWF0LAoJCQkJbWluRmlsdGVyOiBnbC5ORUFSRVNULAoJCQkJbWFnRmlsdGVyOiBnbC5ORUFSRVNULAoJCQkJZGVwdGg6IGZhbHNlLAoJCQkJc3RlbmNpbDogZmFsc2UsCgkJCX0pOwoKCQljb25zdCBjcmVhdGVEb3VibGVGQk8gPSAodzogbnVtYmVyLCBoOiBudW1iZXIpOiBEb3VibGVGQk8gPT4gewoJCQljb25zdCBkb3VibGVGQk86IERvdWJsZUZCTyA9IHsKCQkJCXJlYWQ6IGNyZWF0ZUZCTyh3LCBoKSwKCQkJCXdyaXRlOiBjcmVhdGVGQk8odywgaCksCgkJCQlzd2FwOiAoKSA9PiB7CgkJCQkJY29uc3QgdGVtcCA9IGRvdWJsZUZCTy5yZWFkOwoJCQkJCWRvdWJsZUZCTy5yZWFkID0gZG91YmxlRkJPLndyaXRlOwoJCQkJCWRvdWJsZUZCTy53cml0ZSA9IHRlbXA7CgkJCQl9LAoJCQl9OwoJCQlyZXR1cm4gZG91YmxlRkJPOwoJCX07CgoJCWNvbnN0IGRlbnNpdHkgPSBjcmVhdGVEb3VibGVGQk8oMTI4LCAxMjgpOwoJCWNvbnN0IHZlbG9jaXR5ID0gY3JlYXRlRG91YmxlRkJPKDEyOCwgMTI4KTsKCQljb25zdCBwcmVzc3VyZSA9IGNyZWF0ZURvdWJsZUZCTygxMjgsIDEyOCk7CgkJY29uc3QgZGl2ZXJnZW5jZSA9IGNyZWF0ZUZCTygxMjgsIDEyOCk7CgoJCWNvbnN0IHRleGVsID0gbmV3IFZlYzIoMSAvIDEyOCwgMSAvIDEyOCk7CgkJY29uc3QgYWR2ZWN0aW9uVW5pZm9ybXMgPSB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVJbnB1dDogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQkJdUR0OiB7IHZhbHVlOiAxIC8gNjAgfSwKCQkJdURpc3NpcGF0aW9uOiB7IHZhbHVlOiB2ZWxvY2l0eURpc3NpcGF0aW9uIH0sCgkJfTsKCQljb25zdCBkaXZlcmdlbmNlVW5pZm9ybXMgPSB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQl9OwoJCWNvbnN0IHByZXNzdXJlVW5pZm9ybXMgPSB7CgkJCXVQcmVzc3VyZTogeyB2YWx1ZTogcHJlc3N1cmUucmVhZC50ZXh0dXJlIH0sCgkJCXVEaXZlcmdlbmNlOiB7IHZhbHVlOiBkaXZlcmdlbmNlLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCX07CgkJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zID0gewoJCQl1UHJlc3N1cmU6IHsgdmFsdWU6IHByZXNzdXJlLnJlYWQudGV4dHVyZSB9LAoJCQl1VmVsb2NpdHk6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJfTsKCQljb25zdCBzcGxhdFVuaWZvcm1zID0gewoJCQl1SW5wdXQ6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1UmF0aW86IHsgdmFsdWU6IDEgfSwKCQkJdVBvaW50VmFsdWU6IHsgdmFsdWU6IG5ldyBWZWMzKCkgfSwKCQkJdVBvaW50OiB7IHZhbHVlOiBwb2ludGVyVXYgfSwKCQkJdVBvaW50U2l6ZTogeyB2YWx1ZTogcG9pbnRlclNpemUgfSwKCQl9OwoJCWNvbnN0IG91dHB1dFVuaWZvcm1zID0gewoJCQl1VGV4dHVyZTogeyB2YWx1ZTogZGVuc2l0eS5yZWFkLnRleHR1cmUgfSwKCQl9OwoKCQljb25zdCBhZHZlY3Rpb25Qcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBhZHZlY3Rpb25TaGFkZXIsCgkJCXVuaWZvcm1zOiBhZHZlY3Rpb25Vbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3QgZGl2ZXJnZW5jZVByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGRpdmVyZ2VuY2VTaGFkZXIsCgkJCXVuaWZvcm1zOiBkaXZlcmdlbmNlVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IHByZXNzdXJlUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogcHJlc3N1cmVTaGFkZXIsCgkJCXVuaWZvcm1zOiBwcmVzc3VyZVVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciwKCQkJdW5pZm9ybXM6IGdyYWRpZW50U3VidHJhY3RVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3Qgc3BsYXRQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBzcGxhdFNoYWRlciwKCQkJdW5pZm9ybXM6IHNwbGF0VW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IG91dHB1dFByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IG91dHB1dFZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IG91dHB1dFNoYWRlciwKCQkJdW5pZm9ybXM6IG91dHB1dFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJfSk7CgoJCWNvbnN0IHRyaWFuZ2xlID0gbmV3IFRyaWFuZ2xlKGdsKTsKCQljb25zdCBzaW1NZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJZ2VvbWV0cnk6IHRyaWFuZ2xlLAoJCQlwcm9ncmFtOiBhZHZlY3Rpb25Qcm9ncmFtLAoJCX0pOwoJCWNvbnN0IG91dHB1dE1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQlnZW9tZXRyeTogdHJpYW5nbGUsCgkJCXByb2dyYW06IG91dHB1dFByb2dyYW0sCgkJfSk7CgoJCWNvbnN0IHJlbmRlclBhc3MgPSAocHJvZ3JhbTogUHJvZ3JhbSwgdGFyZ2V0OiBSZW5kZXJUYXJnZXQpID0+IHsKCQkJc2ltTWVzaC5wcm9ncmFtID0gcHJvZ3JhbTsKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmU6IHNpbU1lc2gsIHRhcmdldCwgY2xlYXI6IHRydWUgfSk7CgkJfTsKCgkJY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSBlLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJCWNvbnN0IHkgPSBlLmNsaWVudFkgLSByZWN0LnRvcDsKCgkJCWNvbnN0IHdhc1ByZXZpZXcgPSBwcmV2aWV3U3RhdGUuZW5hYmxlZDsKCQkJcHJldmlld1N0YXRlLmVuYWJsZWQgPSBmYWxzZTsKCQkJaWYgKHdhc1ByZXZpZXcpIHsKCQkJCXBvaW50ZXJTdGF0ZS5pbml0aWFsaXplZCA9IGZhbHNlOwoJCQkJcG9pbnRlclN0YXRlLmR4ID0gMDsKCQkJCXBvaW50ZXJTdGF0ZS5keSA9IDA7CgkJCX0KCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHgsIHksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKCQl9OwoKCQljb25zdCBoYW5kbGVUb3VjaE1vdmUgPSAoZTogVG91Y2hFdmVudCkgPT4gewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCWNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdOwoJCQlpZiAoIXRvdWNoKSByZXR1cm47CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSB0b3VjaC5jbGllbnRYIC0gcmVjdC5sZWZ0OwoJCQljb25zdCB5ID0gdG91Y2guY2xpZW50WSAtIHJlY3QudG9wOwoKCQkJY29uc3Qgd2FzUHJldmlldyA9IHByZXZpZXdTdGF0ZS5lbmFibGVkOwoJCQlwcmV2aWV3U3RhdGUuZW5hYmxlZCA9IGZhbHNlOwoJCQlpZiAod2FzUHJldmlldykgewoJCQkJcG9pbnRlclN0YXRlLmluaXRpYWxpemVkID0gZmFsc2U7CgkJCQlwb2ludGVyU3RhdGUuZHggPSAwOwoJCQkJcG9pbnRlclN0YXRlLmR5ID0gMDsKCQkJfQoJCQl1cGRhdGVQb2ludGVyUG9zaXRpb24oeCwgeSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX07CgoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKCQl0YXJnZXRDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgaGFuZGxlVG91Y2hNb3ZlLCB7CgkJCXBhc3NpdmU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCByZXNpemVTaW11bGF0aW9uID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQljYW52YXNNZXRyaWNzLndpZHRoID0gd2lkdGg7CgkJCWNhbnZhc01ldHJpY3MuaGVpZ2h0ID0gaGVpZ2h0OwoKCQkJY29uc3Qgc2ltUmVzWCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iod2lkdGggKiAwLjUpKTsKCQkJY29uc3Qgc2ltUmVzWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0ICogMC41KSk7CgoJCQlkZW5zaXR5LnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJZGVuc2l0eS53cml0ZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQl2ZWxvY2l0eS5yZWFkLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXZlbG9jaXR5LndyaXRlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXByZXNzdXJlLnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJcHJlc3N1cmUud3JpdGUuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJZGl2ZXJnZW5jZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoKCQkJY29uc3QgdGV4ZWxYID0gMSAvIHNpbVJlc1g7CgkJCWNvbnN0IHRleGVsWSA9IDEgLyBzaW1SZXNZOwoJCQl0ZXhlbC5zZXQodGV4ZWxYLCB0ZXhlbFkpOwoKCQkJaWYgKGNhbnZhc01ldHJpY3Mud2lkdGggPiAwICYmIGNhbnZhc01ldHJpY3MuaGVpZ2h0ID4gMCkgewoJCQkJcG9pbnRlclV2LnNldCgKCQkJCQlwb2ludGVyU3RhdGUueCAvIGNhbnZhc01ldHJpY3Mud2lkdGgsCgkJCQkJMSAtIHBvaW50ZXJTdGF0ZS55IC8gY2FudmFzTWV0cmljcy5oZWlnaHQsCgkJCQkpOwoJCQl9CgkJfTsKCgkJcmVzaXplU2ltdWxhdGlvbigpOwoJCWNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZVNpbXVsYXRpb24pOwoJCXJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpIHsKCQkJcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgkJfQoKCQljb25zdCBkaXNwb3NlVGFyZ2V0ID0gKHRhcmdldDogUmVuZGVyVGFyZ2V0KSA9PiB7CgkJCXRhcmdldC50ZXh0dXJlcy5mb3JFYWNoKCh0ZXh0dXJlKSA9PiB7CgkJCQlpZiAodGV4dHVyZS50ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUudGV4dHVyZSk7CgkJCX0pOwoJCQlpZiAodGFyZ2V0LmRlcHRoVGV4dHVyZT8udGV4dHVyZSkKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGFyZ2V0LmRlcHRoVGV4dHVyZS50ZXh0dXJlKTsKCQkJaWYgKHRhcmdldC5kZXB0aEJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5kZXB0aEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuc3RlbmNpbEJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5zdGVuY2lsQnVmZmVyKTsKCQkJaWYgKHRhcmdldC5kZXB0aFN0ZW5jaWxCdWZmZXIpCgkJCQlnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoU3RlbmNpbEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuYnVmZmVyKSBnbC5kZWxldGVGcmFtZWJ1ZmZlcih0YXJnZXQuYnVmZmVyKTsKCQl9OwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWNvbnN0IGR0ID0gMSAvIDYwOwoJCQljb25zdCB3aWR0aCA9IGNhbnZhc01ldHJpY3Mud2lkdGggfHwgdGFyZ2V0Q2FudmFzLmNsaWVudFdpZHRoIHx8IDE7CgkJCWNvbnN0IGhlaWdodCA9IGNhbnZhc01ldHJpY3MuaGVpZ2h0IHx8IHRhcmdldENhbnZhcy5jbGllbnRIZWlnaHQgfHwgMTsKCQkJY29uc3QgYXNwZWN0ID0gaGVpZ2h0ID4gMCA/IHdpZHRoIC8gaGVpZ2h0IDogMTsKCgkJCWlmIChwcmV2aWV3U3RhdGUuZW5hYmxlZCAmJiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewoJCQkJcHJldmlld1N0YXRlLnRpbWVNcyArPSBkZWx0YSAqIDEwMDA7CgkJCQljb25zdCBwcmV2aWV3WCA9CgkJCQkJKDAuNSAtIDAuNDUgKiBNYXRoLnNpbigwLjAwMyAqIHByZXZpZXdTdGF0ZS50aW1lTXMgLSAyKSkgKiB3aWR0aDsKCQkJCWNvbnN0IHByZXZpZXdZID0KCQkJCQkoMC41ICsKCQkJCQkJMC4xICogTWF0aC5zaW4oMC4wMDI1ICogcHJldmlld1N0YXRlLnRpbWVNcykgKwoJCQkJCQkwLjEgKiBNYXRoLmNvcygwLjAwMiAqIHByZXZpZXdTdGF0ZS50aW1lTXMpKSAqCgkJCQkJaGVpZ2h0OwoJCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHByZXZpZXdYLCBwcmV2aWV3WSwgd2lkdGgsIGhlaWdodCk7CgkJCX0KCgkJCWlmIChwb2ludGVyU3RhdGUubW92ZWQpIHsKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQkJc3BsYXRVbmlmb3Jtcy51UmF0aW8udmFsdWUgPSBhc3BlY3Q7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludC52YWx1ZS5zZXQocG9pbnRlclV2LngsIHBvaW50ZXJVdi55KTsKCQkJCXNwbGF0VW5pZm9ybXMudVBvaW50VmFsdWUudmFsdWUuc2V0KAoJCQkJCXBvaW50ZXJTdGF0ZS5keCwKCQkJCQktcG9pbnRlclN0YXRlLmR5LAoJCQkJCTEsCgkJCQkpOwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnRTaXplLnZhbHVlID0gcG9pbnRlclNpemU7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gZGVuc2l0eS5yZWFkLnRleHR1cmU7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludFZhbHVlLnZhbHVlLnNldCgKCQkJCQlzcGxhdENvbG9yLngsCgkJCQkJc3BsYXRDb2xvci55LAoJCQkJCXNwbGF0Q29sb3IueiwKCQkJCSk7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCQlkZW5zaXR5LnN3YXAoKTsKCgkJCQlpZiAoIXByZXZpZXdTdGF0ZS5lbmFibGVkKSB7CgkJCQkJcG9pbnRlclN0YXRlLm1vdmVkID0gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCWRpdmVyZ2VuY2VVbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXJlbmRlclBhc3MoZGl2ZXJnZW5jZVByb2dyYW0sIGRpdmVyZ2VuY2UpOwoKCQkJcHJlc3N1cmVVbmlmb3Jtcy51RGl2ZXJnZW5jZS52YWx1ZSA9IGRpdmVyZ2VuY2UudGV4dHVyZTsKCQkJY29uc3QgaXRlcmF0aW9ucyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocHJlc3N1cmVJdGVyYXRpb25zKSk7CgkJCWZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CgkJCQlwcmVzc3VyZVVuaWZvcm1zLnVQcmVzc3VyZS52YWx1ZSA9IHByZXNzdXJlLnJlYWQudGV4dHVyZTsKCQkJCXJlbmRlclBhc3MocHJlc3N1cmVQcm9ncmFtLCBwcmVzc3VyZS53cml0ZSk7CgkJCQlwcmVzc3VyZS5zd2FwKCk7CgkJCX0KCgkJCWdyYWRpZW50U3VidHJhY3RVbmlmb3Jtcy51UHJlc3N1cmUudmFsdWUgPSBwcmVzc3VyZS5yZWFkLnRleHR1cmU7CgkJCWdyYWRpZW50U3VidHJhY3RVbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXJlbmRlclBhc3MoZ3JhZGllbnRTdWJ0cmFjdFByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUR0LnZhbHVlID0gZHQ7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RGlzc2lwYXRpb24udmFsdWUgPSB2ZWxvY2l0eURpc3NpcGF0aW9uOwoJCQlyZW5kZXJQYXNzKGFkdmVjdGlvblByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51SW5wdXQudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudURpc3NpcGF0aW9uLnZhbHVlID0gZGlzc2lwYXRpb247CgkJCXJlbmRlclBhc3MoYWR2ZWN0aW9uUHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCWRlbnNpdHkuc3dhcCgpOwoKCQkJb3V0cHV0VW5pZm9ybXMudVRleHR1cmUudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmU6IG91dHB1dE1lc2gsIGNsZWFyOiB0cnVlIH0pOwoKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVQb2ludGVyTW92ZSk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUpOwoKCQkJZGlzcG9zZVRhcmdldChkZW5zaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KGRlbnNpdHkud3JpdGUpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LndyaXRlKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS53cml0ZSk7CgkJCWRpc3Bvc2VUYXJnZXQoZGl2ZXJnZW5jZSk7CgoJCQlhZHZlY3Rpb25Qcm9ncmFtLnJlbW92ZSgpOwoJCQlkaXZlcmdlbmNlUHJvZ3JhbS5yZW1vdmUoKTsKCQkJcHJlc3N1cmVQcm9ncmFtLnJlbW92ZSgpOwoJCQlncmFkaWVudFN1YnRyYWN0UHJvZ3JhbS5yZW1vdmUoKTsKCQkJc3BsYXRQcm9ncmFtLnJlbW92ZSgpOwoJCQlvdXRwdXRQcm9ncmFtLnJlbW92ZSgpOwoJCQl0cmlhbmdsZS5yZW1vdmUoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/fluid-simulation/FluidSimulationScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlclRhcmdldCwKCQlSZW5kZXJlciwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJCVZlYzMsCgl9IGZyb20gIm9nbCI7CglpbXBvcnQgeyB0eXBlIENvbG9yUmVwcmVzZW50YXRpb24sIHRvTGluZWFyUmdiIH0gZnJvbSAiLi4vaGVscGVycy9jb2xvciI7CglpbXBvcnQgeyB1cGRhdGVGbHVpZFBvaW50ZXJTdGF0ZSB9IGZyb20gIi4uL2hlbHBlcnMvZmx1aWQtcG9pbnRlciI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBEaXNzaXBhdGlvbiBmYWN0b3IgZm9yIHRoZSBmbHVpZC4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJZGlzc2lwYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogUmFkaXVzIG9mIHRoZSBwb2ludGVyIGluZmx1ZW5jZS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCXBvaW50ZXJTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZsdWlkIHNwbGF0IGNvbG9yLgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBGbHVpZCB2ZWxvY2l0eSBkaXNzaXBhdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjk2CgkJICovCgkJdmVsb2NpdHlEaXNzaXBhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBQcmVzc3VyZSBpdGVyYXRpb25zLiBNb3JlIGl0ZXJhdGlvbnMgPSBtb3JlIGFjY3VyYXRlIGJ1dCBzbG93ZXIuCgkJICogQGRlZmF1bHQgMTAKCQkgKi8KCQlwcmVzc3VyZUl0ZXJhdGlvbnM/OiBudW1iZXI7Cgl9CgoJdHlwZSBQb2ludGVyU3RhdGUgPSB7CgkJeDogbnVtYmVyOwoJCXk6IG51bWJlcjsKCQlkeDogbnVtYmVyOwoJCWR5OiBudW1iZXI7CgkJbW92ZWQ6IGJvb2xlYW47CgkJaW5pdGlhbGl6ZWQ6IGJvb2xlYW47Cgl9OwoKCXR5cGUgUHJldmlld1N0YXRlID0gewoJCWVuYWJsZWQ6IGJvb2xlYW47CgkJdGltZU1zOiBudW1iZXI7Cgl9OwoKCXR5cGUgQ2FudmFzTWV0cmljcyA9IHsKCQl3aWR0aDogbnVtYmVyOwoJCWhlaWdodDogbnVtYmVyOwoJfTsKCgl0eXBlIERvdWJsZUZCTyA9IHsKCQlyZWFkOiBSZW5kZXJUYXJnZXQ7CgkJd3JpdGU6IFJlbmRlclRhcmdldDsKCQlzd2FwOiAoKSA9PiB2b2lkOwoJfTsKCglsZXQgewoJCWRpc3NpcGF0aW9uID0gMC45NiwKCQlwb2ludGVyU2l6ZSA9IDAuMDA1LAoJCWNvbG9yID0gIiNmZjY5MDAiLAoJCXZlbG9jaXR5RGlzc2lwYXRpb24gPSAwLjk2LAoJCXByZXNzdXJlSXRlcmF0aW9ucyA9IDEwLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoKCWNvbnN0IHBvaW50ZXJTdGF0ZSA9ICRzdGF0ZTxQb2ludGVyU3RhdGU+KHsKCQl4OiAwLAoJCXk6IDAsCgkJZHg6IDAsCgkJZHk6IDAsCgkJbW92ZWQ6IGZhbHNlLAoJCWluaXRpYWxpemVkOiBmYWxzZSwKCX0pOwoJY29uc3QgcHJldmlld1N0YXRlID0gJHN0YXRlPFByZXZpZXdTdGF0ZT4oewoJCWVuYWJsZWQ6IHRydWUsCgkJdGltZU1zOiAwLAoJfSk7Cgljb25zdCBjYW52YXNNZXRyaWNzID0gJHN0YXRlPENhbnZhc01ldHJpY3M+KHsKCQl3aWR0aDogMSwKCQloZWlnaHQ6IDEsCgl9KTsKCgljb25zdCBwb2ludGVyVXYgPSBuZXcgVmVjMigpOwoJY29uc3Qgc3BsYXRDb2xvciA9IG5ldyBWZWMzKCk7CgoJY29uc3QgcG9pbnRlckZvcmNlQ2xhbXAgPSA0NTA7Cgljb25zdCBwb2ludGVyRm9yY2VJbml0aWFsTGVycCA9IDAuMjsKCWNvbnN0IHBvaW50ZXJGb3JjZUxlcnAgPSAwLjU1OwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKGNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJc3BsYXRDb2xvci5zZXQociwgZywgYik7Cgl9KTsKCgljb25zdCB1cGRhdGVQb2ludGVyUG9zaXRpb24gPSAoCgkJcHg6IG51bWJlciwKCQlweTogbnVtYmVyLAoJCXdpZHRoOiBudW1iZXIsCgkJaGVpZ2h0OiBudW1iZXIsCgkpID0+IHsKCQl1cGRhdGVGbHVpZFBvaW50ZXJTdGF0ZSh7CgkJCXN0YXRlOiBwb2ludGVyU3RhdGUsCgkJCXV2OiBwb2ludGVyVXYsCgkJCXg6IHB4LAoJCQl5OiBweSwKCQkJd2lkdGgsCgkJCWhlaWdodCwKCQkJZm9yY2VDbGFtcDogcG9pbnRlckZvcmNlQ2xhbXAsCgkJCWluaXRpYWxMZXJwOiBwb2ludGVyRm9yY2VJbml0aWFsTGVycCwKCQkJbGVycDogcG9pbnRlckZvcmNlTGVycCwKCQl9KTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gdmVjMiB1VGV4ZWw7CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZVdiA9IHV2OwoJCQl2TCA9IHZVdiAtIHZlYzIodVRleGVsLngsIDAuKTsKCQkJdlIgPSB2VXYgKyB2ZWMyKHVUZXhlbC54LCAwLik7CgkJCXZUID0gdlV2ICsgdmVjMigwLiwgdVRleGVsLnkpOwoJCQl2QiA9IHZVdiAtIHZlYzIoMC4sIHVUZXhlbC55KTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBhZHZlY3Rpb25TaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVZlbG9jaXR5OwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVJbnB1dDsKCQl1bmlmb3JtIHZlYzIgdVRleGVsOwoJCXVuaWZvcm0gZmxvYXQgdUR0OwoJCXVuaWZvcm0gZmxvYXQgdURpc3NpcGF0aW9uOwoKCQl2ZWM0IGJpbGVycCAoc2FtcGxlcjJEIHNhbSwgdmVjMiB1diwgdmVjMiB0c2l6ZSkgewoJCQl2ZWMyIHN0ID0gdXYgLyB0c2l6ZSAtIDAuNTsKCQkJdmVjMiBpdXYgPSBmbG9vcihzdCk7CgkJCXZlYzIgZnV2ID0gZnJhY3Qoc3QpOwoJCQl2ZWM0IGEgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGIgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDAuNSkpICogdHNpemUpOwoJCQl2ZWM0IGMgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigwLjUsIDEuNSkpICogdHNpemUpOwoJCQl2ZWM0IGQgPSB0ZXh0dXJlMkQoc2FtLCAoaXV2ICsgdmVjMigxLjUsIDEuNSkpICogdHNpemUpOwoJCQlyZXR1cm4gbWl4KG1peChhLCBiLCBmdXYueCksIG1peChjLCBkLCBmdXYueCksIGZ1di55KTsKCQl9CgoJCXZvaWQgbWFpbiAoKSB7CgkJCXZlYzIgY29vcmQgPSB2VXYgLSB1RHQgKiBiaWxlcnAodVZlbG9jaXR5LCB2VXYsIHVUZXhlbCkueHkgKiB1VGV4ZWw7CgkJCWdsX0ZyYWdDb2xvciA9IHVEaXNzaXBhdGlvbiAqIGJpbGVycCh1SW5wdXQsIGNvb3JkLCB1VGV4ZWwpOwoJCQlnbF9GcmFnQ29sb3IuYSA9IDEuOwoJCX0KCWA7CgoJY29uc3QgZGl2ZXJnZW5jZVNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVZlbG9jaXR5LCB2VCkueTsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1VmVsb2NpdHksIHZCKS55OwoJCQlmbG9hdCBkaXYgPSAuNiAqIChSIC0gTCArIFQgLSBCKTsKCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXYsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgcHJlc3N1cmVTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdmFyeWluZyB2ZWMyIHZMOwoJCXZhcnlpbmcgdmVjMiB2UjsKCQl2YXJ5aW5nIHZlYzIgdlQ7CgkJdmFyeWluZyB2ZWMyIHZCOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVQcmVzc3VyZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1RGl2ZXJnZW5jZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQlmbG9hdCBkaXZlcmdlbmNlID0gdGV4dHVyZTJEKHVEaXZlcmdlbmNlLCB2VXYpLng7CgkJCWZsb2F0IHByZXNzdXJlID0gKEwgKyBSICsgQiArIFQgLSBkaXZlcmdlbmNlKSAqIDAuMjU7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQocHJlc3N1cmUsIDAuLCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzIgdkw7CgkJdmFyeWluZyB2ZWMyIHZSOwoJCXZhcnlpbmcgdmVjMiB2VDsKCQl2YXJ5aW5nIHZlYzIgdkI7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVByZXNzdXJlOwoJCXVuaWZvcm0gc2FtcGxlcjJEIHVWZWxvY2l0eTsKCgkJdm9pZCBtYWluICgpIHsKCQkJZmxvYXQgTCA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZMKS54OwoJCQlmbG9hdCBSID0gdGV4dHVyZTJEKHVQcmVzc3VyZSwgdlIpLng7CgkJCWZsb2F0IFQgPSB0ZXh0dXJlMkQodVByZXNzdXJlLCB2VCkueDsKCQkJZmxvYXQgQiA9IHRleHR1cmUyRCh1UHJlc3N1cmUsIHZCKS54OwoJCQl2ZWMyIHZlbG9jaXR5ID0gdGV4dHVyZTJEKHVWZWxvY2l0eSwgdlV2KS54eTsKCQkJdmVsb2NpdHkueHkgLT0gdmVjMihSIC0gTCwgVCAtIEIpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlbG9jaXR5LCAwLiwgMS4pOwoJCX0KCWA7CgoJY29uc3Qgc3BsYXRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdUlucHV0OwoJCXVuaWZvcm0gZmxvYXQgdVJhdGlvOwoJCXVuaWZvcm0gdmVjMyB1UG9pbnRWYWx1ZTsKCQl1bmlmb3JtIHZlYzIgdVBvaW50OwoJCXVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTsKCgkJdm9pZCBtYWluICgpIHsKCQkJdmVjMiBwID0gdlV2IC0gdVBvaW50Lnh5OwoJCQlwLnggKj0gdVJhdGlvOwoJCQl2ZWMzIHNwbGF0ID0gcG93KDIuLCAtZG90KHAsIHApIC8gdVBvaW50U2l6ZSkgKiB1UG9pbnRWYWx1ZTsKCQkJdmVjMyBiYXNlID0gdGV4dHVyZTJEKHVJbnB1dCwgdlV2KS54eXo7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZSArIHNwbGF0LCAxLik7CgkJfQoJYDsKCgljb25zdCBvdXRwdXRWZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IG91dHB1dFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMyBDID0gdGV4dHVyZTJEKHVUZXh0dXJlLCB2VXYpLnJnYjsKCQkJZmxvYXQgYSA9IG1heChDLnIsIG1heChDLmcsIEMuYikpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihDKSwgYSk7CgkJfQoJYDsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBoYWxmRmxvYXRFeHQgPSBnbC5yZW5kZXJlci5leHRlbnNpb25zWyJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Il0gYXMKCQkJfCB7IEhBTEZfRkxPQVRfT0VTOiBudW1iZXIgfQoJCQl8IHVuZGVmaW5lZDsKCQljb25zdCB0ZXh0dXJlVHlwZSA9IGdsLnJlbmRlcmVyLmlzV2ViZ2wyCgkJCT8gKGdsIGFzIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpLkhBTEZfRkxPQVQKCQkJOiAoaGFsZkZsb2F0RXh0Py5IQUxGX0ZMT0FUX09FUyA/PyBnbC5GTE9BVCk7CgkJY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBnbC5yZW5kZXJlci5pc1dlYmdsMgoJCQk/IHRleHR1cmVUeXBlID09PSBnbC5GTE9BVAoJCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTMyRgoJCQkJOiAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTE2RgoJCQk6IGdsLlJHQkE7CgoJCWNvbnN0IGNyZWF0ZUZCTyA9ICh3OiBudW1iZXIsIGg6IG51bWJlcikgPT4KCQkJbmV3IFJlbmRlclRhcmdldChnbCwgewoJCQkJd2lkdGg6IHcsCgkJCQloZWlnaHQ6IGgsCgkJCQl0eXBlOiB0ZXh0dXJlVHlwZSwKCQkJCWZvcm1hdDogZ2wuUkdCQSwKCQkJCWludGVybmFsRm9ybWF0LAoJCQkJbWluRmlsdGVyOiBnbC5ORUFSRVNULAoJCQkJbWFnRmlsdGVyOiBnbC5ORUFSRVNULAoJCQkJZGVwdGg6IGZhbHNlLAoJCQkJc3RlbmNpbDogZmFsc2UsCgkJCX0pOwoKCQljb25zdCBjcmVhdGVEb3VibGVGQk8gPSAodzogbnVtYmVyLCBoOiBudW1iZXIpOiBEb3VibGVGQk8gPT4gewoJCQljb25zdCBkb3VibGVGQk86IERvdWJsZUZCTyA9IHsKCQkJCXJlYWQ6IGNyZWF0ZUZCTyh3LCBoKSwKCQkJCXdyaXRlOiBjcmVhdGVGQk8odywgaCksCgkJCQlzd2FwOiAoKSA9PiB7CgkJCQkJY29uc3QgdGVtcCA9IGRvdWJsZUZCTy5yZWFkOwoJCQkJCWRvdWJsZUZCTy5yZWFkID0gZG91YmxlRkJPLndyaXRlOwoJCQkJCWRvdWJsZUZCTy53cml0ZSA9IHRlbXA7CgkJCQl9LAoJCQl9OwoJCQlyZXR1cm4gZG91YmxlRkJPOwoJCX07CgoJCWNvbnN0IGRlbnNpdHkgPSBjcmVhdGVEb3VibGVGQk8oMTI4LCAxMjgpOwoJCWNvbnN0IHZlbG9jaXR5ID0gY3JlYXRlRG91YmxlRkJPKDEyOCwgMTI4KTsKCQljb25zdCBwcmVzc3VyZSA9IGNyZWF0ZURvdWJsZUZCTygxMjgsIDEyOCk7CgkJY29uc3QgZGl2ZXJnZW5jZSA9IGNyZWF0ZUZCTygxMjgsIDEyOCk7CgoJCWNvbnN0IHRleGVsID0gbmV3IFZlYzIoMSAvIDEyOCwgMSAvIDEyOCk7CgkJY29uc3QgYWR2ZWN0aW9uVW5pZm9ybXMgPSB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVJbnB1dDogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQkJdUR0OiB7IHZhbHVlOiAxIC8gNjAgfSwKCQkJdURpc3NpcGF0aW9uOiB7IHZhbHVlOiB2ZWxvY2l0eURpc3NpcGF0aW9uIH0sCgkJfTsKCQljb25zdCBkaXZlcmdlbmNlVW5pZm9ybXMgPSB7CgkJCXVWZWxvY2l0eTogeyB2YWx1ZTogdmVsb2NpdHkucmVhZC50ZXh0dXJlIH0sCgkJCXVUZXhlbDogeyB2YWx1ZTogdGV4ZWwgfSwKCQl9OwoJCWNvbnN0IHByZXNzdXJlVW5pZm9ybXMgPSB7CgkJCXVQcmVzc3VyZTogeyB2YWx1ZTogcHJlc3N1cmUucmVhZC50ZXh0dXJlIH0sCgkJCXVEaXZlcmdlbmNlOiB7IHZhbHVlOiBkaXZlcmdlbmNlLnRleHR1cmUgfSwKCQkJdVRleGVsOiB7IHZhbHVlOiB0ZXhlbCB9LAoJCX07CgkJY29uc3QgZ3JhZGllbnRTdWJ0cmFjdFVuaWZvcm1zID0gewoJCQl1UHJlc3N1cmU6IHsgdmFsdWU6IHByZXNzdXJlLnJlYWQudGV4dHVyZSB9LAoJCQl1VmVsb2NpdHk6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1VGV4ZWw6IHsgdmFsdWU6IHRleGVsIH0sCgkJfTsKCQljb25zdCBzcGxhdFVuaWZvcm1zID0gewoJCQl1SW5wdXQ6IHsgdmFsdWU6IHZlbG9jaXR5LnJlYWQudGV4dHVyZSB9LAoJCQl1UmF0aW86IHsgdmFsdWU6IDEgfSwKCQkJdVBvaW50VmFsdWU6IHsgdmFsdWU6IG5ldyBWZWMzKCkgfSwKCQkJdVBvaW50OiB7IHZhbHVlOiBwb2ludGVyVXYgfSwKCQkJdVBvaW50U2l6ZTogeyB2YWx1ZTogcG9pbnRlclNpemUgfSwKCQl9OwoJCWNvbnN0IG91dHB1dFVuaWZvcm1zID0gewoJCQl1VGV4dHVyZTogeyB2YWx1ZTogZGVuc2l0eS5yZWFkLnRleHR1cmUgfSwKCQl9OwoKCQljb25zdCBhZHZlY3Rpb25Qcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBhZHZlY3Rpb25TaGFkZXIsCgkJCXVuaWZvcm1zOiBhZHZlY3Rpb25Vbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3QgZGl2ZXJnZW5jZVByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGRpdmVyZ2VuY2VTaGFkZXIsCgkJCXVuaWZvcm1zOiBkaXZlcmdlbmNlVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IHByZXNzdXJlUHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogcHJlc3N1cmVTaGFkZXIsCgkJCXVuaWZvcm1zOiBwcmVzc3VyZVVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCQljb25zdCBncmFkaWVudFN1YnRyYWN0UHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZ3JhZGllbnRTdWJ0cmFjdFNoYWRlciwKCQkJdW5pZm9ybXM6IGdyYWRpZW50U3VidHJhY3RVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgkJY29uc3Qgc3BsYXRQcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBzcGxhdFNoYWRlciwKCQkJdW5pZm9ybXM6IHNwbGF0VW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoJCWNvbnN0IG91dHB1dFByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IG91dHB1dFZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IG91dHB1dFNoYWRlciwKCQkJdW5pZm9ybXM6IG91dHB1dFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJfSk7CgoJCWNvbnN0IHRyaWFuZ2xlID0gbmV3IFRyaWFuZ2xlKGdsKTsKCQljb25zdCBzaW1NZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJZ2VvbWV0cnk6IHRyaWFuZ2xlLAoJCQlwcm9ncmFtOiBhZHZlY3Rpb25Qcm9ncmFtLAoJCX0pOwoJCWNvbnN0IG91dHB1dE1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQlnZW9tZXRyeTogdHJpYW5nbGUsCgkJCXByb2dyYW06IG91dHB1dFByb2dyYW0sCgkJfSk7CgoJCWNvbnN0IHJlbmRlclBhc3MgPSAocHJvZ3JhbTogUHJvZ3JhbSwgdGFyZ2V0OiBSZW5kZXJUYXJnZXQpID0+IHsKCQkJc2ltTWVzaC5wcm9ncmFtID0gcHJvZ3JhbTsKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmU6IHNpbU1lc2gsIHRhcmdldCwgY2xlYXI6IHRydWUgfSk7CgkJfTsKCgkJY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB7CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSBlLmNsaWVudFggLSByZWN0LmxlZnQ7CgkJCWNvbnN0IHkgPSBlLmNsaWVudFkgLSByZWN0LnRvcDsKCgkJCWNvbnN0IHdhc1ByZXZpZXcgPSBwcmV2aWV3U3RhdGUuZW5hYmxlZDsKCQkJcHJldmlld1N0YXRlLmVuYWJsZWQgPSBmYWxzZTsKCQkJaWYgKHdhc1ByZXZpZXcpIHsKCQkJCXBvaW50ZXJTdGF0ZS5pbml0aWFsaXplZCA9IGZhbHNlOwoJCQkJcG9pbnRlclN0YXRlLmR4ID0gMDsKCQkJCXBvaW50ZXJTdGF0ZS5keSA9IDA7CgkJCX0KCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHgsIHksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKCQl9OwoKCQljb25zdCBoYW5kbGVUb3VjaE1vdmUgPSAoZTogVG91Y2hFdmVudCkgPT4gewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCWNvbnN0IHRvdWNoID0gZS50b3VjaGVzWzBdOwoJCQlpZiAoIXRvdWNoKSByZXR1cm47CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHggPSB0b3VjaC5jbGllbnRYIC0gcmVjdC5sZWZ0OwoJCQljb25zdCB5ID0gdG91Y2guY2xpZW50WSAtIHJlY3QudG9wOwoKCQkJY29uc3Qgd2FzUHJldmlldyA9IHByZXZpZXdTdGF0ZS5lbmFibGVkOwoJCQlwcmV2aWV3U3RhdGUuZW5hYmxlZCA9IGZhbHNlOwoJCQlpZiAod2FzUHJldmlldykgewoJCQkJcG9pbnRlclN0YXRlLmluaXRpYWxpemVkID0gZmFsc2U7CgkJCQlwb2ludGVyU3RhdGUuZHggPSAwOwoJCQkJcG9pbnRlclN0YXRlLmR5ID0gMDsKCQkJfQoJCQl1cGRhdGVQb2ludGVyUG9zaXRpb24oeCwgeSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwoJCX07CgoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKCQl0YXJnZXRDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgaGFuZGxlVG91Y2hNb3ZlLCB7CgkJCXBhc3NpdmU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCByZXNpemVTaW11bGF0aW9uID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQljYW52YXNNZXRyaWNzLndpZHRoID0gd2lkdGg7CgkJCWNhbnZhc01ldHJpY3MuaGVpZ2h0ID0gaGVpZ2h0OwoKCQkJY29uc3Qgc2ltUmVzWCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iod2lkdGggKiAwLjUpKTsKCQkJY29uc3Qgc2ltUmVzWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0ICogMC41KSk7CgoJCQlkZW5zaXR5LnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJZGVuc2l0eS53cml0ZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoJCQl2ZWxvY2l0eS5yZWFkLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXZlbG9jaXR5LndyaXRlLnNldFNpemUoc2ltUmVzWCwgc2ltUmVzWSk7CgkJCXByZXNzdXJlLnJlYWQuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJcHJlc3N1cmUud3JpdGUuc2V0U2l6ZShzaW1SZXNYLCBzaW1SZXNZKTsKCQkJZGl2ZXJnZW5jZS5zZXRTaXplKHNpbVJlc1gsIHNpbVJlc1kpOwoKCQkJY29uc3QgdGV4ZWxYID0gMSAvIHNpbVJlc1g7CgkJCWNvbnN0IHRleGVsWSA9IDEgLyBzaW1SZXNZOwoJCQl0ZXhlbC5zZXQodGV4ZWxYLCB0ZXhlbFkpOwoKCQkJaWYgKGNhbnZhc01ldHJpY3Mud2lkdGggPiAwICYmIGNhbnZhc01ldHJpY3MuaGVpZ2h0ID4gMCkgewoJCQkJcG9pbnRlclV2LnNldCgKCQkJCQlwb2ludGVyU3RhdGUueCAvIGNhbnZhc01ldHJpY3Mud2lkdGgsCgkJCQkJMSAtIHBvaW50ZXJTdGF0ZS55IC8gY2FudmFzTWV0cmljcy5oZWlnaHQsCgkJCQkpOwoJCQl9CgkJfTsKCgkJcmVzaXplU2ltdWxhdGlvbigpOwoJCWNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZVNpbXVsYXRpb24pOwoJCXJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpIHsKCQkJcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgkJfQoKCQljb25zdCBkaXNwb3NlVGFyZ2V0ID0gKHRhcmdldDogUmVuZGVyVGFyZ2V0KSA9PiB7CgkJCXRhcmdldC50ZXh0dXJlcy5mb3JFYWNoKCh0ZXh0dXJlKSA9PiB7CgkJCQlpZiAodGV4dHVyZS50ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUudGV4dHVyZSk7CgkJCX0pOwoJCQlpZiAodGFyZ2V0LmRlcHRoVGV4dHVyZT8udGV4dHVyZSkKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGFyZ2V0LmRlcHRoVGV4dHVyZS50ZXh0dXJlKTsKCQkJaWYgKHRhcmdldC5kZXB0aEJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5kZXB0aEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuc3RlbmNpbEJ1ZmZlcikgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHRhcmdldC5zdGVuY2lsQnVmZmVyKTsKCQkJaWYgKHRhcmdldC5kZXB0aFN0ZW5jaWxCdWZmZXIpCgkJCQlnbC5kZWxldGVSZW5kZXJidWZmZXIodGFyZ2V0LmRlcHRoU3RlbmNpbEJ1ZmZlcik7CgkJCWlmICh0YXJnZXQuYnVmZmVyKSBnbC5kZWxldGVGcmFtZWJ1ZmZlcih0YXJnZXQuYnVmZmVyKTsKCQl9OwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWNvbnN0IGR0ID0gMSAvIDYwOwoJCQljb25zdCB3aWR0aCA9IGNhbnZhc01ldHJpY3Mud2lkdGggfHwgdGFyZ2V0Q2FudmFzLmNsaWVudFdpZHRoIHx8IDE7CgkJCWNvbnN0IGhlaWdodCA9IGNhbnZhc01ldHJpY3MuaGVpZ2h0IHx8IHRhcmdldENhbnZhcy5jbGllbnRIZWlnaHQgfHwgMTsKCQkJY29uc3QgYXNwZWN0ID0gaGVpZ2h0ID4gMCA/IHdpZHRoIC8gaGVpZ2h0IDogMTsKCgkJCWlmIChwcmV2aWV3U3RhdGUuZW5hYmxlZCAmJiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgewoJCQkJcHJldmlld1N0YXRlLnRpbWVNcyArPSBkZWx0YSAqIDEwMDA7CgkJCQljb25zdCBwcmV2aWV3WCA9CgkJCQkJKDAuNSAtIDAuNDUgKiBNYXRoLnNpbigwLjAwMyAqIHByZXZpZXdTdGF0ZS50aW1lTXMgLSAyKSkgKiB3aWR0aDsKCQkJCWNvbnN0IHByZXZpZXdZID0KCQkJCQkoMC41ICsKCQkJCQkJMC4xICogTWF0aC5zaW4oMC4wMDI1ICogcHJldmlld1N0YXRlLnRpbWVNcykgKwoJCQkJCQkwLjEgKiBNYXRoLmNvcygwLjAwMiAqIHByZXZpZXdTdGF0ZS50aW1lTXMpKSAqCgkJCQkJaGVpZ2h0OwoJCQkJdXBkYXRlUG9pbnRlclBvc2l0aW9uKHByZXZpZXdYLCBwcmV2aWV3WSwgd2lkdGgsIGhlaWdodCk7CgkJCX0KCgkJCWlmIChwb2ludGVyU3RhdGUubW92ZWQpIHsKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQkJc3BsYXRVbmlmb3Jtcy51UmF0aW8udmFsdWUgPSBhc3BlY3Q7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludC52YWx1ZS5zZXQocG9pbnRlclV2LngsIHBvaW50ZXJVdi55KTsKCQkJCXNwbGF0VW5pZm9ybXMudVBvaW50VmFsdWUudmFsdWUuc2V0KAoJCQkJCXBvaW50ZXJTdGF0ZS5keCwKCQkJCQktcG9pbnRlclN0YXRlLmR5LAoJCQkJCTEsCgkJCQkpOwoJCQkJc3BsYXRVbmlmb3Jtcy51UG9pbnRTaXplLnZhbHVlID0gcG9pbnRlclNpemU7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgdmVsb2NpdHkud3JpdGUpOwoJCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJCXNwbGF0VW5pZm9ybXMudUlucHV0LnZhbHVlID0gZGVuc2l0eS5yZWFkLnRleHR1cmU7CgkJCQlzcGxhdFVuaWZvcm1zLnVQb2ludFZhbHVlLnZhbHVlLnNldCgKCQkJCQlzcGxhdENvbG9yLngsCgkJCQkJc3BsYXRDb2xvci55LAoJCQkJCXNwbGF0Q29sb3IueiwKCQkJCSk7CgkJCQlyZW5kZXJQYXNzKHNwbGF0UHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCQlkZW5zaXR5LnN3YXAoKTsKCgkJCQlpZiAoIXByZXZpZXdTdGF0ZS5lbmFibGVkKSB7CgkJCQkJcG9pbnRlclN0YXRlLm1vdmVkID0gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCWRpdmVyZ2VuY2VVbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXJlbmRlclBhc3MoZGl2ZXJnZW5jZVByb2dyYW0sIGRpdmVyZ2VuY2UpOwoKCQkJcHJlc3N1cmVVbmlmb3Jtcy51RGl2ZXJnZW5jZS52YWx1ZSA9IGRpdmVyZ2VuY2UudGV4dHVyZTsKCQkJY29uc3QgaXRlcmF0aW9ucyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocHJlc3N1cmVJdGVyYXRpb25zKSk7CgkJCWZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CgkJCQlwcmVzc3VyZVVuaWZvcm1zLnVQcmVzc3VyZS52YWx1ZSA9IHByZXNzdXJlLnJlYWQudGV4dHVyZTsKCQkJCXJlbmRlclBhc3MocHJlc3N1cmVQcm9ncmFtLCBwcmVzc3VyZS53cml0ZSk7CgkJCQlwcmVzc3VyZS5zd2FwKCk7CgkJCX0KCgkJCWdyYWRpZW50U3VidHJhY3RVbmlmb3Jtcy51UHJlc3N1cmUudmFsdWUgPSBwcmVzc3VyZS5yZWFkLnRleHR1cmU7CgkJCWdyYWRpZW50U3VidHJhY3RVbmlmb3Jtcy51VmVsb2NpdHkudmFsdWUgPSB2ZWxvY2l0eS5yZWFkLnRleHR1cmU7CgkJCXJlbmRlclBhc3MoZ3JhZGllbnRTdWJ0cmFjdFByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUR0LnZhbHVlID0gZHQ7CgkJCWFkdmVjdGlvblVuaWZvcm1zLnVWZWxvY2l0eS52YWx1ZSA9IHZlbG9jaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudUlucHV0LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51RGlzc2lwYXRpb24udmFsdWUgPSB2ZWxvY2l0eURpc3NpcGF0aW9uOwoJCQlyZW5kZXJQYXNzKGFkdmVjdGlvblByb2dyYW0sIHZlbG9jaXR5LndyaXRlKTsKCQkJdmVsb2NpdHkuc3dhcCgpOwoKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudVZlbG9jaXR5LnZhbHVlID0gdmVsb2NpdHkucmVhZC50ZXh0dXJlOwoJCQlhZHZlY3Rpb25Vbmlmb3Jtcy51SW5wdXQudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJYWR2ZWN0aW9uVW5pZm9ybXMudURpc3NpcGF0aW9uLnZhbHVlID0gZGlzc2lwYXRpb247CgkJCXJlbmRlclBhc3MoYWR2ZWN0aW9uUHJvZ3JhbSwgZGVuc2l0eS53cml0ZSk7CgkJCWRlbnNpdHkuc3dhcCgpOwoKCQkJb3V0cHV0VW5pZm9ybXMudVRleHR1cmUudmFsdWUgPSBkZW5zaXR5LnJlYWQudGV4dHVyZTsKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmU6IG91dHB1dE1lc2gsIGNsZWFyOiB0cnVlIH0pOwoKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVQb2ludGVyTW92ZSk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVUb3VjaE1vdmUpOwoKCQkJZGlzcG9zZVRhcmdldChkZW5zaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KGRlbnNpdHkud3JpdGUpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LnJlYWQpOwoJCQlkaXNwb3NlVGFyZ2V0KHZlbG9jaXR5LndyaXRlKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS5yZWFkKTsKCQkJZGlzcG9zZVRhcmdldChwcmVzc3VyZS53cml0ZSk7CgkJCWRpc3Bvc2VUYXJnZXQoZGl2ZXJnZW5jZSk7CgoJCQlhZHZlY3Rpb25Qcm9ncmFtLnJlbW92ZSgpOwoJCQlkaXZlcmdlbmNlUHJvZ3JhbS5yZW1vdmUoKTsKCQkJcHJlc3N1cmVQcm9ncmFtLnJlbW92ZSgpOwoJCQlncmFkaWVudFN1YnRyYWN0UHJvZ3JhbS5yZW1vdmUoKTsKCQkJc3BsYXRQcm9ncmFtLnJlbW92ZSgpOwoJCQlvdXRwdXRQcm9ncmFtLnJlbW92ZSgpOwoJCQl0cmlhbmdsZS5yZW1vdmUoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", "components/glass-pane/GlassPane.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9HbGFzc1BhbmVTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi9kaXN0b3J0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogU2NlbmVQcm9wc1siZGlzdG9ydGlvbiJdOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBjaHJvbWF0aWMgYWJlcnJhdGlvbiAoY29sb3Igc3BsaXR0aW5nKS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCWNocm9tYXRpY0FiZXJyYXRpb24/OiBTY2VuZVByb3BzWyJjaHJvbWF0aWNBYmVycmF0aW9uIl07CgkJLyoqCgkJICogU3BlZWQgb2YgdGhlIHdhdmUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBBbXBsaXR1ZGUgb2YgdGhlIHdhdmUgZGlzdG9ydGlvbi4KCQkgKiBAZGVmYXVsdCAwLjA1CgkJICovCgkJd2F2aW5lc3M/OiBTY2VuZVByb3BzWyJ3YXZpbmVzcyJdOwoJCS8qKgoJCSAqIEZyZXF1ZW5jeSBvZiB0aGUgd2F2ZSBkaXN0b3J0aW9uLgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWZyZXF1ZW5jeT86IFNjZW5lUHJvcHNbImZyZXF1ZW5jeSJdOwoJCS8qKgoJCSAqIE51bWJlci9kZW5zaXR5IG9mIHRoZSBnbGFzcyByb2RzLgoJCSAqIEBkZWZhdWx0IDUuMAoJCSAqLwoJCXJvZHM/OiBTY2VuZVByb3BzWyJyb2RzIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAwLjAwNSwKCQlzcGVlZCA9IDEuMCwKCQl3YXZpbmVzcyA9IDAuMDUsCgkJZnJlcXVlbmN5ID0gNi4wLAoJCXJvZHMgPSA1LjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtpbWFnZX0KCQkJe2Rpc3RvcnRpb259CgkJCXtjaHJvbWF0aWNBYmVycmF0aW9ufQoJCQl7c3BlZWR9CgkJCXt3YXZpbmVzc30KCQkJe2ZyZXF1ZW5jeX0KCQkJe3JvZHN9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", "components/glass-pane/GlassPaneScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi9kaXN0b3J0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBjaHJvbWF0aWMgYWJlcnJhdGlvbiAoY29sb3Igc3BsaXR0aW5nKS4KCQkgKiBAZGVmYXVsdCAwLjAwNQoJCSAqLwoJCWNocm9tYXRpY0FiZXJyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogU3BlZWQgb2YgdGhlIHdhdmUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtcGxpdHVkZSBvZiB0aGUgd2F2ZSBkaXN0b3J0aW9uLgoJCSAqIEBkZWZhdWx0IDAuMDUKCQkgKi8KCQl3YXZpbmVzcz86IG51bWJlcjsKCQkvKioKCQkgKiBGcmVxdWVuY3kgb2YgdGhlIHdhdmUgZGlzdG9ydGlvbi4KCQkgKiBAZGVmYXVsdCA2LjAKCQkgKi8KCQlmcmVxdWVuY3k/OiBudW1iZXI7CgkJLyoqCgkJICogRGVuc2l0eSBvZiB0aGUgZ2xhc3Mgcm9kcy4KCQkgKiBAZGVmYXVsdCA1LjAKCQkgKi8KCQlyb2RzPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJaW1hZ2UsCgkJZGlzdG9ydGlvbiA9IDEuMCwKCQljaHJvbWF0aWNBYmVycmF0aW9uID0gMC4wMDUsCgkJc3BlZWQgPSAxLjAsCgkJd2F2aW5lc3MgPSAwLjA1LAoJCWZyZXF1ZW5jeSA9IDYuMCwKCQlyb2RzID0gNS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIFVuaWZvcm1TdGF0ZSA9IHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGV4dHVyZVNpemU6IHsgdmFsdWU6IFZlYzIgfTsKCQl1VGV4dHVyZTogeyB2YWx1ZTogVGV4dHVyZSB9OwoJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Q2hyb21hdGljQWJlcnJhdGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVdhdmluZXNzOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RnJlcXVlbmN5OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Um9kczogeyB2YWx1ZTogbnVtYmVyIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8VW5pZm9ybVN0YXRlPigpOwoJbGV0IHNldEltYWdlU291cmNlID0gJHN0YXRlPChzb3VyY2U6IHN0cmluZykgPT4gdm9pZD4oKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMiB1VGV4dHVyZVNpemU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7CgkJdW5pZm9ybSBmbG9hdCB1RGlzdG9ydGlvbjsKCQl1bmlmb3JtIGZsb2F0IHVDaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdVdhdmluZXNzOwoJCXVuaWZvcm0gZmxvYXQgdUZyZXF1ZW5jeTsKCQl1bmlmb3JtIGZsb2F0IHVSb2RzOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZlYzIgbWlycm9yZWQodmVjMiB2YWx1ZSkgewoJCQl2ZWMyIG0gPSBtb2QodmFsdWUsIDIuMCk7CgkJCXJldHVybiBtaXgobSwgMi4wIC0gbSwgc3RlcCgxLjAsIG0pKTsKCQl9CgoJCXZlYzIgZ2V0Q292ZXJVVih2ZWMyIHV2LCB2ZWMyIHRleHR1cmVTaXplKSB7CgkJCXZlYzIgc2FmZVRleHR1cmUgPSBtYXgodGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7CgkJCXZlYzIgcyA9IHVSZXNvbHV0aW9uIC8gc2FmZVRleHR1cmU7CgkJCWZsb2F0IHNjYWxlID0gbWF4KHMueCwgcy55KTsKCQkJdmVjMiBzY2FsZWRTaXplID0gc2FmZVRleHR1cmUgKiBzY2FsZTsKCQkJdmVjMiBvZmZzZXQgPSAodVJlc29sdXRpb24gLSBzY2FsZWRTaXplKSAqIDAuNTsKCQkJcmV0dXJuICh1diAqIHVSZXNvbHV0aW9uIC0gb2Zmc2V0KSAvIHNjYWxlZFNpemU7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzIgcCA9ICh2VXYgKiAyLjAgLSAxLjApOwoJCQlwLnggKj0gdVJlc29sdXRpb24ueCAvIHVSZXNvbHV0aW9uLnk7CgoJCQlmbG9hdCBhbmdsZSA9IHJhZGlhbnMoNDUuMCk7CgkJCW1hdDIgcm90ID0gbWF0Mihjb3MoYW5nbGUpLCAtc2luKGFuZ2xlKSwgc2luKGFuZ2xlKSwgY29zKGFuZ2xlKSk7CgkJCXZlYzIgcF9yb3QgPSByb3QgKiBwOwoKCQkJZmxvYXQgd2F2ZSA9IHVXYXZpbmVzcyAqIHNpbihwX3JvdC55ICogdUZyZXF1ZW5jeSk7CgkJCWZsb2F0IHJvZF94ID0gZnJhY3QoKHBfcm90LnggKyB3YXZlKSAqIHVSb2RzKSAqIDIuMCAtIDEuMDsKCgkJCWZsb2F0IHJvZF96X3NxID0gMS4wIC0gcm9kX3ggKiByb2RfeDsKCQkJZmxvYXQgcm9kX3ogPSBzcXJ0KG1heChyb2Rfel9zcSwgMC4wKSk7CgoJCQl2ZWMzIG4gPSB2ZWMzKHJvZF94LCAwLjAsIC1yb2Rfeik7CgkJCXZlYzMgcmQgPSB2ZWMzKDAuMCwgMC4wLCAtMS4wKTsKCQkJZmxvYXQgcmVmcmFjdGl2ZV9pbmRleCA9IDAuNjsKCQkJdmVjMyByZWZyYWN0ZWRfcmF5ID0gbWl4KG4sIHJkLCByZWZyYWN0aXZlX2luZGV4KTsKCgkJCWZsb2F0IHpfZGlzdCA9IDAuNSAvIChhYnMocmVmcmFjdGVkX3JheS56KSArIDAuMDAxKTsKCQkJdmVjMyBoaXRfcG9zID0gdmVjMyhwX3JvdCwgMC4wKSArICh6X2Rpc3QgKiB1RGlzdG9ydGlvbikgKiByZWZyYWN0ZWRfcmF5OwoKCQkJbWF0MiByb3RfaW52ID0gbWF0Mihjb3MoLWFuZ2xlKSwgLXNpbigtYW5nbGUpLCBzaW4oLWFuZ2xlKSwgY29zKC1hbmdsZSkpOwoJCQl2ZWMyIHV2X2hpdCA9IHJvdF9pbnYgKiBoaXRfcG9zLnh5OwoKCQkJdXZfaGl0LnggLz0gKHVSZXNvbHV0aW9uLnggLyB1UmVzb2x1dGlvbi55KTsKCQkJdXZfaGl0ID0gdXZfaGl0ICogMC41ICsgMC41OwoKCQkJdmVjMiBjb3ZlclV2ID0gZ2V0Q292ZXJVVih1dl9oaXQsIHVUZXh0dXJlU2l6ZSk7CgoJCQlmbG9hdCB0ID0gdVRpbWUgKiAwLjE7CgkJCXZlYzIgZmxvdyA9IHZlYzIoc2luKHQpLCBjb3ModCAqIDAuOCkpICogMC4wNTsKCQkJZmxvYXQgZGlzcGVyc2lvbiA9IHVDaHJvbWF0aWNBYmVycmF0aW9uOwoKCQkJdmVjMiBjb3ZlclV2RmxvdyA9IG1pcnJvcmVkKGNvdmVyVXYgKyBmbG93KTsKCQkJZmxvYXQgciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgbWlycm9yZWQoY292ZXJVdkZsb3cgKyB2ZWMyKGRpc3BlcnNpb24sIDAuMCkpKS5yOwoJCQlmbG9hdCBnID0gdGV4dHVyZTJEKHVUZXh0dXJlLCBjb3ZlclV2RmxvdykuZzsKCQkJZmxvYXQgYiA9IHRleHR1cmUyRCh1VGV4dHVyZSwgbWlycm9yZWQoY292ZXJVdkZsb3cgLSB2ZWMyKGRpc3BlcnNpb24sIDAuMCkpKS5iOwoKCQkJZmxvYXQgZ19mYWN0b3IgPSAxLjAgLSBhYnMobi56KTsKCQkJZ19mYWN0b3IgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBnX2ZhY3Rvcik7CgkJCWZsb2F0IGdsYXNzID0gZ19mYWN0b3IgKiAwLjAwMjU7CgoJCQl2ZWMzIGZpbmFsQ29sb3IgPSB2ZWMzKHIsIGcsIGIpICsgZ2xhc3M7CgkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZmluYWxDb2xvciwgMS4wKTsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQl1bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJdW5pZm9ybXMudUNocm9tYXRpY0FiZXJyYXRpb24udmFsdWUgPSBjaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm1zLnVXYXZpbmVzcy52YWx1ZSA9IHdhdmluZXNzOwoJCXVuaWZvcm1zLnVGcmVxdWVuY3kudmFsdWUgPSBmcmVxdWVuY3k7CgkJdW5pZm9ybXMudVJvZHMudmFsdWUgPSByb2RzOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRJbWFnZVNvdXJjZSkgcmV0dXJuOwoJCXNldEltYWdlU291cmNlKGltYWdlKTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbWFnZVRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDI1NV0pLAoJCQl3aWR0aDogMSwKCQkJaGVpZ2h0OiAxLAoJCQlmb3JtYXQ6IGdsLlJHQkEsCgkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQltYWdGaWx0ZXI6IGdsLkxJTkVBUiwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1VGV4dHVyZTogeyB2YWx1ZTogaW1hZ2VUZXh0dXJlIH0sCgkJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBkaXN0b3J0aW9uIH0sCgkJCXVDaHJvbWF0aWNBYmVycmF0aW9uOiB7IHZhbHVlOiBjaHJvbWF0aWNBYmVycmF0aW9uIH0sCgkJCXVXYXZpbmVzczogeyB2YWx1ZTogd2F2aW5lc3MgfSwKCQkJdUZyZXF1ZW5jeTogeyB2YWx1ZTogZnJlcXVlbmN5IH0sCgkJCXVSb2RzOiB7IHZhbHVlOiByb2RzIH0sCgkJfTsKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWxldCBpbWFnZVRva2VuID0gMDsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGltYWdlVG9rZW47CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZVNpemUudmFsdWUuc2V0KAoJCQkJCWltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoIHx8IDEsCgkJCQkJaW1nLm5hdHVyYWxIZWlnaHQgfHwgaW1nLmhlaWdodCB8fCAxLAoJCQkJKTsKCQkJfTsKCQkJaW1nLnNyYyA9IHNvdXJjZTsKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhICogc3BlZWQ7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/glass-slideshow/GlassSlideshow.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9HbGFzc1NsaWRlc2hvd1NjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZSBVUkxzIHRvIGN5Y2xlIHRocm91Z2guCgkJICovCgkJaW1hZ2VzOiBTY2VuZVByb3BzWyJpbWFnZXMiXTsKCQkvKioKCQkgKiBUaGUgY3VycmVudCBpbWFnZSBpbmRleC4gQ2hhbmdlIHRoaXMgdG8gdHJpZ2dlciBhIHRyYW5zaXRpb24uCgkJICogQGRlZmF1bHQgMAoJCSAqLwoJCWluZGV4PzogU2NlbmVQcm9wc1siaW5kZXgiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGluIG1pbGxpc2Vjb25kcy4KCQkgKiBAZGVmYXVsdCAyMDAwCgkJICovCgkJdHJhbnNpdGlvbkR1cmF0aW9uPzogU2NlbmVQcm9wc1sidHJhbnNpdGlvbkR1cmF0aW9uIl07CgkJLyoqCgkJICogSW50ZW5zaXR5IG9mIHRoZSBnbGFzcyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgY2hyb21hdGljIGFiZXJyYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IFNjZW5lUHJvcHNbImNocm9tYXRpY0FiZXJyYXRpb24iXTsKCQkvKioKCQkgKiBTdHJlbmd0aCBvZiB0aGUgcmVmcmFjdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlyZWZyYWN0aW9uPzogU2NlbmVQcm9wc1sicmVmcmFjdGlvbiJdOwoJCS8qKgoJCSAqIEF1dG9tYXRpY2FsbHkgY3ljbGUgdGhyb3VnaCB0aGUgcHJvdmlkZWQgaW1hZ2VzLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvcGxheT86IGJvb2xlYW47CgkJLyoqCgkJICogRGVsYXkgYmV0d2VlbiBhdXRvbWF0aWMgdHJhbnNpdGlvbnMgaW4gbWlsbGlzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDUwMDAKCQkgKi8KCQlhdXRvcGxheUludGVydmFsPzogbnVtYmVyOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQlpbWFnZXMsCgkJaW5kZXggPSAwLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQl0cmFuc2l0aW9uRHVyYXRpb24gPSAyMDAwLAoJCWludGVuc2l0eSA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAxLjAsCgkJcmVmcmFjdGlvbiA9IDEuMCwKCQlhdXRvcGxheSA9IHRydWUsCgkJYXV0b3BsYXlJbnRlcnZhbCA9IDUwMDAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgYXV0b3BsYXlJbmRleCA9ICRzdGF0ZSgwKTsKCWxldCBoYXNJbml0aWFsaXplZEF1dG9wbGF5SW5kZXggPSBmYWxzZTsKCgljb25zdCBjdXJyZW50SW5kZXggPSAkZGVyaXZlZChhdXRvcGxheSA/IGF1dG9wbGF5SW5kZXggOiBpbmRleCk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKGhhc0luaXRpYWxpemVkQXV0b3BsYXlJbmRleCkgewoJCQlyZXR1cm47CgkJfQoKCQlhdXRvcGxheUluZGV4ID0gaW5kZXg7CgkJaGFzSW5pdGlhbGl6ZWRBdXRvcGxheUluZGV4ID0gdHJ1ZTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsID0gaW1hZ2VzLmxlbmd0aDsKCgkJaWYgKHRvdGFsID09PSAwKSB7CgkJCWlmIChhdXRvcGxheUluZGV4ICE9PSAwKSB7CgkJCQlhdXRvcGxheUluZGV4ID0gMDsKCQkJfQoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBub3JtYWxpemVkID0gKChhdXRvcGxheUluZGV4ICUgdG90YWwpICsgdG90YWwpICUgdG90YWw7CgoJCWlmIChub3JtYWxpemVkICE9PSBhdXRvcGxheUluZGV4KSB7CgkJCWF1dG9wbGF5SW5kZXggPSBub3JtYWxpemVkOwoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghYXV0b3BsYXkpIHsKCQkJY29uc3QgdG90YWwgPSBpbWFnZXMubGVuZ3RoOwoJCQlpZiAodG90YWwgPT09IDApIHsKCQkJCWlmIChhdXRvcGxheUluZGV4ICE9PSAwKSB7CgkJCQkJYXV0b3BsYXlJbmRleCA9IDA7CgkJCQl9CgkJCQlyZXR1cm47CgkJCX0KCgkJCWNvbnN0IG5vcm1hbGl6ZWQgPSAoKGluZGV4ICUgdG90YWwpICsgdG90YWwpICUgdG90YWw7CgkJCWlmIChub3JtYWxpemVkICE9PSBhdXRvcGxheUluZGV4KSB7CgkJCQlhdXRvcGxheUluZGV4ID0gbm9ybWFsaXplZDsKCQkJfQoJCX0KCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsID0gaW1hZ2VzLmxlbmd0aDsKCQljb25zdCBpc0F1dG9wbGF5aW5nID0gYXV0b3BsYXkgJiYgdG90YWwgPiAxOwoJCWNvbnN0IGRlbGF5ID0gTWF0aC5tYXgoYXV0b3BsYXlJbnRlcnZhbCwgMCk7CgoJCWlmICghaXNBdXRvcGxheWluZykgewoJCQlyZXR1cm47CgkJfQoKCQljb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKCQkJY29uc3QgbGVuZ3RoID0gaW1hZ2VzLmxlbmd0aDsKCQkJaWYgKGxlbmd0aCA9PT0gMCkgewoJCQkJYXV0b3BsYXlJbmRleCA9IDA7CgkJCQlyZXR1cm47CgkJCX0KCQkJYXV0b3BsYXlJbmRleCA9IChhdXRvcGxheUluZGV4ICsgMSkgJSBsZW5ndGg7CgkJfSwgZGVsYXkgfHwgMSk7CgoJCXJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYgY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9IHsuLi5yZXN0fT4KCTxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4KCQk8U2NlbmUKCQkJe2ltYWdlc30KCQkJaW5kZXg9e2N1cnJlbnRJbmRleH0KCQkJe3RyYW5zaXRpb25EdXJhdGlvbn0KCQkJe2ludGVuc2l0eX0KCQkJe2Rpc3RvcnRpb259CgkJCXtjaHJvbWF0aWNBYmVycmF0aW9ufQoJCQl7cmVmcmFjdGlvbn0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/glass-slideshow/GlassSlideshowScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbkRlc3Ryb3ksIG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsKCQlDYW1lcmEsCgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlcmVyLAoJCVRleHR1cmUsCgkJVHJhbnNmb3JtLAoJCVRyaWFuZ2xlLAoJCVZlYzIsCgl9IGZyb20gIm9nbCI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqIEFycmF5IG9mIGltYWdlIFVSTHMgdXNlZCBmb3IgdGV4dHVyZXMuICovCgkJaW1hZ2VzOiBzdHJpbmdbXTsKCQkvKiogSW5kZXggb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW1hZ2UuICovCgkJaW5kZXg/OiBudW1iZXI7CgkJLyoqIER1cmF0aW9uIG9mIGEgc2luZ2xlIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzLiAqLwoJCXRyYW5zaXRpb25EdXJhdGlvbj86IG51bWJlcjsKCQkvKiogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyIGZvciB0aGUgc2hhZGVyIGVmZmVjdC4gKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7CgkJLyoqIERpc3RvcnRpb24gc3RyZW5ndGggYXBwbGllZCBkdXJpbmcgdHJhbnNpdGlvbnMuICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKiogQ2hyb21hdGljIGFiZXJyYXRpb24gc3RyZW5ndGggZm9yIHRoZSBzaGFkZXIuICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IG51bWJlcjsKCQkvKiogUmVmcmFjdGlvbiBzdHJlbmd0aCBmb3IgdGhlIHNoYWRlci4gKi8KCQlyZWZyYWN0aW9uPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCWluZGV4ID0gMCwKCQl0cmFuc2l0aW9uRHVyYXRpb24gPSAyMDAwLAoJCWludGVuc2l0eSA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAxLjAsCgkJcmVmcmFjdGlvbiA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCglsZXQgcHJvZ3Jlc3MgPSAkc3RhdGUoeyB2YWx1ZTogMCB9KTsKCWxldCBjdXJyZW50SW5kZXggPSAkc3RhdGUoMCk7CglsZXQgbmV4dEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzVHJhbnNpdGlvbmluZyA9ICRzdGF0ZShmYWxzZSk7CgoJbGV0IHNldEltYWdlU291cmNlcyA9ICRzdGF0ZTwoc291cmNlczogc3RyaW5nW10pID0+IHZvaWQ+KCk7CglsZXQgc2V0VW5pZm9ybVBhcmFtcyA9ICRzdGF0ZTwKCQkobmV4dDogewoJCQlpbnRlbnNpdHk6IG51bWJlcjsKCQkJZGlzdG9ydGlvbjogbnVtYmVyOwoJCQljaHJvbWF0aWNBYmVycmF0aW9uOiBudW1iZXI7CgkJCXJlZnJhY3Rpb246IG51bWJlcjsKCQl9KSA9PiB2b2lkCgk+KCk7CgoJb25EZXN0cm95KCgpID0+IHsKCQlnc2FwLmtpbGxUd2VlbnNPZihwcm9ncmVzcyk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCB0b3RhbEltYWdlcyA9IGltYWdlcy5sZW5ndGg7CgoJCWlmICh0b3RhbEltYWdlcyA9PT0gMCkgewoJCQlpZiAoY3VycmVudEluZGV4ICE9PSAwKSBjdXJyZW50SW5kZXggPSAwOwoJCQlpZiAobmV4dEluZGV4ICE9PSAwKSBuZXh0SW5kZXggPSAwOwoJCQlpc1RyYW5zaXRpb25pbmcgPSBmYWxzZTsKCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQlnc2FwLmtpbGxUd2VlbnNPZihwcm9ncmVzcyk7CgkJCXJldHVybjsKCQl9CgoJCWNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50ID0gKChjdXJyZW50SW5kZXggJSB0b3RhbEltYWdlcykgKyB0b3RhbEltYWdlcykgJSB0b3RhbEltYWdlczsKCQljb25zdCBub3JtYWxpemVkTmV4dCA9ICgobmV4dEluZGV4ICUgdG90YWxJbWFnZXMpICsgdG90YWxJbWFnZXMpICUgdG90YWxJbWFnZXM7CgkJaWYgKG5vcm1hbGl6ZWRDdXJyZW50ICE9PSBjdXJyZW50SW5kZXgpIGN1cnJlbnRJbmRleCA9IG5vcm1hbGl6ZWRDdXJyZW50OwoJCWlmIChub3JtYWxpemVkTmV4dCAhPT0gbmV4dEluZGV4KSBuZXh0SW5kZXggPSBub3JtYWxpemVkTmV4dDsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsSW1hZ2VzID0gaW1hZ2VzLmxlbmd0aDsKCQlpZiAodG90YWxJbWFnZXMgPT09IDApIHJldHVybjsKCgkJY29uc3Qgbm9ybWFsaXplZEluZGV4ID0gKChpbmRleCAlIHRvdGFsSW1hZ2VzKSArIHRvdGFsSW1hZ2VzKSAlIHRvdGFsSW1hZ2VzOwoKCQlpZiAobm9ybWFsaXplZEluZGV4ID09PSBjdXJyZW50SW5kZXggfHwgaXNUcmFuc2l0aW9uaW5nKSB7CgkJCXJldHVybjsKCQl9CgoJCWdzYXAua2lsbFR3ZWVuc09mKHByb2dyZXNzKTsKCQlwcm9ncmVzcy52YWx1ZSA9IDA7CgkJaXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTsKCQluZXh0SW5kZXggPSBub3JtYWxpemVkSW5kZXg7CgoJCWdzYXAudG8ocHJvZ3Jlc3MsIHsKCQkJdmFsdWU6IDEsCgkJCWR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24gLyAxMDAwLAoJCQllYXNlOiAicG93ZXIzLmluT3V0IiwKCQkJb25Db21wbGV0ZTogKCkgPT4gewoJCQkJY3VycmVudEluZGV4ID0gbmV4dEluZGV4OwoJCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQkJaXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7CgkJCX0sCgkJfSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlcykgcmV0dXJuOwoJCXNldEltYWdlU291cmNlcyhpbWFnZXMpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRVbmlmb3JtUGFyYW1zKSByZXR1cm47CgkJc2V0VW5pZm9ybVBhcmFtcyh7CgkJCWludGVuc2l0eSwKCQkJZGlzdG9ydGlvbiwKCQkJY2hyb21hdGljQWJlcnJhdGlvbiwKCQkJcmVmcmFjdGlvbiwKCQl9KTsKCX0pOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTE7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmUyOwoJCXVuaWZvcm0gZmxvYXQgdVByb2dyZXNzOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdVRleHR1cmUxU2l6ZTsKCQl1bmlmb3JtIHZlYzIgdVRleHR1cmUyU2l6ZTsKCgkJdW5pZm9ybSBmbG9hdCB1R2xvYmFsSW50ZW5zaXR5OwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb25TdHJlbmd0aDsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZE11bHRpcGxpZXI7CgkJdW5pZm9ybSBmbG9hdCB1Q29sb3JFbmhhbmNlbWVudDsKCgkJdW5pZm9ybSBmbG9hdCB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdUdsYXNzQnViYmxlQ2xhcml0eTsKCQl1bmlmb3JtIGZsb2F0IHVHbGFzc0VkZ2VHbG93OwoJCXVuaWZvcm0gZmxvYXQgdUdsYXNzTGlxdWlkRmxvdzsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMyBzcmdiVG9MaW5lYXIodmVjMyBjb2xvcikgewoJCQl2ZWMzIGxvdyA9IGNvbG9yIC8gMTIuOTI7CgkJCXZlYzMgaGlnaCA9IHBvdygoY29sb3IgKyAwLjA1NSkgLyAxLjA1NSwgdmVjMygyLjQpKTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wNDA0NSksIGNvbG9yKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyB0ZXh0dXJlU2l6ZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCWZsb2F0IG5vaXNlKHZlYzIgcCkgewoJCQlyZXR1cm4gZnJhY3Qoc2luKGRvdChwLCB2ZWMyKDEyNy4xLCAzMTEuNykpKSAqIDQzNzU4LjU0NTMpOwoJCX0KCgkJZmxvYXQgc21vb3RoTm9pc2UodmVjMiBwKSB7CgkJCXZlYzIgaSA9IGZsb29yKHApOwoJCQl2ZWMyIGYgPSBmcmFjdChwKTsKCQkJZiA9IGYgKiBmICogKDMuMCAtIDIuMCAqIGYpOwoKCQkJcmV0dXJuIG1peCgKCQkJCW1peChub2lzZShpKSwgbm9pc2UoaSArIHZlYzIoMS4wLCAwLjApKSwgZi54KSwKCQkJCW1peChub2lzZShpICsgdmVjMigwLjAsIDEuMCkpLCBub2lzZShpICsgdmVjMigxLjAsIDEuMCkpLCBmLngpLAoJCQkJZi55CgkJCSk7CgkJfQoKCQl2ZWM0IHNhbXBsZUxpbmVhcihzYW1wbGVyMkQgdGV4LCB2ZWMyIHV2KSB7CgkJCXZlYzQgYyA9IHRleHR1cmUyRCh0ZXgsIHV2KTsKCQkJcmV0dXJuIHZlYzQoc3JnYlRvTGluZWFyKGMucmdiKSwgYy5hKTsKCQl9CgoJCXZlYzQgZ2xhc3NFZmZlY3QodmVjMiB1diwgZmxvYXQgcHJvZ3Jlc3MpIHsKCQkJZmxvYXQgZ2xhc3NTdHJlbmd0aCA9IDAuMDggKiB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGggKiB1RGlzdG9ydGlvblN0cmVuZ3RoICogdUdsb2JhbEludGVuc2l0eTsKCQkJZmxvYXQgY2hyb21hdGljQWJlcnJhdGlvbiA9IDAuMDIgKiB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uICogdUdsb2JhbEludGVuc2l0eTsKCQkJZmxvYXQgd2F2ZURpc3RvcnRpb24gPSAwLjAyNSAqIHVEaXN0b3J0aW9uU3RyZW5ndGg7CgkJCWZsb2F0IGNsZWFyQ2VudGVyU2l6ZSA9IDAuMyAqIHVHbGFzc0J1YmJsZUNsYXJpdHk7CgkJCWZsb2F0IHN1cmZhY2VSaXBwbGVzID0gMC4wMDQgKiB1RGlzdG9ydGlvblN0cmVuZ3RoOwoJCQlmbG9hdCBsaXF1aWRGbG93ID0gMC4wMTUgKiB1R2xhc3NMaXF1aWRGbG93ICogdVNwZWVkTXVsdGlwbGllcjsKCQkJZmxvYXQgcmltTGlnaHRXaWR0aCA9IDAuMDU7CgkJCWZsb2F0IGdsYXNzRWRnZVdpZHRoID0gMC4wMjU7CgoJCQlmbG9hdCBicmlnaHRuZXNzUGhhc2UgPSBzbW9vdGhzdGVwKDAuOCwgMS4wLCBwcm9ncmVzcyk7CgkJCWZsb2F0IHJpbUxpZ2h0SW50ZW5zaXR5ID0gMC4wOCAqICgxLjAgLSBicmlnaHRuZXNzUGhhc2UpICogdUdsYXNzRWRnZUdsb3cgKiB1R2xvYmFsSW50ZW5zaXR5OwoJCQlmbG9hdCBnbGFzc0VkZ2VPcGFjaXR5ID0gMC4wNiAqICgxLjAgLSBicmlnaHRuZXNzUGhhc2UpICogdUdsYXNzRWRnZUdsb3c7CgoJCQl2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOwoJCQl2ZWMyIHAgPSB1diAqIHVSZXNvbHV0aW9uOwoKCQkJdmVjMiB1djEgPSBnZXRDb3ZlclVWKHV2LCB1VGV4dHVyZTFTaXplKTsKCQkJdmVjMiB1djJfYmFzZSA9IGdldENvdmVyVVYodXYsIHVUZXh0dXJlMlNpemUpOwoKCQkJZmxvYXQgbWF4UmFkaXVzID0gbGVuZ3RoKHVSZXNvbHV0aW9uKSAqIDAuODU7CgkJCWZsb2F0IGJ1YmJsZVJhZGl1cyA9IHByb2dyZXNzICogbWF4UmFkaXVzOwoJCQl2ZWMyIHNwaGVyZUNlbnRlciA9IGNlbnRlciAqIHVSZXNvbHV0aW9uOwoKCQkJZmxvYXQgZGlzdCA9IGxlbmd0aChwIC0gc3BoZXJlQ2VudGVyKTsKCQkJZmxvYXQgbm9ybWFsaXplZERpc3QgPSBkaXN0IC8gbWF4KGJ1YmJsZVJhZGl1cywgMC4wMDEpOwoJCQl2ZWMyIGRpcmVjdGlvbiA9IChkaXN0ID4gMC4wKSA/IChwIC0gc3BoZXJlQ2VudGVyKSAvIGRpc3QgOiB2ZWMyKDAuMCk7CgkJCWZsb2F0IGluc2lkZSA9IHNtb290aHN0ZXAoYnViYmxlUmFkaXVzICsgMy4wLCBidWJibGVSYWRpdXMgLSAzLjAsIGRpc3QpOwoKCQkJZmxvYXQgZGlzdGFuY2VGYWN0b3IgPSBzbW9vdGhzdGVwKGNsZWFyQ2VudGVyU2l6ZSwgMS4wLCBub3JtYWxpemVkRGlzdCk7CgkJCWZsb2F0IHRpbWUgPSBwcm9ncmVzcyAqIDUuMCAqIHVTcGVlZE11bHRpcGxpZXI7CgoJCQl2ZWMyIGxpcXVpZFN1cmZhY2UgPSB2ZWMyKAoJCQkJc21vb3RoTm9pc2UodXYgKiAxMDAuMCArIHRpbWUgKiAwLjMpLAoJCQkJc21vb3RoTm9pc2UodXYgKiAxMDAuMCArIHRpbWUgKiAwLjIgKyA1MC4wKQoJCQkpIC0gMC41OwoJCQlsaXF1aWRTdXJmYWNlICo9IHN1cmZhY2VSaXBwbGVzICogZGlzdGFuY2VGYWN0b3I7CgoJCQl2ZWMyIGRpc3RvcnRlZFVWID0gdXYyX2Jhc2U7CgkJCWlmIChpbnNpZGUgPiAwLjApIHsKCQkJCWZsb2F0IHJlZnJhY3Rpb25PZmZzZXQgPSBnbGFzc1N0cmVuZ3RoICogcG93KGRpc3RhbmNlRmFjdG9yLCAxLjUpOwoJCQkJdmVjMiBmbG93RGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbiArIHZlYzIoc2luKHRpbWUpLCBjb3ModGltZSAqIDAuNykpICogMC4zKTsKCQkJCWRpc3RvcnRlZFVWIC09IGZsb3dEaXJlY3Rpb24gKiByZWZyYWN0aW9uT2Zmc2V0OwoKCQkJCWZsb2F0IHdhdmUxID0gc2luKG5vcm1hbGl6ZWREaXN0ICogMjIuMCAtIHRpbWUgKiAzLjUpOwoJCQkJZmxvYXQgd2F2ZTIgPSBzaW4obm9ybWFsaXplZERpc3QgKiAzNS4wICsgdGltZSAqIDIuOCkgKiAwLjc7CgkJCQlmbG9hdCB3YXZlMyA9IHNpbihub3JtYWxpemVkRGlzdCAqIDUwLjAgLSB0aW1lICogNC4yKSAqIDAuNTsKCQkJCWZsb2F0IGNvbWJpbmVkV2F2ZSA9ICh3YXZlMSArIHdhdmUyICsgd2F2ZTMpIC8gMy4wOwoKCQkJCWZsb2F0IHdhdmVPZmZzZXQgPSBjb21iaW5lZFdhdmUgKiB3YXZlRGlzdG9ydGlvbiAqIGRpc3RhbmNlRmFjdG9yOwoJCQkJZGlzdG9ydGVkVVYgLT0gZGlyZWN0aW9uICogd2F2ZU9mZnNldCArIGxpcXVpZFN1cmZhY2U7CgoJCQkJdmVjMiBmbG93T2Zmc2V0ID0gdmVjMigKCQkJCQlzaW4odGltZSArIG5vcm1hbGl6ZWREaXN0ICogMTAuMCksCgkJCQkJY29zKHRpbWUgKiAwLjggKyBub3JtYWxpemVkRGlzdCAqIDguMCkKCQkJCSkgKiBsaXF1aWRGbG93ICogZGlzdGFuY2VGYWN0b3IgKiBpbnNpZGU7CgkJCQlkaXN0b3J0ZWRVViArPSBmbG93T2Zmc2V0OwoJCQl9CgoJCQl2ZWM0IG5ld0ltZzsKCQkJaWYgKGluc2lkZSA+IDAuMCkgewoJCQkJZmxvYXQgYWJlcnJhdGlvbk9mZnNldCA9IGNocm9tYXRpY0FiZXJyYXRpb24gKiBwb3coZGlzdGFuY2VGYWN0b3IsIDEuMik7CgoJCQkJdmVjMiB1dl9yID0gZGlzdG9ydGVkVVYgKyBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMS4yOwoJCQkJdmVjMiB1dl9nID0gZGlzdG9ydGVkVVYgKyBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMC4yOwoJCQkJdmVjMiB1dl9iID0gZGlzdG9ydGVkVVYgLSBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMC44OwoKCQkJCXZlYzMgc2FtcGxlUiA9IHNyZ2JUb0xpbmVhcih0ZXh0dXJlMkQodVRleHR1cmUyLCB1dl9yKS5yZ2IpOwoJCQkJdmVjMyBzYW1wbGVHID0gc3JnYlRvTGluZWFyKHRleHR1cmUyRCh1VGV4dHVyZTIsIHV2X2cpLnJnYik7CgkJCQl2ZWMzIHNhbXBsZUIgPSBzcmdiVG9MaW5lYXIodGV4dHVyZTJEKHVUZXh0dXJlMiwgdXZfYikucmdiKTsKCQkJCW5ld0ltZyA9IHZlYzQoc2FtcGxlUi5yLCBzYW1wbGVHLmcsIHNhbXBsZUIuYiwgMS4wKTsKCQkJfSBlbHNlIHsKCQkJCW5ld0ltZyA9IHNhbXBsZUxpbmVhcih1VGV4dHVyZTIsIHV2Ml9iYXNlKTsKCQkJfQoKCQkJaWYgKGluc2lkZSA+IDAuMCAmJiByaW1MaWdodEludGVuc2l0eSA+IDAuMCkgewoJCQkJZmxvYXQgcmltID0gc21vb3Roc3RlcCgxLjAgLSByaW1MaWdodFdpZHRoLCAxLjAsIG5vcm1hbGl6ZWREaXN0KSAqCgkJCQkJCQkoMS4wIC0gc21vb3Roc3RlcCgxLjAsIDEuMDEsIG5vcm1hbGl6ZWREaXN0KSk7CgkJCQluZXdJbWcucmdiICs9IHJpbSAqIHJpbUxpZ2h0SW50ZW5zaXR5OwoKCQkJCWZsb2F0IGVkZ2UgPSBzbW9vdGhzdGVwKDEuMCAtIGdsYXNzRWRnZVdpZHRoLCAxLjAsIG5vcm1hbGl6ZWREaXN0KSAqCgkJCQkJCQkgKDEuMCAtIHNtb290aHN0ZXAoMS4wLCAxLjAxLCBub3JtYWxpemVkRGlzdCkpOwoJCQkJbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCB2ZWMzKDEuMCksIGVkZ2UgKiBnbGFzc0VkZ2VPcGFjaXR5KTsKCQkJfQoKCQkJbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCBuZXdJbWcucmdiICogMS4yLCAodUNvbG9yRW5oYW5jZW1lbnQgLSAxLjApICogMC41KTsKCgkJCXZlYzQgY3VycmVudEltZyA9IHNhbXBsZUxpbmVhcih1VGV4dHVyZTEsIHV2MSk7CgoJCQlpZiAocHJvZ3Jlc3MgPiAwLjk1KSB7CgkJCQl2ZWM0IHB1cmVOZXdJbWcgPSBzYW1wbGVMaW5lYXIodVRleHR1cmUyLCB1djJfYmFzZSk7CgkJCQlmbG9hdCBlbmRUcmFuc2l0aW9uID0gKHByb2dyZXNzIC0gMC45NSkgLyAwLjA1OwoJCQkJbmV3SW1nID0gbWl4KG5ld0ltZywgcHVyZU5ld0ltZywgZW5kVHJhbnNpdGlvbik7CgkJCX0KCgkJCXJldHVybiBtaXgoY3VycmVudEltZywgbmV3SW1nLCBpbnNpZGUpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IG91dENvbG9yID0gZ2xhc3NFZmZlY3QodlV2LCB1UHJvZ3Jlc3MpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihvdXRDb2xvci5yZ2IpLCBvdXRDb2xvci5hKTsKCQl9CglgOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBjcmVhdGVQbGFjZWhvbGRlclRleHR1cmUgPSAoKSA9PgoJCQluZXcgVGV4dHVyZShnbCwgewoJCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJCXdpZHRoOiAxLAoJCQkJaGVpZ2h0OiAxLAoJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJCWZsaXBZOiB0cnVlLAoJCQl9KTsKCgkJY29uc3QgcGxhY2Vob2xkZXJUZXh0dXJlID0gY3JlYXRlUGxhY2Vob2xkZXJUZXh0dXJlKCk7CgkJbGV0IHNsaWRlVGV4dHVyZXM6IFRleHR1cmVbXSA9IFtdOwoJCWxldCBpbWFnZUxvYWRUb2tlbiA9IDA7CgoJCWNvbnN0IGRpc3Bvc2VUZXh0dXJlID0gKHRleHR1cmU6IFRleHR1cmUpID0+IHsKCQkJaWYgKHRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlLnRleHR1cmUpOwoJCX07CgoJCWNvbnN0IGxvYWRUZXh0dXJlRnJvbVNvdXJjZSA9IChzb3VyY2U6IHN0cmluZywgdG9rZW46IG51bWJlcikgPT4gewoJCQljb25zdCB0ZXh0dXJlID0gY3JlYXRlUGxhY2Vob2xkZXJUZXh0dXJlKCk7CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VMb2FkVG9rZW4pIHJldHVybjsKCQkJCXRleHR1cmUuaW1hZ2UgPSBpbWc7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJCXJldHVybiB0ZXh0dXJlOwoJCX07CgoJCWNvbnN0IHJlcGxhY2VUZXh0dXJlcyA9IChzb3VyY2VzOiBzdHJpbmdbXSkgPT4gewoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGltYWdlTG9hZFRva2VuOwoJCQlzbGlkZVRleHR1cmVzLmZvckVhY2goZGlzcG9zZVRleHR1cmUpOwoJCQlzbGlkZVRleHR1cmVzID0gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gbG9hZFRleHR1cmVGcm9tU291cmNlKHNvdXJjZSwgdG9rZW4pKTsKCQl9OwoJCXNldEltYWdlU291cmNlcyA9IHJlcGxhY2VUZXh0dXJlczsKCQlyZXBsYWNlVGV4dHVyZXMoaW1hZ2VzKTsKCgkJY29uc3QgZ2V0VGV4dHVyZVNpemUgPSAodGV4dHVyZTogVGV4dHVyZSk6IFtudW1iZXIsIG51bWJlcl0gPT4gewoJCQljb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2UgYXMKCQkJCXwgeyB3aWR0aD86IG51bWJlcjsgaGVpZ2h0PzogbnVtYmVyOyBuYXR1cmFsV2lkdGg/OiBudW1iZXI7IG5hdHVyYWxIZWlnaHQ/OiBudW1iZXIgfQoJCQkJfCBudWxsCgkJCQl8IHVuZGVmaW5lZDsKCQkJaWYgKCFpbWFnZSkgcmV0dXJuIFsxLCAxXTsKCQkJY29uc3Qgd2lkdGggPSBpbWFnZS5uYXR1cmFsV2lkdGggPz8gaW1hZ2Uud2lkdGggPz8gMTsKCQkJY29uc3QgaGVpZ2h0ID0gaW1hZ2UubmF0dXJhbEhlaWdodCA/PyBpbWFnZS5oZWlnaHQgPz8gMTsKCQkJcmV0dXJuIFtNYXRoLm1heCgxLCB3aWR0aCksIE1hdGgubWF4KDEsIGhlaWdodCldOwoJCX07CgoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUZXh0dXJlMTogeyB2YWx1ZTogcGxhY2Vob2xkZXJUZXh0dXJlIH0sCgkJCXVUZXh0dXJlMjogeyB2YWx1ZTogcGxhY2Vob2xkZXJUZXh0dXJlIH0sCgkJCXVQcm9ncmVzczogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmUxU2l6ZTogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmUyU2l6ZTogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUdsb2JhbEludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJCXVEaXN0b3J0aW9uU3RyZW5ndGg6IHsgdmFsdWU6IGRpc3RvcnRpb24gfSwKCQkJdVNwZWVkTXVsdGlwbGllcjogeyB2YWx1ZTogMS4wIH0sCgkJCXVDb2xvckVuaGFuY2VtZW50OiB7IHZhbHVlOiAxLjAgfSwKCQkJdUdsYXNzUmVmcmFjdGlvblN0cmVuZ3RoOiB7IHZhbHVlOiByZWZyYWN0aW9uIH0sCgkJCXVHbGFzc0Nocm9tYXRpY0FiZXJyYXRpb246IHsgdmFsdWU6IGNocm9tYXRpY0FiZXJyYXRpb24gfSwKCQkJdUdsYXNzQnViYmxlQ2xhcml0eTogeyB2YWx1ZTogMS4wIH0sCgkJCXVHbGFzc0VkZ2VHbG93OiB7IHZhbHVlOiAxLjAgfSwKCQkJdUdsYXNzTGlxdWlkRmxvdzogeyB2YWx1ZTogMS4wIH0sCgkJfTsKCgkJc2V0VW5pZm9ybVBhcmFtcyA9IChuZXh0KSA9PiB7CgkJCWxvY2FsVW5pZm9ybXMudUdsb2JhbEludGVuc2l0eS52YWx1ZSA9IG5leHQuaW50ZW5zaXR5OwoJCQlsb2NhbFVuaWZvcm1zLnVEaXN0b3J0aW9uU3RyZW5ndGgudmFsdWUgPSBuZXh0LmRpc3RvcnRpb247CgkJCWxvY2FsVW5pZm9ybXMudUdsYXNzQ2hyb21hdGljQWJlcnJhdGlvbi52YWx1ZSA9IG5leHQuY2hyb21hdGljQWJlcnJhdGlvbjsKCQkJbG9jYWxVbmlmb3Jtcy51R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGgudmFsdWUgPSBuZXh0LnJlZnJhY3Rpb247CgkJfTsKCQlzZXRVbmlmb3JtUGFyYW1zKHsgaW50ZW5zaXR5LCBkaXN0b3J0aW9uLCBjaHJvbWF0aWNBYmVycmF0aW9uLCByZWZyYWN0aW9uIH0pOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0sIGZydXN0dW1DdWxsZWQ6IGZhbHNlIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWNvbnN0IHRpY2sgPSAoKSA9PiB7CgkJCWNvbnN0IHRvdGFsID0gc2xpZGVUZXh0dXJlcy5sZW5ndGg7CgkJCWNvbnN0IHNhZmVDdXJyZW50ID0gdG90YWwgPiAwID8gKChjdXJyZW50SW5kZXggJSB0b3RhbCkgKyB0b3RhbCkgJSB0b3RhbCA6IDA7CgkJCWNvbnN0IHNhZmVOZXh0ID0gdG90YWwgPiAwID8gKChuZXh0SW5kZXggJSB0b3RhbCkgKyB0b3RhbCkgJSB0b3RhbCA6IHNhZmVDdXJyZW50OwoKCQkJY29uc3QgdGV4MSA9IHRvdGFsID4gMCA/IHNsaWRlVGV4dHVyZXNbc2FmZUN1cnJlbnRdIDogcGxhY2Vob2xkZXJUZXh0dXJlOwoJCQljb25zdCB0ZXgyID0gdG90YWwgPiAwID8gc2xpZGVUZXh0dXJlc1tzYWZlTmV4dF0gOiBwbGFjZWhvbGRlclRleHR1cmU7CgoJCQlsb2NhbFVuaWZvcm1zLnVQcm9ncmVzcy52YWx1ZSA9IHByb2dyZXNzLnZhbHVlOwoJCQlsb2NhbFVuaWZvcm1zLnVUZXh0dXJlMS52YWx1ZSA9IHRleDE7CgkJCWxvY2FsVW5pZm9ybXMudVRleHR1cmUyLnZhbHVlID0gdGV4MjsKCgkJCWNvbnN0IFt3MSwgaDFdID0gZ2V0VGV4dHVyZVNpemUodGV4MSk7CgkJCWNvbnN0IFt3MiwgaDJdID0gZ2V0VGV4dHVyZVNpemUodGV4Mik7CgkJCWxvY2FsVW5pZm9ybXMudVRleHR1cmUxU2l6ZS52YWx1ZS5zZXQodzEsIGgxKTsKCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZTJTaXplLnZhbHVlLnNldCh3MiwgaDIpOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSwgY2xlYXI6IHRydWUgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJc2V0SW1hZ2VTb3VyY2VzID0gdW5kZWZpbmVkOwoJCQlzZXRVbmlmb3JtUGFyYW1zID0gdW5kZWZpbmVkOwoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoKCQkJc2xpZGVUZXh0dXJlcy5mb3JFYWNoKGRpc3Bvc2VUZXh0dXJlKTsKCQkJZGlzcG9zZVRleHR1cmUocGxhY2Vob2xkZXJUZXh0dXJlKTsKCgkJCXByb2dyYW0ucmVtb3ZlKCk7CgkJCWdlb21ldHJ5LnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/glass-slideshow/GlassSlideshowScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbkRlc3Ryb3ksIG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsKCQlDYW1lcmEsCgkJTWVzaCwKCQlQcm9ncmFtLAoJCVJlbmRlcmVyLAoJCVRleHR1cmUsCgkJVHJhbnNmb3JtLAoJCVRyaWFuZ2xlLAoJCVZlYzIsCgl9IGZyb20gIm9nbCI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqIEFycmF5IG9mIGltYWdlIFVSTHMgdXNlZCBmb3IgdGV4dHVyZXMuICovCgkJaW1hZ2VzOiBzdHJpbmdbXTsKCQkvKiogSW5kZXggb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW1hZ2UuICovCgkJaW5kZXg/OiBudW1iZXI7CgkJLyoqIER1cmF0aW9uIG9mIGEgc2luZ2xlIHRyYW5zaXRpb24gaW4gbWlsbGlzZWNvbmRzLiAqLwoJCXRyYW5zaXRpb25EdXJhdGlvbj86IG51bWJlcjsKCQkvKiogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyIGZvciB0aGUgc2hhZGVyIGVmZmVjdC4gKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7CgkJLyoqIERpc3RvcnRpb24gc3RyZW5ndGggYXBwbGllZCBkdXJpbmcgdHJhbnNpdGlvbnMuICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKiogQ2hyb21hdGljIGFiZXJyYXRpb24gc3RyZW5ndGggZm9yIHRoZSBzaGFkZXIuICovCgkJY2hyb21hdGljQWJlcnJhdGlvbj86IG51bWJlcjsKCQkvKiogUmVmcmFjdGlvbiBzdHJlbmd0aCBmb3IgdGhlIHNoYWRlci4gKi8KCQlyZWZyYWN0aW9uPzogbnVtYmVyOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCWluZGV4ID0gMCwKCQl0cmFuc2l0aW9uRHVyYXRpb24gPSAyMDAwLAoJCWludGVuc2l0eSA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMS4wLAoJCWNocm9tYXRpY0FiZXJyYXRpb24gPSAxLjAsCgkJcmVmcmFjdGlvbiA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCglsZXQgcHJvZ3Jlc3MgPSAkc3RhdGUoeyB2YWx1ZTogMCB9KTsKCWxldCBjdXJyZW50SW5kZXggPSAkc3RhdGUoMCk7CglsZXQgbmV4dEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzVHJhbnNpdGlvbmluZyA9ICRzdGF0ZShmYWxzZSk7CgoJbGV0IHNldEltYWdlU291cmNlcyA9ICRzdGF0ZTwoc291cmNlczogc3RyaW5nW10pID0+IHZvaWQ+KCk7CglsZXQgc2V0VW5pZm9ybVBhcmFtcyA9CgkJJHN0YXRlPAoJCQkobmV4dDogewoJCQkJaW50ZW5zaXR5OiBudW1iZXI7CgkJCQlkaXN0b3J0aW9uOiBudW1iZXI7CgkJCQljaHJvbWF0aWNBYmVycmF0aW9uOiBudW1iZXI7CgkJCQlyZWZyYWN0aW9uOiBudW1iZXI7CgkJCX0pID0+IHZvaWQKCQk+KCk7CgoJb25EZXN0cm95KCgpID0+IHsKCQlnc2FwLmtpbGxUd2VlbnNPZihwcm9ncmVzcyk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCB0b3RhbEltYWdlcyA9IGltYWdlcy5sZW5ndGg7CgoJCWlmICh0b3RhbEltYWdlcyA9PT0gMCkgewoJCQlpZiAoY3VycmVudEluZGV4ICE9PSAwKSBjdXJyZW50SW5kZXggPSAwOwoJCQlpZiAobmV4dEluZGV4ICE9PSAwKSBuZXh0SW5kZXggPSAwOwoJCQlpc1RyYW5zaXRpb25pbmcgPSBmYWxzZTsKCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQlnc2FwLmtpbGxUd2VlbnNPZihwcm9ncmVzcyk7CgkJCXJldHVybjsKCQl9CgoJCWNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50ID0KCQkJKChjdXJyZW50SW5kZXggJSB0b3RhbEltYWdlcykgKyB0b3RhbEltYWdlcykgJSB0b3RhbEltYWdlczsKCQljb25zdCBub3JtYWxpemVkTmV4dCA9CgkJCSgobmV4dEluZGV4ICUgdG90YWxJbWFnZXMpICsgdG90YWxJbWFnZXMpICUgdG90YWxJbWFnZXM7CgkJaWYgKG5vcm1hbGl6ZWRDdXJyZW50ICE9PSBjdXJyZW50SW5kZXgpIGN1cnJlbnRJbmRleCA9IG5vcm1hbGl6ZWRDdXJyZW50OwoJCWlmIChub3JtYWxpemVkTmV4dCAhPT0gbmV4dEluZGV4KSBuZXh0SW5kZXggPSBub3JtYWxpemVkTmV4dDsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWNvbnN0IHRvdGFsSW1hZ2VzID0gaW1hZ2VzLmxlbmd0aDsKCQlpZiAodG90YWxJbWFnZXMgPT09IDApIHJldHVybjsKCgkJY29uc3Qgbm9ybWFsaXplZEluZGV4ID0gKChpbmRleCAlIHRvdGFsSW1hZ2VzKSArIHRvdGFsSW1hZ2VzKSAlIHRvdGFsSW1hZ2VzOwoKCQlpZiAobm9ybWFsaXplZEluZGV4ID09PSBjdXJyZW50SW5kZXggfHwgaXNUcmFuc2l0aW9uaW5nKSB7CgkJCXJldHVybjsKCQl9CgoJCWdzYXAua2lsbFR3ZWVuc09mKHByb2dyZXNzKTsKCQlwcm9ncmVzcy52YWx1ZSA9IDA7CgkJaXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTsKCQluZXh0SW5kZXggPSBub3JtYWxpemVkSW5kZXg7CgoJCWdzYXAudG8ocHJvZ3Jlc3MsIHsKCQkJdmFsdWU6IDEsCgkJCWR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24gLyAxMDAwLAoJCQllYXNlOiAicG93ZXIzLmluT3V0IiwKCQkJb25Db21wbGV0ZTogKCkgPT4gewoJCQkJY3VycmVudEluZGV4ID0gbmV4dEluZGV4OwoJCQkJcHJvZ3Jlc3MudmFsdWUgPSAwOwoJCQkJaXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7CgkJCX0sCgkJfSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlcykgcmV0dXJuOwoJCXNldEltYWdlU291cmNlcyhpbWFnZXMpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRVbmlmb3JtUGFyYW1zKSByZXR1cm47CgkJc2V0VW5pZm9ybVBhcmFtcyh7CgkJCWludGVuc2l0eSwKCQkJZGlzdG9ydGlvbiwKCQkJY2hyb21hdGljQWJlcnJhdGlvbiwKCQkJcmVmcmFjdGlvbiwKCQl9KTsKCX0pOwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTE7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmUyOwoJCXVuaWZvcm0gZmxvYXQgdVByb2dyZXNzOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzIgdVRleHR1cmUxU2l6ZTsKCQl1bmlmb3JtIHZlYzIgdVRleHR1cmUyU2l6ZTsKCgkJdW5pZm9ybSBmbG9hdCB1R2xvYmFsSW50ZW5zaXR5OwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb25TdHJlbmd0aDsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZE11bHRpcGxpZXI7CgkJdW5pZm9ybSBmbG9hdCB1Q29sb3JFbmhhbmNlbWVudDsKCgkJdW5pZm9ybSBmbG9hdCB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdUdsYXNzQnViYmxlQ2xhcml0eTsKCQl1bmlmb3JtIGZsb2F0IHVHbGFzc0VkZ2VHbG93OwoJCXVuaWZvcm0gZmxvYXQgdUdsYXNzTGlxdWlkRmxvdzsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMyBzcmdiVG9MaW5lYXIodmVjMyBjb2xvcikgewoJCQl2ZWMzIGxvdyA9IGNvbG9yIC8gMTIuOTI7CgkJCXZlYzMgaGlnaCA9IHBvdygoY29sb3IgKyAwLjA1NSkgLyAxLjA1NSwgdmVjMygyLjQpKTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wNDA0NSksIGNvbG9yKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyB0ZXh0dXJlU2l6ZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCWZsb2F0IG5vaXNlKHZlYzIgcCkgewoJCQlyZXR1cm4gZnJhY3Qoc2luKGRvdChwLCB2ZWMyKDEyNy4xLCAzMTEuNykpKSAqIDQzNzU4LjU0NTMpOwoJCX0KCgkJZmxvYXQgc21vb3RoTm9pc2UodmVjMiBwKSB7CgkJCXZlYzIgaSA9IGZsb29yKHApOwoJCQl2ZWMyIGYgPSBmcmFjdChwKTsKCQkJZiA9IGYgKiBmICogKDMuMCAtIDIuMCAqIGYpOwoKCQkJcmV0dXJuIG1peCgKCQkJCW1peChub2lzZShpKSwgbm9pc2UoaSArIHZlYzIoMS4wLCAwLjApKSwgZi54KSwKCQkJCW1peChub2lzZShpICsgdmVjMigwLjAsIDEuMCkpLCBub2lzZShpICsgdmVjMigxLjAsIDEuMCkpLCBmLngpLAoJCQkJZi55CgkJCSk7CgkJfQoKCQl2ZWM0IHNhbXBsZUxpbmVhcihzYW1wbGVyMkQgdGV4LCB2ZWMyIHV2KSB7CgkJCXZlYzQgYyA9IHRleHR1cmUyRCh0ZXgsIHV2KTsKCQkJcmV0dXJuIHZlYzQoc3JnYlRvTGluZWFyKGMucmdiKSwgYy5hKTsKCQl9CgoJCXZlYzQgZ2xhc3NFZmZlY3QodmVjMiB1diwgZmxvYXQgcHJvZ3Jlc3MpIHsKCQkJZmxvYXQgZ2xhc3NTdHJlbmd0aCA9IDAuMDggKiB1R2xhc3NSZWZyYWN0aW9uU3RyZW5ndGggKiB1RGlzdG9ydGlvblN0cmVuZ3RoICogdUdsb2JhbEludGVuc2l0eTsKCQkJZmxvYXQgY2hyb21hdGljQWJlcnJhdGlvbiA9IDAuMDIgKiB1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uICogdUdsb2JhbEludGVuc2l0eTsKCQkJZmxvYXQgd2F2ZURpc3RvcnRpb24gPSAwLjAyNSAqIHVEaXN0b3J0aW9uU3RyZW5ndGg7CgkJCWZsb2F0IGNsZWFyQ2VudGVyU2l6ZSA9IDAuMyAqIHVHbGFzc0J1YmJsZUNsYXJpdHk7CgkJCWZsb2F0IHN1cmZhY2VSaXBwbGVzID0gMC4wMDQgKiB1RGlzdG9ydGlvblN0cmVuZ3RoOwoJCQlmbG9hdCBsaXF1aWRGbG93ID0gMC4wMTUgKiB1R2xhc3NMaXF1aWRGbG93ICogdVNwZWVkTXVsdGlwbGllcjsKCQkJZmxvYXQgcmltTGlnaHRXaWR0aCA9IDAuMDU7CgkJCWZsb2F0IGdsYXNzRWRnZVdpZHRoID0gMC4wMjU7CgoJCQlmbG9hdCBicmlnaHRuZXNzUGhhc2UgPSBzbW9vdGhzdGVwKDAuOCwgMS4wLCBwcm9ncmVzcyk7CgkJCWZsb2F0IHJpbUxpZ2h0SW50ZW5zaXR5ID0gMC4wOCAqICgxLjAgLSBicmlnaHRuZXNzUGhhc2UpICogdUdsYXNzRWRnZUdsb3cgKiB1R2xvYmFsSW50ZW5zaXR5OwoJCQlmbG9hdCBnbGFzc0VkZ2VPcGFjaXR5ID0gMC4wNiAqICgxLjAgLSBicmlnaHRuZXNzUGhhc2UpICogdUdsYXNzRWRnZUdsb3c7CgoJCQl2ZWMyIGNlbnRlciA9IHZlYzIoMC41LCAwLjUpOwoJCQl2ZWMyIHAgPSB1diAqIHVSZXNvbHV0aW9uOwoKCQkJdmVjMiB1djEgPSBnZXRDb3ZlclVWKHV2LCB1VGV4dHVyZTFTaXplKTsKCQkJdmVjMiB1djJfYmFzZSA9IGdldENvdmVyVVYodXYsIHVUZXh0dXJlMlNpemUpOwoKCQkJZmxvYXQgbWF4UmFkaXVzID0gbGVuZ3RoKHVSZXNvbHV0aW9uKSAqIDAuODU7CgkJCWZsb2F0IGJ1YmJsZVJhZGl1cyA9IHByb2dyZXNzICogbWF4UmFkaXVzOwoJCQl2ZWMyIHNwaGVyZUNlbnRlciA9IGNlbnRlciAqIHVSZXNvbHV0aW9uOwoKCQkJZmxvYXQgZGlzdCA9IGxlbmd0aChwIC0gc3BoZXJlQ2VudGVyKTsKCQkJZmxvYXQgbm9ybWFsaXplZERpc3QgPSBkaXN0IC8gbWF4KGJ1YmJsZVJhZGl1cywgMC4wMDEpOwoJCQl2ZWMyIGRpcmVjdGlvbiA9IChkaXN0ID4gMC4wKSA/IChwIC0gc3BoZXJlQ2VudGVyKSAvIGRpc3QgOiB2ZWMyKDAuMCk7CgkJCWZsb2F0IGluc2lkZSA9IHNtb290aHN0ZXAoYnViYmxlUmFkaXVzICsgMy4wLCBidWJibGVSYWRpdXMgLSAzLjAsIGRpc3QpOwoKCQkJZmxvYXQgZGlzdGFuY2VGYWN0b3IgPSBzbW9vdGhzdGVwKGNsZWFyQ2VudGVyU2l6ZSwgMS4wLCBub3JtYWxpemVkRGlzdCk7CgkJCWZsb2F0IHRpbWUgPSBwcm9ncmVzcyAqIDUuMCAqIHVTcGVlZE11bHRpcGxpZXI7CgoJCQl2ZWMyIGxpcXVpZFN1cmZhY2UgPSB2ZWMyKAoJCQkJc21vb3RoTm9pc2UodXYgKiAxMDAuMCArIHRpbWUgKiAwLjMpLAoJCQkJc21vb3RoTm9pc2UodXYgKiAxMDAuMCArIHRpbWUgKiAwLjIgKyA1MC4wKQoJCQkpIC0gMC41OwoJCQlsaXF1aWRTdXJmYWNlICo9IHN1cmZhY2VSaXBwbGVzICogZGlzdGFuY2VGYWN0b3I7CgoJCQl2ZWMyIGRpc3RvcnRlZFVWID0gdXYyX2Jhc2U7CgkJCWlmIChpbnNpZGUgPiAwLjApIHsKCQkJCWZsb2F0IHJlZnJhY3Rpb25PZmZzZXQgPSBnbGFzc1N0cmVuZ3RoICogcG93KGRpc3RhbmNlRmFjdG9yLCAxLjUpOwoJCQkJdmVjMiBmbG93RGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbiArIHZlYzIoc2luKHRpbWUpLCBjb3ModGltZSAqIDAuNykpICogMC4zKTsKCQkJCWRpc3RvcnRlZFVWIC09IGZsb3dEaXJlY3Rpb24gKiByZWZyYWN0aW9uT2Zmc2V0OwoKCQkJCWZsb2F0IHdhdmUxID0gc2luKG5vcm1hbGl6ZWREaXN0ICogMjIuMCAtIHRpbWUgKiAzLjUpOwoJCQkJZmxvYXQgd2F2ZTIgPSBzaW4obm9ybWFsaXplZERpc3QgKiAzNS4wICsgdGltZSAqIDIuOCkgKiAwLjc7CgkJCQlmbG9hdCB3YXZlMyA9IHNpbihub3JtYWxpemVkRGlzdCAqIDUwLjAgLSB0aW1lICogNC4yKSAqIDAuNTsKCQkJCWZsb2F0IGNvbWJpbmVkV2F2ZSA9ICh3YXZlMSArIHdhdmUyICsgd2F2ZTMpIC8gMy4wOwoKCQkJCWZsb2F0IHdhdmVPZmZzZXQgPSBjb21iaW5lZFdhdmUgKiB3YXZlRGlzdG9ydGlvbiAqIGRpc3RhbmNlRmFjdG9yOwoJCQkJZGlzdG9ydGVkVVYgLT0gZGlyZWN0aW9uICogd2F2ZU9mZnNldCArIGxpcXVpZFN1cmZhY2U7CgoJCQkJdmVjMiBmbG93T2Zmc2V0ID0gdmVjMigKCQkJCQlzaW4odGltZSArIG5vcm1hbGl6ZWREaXN0ICogMTAuMCksCgkJCQkJY29zKHRpbWUgKiAwLjggKyBub3JtYWxpemVkRGlzdCAqIDguMCkKCQkJCSkgKiBsaXF1aWRGbG93ICogZGlzdGFuY2VGYWN0b3IgKiBpbnNpZGU7CgkJCQlkaXN0b3J0ZWRVViArPSBmbG93T2Zmc2V0OwoJCQl9CgoJCQl2ZWM0IG5ld0ltZzsKCQkJaWYgKGluc2lkZSA+IDAuMCkgewoJCQkJZmxvYXQgYWJlcnJhdGlvbk9mZnNldCA9IGNocm9tYXRpY0FiZXJyYXRpb24gKiBwb3coZGlzdGFuY2VGYWN0b3IsIDEuMik7CgoJCQkJdmVjMiB1dl9yID0gZGlzdG9ydGVkVVYgKyBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMS4yOwoJCQkJdmVjMiB1dl9nID0gZGlzdG9ydGVkVVYgKyBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMC4yOwoJCQkJdmVjMiB1dl9iID0gZGlzdG9ydGVkVVYgLSBkaXJlY3Rpb24gKiBhYmVycmF0aW9uT2Zmc2V0ICogMC44OwoKCQkJCXZlYzMgc2FtcGxlUiA9IHNyZ2JUb0xpbmVhcih0ZXh0dXJlMkQodVRleHR1cmUyLCB1dl9yKS5yZ2IpOwoJCQkJdmVjMyBzYW1wbGVHID0gc3JnYlRvTGluZWFyKHRleHR1cmUyRCh1VGV4dHVyZTIsIHV2X2cpLnJnYik7CgkJCQl2ZWMzIHNhbXBsZUIgPSBzcmdiVG9MaW5lYXIodGV4dHVyZTJEKHVUZXh0dXJlMiwgdXZfYikucmdiKTsKCQkJCW5ld0ltZyA9IHZlYzQoc2FtcGxlUi5yLCBzYW1wbGVHLmcsIHNhbXBsZUIuYiwgMS4wKTsKCQkJfSBlbHNlIHsKCQkJCW5ld0ltZyA9IHNhbXBsZUxpbmVhcih1VGV4dHVyZTIsIHV2Ml9iYXNlKTsKCQkJfQoKCQkJaWYgKGluc2lkZSA+IDAuMCAmJiByaW1MaWdodEludGVuc2l0eSA+IDAuMCkgewoJCQkJZmxvYXQgcmltID0gc21vb3Roc3RlcCgxLjAgLSByaW1MaWdodFdpZHRoLCAxLjAsIG5vcm1hbGl6ZWREaXN0KSAqCgkJCQkJCQkoMS4wIC0gc21vb3Roc3RlcCgxLjAsIDEuMDEsIG5vcm1hbGl6ZWREaXN0KSk7CgkJCQluZXdJbWcucmdiICs9IHJpbSAqIHJpbUxpZ2h0SW50ZW5zaXR5OwoKCQkJCWZsb2F0IGVkZ2UgPSBzbW9vdGhzdGVwKDEuMCAtIGdsYXNzRWRnZVdpZHRoLCAxLjAsIG5vcm1hbGl6ZWREaXN0KSAqCgkJCQkJCQkgKDEuMCAtIHNtb290aHN0ZXAoMS4wLCAxLjAxLCBub3JtYWxpemVkRGlzdCkpOwoJCQkJbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCB2ZWMzKDEuMCksIGVkZ2UgKiBnbGFzc0VkZ2VPcGFjaXR5KTsKCQkJfQoKCQkJbmV3SW1nLnJnYiA9IG1peChuZXdJbWcucmdiLCBuZXdJbWcucmdiICogMS4yLCAodUNvbG9yRW5oYW5jZW1lbnQgLSAxLjApICogMC41KTsKCgkJCXZlYzQgY3VycmVudEltZyA9IHNhbXBsZUxpbmVhcih1VGV4dHVyZTEsIHV2MSk7CgoJCQlpZiAocHJvZ3Jlc3MgPiAwLjk1KSB7CgkJCQl2ZWM0IHB1cmVOZXdJbWcgPSBzYW1wbGVMaW5lYXIodVRleHR1cmUyLCB1djJfYmFzZSk7CgkJCQlmbG9hdCBlbmRUcmFuc2l0aW9uID0gKHByb2dyZXNzIC0gMC45NSkgLyAwLjA1OwoJCQkJbmV3SW1nID0gbWl4KG5ld0ltZywgcHVyZU5ld0ltZywgZW5kVHJhbnNpdGlvbik7CgkJCX0KCgkJCXJldHVybiBtaXgoY3VycmVudEltZywgbmV3SW1nLCBpbnNpZGUpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IG91dENvbG9yID0gZ2xhc3NFZmZlY3QodlV2LCB1UHJvZ3Jlc3MpOwoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihvdXRDb2xvci5yZ2IpLCBvdXRDb2xvci5hKTsKCQl9CglgOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBjcmVhdGVQbGFjZWhvbGRlclRleHR1cmUgPSAoKSA9PgoJCQluZXcgVGV4dHVyZShnbCwgewoJCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJCXdpZHRoOiAxLAoJCQkJaGVpZ2h0OiAxLAoJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJdHlwZTogZ2wuVU5TSUdORURfQllURSwKCQkJCW1pbkZpbHRlcjogZ2wuTElORUFSLAoJCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJCWZsaXBZOiB0cnVlLAoJCQl9KTsKCgkJY29uc3QgcGxhY2Vob2xkZXJUZXh0dXJlID0gY3JlYXRlUGxhY2Vob2xkZXJUZXh0dXJlKCk7CgkJbGV0IHNsaWRlVGV4dHVyZXM6IFRleHR1cmVbXSA9IFtdOwoJCWxldCBpbWFnZUxvYWRUb2tlbiA9IDA7CgoJCWNvbnN0IGRpc3Bvc2VUZXh0dXJlID0gKHRleHR1cmU6IFRleHR1cmUpID0+IHsKCQkJaWYgKHRleHR1cmUudGV4dHVyZSkgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlLnRleHR1cmUpOwoJCX07CgoJCWNvbnN0IGxvYWRUZXh0dXJlRnJvbVNvdXJjZSA9IChzb3VyY2U6IHN0cmluZywgdG9rZW46IG51bWJlcikgPT4gewoJCQljb25zdCB0ZXh0dXJlID0gY3JlYXRlUGxhY2Vob2xkZXJUZXh0dXJlKCk7CgkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQlpbWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKCQkJaW1nLmRlY29kaW5nID0gImFzeW5jIjsKCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCWlmICh0b2tlbiAhPT0gaW1hZ2VMb2FkVG9rZW4pIHJldHVybjsKCQkJCXRleHR1cmUuaW1hZ2UgPSBpbWc7CgkJCX07CgkJCWltZy5zcmMgPSBzb3VyY2U7CgkJCXJldHVybiB0ZXh0dXJlOwoJCX07CgoJCWNvbnN0IHJlcGxhY2VUZXh0dXJlcyA9IChzb3VyY2VzOiBzdHJpbmdbXSkgPT4gewoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoJCQljb25zdCB0b2tlbiA9IGltYWdlTG9hZFRva2VuOwoJCQlzbGlkZVRleHR1cmVzLmZvckVhY2goZGlzcG9zZVRleHR1cmUpOwoJCQlzbGlkZVRleHR1cmVzID0gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4KCQkJCWxvYWRUZXh0dXJlRnJvbVNvdXJjZShzb3VyY2UsIHRva2VuKSwKCQkJKTsKCQl9OwoJCXNldEltYWdlU291cmNlcyA9IHJlcGxhY2VUZXh0dXJlczsKCQlyZXBsYWNlVGV4dHVyZXMoaW1hZ2VzKTsKCgkJY29uc3QgZ2V0VGV4dHVyZVNpemUgPSAodGV4dHVyZTogVGV4dHVyZSk6IFtudW1iZXIsIG51bWJlcl0gPT4gewoJCQljb25zdCBpbWFnZSA9IHRleHR1cmUuaW1hZ2UgYXMKCQkJCXwgewoJCQkJCQl3aWR0aD86IG51bWJlcjsKCQkJCQkJaGVpZ2h0PzogbnVtYmVyOwoJCQkJCQluYXR1cmFsV2lkdGg/OiBudW1iZXI7CgkJCQkJCW5hdHVyYWxIZWlnaHQ/OiBudW1iZXI7CgkJCQkgIH0KCQkJCXwgbnVsbAoJCQkJfCB1bmRlZmluZWQ7CgkJCWlmICghaW1hZ2UpIHJldHVybiBbMSwgMV07CgkJCWNvbnN0IHdpZHRoID0gaW1hZ2UubmF0dXJhbFdpZHRoID8/IGltYWdlLndpZHRoID8/IDE7CgkJCWNvbnN0IGhlaWdodCA9IGltYWdlLm5hdHVyYWxIZWlnaHQgPz8gaW1hZ2UuaGVpZ2h0ID8/IDE7CgkJCXJldHVybiBbTWF0aC5tYXgoMSwgd2lkdGgpLCBNYXRoLm1heCgxLCBoZWlnaHQpXTsKCQl9OwoKCQljb25zdCBsb2NhbFVuaWZvcm1zID0gewoJCQl1VGV4dHVyZTE6IHsgdmFsdWU6IHBsYWNlaG9sZGVyVGV4dHVyZSB9LAoJCQl1VGV4dHVyZTI6IHsgdmFsdWU6IHBsYWNlaG9sZGVyVGV4dHVyZSB9LAoJCQl1UHJvZ3Jlc3M6IHsgdmFsdWU6IDAgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWMyKDEsIDEpIH0sCgkJCXVUZXh0dXJlMVNpemU6IHsgdmFsdWU6IG5ldyBWZWMyKDEsIDEpIH0sCgkJCXVUZXh0dXJlMlNpemU6IHsgdmFsdWU6IG5ldyBWZWMyKDEsIDEpIH0sCgkJCXVHbG9iYWxJbnRlbnNpdHk6IHsgdmFsdWU6IGludGVuc2l0eSB9LAoJCQl1RGlzdG9ydGlvblN0cmVuZ3RoOiB7IHZhbHVlOiBkaXN0b3J0aW9uIH0sCgkJCXVTcGVlZE11bHRpcGxpZXI6IHsgdmFsdWU6IDEuMCB9LAoJCQl1Q29sb3JFbmhhbmNlbWVudDogeyB2YWx1ZTogMS4wIH0sCgkJCXVHbGFzc1JlZnJhY3Rpb25TdHJlbmd0aDogeyB2YWx1ZTogcmVmcmFjdGlvbiB9LAoJCQl1R2xhc3NDaHJvbWF0aWNBYmVycmF0aW9uOiB7IHZhbHVlOiBjaHJvbWF0aWNBYmVycmF0aW9uIH0sCgkJCXVHbGFzc0J1YmJsZUNsYXJpdHk6IHsgdmFsdWU6IDEuMCB9LAoJCQl1R2xhc3NFZGdlR2xvdzogeyB2YWx1ZTogMS4wIH0sCgkJCXVHbGFzc0xpcXVpZEZsb3c6IHsgdmFsdWU6IDEuMCB9LAoJCX07CgoJCXNldFVuaWZvcm1QYXJhbXMgPSAobmV4dCkgPT4gewoJCQlsb2NhbFVuaWZvcm1zLnVHbG9iYWxJbnRlbnNpdHkudmFsdWUgPSBuZXh0LmludGVuc2l0eTsKCQkJbG9jYWxVbmlmb3Jtcy51RGlzdG9ydGlvblN0cmVuZ3RoLnZhbHVlID0gbmV4dC5kaXN0b3J0aW9uOwoJCQlsb2NhbFVuaWZvcm1zLnVHbGFzc0Nocm9tYXRpY0FiZXJyYXRpb24udmFsdWUgPSBuZXh0LmNocm9tYXRpY0FiZXJyYXRpb247CgkJCWxvY2FsVW5pZm9ybXMudUdsYXNzUmVmcmFjdGlvblN0cmVuZ3RoLnZhbHVlID0gbmV4dC5yZWZyYWN0aW9uOwoJCX07CgkJc2V0VW5pZm9ybVBhcmFtcyh7CgkJCWludGVuc2l0eSwKCQkJZGlzdG9ydGlvbiwKCQkJY2hyb21hdGljQWJlcnJhdGlvbiwKCQkJcmVmcmFjdGlvbiwKCQl9KTsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtLCBmcnVzdHVtQ3VsbGVkOiBmYWxzZSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQljb25zdCB0aWNrID0gKCkgPT4gewoJCQljb25zdCB0b3RhbCA9IHNsaWRlVGV4dHVyZXMubGVuZ3RoOwoJCQljb25zdCBzYWZlQ3VycmVudCA9CgkJCQl0b3RhbCA+IDAgPyAoKGN1cnJlbnRJbmRleCAlIHRvdGFsKSArIHRvdGFsKSAlIHRvdGFsIDogMDsKCQkJY29uc3Qgc2FmZU5leHQgPQoJCQkJdG90YWwgPiAwID8gKChuZXh0SW5kZXggJSB0b3RhbCkgKyB0b3RhbCkgJSB0b3RhbCA6IHNhZmVDdXJyZW50OwoKCQkJY29uc3QgdGV4MSA9IHRvdGFsID4gMCA/IHNsaWRlVGV4dHVyZXNbc2FmZUN1cnJlbnRdIDogcGxhY2Vob2xkZXJUZXh0dXJlOwoJCQljb25zdCB0ZXgyID0gdG90YWwgPiAwID8gc2xpZGVUZXh0dXJlc1tzYWZlTmV4dF0gOiBwbGFjZWhvbGRlclRleHR1cmU7CgoJCQlsb2NhbFVuaWZvcm1zLnVQcm9ncmVzcy52YWx1ZSA9IHByb2dyZXNzLnZhbHVlOwoJCQlsb2NhbFVuaWZvcm1zLnVUZXh0dXJlMS52YWx1ZSA9IHRleDE7CgkJCWxvY2FsVW5pZm9ybXMudVRleHR1cmUyLnZhbHVlID0gdGV4MjsKCgkJCWNvbnN0IFt3MSwgaDFdID0gZ2V0VGV4dHVyZVNpemUodGV4MSk7CgkJCWNvbnN0IFt3MiwgaDJdID0gZ2V0VGV4dHVyZVNpemUodGV4Mik7CgkJCWxvY2FsVW5pZm9ybXMudVRleHR1cmUxU2l6ZS52YWx1ZS5zZXQodzEsIGgxKTsKCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZTJTaXplLnZhbHVlLnNldCh3MiwgaDIpOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSwgY2xlYXI6IHRydWUgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJc2V0SW1hZ2VTb3VyY2VzID0gdW5kZWZpbmVkOwoJCQlzZXRVbmlmb3JtUGFyYW1zID0gdW5kZWZpbmVkOwoJCQlpbWFnZUxvYWRUb2tlbiArPSAxOwoKCQkJc2xpZGVUZXh0dXJlcy5mb3JFYWNoKGRpc3Bvc2VUZXh0dXJlKTsKCQkJZGlzcG9zZVRleHR1cmUocGxhY2Vob2xkZXJUZXh0dXJlKTsKCgkJCXByb2dyYW0ucmVtb3ZlKCk7CgkJCWdlb21ldHJ5LnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/glitter-cloth/GlitterCloth.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsaXR0ZXJDbG90aFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBQcmltYXJ5IGNvbG9yIHVzZWQgdG8gZGVyaXZlIHRoZSBmdWxsIHNoYWRlciBwYWxldHRlLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWNvbG9yPzogU2NlbmVQcm9wc1siY29sb3IiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgZnVsbCBzaGFkZXIgYW5pbWF0aW9uIHRpbWVsaW5lLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBHbG9iYWwgaW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBiYXNlIHNpbGsgY29sb3IuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJYnJpZ2h0bmVzcz86IFNjZW5lUHJvcHNbImJyaWdodG5lc3MiXTsKCQkvKioKCQkgKiBPcGFjaXR5IG9mIHRoZSB2aXZpZC1saWdodCBnbGl0dGVyIGJsZW5kLgoJCSAqIEBkZWZhdWx0IDAuMDIKCQkgKi8KCQlibGVuZFN0cmVuZ3RoPzogU2NlbmVQcm9wc1siYmxlbmRTdHJlbmd0aCJdOwoJCS8qKgoJCSAqIFNwYXRpYWwgc2NhbGUgZm9yIHNpbXBsZXggbm9pc2Ugc2FtcGxpbmcuCgkJICogTG93ZXIgdmFsdWVzIGNyZWF0ZSBmaW5lciBnbGl0dGVyLgoJCSAqIEBkZWZhdWx0IDQuMAoJCSAqLwoJCW5vaXNlU2NhbGU/OiBTY2VuZVByb3BzWyJub2lzZVNjYWxlIl07CgkJLyoqCgkJICogQmFzZSBzdHJlbmd0aCBvZiB2aWduZXR0ZSBmYWxsb2ZmLgoJCSAqIEBkZWZhdWx0IDE1LjAKCQkgKi8KCQl2aWduZXR0ZVN0cmVuZ3RoPzogU2NlbmVQcm9wc1sidmlnbmV0dGVTdHJlbmd0aCJdOwoJCS8qKgoJCSAqIFZpZ25ldHRlIGN1cnZlIGV4cG9uZW50LgoJCSAqIExvd2VyIHZhbHVlcyBwcm9kdWNlIGEgc29mdGVyIHJvbGxvZmYuCgkJICogQGRlZmF1bHQgMC4yNQoJCSAqLwoJCXZpZ25ldHRlUG93ZXI/OiBTY2VuZVByb3BzWyJ2aWduZXR0ZVBvd2VyIl07CgkJLyoqCgkJICogT3BhY2l0eSBvZiB0aGUgdmlnbmV0dGUgZWZmZWN0LgoJCSAqIGAwYCBkaXNhYmxlcyB2aWduZXR0ZSBpbmZsdWVuY2UsIGAxYCBhcHBsaWVzIGZ1bGwgdmlnbmV0dGUuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJdmlnbmV0dGVPcGFjaXR5PzogU2NlbmVQcm9wc1sidmlnbmV0dGVPcGFjaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlicmlnaHRuZXNzID0gMS4wLAoJCWJsZW5kU3RyZW5ndGggPSAwLjAyLAoJCW5vaXNlU2NhbGUgPSA0LjAsCgkJdmlnbmV0dGVTdHJlbmd0aCA9IDE1LjAsCgkJdmlnbmV0dGVQb3dlciA9IDAuMjUsCgkJdmlnbmV0dGVPcGFjaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtzcGVlZH0KCQkJe2JyaWdodG5lc3N9CgkJCXtibGVuZFN0cmVuZ3RofQoJCQl7bm9pc2VTY2FsZX0KCQkJe3ZpZ25ldHRlU3RyZW5ndGh9CgkJCXt2aWduZXR0ZVBvd2VyfQoJCQl7dmlnbmV0dGVPcGFjaXR5fQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", - "components/glitter-cloth/GlitterClothScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFByaW1hcnkgY29sb3IgdXNlZCB0byBkZXJpdmUgdGhlIGZ1bGwgc2hhZGVyIHBhbGV0dGUuCgkJICogQGRlZmF1bHQgIiNGRjY5MDAiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIFNwZWVkIG11bHRpcGxpZXIgZm9yIHRoZSBmdWxsIHNoYWRlciBhbmltYXRpb24gdGltZWxpbmUuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyIGZvciB0aGUgYmFzZSBzaWxrIGNvbG9yLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWJyaWdodG5lc3M/OiBudW1iZXI7CgkJLyoqCgkJICogT3BhY2l0eSBvZiB0aGUgdml2aWQtbGlnaHQgZ2xpdHRlciBibGVuZC4KCQkgKiBAZGVmYXVsdCAwLjAyCgkJICovCgkJYmxlbmRTdHJlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBTcGF0aWFsIHNjYWxlIGZvciBzaW1wbGV4IG5vaXNlIHNhbXBsaW5nLgoJCSAqIExvd2VyIHZhbHVlcyBjcmVhdGUgZmluZXIgZ2xpdHRlci4KCQkgKiBAZGVmYXVsdCA0LjAKCQkgKi8KCQlub2lzZVNjYWxlPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2Ugc3RyZW5ndGggb2YgdmlnbmV0dGUgZmFsbG9mZi4KCQkgKiBAZGVmYXVsdCAxNS4wCgkJICovCgkJdmlnbmV0dGVTdHJlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBWaWduZXR0ZSBjdXJ2ZSBleHBvbmVudC4KCQkgKiBMb3dlciB2YWx1ZXMgcHJvZHVjZSBhIHNvZnRlciByb2xsb2ZmLgoJCSAqIEBkZWZhdWx0IDAuMjUKCQkgKi8KCQl2aWduZXR0ZVBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIE9wYWNpdHkgb2YgdGhlIHZpZ25ldHRlIGVmZmVjdC4KCQkgKiBgMGAgZGlzYWJsZXMgdmlnbmV0dGUgaW5mbHVlbmNlLCBgMWAgYXBwbGllcyBmdWxsIHZpZ25ldHRlLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXZpZ25ldHRlT3BhY2l0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yID0gIiNGRjY5MDAiLAoJCXNwZWVkID0gMS4wLAoJCWJyaWdodG5lc3MgPSAxLjAsCgkJYmxlbmRTdHJlbmd0aCA9IDAuMDIsCgkJbm9pc2VTY2FsZSA9IDQuMCwKCQl2aWduZXR0ZVN0cmVuZ3RoID0gMTUuMCwKCQl2aWduZXR0ZVBvd2VyID0gMC4yNSwKCQl2aWduZXR0ZU9wYWNpdHkgPSAxLjAsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXVUaW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVQcmltYXJ5Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QWNjZW50Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1U2hhZG93Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1U3BlZWQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVCcmlnaHRuZXNzOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1QmxlbmRTdHJlbmd0aDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdU5vaXNlU2NhbGU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVWaWduZXR0ZVN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1VmlnbmV0dGVQb3dlcjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVZpZ25ldHRlT3BhY2l0eTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9OwoKCWNvbnN0IERFRkFVTFRfUFJJTUFSWTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzEsIDEwNSAvIDI1NSwgMF07CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTxVbmlmb3JtU3RhdGU+KCk7CgoJY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCgljb25zdCBub3JtYWxpemVUcmlwbGV0ID0gKAoJCXI6IG51bWJlciwKCQlnOiBudW1iZXIsCgkJYjogbnVtYmVyLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHIsIGcsIGIpID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFtjbGFtcDAxKHIgLyBzY2FsZSksIGNsYW1wMDEoZyAvIHNjYWxlKSwgY2xhbXAwMShiIC8gc2NhbGUpXTsKCX07CgoJY29uc3QgcGFyc2VIZXhDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJY29uc3QgaGV4ID0gdmFsdWUucmVwbGFjZSgiIyIsICIiKS50cmltKCk7CgkJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleFsxXSArIGhleFsxXSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDAsIDIpLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCXJldHVybiBudWxsOwoJfTsKCglsZXQgY3NzQ29sb3JDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsIHwgdW5kZWZpbmVkOwoJY29uc3QgcGFyc2VDc3NDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwoJCWlmIChjc3NDb2xvckNvbnRleHQgPT09IHVuZGVmaW5lZCkgewoJCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQkJcGFyc2VyQ2FudmFzLndpZHRoID0gMTsKCQkJcGFyc2VyQ2FudmFzLmhlaWdodCA9IDE7CgkJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJCX0KCQlpZiAoIWNzc0NvbG9yQ29udGV4dCkgcmV0dXJuIG51bGw7CgoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7CgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlOwoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBjc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlOwoKCQlpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQkJcmV0dXJuIHBhcnNlSGV4Q29sb3Iobm9ybWFsaXplZCk7CgkJfQoKCQljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CgkJaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7CgkJY29uc3QgcGFydHMgPSBtYXRjaFsxXQoJCQkuc3BsaXQoIiwiKQoJCQkubWFwKChwYXJ0KSA9PiBOdW1iZXIucGFyc2VGbG9hdChwYXJ0LnRyaW0oKSkpCgkJCS5maWx0ZXIoKHBhcnQpID0+IE51bWJlci5pc0Zpbml0ZShwYXJ0KSk7CgkJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQlpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJCWNvbnN0IGludCA9IE1hdGgubWluKDB4ZmZmZmZmLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHZhbHVlKSkpOwoJCQlyZXR1cm4gWwoJCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJCSgoaW50ID4+IDgpICYgMjU1KSAvIDI1NSwKCQkJCShpbnQgJiAyNTUpIC8gMjU1LAoJCQldOwoJCX0KCgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTsKCQkJY29uc3QgcGFyc2VkID0gdHJpbW1lZC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcih0cmltbWVkKQoJCQkJOiBwYXJzZUNzc0NvbG9yKHRyaW1tZWQpOwoJCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJCX0KCgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCgkJaWYgKAoJCQl2YWx1ZSAmJgoJCQl0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmCgkJCSJyIiBpbiB2YWx1ZSAmJgoJCQkiZyIgaW4gdmFsdWUgJiYKCQkJImIiIGluIHZhbHVlCgkJKSB7CgkJCWNvbnN0IHJnYiA9IHZhbHVlIGFzIHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChyZ2IuciwgcmdiLmcsIHJnYi5iKTsKCQl9CgoJCXJldHVybiBmYWxsYmFjazsKCX07CgoJY29uc3QgdG9MaW5lYXJUcmlwbGV0ID0gKAoJCXZhbHVlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gWwoJCXNyZ2JUb0xpbmVhcih2YWx1ZVswXSksCgkJc3JnYlRvTGluZWFyKHZhbHVlWzFdKSwKCQlzcmdiVG9MaW5lYXIodmFsdWVbMl0pLAoJXTsKCgljb25zdCByZ2JUb0hzbCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IHsgaDogbnVtYmVyOyBzOiBudW1iZXI7IGw6IG51bWJlciB9ID0+IHsKCQljb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTsKCQljb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTsKCQljb25zdCBsID0gKG1heCArIG1pbikgKiAwLjU7CgoJCWlmIChtYXggPT09IG1pbikgcmV0dXJuIHsgaDogMCwgczogMCwgbCB9OwoKCQljb25zdCBkID0gbWF4IC0gbWluOwoJCWNvbnN0IHMgPSBsID4gMC41ID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKTsKCQlsZXQgaCA9IDA7CgoJCXN3aXRjaCAobWF4KSB7CgkJCWNhc2UgcjoKCQkJCWggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsKCQkJCWJyZWFrOwoJCQljYXNlIGc6CgkJCQloID0gKGIgLSByKSAvIGQgKyAyOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQloID0gKHIgLSBnKSAvIGQgKyA0OwoJCQkJYnJlYWs7CgkJfQoKCQloIC89IDY7CgkJcmV0dXJuIHsgaCwgcywgbCB9OwoJfTsKCgljb25zdCBodWUycmdiID0gKHA6IG51bWJlciwgcTogbnVtYmVyLCB0SW5wdXQ6IG51bWJlcikgPT4gewoJCWxldCB0ID0gdElucHV0OwoJCWlmICh0IDwgMCkgdCArPSAxOwoJCWlmICh0ID4gMSkgdCAtPSAxOwoJCWlmICh0IDwgMSAvIDYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0OwoJCWlmICh0IDwgMSAvIDIpIHJldHVybiBxOwoJCWlmICh0IDwgMiAvIDMpIHJldHVybiBwICsgKHEgLSBwKSAqICgyIC8gMyAtIHQpICogNjsKCQlyZXR1cm4gcDsKCX07CgoJY29uc3QgaHNsVG9SZ2IgPSAoCgkJaDogbnVtYmVyLAoJCXM6IG51bWJlciwKCQlsOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmIChzID09PSAwKSByZXR1cm4gW2wsIGwsIGxdOwoJCWNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzOwoJCWNvbnN0IHAgPSAyICogbCAtIHE7CgkJcmV0dXJuIFsKCQkJaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpLAoJCQlodWUycmdiKHAsIHEsIGgpLAoJCQlodWUycmdiKHAsIHEsIGggLSAxIC8gMyksCgkJXTsKCX07CgoJY29uc3QgZGVyaXZlUGFsZXR0ZSA9ICgKCQlwcmltYXJ5OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiB7CgkJYWNjZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07CgkJc2hhZG93OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07Cgl9ID0+IHsKCQljb25zdCBoc2wgPSByZ2JUb0hzbChwcmltYXJ5WzBdLCBwcmltYXJ5WzFdLCBwcmltYXJ5WzJdKTsKCQljb25zdCBhY2NlbnQgPSBoc2xUb1JnYigKCQkJKGhzbC5oICsgMC4wNCkgJSAxLAoJCQljbGFtcDAxKGhzbC5zICogMS4xKSwKCQkJY2xhbXAwMShoc2wubCAqIDEuMSArIDAuMDQpLAoJCSk7CgkJY29uc3Qgc2hhZG93ID0gaHNsVG9SZ2IoCgkJCWhzbC5oLAoJCQljbGFtcDAxKGhzbC5zICogMC41NSksCgkJCWNsYW1wMDEoaHNsLmwgKiAwLjQ1KSwKCQkpOwoJCXJldHVybiB7IGFjY2VudCwgc2hhZG93IH07Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdVByaW1hcnlDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdUFjY2VudENvbG9yOwoJCXVuaWZvcm0gdmVjMyB1U2hhZG93Q29sb3I7CgkJdW5pZm9ybSBmbG9hdCB1U3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1QnJpZ2h0bmVzczsKCQl1bmlmb3JtIGZsb2F0IHVCbGVuZFN0cmVuZ3RoOwoJCXVuaWZvcm0gZmxvYXQgdU5vaXNlU2NhbGU7CgkJdW5pZm9ybSBmbG9hdCB1VmlnbmV0dGVTdHJlbmd0aDsKCQl1bmlmb3JtIGZsb2F0IHVWaWduZXR0ZVBvd2VyOwoJCXVuaWZvcm0gZmxvYXQgdVZpZ25ldHRlT3BhY2l0eTsKCgkJY29uc3QgZmxvYXQgbm9pc2VTaXplQ29lZmYgPSAwLjYxOwoJCWNvbnN0IGZsb2F0IG5vaXNlRGVuc2l0eSA9IDUzLjA7CgoJCXZlYzMgbW9kMjg5KHZlYzMgeCkgewoJCQlyZXR1cm4geCAtIGZsb29yKHggKiAoMS4wIC8gMjg5LjApKSAqIDI4OS4wOwoJCX0KCgkJdmVjNCBtb2QyODkodmVjNCB4KSB7CgkJCXJldHVybiB4IC0gZmxvb3IoeCAqICgxLjAgLyAyODkuMCkpICogMjg5LjA7CgkJfQoKCQl2ZWM0IHBlcm11dGUodmVjNCB4KSB7CgkJCXJldHVybiBtb2QyODkoKCh4ICogMzQuMCkgKyAxLjApICogeCk7CgkJfQoKCQl2ZWM0IHRheWxvckludlNxcnQodmVjNCByKSB7CgkJCXJldHVybiAxLjc5Mjg0MjkxNDAwMTU5IC0gMC44NTM3MzQ3MjA5NTMxNCAqIHI7CgkJfQoKCQlmbG9hdCBzbm9pc2UodmVjMyB2KSB7CgkJCWNvbnN0IHZlYzIgQyA9IHZlYzIoMS4wIC8gNi4wLCAxLjAgLyAzLjApOwoJCQljb25zdCB2ZWM0IEQgPSB2ZWM0KDAuMCwgMC41LCAxLjAsIDIuMCk7CgoJCQl2ZWMzIGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXl5KSk7CgkJCXZlYzMgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eCk7CgoJCQl2ZWMzIGcgPSBzdGVwKHgwLnl6eCwgeDAueHl6KTsKCQkJdmVjMyBsID0gMS4wIC0gZzsKCQkJdmVjMyBpMSA9IG1pbihnLnh5eiwgbC56eHkpOwoJCQl2ZWMzIGkyID0gbWF4KGcueHl6LCBsLnp4eSk7CgoJCQl2ZWMzIHgxID0geDAgLSBpMSArIEMueHh4OwoJCQl2ZWMzIHgyID0geDAgLSBpMiArIEMueXl5OwoJCQl2ZWMzIHgzID0geDAgLSBELnl5eTsKCgkJCWkgPSBtb2QyODkoaSk7CgkJCXZlYzQgcCA9IHBlcm11dGUocGVybXV0ZShwZXJtdXRlKGkueiArIHZlYzQoMC4wLCBpMS56LCBpMi56LCAxLjApKSArCgkJCQlpLnkgKyB2ZWM0KDAuMCwgaTEueSwgaTIueSwgMS4wKSkgKwoJCQkJaS54ICsgdmVjNCgwLjAsIGkxLngsIGkyLngsIDEuMCkpOwoKCQkJZmxvYXQgbl8gPSAwLjE0Mjg1NzE0Mjg1NzsKCQkJdmVjMyBucyA9IG5fICogRC53eXogLSBELnh6eDsKCgkJCXZlYzQgaiA9IHAgLSA0OS4wICogZmxvb3IocCAqIG5zLnogKiBucy56KTsKCgkJCXZlYzQgeF8gPSBmbG9vcihqICogbnMueik7CgkJCXZlYzQgeV8gPSBmbG9vcihqIC0gNy4wICogeF8pOwoKCQkJdmVjNCB4ID0geF8gKiBucy54ICsgbnMueXl5eTsKCQkJdmVjNCB5ID0geV8gKiBucy54ICsgbnMueXl5eTsKCQkJdmVjNCBoID0gMS4wIC0gYWJzKHgpIC0gYWJzKHkpOwoKCQkJdmVjNCBiMCA9IHZlYzQoeC54eSwgeS54eSk7CgkJCXZlYzQgYjEgPSB2ZWM0KHguencsIHkuencpOwoKCQkJdmVjNCBzMCA9IGZsb29yKGIwKSAqIDIuMCArIDEuMDsKCQkJdmVjNCBzMSA9IGZsb29yKGIxKSAqIDIuMCArIDEuMDsKCQkJdmVjNCBzaCA9IC1zdGVwKGgsIHZlYzQoMC4wKSk7CgoJCQl2ZWM0IGEwID0gYjAueHp5dyArIHMwLnh6eXcgKiBzaC54eHl5OwoJCQl2ZWM0IGExID0gYjEueHp5dyArIHMxLnh6eXcgKiBzaC56end3OwoKCQkJdmVjMyBwMCA9IHZlYzMoYTAueHksIGgueCk7CgkJCXZlYzMgcDEgPSB2ZWMzKGEwLnp3LCBoLnkpOwoJCQl2ZWMzIHAyID0gdmVjMyhhMS54eSwgaC56KTsKCQkJdmVjMyBwMyA9IHZlYzMoYTEuencsIGgudyk7CgoJCQl2ZWM0IG5vcm0gPSB0YXlsb3JJbnZTcXJ0KHZlYzQoZG90KHAwLCBwMCksIGRvdChwMSwgcDEpLCBkb3QocDIsIHAyKSwgZG90KHAzLCBwMykpKTsKCQkJcDAgKj0gbm9ybS54OwoJCQlwMSAqPSBub3JtLnk7CgkJCXAyICo9IG5vcm0uejsKCQkJcDMgKj0gbm9ybS53OwoKCQkJdmVjNCBtID0gbWF4KG5vaXNlU2l6ZUNvZWZmIC0gdmVjNChkb3QoeDAsIHgwKSwgZG90KHgxLCB4MSksIGRvdCh4MiwgeDIpLCBkb3QoeDMsIHgzKSksIDAuMCk7CgkJCW0gPSBtICogbTsKCQkJcmV0dXJuIG5vaXNlRGVuc2l0eSAqIGRvdChtICogbSwgdmVjNChkb3QocDAsIHgwKSwgZG90KHAxLCB4MSksIGRvdChwMiwgeDIpLCBkb3QocDMsIHgzKSkpOwoJCX0KCgkJZmxvYXQgdml2aWRMaWdodChmbG9hdCBzLCBmbG9hdCBkKSB7CgkJCXJldHVybiAocyA8IDAuNSkgPyAxLjAgLSAoMS4wIC0gZCkgLyAoMi4wICogcykgOiBkIC8gKDIuMCAqICgxLjAgLSBzKSk7CgkJfQoKCQl2ZWMzIHZpdmlkTGlnaHQodmVjMyBzLCB2ZWMzIGQpIHsKCQkJdmVjMyBjOwoJCQljLnggPSB2aXZpZExpZ2h0KHMueCwgZC54KTsKCQkJYy55ID0gdml2aWRMaWdodChzLnksIGQueSk7CgkJCWMueiA9IHZpdmlkTGlnaHQocy56LCBkLnopOwoJCQlyZXR1cm4gYzsKCQl9CgoJCWZsb2F0IHZpZ25ldHRlKHZlYzIgdXYsIGZsb2F0IHN0cmVuZ3RoLCBmbG9hdCBwb3dlcikgewoJCQl1diAqPSAxLjAgLSB1di55eDsKCQkJZmxvYXQgdmlnID0gdXYueCAqIHV2LnkgKiBzdHJlbmd0aDsKCQkJdmlnID0gcG93KHZpZywgcG93ZXIpOwoJCQlyZXR1cm4gdmlnOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbkltYWdlKG91dCB2ZWM0IGNvbCwgdmVjMiBmcmFnQ29vcmQpIHsKCQkJZmxvYXQgdGltZSA9IHVUaW1lICogdVNwZWVkOwoJCQl2ZWMyIHJlc29sdXRpb24gPSB1UmVzb2x1dGlvbjsKCgkJCXZlYzIgdXYgPSBmcmFnQ29vcmQgLyByZXNvbHV0aW9uLnk7CgkJCWZsb2F0IHQgPSAwLjUgKiB0aW1lOwoJCQl1di55ICs9IDAuMDMgKiBzaW4oOC4wICogdXYueCAtIHQpOwoKCQkJZmxvYXQgZiA9IDAuNiArIDAuNCAqIHNpbig1LjAgKiAodXYueCArIHV2LnkgKyBjb3MoMy4wICogdXYueCArIDUuMCAqIHV2LnkpICsgMC4wMiAqIHQpICsKCQkJCXNpbigyMC4wICogKHV2LnggKyB1di55IC0gMC4xICogdCkpKTsKCgkJCWZsb2F0IGIgPSB1QnJpZ2h0bmVzczsKCQkJY29sID0gdmVjNCh1UHJpbWFyeUNvbG9yICogYiwgMS4wKSAqIHZlYzQoZik7CgoJCQl1diA9IGZyYWdDb29yZC54eSAvIHJlc29sdXRpb24ueHk7CgkJCWZsb2F0IHZpZyA9IHZpZ25ldHRlKHV2LCB1VmlnbmV0dGVTdHJlbmd0aCwgdVZpZ25ldHRlUG93ZXIpOwoJCQlmbG9hdCB2aWduZXR0ZU1hc2sgPSBtaXgoMS4wLCB2aWcsIHVWaWduZXR0ZU9wYWNpdHkpOwoKCQkJZmxvYXQgZmFkZUxSID0gMC43IC0gYWJzKHV2LnggLSAwLjQpOwoJCQlmbG9hdCBmYWRlVEIgPSAxLjEgLSB1di55OwoJCQl2ZWMzIHBvcyA9IHZlYzModXYgKiB2ZWMyKDMuMCwgMS4wKSAtIHZlYzIoMC4wLCB0aW1lICogMC4wMDAwNSksIHRpbWUgKiAwLjAwNik7CgoJCQlmbG9hdCBuID0gZmFkZUxSICogZmFkZVRCICogc21vb3Roc3RlcCgwLjUwLCAxLjAsIHNub2lzZShwb3MgKiByZXNvbHV0aW9uLnkgLyB1Tm9pc2VTY2FsZSkpICogOC4wOwoJCQl2ZWMzIG5vaXNlR3JleVNoaWZ0ZWQgPSBtaW4oKHZlYzMobikgKyAxLjApIC8gMy4wICsgMC4zLCB2ZWMzKDEuMCkpICogMC45MTsKCgkJCXZlYzMgbWl4ZWQgPSBjb2wueHl6OwoJCQltaXhlZCA9IG1peChjb2wueHl6LCB2aXZpZExpZ2h0KG5vaXNlR3JleVNoaWZ0ZWQsIGNvbC54eXopLCB1QmxlbmRTdHJlbmd0aCk7CgkJCWNvbCA9IHZlYzQobWl4ZWQsIDEuMCkgKiB2aWduZXR0ZU1hc2s7CgoJCQlmbG9hdCBrID0gKHNpbih0aW1lIC8gMS4wKSArIDEuMCkgLyA0LjAgKyAwLjc1OwoJCQljb2wucmdiIC09IHVBY2NlbnRDb2xvciAqICgoMS4wIC0gdXYueSkgKiAwLjEgKiBrKTsKCQkJY29sLnJnYiAtPSB2ZWMzKHVTaGFkb3dDb2xvci5yLCB1U2hhZG93Q29sb3IuZyAqIDAuOCwgdVNoYWRvd0NvbG9yLmIpICogKHV2LnkgLyA4LjApOwoJCQljb2wuYSA9IDEuMDsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCXZlYzIgZnJhZ0Nvb3JkID0gdlV2ICogdVJlc29sdXRpb24ueHk7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIGZyYWdDb29yZCk7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQljb25zdCBwcmltYXJ5U3JnYiA9IHRvUmdiKGNvbG9yLCBERUZBVUxUX1BSSU1BUlkpOwoJCWNvbnN0IHBhbGV0dGVTcmdiID0gZGVyaXZlUGFsZXR0ZShwcmltYXJ5U3JnYik7CgkJY29uc3QgcHJpbWFyeSA9IHRvTGluZWFyVHJpcGxldChwcmltYXJ5U3JnYik7CgkJY29uc3QgYWNjZW50ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLmFjY2VudCk7CgkJY29uc3Qgc2hhZG93ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLnNoYWRvdyk7CgkJdW5pZm9ybXMudVByaW1hcnlDb2xvci52YWx1ZS5zZXQocHJpbWFyeVswXSwgcHJpbWFyeVsxXSwgcHJpbWFyeVsyXSk7CgkJdW5pZm9ybXMudUFjY2VudENvbG9yLnZhbHVlLnNldChhY2NlbnRbMF0sIGFjY2VudFsxXSwgYWNjZW50WzJdKTsKCQl1bmlmb3Jtcy51U2hhZG93Q29sb3IudmFsdWUuc2V0KHNoYWRvd1swXSwgc2hhZG93WzFdLCBzaGFkb3dbMl0pOwoJCXVuaWZvcm1zLnVTcGVlZC52YWx1ZSA9IHNwZWVkOwoJCXVuaWZvcm1zLnVCcmlnaHRuZXNzLnZhbHVlID0gYnJpZ2h0bmVzczsKCQl1bmlmb3Jtcy51QmxlbmRTdHJlbmd0aC52YWx1ZSA9IGJsZW5kU3RyZW5ndGg7CgkJdW5pZm9ybXMudU5vaXNlU2NhbGUudmFsdWUgPSBub2lzZVNjYWxlOwoJCXVuaWZvcm1zLnVWaWduZXR0ZVN0cmVuZ3RoLnZhbHVlID0gdmlnbmV0dGVTdHJlbmd0aDsKCQl1bmlmb3Jtcy51VmlnbmV0dGVQb3dlci52YWx1ZSA9IHZpZ25ldHRlUG93ZXI7CgkJdW5pZm9ybXMudVZpZ25ldHRlT3BhY2l0eS52YWx1ZSA9IHZpZ25ldHRlT3BhY2l0eTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBwcmltYXJ5U3JnYiA9IHRvUmdiKGNvbG9yLCBERUZBVUxUX1BSSU1BUlkpOwoJCWNvbnN0IHBhbGV0dGVTcmdiID0gZGVyaXZlUGFsZXR0ZShwcmltYXJ5U3JnYik7CgkJY29uc3QgcHJpbWFyeSA9IHRvTGluZWFyVHJpcGxldChwcmltYXJ5U3JnYik7CgkJY29uc3QgYWNjZW50ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLmFjY2VudCk7CgkJY29uc3Qgc2hhZG93ID0gdG9MaW5lYXJUcmlwbGV0KHBhbGV0dGVTcmdiLnNoYWRvdyk7CgkJY29uc3QgbG9jYWxVbmlmb3JtczogVW5pZm9ybVN0YXRlID0gewoJCQl1VGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVByaW1hcnlDb2xvcjogeyB2YWx1ZTogbmV3IFZlYzMocHJpbWFyeVswXSwgcHJpbWFyeVsxXSwgcHJpbWFyeVsyXSkgfSwKCQkJdUFjY2VudENvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoYWNjZW50WzBdLCBhY2NlbnRbMV0sIGFjY2VudFsyXSksCgkJCX0sCgkJCXVTaGFkb3dDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKHNoYWRvd1swXSwgc2hhZG93WzFdLCBzaGFkb3dbMl0pLAoJCQl9LAoJCQl1U3BlZWQ6IHsgdmFsdWU6IHNwZWVkIH0sCgkJCXVCcmlnaHRuZXNzOiB7IHZhbHVlOiBicmlnaHRuZXNzIH0sCgkJCXVCbGVuZFN0cmVuZ3RoOiB7IHZhbHVlOiBibGVuZFN0cmVuZ3RoIH0sCgkJCXVOb2lzZVNjYWxlOiB7IHZhbHVlOiBub2lzZVNjYWxlIH0sCgkJCXVWaWduZXR0ZVN0cmVuZ3RoOiB7IHZhbHVlOiB2aWduZXR0ZVN0cmVuZ3RoIH0sCgkJCXVWaWduZXR0ZVBvd2VyOiB7IHZhbHVlOiB2aWduZXR0ZVBvd2VyIH0sCgkJCXVWaWduZXR0ZU9wYWNpdHk6IHsgdmFsdWU6IHZpZ25ldHRlT3BhY2l0eSB9LAoJCX07CgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCQkJbG9jYWxVbmlmb3Jtcy51VGltZS52YWx1ZSArPSBkZWx0YTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/glitter-cloth/GlitterClothScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoJaW1wb3J0IHsKCQljbGFtcDAxLAoJCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlzcmdiVG9MaW5lYXIsCgkJdG9SZ2IsCgl9IGZyb20gIi4uL2hlbHBlcnMvY29sb3IiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogUHJpbWFyeSBjb2xvciB1c2VkIHRvIGRlcml2ZSB0aGUgZnVsbCBzaGFkZXIgcGFsZXR0ZS4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQljb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogU3BlZWQgbXVsdGlwbGllciBmb3IgdGhlIGZ1bGwgc2hhZGVyIGFuaW1hdGlvbiB0aW1lbGluZS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzcGVlZD86IG51bWJlcjsKCQkvKioKCQkgKiBHbG9iYWwgaW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBiYXNlIHNpbGsgY29sb3IuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJYnJpZ2h0bmVzcz86IG51bWJlcjsKCQkvKioKCQkgKiBPcGFjaXR5IG9mIHRoZSB2aXZpZC1saWdodCBnbGl0dGVyIGJsZW5kLgoJCSAqIEBkZWZhdWx0IDAuMDIKCQkgKi8KCQlibGVuZFN0cmVuZ3RoPzogbnVtYmVyOwoJCS8qKgoJCSAqIFNwYXRpYWwgc2NhbGUgZm9yIHNpbXBsZXggbm9pc2Ugc2FtcGxpbmcuCgkJICogTG93ZXIgdmFsdWVzIGNyZWF0ZSBmaW5lciBnbGl0dGVyLgoJCSAqIEBkZWZhdWx0IDQuMAoJCSAqLwoJCW5vaXNlU2NhbGU/OiBudW1iZXI7CgkJLyoqCgkJICogQmFzZSBzdHJlbmd0aCBvZiB2aWduZXR0ZSBmYWxsb2ZmLgoJCSAqIEBkZWZhdWx0IDE1LjAKCQkgKi8KCQl2aWduZXR0ZVN0cmVuZ3RoPzogbnVtYmVyOwoJCS8qKgoJCSAqIFZpZ25ldHRlIGN1cnZlIGV4cG9uZW50LgoJCSAqIExvd2VyIHZhbHVlcyBwcm9kdWNlIGEgc29mdGVyIHJvbGxvZmYuCgkJICogQGRlZmF1bHQgMC4yNQoJCSAqLwoJCXZpZ25ldHRlUG93ZXI/OiBudW1iZXI7CgkJLyoqCgkJICogT3BhY2l0eSBvZiB0aGUgdmlnbmV0dGUgZWZmZWN0LgoJCSAqIGAwYCBkaXNhYmxlcyB2aWduZXR0ZSBpbmZsdWVuY2UsIGAxYCBhcHBsaWVzIGZ1bGwgdmlnbmV0dGUuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJdmlnbmV0dGVPcGFjaXR5PzogbnVtYmVyOwoJfQoKCWxldCB7CgkJY29sb3IgPSAiI0ZGNjkwMCIsCgkJc3BlZWQgPSAxLjAsCgkJYnJpZ2h0bmVzcyA9IDEuMCwKCQlibGVuZFN0cmVuZ3RoID0gMC4wMiwKCQlub2lzZVNjYWxlID0gNC4wLAoJCXZpZ25ldHRlU3RyZW5ndGggPSAxNS4wLAoJCXZpZ25ldHRlUG93ZXIgPSAwLjI1LAoJCXZpZ25ldHRlT3BhY2l0eSA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdVRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWMyIH07CgkJdVByaW1hcnlDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVBY2NlbnRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVTaGFkb3dDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVTcGVlZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUJyaWdodG5lc3M6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVCbGVuZFN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Tm9pc2VTY2FsZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVZpZ25ldHRlU3RyZW5ndGg6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVWaWduZXR0ZVBvd2VyOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1VmlnbmV0dGVPcGFjaXR5OiB7IHZhbHVlOiBudW1iZXIgfTsKCX07CgoJY29uc3QgREVGQVVMVF9QUklNQVJZOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMSwgMTA1IC8gMjU1LCAwXTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPFVuaWZvcm1TdGF0ZT4oKTsKCgljb25zdCB0b0xpbmVhclRyaXBsZXQgPSAoCgkJdmFsdWU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiBbCgkJc3JnYlRvTGluZWFyKHZhbHVlWzBdKSwKCQlzcmdiVG9MaW5lYXIodmFsdWVbMV0pLAoJCXNyZ2JUb0xpbmVhcih2YWx1ZVsyXSksCgldOwoKCWNvbnN0IHJnYlRvSHNsID0gKAoJCXI6IG51bWJlciwKCQlnOiBudW1iZXIsCgkJYjogbnVtYmVyLAoJKTogeyBoOiBudW1iZXI7IHM6IG51bWJlcjsgbDogbnVtYmVyIH0gPT4gewoJCWNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpOwoJCWNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpOwoJCWNvbnN0IGwgPSAobWF4ICsgbWluKSAqIDAuNTsKCgkJaWYgKG1heCA9PT0gbWluKSByZXR1cm4geyBoOiAwLCBzOiAwLCBsIH07CgoJCWNvbnN0IGQgPSBtYXggLSBtaW47CgkJY29uc3QgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pOwoJCWxldCBoID0gMDsKCgkJc3dpdGNoIChtYXgpIHsKCQkJY2FzZSByOgoJCQkJaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApOwoJCQkJYnJlYWs7CgkJCWNhc2UgZzoKCQkJCWggPSAoYiAtIHIpIC8gZCArIDI7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWggPSAociAtIGcpIC8gZCArIDQ7CgkJCQlicmVhazsKCQl9CgoJCWggLz0gNjsKCQlyZXR1cm4geyBoLCBzLCBsIH07Cgl9OwoKCWNvbnN0IGh1ZTJyZ2IgPSAocDogbnVtYmVyLCBxOiBudW1iZXIsIHRJbnB1dDogbnVtYmVyKSA9PiB7CgkJbGV0IHQgPSB0SW5wdXQ7CgkJaWYgKHQgPCAwKSB0ICs9IDE7CgkJaWYgKHQgPiAxKSB0IC09IDE7CgkJaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7CgkJaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7CgkJaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2OwoJCXJldHVybiBwOwoJfTsKCgljb25zdCBoc2xUb1JnYiA9ICgKCQloOiBudW1iZXIsCgkJczogbnVtYmVyLAoJCWw6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJaWYgKHMgPT09IDApIHJldHVybiBbbCwgbCwgbF07CgkJY29uc3QgcSA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7CgkJY29uc3QgcCA9IDIgKiBsIC0gcTsKCQlyZXR1cm4gWwoJCQlodWUycmdiKHAsIHEsIGggKyAxIC8gMyksCgkJCWh1ZTJyZ2IocCwgcSwgaCksCgkJCWh1ZTJyZ2IocCwgcSwgaCAtIDEgLyAzKSwKCQldOwoJfTsKCgljb25zdCBkZXJpdmVQYWxldHRlID0gKAoJCXByaW1hcnk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IHsKCQlhY2NlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTsKCQlzaGFkb3c6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTsKCX0gPT4gewoJCWNvbnN0IGhzbCA9IHJnYlRvSHNsKHByaW1hcnlbMF0sIHByaW1hcnlbMV0sIHByaW1hcnlbMl0pOwoJCWNvbnN0IGFjY2VudCA9IGhzbFRvUmdiKAoJCQkoaHNsLmggKyAwLjA0KSAlIDEsCgkJCWNsYW1wMDEoaHNsLnMgKiAxLjEpLAoJCQljbGFtcDAxKGhzbC5sICogMS4xICsgMC4wNCksCgkJKTsKCQljb25zdCBzaGFkb3cgPSBoc2xUb1JnYigKCQkJaHNsLmgsCgkJCWNsYW1wMDEoaHNsLnMgKiAwLjU1KSwKCQkJY2xhbXAwMShoc2wubCAqIDAuNDUpLAoJCSk7CgkJcmV0dXJuIHsgYWNjZW50LCBzaGFkb3cgfTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMyB1UHJpbWFyeUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QWNjZW50Q29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVTaGFkb3dDb2xvcjsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZDsKCQl1bmlmb3JtIGZsb2F0IHVCcmlnaHRuZXNzOwoJCXVuaWZvcm0gZmxvYXQgdUJsZW5kU3RyZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1Tm9pc2VTY2FsZTsKCQl1bmlmb3JtIGZsb2F0IHVWaWduZXR0ZVN0cmVuZ3RoOwoJCXVuaWZvcm0gZmxvYXQgdVZpZ25ldHRlUG93ZXI7CgkJdW5pZm9ybSBmbG9hdCB1VmlnbmV0dGVPcGFjaXR5OwoKCQljb25zdCBmbG9hdCBub2lzZVNpemVDb2VmZiA9IDAuNjE7CgkJY29uc3QgZmxvYXQgbm9pc2VEZW5zaXR5ID0gNTMuMDsKCgkJdmVjMyBtb2QyODkodmVjMyB4KSB7CgkJCXJldHVybiB4IC0gZmxvb3IoeCAqICgxLjAgLyAyODkuMCkpICogMjg5LjA7CgkJfQoKCQl2ZWM0IG1vZDI4OSh2ZWM0IHgpIHsKCQkJcmV0dXJuIHggLSBmbG9vcih4ICogKDEuMCAvIDI4OS4wKSkgKiAyODkuMDsKCQl9CgoJCXZlYzQgcGVybXV0ZSh2ZWM0IHgpIHsKCQkJcmV0dXJuIG1vZDI4OSgoKHggKiAzNC4wKSArIDEuMCkgKiB4KTsKCQl9CgoJCXZlYzQgdGF5bG9ySW52U3FydCh2ZWM0IHIpIHsKCQkJcmV0dXJuIDEuNzkyODQyOTE0MDAxNTkgLSAwLjg1MzczNDcyMDk1MzE0ICogcjsKCQl9CgoJCWZsb2F0IHNub2lzZSh2ZWMzIHYpIHsKCQkJY29uc3QgdmVjMiBDID0gdmVjMigxLjAgLyA2LjAsIDEuMCAvIDMuMCk7CgkJCWNvbnN0IHZlYzQgRCA9IHZlYzQoMC4wLCAwLjUsIDEuMCwgMi4wKTsKCgkJCXZlYzMgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eXkpKTsKCQkJdmVjMyB4MCA9IHYgLSBpICsgZG90KGksIEMueHh4KTsKCgkJCXZlYzMgZyA9IHN0ZXAoeDAueXp4LCB4MC54eXopOwoJCQl2ZWMzIGwgPSAxLjAgLSBnOwoJCQl2ZWMzIGkxID0gbWluKGcueHl6LCBsLnp4eSk7CgkJCXZlYzMgaTIgPSBtYXgoZy54eXosIGwuenh5KTsKCgkJCXZlYzMgeDEgPSB4MCAtIGkxICsgQy54eHg7CgkJCXZlYzMgeDIgPSB4MCAtIGkyICsgQy55eXk7CgkJCXZlYzMgeDMgPSB4MCAtIEQueXl5OwoKCQkJaSA9IG1vZDI4OShpKTsKCQkJdmVjNCBwID0gcGVybXV0ZShwZXJtdXRlKHBlcm11dGUoaS56ICsgdmVjNCgwLjAsIGkxLnosIGkyLnosIDEuMCkpICsKCQkJCWkueSArIHZlYzQoMC4wLCBpMS55LCBpMi55LCAxLjApKSArCgkJCQlpLnggKyB2ZWM0KDAuMCwgaTEueCwgaTIueCwgMS4wKSk7CgoJCQlmbG9hdCBuXyA9IDAuMTQyODU3MTQyODU3OwoJCQl2ZWMzIG5zID0gbl8gKiBELnd5eiAtIEQueHp4OwoKCQkJdmVjNCBqID0gcCAtIDQ5LjAgKiBmbG9vcihwICogbnMueiAqIG5zLnopOwoKCQkJdmVjNCB4XyA9IGZsb29yKGogKiBucy56KTsKCQkJdmVjNCB5XyA9IGZsb29yKGogLSA3LjAgKiB4Xyk7CgoJCQl2ZWM0IHggPSB4XyAqIG5zLnggKyBucy55eXl5OwoJCQl2ZWM0IHkgPSB5XyAqIG5zLnggKyBucy55eXl5OwoJCQl2ZWM0IGggPSAxLjAgLSBhYnMoeCkgLSBhYnMoeSk7CgoJCQl2ZWM0IGIwID0gdmVjNCh4Lnh5LCB5Lnh5KTsKCQkJdmVjNCBiMSA9IHZlYzQoeC56dywgeS56dyk7CgoJCQl2ZWM0IHMwID0gZmxvb3IoYjApICogMi4wICsgMS4wOwoJCQl2ZWM0IHMxID0gZmxvb3IoYjEpICogMi4wICsgMS4wOwoJCQl2ZWM0IHNoID0gLXN0ZXAoaCwgdmVjNCgwLjApKTsKCgkJCXZlYzQgYTAgPSBiMC54enl3ICsgczAueHp5dyAqIHNoLnh4eXk7CgkJCXZlYzQgYTEgPSBiMS54enl3ICsgczEueHp5dyAqIHNoLnp6d3c7CgoJCQl2ZWMzIHAwID0gdmVjMyhhMC54eSwgaC54KTsKCQkJdmVjMyBwMSA9IHZlYzMoYTAuencsIGgueSk7CgkJCXZlYzMgcDIgPSB2ZWMzKGExLnh5LCBoLnopOwoJCQl2ZWMzIHAzID0gdmVjMyhhMS56dywgaC53KTsKCgkJCXZlYzQgbm9ybSA9IHRheWxvckludlNxcnQodmVjNChkb3QocDAsIHAwKSwgZG90KHAxLCBwMSksIGRvdChwMiwgcDIpLCBkb3QocDMsIHAzKSkpOwoJCQlwMCAqPSBub3JtLng7CgkJCXAxICo9IG5vcm0ueTsKCQkJcDIgKj0gbm9ybS56OwoJCQlwMyAqPSBub3JtLnc7CgoJCQl2ZWM0IG0gPSBtYXgobm9pc2VTaXplQ29lZmYgLSB2ZWM0KGRvdCh4MCwgeDApLCBkb3QoeDEsIHgxKSwgZG90KHgyLCB4MiksIGRvdCh4MywgeDMpKSwgMC4wKTsKCQkJbSA9IG0gKiBtOwoJCQlyZXR1cm4gbm9pc2VEZW5zaXR5ICogZG90KG0gKiBtLCB2ZWM0KGRvdChwMCwgeDApLCBkb3QocDEsIHgxKSwgZG90KHAyLCB4MiksIGRvdChwMywgeDMpKSk7CgkJfQoKCQlmbG9hdCB2aXZpZExpZ2h0KGZsb2F0IHMsIGZsb2F0IGQpIHsKCQkJcmV0dXJuIChzIDwgMC41KSA/IDEuMCAtICgxLjAgLSBkKSAvICgyLjAgKiBzKSA6IGQgLyAoMi4wICogKDEuMCAtIHMpKTsKCQl9CgoJCXZlYzMgdml2aWRMaWdodCh2ZWMzIHMsIHZlYzMgZCkgewoJCQl2ZWMzIGM7CgkJCWMueCA9IHZpdmlkTGlnaHQocy54LCBkLngpOwoJCQljLnkgPSB2aXZpZExpZ2h0KHMueSwgZC55KTsKCQkJYy56ID0gdml2aWRMaWdodChzLnosIGQueik7CgkJCXJldHVybiBjOwoJCX0KCgkJZmxvYXQgdmlnbmV0dGUodmVjMiB1diwgZmxvYXQgc3RyZW5ndGgsIGZsb2F0IHBvd2VyKSB7CgkJCXV2ICo9IDEuMCAtIHV2Lnl4OwoJCQlmbG9hdCB2aWcgPSB1di54ICogdXYueSAqIHN0cmVuZ3RoOwoJCQl2aWcgPSBwb3codmlnLCBwb3dlcik7CgkJCXJldHVybiB2aWc7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdm9pZCBtYWluSW1hZ2Uob3V0IHZlYzQgY29sLCB2ZWMyIGZyYWdDb29yZCkgewoJCQlmbG9hdCB0aW1lID0gdVRpbWUgKiB1U3BlZWQ7CgkJCXZlYzIgcmVzb2x1dGlvbiA9IHVSZXNvbHV0aW9uOwoKCQkJdmVjMiB1diA9IGZyYWdDb29yZCAvIHJlc29sdXRpb24ueTsKCQkJZmxvYXQgdCA9IDAuNSAqIHRpbWU7CgkJCXV2LnkgKz0gMC4wMyAqIHNpbig4LjAgKiB1di54IC0gdCk7CgoJCQlmbG9hdCBmID0gMC42ICsgMC40ICogc2luKDUuMCAqICh1di54ICsgdXYueSArIGNvcygzLjAgKiB1di54ICsgNS4wICogdXYueSkgKyAwLjAyICogdCkgKwoJCQkJc2luKDIwLjAgKiAodXYueCArIHV2LnkgLSAwLjEgKiB0KSkpOwoKCQkJZmxvYXQgYiA9IHVCcmlnaHRuZXNzOwoJCQljb2wgPSB2ZWM0KHVQcmltYXJ5Q29sb3IgKiBiLCAxLjApICogdmVjNChmKTsKCgkJCXV2ID0gZnJhZ0Nvb3JkLnh5IC8gcmVzb2x1dGlvbi54eTsKCQkJZmxvYXQgdmlnID0gdmlnbmV0dGUodXYsIHVWaWduZXR0ZVN0cmVuZ3RoLCB1VmlnbmV0dGVQb3dlcik7CgkJCWZsb2F0IHZpZ25ldHRlTWFzayA9IG1peCgxLjAsIHZpZywgdVZpZ25ldHRlT3BhY2l0eSk7CgoJCQlmbG9hdCBmYWRlTFIgPSAwLjcgLSBhYnModXYueCAtIDAuNCk7CgkJCWZsb2F0IGZhZGVUQiA9IDEuMSAtIHV2Lnk7CgkJCXZlYzMgcG9zID0gdmVjMyh1diAqIHZlYzIoMy4wLCAxLjApIC0gdmVjMigwLjAsIHRpbWUgKiAwLjAwMDA1KSwgdGltZSAqIDAuMDA2KTsKCgkJCWZsb2F0IG4gPSBmYWRlTFIgKiBmYWRlVEIgKiBzbW9vdGhzdGVwKDAuNTAsIDEuMCwgc25vaXNlKHBvcyAqIHJlc29sdXRpb24ueSAvIHVOb2lzZVNjYWxlKSkgKiA4LjA7CgkJCXZlYzMgbm9pc2VHcmV5U2hpZnRlZCA9IG1pbigodmVjMyhuKSArIDEuMCkgLyAzLjAgKyAwLjMsIHZlYzMoMS4wKSkgKiAwLjkxOwoKCQkJdmVjMyBtaXhlZCA9IGNvbC54eXo7CgkJCW1peGVkID0gbWl4KGNvbC54eXosIHZpdmlkTGlnaHQobm9pc2VHcmV5U2hpZnRlZCwgY29sLnh5eiksIHVCbGVuZFN0cmVuZ3RoKTsKCQkJY29sID0gdmVjNChtaXhlZCwgMS4wKSAqIHZpZ25ldHRlTWFzazsKCgkJCWZsb2F0IGsgPSAoc2luKHRpbWUgLyAxLjApICsgMS4wKSAvIDQuMCArIDAuNzU7CgkJCWNvbC5yZ2IgLT0gdUFjY2VudENvbG9yICogKCgxLjAgLSB1di55KSAqIDAuMSAqIGspOwoJCQljb2wucmdiIC09IHZlYzModVNoYWRvd0NvbG9yLnIsIHVTaGFkb3dDb2xvci5nICogMC44LCB1U2hhZG93Q29sb3IuYikgKiAodXYueSAvIDguMCk7CgkJCWNvbC5hID0gMS4wOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IGZyYWdDb2xvcjsKCQkJdmVjMiBmcmFnQ29vcmQgPSB2VXYgKiB1UmVzb2x1dGlvbi54eTsKCQkJbWFpbkltYWdlKGZyYWdDb2xvciwgZnJhZ0Nvb3JkKTsKCQkJZnJhZ0NvbG9yLnJnYiA9IGxpbmVhclRvU3JnYihmcmFnQ29sb3IucmdiKTsKCQkJZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWNvbnN0IHByaW1hcnlTcmdiID0gdG9SZ2IoY29sb3IsIERFRkFVTFRfUFJJTUFSWSk7CgkJY29uc3QgcGFsZXR0ZVNyZ2IgPSBkZXJpdmVQYWxldHRlKHByaW1hcnlTcmdiKTsKCQljb25zdCBwcmltYXJ5ID0gdG9MaW5lYXJUcmlwbGV0KHByaW1hcnlTcmdiKTsKCQljb25zdCBhY2NlbnQgPSB0b0xpbmVhclRyaXBsZXQocGFsZXR0ZVNyZ2IuYWNjZW50KTsKCQljb25zdCBzaGFkb3cgPSB0b0xpbmVhclRyaXBsZXQocGFsZXR0ZVNyZ2Iuc2hhZG93KTsKCQl1bmlmb3Jtcy51UHJpbWFyeUNvbG9yLnZhbHVlLnNldChwcmltYXJ5WzBdLCBwcmltYXJ5WzFdLCBwcmltYXJ5WzJdKTsKCQl1bmlmb3Jtcy51QWNjZW50Q29sb3IudmFsdWUuc2V0KGFjY2VudFswXSwgYWNjZW50WzFdLCBhY2NlbnRbMl0pOwoJCXVuaWZvcm1zLnVTaGFkb3dDb2xvci52YWx1ZS5zZXQoc2hhZG93WzBdLCBzaGFkb3dbMV0sIHNoYWRvd1syXSk7CgkJdW5pZm9ybXMudVNwZWVkLnZhbHVlID0gc3BlZWQ7CgkJdW5pZm9ybXMudUJyaWdodG5lc3MudmFsdWUgPSBicmlnaHRuZXNzOwoJCXVuaWZvcm1zLnVCbGVuZFN0cmVuZ3RoLnZhbHVlID0gYmxlbmRTdHJlbmd0aDsKCQl1bmlmb3Jtcy51Tm9pc2VTY2FsZS52YWx1ZSA9IG5vaXNlU2NhbGU7CgkJdW5pZm9ybXMudVZpZ25ldHRlU3RyZW5ndGgudmFsdWUgPSB2aWduZXR0ZVN0cmVuZ3RoOwoJCXVuaWZvcm1zLnVWaWduZXR0ZVBvd2VyLnZhbHVlID0gdmlnbmV0dGVQb3dlcjsKCQl1bmlmb3Jtcy51VmlnbmV0dGVPcGFjaXR5LnZhbHVlID0gdmlnbmV0dGVPcGFjaXR5OwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IHByaW1hcnlTcmdiID0gdG9SZ2IoY29sb3IsIERFRkFVTFRfUFJJTUFSWSk7CgkJY29uc3QgcGFsZXR0ZVNyZ2IgPSBkZXJpdmVQYWxldHRlKHByaW1hcnlTcmdiKTsKCQljb25zdCBwcmltYXJ5ID0gdG9MaW5lYXJUcmlwbGV0KHByaW1hcnlTcmdiKTsKCQljb25zdCBhY2NlbnQgPSB0b0xpbmVhclRyaXBsZXQocGFsZXR0ZVNyZ2IuYWNjZW50KTsKCQljb25zdCBzaGFkb3cgPSB0b0xpbmVhclRyaXBsZXQocGFsZXR0ZVNyZ2Iuc2hhZG93KTsKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1UHJpbWFyeUNvbG9yOiB7IHZhbHVlOiBuZXcgVmVjMyhwcmltYXJ5WzBdLCBwcmltYXJ5WzFdLCBwcmltYXJ5WzJdKSB9LAoJCQl1QWNjZW50Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhhY2NlbnRbMF0sIGFjY2VudFsxXSwgYWNjZW50WzJdKSwKCQkJfSwKCQkJdVNoYWRvd0NvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoc2hhZG93WzBdLCBzaGFkb3dbMV0sIHNoYWRvd1syXSksCgkJCX0sCgkJCXVTcGVlZDogeyB2YWx1ZTogc3BlZWQgfSwKCQkJdUJyaWdodG5lc3M6IHsgdmFsdWU6IGJyaWdodG5lc3MgfSwKCQkJdUJsZW5kU3RyZW5ndGg6IHsgdmFsdWU6IGJsZW5kU3RyZW5ndGggfSwKCQkJdU5vaXNlU2NhbGU6IHsgdmFsdWU6IG5vaXNlU2NhbGUgfSwKCQkJdVZpZ25ldHRlU3RyZW5ndGg6IHsgdmFsdWU6IHZpZ25ldHRlU3RyZW5ndGggfSwKCQkJdVZpZ25ldHRlUG93ZXI6IHsgdmFsdWU6IHZpZ25ldHRlUG93ZXIgfSwKCQkJdVZpZ25ldHRlT3BhY2l0eTogeyB2YWx1ZTogdmlnbmV0dGVPcGFjaXR5IH0sCgkJfTsKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/globe/Globe.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBDYW52YXMgfSBmcm9tICJAdGhyZWx0ZS9jb3JlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dsb2JlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcywgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgdHlwZSB7IEdsb2JlTWFya2VyLCBHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0IH0gZnJvbSAiLi90eXBlcyI7CglpbXBvcnQgeyBOb1RvbmVNYXBwaW5nIH0gZnJvbSAidGhyZWUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgc3BoZXJlLgoJCSAqIEBkZWZhdWx0IDIKCQkgKi8KCQlyYWRpdXM/OiBTY2VuZVByb3BzWyJyYWRpdXMiXTsKCQkvKioKCQkgKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogU2NlbmVQcm9wc1siZnJlc25lbENvbmZpZyJdOwoJCS8qKgoJCSAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdG1vc3BoZXJpYyBoYWxvLgoJCSAqLwoJCWF0bW9zcGhlcmVDb25maWc/OiBTY2VuZVByb3BzWyJhdG1vc3BoZXJlQ29uZmlnIl07CgkJLyoqCgkJICogTnVtYmVyIG9mIHBvaW50cyByZW5kZXJlZCBvbiB0aGUgc3VyZmFjZS4KCQkgKiBAZGVmYXVsdCAxNTAwMAoJCSAqLwoJCXBvaW50Q291bnQ/OiBTY2VuZVByb3BzWyJwb2ludENvdW50Il07CgkJLyoqCgkJICogQ29sb3IgYXBwbGllZCB0byBwb2ludHMgdGhhdCBmYWxsIG9uIGxhbmQuCgkJICogQGRlZmF1bHQgIiNmNzcxMTQiCgkJICovCgkJbGFuZFBvaW50Q29sb3I/OiBTY2VuZVByb3BzWyJsYW5kUG9pbnRDb2xvciJdOwoJCS8qKgoJCSAqIFNpemUgb2YgZWFjaCBwb2ludCBpbiB3b3JsZCB1bml0cy4KCQkgKiBAZGVmYXVsdCAwLjA1CgkJICovCgkJcG9pbnRTaXplPzogU2NlbmVQcm9wc1sicG9pbnRTaXplIl07CgkJLyoqCgkJICogV2hldGhlciB0aGUgZ2xvYmUgc2hvdWxkIGF1dG8tcm90YXRlLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvUm90YXRlPzogU2NlbmVQcm9wc1siYXV0b1JvdGF0ZSJdOwoJCS8qKgoJCSAqIFdoZXRoZXIgdG8gbG9jayB0aGUgY2FtZXJhJ3MgcG9sYXIgYW5nbGUgKHZlcnRpY2FsIHJvdGF0aW9uKS4KCQkgKiBJZiB0cnVlLCBsaW1pdHMgdGhlIHZlcnRpY2FsIHZpZXcgdG8gYSBuYXJyb3cgYmFuZC4KCQkgKiBAZGVmYXVsdCB0cnVlCgkJICovCgkJbG9ja2VkUG9sYXJBbmdsZT86IGJvb2xlYW47CgkJLyoqCgkJICogQXJyYXkgb2YgbWFya2VycyB0byBkaXNwbGF5IG9uIHRoZSBnbG9iZS4KCQkgKi8KCQltYXJrZXJzPzogR2xvYmVNYXJrZXJbXTsKCQkvKioKCQkgKiBPcHRpb25hbCBjdXN0b20gdG9vbHRpcCByZW5kZXJlciBmb3IgbWFya2Vycy4KCQkgKiBSZWNlaXZlcyBtYXJrZXIgZGF0YSBhbmQgdmlzaWJpbGl0eSBjb250ZXh0LgoJCSAqLwoJCW1hcmtlclRvb2x0aXA/OiBTbmlwcGV0PFtHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0XT47CgkJLyoqCgkJICogQ29vcmRpbmF0ZXMgW2xhdCwgbG9uXSB0byBmb2N1cyB0aGUgY2FtZXJhIG9uLgoJCSAqIFdoZW4gc2V0LCBhdXRvLXJvdGF0aW9uIHdpbGwgYmUgZGlzYWJsZWQgdGVtcG9yYXJpbHkuCgkJICovCgkJZm9jdXNPbj86IFtudW1iZXIsIG51bWJlcl0gfCBudWxsOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXJhZGl1cyA9IDIsCgkJZnJlc25lbENvbmZpZywKCQlhdG1vc3BoZXJlQ29uZmlnLAoJCXBvaW50Q291bnQsCgkJbGFuZFBvaW50Q29sb3IsCgkJcG9pbnRTaXplLAoJCWF1dG9Sb3RhdGUgPSB0cnVlLAoJCWxvY2tlZFBvbGFyQW5nbGUgPSB0cnVlLAoJCW1hcmtlcnMgPSBbXSwKCQltYXJrZXJUb29sdGlwLAoJCWZvY3VzT24gPSBudWxsLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgZHByID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxDYW52YXMge2Rwcn0gdG9uZU1hcHBpbmc9e05vVG9uZU1hcHBpbmd9PgoJCQk8U2NlbmUKCQkJCXtyYWRpdXN9CgkJCQl7ZnJlc25lbENvbmZpZ30KCQkJCXthdG1vc3BoZXJlQ29uZmlnfQoJCQkJe3BvaW50Q291bnR9CgkJCQl7bGFuZFBvaW50Q29sb3J9CgkJCQl7cG9pbnRTaXplfQoJCQkJe2F1dG9Sb3RhdGV9CgkJCQl7bG9ja2VkUG9sYXJBbmdsZX0KCQkJCXttYXJrZXJzfQoJCQkJe21hcmtlclRvb2x0aXB9CgkJCQl7Zm9jdXNPbn0KCQkJLz4KCQk8L0NhbnZhcz4KCTwvZGl2Pgo8L2Rpdj4K", "components/globe/GlobeScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBPcmJpdENvbnRyb2xzLCBpbnRlcmFjdGl2aXR5IH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgT3JiaXRDb250cm9scyBhcyBPcmJpdENvbnRyb2xzVHlwZSB9IGZyb20gInRocmVlL2V4YW1wbGVzL2pzbS9jb250cm9scy9PcmJpdENvbnRyb2xzLmpzIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IGxhbmRUZXh0dXJlVXJsIGZyb20gIi4uL2Fzc2V0cy9sYW5kLXRleHR1cmUucG5nIjsKCWltcG9ydCB0eXBlIHsgR2xvYmVNYXJrZXIsIEdsb2JlTWFya2VyVG9vbHRpcENvbnRleHQgfSBmcm9tICIuL3R5cGVzIjsKCWltcG9ydCBHbG9iZU1hcmtlckl0ZW0gZnJvbSAiLi9HbG9iZU1hcmtlckl0ZW0uc3ZlbHRlIjsKCglpbnRlcmFjdGl2aXR5KCk7CgoJaW50ZXJmYWNlIEZyZXNuZWxDb25maWcgewoJCS8qKgoJCSAqIEJhc2UgYm9keSBjb2xvciBmb3IgdGhlIGdsb2JlIHN1cmZhY2UuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEFjY2VudCBjb2xvciBhcHBsaWVkIGJ5IHRoZSBGcmVzbmVsIHJpbS4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQlyaW1Db2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQ29udHJvbHMgaG93IHRpZ2h0IHRoZSBGcmVzbmVsIHJpbSBodWcgaXMuCgkJICogSGlnaGVyIHZhbHVlcyB5aWVsZCBhIHRoaW5uZXIgb3V0bGluZS4KCQkgKiBAZGVmYXVsdCA2CgkJICovCgkJcmltUG93ZXI/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBGcmVzbmVsIHJpbSBjb2xvci4KCQkgKiBAZGVmYXVsdCAxLjUKCQkgKi8KCQlyaW1JbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJaW50ZXJmYWNlIEF0bW9zcGhlcmVDb25maWcgewoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBhdG1vc3BoZXJlIGdsb3cuCgkJICogQGRlZmF1bHQgIiNGRjY5MDAiCgkJICovCgkJY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIFNpemUgb2YgdGhlIGF0bW9zcGhlcmUgcmVsYXRpdmUgdG8gdGhlIGdsb2JlIHJhZGl1cy4KCQkgKiBAZGVmYXVsdCAxLjEKCQkgKi8KCQlzY2FsZT86IG51bWJlcjsKCQkvKioKCQkgKiBGYWxsb2ZmIHBvd2VyIG9mIHRoZSBnbG93LiBIaWdoZXIgdmFsdWVzIG1lYW4gYSBzaGFycGVyIGVkZ2UuCgkJICogQGRlZmF1bHQgMTIuMAoJCSAqLwoJCXBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2UgY29lZmZpY2llbnQgZm9yIHRoZSBpbnRlbnNpdHkgY2FsY3VsYXRpb24uCgkJICogQ29udHJvbHMgaG93IGZhciB0aGUgZ2xvdyBleHRlbmRzIGlud2FyZHMuCgkJICogQGRlZmF1bHQgMC45CgkJICovCgkJY29lZmZpY2llbnQ/OiBudW1iZXI7CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eSBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDIuMAoJCSAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFJhZGl1cyBvZiB0aGUgc3BoZXJlLgoJCSAqIEBkZWZhdWx0IDIKCQkgKi8KCQlyYWRpdXM6IG51bWJlcjsKCQkvKioKCQkgKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogRnJlc25lbENvbmZpZzsKCQkvKioKCQkgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXRtb3NwaGVyaWMgaGFsby4KCQkgKi8KCQlhdG1vc3BoZXJlQ29uZmlnPzogQXRtb3NwaGVyZUNvbmZpZzsKCQkvKioKCQkgKiBOdW1iZXIgb2YgcG9pbnRzIHJlbmRlcmVkIGFsb25nIHRoZSBnbG9iZSBzdXJmYWNlLgoJCSAqIEBkZWZhdWx0IDE1MDAwCgkJICovCgkJcG9pbnRDb3VudD86IG51bWJlcjsKCQkvKioKCQkgKiBTaXplIG9mIGVhY2ggcG9pbnQgaW4gd29ybGQgdW5pdHMuCgkJICogQGRlZmF1bHQgMC4wNQoJCSAqLwoJCXBvaW50U2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBDb2xvciBhcHBsaWVkIHRvIHBvaW50cyByZXByZXNlbnRpbmcgbGFuZC4KCQkgKiBAZGVmYXVsdCAiI2Y3NzExNCIKCQkgKi8KCQlsYW5kUG9pbnRDb2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogV2hldGhlciB0aGUgZ2xvYmUgc2hvdWxkIGF1dG8tcm90YXRlLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlhdXRvUm90YXRlPzogYm9vbGVhbjsKCQkvKioKCQkgKiBXaGV0aGVyIHRvIGxvY2sgdGhlIGNhbWVyYSdzIHBvbGFyIGFuZ2xlLgoJCSAqIEBkZWZhdWx0IHRydWUKCQkgKi8KCQlsb2NrZWRQb2xhckFuZ2xlPzogYm9vbGVhbjsKCQkvKioKCQkgKiBNYXJrZXJzIHRvIGRpc3BsYXkgb24gdGhlIGdsb2JlLgoJCSAqLwoJCW1hcmtlcnM/OiBHbG9iZU1hcmtlcltdOwoJCS8qKgoJCSAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIHJlbmRlcmVyIGZvciBtYXJrZXJzLgoJCSAqLwoJCW1hcmtlclRvb2x0aXA/OiBTbmlwcGV0PFtHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0XT47CgkJLyoqCgkJICogQ29vcmRpbmF0ZXMgW2xhdCwgbG9uXSB0byBmb2N1cyBvbi4KCQkgKi8KCQlmb2N1c09uPzogW251bWJlciwgbnVtYmVyXSB8IG51bGw7Cgl9CgoJaW50ZXJmYWNlIExhbmRNYXNrRGF0YSB7CgkJd2lkdGg6IG51bWJlcjsKCQloZWlnaHQ6IG51bWJlcjsKCQlkYXRhOiBVaW50OENsYW1wZWRBcnJheTsKCX0KCgljb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDsKCWNvbnN0IEVQU0lMT04gPSAxZS05OwoJY29uc3QgTEFORF9NQVNLX1RIUkVTSE9MRCA9IDAuNTsKCglsZXQgewoJCXJhZGl1cywKCQlmcmVzbmVsQ29uZmlnID0ge30sCgkJYXRtb3NwaGVyZUNvbmZpZyA9IHt9LAoJCXBvaW50Q291bnQgPSAxNTAwMCwKCQlwb2ludFNpemUgPSAwLjA1LAoJCWxhbmRQb2ludENvbG9yID0gIiNmNzcxMTQiLAoJCWF1dG9Sb3RhdGUgPSB0cnVlLAoJCWxvY2tlZFBvbGFyQW5nbGUgPSB0cnVlLAoJCW1hcmtlcnMgPSBbXSwKCQltYXJrZXJUb29sdGlwLAoJCWZvY3VzT24gPSBudWxsLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgljb25zdCBpbml0aWFsQ2FtZXJhUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAsIHo6IDggfTsKCWxldCBnbG9iZUdyb3VwID0gJHN0YXRlPFRIUkVFLkdyb3VwPigpOwoJbGV0IGNvbnRyb2xzID0gJHN0YXRlPE9yYml0Q29udHJvbHNUeXBlPigpOwoJbGV0IGZvY3VzVHdlZW46IGdzYXAuY29yZS5Ud2VlbiB8IG51bGwgPSBudWxsOwoJbGV0IGxhbmRNYXNrID0gJHN0YXRlPExhbmRNYXNrRGF0YSB8IG51bGw+KG51bGwpOwoKCWNvbnN0IHsgY2FtZXJhIH0gPSB1c2VUaHJlbHRlKCk7CgoJY29uc3QgU0VHTUVOVFMgPSA2NDsKCglsZXQgZ2VvbWV0cnkgPSAkZGVyaXZlZChuZXcgVEhSRUUuU3BoZXJlR2VvbWV0cnkocmFkaXVzLCBTRUdNRU5UUywgU0VHTUVOVFMpKTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwoKCXZvaWQgbWFpbigpIHsKCQl2Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7CgkJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTsKCQl2Vmlld1Bvc2l0aW9uID0gLW12UG9zaXRpb24ueHl6OwoJCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247Cgl9CmA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgl1bmlmb3JtIHZlYzMgY29sb3I7Cgl1bmlmb3JtIHZlYzMgcmltQ29sb3I7Cgl1bmlmb3JtIGZsb2F0IHJpbVBvd2VyOwoJdW5pZm9ybSBmbG9hdCByaW1JbnRlbnNpdHk7CgoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7Cgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKCgl2b2lkIG1haW4oKSB7CgkJdmVjMyBub3JtYWwgPSBub3JtYWxpemUodk5vcm1hbCk7CgkJdmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pOwoKCQlmbG9hdCByaW0gPSAxLjAgLSBtYXgoMC4wLCBkb3Qobm9ybWFsLCB2aWV3RGlyKSk7CgkJcmltID0gcG93KHJpbSwgcmltUG93ZXIpICogcmltSW50ZW5zaXR5OwoKCQl2ZWMzIGZpbmFsQ29sb3IgPSBjb2xvciArIHJpbUNvbG9yICogcmltOwoKCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGZpbmFsQ29sb3IsIDEuMCk7CiAgICAgICAgI2luY2x1ZGUgPGNvbG9yc3BhY2VfZnJhZ21lbnQ+Cgl9CmA7CgoJY29uc3QgYXRtb3NwaGVyZVZlcnRleFNoYWRlciA9IGAKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJdm9pZCBtYWluKCkgewoJCXZOb3JtYWwgPSBub3JtYWxpemUobm9ybWFsTWF0cml4ICogbm9ybWFsKTsKCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJfQpgOwoKCWNvbnN0IGF0bW9zcGhlcmVGcmFnbWVudFNoYWRlciA9IGAKCXVuaWZvcm0gdmVjMyBjb2xvcjsKCXVuaWZvcm0gZmxvYXQgcG93ZXI7Cgl1bmlmb3JtIGZsb2F0IGNvZWZmaWNpZW50OwoJdW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7CgoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgoJdm9pZCBtYWluKCkgewoJCXZlYzMgdmlld0RpciA9IHZlYzMoMC4wLCAwLjAsIDEuMCk7CgkJZmxvYXQgdmlld0RvdCA9IGRvdCh2Tm9ybWFsLCB2aWV3RGlyKTsKCgkJZmxvYXQgZmFjdG9yID0gcG93KG1heCgwLjAsIGNvZWZmaWNpZW50IC0gdmlld0RvdCksIHBvd2VyKTsKCgkJdmVjMyBmaW5hbENvbG9yID0gY29sb3IgKiBmYWN0b3IgKiBpbnRlbnNpdHk7CgoJCWdsX0ZyYWdDb2xvciA9IHZlYzQoZmluYWxDb2xvciwgZmFjdG9yICogaW50ZW5zaXR5KTsKCQkjaW5jbHVkZSA8Y29sb3JzcGFjZV9mcmFnbWVudD4KCX0KYDsKCgljb25zdCBkZWZhdWx0RnJlc25lbENvbmZpZzogUmVxdWlyZWQ8RnJlc25lbENvbmZpZz4gPSB7CgkJY29sb3I6ICIjMTExMTEzIiwKCQlyaW1Db2xvcjogIiNGRjY5MDAiLAoJCXJpbVBvd2VyOiA2LAoJCXJpbUludGVuc2l0eTogMS41LAoJfTsKCgljb25zdCBkZWZhdWx0QXRtb3NwaGVyZUNvbmZpZzogUmVxdWlyZWQ8QXRtb3NwaGVyZUNvbmZpZz4gPSB7CgkJY29sb3I6ICIjRkY2OTAwIiwKCQlzY2FsZTogMS4xLAoJCXBvd2VyOiAxMi4wLAoJCWNvZWZmaWNpZW50OiAwLjksCgkJaW50ZW5zaXR5OiAyLjAsCgl9OwoKCWNvbnN0IHJlc29sdmVkRnJlc25lbENvbmZpZyA9ICRkZXJpdmVkKHsKCQkuLi5kZWZhdWx0RnJlc25lbENvbmZpZywKCQkuLi5mcmVzbmVsQ29uZmlnLAoJfSk7Cgljb25zdCByZXNvbHZlZEF0bW9zcGhlcmVDb25maWcgPSAkZGVyaXZlZCh7CgkJLi4uZGVmYXVsdEF0bW9zcGhlcmVDb25maWcsCgkJLi4uYXRtb3NwaGVyZUNvbmZpZywKCX0pOwoKCWNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHsKCQl2ZXJ0ZXhTaGFkZXIsCgkJZnJhZ21lbnRTaGFkZXIsCgkJdW5pZm9ybXM6IHsKCQkJY29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihkZWZhdWx0RnJlc25lbENvbmZpZy5jb2xvcikgfSwKCQkJcmltQ29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihkZWZhdWx0RnJlc25lbENvbmZpZy5yaW1Db2xvcikgfSwKCQkJcmltUG93ZXI6IHsgdmFsdWU6IGRlZmF1bHRGcmVzbmVsQ29uZmlnLnJpbVBvd2VyIH0sCgkJCXJpbUludGVuc2l0eTogeyB2YWx1ZTogZGVmYXVsdEZyZXNuZWxDb25maWcucmltSW50ZW5zaXR5IH0sCgkJfSwKCX0pOwoKCWNvbnN0IGF0bW9zcGhlcmVNYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7CgkJdmVydGV4U2hhZGVyOiBhdG1vc3BoZXJlVmVydGV4U2hhZGVyLAoJCWZyYWdtZW50U2hhZGVyOiBhdG1vc3BoZXJlRnJhZ21lbnRTaGFkZXIsCgkJdW5pZm9ybXM6IHsKCQkJY29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihkZWZhdWx0QXRtb3NwaGVyZUNvbmZpZy5jb2xvcikgfSwKCQkJcG93ZXI6IHsgdmFsdWU6IGRlZmF1bHRBdG1vc3BoZXJlQ29uZmlnLnBvd2VyIH0sCgkJCWNvZWZmaWNpZW50OiB7IHZhbHVlOiBkZWZhdWx0QXRtb3NwaGVyZUNvbmZpZy5jb2VmZmljaWVudCB9LAoJCQlpbnRlbnNpdHk6IHsgdmFsdWU6IGRlZmF1bHRBdG1vc3BoZXJlQ29uZmlnLmludGVuc2l0eSB9LAoJCX0sCgkJc2lkZTogVEhSRUUuQmFja1NpZGUsCgkJYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsCgkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJZGVwdGhXcml0ZTogZmFsc2UsCgkJdG9uZU1hcHBlZDogZmFsc2UsCgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlsZXQgY2FuY2VsbGVkID0gZmFsc2U7CgkJdm9pZCBsb2FkTGFuZE1hc2sobGFuZFRleHR1cmVVcmwpLnRoZW4oKG1hc2spID0+IHsKCQkJaWYgKCFjYW5jZWxsZWQpIHsKCQkJCWxhbmRNYXNrID0gbWFzazsKCQkJfQoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQljYW5jZWxsZWQgPSB0cnVlOwoJCX07Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQltYXRlcmlhbC51bmlmb3Jtcy5jb2xvci52YWx1ZS5zZXQocmVzb2x2ZWRGcmVzbmVsQ29uZmlnLmNvbG9yKTsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1Db2xvci52YWx1ZS5zZXQocmVzb2x2ZWRGcmVzbmVsQ29uZmlnLnJpbUNvbG9yKTsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1Qb3dlci52YWx1ZSA9IHJlc29sdmVkRnJlc25lbENvbmZpZy5yaW1Qb3dlcjsKCQltYXRlcmlhbC51bmlmb3Jtcy5yaW1JbnRlbnNpdHkudmFsdWUgPSByZXNvbHZlZEZyZXNuZWxDb25maWcucmltSW50ZW5zaXR5OwoJCW1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKCX0pOwoKCWxldCBjdXJyZW50QXRtb3NwaGVyZVNjYWxlID0gJGRlcml2ZWQocmVzb2x2ZWRBdG1vc3BoZXJlQ29uZmlnLnNjYWxlKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlhdG1vc3BoZXJlTWF0ZXJpYWwudW5pZm9ybXMuY29sb3IudmFsdWUuc2V0KHJlc29sdmVkQXRtb3NwaGVyZUNvbmZpZy5jb2xvcik7CgkJYXRtb3NwaGVyZU1hdGVyaWFsLnVuaWZvcm1zLnBvd2VyLnZhbHVlID0gcmVzb2x2ZWRBdG1vc3BoZXJlQ29uZmlnLnBvd2VyOwoJCWF0bW9zcGhlcmVNYXRlcmlhbC51bmlmb3Jtcy5jb2VmZmljaWVudC52YWx1ZSA9CgkJCXJlc29sdmVkQXRtb3NwaGVyZUNvbmZpZy5jb2VmZmljaWVudDsKCQlhdG1vc3BoZXJlTWF0ZXJpYWwudW5pZm9ybXMuaW50ZW5zaXR5LnZhbHVlID0KCQkJcmVzb2x2ZWRBdG1vc3BoZXJlQ29uZmlnLmludGVuc2l0eTsKCQlhdG1vc3BoZXJlTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwoJfSk7CgoJbGV0IGZpbHRlcmVkUG9zaXRpb25zID0gJGRlcml2ZWQuYnkoKCkgPT4gewoJCWlmICghbGFuZE1hc2spIHsKCQkJcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoKTsKCQl9CgoJCWNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwb2ludENvdW50KSk7CgkJY29uc3QgdGVtcFBvc2l0aW9uczogbnVtYmVyW10gPSBbXTsKCQljb25zdCBnb2xkZW5BbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7CgkJY29uc3Qgc3VyZmFjZVJhZGl1cyA9IHJhZGl1cyAqIDEuMDAxOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3QgdCA9IGNvdW50ID09PSAxID8gMC41IDogaSAvIChjb3VudCAtIDEpOwoJCQljb25zdCB5ID0gMSAtIDIgKiB0OwoJCQljb25zdCByYWRpYWwgPSBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgMSAtIHkgKiB5KSk7CgkJCWNvbnN0IHRoZXRhID0gZ29sZGVuQW5nbGUgKiBpOwoJCQljb25zdCB4ID0gTWF0aC5jb3ModGhldGEpICogcmFkaWFsOwoJCQljb25zdCB6ID0gTWF0aC5zaW4odGhldGEpICogcmFkaWFsOwoKCQkJY29uc3QgcFggPSB4ICogc3VyZmFjZVJhZGl1czsKCQkJY29uc3QgcFkgPSB5ICogc3VyZmFjZVJhZGl1czsKCQkJY29uc3QgcFogPSB6ICogc3VyZmFjZVJhZGl1czsKCgkJCWlmIChpc1BvaW50T25MYW5kKHBYLCBwWSwgcFosIGxhbmRNYXNrKSkgewoJCQkJdGVtcFBvc2l0aW9ucy5wdXNoKHBYLCBwWSwgcFopOwoJCQl9CgkJfQoKCQlyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0ZW1wUG9zaXRpb25zKTsKCX0pOwoJbGV0IG1lc2hDb3VudCA9ICRkZXJpdmVkKAoJCWZpbHRlcmVkUG9zaXRpb25zID8gZmlsdGVyZWRQb3NpdGlvbnMubGVuZ3RoIC8gMyA6IDAsCgkpOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghZm9jdXNPbiB8fCAhJGNhbWVyYSB8fCAhY29udHJvbHMpIHsKCQkJZm9jdXNUd2Vlbj8ua2lsbCgpOwoJCQlmb2N1c1R3ZWVuID0gbnVsbDsKCQkJcmV0dXJuOwoJCX0KCgkJY29uc3QgW2xhdCwgbG9uXSA9IGZvY3VzT247CgkJY29uc3QgY2FtZXJhRGlzdGFuY2UgPSBpbml0aWFsQ2FtZXJhUG9zaXRpb24uejsKCgkJY29uc3QgeyB4LCB5LCB6IH0gPSBsb25MYXRUb0NhcnRlc2lhbihsb24sIGxhdCwgY2FtZXJhRGlzdGFuY2UpOwoKCQlmb2N1c1R3ZWVuPy5raWxsKCk7CgkJZm9jdXNUd2VlbiA9IGdzYXAudG8oJGNhbWVyYS5wb3NpdGlvbiwgewoJCQl4LAoJCQl5LAoJCQl6LAoJCQlkdXJhdGlvbjogMS41LAoJCQllYXNlOiAicG93ZXIyLmluT3V0IiwKCQkJb25VcGRhdGU6ICgpID0+IHsKCQkJCWNvbnRyb2xzPy51cGRhdGUoKTsKCQkJfSwKCQkJb3ZlcndyaXRlOiB0cnVlLAoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlmb2N1c1R3ZWVuPy5raWxsKCk7CgkJCWZvY3VzVHdlZW4gPSBudWxsOwoJCX07Cgl9KTsKCglmdW5jdGlvbiB1cGRhdGVNZXNoTWF0cmljZXMoCgkJbWVzaDogVEhSRUUuSW5zdGFuY2VkTWVzaCwKCQlwb3NpdGlvbnM6IEZsb2F0MzJBcnJheSwKCSkgewoJCWNvbnN0IGR1bW15ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7CgkJY29uc3QgY291bnQgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMzsKCQlmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKCQkJY29uc3QgeCA9IHBvc2l0aW9uc1tpICogM107CgkJCWNvbnN0IHkgPSBwb3NpdGlvbnNbaSAqIDMgKyAxXTsKCQkJY29uc3QgeiA9IHBvc2l0aW9uc1tpICogMyArIDJdOwoJCQlkdW1teS5wb3NpdGlvbi5zZXQoeCwgeSwgeik7CgkJCWR1bW15Lmxvb2tBdCh4ICogMiwgeSAqIDIsIHogKiAyKTsKCQkJZHVtbXkudXBkYXRlTWF0cml4KCk7CgkJCW1lc2guc2V0TWF0cml4QXQoaSwgZHVtbXkubWF0cml4KTsKCQl9CgkJbWVzaC5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7Cgl9CgoJZnVuY3Rpb24gbG9hZExhbmRNYXNrKHVybDogc3RyaW5nKTogUHJvbWlzZTxMYW5kTWFza0RhdGEgfCBudWxsPiB7CgkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CgkJCWNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7CgkJCWltYWdlLm9ubG9hZCA9ICgpID0+IHsKCQkJCWNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQkJY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7CgkJCQljYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0OwoJCQkJY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pOwoJCQkJaWYgKCFjb250ZXh0KSB7CgkJCQkJcmVzb2x2ZShudWxsKTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApOwoJCQkJY29uc3QgaW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCk7CgkJCQlyZXNvbHZlKHsKCQkJCQl3aWR0aDogaW1hZ2Uud2lkdGgsCgkJCQkJaGVpZ2h0OiBpbWFnZS5oZWlnaHQsCgkJCQkJZGF0YTogaW1hZ2VEYXRhLmRhdGEsCgkJCQl9KTsKCQkJfTsKCQkJaW1hZ2Uub25lcnJvciA9IChlcnJvcikgPT4gewoJCQkJY29uc29sZS53YXJuKCJHbG9iZVNjZW5lOiBmYWlsZWQgdG8gbG9hZCBsYW5kIG1hc2sgdGV4dHVyZSIsIGVycm9yKTsKCQkJCXJlc29sdmUobnVsbCk7CgkJCX07CgkJCWltYWdlLnNyYyA9IHVybDsKCQl9KTsKCX0KCglmdW5jdGlvbiBmcmFjdCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHsKCQlyZXR1cm4gdmFsdWUgLSBNYXRoLmZsb29yKHZhbHVlKTsKCX0KCglmdW5jdGlvbiBwb2ludFRvTWFza1VWKAoJCXg6IG51bWJlciwKCQl5OiBudW1iZXIsCgkJejogbnVtYmVyLAoJKTogeyB1OiBudW1iZXI7IHY6IG51bWJlciB9IHsKCQljb25zdCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKCQlpZiAobGVuZ3RoID09PSAwKSB7CgkJCXJldHVybiB7IHU6IDAsIHY6IDAgfTsKCQl9CgoJCS8vIE1hdGNoIENPQkUncyBnbG9iZS1zcGFjZSBjb252ZW50aW9uIGJlZm9yZSBVViBtYXBwaW5nOgoJCS8vIG91ciBheGVzIFt4LHksel0gLT4gY29iZSBheGVzIFt6LHksLXhdCgkJY29uc3QgbnggPSB6IC8gbGVuZ3RoOwoJCWNvbnN0IG55ID0geSAvIGxlbmd0aDsKCQljb25zdCBueiA9IC14IC8gbGVuZ3RoOwoKCQljb25zdCBnUGhpID0gTWF0aC5hc2luKFRIUkVFLk1hdGhVdGlscy5jbGFtcChueSwgLTEsIDEpKTsKCQljb25zdCBjb3NQaGkgPSBNYXRoLmNvcyhnUGhpKTsKCgkJbGV0IGdUaGV0YSA9IDA7CgkJaWYgKE1hdGguYWJzKGNvc1BoaSkgPiBFUFNJTE9OKSB7CgkJCWNvbnN0IHRoZXRhSW5wdXQgPSBUSFJFRS5NYXRoVXRpbHMuY2xhbXAoLW54IC8gY29zUGhpLCAtMSwgMSk7CgkJCWdUaGV0YSA9IE1hdGguYWNvcyh0aGV0YUlucHV0KTsKCQkJaWYgKG56IDwgMCkgewoJCQkJZ1RoZXRhID0gLWdUaGV0YTsKCQkJfQoJCX0KCgkJcmV0dXJuIHsKCQkJdTogZnJhY3QoKGdUaGV0YSAqIDAuNSkgLyBNYXRoLlBJKSwKCQkJdjogZnJhY3QoLShnUGhpIC8gTWF0aC5QSSArIDAuNSkpLAoJCX07Cgl9CgoJZnVuY3Rpb24gc2FtcGxlTGFuZE1hc2sobWFzazogTGFuZE1hc2tEYXRhLCB1OiBudW1iZXIsIHY6IG51bWJlcik6IG51bWJlciB7CgkJY29uc3QgeCA9IE1hdGgubWluKG1hc2sud2lkdGggLSAxLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHUgKiBtYXNrLndpZHRoKSkpOwoJCWNvbnN0IHkgPSBNYXRoLm1pbigKCQkJbWFzay5oZWlnaHQgLSAxLAoJCQlNYXRoLm1heCgwLCBNYXRoLmZsb29yKHYgKiBtYXNrLmhlaWdodCkpLAoJCSk7CgkJY29uc3QgaSA9ICh5ICogbWFzay53aWR0aCArIHgpICogNDsKCQlyZXR1cm4gbWFzay5kYXRhW2ldIC8gMjU1OwoJfQoKCWZ1bmN0aW9uIGxvbkxhdFRvQ2FydGVzaWFuKGxvbjogbnVtYmVyLCBsYXQ6IG51bWJlciwgcjogbnVtYmVyKSB7CgkJY29uc3QgbG9uUmFkID0gbG9uICogREVHMlJBRDsKCQljb25zdCBsYXRSYWQgPSBsYXQgKiBERUcyUkFEOwoKCQljb25zdCB5ID0gciAqIE1hdGguc2luKGxhdFJhZCk7CgkJY29uc3QgclhaID0gciAqIE1hdGguY29zKGxhdFJhZCk7CgkJY29uc3QgeCA9IHJYWiAqIE1hdGguc2luKGxvblJhZCk7CgkJY29uc3QgeiA9IHJYWiAqIE1hdGguY29zKGxvblJhZCk7CgoJCXJldHVybiB7IHgsIHksIHogfTsKCX0KCglmdW5jdGlvbiBpc1BvaW50T25MYW5kKAoJCXg6IG51bWJlciwKCQl5OiBudW1iZXIsCgkJejogbnVtYmVyLAoJCW1hc2s6IExhbmRNYXNrRGF0YSwKCSk6IGJvb2xlYW4gewoJCWNvbnN0IHsgdSwgdiB9ID0gcG9pbnRUb01hc2tVVih4LCB5LCB6KTsKCQlyZXR1cm4gc2FtcGxlTGFuZE1hc2sobWFzaywgdSwgdikgPj0gTEFORF9NQVNLX1RIUkVTSE9MRDsKCX0KPC9zY3JpcHQ+Cgo8VC5QZXJzcGVjdGl2ZUNhbWVyYQoJbWFrZURlZmF1bHQKCXBvc2l0aW9uPXtbCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLngsCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLnksCgkJaW5pdGlhbENhbWVyYVBvc2l0aW9uLnosCgldfQo+Cgk8T3JiaXRDb250cm9scwoJCWJpbmQ6cmVmPXtjb250cm9sc30KCQllbmFibGVEYW1waW5nCgkJe2F1dG9Sb3RhdGV9CgkJbWluUG9sYXJBbmdsZT17bG9ja2VkUG9sYXJBbmdsZSA/IDEuNSA6IDB9CgkJbWF4UG9sYXJBbmdsZT17bG9ja2VkUG9sYXJBbmdsZSA/IDEuNCA6IE1hdGguUEl9CgkJZW5hYmxlWm9vbT17ZmFsc2V9CgkJb25jcmVhdGU9eyhjKSA9PiB7CgkJCWMudGFyZ2V0LnNldCgwLCAwLCAwKTsKCQkJYy51cGRhdGUoKTsKCQl9fQoJLz4KPC9ULlBlcnNwZWN0aXZlQ2FtZXJhPgoKPFQuR3JvdXAgYmluZDpyZWY9e2dsb2JlR3JvdXB9PgoJPFQuTWVzaCB7Z2VvbWV0cnl9IHttYXRlcmlhbH0gLz4KCTxULk1lc2gKCQl7Z2VvbWV0cnl9CgkJbWF0ZXJpYWw9e2F0bW9zcGhlcmVNYXRlcmlhbH0KCQlzY2FsZT17Y3VycmVudEF0bW9zcGhlcmVTY2FsZX0KCS8+CgoJeyNpZiBmaWx0ZXJlZFBvc2l0aW9ucyAmJiBtZXNoQ291bnQgPiAwfQoJCXsja2V5IG1lc2hDb3VudH0KCQkJPFQuSW5zdGFuY2VkTWVzaAoJCQkJYXJncz17W3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBtZXNoQ291bnRdfQoJCQkJb25jcmVhdGU9eyhtZXNoKSA9PiB1cGRhdGVNZXNoTWF0cmljZXMobWVzaCwgZmlsdGVyZWRQb3NpdGlvbnMhKX0KCQkJPgoJCQkJPFQuQ2lyY2xlR2VvbWV0cnkgYXJncz17W3BvaW50U2l6ZSAqIDAuNSwgNl19IC8+CgkJCQk8VC5NZXNoQmFzaWNNYXRlcmlhbAoJCQkJCWNvbG9yPXtsYW5kUG9pbnRDb2xvcn0KCQkJCQlzaWRlPXtUSFJFRS5Eb3VibGVTaWRlfQoJCQkJCWJsZW5kaW5nPXtUSFJFRS5BZGRpdGl2ZUJsZW5kaW5nfQoJCQkJCXRyYW5zcGFyZW50CgkJCQkJZGVwdGhXcml0ZT17ZmFsc2V9CgkJCQkJdG9uZU1hcHBlZD17ZmFsc2V9CgkJCQkvPgoJCQk8L1QuSW5zdGFuY2VkTWVzaD4KCQl7L2tleX0KCXsvaWZ9CgoJeyNlYWNoIG1hcmtlcnMgYXMgbWFya2VyLCBpIChtYXJrZXIubGFiZWwgfHwgaSl9CgkJe0Bjb25zdCBwb3MgPSBsb25MYXRUb0NhcnRlc2lhbigKCQkJbWFya2VyLmxvY2F0aW9uWzFdLAoJCQltYXJrZXIubG9jYXRpb25bMF0sCgkJCXJhZGl1cywKCQkpfQoJCTxHbG9iZU1hcmtlckl0ZW0KCQkJe21hcmtlcn0KCQkJaW5kZXg9e2l9CgkJCXBvc2l0aW9uPXtbcG9zLngsIHBvcy55LCBwb3Muel19CgkJCXRvb2x0aXA9e21hcmtlclRvb2x0aXB9CgkJLz4KCXsvZWFjaH0KPC9ULkdyb3VwPgo=", "components/globe/GlobeMarkerItem.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBULCB1c2VUYXNrLCB1c2VUaHJlbHRlIH0gZnJvbSAiQHRocmVsdGUvY29yZSI7CglpbXBvcnQgeyBIVE1MIH0gZnJvbSAiQHRocmVsdGUvZXh0cmFzIjsKCWltcG9ydCAqIGFzIFRIUkVFIGZyb20gInRocmVlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgdHlwZSB7IEdsb2JlTWFya2VyLCBHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0IH0gZnJvbSAiLi90eXBlcyI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgbWFya2VyIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgbG9jYXRpb24sIGNvbG9yLCBzaXplLCBldGMuCgkJICovCgkJbWFya2VyOiBHbG9iZU1hcmtlcjsKCQkvKioKCQkgKiBUaGUgM0Qgd29ybGQgcG9zaXRpb24gb2YgdGhlIG1hcmtlciBbeCwgeSwgel0uCgkJICovCgkJcG9zaXRpb246IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9OwoJCS8qKgoJCSAqIE1hcmtlciBpbmRleCBpbiB0aGUgbWFya2VycyBhcnJheS4KCQkgKi8KCQlpbmRleDogbnVtYmVyOwoJCS8qKgoJCSAqIE9wdGlvbmFsIGN1c3RvbSB0b29sdGlwIHNuaXBwZXQuCgkJICovCgkJdG9vbHRpcD86IFNuaXBwZXQ8W0dsb2JlTWFya2VyVG9vbHRpcENvbnRleHRdPjsKCX0KCglsZXQgeyBtYXJrZXIsIGluZGV4LCBwb3NpdGlvbiwgdG9vbHRpcCB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCB0b29sdGlwVmlzaWJpbGl0eSA9ICRzdGF0ZSgxKTsKCWxldCB0b29sdGlwQmx1ciA9ICRzdGF0ZSgwKTsKCglsZXQgZ3JvdXAgPSAkc3RhdGU8VEhSRUUuR3JvdXA+KCk7CgoJY29uc3QgeyBjYW1lcmEgfSA9IHVzZVRocmVsdGUoKTsKCWNvbnN0IG1hcmtlckRpcmVjdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7Cgljb25zdCBjYW1lcmFEaXJlY3Rpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpOwoJY29uc3Qgd29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7Cgljb25zdCBvcmlnaW4gPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKTsKCgljb25zdCBNQVhfVE9PTFRJUF9CTFVSID0gODsKCWNvbnN0IFZJU0lCSUxJVFlfTUlOX0RPVCA9IDAuMjQ7Cgljb25zdCBWSVNJQklMSVRZX01BWF9ET1QgPSAwLjQ4OwoKCWZ1bmN0aW9uIGN1YmljQmV6aWVyQXQoCgkJdDogbnVtYmVyLAoJCXAwOiBudW1iZXIsCgkJcDE6IG51bWJlciwKCQlwMjogbnVtYmVyLAoJCXAzOiBudW1iZXIsCgkpOiBudW1iZXIgewoJCWNvbnN0IHUgPSAxIC0gdDsKCQlyZXR1cm4gKAoJCQl1ICogdSAqIHUgKiBwMCArIDMgKiB1ICogdSAqIHQgKiBwMSArIDMgKiB1ICogdCAqIHQgKiBwMiArIHQgKiB0ICogdCAqIHAzCgkJKTsKCX0KCglmdW5jdGlvbiBjdWJpY0JlemllckRlcml2YXRpdmVBdCgKCQl0OiBudW1iZXIsCgkJcDA6IG51bWJlciwKCQlwMTogbnVtYmVyLAoJCXAyOiBudW1iZXIsCgkJcDM6IG51bWJlciwKCSk6IG51bWJlciB7CgkJY29uc3QgdSA9IDEgLSB0OwoJCXJldHVybiAoCgkJCTMgKiB1ICogdSAqIChwMSAtIHAwKSArIDYgKiB1ICogdCAqIChwMiAtIHAxKSArIDMgKiB0ICogdCAqIChwMyAtIHAyKQoJCSk7Cgl9CgoJZnVuY3Rpb24gZHluYW1pY0Vhc2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7CgkJY29uc3QgY2xhbXBlZCA9IFRIUkVFLk1hdGhVdGlscy5jbGFtcCh2YWx1ZSwgMCwgMSk7CgkJbGV0IHQgPSBjbGFtcGVkOwoJCWZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7CgkJCWNvbnN0IHggPSBjdWJpY0JlemllckF0KHQsIDAsIDAuNjI1LCAwLCAxKTsKCQkJY29uc3QgZHggPSBjdWJpY0JlemllckRlcml2YXRpdmVBdCh0LCAwLCAwLjYyNSwgMCwgMSk7CgkJCWlmIChNYXRoLmFicyhkeCkgPCAxZS02KSBicmVhazsKCQkJdCA9IFRIUkVFLk1hdGhVdGlscy5jbGFtcCh0IC0gKHggLSBjbGFtcGVkKSAvIGR4LCAwLCAxKTsKCQl9CgkJcmV0dXJuIGN1YmljQmV6aWVyQXQodCwgMCwgMC4wNSwgMSwgMSk7Cgl9CgoJdXNlVGFzaygoKSA9PiB7CgkJaWYgKGdyb3VwICYmICRjYW1lcmEpIHsKCQkJZ3JvdXAuZ2V0V29ybGRQb3NpdGlvbih3b3JsZFBvc2l0aW9uKTsKCQkJbWFya2VyRGlyZWN0aW9uLmNvcHkod29ybGRQb3NpdGlvbikubm9ybWFsaXplKCk7CgkJCWNhbWVyYURpcmVjdGlvbi5jb3B5KCRjYW1lcmEucG9zaXRpb24pLm5vcm1hbGl6ZSgpOwoKCQkJY29uc3QgZnJvbnREb3QgPSBtYXJrZXJEaXJlY3Rpb24uZG90KGNhbWVyYURpcmVjdGlvbik7CgkJCWNvbnN0IHJhd1Zpc2liaWxpdHkgPSBUSFJFRS5NYXRoVXRpbHMuc21vb3Roc3RlcCgKCQkJCWZyb250RG90LAoJCQkJVklTSUJJTElUWV9NSU5fRE9ULAoJCQkJVklTSUJJTElUWV9NQVhfRE9ULAoJCQkpOwoJCQljb25zdCB2aXNpYmlsaXR5ID0gZHluYW1pY0Vhc2UocmF3VmlzaWJpbGl0eSk7CgoJCQl0b29sdGlwVmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7CgkJCXRvb2x0aXBCbHVyID0gKDEgLSB2aXNpYmlsaXR5KSAqIE1BWF9UT09MVElQX0JMVVI7CgkJfQoJfSk7CgoJbGV0IGNvbG9yID0gJGRlcml2ZWQobmV3IFRIUkVFLkNvbG9yKG1hcmtlci5jb2xvciB8fCAiI2ZmZmZmZiIpKTsKCWxldCBwb2ludFJhZGl1cyA9ICRkZXJpdmVkKE1hdGgubWF4KDAuMDAxLCBtYXJrZXIuc2l6ZSA/PyAwLjA1KSk7CglsZXQgdG9vbHRpcENvbnRleHQgPSAkZGVyaXZlZDxHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0Pih7CgkJbWFya2VyLAoJCWluZGV4LAoJCXZpc2liaWxpdHk6IHRvb2x0aXBWaXNpYmlsaXR5LAoJfSk7CglsZXQgbWFya2VyT3BhY2l0eSA9ICRkZXJpdmVkKHRvb2x0aXBWaXNpYmlsaXR5KTsKCWxldCBub3JtYWxpemVkUG9zaXRpb24gPSAkZGVyaXZlZCgKCQlBcnJheS5pc0FycmF5KHBvc2l0aW9uKQoJCQk/IHBvc2l0aW9uCgkJCTogKFtwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56XSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pLAoJKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIWdyb3VwIHx8ICFub3JtYWxpemVkUG9zaXRpb24pIHJldHVybjsKCQlncm91cC5sb29rQXQob3JpZ2luKTsKCX0pOwo8L3NjcmlwdD4KCjxULkdyb3VwIGJpbmQ6cmVmPXtncm91cH0gcG9zaXRpb249e25vcm1hbGl6ZWRQb3NpdGlvbn0+Cgk8VC5NZXNoIHJlbmRlck9yZGVyPXsxMH0+CgkJPFQuQ2lyY2xlR2VvbWV0cnkgYXJncz17W3BvaW50UmFkaXVzLCAyNF19IC8+CgkJPFQuTWVzaEJhc2ljTWF0ZXJpYWwKCQkJe2NvbG9yfQoJCQlzaWRlPXtUSFJFRS5Eb3VibGVTaWRlfQoJCQl0cmFuc3BhcmVudAoJCQlvcGFjaXR5PXttYXJrZXJPcGFjaXR5fQoJCQlkZXB0aFRlc3Q9e2ZhbHNlfQoJCQlkZXB0aFdyaXRlPXtmYWxzZX0KCQkJdG9uZU1hcHBlZD17ZmFsc2V9CgkJLz4KCTwvVC5NZXNoPgoKCXsjaWYgdG9vbHRpcCB8fCBtYXJrZXIubGFiZWx9CgkJPEhUTUwgcG9zaXRpb249e1swLCAwLCAwXX0gY2VudGVyPgoJCQk8ZGl2CgkJCQljbGFzcz0icG9pbnRlci1ldmVudHMtbm9uZSBpbmxpbmUtZmxleCAtdHJhbnNsYXRlLXktNiBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgdHJhbnNpdGlvbi1bb3BhY2l0eSxmaWx0ZXJdIGR1cmF0aW9uLTIwMCBlYXNlLW91dCIKCQkJCXN0eWxlOm9wYWNpdHk9e3Rvb2x0aXBWaXNpYmlsaXR5fQoJCQkJc3R5bGU6ZmlsdGVyPXtgYmx1cigke3Rvb2x0aXBCbHVyfXB4KWB9CgkJCT4KCQkJCXsjaWYgdG9vbHRpcH0KCQkJCQl7QHJlbmRlciB0b29sdGlwKHRvb2x0aXBDb250ZXh0KX0KCQkJCXs6ZWxzZX0KCQkJCQk8ZGl2CgkJCQkJCWNsYXNzPSJiZy1maXhlZC1kYXJrLzgwIHJvdW5kZWQteHMgcHgtMiBweS0xIHRleHQteHMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1maXhlZC1saWdodCBiYWNrZHJvcC1ibHVyLXNtIgoJCQkJCT4KCQkJCQkJe21hcmtlci5sYWJlbH0KCQkJCQk8L2Rpdj4KCQkJCXsvaWZ9CgkJCTwvZGl2PgoJCTwvSFRNTD4KCXsvaWZ9CjwvVC5Hcm91cD4K", "components/globe/types.ts": "ZXhwb3J0IGludGVyZmFjZSBHbG9iZU1hcmtlciB7CgkvKioKCSAqIExhdGl0dWRlIGFuZCBMb25naXR1ZGUgY29vcmRpbmF0ZXMgW2xhdCwgbG9uXS4KCSAqLwoJbG9jYXRpb246IFtudW1iZXIsIG51bWJlcl07CgkvKioKCSAqIFNpemUgb2YgdGhlIG1hcmtlciBpbiB3b3JsZCB1bml0cy4KCSAqIEBkZWZhdWx0IDAuMDUKCSAqLwoJc2l6ZT86IG51bWJlcjsKCS8qKgoJICogQ29sb3Igb2YgdGhlIG1hcmtlci4KCSAqIEBkZWZhdWx0ICIjZmZmZmZmIgoJICovCgljb2xvcj86IHN0cmluZzsKCS8qKgoJICogT3B0aW9uYWwgZmFsbGJhY2sgdG9vbHRpcCB0ZXh0ICh1c2VkIHdoZW4gbm8gY3VzdG9tIHRvb2x0aXAgcmVuZGVyZXIgaXMgcHJvdmlkZWQpLgoJICovCglsYWJlbD86IHN0cmluZzsKfQoKZXhwb3J0IGludGVyZmFjZSBHbG9iZU1hcmtlclRvb2x0aXBDb250ZXh0IHsKCS8qKgoJICogTWFya2VyIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZC4KCSAqLwoJbWFya2VyOiBHbG9iZU1hcmtlcjsKCS8qKgoJICogTWFya2VyIGluZGV4IGluIHRoZSBtYXJrZXJzIGFycmF5LgoJICovCglpbmRleDogbnVtYmVyOwoJLyoqCgkgKiBNYXJrZXIgdmlzaWJpbGl0eSBmYWN0b3IgaW4gcmFuZ2UgWzAsIDFdLgoJICogMCBtZWFucyBmdWxseSBoaWRkZW4gYmVoaW5kIHRoZSBnbG9iZSwgMSBtZWFucyBmdWxseSB2aXNpYmxlLgoJICovCgl2aXNpYmlsaXR5OiBudW1iZXI7Cn0K", "assets/land-texture.png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAACAAQAAAADMzoqnAAAAAXNSR0IArs4c6QAABA5JREFUeNrV179uHEUAx/Hf3JpbF+E2VASBsmVKTBcpKJs3SMEDcDwBiVJAAewYEBUivIHT0uUBIt0YCovKD0CRjUC4QfHYh8hYXu+P25vZ2Zm9c66gMd/GJ/tz82d3bk8GN4SrByYF2366FNTACIAkivVAAazQdnf3MvAlbNUQfOPAdQDvSAimMWhwy4I2g4SU+Kp04ISLpPBAKLxPyic3O/CCi+Y7rUJbiodcpDOFY7CgxCEXmdYD2EYK2s5lApOx5pEDDYCUwM1XdJUwBV11QQMg59kePSCaPAASQMEL2hwo6TJFgxpg+TgC2ymXPbuvc40awr3D1QCFfbH9kcoqAOkZozpQo0aqAGQRKCog/+tjkgbNFEtg2FffBvBGlSxHoAaAa1u6X4PBAwDiR8FFsrQgeUhfJTSALaB9jy5NCybJPn1SVFiWk7ywN+KzhH1aKAuydhGkbEF4lWohLXDXavlyFgHY7LBnLRdlAP6BS5Cc8RfVDXbkwN/oIvmY+6obbNeBP0JwTuMGu9gTzy1Q4RS/cWpfzszeYwd+CAFrtBW/Hur0gLbJGlD+/OjVwe/drfBxkbbg63dndEDfiEBlAd7ac0BPe1D6Jd8dfbLH+RI0OzseFB5s01/M+gMdAeluLOCAuaUA9Lezo/vSgXoCX9rtEiXnp7Q1W/CNyWcd8DXoS6jH/YZ5vAJEWY2dXFQe2TUgaFaNejCzJ98g6HnlVrsE58sDcYqg+9XY75fPqdoh/kRQWiXKg8MWlJQxUFMPjqnyujhFBE7UxIMjyszk0QwQlFsezImsyvUYYYVED2pk6m0Tg8T04Fwjk2kdAwSACqlM6gRRt3vQYAFGX0Ah7Ebx1H+MDRI5ui0QldH4j7FGcm90XdxD2Jg1AOEAVAKhEFXSn4cKUELurIAKwJ3MArypPscQaLhJFICJ0ohjDySAdH8AhDtCiTuMycH8CXzhH9jUACAO5uMhoAwA5i+T6WAKmmAqnLy80wxHqIPFYpqCwxGaYLt4Dyievg5kEoVEUAhs6pqKgFtDQYOuaXypaWKQfIuwwoGSZgfLsu/XAtI8cGN+h7Cc1A5oLOMhwlIPXuhu48AIvsSBkvtV9wsJRKCyYLfq5lTrQMFd1a262oqBck9K1V0YjQg0iEYYgpS1A9GlXQV5cykwm4A7BzVsxQqo7E+zCegO7Ma7yKgsuOcfKbMBwLC8wvVNYDsANYalEpOAa6zpWjTeMKGwEwC1CiQewJc5EKfgy7GmRAZA4vUVGwE2dPM/g0xuAInE/yG5aZ8ISxWGfYigUVbdyBElTHh2uCwGdfCkOLGgQVBh3Ewp+/QK4CDlR5Ws/Zf7yhCf8pH7vinWAvoVCQ6zz0NX5V/6GkAVV+2/5qsJ/gU8bsxpM8IeAQAAAABJRU5ErkJggg==", - "components/god-rays/GodRays.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dvZFJheXNTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAiI0ZGRkZGRiIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogSG9yaXpvbnRhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJYW5jaG9yWD86IFNjZW5lUHJvcHNbImFuY2hvclgiXTsKCQkvKioKCQkgKiBWZXJ0aWNhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMS4yCgkJICovCgkJYW5jaG9yWT86IFNjZW5lUHJvcHNbImFuY2hvclkiXTsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXJlY3Rpb25YPzogU2NlbmVQcm9wc1siZGlyZWN0aW9uWCJdOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAtMS4wCgkJICovCgkJZGlyZWN0aW9uWT86IFNjZW5lUHJvcHNbImRpcmVjdGlvblkiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBUaGUgc3ByZWFkIG9mIHRoZSBsaWdodCByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWxpZ2h0U3ByZWFkPzogU2NlbmVQcm9wc1sibGlnaHRTcHJlYWQiXTsKCQkvKioKCQkgKiBUaGUgbGVuZ3RoIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXJheUxlbmd0aD86IFNjZW5lUHJvcHNbInJheUxlbmd0aCJdOwoJCS8qKgoJCSAqIFdoZXRoZXIgdGhlIHJheXMgc2hvdWxkIHB1bHNhdGUuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQlwdWxzYXRpbmc/OiBTY2VuZVByb3BzWyJwdWxzYXRpbmciXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBhdCB3aGljaCB0aGUgcmF5cyBzdGFydCB0byBmYWRlIG91dC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlmYWRlRGlzdGFuY2U/OiBTY2VuZVByb3BzWyJmYWRlRGlzdGFuY2UiXTsKCQkvKioKCQkgKiBTYXR1cmF0aW9uIG9mIHRoZSBmaW5hbCByYXkgY29sb3JzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNhdHVyYXRpb24/OiBTY2VuZVByb3BzWyJzYXR1cmF0aW9uIl07CgkJLyoqCgkJICogQW1vdW50IG9mIGdyYWluL25vaXNlIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJbm9pc2VBbW91bnQ/OiBTY2VuZVByb3BzWyJub2lzZUFtb3VudCJdOwoJCS8qKgoJCSAqIEFtb3VudCBvZiB3YXZlIGRpc3RvcnRpb24gYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogU2NlbmVQcm9wc1siZGlzdG9ydGlvbiJdOwoJCS8qKgoJCSAqIEdsb2JhbCByYXkgaW50ZW5zaXR5LiBMb3dlciB2YWx1ZXMgZGltIGFuZCB0aWdodGVuIHJheXMsIGhpZ2hlciB2YWx1ZXMgYnJpZ2h0ZW4gdGhlbS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBTY2VuZVByb3BzWyJpbnRlbnNpdHkiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiNGRkZGRkYiLAoJCWJhY2tncm91bmRDb2xvciA9ICIjMDAwMDAwIiwKCQlhbmNob3JYID0gMC41LAoJCWFuY2hvclkgPSAxLjIsCgkJZGlyZWN0aW9uWCA9IDAuMCwKCQlkaXJlY3Rpb25ZID0gLTEuMCwKCQlzcGVlZCA9IDEuMCwKCQlsaWdodFNwcmVhZCA9IDEuMCwKCQlyYXlMZW5ndGggPSAxLjAsCgkJcHVsc2F0aW5nID0gZmFsc2UsCgkJZmFkZURpc3RhbmNlID0gMS4wLAoJCXNhdHVyYXRpb24gPSAxLjAsCgkJbm9pc2VBbW91bnQgPSAwLjAsCgkJZGlzdG9ydGlvbiA9IDAuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtjb2xvcn0KCQkJe2JhY2tncm91bmRDb2xvcn0KCQkJe2FuY2hvclh9CgkJCXthbmNob3JZfQoJCQl7ZGlyZWN0aW9uWH0KCQkJe2RpcmVjdGlvbll9CgkJCXtzcGVlZH0KCQkJe2xpZ2h0U3ByZWFkfQoJCQl7cmF5TGVuZ3RofQoJCQl7cHVsc2F0aW5nfQoJCQl7ZmFkZURpc3RhbmNlfQoJCQl7c2F0dXJhdGlvbn0KCQkJe25vaXNlQW1vdW50fQoJCQl7ZGlzdG9ydGlvbn0KCQkJe2ludGVuc2l0eX0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/god-rays/GodRaysScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIHJheXMuCgkJICogQGRlZmF1bHQgIiNGRkZGRkYiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBiYWNrZ3JvdW5kLgoJCSAqIEBkZWZhdWx0ICIjMDAwMDAwIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogSG9yaXpvbnRhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJYW5jaG9yWD86IG51bWJlcjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMS4yCgkJICovCgkJYW5jaG9yWT86IG51bWJlcjsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXJlY3Rpb25YPzogbnVtYmVyOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAtMS4wCgkJICovCgkJZGlyZWN0aW9uWT86IG51bWJlcjsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIFRoZSBzcHJlYWQgb2YgdGhlIGxpZ2h0IHJheXMuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJbGlnaHRTcHJlYWQ/OiBudW1iZXI7CgkJLyoqCgkJICogVGhlIGxlbmd0aCBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlyYXlMZW5ndGg/OiBudW1iZXI7CgkJLyoqCgkJICogV2hldGhlciB0aGUgcmF5cyBzaG91bGQgcHVsc2F0ZS4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCXB1bHNhdGluZz86IGJvb2xlYW47CgkJLyoqCgkJICogRGlzdGFuY2UgYXQgd2hpY2ggdGhlIHJheXMgc3RhcnQgdG8gZmFkZSBvdXQuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJZmFkZURpc3RhbmNlPzogbnVtYmVyOwoJCS8qKgoJCSAqIFNhdHVyYXRpb24gb2YgdGhlIGZpbmFsIHJheSBjb2xvcnMuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc2F0dXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBBbW91bnQgb2YgZ3JhaW4vbm9pc2UgYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlub2lzZUFtb3VudD86IG51bWJlcjsKCQkvKioKCQkgKiBBbW91bnQgb2Ygd2F2ZSBkaXN0b3J0aW9uIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBHbG9iYWwgcmF5IGludGVuc2l0eS4gTG93ZXIgdmFsdWVzIGRpbSBhbmQgdGlnaHRlbiByYXlzLCBoaWdoZXIgdmFsdWVzIGJyaWdodGVuIHRoZW0uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogbnVtYmVyOwoJfQoKCWxldCB7CgkJY29sb3IgPSAiI0ZGRkZGRiIsCgkJYmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiLAoJCWFuY2hvclggPSAwLjUsCgkJYW5jaG9yWSA9IDEuMiwKCQlkaXJlY3Rpb25YID0gMC4wLAoJCWRpcmVjdGlvblkgPSAtMS4wLAoJCXNwZWVkID0gMS4wLAoJCWxpZ2h0U3ByZWFkID0gMS4wLAoJCXJheUxlbmd0aCA9IDEuMCwKCQlwdWxzYXRpbmcgPSBmYWxzZSwKCQlmYWRlRGlzdGFuY2UgPSAxLjAsCgkJc2F0dXJhdGlvbiA9IDEuMCwKCQlub2lzZUFtb3VudCA9IDAuMCwKCQlkaXN0b3J0aW9uID0gMC4wLAoJCWludGVuc2l0eSA9IDEuMCwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTx7CgkJdVRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWMyIH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUJhY2tncm91bmRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVBbmNob3JYOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1QW5jaG9yWTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJheURpcjogeyB2YWx1ZTogVmVjMiB9OwoJCXVTcGVlZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUxpZ2h0U3ByZWFkOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmF5TGVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UHVsc2F0aW5nOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RmFkZURpc3RhbmNlOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1U2F0dXJhdGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdU5vaXNlQW1vdW50OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUludGVuc2l0eTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9PigpOwoKCWNvbnN0IGNsYW1wMDEgPSAodmFsdWU6IG51bWJlcikgPT4gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgdmFsdWUpKTsKCWNvbnN0IHNyZ2JUb0xpbmVhciA9ICh2YWx1ZTogbnVtYmVyKSA9PgoJCXZhbHVlIDw9IDAuMDQwNDUgPyB2YWx1ZSAvIDEyLjkyIDogTWF0aC5wb3coKHZhbHVlICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7CgoJY29uc3Qgbm9ybWFsaXplVHJpcGxldCA9ICgKCQlyOiBudW1iZXIsCgkJZzogbnVtYmVyLAoJCWI6IG51bWJlciwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChyLCBnLCBiKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbY2xhbXAwMShyIC8gc2NhbGUpLCBjbGFtcDAxKGcgLyBzY2FsZSksIGNsYW1wMDEoYiAvIHNjYWxlKV07Cgl9OwoKCWNvbnN0IHBhcnNlSGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJCWlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSg0LCA2KSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX07CgoJbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCWNvbnN0IHBhcnNlQ3NzQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKCQlpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQkJY29uc3QgcGFyc2VyQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CgkJCXBhcnNlckNhbnZhcy53aWR0aCA9IDE7CgkJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCQljc3NDb2xvckNvbnRleHQgPSBwYXJzZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCQl9CgkJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gIiMwMDAwMDAiOwoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTsKCQljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCgkJaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgiIyIpKSB7CgkJCXJldHVybiBwYXJzZUhleENvbG9yKG5vcm1hbGl6ZWQpOwoJCX0KCgkJY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9yZ2JhP1woKFteKV0rKVwpL2kpOwoJCWlmICghbWF0Y2gpIHJldHVybiBudWxsOwoJCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkJLnNwbGl0KCIsIikKCQkJLm1hcCgocGFydCkgPT4gTnVtYmVyLnBhcnNlRmxvYXQocGFydC50cmltKCkpKQoJCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJCWlmIChwYXJ0cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKTsKCX07CgoJY29uc3QgdG9SZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgewoJCQljb25zdCBpbnQgPSBNYXRoLm1pbigweGZmZmZmZiwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih2YWx1ZSkpKTsKCQkJcmV0dXJuIFsKCQkJCSgoaW50ID4+IDE2KSAmIDI1NSkgLyAyNTUsCgkJCQkoKGludCA+PiA4KSAmIDI1NSkgLyAyNTUsCgkJCQkoaW50ICYgMjU1KSAvIDI1NSwKCQkJXTsKCQl9CgoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJCWNvbnN0IGhleCA9IHZhbHVlLnRyaW0oKTsKCQkJY29uc3QgcGFyc2VkID0gaGV4LnN0YXJ0c1dpdGgoIiMiKQoJCQkJPyBwYXJzZUhleENvbG9yKGhleCkKCQkJCTogcGFyc2VDc3NDb2xvcihoZXgpOwoJCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJCX0KCgkJaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSAzKSB7CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pOwoJCX0KCgkJaWYgKAoJCQl2YWx1ZSAmJgoJCQl0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmCgkJCSJyIiBpbiB2YWx1ZSAmJgoJCQkiZyIgaW4gdmFsdWUgJiYKCQkJImIiIGluIHZhbHVlCgkJKSB7CgkJCWNvbnN0IHJnYiA9IHZhbHVlIGFzIHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9OwoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldChyZ2IuciwgcmdiLmcsIHJnYi5iKTsKCQl9CgoJCXJldHVybiBmYWxsYmFjazsKCX07CgoJY29uc3QgdG9MaW5lYXJSZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9SZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQlyZXR1cm4gW3NyZ2JUb0xpbmVhcihyKSwgc3JnYlRvTGluZWFyKGcpLCBzcmdiVG9MaW5lYXIoYildOwoJfTsKCgljb25zdCBhcHBseUNvbG9yID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdUFuY2hvclg7CgkJdW5pZm9ybSBmbG9hdCB1QW5jaG9yWTsKCQl1bmlmb3JtIHZlYzIgdVJheURpcjsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZDsKCQl1bmlmb3JtIGZsb2F0IHVMaWdodFNwcmVhZDsKCQl1bmlmb3JtIGZsb2F0IHVSYXlMZW5ndGg7CgkJdW5pZm9ybSBmbG9hdCB1UHVsc2F0aW5nOwoJCXVuaWZvcm0gZmxvYXQgdUZhZGVEaXN0YW5jZTsKCQl1bmlmb3JtIGZsb2F0IHVTYXR1cmF0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdU5vaXNlQW1vdW50OwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb247CgkJdW5pZm9ybSBmbG9hdCB1SW50ZW5zaXR5OwoKCQlmbG9hdCBub2lzZTIodmVjMiBzdCkgewoJCQlyZXR1cm4gZnJhY3Qoc2luKGRvdChzdCwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzMTIzKTsKCQl9CgoJCWZsb2F0IGRpdGhlck5vaXNlKHZlYzIgcCkgewoJCQlyZXR1cm4gZnJhY3QoNTIuOTgyOTE4OSAqIGZyYWN0KGRvdChwLCB2ZWMyKDAuMDY3MTEwNTYsIDAuMDA1ODM3MTUpKSkpOwoJCX0KCgkJZmxvYXQgY29sb3JMdW1hKHZlYzMgYykgewoJCQlyZXR1cm4gZG90KGMsIHZlYzMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpOwoJCX0KCgkJdmVjMyBodWVGcm9tQ29sb3IodmVjMyBjLCB2ZWMzIGZhbGxiYWNrKSB7CgkJCWZsb2F0IG0gPSBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTsKCQkJaWYgKG0gPCAxZS01KSByZXR1cm4gZmFsbGJhY2s7CgkJCXJldHVybiBjbGFtcChjIC8gbSwgMC4wLCAxLjApOwoJCX0KCgkJdmVjMyBibGVuZEFkYXB0aXZlKHZlYzMgYmcsIHZlYzMgZWZmZWN0LCBmbG9hdCBzb2Z0bmVzcykgewoJCQlmbG9hdCBiZ0x1bSA9IGNvbG9yTHVtYShiZyk7CgkJCWZsb2F0IGxpZ2h0QmcgPSBzbW9vdGhzdGVwKDAuNDUsIDAuOTUsIGJnTHVtKTsKCQkJZmxvYXQgZWRnZSA9IGNsYW1wKHNvZnRuZXNzLCAwLjAsIDEuMCk7CgkJCWZsb2F0IHRpbnRFbmVyZ3kgPSAxLjAgLSBleHAoLTQuMCAqIGNvbG9yTHVtYShlZmZlY3QpKTsKCgkJCXZlYzMgYWRkaXRpdmUgPSBiZyArIGVmZmVjdDsKCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQl2ZWMzIHRpbnRUYXJnZXQgPSBtaXgoYmcsIGVmZmVjdEh1ZSwgMC45KTsKCQkJdmVjMyB0aW50ID0gbWl4KGJnLCB0aW50VGFyZ2V0LCBlZGdlICogdGludEVuZXJneSk7CgoJCQlyZXR1cm4gbWl4KGFkZGl0aXZlLCB0aW50LCBsaWdodEJnKTsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQlmbG9hdCByYXlTdHJlbmd0aCgKCQkJdmVjMiByYXlTb3VyY2UsCgkJCXZlYzIgcmF5RGlyLAoJCQl2ZWMyIGNvb3JkLAoJCQlmbG9hdCBzZWVkQSwKCQkJZmxvYXQgc2VlZEIsCgkJCWZsb2F0IHNwZWVkLAoJCQlmbG9hdCB0aW1lLAoJCQlmbG9hdCBtYXhEaW0KCQkpIHsKCQkJdmVjMiBzb3VyY2VUb0Nvb3JkID0gY29vcmQgLSByYXlTb3VyY2U7CgkJCXZlYzIgZGlyTm9ybSA9IG5vcm1hbGl6ZShzb3VyY2VUb0Nvb3JkKTsKCQkJZmxvYXQgY29zQW5nbGUgPSBkb3QoZGlyTm9ybSwgcmF5RGlyKTsKCgkJCWZsb2F0IGRpc3RvcnRlZEFuZ2xlID0gY29zQW5nbGUKCQkJCSsgdURpc3RvcnRpb24gKiBzaW4odGltZSAqIDIuMCArIGxlbmd0aChzb3VyY2VUb0Nvb3JkKSAqIDAuMDEpICogMC4yOwoKCQkJZmxvYXQgc3ByZWFkRmFjdG9yID0gcG93KG1heChkaXN0b3J0ZWRBbmdsZSwgMC4wKSwgMS4wIC8gbWF4KHVMaWdodFNwcmVhZCwgMC4wMDEpKTsKCgkJCWZsb2F0IGRpc3QgPSBsZW5ndGgoc291cmNlVG9Db29yZCk7CgkJCWZsb2F0IG1heERpc3QgPSBtYXhEaW0gKiB1UmF5TGVuZ3RoOwoJCQlmbG9hdCBsZW5ndGhGYWxsb2ZmID0gY2xhbXAoKG1heERpc3QgLSBkaXN0KSAvIG1heERpc3QsIDAuMCwgMS4wKTsKCgkJCWZsb2F0IGZhZGVGYWxsb2ZmID0gY2xhbXAoCgkJCQkobWF4RGltICogdUZhZGVEaXN0YW5jZSAtIGRpc3QpIC8gKG1heERpbSAqIHVGYWRlRGlzdGFuY2UpLAoJCQkJMC41LCAxLjAKCQkJKTsKCgkJCWZsb2F0IHB1bHNlID0gKHVQdWxzYXRpbmcgPiAwLjUpID8gKDAuOCArIDAuMiAqIHNpbih0aW1lICogc3BlZWQgKiAzLjApKSA6IDEuMDsKCgkJCWZsb2F0IGJhc2VTdHJlbmd0aCA9IGNsYW1wKAoJCQkJKDAuNDUgKyAwLjE1ICogc2luKGRpc3RvcnRlZEFuZ2xlICogc2VlZEEgKyB0aW1lICogc3BlZWQpKSArCgkJCQkoMC4zICArIDAuMiAgKiBjb3MoLWRpc3RvcnRlZEFuZ2xlICogc2VlZEIgKyB0aW1lICogc3BlZWQpKSwKCQkJCTAuMCwgMS4wCgkJCSk7CgoJCQlyZXR1cm4gYmFzZVN0cmVuZ3RoICogbGVuZ3RoRmFsbG9mZiAqIGZhZGVGYWxsb2ZmICogc3ByZWFkRmFjdG9yICogcHVsc2U7CgkJfQoKCQl2b2lkIG1haW5JbWFnZShvdXQgdmVjNCBjb2wsIHZlYzIgZnJhZ0Nvb3JkKSB7CgkJCXZlYzIgcmVzb2x1dGlvbiA9IHVSZXNvbHV0aW9uOwoJCQlmbG9hdCB0aW1lID0gdVRpbWU7CgoJCQl2ZWMyIGNvb3JkID0gZnJhZ0Nvb3JkOwoJCQl2ZWMyIHJheVBvcyA9IHZlYzIodUFuY2hvclgsIHVBbmNob3JZKSAqIHJlc29sdXRpb247CgkJCXZlYzIgcmF5RGlyID0gbm9ybWFsaXplKHVSYXlEaXIpOwoKCQkJZmxvYXQgbWF4RGltID0gbGVuZ3RoKHJlc29sdXRpb24pOwoKCQkJZmxvYXQgcnMxID0gcmF5U3RyZW5ndGgocmF5UG9zLCByYXlEaXIsIGNvb3JkLCAzNi4yMjE0LCAyMS4xMTM0OSwgMS41ICogdVNwZWVkLCB0aW1lLCBtYXhEaW0pOwoJCQlmbG9hdCByczIgPSByYXlTdHJlbmd0aChyYXlQb3MsIHJheURpciwgY29vcmQsIDIyLjM5OTEsIDE4LjAyMzQsIDEuMSAqIHVTcGVlZCwgdGltZSwgbWF4RGltKTsKCgkJCWZsb2F0IGludGVuc2l0eVNjYWxlID0gbWF4KHVJbnRlbnNpdHksIDAuMCk7CgkJCWZsb2F0IGludGVuc2l0eUZvclNoYXBlID0gY2xhbXAoaW50ZW5zaXR5U2NhbGUsIDAuMCwgMS4wKTsKCQkJZmxvYXQgc2hhcGVFeHBvbmVudCA9IG1peCgyLjM1LCAxLjM1LCBpbnRlbnNpdHlGb3JTaGFwZSk7CgkJCWZsb2F0IHN0cmVuZ3RoID0gcnMxICogMC41ICsgcnMyICogMC40OwoJCQlmbG9hdCBzaGFwZWRTdHJlbmd0aCA9IHBvdyhjbGFtcChzdHJlbmd0aCwgMC4wLCAxLjApLCBzaGFwZUV4cG9uZW50KTsKCQkJZmxvYXQgc29mdE1hc2sgPSAxLjAgLSBleHAoLTMuMCAqIHNoYXBlZFN0cmVuZ3RoKTsKCQkJdmVjMyByYXlDb2xvciA9IHVDb2xvciAqIHNoYXBlZFN0cmVuZ3RoICogaW50ZW5zaXR5U2NhbGU7CgoJCQlpZiAodU5vaXNlQW1vdW50ID4gMC4wKSB7CgkJCQlmbG9hdCBuID0gbm9pc2UyKGNvb3JkICogMC4wMSArIHRpbWUgKiAwLjEpOwoJCQkJZmxvYXQgbm9pc2VNaXggPSAxLjAgLSB1Tm9pc2VBbW91bnQgKyB1Tm9pc2VBbW91bnQgKiBuOwoJCQkJcmF5Q29sb3IgKj0gbm9pc2VNaXg7CgkJCQlzb2Z0TWFzayAqPSBtaXgoMS4wLCBub2lzZU1peCwgMC41KTsKCQkJfQoKCQkJdmVjMyByZ2IgPSBibGVuZEFkYXB0aXZlKHVCYWNrZ3JvdW5kQ29sb3IsIHJheUNvbG9yLCBzb2Z0TWFzayk7CgoJCQlpZiAodVNhdHVyYXRpb24gIT0gMS4wKSB7CgkJCQlmbG9hdCBncmF5ID0gZG90KHJnYiwgdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KSk7CgkJCQlyZ2IgPSBtaXgodmVjMyhncmF5KSwgcmdiLCB1U2F0dXJhdGlvbik7CgkJCX0KCgkJCXJnYiArPSAoZGl0aGVyTm9pc2UoZnJhZ0Nvb3JkICsgdmVjMih1VGltZSAqIDYwLjApKSAtIDAuNSkgLyAyNTUuMDsKCQkJcmdiID0gY2xhbXAocmdiLCAwLjAsIDEuMCk7CgoJCQljb2wgPSB2ZWM0KHJnYiwgMS4wKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCXZlYzIgZnJhZ0Nvb3JkID0gdlV2ICogdVJlc29sdXRpb24ueHk7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIGZyYWdDb29yZCk7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQlhcHBseUNvbG9yKHVuaWZvcm1zLnVDb2xvci52YWx1ZSwgY29sb3IsIFsxLCAxLCAxXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJdW5pZm9ybXMudUFuY2hvclgudmFsdWUgPSBhbmNob3JYOwoJCXVuaWZvcm1zLnVBbmNob3JZLnZhbHVlID0gYW5jaG9yWTsKCQl1bmlmb3Jtcy51UmF5RGlyLnZhbHVlLnNldChkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTsKCQl1bmlmb3Jtcy51U3BlZWQudmFsdWUgPSBzcGVlZDsKCQl1bmlmb3Jtcy51TGlnaHRTcHJlYWQudmFsdWUgPSBsaWdodFNwcmVhZDsKCQl1bmlmb3Jtcy51UmF5TGVuZ3RoLnZhbHVlID0gcmF5TGVuZ3RoOwoJCXVuaWZvcm1zLnVQdWxzYXRpbmcudmFsdWUgPSBwdWxzYXRpbmcgPyAxIDogMDsKCQl1bmlmb3Jtcy51RmFkZURpc3RhbmNlLnZhbHVlID0gZmFkZURpc3RhbmNlOwoJCXVuaWZvcm1zLnVTYXR1cmF0aW9uLnZhbHVlID0gc2F0dXJhdGlvbjsKCQl1bmlmb3Jtcy51Tm9pc2VBbW91bnQudmFsdWUgPSBub2lzZUFtb3VudDsKCQl1bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJdW5pZm9ybXMudUludGVuc2l0eS52YWx1ZSA9IGludGVuc2l0eTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbml0aWFsQ29sb3IgPSB0b0xpbmVhclJnYihjb2xvciwgWzEsIDEsIDFdKTsKCQljb25zdCBpbml0aWFsQmFja2dyb3VuZCA9IHRvTGluZWFyUmdiKGJhY2tncm91bmRDb2xvciwgWzAsIDAsIDBdKTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdVRpbWU6IHsgdmFsdWU6IDAuMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUNvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoaW5pdGlhbENvbG9yWzBdLCBpbml0aWFsQ29sb3JbMV0sIGluaXRpYWxDb2xvclsyXSksCgkJCX0sCgkJCXVCYWNrZ3JvdW5kQ29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMygKCQkJCQlpbml0aWFsQmFja2dyb3VuZFswXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZFsxXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZFsyXSwKCQkJCSksCgkJCX0sCgkJCXVBbmNob3JYOiB7IHZhbHVlOiBhbmNob3JYIH0sCgkJCXVBbmNob3JZOiB7IHZhbHVlOiBhbmNob3JZIH0sCgkJCXVSYXlEaXI6IHsgdmFsdWU6IG5ldyBWZWMyKGRpcmVjdGlvblgsIGRpcmVjdGlvblkpIH0sCgkJCXVTcGVlZDogeyB2YWx1ZTogc3BlZWQgfSwKCQkJdUxpZ2h0U3ByZWFkOiB7IHZhbHVlOiBsaWdodFNwcmVhZCB9LAoJCQl1UmF5TGVuZ3RoOiB7IHZhbHVlOiByYXlMZW5ndGggfSwKCQkJdVB1bHNhdGluZzogeyB2YWx1ZTogcHVsc2F0aW5nID8gMSA6IDAgfSwKCQkJdUZhZGVEaXN0YW5jZTogeyB2YWx1ZTogZmFkZURpc3RhbmNlIH0sCgkJCXVTYXR1cmF0aW9uOiB7IHZhbHVlOiBzYXR1cmF0aW9uIH0sCgkJCXVOb2lzZUFtb3VudDogeyB2YWx1ZTogbm9pc2VBbW91bnQgfSwKCQkJdURpc3RvcnRpb246IHsgdmFsdWU6IGRpc3RvcnRpb24gfSwKCQkJdUludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJfTsKCgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", - "components/halo/Halo.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0hhbG9TY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQ2FtZXJhIHJvdGF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJcm90YXRpb25TcGVlZD86IFNjZW5lUHJvcHNbInJvdGF0aW9uU3BlZWQiXTsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiB0aGUgY2FtZXJhIGZyb20gdGhlIGNlbnRlci4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQljYW1lcmFEaXN0YW5jZT86IFNjZW5lUHJvcHNbImNhbWVyYURpc3RhbmNlIl07CgkJLyoqCgkJICogRmllbGQgb2YgVmlldyAoRk9WKSBvZiB0aGUgY2FtZXJhIGluIGRlZ3JlZXMuCgkJICogQGRlZmF1bHQgNTUuMAoJCSAqLwoJCWZvdj86IFNjZW5lUHJvcHNbImZvdiJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChYKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5YPzogU2NlbmVQcm9wc1sic3VuWCJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChZKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5ZPzogU2NlbmVQcm9wc1sic3VuWSJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChaKS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzdW5aPzogU2NlbmVQcm9wc1sic3VuWiJdOwoJCS8qKgoJCSAqIE92ZXJhbGwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIHNjYXR0ZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IFNjZW5lUHJvcHNbImludGVuc2l0eSJdOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJcm90YXRpb25TcGVlZCA9IDAuNSwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJY2FtZXJhRGlzdGFuY2UgPSAzLjAsCgkJZm92ID0gNTUuMCwKCQlzdW5YID0gMC4wLAoJCXN1blkgPSAwLjAsCgkJc3VuWiA9IDEuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtyb3RhdGlvblNwZWVkfQoJCQl7YmFja2dyb3VuZENvbG9yfQoJCQl7Y2FtZXJhRGlzdGFuY2V9CgkJCXtmb3Z9CgkJCXtzdW5YfQoJCQl7c3VuWX0KCQkJe3N1blp9CgkJCXtpbnRlbnNpdHl9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/halo/HaloScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIENhbWVyYSByb3RhdGlvbiBzcGVlZCBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDAuNQoJCSAqLwoJCXJvdGF0aW9uU3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiB0aGUgY2FtZXJhIGZyb20gdGhlIGNlbnRlci4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQljYW1lcmFEaXN0YW5jZT86IG51bWJlcjsKCQkvKioKCQkgKiBGaWVsZCBvZiBWaWV3IChGT1YpIG9mIHRoZSBjYW1lcmEgaW4gZGVncmVlcy4KCQkgKiBAZGVmYXVsdCA1NS4wCgkJICovCgkJZm92PzogbnVtYmVyOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChYKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5YPzogbnVtYmVyOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChZKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5ZPzogbnVtYmVyOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChaKS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzdW5aPzogbnVtYmVyOwoJCS8qKgoJCSAqIE92ZXJhbGwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIHNjYXR0ZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCXJvdGF0aW9uU3BlZWQgPSAwLjUsCgkJYmFja2dyb3VuZENvbG9yID0gIiMwMDAwMDAiLAoJCWNhbWVyYURpc3RhbmNlID0gMy4wLAoJCWZvdiA9IDU1LjAsCgkJc3VuWCA9IDAuMCwKCQlzdW5ZID0gMC4wLAoJCXN1blogPSAxLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdVJvdGF0aW9uU3BlZWQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVDYW1lcmFEaXN0YW5jZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUZvdjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVN1bkRpcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVJbnRlbnNpdHk6IHsgdmFsdWU6IG51bWJlciB9OwoJfT4oKTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKCWNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCgkJcjogbnVtYmVyLAoJCWc6IG51bWJlciwKCQliOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgociwgZywgYikgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwoJfTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSk7Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHsKCQkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJCXJldHVybiBbCgkJCQkoKGludCA+PiAxNikgJiAyNTUpIC8gMjU1LAoJCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkJKGludCAmIDI1NSkgLyAyNTUsCgkJCV07CgkJfQoKCQlpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewoJCQljb25zdCBoZXggPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IGhleC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcihoZXgpCgkJCQk6IHBhcnNlQ3NzQ29sb3IoaGV4KTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgoJCWlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gMykgewoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldCh2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTsKCQl9CgoJCWlmICgKCQkJdmFsdWUgJiYKCQkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCQkiciIgaW4gdmFsdWUgJiYKCQkJImciIGluIHZhbHVlICYmCgkJCSJiIiBpbiB2YWx1ZQoJCSkgewoJCQljb25zdCByZ2IgPSB2YWx1ZSBhcyB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7CgkJfQoKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3Qgc2V0Q29sb3JVbmlmb3JtID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCBzZXRTdW5EaXJlY3Rpb24gPSAodGFyZ2V0OiBWZWMzLCB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB7CgkJY29uc3QgbGVuID0gTWF0aC5oeXBvdCh4LCB5LCB6KTsKCQlpZiAobGVuIDwgMWUtNikgewoJCQl0YXJnZXQuc2V0KDAsIDAsIDEpOwoJCQlyZXR1cm47CgkJfQoJCXRhcmdldC5zZXQoeCAvIGxlbiwgeSAvIGxlbiwgeiAvIGxlbik7Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXVuaWZvcm0gZmxvYXQgdVRpbWU7CgkJdW5pZm9ybSB2ZWMyIHVSZXNvbHV0aW9uOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdVJvdGF0aW9uU3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1Q2FtZXJhRGlzdGFuY2U7CgkJdW5pZm9ybSBmbG9hdCB1Rm92OwoJCXVuaWZvcm0gdmVjMyB1U3VuRGlyOwoJCXVuaWZvcm0gZmxvYXQgdUludGVuc2l0eTsKCgkJY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU5OwoJCWNvbnN0IGZsb2F0IE1BWCA9IDEwMDAwLjA7CgkJY29uc3QgZmxvYXQgUl9JTk5FUiA9IDEuMDsKCQljb25zdCBmbG9hdCBSID0gMS41OwoJCWNvbnN0IGludCBOVU1fT1VUX1NDQVRURVIgPSA4OwoJCWNvbnN0IGludCBOVU1fSU5fU0NBVFRFUiA9IDQwOwoKCQl2ZWMyIHJheV92c19zcGhlcmUodmVjMyBwLCB2ZWMzIGRpciwgZmxvYXQgcikgewoJCQlmbG9hdCBiID0gZG90KHAsIGRpcik7CgkJCWZsb2F0IGMgPSBkb3QocCwgcCkgLSByICogcjsKCQkJZmxvYXQgZCA9IGIgKiBiIC0gYzsKCQkJaWYgKGQgPCAwLjApIHsKCQkJCXJldHVybiB2ZWMyKE1BWCwgLU1BWCk7CgkJCX0KCQkJZCA9IHNxcnQoZCk7CgkJCXJldHVybiB2ZWMyKC1iIC0gZCwgLWIgKyBkKTsKCQl9CgoJCWZsb2F0IHBoYXNlX21pZShmbG9hdCBnLCBmbG9hdCBjLCBmbG9hdCBjYykgewoJCQlmbG9hdCBnZyA9IGcgKiBnOwoJCQlmbG9hdCBhID0gKDEuMCAtIGdnKSAqICgxLjAgKyBjYyk7CgkJCWZsb2F0IGIgPSAxLjAgKyBnZyAtIDIuMCAqIGcgKiBjOwoJCQliICo9IHNxcnQoYik7CgkJCWIgKj0gMi4wICsgZ2c7CgkJCXJldHVybiAoMy4wIC8gOC4wIC8gUEkpICogYSAvIGI7CgkJfQoKCQlmbG9hdCBwaGFzZV9yYXkoZmxvYXQgY2MpIHsKCQkJcmV0dXJuICgzLjAgLyAxNi4wIC8gUEkpICogKDEuMCArIGNjKTsKCQl9CgoJCWZsb2F0IGRlbnNpdHkodmVjMyBwLCBmbG9hdCBwaCkgewoJCQlyZXR1cm4gZXhwKC1tYXgobGVuZ3RoKHApIC0gUl9JTk5FUiwgMC4wKSAvIHBoKTsKCQl9CgoJCWZsb2F0IGNvbG9yTHVtYSh2ZWMzIGMpIHsKCQkJcmV0dXJuIGRvdChjLCB2ZWMzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKTsKCQl9CgoJCXZlYzMgaHVlRnJvbUNvbG9yKHZlYzMgYywgdmVjMyBmYWxsYmFjaykgewoJCQlmbG9hdCBtID0gbWF4KG1heChjLnIsIGMuZyksIGMuYik7CgkJCWlmIChtIDwgMWUtNSkgcmV0dXJuIGZhbGxiYWNrOwoJCQlyZXR1cm4gY2xhbXAoYyAvIG0sIDAuMCwgMS4wKTsKCQl9CgoJCXZlYzMgYmxlbmRBZGFwdGl2ZSh2ZWMzIGJnLCB2ZWMzIGVmZmVjdCwgZmxvYXQgc29mdG5lc3MpIHsKCQkJZmxvYXQgYmdMdW0gPSBjb2xvckx1bWEoYmcpOwoJCQlmbG9hdCBsaWdodEJnID0gc21vb3Roc3RlcCgwLjQ1LCAwLjk1LCBiZ0x1bSk7CgkJCWZsb2F0IGVkZ2UgPSBjbGFtcChzb2Z0bmVzcywgMC4wLCAxLjApOwoKCQkJdmVjMyBhZGRpdGl2ZSA9IGJnICsgZWZmZWN0OwoJCQl2ZWMzIGVmZmVjdEh1ZSA9IGh1ZUZyb21Db2xvcihlZmZlY3QsIHZlYzMoMS4wKSk7CgkJCXZlYzMgdGludFRhcmdldCA9IG1peChiZywgZWZmZWN0SHVlLCAwLjg1KTsKCQkJdmVjMyB0aW50ID0gbWl4KGJnLCB0aW50VGFyZ2V0LCBlZGdlKTsKCgkJCXJldHVybiBtaXgoYWRkaXRpdmUsIHRpbnQsIGxpZ2h0QmcpOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCWZsb2F0IG9wdGljKHZlYzMgcCwgdmVjMyBxLCBmbG9hdCBwaCkgewoJCQl2ZWMzIHMgPSAocSAtIHApIC8gZmxvYXQoTlVNX09VVF9TQ0FUVEVSKTsKCQkJdmVjMyB2ID0gcCArIHMgKiAwLjU7CgkJCWZsb2F0IHN1bSA9IDAuMDsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fT1VUX1NDQVRURVI7IGkrKykgewoJCQkJc3VtICs9IGRlbnNpdHkodiwgcGgpOwoJCQkJdiArPSBzOwoJCQl9CgkJCXN1bSAqPSBsZW5ndGgocyk7CgkJCXJldHVybiBzdW07CgkJfQoKCQl2ZWMzIGluX3NjYXR0ZXIodmVjMyBvLCB2ZWMzIGRpciwgdmVjMiBlLCB2ZWMzIGwpIHsKCQkJY29uc3QgZmxvYXQgcGhfcmF5ID0gMC4wNTsKCQkJY29uc3QgZmxvYXQgcGhfbWllID0gMC4wMjsKCQkJY29uc3QgdmVjMyBrX3JheSA9IHZlYzMoMy44LCAxMy41LCAzMy4xKTsKCQkJY29uc3QgdmVjMyBrX21pZSA9IHZlYzMoMjEuMCk7CgkJCWNvbnN0IGZsb2F0IGtfbWllX2V4ID0gMS4xOwoKCQkJdmVjMyBzdW1fcmF5ID0gdmVjMygwLjApOwoJCQl2ZWMzIHN1bV9taWUgPSB2ZWMzKDAuMCk7CgkJCWZsb2F0IG5fcmF5MCA9IDAuMDsKCQkJZmxvYXQgbl9taWUwID0gMC4wOwoJCQlmbG9hdCBsZW4gPSAoZS55IC0gZS54KSAvIGZsb2F0KE5VTV9JTl9TQ0FUVEVSKTsKCQkJdmVjMyBzID0gZGlyICogbGVuOwoJCQl2ZWMzIHYgPSBvICsgZGlyICogKGUueCArIGxlbiAqIDAuNSk7CgoJCQlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9JTl9TQ0FUVEVSOyBpKyspIHsKCQkJCWZsb2F0IGRfcmF5ID0gZGVuc2l0eSh2LCBwaF9yYXkpICogbGVuOwoJCQkJZmxvYXQgZF9taWUgPSBkZW5zaXR5KHYsIHBoX21pZSkgKiBsZW47CgkJCQluX3JheTAgKz0gZF9yYXk7CgkJCQluX21pZTAgKz0gZF9taWU7CgoJCQkJdmVjMiBmID0gcmF5X3ZzX3NwaGVyZSh2LCBsLCBSKTsKCQkJCXZlYzMgdSA9IHYgKyBsICogZi55OwoJCQkJZmxvYXQgbl9yYXkxID0gb3B0aWModiwgdSwgcGhfcmF5KTsKCQkJCWZsb2F0IG5fbWllMSA9IG9wdGljKHYsIHUsIHBoX21pZSk7CgkJCQl2ZWMzIGF0dCA9IGV4cCgtKG5fcmF5MCArIG5fcmF5MSkgKiBrX3JheSAtIChuX21pZTAgKyBuX21pZTEpICoga19taWUgKiBrX21pZV9leCk7CgkJCQlzdW1fcmF5ICs9IGRfcmF5ICogYXR0OwoJCQkJc3VtX21pZSArPSBkX21pZSAqIGF0dDsKCQkJCXYgKz0gczsKCQkJfQoJCQlmbG9hdCBjID0gZG90KGRpciwgLWwpOwoJCQlmbG9hdCBjYyA9IGMgKiBjOwoJCQl2ZWMzIHNjYXR0ZXIgPSBzdW1fcmF5ICoga19yYXkgKiBwaGFzZV9yYXkoY2MpICsgc3VtX21pZSAqIGtfbWllICogcGhhc2VfbWllKC0wLjc4LCBjLCBjYyk7CgkJCXJldHVybiBzY2F0dGVyOwoJCX0KCgkJbWF0MyByb3QzeHkodmVjMiBhbmdsZSkgewoJCQl2ZWMyIGMgPSBjb3MoYW5nbGUpOwoJCQl2ZWMyIHMgPSBzaW4oYW5nbGUpOwoJCQlyZXR1cm4gbWF0MygKCQkJCWMueSwgMC4wLCAtcy55LAoJCQkJcy55ICogcy54LCBjLngsIGMueSAqIHMueCwKCQkJCXMueSAqIGMueCwgLXMueCwgYy55ICogYy54CgkJCSk7CgkJfQoKCQl2ZWMzIHJheV9kaXIoZmxvYXQgZm92LCB2ZWMyIHNpemUsIHZlYzIgdXYpIHsKCQkJdmVjMiB4eSA9IHV2ICogc2l6ZSAtIHNpemUgKiAwLjU7CgkJCWZsb2F0IGNvdF9oYWxmX2ZvdiA9IHRhbihyYWRpYW5zKDkwLjAgLSBmb3YgKiAwLjUpKTsKCQkJZmxvYXQgeiA9IHNpemUueSAqIDAuNSAqIGNvdF9oYWxmX2ZvdjsKCQkJcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKHh5LCAteikpOwoJCX0KCgkJdm9pZCBtYWluSW1hZ2Uob3V0IHZlYzQgZnJhZ0NvbG9yLCBpbiB2ZWMyIHV2KSB7CgkJCXZlYzMgZGlyID0gcmF5X2Rpcih1Rm92LCB1UmVzb2x1dGlvbi54eSwgdXYpOwoJCQl2ZWMzIGV5ZSA9IHZlYzMoMC4wLCAwLjAsIHVDYW1lcmFEaXN0YW5jZSk7CgkJCW1hdDMgcm90ID0gcm90M3h5KHZlYzIoMC4wLCB1VGltZSAqIHVSb3RhdGlvblNwZWVkKSk7CgkJCWRpciA9IHJvdCAqIGRpcjsKCQkJZXllID0gcm90ICogZXllOwoJCQl2ZWMzIGwgPSBub3JtYWxpemUodVN1bkRpcik7CgkJCXZlYzIgZSA9IHJheV92c19zcGhlcmUoZXllLCBkaXIsIFIpOwoJCQlpZiAoZS54ID4gZS55KSB7CgkJCQlmcmFnQ29sb3IgPSB2ZWM0KHVCYWNrZ3JvdW5kQ29sb3IsIDEuMCk7CgkJCQlyZXR1cm47CgkJCX0KCQkJdmVjMiBmID0gcmF5X3ZzX3NwaGVyZShleWUsIGRpciwgUl9JTk5FUik7CgkJCWUueSA9IG1pbihlLnksIGYueCk7CgkJCXZlYzMgSSA9IGluX3NjYXR0ZXIoZXllLCBkaXIsIGUsIGwpOwoJCQl2ZWMzIGhhbG8gPSBJICogdUludGVuc2l0eSAqIDEwLjA7CgkJCWZsb2F0IHNvZnRNYXNrID0gMS4wIC0gZXhwKC0xLjIgKiBjb2xvckx1bWEoaGFsbykpOwoJCQl2ZWMzIHJnYiA9IGJsZW5kQWRhcHRpdmUodUJhY2tncm91bmRDb2xvciwgaGFsbywgc29mdE1hc2spOwoJCQlmcmFnQ29sb3IgPSB2ZWM0KHJnYiwgMS4wKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjNCBmcmFnQ29sb3I7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIHZVdik7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQlzZXRDb2xvclVuaWZvcm0oCgkJCXVuaWZvcm1zLnVCYWNrZ3JvdW5kQ29sb3IudmFsdWUsCgkJCWJhY2tncm91bmRDb2xvciwKCQkJWzAsIDAsIDBdLAoJCSk7CgkJdW5pZm9ybXMudVJvdGF0aW9uU3BlZWQudmFsdWUgPSByb3RhdGlvblNwZWVkOwoJCXVuaWZvcm1zLnVDYW1lcmFEaXN0YW5jZS52YWx1ZSA9IGNhbWVyYURpc3RhbmNlOwoJCXVuaWZvcm1zLnVGb3YudmFsdWUgPSBmb3Y7CgkJc2V0U3VuRGlyZWN0aW9uKHVuaWZvcm1zLnVTdW5EaXIudmFsdWUsIHN1blgsIHN1blksIHN1blopOwoJCXVuaWZvcm1zLnVJbnRlbnNpdHkudmFsdWUgPSBpbnRlbnNpdHk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbEJhY2tncm91bmQgPSB0b0xpbmVhclJnYihiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJY29uc3QgaW5pdGlhbFN1biA9IG5ldyBWZWMzKDAsIDAsIDEpOwoJCXNldFN1bkRpcmVjdGlvbihpbml0aWFsU3VuLCBzdW5YLCBzdW5ZLCBzdW5aKTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdVRpbWU6IHsgdmFsdWU6IDAuMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUJhY2tncm91bmRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzBdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzFdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzJdLAoJCQkJKSwKCQkJfSwKCQkJdVJvdGF0aW9uU3BlZWQ6IHsgdmFsdWU6IHJvdGF0aW9uU3BlZWQgfSwKCQkJdUNhbWVyYURpc3RhbmNlOiB7IHZhbHVlOiBjYW1lcmFEaXN0YW5jZSB9LAoJCQl1Rm92OiB7IHZhbHVlOiBmb3YgfSwKCQkJdVN1bkRpcjogeyB2YWx1ZTogaW5pdGlhbFN1biB9LAoJCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBpbnRlbnNpdHkgfSwKCQl9OwoKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgeyBnZW9tZXRyeSwgcHJvZ3JhbSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", + "components/god-rays/GodRays.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0dvZFJheXNTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAiI0ZGRkZGRiIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMxNzE4MUEiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogSG9yaXpvbnRhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJYW5jaG9yWD86IFNjZW5lUHJvcHNbImFuY2hvclgiXTsKCQkvKioKCQkgKiBWZXJ0aWNhbCBhbmNob3IgcG9pbnQgb2YgdGhlIHJheSBzb3VyY2UgKDAtMSkuCgkJICogQGRlZmF1bHQgMS4yCgkJICovCgkJYW5jaG9yWT86IFNjZW5lUHJvcHNbImFuY2hvclkiXTsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXJlY3Rpb25YPzogU2NlbmVQcm9wc1siZGlyZWN0aW9uWCJdOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGRpcmVjdGlvbiBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAtMS4wCgkJICovCgkJZGlyZWN0aW9uWT86IFNjZW5lUHJvcHNbImRpcmVjdGlvblkiXTsKCQkvKioKCQkgKiBTcGVlZCBtdWx0aXBsaWVyIGZvciB0aGUgYW5pbWF0aW9uLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBUaGUgc3ByZWFkIG9mIHRoZSBsaWdodCByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWxpZ2h0U3ByZWFkPzogU2NlbmVQcm9wc1sibGlnaHRTcHJlYWQiXTsKCQkvKioKCQkgKiBUaGUgbGVuZ3RoIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXJheUxlbmd0aD86IFNjZW5lUHJvcHNbInJheUxlbmd0aCJdOwoJCS8qKgoJCSAqIFdoZXRoZXIgdGhlIHJheXMgc2hvdWxkIHB1bHNhdGUuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQlwdWxzYXRpbmc/OiBTY2VuZVByb3BzWyJwdWxzYXRpbmciXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBhdCB3aGljaCB0aGUgcmF5cyBzdGFydCB0byBmYWRlIG91dC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlmYWRlRGlzdGFuY2U/OiBTY2VuZVByb3BzWyJmYWRlRGlzdGFuY2UiXTsKCQkvKioKCQkgKiBTYXR1cmF0aW9uIG9mIHRoZSBmaW5hbCByYXkgY29sb3JzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNhdHVyYXRpb24/OiBTY2VuZVByb3BzWyJzYXR1cmF0aW9uIl07CgkJLyoqCgkJICogQW1vdW50IG9mIGdyYWluL25vaXNlIGFwcGxpZWQgdG8gdGhlIHJheXMuCgkJICogQGRlZmF1bHQgMC4wCgkJICovCgkJbm9pc2VBbW91bnQ/OiBTY2VuZVByb3BzWyJub2lzZUFtb3VudCJdOwoJCS8qKgoJCSAqIEFtb3VudCBvZiB3YXZlIGRpc3RvcnRpb24gYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogU2NlbmVQcm9wc1siZGlzdG9ydGlvbiJdOwoJCS8qKgoJCSAqIEdsb2JhbCByYXkgaW50ZW5zaXR5LiBMb3dlciB2YWx1ZXMgZGltIGFuZCB0aWdodGVuIHJheXMsIGhpZ2hlciB2YWx1ZXMgYnJpZ2h0ZW4gdGhlbS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBTY2VuZVByb3BzWyJpbnRlbnNpdHkiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiNGRkZGRkYiLAoJCWJhY2tncm91bmRDb2xvciA9ICIjMTcxODFBIiwKCQlhbmNob3JYID0gMC41LAoJCWFuY2hvclkgPSAxLjIsCgkJZGlyZWN0aW9uWCA9IDAuMCwKCQlkaXJlY3Rpb25ZID0gLTEuMCwKCQlzcGVlZCA9IDEuMCwKCQlsaWdodFNwcmVhZCA9IDEuMCwKCQlyYXlMZW5ndGggPSAxLjAsCgkJcHVsc2F0aW5nID0gZmFsc2UsCgkJZmFkZURpc3RhbmNlID0gMS4wLAoJCXNhdHVyYXRpb24gPSAxLjAsCgkJbm9pc2VBbW91bnQgPSAwLjAsCgkJZGlzdG9ydGlvbiA9IDAuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtjb2xvcn0KCQkJe2JhY2tncm91bmRDb2xvcn0KCQkJe2FuY2hvclh9CgkJCXthbmNob3JZfQoJCQl7ZGlyZWN0aW9uWH0KCQkJe2RpcmVjdGlvbll9CgkJCXtzcGVlZH0KCQkJe2xpZ2h0U3ByZWFkfQoJCQl7cmF5TGVuZ3RofQoJCQl7cHVsc2F0aW5nfQoJCQl7ZmFkZURpc3RhbmNlfQoJCQl7c2F0dXJhdGlvbn0KCQkJe25vaXNlQW1vdW50fQoJCQl7ZGlzdG9ydGlvbn0KCQkJe2ludGVuc2l0eX0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/god-rays/GodRaysScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoJaW1wb3J0IHsgdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uLCB0b0xpbmVhclJnYiB9IGZyb20gIi4uL2hlbHBlcnMvY29sb3IiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAiI0ZGRkZGRiIKCQkgKi8KCQljb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMxNzE4MUEiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBIb3Jpem9udGFsIGFuY2hvciBwb2ludCBvZiB0aGUgcmF5IHNvdXJjZSAoMC0xKS4KCQkgKiBAZGVmYXVsdCAwLjUKCQkgKi8KCQlhbmNob3JYPzogbnVtYmVyOwoJCS8qKgoJCSAqIFZlcnRpY2FsIGFuY2hvciBwb2ludCBvZiB0aGUgcmF5IHNvdXJjZSAoMC0xKS4KCQkgKiBAZGVmYXVsdCAxLjIKCQkgKi8KCQlhbmNob3JZPzogbnVtYmVyOwoJCS8qKgoJCSAqIEhvcml6b250YWwgZGlyZWN0aW9uIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDAuMAoJCSAqLwoJCWRpcmVjdGlvblg/OiBudW1iZXI7CgkJLyoqCgkJICogVmVydGljYWwgZGlyZWN0aW9uIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IC0xLjAKCQkgKi8KCQlkaXJlY3Rpb25ZPzogbnVtYmVyOwoJCS8qKgoJCSAqIFNwZWVkIG11bHRpcGxpZXIgZm9yIHRoZSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogVGhlIHNwcmVhZCBvZiB0aGUgbGlnaHQgcmF5cy4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlsaWdodFNwcmVhZD86IG51bWJlcjsKCQkvKioKCQkgKiBUaGUgbGVuZ3RoIG9mIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXJheUxlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBXaGV0aGVyIHRoZSByYXlzIHNob3VsZCBwdWxzYXRlLgoJCSAqIEBkZWZhdWx0IGZhbHNlCgkJICovCgkJcHVsc2F0aW5nPzogYm9vbGVhbjsKCQkvKioKCQkgKiBEaXN0YW5jZSBhdCB3aGljaCB0aGUgcmF5cyBzdGFydCB0byBmYWRlIG91dC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlmYWRlRGlzdGFuY2U/OiBudW1iZXI7CgkJLyoqCgkJICogU2F0dXJhdGlvbiBvZiB0aGUgZmluYWwgcmF5IGNvbG9ycy4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzYXR1cmF0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBncmFpbi9ub2lzZSBhcHBsaWVkIHRvIHRoZSByYXlzLgoJCSAqIEBkZWZhdWx0IDAuMAoJCSAqLwoJCW5vaXNlQW1vdW50PzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtb3VudCBvZiB3YXZlIGRpc3RvcnRpb24gYXBwbGllZCB0byB0aGUgcmF5cy4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlkaXN0b3J0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEdsb2JhbCByYXkgaW50ZW5zaXR5LiBMb3dlciB2YWx1ZXMgZGltIGFuZCB0aWdodGVuIHJheXMsIGhpZ2hlciB2YWx1ZXMgYnJpZ2h0ZW4gdGhlbS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQljb2xvciA9ICIjRkZGRkZGIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzE3MTgxQSIsCgkJYW5jaG9yWCA9IDAuNSwKCQlhbmNob3JZID0gMS4yLAoJCWRpcmVjdGlvblggPSAwLjAsCgkJZGlyZWN0aW9uWSA9IC0xLjAsCgkJc3BlZWQgPSAxLjAsCgkJbGlnaHRTcHJlYWQgPSAxLjAsCgkJcmF5TGVuZ3RoID0gMS4wLAoJCXB1bHNhdGluZyA9IGZhbHNlLAoJCWZhZGVEaXN0YW5jZSA9IDEuMCwKCQlzYXR1cmF0aW9uID0gMS4wLAoJCW5vaXNlQW1vdW50ID0gMC4wLAoJCWRpc3RvcnRpb24gPSAwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUFuY2hvclg6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVBbmNob3JZOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmF5RGlyOiB7IHZhbHVlOiBWZWMyIH07CgkJdVNwZWVkOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1TGlnaHRTcHJlYWQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSYXlMZW5ndGg6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVQdWxzYXRpbmc6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVGYWRlRGlzdGFuY2U6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVTYXR1cmF0aW9uOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Tm9pc2VBbW91bnQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBudW1iZXIgfTsKCX0+KCk7CgoJY29uc3QgYXBwbHlDb2xvciA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJdGFyZ2V0LnNldChyLCBnLCBiKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdW5pZm9ybSBmbG9hdCB1VGltZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMzIHVDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdUJhY2tncm91bmRDb2xvcjsKCQl1bmlmb3JtIGZsb2F0IHVBbmNob3JYOwoJCXVuaWZvcm0gZmxvYXQgdUFuY2hvclk7CgkJdW5pZm9ybSB2ZWMyIHVSYXlEaXI7CgkJdW5pZm9ybSBmbG9hdCB1U3BlZWQ7CgkJdW5pZm9ybSBmbG9hdCB1TGlnaHRTcHJlYWQ7CgkJdW5pZm9ybSBmbG9hdCB1UmF5TGVuZ3RoOwoJCXVuaWZvcm0gZmxvYXQgdVB1bHNhdGluZzsKCQl1bmlmb3JtIGZsb2F0IHVGYWRlRGlzdGFuY2U7CgkJdW5pZm9ybSBmbG9hdCB1U2F0dXJhdGlvbjsKCQl1bmlmb3JtIGZsb2F0IHVOb2lzZUFtb3VudDsKCQl1bmlmb3JtIGZsb2F0IHVEaXN0b3J0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdUludGVuc2l0eTsKCgkJZmxvYXQgbm9pc2UyKHZlYzIgc3QpIHsKCQkJcmV0dXJuIGZyYWN0KHNpbihkb3Qoc3QsIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1MzEyMyk7CgkJfQoKCQlmbG9hdCBkaXRoZXJOb2lzZSh2ZWMyIHApIHsKCQkJcmV0dXJuIGZyYWN0KDUyLjk4MjkxODkgKiBmcmFjdChkb3QocCwgdmVjMigwLjA2NzExMDU2LCAwLjAwNTgzNzE1KSkpKTsKCQl9CgoJCWZsb2F0IGNvbG9yTHVtYSh2ZWMzIGMpIHsKCQkJcmV0dXJuIGRvdChjLCB2ZWMzKDAuMjEyNiwgMC43MTUyLCAwLjA3MjIpKTsKCQl9CgoJCXZlYzMgaHVlRnJvbUNvbG9yKHZlYzMgYywgdmVjMyBmYWxsYmFjaykgewoJCQlmbG9hdCBtID0gbWF4KG1heChjLnIsIGMuZyksIGMuYik7CgkJCWlmIChtIDwgMWUtNSkgcmV0dXJuIGZhbGxiYWNrOwoJCQlyZXR1cm4gY2xhbXAoYyAvIG0sIDAuMCwgMS4wKTsKCQl9CgoJCXZlYzMgYmxlbmRBZGFwdGl2ZSh2ZWMzIGJnLCB2ZWMzIGVmZmVjdCwgZmxvYXQgc29mdG5lc3MpIHsKCQkJZmxvYXQgYmdMdW0gPSBjb2xvckx1bWEoYmcpOwoJCQlmbG9hdCBsaWdodEJnID0gc21vb3Roc3RlcCgwLjQ1LCAwLjk1LCBiZ0x1bSk7CgkJCWZsb2F0IGVkZ2UgPSBjbGFtcChzb2Z0bmVzcywgMC4wLCAxLjApOwoJCQlmbG9hdCB0aW50RW5lcmd5ID0gMS4wIC0gZXhwKC00LjAgKiBjb2xvckx1bWEoZWZmZWN0KSk7CgoJCQl2ZWMzIGFkZGl0aXZlID0gYmcgKyBlZmZlY3Q7CgkJCXZlYzMgZWZmZWN0SHVlID0gaHVlRnJvbUNvbG9yKGVmZmVjdCwgdmVjMygxLjApKTsKCQkJdmVjMyB0aW50VGFyZ2V0ID0gbWl4KGJnLCBlZmZlY3RIdWUsIDAuOSk7CgkJCXZlYzMgdGludCA9IG1peChiZywgdGludFRhcmdldCwgZWRnZSAqIHRpbnRFbmVyZ3kpOwoKCQkJcmV0dXJuIG1peChhZGRpdGl2ZSwgdGludCwgbGlnaHRCZyk7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJZmxvYXQgcmF5U3RyZW5ndGgoCgkJCXZlYzIgcmF5U291cmNlLAoJCQl2ZWMyIHJheURpciwKCQkJdmVjMiBjb29yZCwKCQkJZmxvYXQgc2VlZEEsCgkJCWZsb2F0IHNlZWRCLAoJCQlmbG9hdCBzcGVlZCwKCQkJZmxvYXQgdGltZSwKCQkJZmxvYXQgbWF4RGltCgkJKSB7CgkJCXZlYzIgc291cmNlVG9Db29yZCA9IGNvb3JkIC0gcmF5U291cmNlOwoJCQl2ZWMyIGRpck5vcm0gPSBub3JtYWxpemUoc291cmNlVG9Db29yZCk7CgkJCWZsb2F0IGNvc0FuZ2xlID0gZG90KGRpck5vcm0sIHJheURpcik7CgoJCQlmbG9hdCBkaXN0b3J0ZWRBbmdsZSA9IGNvc0FuZ2xlCgkJCQkrIHVEaXN0b3J0aW9uICogc2luKHRpbWUgKiAyLjAgKyBsZW5ndGgoc291cmNlVG9Db29yZCkgKiAwLjAxKSAqIDAuMjsKCgkJCWZsb2F0IHNwcmVhZEZhY3RvciA9IHBvdyhtYXgoZGlzdG9ydGVkQW5nbGUsIDAuMCksIDEuMCAvIG1heCh1TGlnaHRTcHJlYWQsIDAuMDAxKSk7CgoJCQlmbG9hdCBkaXN0ID0gbGVuZ3RoKHNvdXJjZVRvQ29vcmQpOwoJCQlmbG9hdCBtYXhEaXN0ID0gbWF4RGltICogdVJheUxlbmd0aDsKCQkJZmxvYXQgbGVuZ3RoRmFsbG9mZiA9IGNsYW1wKChtYXhEaXN0IC0gZGlzdCkgLyBtYXhEaXN0LCAwLjAsIDEuMCk7CgoJCQlmbG9hdCBmYWRlRmFsbG9mZiA9IGNsYW1wKAoJCQkJKG1heERpbSAqIHVGYWRlRGlzdGFuY2UgLSBkaXN0KSAvIChtYXhEaW0gKiB1RmFkZURpc3RhbmNlKSwKCQkJCTAuNSwgMS4wCgkJCSk7CgoJCQlmbG9hdCBwdWxzZSA9ICh1UHVsc2F0aW5nID4gMC41KSA/ICgwLjggKyAwLjIgKiBzaW4odGltZSAqIHNwZWVkICogMy4wKSkgOiAxLjA7CgoJCQlmbG9hdCBiYXNlU3RyZW5ndGggPSBjbGFtcCgKCQkJCSgwLjQ1ICsgMC4xNSAqIHNpbihkaXN0b3J0ZWRBbmdsZSAqIHNlZWRBICsgdGltZSAqIHNwZWVkKSkgKwoJCQkJKDAuMyAgKyAwLjIgICogY29zKC1kaXN0b3J0ZWRBbmdsZSAqIHNlZWRCICsgdGltZSAqIHNwZWVkKSksCgkJCQkwLjAsIDEuMAoJCQkpOwoKCQkJcmV0dXJuIGJhc2VTdHJlbmd0aCAqIGxlbmd0aEZhbGxvZmYgKiBmYWRlRmFsbG9mZiAqIHNwcmVhZEZhY3RvciAqIHB1bHNlOwoJCX0KCgkJdm9pZCBtYWluSW1hZ2Uob3V0IHZlYzQgY29sLCB2ZWMyIGZyYWdDb29yZCkgewoJCQl2ZWMyIHJlc29sdXRpb24gPSB1UmVzb2x1dGlvbjsKCQkJZmxvYXQgdGltZSA9IHVUaW1lOwoKCQkJdmVjMiBjb29yZCA9IGZyYWdDb29yZDsKCQkJdmVjMiByYXlQb3MgPSB2ZWMyKHVBbmNob3JYLCB1QW5jaG9yWSkgKiByZXNvbHV0aW9uOwoJCQl2ZWMyIHJheURpciA9IG5vcm1hbGl6ZSh1UmF5RGlyKTsKCgkJCWZsb2F0IG1heERpbSA9IGxlbmd0aChyZXNvbHV0aW9uKTsKCgkJCWZsb2F0IHJzMSA9IHJheVN0cmVuZ3RoKHJheVBvcywgcmF5RGlyLCBjb29yZCwgMzYuMjIxNCwgMjEuMTEzNDksIDEuNSAqIHVTcGVlZCwgdGltZSwgbWF4RGltKTsKCQkJZmxvYXQgcnMyID0gcmF5U3RyZW5ndGgocmF5UG9zLCByYXlEaXIsIGNvb3JkLCAyMi4zOTkxLCAxOC4wMjM0LCAxLjEgKiB1U3BlZWQsIHRpbWUsIG1heERpbSk7CgoJCQlmbG9hdCBpbnRlbnNpdHlTY2FsZSA9IG1heCh1SW50ZW5zaXR5LCAwLjApOwoJCQlmbG9hdCBpbnRlbnNpdHlGb3JTaGFwZSA9IGNsYW1wKGludGVuc2l0eVNjYWxlLCAwLjAsIDEuMCk7CgkJCWZsb2F0IHNoYXBlRXhwb25lbnQgPSBtaXgoMi4zNSwgMS4zNSwgaW50ZW5zaXR5Rm9yU2hhcGUpOwoJCQlmbG9hdCBzdHJlbmd0aCA9IHJzMSAqIDAuNSArIHJzMiAqIDAuNDsKCQkJZmxvYXQgc2hhcGVkU3RyZW5ndGggPSBwb3coY2xhbXAoc3RyZW5ndGgsIDAuMCwgMS4wKSwgc2hhcGVFeHBvbmVudCk7CgkJCWZsb2F0IHNvZnRNYXNrID0gMS4wIC0gZXhwKC0zLjAgKiBzaGFwZWRTdHJlbmd0aCk7CgkJCXZlYzMgcmF5Q29sb3IgPSB1Q29sb3IgKiBzaGFwZWRTdHJlbmd0aCAqIGludGVuc2l0eVNjYWxlOwoKCQkJaWYgKHVOb2lzZUFtb3VudCA+IDAuMCkgewoJCQkJZmxvYXQgbiA9IG5vaXNlMihjb29yZCAqIDAuMDEgKyB0aW1lICogMC4xKTsKCQkJCWZsb2F0IG5vaXNlTWl4ID0gMS4wIC0gdU5vaXNlQW1vdW50ICsgdU5vaXNlQW1vdW50ICogbjsKCQkJCXJheUNvbG9yICo9IG5vaXNlTWl4OwoJCQkJc29mdE1hc2sgKj0gbWl4KDEuMCwgbm9pc2VNaXgsIDAuNSk7CgkJCX0KCgkJCXZlYzMgcmdiID0gYmxlbmRBZGFwdGl2ZSh1QmFja2dyb3VuZENvbG9yLCByYXlDb2xvciwgc29mdE1hc2spOwoKCQkJaWYgKHVTYXR1cmF0aW9uICE9IDEuMCkgewoJCQkJZmxvYXQgZ3JheSA9IGRvdChyZ2IsIHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCkpOwoJCQkJcmdiID0gbWl4KHZlYzMoZ3JheSksIHJnYiwgdVNhdHVyYXRpb24pOwoJCQl9CgoJCQlyZ2IgKz0gKGRpdGhlck5vaXNlKGZyYWdDb29yZCArIHZlYzIodVRpbWUgKiA2MC4wKSkgLSAwLjUpIC8gMjU1LjA7CgkJCXJnYiA9IGNsYW1wKHJnYiwgMC4wLCAxLjApOwoKCQkJY29sID0gdmVjNChyZ2IsIDEuMCk7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQl2ZWMyIGZyYWdDb29yZCA9IHZVdiAqIHVSZXNvbHV0aW9uLnh5OwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCBmcmFnQ29vcmQpOwoJCQlmcmFnQ29sb3IucmdiID0gbGluZWFyVG9TcmdiKGZyYWdDb2xvci5yZ2IpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXVuaWZvcm1zKSByZXR1cm47CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51Q29sb3IudmFsdWUsIGNvbG9yLCBbMSwgMSwgMV0pOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudUJhY2tncm91bmRDb2xvci52YWx1ZSwgYmFja2dyb3VuZENvbG9yLCBbCgkJCTIzIC8gMjU1LAoJCQkyNCAvIDI1NSwKCQkJMjYgLyAyNTUsCgkJXSk7CgkJdW5pZm9ybXMudUFuY2hvclgudmFsdWUgPSBhbmNob3JYOwoJCXVuaWZvcm1zLnVBbmNob3JZLnZhbHVlID0gYW5jaG9yWTsKCQl1bmlmb3Jtcy51UmF5RGlyLnZhbHVlLnNldChkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTsKCQl1bmlmb3Jtcy51U3BlZWQudmFsdWUgPSBzcGVlZDsKCQl1bmlmb3Jtcy51TGlnaHRTcHJlYWQudmFsdWUgPSBsaWdodFNwcmVhZDsKCQl1bmlmb3Jtcy51UmF5TGVuZ3RoLnZhbHVlID0gcmF5TGVuZ3RoOwoJCXVuaWZvcm1zLnVQdWxzYXRpbmcudmFsdWUgPSBwdWxzYXRpbmcgPyAxIDogMDsKCQl1bmlmb3Jtcy51RmFkZURpc3RhbmNlLnZhbHVlID0gZmFkZURpc3RhbmNlOwoJCXVuaWZvcm1zLnVTYXR1cmF0aW9uLnZhbHVlID0gc2F0dXJhdGlvbjsKCQl1bmlmb3Jtcy51Tm9pc2VBbW91bnQudmFsdWUgPSBub2lzZUFtb3VudDsKCQl1bmlmb3Jtcy51RGlzdG9ydGlvbi52YWx1ZSA9IGRpc3RvcnRpb247CgkJdW5pZm9ybXMudUludGVuc2l0eS52YWx1ZSA9IGludGVuc2l0eTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbml0aWFsQ29sb3IgPSB0b0xpbmVhclJnYihjb2xvciwgWzEsIDEsIDFdKTsKCQljb25zdCBpbml0aWFsQmFja2dyb3VuZCA9IHRvTGluZWFyUmdiKGJhY2tncm91bmRDb2xvciwgWwoJCQkyMyAvIDI1NSwKCQkJMjQgLyAyNTUsCgkJCTI2IC8gMjU1LAoJCV0pOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zID0gewoJCQl1VGltZTogeyB2YWx1ZTogMC4wIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhpbml0aWFsQ29sb3JbMF0sIGluaXRpYWxDb2xvclsxXSwgaW5pdGlhbENvbG9yWzJdKSwKCQkJfSwKCQkJdUJhY2tncm91bmRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzBdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzFdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzJdLAoJCQkJKSwKCQkJfSwKCQkJdUFuY2hvclg6IHsgdmFsdWU6IGFuY2hvclggfSwKCQkJdUFuY2hvclk6IHsgdmFsdWU6IGFuY2hvclkgfSwKCQkJdVJheURpcjogeyB2YWx1ZTogbmV3IFZlYzIoZGlyZWN0aW9uWCwgZGlyZWN0aW9uWSkgfSwKCQkJdVNwZWVkOiB7IHZhbHVlOiBzcGVlZCB9LAoJCQl1TGlnaHRTcHJlYWQ6IHsgdmFsdWU6IGxpZ2h0U3ByZWFkIH0sCgkJCXVSYXlMZW5ndGg6IHsgdmFsdWU6IHJheUxlbmd0aCB9LAoJCQl1UHVsc2F0aW5nOiB7IHZhbHVlOiBwdWxzYXRpbmcgPyAxIDogMCB9LAoJCQl1RmFkZURpc3RhbmNlOiB7IHZhbHVlOiBmYWRlRGlzdGFuY2UgfSwKCQkJdVNhdHVyYXRpb246IHsgdmFsdWU6IHNhdHVyYXRpb24gfSwKCQkJdU5vaXNlQW1vdW50OiB7IHZhbHVlOiBub2lzZUFtb3VudCB9LAoJCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogZGlzdG9ydGlvbiB9LAoJCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBpbnRlbnNpdHkgfSwKCQl9OwoKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgeyBnZW9tZXRyeSwgcHJvZ3JhbSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/halo/Halo.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL0hhbG9TY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQ2FtZXJhIHJvdGF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJcm90YXRpb25TcGVlZD86IFNjZW5lUHJvcHNbInJvdGF0aW9uU3BlZWQiXTsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzE3MTgxQSIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBTY2VuZVByb3BzWyJiYWNrZ3JvdW5kQ29sb3IiXTsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiB0aGUgY2FtZXJhIGZyb20gdGhlIGNlbnRlci4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQljYW1lcmFEaXN0YW5jZT86IFNjZW5lUHJvcHNbImNhbWVyYURpc3RhbmNlIl07CgkJLyoqCgkJICogRmllbGQgb2YgVmlldyAoRk9WKSBvZiB0aGUgY2FtZXJhIGluIGRlZ3JlZXMuCgkJICogQGRlZmF1bHQgNTUuMAoJCSAqLwoJCWZvdj86IFNjZW5lUHJvcHNbImZvdiJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChYKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5YPzogU2NlbmVQcm9wc1sic3VuWCJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChZKS4KCQkgKiBAZGVmYXVsdCAwLjAKCQkgKi8KCQlzdW5ZPzogU2NlbmVQcm9wc1sic3VuWSJdOwoJCS8qKgoJCSAqIFN1biBsaWdodCBkaXJlY3Rpb24gdmVjdG9yIChaKS4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzdW5aPzogU2NlbmVQcm9wc1sic3VuWiJdOwoJCS8qKgoJCSAqIE92ZXJhbGwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIHNjYXR0ZXJpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IFNjZW5lUHJvcHNbImludGVuc2l0eSJdOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJcm90YXRpb25TcGVlZCA9IDAuNSwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzE3MTgxQSIsCgkJY2FtZXJhRGlzdGFuY2UgPSAzLjAsCgkJZm92ID0gNTUuMCwKCQlzdW5YID0gMC4wLAoJCXN1blkgPSAwLjAsCgkJc3VuWiA9IDEuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lCgkJCXtyb3RhdGlvblNwZWVkfQoJCQl7YmFja2dyb3VuZENvbG9yfQoJCQl7Y2FtZXJhRGlzdGFuY2V9CgkJCXtmb3Z9CgkJCXtzdW5YfQoJCQl7c3VuWX0KCQkJe3N1blp9CgkJCXtpbnRlbnNpdHl9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", + "components/halo/HaloScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoJaW1wb3J0IHsgdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uLCB0b0xpbmVhclJnYiB9IGZyb20gIi4uL2hlbHBlcnMvY29sb3IiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQ2FtZXJhIHJvdGF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMC41CgkJICovCgkJcm90YXRpb25TcGVlZD86IG51bWJlcjsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzE3MTgxQSIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIERpc3RhbmNlIG9mIHRoZSBjYW1lcmEgZnJvbSB0aGUgY2VudGVyLgoJCSAqIEBkZWZhdWx0IDMuMAoJCSAqLwoJCWNhbWVyYURpc3RhbmNlPzogbnVtYmVyOwoJCS8qKgoJCSAqIEZpZWxkIG9mIFZpZXcgKEZPVikgb2YgdGhlIGNhbWVyYSBpbiBkZWdyZWVzLgoJCSAqIEBkZWZhdWx0IDU1LjAKCQkgKi8KCQlmb3Y/OiBudW1iZXI7CgkJLyoqCgkJICogU3VuIGxpZ2h0IGRpcmVjdGlvbiB2ZWN0b3IgKFgpLgoJCSAqIEBkZWZhdWx0IDAuMAoJCSAqLwoJCXN1blg/OiBudW1iZXI7CgkJLyoqCgkJICogU3VuIGxpZ2h0IGRpcmVjdGlvbiB2ZWN0b3IgKFkpLgoJCSAqIEBkZWZhdWx0IDAuMAoJCSAqLwoJCXN1blk/OiBudW1iZXI7CgkJLyoqCgkJICogU3VuIGxpZ2h0IGRpcmVjdGlvbiB2ZWN0b3IgKFopLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXN1blo/OiBudW1iZXI7CgkJLyoqCgkJICogT3ZlcmFsbCBpbnRlbnNpdHkvYnJpZ2h0bmVzcyBvZiB0aGUgc2NhdHRlcmluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogbnVtYmVyOwoJfQoKCWxldCB7CgkJcm90YXRpb25TcGVlZCA9IDAuNSwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzE3MTgxQSIsCgkJY2FtZXJhRGlzdGFuY2UgPSAzLjAsCgkJZm92ID0gNTUuMCwKCQlzdW5YID0gMC4wLAoJCXN1blkgPSAwLjAsCgkJc3VuWiA9IDEuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8ewoJCXVUaW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1Um90YXRpb25TcGVlZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUNhbWVyYURpc3RhbmNlOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1Rm92OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1U3VuRGlyOiB7IHZhbHVlOiBWZWMzIH07CgkJdUludGVuc2l0eTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9PigpOwoKCWNvbnN0IHNldENvbG9yVW5pZm9ybSA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJdGFyZ2V0LnNldChyLCBnLCBiKTsKCX07CgoJY29uc3Qgc2V0U3VuRGlyZWN0aW9uID0gKHRhcmdldDogVmVjMywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4gewoJCWNvbnN0IGxlbiA9IE1hdGguaHlwb3QoeCwgeSwgeik7CgkJaWYgKGxlbiA8IDFlLTYpIHsKCQkJdGFyZ2V0LnNldCgwLCAwLCAxKTsKCQkJcmV0dXJuOwoJCX0KCQl0YXJnZXQuc2V0KHggLyBsZW4sIHkgLyBsZW4sIHogLyBsZW4pOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUJhY2tncm91bmRDb2xvcjsKCQl1bmlmb3JtIGZsb2F0IHVSb3RhdGlvblNwZWVkOwoJCXVuaWZvcm0gZmxvYXQgdUNhbWVyYURpc3RhbmNlOwoJCXVuaWZvcm0gZmxvYXQgdUZvdjsKCQl1bmlmb3JtIHZlYzMgdVN1bkRpcjsKCQl1bmlmb3JtIGZsb2F0IHVJbnRlbnNpdHk7CgoJCWNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1OTsKCQljb25zdCBmbG9hdCBNQVggPSAxMDAwMC4wOwoJCWNvbnN0IGZsb2F0IFJfSU5ORVIgPSAxLjA7CgkJY29uc3QgZmxvYXQgUiA9IDEuNTsKCQljb25zdCBpbnQgTlVNX09VVF9TQ0FUVEVSID0gODsKCQljb25zdCBpbnQgTlVNX0lOX1NDQVRURVIgPSA0MDsKCgkJdmVjMiByYXlfdnNfc3BoZXJlKHZlYzMgcCwgdmVjMyBkaXIsIGZsb2F0IHIpIHsKCQkJZmxvYXQgYiA9IGRvdChwLCBkaXIpOwoJCQlmbG9hdCBjID0gZG90KHAsIHApIC0gciAqIHI7CgkJCWZsb2F0IGQgPSBiICogYiAtIGM7CgkJCWlmIChkIDwgMC4wKSB7CgkJCQlyZXR1cm4gdmVjMihNQVgsIC1NQVgpOwoJCQl9CgkJCWQgPSBzcXJ0KGQpOwoJCQlyZXR1cm4gdmVjMigtYiAtIGQsIC1iICsgZCk7CgkJfQoKCQlmbG9hdCBwaGFzZV9taWUoZmxvYXQgZywgZmxvYXQgYywgZmxvYXQgY2MpIHsKCQkJZmxvYXQgZ2cgPSBnICogZzsKCQkJZmxvYXQgYSA9ICgxLjAgLSBnZykgKiAoMS4wICsgY2MpOwoJCQlmbG9hdCBiID0gMS4wICsgZ2cgLSAyLjAgKiBnICogYzsKCQkJYiAqPSBzcXJ0KGIpOwoJCQliICo9IDIuMCArIGdnOwoJCQlyZXR1cm4gKDMuMCAvIDguMCAvIFBJKSAqIGEgLyBiOwoJCX0KCgkJZmxvYXQgcGhhc2VfcmF5KGZsb2F0IGNjKSB7CgkJCXJldHVybiAoMy4wIC8gMTYuMCAvIFBJKSAqICgxLjAgKyBjYyk7CgkJfQoKCQlmbG9hdCBkZW5zaXR5KHZlYzMgcCwgZmxvYXQgcGgpIHsKCQkJcmV0dXJuIGV4cCgtbWF4KGxlbmd0aChwKSAtIFJfSU5ORVIsIDAuMCkgLyBwaCk7CgkJfQoKCQlmbG9hdCBjb2xvckx1bWEodmVjMyBjKSB7CgkJCXJldHVybiBkb3QoYywgdmVjMygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSk7CgkJfQoKCQl2ZWMzIGh1ZUZyb21Db2xvcih2ZWMzIGMsIHZlYzMgZmFsbGJhY2spIHsKCQkJZmxvYXQgbSA9IG1heChtYXgoYy5yLCBjLmcpLCBjLmIpOwoJCQlpZiAobSA8IDFlLTUpIHJldHVybiBmYWxsYmFjazsKCQkJcmV0dXJuIGNsYW1wKGMgLyBtLCAwLjAsIDEuMCk7CgkJfQoKCQl2ZWMzIGJsZW5kQWRhcHRpdmUodmVjMyBiZywgdmVjMyBlZmZlY3QsIGZsb2F0IHNvZnRuZXNzKSB7CgkJCWZsb2F0IGJnTHVtID0gY29sb3JMdW1hKGJnKTsKCQkJZmxvYXQgbGlnaHRCZyA9IHNtb290aHN0ZXAoMC40NSwgMC45NSwgYmdMdW0pOwoJCQlmbG9hdCBlZGdlID0gY2xhbXAoc29mdG5lc3MsIDAuMCwgMS4wKTsKCgkJCXZlYzMgYWRkaXRpdmUgPSBiZyArIGVmZmVjdDsKCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQl2ZWMzIHRpbnRUYXJnZXQgPSBtaXgoYmcsIGVmZmVjdEh1ZSwgMC44NSk7CgkJCXZlYzMgdGludCA9IG1peChiZywgdGludFRhcmdldCwgZWRnZSk7CgoJCQlyZXR1cm4gbWl4KGFkZGl0aXZlLCB0aW50LCBsaWdodEJnKTsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQlmbG9hdCBvcHRpYyh2ZWMzIHAsIHZlYzMgcSwgZmxvYXQgcGgpIHsKCQkJdmVjMyBzID0gKHEgLSBwKSAvIGZsb2F0KE5VTV9PVVRfU0NBVFRFUik7CgkJCXZlYzMgdiA9IHAgKyBzICogMC41OwoJCQlmbG9hdCBzdW0gPSAwLjA7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX09VVF9TQ0FUVEVSOyBpKyspIHsKCQkJCXN1bSArPSBkZW5zaXR5KHYsIHBoKTsKCQkJCXYgKz0gczsKCQkJfQoJCQlzdW0gKj0gbGVuZ3RoKHMpOwoJCQlyZXR1cm4gc3VtOwoJCX0KCgkJdmVjMyBpbl9zY2F0dGVyKHZlYzMgbywgdmVjMyBkaXIsIHZlYzIgZSwgdmVjMyBsKSB7CgkJCWNvbnN0IGZsb2F0IHBoX3JheSA9IDAuMDU7CgkJCWNvbnN0IGZsb2F0IHBoX21pZSA9IDAuMDI7CgkJCWNvbnN0IHZlYzMga19yYXkgPSB2ZWMzKDMuOCwgMTMuNSwgMzMuMSk7CgkJCWNvbnN0IHZlYzMga19taWUgPSB2ZWMzKDIxLjApOwoJCQljb25zdCBmbG9hdCBrX21pZV9leCA9IDEuMTsKCgkJCXZlYzMgc3VtX3JheSA9IHZlYzMoMC4wKTsKCQkJdmVjMyBzdW1fbWllID0gdmVjMygwLjApOwoJCQlmbG9hdCBuX3JheTAgPSAwLjA7CgkJCWZsb2F0IG5fbWllMCA9IDAuMDsKCQkJZmxvYXQgbGVuID0gKGUueSAtIGUueCkgLyBmbG9hdChOVU1fSU5fU0NBVFRFUik7CgkJCXZlYzMgcyA9IGRpciAqIGxlbjsKCQkJdmVjMyB2ID0gbyArIGRpciAqIChlLnggKyBsZW4gKiAwLjUpOwoKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fSU5fU0NBVFRFUjsgaSsrKSB7CgkJCQlmbG9hdCBkX3JheSA9IGRlbnNpdHkodiwgcGhfcmF5KSAqIGxlbjsKCQkJCWZsb2F0IGRfbWllID0gZGVuc2l0eSh2LCBwaF9taWUpICogbGVuOwoJCQkJbl9yYXkwICs9IGRfcmF5OwoJCQkJbl9taWUwICs9IGRfbWllOwoKCQkJCXZlYzIgZiA9IHJheV92c19zcGhlcmUodiwgbCwgUik7CgkJCQl2ZWMzIHUgPSB2ICsgbCAqIGYueTsKCQkJCWZsb2F0IG5fcmF5MSA9IG9wdGljKHYsIHUsIHBoX3JheSk7CgkJCQlmbG9hdCBuX21pZTEgPSBvcHRpYyh2LCB1LCBwaF9taWUpOwoJCQkJdmVjMyBhdHQgPSBleHAoLShuX3JheTAgKyBuX3JheTEpICoga19yYXkgLSAobl9taWUwICsgbl9taWUxKSAqIGtfbWllICoga19taWVfZXgpOwoJCQkJc3VtX3JheSArPSBkX3JheSAqIGF0dDsKCQkJCXN1bV9taWUgKz0gZF9taWUgKiBhdHQ7CgkJCQl2ICs9IHM7CgkJCX0KCQkJZmxvYXQgYyA9IGRvdChkaXIsIC1sKTsKCQkJZmxvYXQgY2MgPSBjICogYzsKCQkJdmVjMyBzY2F0dGVyID0gc3VtX3JheSAqIGtfcmF5ICogcGhhc2VfcmF5KGNjKSArIHN1bV9taWUgKiBrX21pZSAqIHBoYXNlX21pZSgtMC43OCwgYywgY2MpOwoJCQlyZXR1cm4gc2NhdHRlcjsKCQl9CgoJCW1hdDMgcm90M3h5KHZlYzIgYW5nbGUpIHsKCQkJdmVjMiBjID0gY29zKGFuZ2xlKTsKCQkJdmVjMiBzID0gc2luKGFuZ2xlKTsKCQkJcmV0dXJuIG1hdDMoCgkJCQljLnksIDAuMCwgLXMueSwKCQkJCXMueSAqIHMueCwgYy54LCBjLnkgKiBzLngsCgkJCQlzLnkgKiBjLngsIC1zLngsIGMueSAqIGMueAoJCQkpOwoJCX0KCgkJdmVjMyByYXlfZGlyKGZsb2F0IGZvdiwgdmVjMiBzaXplLCB2ZWMyIHV2KSB7CgkJCXZlYzIgeHkgPSB1diAqIHNpemUgLSBzaXplICogMC41OwoJCQlmbG9hdCBjb3RfaGFsZl9mb3YgPSB0YW4ocmFkaWFucyg5MC4wIC0gZm92ICogMC41KSk7CgkJCWZsb2F0IHogPSBzaXplLnkgKiAwLjUgKiBjb3RfaGFsZl9mb3Y7CgkJCXJldHVybiBub3JtYWxpemUodmVjMyh4eSwgLXopKTsKCQl9CgoJCXZvaWQgbWFpbkltYWdlKG91dCB2ZWM0IGZyYWdDb2xvciwgaW4gdmVjMiB1dikgewoJCQl2ZWMzIGRpciA9IHJheV9kaXIodUZvdiwgdVJlc29sdXRpb24ueHksIHV2KTsKCQkJdmVjMyBleWUgPSB2ZWMzKDAuMCwgMC4wLCB1Q2FtZXJhRGlzdGFuY2UpOwoJCQltYXQzIHJvdCA9IHJvdDN4eSh2ZWMyKDAuMCwgdVRpbWUgKiB1Um90YXRpb25TcGVlZCkpOwoJCQlkaXIgPSByb3QgKiBkaXI7CgkJCWV5ZSA9IHJvdCAqIGV5ZTsKCQkJdmVjMyBsID0gbm9ybWFsaXplKHVTdW5EaXIpOwoJCQl2ZWMyIGUgPSByYXlfdnNfc3BoZXJlKGV5ZSwgZGlyLCBSKTsKCQkJaWYgKGUueCA+IGUueSkgewoJCQkJZnJhZ0NvbG9yID0gdmVjNCh1QmFja2dyb3VuZENvbG9yLCAxLjApOwoJCQkJcmV0dXJuOwoJCQl9CgkJCXZlYzIgZiA9IHJheV92c19zcGhlcmUoZXllLCBkaXIsIFJfSU5ORVIpOwoJCQllLnkgPSBtaW4oZS55LCBmLngpOwoJCQl2ZWMzIEkgPSBpbl9zY2F0dGVyKGV5ZSwgZGlyLCBlLCBsKTsKCQkJdmVjMyBoYWxvID0gSSAqIHVJbnRlbnNpdHkgKiAxMC4wOwoJCQlmbG9hdCBzb2Z0TWFzayA9IDEuMCAtIGV4cCgtMS4yICogY29sb3JMdW1hKGhhbG8pKTsKCQkJdmVjMyByZ2IgPSBibGVuZEFkYXB0aXZlKHVCYWNrZ3JvdW5kQ29sb3IsIGhhbG8sIHNvZnRNYXNrKTsKCQkJZnJhZ0NvbG9yID0gdmVjNChyZ2IsIDEuMCk7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCB2VXYpOwoJCQlmcmFnQ29sb3IucmdiID0gbGluZWFyVG9TcmdiKGZyYWdDb2xvci5yZ2IpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXVuaWZvcm1zKSByZXR1cm47CgkJc2V0Q29sb3JVbmlmb3JtKAoJCQl1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLAoJCQliYWNrZ3JvdW5kQ29sb3IsCgkJCVswLCAwLCAwXSwKCQkpOwoJCXVuaWZvcm1zLnVSb3RhdGlvblNwZWVkLnZhbHVlID0gcm90YXRpb25TcGVlZDsKCQl1bmlmb3Jtcy51Q2FtZXJhRGlzdGFuY2UudmFsdWUgPSBjYW1lcmFEaXN0YW5jZTsKCQl1bmlmb3Jtcy51Rm92LnZhbHVlID0gZm92OwoJCXNldFN1bkRpcmVjdGlvbih1bmlmb3Jtcy51U3VuRGlyLnZhbHVlLCBzdW5YLCBzdW5ZLCBzdW5aKTsKCQl1bmlmb3Jtcy51SW50ZW5zaXR5LnZhbHVlID0gaW50ZW5zaXR5OwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCk7CgkJY2FtZXJhLnBvc2l0aW9uLnogPSAxOwoKCQljb25zdCBzY2VuZSA9IG5ldyBUcmFuc2Zvcm0oKTsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBUcmlhbmdsZShnbCk7CgoJCWNvbnN0IGluaXRpYWxCYWNrZ3JvdW5kID0gdG9MaW5lYXJSZ2IoYmFja2dyb3VuZENvbG9yLCBbCgkJCTIzIC8gMjU1LAoJCQkyNCAvIDI1NSwKCQkJMjYgLyAyNTUsCgkJXSk7CgkJY29uc3QgaW5pdGlhbFN1biA9IG5ldyBWZWMzKDAsIDAsIDEpOwoJCXNldFN1bkRpcmVjdGlvbihpbml0aWFsU3VuLCBzdW5YLCBzdW5ZLCBzdW5aKTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdVRpbWU6IHsgdmFsdWU6IDAuMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdUJhY2tncm91bmRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzBdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzFdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kWzJdLAoJCQkJKSwKCQkJfSwKCQkJdVJvdGF0aW9uU3BlZWQ6IHsgdmFsdWU6IHJvdGF0aW9uU3BlZWQgfSwKCQkJdUNhbWVyYURpc3RhbmNlOiB7IHZhbHVlOiBjYW1lcmFEaXN0YW5jZSB9LAoJCQl1Rm92OiB7IHZhbHVlOiBmb3YgfSwKCQkJdVN1bkRpcjogeyB2YWx1ZTogaW5pdGlhbFN1biB9LAoJCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBpbnRlbnNpdHkgfSwKCQl9OwoKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgeyBnZW9tZXRyeSwgcHJvZ3JhbSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnNldCh3aWR0aCwgaGVpZ2h0KTsKCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgKz0gZGVsdGE7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/image-trail/ImageTrail.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFRyYWlsQ29uZmlnIHsKCQkvKioKCQkgKiBUaW1lIGluIG1zIGJlZm9yZSBhbiBpbWFnZSBpcyByZW1vdmVkLgoJCSAqIEBkZWZhdWx0IDYwMAoJCSAqLwoJCWltYWdlTGlmZXNwYW4/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZXJ2YWwgaW4gbXMgZm9yIGNoZWNraW5nIGFuZCByZW1vdmluZyBleHBpcmVkIGltYWdlcy4KCQkgKiBAZGVmYXVsdCAxNgoJCSAqLwoJCXJlbW92YWxUaWNrTXM/OiBudW1iZXI7CgkJLyoqCgkJICogTWluaW11bSBkaXN0YW5jZSBpbiBwaXhlbHMgdGhlIG1vdXNlIG11c3QgbW92ZSB0byBzcGF3biBhIG5ldyBpbWFnZS4KCQkgKiBAZGVmYXVsdCA0MAoJCSAqLwoJCW1vdXNlVGhyZXNob2xkPzogbnVtYmVyOwoJCS8qKgoJCSAqIE1pbmltdW0gbW92ZW1lbnQgcmVxdWlyZWQgdG8gYmUgY29uc2lkZXJlZCBhY3RpdmUuCgkJICogQGRlZmF1bHQgNQoJCSAqLwoJCW1pbk1vdmVtZW50Rm9ySW1hZ2U/OiBudW1iZXI7CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIGZhZGUtaW4gYW5pbWF0aW9uIGluIG1zLgoJCSAqIEBkZWZhdWx0IDYwMAoJCSAqLwoJCWluRHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIGZhZGUtb3V0IGFuaW1hdGlvbiBpbiBtcy4KCQkgKiBAZGVmYXVsdCA4MDAKCQkgKi8KCQlvdXREdXJhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBGYWN0b3IgdG8gaW5jcmVhc2Ugcm90YXRpb24gYmFzZWQgb24gc3BlZWQuCgkJICogQGRlZmF1bHQgMwoJCSAqLwoJCW1heFJvdGF0aW9uRmFjdG9yPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2Ugcm90YXRpb24gYW5nbGUgaW4gZGVncmVlcy4KCQkgKiBAZGVmYXVsdCAzMAoJCSAqLwoJCWJhc2VSb3RhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBTbW9vdGhpbmcgZmFjdG9yIGZvciBzcGVlZCBjYWxjdWxhdGlvbiAoMC0xKS4KCQkgKiBAZGVmYXVsdCAwLjI1CgkJICovCgkJc3BlZWRTbW9vdGhpbmdGYWN0b3I/OiBudW1iZXI7CgkJLyoqCgkJICogTWluaW11bSBzaXplIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuCgkJICogQGRlZmF1bHQgMjYwCgkJICovCgkJbWluSW1hZ2VTaXplPzogbnVtYmVyOwoJCS8qKgoJCSAqIE1heGltdW0gc2l6ZSBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLgoJCSAqIEBkZWZhdWx0IDM0MAoJCSAqLwoJCW1heEltYWdlU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBTdGFnZ2VyIGRlbGF5IGZvciByZW1vdmluZyBpbWFnZXMgaW4gbXMuCgkJICogQGRlZmF1bHQgNDAKCQkgKi8KCQlzdGFnZ2VyT3V0PzogbnVtYmVyOwoJfQoKCWNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXF1aXJlZDxUcmFpbENvbmZpZz4gPSB7CgkJaW1hZ2VMaWZlc3BhbjogNjAwLAoJCXJlbW92YWxUaWNrTXM6IDE2LAoJCW1vdXNlVGhyZXNob2xkOiA0MCwKCQltaW5Nb3ZlbWVudEZvckltYWdlOiA1LAoJCWluRHVyYXRpb246IDYwMCwKCQlvdXREdXJhdGlvbjogODAwLAoJCW1heFJvdGF0aW9uRmFjdG9yOiAzLAoJCWJhc2VSb3RhdGlvbjogMzAsCgkJc3BlZWRTbW9vdGhpbmdGYWN0b3I6IDAuMjUsCgkJbWluSW1hZ2VTaXplOiAyNjAsCgkJbWF4SW1hZ2VTaXplOiAzNDAsCgkJc3RhZ2dlck91dDogNDAsCgl9OwoKCWNvbnN0IFBPT0xfQ0FQID0gMjQ7CgoJaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZSBzb3VyY2VzIHRvIHVzZSBmb3IgdGhlIHRyYWlsLgoJCSAqLwoJCWltYWdlczogc3RyaW5nW107CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0cmFpbCBlZmZlY3QuCgkJICovCgkJY29uZmlnPzogVHJhaWxDb25maWc7CgkJW3Byb3A6IHN0cmluZ106IHVua25vd247Cgl9CgoJY29uc3QgcHJvcHM6IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7Cgljb25zdCBjbGFzc05hbWUgPSAkZGVyaXZlZChwcm9wcy5jbGFzcyA/PyAiIik7Cgljb25zdCBpbWFnZXMgPSAkZGVyaXZlZChwcm9wcy5pbWFnZXMgPz8gW10pOwoJY29uc3QgY2ZnID0gJGRlcml2ZWQ8UmVxdWlyZWQ8VHJhaWxDb25maWc+Pih7CgkJLi4uREVGQVVMVF9DT05GSUcsCgkJLi4uKHByb3BzLmNvbmZpZyA/PyB7fSksCgl9KTsKCWNvbnN0IHJlc3RQcm9wcyA9ICRkZXJpdmVkKCgpID0+IHsKCQljb25zdCB7IGNsYXNzOiBfY2xhc3MsIGltYWdlczogX2ltYWdlcywgY29uZmlnOiBfY29uZmlnLCAuLi5yZXN0IH0gPSBwcm9wczsKCQlyZXR1cm4gcmVzdDsKCX0pOwoKCWxldCBjb250YWluZXJSZWY6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7CgoJY29uc3QgYXR0YWNoQ29udGFpbmVyUmVmID0gKG5vZGU6IEhUTUxEaXZFbGVtZW50KSA9PiB7CgkJY29udGFpbmVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoY29udGFpbmVyUmVmID09PSBub2RlKSB7CgkJCQljb250YWluZXJSZWYgPSBudWxsOwoJCQl9CgkJfTsKCX07CgoJdHlwZSBUcmFpbEl0ZW0gPSB7CgkJZWw6IEhUTUxJbWFnZUVsZW1lbnQ7CgkJcm90YXRpb246IG51bWJlcjsKCQlyZW1vdmVBdDogbnVtYmVyOwoJfTsKCgljb25zdCBzdGF0ZSA9IHsKCQlpbWFnZUluZGV4OiAwLAoJCWlzUG9pbnRlckluOiBmYWxzZSwKCQlpc01vdmluZzogZmFsc2UsCgkJbGFzdE1vdXNlWDogMCwKCQlsYXN0TW91c2VZOiAwLAoJCW1vdXNlWDogMCwKCQltb3VzZVk6IDAsCgkJcHJldk1vdXNlWDogMCwKCQlwcmV2TW91c2VZOiAwLAoJCWxhc3RNb3ZlVGltZTogRGF0ZS5ub3coKSwKCQlsYXN0UmVtb3ZhbFRpbWU6IDAsCgkJc21vb3RoZWRTcGVlZDogMCwKCQltYXhTcGVlZDogMC41LAoJCXJhZjogMCwKCX07CgoJY29uc3QgdHJhaWw6IFRyYWlsSXRlbVtdID0gW107Cgljb25zdCBwb29sOiBIVE1MSW1hZ2VFbGVtZW50W10gPSBbXTsKCgljb25zdCBnZXROZXh0SW1hZ2VTcmMgPSAoKSA9PiB7CgkJaWYgKCFpbWFnZXMubGVuZ3RoKSByZXR1cm4gIiI7CgkJY29uc3QgaWR4ID0gc3RhdGUuaW1hZ2VJbmRleCAlIGltYWdlcy5sZW5ndGg7CgkJc3RhdGUuaW1hZ2VJbmRleCA9IChzdGF0ZS5pbWFnZUluZGV4ICsgMSkgJSBpbWFnZXMubGVuZ3RoOwoJCXJldHVybiBpbWFnZXNbaWR4XSA/PyAiIjsKCX07CgoJY29uc3QgaGFzTW92ZWRFbm91Z2ggPSAoKSA9PiB7CgkJY29uc3QgZHggPSBzdGF0ZS5tb3VzZVggLSBzdGF0ZS5sYXN0TW91c2VYOwoJCWNvbnN0IGR5ID0gc3RhdGUubW91c2VZIC0gc3RhdGUubGFzdE1vdXNlWTsKCQlyZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpID4gY2ZnLm1vdXNlVGhyZXNob2xkOwoJfTsKCgljb25zdCBoYXNNb3ZlZEF0QWxsID0gKCkgPT4gewoJCWNvbnN0IGR4ID0gc3RhdGUubW91c2VYIC0gc3RhdGUucHJldk1vdXNlWDsKCQljb25zdCBkeSA9IHN0YXRlLm1vdXNlWSAtIHN0YXRlLnByZXZNb3VzZVk7CgkJcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KSA+IGNmZy5taW5Nb3ZlbWVudEZvckltYWdlOwoJfTsKCgljb25zdCBjYWxjU3BlZWQgPSAoKSA9PiB7CgkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQljb25zdCBkdCA9IG5vdyAtIHN0YXRlLmxhc3RNb3ZlVGltZTsKCQlpZiAoZHQgPD0gMCkgcmV0dXJuIHN0YXRlLnNtb290aGVkU3BlZWQ7CgoJCWNvbnN0IGRpc3QgPSBNYXRoLmh5cG90KAoJCQlzdGF0ZS5tb3VzZVggLSBzdGF0ZS5wcmV2TW91c2VYLAoJCQlzdGF0ZS5tb3VzZVkgLSBzdGF0ZS5wcmV2TW91c2VZLAoJCSk7CgkJY29uc3QgcmF3ID0gZGlzdCAvIGR0OwoKCQlpZiAocmF3ID4gc3RhdGUubWF4U3BlZWQpIHN0YXRlLm1heFNwZWVkID0gcmF3OwoKCQljb25zdCBub3JtID0gTWF0aC5taW4ocmF3IC8gKHN0YXRlLm1heFNwZWVkIHx8IDAuNSksIDEpOwoJCXN0YXRlLnNtb290aGVkU3BlZWQgPQoJCQlzdGF0ZS5zbW9vdGhlZFNwZWVkICogKDEgLSBjZmcuc3BlZWRTbW9vdGhpbmdGYWN0b3IpICsKCQkJbm9ybSAqIGNmZy5zcGVlZFNtb290aGluZ0ZhY3RvcjsKCQlzdGF0ZS5sYXN0TW92ZVRpbWUgPSBub3c7CgoJCXJldHVybiBzdGF0ZS5zbW9vdGhlZFNwZWVkOwoJfTsKCgljb25zdCBnZXRQb29sZWRJbWFnZSA9ICgpID0+IHsKCQljb25zdCBlbCA9IHBvb2wucG9wKCk7CgkJaWYgKGVsKSByZXR1cm4gZWw7CgoJCWNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwoJCWltZy5jbGFzc05hbWUgPQoJCQkicG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSBhYnNvbHV0ZSB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iOwoJCWltZy5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAiNTAlIDUwJSI7CgkJaW1nLmRyYWdnYWJsZSA9IGZhbHNlOwoJCXJldHVybiBpbWc7Cgl9OwoKCWNvbnN0IHJlY3ljbGVJbWFnZSA9IChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHsKCQlnc2FwLmtpbGxUd2VlbnNPZihpbWcpOwoJCWltZy5yZW1vdmUoKTsKCQlpbWcucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwoJCWltZy5jbGFzc05hbWUgPQoJCQkicG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSBhYnNvbHV0ZSB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iOwoJCWlmIChwb29sLmxlbmd0aCA8IFBPT0xfQ0FQKSBwb29sLnB1c2goaW1nKTsKCX07CgoJY29uc3QgaXNJbnNpZGVDb250YWluZXIgPSAoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpID0+IHsKCQljb25zdCBub2RlID0gY29udGFpbmVyUmVmOwoJCWlmICghbm9kZSkgcmV0dXJuIGZhbHNlOwoJCWNvbnN0IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCXJldHVybiAoCgkJCWNsaWVudFggPj0gcmVjdC5sZWZ0ICYmCgkJCWNsaWVudFggPD0gcmVjdC5yaWdodCAmJgoJCQljbGllbnRZID49IHJlY3QudG9wICYmCgkJCWNsaWVudFkgPD0gcmVjdC5ib3R0b20KCQkpOwoJfTsKCgljb25zdCBzcGF3blRyYWlsID0gKHNwZWVkID0gMC41KSA9PiB7CgkJY29uc3Qgbm9kZSA9IGNvbnRhaW5lclJlZjsKCQlpZiAoIW5vZGUgfHwgIWltYWdlcy5sZW5ndGgpIHJldHVybjsKCgkJY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJY29uc3QgeCA9IHN0YXRlLm1vdXNlWCAtIHJlY3QubGVmdDsKCQljb25zdCB5ID0gc3RhdGUubW91c2VZIC0gcmVjdC50b3A7CgoJCWNvbnN0IHNpemUgPSBNYXRoLnJvdW5kKAoJCQljZmcubWluSW1hZ2VTaXplICsgKGNmZy5tYXhJbWFnZVNpemUgLSBjZmcubWluSW1hZ2VTaXplKSAqIHNwZWVkLAoJCSk7CgkJY29uc3Qgcm90RmFjdG9yID0gMSArIHNwZWVkICogKGNmZy5tYXhSb3RhdGlvbkZhY3RvciAtIDEpOwoJCWNvbnN0IHJvdCA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIGNmZy5iYXNlUm90YXRpb24gKiByb3RGYWN0b3I7CgoJCWNvbnN0IGltZyA9IGdldFBvb2xlZEltYWdlKCk7CgkJaW1nLnNyYyA9IGdldE5leHRJbWFnZVNyYygpOwoJCWltZy53aWR0aCA9IHNpemU7CgkJaW1nLmhlaWdodCA9IHNpemU7CgoJCWltZy5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7CgkJaW1nLnN0eWxlLnRvcCA9IGAke3l9cHhgOwoJCWltZy5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDApIjsKCgkJbm9kZS5hcHBlbmRDaGlsZChpbWcpOwoKCQlnc2FwLnNldChpbWcsIHsgcm90YXRpb246IHJvdCB9KTsKCQlnc2FwLnRvKGltZywgewoJCQlzY2FsZTogMSwKCQkJZHVyYXRpb246IGNmZy5pbkR1cmF0aW9uIC8gMTAwMCwKCQkJZWFzZTogInBvd2VyMi5vdXQiLAoJCX0pOwoKCQl0cmFpbC5wdXNoKHsKCQkJZWw6IGltZywKCQkJcm90YXRpb246IHJvdCwKCQkJcmVtb3ZlQXQ6IERhdGUubm93KCkgKyBjZmcuaW1hZ2VMaWZlc3BhbiwKCQl9KTsKCX07CgoJY29uc3QgdHJ5RW1pdCA9ICgpID0+IHsKCQlpZiAoIXN0YXRlLmlzUG9pbnRlckluKSByZXR1cm47CgkJaWYgKGhhc01vdmVkRW5vdWdoKCkgJiYgaGFzTW92ZWRBdEFsbCgpKSB7CgkJCXN0YXRlLmxhc3RNb3VzZVggPSBzdGF0ZS5tb3VzZVg7CgkJCXN0YXRlLmxhc3RNb3VzZVkgPSBzdGF0ZS5tb3VzZVk7CgkJCWNvbnN0IHNwZWVkID0gY2FsY1NwZWVkKCk7CgkJCXNwYXduVHJhaWwoc3BlZWQpOwoJCQlzdGF0ZS5wcmV2TW91c2VYID0gc3RhdGUubW91c2VYOwoJCQlzdGF0ZS5wcmV2TW91c2VZID0gc3RhdGUubW91c2VZOwoJCX0KCX07CgoJY29uc3QgY3VsbE9sZCA9ICgpID0+IHsKCQljb25zdCBub3cgPSBEYXRlLm5vdygpOwoJCWlmIChub3cgLSBzdGF0ZS5sYXN0UmVtb3ZhbFRpbWUgPCBjZmcucmVtb3ZhbFRpY2tNcykgcmV0dXJuOwoJCWlmICghdHJhaWwubGVuZ3RoKSByZXR1cm47CgoJCWNvbnN0IGV4cGlyZWQgPSB0cmFpbC5maWx0ZXIoKGl0ZW0pID0+IG5vdyA+PSBpdGVtLnJlbW92ZUF0KTsKCQlpZiAoIWV4cGlyZWQubGVuZ3RoKSByZXR1cm47CgoJCWV4cGlyZWQuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHsKCQkJY29uc3QgeyBlbCB9ID0gaXRlbTsKCQkJZ3NhcC50byhlbCwgewoJCQkJZHVyYXRpb246IGNmZy5vdXREdXJhdGlvbiAvIDEwMDAsCgkJCQlzY2FsZTogMCwKCQkJCWVhc2U6ICJwb3dlcjQuaW5PdXQiLAoJCQkJZGVsYXk6IChpbmRleCAqIGNmZy5zdGFnZ2VyT3V0KSAvIDEwMDAsCgkJCQlvbkNvbXBsZXRlOiAoKSA9PiByZWN5Y2xlSW1hZ2UoZWwpLAoJCQl9KTsKCQl9KTsKCgkJZm9yIChsZXQgaSA9IHRyYWlsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7CgkJCWlmIChub3cgPj0gdHJhaWxbaV0ucmVtb3ZlQXQpIHsKCQkJCXRyYWlsLnNwbGljZShpLCAxKTsKCQkJfQoJCX0KCgkJc3RhdGUubGFzdFJlbW92YWxUaW1lID0gbm93OwoJfTsKCgljb25zdCB0aWNrID0gKCkgPT4gewoJCWlmIChzdGF0ZS5pc01vdmluZykgdHJ5RW1pdCgpOwoJCWN1bGxPbGQoKTsKCQlzdGF0ZS5yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7Cgl9OwoKCWNvbnN0IHJlc2V0VHJhaWwgPSAoKSA9PiB7CgkJdHJhaWwuZm9yRWFjaCgoeyBlbCB9KSA9PiB7CgkJCWdzYXAua2lsbFR3ZWVuc09mKGVsKTsKCQkJZWwucmVtb3ZlKCk7CgkJfSk7CgkJdHJhaWwubGVuZ3RoID0gMDsKCX07CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm47CgoJCWNvbnN0IG5vZGUgPSBjb250YWluZXJSZWY7CgkJaWYgKCFub2RlIHx8ICFpbWFnZXMubGVuZ3RoKSByZXR1cm47CgoJCWxldCBwb2ludGVySWRsZVRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsOwoKCQljb25zdCBvblBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHsKCQkJc3RhdGUucHJldk1vdXNlWCA9IHN0YXRlLm1vdXNlWDsKCQkJc3RhdGUucHJldk1vdXNlWSA9IHN0YXRlLm1vdXNlWTsKCQkJc3RhdGUubW91c2VYID0gZXZlbnQuY2xpZW50WDsKCQkJc3RhdGUubW91c2VZID0gZXZlbnQuY2xpZW50WTsKCQkJc3RhdGUuaXNQb2ludGVySW4gPSBpc0luc2lkZUNvbnRhaW5lcihldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTsKCgkJCWlmIChzdGF0ZS5pc1BvaW50ZXJJbikgewoJCQkJc3RhdGUuaXNNb3ZpbmcgPSB0cnVlOwoJCQkJaWYgKHBvaW50ZXJJZGxlVGltZW91dCkgd2luZG93LmNsZWFyVGltZW91dChwb2ludGVySWRsZVRpbWVvdXQpOwoJCQkJcG9pbnRlcklkbGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewoJCQkJCXN0YXRlLmlzTW92aW5nID0gZmFsc2U7CgkJCQkJcG9pbnRlcklkbGVUaW1lb3V0ID0gbnVsbDsKCQkJCX0sIDEwMCk7CgkJCX0KCQl9OwoKCQljb25zdCBvblBvaW50ZXJFbnRlciA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7CgkJCXN0YXRlLmlzUG9pbnRlckluID0gdHJ1ZTsKCQkJc3RhdGUuaXNNb3ZpbmcgPSBmYWxzZTsKCQkJc3RhdGUubW91c2VYID0gZXZlbnQuY2xpZW50WDsKCQkJc3RhdGUubW91c2VZID0gZXZlbnQuY2xpZW50WTsKCQkJc3RhdGUubGFzdE1vdXNlWCA9IGV2ZW50LmNsaWVudFg7CgkJCXN0YXRlLmxhc3RNb3VzZVkgPSBldmVudC5jbGllbnRZOwoJCQlzdGF0ZS5wcmV2TW91c2VYID0gZXZlbnQuY2xpZW50WDsKCQkJc3RhdGUucHJldk1vdXNlWSA9IGV2ZW50LmNsaWVudFk7CgkJCXN0YXRlLmxhc3RNb3ZlVGltZSA9IERhdGUubm93KCk7CgkJfTsKCgkJY29uc3Qgb25Qb2ludGVyTGVhdmUgPSAoKSA9PiB7CgkJCXN0YXRlLmlzUG9pbnRlckluID0gZmFsc2U7CgkJCXN0YXRlLmlzTW92aW5nID0gZmFsc2U7CgkJfTsKCgkJY29uc3Qgb25Ub3VjaE1vdmUgPSAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHsKCQkJaWYgKCFldmVudC50b3VjaGVzLmxlbmd0aCkgcmV0dXJuOwoJCQljb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07CgkJCWNvbnN0IGR4ID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHN0YXRlLnByZXZNb3VzZVgpOwoJCQljb25zdCBkeSA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSBzdGF0ZS5wcmV2TW91c2VZKTsKCQkJaWYgKGR5ID4gZHgpIHJldHVybjsKCgkJCXN0YXRlLnByZXZNb3VzZVggPSBzdGF0ZS5tb3VzZVg7CgkJCXN0YXRlLnByZXZNb3VzZVkgPSBzdGF0ZS5tb3VzZVk7CgkJCXN0YXRlLm1vdXNlWCA9IHRvdWNoLmNsaWVudFg7CgkJCXN0YXRlLm1vdXNlWSA9IHRvdWNoLmNsaWVudFk7CgkJCXN0YXRlLmlzUG9pbnRlckluID0gaXNJbnNpZGVDb250YWluZXIodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7CgkJCWlmIChzdGF0ZS5pc1BvaW50ZXJJbikgewoJCQkJc3RhdGUuaXNNb3ZpbmcgPSB0cnVlOwoJCQl9CgkJfTsKCgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIG9uUG9pbnRlck1vdmUsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKCQlub2RlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsIG9uUG9pbnRlckVudGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7CgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBvblBvaW50ZXJMZWF2ZSwgeyBwYXNzaXZlOiB0cnVlIH0pOwoJCW5vZGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgb25Ub3VjaE1vdmUsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKCgkJc3RhdGUucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAocG9pbnRlcklkbGVUaW1lb3V0KSB3aW5kb3cuY2xlYXJUaW1lb3V0KHBvaW50ZXJJZGxlVGltZW91dCk7CgkJCWNhbmNlbEFuaW1hdGlvbkZyYW1lKHN0YXRlLnJhZik7CgkJCW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBvblBvaW50ZXJNb3ZlKTsKCQkJbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLCBvblBvaW50ZXJFbnRlcik7CgkJCW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgb25Qb2ludGVyTGVhdmUpOwoJCQlub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIG9uVG91Y2hNb3ZlKTsKCQkJcmVzZXRUcmFpbCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8ZGl2Cgl7Li4ucmVzdFByb3BzfQoJY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiIsIGNsYXNzTmFtZSl9Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJSZWZ9Cj48L2Rpdj4K", "components/infinite-gallery/InfiniteGallery.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgR2FsbGVyeVNjZW5lIGZyb20gIi4vSW5maW5pdGVHYWxsZXJ5U2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIEdhbGxlcnlTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZXMgdG8gZGlzcGxheS4gQ2FuIGJlIHN0cmluZ3MgKFVSTCkgb3Igb2JqZWN0cyB3aXRoIHNyYyBhbmQgYWx0LgoJCSAqLwoJCWltYWdlczogU2NlbmVQcm9wc1siaW1hZ2VzIl07CgkJLyoqCgkJICogU2Nyb2xsIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNwZWVkPzogU2NlbmVQcm9wc1sic3BlZWQiXTsKCQkvKioKCQkgKiBOdW1iZXIgb2YgaW1hZ2VzIHZpc2libGUgaW4gdGhlIHR1bm5lbCBhdCBvbmNlLgoJCSAqIEBkZWZhdWx0IDgKCQkgKi8KCQl2aXNpYmxlQ291bnQ/OiBTY2VuZVByb3BzWyJ2aXNpYmxlQ291bnQiXTsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIGZvciBmYWRlIGluL291dCBlZmZlY3RzIGJhc2VkIG9uIGRlcHRoLgoJCSAqLwoJCWZhZGVTZXR0aW5ncz86IFNjZW5lUHJvcHNbImZhZGVTZXR0aW5ncyJdOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIGJsdXIgaW4vb3V0IGVmZmVjdHMgYmFzZWQgb24gZGVwdGguCgkJICovCgkJYmx1clNldHRpbmdzPzogU2NlbmVQcm9wc1siYmx1clNldHRpbmdzIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCXNwZWVkID0gMSwKCQl2aXNpYmxlQ291bnQgPSA4LAoJCWZhZGVTZXR0aW5ncyA9IHsKCQkJZmFkZUluOiB7IHN0YXJ0OiAwLjAxLCBlbmQ6IDAuMjUgfSwKCQkJZmFkZU91dDogeyBzdGFydDogMC40MywgZW5kOiAwLjQ2IH0sCgkJfSwKCQlibHVyU2V0dGluZ3MgPSB7CgkJCWJsdXJJbjogeyBzdGFydDogMC4wLCBlbmQ6IDAuMiB9LAoJCQlibHVyT3V0OiB7IHN0YXJ0OiAwLjQzLCBlbmQ6IDAuNDYgfSwKCQkJbWF4Qmx1cjogOC4wLAoJCX0sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxHYWxsZXJ5U2NlbmUKCQkJe2ltYWdlc30KCQkJe3NwZWVkfQoJCQl7dmlzaWJsZUNvdW50fQoJCQl7ZmFkZVNldHRpbmdzfQoJCQl7Ymx1clNldHRpbmdzfQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", "components/infinite-gallery/InfiniteGalleryScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUGxhbmUsCgkJUHJvZ3JhbSwKCQlSYXljYXN0LAoJCVJlbmRlcmVyLAoJCVRleHR1cmUsCgkJVHJhbnNmb3JtLAoJCVZlYzIsCgl9IGZyb20gIm9nbCI7CgoJdHlwZSBJbWFnZUl0ZW0gPSBzdHJpbmcgfCB7IHNyYzogc3RyaW5nOyBhbHQ/OiBzdHJpbmcgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFycmF5IG9mIGltYWdlcyB0byBkaXNwbGF5LiBDYW4gYmUgc3RyaW5ncyAoVVJMKSBvciBvYmplY3RzIHdpdGggc3JjIGFuZCBhbHQuCgkJICovCgkJaW1hZ2VzOiBJbWFnZUl0ZW1bXTsKCQkvKioKCQkgKiBTY3JvbGwgc3BlZWQgbXVsdGlwbGllci4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogTnVtYmVyIG9mIGltYWdlcyB2aXNpYmxlIGluIHRoZSB0dW5uZWwgYXQgb25jZS4KCQkgKiBAZGVmYXVsdCA4CgkJICovCgkJdmlzaWJsZUNvdW50PzogbnVtYmVyOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIGZhZGUgaW4vb3V0IGVmZmVjdHMgYmFzZWQgb24gZGVwdGguCgkJICovCgkJZmFkZVNldHRpbmdzPzogewoJCQlmYWRlSW46IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfTsKCQkJZmFkZU91dDogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OwoJCX07CgkJLyoqCgkJICogQ29uZmlndXJhdGlvbiBmb3IgYmx1ciBpbi9vdXQgZWZmZWN0cyBiYXNlZCBvbiBkZXB0aC4KCQkgKi8KCQlibHVyU2V0dGluZ3M/OiB7CgkJCWJsdXJJbjogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OwoJCQlibHVyT3V0OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07CgkJCW1heEJsdXI6IG51bWJlcjsKCQl9OwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCXNwZWVkID0gMSwKCQl2aXNpYmxlQ291bnQgPSA4LAoJCWZhZGVTZXR0aW5ncyA9IHsKCQkJZmFkZUluOiB7IHN0YXJ0OiAwLjA1LCBlbmQ6IDAuMTUgfSwKCQkJZmFkZU91dDogeyBzdGFydDogMC44NSwgZW5kOiAwLjk1IH0sCgkJfSwKCQlibHVyU2V0dGluZ3MgPSB7CgkJCWJsdXJJbjogeyBzdGFydDogMC4wLCBlbmQ6IDAuMSB9LAoJCQlibHVyT3V0OiB7IHN0YXJ0OiAwLjksIGVuZDogMS4wIH0sCgkJCW1heEJsdXI6IDMuMCwKCQl9LAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIE5vcm1hbGl6ZWRJbWFnZSA9IHsgc3JjOiBzdHJpbmc7IGFsdD86IHN0cmluZyB9OwoKCXR5cGUgUGxhbmVEYXRhID0gewoJCWluZGV4OiBudW1iZXI7CgkJejogbnVtYmVyOwoJCWltYWdlSW5kZXg6IG51bWJlcjsKCQl4OiBudW1iZXI7CgkJeTogbnVtYmVyOwoJfTsKCgl0eXBlIFBsYW5lVW5pZm9ybXMgPSB7CgkJbWFwOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJb3BhY2l0eTogeyB2YWx1ZTogbnVtYmVyIH07CgkJYmx1ckFtb3VudDogeyB2YWx1ZTogbnVtYmVyIH07CgkJc2Nyb2xsRm9yY2U6IHsgdmFsdWU6IG51bWJlciB9OwoJCXRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCWlzSG92ZXJlZDogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07Cgl9OwoKCXR5cGUgUGxhbmVSdW50aW1lID0gewoJCW1lc2g6IE1lc2g7CgkJcHJvZ3JhbTogUHJvZ3JhbTsKCQl1bmlmb3JtczogUGxhbmVVbmlmb3JtczsKCX07CgoJY29uc3QgREVGQVVMVF9ERVBUSF9SQU5HRSA9IDUwOwoJY29uc3QgTUFYX0hPUklaT05UQUxfT0ZGU0VUID0gODsKCWNvbnN0IE1BWF9WRVJUSUNBTF9PRkZTRVQgPSA4OwoKCWNvbnN0IG5vcm1hbGl6ZUltYWdlcyA9IChpdGVtczogSW1hZ2VJdGVtW10pOiBOb3JtYWxpemVkSW1hZ2VbXSA9PgoJCWl0ZW1zLm1hcCgoaW1nKSA9PiAodHlwZW9mIGltZyA9PT0gInN0cmluZyIgPyB7IHNyYzogaW1nLCBhbHQ6ICIiIH0gOiBpbWcpKTsKCgljb25zdCBtYWtlU3BhdGlhbFBvc2l0aW9ucyA9IChjb3VudDogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10gPT4gewoJCWNvbnN0IHBvc2l0aW9uczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10gPSBbXTsKCgkJZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CgkJCWNvbnN0IGhvcml6b250YWxBbmdsZSA9IChpICogMi42MTgpICUgKE1hdGguUEkgKiAyKTsKCQkJY29uc3QgdmVydGljYWxBbmdsZSA9IChpICogMS42MTggKyBNYXRoLlBJIC8gMykgJSAoTWF0aC5QSSAqIDIpOwoKCQkJY29uc3QgaG9yaXpvbnRhbFJhZGl1cyA9IChpICUgMykgKiAxLjI7CgkJCWNvbnN0IHZlcnRpY2FsUmFkaXVzID0gKChpICsgMSkgJSA0KSAqIDAuODsKCgkJCWNvbnN0IHggPQoJCQkJKE1hdGguc2luKGhvcml6b250YWxBbmdsZSkgKiBob3Jpem9udGFsUmFkaXVzICogTUFYX0hPUklaT05UQUxfT0ZGU0VUKSAvCgkJCQkzOwoJCQljb25zdCB5ID0KCQkJCShNYXRoLmNvcyh2ZXJ0aWNhbEFuZ2xlKSAqIHZlcnRpY2FsUmFkaXVzICogTUFYX1ZFUlRJQ0FMX09GRlNFVCkgLyA0OwoKCQkJcG9zaXRpb25zLnB1c2goeyB4LCB5IH0pOwoJCX0KCgkJcmV0dXJuIHBvc2l0aW9uczsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOwoJCWF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCgkJdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsKCQl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCQl1bmlmb3JtIGZsb2F0IHNjcm9sbEZvcmNlOwoJCXVuaWZvcm0gZmxvYXQgdGltZTsKCQl1bmlmb3JtIGZsb2F0IGlzSG92ZXJlZDsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJdk5vcm1hbCA9IG5vcm1hbDsKCgkJCXZlYzMgcG9zID0gcG9zaXRpb247CgoJCQlmbG9hdCBjdXJ2ZUludGVuc2l0eSA9IHNjcm9sbEZvcmNlICogMC4zOwoJCQlmbG9hdCBkaXN0YW5jZUZyb21DZW50ZXIgPSBsZW5ndGgocG9zLnh5KTsKCQkJZmxvYXQgY3VydmUgPSBkaXN0YW5jZUZyb21DZW50ZXIgKiBkaXN0YW5jZUZyb21DZW50ZXIgKiBjdXJ2ZUludGVuc2l0eTsKCgkJCWZsb2F0IHJpcHBsZTEgPSBzaW4ocG9zLnggKiAyLjAgKyBzY3JvbGxGb3JjZSAqIDMuMCkgKiAwLjAyOwoJCQlmbG9hdCByaXBwbGUyID0gc2luKHBvcy55ICogMi41ICsgc2Nyb2xsRm9yY2UgKiAyLjApICogMC4wMTU7CgkJCWZsb2F0IGNsb3RoRWZmZWN0ID0gKHJpcHBsZTEgKyByaXBwbGUyKSAqIGFicyhjdXJ2ZUludGVuc2l0eSkgKiAyLjA7CgoJCQlmbG9hdCBmbGFnV2F2ZSA9IDAuMDsKCQkJaWYgKGlzSG92ZXJlZCA+IDAuNSkgewoJCQkJZmxvYXQgd2F2ZVBoYXNlID0gcG9zLnggKiAzLjAgKyB0aW1lICogOC4wOwoJCQkJZmxvYXQgd2F2ZUFtcGxpdHVkZSA9IHNpbih3YXZlUGhhc2UpICogMC4xOwoJCQkJZmxvYXQgZGFtcGVuaW5nID0gc21vb3Roc3RlcCgtMC41LCAwLjUsIHBvcy54KTsKCQkJCWZsYWdXYXZlID0gd2F2ZUFtcGxpdHVkZSAqIGRhbXBlbmluZzsKCgkJCQlmbG9hdCBzZWNvbmRhcnlXYXZlID0gc2luKHBvcy54ICogNS4wICsgdGltZSAqIDEyLjApICogMC4wMyAqIGRhbXBlbmluZzsKCQkJCWZsYWdXYXZlICs9IHNlY29uZGFyeVdhdmU7CgkJCX0KCgkJCXBvcy56IC09IChjdXJ2ZSArIGNsb3RoRWZmZWN0ICsgZmxhZ1dhdmUpOwoKCQkJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3MsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKCQl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CgkJdW5pZm9ybSBmbG9hdCBibHVyQW1vdW50OwoJCXVuaWZvcm0gZmxvYXQgc2Nyb2xsRm9yY2U7CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKG1hcCwgdlV2KTsKCgkJCWlmIChibHVyQW1vdW50ID4gMC4wKSB7CgkJCQl2ZWMyIHRleGVsU2l6ZSA9IDEuMCAvIG1heCh1VGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7CgkJCQl2ZWM0IGJsdXJyZWQgPSB2ZWM0KDAuMCk7CgkJCQlmbG9hdCB0b3RhbCA9IDAuMDsKCgkJCQlmb3IgKGZsb2F0IHggPSAtMi4wOyB4IDw9IDIuMDsgeCArPSAxLjApIHsKCQkJCQlmb3IgKGZsb2F0IHkgPSAtMi4wOyB5IDw9IDIuMDsgeSArPSAxLjApIHsKCQkJCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKHgsIHkpICogdGV4ZWxTaXplICogYmx1ckFtb3VudDsKCQkJCQkJZmxvYXQgd2VpZ2h0ID0gMS4wIC8gKDEuMCArIGxlbmd0aCh2ZWMyKHgsIHkpKSk7CgkJCQkJCWJsdXJyZWQgKz0gdGV4dHVyZTJEKG1hcCwgdlV2ICsgb2Zmc2V0KSAqIHdlaWdodDsKCQkJCQkJdG90YWwgKz0gd2VpZ2h0OwoJCQkJCX0KCQkJCX0KCQkJCWNvbG9yID0gYmx1cnJlZCAvIHRvdGFsOwoJCQl9CgoJCQlmbG9hdCBjdXJ2ZUhpZ2hsaWdodCA9IGFicyhzY3JvbGxGb3JjZSkgKiAwLjA1OwoJCQljb2xvci5yZ2IgKz0gdmVjMyhjdXJ2ZUhpZ2hsaWdodCAqIDAuMSk7CgoJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgY29sb3IuYSAqIG9wYWNpdHkpOwoJCX0KCWA7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXRJbWFnZUl0ZW1zID0gJHN0YXRlPChpdGVtczogSW1hZ2VJdGVtW10pID0+IHZvaWQ+KCk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFzZXRJbWFnZUl0ZW1zKSByZXR1cm47CgkJc2V0SW1hZ2VJdGVtcyhpbWFnZXMpOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih2aXNpYmxlQ291bnQpKTsKCQljb25zdCBkZXB0aFJhbmdlID0gREVGQVVMVF9ERVBUSF9SQU5HRTsKCQljb25zdCB0b3RhbFJhbmdlID0gZGVwdGhSYW5nZTsKCQljb25zdCBzcGF0aWFsUG9zaXRpb25zID0gbWFrZVNwYXRpYWxQb3NpdGlvbnMoY291bnQpOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJYW50aWFsaWFzOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCwgewoJCQlmb3Y6IDU1LAoJCQlhc3BlY3Q6IDEsCgkJCW5lYXI6IDAuMSwKCQkJZmFyOiAxMDAsCgkJfSk7CgkJY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgUGxhbmUoZ2wsIHsKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJd2lkdGhTZWdtZW50czogMzIsCgkJCWhlaWdodFNlZ21lbnRzOiAzMiwKCQl9KTsKCgkJY29uc3QgZmFsbGJhY2tUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5NSVJST1JFRF9SRVBFQVQsCgkJCXdyYXBUOiBnbC5NSVJST1JFRF9SRVBFQVQsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiB0cnVlLAoJCQlhbmlzb3Ryb3B5OiByZW5kZXJlci5wYXJhbWV0ZXJzLm1heEFuaXNvdHJvcHksCgkJfSk7CgoJCWxldCBub3JtYWxpemVkSW1hZ2VzID0gbm9ybWFsaXplSW1hZ2VzKGltYWdlcyk7CgkJbGV0IHRleHR1cmVzOiBUZXh0dXJlW10gPSBbXTsKCQlsZXQgaW1hZ2VMb2FkVG9rZW4gPSAwOwoJCWxldCBkaXNwb3NlZCA9IGZhbHNlOwoKCQljb25zdCBkaXNwb3NlVGV4dHVyZSA9ICh0ZXh0dXJlOiBUZXh0dXJlKSA9PiB7CgkJCWlmICh0ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCX07CgoJCWNvbnN0IHNldFRleHR1cmVzRnJvbUltYWdlcyA9IChpdGVtczogSW1hZ2VJdGVtW10pID0+IHsKCQkJbm9ybWFsaXplZEltYWdlcyA9IG5vcm1hbGl6ZUltYWdlcyhpdGVtcyk7CgkJCWltYWdlTG9hZFRva2VuICs9IDE7CgkJCWNvbnN0IHRva2VuID0gaW1hZ2VMb2FkVG9rZW47CgoJCQl0ZXh0dXJlcy5mb3JFYWNoKGRpc3Bvc2VUZXh0dXJlKTsKCQkJdGV4dHVyZXMgPSBbXTsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgbm9ybWFsaXplZEltYWdlcy5sZW5ndGg7IGkrKykgewoJCQkJY29uc3QgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKGdsLCB7CgkJCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJCQl3aWR0aDogMSwKCQkJCQloZWlnaHQ6IDEsCgkJCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQkJCXR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCgkJCQkJbWluRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCQkJd3JhcFM6IGdsLk1JUlJPUkVEX1JFUEVBVCwKCQkJCQl3cmFwVDogZ2wuTUlSUk9SRURfUkVQRUFULAoJCQkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCQkJZmxpcFk6IHRydWUsCgkJCQkJYW5pc290cm9weTogcmVuZGVyZXIucGFyYW1ldGVycy5tYXhBbmlzb3Ryb3B5LAoJCQkJfSk7CgkJCQl0ZXh0dXJlcy5wdXNoKHRleHR1cmUpOwoKCQkJCWNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwoJCQkJaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQkJaW1nLm9ubG9hZCA9ICgpID0+IHsKCQkJCQlpZiAoZGlzcG9zZWQgfHwgdG9rZW4gIT09IGltYWdlTG9hZFRva2VuKSByZXR1cm47CgkJCQkJdGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCX07CgkJCQlpbWcuc3JjID0gbm9ybWFsaXplZEltYWdlc1tpXS5zcmM7CgkJCX0KCQl9OwoJCXNldEltYWdlSXRlbXMgPSBzZXRUZXh0dXJlc0Zyb21JbWFnZXM7CgkJc2V0VGV4dHVyZXNGcm9tSW1hZ2VzKGltYWdlcyk7CgoJCWNvbnN0IHBsYW5lc0RhdGE6IFBsYW5lRGF0YVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+ICh7CgkJCWluZGV4OiBpLAoJCQl6OiBjb3VudCA+IDAgPyAoKGRlcHRoUmFuZ2UgLyBjb3VudCkgKiBpKSAlIGRlcHRoUmFuZ2UgOiAwLAoJCQlpbWFnZUluZGV4OiBub3JtYWxpemVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBpICUgbm9ybWFsaXplZEltYWdlcy5sZW5ndGggOiAwLAoJCQl4OiBzcGF0aWFsUG9zaXRpb25zW2ldPy54ID8/IDAsCgkJCXk6IHNwYXRpYWxQb3NpdGlvbnNbaV0/LnkgPz8gMCwKCQl9KSk7CgoJCWNvbnN0IHBsYW5lczogUGxhbmVSdW50aW1lW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoKSA9PiB7CgkJCWNvbnN0IHVuaWZvcm1zOiBQbGFuZVVuaWZvcm1zID0gewoJCQkJbWFwOiB7IHZhbHVlOiBmYWxsYmFja1RleHR1cmUgfSwKCQkJCW9wYWNpdHk6IHsgdmFsdWU6IDEgfSwKCQkJCWJsdXJBbW91bnQ6IHsgdmFsdWU6IDAgfSwKCQkJCXNjcm9sbEZvcmNlOiB7IHZhbHVlOiAwIH0sCgkJCQl0aW1lOiB7IHZhbHVlOiAwIH0sCgkJCQlpc0hvdmVyZWQ6IHsgdmFsdWU6IDAgfSwKCQkJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJfTsKCgkJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCQl1bmlmb3JtcywKCQkJCXRyYW5zcGFyZW50OiB0cnVlLAoJCQkJZGVwdGhUZXN0OiB0cnVlLAoJCQkJZGVwdGhXcml0ZTogdHJ1ZSwKCQkJfSk7CgoJCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJCWdlb21ldHJ5LAoJCQkJcHJvZ3JhbSwKCQkJCWZydXN0dW1DdWxsZWQ6IGZhbHNlLAoJCQl9KTsKCQkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQkJcmV0dXJuIHsgbWVzaCwgcHJvZ3JhbSwgdW5pZm9ybXMgfTsKCQl9KTsKCgkJbGV0IHNjcm9sbFZlbG9jaXR5ID0gMDsKCQlsZXQgYXV0b1BsYXkgPSB0cnVlOwoJCWxldCBsYXN0SW50ZXJhY3Rpb24gPSBEYXRlLm5vdygpOwoJCWxldCBlbGFwc2VkVGltZSA9IDA7CgoJCWNvbnN0IGhhbmRsZVdoZWVsID0gKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7CgkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCXNjcm9sbFZlbG9jaXR5ICs9IGV2ZW50LmRlbHRhWSAqIDAuMDEgKiBzcGVlZDsKCQkJYXV0b1BsYXkgPSBmYWxzZTsKCQkJbGFzdEludGVyYWN0aW9uID0gRGF0ZS5ub3coKTsKCQl9OwoKCQljb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7CgkJCWlmIChldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd0xlZnQiKSB7CgkJCQlzY3JvbGxWZWxvY2l0eSAtPSAyICogc3BlZWQ7CgkJCQlhdXRvUGxheSA9IGZhbHNlOwoJCQkJbGFzdEludGVyYWN0aW9uID0gRGF0ZS5ub3coKTsKCQkJfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICJBcnJvd0Rvd24iIHx8IGV2ZW50LmtleSA9PT0gIkFycm93UmlnaHQiKSB7CgkJCQlzY3JvbGxWZWxvY2l0eSArPSAyICogc3BlZWQ7CgkJCQlhdXRvUGxheSA9IGZhbHNlOwoJCQkJbGFzdEludGVyYWN0aW9uID0gRGF0ZS5ub3coKTsKCQkJfQoJCX07CgoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIGhhbmRsZVdoZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pOwoJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgaGFuZGxlS2V5RG93bik7CgoJCWNvbnN0IGF1dG9QbGF5SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewoJCQlpZiAoRGF0ZS5ub3coKSAtIGxhc3RJbnRlcmFjdGlvbiA+IDMwMDApIHsKCQkJCWF1dG9QbGF5ID0gdHJ1ZTsKCQkJfQoJCX0sIDEwMDApOwoKCQljb25zdCByYXljYXN0ID0gbmV3IFJheWNhc3QoKTsKCQljb25zdCBwb2ludGVyID0gbmV3IFZlYzIoMCwgMCk7CgkJbGV0IHBvaW50ZXJBY3RpdmUgPSBmYWxzZTsKCQlsZXQgaG92ZXJlZEluZGV4ID0gLTE7CgkJY29uc3QgbWVzaElkVG9JbmRleDogUmVjb3JkPG51bWJlciwgbnVtYmVyPiA9IHt9OwoJCXBsYW5lcy5mb3JFYWNoKChwbGFuZSwgaW5kZXgpID0+IHsKCQkJbWVzaElkVG9JbmRleFtwbGFuZS5tZXNoLmlkXSA9IGluZGV4OwoJCX0pOwoKCQljb25zdCBoYW5kbGVQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7CgkJCWNvbnN0IHJlY3QgPSB0YXJnZXRDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWlmIChyZWN0LndpZHRoIDw9IDAgfHwgcmVjdC5oZWlnaHQgPD0gMCkgcmV0dXJuOwoJCQlwb2ludGVyLnggPSAoKGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCkgKiAyIC0gMTsKCQkJcG9pbnRlci55ID0gLSgoKGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodCkgKiAyIC0gMSk7CgkJCXBvaW50ZXJBY3RpdmUgPSB0cnVlOwoJCX07CgoJCWNvbnN0IGhhbmRsZVBvaW50ZXJMZWF2ZSA9ICgpID0+IHsKCQkJcG9pbnRlckFjdGl2ZSA9IGZhbHNlOwoJCQlpZiAoaG92ZXJlZEluZGV4ICE9PSAtMSkgewoJCQkJaG92ZXJlZEluZGV4ID0gLTE7CgkJCQlmb3IgKGxldCBpID0gMDsgaSA8IHBsYW5lcy5sZW5ndGg7IGkrKykgewoJCQkJCXBsYW5lc1tpXS51bmlmb3Jtcy5pc0hvdmVyZWQudmFsdWUgPSAwOwoJCQkJfQoJCQl9CgkJfTsKCgkJdGFyZ2V0Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCXRhcmdldENhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoYW5kbGVQb2ludGVyTGVhdmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWNhbWVyYS5wZXJzcGVjdGl2ZSh7CgkJCQlmb3Y6IDU1LAoJCQkJYXNwZWN0OiB3aWR0aCAvIE1hdGgubWF4KDEsIGhlaWdodCksCgkJCQluZWFyOiAwLjEsCgkJCQlmYXI6IDEwMCwKCQkJfSk7CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IHBsYW5lcy5sZW5ndGg7IGkrKykgewoJCQkJcGxhbmVzW2ldLnVuaWZvcm1zLnNjcm9sbEZvcmNlLnZhbHVlID0gc2Nyb2xsVmVsb2NpdHk7CgkJCX0KCQl9OwoKCQlyZXNpemUoKTsKCQljb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihyZXNpemUpOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpID0+IHsKCQkJY29uc3QgZGVsdGEgPSBwcmV2aW91cyA/IChub3cgLSBwcmV2aW91cykgLyAxMDAwIDogMDsKCQkJcHJldmlvdXMgPSBub3c7CgkJCWVsYXBzZWRUaW1lICs9IGRlbHRhOwoKCQkJaWYgKGF1dG9QbGF5KSB7CgkJCQlzY3JvbGxWZWxvY2l0eSArPSAwLjMgKiBkZWx0YTsKCQkJfQoKCQkJc2Nyb2xsVmVsb2NpdHkgKj0gMC45NTsKCgkJCWNvbnN0IHRvdGFsSW1hZ2VzID0gbm9ybWFsaXplZEltYWdlcy5sZW5ndGg7CgkJCWNvbnN0IGltYWdlQWR2YW5jZSA9CgkJCQl0b3RhbEltYWdlcyA+IDAgPyBjb3VudCAlIHRvdGFsSW1hZ2VzIHx8IHRvdGFsSW1hZ2VzIDogMDsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzRGF0YS5sZW5ndGg7IGkrKykgewoJCQkJY29uc3QgcGxhbmVEYXRhID0gcGxhbmVzRGF0YVtpXTsKCQkJCWNvbnN0IHBsYW5lID0gcGxhbmVzW2ldOwoKCQkJCXBsYW5lLnVuaWZvcm1zLnRpbWUudmFsdWUgPSBlbGFwc2VkVGltZTsKCQkJCXBsYW5lLnVuaWZvcm1zLnNjcm9sbEZvcmNlLnZhbHVlID0gc2Nyb2xsVmVsb2NpdHk7CgoJCQkJbGV0IG5ld1ogPSBwbGFuZURhdGEueiArIHNjcm9sbFZlbG9jaXR5ICogZGVsdGEgKiAxMDsKCQkJCWxldCB3cmFwc0ZvcndhcmQgPSAwOwoJCQkJbGV0IHdyYXBzQmFja3dhcmQgPSAwOwoKCQkJCWlmIChuZXdaID49IHRvdGFsUmFuZ2UpIHsKCQkJCQl3cmFwc0ZvcndhcmQgPSBNYXRoLmZsb29yKG5ld1ogLyB0b3RhbFJhbmdlKTsKCQkJCQluZXdaIC09IHRvdGFsUmFuZ2UgKiB3cmFwc0ZvcndhcmQ7CgkJCQl9IGVsc2UgaWYgKG5ld1ogPCAwKSB7CgkJCQkJd3JhcHNCYWNrd2FyZCA9IE1hdGguY2VpbCgtbmV3WiAvIHRvdGFsUmFuZ2UpOwoJCQkJCW5ld1ogKz0gdG90YWxSYW5nZSAqIHdyYXBzQmFja3dhcmQ7CgkJCQl9CgoJCQkJaWYgKHdyYXBzRm9yd2FyZCA+IDAgJiYgaW1hZ2VBZHZhbmNlID4gMCAmJiB0b3RhbEltYWdlcyA+IDApIHsKCQkJCQlwbGFuZURhdGEuaW1hZ2VJbmRleCA9CgkJCQkJCShwbGFuZURhdGEuaW1hZ2VJbmRleCArIHdyYXBzRm9yd2FyZCAqIGltYWdlQWR2YW5jZSkgJSB0b3RhbEltYWdlczsKCQkJCX0KCgkJCQlpZiAod3JhcHNCYWNrd2FyZCA+IDAgJiYgaW1hZ2VBZHZhbmNlID4gMCAmJiB0b3RhbEltYWdlcyA+IDApIHsKCQkJCQljb25zdCBzdGVwID0gcGxhbmVEYXRhLmltYWdlSW5kZXggLSB3cmFwc0JhY2t3YXJkICogaW1hZ2VBZHZhbmNlOwoJCQkJCXBsYW5lRGF0YS5pbWFnZUluZGV4ID0KCQkJCQkJKChzdGVwICUgdG90YWxJbWFnZXMpICsgdG90YWxJbWFnZXMpICUgdG90YWxJbWFnZXM7CgkJCQl9CgoJCQkJcGxhbmVEYXRhLnogPSAoKG5ld1ogJSB0b3RhbFJhbmdlKSArIHRvdGFsUmFuZ2UpICUgdG90YWxSYW5nZTsKCQkJCXBsYW5lRGF0YS54ID0gc3BhdGlhbFBvc2l0aW9uc1tpXT8ueCA/PyAwOwoJCQkJcGxhbmVEYXRhLnkgPSBzcGF0aWFsUG9zaXRpb25zW2ldPy55ID8/IDA7CgoJCQkJY29uc3Qgbm9ybWFsaXplZFBvc2l0aW9uID0gcGxhbmVEYXRhLnogLyB0b3RhbFJhbmdlOwoJCQkJbGV0IG9wYWNpdHkgPSAxOwoKCQkJCWlmICgKCQkJCQlub3JtYWxpemVkUG9zaXRpb24gPj0gZmFkZVNldHRpbmdzLmZhZGVJbi5zdGFydCAmJgoJCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA8PSBmYWRlU2V0dGluZ3MuZmFkZUluLmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgZmFkZUluUHJvZ3Jlc3MgPQoJCQkJCQkobm9ybWFsaXplZFBvc2l0aW9uIC0gZmFkZVNldHRpbmdzLmZhZGVJbi5zdGFydCkgLwoJCQkJCQkoZmFkZVNldHRpbmdzLmZhZGVJbi5lbmQgLSBmYWRlU2V0dGluZ3MuZmFkZUluLnN0YXJ0KTsKCQkJCQlvcGFjaXR5ID0gZmFkZUluUHJvZ3Jlc3M7CgkJCQl9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQb3NpdGlvbiA8IGZhZGVTZXR0aW5ncy5mYWRlSW4uc3RhcnQpIHsKCQkJCQlvcGFjaXR5ID0gMDsKCQkJCX0gZWxzZSBpZiAoCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uID49IGZhZGVTZXR0aW5ncy5mYWRlT3V0LnN0YXJ0ICYmCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uIDw9IGZhZGVTZXR0aW5ncy5mYWRlT3V0LmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgZmFkZU91dFByb2dyZXNzID0KCQkJCQkJKG5vcm1hbGl6ZWRQb3NpdGlvbiAtIGZhZGVTZXR0aW5ncy5mYWRlT3V0LnN0YXJ0KSAvCgkJCQkJCShmYWRlU2V0dGluZ3MuZmFkZU91dC5lbmQgLSBmYWRlU2V0dGluZ3MuZmFkZU91dC5zdGFydCk7CgkJCQkJb3BhY2l0eSA9IDEgLSBmYWRlT3V0UHJvZ3Jlc3M7CgkJCQl9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQb3NpdGlvbiA+IGZhZGVTZXR0aW5ncy5mYWRlT3V0LmVuZCkgewoJCQkJCW9wYWNpdHkgPSAwOwoJCQkJfQoKCQkJCW9wYWNpdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBvcGFjaXR5KSk7CgoJCQkJbGV0IGJsdXIgPSAwOwoKCQkJCWlmICgKCQkJCQlub3JtYWxpemVkUG9zaXRpb24gPj0gYmx1clNldHRpbmdzLmJsdXJJbi5zdGFydCAmJgoJCQkJCW5vcm1hbGl6ZWRQb3NpdGlvbiA8PSBibHVyU2V0dGluZ3MuYmx1ckluLmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgYmx1ckluUHJvZ3Jlc3MgPQoJCQkJCQkobm9ybWFsaXplZFBvc2l0aW9uIC0gYmx1clNldHRpbmdzLmJsdXJJbi5zdGFydCkgLwoJCQkJCQkoYmx1clNldHRpbmdzLmJsdXJJbi5lbmQgLSBibHVyU2V0dGluZ3MuYmx1ckluLnN0YXJ0KTsKCQkJCQlibHVyID0gYmx1clNldHRpbmdzLm1heEJsdXIgKiAoMSAtIGJsdXJJblByb2dyZXNzKTsKCQkJCX0gZWxzZSBpZiAobm9ybWFsaXplZFBvc2l0aW9uIDwgYmx1clNldHRpbmdzLmJsdXJJbi5zdGFydCkgewoJCQkJCWJsdXIgPSBibHVyU2V0dGluZ3MubWF4Qmx1cjsKCQkJCX0gZWxzZSBpZiAoCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uID49IGJsdXJTZXR0aW5ncy5ibHVyT3V0LnN0YXJ0ICYmCgkJCQkJbm9ybWFsaXplZFBvc2l0aW9uIDw9IGJsdXJTZXR0aW5ncy5ibHVyT3V0LmVuZAoJCQkJKSB7CgkJCQkJY29uc3QgYmx1ck91dFByb2dyZXNzID0KCQkJCQkJKG5vcm1hbGl6ZWRQb3NpdGlvbiAtIGJsdXJTZXR0aW5ncy5ibHVyT3V0LnN0YXJ0KSAvCgkJCQkJCShibHVyU2V0dGluZ3MuYmx1ck91dC5lbmQgLSBibHVyU2V0dGluZ3MuYmx1ck91dC5zdGFydCk7CgkJCQkJYmx1ciA9IGJsdXJTZXR0aW5ncy5tYXhCbHVyICogYmx1ck91dFByb2dyZXNzOwoJCQkJfSBlbHNlIGlmIChub3JtYWxpemVkUG9zaXRpb24gPiBibHVyU2V0dGluZ3MuYmx1ck91dC5lbmQpIHsKCQkJCQlibHVyID0gYmx1clNldHRpbmdzLm1heEJsdXI7CgkJCQl9CgoJCQkJYmx1ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKGJsdXJTZXR0aW5ncy5tYXhCbHVyLCBibHVyKSk7CgoJCQkJcGxhbmUudW5pZm9ybXMub3BhY2l0eS52YWx1ZSA9IG9wYWNpdHk7CgkJCQlwbGFuZS51bmlmb3Jtcy5ibHVyQW1vdW50LnZhbHVlID0gYmx1cjsKCgkJCQljb25zdCB0ZXh0dXJlID0KCQkJCQl0b3RhbEltYWdlcyA+IDAKCQkJCQkJPyAodGV4dHVyZXNbcGxhbmVEYXRhLmltYWdlSW5kZXhdID8/IGZhbGxiYWNrVGV4dHVyZSkKCQkJCQkJOiBmYWxsYmFja1RleHR1cmU7CgkJCQlwbGFuZS51bmlmb3Jtcy5tYXAudmFsdWUgPSB0ZXh0dXJlOwoKCQkJCWNvbnN0IHRleFdpZHRoID0KCQkJCQl0ZXh0dXJlLmltYWdlICYmICJ3aWR0aCIgaW4gdGV4dHVyZS5pbWFnZQoJCQkJCQk/IE1hdGgubWF4KDEsIE51bWJlcih0ZXh0dXJlLmltYWdlLndpZHRoKSB8fCAxKQoJCQkJCQk6IDE7CgkJCQljb25zdCB0ZXhIZWlnaHQgPQoJCQkJCXRleHR1cmUuaW1hZ2UgJiYgImhlaWdodCIgaW4gdGV4dHVyZS5pbWFnZQoJCQkJCQk/IE1hdGgubWF4KDEsIE51bWJlcih0ZXh0dXJlLmltYWdlLmhlaWdodCkgfHwgMSkKCQkJCQkJOiAxOwoJCQkJcGxhbmUudW5pZm9ybXMudVRleHR1cmVTaXplLnZhbHVlLnNldCh0ZXhXaWR0aCwgdGV4SGVpZ2h0KTsKCgkJCQljb25zdCBhc3BlY3QgPSB0ZXhXaWR0aCAvIHRleEhlaWdodDsKCQkJCWlmIChhc3BlY3QgPiAxKSB7CgkJCQkJcGxhbmUubWVzaC5zY2FsZS5zZXQoMiAqIGFzcGVjdCwgMiwgMSk7CgkJCQl9IGVsc2UgewoJCQkJCXBsYW5lLm1lc2guc2NhbGUuc2V0KDIsIDIgLyBNYXRoLm1heChhc3BlY3QsIDAuMDAwMDEpLCAxKTsKCQkJCX0KCgkJCQljb25zdCB3b3JsZFogPSBwbGFuZURhdGEueiAtIGRlcHRoUmFuZ2UgLyAyOwoJCQkJcGxhbmUubWVzaC5wb3NpdGlvbi5zZXQocGxhbmVEYXRhLngsIHBsYW5lRGF0YS55LCB3b3JsZFopOwoJCQl9CgoJCQlpZiAocG9pbnRlckFjdGl2ZSkgewoJCQkJcmF5Y2FzdC5jYXN0TW91c2UoY2FtZXJhLCBbcG9pbnRlci54LCBwb2ludGVyLnldKTsKCQkJCWNvbnN0IGhpdHMgPSByYXljYXN0LmludGVyc2VjdE1lc2hlcygKCQkJCQlwbGFuZXMubWFwKChwbGFuZSkgPT4gcGxhbmUubWVzaCksCgkJCQkJeyBpbmNsdWRlVVY6IGZhbHNlLCBpbmNsdWRlTm9ybWFsOiBmYWxzZSB9LAoJCQkJKTsKCQkJCWNvbnN0IG5leHRIb3ZlciA9CgkJCQkJaGl0cy5sZW5ndGggPiAwID8gKG1lc2hJZFRvSW5kZXhbaGl0c1swXS5pZF0gPz8gLTEpIDogLTE7CgoJCQkJaWYgKG5leHRIb3ZlciAhPT0gaG92ZXJlZEluZGV4KSB7CgkJCQkJaG92ZXJlZEluZGV4ID0gbmV4dEhvdmVyOwoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCXBsYW5lc1tpXS51bmlmb3Jtcy5pc0hvdmVyZWQudmFsdWUgPSBpID09PSBob3ZlcmVkSW5kZXggPyAxIDogMDsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEsIGNsZWFyOiB0cnVlIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCWRpc3Bvc2VkID0gdHJ1ZTsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCXdpbmRvdy5jbGVhckludGVydmFsKGF1dG9QbGF5SW50ZXJ2YWwpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXRhcmdldENhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsIGhhbmRsZVdoZWVsKTsKCQkJd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBoYW5kbGVLZXlEb3duKTsKCQkJdGFyZ2V0Q2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgaGFuZGxlUG9pbnRlck1vdmUpOwoJCQl0YXJnZXRDYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgaGFuZGxlUG9pbnRlckxlYXZlKTsKCQkJc2V0SW1hZ2VJdGVtcyA9IHVuZGVmaW5lZDsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgcGxhbmVzLmxlbmd0aDsgaSsrKSB7CgkJCQlwbGFuZXNbaV0ucHJvZ3JhbS5yZW1vdmUoKTsKCQkJfQoJCQlnZW9tZXRyeS5yZW1vdmUoKTsKCQkJdGV4dHVyZXMuZm9yRWFjaChkaXNwb3NlVGV4dHVyZSk7CgkJCWRpc3Bvc2VUZXh0dXJlKGZhbGxiYWNrVGV4dHVyZSk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", @@ -45,7 +47,7 @@ "components/interactive-grid/InteractiveGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9JbnRlcmFjdGl2ZUdyaWRTY2VuZS5zdmVsdGUiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlpbWFnZTogc3RyaW5nOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogR3JpZCByZXNvbHV0aW9uIChudW1iZXIgb2YgY2VsbHMgcGVyIHJvdy9jb2x1bW4pLgoJCSAqIEBkZWZhdWx0IDE1CgkJICovCgkJZ3JpZD86IG51bWJlcjsKCQkvKioKCQkgKiBSYWRpdXMgb2YgbW91c2UgaW5mbHVlbmNlLgoJCSAqIEBkZWZhdWx0IDAuMTUKCQkgKi8KCQltb3VzZVNpemU/OiBudW1iZXI7CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDAuMzUKCQkgKi8KCQlzdHJlbmd0aD86IG51bWJlcjsKCQkvKioKCQkgKiBSZWxheGF0aW9uIGZhY3RvciBmb3IgcmV0dXJuaW5nIHRvIG9yaWdpbmFsIHN0YXRlICgwLTEpLgoJCSAqIEBkZWZhdWx0IDAuOQoJCSAqLwoJCXJlbGF4YXRpb24/OiBudW1iZXI7CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWltYWdlLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlncmlkID0gMTUsCgkJbW91c2VTaXplID0gMC4xNSwKCQlzdHJlbmd0aCA9IDAuMzUsCgkJcmVsYXhhdGlvbiA9IDAuOSwKCQkuLi5yZXN0Cgl9OiBQcm9wcyA9ICRwcm9wcygpOwoJbGV0IGNvbnRhaW5lciA9ICRzdGF0ZTxIVE1MRWxlbWVudD4oKTsKCWxldCBtb3VzZVggPSAkc3RhdGUoMCk7CglsZXQgbW91c2VZID0gJHN0YXRlKDApOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lciA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lciA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKGNvbnRhaW5lciA9PT0gbm9kZSkgewoJCQkJY29udGFpbmVyID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHsKCQlpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwoJCWNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJbW91c2VYID0gKGUuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoOwoJCW1vdXNlWSA9IChlLmNsaWVudFkgLSByZWN0LnRvcCkgLyByZWN0LmhlaWdodDsKCX0KPC9zY3JpcHQ+Cgo8ZGl2Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJ9CgljbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0KCW9ubW91c2Vtb3ZlPXtoYW5kbGVNb3VzZU1vdmV9Cgl7Li4ucmVzdH0KPgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7aW1hZ2V9CgkJCXtncmlkfQoJCQl7bW91c2VTaXplfQoJCQl7c3RyZW5ndGh9CgkJCXtyZWxheGF0aW9ufQoJCQl7bW91c2VYfQoJCQl7bW91c2VZfQoJCS8+Cgk8L2Rpdj4KPC9kaXY+Cg==", "components/interactive-grid/InteractiveGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBHcmlkIHJlc29sdXRpb24gKG51bWJlciBvZiBjZWxscyBwZXIgcm93L2NvbHVtbikuCgkJICovCgkJZ3JpZDogbnVtYmVyOwoJCS8qKgoJCSAqIFJhZGl1cyBvZiBtb3VzZSBpbmZsdWVuY2UuCgkJICovCgkJbW91c2VTaXplOiBudW1iZXI7CgkJLyoqCgkJICogU3RyZW5ndGggb2YgdGhlIGRpc3RvcnRpb24gZWZmZWN0LgoJCSAqLwoJCXN0cmVuZ3RoOiBudW1iZXI7CgkJLyoqCgkJICogUmVsYXhhdGlvbiBmYWN0b3IgZm9yIHJldHVybmluZyB0byBvcmlnaW5hbCBzdGF0ZSAoMC0xKS4KCQkgKi8KCQlyZWxheGF0aW9uOiBudW1iZXI7CgkJLyoqCgkJICogQ3VycmVudCBub3JtYWxpemVkIG1vdXNlIFggcG9zaXRpb24uCgkJICovCgkJbW91c2VYOiBudW1iZXI7CgkJLyoqCgkJICogQ3VycmVudCBub3JtYWxpemVkIG1vdXNlIFkgcG9zaXRpb24uCgkJICovCgkJbW91c2VZOiBudW1iZXI7Cgl9CgoJbGV0IHsgaW1hZ2UsIGdyaWQsIG1vdXNlU2l6ZSwgc3RyZW5ndGgsIHJlbGF4YXRpb24sIG1vdXNlWCwgbW91c2VZIH06IFByb3BzID0KCQkkcHJvcHMoKTsKCgl0eXBlIEdyaWRTdGF0ZSA9IHsKCQlzaXplOiBudW1iZXI7CgkJZGF0YTogRmxvYXQzMkFycmF5OwoJCXRleHR1cmU6IFRleHR1cmU7Cgl9OwoKCXR5cGUgVW5pZm9ybVN0YXRlID0gewoJCXRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWMyIH07CgkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBWZWMyIH07CgkJdURhdGFUZXh0dXJlOiB7IHZhbHVlOiBUZXh0dXJlIH07CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCX07CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXRJbWFnZVNvdXJjZSA9ICRzdGF0ZTwoc291cmNlOiBzdHJpbmcpID0+IHZvaWQ+KCk7CglsZXQgc2V0R3JpZFNpemUgPSAkc3RhdGU8KHZhbHVlOiBudW1iZXIpID0+IHZvaWQ+KCk7CgoJbGV0IGN1cnJlbnRWWCA9ICRzdGF0ZSgwKTsKCWxldCBjdXJyZW50VlkgPSAkc3RhdGUoMCk7CglsZXQgcHJldlggPSAwOwoJbGV0IHByZXZZID0gMDsKCgljb25zdCBub3JtYWxpemVHcmlkU2l6ZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZhbHVlKSk7CgoJY29uc3QgY3JlYXRlR3JpZFN0YXRlID0gKGdsOiBSZW5kZXJlclsiZ2wiXSwgZ3JpZFNpemU6IG51bWJlcik6IEdyaWRTdGF0ZSA9PiB7CgkJY29uc3Qgc2l6ZSA9IG5vcm1hbGl6ZUdyaWRTaXplKGdyaWRTaXplKTsKCQljb25zdCB0b3RhbCA9IHNpemUgKiBzaXplOwoJCWNvbnN0IGRhdGEgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB0b3RhbCk7CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykgewoJCQljb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDI1NSAtIDEyNTsKCQkJY29uc3QgcjEgPSBNYXRoLnJhbmRvbSgpICogMjU1IC0gMTI1OwoJCQljb25zdCBzdHJpZGUgPSBpICogNDsKCQkJZGF0YVtzdHJpZGVdID0gcjsKCQkJZGF0YVtzdHJpZGUgKyAxXSA9IHIxOwoJCQlkYXRhW3N0cmlkZSArIDJdID0gcjsKCQkJZGF0YVtzdHJpZGUgKyAzXSA9IDI1NTsKCQl9CgoJCWNvbnN0IGludGVybmFsRm9ybWF0ID0gZ2wucmVuZGVyZXIuaXNXZWJnbDIKCQkJPyAoZ2wgYXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCkuUkdCQTMyRgoJCQk6IGdsLlJHQkE7CgoJCWNvbnN0IHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCwgewoJCQlpbWFnZTogZGF0YSwKCQkJd2lkdGg6IHNpemUsCgkJCWhlaWdodDogc2l6ZSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQlpbnRlcm5hbEZvcm1hdCwKCQkJdHlwZTogZ2wuRkxPQVQsCgkJCW1pbkZpbHRlcjogZ2wuTkVBUkVTVCwKCQkJbWFnRmlsdGVyOiBnbC5ORUFSRVNULAoJCQl3cmFwUzogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJd3JhcFQ6IGdsLkNMQU1QX1RPX0VER0UsCgkJCWdlbmVyYXRlTWlwbWFwczogZmFsc2UsCgkJCWZsaXBZOiBmYWxzZSwKCQl9KTsKCgkJcmV0dXJuIHsgc2l6ZSwgZGF0YSwgdGV4dHVyZSB9OwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCXVuaWZvcm0gZmxvYXQgdGltZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCQl1bmlmb3JtIHNhbXBsZXIyRCB1RGF0YVRleHR1cmU7CgkJdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmU7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyB0ZXh0dXJlU2l6ZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSB0ZXh0dXJlU2l6ZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBjb3ZlclV2ID0gZ2V0Q292ZXJVVih2VXYsIHVUZXh0dXJlU2l6ZSk7CgkJCXZlYzQgZGF0YSA9IHRleHR1cmUyRCh1RGF0YVRleHR1cmUsIHZVdik7CgkJCXZlYzIgZGlzcGxhY2VkVVYgPSBjb3ZlclV2IC0gMC4wMiAqIGRhdGEucmc7CgkJCXZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVRleHR1cmUsIGRpc3BsYWNlZFVWKTsKCQkJZ2xfRnJhZ0NvbG9yID0gY29sb3I7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQljdXJyZW50VlggPSBtb3VzZVggLSBwcmV2WDsKCQljdXJyZW50VlkgPSBtb3VzZVkgLSBwcmV2WTsKCQlwcmV2WCA9IG1vdXNlWDsKCQlwcmV2WSA9IG1vdXNlWTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0SW1hZ2VTb3VyY2UpIHJldHVybjsKCQlzZXRJbWFnZVNvdXJjZShpbWFnZSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEdyaWRTaXplKSByZXR1cm47CgkJc2V0R3JpZFNpemUoZ3JpZCk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW1hZ2VUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLkxJTkVBUiwKCQkJbWFnRmlsdGVyOiBnbC5MSU5FQVIsCgkJCXdyYXBTOiBnbC5DTEFNUF9UT19FREdFLAoJCQl3cmFwVDogZ2wuQ0xBTVBfVE9fRURHRSwKCQkJZ2VuZXJhdGVNaXBtYXBzOiBmYWxzZSwKCQkJZmxpcFk6IHRydWUsCgkJfSk7CgoJCWxldCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGU7CgkJbGV0IGltYWdlTG9hZFRva2VuID0gMDsKCQljb25zdCBsb2FkSW1hZ2UgPSAoc291cmNlOiBzdHJpbmcpID0+IHsKCQkJaW1hZ2VMb2FkVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZUxvYWRUb2tlbjsKCQkJY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgkJCWltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwoJCQlpbWcuZGVjb2RpbmcgPSAiYXN5bmMiOwoJCQlpbWcub25sb2FkID0gKCkgPT4gewoJCQkJaWYgKHRva2VuICE9PSBpbWFnZUxvYWRUb2tlbikgcmV0dXJuOwoJCQkJaW1hZ2VUZXh0dXJlLmltYWdlID0gaW1nOwoJCQkJbG9jYWxVbmlmb3Jtcy51VGV4dHVyZVNpemUudmFsdWUuc2V0KAoJCQkJCWltZy5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoLAoJCQkJCWltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5oZWlnaHQsCgkJCQkpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgoJCWxldCBncmlkU3RhdGUgPSBjcmVhdGVHcmlkU3RhdGUoZ2wsIGdyaWQpOwoJCWNvbnN0IHJlcGxhY2VHcmlkID0gKHZhbHVlOiBudW1iZXIpID0+IHsKCQkJY29uc3QgcHJldmlvdXNUZXh0dXJlID0gZ3JpZFN0YXRlLnRleHR1cmU7CgkJCWdyaWRTdGF0ZSA9IGNyZWF0ZUdyaWRTdGF0ZShnbCwgdmFsdWUpOwoJCQlsb2NhbFVuaWZvcm1zLnVEYXRhVGV4dHVyZS52YWx1ZSA9IGdyaWRTdGF0ZS50ZXh0dXJlOwoJCQlpZiAocHJldmlvdXNUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUocHJldmlvdXNUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCgkJbG9jYWxVbmlmb3JtcyA9IHsKCQkJdGltZTogeyB2YWx1ZTogMCB9LAoJCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzIoMSwgMSkgfSwKCQkJdVRleHR1cmVTaXplOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1RGF0YVRleHR1cmU6IHsgdmFsdWU6IGdyaWRTdGF0ZS50ZXh0dXJlIH0sCgkJCXVUZXh0dXJlOiB7IHZhbHVlOiBpbWFnZVRleHR1cmUgfSwKCQl9OwoJCXNldEltYWdlU291cmNlID0gbG9hZEltYWdlOwoJCXNldEdyaWRTaXplID0gcmVwbGFjZUdyaWQ7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnRpbWUudmFsdWUgKz0gZGVsdGE7CgoJCQljb25zdCBncmlkU2l6ZSA9IGdyaWRTdGF0ZS5zaXplOwoJCQljb25zdCBkYXRhID0gZ3JpZFN0YXRlLmRhdGE7CgkJCWNvbnN0IGdyaWRNb3VzZVggPSBncmlkU2l6ZSAqIG1vdXNlWDsKCQkJY29uc3QgZ3JpZE1vdXNlWSA9IGdyaWRTaXplICogKDEgLSBtb3VzZVkpOwoJCQljb25zdCBtYXhEaXN0ID0gZ3JpZFNpemUgKiBtb3VzZVNpemU7CgkJCWNvbnN0IHdpZHRoID0gbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS54OwoJCQljb25zdCBoZWlnaHQgPSBsb2NhbFVuaWZvcm1zLnVSZXNvbHV0aW9uLnZhbHVlLnk7CgkJCWNvbnN0IGFzcGVjdCA9IHdpZHRoID4gMCA/IGhlaWdodCAvIHdpZHRoIDogMTsKCQkJY29uc3QgbWF4RGlzdFNxID0gbWF4RGlzdCAqIG1heERpc3Q7CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGdyaWRTaXplOyBpKyspIHsKCQkJCWZvciAobGV0IGogPSAwOyBqIDwgZ3JpZFNpemU7IGorKykgewoJCQkJCWNvbnN0IGRpc3RhbmNlID0KCQkJCQkJKChncmlkTW91c2VYIC0gaSkgKiAoZ3JpZE1vdXNlWCAtIGkpKSAvIGFzcGVjdCArCgkJCQkJCShncmlkTW91c2VZIC0gaikgKiAoZ3JpZE1vdXNlWSAtIGopOwoKCQkJCQlpZiAoZGlzdGFuY2UgPCBtYXhEaXN0U3EpIHsKCQkJCQkJY29uc3QgaW5kZXggPSA0ICogKGkgKyBncmlkU2l6ZSAqIGopOwoJCQkJCQlsZXQgcG93ZXIgPSBtYXhEaXN0IC8gTWF0aC5zcXJ0KGRpc3RhbmNlKTsKCQkJCQkJaWYgKCFOdW1iZXIuaXNGaW5pdGUocG93ZXIpIHx8IHBvd2VyID4gMTApIHBvd2VyID0gMTA7CgoJCQkJCQlkYXRhW2luZGV4XSArPSBzdHJlbmd0aCAqIDEwMCAqIGN1cnJlbnRWWCAqIHBvd2VyOwoJCQkJCQlkYXRhW2luZGV4ICsgMV0gLT0gc3RyZW5ndGggKiAxMDAgKiBjdXJyZW50VlkgKiBwb3dlcjsKCQkJCQl9CgoJCQkJCWNvbnN0IGlkeCA9IDQgKiAoaSArIGdyaWRTaXplICogaik7CgkJCQkJZGF0YVtpZHhdICo9IHJlbGF4YXRpb247CgkJCQkJZGF0YVtpZHggKyAxXSAqPSByZWxheGF0aW9uOwoJCQkJfQoJCQl9CgoJCQljdXJyZW50VlggKj0gMC45OwoJCQljdXJyZW50VlkgKj0gMC45OwoJCQlncmlkU3RhdGUudGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCXNldEltYWdlU291cmNlID0gdW5kZWZpbmVkOwoJCQlzZXRHcmlkU2l6ZSA9IHVuZGVmaW5lZDsKCQkJaWYgKGdyaWRTdGF0ZS50ZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoZ3JpZFN0YXRlLnRleHR1cmUudGV4dHVyZSk7CgkJCX0KCQkJaWYgKGltYWdlVGV4dHVyZS50ZXh0dXJlKSB7CgkJCQlnbC5kZWxldGVUZXh0dXJlKGltYWdlVGV4dHVyZS50ZXh0dXJlKTsKCQkJfQoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/lava-lamp/LavaLamp.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9MYXZhTGFtcFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIGxhdmEgYmxvYnMuCgkJICogQGRlZmF1bHQgIiMxODE4MWIiCgkJICovCgkJY29sb3I/OiBTY2VuZVByb3BzWyJjb2xvciJdOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBmcmVzbmVsIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiI2ZmNjkwMCIKCQkgKi8KCQlmcmVzbmVsQ29sb3I/OiBTY2VuZVByb3BzWyJmcmVzbmVsQ29sb3IiXTsKCQkvKioKCQkgKiBTcGVlZCBvZiB0aGUgbGF2YSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIEZyZXNuZWwgcG93ZXIgZm9yIHRoZSBlZGdlIGxpZ2h0aW5nIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAzLjAKCQkgKi8KCQlmcmVzbmVsUG93ZXI/OiBTY2VuZVByb3BzWyJmcmVzbmVsUG93ZXIiXTsKCQkvKioKCQkgKiBCYXNlIHJhZGl1cyBvZiB0aGUgYmxvYnMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXJhZGl1cz86IFNjZW5lUHJvcHNbInJhZGl1cyJdOwoJCS8qKgoJCSAqIFNtb290aG5lc3Mgb2YgdGhlIGJsb2IgYmxlbmRpbmcgKG1ldGFiYWxsIGVmZmVjdCkuCgkJICogQGRlZmF1bHQgMC4xCgkJICovCgkJc21vb3RobmVzcz86IFNjZW5lUHJvcHNbInNtb290aG5lc3MiXTsKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWNvbG9yID0gIiMxODE4MWIiLAoJCWZyZXNuZWxDb2xvciA9ICIjZmY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlmcmVzbmVsUG93ZXIgPSAzLjAsCgkJcmFkaXVzID0gMSwKCQlzbW9vdGhuZXNzID0gMC4xLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtmcmVzbmVsQ29sb3J9CgkJCXtzcGVlZH0KCQkJe2ZyZXNuZWxQb3dlcn0KCQkJe3JhZGl1c30KCQkJe3Ntb290aG5lc3N9CgkJLz4KCTwvZGl2Pgo8L2Rpdj4K", - "components/lava-lamp/LavaLampScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMywKCQlWZWM0LAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgbGF2YSBibG9icy4KCQkgKiBAZGVmYXVsdCAiIzE4MTgxYiIKCQkgKi8KCQljb2xvcj86IHN0cmluZzsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgZnJlc25lbCBlZmZlY3QuCgkJICogQGRlZmF1bHQgIiNmZjY5MDAiCgkJICovCgkJZnJlc25lbENvbG9yPzogc3RyaW5nOwoJCS8qKgoJCSAqIFNwZWVkIG9mIHRoZSBsYXZhIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlzcGVlZD86IG51bWJlcjsKCQkvKioKCQkgKiBGcmVzbmVsIHBvd2VyIGZvciB0aGUgZWRnZSBsaWdodGluZyBlZmZlY3QuCgkJICogQGRlZmF1bHQgMy4wCgkJICovCgkJZnJlc25lbFBvd2VyPzogbnVtYmVyOwoJCS8qKgoJCSAqIEJhc2UgcmFkaXVzIG9mIHRoZSBibG9icy4KCQkgKiBAZGVmYXVsdCAxCgkJICovCgkJcmFkaXVzPzogbnVtYmVyOwoJCS8qKgoJCSAqIFNtb290aG5lc3Mgb2YgdGhlIGJsb2IgYmxlbmRpbmcgKG1ldGFiYWxsIGVmZmVjdCkuCgkJICogQGRlZmF1bHQgMC4xCgkJICovCgkJc21vb3RobmVzcz86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yID0gIiMxODE4MWIiLAoJCWZyZXNuZWxDb2xvciA9ICIjZmY2OTAwIiwKCQlzcGVlZCA9IDEuMCwKCQlmcmVzbmVsUG93ZXIgPSAzLjAsCgkJcmFkaXVzID0gMSwKCQlzbW9vdGhuZXNzID0gMC4xLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzQgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1RnJlc25lbENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUZyZXNuZWxQb3dlcjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJhZGl1czogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVNtb290aG5lc3M6IHsgdmFsdWU6IG51bWJlciB9OwoJfT4oKTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKCWNvbnN0IHBhcnNlSGV4Q29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWNvbnN0IGhleCA9IHZhbHVlLnJlcGxhY2UoIiMiLCAiIikudHJpbSgpOwoJCWlmIChoZXgubGVuZ3RoID09PSAzIHx8IGhleC5sZW5ndGggPT09IDQpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXhbMF0gKyBoZXhbMF0sIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJaWYgKGhleC5sZW5ndGggPT09IDYgfHwgaGV4Lmxlbmd0aCA9PT0gOCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleC5zbGljZSg0LCA2KSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX07CgoJbGV0IGNzc0NvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDsKCWNvbnN0IHBhcnNlQ3NzQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bGwgPT4gewoJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKCQlpZiAoY3NzQ29sb3JDb250ZXh0ID09PSB1bmRlZmluZWQpIHsKCQkJY29uc3QgcGFyc2VyQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CgkJCXBhcnNlckNhbnZhcy53aWR0aCA9IDE7CgkJCXBhcnNlckNhbnZhcy5oZWlnaHQgPSAxOwoJCQljc3NDb2xvckNvbnRleHQgPSBwYXJzZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCQl9CgkJaWYgKCFjc3NDb2xvckNvbnRleHQpIHJldHVybiBudWxsOwoKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gIiMwMDAwMDAiOwoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTsKCQljb25zdCBub3JtYWxpemVkID0gY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZTsKCgkJaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgiIyIpKSB7CgkJCXJldHVybiBwYXJzZUhleENvbG9yKG5vcm1hbGl6ZWQpOwoJCX0KCgkJY29uc3QgbWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9yZ2JhP1woKFteKV0rKVwpL2kpOwoJCWlmICghbWF0Y2gpIHJldHVybiBudWxsOwoJCWNvbnN0IHBhcnRzID0gbWF0Y2hbMV0KCQkJLnNwbGl0KCIsIikKCQkJLm1hcCgocGFydCkgPT4gTnVtYmVyLnBhcnNlRmxvYXQocGFydC50cmltKCkpKQoJCQkuZmlsdGVyKChwYXJ0KSA9PiBOdW1iZXIuaXNGaW5pdGUocGFydCkpOwoJCWlmIChwYXJ0cy5sZW5ndGggPCAzKSByZXR1cm4gbnVsbDsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFsKCQkJY2xhbXAwMShwYXJ0c1swXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1sxXSAvIHNjYWxlKSwKCQkJY2xhbXAwMShwYXJ0c1syXSAvIHNjYWxlKSwKCQldOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogc3RyaW5nLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CgkJY29uc3QgcGFyc2VkID0gdHJpbW1lZC5zdGFydHNXaXRoKCIjIikKCQkJPyBwYXJzZUhleENvbG9yKHRyaW1tZWQpCgkJCTogcGFyc2VDc3NDb2xvcih0cmltbWVkKTsKCQlyZXR1cm4gcGFyc2VkID8/IGZhbGxiYWNrOwoJfTsKCgljb25zdCB0b0xpbmVhclJnYiA9ICgKCQl2YWx1ZTogc3RyaW5nLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3QgYXBwbHlDb2xvciA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IHN0cmluZywKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjNCB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1RnJlc25lbENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdUZyZXNuZWxQb3dlcjsKCQl1bmlmb3JtIGZsb2F0IHVSYWRpdXM7CgkJdW5pZm9ybSBmbG9hdCB1U21vb3RobmVzczsKCgkJZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODsKCgkJbWF0NCByb3RhdGlvbk1hdHJpeCh2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CgkJCWF4aXMgPSBub3JtYWxpemUoYXhpcyk7CgkJCWZsb2F0IHMgPSBzaW4oYW5nbGUpOwoJCQlmbG9hdCBjID0gY29zKGFuZ2xlKTsKCQkJZmxvYXQgb2MgPSAxLjAgLSBjOwoJCQlyZXR1cm4gbWF0NChvYyAqIGF4aXMueCAqIGF4aXMueCArIGMsICAgICAgICAgICBvYyAqIGF4aXMueCAqIGF4aXMueSAtIGF4aXMueiAqIHMsICBvYyAqIGF4aXMueiAqIGF4aXMueCArIGF4aXMueSAqIHMsICAwLjAsCgkJCQkJCW9jICogYXhpcy54ICogYXhpcy55ICsgYXhpcy56ICogcywgIG9jICogYXhpcy55ICogYXhpcy55ICsgYywgICAgICAgICAgIG9jICogYXhpcy55ICogYXhpcy56IC0gYXhpcy54ICogcywgIDAuMCwKCQkJCQkJb2MgKiBheGlzLnogKiBheGlzLnggLSBheGlzLnkgKiBzLCAgb2MgKiBheGlzLnkgKiBheGlzLnogKyBheGlzLnggKiBzLCAgb2MgKiBheGlzLnogKiBheGlzLnogKyBjLCAgICAgICAgICAgMC4wLAoJCQkJCQkwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjApOwoJCX0KCgkJdmVjMyByb3RhdGUodmVjMyB2LCB2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CgkJCW1hdDQgbSA9IHJvdGF0aW9uTWF0cml4KGF4aXMsIGFuZ2xlKTsKCQkJcmV0dXJuIChtICogdmVjNCh2LCAxLjApKS54eXo7CgkJfQoKCQlmbG9hdCBzbWluKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGspIHsKCQkJayAqPSA2LjA7CgkJCWZsb2F0IGggPSBtYXgoay1hYnMoYS1iKSwgMC4wKS9rOwoJCQlyZXR1cm4gbWluKGEsYikgLSBoKmgqaCprKigxLjAvNi4wKTsKCQl9CgoJCWZsb2F0IHNwaGVyZVNERih2ZWMzIHAsIGZsb2F0IHIpIHsKCQkJcmV0dXJuIGxlbmd0aChwKSAtIHI7CgkJfQoKCQlmbG9hdCBzZGYodmVjMyBwKSB7CgkJCXZlYzMgcDEgPSByb3RhdGUocCwgdmVjMygwLjAsIDAuMCwgMS4wKSwgdVRpbWUvNS4wKTsKCQkJdmVjMyBwMiA9IHJvdGF0ZShwLCB2ZWMzKDEuKSwgLXVUaW1lLzUuMCk7CgkJCXZlYzMgcDMgPSByb3RhdGUocCwgdmVjMygxLiwgMS4sIDAuKSwgLXVUaW1lLzQuNSk7CgkJCXZlYzMgcDQgPSByb3RhdGUocCwgdmVjMygwLiwgMS4sIDAuKSwgLXVUaW1lLzQuMCk7CgoJCQlmbG9hdCByID0gdVJhZGl1czsKCgkJCWZsb2F0IGZpbmFsID0gc3BoZXJlU0RGKHAxIC0gdmVjMygtMC41LCAwLjAsIDAuMCksIDAuMzUgKiByKTsKCQkJZmxvYXQgbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwMiAtIHZlYzMoMC41NSwgMC4wLCAwLjApLCAwLjMgKiByKTsKCQkJZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CgkJCW5leHRTcGhlcmUgPSBzcGhlcmVTREYocDIgLSB2ZWMzKC0wLjgsIDAuMCwgMC4wKSwgMC4yICogcik7CgkJCWZpbmFsID0gc21pbihmaW5hbCwgbmV4dFNwaGVyZSwgdVNtb290aG5lc3MpOwoJCQluZXh0U3BoZXJlID0gc3BoZXJlU0RGKHAzIC0gdmVjMygxLjAsIDAuMCwgMC4wKSwgMC4xNSAqIHIpOwoJCQlmaW5hbCA9IHNtaW4oZmluYWwsIG5leHRTcGhlcmUsIHVTbW9vdGhuZXNzKTsKCQkJbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwNCAtIHZlYzMoMC40NSwgLTAuNDUsIDAuMCksIDAuMTUgKiByKTsKCQkJZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CgoJCQlyZXR1cm4gZmluYWw7CgkJfQoKCQl2ZWMzIGdldE5vcm1hbCh2ZWMzIHApIHsKCQkJZmxvYXQgZCA9IDAuMDAxOwoJCQlyZXR1cm4gbm9ybWFsaXplKHZlYzMoCgkJCQlzZGYocCArIHZlYzMoZCwgMC4wLCAwLjApKSAtIHNkZihwIC0gdmVjMyhkLCAwLjAsIDAuMCkpLAoJCQkJc2RmKHAgKyB2ZWMzKDAuMCwgZCwgMC4wKSkgLSBzZGYocCAtIHZlYzMoMC4wLCBkLCAwLjApKSwKCQkJCXNkZihwICsgdmVjMygwLjAsIDAuMCwgZCkpIC0gc2RmKHAgLSB2ZWMzKDAuMCwgMC4wLCBkKSkKCQkJKSk7CgkJfQoKCQlmbG9hdCByYXlNYXJjaCh2ZWMzIHJheU9yaWdpbiwgdmVjMyByYXkpIHsKCQkJZmxvYXQgdCA9IDAuMDsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykgewoJCQkJdmVjMyBwID0gcmF5T3JpZ2luICsgcmF5ICogdDsKCQkJCWZsb2F0IGQgPSBzZGYocCk7CgkJCQlpZiAoZCA8IDAuMDAxKSByZXR1cm4gdDsKCQkJCXQgKz0gZDsKCQkJCWlmICh0ID4gMTAwLjApIGJyZWFrOwoJCQl9CgkJCXJldHVybiAtMS4wOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMyBjYW1lcmFQb3MgPSB2ZWMzKDAuMCwgMC4wLCA1LjApOwoJCQl2ZWMzIHJheSA9IG5vcm1hbGl6ZSh2ZWMzKCh2VXYgLSB2ZWMyKDAuNSkpICogdVJlc29sdXRpb24uencsIC0xKSk7CgoJCQlmbG9hdCB0ID0gcmF5TWFyY2goY2FtZXJhUG9zLCByYXkpOwoJCQlpZiAodCA+IDAuMCkgewoJCQkJdmVjMyBwID0gY2FtZXJhUG9zICsgcmF5ICogdDsKCQkJCXZlYzMgbm9ybWFsID0gZ2V0Tm9ybWFsKHApOwoJCQkJZmxvYXQgZnJlc25lbCA9IHBvdygxLjAgKyBkb3QocmF5LCBub3JtYWwpLCB1RnJlc25lbFBvd2VyKTsKCQkJCXZlYzMgY29sb3IgPSBtaXgodUNvbG9yLCB1RnJlc25lbENvbG9yLCBmcmVzbmVsKTsKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGNvbG9yKSwgMS4wKTsKCQkJfSBlbHNlIHsKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsKCQkJfQoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudUNvbG9yLnZhbHVlLCBjb2xvciwgWzI0IC8gMjU1LCAyNCAvIDI1NSwgMjcgLyAyNTVdKTsKCQlhcHBseUNvbG9yKHVuaWZvcm1zLnVGcmVzbmVsQ29sb3IudmFsdWUsIGZyZXNuZWxDb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCXVuaWZvcm1zLnVGcmVzbmVsUG93ZXIudmFsdWUgPSBmcmVzbmVsUG93ZXI7CgkJdW5pZm9ybXMudVJhZGl1cy52YWx1ZSA9IHJhZGl1czsKCQl1bmlmb3Jtcy51U21vb3RobmVzcy52YWx1ZSA9IHNtb290aG5lc3M7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbENvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsyNCAvIDI1NSwgMjQgLyAyNTUsIDI3IC8gMjU1XSk7CgkJY29uc3QgaW5pdGlhbEZyZXNuZWxDb2xvciA9IHRvTGluZWFyUmdiKGZyZXNuZWxDb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjNCgxLCAxLCAxLCAxKSB9LAoJCQl1Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhpbml0aWFsQ29sb3JbMF0sIGluaXRpYWxDb2xvclsxXSwgaW5pdGlhbENvbG9yWzJdKSwKCQkJfSwKCQkJdUZyZXNuZWxDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxGcmVzbmVsQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEZyZXNuZWxDb2xvclsxXSwKCQkJCQlpbml0aWFsRnJlc25lbENvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdUZyZXNuZWxQb3dlcjogeyB2YWx1ZTogZnJlc25lbFBvd2VyIH0sCgkJCXVSYWRpdXM6IHsgdmFsdWU6IHJhZGl1cyB9LAoJCQl1U21vb3RobmVzczogeyB2YWx1ZTogc21vb3RobmVzcyB9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgdXBkYXRlUmVzb2x1dGlvbiA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJY29uc3QgaW1hZ2VBc3BlY3QgPSAxOwoJCQlsZXQgYTEgPSAxOwoJCQlsZXQgYTIgPSAxOwoJCQlpZiAoaGVpZ2h0IC8gd2lkdGggPiBpbWFnZUFzcGVjdCkgewoJCQkJYTEgPSAod2lkdGggLyBoZWlnaHQpICogaW1hZ2VBc3BlY3Q7CgkJCQlhMiA9IDE7CgkJCX0gZWxzZSB7CgkJCQlhMSA9IDE7CgkJCQlhMiA9IGhlaWdodCAvIHdpZHRoIC8gaW1hZ2VBc3BlY3Q7CgkJCX0KCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQsIGExLCBhMik7CgkJfTsKCgkJdXBkYXRlUmVzb2x1dGlvbigpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZVJlc29sdXRpb24pOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWxldCB0aW1lID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQl0aW1lICs9IGRlbHRhICogc3BlZWQ7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgPSB0aW1lOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/lava-lamp/LavaLampScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMywKCQlWZWM0LAoJfSBmcm9tICJvZ2wiOwoJaW1wb3J0IHsgdG9MaW5lYXJSZ2IgfSBmcm9tICIuLi9oZWxwZXJzL2NvbG9yIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIGxhdmEgYmxvYnMuCgkJICogQGRlZmF1bHQgIiMxODE4MWIiCgkJICovCgkJY29sb3I/OiBzdHJpbmc7CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGZyZXNuZWwgZWZmZWN0LgoJCSAqIEBkZWZhdWx0ICIjZmY2OTAwIgoJCSAqLwoJCWZyZXNuZWxDb2xvcj86IHN0cmluZzsKCQkvKioKCQkgKiBTcGVlZCBvZiB0aGUgbGF2YSBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogRnJlc25lbCBwb3dlciBmb3IgdGhlIGVkZ2UgbGlnaHRpbmcgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDMuMAoJCSAqLwoJCWZyZXNuZWxQb3dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBCYXNlIHJhZGl1cyBvZiB0aGUgYmxvYnMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXJhZGl1cz86IG51bWJlcjsKCQkvKioKCQkgKiBTbW9vdGhuZXNzIG9mIHRoZSBibG9iIGJsZW5kaW5nIChtZXRhYmFsbCBlZmZlY3QpLgoJCSAqIEBkZWZhdWx0IDAuMQoJCSAqLwoJCXNtb290aG5lc3M/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQljb2xvciA9ICIjMTgxODFiIiwKCQlmcmVzbmVsQ29sb3IgPSAiI2ZmNjkwMCIsCgkJc3BlZWQgPSAxLjAsCgkJZnJlc25lbFBvd2VyID0gMy4wLAoJCXJhZGl1cyA9IDEsCgkJc21vb3RobmVzcyA9IDAuMSwKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTx7CgkJdVRpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBWZWM0IH07CgkJdUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdUZyZXNuZWxDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVGcmVzbmVsUG93ZXI6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVSYWRpdXM6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVTbW9vdGhuZXNzOiB7IHZhbHVlOiBudW1iZXIgfTsKCX0+KCk7CgoJY29uc3QgYXBwbHlDb2xvciA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IHN0cmluZywKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjNCB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1RnJlc25lbENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdUZyZXNuZWxQb3dlcjsKCQl1bmlmb3JtIGZsb2F0IHVSYWRpdXM7CgkJdW5pZm9ybSBmbG9hdCB1U21vb3RobmVzczsKCgkJZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODsKCgkJbWF0NCByb3RhdGlvbk1hdHJpeCh2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CgkJCWF4aXMgPSBub3JtYWxpemUoYXhpcyk7CgkJCWZsb2F0IHMgPSBzaW4oYW5nbGUpOwoJCQlmbG9hdCBjID0gY29zKGFuZ2xlKTsKCQkJZmxvYXQgb2MgPSAxLjAgLSBjOwoJCQlyZXR1cm4gbWF0NChvYyAqIGF4aXMueCAqIGF4aXMueCArIGMsICAgICAgICAgICBvYyAqIGF4aXMueCAqIGF4aXMueSAtIGF4aXMueiAqIHMsICBvYyAqIGF4aXMueiAqIGF4aXMueCArIGF4aXMueSAqIHMsICAwLjAsCgkJCQkJCW9jICogYXhpcy54ICogYXhpcy55ICsgYXhpcy56ICogcywgIG9jICogYXhpcy55ICogYXhpcy55ICsgYywgICAgICAgICAgIG9jICogYXhpcy55ICogYXhpcy56IC0gYXhpcy54ICogcywgIDAuMCwKCQkJCQkJb2MgKiBheGlzLnogKiBheGlzLnggLSBheGlzLnkgKiBzLCAgb2MgKiBheGlzLnkgKiBheGlzLnogKyBheGlzLnggKiBzLCAgb2MgKiBheGlzLnogKiBheGlzLnogKyBjLCAgICAgICAgICAgMC4wLAoJCQkJCQkwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjApOwoJCX0KCgkJdmVjMyByb3RhdGUodmVjMyB2LCB2ZWMzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7CgkJCW1hdDQgbSA9IHJvdGF0aW9uTWF0cml4KGF4aXMsIGFuZ2xlKTsKCQkJcmV0dXJuIChtICogdmVjNCh2LCAxLjApKS54eXo7CgkJfQoKCQlmbG9hdCBzbWluKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGspIHsKCQkJayAqPSA2LjA7CgkJCWZsb2F0IGggPSBtYXgoay1hYnMoYS1iKSwgMC4wKS9rOwoJCQlyZXR1cm4gbWluKGEsYikgLSBoKmgqaCprKigxLjAvNi4wKTsKCQl9CgoJCWZsb2F0IHNwaGVyZVNERih2ZWMzIHAsIGZsb2F0IHIpIHsKCQkJcmV0dXJuIGxlbmd0aChwKSAtIHI7CgkJfQoKCQlmbG9hdCBzZGYodmVjMyBwKSB7CgkJCXZlYzMgcDEgPSByb3RhdGUocCwgdmVjMygwLjAsIDAuMCwgMS4wKSwgdVRpbWUvNS4wKTsKCQkJdmVjMyBwMiA9IHJvdGF0ZShwLCB2ZWMzKDEuKSwgLXVUaW1lLzUuMCk7CgkJCXZlYzMgcDMgPSByb3RhdGUocCwgdmVjMygxLiwgMS4sIDAuKSwgLXVUaW1lLzQuNSk7CgkJCXZlYzMgcDQgPSByb3RhdGUocCwgdmVjMygwLiwgMS4sIDAuKSwgLXVUaW1lLzQuMCk7CgoJCQlmbG9hdCByID0gdVJhZGl1czsKCgkJCWZsb2F0IGZpbmFsID0gc3BoZXJlU0RGKHAxIC0gdmVjMygtMC41LCAwLjAsIDAuMCksIDAuMzUgKiByKTsKCQkJZmxvYXQgbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwMiAtIHZlYzMoMC41NSwgMC4wLCAwLjApLCAwLjMgKiByKTsKCQkJZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CgkJCW5leHRTcGhlcmUgPSBzcGhlcmVTREYocDIgLSB2ZWMzKC0wLjgsIDAuMCwgMC4wKSwgMC4yICogcik7CgkJCWZpbmFsID0gc21pbihmaW5hbCwgbmV4dFNwaGVyZSwgdVNtb290aG5lc3MpOwoJCQluZXh0U3BoZXJlID0gc3BoZXJlU0RGKHAzIC0gdmVjMygxLjAsIDAuMCwgMC4wKSwgMC4xNSAqIHIpOwoJCQlmaW5hbCA9IHNtaW4oZmluYWwsIG5leHRTcGhlcmUsIHVTbW9vdGhuZXNzKTsKCQkJbmV4dFNwaGVyZSA9IHNwaGVyZVNERihwNCAtIHZlYzMoMC40NSwgLTAuNDUsIDAuMCksIDAuMTUgKiByKTsKCQkJZmluYWwgPSBzbWluKGZpbmFsLCBuZXh0U3BoZXJlLCB1U21vb3RobmVzcyk7CgoJCQlyZXR1cm4gZmluYWw7CgkJfQoKCQl2ZWMzIGdldE5vcm1hbCh2ZWMzIHApIHsKCQkJZmxvYXQgZCA9IDAuMDAxOwoJCQlyZXR1cm4gbm9ybWFsaXplKHZlYzMoCgkJCQlzZGYocCArIHZlYzMoZCwgMC4wLCAwLjApKSAtIHNkZihwIC0gdmVjMyhkLCAwLjAsIDAuMCkpLAoJCQkJc2RmKHAgKyB2ZWMzKDAuMCwgZCwgMC4wKSkgLSBzZGYocCAtIHZlYzMoMC4wLCBkLCAwLjApKSwKCQkJCXNkZihwICsgdmVjMygwLjAsIDAuMCwgZCkpIC0gc2RmKHAgLSB2ZWMzKDAuMCwgMC4wLCBkKSkKCQkJKSk7CgkJfQoKCQlmbG9hdCByYXlNYXJjaCh2ZWMzIHJheU9yaWdpbiwgdmVjMyByYXkpIHsKCQkJZmxvYXQgdCA9IDAuMDsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykgewoJCQkJdmVjMyBwID0gcmF5T3JpZ2luICsgcmF5ICogdDsKCQkJCWZsb2F0IGQgPSBzZGYocCk7CgkJCQlpZiAoZCA8IDAuMDAxKSByZXR1cm4gdDsKCQkJCXQgKz0gZDsKCQkJCWlmICh0ID4gMTAwLjApIGJyZWFrOwoJCQl9CgkJCXJldHVybiAtMS4wOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMyBjYW1lcmFQb3MgPSB2ZWMzKDAuMCwgMC4wLCA1LjApOwoJCQl2ZWMzIHJheSA9IG5vcm1hbGl6ZSh2ZWMzKCh2VXYgLSB2ZWMyKDAuNSkpICogdVJlc29sdXRpb24uencsIC0xKSk7CgoJCQlmbG9hdCB0ID0gcmF5TWFyY2goY2FtZXJhUG9zLCByYXkpOwoJCQlpZiAodCA+IDAuMCkgewoJCQkJdmVjMyBwID0gY2FtZXJhUG9zICsgcmF5ICogdDsKCQkJCXZlYzMgbm9ybWFsID0gZ2V0Tm9ybWFsKHApOwoJCQkJZmxvYXQgZnJlc25lbCA9IHBvdygxLjAgKyBkb3QocmF5LCBub3JtYWwpLCB1RnJlc25lbFBvd2VyKTsKCQkJCXZlYzMgY29sb3IgPSBtaXgodUNvbG9yLCB1RnJlc25lbENvbG9yLCBmcmVzbmVsKTsKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQobGluZWFyVG9TcmdiKGNvbG9yKSwgMS4wKTsKCQkJfSBlbHNlIHsKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsKCQkJfQoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudUNvbG9yLnZhbHVlLCBjb2xvciwgWzI0IC8gMjU1LCAyNCAvIDI1NSwgMjcgLyAyNTVdKTsKCQlhcHBseUNvbG9yKHVuaWZvcm1zLnVGcmVzbmVsQ29sb3IudmFsdWUsIGZyZXNuZWxDb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCXVuaWZvcm1zLnVGcmVzbmVsUG93ZXIudmFsdWUgPSBmcmVzbmVsUG93ZXI7CgkJdW5pZm9ybXMudVJhZGl1cy52YWx1ZSA9IHJhZGl1czsKCQl1bmlmb3Jtcy51U21vb3RobmVzcy52YWx1ZSA9IHNtb290aG5lc3M7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbENvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsyNCAvIDI1NSwgMjQgLyAyNTUsIDI3IC8gMjU1XSk7CgkJY29uc3QgaW5pdGlhbEZyZXNuZWxDb2xvciA9IHRvTGluZWFyUmdiKGZyZXNuZWxDb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjNCgxLCAxLCAxLCAxKSB9LAoJCQl1Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhpbml0aWFsQ29sb3JbMF0sIGluaXRpYWxDb2xvclsxXSwgaW5pdGlhbENvbG9yWzJdKSwKCQkJfSwKCQkJdUZyZXNuZWxDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxGcmVzbmVsQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEZyZXNuZWxDb2xvclsxXSwKCQkJCQlpbml0aWFsRnJlc25lbENvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdUZyZXNuZWxQb3dlcjogeyB2YWx1ZTogZnJlc25lbFBvd2VyIH0sCgkJCXVSYWRpdXM6IHsgdmFsdWU6IHJhZGl1cyB9LAoJCQl1U21vb3RobmVzczogeyB2YWx1ZTogc21vb3RobmVzcyB9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgdXBkYXRlUmVzb2x1dGlvbiA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoKCQkJY29uc3QgaW1hZ2VBc3BlY3QgPSAxOwoJCQlsZXQgYTEgPSAxOwoJCQlsZXQgYTIgPSAxOwoJCQlpZiAoaGVpZ2h0IC8gd2lkdGggPiBpbWFnZUFzcGVjdCkgewoJCQkJYTEgPSAod2lkdGggLyBoZWlnaHQpICogaW1hZ2VBc3BlY3Q7CgkJCQlhMiA9IDE7CgkJCX0gZWxzZSB7CgkJCQlhMSA9IDE7CgkJCQlhMiA9IGhlaWdodCAvIHdpZHRoIC8gaW1hZ2VBc3BlY3Q7CgkJCX0KCgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQsIGExLCBhMik7CgkJfTsKCgkJdXBkYXRlUmVzb2x1dGlvbigpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZVJlc29sdXRpb24pOwoJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzKTsKCQlpZiAodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpCgkJCW9ic2VydmVyLm9ic2VydmUodGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQpOwoKCQlsZXQgcmFmID0gMDsKCQlsZXQgcHJldmlvdXMgPSAwOwoJCWxldCB0aW1lID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQl0aW1lICs9IGRlbHRhICogc3BlZWQ7CgkJCWxvY2FsVW5pZm9ybXMudVRpbWUudmFsdWUgPSB0aW1lOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/logo-carousel/LogoCarousel.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyB0eXBlIENvbXBvbmVudCwgb25Nb3VudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgTG9nb0NvbHVtbiBmcm9tICIuL0xvZ29Db2x1bW4uc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWludGVyZmFjZSBMb2dvIHsKCQluYW1lOiBzdHJpbmc7CgkJaWQ6IG51bWJlcjsKCQljb21wb25lbnQ6IENvbXBvbmVudDsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIE51bWJlciBvZiBjb2x1bW5zIHRvIGRpc3RyaWJ1dGUgbG9nb3MgaW50by4KCQkgKiBAZGVmYXVsdCAyCgkJICovCgkJY29sdW1uQ291bnQ/OiBudW1iZXI7CgkJLyoqCgkJICogQXJyYXkgb2YgbG9nbyBvYmplY3RzIGNvbnRhaW5pbmcgbmFtZSwgaWQsIGFuZCBjb21wb25lbnQuCgkJICovCgkJbG9nb3M6IExvZ29bXTsKCQkvKioKCQkgKiBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBsb2dvIGN5Y2xlcy4KCQkgKiBAZGVmYXVsdCAyMDAwCgkJICovCgkJY3ljbGVJbnRlcnZhbD86IG51bWJlcjsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJfQoKCWxldCB7CgkJY29sdW1uQ291bnQgPSAyLAoJCWxvZ29zLAoJCWN5Y2xlSW50ZXJ2YWwgPSAyMDAwLAoJCWNsYXNzOiBjbGFzc05hbWUsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBpc01vdW50ZWQgPSAkc3RhdGUoZmFsc2UpOwoKCW9uTW91bnQoKCkgPT4gewoJCWlzTW91bnRlZCA9IHRydWU7Cgl9KTsKCgljb25zdCBzaHVmZmxlQXJyYXkgPSA8VCw+KGFycmF5OiBUW10pOiBUW10gPT4gewoJCWNvbnN0IHNodWZmbGVkID0gWy4uLmFycmF5XTsKCQlmb3IgKGxldCBpID0gc2h1ZmZsZWQubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgewoJCQljb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7CgkJCVtzaHVmZmxlZFtpXSwgc2h1ZmZsZWRbal1dID0gW3NodWZmbGVkW2pdLCBzaHVmZmxlZFtpXV07CgkJfQoJCXJldHVybiBzaHVmZmxlZDsKCX07CgoJY29uc3QgZGlzdHJpYnV0ZUxvZ29zID0gKAoJCWFsbExvZ29zOiBMb2dvW10sCgkJY29sdW1uQ291bnQ6IG51bWJlciwKCQlzaHVmZmxlOiBib29sZWFuLAoJKTogTG9nb1tdW10gPT4gewoJCWNvbnN0IHNodWZmbGVkID0gc2h1ZmZsZSA/IHNodWZmbGVBcnJheShhbGxMb2dvcykgOiBbLi4uYWxsTG9nb3NdOwoJCWNvbnN0IGNvbHVtbnM6IExvZ29bXVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29sdW1uQ291bnQgfSwgKCkgPT4gW10pOwoKCQlzaHVmZmxlZC5mb3JFYWNoKChsb2dvLCBpbmRleCkgPT4gewoJCQljb2x1bW5zW2luZGV4ICUgY29sdW1uQ291bnRdLnB1c2gobG9nbyk7CgkJfSk7CgoJCWNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLmNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5sZW5ndGgpKTsKCQljb2x1bW5zLmZvckVhY2goKGNvbCkgPT4gewoJCQl3aGlsZSAoY29sLmxlbmd0aCA8IG1heExlbmd0aCkgewoJCQkJY29sLnB1c2goCgkJCQkJc2h1ZmZsZWRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2h1ZmZsZWQubGVuZ3RoKV0gfHwgc2h1ZmZsZWRbMF0sCgkJCQkpOwoJCQl9CgkJfSk7CgoJCXJldHVybiBjb2x1bW5zOwoJfTsKCglsZXQgbG9nb1NldHMgPSAkZGVyaXZlZChkaXN0cmlidXRlTG9nb3MobG9nb3MsIGNvbHVtbkNvdW50LCBpc01vdW50ZWQpKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigiZmxleCBzcGFjZS14LTQiLCBjbGFzc05hbWUpfT4KCXsjZWFjaCBsb2dvU2V0cyBhcyBsb2dvcywgaW5kZXggKGluZGV4KX0KCQk8TG9nb0NvbHVtbiB7bG9nb3N9IHtpbmRleH0ge2N5Y2xlSW50ZXJ2YWx9IC8+Cgl7L2VhY2h9CjwvZGl2Pgo=", "components/logo-carousel/LogoColumn.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50LCB0eXBlIENvbXBvbmVudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIExvZ28gewoJCW5hbWU6IHN0cmluZzsKCQlpZDogbnVtYmVyOwoJCWNvbXBvbmVudDogQ29tcG9uZW50OwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQXJyYXkgb2YgbG9nb3MgZm9yIHRoaXMgc3BlY2lmaWMgY29sdW1uLgoJCSAqLwoJCWxvZ29zOiBMb2dvW107CgkJLyoqCgkJICogSW5kZXggb2YgdGhlIGNvbHVtbiAodXNlZCBmb3Igb2Zmc2V0IGNhbGN1bGF0aW9uKS4KCQkgKi8KCQlpbmRleDogbnVtYmVyOwoJCS8qKgoJCSAqIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGxvZ28gY3ljbGVzLgoJCSAqIEBkZWZhdWx0IDIwMDAKCQkgKi8KCQljeWNsZUludGVydmFsPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb2x1bW4uCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7Cgl9CgoJbGV0IHsKCQlsb2dvcywKCQlpbmRleCwKCQljeWNsZUludGVydmFsID0gMjAwMCwKCQljbGFzczogY2xhc3NOYW1lLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY3VycmVudEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzRmlyc3QgPSAkc3RhdGUodHJ1ZSk7CgoJZnVuY3Rpb24gZ3NhcFRyYW5zaXRpb24oCgkJbm9kZTogSFRNTEVsZW1lbnQsCgkJcGFyYW1zOiB7IGRpcmVjdGlvbjogImluIiB8ICJvdXQiIH0sCgkpIHsKCQlnc2FwLmtpbGxUd2VlbnNPZihub2RlKTsKCgkJaWYgKHBhcmFtcy5kaXJlY3Rpb24gPT09ICJpbiIpIHsKCQkJaWYgKGlzRmlyc3QpIHsKCQkJCWdzYXAuc2V0KG5vZGUsIHsKCQkJCQl5UGVyY2VudDogMCwKCQkJCQlvcGFjaXR5OiAxLAoJCQkJCWZpbHRlcjogImJsdXIoMHB4KSIsCgkJCQl9KTsKCQkJCXJldHVybiB7CgkJCQkJZHVyYXRpb246IDAsCgkJCQkJdGljazogKCkgPT4ge30sCgkJCQl9OwoJCQl9CgoJCQlnc2FwLmZyb21UbygKCQkJCW5vZGUsCgkJCQl7IHlQZXJjZW50OiAxMCwgb3BhY2l0eTogMCwgZmlsdGVyOiAiYmx1cig4cHgpIiB9LAoJCQkJewoJCQkJCXlQZXJjZW50OiAwLAoJCQkJCW9wYWNpdHk6IDEsCgkJCQkJZmlsdGVyOiAiYmx1cigwcHgpIiwKCQkJCQlkdXJhdGlvbjogMC41LAoJCQkJCWRlbGF5OiAwLjM1LAoJCQkJCWVhc2U6ICJiYWNrLm91dCgxLjIpIiwKCQkJCX0sCgkJCSk7CgkJCXJldHVybiB7CgkJCQlkdXJhdGlvbjogOTAwLAoJCQkJdGljazogKCkgPT4ge30sCgkJCX07CgkJfSBlbHNlIHsKCQkJZ3NhcC50byhub2RlLCB7CgkJCQl5UGVyY2VudDogLTIwLAoJCQkJb3BhY2l0eTogMCwKCQkJCWZpbHRlcjogImJsdXIoNnB4KSIsCgkJCQlkdXJhdGlvbjogMC4zLAoJCQkJZWFzZTogInBvd2VyMi5pbiIsCgkJCX0pOwoJCQlyZXR1cm4gewoJCQkJZHVyYXRpb246IDMwMCwKCQkJCXRpY2s6ICgpID0+IHt9LAoJCQl9OwoJCX0KCX0KCglvbk1vdW50KCgpID0+IHsKCQlsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47CgoJCWNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7CgkJbGV0IHRhcmdldFRpbWUgPSBzdGFydFRpbWUgKyBjeWNsZUludGVydmFsICsgaW5kZXggKiAyMDA7CgoJCWNvbnN0IHRpY2sgPSAoKSA9PiB7CgkJCWlzRmlyc3QgPSBmYWxzZTsKCQkJY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgbG9nb3MubGVuZ3RoOwoKCQkJdGFyZ2V0VGltZSArPSBjeWNsZUludGVydmFsOwoKCQkJY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKCQkJaWYgKHRhcmdldFRpbWUgPD0gbm93KSB7CgkJCQljb25zdCBkcmlmdCA9IG5vdyAtIHRhcmdldFRpbWU7CgkJCQljb25zdCBjeWNsZXNNaXNzZWQgPSBNYXRoLmZsb29yKGRyaWZ0IC8gY3ljbGVJbnRlcnZhbCkgKyAxOwoJCQkJdGFyZ2V0VGltZSArPSBjeWNsZXNNaXNzZWQgKiBjeWNsZUludGVydmFsOwoJCQl9CgoJCQl0aW1lb3V0ID0gc2V0VGltZW91dCh0aWNrLCB0YXJnZXRUaW1lIC0gbm93KTsKCQl9OwoKCQl0aW1lb3V0ID0gc2V0VGltZW91dCh0aWNrLCB0YXJnZXRUaW1lIC0gc3RhcnRUaW1lKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwoJCX07Cgl9KTsKCglsZXQgQ3VycmVudExvZ29Db21wb25lbnQgPSAkZGVyaXZlZChsb2dvc1tjdXJyZW50SW5kZXhdLmNvbXBvbmVudCk7Cjwvc2NyaXB0PgoKPGRpdgoJY2xhc3M9e2NuKCJyZWxhdGl2ZSBoLTE0IHctMjQgb3ZlcmZsb3ctaGlkZGVuIG1kOmgtMjQgbWQ6dy00OCIsIGNsYXNzTmFtZSl9Cj4KCXsja2V5IGN1cnJlbnRJbmRleH0KCQk8ZGl2CgkJCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgoJCQlzdHlsZT0ib3BhY2l0eTogMTsiCgkJCWluOmdzYXBUcmFuc2l0aW9uPXt7IGRpcmVjdGlvbjogImluIiB9fQoJCQlvdXQ6Z3NhcFRyYW5zaXRpb249e3sgZGlyZWN0aW9uOiAib3V0IiB9fQoJCT4KCQkJPEN1cnJlbnRMb2dvQ29tcG9uZW50CgkJCQljbGFzcz0iaC1hdXRvIG1heC1oLVs3MCVdIHctYXV0byBtYXgtdy1bNzAlXSBvYmplY3QtY29udGFpbiIKCQkJLz4KCQk8L2Rpdj4KCXsva2V5fQo8L2Rpdj4K", "components/macos-dock/MacosDock.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB7IGdzYXAgfSBmcm9tICJnc2FwL2Rpc3QvZ3NhcCI7CgoJaW50ZXJmYWNlIERvY2tJdGVtIHsKCQlzcmM6IHN0cmluZzsKCQlhbHQ6IHN0cmluZzsKCQlsYWJlbD86IHN0cmluZzsKCQlocmVmPzogc3RyaW5nOwoJfQoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQXJyYXkgb2YgZG9jayBpdGVtcyB0byBkaXNwbGF5LgoJCSAqLwoJCWl0ZW1zOiBEb2NrSXRlbVtdOwoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogQmFzZSB3aWR0aCBvZiBpdGVtcyBpbiAnZW0nLgoJCSAqIEBkZWZhdWx0IDQKCQkgKi8KCQliYXNlV2lkdGg/OiBudW1iZXI7CgkJLyoqCgkJICogTWFnbmlmaWNhdGlvbiBmYWN0b3Igb24gaG92ZXIuCgkJICogQGRlZmF1bHQgMS41CgkJICovCgkJbWFnbmlmaWNhdGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBEaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBtYWduaWZpY2F0aW9uIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAzCgkJICovCgkJZGlzdGFuY2U/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQlpdGVtcywKCQljbGFzczogY2xhc3NOYW1lLAoJCWJhc2VXaWR0aCA9IDQsCgkJbWFnbmlmaWNhdGlvbiA9IDEuNSwKCQlkaXN0YW5jZTogaW5mbHVlbmNlRGlzdGFuY2UgPSAzLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgaG92ZXJlZEluZGV4OiBudW1iZXIgfCBudWxsID0gJHN0YXRlKG51bGwpOwoJbGV0IGRvY2tJdGVtczogKEhUTUxMSUVsZW1lbnQgfCBudWxsKVtdID0gJHN0YXRlKFtdKTsKCWxldCBkb2NrVG9vbHRpcHM6IChIVE1MRGl2RWxlbWVudCB8IG51bGwpW10gPSAkc3RhdGUoW10pOwoKCWNvbnN0IGF0dGFjaERvY2tJdGVtID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MTElFbGVtZW50KSA9PiB7CgkJZG9ja0l0ZW1zW2luZGV4XSA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaERvY2tUb29sdGlwID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MRGl2RWxlbWVudCkgPT4gewoJCWRvY2tUb29sdGlwc1tpbmRleF0gPSBub2RlOwoJfTsKCglsZXQgbWF4V2lkdGggPSAkZGVyaXZlZChiYXNlV2lkdGggKiBtYWduaWZpY2F0aW9uKTsKCgkkZWZmZWN0KCgpID0+IHsKCQljb25zdCBpdGVtRWxlbWVudHMgPSBkb2NrSXRlbXMuZmlsdGVyKAoJCQkoZWwpOiBlbCBpcyBIVE1MTElFbGVtZW50ID0+IGVsICE9PSBudWxsLAoJCSk7CgkJY29uc3QgdG9vbHRpcEVsZW1lbnRzID0gZG9ja1Rvb2x0aXBzLmZpbHRlcigKCQkJKGVsKTogZWwgaXMgSFRNTERpdkVsZW1lbnQgPT4gZWwgIT09IG51bGwsCgkJKTsKCgkJZG9ja0l0ZW1zLmZvckVhY2goKGVsLCBpbmRleCkgPT4gewoJCQlpZiAoIWVsKSByZXR1cm47CgoJCQlsZXQgdGFyZ2V0V2lkdGggPSBiYXNlV2lkdGg7CgoJCQlpZiAoaG92ZXJlZEluZGV4ICE9PSBudWxsKSB7CgkJCQljb25zdCBkaXN0ID0gTWF0aC5hYnMoaG92ZXJlZEluZGV4IC0gaW5kZXgpOwoKCQkJCWlmIChkaXN0IDwgaW5mbHVlbmNlRGlzdGFuY2UpIHsKCQkJCQljb25zdCByYXRpbyA9IChpbmZsdWVuY2VEaXN0YW5jZSAtIGRpc3QpIC8gaW5mbHVlbmNlRGlzdGFuY2U7CgkJCQkJdGFyZ2V0V2lkdGggPSBiYXNlV2lkdGggKyAobWF4V2lkdGggLSBiYXNlV2lkdGgpICogcmF0aW87CgkJCQl9CgkJCX0KCgkJCWdzYXAudG8oZWwsIHsKCQkJCXdpZHRoOiBgJHt0YXJnZXRXaWR0aH1lbWAsCgkJCQlkdXJhdGlvbjogMC41LAoJCQkJZWFzZTogInBvd2VyNC5vdXQiLAoJCQkJb3ZlcndyaXRlOiB0cnVlLAoJCQl9KTsKCQl9KTsKCgkJZG9ja1Rvb2x0aXBzLmZvckVhY2goKGVsLCBpbmRleCkgPT4gewoJCQlpZiAoIWVsKSByZXR1cm47CgoJCQlpZiAoaG92ZXJlZEluZGV4ID09PSBpbmRleCkgewoJCQkJZ3NhcC50byhlbCwgewoJCQkJCW9wYWNpdHk6IDEsCgkJCQkJeVBlcmNlbnQ6IC0xMDAsCgkJCQkJeFBlcmNlbnQ6IC01MCwKCQkJCQlkdXJhdGlvbjogMC41LAoJCQkJCWVhc2U6ICJwb3dlcjQub3V0IiwKCQkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCQl9KTsKCQkJfSBlbHNlIHsKCQkJCWdzYXAudG8oZWwsIHsKCQkJCQlvcGFjaXR5OiAwLAoJCQkJCXlQZXJjZW50OiAtODAsCgkJCQkJeFBlcmNlbnQ6IC01MCwKCQkJCQlkdXJhdGlvbjogMC41LAoJCQkJCWVhc2U6ICJwb3dlcjQub3V0IiwKCQkJCQlvdmVyd3JpdGU6IHRydWUsCgkJCQl9KTsKCQkJfQoJCX0pOwoKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAoaXRlbUVsZW1lbnRzLmxlbmd0aCkgewoJCQkJZ3NhcC5raWxsVHdlZW5zT2YoaXRlbUVsZW1lbnRzKTsKCQkJfQoJCQlpZiAodG9vbHRpcEVsZW1lbnRzLmxlbmd0aCkgewoJCQkJZ3NhcC5raWxsVHdlZW5zT2YodG9vbHRpcEVsZW1lbnRzKTsKCQkJfQoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8bmF2IGNsYXNzPXtjbigiZmxleCBpdGVtcy1lbmQganVzdGlmeS1jZW50ZXIgcC00IiwgY2xhc3NOYW1lKX0+Cgk8dWwKCQljbGFzcz0ibS0wIGZsZXggbGlzdC1ub25lIGl0ZW1zLWVuZCBqdXN0aWZ5LWNlbnRlciBnYXAtMCBwLTAiCgkJb25tb3VzZWxlYXZlPXsoKSA9PiAoaG92ZXJlZEluZGV4ID0gbnVsbCl9Cgk+CgkJeyNlYWNoIGl0ZW1zIGFzIGl0ZW0sIGluZGV4IChpbmRleCl9CgkJCTxsaQoJCQkJe0BhdHRhY2ggYXR0YWNoRG9ja0l0ZW0oaW5kZXgpfQoJCQkJY2xhc3M9InJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgoJCQkJc3R5bGU9IndpZHRoOiB7YmFzZVdpZHRofWVtOyIKCQkJCW9ubW91c2VlbnRlcj17KCkgPT4gKGhvdmVyZWRJbmRleCA9IGluZGV4KX0KCQkJPgoJCQkJPGEKCQkJCQlocmVmPXtpdGVtLmhyZWYgfHwgIiMifQoJCQkJCWNsYXNzPSJ6LTEwIGZsZXggaC1mdWxsIHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIgoJCQkJPgoJCQkJCTxpbWcKCQkJCQkJc3JjPXtpdGVtLnNyY30KCQkJCQkJYWx0PXtpdGVtLmFsdH0KCQkJCQkJY2xhc3M9InBvaW50ZXItZXZlbnRzLW5vbmUgaC1mdWxsIHctZnVsbCBvYmplY3QtY29udGFpbiIKCQkJCQkJbG9hZGluZz0iZWFnZXIiCgkJCQkJLz4KCQkJCTwvYT4KCgkJCQl7I2lmIGl0ZW0ubGFiZWx9CgkJCQkJPGRpdgoJCQkJCQl7QGF0dGFjaCBhdHRhY2hEb2NrVG9vbHRpcChpbmRleCl9CgkJCQkJCWNsYXNzPSJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0wIGxlZnQtMS8yIHotMCByb3VuZGVkIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWZpeGVkLWxpZ2h0IHB4LTIgcHktMSB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtYmxhY2sgb3BhY2l0eS0wIHNoYWRvdy1tZCIKCQkJCQk+CgkJCQkJCXtpdGVtLmxhYmVsfQoJCQkJCTwvZGl2PgoJCQkJey9pZn0KCQkJPC9saT4KCQl7L2VhY2h9Cgk8L3VsPgo8L25hdj4K", @@ -56,14 +58,14 @@ "components/pixelated-image/PixelatedImage.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9QaXhlbGF0ZWRJbWFnZVNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCWltcG9ydCB0eXBlIHsgQ29tcG9uZW50UHJvcHMgfSBmcm9tICJzdmVsdGUiOwoKCXR5cGUgU2NlbmVQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBTY2VuZT47CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgaW1hZ2Ugc291cmNlIFVSTC4KCQkgKi8KCQlzcmM6IFNjZW5lUHJvcHNbImltYWdlIl07CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBJbml0aWFsIGdyaWQgc2l6ZSBmb3IgdGhlIHBpeGVsYXRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWluaXRpYWxHcmlkU2l6ZT86IFNjZW5lUHJvcHNbImluaXRpYWxHcmlkU2l6ZSJdOwoJCS8qKgoJCSAqIER1cmF0aW9uIG9mIGVhY2ggc3RlcCBpbiB0aGUgZGVwaXhlbGF0aW9uIGFuaW1hdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjE1CgkJICovCgkJc3RlcER1cmF0aW9uPzogU2NlbmVQcm9wc1sic3RlcER1cmF0aW9uIl07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCXNyYywKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJaW5pdGlhbEdyaWRTaXplID0gNi4wLAoJCXN0ZXBEdXJhdGlvbiA9IDAuMTUsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIGltYWdlPXtzcmN9IHtpbml0aWFsR3JpZFNpemV9IHtzdGVwRHVyYXRpb259IC8+Cgk8L2Rpdj4KPC9kaXY+Cg==", "components/pixelated-image/PixelatedImageScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUZXh0dXJlLAoJCVRyYW5zZm9ybSwKCQlUcmlhbmdsZSwKCQlWZWMyLAoJfSBmcm9tICJvZ2wiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGhlIGltYWdlIHNvdXJjZSBVUkwuCgkJICovCgkJaW1hZ2U6IHN0cmluZzsKCQkvKioKCQkgKiBJbml0aWFsIGdyaWQgc2l6ZSBmb3IgdGhlIHBpeGVsYXRpb24gZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDYuMAoJCSAqLwoJCWluaXRpYWxHcmlkU2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBEdXJhdGlvbiBvZiBlYWNoIHN0ZXAgaW4gdGhlIGRlcGl4ZWxhdGlvbiBhbmltYXRpb24uCgkJICogQGRlZmF1bHQgMC4xNQoJCSAqLwoJCXN0ZXBEdXJhdGlvbj86IG51bWJlcjsKCX0KCglsZXQgeyBpbWFnZSwgaW5pdGlhbEdyaWRTaXplID0gNi4wLCBzdGVwRHVyYXRpb24gPSAwLjE1IH06IFByb3BzID0gJHByb3BzKCk7CgoJdHlwZSBVbmlmb3JtU3RhdGUgPSB7CgkJdVRleHR1cmU6IHsgdmFsdWU6IFRleHR1cmUgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogVmVjMiB9OwoJCXVHcmlkU2l6ZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUlzRG9uZTogeyB2YWx1ZTogbnVtYmVyIH07Cgl9OwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgc2V0SW1hZ2VTb3VyY2UgPSAkc3RhdGU8KHNvdXJjZTogc3RyaW5nKSA9PiB2b2lkPigpOwoJbGV0IHJlc2V0QW5pbWF0aW9uID0gJHN0YXRlPCgpID0+IHZvaWQ+KCk7CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQl1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMyIHVUZXh0dXJlU2l6ZTsKCQl1bmlmb3JtIGZsb2F0IHVHcmlkU2l6ZTsKCQl1bmlmb3JtIGZsb2F0IHVJc0RvbmU7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdmVjMiBnZXRDb3ZlclVWKHZlYzIgdXYsIHZlYzIgdGV4dHVyZVNpemUpIHsKCQkJdmVjMiBzYWZlVGV4dHVyZSA9IG1heCh0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTsKCQkJdmVjMiBzID0gdVJlc29sdXRpb24gLyBzYWZlVGV4dHVyZTsKCQkJZmxvYXQgc2NhbGUgPSBtYXgocy54LCBzLnkpOwoJCQl2ZWMyIHNjYWxlZFNpemUgPSBzYWZlVGV4dHVyZSAqIHNjYWxlOwoJCQl2ZWMyIG9mZnNldCA9ICh1UmVzb2x1dGlvbiAtIHNjYWxlZFNpemUpICogMC41OwoJCQlyZXR1cm4gKHV2ICogdVJlc29sdXRpb24gLSBvZmZzZXQpIC8gc2NhbGVkU2l6ZTsKCQl9CgoJCXZvaWQgbWFpbigpIHsKCQkJdmVjMiBzID0gdVJlc29sdXRpb247CgkJCWZsb2F0IHJzID0gcy54IC8gbWF4KHMueSwgMC4wMDAwMSk7CgoJCQl2ZWMyIGdyaWQgPSB2ZWMyKHVHcmlkU2l6ZSAqIHJzLCB1R3JpZFNpemUpOwoJCQl2ZWMyIHBpeGVsYXRlZFNjcmVlblV2ID0gZmxvb3IodlV2ICogZ3JpZCkgLyBncmlkICsgKDAuNSAvIGdyaWQpOwoKCQkJdmVjMiBmaW5hbFV2ID0gbWl4KHBpeGVsYXRlZFNjcmVlblV2LCB2VXYsIGNsYW1wKHVJc0RvbmUsIDAuMCwgMS4wKSk7CgkJCXZlYzIgY292ZXJVdiA9IGdldENvdmVyVVYoZmluYWxVdiwgdVRleHR1cmVTaXplKTsKCgkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1VGV4dHVyZSwgY292ZXJVdik7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEltYWdlU291cmNlKSByZXR1cm47CgkJc2V0SW1hZ2VTb3VyY2UoaW1hZ2UpOwoJfSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCFyZXNldEFuaW1hdGlvbikgcmV0dXJuOwoJCXJlc2V0QW5pbWF0aW9uKCk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW1hZ2VUZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wsIHsKCQkJaW1hZ2U6IG5ldyBVaW50OEFycmF5KFswLCAwLCAwLCAyNTVdKSwKCQkJd2lkdGg6IDEsCgkJCWhlaWdodDogMSwKCQkJZm9ybWF0OiBnbC5SR0JBLAoJCQl0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAoJCQltaW5GaWx0ZXI6IGdsLk5FQVJFU1QsCgkJCW1hZ0ZpbHRlcjogZ2wuTkVBUkVTVCwKCQkJd3JhcFM6IGdsLkNMQU1QX1RPX0VER0UsCgkJCXdyYXBUOiBnbC5DTEFNUF9UT19FREdFLAoJCQlnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLAoJCQlmbGlwWTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgcmVzb2x1dGlvblVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCB0ZXh0dXJlU2l6ZVVuaWZvcm0gPSBuZXcgVmVjMigxLCAxKTsKCQljb25zdCBsb2NhbFVuaWZvcm1zOiBVbmlmb3JtU3RhdGUgPSB7CgkJCXVUZXh0dXJlOiB7IHZhbHVlOiBpbWFnZVRleHR1cmUgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IHJlc29sdXRpb25Vbmlmb3JtIH0sCgkJCXVUZXh0dXJlU2l6ZTogeyB2YWx1ZTogdGV4dHVyZVNpemVVbmlmb3JtIH0sCgkJCXVHcmlkU2l6ZTogeyB2YWx1ZTogTWF0aC5tYXgoMSwgaW5pdGlhbEdyaWRTaXplKSB9LAoJCQl1SXNEb25lOiB7IHZhbHVlOiAwIH0sCgkJfTsKCgkJbGV0IGN1cnJlbnRHcmlkU2l6ZSA9IE1hdGgubWF4KDEsIGluaXRpYWxHcmlkU2l6ZSk7CgkJbGV0IGlzRG9uZSA9IGZhbHNlOwoJCWxldCBlbGFwc2VkID0gMDsKCgkJY29uc3QgcmVzZXRTdGF0ZSA9ICgpID0+IHsKCQkJY3VycmVudEdyaWRTaXplID0gTWF0aC5tYXgoMSwgaW5pdGlhbEdyaWRTaXplKTsKCQkJaXNEb25lID0gZmFsc2U7CgkJCWVsYXBzZWQgPSAwOwoJCQlpbWFnZVRleHR1cmUubWluRmlsdGVyID0gZ2wuTkVBUkVTVDsKCQkJaW1hZ2VUZXh0dXJlLm1hZ0ZpbHRlciA9IGdsLk5FQVJFU1Q7CgkJCWltYWdlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJCWxvY2FsVW5pZm9ybXMudUdyaWRTaXplLnZhbHVlID0gY3VycmVudEdyaWRTaXplOwoJCQlsb2NhbFVuaWZvcm1zLnVJc0RvbmUudmFsdWUgPSAwOwoJCX07CgkJcmVzZXRBbmltYXRpb24gPSByZXNldFN0YXRlOwoKCQlsZXQgaW1hZ2VUb2tlbiA9IDA7CgkJY29uc3QgbG9hZEltYWdlID0gKHNvdXJjZTogc3RyaW5nKSA9PiB7CgkJCWltYWdlVG9rZW4gKz0gMTsKCQkJY29uc3QgdG9rZW4gPSBpbWFnZVRva2VuOwoJCQljb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKCQkJaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CgkJCWltZy5kZWNvZGluZyA9ICJhc3luYyI7CgkJCWltZy5vbmxvYWQgPSAoKSA9PiB7CgkJCQlpZiAodG9rZW4gIT09IGltYWdlVG9rZW4pIHJldHVybjsKCQkJCWltYWdlVGV4dHVyZS5pbWFnZSA9IGltZzsKCQkJCXRleHR1cmVTaXplVW5pZm9ybS5zZXQoCgkJCQkJaW1nLm5hdHVyYWxXaWR0aCB8fCBpbWcud2lkdGggfHwgMSwKCQkJCQlpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcuaGVpZ2h0IHx8IDEsCgkJCQkpOwoJCQkJcmVzZXRTdGF0ZSgpOwoJCQl9OwoJCQlpbWcuc3JjID0gc291cmNlOwoJCX07CgkJc2V0SW1hZ2VTb3VyY2UgPSBsb2FkSW1hZ2U7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJcmVzb2x1dGlvblVuaWZvcm0uc2V0KGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJbG9hZEltYWdlKGltYWdlKTsKCgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoKCQkJaWYgKCFpc0RvbmUpIHsKCQkJCWVsYXBzZWQgKz0gZGVsdGE7CgkJCQljb25zdCBzYWZlU3RlcER1cmF0aW9uID0gTWF0aC5tYXgoMC4wMDAxLCBzdGVwRHVyYXRpb24pOwoJCQkJY29uc3Qgc3RlcCA9IE1hdGguZmxvb3IoZWxhcHNlZCAvIHNhZmVTdGVwRHVyYXRpb24pOwoJCQkJY29uc3QgbmV4dEdyaWQgPSBNYXRoLm1heCgxLCBpbml0aWFsR3JpZFNpemUgKiBNYXRoLnBvdygyLCBzdGVwKSk7CgkJCQljdXJyZW50R3JpZFNpemUgPSBuZXh0R3JpZDsKCgkJCQlpZiAoY3VycmVudEdyaWRTaXplID4gcmVzb2x1dGlvblVuaWZvcm0ueSkgewoJCQkJCWlzRG9uZSA9IHRydWU7CgkJCQkJaW1hZ2VUZXh0dXJlLm1pbkZpbHRlciA9IGdsLkxJTkVBUjsKCQkJCQlpbWFnZVRleHR1cmUubWFnRmlsdGVyID0gZ2wuTElORUFSOwoJCQkJCWltYWdlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJCQl9CgkJCX0KCgkJCWxvY2FsVW5pZm9ybXMudUdyaWRTaXplLnZhbHVlID0gY3VycmVudEdyaWRTaXplOwoJCQlsb2NhbFVuaWZvcm1zLnVJc0RvbmUudmFsdWUgPSBpc0RvbmUgPyAxIDogMDsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQkJc2V0SW1hZ2VTb3VyY2UgPSB1bmRlZmluZWQ7CgkJCXJlc2V0QW5pbWF0aW9uID0gdW5kZWZpbmVkOwoJCQlpZiAoaW1hZ2VUZXh0dXJlLnRleHR1cmUpIHsKCQkJCWdsLmRlbGV0ZVRleHR1cmUoaW1hZ2VUZXh0dXJlLnRleHR1cmUpOwoJCQl9CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/plasma-grid/PlasmaGrid.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9QbGFzbWFHcmlkU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBiYXNlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiIzExMTExMyIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogVGhlIGNvbG9yIHVzZWQgZm9yIHRoZSBwbGFzbWEgbm9pc2UgZ3JhZGllbnRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWhpZ2hsaWdodENvbG9yPzogU2NlbmVQcm9wc1siaGlnaGxpZ2h0Q29sb3IiXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtrZXk6IHN0cmluZ106IHVua25vd247Cgl9CgoJbGV0IHsKCQljb2xvciwKCQloaWdobGlnaHRDb2xvciwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIHtjb2xvcn0ge2hpZ2hsaWdodENvbG9yfSAvPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/plasma-grid/PlasmaGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMywKCX0gZnJvbSAib2dsIjsKCgl0eXBlIENvbG9yUmVwcmVzZW50YXRpb24gPQoJCXwgc3RyaW5nCgkJfCBudW1iZXIKCQl8IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXQoJCXwgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBUaGUgYmFzZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIFRoZSBjb2xvciB1c2VkIGZvciB0aGUgcGxhc21hIG5vaXNlIGdyYWRpZW50cy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQloaWdobGlnaHRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247Cgl9CgoJbGV0IHsgY29sb3IgPSAiIzExMTExMyIsIGhpZ2hsaWdodENvbG9yID0gIiNGRjY5MDAiIH06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCB1bmlmb3JtcyA9ICRzdGF0ZTx7CgkJdV90aW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1X3Jlc29sdXRpb246IHsgdmFsdWU6IFZlYzMgfTsKCQl1X2Jhc2VDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVfZ3JhZGllbnRDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJfT4oKTsKCgljb25zdCBjbGFtcDAxID0gKHZhbHVlOiBudW1iZXIpID0+IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7Cgljb25zdCBzcmdiVG9MaW5lYXIgPSAodmFsdWU6IG51bWJlcikgPT4KCQl2YWx1ZSA8PSAwLjA0MDQ1ID8gdmFsdWUgLyAxMi45MiA6IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAvIDEuMDU1LCAyLjQpOwoKCWNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCgkJcjogbnVtYmVyLAoJCWc6IG51bWJlciwKCQliOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgociwgZywgYikgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwoJfTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSk7Cgl9OwoKCWNvbnN0IHRvUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHsKCQkJY29uc3QgaW50ID0gTWF0aC5taW4oMHhmZmZmZmYsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IodmFsdWUpKSk7CgkJCXJldHVybiBbCgkJCQkoKGludCA+PiAxNikgJiAyNTUpIC8gMjU1LAoJCQkJKChpbnQgPj4gOCkgJiAyNTUpIC8gMjU1LAoJCQkJKGludCAmIDI1NSkgLyAyNTUsCgkJCV07CgkJfQoKCQlpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewoJCQljb25zdCBoZXggPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IGhleC5zdGFydHNXaXRoKCIjIikKCQkJCT8gcGFyc2VIZXhDb2xvcihoZXgpCgkJCQk6IHBhcnNlQ3NzQ29sb3IoaGV4KTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgoJCWlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gMykgewoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldCh2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTsKCQl9CgoJCWlmICgKCQkJdmFsdWUgJiYKCQkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCQkiciIgaW4gdmFsdWUgJiYKCQkJImciIGluIHZhbHVlICYmCgkJCSJiIiBpbiB2YWx1ZQoJCSkgewoJCQljb25zdCByZ2IgPSB2YWx1ZSBhcyB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7CgkJfQoKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3QgYXBwbHlDb2xvciA9ICgKCQl0YXJnZXQ6IFZlYzMsCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSkgPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvTGluZWFyUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJdGFyZ2V0LnNldChyLCBnLCBiKTsKCX07CgoJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCWF0dHJpYnV0ZSB2ZWMyIHV2OwoJCWF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwoJCXZhcnlpbmcgdmVjMiB2VXY7CgoJCXZvaWQgbWFpbigpIHsKCQkJdlV2ID0gdXY7CgkJCWdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwoJCX0KCWA7CgoJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoJCXZhcnlpbmcgdmVjMiB2VXY7CgkJdW5pZm9ybSBmbG9hdCB1X3RpbWU7CgkJdW5pZm9ybSB2ZWMzIHVfcmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdV9iYXNlQ29sb3I7CgkJdW5pZm9ybSB2ZWMzIHVfZ3JhZGllbnRDb2xvcjsKCgkJZmxvYXQgcmFuZCh2ZWMyIHApIHsKCQkJcmV0dXJuIGZyYWN0KHNpbihkb3QocCwgdmVjMigxMi41NDMsNTE0LjEyMykpKSo0NzMyLjEyKTsKCQl9CgoJCWZsb2F0IG5vaXNlKHZlYzIgcCkgewoJCQl2ZWMyIGYgPSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBmcmFjdChwKSk7CgkJCXZlYzIgaSA9IGZsb29yKHApOwoJCQlmbG9hdCBhID0gcmFuZChpKTsKCQkJZmxvYXQgYiA9IHJhbmQoaSt2ZWMyKDEuMCwwLjApKTsKCQkJZmxvYXQgYyA9IHJhbmQoaSt2ZWMyKDAuMCwxLjApKTsKCQkJZmxvYXQgZCA9IHJhbmQoaSt2ZWMyKDEuMCwxLjApKTsKCQkJcmV0dXJuIG1peChtaXgoYSwgYiwgZi54KSwgbWl4KGMsIGQsIGYueCksIGYueSk7CgkJfQoKCQl2b2lkIG1haW5JbWFnZSggb3V0IHZlYzQgZnJhZ0NvbG9yLCBpbiB2ZWMyIGZyYWdDb29yZCApIHsKCQkJZmxvYXQgbiA9IDIuMDsKCQkJdmVjMiB1diA9IGZyYWdDb29yZC91X3Jlc29sdXRpb24ueTsKCQkJdmVjMiB1dnAgPSBmcmFnQ29vcmQvdV9yZXNvbHV0aW9uLnh5OwoJCQl1diArPSAwLjc1Km5vaXNlKHV2KjMuMCt1X3RpbWUvMi4wK25vaXNlKHV2KjcuMC11X3RpbWUvMy4wKS8yLjApLzIuMDsKCgkJCWZsb2F0IGdyaWQgPSAobW9kKGZsb29yKCh1dnAueCkqdV9yZXNvbHV0aW9uLngvbiksMi4wKT09MC4wPzEuMDowLjApICoKCQkJCQkJIChtb2QoZmxvb3IoKHV2cC55KSp1X3Jlc29sdXRpb24ueS9uKSwyLjApPT0wLjA/MS4wOjAuMCk7CgoJCQl2ZWMzIGNvbCA9IG1peCh1X2Jhc2VDb2xvciwgdV9ncmFkaWVudENvbG9yLAoJCQkJCQkgICA1LjAgKiB2ZWMzKHBvdygxLjAtbm9pc2UodXYqNC4wLXZlYzIoMC4wLCB1X3RpbWUvMi4wKSksIDUuMCkpKTsKCgkJCWNvbCA9IHBvdyhjb2wsIHZlYzMoMS4wKSk7CgkJCWZsb2F0IGFscGhhID0gZ3JpZDsKCQkJZnJhZ0NvbG9yID0gdmVjNChjb2wsIGFscGhhKTsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQl2ZWMyIGZyYWdDb29yZCA9IHZVdiAqIHVfcmVzb2x1dGlvbi54eTsKCQkJbWFpbkltYWdlKGZyYWdDb2xvciwgZnJhZ0Nvb3JkKTsKCQkJZnJhZ0NvbG9yLnJnYiA9IGxpbmVhclRvU3JnYihmcmFnQ29sb3IucmdiKTsKCQkJZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudV9iYXNlQ29sb3IudmFsdWUsIGNvbG9yLCBbCgkJCTE3IC8gMjU1LAoJCQkxNyAvIDI1NSwKCQkJMTkgLyAyNTUsCgkJXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51X2dyYWRpZW50Q29sb3IudmFsdWUsIGhpZ2hsaWdodENvbG9yLCBbCgkJCTEsCgkJCTEwNSAvIDI1NSwKCQkJMCwKCQldKTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJZHByOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMSwKCQl9KTsKCQljb25zdCBnbCA9IHJlbmRlcmVyLmdsOwoJCWdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CgoJCWNvbnN0IGNhbWVyYSA9IG5ldyBDYW1lcmEoZ2wpOwoJCWNhbWVyYS5wb3NpdGlvbi56ID0gMTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgVHJpYW5nbGUoZ2wpOwoKCQljb25zdCBpbml0aWFsQmFzZUNvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxNyAvIDI1NSwgMTcgLyAyNTUsIDE5IC8gMjU1XSk7CgkJY29uc3QgaW5pdGlhbEhpZ2hsaWdodENvbG9yID0gdG9MaW5lYXJSZ2IoaGlnaGxpZ2h0Q29sb3IsIFsKCQkJMSwKCQkJMTA1IC8gMjU1LAoJCQkwLAoJCV0pOwoKCQljb25zdCBsb2NhbFVuaWZvcm1zID0gewoJCQl1X3RpbWU6IHsgdmFsdWU6IDAgfSwKCQkJdV9yZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMygxLCAxLCAxKSB9LAoJCQl1X2Jhc2VDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYXNlQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEJhc2VDb2xvclsxXSwKCQkJCQlpbml0aWFsQmFzZUNvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdV9ncmFkaWVudENvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoCgkJCQkJaW5pdGlhbEhpZ2hsaWdodENvbG9yWzBdLAoJCQkJCWluaXRpYWxIaWdobGlnaHRDb2xvclsxXSwKCQkJCQlpbml0aWFsSGlnaGxpZ2h0Q29sb3JbMl0sCgkJCQkpLAoJCQl9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogdHJ1ZSwKCQkJZGVwdGhUZXN0OiBmYWxzZSwKCQkJZGVwdGhXcml0ZTogZmFsc2UsCgkJfSk7CgoJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgeyBnZW9tZXRyeSwgcHJvZ3JhbSB9KTsKCQltZXNoLnNldFBhcmVudChzY2VuZSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQlsb2NhbFVuaWZvcm1zLnVfcmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCwgMSk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVfdGltZS52YWx1ZSArPSBkZWx0YSAqIDAuNTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/plasma-grid/PlasmaGridScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMywKCX0gZnJvbSAib2dsIjsKCWltcG9ydCB7IHR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiwgdG9MaW5lYXJSZ2IgfSBmcm9tICIuLi9oZWxwZXJzL2NvbG9yIjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFRoZSBiYXNlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAiIzExMTExMyIKCQkgKi8KCQljb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogVGhlIGNvbG9yIHVzZWQgZm9yIHRoZSBwbGFzbWEgbm9pc2UgZ3JhZGllbnRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWhpZ2hsaWdodENvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCX0KCglsZXQgeyBjb2xvciA9ICIjMTExMTEzIiwgaGlnaGxpZ2h0Q29sb3IgPSAiI0ZGNjkwMCIgfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1X3RpbWU6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVfcmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMyB9OwoJCXVfYmFzZUNvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdV9ncmFkaWVudENvbG9yOiB7IHZhbHVlOiBWZWMzIH07Cgl9PigpOwoKCWNvbnN0IGFwcGx5Q29sb3IgPSAoCgkJdGFyZ2V0OiBWZWMzLAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b0xpbmVhclJnYih2YWx1ZSwgZmFsbGJhY2spOwoJCXRhcmdldC5zZXQociwgZywgYik7Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJCXVuaWZvcm0gZmxvYXQgdV90aW1lOwoJCXVuaWZvcm0gdmVjMyB1X3Jlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMzIHVfYmFzZUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1X2dyYWRpZW50Q29sb3I7CgoJCWZsb2F0IHJhbmQodmVjMiBwKSB7CgkJCXJldHVybiBmcmFjdChzaW4oZG90KHAsIHZlYzIoMTIuNTQzLDUxNC4xMjMpKSkqNDczMi4xMik7CgkJfQoKCQlmbG9hdCBub2lzZSh2ZWMyIHApIHsKCQkJdmVjMiBmID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZnJhY3QocCkpOwoJCQl2ZWMyIGkgPSBmbG9vcihwKTsKCQkJZmxvYXQgYSA9IHJhbmQoaSk7CgkJCWZsb2F0IGIgPSByYW5kKGkrdmVjMigxLjAsMC4wKSk7CgkJCWZsb2F0IGMgPSByYW5kKGkrdmVjMigwLjAsMS4wKSk7CgkJCWZsb2F0IGQgPSByYW5kKGkrdmVjMigxLjAsMS4wKSk7CgkJCXJldHVybiBtaXgobWl4KGEsIGIsIGYueCksIG1peChjLCBkLCBmLngpLCBmLnkpOwoJCX0KCgkJdm9pZCBtYWluSW1hZ2UoIG91dCB2ZWM0IGZyYWdDb2xvciwgaW4gdmVjMiBmcmFnQ29vcmQgKSB7CgkJCWZsb2F0IG4gPSAyLjA7CgkJCXZlYzIgdXYgPSBmcmFnQ29vcmQvdV9yZXNvbHV0aW9uLnk7CgkJCXZlYzIgdXZwID0gZnJhZ0Nvb3JkL3VfcmVzb2x1dGlvbi54eTsKCQkJdXYgKz0gMC43NSpub2lzZSh1diozLjArdV90aW1lLzIuMCtub2lzZSh1dio3LjAtdV90aW1lLzMuMCkvMi4wKS8yLjA7CgoJCQlmbG9hdCBncmlkID0gKG1vZChmbG9vcigodXZwLngpKnVfcmVzb2x1dGlvbi54L24pLDIuMCk9PTAuMD8xLjA6MC4wKSAqCgkJCQkJCSAobW9kKGZsb29yKCh1dnAueSkqdV9yZXNvbHV0aW9uLnkvbiksMi4wKT09MC4wPzEuMDowLjApOwoKCQkJdmVjMyBjb2wgPSBtaXgodV9iYXNlQ29sb3IsIHVfZ3JhZGllbnRDb2xvciwKCQkJCQkJICAgNS4wICogdmVjMyhwb3coMS4wLW5vaXNlKHV2KjQuMC12ZWMyKDAuMCwgdV90aW1lLzIuMCkpLCA1LjApKSk7CgoJCQljb2wgPSBwb3coY29sLCB2ZWMzKDEuMCkpOwoJCQlmbG9hdCBhbHBoYSA9IGdyaWQ7CgkJCWZyYWdDb2xvciA9IHZlYzQoY29sLCBhbHBoYSk7CgkJfQoKCQl2ZWMzIGxpbmVhclRvU3JnYih2ZWMzIGNvbG9yKSB7CgkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCXZlYzMgaGlnaCA9IDEuMDU1ICogcG93KHNhZmUsIHZlYzMoMS4wIC8gMi40KSkgLSAwLjA1NTsKCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IGZyYWdDb2xvcjsKCQkJdmVjMiBmcmFnQ29vcmQgPSB2VXYgKiB1X3Jlc29sdXRpb24ueHk7CgkJCW1haW5JbWFnZShmcmFnQ29sb3IsIGZyYWdDb29yZCk7CgkJCWZyYWdDb2xvci5yZ2IgPSBsaW5lYXJUb1NyZ2IoZnJhZ0NvbG9yLnJnYik7CgkJCWdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjsKCQl9CglgOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghdW5pZm9ybXMpIHJldHVybjsKCQlhcHBseUNvbG9yKHVuaWZvcm1zLnVfYmFzZUNvbG9yLnZhbHVlLCBjb2xvciwgWwoJCQkxNyAvIDI1NSwKCQkJMTcgLyAyNTUsCgkJCTE5IC8gMjU1LAoJCV0pOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudV9ncmFkaWVudENvbG9yLnZhbHVlLCBoaWdobGlnaHRDb2xvciwgWwoJCQkxLAoJCQkxMDUgLyAyNTUsCgkJCTAsCgkJXSk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbEJhc2VDb2xvciA9IHRvTGluZWFyUmdiKGNvbG9yLCBbMTcgLyAyNTUsIDE3IC8gMjU1LCAxOSAvIDI1NV0pOwoJCWNvbnN0IGluaXRpYWxIaWdobGlnaHRDb2xvciA9IHRvTGluZWFyUmdiKGhpZ2hsaWdodENvbG9yLCBbCgkJCTEsCgkJCTEwNSAvIDI1NSwKCQkJMCwKCQldKTsKCgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdV90aW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVfcmVzb2x1dGlvbjogeyB2YWx1ZTogbmV3IFZlYzMoMSwgMSwgMSkgfSwKCQkJdV9iYXNlQ29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMygKCQkJCQlpbml0aWFsQmFzZUNvbG9yWzBdLAoJCQkJCWluaXRpYWxCYXNlQ29sb3JbMV0sCgkJCQkJaW5pdGlhbEJhc2VDb2xvclsyXSwKCQkJCSksCgkJCX0sCgkJCXVfZ3JhZGllbnRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxIaWdobGlnaHRDb2xvclswXSwKCQkJCQlpbml0aWFsSGlnaGxpZ2h0Q29sb3JbMV0sCgkJCQkJaW5pdGlhbEhpZ2hsaWdodENvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQl9OwoKCQl1bmlmb3JtcyA9IGxvY2FsVW5pZm9ybXM7CgoJCWNvbnN0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbShnbCwgewoJCQl2ZXJ0ZXg6IHZlcnRleFNoYWRlciwKCQkJZnJhZ21lbnQ6IGZyYWdtZW50U2hhZGVyLAoJCQl1bmlmb3JtczogbG9jYWxVbmlmb3JtcywKCQkJdHJhbnNwYXJlbnQ6IHRydWUsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51X3Jlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQsIDEpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCQkJbG9jYWxVbmlmb3Jtcy51X3RpbWUudmFsdWUgKz0gZGVsdGEgKiAwLjU7CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/preloader/Preloader.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgb25Nb3VudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCglpbnRlcmZhY2UgSW1hZ2UgewoJCXNyYzogc3RyaW5nOwoJCWFsdD86IHN0cmluZzsKCX0KCglpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMgewoJCS8qKgoJCSAqIEFycmF5IG9mIGltYWdlcyB0byBwcmVsb2FkL2Rpc3BsYXkgZHVyaW5nIHRoZSBzZXF1ZW5jZS4KCQkgKi8KCQlpbWFnZXM6IEltYWdlW107CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB0aGUgcHJlbG9hZGluZyBhbmltYXRpb24gY29tcGxldGVzLgoJCSAqLwoJCW9uQ29tcGxldGU/OiAoKSA9PiB2b2lkOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJaW1hZ2VzLAoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQlvbkNvbXBsZXRlLAoJCS4uLnJlc3RQcm9wcwoJfTogQ29tcG9uZW50UHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY29udGFpbmVyUmVmID0gJHN0YXRlPEhUTUxFbGVtZW50PigpOwoJbGV0IHJldmVhbEltYWdlc1JlZjogSFRNTEVsZW1lbnRbXSA9ICRzdGF0ZShbXSk7CglsZXQgaXNTY2FsZVVwUmVmOiBIVE1MRWxlbWVudFtdID0gJHN0YXRlKFtdKTsKCWxldCBzZWNvbmRMb29wSW1hZ2VzUmVmOiBIVE1MSW1hZ2VFbGVtZW50W10gPSAkc3RhdGUoW10pOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lclJlZiA9IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWNvbnRhaW5lclJlZiA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaFJldmVhbEltYWdlUmVmID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCXJldmVhbEltYWdlc1JlZltpbmRleF0gPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hTY2FsZVVwUmVmID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MRWxlbWVudCkgPT4gewoJCWlzU2NhbGVVcFJlZltpbmRleF0gPSBub2RlOwoJfTsKCgljb25zdCBhdHRhY2hTZWNvbmRMb29wSW1hZ2VSZWYgPQoJCShpbmRleDogbnVtYmVyKSA9PiAobm9kZTogSFRNTEltYWdlRWxlbWVudCkgPT4gewoJCQlzZWNvbmRMb29wSW1hZ2VzUmVmW2luZGV4XSA9IG5vZGU7CgkJfTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCBtaWRkbGVJbmRleCA9IE1hdGguZmxvb3IoaW1hZ2VzLmxlbmd0aCAvIDIpOwoJCWNvbnN0IHJhZGl1c1RhcmdldCA9IGlzU2NhbGVVcFJlZltpbWFnZXMubGVuZ3RoICsgbWlkZGxlSW5kZXhdOwoJCWNvbnN0IGlzU2NhbGVEb3duVGFyZ2V0cyA9IHNlY29uZExvb3BJbWFnZXNSZWYuZmlsdGVyKAoJCQkoXywgaSkgPT4gaSAhPT0gbWlkZGxlSW5kZXgsCgkJKTsKCgkJY29uc3QgdGwgPSBnc2FwLnRpbWVsaW5lKHsKCQkJZGVmYXVsdHM6IHsKCQkJCWVhc2U6ICJleHBvLmluT3V0IiwKCQkJfSwKCQkJb25Db21wbGV0ZTogKCkgPT4gewoJCQkJaWYgKG9uQ29tcGxldGUpIG9uQ29tcGxldGUoKTsKCQkJCWlmIChjb250YWluZXJSZWYpIGNvbnRhaW5lclJlZi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwoJCQl9LAoJCX0pOwoKCQlpZiAocmV2ZWFsSW1hZ2VzUmVmLmxlbmd0aCkgewoJCQl0bC5mcm9tVG8oCgkJCQlyZXZlYWxJbWFnZXNSZWYsCgkJCQl7CgkJCQkJeFBlcmNlbnQ6IDUwMCwKCQkJCX0sCgkJCQl7CgkJCQkJeFBlcmNlbnQ6IC01MDAsCgkJCQkJZHVyYXRpb246IDIuNSwKCQkJCQlzdGFnZ2VyOiAwLjA1LAoJCQkJfSwKCQkJKTsKCQl9CgoJCWlmIChpc1NjYWxlRG93blRhcmdldHMubGVuZ3RoKSB7CgkJCXRsLnRvKAoJCQkJaXNTY2FsZURvd25UYXJnZXRzLAoJCQkJewoJCQkJCXNjYWxlOiAwLjUsCgkJCQkJZHVyYXRpb246IDIsCgkJCQkJc3RhZ2dlcjogewoJCQkJCQllYWNoOiAwLjA1LAoJCQkJCQlmcm9tOiAiZWRnZXMiLAoJCQkJCQllYXNlOiAibm9uZSIsCgkJCQkJfSwKCQkJCQlvbkNvbXBsZXRlOiAoKSA9PiB7CgkJCQkJCWlmIChyYWRpdXNUYXJnZXQpIHsKCQkJCQkJCXJhZGl1c1RhcmdldC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAiMCI7CgkJCQkJCX0KCQkJCQl9LAoJCQkJfSwKCQkJCSItPTAuMSIsCgkJCSk7CgkJfQoKCQlpZiAoaXNTY2FsZVVwUmVmLmxlbmd0aCkgewoJCQl0bC5mcm9tVG8oCgkJCQlpc1NjYWxlVXBSZWYsCgkJCQl7CgkJCQkJd2lkdGg6ICIxMGVtIiwKCQkJCQloZWlnaHQ6ICIxMGVtIiwKCQkJCX0sCgkJCQl7CgkJCQkJd2lkdGg6ICIxMDB2dyIsCgkJCQkJaGVpZ2h0OiAiMTAwZHZoIiwKCQkJCQlkdXJhdGlvbjogMiwKCQkJCX0sCgkJCQkiPCAwLjUiLAoJCQkpOwoJCX0KCgkJcmV0dXJuICgpID0+IHsKCQkJdGwua2lsbCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8ZGl2Cgl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJSZWZ9CgljbGFzcz17Y24oCgkJImZpeGVkIGluc2V0LTAgei05OTkgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIiwKCQljbGFzc05hbWUsCgkpfQoJey4uLnJlc3RQcm9wc30KPgoJPGRpdgoJCWNsYXNzPSJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIKCQlzdHlsZT0ibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgYmxhY2sgNWVtLCBibGFjayBjYWxjKDEwMCUgLSA1ZW0pLCB0cmFuc3BhcmVudCk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgYmxhY2sgNWVtLCBibGFjayBjYWxjKDEwMCUgLSA1ZW0pLCB0cmFuc3BhcmVudCk7IgoJPgoJCTxkaXYgY2xhc3M9InJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiI+CgkJCTxkaXYgY2xhc3M9ImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzAuNWVtXSI+CgkJCQl7I2VhY2ggaW1hZ2VzIGFzIGltYWdlLCBpIChpbWFnZS5zcmMpfQoJCQkJCTxkaXYge0BhdHRhY2ggYXR0YWNoUmV2ZWFsSW1hZ2VSZWYoaSl9IGNsYXNzPSJyZWxhdGl2ZSBweC1bMWVtXSI+CgkJCQkJCTxkaXYKCQkJCQkJCXtAYXR0YWNoIGF0dGFjaFNjYWxlVXBSZWYoaSl9CgkJCQkJCQljbGFzcz0icmVsYXRpdmUgZmxleCBoLVsxMGVtXSB3LVsxMGVtXSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1bMC41ZW1dIgoJCQkJCQk+CgkJCQkJCQk8aW1nCgkJCQkJCQkJbG9hZGluZz0iZWFnZXIiCgkJCQkJCQkJc3JjPXtpbWFnZS5zcmN9CgkJCQkJCQkJYWx0PXtpbWFnZS5hbHQgPz8gIiJ9CgkJCQkJCQkJY2xhc3M9ImFic29sdXRlIGgtZnVsbCB3LWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gb2JqZWN0LWNvdmVyIgoJCQkJCQkJLz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgkJCQl7L2VhY2h9CgkJCTwvZGl2PgoKCQkJPGRpdgoJCQkJY2xhc3M9InJlbGF0aXZlIGxlZnQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLVswLjVlbV0iCgkJCT4KCQkJCXsjZWFjaCBpbWFnZXMgYXMgaW1hZ2UsIGkgKGltYWdlLnNyYyl9CgkJCQkJe0Bjb25zdCBpc01pZGRsZSA9IGkgPT09IE1hdGguZmxvb3IoaW1hZ2VzLmxlbmd0aCAvIDIpfQoJCQkJCTxkaXYKCQkJCQkJe0BhdHRhY2ggYXR0YWNoUmV2ZWFsSW1hZ2VSZWYoaW1hZ2VzLmxlbmd0aCArIGkpfQoJCQkJCQljbGFzcz0icmVsYXRpdmUgcHgtWzFlbV0iCgkJCQkJPgoJCQkJCQk8ZGl2CgkJCQkJCQl7QGF0dGFjaCBhdHRhY2hTY2FsZVVwUmVmKGltYWdlcy5sZW5ndGggKyBpKX0KCQkJCQkJCWNsYXNzOmlzLS1yYWRpdXM9e2lzTWlkZGxlfQoJCQkJCQkJc3R5bGU9e2lzTWlkZGxlCgkJCQkJCQkJPyAidHJhbnNpdGlvbjogYm9yZGVyLXJhZGl1cyAwLjVzIGN1YmljLWJlemllcigxLCAwLCAwLCAxKTsiCgkJCQkJCQkJOiAiIn0KCQkJCQkJCWNsYXNzPSJyZWxhdGl2ZSBmbGV4IGgtWzEwZW1dIHctWzEwZW1dIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLVswLjVlbV0ge2lzTWlkZGxlCgkJCQkJCQkJPyAnd2lsbC1jaGFuZ2UtdHJhbnNmb3JtJwoJCQkJCQkJCTogJyd9IgoJCQkJCQk+CgkJCQkJCQk8aW1nCgkJCQkJCQkJe0BhdHRhY2ggYXR0YWNoU2Vjb25kTG9vcEltYWdlUmVmKGkpfQoJCQkJCQkJCWxvYWRpbmc9ImVhZ2VyIgoJCQkJCQkJCXNyYz17aW1hZ2Uuc3JjfQoJCQkJCQkJCWFsdD17aW1hZ2UuYWx0ID8/ICIifQoJCQkJCQkJCWNsYXNzPSJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIG9iamVjdC1jb3ZlciB7aXNNaWRkbGUKCQkJCQkJCQkJPyAnJwoJCQkJCQkJCQk6ICd3aWxsLWNoYW5nZS10cmFuc2Zvcm0nfSIKCQkJCQkJCS8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJey9lYWNofQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTwvZGl2Pgo8L2Rpdj4K", "components/radial-gallery/RadialGallery.svelte": "PHNjcmlwdCBsYW5nPSJ0cyIgZ2VuZXJpY3M9IlQiPgoJaW1wb3J0IHsgb25Nb3VudCwgb25EZXN0cm95IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgY24gfSBmcm9tICIuLi91dGlscy9jbiI7CgoJaW50ZXJmYWNlIFByb3BzPFQ+IHsKCQkvKioKCQkgKiBBcnJheSBvZiBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBnYWxsZXJ5LgoJCSAqLwoJCWl0ZW1zOiBUW107CgkJLyoqCgkJICogU25pcHBldCB0byByZW5kZXIgZWFjaCBpdGVtLiBSZWNlaXZlcyB0aGUgaXRlbSBhbmQgaXRzIGluZGV4LgoJCSAqLwoJCWNoaWxkcmVuOiBTbmlwcGV0PFtULCBudW1iZXJdPjsKCQkvKioKCQkgKiBSYWRpdXMgb2YgdGhlIGNpcmN1bGFyIGdhbGxlcnkgaW4gcGl4ZWxzLgoJCSAqIEBkZWZhdWx0IDYwMAoJCSAqLwoJCXJhZGl1cz86IG51bWJlcjsKCQkvKioKCQkgKiBEdXJhdGlvbiBvZiBvbmUgZnVsbCByb3RhdGlvbiBpbiBzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDIwCgkJICovCgkJZHVyYXRpb24/OiBudW1iZXI7CgkJLyoqCgkJICogV2hldGhlciB0byByb3RhdGUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KCQkgKiBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCXJldmVyc2VkPzogYm9vbGVhbjsKCQkvKioKCQkgKiBWZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGNpcmNsZSBjZW50ZXIgZnJvbSB0aGUgYm90dG9tIGluIHBpeGVscy4KCQkgKiBAZGVmYXVsdCAwCgkJICovCgkJb2Zmc2V0PzogbnVtYmVyOwoJCS8qKgoJCSAqIEdhcCBiZXR3ZWVuIGl0ZW1zIGluIHBpeGVscy4KCQkgKiBAZGVmYXVsdCAwCgkJICovCgkJZ2FwPzogbnVtYmVyOwoJCS8qKgoJCSAqIEVzdGltYXRlZCBzaXplIG9mIGVhY2ggZWxlbWVudCAod2lkdGgpIGZvciBjYWxjdWxhdGlvbi4KCQkgKiBAZGVmYXVsdCAxMDAKCQkgKi8KCQllbGVtZW50U2l6ZT86IG51bWJlcjsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJfQoKCWxldCB7CgkJaXRlbXMsCgkJY2hpbGRyZW4sCgkJcmFkaXVzID0gNjAwLAoJCWR1cmF0aW9uID0gMjAsCgkJcmV2ZXJzZWQgPSBmYWxzZSwKCQlvZmZzZXQgPSAwLAoJCWdhcCA9IDAsCgkJZWxlbWVudFNpemUgPSAxMDAsCgkJY2xhc3M6IGNsYXNzTmFtZSwKCX06IFByb3BzPFQ+ID0gJHByb3BzKCk7CgoJbGV0IGNvbnRhaW5lciA9ICRzdGF0ZTxIVE1MRGl2RWxlbWVudD4oKTsKCWxldCB0d2VlbjogZ3NhcC5jb3JlLlR3ZWVuOwoKCWNvbnN0IGF0dGFjaENvbnRhaW5lciA9IChub2RlOiBIVE1MRGl2RWxlbWVudCkgPT4gewoJCWNvbnRhaW5lciA9IG5vZGU7CgkJcmV0dXJuICgpID0+IHsKCQkJaWYgKGNvbnRhaW5lciA9PT0gbm9kZSkgewoJCQkJY29udGFpbmVyID0gdW5kZWZpbmVkOwoJCQl9CgkJfTsKCX07CgoJbGV0IGRpc3BsYXlJdGVtcyA9ICRkZXJpdmVkLmJ5KCgpID0+IHsKCQljb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiByYWRpdXM7CgkJY29uc3Qgc3BhY2VQZXJJdGVtID0gZWxlbWVudFNpemUgKyBnYXA7CgkJY29uc3QgbmVlZGVkSXRlbXMgPSBNYXRoLmNlaWwoY2lyY3VtZmVyZW5jZSAvIHNwYWNlUGVySXRlbSk7CgoJCWNvbnN0IHJlcGVhdHMgPSBNYXRoLmNlaWwobmVlZGVkSXRlbXMgLyBpdGVtcy5sZW5ndGgpOwoJCXJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiByZXBlYXRzIH0sIChfLCByKSA9PgoJCQlpdGVtcy5tYXAoKGl0ZW0sIGkpID0+ICh7IGl0ZW0sIGtleTogYCR7cn0tJHtpfWAgfSkpLAoJCSkuZmxhdCgpOwoJfSk7CgoJbGV0IGFuZ2xlU3RlcCA9ICRkZXJpdmVkKDM2MCAvIGRpc3BsYXlJdGVtcy5sZW5ndGgpOwoKCW9uTW91bnQoKCkgPT4gewoJCWlmICghY29udGFpbmVyKSByZXR1cm47CgoJCXR3ZWVuID0gZ3NhcC50byhjb250YWluZXIsIHsKCQkJcm90YXRpb246IHJldmVyc2VkID8gLTM2MCA6IDM2MCwKCQkJZHVyYXRpb24sCgkJCXJlcGVhdDogLTEsCgkJCWVhc2U6ICJub25lIiwKCQl9KTsKCgkJcmV0dXJuICgpID0+IHR3ZWVuPy5raWxsKCk7Cgl9KTsKCglvbkRlc3Ryb3koKCkgPT4gdHdlZW4/LmtpbGwoKSk7CgoJJGVmZmVjdCgoKSA9PiB7CgkJdHdlZW4/LmR1cmF0aW9uKGR1cmF0aW9uKTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYKCWNsYXNzPXtjbigKCQkicmVsYXRpdmUgZmxleCBoLWZ1bGwgdy1mdWxsIGl0ZW1zLWVuZCBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4iLAoJCWNsYXNzTmFtZSwKCSl9Cj4KCTxkaXYKCQl7QGF0dGFjaCBhdHRhY2hDb250YWluZXJ9CgkJY2xhc3M9ImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgoJCXN0eWxlOndpZHRoPSJ7cmFkaXVzICogMn1weCIKCQlzdHlsZTpoZWlnaHQ9IntyYWRpdXMgKiAyfXB4IgoJCXN0eWxlOmJvdHRvbT0ie29mZnNldCAtIHJhZGl1c31weCIKCT4KCQl7I2VhY2ggZGlzcGxheUl0ZW1zIGFzIHsgaXRlbSwga2V5IH0sIGkgKGtleSl9CgkJCTxkaXYKCQkJCWNsYXNzPSJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiIKCQkJCXN0eWxlOnRyYW5zZm9ybT0icm90YXRlKHtpICogYW5nbGVTdGVwfWRlZykgdHJhbnNsYXRlKDAsIC17cmFkaXVzfXB4KQoJCQkJcm90YXRlKDkwZGVnKSIKCQkJPgoJCQkJPGRpdiBzdHlsZTp0cmFuc2Zvcm09InJvdGF0ZSgtOTBkZWcpIj4KCQkJCQl7QHJlbmRlciBjaGlsZHJlbihpdGVtLCBpKX0KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQl7L2VhY2h9Cgk8L2Rpdj4KPC9kaXY+Cg==", "components/rubiks-cube/RubiksCube.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgU2NlbmUgZnJvbSAiLi9SdWJpa3NDdWJlU2NlbmUuc3ZlbHRlIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW1wb3J0IHR5cGUgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gInN2ZWx0ZSI7CgoJdHlwZSBTY2VuZVByb3BzID0gQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjZW5lPjsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuCgkJICovCgkJY2xhc3M/OiBzdHJpbmc7CgkJLyoqCgkJICogVGhlIHNpemUgb2YgdGhlIGluZGl2aWR1YWwgY3ViZWxldHMuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNpemU/OiBTY2VuZVByb3BzWyJzaXplIl07CgkJLyoqCgkJICogRHVyYXRpb24gb2YgdGhlIHJvdGF0aW9uIGFuaW1hdGlvbiBpbiBzZWNvbmRzLgoJCSAqIEBkZWZhdWx0IDEuNQoJCSAqLwoJCWR1cmF0aW9uPzogU2NlbmVQcm9wc1siZHVyYXRpb24iXTsKCQkvKioKCQkgKiBHYXAgYmV0d2VlbiB0aGUgY3ViZWxldHMuCgkJICogQGRlZmF1bHQgMC4wMTUKCQkgKi8KCQlnYXA/OiBTY2VuZVByb3BzWyJnYXAiXTsKCQkvKioKCQkgKiBDb3JuZXIgcmFkaXVzIG9mIHRoZSBjdWJlbGV0cy4KCQkgKiBAZGVmYXVsdCAwLjEyNQoJCSAqLwoJCXJhZGl1cz86IFNjZW5lUHJvcHNbInJhZGl1cyJdOwoJCS8qKgoJCSAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogU2NlbmVQcm9wc1siZnJlc25lbENvbmZpZyJdOwoKCQlba2V5OiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXNpemUgPSAxLAoJCWR1cmF0aW9uID0gMS41LAoJCWdhcCA9IDAuMDE1LAoJCXJhZGl1cyA9IDAuMTI1LAoJCWZyZXNuZWxDb25maWcsCgkJLi4ucmVzdAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfSB7Li4ucmVzdH0+Cgk8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCI+CgkJPFNjZW5lIHtzaXplfSB7ZHVyYXRpb259IHtnYXB9IHtyYWRpdXN9IHtmcmVzbmVsQ29uZmlnfSAvPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/rubiks-cube/RubiksCubeScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IFN2ZWx0ZVNldCB9IGZyb20gInN2ZWx0ZS9yZWFjdGl2aXR5IjsKCWltcG9ydCB7CgkJQm94LAoJCUNhbWVyYSwKCQlNYXQ0LAoJCU1lc2gsCgkJT3JiaXQsCgkJUHJvZ3JhbSwKCQlRdWF0LAoJCVJlbmRlcmVyLAoJCVRyYW5zZm9ybSwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgRnJlc25lbENvbmZpZyB7CgkJLyoqCgkJICogQmFzZSBib2R5IGNvbG9yIGZvciBlYWNoIGN1YmVsZXQuCgkJICogQGRlZmF1bHQgIiMxMTExMTMiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEFjY2VudCBjb2xvciBhcHBsaWVkIGJ5IHRoZSBGcmVzbmVsIHJpbS4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQlyaW1Db2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQ29udHJvbHMgaG93IHRpZ2h0IHRoZSBGcmVzbmVsIHJpbSBodWcgaXMuCgkJICogSGlnaGVyIHZhbHVlcyB5aWVsZCBhIHRoaW5uZXIgb3V0bGluZS4KCQkgKiBAZGVmYXVsdCA2CgkJICovCgkJcmltUG93ZXI/OiBudW1iZXI7CgkJLyoqCgkJICogSW50ZW5zaXR5IG11bHRpcGxpZXIgZm9yIHRoZSBGcmVzbmVsIHJpbSBjb2xvci4KCQkgKiBAZGVmYXVsdCAxLjUKCQkgKi8KCQlyaW1JbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJaW50ZXJmYWNlIFByb3BzIHsKCQkvKioKCQkgKiBTaXplIG9mIGFuIGluZGl2aWR1YWwgY3ViZWxldCBlZGdlLgoJCSAqIEBkZWZhdWx0IDEKCQkgKi8KCQlzaXplOiBudW1iZXI7CgkJLyoqCgkJICogU2Vjb25kcyBpdCB0YWtlcyB0byBjb21wbGV0ZSBhIGZhY2Ugcm90YXRpb24uCgkJICogQGRlZmF1bHQgMS41CgkJICovCgkJZHVyYXRpb246IG51bWJlcjsKCQkvKioKCQkgKiBHYXAgYmV0d2VlbiBjdWJlbGV0cyB0byBhY2NlbnR1YXRlIHNlcGFyYXRpb24uCgkJICogQGRlZmF1bHQgMC4wMTUKCQkgKi8KCQlnYXA6IG51bWJlcjsKCQkvKioKCQkgKiBDb3JuZXIgcmFkaXVzIGZvciBzb2Z0ZW5lZCBjdWJlIGVkZ2VzLgoJCSAqIEBkZWZhdWx0IDAuMTI1CgkJICovCgkJcmFkaXVzOiBudW1iZXI7CgkJLyoqCgkJICogT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciB0aGUgRnJlc25lbCBzaGFkZXIgdW5pZm9ybXMuCgkJICovCgkJZnJlc25lbENvbmZpZz86IEZyZXNuZWxDb25maWc7Cgl9CgoJbGV0IHsgc2l6ZSwgZHVyYXRpb24sIGdhcCwgcmFkaXVzLCBmcmVzbmVsQ29uZmlnID0ge30gfTogUHJvcHMgPSAkcHJvcHMoKTsKCgl0eXBlIE1vdmUgPSB7CgkJYXhpczogIngiIHwgInkiIHwgInoiOwoJCWxheWVyOiAtMSB8IDAgfCAxOwoJCWRpcmVjdGlvbjogMSB8IC0xOwoJCXJvdGF0aW9uQW5nbGU/OiBudW1iZXI7Cgl9OwoKCXR5cGUgQ3ViZVN0YXRlID0gewoJCWlkOiBzdHJpbmc7CgkJcG9zaXRpb246IFZlYzM7CgkJcXVhdGVybmlvbjogUXVhdDsKCQltZXNoOiBNZXNoOwoJfTsKCgljb25zdCBQT1NTSUJMRV9NT1ZFUzogTW92ZVtdID0gKCgpID0+IHsKCQljb25zdCBtb3ZlczogTW92ZVtdID0gW107CgkJZm9yIChjb25zdCBheGlzIG9mIFsieCIsICJ5IiwgInoiXSBhcyBjb25zdCkgewoJCQlmb3IgKGNvbnN0IGxheWVyIG9mIFstMSwgMCwgMV0gYXMgY29uc3QpIHsKCQkJCWZvciAoY29uc3QgZGlyZWN0aW9uIG9mIFsxLCAtMV0gYXMgY29uc3QpIHsKCQkJCQltb3Zlcy5wdXNoKHsgYXhpcywgbGF5ZXIsIGRpcmVjdGlvbiB9KTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gbW92ZXM7Cgl9KSgpOwoKCWNvbnN0IGVhc2VJbk91dEN1YmljID0gKHQ6IG51bWJlcikgPT4KCQl0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6IDEgLSBNYXRoLnBvdygtMiAqIHQgKyAyLCAzKSAvIDI7CgoJY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCWNvbnN0IG5vcm1hbGl6ZVRyaXBsZXQgPSAoCgkJcjogbnVtYmVyLAoJCWc6IG51bWJlciwKCQliOiBudW1iZXIsCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IHNjYWxlID0gTWF0aC5tYXgociwgZywgYikgPiAxID8gMjU1IDogMTsKCQlyZXR1cm4gW2NsYW1wMDEociAvIHNjYWxlKSwgY2xhbXAwMShnIC8gc2NhbGUpLCBjbGFtcDAxKGIgLyBzY2FsZSldOwoJfTsKCgljb25zdCBwYXJzZUhleENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQljb25zdCBoZXggPSB2YWx1ZS5yZXBsYWNlKCIjIiwgIiIpLnRyaW0oKTsKCQlpZiAoaGV4Lmxlbmd0aCA9PT0gMyB8fCBoZXgubGVuZ3RoID09PSA0KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzBdICsgaGV4WzBdLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzFdICsgaGV4WzFdLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4WzJdICsgaGV4WzJdLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCWlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHsKCQkJY29uc3QgciA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTsKCQkJY29uc3QgZyA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTsKCQkJY29uc3QgYiA9IE51bWJlci5wYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTsKCQkJcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9OwoKCWxldCBjc3NDb2xvckNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgfCB1bmRlZmluZWQ7Cgljb25zdCBwYXJzZUNzc0NvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHsKCQlpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CgkJaWYgKGNzc0NvbG9yQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7CgkJCWNvbnN0IHBhcnNlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwoJCQlwYXJzZXJDYW52YXMud2lkdGggPSAxOwoJCQlwYXJzZXJDYW52YXMuaGVpZ2h0ID0gMTsKCQkJY3NzQ29sb3JDb250ZXh0ID0gcGFyc2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7CgkJfQoJCWlmICghY3NzQ29sb3JDb250ZXh0KSByZXR1cm4gbnVsbDsKCgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKCQljc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7CgkJY29uc3Qgbm9ybWFsaXplZCA9IGNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGU7CgoJCWlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoIiMiKSkgewoJCQlyZXR1cm4gcGFyc2VIZXhDb2xvcihub3JtYWxpemVkKTsKCQl9CgoJCWNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvcmdiYT9cKChbXildKylcKS9pKTsKCQlpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKCQljb25zdCBwYXJ0cyA9IG1hdGNoWzFdCgkJCS5zcGxpdCgiLCIpCgkJCS5tYXAoKHBhcnQpID0+IE51bWJlci5wYXJzZUZsb2F0KHBhcnQudHJpbSgpKSkKCQkJLmZpbHRlcigocGFydCkgPT4gTnVtYmVyLmlzRmluaXRlKHBhcnQpKTsKCQlpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIG51bGw7CgkJY29uc3Qgc2NhbGUgPSBNYXRoLm1heChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSA+IDEgPyAyNTUgOiAxOwoJCXJldHVybiBbCgkJCWNsYW1wMDEocGFydHNbMF0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMV0gLyBzY2FsZSksCgkJCWNsYW1wMDEocGFydHNbMl0gLyBzY2FsZSksCgkJXTsKCX07CgoJY29uc3QgdG9SZ2IgPSAoCgkJdmFsdWU6IENvbG9yUmVwcmVzZW50YXRpb24sCgkJZmFsbGJhY2s6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwKCSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7CgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgewoJCQljb25zdCBpbnQgPSBNYXRoLm1pbigweGZmZmZmZiwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih2YWx1ZSkpKTsKCQkJcmV0dXJuIFsKCQkJCSgoaW50ID4+IDE2KSAmIDI1NSkgLyAyNTUsCgkJCQkoKGludCA+PiA4KSAmIDI1NSkgLyAyNTUsCgkJCQkoaW50ICYgMjU1KSAvIDI1NSwKCQkJXTsKCQl9CgoJCWlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CgkJCWNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7CgkJCWNvbnN0IHBhcnNlZCA9IHRyaW1tZWQuc3RhcnRzV2l0aCgiIyIpCgkJCQk/IHBhcnNlSGV4Q29sb3IodHJpbW1lZCkKCQkJCTogcGFyc2VDc3NDb2xvcih0cmltbWVkKTsKCQkJcmV0dXJuIHBhcnNlZCA/PyBmYWxsYmFjazsKCQl9CgoJCWlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gMykgewoJCQlyZXR1cm4gbm9ybWFsaXplVHJpcGxldCh2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTsKCQl9CgoJCWlmICgKCQkJdmFsdWUgJiYKCQkJdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJCQkiciIgaW4gdmFsdWUgJiYKCQkJImciIGluIHZhbHVlICYmCgkJCSJiIiBpbiB2YWx1ZQoJCSkgewoJCQljb25zdCByZ2IgPSB2YWx1ZSBhcyB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQocmdiLnIsIHJnYi5nLCByZ2IuYik7CgkJfQoKCQlyZXR1cm4gZmFsbGJhY2s7Cgl9OwoKCWNvbnN0IHRvTGluZWFyUmdiID0gKAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4gewoJCWNvbnN0IFtyLCBnLCBiXSA9IHRvUmdiKHZhbHVlLCBmYWxsYmFjayk7CgkJcmV0dXJuIFtzcmdiVG9MaW5lYXIociksIHNyZ2JUb0xpbmVhcihnKSwgc3JnYlRvTGluZWFyKGIpXTsKCX07CgoJY29uc3QgZGVmYXVsdEZyZXNuZWxDb25maWc6IFJlcXVpcmVkPEZyZXNuZWxDb25maWc+ID0gewoJCWNvbG9yOiAiIzExMTExMyIsCgkJcmltQ29sb3I6ICIjRkY2OTAwIiwKCQlyaW1Qb3dlcjogNiwKCQlyaW1JbnRlbnNpdHk6IDEuNSwKCX07CgoJY29uc3QgY3JlYXRlUm91bmRlZEJveEdlb21ldHJ5ID0gKAoJCWdsOiBSZW5kZXJlclsiZ2wiXSwKCQljdWJlU2l6ZTogbnVtYmVyLAoJCWN1YmVSYWRpdXM6IG51bWJlciwKCSkgPT4gewoJCWNvbnN0IHNlZ21lbnRzID0gMjA7CgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgQm94KGdsLCB7CgkJCXdpZHRoOiBjdWJlU2l6ZSwKCQkJaGVpZ2h0OiBjdWJlU2l6ZSwKCQkJZGVwdGg6IGN1YmVTaXplLAoJCQl3aWR0aFNlZ21lbnRzOiBzZWdtZW50cywKCQkJaGVpZ2h0U2VnbWVudHM6IHNlZ21lbnRzLAoJCQlkZXB0aFNlZ21lbnRzOiBzZWdtZW50cywKCQl9KTsKCgkJY29uc3QgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKCQljb25zdCBub3JtYWxBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7CgkJY29uc3QgcG9zaXRpb25zID0gcG9zaXRpb25BdHRyLmRhdGEgYXMgRmxvYXQzMkFycmF5OwoJCWNvbnN0IG5vcm1hbHMgPSBub3JtYWxBdHRyLmRhdGEgYXMgRmxvYXQzMkFycmF5OwoKCQljb25zdCBoYWxmID0gY3ViZVNpemUgKiAwLjU7CgkJY29uc3Qgcm91bmRlZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1YmVSYWRpdXMsIGhhbGYpKTsKCQljb25zdCBpbm5lciA9IE1hdGgubWF4KDAsIGhhbGYgLSByb3VuZGVkKTsKCgkJZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpICs9IDMpIHsKCQkJY29uc3QgeCA9IHBvc2l0aW9uc1tpXTsKCQkJY29uc3QgeSA9IHBvc2l0aW9uc1tpICsgMV07CgkJCWNvbnN0IHogPSBwb3NpdGlvbnNbaSArIDJdOwoKCQkJY29uc3Qgc3ggPSB4IDwgMCA/IC0xIDogMTsKCQkJY29uc3Qgc3kgPSB5IDwgMCA/IC0xIDogMTsKCQkJY29uc3Qgc3ogPSB6IDwgMCA/IC0xIDogMTsKCgkJCWNvbnN0IGF4ID0gTWF0aC5hYnMoeCk7CgkJCWNvbnN0IGF5ID0gTWF0aC5hYnMoeSk7CgkJCWNvbnN0IGF6ID0gTWF0aC5hYnMoeik7CgoJCQljb25zdCBxeCA9IE1hdGgubWF4KGF4IC0gaW5uZXIsIDApOwoJCQljb25zdCBxeSA9IE1hdGgubWF4KGF5IC0gaW5uZXIsIDApOwoJCQljb25zdCBxeiA9IE1hdGgubWF4KGF6IC0gaW5uZXIsIDApOwoJCQljb25zdCBxTGVuID0gTWF0aC5oeXBvdChxeCwgcXksIHF6KTsKCgkJCWxldCBueCA9IDA7CgkJCWxldCBueSA9IDA7CgkJCWxldCBueiA9IDA7CgoJCQlpZiAocUxlbiA+IDFlLTYpIHsKCQkJCW54ID0gcXggLyBxTGVuOwoJCQkJbnkgPSBxeSAvIHFMZW47CgkJCQlueiA9IHF6IC8gcUxlbjsKCQkJfSBlbHNlIHsKCQkJCWlmIChheCA+PSBheSAmJiBheCA+PSBheikgbnggPSAxOwoJCQkJZWxzZSBpZiAoYXkgPj0gYXggJiYgYXkgPj0gYXopIG55ID0gMTsKCQkJCWVsc2UgbnogPSAxOwoJCQl9CgoJCQlub3JtYWxzW2ldID0gbnggKiBzeDsKCQkJbm9ybWFsc1tpICsgMV0gPSBueSAqIHN5OwoJCQlub3JtYWxzW2kgKyAyXSA9IG56ICogc3o7CgoJCQlwb3NpdGlvbnNbaV0gPSBzeCAqIGlubmVyICsgbnggKiBzeCAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMV0gPSBzeSAqIGlubmVyICsgbnkgKiBzeSAqIHJvdW5kZWQ7CgkJCXBvc2l0aW9uc1tpICsgMl0gPSBzeiAqIGlubmVyICsgbnogKiBzeiAqIHJvdW5kZWQ7CgkJfQoKCQlwb3NpdGlvbkF0dHIubmVlZHNVcGRhdGUgPSB0cnVlOwoJCW5vcm1hbEF0dHIubmVlZHNVcGRhdGUgPSB0cnVlOwoJCXJldHVybiBnZW9tZXRyeTsKCX07CgoJbGV0IGNhbnZhcyA9ICRzdGF0ZTxIVE1MQ2FudmFzRWxlbWVudD4oKTsKCWxldCBzZXREaW1lbnNpb25zID0KCQkkc3RhdGU8KG5leHQ6IHsgc2l6ZTogbnVtYmVyOyBnYXA6IG51bWJlcjsgcmFkaXVzOiBudW1iZXIgfSkgPT4gdm9pZD4oKTsKCWxldCBzZXRGcmVzbmVsVW5pZm9ybXMgPSAkc3RhdGU8KGNvbmZpZzogRnJlc25lbENvbmZpZykgPT4gdm9pZD4oKTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldERpbWVuc2lvbnMpIHJldHVybjsKCQlzZXREaW1lbnNpb25zKHsgc2l6ZSwgZ2FwLCByYWRpdXMgfSk7Cgl9KTsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXNldEZyZXNuZWxVbmlmb3JtcykgcmV0dXJuOwoJCXNldEZyZXNuZWxVbmlmb3JtcyhmcmVzbmVsQ29uZmlnID8/IHt9KTsKCX0pOwoKCW9uTW91bnQoKCkgPT4gewoJCWNvbnN0IHRhcmdldENhbnZhcyA9IGNhbnZhczsKCQlpZiAoIXRhcmdldENhbnZhcykgcmV0dXJuOwoKCQljb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih7CgkJCWNhbnZhczogdGFyZ2V0Q2FudmFzLAoJCQlhbHBoYTogdHJ1ZSwKCQkJYW50aWFsaWFzOiB0cnVlLAoJCQlkcHI6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxLAoJCX0pOwoJCWNvbnN0IGdsID0gcmVuZGVyZXIuZ2w7CgkJZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKCgkJY29uc3QgY2FtZXJhID0gbmV3IENhbWVyYShnbCwgewoJCQlmb3Y6IDU1LAoJCQlhc3BlY3Q6IDEsCgkJCW5lYXI6IDAuMSwKCQkJZmFyOiAxMDAsCgkJfSk7CgkJY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAxMCk7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IG1haW5Hcm91cCA9IG5ldyBUcmFuc2Zvcm0oKTsKCQltYWluR3JvdXAuc2V0UGFyZW50KHNjZW5lKTsKCQljb25zdCBsYXllckdyb3VwID0gbmV3IFRyYW5zZm9ybSgpOwoJCWxheWVyR3JvdXAuc2V0UGFyZW50KG1haW5Hcm91cCk7CgoJCWNvbnN0IG9yYml0ID0gbmV3IE9yYml0KGNhbWVyYSwgewoJCQllbGVtZW50OiB0YXJnZXRDYW52YXMsCgkJCWVuYWJsZVpvb206IGZhbHNlLAoJCQl0YXJnZXQ6IG5ldyBWZWMzKDAsIDAsIDApLAoJCQllYXNlOiAwLjE1LAoJCQlpbmVydGlhOiAwLjg1LAoJCX0pOwoKCQlsZXQgY3ViZVNpemUgPSBzaXplOwoJCWxldCBjdWJlR2FwID0gZ2FwOwoJCWxldCBjdWJlUmFkaXVzID0gcmFkaXVzOwoKCQlsZXQgZ2VvbWV0cnkgPSBjcmVhdGVSb3VuZGVkQm94R2VvbWV0cnkoZ2wsIGN1YmVTaXplLCBjdWJlUmFkaXVzKTsKCgkJY29uc3QgdW5pZm9ybXMgPSB7CgkJCWNvbG9yOiB7IHZhbHVlOiBuZXcgVmVjMygxNyAvIDI1NSwgMTcgLyAyNTUsIDE5IC8gMjU1KSB9LAoJCQlyaW1Db2xvcjogeyB2YWx1ZTogbmV3IFZlYzMoMSwgMTA1IC8gMjU1LCAwKSB9LAoJCQlyaW1Qb3dlcjogeyB2YWx1ZTogNiB9LAoJCQlyaW1JbnRlbnNpdHk6IHsgdmFsdWU6IDEuNSB9LAoJCX07CgoJCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJCWF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsKCgkJCXVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7CgkJCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJCQl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwoKCQkJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkJCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwoKCQkJdm9pZCBtYWluKCkgewoJCQkJdk5vcm1hbCA9IG5vcm1hbGl6ZShub3JtYWxNYXRyaXggKiBub3JtYWwpOwoJCQkJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTsKCQkJCXZWaWV3UG9zaXRpb24gPSAtbXZQb3NpdGlvbi54eXo7CgkJCQlnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJCQl9CgkJYDsKCgkJY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBgCgkJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCgkJCXVuaWZvcm0gdmVjMyBjb2xvcjsKCQkJdW5pZm9ybSB2ZWMzIHJpbUNvbG9yOwoJCQl1bmlmb3JtIGZsb2F0IHJpbVBvd2VyOwoJCQl1bmlmb3JtIGZsb2F0IHJpbUludGVuc2l0eTsKCgkJCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJCQl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKCgkJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJCXZlYzMgc2FmZSA9IG1heChjb2xvciwgdmVjMygwLjApKTsKCQkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQkJdmVjMyBjdXRvZmYgPSBzdGVwKHZlYzMoMC4wMDMxMzA4KSwgc2FmZSk7CgkJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoJCQkJdmVjMyBub3JtYWwgPSBub3JtYWxpemUodk5vcm1hbCk7CgkJCQl2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUodlZpZXdQb3NpdGlvbik7CgkJCQlmbG9hdCByaW0gPSAxLjAgLSBtYXgoMC4wLCBkb3Qobm9ybWFsLCB2aWV3RGlyKSk7CgkJCQlyaW0gPSBwb3cocmltLCByaW1Qb3dlcikgKiByaW1JbnRlbnNpdHk7CgkJCQl2ZWMzIGZpbmFsQ29sb3IgPSBjb2xvciArIHJpbUNvbG9yICogcmltOwoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNChsaW5lYXJUb1NyZ2IoZmluYWxDb2xvciksIDEuMCk7CgkJCX0KCQlgOwoKCQljb25zdCBtYXRlcmlhbCA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zLAoJCQl0cmFuc3BhcmVudDogZmFsc2UsCgkJCWRlcHRoVGVzdDogdHJ1ZSwKCQkJZGVwdGhXcml0ZTogdHJ1ZSwKCQl9KTsKCgkJY29uc3QgY29vcmRzID0gWy0xLCAwLCAxXTsKCQljb25zdCBjdWJlczogQ3ViZVN0YXRlW10gPSBbXTsKCQlmb3IgKGNvbnN0IHggb2YgY29vcmRzKSB7CgkJCWZvciAoY29uc3QgeSBvZiBjb29yZHMpIHsKCQkJCWZvciAoY29uc3QgeiBvZiBjb29yZHMpIHsKCQkJCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsKCQkJCQkJZ2VvbWV0cnksCgkJCQkJCXByb2dyYW06IG1hdGVyaWFsLAoJCQkJCQlmcnVzdHVtQ3VsbGVkOiBmYWxzZSwKCQkJCQl9KTsKCQkJCQltZXNoLnNldFBhcmVudChtYWluR3JvdXApOwoKCQkJCQljb25zdCBjdWJlOiBDdWJlU3RhdGUgPSB7CgkJCQkJCWlkOiBgY3ViZS0ke3h9LSR7eX0tJHt6fWAsCgkJCQkJCXBvc2l0aW9uOiBuZXcgVmVjMyh4LCB5LCB6KSwKCQkJCQkJcXVhdGVybmlvbjogbmV3IFF1YXQoKSwKCQkJCQkJbWVzaCwKCQkJCQl9OwoJCQkJCWN1YmVzLnB1c2goY3ViZSk7CgkJCQl9CgkJCX0KCQl9CgoJCWNvbnN0IHVwZGF0ZUN1YmVUcmFuc2Zvcm0gPSAoY3ViZTogQ3ViZVN0YXRlKSA9PiB7CgkJCWNvbnN0IHNwYWNpbmcgPSBjdWJlU2l6ZSArIGN1YmVHYXA7CgkJCWN1YmUubWVzaC5wb3NpdGlvbi5zZXQoCgkJCQljdWJlLnBvc2l0aW9uLnggKiBzcGFjaW5nLAoJCQkJY3ViZS5wb3NpdGlvbi55ICogc3BhY2luZywKCQkJCWN1YmUucG9zaXRpb24ueiAqIHNwYWNpbmcsCgkJCSk7CgkJCWN1YmUubWVzaC5xdWF0ZXJuaW9uLmNvcHkoY3ViZS5xdWF0ZXJuaW9uKTsKCQl9OwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB1cGRhdGVDdWJlVHJhbnNmb3JtKGN1YmVzW2ldKTsKCgkJbGV0IGFjdGl2ZUxheWVyU2V0ID0gbmV3IFN2ZWx0ZVNldDxzdHJpbmc+KCk7CgkJbGV0IGN1cnJlbnRNb3ZlOiBNb3ZlIHwgbnVsbCA9IG51bGw7CgkJbGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7CgkJbGV0IGN1cnJlbnRSb3RhdGlvblByb2dyZXNzID0gMDsKCQlsZXQgbGFzdE1vdmVBeGlzOiBNb3ZlWyJheGlzIl0gfCBudWxsID0gbnVsbDsKCQlsZXQgdGltZVNpbmNlTGFzdE1vdmUgPSAwOwoKCQljb25zdCByb3RhdGlvbk1hdHJpeCA9IG5ldyBNYXQ0KCk7CgkJY29uc3QgdGVtcFF1YXQgPSBuZXcgUXVhdCgpOwoJCWNvbnN0IGRlbHRhUXVhdCA9IG5ldyBRdWF0KCk7CgkJY29uc3QgYXhpc1ZlYyA9IG5ldyBWZWMzKCk7CgoJCWNvbnN0IGNyZWF0ZVJvdGF0aW9uTWF0cml4ID0gKGF4aXM6IE1vdmVbImF4aXMiXSwgYW5nbGU6IG51bWJlcikgPT4gewoJCQlheGlzVmVjLnNldCgKCQkJCWF4aXMgPT09ICJ4IiA/IDEgOiAwLAoJCQkJYXhpcyA9PT0gInkiID8gMSA6IDAsCgkJCQlheGlzID09PSAieiIgPyAxIDogMCwKCQkJKTsKCQkJdGVtcFF1YXQuZnJvbUF4aXNBbmdsZShheGlzVmVjLCBhbmdsZSk7CgkJCXJvdGF0aW9uTWF0cml4LmlkZW50aXR5KCkuZnJvbVF1YXRlcm5pb24odGVtcFF1YXQpOwoJCQlyZXR1cm4gcm90YXRpb25NYXRyaXg7CgkJfTsKCgkJY29uc3QgcmVzZXRMYXllckdyb3VwaW5nID0gKCkgPT4gewoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQljdWJlc1tpXS5tZXNoLnNldFBhcmVudChtYWluR3JvdXApOwoJCQl9CgkJCWFjdGl2ZUxheWVyU2V0ID0gbmV3IFN2ZWx0ZVNldCgpOwoJCQlsYXllckdyb3VwLnJvdGF0aW9uLnNldCgwLCAwLCAwKTsKCQl9OwoKCQljb25zdCBzZWxlY3RBY3RpdmVMYXllciA9IChtb3ZlOiBNb3ZlKSA9PiB7CgkJCWFjdGl2ZUxheWVyU2V0ID0gbmV3IFN2ZWx0ZVNldCgpOwoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQljb25zdCBjdWJlID0gY3ViZXNbaV07CgkJCQlpZiAoTWF0aC5yb3VuZChjdWJlLnBvc2l0aW9uW21vdmUuYXhpc10pID09PSBtb3ZlLmxheWVyKSB7CgkJCQkJYWN0aXZlTGF5ZXJTZXQuYWRkKGN1YmUuaWQpOwoJCQkJCWN1YmUubWVzaC5zZXRQYXJlbnQobGF5ZXJHcm91cCk7CgkJCQl9IGVsc2UgewoJCQkJCWN1YmUubWVzaC5zZXRQYXJlbnQobWFpbkdyb3VwKTsKCQkJCX0KCQkJfQoJCQlsYXllckdyb3VwLnJvdGF0aW9uLnNldCgwLCAwLCAwKTsKCQl9OwoKCQljb25zdCBjb21taXRNb3ZlID0gKCkgPT4gewoJCQlpZiAoIWN1cnJlbnRNb3ZlKSByZXR1cm47CgoJCQljb25zdCBtb3ZlID0gY3VycmVudE1vdmU7CgkJCWNvbnN0IGFuZ2xlID0gKG1vdmUucm90YXRpb25BbmdsZSB8fCBNYXRoLlBJIC8gMikgKiBtb3ZlLmRpcmVjdGlvbjsKCQkJY29uc3QgbWF0cml4ID0gY3JlYXRlUm90YXRpb25NYXRyaXgobW92ZS5heGlzLCBhbmdsZSk7CgkJCWF4aXNWZWMuc2V0KAoJCQkJbW92ZS5heGlzID09PSAieCIgPyAxIDogMCwKCQkJCW1vdmUuYXhpcyA9PT0gInkiID8gMSA6IDAsCgkJCQltb3ZlLmF4aXMgPT09ICJ6IiA/IDEgOiAwLAoJCQkpOwoJCQlkZWx0YVF1YXQuZnJvbUF4aXNBbmdsZShheGlzVmVjLCBhbmdsZSk7CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQljb25zdCBjdWJlID0gY3ViZXNbaV07CgkJCQlpZiAoIWFjdGl2ZUxheWVyU2V0LmhhcyhjdWJlLmlkKSkgY29udGludWU7CgoJCQkJY3ViZS5wb3NpdGlvbi5hcHBseU1hdHJpeDQobWF0cml4KTsKCQkJCWN1YmUucG9zaXRpb24uc2V0KAoJCQkJCU1hdGgucm91bmQoY3ViZS5wb3NpdGlvbi54KSwKCQkJCQlNYXRoLnJvdW5kKGN1YmUucG9zaXRpb24ueSksCgkJCQkJTWF0aC5yb3VuZChjdWJlLnBvc2l0aW9uLnopLAoJCQkJKTsKCgkJCQl0ZW1wUXVhdC5tdWx0aXBseShkZWx0YVF1YXQsIGN1YmUucXVhdGVybmlvbik7CgkJCQljdWJlLnF1YXRlcm5pb24uY29weSh0ZW1wUXVhdCkubm9ybWFsaXplKCk7CgkJCQl1cGRhdGVDdWJlVHJhbnNmb3JtKGN1YmUpOwoJCQl9CgoJCQlyZXNldExheWVyR3JvdXBpbmcoKTsKCQkJaXNBbmltYXRpbmcgPSBmYWxzZTsKCQkJY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MgPSAwOwoJCQljdXJyZW50TW92ZSA9IG51bGw7CgkJCXRpbWVTaW5jZUxhc3RNb3ZlID0gMDsKCQl9OwoKCQljb25zdCBiZWdpbk1vdmUgPSAobW92ZTogTW92ZSkgPT4gewoJCQlpZiAoaXNBbmltYXRpbmcpIHJldHVybjsKCQkJY3VycmVudE1vdmUgPSB7IC4uLm1vdmUsIHJvdGF0aW9uQW5nbGU6IE1hdGguUEkgLyAyIH07CgkJCXNlbGVjdEFjdGl2ZUxheWVyKGN1cnJlbnRNb3ZlKTsKCQkJaXNBbmltYXRpbmcgPSB0cnVlOwoJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyA9IDA7CgkJCWxhc3RNb3ZlQXhpcyA9IG1vdmUuYXhpczsKCQl9OwoKCQljb25zdCBzZWxlY3ROZXh0TW92ZSA9ICgpID0+IHsKCQkJY29uc3QgbW92ZXMgPSBQT1NTSUJMRV9NT1ZFUy5maWx0ZXIoKG0pID0+IG0uYXhpcyAhPT0gbGFzdE1vdmVBeGlzKTsKCQkJaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJCQljb25zdCBtb3ZlID0gbW92ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbW92ZXMubGVuZ3RoKV07CgkJCWJlZ2luTW92ZShtb3ZlKTsKCQl9OwoKCQljb25zdCBhcHBseUZyZXNuZWxDb25maWcgPSAoY29uZmlnOiBGcmVzbmVsQ29uZmlnKSA9PiB7CgkJCWNvbnN0IG5leHQgPSB7CgkJCQkuLi5kZWZhdWx0RnJlc25lbENvbmZpZywKCQkJCS4uLmNvbmZpZywKCQkJfTsKCQkJY29uc3QgW2NyLCBjZywgY2JdID0gdG9MaW5lYXJSZ2IobmV4dC5jb2xvciwgWwoJCQkJMTcgLyAyNTUsCgkJCQkxNyAvIDI1NSwKCQkJCTE5IC8gMjU1LAoJCQldKTsKCQkJY29uc3QgW3JyLCByZywgcmJdID0gdG9MaW5lYXJSZ2IobmV4dC5yaW1Db2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCQl1bmlmb3Jtcy5jb2xvci52YWx1ZS5zZXQoY3IsIGNnLCBjYik7CgkJCXVuaWZvcm1zLnJpbUNvbG9yLnZhbHVlLnNldChyciwgcmcsIHJiKTsKCQkJdW5pZm9ybXMucmltUG93ZXIudmFsdWUgPSBuZXh0LnJpbVBvd2VyOwoJCQl1bmlmb3Jtcy5yaW1JbnRlbnNpdHkudmFsdWUgPSBuZXh0LnJpbUludGVuc2l0eTsKCQl9OwoJCXNldEZyZXNuZWxVbmlmb3JtcyA9IGFwcGx5RnJlc25lbENvbmZpZzsKCQlhcHBseUZyZXNuZWxDb25maWcoZnJlc25lbENvbmZpZyA/PyB7fSk7CgoJCWNvbnN0IGFwcGx5RGltZW5zaW9ucyA9IChuZXh0OiB7CgkJCXNpemU6IG51bWJlcjsKCQkJZ2FwOiBudW1iZXI7CgkJCXJhZGl1czogbnVtYmVyOwoJCX0pID0+IHsKCQkJY29uc3QgbmV4dFNpemUgPSBNYXRoLm1heCgwLjAwMDEsIG5leHQuc2l6ZSk7CgkJCWNvbnN0IG5leHRHYXAgPSBNYXRoLm1heCgwLCBuZXh0LmdhcCk7CgkJCWNvbnN0IG5leHRSYWRpdXMgPSBNYXRoLm1heCgwLCBuZXh0LnJhZGl1cyk7CgoJCQljb25zdCBzaG91bGRSZWJ1aWxkID0KCQkJCW5leHRTaXplICE9PSBjdWJlU2l6ZSB8fCBNYXRoLmFicyhuZXh0UmFkaXVzIC0gY3ViZVJhZGl1cykgPiAxZS02OwoKCQkJY3ViZVNpemUgPSBuZXh0U2l6ZTsKCQkJY3ViZUdhcCA9IG5leHRHYXA7CgkJCWN1YmVSYWRpdXMgPSBuZXh0UmFkaXVzOwoKCQkJaWYgKHNob3VsZFJlYnVpbGQpIHsKCQkJCWNvbnN0IHByZXYgPSBnZW9tZXRyeTsKCQkJCWdlb21ldHJ5ID0gY3JlYXRlUm91bmRlZEJveEdlb21ldHJ5KGdsLCBjdWJlU2l6ZSwgY3ViZVJhZGl1cyk7CgkJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJY3ViZXNbaV0ubWVzaC5nZW9tZXRyeSA9IGdlb21ldHJ5OwoJCQkJfQoJCQkJcHJldi5yZW1vdmUoKTsKCQkJfQoKCQkJZm9yIChsZXQgaSA9IDA7IGkgPCBjdWJlcy5sZW5ndGg7IGkrKykgewoJCQkJdXBkYXRlQ3ViZVRyYW5zZm9ybShjdWJlc1tpXSk7CgkJCX0KCQl9OwoJCXNldERpbWVuc2lvbnMgPSBhcHBseURpbWVuc2lvbnM7CgkJYXBwbHlEaW1lbnNpb25zKHsgc2l6ZSwgZ2FwLCByYWRpdXMgfSk7CgoJCWNvbnN0IHJlc2l6ZSA9ICgpID0+IHsKCQkJY29uc3QgaG9zdCA9IHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50ID8/IHRhcmdldENhbnZhczsKCQkJY29uc3QgeyB3aWR0aDogaG9zdFdpZHRoLCBoZWlnaHQ6IGhvc3RIZWlnaHQgfSA9CgkJCQlob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwoJCQljb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdFdpZHRoKSk7CgkJCWNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoaG9zdEhlaWdodCkpOwoJCQlyZW5kZXJlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwoJCQljYW1lcmEucGVyc3BlY3RpdmUoewoJCQkJZm92OiA1NSwKCQkJCWFzcGVjdDogd2lkdGggLyBNYXRoLm1heCgxLCBoZWlnaHQpLAoJCQkJbmVhcjogMC4xLAoJCQkJZmFyOiAxMDAsCgkJCX0pOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCgkJCW1haW5Hcm91cC5yb3RhdGlvbi54ICs9IGRlbHRhICogMC4zOwoJCQltYWluR3JvdXAucm90YXRpb24ueSArPSBkZWx0YSAqIDAuNTsKCQkJbWFpbkdyb3VwLnJvdGF0aW9uLnogKz0gZGVsdGEgKiAwLjI7CgoJCQlvcmJpdC51cGRhdGUoKTsKCgkJCWlmIChpc0FuaW1hdGluZyAmJiBjdXJyZW50TW92ZSkgewoJCQkJY29uc3QgcHJvZ3Jlc3NJbmMgPSBkZWx0YSAvIE1hdGgubWF4KDAuMDAwMSwgZHVyYXRpb24pOwoJCQkJY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MgPSBNYXRoLm1pbigKCQkJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyArIHByb2dyZXNzSW5jLAoJCQkJCTEsCgkJCQkpOwoKCQkJCWNvbnN0IGVhc2VkID0gZWFzZUluT3V0Q3ViaWMoY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MpOwoJCQkJY29uc3QgYW5nbGUgPQoJCQkJCWVhc2VkICoKCQkJCQkoY3VycmVudE1vdmUucm90YXRpb25BbmdsZSB8fCBNYXRoLlBJIC8gMikgKgoJCQkJCWN1cnJlbnRNb3ZlLmRpcmVjdGlvbjsKCgkJCQlpZiAoY3VycmVudE1vdmUuYXhpcyA9PT0gIngiKSBsYXllckdyb3VwLnJvdGF0aW9uLnggPSBhbmdsZTsKCQkJCWVsc2UgaWYgKGN1cnJlbnRNb3ZlLmF4aXMgPT09ICJ5IikgbGF5ZXJHcm91cC5yb3RhdGlvbi55ID0gYW5nbGU7CgkJCQllbHNlIGxheWVyR3JvdXAucm90YXRpb24ueiA9IGFuZ2xlOwoKCQkJCWlmIChjdXJyZW50Um90YXRpb25Qcm9ncmVzcyA+PSAxKSB7CgkJCQkJY29tbWl0TW92ZSgpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJdGltZVNpbmNlTGFzdE1vdmUgKz0gZGVsdGE7CgkJCQlpZiAodGltZVNpbmNlTGFzdE1vdmUgPiAwLjQpIHsKCQkJCQlzZWxlY3ROZXh0TW92ZSgpOwoJCQkJfQoJCQl9CgoJCQlyZW5kZXJlci5yZW5kZXIoeyBzY2VuZSwgY2FtZXJhLCBjbGVhcjogdHJ1ZSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCQlvcmJpdC5yZW1vdmUoKTsKCQkJc2V0RGltZW5zaW9ucyA9IHVuZGVmaW5lZDsKCQkJc2V0RnJlc25lbFVuaWZvcm1zID0gdW5kZWZpbmVkOwoKCQkJbWF0ZXJpYWwucmVtb3ZlKCk7CgkJCWdlb21ldHJ5LnJlbW92ZSgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", + "components/rubiks-cube/RubiksCubeScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IFN2ZWx0ZVNldCB9IGZyb20gInN2ZWx0ZS9yZWFjdGl2aXR5IjsKCWltcG9ydCB7CgkJQm94LAoJCUNhbWVyYSwKCQlNYXQ0LAoJCU1lc2gsCgkJT3JiaXQsCgkJUHJvZ3JhbSwKCQlRdWF0LAoJCVJlbmRlcmVyLAoJCVRyYW5zZm9ybSwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoJaW1wb3J0IHsgdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uLCB0b0xpbmVhclJnYiB9IGZyb20gIi4uL2hlbHBlcnMvY29sb3IiOwoKCWludGVyZmFjZSBGcmVzbmVsQ29uZmlnIHsKCQkvKioKCQkgKiBCYXNlIGJvZHkgY29sb3IgZm9yIGVhY2ggY3ViZWxldC4KCQkgKiBAZGVmYXVsdCAiIzExMTExMyIKCQkgKi8KCQljb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQWNjZW50IGNvbG9yIGFwcGxpZWQgYnkgdGhlIEZyZXNuZWwgcmltLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCXJpbUNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBDb250cm9scyBob3cgdGlnaHQgdGhlIEZyZXNuZWwgcmltIGh1ZyBpcy4KCQkgKiBIaWdoZXIgdmFsdWVzIHlpZWxkIGEgdGhpbm5lciBvdXRsaW5lLgoJCSAqIEBkZWZhdWx0IDYKCQkgKi8KCQlyaW1Qb3dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBJbnRlbnNpdHkgbXVsdGlwbGllciBmb3IgdGhlIEZyZXNuZWwgcmltIGNvbG9yLgoJCSAqIEBkZWZhdWx0IDEuNQoJCSAqLwoJCXJpbUludGVuc2l0eT86IG51bWJlcjsKCX0KCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIFNpemUgb2YgYW4gaW5kaXZpZHVhbCBjdWJlbGV0IGVkZ2UuCgkJICogQGRlZmF1bHQgMQoJCSAqLwoJCXNpemU6IG51bWJlcjsKCQkvKioKCQkgKiBTZWNvbmRzIGl0IHRha2VzIHRvIGNvbXBsZXRlIGEgZmFjZSByb3RhdGlvbi4KCQkgKiBAZGVmYXVsdCAxLjUKCQkgKi8KCQlkdXJhdGlvbjogbnVtYmVyOwoJCS8qKgoJCSAqIEdhcCBiZXR3ZWVuIGN1YmVsZXRzIHRvIGFjY2VudHVhdGUgc2VwYXJhdGlvbi4KCQkgKiBAZGVmYXVsdCAwLjAxNQoJCSAqLwoJCWdhcDogbnVtYmVyOwoJCS8qKgoJCSAqIENvcm5lciByYWRpdXMgZm9yIHNvZnRlbmVkIGN1YmUgZWRnZXMuCgkJICogQGRlZmF1bHQgMC4xMjUKCQkgKi8KCQlyYWRpdXM6IG51bWJlcjsKCQkvKioKCQkgKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIHRoZSBGcmVzbmVsIHNoYWRlciB1bmlmb3Jtcy4KCQkgKi8KCQlmcmVzbmVsQ29uZmlnPzogRnJlc25lbENvbmZpZzsKCX0KCglsZXQgeyBzaXplLCBkdXJhdGlvbiwgZ2FwLCByYWRpdXMsIGZyZXNuZWxDb25maWcgPSB7fSB9OiBQcm9wcyA9ICRwcm9wcygpOwoKCXR5cGUgTW92ZSA9IHsKCQlheGlzOiAieCIgfCAieSIgfCAieiI7CgkJbGF5ZXI6IC0xIHwgMCB8IDE7CgkJZGlyZWN0aW9uOiAxIHwgLTE7CgkJcm90YXRpb25BbmdsZT86IG51bWJlcjsKCX07CgoJdHlwZSBDdWJlU3RhdGUgPSB7CgkJaWQ6IHN0cmluZzsKCQlwb3NpdGlvbjogVmVjMzsKCQlxdWF0ZXJuaW9uOiBRdWF0OwoJCW1lc2g6IE1lc2g7Cgl9OwoKCWNvbnN0IFBPU1NJQkxFX01PVkVTOiBNb3ZlW10gPSAoKCkgPT4gewoJCWNvbnN0IG1vdmVzOiBNb3ZlW10gPSBbXTsKCQlmb3IgKGNvbnN0IGF4aXMgb2YgWyJ4IiwgInkiLCAieiJdIGFzIGNvbnN0KSB7CgkJCWZvciAoY29uc3QgbGF5ZXIgb2YgWy0xLCAwLCAxXSBhcyBjb25zdCkgewoJCQkJZm9yIChjb25zdCBkaXJlY3Rpb24gb2YgWzEsIC0xXSBhcyBjb25zdCkgewoJCQkJCW1vdmVzLnB1c2goeyBheGlzLCBsYXllciwgZGlyZWN0aW9uIH0pOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBtb3ZlczsKCX0pKCk7CgoJY29uc3QgZWFzZUluT3V0Q3ViaWMgPSAodDogbnVtYmVyKSA9PgoJCXQgPCAwLjUgPyA0ICogdCAqIHQgKiB0IDogMSAtIE1hdGgucG93KC0yICogdCArIDIsIDMpIC8gMjsKCgljb25zdCBkZWZhdWx0RnJlc25lbENvbmZpZzogUmVxdWlyZWQ8RnJlc25lbENvbmZpZz4gPSB7CgkJY29sb3I6ICIjMTExMTEzIiwKCQlyaW1Db2xvcjogIiNGRjY5MDAiLAoJCXJpbVBvd2VyOiA2LAoJCXJpbUludGVuc2l0eTogMS41LAoJfTsKCgljb25zdCBjcmVhdGVSb3VuZGVkQm94R2VvbWV0cnkgPSAoCgkJZ2w6IFJlbmRlcmVyWyJnbCJdLAoJCWN1YmVTaXplOiBudW1iZXIsCgkJY3ViZVJhZGl1czogbnVtYmVyLAoJKSA9PiB7CgkJY29uc3Qgc2VnbWVudHMgPSAyMDsKCQljb25zdCBnZW9tZXRyeSA9IG5ldyBCb3goZ2wsIHsKCQkJd2lkdGg6IGN1YmVTaXplLAoJCQloZWlnaHQ6IGN1YmVTaXplLAoJCQlkZXB0aDogY3ViZVNpemUsCgkJCXdpZHRoU2VnbWVudHM6IHNlZ21lbnRzLAoJCQloZWlnaHRTZWdtZW50czogc2VnbWVudHMsCgkJCWRlcHRoU2VnbWVudHM6IHNlZ21lbnRzLAoJCX0pOwoKCQljb25zdCBwb3NpdGlvbkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOwoJCWNvbnN0IG5vcm1hbEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDsKCQljb25zdCBwb3NpdGlvbnMgPSBwb3NpdGlvbkF0dHIuZGF0YSBhcyBGbG9hdDMyQXJyYXk7CgkJY29uc3Qgbm9ybWFscyA9IG5vcm1hbEF0dHIuZGF0YSBhcyBGbG9hdDMyQXJyYXk7CgoJCWNvbnN0IGhhbGYgPSBjdWJlU2l6ZSAqIDAuNTsKCQljb25zdCByb3VuZGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3ViZVJhZGl1cywgaGFsZikpOwoJCWNvbnN0IGlubmVyID0gTWF0aC5tYXgoMCwgaGFsZiAtIHJvdW5kZWQpOwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkgKz0gMykgewoJCQljb25zdCB4ID0gcG9zaXRpb25zW2ldOwoJCQljb25zdCB5ID0gcG9zaXRpb25zW2kgKyAxXTsKCQkJY29uc3QgeiA9IHBvc2l0aW9uc1tpICsgMl07CgoJCQljb25zdCBzeCA9IHggPCAwID8gLTEgOiAxOwoJCQljb25zdCBzeSA9IHkgPCAwID8gLTEgOiAxOwoJCQljb25zdCBzeiA9IHogPCAwID8gLTEgOiAxOwoKCQkJY29uc3QgYXggPSBNYXRoLmFicyh4KTsKCQkJY29uc3QgYXkgPSBNYXRoLmFicyh5KTsKCQkJY29uc3QgYXogPSBNYXRoLmFicyh6KTsKCgkJCWNvbnN0IHF4ID0gTWF0aC5tYXgoYXggLSBpbm5lciwgMCk7CgkJCWNvbnN0IHF5ID0gTWF0aC5tYXgoYXkgLSBpbm5lciwgMCk7CgkJCWNvbnN0IHF6ID0gTWF0aC5tYXgoYXogLSBpbm5lciwgMCk7CgkJCWNvbnN0IHFMZW4gPSBNYXRoLmh5cG90KHF4LCBxeSwgcXopOwoKCQkJbGV0IG54ID0gMDsKCQkJbGV0IG55ID0gMDsKCQkJbGV0IG56ID0gMDsKCgkJCWlmIChxTGVuID4gMWUtNikgewoJCQkJbnggPSBxeCAvIHFMZW47CgkJCQlueSA9IHF5IC8gcUxlbjsKCQkJCW56ID0gcXogLyBxTGVuOwoJCQl9IGVsc2UgewoJCQkJaWYgKGF4ID49IGF5ICYmIGF4ID49IGF6KSBueCA9IDE7CgkJCQllbHNlIGlmIChheSA+PSBheCAmJiBheSA+PSBheikgbnkgPSAxOwoJCQkJZWxzZSBueiA9IDE7CgkJCX0KCgkJCW5vcm1hbHNbaV0gPSBueCAqIHN4OwoJCQlub3JtYWxzW2kgKyAxXSA9IG55ICogc3k7CgkJCW5vcm1hbHNbaSArIDJdID0gbnogKiBzejsKCgkJCXBvc2l0aW9uc1tpXSA9IHN4ICogaW5uZXIgKyBueCAqIHN4ICogcm91bmRlZDsKCQkJcG9zaXRpb25zW2kgKyAxXSA9IHN5ICogaW5uZXIgKyBueSAqIHN5ICogcm91bmRlZDsKCQkJcG9zaXRpb25zW2kgKyAyXSA9IHN6ICogaW5uZXIgKyBueiAqIHN6ICogcm91bmRlZDsKCQl9CgoJCXBvc2l0aW9uQXR0ci5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJbm9ybWFsQXR0ci5uZWVkc1VwZGF0ZSA9IHRydWU7CgkJcmV0dXJuIGdlb21ldHJ5OwoJfTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHNldERpbWVuc2lvbnMgPQoJCSRzdGF0ZTwobmV4dDogeyBzaXplOiBudW1iZXI7IGdhcDogbnVtYmVyOyByYWRpdXM6IG51bWJlciB9KSA9PiB2b2lkPigpOwoJbGV0IHNldEZyZXNuZWxVbmlmb3JtcyA9ICRzdGF0ZTwoY29uZmlnOiBGcmVzbmVsQ29uZmlnKSA9PiB2b2lkPigpOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0RGltZW5zaW9ucykgcmV0dXJuOwoJCXNldERpbWVuc2lvbnMoeyBzaXplLCBnYXAsIHJhZGl1cyB9KTsKCX0pOwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICghc2V0RnJlc25lbFVuaWZvcm1zKSByZXR1cm47CgkJc2V0RnJlc25lbFVuaWZvcm1zKGZyZXNuZWxDb25maWcgPz8ge30pOwoJfSk7CgoJb25Nb3VudCgoKSA9PiB7CgkJY29uc3QgdGFyZ2V0Q2FudmFzID0gY2FudmFzOwoJCWlmICghdGFyZ2V0Q2FudmFzKSByZXR1cm47CgoJCWNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHsKCQkJY2FudmFzOiB0YXJnZXRDYW52YXMsCgkJCWFscGhhOiB0cnVlLAoJCQlhbnRpYWxpYXM6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsLCB7CgkJCWZvdjogNTUsCgkJCWFzcGVjdDogMSwKCQkJbmVhcjogMC4xLAoJCQlmYXI6IDEwMCwKCQl9KTsKCQljYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDEwKTsKCgkJY29uc3Qgc2NlbmUgPSBuZXcgVHJhbnNmb3JtKCk7CgkJY29uc3QgbWFpbkdyb3VwID0gbmV3IFRyYW5zZm9ybSgpOwoJCW1haW5Hcm91cC5zZXRQYXJlbnQoc2NlbmUpOwoJCWNvbnN0IGxheWVyR3JvdXAgPSBuZXcgVHJhbnNmb3JtKCk7CgkJbGF5ZXJHcm91cC5zZXRQYXJlbnQobWFpbkdyb3VwKTsKCgkJY29uc3Qgb3JiaXQgPSBuZXcgT3JiaXQoY2FtZXJhLCB7CgkJCWVsZW1lbnQ6IHRhcmdldENhbnZhcywKCQkJZW5hYmxlWm9vbTogZmFsc2UsCgkJCXRhcmdldDogbmV3IFZlYzMoMCwgMCwgMCksCgkJCWVhc2U6IDAuMTUsCgkJCWluZXJ0aWE6IDAuODUsCgkJfSk7CgoJCWxldCBjdWJlU2l6ZSA9IHNpemU7CgkJbGV0IGN1YmVHYXAgPSBnYXA7CgkJbGV0IGN1YmVSYWRpdXMgPSByYWRpdXM7CgoJCWxldCBnZW9tZXRyeSA9IGNyZWF0ZVJvdW5kZWRCb3hHZW9tZXRyeShnbCwgY3ViZVNpemUsIGN1YmVSYWRpdXMpOwoKCQljb25zdCB1bmlmb3JtcyA9IHsKCQkJY29sb3I6IHsgdmFsdWU6IG5ldyBWZWMzKDE3IC8gMjU1LCAxNyAvIDI1NSwgMTkgLyAyNTUpIH0sCgkJCXJpbUNvbG9yOiB7IHZhbHVlOiBuZXcgVmVjMygxLCAxMDUgLyAyNTUsIDApIH0sCgkJCXJpbVBvd2VyOiB7IHZhbHVlOiA2IH0sCgkJCXJpbUludGVuc2l0eTogeyB2YWx1ZTogMS41IH0sCgkJfTsKCgkJY29uc3QgdmVydGV4U2hhZGVyID0gYAoJCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgoJCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQkJYXR0cmlidXRlIHZlYzMgbm9ybWFsOwoKCQkJdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsKCQkJdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7CgkJCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CgoJCQl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCQkJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CgoJCQl2b2lkIG1haW4oKSB7CgkJCQl2Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7CgkJCQl2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOwoJCQkJdlZpZXdQb3NpdGlvbiA9IC1tdlBvc2l0aW9uLnh5ejsKCQkJCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247CgkJCX0KCQlgOwoKCQljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQkJcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKCQkJdW5pZm9ybSB2ZWMzIGNvbG9yOwoJCQl1bmlmb3JtIHZlYzMgcmltQ29sb3I7CgkJCXVuaWZvcm0gZmxvYXQgcmltUG93ZXI7CgkJCXVuaWZvcm0gZmxvYXQgcmltSW50ZW5zaXR5OwoKCQkJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkJCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwoKCQkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQkJdmVjMyBsb3cgPSBzYWZlICogMTIuOTI7CgkJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJCXJldHVybiBtaXgobG93LCBoaWdoLCBjdXRvZmYpOwoJCQl9CgoJCQl2b2lkIG1haW4oKSB7CgkJCQl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Tm9ybWFsKTsKCQkJCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSh2Vmlld1Bvc2l0aW9uKTsKCQkJCWZsb2F0IHJpbSA9IDEuMCAtIG1heCgwLjAsIGRvdChub3JtYWwsIHZpZXdEaXIpKTsKCQkJCXJpbSA9IHBvdyhyaW0sIHJpbVBvd2VyKSAqIHJpbUludGVuc2l0eTsKCQkJCXZlYzMgZmluYWxDb2xvciA9IGNvbG9yICsgcmltQ29sb3IgKiByaW07CgkJCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpbmVhclRvU3JnYihmaW5hbENvbG9yKSwgMS4wKTsKCQkJfQoJCWA7CgoJCWNvbnN0IG1hdGVyaWFsID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXMsCgkJCXRyYW5zcGFyZW50OiBmYWxzZSwKCQkJZGVwdGhUZXN0OiB0cnVlLAoJCQlkZXB0aFdyaXRlOiB0cnVlLAoJCX0pOwoKCQljb25zdCBjb29yZHMgPSBbLTEsIDAsIDFdOwoJCWNvbnN0IGN1YmVzOiBDdWJlU3RhdGVbXSA9IFtdOwoJCWZvciAoY29uc3QgeCBvZiBjb29yZHMpIHsKCQkJZm9yIChjb25zdCB5IG9mIGNvb3JkcykgewoJCQkJZm9yIChjb25zdCB6IG9mIGNvb3JkcykgewoJCQkJCWNvbnN0IG1lc2ggPSBuZXcgTWVzaChnbCwgewoJCQkJCQlnZW9tZXRyeSwKCQkJCQkJcHJvZ3JhbTogbWF0ZXJpYWwsCgkJCQkJCWZydXN0dW1DdWxsZWQ6IGZhbHNlLAoJCQkJCX0pOwoJCQkJCW1lc2guc2V0UGFyZW50KG1haW5Hcm91cCk7CgoJCQkJCWNvbnN0IGN1YmU6IEN1YmVTdGF0ZSA9IHsKCQkJCQkJaWQ6IGBjdWJlLSR7eH0tJHt5fS0ke3p9YCwKCQkJCQkJcG9zaXRpb246IG5ldyBWZWMzKHgsIHksIHopLAoJCQkJCQlxdWF0ZXJuaW9uOiBuZXcgUXVhdCgpLAoJCQkJCQltZXNoLAoJCQkJCX07CgkJCQkJY3ViZXMucHVzaChjdWJlKTsKCQkJCX0KCQkJfQoJCX0KCgkJY29uc3QgdXBkYXRlQ3ViZVRyYW5zZm9ybSA9IChjdWJlOiBDdWJlU3RhdGUpID0+IHsKCQkJY29uc3Qgc3BhY2luZyA9IGN1YmVTaXplICsgY3ViZUdhcDsKCQkJY3ViZS5tZXNoLnBvc2l0aW9uLnNldCgKCQkJCWN1YmUucG9zaXRpb24ueCAqIHNwYWNpbmcsCgkJCQljdWJlLnBvc2l0aW9uLnkgKiBzcGFjaW5nLAoJCQkJY3ViZS5wb3NpdGlvbi56ICogc3BhY2luZywKCQkJKTsKCQkJY3ViZS5tZXNoLnF1YXRlcm5pb24uY29weShjdWJlLnF1YXRlcm5pb24pOwoJCX07CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgY3ViZXMubGVuZ3RoOyBpKyspIHVwZGF0ZUN1YmVUcmFuc2Zvcm0oY3ViZXNbaV0pOwoKCQlsZXQgYWN0aXZlTGF5ZXJTZXQgPSBuZXcgU3ZlbHRlU2V0PHN0cmluZz4oKTsKCQlsZXQgY3VycmVudE1vdmU6IE1vdmUgfCBudWxsID0gbnVsbDsKCQlsZXQgaXNBbmltYXRpbmcgPSBmYWxzZTsKCQlsZXQgY3VycmVudFJvdGF0aW9uUHJvZ3Jlc3MgPSAwOwoJCWxldCBsYXN0TW92ZUF4aXM6IE1vdmVbImF4aXMiXSB8IG51bGwgPSBudWxsOwoJCWxldCB0aW1lU2luY2VMYXN0TW92ZSA9IDA7CgoJCWNvbnN0IHJvdGF0aW9uTWF0cml4ID0gbmV3IE1hdDQoKTsKCQljb25zdCB0ZW1wUXVhdCA9IG5ldyBRdWF0KCk7CgkJY29uc3QgZGVsdGFRdWF0ID0gbmV3IFF1YXQoKTsKCQljb25zdCBheGlzVmVjID0gbmV3IFZlYzMoKTsKCgkJY29uc3QgY3JlYXRlUm90YXRpb25NYXRyaXggPSAoYXhpczogTW92ZVsiYXhpcyJdLCBhbmdsZTogbnVtYmVyKSA9PiB7CgkJCWF4aXNWZWMuc2V0KAoJCQkJYXhpcyA9PT0gIngiID8gMSA6IDAsCgkJCQlheGlzID09PSAieSIgPyAxIDogMCwKCQkJCWF4aXMgPT09ICJ6IiA/IDEgOiAwLAoJCQkpOwoJCQl0ZW1wUXVhdC5mcm9tQXhpc0FuZ2xlKGF4aXNWZWMsIGFuZ2xlKTsKCQkJcm90YXRpb25NYXRyaXguaWRlbnRpdHkoKS5mcm9tUXVhdGVybmlvbih0ZW1wUXVhdCk7CgkJCXJldHVybiByb3RhdGlvbk1hdHJpeDsKCQl9OwoKCQljb25zdCByZXNldExheWVyR3JvdXBpbmcgPSAoKSA9PiB7CgkJCWZvciAobGV0IGkgPSAwOyBpIDwgY3ViZXMubGVuZ3RoOyBpKyspIHsKCQkJCWN1YmVzW2ldLm1lc2guc2V0UGFyZW50KG1haW5Hcm91cCk7CgkJCX0KCQkJYWN0aXZlTGF5ZXJTZXQgPSBuZXcgU3ZlbHRlU2V0KCk7CgkJCWxheWVyR3JvdXAucm90YXRpb24uc2V0KDAsIDAsIDApOwoJCX07CgoJCWNvbnN0IHNlbGVjdEFjdGl2ZUxheWVyID0gKG1vdmU6IE1vdmUpID0+IHsKCQkJYWN0aXZlTGF5ZXJTZXQgPSBuZXcgU3ZlbHRlU2V0KCk7CgkJCWZvciAobGV0IGkgPSAwOyBpIDwgY3ViZXMubGVuZ3RoOyBpKyspIHsKCQkJCWNvbnN0IGN1YmUgPSBjdWJlc1tpXTsKCQkJCWlmIChNYXRoLnJvdW5kKGN1YmUucG9zaXRpb25bbW92ZS5heGlzXSkgPT09IG1vdmUubGF5ZXIpIHsKCQkJCQlhY3RpdmVMYXllclNldC5hZGQoY3ViZS5pZCk7CgkJCQkJY3ViZS5tZXNoLnNldFBhcmVudChsYXllckdyb3VwKTsKCQkJCX0gZWxzZSB7CgkJCQkJY3ViZS5tZXNoLnNldFBhcmVudChtYWluR3JvdXApOwoJCQkJfQoJCQl9CgkJCWxheWVyR3JvdXAucm90YXRpb24uc2V0KDAsIDAsIDApOwoJCX07CgoJCWNvbnN0IGNvbW1pdE1vdmUgPSAoKSA9PiB7CgkJCWlmICghY3VycmVudE1vdmUpIHJldHVybjsKCgkJCWNvbnN0IG1vdmUgPSBjdXJyZW50TW92ZTsKCQkJY29uc3QgYW5nbGUgPSAobW92ZS5yb3RhdGlvbkFuZ2xlIHx8IE1hdGguUEkgLyAyKSAqIG1vdmUuZGlyZWN0aW9uOwoJCQljb25zdCBtYXRyaXggPSBjcmVhdGVSb3RhdGlvbk1hdHJpeChtb3ZlLmF4aXMsIGFuZ2xlKTsKCQkJYXhpc1ZlYy5zZXQoCgkJCQltb3ZlLmF4aXMgPT09ICJ4IiA/IDEgOiAwLAoJCQkJbW92ZS5heGlzID09PSAieSIgPyAxIDogMCwKCQkJCW1vdmUuYXhpcyA9PT0gInoiID8gMSA6IDAsCgkJCSk7CgkJCWRlbHRhUXVhdC5mcm9tQXhpc0FuZ2xlKGF4aXNWZWMsIGFuZ2xlKTsKCgkJCWZvciAobGV0IGkgPSAwOyBpIDwgY3ViZXMubGVuZ3RoOyBpKyspIHsKCQkJCWNvbnN0IGN1YmUgPSBjdWJlc1tpXTsKCQkJCWlmICghYWN0aXZlTGF5ZXJTZXQuaGFzKGN1YmUuaWQpKSBjb250aW51ZTsKCgkJCQljdWJlLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtYXRyaXgpOwoJCQkJY3ViZS5wb3NpdGlvbi5zZXQoCgkJCQkJTWF0aC5yb3VuZChjdWJlLnBvc2l0aW9uLngpLAoJCQkJCU1hdGgucm91bmQoY3ViZS5wb3NpdGlvbi55KSwKCQkJCQlNYXRoLnJvdW5kKGN1YmUucG9zaXRpb24ueiksCgkJCQkpOwoKCQkJCXRlbXBRdWF0Lm11bHRpcGx5KGRlbHRhUXVhdCwgY3ViZS5xdWF0ZXJuaW9uKTsKCQkJCWN1YmUucXVhdGVybmlvbi5jb3B5KHRlbXBRdWF0KS5ub3JtYWxpemUoKTsKCQkJCXVwZGF0ZUN1YmVUcmFuc2Zvcm0oY3ViZSk7CgkJCX0KCgkJCXJlc2V0TGF5ZXJHcm91cGluZygpOwoJCQlpc0FuaW1hdGluZyA9IGZhbHNlOwoJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyA9IDA7CgkJCWN1cnJlbnRNb3ZlID0gbnVsbDsKCQkJdGltZVNpbmNlTGFzdE1vdmUgPSAwOwoJCX07CgoJCWNvbnN0IGJlZ2luTW92ZSA9IChtb3ZlOiBNb3ZlKSA9PiB7CgkJCWlmIChpc0FuaW1hdGluZykgcmV0dXJuOwoJCQljdXJyZW50TW92ZSA9IHsgLi4ubW92ZSwgcm90YXRpb25BbmdsZTogTWF0aC5QSSAvIDIgfTsKCQkJc2VsZWN0QWN0aXZlTGF5ZXIoY3VycmVudE1vdmUpOwoJCQlpc0FuaW1hdGluZyA9IHRydWU7CgkJCWN1cnJlbnRSb3RhdGlvblByb2dyZXNzID0gMDsKCQkJbGFzdE1vdmVBeGlzID0gbW92ZS5heGlzOwoJCX07CgoJCWNvbnN0IHNlbGVjdE5leHRNb3ZlID0gKCkgPT4gewoJCQljb25zdCBtb3ZlcyA9IFBPU1NJQkxFX01PVkVTLmZpbHRlcigobSkgPT4gbS5heGlzICE9PSBsYXN0TW92ZUF4aXMpOwoJCQlpZiAobW92ZXMubGVuZ3RoID09PSAwKSByZXR1cm47CgkJCWNvbnN0IG1vdmUgPSBtb3Zlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtb3Zlcy5sZW5ndGgpXTsKCQkJYmVnaW5Nb3ZlKG1vdmUpOwoJCX07CgoJCWNvbnN0IGFwcGx5RnJlc25lbENvbmZpZyA9IChjb25maWc6IEZyZXNuZWxDb25maWcpID0+IHsKCQkJY29uc3QgbmV4dCA9IHsKCQkJCS4uLmRlZmF1bHRGcmVzbmVsQ29uZmlnLAoJCQkJLi4uY29uZmlnLAoJCQl9OwoJCQljb25zdCBbY3IsIGNnLCBjYl0gPSB0b0xpbmVhclJnYihuZXh0LmNvbG9yLCBbCgkJCQkxNyAvIDI1NSwKCQkJCTE3IC8gMjU1LAoJCQkJMTkgLyAyNTUsCgkJCV0pOwoJCQljb25zdCBbcnIsIHJnLCByYl0gPSB0b0xpbmVhclJnYihuZXh0LnJpbUNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJCXVuaWZvcm1zLmNvbG9yLnZhbHVlLnNldChjciwgY2csIGNiKTsKCQkJdW5pZm9ybXMucmltQ29sb3IudmFsdWUuc2V0KHJyLCByZywgcmIpOwoJCQl1bmlmb3Jtcy5yaW1Qb3dlci52YWx1ZSA9IG5leHQucmltUG93ZXI7CgkJCXVuaWZvcm1zLnJpbUludGVuc2l0eS52YWx1ZSA9IG5leHQucmltSW50ZW5zaXR5OwoJCX07CgkJc2V0RnJlc25lbFVuaWZvcm1zID0gYXBwbHlGcmVzbmVsQ29uZmlnOwoJCWFwcGx5RnJlc25lbENvbmZpZyhmcmVzbmVsQ29uZmlnID8/IHt9KTsKCgkJY29uc3QgYXBwbHlEaW1lbnNpb25zID0gKG5leHQ6IHsKCQkJc2l6ZTogbnVtYmVyOwoJCQlnYXA6IG51bWJlcjsKCQkJcmFkaXVzOiBudW1iZXI7CgkJfSkgPT4gewoJCQljb25zdCBuZXh0U2l6ZSA9IE1hdGgubWF4KDAuMDAwMSwgbmV4dC5zaXplKTsKCQkJY29uc3QgbmV4dEdhcCA9IE1hdGgubWF4KDAsIG5leHQuZ2FwKTsKCQkJY29uc3QgbmV4dFJhZGl1cyA9IE1hdGgubWF4KDAsIG5leHQucmFkaXVzKTsKCgkJCWNvbnN0IHNob3VsZFJlYnVpbGQgPQoJCQkJbmV4dFNpemUgIT09IGN1YmVTaXplIHx8IE1hdGguYWJzKG5leHRSYWRpdXMgLSBjdWJlUmFkaXVzKSA+IDFlLTY7CgoJCQljdWJlU2l6ZSA9IG5leHRTaXplOwoJCQljdWJlR2FwID0gbmV4dEdhcDsKCQkJY3ViZVJhZGl1cyA9IG5leHRSYWRpdXM7CgoJCQlpZiAoc2hvdWxkUmVidWlsZCkgewoJCQkJY29uc3QgcHJldiA9IGdlb21ldHJ5OwoJCQkJZ2VvbWV0cnkgPSBjcmVhdGVSb3VuZGVkQm94R2VvbWV0cnkoZ2wsIGN1YmVTaXplLCBjdWJlUmFkaXVzKTsKCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgY3ViZXMubGVuZ3RoOyBpKyspIHsKCQkJCQljdWJlc1tpXS5tZXNoLmdlb21ldHJ5ID0gZ2VvbWV0cnk7CgkJCQl9CgkJCQlwcmV2LnJlbW92ZSgpOwoJCQl9CgoJCQlmb3IgKGxldCBpID0gMDsgaSA8IGN1YmVzLmxlbmd0aDsgaSsrKSB7CgkJCQl1cGRhdGVDdWJlVHJhbnNmb3JtKGN1YmVzW2ldKTsKCQkJfQoJCX07CgkJc2V0RGltZW5zaW9ucyA9IGFwcGx5RGltZW5zaW9uczsKCQlhcHBseURpbWVuc2lvbnMoeyBzaXplLCBnYXAsIHJhZGl1cyB9KTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWNhbWVyYS5wZXJzcGVjdGl2ZSh7CgkJCQlmb3Y6IDU1LAoJCQkJYXNwZWN0OiB3aWR0aCAvIE1hdGgubWF4KDEsIGhlaWdodCksCgkJCQluZWFyOiAwLjEsCgkJCQlmYXI6IDEwMCwKCQkJfSk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoKCQkJbWFpbkdyb3VwLnJvdGF0aW9uLnggKz0gZGVsdGEgKiAwLjM7CgkJCW1haW5Hcm91cC5yb3RhdGlvbi55ICs9IGRlbHRhICogMC41OwoJCQltYWluR3JvdXAucm90YXRpb24ueiArPSBkZWx0YSAqIDAuMjsKCgkJCW9yYml0LnVwZGF0ZSgpOwoKCQkJaWYgKGlzQW5pbWF0aW5nICYmIGN1cnJlbnRNb3ZlKSB7CgkJCQljb25zdCBwcm9ncmVzc0luYyA9IGRlbHRhIC8gTWF0aC5tYXgoMC4wMDAxLCBkdXJhdGlvbik7CgkJCQljdXJyZW50Um90YXRpb25Qcm9ncmVzcyA9IE1hdGgubWluKAoJCQkJCWN1cnJlbnRSb3RhdGlvblByb2dyZXNzICsgcHJvZ3Jlc3NJbmMsCgkJCQkJMSwKCQkJCSk7CgoJCQkJY29uc3QgZWFzZWQgPSBlYXNlSW5PdXRDdWJpYyhjdXJyZW50Um90YXRpb25Qcm9ncmVzcyk7CgkJCQljb25zdCBhbmdsZSA9CgkJCQkJZWFzZWQgKgoJCQkJCShjdXJyZW50TW92ZS5yb3RhdGlvbkFuZ2xlIHx8IE1hdGguUEkgLyAyKSAqCgkJCQkJY3VycmVudE1vdmUuZGlyZWN0aW9uOwoKCQkJCWlmIChjdXJyZW50TW92ZS5heGlzID09PSAieCIpIGxheWVyR3JvdXAucm90YXRpb24ueCA9IGFuZ2xlOwoJCQkJZWxzZSBpZiAoY3VycmVudE1vdmUuYXhpcyA9PT0gInkiKSBsYXllckdyb3VwLnJvdGF0aW9uLnkgPSBhbmdsZTsKCQkJCWVsc2UgbGF5ZXJHcm91cC5yb3RhdGlvbi56ID0gYW5nbGU7CgoJCQkJaWYgKGN1cnJlbnRSb3RhdGlvblByb2dyZXNzID49IDEpIHsKCQkJCQljb21taXRNb3ZlKCk7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQl0aW1lU2luY2VMYXN0TW92ZSArPSBkZWx0YTsKCQkJCWlmICh0aW1lU2luY2VMYXN0TW92ZSA+IDAuNCkgewoJCQkJCXNlbGVjdE5leHRNb3ZlKCk7CgkJCQl9CgkJCX0KCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEsIGNsZWFyOiB0cnVlIH0pOwoJCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoJCX07CgoJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyYWYpOwoJCQlvYnNlcnZlci5kaXNjb25uZWN0KCk7CgkJCW9yYml0LnJlbW92ZSgpOwoJCQlzZXREaW1lbnNpb25zID0gdW5kZWZpbmVkOwoJCQlzZXRGcmVzbmVsVW5pZm9ybXMgPSB1bmRlZmluZWQ7CgoJCQltYXRlcmlhbC5yZW1vdmUoKTsKCQkJZ2VvbWV0cnkucmVtb3ZlKCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxjYW52YXMKCWJpbmQ6dGhpcz17Y2FudmFzfQoJY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmxvY2sgaC1mdWxsIHctZnVsbCIKCXN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIKCWFyaWEtaGlkZGVuPSJ0cnVlIgo+PC9jYW52YXM+Cg==", "components/slideshow/Slideshow.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgb25EZXN0cm95LCBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IGVuc3VyZU1vdGlvbkNvcmVFYXNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoJaW50ZXJmYWNlIEltYWdlIHsKCQlzcmM6IHN0cmluZzsKCQlhbHQ/OiBzdHJpbmc7Cgl9CgoJaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHsKCQkvKioKCQkgKiBBcnJheSBvZiBpbWFnZXMgdG8gZGlzcGxheSBpbiB0aGUgc2xpZGVzaG93LgoJCSAqLwoJCWltYWdlczogSW1hZ2VbXTsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoJbGV0IHsKCQlpbWFnZXMsCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCS4uLnJlc3RQcm9wcwoJfTogQ29tcG9uZW50UHJvcHMgPSAkcHJvcHMoKTsKCW9uTW91bnQoKCkgPT4gewoJCWVuc3VyZU1vdGlvbkNvcmVFYXNlKCk7Cgl9KTsKCWxldCBzbGlkZXNSZWY6IEhUTUxFbGVtZW50W10gPSAkc3RhdGUoW10pOwoJbGV0IGlubmVyc1JlZjogSFRNTEVsZW1lbnRbXSA9ICRzdGF0ZShbXSk7CglsZXQgY3VycmVudEluZGV4ID0gJHN0YXRlKDApOwoJbGV0IGlzQW5pbWF0aW5nID0gZmFsc2U7CglsZXQgYWN0aXZlVGltZWxpbmU6IGdzYXAuY29yZS5UaW1lbGluZSB8IG51bGwgPSBudWxsOwoJY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSAxLjU7CgoJY29uc3QgYXR0YWNoU2xpZGUgPSAoaW5kZXg6IG51bWJlcikgPT4gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7CgkJc2xpZGVzUmVmW2luZGV4XSA9IG5vZGU7Cgl9OwoKCWNvbnN0IGF0dGFjaElubmVyID0gKGluZGV4OiBudW1iZXIpID0+IChub2RlOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7CgkJaW5uZXJzUmVmW2luZGV4XSA9IG5vZGU7Cgl9OwoJZnVuY3Rpb24gbmF2aWdhdGUodGFyZ2V0SW5kZXg6IG51bWJlcikgewoJCWlmIChpc0FuaW1hdGluZyB8fCB0YXJnZXRJbmRleCA9PT0gY3VycmVudEluZGV4KSByZXR1cm47CgkJaXNBbmltYXRpbmcgPSB0cnVlOwoJCWNvbnN0IGRpcmVjdGlvbiA9IHRhcmdldEluZGV4ID4gY3VycmVudEluZGV4ID8gMSA6IC0xOwoJCWNvbnN0IHByZXZpb3VzSW5kZXggPSBjdXJyZW50SW5kZXg7CgkJY3VycmVudEluZGV4ID0gdGFyZ2V0SW5kZXg7CgkJY29uc3QgY3VycmVudFNsaWRlID0gc2xpZGVzUmVmW3ByZXZpb3VzSW5kZXhdOwoJCWNvbnN0IGN1cnJlbnRJbm5lciA9IGlubmVyc1JlZltwcmV2aW91c0luZGV4XTsKCQljb25zdCB1cGNvbWluZ1NsaWRlID0gc2xpZGVzUmVmW2N1cnJlbnRJbmRleF07CgkJY29uc3QgdXBjb21pbmdJbm5lciA9IGlubmVyc1JlZltjdXJyZW50SW5kZXhdOwoJCWFjdGl2ZVRpbWVsaW5lPy5raWxsKCk7CgkJZ3NhcC5zZXQodXBjb21pbmdTbGlkZSwgeyB6SW5kZXg6IDIwIH0pOwoJCWdzYXAuc2V0KGN1cnJlbnRTbGlkZSwgeyB6SW5kZXg6IDEwIH0pOwoJCWNvbnN0IHRsID0gZ3NhcC50aW1lbGluZSh7CgkJCWRlZmF1bHRzOiB7IGR1cmF0aW9uOiBhbmltYXRpb25EdXJhdGlvbiwgZWFzZTogIm1vdGlvbi1jb3JlLWVhc2UiIH0sCgkJCW9uQ29tcGxldGUoKSB7CgkJCQlpc0FuaW1hdGluZyA9IGZhbHNlOwoJCQkJaWYgKGFjdGl2ZVRpbWVsaW5lID09PSB0bCkgewoJCQkJCWFjdGl2ZVRpbWVsaW5lID0gbnVsbDsKCQkJCX0KCQkJCWdzYXAuc2V0KGN1cnJlbnRTbGlkZSwgeyB6SW5kZXg6IDAsIHhQZXJjZW50OiAwIH0pOwoJCQkJZ3NhcC5zZXQoY3VycmVudElubmVyLCB7IHhQZXJjZW50OiAwIH0pOwoJCQkJZ3NhcC5zZXQodXBjb21pbmdTbGlkZSwgeyB6SW5kZXg6IDEwIH0pOwoJCQl9LAoJCX0pOwoJCWFjdGl2ZVRpbWVsaW5lID0gdGw7CgkJdGwudG8oY3VycmVudFNsaWRlLCB7IHhQZXJjZW50OiAtZGlyZWN0aW9uICogMTAwIH0sIDApCgkJCS50byhjdXJyZW50SW5uZXIsIHsgeFBlcmNlbnQ6IGRpcmVjdGlvbiAqIDc1IH0sIDApCgkJCS5mcm9tVG8odXBjb21pbmdTbGlkZSwgeyB4UGVyY2VudDogZGlyZWN0aW9uICogMTAwIH0sIHsgeFBlcmNlbnQ6IDAgfSwgMCkKCQkJLmZyb21Ubyh1cGNvbWluZ0lubmVyLCB7IHhQZXJjZW50OiAtZGlyZWN0aW9uICogNzUgfSwgeyB4UGVyY2VudDogMCB9LCAwKTsKCX0KCW9uRGVzdHJveSgoKSA9PiB7CgkJYWN0aXZlVGltZWxpbmU/LmtpbGwoKTsKCQlhY3RpdmVUaW1lbGluZSA9IG51bGw7Cgl9KTsKCSRlZmZlY3QoKCkgPT4gewoJCWlmIChzbGlkZXNSZWZbY3VycmVudEluZGV4XSkgewoJCQlnc2FwLnNldChzbGlkZXNSZWZbY3VycmVudEluZGV4XSwgeyB6SW5kZXg6IDEwIH0pOwoJCX0KCX0pOwo8L3NjcmlwdD4KCjxkaXYKCWNsYXNzPXtjbigicmVsYXRpdmUgaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1oaWRkZW4iLCBjbGFzc05hbWUpfQoJey4uLnJlc3RQcm9wc30KPgoJeyNlYWNoIGltYWdlcyBhcyBpbWFnZSwgaSAoaW1hZ2Uuc3JjKX0KCQk8ZGl2CgkJCXtAYXR0YWNoIGF0dGFjaFNsaWRlKGkpfQoJCQljbGFzcz0icG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC0wIHotMCBvdmVyZmxvdy1oaWRkZW4gd2lsbC1jaGFuZ2UtW3RyYW5zZm9ybSxvcGFjaXR5XSIKCQk+CgkJCTxpbWcKCQkJCXtAYXR0YWNoIGF0dGFjaElubmVyKGkpfQoJCQkJc3JjPXtpbWFnZS5zcmN9CgkJCQlhbHQ9e2ltYWdlLmFsdCA/PyAiIn0KCQkJCWNsYXNzPSJhYnNvbHV0ZSBoLWZ1bGwgdy1mdWxsIG9iamVjdC1jb3ZlciB3aWxsLWNoYW5nZS10cmFuc2Zvcm0iCgkJCQlkcmFnZ2FibGU9ImZhbHNlIgoJCQkvPgoJCTwvZGl2PgoJey9lYWNofQoJPGRpdgoJCWNsYXNzPSJncm91cCBhYnNvbHV0ZSBib3R0b20tNCBsZWZ0LTEvMiB6LTUwIGZsZXggLXRyYW5zbGF0ZS14LTEvMiBnYXAtMiIKCT4KCQl7I2VhY2ggaW1hZ2VzIGFzIGltYWdlLCBpIChpbWFnZS5zcmMpfQoJCQk8YnV0dG9uCgkJCQlvbmNsaWNrPXsoKSA9PiBuYXZpZ2F0ZShpKX0KCQkJCWNsYXNzPSJyZWxhdGl2ZSBzaXplLTEwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXNtIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTcwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC42MjUsMC4wNSwwLDEpXSIKCQkJCWFyaWEtbGFiZWw9IkdvIHRvIHNsaWRlIHtpICsgMX0iCgkJCT4KCQkJCTxpbWcKCQkJCQlzcmM9e2ltYWdlLnNyY30KCQkJCQlhbHQ9e2ltYWdlLmFsdCA/PyAiIn0KCQkJCQljbGFzcz0iaC1mdWxsIHctZnVsbCByb3VuZGVkLXNtIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi03MDAgZWFzZS1bY3ViaWMtYmV6aWVyKDAuNjI1LDAuMDUsMCwxKV0gZ3JvdXAtaG92ZXI6c2NhbGUtODAgaG92ZXI6c2NhbGUtMTAwIgoJCQkJLz4KCQkJPC9idXR0b24+CgkJey9lYWNofQoJPC9kaXY+CjwvZGl2Pgo=", - "components/specular-band/SpecularBand.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1NwZWN1bGFyQmFuZFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSBzcGVjdWxhciBiYW5kcy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMwMDAwMDAiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogQW5pbWF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIExlbnMgZGlzdG9ydGlvbiBpbnRlbnNpdHkuCgkJICogQGRlZmF1bHQgMC4yCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBBbW91bnQgb2YgaHVlIHNoaWZ0IGZvciBzZWNvbmRhcnkgYmFuZHMgKGluIGRlZ3JlZXMpLgoJCSAqIEBkZWZhdWx0IDMwLjAKCQkgKi8KCQlodWVTaGlmdD86IFNjZW5lUHJvcHNbImh1ZVNoaWZ0Il07CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eS9icmlnaHRuZXNzIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJc3BlZWQgPSAxLjAsCgkJZGlzdG9ydGlvbiA9IDAuMiwKCQlodWVTaGlmdCA9IDMwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCXtzcGVlZH0KCQkJe2Rpc3RvcnRpb259CgkJCXtodWVTaGlmdH0KCQkJe2ludGVuc2l0eX0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", - "components/specular-band/SpecularBandScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoKCXR5cGUgQ29sb3JSZXByZXNlbnRhdGlvbiA9CgkJfCBzdHJpbmcKCQl8IG51bWJlcgoJCXwgcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdCgkJfCB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTsKCglpbnRlcmZhY2UgUHJvcHMgewoJCS8qKgoJCSAqIEJhc2UgY29sb3Igb2YgdGhlIHNwZWN1bGFyIGJhbmRzLgoJCSAqIEBkZWZhdWx0ICIjRkY2OTAwIgoJCSAqLwoJCWNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjsKCQkvKioKCQkgKiBDb2xvciBvZiB0aGUgYmFja2dyb3VuZC4KCQkgKiBAZGVmYXVsdCAiIzAwMDAwMCIKCQkgKi8KCQliYWNrZ3JvdW5kQ29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIEFuaW1hdGlvbiBzcGVlZCBtdWx0aXBsaWVyLgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCXNwZWVkPzogbnVtYmVyOwoJCS8qKgoJCSAqIExlbnMgZGlzdG9ydGlvbiBpbnRlbnNpdHkuCgkJICogQGRlZmF1bHQgMC4yCgkJICovCgkJZGlzdG9ydGlvbj86IG51bWJlcjsKCQkvKioKCQkgKiBBbW91bnQgb2YgaHVlIHNoaWZ0IGZvciBzZWNvbmRhcnkgYmFuZHMgKGluIGRlZ3JlZXMpLgoJCSAqIEBkZWZhdWx0IDMwLjAKCQkgKi8KCQlodWVTaGlmdD86IG51bWJlcjsKCQkvKioKCQkgKiBHbG9iYWwgaW50ZW5zaXR5L2JyaWdodG5lc3Mgb2YgdGhlIGVmZmVjdC4KCQkgKiBAZGVmYXVsdCAxLjAKCQkgKi8KCQlpbnRlbnNpdHk/OiBudW1iZXI7Cgl9CgoJbGV0IHsKCQljb2xvciA9ICIjRkY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzAwMDAwMCIsCgkJc3BlZWQgPSAxLjAsCgkJZGlzdG9ydGlvbiA9IDAuMiwKCQlodWVTaGlmdCA9IDMwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJfTogUHJvcHMgPSAkcHJvcHMoKTsKCglsZXQgY2FudmFzID0gJHN0YXRlPEhUTUxDYW52YXNFbGVtZW50PigpOwoJbGV0IHVuaWZvcm1zID0gJHN0YXRlPHsKCQl1VGltZTogeyB2YWx1ZTogbnVtYmVyIH07CgkJdVJlc29sdXRpb246IHsgdmFsdWU6IFZlYzIgfTsKCQl1Q29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1QmFja2dyb3VuZENvbG9yOiB7IHZhbHVlOiBWZWMzIH07CgkJdVNwZWVkOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH07CgkJdUh1ZVNoaWZ0OiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1SW50ZW5zaXR5OiB7IHZhbHVlOiBudW1iZXIgfTsKCX0+KCk7CgoJY29uc3QgY2xhbXAwMSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpOwoJY29uc3Qgc3JnYlRvTGluZWFyID0gKHZhbHVlOiBudW1iZXIpID0+CgkJdmFsdWUgPD0gMC4wNDA0NSA/IHZhbHVlIC8gMTIuOTIgOiBNYXRoLnBvdygodmFsdWUgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTsKCgljb25zdCBub3JtYWxpemVUcmlwbGV0ID0gKAoJCXI6IG51bWJlciwKCQlnOiBudW1iZXIsCgkJYjogbnVtYmVyLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQljb25zdCBzY2FsZSA9IE1hdGgubWF4KHIsIGcsIGIpID4gMSA/IDI1NSA6IDE7CgkJcmV0dXJuIFtjbGFtcDAxKHIgLyBzY2FsZSksIGNsYW1wMDEoZyAvIHNjYWxlKSwgY2xhbXAwMShiIC8gc2NhbGUpXTsKCX07CgoJY29uc3QgcGFyc2VIZXhDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJY29uc3QgaGV4ID0gdmFsdWUucmVwbGFjZSgiIyIsICIiKS50cmltKCk7CgkJaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNCkgewoJCQljb25zdCByID0gTnVtYmVyLnBhcnNlSW50KGhleFswXSArIGhleFswXSwgMTYpOwoJCQljb25zdCBnID0gTnVtYmVyLnBhcnNlSW50KGhleFsxXSArIGhleFsxXSwgMTYpOwoJCQljb25zdCBiID0gTnVtYmVyLnBhcnNlSW50KGhleFsyXSArIGhleFsyXSwgMTYpOwoJCQlyZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTVdOwoJCX0KCQlpZiAoaGV4Lmxlbmd0aCA9PT0gNiB8fCBoZXgubGVuZ3RoID09PSA4KSB7CgkJCWNvbnN0IHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDAsIDIpLCAxNik7CgkJCWNvbnN0IGcgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNik7CgkJCWNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNik7CgkJCXJldHVybiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NV07CgkJfQoJCXJldHVybiBudWxsOwoJfTsKCglsZXQgY3NzQ29sb3JDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsIHwgdW5kZWZpbmVkOwoJY29uc3QgcGFyc2VDc3NDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9PiB7CgkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwoJCWlmIChjc3NDb2xvckNvbnRleHQgPT09IHVuZGVmaW5lZCkgewoJCQljb25zdCBwYXJzZXJDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKCQkJcGFyc2VyQ2FudmFzLndpZHRoID0gMTsKCQkJcGFyc2VyQ2FudmFzLmhlaWdodCA9IDE7CgkJCWNzc0NvbG9yQ29udGV4dCA9IHBhcnNlckNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoJCX0KCQlpZiAoIWNzc0NvbG9yQ29udGV4dCkgcmV0dXJuIG51bGw7CgoJCWNzc0NvbG9yQ29udGV4dC5maWxsU3R5bGUgPSAiIzAwMDAwMCI7CgkJY3NzQ29sb3JDb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlOwoJCWNvbnN0IG5vcm1hbGl6ZWQgPSBjc3NDb2xvckNvbnRleHQuZmlsbFN0eWxlOwoKCQlpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCIjIikpIHsKCQkJcmV0dXJuIHBhcnNlSGV4Q29sb3Iobm9ybWFsaXplZCk7CgkJfQoKCQljb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL3JnYmE/XCgoW14pXSspXCkvaSk7CgkJaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7CgkJY29uc3QgcGFydHMgPSBtYXRjaFsxXQoJCQkuc3BsaXQoIiwiKQoJCQkubWFwKChwYXJ0KSA9PiBOdW1iZXIucGFyc2VGbG9hdChwYXJ0LnRyaW0oKSkpCgkJCS5maWx0ZXIoKHBhcnQpID0+IE51bWJlci5pc0Zpbml0ZShwYXJ0KSk7CgkJaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwoJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pOwoJfTsKCgljb25zdCB0b1JnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQlpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7CgkJCWNvbnN0IGludCA9IE1hdGgubWluKDB4ZmZmZmZmLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHZhbHVlKSkpOwoJCQlyZXR1cm4gWwoJCQkJKChpbnQgPj4gMTYpICYgMjU1KSAvIDI1NSwKCQkJCSgoaW50ID4+IDgpICYgMjU1KSAvIDI1NSwKCQkJCShpbnQgJiAyNTUpIC8gMjU1LAoJCQldOwoJCX0KCgkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKCQkJY29uc3QgaGV4ID0gdmFsdWUudHJpbSgpOwoJCQljb25zdCBwYXJzZWQgPSBoZXguc3RhcnRzV2l0aCgiIyIpCgkJCQk/IHBhcnNlSGV4Q29sb3IoaGV4KQoJCQkJOiBwYXJzZUNzc0NvbG9yKGhleCk7CgkJCXJldHVybiBwYXJzZWQgPz8gZmFsbGJhY2s7CgkJfQoKCQlpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID49IDMpIHsKCQkJcmV0dXJuIG5vcm1hbGl6ZVRyaXBsZXQodmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7CgkJfQoKCQlpZiAoCgkJCXZhbHVlICYmCgkJCXR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgJiYKCQkJInIiIGluIHZhbHVlICYmCgkJCSJnIiBpbiB2YWx1ZSAmJgoJCQkiYiIgaW4gdmFsdWUKCQkpIHsKCQkJY29uc3QgcmdiID0gdmFsdWUgYXMgeyByOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyIH07CgkJCXJldHVybiBub3JtYWxpemVUcmlwbGV0KHJnYi5yLCByZ2IuZywgcmdiLmIpOwoJCX0KCgkJcmV0dXJuIGZhbGxiYWNrOwoJfTsKCgljb25zdCB0b0xpbmVhclJnYiA9ICgKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b1JnYih2YWx1ZSwgZmFsbGJhY2spOwoJCXJldHVybiBbc3JnYlRvTGluZWFyKHIpLCBzcmdiVG9MaW5lYXIoZyksIHNyZ2JUb0xpbmVhcihiKV07Cgl9OwoKCWNvbnN0IGFwcGx5Q29sb3IgPSAoCgkJdGFyZ2V0OiBWZWMzLAoJCXZhbHVlOiBDb2xvclJlcHJlc2VudGF0aW9uLAoJCWZhbGxiYWNrOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sCgkpID0+IHsKCQljb25zdCBbciwgZywgYl0gPSB0b0xpbmVhclJnYih2YWx1ZSwgZmFsbGJhY2spOwoJCXRhcmdldC5zZXQociwgZywgYik7Cgl9OwoKCWNvbnN0IHZlcnRleFNoYWRlciA9IGAKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl2b2lkIG1haW4oKSB7CgkJCXZVdiA9IHV2OwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKCQl9CglgOwoKCWNvbnN0IGZyYWdtZW50U2hhZGVyID0gYAoJCXByZWNpc2lvbiBoaWdocCBmbG9hdDsKCQl2YXJ5aW5nIHZlYzIgdlV2OwoKCQl1bmlmb3JtIGZsb2F0IHVUaW1lOwoJCXVuaWZvcm0gdmVjMiB1UmVzb2x1dGlvbjsKCQl1bmlmb3JtIHZlYzMgdUNvbG9yOwoJCXVuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yOwoJCXVuaWZvcm0gZmxvYXQgdVNwZWVkOwoJCXVuaWZvcm0gZmxvYXQgdURpc3RvcnRpb247CgkJdW5pZm9ybSBmbG9hdCB1SHVlU2hpZnQ7CgkJdW5pZm9ybSBmbG9hdCB1SW50ZW5zaXR5OwoKCQltYXQzIGh1ZVJvdChmbG9hdCBhKSB7CgkJCWZsb2F0IGMgPSBjb3MoYSksIHMgPSBzaW4oYSksIHQgPSAxLjAgLSBjOwoJCQlyZXR1cm4gbWF0MygKCQkJdCouMzMzK2MsICAgIHQqLjMzMy1zKi41NzcsIHQqLjMzMytzKi41NzcsCgkJCXQqLjMzMytzKi41NzcsIHQqLjMzMytjLCAgIHQqLjMzMy1zKi41NzcsCgkJCXQqLjMzMy1zKi41NzcsIHQqLjMzMytzKi41NzcsIHQqLjMzMytjCgkJCSk7CgkJfQoKCQlmbG9hdCBjb2xvckx1bWEodmVjMyBjKSB7CgkJCXJldHVybiBkb3QoYywgdmVjMygwLjIxMjYsIDAuNzE1MiwgMC4wNzIyKSk7CgkJfQoKCQl2ZWMzIGh1ZUZyb21Db2xvcih2ZWMzIGMsIHZlYzMgZmFsbGJhY2spIHsKCQkJZmxvYXQgbSA9IG1heChtYXgoYy5yLCBjLmcpLCBjLmIpOwoJCQlpZiAobSA8IDFlLTUpIHJldHVybiBmYWxsYmFjazsKCQkJcmV0dXJuIGNsYW1wKGMgLyBtLCAwLjAsIDEuMCk7CgkJfQoKCQl2ZWMzIGJsZW5kQWRhcHRpdmUodmVjMyBiZywgdmVjMyBlZmZlY3QsIGZsb2F0IHNvZnRuZXNzKSB7CgkJCWZsb2F0IGJnTHVtID0gY29sb3JMdW1hKGJnKTsKCQkJZmxvYXQgbGlnaHRCZyA9IHNtb290aHN0ZXAoMC40NSwgMC45NSwgYmdMdW0pOwoJCQlmbG9hdCBlZGdlID0gY2xhbXAoc29mdG5lc3MsIDAuMCwgMS4wKTsKCgkJCXZlYzMgYWRkaXRpdmUgPSBiZyArIGVmZmVjdDsKCQkJdmVjMyBlZmZlY3RIdWUgPSBodWVGcm9tQ29sb3IoZWZmZWN0LCB2ZWMzKDEuMCkpOwoJCQl2ZWMzIHRpbnRUYXJnZXQgPSBtaXgoYmcsIGVmZmVjdEh1ZSwgMC45KTsKCQkJdmVjMyB0aW50ID0gbWl4KGJnLCB0aW50VGFyZ2V0LCBlZGdlKTsKCgkJCXJldHVybiBtaXgoYWRkaXRpdmUsIHRpbnQsIGxpZ2h0QmcpOwoJCX0KCgkJdmVjMyBsaW5lYXJUb1NyZ2IodmVjMyBjb2xvcikgewoJCQl2ZWMzIHNhZmUgPSBtYXgoY29sb3IsIHZlYzMoMC4wKSk7CgkJCXZlYzMgbG93ID0gc2FmZSAqIDEyLjkyOwoJCQl2ZWMzIGhpZ2ggPSAxLjA1NSAqIHBvdyhzYWZlLCB2ZWMzKDEuMCAvIDIuNCkpIC0gMC4wNTU7CgkJCXZlYzMgY3V0b2ZmID0gc3RlcCh2ZWMzKDAuMDAzMTMwOCksIHNhZmUpOwoJCQlyZXR1cm4gbWl4KGxvdywgaGlnaCwgY3V0b2ZmKTsKCQl9CgoJCXZvaWQgbWFpbkltYWdlKG91dCB2ZWM0IG8sIHZlYzIgdXYpIHsKCQkJdmVjMiB1ID0gKHV2ICogMi4wIC0gMS4wKTsKCQkJdS54ICo9IHVSZXNvbHV0aW9uLnggLyB1UmVzb2x1dGlvbi55OwoKCQkJZmxvYXQgdGltZSA9IHVUaW1lICogdVNwZWVkOwoKCQkJdSAvPSAwLjUgKyB1RGlzdG9ydGlvbiAqIGRvdCh1LCB1KTsKCQkJdSArPSAwLjIgKiBjb3ModGltZSkgLSA3LjU2OwoKCQkJdmVjMyBiYXNlQ29sb3IgPSB1Q29sb3I7CgoJCQl2ZWMzIHBhbGV0dGVbM107CgkJCXBhbGV0dGVbMF0gPSBiYXNlQ29sb3I7CgkJCXBhbGV0dGVbMV0gPSBodWVSb3QocmFkaWFucyh1SHVlU2hpZnQpKSAqIGJhc2VDb2xvcjsKCQkJcGFsZXR0ZVsyXSA9IGh1ZVJvdChyYWRpYW5zKC11SHVlU2hpZnQpKSAqIGJhc2VDb2xvcjsKCgkJCXZlYzMgY29sID0gdmVjMygwLjApOwoJCQlmbG9hdCBlZGdlRmllbGQgPSAwLjA7CgkJCWZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKCQkJCXZlYzIgdXZfbG9vcCA9IHNpbigxLjUgKiB1Lnl4ICsgMi4wICogY29zKHUgLT0gMC4wMSkpOwoJCQkJZmxvYXQgdmFsID0gMS4wIC0gZXhwKC02LjAgLyBleHAoNi4wICogbGVuZ3RoKHV2X2xvb3AgKyBzaW4oNS4wICogdXZfbG9vcC55IC0gMy4wICogdGltZSkgLyA0LjApKSk7CgkJCQl2YWwgPSBwb3coY2xhbXAodmFsLCAwLjAsIDEuMCksIDEuNCk7CgkJCQllZGdlRmllbGQgKz0gdmFsOwoJCQkJY29sICs9IHZhbCAqIHBhbGV0dGVbaV07CgkJCX0KCQkJdmVjMyBiYW5kcyA9IGNvbCAqIHVJbnRlbnNpdHk7CgkJCWZsb2F0IHNvZnRNYXNrID0gMS4wIC0gZXhwKC0wLjg1ICogZWRnZUZpZWxkICogdUludGVuc2l0eSk7CgkJCXZlYzMgcmdiID0gYmxlbmRBZGFwdGl2ZSh1QmFja2dyb3VuZENvbG9yLCBiYW5kcywgc29mdE1hc2spOwoJCQlvID0gdmVjNChyZ2IsIDEuMCk7CgkJfQoKCQl2b2lkIG1haW4oKSB7CgkJCXZlYzQgZnJhZ0NvbG9yOwoJCQltYWluSW1hZ2UoZnJhZ0NvbG9yLCB2VXYpOwoJCQlmcmFnQ29sb3IucmdiID0gbGluZWFyVG9TcmdiKGZyYWdDb2xvci5yZ2IpOwoJCQlnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7CgkJfQoJYDsKCgkkZWZmZWN0KCgpID0+IHsKCQlpZiAoIXVuaWZvcm1zKSByZXR1cm47CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51Q29sb3IudmFsdWUsIGNvbG9yLCBbMSwgMTA1IC8gMjU1LCAwXSk7CgkJYXBwbHlDb2xvcih1bmlmb3Jtcy51QmFja2dyb3VuZENvbG9yLnZhbHVlLCBiYWNrZ3JvdW5kQ29sb3IsIFswLCAwLCAwXSk7CgkJdW5pZm9ybXMudVNwZWVkLnZhbHVlID0gc3BlZWQ7CgkJdW5pZm9ybXMudURpc3RvcnRpb24udmFsdWUgPSBkaXN0b3J0aW9uOwoJCXVuaWZvcm1zLnVIdWVTaGlmdC52YWx1ZSA9IGh1ZVNoaWZ0OwoJCXVuaWZvcm1zLnVJbnRlbnNpdHkudmFsdWUgPSBpbnRlbnNpdHk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbENvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxLCAxMDUgLyAyNTUsIDBdKTsKCQljb25zdCBpbml0aWFsQmFja2dyb3VuZENvbG9yID0gdG9MaW5lYXJSZ2IoYmFja2dyb3VuZENvbG9yLCBbMCwgMCwgMF0pOwoJCWNvbnN0IGxvY2FsVW5pZm9ybXMgPSB7CgkJCXVUaW1lOiB7IHZhbHVlOiAwIH0sCgkJCXVSZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVmVjMigxLCAxKSB9LAoJCQl1Q29sb3I6IHsKCQkJCXZhbHVlOiBuZXcgVmVjMyhpbml0aWFsQ29sb3JbMF0sIGluaXRpYWxDb2xvclsxXSwgaW5pdGlhbENvbG9yWzJdKSwKCQkJfSwKCQkJdUJhY2tncm91bmRDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kQ29sb3JbMF0sCgkJCQkJaW5pdGlhbEJhY2tncm91bmRDb2xvclsxXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZENvbG9yWzJdLAoJCQkJKSwKCQkJfSwKCQkJdVNwZWVkOiB7IHZhbHVlOiBzcGVlZCB9LAoJCQl1RGlzdG9ydGlvbjogeyB2YWx1ZTogZGlzdG9ydGlvbiB9LAoJCQl1SHVlU2hpZnQ6IHsgdmFsdWU6IGh1ZVNoaWZ0IH0sCgkJCXVJbnRlbnNpdHk6IHsgdmFsdWU6IGludGVuc2l0eSB9LAoJCX07CgoJCXVuaWZvcm1zID0gbG9jYWxVbmlmb3JtczsKCgkJY29uc3QgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKGdsLCB7CgkJCXZlcnRleDogdmVydGV4U2hhZGVyLAoJCQlmcmFnbWVudDogZnJhZ21lbnRTaGFkZXIsCgkJCXVuaWZvcm1zOiBsb2NhbFVuaWZvcm1zLAoJCQlkZXB0aFRlc3Q6IGZhbHNlLAoJCQlkZXB0aFdyaXRlOiBmYWxzZSwKCQl9KTsKCgkJY29uc3QgbWVzaCA9IG5ldyBNZXNoKGdsLCB7IGdlb21ldHJ5LCBwcm9ncmFtIH0pOwoJCW1lc2guc2V0UGFyZW50KHNjZW5lKTsKCgkJY29uc3QgcmVzaXplID0gKCkgPT4gewoJCQljb25zdCBob3N0ID0gdGFyZ2V0Q2FudmFzLnBhcmVudEVsZW1lbnQgPz8gdGFyZ2V0Q2FudmFzOwoJCQljb25zdCB7IHdpZHRoOiBob3N0V2lkdGgsIGhlaWdodDogaG9zdEhlaWdodCB9ID0KCQkJCWhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCWNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0V2lkdGgpKTsKCQkJY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChob3N0SGVpZ2h0KSk7CgkJCXJlbmRlcmVyLnNldFNpemUod2lkdGgsIGhlaWdodCk7CgkJCWxvY2FsVW5pZm9ybXMudVJlc29sdXRpb24udmFsdWUuc2V0KHdpZHRoLCBoZWlnaHQpOwoJCX07CgoJCXJlc2l6ZSgpOwoJCWNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHJlc2l6ZSk7CgkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMpOwoJCWlmICh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCkKCQkJb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCk7CgoJCWxldCByYWYgPSAwOwoJCWxldCBwcmV2aW91cyA9IDA7CgkJY29uc3QgdGljayA9IChub3c6IG51bWJlcikgPT4gewoJCQljb25zdCBkZWx0YSA9IHByZXZpb3VzID8gKG5vdyAtIHByZXZpb3VzKSAvIDEwMDAgOiAwOwoJCQlwcmV2aW91cyA9IG5vdzsKCQkJbG9jYWxVbmlmb3Jtcy51VGltZS52YWx1ZSArPSBkZWx0YTsKCgkJCXJlbmRlcmVyLnJlbmRlcih7IHNjZW5lLCBjYW1lcmEgfSk7CgkJCXJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CgkJfTsKCgkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CgkJCW9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPGNhbnZhcwoJYmluZDp0aGlzPXtjYW52YXN9CgljbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBibG9jayBoLWZ1bGwgdy1mdWxsIgoJc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7IgoJYXJpYS1oaWRkZW49InRydWUiCj48L2NhbnZhcz4K", + "components/specular-band/SpecularBand.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgdHlwZSB7IENvbXBvbmVudFByb3BzIH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCBTY2VuZSBmcm9tICIuL1NwZWN1bGFyQmFuZFNjZW5lLnN2ZWx0ZSI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNjZW5lUHJvcHMgPSBDb21wb25lbnRQcm9wczx0eXBlb2YgU2NlbmU+OwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBmb3IgdGhlIGNvbnRhaW5lci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBCYXNlIGNvbG9yIG9mIHRoZSBzcGVjdWxhciBiYW5kcy4KCQkgKiBAZGVmYXVsdCAiI0ZGNjkwMCIKCQkgKi8KCQljb2xvcj86IFNjZW5lUHJvcHNbImNvbG9yIl07CgkJLyoqCgkJICogQ29sb3Igb2YgdGhlIGJhY2tncm91bmQuCgkJICogQGRlZmF1bHQgIiMxNzE4MUEiCgkJICovCgkJYmFja2dyb3VuZENvbG9yPzogU2NlbmVQcm9wc1siYmFja2dyb3VuZENvbG9yIl07CgkJLyoqCgkJICogQW5pbWF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBTY2VuZVByb3BzWyJzcGVlZCJdOwoJCS8qKgoJCSAqIExlbnMgZGlzdG9ydGlvbiBpbnRlbnNpdHkuCgkJICogQGRlZmF1bHQgMC4yCgkJICovCgkJZGlzdG9ydGlvbj86IFNjZW5lUHJvcHNbImRpc3RvcnRpb24iXTsKCQkvKioKCQkgKiBBbW91bnQgb2YgaHVlIHNoaWZ0IGZvciBzZWNvbmRhcnkgYmFuZHMgKGluIGRlZ3JlZXMpLgoJCSAqIEBkZWZhdWx0IDMwLjAKCQkgKi8KCQlodWVTaGlmdD86IFNjZW5lUHJvcHNbImh1ZVNoaWZ0Il07CgkJLyoqCgkJICogR2xvYmFsIGludGVuc2l0eS9icmlnaHRuZXNzIG9mIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJaW50ZW5zaXR5PzogU2NlbmVQcm9wc1siaW50ZW5zaXR5Il07CgkJW2tleTogc3RyaW5nXTogdW5rbm93bjsKCX0KCglsZXQgewoJCWNsYXNzOiBjbGFzc05hbWUgPSAiIiwKCQljb2xvciA9ICIjRkY2OTAwIiwKCQliYWNrZ3JvdW5kQ29sb3IgPSAiIzE3MTgxQSIsCgkJc3BlZWQgPSAxLjAsCgkJZGlzdG9ydGlvbiA9IDAuMiwKCQlodWVTaGlmdCA9IDMwLjAsCgkJaW50ZW5zaXR5ID0gMS4wLAoJCS4uLnJlc3QKCX06IFByb3BzID0gJHByb3BzKCk7Cjwvc2NyaXB0PgoKPGRpdiBjbGFzcz17Y24oInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIiwgY2xhc3NOYW1lKX0gey4uLnJlc3R9PgoJPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAiPgoJCTxTY2VuZQoJCQl7Y29sb3J9CgkJCXtiYWNrZ3JvdW5kQ29sb3J9CgkJCXtzcGVlZH0KCQkJe2Rpc3RvcnRpb259CgkJCXtodWVTaGlmdH0KCQkJe2ludGVuc2l0eX0KCQkvPgoJPC9kaXY+CjwvZGl2Pgo=", + "components/specular-band/SpecularBandScene.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7CgkJQ2FtZXJhLAoJCU1lc2gsCgkJUHJvZ3JhbSwKCQlSZW5kZXJlciwKCQlUcmFuc2Zvcm0sCgkJVHJpYW5nbGUsCgkJVmVjMiwKCQlWZWMzLAoJfSBmcm9tICJvZ2wiOwoJaW1wb3J0IHsgdHlwZSBDb2xvclJlcHJlc2VudGF0aW9uLCB0b0xpbmVhclJnYiB9IGZyb20gIi4uL2hlbHBlcnMvY29sb3IiOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogQmFzZSBjb2xvciBvZiB0aGUgc3BlY3VsYXIgYmFuZHMuCgkJICogQGRlZmF1bHQgIiNGRjY5MDAiCgkJICovCgkJY29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uOwoJCS8qKgoJCSAqIENvbG9yIG9mIHRoZSBiYWNrZ3JvdW5kLgoJCSAqIEBkZWZhdWx0ICIjMTcxODFBIgoJCSAqLwoJCWJhY2tncm91bmRDb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247CgkJLyoqCgkJICogQW5pbWF0aW9uIHNwZWVkIG11bHRpcGxpZXIuCgkJICogQGRlZmF1bHQgMS4wCgkJICovCgkJc3BlZWQ/OiBudW1iZXI7CgkJLyoqCgkJICogTGVucyBkaXN0b3J0aW9uIGludGVuc2l0eS4KCQkgKiBAZGVmYXVsdCAwLjIKCQkgKi8KCQlkaXN0b3J0aW9uPzogbnVtYmVyOwoJCS8qKgoJCSAqIEFtb3VudCBvZiBodWUgc2hpZnQgZm9yIHNlY29uZGFyeSBiYW5kcyAoaW4gZGVncmVlcykuCgkJICogQGRlZmF1bHQgMzAuMAoJCSAqLwoJCWh1ZVNoaWZ0PzogbnVtYmVyOwoJCS8qKgoJCSAqIEdsb2JhbCBpbnRlbnNpdHkvYnJpZ2h0bmVzcyBvZiB0aGUgZWZmZWN0LgoJCSAqIEBkZWZhdWx0IDEuMAoJCSAqLwoJCWludGVuc2l0eT86IG51bWJlcjsKCX0KCglsZXQgewoJCWNvbG9yID0gIiNGRjY5MDAiLAoJCWJhY2tncm91bmRDb2xvciA9ICIjMTcxODFBIiwKCQlzcGVlZCA9IDEuMCwKCQlkaXN0b3J0aW9uID0gMC4yLAoJCWh1ZVNoaWZ0ID0gMzAuMCwKCQlpbnRlbnNpdHkgPSAxLjAsCgl9OiBQcm9wcyA9ICRwcm9wcygpOwoKCWxldCBjYW52YXMgPSAkc3RhdGU8SFRNTENhbnZhc0VsZW1lbnQ+KCk7CglsZXQgdW5pZm9ybXMgPSAkc3RhdGU8ewoJCXVUaW1lOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1UmVzb2x1dGlvbjogeyB2YWx1ZTogVmVjMiB9OwoJCXVDb2xvcjogeyB2YWx1ZTogVmVjMyB9OwoJCXVCYWNrZ3JvdW5kQ29sb3I6IHsgdmFsdWU6IFZlYzMgfTsKCQl1U3BlZWQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBudW1iZXIgfTsKCQl1SHVlU2hpZnQ6IHsgdmFsdWU6IG51bWJlciB9OwoJCXVJbnRlbnNpdHk6IHsgdmFsdWU6IG51bWJlciB9OwoJfT4oKTsKCgljb25zdCBhcHBseUNvbG9yID0gKAoJCXRhcmdldDogVmVjMywKCQl2YWx1ZTogQ29sb3JSZXByZXNlbnRhdGlvbiwKCQlmYWxsYmFjazogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLAoJKSA9PiB7CgkJY29uc3QgW3IsIGcsIGJdID0gdG9MaW5lYXJSZ2IodmFsdWUsIGZhbGxiYWNrKTsKCQl0YXJnZXQuc2V0KHIsIGcsIGIpOwoJfTsKCgljb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgCgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdm9pZCBtYWluKCkgewoJCQl2VXYgPSB1djsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLjAsIDEuMCk7CgkJfQoJYDsKCgljb25zdCBmcmFnbWVudFNoYWRlciA9IGAKCQlwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgkJdmFyeWluZyB2ZWMyIHZVdjsKCgkJdW5pZm9ybSBmbG9hdCB1VGltZTsKCQl1bmlmb3JtIHZlYzIgdVJlc29sdXRpb247CgkJdW5pZm9ybSB2ZWMzIHVDb2xvcjsKCQl1bmlmb3JtIHZlYzMgdUJhY2tncm91bmRDb2xvcjsKCQl1bmlmb3JtIGZsb2F0IHVTcGVlZDsKCQl1bmlmb3JtIGZsb2F0IHVEaXN0b3J0aW9uOwoJCXVuaWZvcm0gZmxvYXQgdUh1ZVNoaWZ0OwoJCXVuaWZvcm0gZmxvYXQgdUludGVuc2l0eTsKCgkJbWF0MyBodWVSb3QoZmxvYXQgYSkgewoJCQlmbG9hdCBjID0gY29zKGEpLCBzID0gc2luKGEpLCB0ID0gMS4wIC0gYzsKCQkJcmV0dXJuIG1hdDMoCgkJCXQqLjMzMytjLCAgICB0Ki4zMzMtcyouNTc3LCB0Ki4zMzMrcyouNTc3LAoJCQl0Ki4zMzMrcyouNTc3LCB0Ki4zMzMrYywgICB0Ki4zMzMtcyouNTc3LAoJCQl0Ki4zMzMtcyouNTc3LCB0Ki4zMzMrcyouNTc3LCB0Ki4zMzMrYwoJCQkpOwoJCX0KCgkJZmxvYXQgY29sb3JMdW1hKHZlYzMgYykgewoJCQlyZXR1cm4gZG90KGMsIHZlYzMoMC4yMTI2LCAwLjcxNTIsIDAuMDcyMikpOwoJCX0KCgkJdmVjMyBodWVGcm9tQ29sb3IodmVjMyBjLCB2ZWMzIGZhbGxiYWNrKSB7CgkJCWZsb2F0IG0gPSBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTsKCQkJaWYgKG0gPCAxZS01KSByZXR1cm4gZmFsbGJhY2s7CgkJCXJldHVybiBjbGFtcChjIC8gbSwgMC4wLCAxLjApOwoJCX0KCgkJdmVjMyBibGVuZEFkYXB0aXZlKHZlYzMgYmcsIHZlYzMgZWZmZWN0LCBmbG9hdCBzb2Z0bmVzcykgewoJCQlmbG9hdCBiZ0x1bSA9IGNvbG9yTHVtYShiZyk7CgkJCWZsb2F0IGxpZ2h0QmcgPSBzbW9vdGhzdGVwKDAuNDUsIDAuOTUsIGJnTHVtKTsKCQkJZmxvYXQgZWRnZSA9IGNsYW1wKHNvZnRuZXNzLCAwLjAsIDEuMCk7CgoJCQl2ZWMzIGFkZGl0aXZlID0gYmcgKyBlZmZlY3Q7CgkJCXZlYzMgZWZmZWN0SHVlID0gaHVlRnJvbUNvbG9yKGVmZmVjdCwgdmVjMygxLjApKTsKCQkJdmVjMyB0aW50VGFyZ2V0ID0gbWl4KGJnLCBlZmZlY3RIdWUsIDAuOSk7CgkJCXZlYzMgdGludCA9IG1peChiZywgdGludFRhcmdldCwgZWRnZSk7CgoJCQlyZXR1cm4gbWl4KGFkZGl0aXZlLCB0aW50LCBsaWdodEJnKTsKCQl9CgoJCXZlYzMgbGluZWFyVG9TcmdiKHZlYzMgY29sb3IpIHsKCQkJdmVjMyBzYWZlID0gbWF4KGNvbG9yLCB2ZWMzKDAuMCkpOwoJCQl2ZWMzIGxvdyA9IHNhZmUgKiAxMi45MjsKCQkJdmVjMyBoaWdoID0gMS4wNTUgKiBwb3coc2FmZSwgdmVjMygxLjAgLyAyLjQpKSAtIDAuMDU1OwoJCQl2ZWMzIGN1dG9mZiA9IHN0ZXAodmVjMygwLjAwMzEzMDgpLCBzYWZlKTsKCQkJcmV0dXJuIG1peChsb3csIGhpZ2gsIGN1dG9mZik7CgkJfQoKCQl2b2lkIG1haW5JbWFnZShvdXQgdmVjNCBvLCB2ZWMyIHV2KSB7CgkJCXZlYzIgdSA9ICh1diAqIDIuMCAtIDEuMCk7CgkJCXUueCAqPSB1UmVzb2x1dGlvbi54IC8gdVJlc29sdXRpb24ueTsKCgkJCWZsb2F0IHRpbWUgPSB1VGltZSAqIHVTcGVlZDsKCgkJCXUgLz0gMC41ICsgdURpc3RvcnRpb24gKiBkb3QodSwgdSk7CgkJCXUgKz0gMC4yICogY29zKHRpbWUpIC0gNy41NjsKCgkJCXZlYzMgYmFzZUNvbG9yID0gdUNvbG9yOwoKCQkJdmVjMyBwYWxldHRlWzNdOwoJCQlwYWxldHRlWzBdID0gYmFzZUNvbG9yOwoJCQlwYWxldHRlWzFdID0gaHVlUm90KHJhZGlhbnModUh1ZVNoaWZ0KSkgKiBiYXNlQ29sb3I7CgkJCXBhbGV0dGVbMl0gPSBodWVSb3QocmFkaWFucygtdUh1ZVNoaWZ0KSkgKiBiYXNlQ29sb3I7CgoJCQl2ZWMzIGNvbCA9IHZlYzMoMC4wKTsKCQkJZmxvYXQgZWRnZUZpZWxkID0gMC4wOwoJCQlmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJCQl2ZWMyIHV2X2xvb3AgPSBzaW4oMS41ICogdS55eCArIDIuMCAqIGNvcyh1IC09IDAuMDEpKTsKCQkJCWZsb2F0IHZhbCA9IDEuMCAtIGV4cCgtNi4wIC8gZXhwKDYuMCAqIGxlbmd0aCh1dl9sb29wICsgc2luKDUuMCAqIHV2X2xvb3AueSAtIDMuMCAqIHRpbWUpIC8gNC4wKSkpOwoJCQkJdmFsID0gcG93KGNsYW1wKHZhbCwgMC4wLCAxLjApLCAxLjQpOwoJCQkJZWRnZUZpZWxkICs9IHZhbDsKCQkJCWNvbCArPSB2YWwgKiBwYWxldHRlW2ldOwoJCQl9CgkJCXZlYzMgYmFuZHMgPSBjb2wgKiB1SW50ZW5zaXR5OwoJCQlmbG9hdCBzb2Z0TWFzayA9IDEuMCAtIGV4cCgtMC44NSAqIGVkZ2VGaWVsZCAqIHVJbnRlbnNpdHkpOwoJCQl2ZWMzIHJnYiA9IGJsZW5kQWRhcHRpdmUodUJhY2tncm91bmRDb2xvciwgYmFuZHMsIHNvZnRNYXNrKTsKCQkJbyA9IHZlYzQocmdiLCAxLjApOwoJCX0KCgkJdm9pZCBtYWluKCkgewoJCQl2ZWM0IGZyYWdDb2xvcjsKCQkJbWFpbkltYWdlKGZyYWdDb2xvciwgdlV2KTsKCQkJZnJhZ0NvbG9yLnJnYiA9IGxpbmVhclRvU3JnYihmcmFnQ29sb3IucmdiKTsKCQkJZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yOwoJCX0KCWA7CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKCF1bmlmb3JtcykgcmV0dXJuOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudUNvbG9yLnZhbHVlLCBjb2xvciwgWzEsIDEwNSAvIDI1NSwgMF0pOwoJCWFwcGx5Q29sb3IodW5pZm9ybXMudUJhY2tncm91bmRDb2xvci52YWx1ZSwgYmFja2dyb3VuZENvbG9yLCBbCgkJCTIzIC8gMjU1LAoJCQkyNCAvIDI1NSwKCQkJMjYgLyAyNTUsCgkJXSk7CgkJdW5pZm9ybXMudVNwZWVkLnZhbHVlID0gc3BlZWQ7CgkJdW5pZm9ybXMudURpc3RvcnRpb24udmFsdWUgPSBkaXN0b3J0aW9uOwoJCXVuaWZvcm1zLnVIdWVTaGlmdC52YWx1ZSA9IGh1ZVNoaWZ0OwoJCXVuaWZvcm1zLnVJbnRlbnNpdHkudmFsdWUgPSBpbnRlbnNpdHk7Cgl9KTsKCglvbk1vdW50KCgpID0+IHsKCQljb25zdCB0YXJnZXRDYW52YXMgPSBjYW52YXM7CgkJaWYgKCF0YXJnZXRDYW52YXMpIHJldHVybjsKCgkJY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoewoJCQljYW52YXM6IHRhcmdldENhbnZhcywKCQkJYWxwaGE6IHRydWUsCgkJCWRwcjogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDEsCgkJfSk7CgkJY29uc3QgZ2wgPSByZW5kZXJlci5nbDsKCQlnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwoKCQljb25zdCBjYW1lcmEgPSBuZXcgQ2FtZXJhKGdsKTsKCQljYW1lcmEucG9zaXRpb24ueiA9IDE7CgoJCWNvbnN0IHNjZW5lID0gbmV3IFRyYW5zZm9ybSgpOwoJCWNvbnN0IGdlb21ldHJ5ID0gbmV3IFRyaWFuZ2xlKGdsKTsKCgkJY29uc3QgaW5pdGlhbENvbG9yID0gdG9MaW5lYXJSZ2IoY29sb3IsIFsxLCAxMDUgLyAyNTUsIDBdKTsKCQljb25zdCBpbml0aWFsQmFja2dyb3VuZENvbG9yID0gdG9MaW5lYXJSZ2IoYmFja2dyb3VuZENvbG9yLCBbCgkJCTIzIC8gMjU1LAoJCQkyNCAvIDI1NSwKCQkJMjYgLyAyNTUsCgkJXSk7CgkJY29uc3QgbG9jYWxVbmlmb3JtcyA9IHsKCQkJdVRpbWU6IHsgdmFsdWU6IDAgfSwKCQkJdVJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWMyKDEsIDEpIH0sCgkJCXVDb2xvcjogewoJCQkJdmFsdWU6IG5ldyBWZWMzKGluaXRpYWxDb2xvclswXSwgaW5pdGlhbENvbG9yWzFdLCBpbml0aWFsQ29sb3JbMl0pLAoJCQl9LAoJCQl1QmFja2dyb3VuZENvbG9yOiB7CgkJCQl2YWx1ZTogbmV3IFZlYzMoCgkJCQkJaW5pdGlhbEJhY2tncm91bmRDb2xvclswXSwKCQkJCQlpbml0aWFsQmFja2dyb3VuZENvbG9yWzFdLAoJCQkJCWluaXRpYWxCYWNrZ3JvdW5kQ29sb3JbMl0sCgkJCQkpLAoJCQl9LAoJCQl1U3BlZWQ6IHsgdmFsdWU6IHNwZWVkIH0sCgkJCXVEaXN0b3J0aW9uOiB7IHZhbHVlOiBkaXN0b3J0aW9uIH0sCgkJCXVIdWVTaGlmdDogeyB2YWx1ZTogaHVlU2hpZnQgfSwKCQkJdUludGVuc2l0eTogeyB2YWx1ZTogaW50ZW5zaXR5IH0sCgkJfTsKCgkJdW5pZm9ybXMgPSBsb2NhbFVuaWZvcm1zOwoKCQljb25zdCBwcm9ncmFtID0gbmV3IFByb2dyYW0oZ2wsIHsKCQkJdmVydGV4OiB2ZXJ0ZXhTaGFkZXIsCgkJCWZyYWdtZW50OiBmcmFnbWVudFNoYWRlciwKCQkJdW5pZm9ybXM6IGxvY2FsVW5pZm9ybXMsCgkJCWRlcHRoVGVzdDogZmFsc2UsCgkJCWRlcHRoV3JpdGU6IGZhbHNlLAoJCX0pOwoKCQljb25zdCBtZXNoID0gbmV3IE1lc2goZ2wsIHsgZ2VvbWV0cnksIHByb2dyYW0gfSk7CgkJbWVzaC5zZXRQYXJlbnQoc2NlbmUpOwoKCQljb25zdCByZXNpemUgPSAoKSA9PiB7CgkJCWNvbnN0IGhvc3QgPSB0YXJnZXRDYW52YXMucGFyZW50RWxlbWVudCA/PyB0YXJnZXRDYW52YXM7CgkJCWNvbnN0IHsgd2lkdGg6IGhvc3RXaWR0aCwgaGVpZ2h0OiBob3N0SGVpZ2h0IH0gPQoJCQkJaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCQkJY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RXaWR0aCkpOwoJCQljb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGhvc3RIZWlnaHQpKTsKCQkJcmVuZGVyZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKCQkJbG9jYWxVbmlmb3Jtcy51UmVzb2x1dGlvbi52YWx1ZS5zZXQod2lkdGgsIGhlaWdodCk7CgkJfTsKCgkJcmVzaXplKCk7CgkJY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKTsKCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcyk7CgkJaWYgKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KQoJCQlvYnNlcnZlci5vYnNlcnZlKHRhcmdldENhbnZhcy5wYXJlbnRFbGVtZW50KTsKCgkJbGV0IHJhZiA9IDA7CgkJbGV0IHByZXZpb3VzID0gMDsKCQljb25zdCB0aWNrID0gKG5vdzogbnVtYmVyKSA9PiB7CgkJCWNvbnN0IGRlbHRhID0gcHJldmlvdXMgPyAobm93IC0gcHJldmlvdXMpIC8gMTAwMCA6IDA7CgkJCXByZXZpb3VzID0gbm93OwoJCQlsb2NhbFVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhOwoKCQkJcmVuZGVyZXIucmVuZGVyKHsgc2NlbmUsIGNhbWVyYSB9KTsKCQkJcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKCQl9OwoKCQlyYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwoKCQlyZXR1cm4gKCkgPT4gewoJCQl3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsKCQkJb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoJCX07Cgl9KTsKPC9zY3JpcHQ+Cgo8Y2FudmFzCgliaW5kOnRoaXM9e2NhbnZhc30KCWNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJsb2NrIGgtZnVsbCB3LWZ1bGwiCglzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsiCglhcmlhLWhpZGRlbj0idHJ1ZSIKPjwvY2FudmFzPgo=", "components/split-hover/SplitHover.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU3BsaXRUZXh0IH0gZnJvbSAiZ3NhcC9kaXN0L1NwbGl0VGV4dCI7CglpbXBvcnQgeyBvbk1vdW50IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB0eXBlIHsgU25pcHBldCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgeyBlbnN1cmVNb3Rpb25Db3JlRWFzZSwgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWludGVyZmFjZSBDb21wb25lbnRQcm9wcyB7CgkJLyoqCgkJICogVGhlIGNvbnRlbnQgdG8gZHVwbGljYXRlIGFuZCBhbmltYXRlIG9uIGhvdmVyLgoJCSAqLwoJCWNoaWxkcmVuPzogU25pcHBldDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIEFuIG9wdGlvbmFsIGV4dGVybmFsIGVsZW1lbnQgdGhhdCB0cmlnZ2VycyB0aGUgaG92ZXIgZWZmZWN0LgoJCSAqIElmIG51bGwsIHRoZSBjb21wb25lbnQncyB3cmFwcGVyIHRyaWdnZXJzIHRoZSBlZmZlY3QuCgkJICogQGRlZmF1bHQgbnVsbAoJCSAqLwoJCWhvdmVyVGFyZ2V0PzogSFRNTEVsZW1lbnQgfCBudWxsOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2hpbGRyZW4sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCWhvdmVyVGFyZ2V0ID0gbnVsbCwKCQkuLi5yZXN0UHJvcHMKCX06IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7CgoJb25Nb3VudCgoKSA9PiB7CgkJcmVnaXN0ZXJQbHVnaW5PbmNlKFNwbGl0VGV4dCk7CgkJZW5zdXJlTW90aW9uQ29yZUVhc2UoKTsKCX0pOwoKCWxldCB3cmFwcGVyUmVmOiBIVE1MU3BhbkVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgb3JpZ2luYWxTcGFuOiBIVE1MU3BhbkVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgY2xvbmVTcGFuOiBIVE1MU3BhbkVsZW1lbnQgfCB1bmRlZmluZWQ7CglsZXQgb3JpZ2luYWxTcGxpdDogU3BsaXRUZXh0IHwgbnVsbCA9IG51bGw7CglsZXQgY2xvbmVTcGxpdDogU3BsaXRUZXh0IHwgbnVsbCA9IG51bGw7CgoJY29uc3QgYXR0YWNoV3JhcHBlclJlZiA9IChub2RlOiBIVE1MU3BhbkVsZW1lbnQpID0+IHsKCQl3cmFwcGVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAod3JhcHBlclJlZiA9PT0gbm9kZSkgewoJCQkJd3JhcHBlclJlZiA9IHVuZGVmaW5lZDsKCQkJfQoJCX07Cgl9OwoKCWNvbnN0IGF0dGFjaE9yaWdpbmFsU3BhbiA9IChub2RlOiBIVE1MU3BhbkVsZW1lbnQpID0+IHsKCQlvcmlnaW5hbFNwYW4gPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmIChvcmlnaW5hbFNwYW4gPT09IG5vZGUpIHsKCQkJCW9yaWdpbmFsU3BhbiA9IHVuZGVmaW5lZDsKCQkJfQoJCX07Cgl9OwoKCWNvbnN0IGF0dGFjaENsb25lU3BhbiA9IChub2RlOiBIVE1MU3BhbkVsZW1lbnQpID0+IHsKCQljbG9uZVNwYW4gPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmIChjbG9uZVNwYW4gPT09IG5vZGUpIHsKCQkJCWNsb25lU3BhbiA9IHVuZGVmaW5lZDsKCQkJfQoJCX07Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuOwoKCQljb25zdCBub2RlID0gaG92ZXJUYXJnZXQgPz8gd3JhcHBlclJlZjsKCQlpZiAoIW5vZGUgfHwgIW9yaWdpbmFsU3BhbiB8fCAhY2xvbmVTcGFuKSByZXR1cm47CgoJCWxldCB0aW1lbGluZTogZ3NhcC5jb3JlLlRpbWVsaW5lIHwgbnVsbCA9IG51bGw7CgoJCW9yaWdpbmFsU3BsaXQgPSBTcGxpdFRleHQuY3JlYXRlKG9yaWdpbmFsU3BhbiwgewoJCQl0eXBlOiAiY2hhcnMiLAoJCQljaGFyc0NsYXNzOiAiaW5saW5lLWJsb2NrIiwKCQkJb25TcGxpdDogKHNlbGYpID0+IHsKCQkJCWNvbnN0IGNsb25lTm9kZSA9IGNsb25lU3BhbjsKCQkJCWlmICghY2xvbmVOb2RlKSByZXR1cm47CgoJCQkJaWYgKGNsb25lU3BsaXQpIGNsb25lU3BsaXQucmV2ZXJ0KCk7CgkJCQljbG9uZVNwbGl0ID0gU3BsaXRUZXh0LmNyZWF0ZShjbG9uZU5vZGUsIHsKCQkJCQl0eXBlOiAiY2hhcnMiLAoJCQkJCWNoYXJzQ2xhc3M6ICJpbmxpbmUtYmxvY2siLAoJCQkJfSk7CgoJCQkJZ3NhcC5zZXQoc2VsZi5jaGFycywgeyB5UGVyY2VudDogMCB9KTsKCQkJCWdzYXAuc2V0KGNsb25lU3BsaXQuY2hhcnMsIHsgeVBlcmNlbnQ6IDEwMCB9KTsKCgkJCQl0aW1lbGluZT8ua2lsbCgpOwoJCQkJdGltZWxpbmUgPSBnc2FwCgkJCQkJLnRpbWVsaW5lKHsgcGF1c2VkOiB0cnVlIH0pCgkJCQkJLnRvKAoJCQkJCQlzZWxmLmNoYXJzLAoJCQkJCQl7CgkJCQkJCQl5UGVyY2VudDogLTEwMCwKCQkJCQkJCXN0YWdnZXI6IDAuMDIsCgkJCQkJCQlkdXJhdGlvbjogMC4zNSwKCQkJCQkJCWVhc2U6ICJtb3Rpb24tY29yZS1lYXNlIiwKCQkJCQkJfSwKCQkJCQkJMCwKCQkJCQkpCgkJCQkJLnRvKAoJCQkJCQljbG9uZVNwbGl0LmNoYXJzLAoJCQkJCQl7CgkJCQkJCQl5UGVyY2VudDogMCwKCQkJCQkJCXN0YWdnZXI6IDAuMDIsCgkJCQkJCQlkdXJhdGlvbjogMC4zNSwKCQkJCQkJCWVhc2U6ICJtb3Rpb24tY29yZS1lYXNlIiwKCQkJCQkJfSwKCQkJCQkJMCwKCQkJCQkpOwoKCQkJCXJldHVybiB0aW1lbGluZTsKCQkJfSwKCQl9KTsKCgkJY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB0aW1lbGluZT8ucGxheSgpOwoJCWNvbnN0IGhhbmRsZUxlYXZlID0gKCkgPT4gdGltZWxpbmU/LnJldmVyc2UoKTsKCgkJbm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgaGFuZGxlRW50ZXIpOwoJCW5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIGhhbmRsZUxlYXZlKTsKCgkJcmV0dXJuICgpID0+IHsKCQkJbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgaGFuZGxlRW50ZXIpOwoJCQlub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCBoYW5kbGVMZWF2ZSk7CgkJCXRpbWVsaW5lPy5raWxsKCk7CgkJCW9yaWdpbmFsU3BsaXQ/LnJldmVydCgpOwoJCQljbG9uZVNwbGl0Py5yZXZlcnQoKTsKCQl9OwoJfSk7Cjwvc2NyaXB0PgoKPHNwYW4KCXsuLi5yZXN0UHJvcHN9CgljbGFzcz17Y24oCgkJImZvbnQtaW5oZXJpdCByZWxhdGl2ZSBpbmxpbmUtZmxleCBvdmVyZmxvdy1oaWRkZW4gYWxpZ24tYmFzZWxpbmUgbGVhZGluZy1ub25lIHRleHQtaW5oZXJpdCIsCgkJY2xhc3NOYW1lLAoJKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCTxzcGFuIHtAYXR0YWNoIGF0dGFjaE9yaWdpbmFsU3Bhbn0+CgkJe0ByZW5kZXIgY2hpbGRyZW4/LigpfQoJPC9zcGFuPgoJPHNwYW4KCQl7QGF0dGFjaCBhdHRhY2hDbG9uZVNwYW59CgkJY2xhc3M9InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQtMCIKCQlhcmlhLWhpZGRlbj0idHJ1ZSIKCT4KCQl7QHJlbmRlciBjaGlsZHJlbj8uKCl9Cgk8L3NwYW4+Cjwvc3Bhbj4K", "components/split-reveal/SplitReveal.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU3BsaXRUZXh0IH0gZnJvbSAiZ3NhcC9kaXN0L1NwbGl0VGV4dCI7CglpbXBvcnQgeyBTY3JvbGxUcmlnZ2VyIH0gZnJvbSAiZ3NhcC9kaXN0L1Njcm9sbFRyaWdnZXIiOwoJaW1wb3J0IHR5cGUgeyBTbmlwcGV0IH0gZnJvbSAic3ZlbHRlIjsKCWltcG9ydCB7IG9uTW91bnQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgZW5zdXJlTW90aW9uQ29yZUVhc2UsIHJlZ2lzdGVyUGx1Z2luT25jZSB9IGZyb20gIi4uL2hlbHBlcnMvZ3NhcCI7CglpbXBvcnQgeyBjbiB9IGZyb20gIi4uL3V0aWxzL2NuIjsKCgl0eXBlIFNwbGl0TW9kZSA9ICJsaW5lcyIgfCAid29yZHMiIHwgImNoYXJzIjsKCglpbnRlcmZhY2UgTW9kZVNldHRpbmdzIHsKCQlkdXJhdGlvbj86IG51bWJlcjsKCQlzdGFnZ2VyPzogbnVtYmVyOwoJfQoKCXR5cGUgU3BsaXRSZXZlYWxDb25maWcgPSBQYXJ0aWFsPFJlY29yZDxTcGxpdE1vZGUsIE1vZGVTZXR0aW5ncz4+OwoKCWludGVyZmFjZSBDb21wb25lbnRQcm9wcyB7CgkJLyoqCgkJICogVGhlIGNvbnRlbnQgdG8gYmUgc3BsaXQgYW5kIHJldmVhbGVkLgoJCSAqLwoJCWNoaWxkcmVuPzogU25pcHBldDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgY29udGFpbmVyLgoJCSAqLwoJCWNsYXNzPzogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSBzcGxpdHRpbmcgbW9kZTogJ2xpbmVzJywgJ3dvcmRzJywgb3IgJ2NoYXJzJy4KCQkgKiBAZGVmYXVsdCAibGluZXMiCgkJICovCgkJbW9kZT86IFNwbGl0TW9kZTsKCQkvKioKCQkgKiBDb25maWd1cmF0aW9uIGZvciBhbmltYXRpb24gZHVyYXRpb24gYW5kIHN0YWdnZXIgZm9yIGVhY2ggbW9kZS4KCQkgKi8KCQljb25maWc/OiBTcGxpdFJldmVhbENvbmZpZzsKCQkvKioKCQkgKiBEZWxheSBiZWZvcmUgdGhlIGFuaW1hdGlvbiBzdGFydHMgKGluIHNlY29uZHMpLgoJCSAqIEBkZWZhdWx0IDAKCQkgKi8KCQlkZWxheT86IG51bWJlcjsKCQkvKioKCQkgKiBXaGV0aGVyIHRvIHRyaWdnZXIgdGhlIGFuaW1hdGlvbiBvbiBzY3JvbGwuCgkJICogQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQl0cmlnZ2VyT25TY3JvbGw/OiBib29sZWFuOwoJCS8qKgoJCSAqIFRoZSBlbGVtZW50IHRvIHVzZSBhcyB0aGUgc2Nyb2xsIHRyaWdnZXIgKG9wdGlvbmFsKS4KCQkgKi8KCQlzY3JvbGxFbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsOwoJCS8qKgoJCSAqIFRoZSBIVE1MIHRhZyB0byB1c2UgZm9yIHRoZSB3cmFwcGVyLgoJCSAqIEBkZWZhdWx0ICJkaXYiCgkJICovCgkJYXM/OiBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA7CgkJW3Byb3A6IHN0cmluZ106IHVua25vd247Cgl9CgoJdHlwZSBSZXF1aXJlZENvbmZpZyA9IFJlY29yZDwKCQlTcGxpdE1vZGUsCgkJeyBkdXJhdGlvbjogbnVtYmVyOyBzdGFnZ2VyOiBudW1iZXIgfQoJPjsKCgljb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWRDb25maWcgPSB7CgkJbGluZXM6IHsgZHVyYXRpb246IDAuOCwgc3RhZ2dlcjogMC4wOCB9LAoJCXdvcmRzOiB7IGR1cmF0aW9uOiAwLjYsIHN0YWdnZXI6IDAuMDYgfSwKCQljaGFyczogeyBkdXJhdGlvbjogMC40LCBzdGFnZ2VyOiAwLjAwOCB9LAoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoU3BsaXRUZXh0LCBTY3JvbGxUcmlnZ2VyKTsKCQllbnN1cmVNb3Rpb25Db3JlRWFzZSgpOwoJfSk7CgoJbGV0IHsKCQljaGlsZHJlbiwKCQljbGFzczogY2xhc3NOYW1lID0gIiIsCgkJbW9kZSA9ICJsaW5lcyIgYXMgU3BsaXRNb2RlLAoJCWNvbmZpZywKCQlhcyA9ICJkaXYiIGFzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcCwKCQlkZWxheSA9IDAsCgkJdHJpZ2dlck9uU2Nyb2xsID0gZmFsc2UsCgkJc2Nyb2xsRWxlbWVudCwKCQkuLi5yZXN0UHJvcHMKCX06IENvbXBvbmVudFByb3BzID0gJHByb3BzKCk7CgoJY29uc3QgcmVzb2x2ZWRDb25maWcgPSAkZGVyaXZlZC5ieSgoKSA9PiB7CgkJY29uc3Qgb3ZlcnJpZGVzID0gY29uZmlnPy5bbW9kZV07CgkJY29uc3QgZGVmYXVsdHMgPSBERUZBVUxUX0NPTkZJR1ttb2RlXTsKCQlyZXR1cm4gewoJCQlkdXJhdGlvbjogb3ZlcnJpZGVzPy5kdXJhdGlvbiA/PyBkZWZhdWx0cy5kdXJhdGlvbiwKCQkJc3RhZ2dlcjogb3ZlcnJpZGVzPy5zdGFnZ2VyID8/IGRlZmF1bHRzLnN0YWdnZXIsCgkJfTsKCX0pOwoKCWxldCB3cmFwcGVyUmVmOiBIVE1MU3BhbkVsZW1lbnQgfCBudWxsID0gbnVsbDsKCgljb25zdCBhdHRhY2hXcmFwcGVyUmVmID0gKG5vZGU6IEhUTUxTcGFuRWxlbWVudCkgPT4gewoJCXdyYXBwZXJSZWYgPSBub2RlOwoJCXJldHVybiAoKSA9PiB7CgkJCWlmICh3cmFwcGVyUmVmID09PSBub2RlKSB7CgkJCQl3cmFwcGVyUmVmID0gbnVsbDsKCQkJfQoJCX07Cgl9OwoKCSRlZmZlY3QoKCkgPT4gewoJCWlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuOwoKCQljb25zdCBub2RlID0gd3JhcHBlclJlZjsKCQlpZiAoIW5vZGUpIHJldHVybjsKCQljb25zdCByZXNvbHZlZFNjcm9sbGVyID0KCQkJdHlwZW9mIHNjcm9sbEVsZW1lbnQgPT09ICJzdHJpbmciCgkJCQk/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHNjcm9sbEVsZW1lbnQpCgkJCQk6IHNjcm9sbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudAoJCQkJCT8gc2Nyb2xsRWxlbWVudAoJCQkJCTogbnVsbDsKCQljb25zdCBzY3JvbGxlciA9CgkJCXJlc29sdmVkU2Nyb2xsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHJlc29sdmVkU2Nyb2xsZXIgOiB3aW5kb3c7CgoJCWNvbnN0IHNwbGl0ID0gU3BsaXRUZXh0LmNyZWF0ZShub2RlLCB7CgkJCXR5cGU6ICJsaW5lcywgd29yZHMsIGNoYXJzIiwKCQkJdGFnOiBhcywKCQkJbWFzazogImxpbmVzIiwKCQl9KTsKCgkJY29uc3QgdGFyZ2V0cyA9CgkJCW1vZGUgPT09ICJsaW5lcyIKCQkJCT8gKHNwbGl0LmxpbmVzID8/IFtdKQoJCQkJOiBtb2RlID09PSAid29yZHMiCgkJCQkJPyAoc3BsaXQud29yZHMgPz8gW10pCgkJCQkJOiAoc3BsaXQuY2hhcnMgPz8gW10pOwoKCQlpZiAoIXRhcmdldHMubGVuZ3RoKSB7CgkJCXNwbGl0LnJldmVydCgpOwoJCQlyZXR1cm47CgkJfQoKCQlnc2FwLnNldCh0YXJnZXRzLCB7IHlQZXJjZW50OiAxMTAgfSk7CgoJCWNvbnN0IHR3ZWVuID0gZ3NhcC50byh0YXJnZXRzLCB7CgkJCXlQZXJjZW50OiAwLAoJCQlkdXJhdGlvbjogcmVzb2x2ZWRDb25maWcuZHVyYXRpb24sCgkJCXN0YWdnZXI6IHJlc29sdmVkQ29uZmlnLnN0YWdnZXIsCgkJCWVhc2U6ICJtb3Rpb24tY29yZS1lYXNlIiwKCQkJbGF6eTogZmFsc2UsCgkJCWRlbGF5OiBkZWxheSwKCQkJc2Nyb2xsVHJpZ2dlcjogdHJpZ2dlck9uU2Nyb2xsCgkJCQk/IHsKCQkJCQkJdHJpZ2dlcjogbm9kZSwKCQkJCQkJc2Nyb2xsZXIsCgkJCQkJCXN0YXJ0OiAidG9wIDg1JSIsCgkJCQkJfQoJCQkJOiB1bmRlZmluZWQsCgkJfSk7CgoJCXJldHVybiAoKSA9PiB7CgkJCXR3ZWVuLmtpbGwoKTsKCQkJc3BsaXQucmV2ZXJ0KCk7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxzcGFuCgl7Li4ucmVzdFByb3BzfQoJY2xhc3M9e2NuKCJmb250LWluaGVyaXQgcmVsYXRpdmUgYWxpZ24tYmFzZWxpbmUgdGV4dC1pbmhlcml0IiwgY2xhc3NOYW1lKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9zcGFuPgo=", "components/stacking-words/StackingWords.svelte": "PHNjcmlwdCBsYW5nPSJ0cyI+CglpbXBvcnQgeyBnc2FwIH0gZnJvbSAiZ3NhcC9kaXN0L2dzYXAiOwoJaW1wb3J0IHsgU2Nyb2xsVHJpZ2dlciB9IGZyb20gImdzYXAvZGlzdC9TY3JvbGxUcmlnZ2VyIjsKCWltcG9ydCB7IFNwbGl0VGV4dCB9IGZyb20gImdzYXAvZGlzdC9TcGxpdFRleHQiOwoJaW1wb3J0IHsgb25Nb3VudCB9IGZyb20gInN2ZWx0ZSI7CglpbXBvcnQgdHlwZSB7IFNuaXBwZXQgfSBmcm9tICJzdmVsdGUiOwoJaW1wb3J0IHsgcmVnaXN0ZXJQbHVnaW5PbmNlIH0gZnJvbSAiLi4vaGVscGVycy9nc2FwIjsKCWltcG9ydCB7IGNuIH0gZnJvbSAiLi4vdXRpbHMvY24iOwoKCWludGVyZmFjZSBQcm9wcyB7CgkJLyoqCgkJICogVGV4dC9jb250ZW50IHRvIHNwbGl0IGludG8gbGluZXMgYW5kIHdvcmRzLgoJCSAqLwoJCWNoaWxkcmVuPzogU25pcHBldDsKCQkvKioKCQkgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGZvciB0aGUgd3JhcHBlci4KCQkgKi8KCQljbGFzcz86IHN0cmluZzsKCQkvKioKCQkgKiBTY3JvbGxUcmlnZ2VyIHN0YXJ0IHBvc2l0aW9uLgoJCSAqIEBkZWZhdWx0ICJ0b3AgOTAlIgoJCSAqLwoJCXN0YXJ0Pzogc3RyaW5nOwoJCS8qKgoJCSAqIFNjcm9sbFRyaWdnZXIgZW5kIHBvc2l0aW9uLgoJCSAqIEBkZWZhdWx0ICJ0b3AgMzAlIgoJCSAqLwoJCWVuZD86IHN0cmluZzsKCQkvKioKCQkgKiBTY3JvbGxUcmlnZ2VyIHNjcnViIHZhbHVlLgoJCSAqIEBkZWZhdWx0IDEuMjM0CgkJICovCgkJc2NydWI/OiBib29sZWFuIHwgbnVtYmVyOwoJCS8qKgoJCSAqIFN0YWdnZXIgYXBwbGllZCBhY3Jvc3Mgd29yZHMgaW5zaWRlIGVhY2ggbGluZS4KCQkgKiBAZGVmYXVsdCAwLjIxCgkJICovCgkJc3RhZ2dlcj86IG51bWJlcjsKCQkvKioKCQkgKiBFYXNpbmcgdXNlZCBmb3Igd29yZCB0cmFuc2xhdGlvbi4KCQkgKiBAZGVmYXVsdCAicG93ZXIzLm91dCIKCQkgKi8KCQllYXNlPzogc3RyaW5nOwoJCS8qKgoJCSAqIFRoZSBlbGVtZW50IHRvIHVzZSBhcyB0aGUgc2Nyb2xsZXIuIERlZmF1bHRzIHRvIHdpbmRvdy4KCQkgKi8KCQlzY3JvbGxFbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsOwoJCVtwcm9wOiBzdHJpbmddOiB1bmtub3duOwoJfQoKCWxldCB7CgkJY2hpbGRyZW4sCgkJY2xhc3M6IGNsYXNzTmFtZSA9ICIiLAoJCXN0YXJ0ID0gInRvcCA5MCUiLAoJCWVuZCA9ICJ0b3AgMzAlIiwKCQlzY3J1YiA9IDEuMjM0LAoJCXN0YWdnZXIgPSAwLjIxLAoJCWVhc2UgPSAicG93ZXIzLm91dCIsCgkJc2Nyb2xsRWxlbWVudCwKCQkuLi5yZXN0UHJvcHMKCX06IFByb3BzID0gJHByb3BzKCk7CgoJbGV0IHdyYXBwZXJSZWY6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7CglsZXQgc3BsaXRJbnN0YW5jZTogU3BsaXRUZXh0IHwgbnVsbCA9IG51bGw7CglsZXQgbGluZVR3ZWVuczogZ3NhcC5jb3JlLlR3ZWVuW10gPSBbXTsKCWNvbnN0IE9GRlNDUkVFTl9NQVJHSU5fUFggPSA4OwoKCWNvbnN0IGF0dGFjaFdyYXBwZXJSZWYgPSAobm9kZTogSFRNTEVsZW1lbnQpID0+IHsKCQl3cmFwcGVyUmVmID0gbm9kZTsKCQlyZXR1cm4gKCkgPT4gewoJCQlpZiAod3JhcHBlclJlZiA9PT0gbm9kZSkgewoJCQkJd3JhcHBlclJlZiA9IG51bGw7CgkJCX0KCQl9OwoJfTsKCglvbk1vdW50KCgpID0+IHsKCQlyZWdpc3RlclBsdWdpbk9uY2UoU2Nyb2xsVHJpZ2dlciwgU3BsaXRUZXh0KTsKCX0pOwoKCWZ1bmN0aW9uIGtpbGxMaW5lVHdlZW5zKCkgewoJCWxpbmVUd2VlbnMuZm9yRWFjaCgodHdlZW4pID0+IHR3ZWVuLmtpbGwoKSk7CgkJbGluZVR3ZWVucyA9IFtdOwoJfQoKCWFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JMYXlvdXQoKSB7CgkJYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHk7CgkJYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+CgkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpLAoJCSk7CgkJYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+CgkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpLAoJCSk7Cgl9CgoJJGVmZmVjdCgoKSA9PiB7CgkJaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm47CgkJY29uc3Qgbm9kZSA9IHdyYXBwZXJSZWY7CgkJaWYgKCFub2RlKSByZXR1cm47CgkJY29uc3QgdHJpZ2dlclN0YXJ0ID0gc3RhcnQ7CgkJY29uc3QgdHJpZ2dlckVuZCA9IGVuZDsKCQljb25zdCB0cmlnZ2VyU2NydWIgPSBzY3J1YjsKCQljb25zdCB3b3JkU3RhZ2dlciA9IHN0YWdnZXI7CgkJY29uc3Qgd29yZEVhc2UgPSBlYXNlOwoJCWNvbnN0IHJlc29sdmVkU2Nyb2xsZXIgPQoJCQl0eXBlb2Ygc2Nyb2xsRWxlbWVudCA9PT0gInN0cmluZyIKCQkJCT8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oc2Nyb2xsRWxlbWVudCkKCQkJCTogc2Nyb2xsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50CgkJCQkJPyBzY3JvbGxFbGVtZW50CgkJCQkJOiBudWxsOwoJCWNvbnN0IHRyaWdnZXJTY3JvbGxlciA9CgkJCXJlc29sdmVkU2Nyb2xsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHJlc29sdmVkU2Nyb2xsZXIgOiB3aW5kb3c7CgoJCWxldCBjYW5jZWxsZWQgPSBmYWxzZTsKCgkJY29uc3QgaW5pdCA9IGFzeW5jICgpID0+IHsKCQkJYXdhaXQgd2FpdEZvckxheW91dCgpOwoJCQlpZiAoY2FuY2VsbGVkIHx8ICF3cmFwcGVyUmVmKSByZXR1cm47CgoJCQlzcGxpdEluc3RhbmNlPy5yZXZlcnQoKTsKCQkJa2lsbExpbmVUd2VlbnMoKTsKCgkJCXNwbGl0SW5zdGFuY2UgPSBTcGxpdFRleHQuY3JlYXRlKHdyYXBwZXJSZWYsIHsKCQkJCWFyaWE6ICJoaWRkZW4iLAoJCQkJYXV0b1NwbGl0OiB0cnVlLAoJCQkJbGluZXNDbGFzczogInN0YWNraW5nLXdvcmRzLWxpbmUiLAoJCQkJb25TcGxpdDogKHNlbGYpID0+IHsKCQkJCQlraWxsTGluZVR3ZWVucygpOwoKCQkJCQljb25zdCB3b3JkcyA9IChzZWxmLndvcmRzID8/IFtdKSBhcyBIVE1MRWxlbWVudFtdOwoJCQkJCXdvcmRzLmZvckVhY2goKHdvcmQpID0+IHsKCQkJCQkJY29uc3QgcmVjdCA9IHdvcmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CgkJCQkJCWdzYXAuc2V0KHdvcmQsIHsKCQkJCQkJCXg6CgkJCQkJCQkJd2luZG93LmlubmVyV2lkdGggLQoJCQkJCQkJCXJlY3QubGVmdCArCgkJCQkJCQkJcmVjdC53aWR0aCArCgkJCQkJCQkJT0ZGU0NSRUVOX01BUkdJTl9QWCwKCQkJCQkJfSk7CgkJCQkJfSk7CgoJCQkJCShzZWxmLmxpbmVzID8/IFtdKS5mb3JFYWNoKChsaW5lKSA9PiB7CgkJCQkJCWNvbnN0IHR3ZWVuID0gZ3NhcC50bygKCQkJCQkJCWxpbmUucXVlcnlTZWxlY3RvckFsbCgiLnN0YWNraW5nLXdvcmRzLXdvcmQiKSwKCQkJCQkJCXsKCQkJCQkJCQllYXNlOiB3b3JkRWFzZSwKCQkJCQkJCQlzdGFnZ2VyOiB3b3JkU3RhZ2dlciwKCQkJCQkJCQl4OiAwLAoJCQkJCQkJCXNjcm9sbFRyaWdnZXI6IHsKCQkJCQkJCQkJdHJpZ2dlcjogbGluZSwKCQkJCQkJCQkJc3RhcnQ6IHRyaWdnZXJTdGFydCwKCQkJCQkJCQkJZW5kOiB0cmlnZ2VyRW5kLAoJCQkJCQkJCQlzY3J1YjogdHJpZ2dlclNjcnViLAoJCQkJCQkJCQlzY3JvbGxlcjogdHJpZ2dlclNjcm9sbGVyLAoJCQkJCQkJCQlpbnZhbGlkYXRlT25SZWZyZXNoOiB0cnVlLAoJCQkJCQkJCX0sCgkJCQkJCQl9LAoJCQkJCQkpOwoJCQkJCQlsaW5lVHdlZW5zLnB1c2godHdlZW4pOwoJCQkJCX0pOwoKCQkJCQlTY3JvbGxUcmlnZ2VyLnJlZnJlc2goKTsKCQkJCX0sCgkJCQl0YWc6ICJzcGFuIiwKCQkJCXR5cGU6ICJsaW5lcywgd29yZHMiLAoJCQkJd29yZHNDbGFzczogInN0YWNraW5nLXdvcmRzLXdvcmQiLAoJCQl9KTsKCgkJCWdzYXAuc2V0KHdyYXBwZXJSZWYsIHsgYXV0b0FscGhhOiAxIH0pOwoJCX07CgoJCXZvaWQgaW5pdCgpOwoKCQlyZXR1cm4gKCkgPT4gewoJCQljYW5jZWxsZWQgPSB0cnVlOwoJCQlraWxsTGluZVR3ZWVucygpOwoJCQlzcGxpdEluc3RhbmNlPy5yZXZlcnQoKTsKCQkJc3BsaXRJbnN0YW5jZSA9IG51bGw7CgkJfTsKCX0pOwo8L3NjcmlwdD4KCjxkaXYKCXsuLi5yZXN0UHJvcHN9CgljbGFzcz17Y24oInN0YWNraW5nLXdvcmRzIiwgY2xhc3NOYW1lKX0KCXtAYXR0YWNoIGF0dGFjaFdyYXBwZXJSZWZ9Cj4KCXtAcmVuZGVyIGNoaWxkcmVuPy4oKX0KPC9kaXY+Cgo8c3R5bGU+Cgkuc3RhY2tpbmctd29yZHMgewoJCXZpc2liaWxpdHk6IGhpZGRlbjsKCX0KCgkuc3RhY2tpbmctd29yZHMgOmdsb2JhbCguc3RhY2tpbmctd29yZHMtbGluZSksCgkuc3RhY2tpbmctd29yZHMgOmdsb2JhbCguc3RhY2tpbmctd29yZHMtbGluZS1tYXNrKSB7CgkJZGlzcGxheTogYmxvY2s7Cgl9CgoJLnN0YWNraW5nLXdvcmRzIDpnbG9iYWwoLnN0YWNraW5nLXdvcmRzLXdvcmQpIHsKCQlkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgkJd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKCX0KPC9zdHlsZT4K", diff --git a/apps/web/static/registry/registry.json b/apps/web/static/registry/registry.json index 22830ed..681a78e 100644 --- a/apps/web/static/registry/registry.json +++ b/apps/web/static/registry/registry.json @@ -36,6 +36,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -123,6 +127,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -258,6 +266,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/fluid-pointer.ts", + "target": "helpers" } ] }, @@ -282,6 +294,14 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" + }, + { + "path": "helpers/fluid-pointer.ts", + "target": "helpers" } ] }, @@ -355,6 +375,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -420,6 +444,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -445,6 +473,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -571,6 +603,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -742,6 +778,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -812,6 +852,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, @@ -864,6 +908,10 @@ { "path": "utils/cn.ts", "target": "utils" + }, + { + "path": "helpers/color.ts", + "target": "helpers" } ] }, diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte index 101045a..bfd23dc 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte @@ -31,7 +31,7 @@ color?: SceneProps["color"]; /** * Background color. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: SceneProps["backgroundColor"]; [key: string]: unknown; @@ -43,7 +43,7 @@ density = 25, strength = 25, color = "#00ff00", - backgroundColor = "#000000", + backgroundColor = "#17181A", ...rest }: Props = $props(); diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte index f2889d3..677fbb1 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte @@ -35,7 +35,7 @@ color?: string; /** * Background color. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: string; } @@ -45,7 +45,7 @@ density = 25.0, strength = 25.0, color = "#00ff00", - backgroundColor = "#000000", + backgroundColor = "#17181A", }: Props = $props(); type UniformState = { @@ -68,7 +68,7 @@ const coverScaleUniform = new Vec2(1, 1); const coverOffsetUniform = new Vec2(0, 0); const colorUniform = new Vec3(0, 1, 0); - const backgroundColorUniform = new Vec3(0, 0, 0); + const backgroundColorUniform = new Vec3(23 / 255, 24 / 255, 26 / 255); let canvasWidth = 1; let canvasHeight = 1; @@ -228,7 +228,11 @@ }); $effect(() => { - const [r, g, b] = toLinearRgb(backgroundColor, [0, 0, 0]); + const [r, g, b] = toLinearRgb(backgroundColor, [ + 23 / 255, + 24 / 255, + 26 / 255, + ]); backgroundColorUniform.set(r, g, b); }); diff --git a/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte b/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte index a29f381..45ed1a7 100644 --- a/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte +++ b/packages/motion-core/src/lib/components/dithered-image/DitheredImage.svelte @@ -31,7 +31,7 @@ color?: SceneProps["color"]; /** * Background color. - * @default "#111113" + * @default "#17181A" */ backgroundColor?: SceneProps["backgroundColor"]; /** @@ -49,7 +49,7 @@ ditherMap = "bayer4x4", pixelSize = 1, color = "#ff6900", - backgroundColor = "#111113", + backgroundColor = "#17181A", threshold = 0.0, ...rest }: Props = $props(); diff --git a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte index 533f4dd..e95dd67 100644 --- a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte +++ b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte @@ -37,7 +37,7 @@ color?: ColorRepresentation; /** * Background color. - * @default "#111113" + * @default "#17181A" */ backgroundColor?: ColorRepresentation; /** @@ -52,7 +52,7 @@ ditherMap = "bayer4x4", pixelSize = 1, color = "#ff6900", - backgroundColor = "#111113", + backgroundColor = "#17181A", threshold = 0.0, }: Props = $props(); @@ -114,7 +114,7 @@ const coverScaleUniform = new Vec2(1, 1); const coverOffsetUniform = new Vec2(0, 0); const colorUniform = new Vec3(1, 105 / 255, 0); - const backgroundColorUniform = new Vec3(17 / 255, 17 / 255, 19 / 255); + const backgroundColorUniform = new Vec3(23 / 255, 24 / 255, 26 / 255); const applyColor = ( target: Vec3, @@ -258,9 +258,9 @@ uniforms.uThreshold.value = threshold; applyColor(uniforms.uColor.value, color, [1, 105 / 255, 0]); applyColor(uniforms.uBackgroundColor.value, backgroundColor, [ - 17 / 255, - 17 / 255, - 19 / 255, + 23 / 255, + 24 / 255, + 26 / 255, ]); }); @@ -358,9 +358,9 @@ applyColor(colorUniform, color, [1, 105 / 255, 0]); applyColor(backgroundColorUniform, backgroundColor, [ - 17 / 255, - 17 / 255, - 19 / 255, + 23 / 255, + 24 / 255, + 26 / 255, ]); const program = new Program(gl, { diff --git a/packages/motion-core/src/lib/components/god-rays/GodRays.svelte b/packages/motion-core/src/lib/components/god-rays/GodRays.svelte index f0576fd..60d98e7 100644 --- a/packages/motion-core/src/lib/components/god-rays/GodRays.svelte +++ b/packages/motion-core/src/lib/components/god-rays/GodRays.svelte @@ -17,7 +17,7 @@ color?: SceneProps["color"]; /** * Color of the background. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: SceneProps["backgroundColor"]; /** @@ -91,7 +91,7 @@ let { class: className = "", color = "#FFFFFF", - backgroundColor = "#000000", + backgroundColor = "#17181A", anchorX = 0.5, anchorY = 1.2, directionX = 0.0, diff --git a/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte b/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte index f848694..27ad151 100644 --- a/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte +++ b/packages/motion-core/src/lib/components/god-rays/GodRaysScene.svelte @@ -20,7 +20,7 @@ color?: ColorRepresentation; /** * Color of the background. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: ColorRepresentation; /** @@ -92,7 +92,7 @@ let { color = "#FFFFFF", - backgroundColor = "#000000", + backgroundColor = "#17181A", anchorX = 0.5, anchorY = 1.2, directionX = 0.0, @@ -300,7 +300,11 @@ $effect(() => { if (!uniforms) return; applyColor(uniforms.uColor.value, color, [1, 1, 1]); - applyColor(uniforms.uBackgroundColor.value, backgroundColor, [0, 0, 0]); + applyColor(uniforms.uBackgroundColor.value, backgroundColor, [ + 23 / 255, + 24 / 255, + 26 / 255, + ]); uniforms.uAnchorX.value = anchorX; uniforms.uAnchorY.value = anchorY; uniforms.uRayDir.value.set(directionX, directionY); @@ -334,7 +338,11 @@ const geometry = new Triangle(gl); const initialColor = toLinearRgb(color, [1, 1, 1]); - const initialBackground = toLinearRgb(backgroundColor, [0, 0, 0]); + const initialBackground = toLinearRgb(backgroundColor, [ + 23 / 255, + 24 / 255, + 26 / 255, + ]); const localUniforms = { uTime: { value: 0.0 }, diff --git a/packages/motion-core/src/lib/components/halo/Halo.svelte b/packages/motion-core/src/lib/components/halo/Halo.svelte index edf582f..eea73c8 100644 --- a/packages/motion-core/src/lib/components/halo/Halo.svelte +++ b/packages/motion-core/src/lib/components/halo/Halo.svelte @@ -17,7 +17,7 @@ rotationSpeed?: SceneProps["rotationSpeed"]; /** * Color of the background. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: SceneProps["backgroundColor"]; /** @@ -56,7 +56,7 @@ let { class: className = "", rotationSpeed = 0.5, - backgroundColor = "#000000", + backgroundColor = "#17181A", cameraDistance = 3.0, fov = 55.0, sunX = 0.0, diff --git a/packages/motion-core/src/lib/components/halo/HaloScene.svelte b/packages/motion-core/src/lib/components/halo/HaloScene.svelte index 31d466e..b049ce4 100644 --- a/packages/motion-core/src/lib/components/halo/HaloScene.svelte +++ b/packages/motion-core/src/lib/components/halo/HaloScene.svelte @@ -20,7 +20,7 @@ rotationSpeed?: number; /** * Color of the background. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: ColorRepresentation; /** @@ -57,7 +57,7 @@ let { rotationSpeed = 0.5, - backgroundColor = "#000000", + backgroundColor = "#17181A", cameraDistance = 3.0, fov = 55.0, sunX = 0.0, @@ -311,7 +311,11 @@ const scene = new Transform(); const geometry = new Triangle(gl); - const initialBackground = toLinearRgb(backgroundColor, [0, 0, 0]); + const initialBackground = toLinearRgb(backgroundColor, [ + 23 / 255, + 24 / 255, + 26 / 255, + ]); const initialSun = new Vec3(0, 0, 1); setSunDirection(initialSun, sunX, sunY, sunZ); diff --git a/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte b/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte index 1b1bb34..01e4cd1 100644 --- a/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte +++ b/packages/motion-core/src/lib/components/specular-band/SpecularBand.svelte @@ -17,7 +17,7 @@ color?: SceneProps["color"]; /** * Color of the background. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: SceneProps["backgroundColor"]; /** @@ -46,7 +46,7 @@ let { class: className = "", color = "#FF6900", - backgroundColor = "#000000", + backgroundColor = "#17181A", speed = 1.0, distortion = 0.2, hueShift = 30.0, diff --git a/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte b/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte index ce901c0..695388c 100644 --- a/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte +++ b/packages/motion-core/src/lib/components/specular-band/SpecularBandScene.svelte @@ -20,7 +20,7 @@ color?: ColorRepresentation; /** * Color of the background. - * @default "#000000" + * @default "#17181A" */ backgroundColor?: ColorRepresentation; /** @@ -47,7 +47,7 @@ let { color = "#FF6900", - backgroundColor = "#000000", + backgroundColor = "#17181A", speed = 1.0, distortion = 0.2, hueShift = 30.0, @@ -181,7 +181,11 @@ $effect(() => { if (!uniforms) return; applyColor(uniforms.uColor.value, color, [1, 105 / 255, 0]); - applyColor(uniforms.uBackgroundColor.value, backgroundColor, [0, 0, 0]); + applyColor(uniforms.uBackgroundColor.value, backgroundColor, [ + 23 / 255, + 24 / 255, + 26 / 255, + ]); uniforms.uSpeed.value = speed; uniforms.uDistortion.value = distortion; uniforms.uHueShift.value = hueShift; @@ -207,7 +211,11 @@ const geometry = new Triangle(gl); const initialColor = toLinearRgb(color, [1, 105 / 255, 0]); - const initialBackgroundColor = toLinearRgb(backgroundColor, [0, 0, 0]); + const initialBackgroundColor = toLinearRgb(backgroundColor, [ + 23 / 255, + 24 / 255, + 26 / 255, + ]); const localUniforms = { uTime: { value: 0 }, uResolution: { value: new Vec2(1, 1) }, From 676d0c46984f219cbb63b80b8f855dd94dab05a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Wed, 15 Apr 2026 19:17:19 +0200 Subject: [PATCH 09/24] chore(web): drop redundant canvas backgroundColor demo props --- .../routes/docs/ascii-renderer/AsciiRendererDemo.svelte | 1 - .../routes/docs/dithered-image/DitheredImageDemo.svelte | 1 - apps/web/src/routes/docs/god-rays/GodRaysDemo.svelte | 7 +------ apps/web/src/routes/docs/halo/HaloDemo.svelte | 6 +----- 4 files changed, 2 insertions(+), 13 deletions(-) diff --git a/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte b/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte index 09946aa..9b3d528 100644 --- a/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte +++ b/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte @@ -9,6 +9,5 @@ density={25} strength={3.0} color="#00ff00" - backgroundColor="#17181A" class="h-full min-h-96 w-full" /> diff --git a/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte b/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte index 2fef362..ead9a1d 100644 --- a/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte +++ b/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte @@ -8,5 +8,4 @@ class="h-full min-h-96 w-full" pixelSize={2} threshold={0.21} - backgroundColor="#17181A" /> diff --git a/apps/web/src/routes/docs/god-rays/GodRaysDemo.svelte b/apps/web/src/routes/docs/god-rays/GodRaysDemo.svelte index d654a8c..27c6e8f 100644 --- a/apps/web/src/routes/docs/god-rays/GodRaysDemo.svelte +++ b/apps/web/src/routes/docs/god-rays/GodRaysDemo.svelte @@ -2,9 +2,4 @@ import { GodRays } from "motion-core"; - + diff --git a/apps/web/src/routes/docs/halo/HaloDemo.svelte b/apps/web/src/routes/docs/halo/HaloDemo.svelte index ed251f1..8a78679 100644 --- a/apps/web/src/routes/docs/halo/HaloDemo.svelte +++ b/apps/web/src/routes/docs/halo/HaloDemo.svelte @@ -2,8 +2,4 @@ import { Halo } from "motion-core"; - + From 2639a33a80413be4a72d1becbf100f5d932ad188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Thu, 16 Apr 2026 17:53:43 +0200 Subject: [PATCH 10/24] fix(canvas): remove redundant init passes and dither texture leak --- .../components/ascii-renderer/AsciiRendererScene.svelte | 1 - .../src/lib/components/card-3d/Card3DScene.svelte | 2 -- .../components/dithered-image/DitheredImageScene.svelte | 8 +++++++- .../lib/components/fake-3d-image/Fake3DImageScene.svelte | 2 -- .../fluid-image-reveal/FluidImageRevealScene.svelte | 2 -- .../src/lib/components/glass-pane/GlassPaneScene.svelte | 1 - .../glass-slideshow/GlassSlideshowScene.svelte | 9 +-------- .../infinite-gallery/InfiniteGalleryScene.svelte | 1 - .../interactive-grid/InteractiveGridScene.svelte | 9 +++++---- .../pixelated-image/PixelatedImageScene.svelte | 1 - .../lib/components/rubiks-cube/RubiksCubeScene.svelte | 2 -- .../lib/components/water-ripple/WaterRippleScene.svelte | 1 - 12 files changed, 13 insertions(+), 26 deletions(-) diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte index 677fbb1..5784002 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte @@ -332,7 +332,6 @@ }; resize(); - loadImage(image); const observer = new ResizeObserver(resize); observer.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte b/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte index dbeba4f..690f30e 100644 --- a/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte +++ b/packages/motion-core/src/lib/components/card-3d/Card3DScene.svelte @@ -394,8 +394,6 @@ previousGeometry.remove(); }; setDimensions = updateDimensions; - updateDimensions({ width, height, depth, radius }); - loadImage(image); const resize = () => { const host = targetCanvas.parentElement ?? targetCanvas; diff --git a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte index e95dd67..b97c6ce 100644 --- a/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte +++ b/packages/motion-core/src/lib/components/dithered-image/DitheredImageScene.svelte @@ -331,13 +331,20 @@ }; let thresholdState = createThresholdTexture(gl, ditherMap); + let currentDitherMap = ditherMap; const setThresholdMapTexture = (map: DitherMap) => { + if (map === currentDitherMap) return; + const previousTexture = thresholdState.texture; thresholdState = createThresholdTexture(gl, map); + currentDitherMap = map; if (uniforms) { uniforms.uThresholdMap.value = thresholdState.texture; uniforms.uMapSize.value.set(thresholdState.size, thresholdState.size); } mapSizeUniform.set(thresholdState.size, thresholdState.size); + if (previousTexture.texture) { + gl.deleteTexture(previousTexture.texture); + } }; const localUniforms: UniformState = { @@ -392,7 +399,6 @@ }; resize(); - loadImage(image); const observer = new ResizeObserver(resize); observer.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte b/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte index f8730ec..c61d935 100644 --- a/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte +++ b/packages/motion-core/src/lib/components/fake-3d-image/Fake3DImageScene.svelte @@ -269,8 +269,6 @@ targetCanvas.addEventListener("pointerleave", handlePointerLeave); resize(); - loadColor(colorSrc); - loadDepth(depthSrc); const observer = new ResizeObserver(resize); observer.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte index 22ff36f..af9c63d 100644 --- a/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte +++ b/packages/motion-core/src/lib/components/fluid-image-reveal/FluidImageRevealScene.svelte @@ -605,8 +605,6 @@ }; resizeSimulation(); - loadBaseImage(baseImage); - loadRevealImage(revealImage); const resizeObserver = new ResizeObserver(resizeSimulation); resizeObserver.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte b/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte index dc67de4..88c7186 100644 --- a/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte +++ b/packages/motion-core/src/lib/components/glass-pane/GlassPaneScene.svelte @@ -262,7 +262,6 @@ }; resize(); - loadImage(image); const observer = new ResizeObserver(resize); observer.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshowScene.svelte b/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshowScene.svelte index 3a44c65..8e38698 100644 --- a/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshowScene.svelte +++ b/packages/motion-core/src/lib/components/glass-slideshow/GlassSlideshowScene.svelte @@ -41,7 +41,7 @@ let canvas = $state(); - let progress = $state({ value: 0 }); + const progress = { value: 0 }; let currentIndex = $state(0); let nextIndex = $state(0); let isTransitioning = $state(false); @@ -367,7 +367,6 @@ ); }; setImageSources = replaceTextures; - replaceTextures(images); const getTextureSize = (texture: Texture): [number, number] => { const image = texture.image as @@ -409,12 +408,6 @@ localUniforms.uGlassChromaticAberration.value = next.chromaticAberration; localUniforms.uGlassRefractionStrength.value = next.refraction; }; - setUniformParams({ - intensity, - distortion, - chromaticAberration, - refraction, - }); const program = new Program(gl, { vertex: vertexShader, diff --git a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte index 3e7f1ab..573ec3e 100644 --- a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte +++ b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte @@ -303,7 +303,6 @@ } }; setImageItems = setTexturesFromImages; - setTexturesFromImages(images); const planesData: PlaneData[] = Array.from({ length: count }, (_, i) => ({ index: i, diff --git a/packages/motion-core/src/lib/components/interactive-grid/InteractiveGridScene.svelte b/packages/motion-core/src/lib/components/interactive-grid/InteractiveGridScene.svelte index 5fbd43f..1fd2eae 100644 --- a/packages/motion-core/src/lib/components/interactive-grid/InteractiveGridScene.svelte +++ b/packages/motion-core/src/lib/components/interactive-grid/InteractiveGridScene.svelte @@ -63,8 +63,8 @@ let setImageSource = $state<(source: string) => void>(); let setGridSize = $state<(value: number) => void>(); - let currentVX = $state(0); - let currentVY = $state(0); + let currentVX = 0; + let currentVY = 0; let prevX = 0; let prevY = 0; @@ -215,8 +215,10 @@ let gridState = createGridState(gl, grid); const replaceGrid = (value: number) => { + const nextSize = normalizeGridSize(value); + if (nextSize === gridState.size) return; const previousTexture = gridState.texture; - gridState = createGridState(gl, value); + gridState = createGridState(gl, nextSize); localUniforms.uDataTexture.value = gridState.texture; if (previousTexture.texture) { gl.deleteTexture(previousTexture.texture); @@ -256,7 +258,6 @@ }; resize(); - loadImage(image); const observer = new ResizeObserver(resize); observer.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte b/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte index 7a3af35..a455a2b 100644 --- a/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte +++ b/packages/motion-core/src/lib/components/pixelated-image/PixelatedImageScene.svelte @@ -197,7 +197,6 @@ }; resize(); - loadImage(image); const observer = new ResizeObserver(resize); observer.observe(targetCanvas); diff --git a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte index 50e398a..0f47e7d 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte +++ b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte @@ -445,7 +445,6 @@ uniforms.rimIntensity.value = next.rimIntensity; }; setFresnelUniforms = applyFresnelConfig; - applyFresnelConfig(fresnelConfig ?? {}); const applyDimensions = (next: { size: number; @@ -477,7 +476,6 @@ } }; setDimensions = applyDimensions; - applyDimensions({ size, gap, radius }); const resize = () => { const host = targetCanvas.parentElement ?? targetCanvas; diff --git a/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte b/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte index 4d38837..0e484d9 100644 --- a/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte +++ b/packages/motion-core/src/lib/components/water-ripple/WaterRippleScene.svelte @@ -358,7 +358,6 @@ }; resize(); - loadImage(image); loadBrush(brushUrl); const observer = new ResizeObserver(resize); From ed00e704eb521a5dcb769d58637b045d6a0ad4b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Thu, 16 Apr 2026 18:18:51 +0200 Subject: [PATCH 11/24] refactor(motion-core): remove dead hover raycast code in infinite gallery --- .../InfiniteGalleryScene.svelte | 73 +------------------ 1 file changed, 1 insertion(+), 72 deletions(-) diff --git a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte index 573ec3e..b3e4601 100644 --- a/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte +++ b/packages/motion-core/src/lib/components/infinite-gallery/InfiniteGalleryScene.svelte @@ -5,7 +5,6 @@ Mesh, Plane, Program, - Raycast, Renderer, Texture, Transform, @@ -76,8 +75,6 @@ opacity: { value: number }; blurAmount: { value: number }; scrollForce: { value: number }; - time: { value: number }; - isHovered: { value: number }; uTextureSize: { value: Vec2 }; }; @@ -124,8 +121,6 @@ uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform float scrollForce; - uniform float time; - uniform float isHovered; varying vec2 vUv; varying vec3 vNormal; @@ -144,18 +139,7 @@ float ripple2 = sin(pos.y * 2.5 + scrollForce * 2.0) * 0.015; float clothEffect = (ripple1 + ripple2) * abs(curveIntensity) * 2.0; - float flagWave = 0.0; - if (isHovered > 0.5) { - float wavePhase = pos.x * 3.0 + time * 8.0; - float waveAmplitude = sin(wavePhase) * 0.1; - float dampening = smoothstep(-0.5, 0.5, pos.x); - flagWave = waveAmplitude * dampening; - - float secondaryWave = sin(pos.x * 5.0 + time * 12.0) * 0.03 * dampening; - flagWave += secondaryWave; - } - - pos.z -= (curve + clothEffect + flagWave); + pos.z -= (curve + clothEffect); gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0); } @@ -318,8 +302,6 @@ opacity: { value: 1 }, blurAmount: { value: 0 }, scrollForce: { value: 0 }, - time: { value: 0 }, - isHovered: { value: 0 }, uTextureSize: { value: new Vec2(1, 1) }, }; @@ -345,7 +327,6 @@ let scrollVelocity = 0; let autoPlay = true; let lastInteraction = Date.now(); - let elapsedTime = 0; const handleWheel = (event: WheelEvent) => { event.preventDefault(); @@ -375,36 +356,6 @@ } }, 1000); - const raycast = new Raycast(); - const pointer = new Vec2(0, 0); - let pointerActive = false; - let hoveredIndex = -1; - const meshIdToIndex: Record = {}; - planes.forEach((plane, index) => { - meshIdToIndex[plane.mesh.id] = index; - }); - - const handlePointerMove = (event: PointerEvent) => { - const rect = targetCanvas.getBoundingClientRect(); - if (rect.width <= 0 || rect.height <= 0) return; - pointer.x = ((event.clientX - rect.left) / rect.width) * 2 - 1; - pointer.y = -(((event.clientY - rect.top) / rect.height) * 2 - 1); - pointerActive = true; - }; - - const handlePointerLeave = () => { - pointerActive = false; - if (hoveredIndex !== -1) { - hoveredIndex = -1; - for (let i = 0; i < planes.length; i++) { - planes[i].uniforms.isHovered.value = 0; - } - } - }; - - targetCanvas.addEventListener("pointermove", handlePointerMove); - targetCanvas.addEventListener("pointerleave", handlePointerLeave); - const resize = () => { const host = targetCanvas.parentElement ?? targetCanvas; const { width: hostWidth, height: hostHeight } = @@ -436,8 +387,6 @@ const tick = (now: number) => { const delta = previous ? (now - previous) / 1000 : 0; previous = now; - elapsedTime += delta; - if (autoPlay) { scrollVelocity += 0.3 * delta; } @@ -452,7 +401,6 @@ const planeData = planesData[i]; const plane = planes[i]; - plane.uniforms.time.value = elapsedTime; plane.uniforms.scrollForce.value = scrollVelocity; let newZ = planeData.z + scrollVelocity * delta * 10; @@ -565,23 +513,6 @@ plane.mesh.position.set(planeData.x, planeData.y, worldZ); } - if (pointerActive) { - raycast.castMouse(camera, [pointer.x, pointer.y]); - const hits = raycast.intersectMeshes( - planes.map((plane) => plane.mesh), - { includeUV: false, includeNormal: false }, - ); - const nextHover = - hits.length > 0 ? (meshIdToIndex[hits[0].id] ?? -1) : -1; - - if (nextHover !== hoveredIndex) { - hoveredIndex = nextHover; - for (let i = 0; i < planes.length; i++) { - planes[i].uniforms.isHovered.value = i === hoveredIndex ? 1 : 0; - } - } - } - renderer.render({ scene, camera, clear: true }); raf = window.requestAnimationFrame(tick); }; @@ -596,8 +527,6 @@ observer.disconnect(); targetCanvas.removeEventListener("wheel", handleWheel); window.removeEventListener("keydown", handleKeyDown); - targetCanvas.removeEventListener("pointermove", handlePointerMove); - targetCanvas.removeEventListener("pointerleave", handlePointerLeave); setImageItems = undefined; for (let i = 0; i < planes.length; i++) { From ec46d2e17b235fd005185944688df7fdfe4f9245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Thu, 16 Apr 2026 19:30:42 +0200 Subject: [PATCH 12/24] refactor(canvas): unify default prop values across OGL components --- apps/web/src/routes/docs/ascii-renderer/+page.svx | 2 +- .../routes/docs/ascii-renderer/AsciiRendererDemo.svelte | 8 +------- .../routes/docs/dithered-image/DitheredImageDemo.svelte | 6 +++--- .../docs/fluid-image-reveal/FluidImageRevealDemo.svelte | 9 +-------- .../routes/docs/glitter-cloth/GlitterClothDemo.svelte | 1 + apps/web/src/routes/docs/lava-lamp/+page.svx | 2 +- apps/web/src/routes/docs/lava-lamp/LavaLampDemo.svelte | 6 +----- .../src/routes/docs/plasma-grid/PlasmaGridDemo.svelte | 3 +-- apps/web/src/routes/docs/rubiks-cube/+page.svx | 2 +- .../src/routes/docs/water-ripple/WaterRippleDemo.svelte | 6 +----- .../lib/components/ascii-renderer/AsciiRenderer.svelte | 4 ++-- .../components/ascii-renderer/AsciiRendererScene.svelte | 4 ++-- .../src/lib/components/lava-lamp/LavaLamp.svelte | 4 ++-- .../src/lib/components/lava-lamp/LavaLampScene.svelte | 4 ++-- .../src/lib/components/plasma-grid/PlasmaGrid.svelte | 2 +- .../lib/components/plasma-grid/PlasmaGridScene.svelte | 4 ++-- .../lib/components/rubiks-cube/RubiksCubeScene.svelte | 4 ++-- 17 files changed, 25 insertions(+), 46 deletions(-) diff --git a/apps/web/src/routes/docs/ascii-renderer/+page.svx b/apps/web/src/routes/docs/ascii-renderer/+page.svx index 6d26e5a..d0486a3 100644 --- a/apps/web/src/routes/docs/ascii-renderer/+page.svx +++ b/apps/web/src/routes/docs/ascii-renderer/+page.svx @@ -78,7 +78,7 @@ import { AsciiRenderer } from "$lib/motion-core"; { prop: "strength", type: "number", - default: "25.0", + default: "3.0", description: "Intensity of the ASCII character generation threshold.", }, { diff --git a/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte b/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte index 9b3d528..0891848 100644 --- a/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte +++ b/apps/web/src/routes/docs/ascii-renderer/AsciiRendererDemo.svelte @@ -4,10 +4,4 @@ const demoImage = "/images/demos/sample-11.jpg"; - + diff --git a/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte b/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte index ead9a1d..a746694 100644 --- a/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte +++ b/apps/web/src/routes/docs/dithered-image/DitheredImageDemo.svelte @@ -4,8 +4,8 @@ diff --git a/apps/web/src/routes/docs/fluid-image-reveal/FluidImageRevealDemo.svelte b/apps/web/src/routes/docs/fluid-image-reveal/FluidImageRevealDemo.svelte index 8d284c4..73f6826 100644 --- a/apps/web/src/routes/docs/fluid-image-reveal/FluidImageRevealDemo.svelte +++ b/apps/web/src/routes/docs/fluid-image-reveal/FluidImageRevealDemo.svelte @@ -5,11 +5,4 @@ const revealImage = "/images/demos/day.png"; - + diff --git a/apps/web/src/routes/docs/glitter-cloth/GlitterClothDemo.svelte b/apps/web/src/routes/docs/glitter-cloth/GlitterClothDemo.svelte index 21cd58a..092500f 100644 --- a/apps/web/src/routes/docs/glitter-cloth/GlitterClothDemo.svelte +++ b/apps/web/src/routes/docs/glitter-cloth/GlitterClothDemo.svelte @@ -4,6 +4,7 @@ diff --git a/apps/web/src/routes/docs/lava-lamp/+page.svx b/apps/web/src/routes/docs/lava-lamp/+page.svx index a6cef1b..1e0736b 100644 --- a/apps/web/src/routes/docs/lava-lamp/+page.svx +++ b/apps/web/src/routes/docs/lava-lamp/+page.svx @@ -64,7 +64,7 @@ import { LavaLamp } from "$lib/motion-core"; { prop: "color", type: "string", - default: '"#18181b"', + default: '"#17181A"', description: "Base color of the lava blobs.", }, { diff --git a/apps/web/src/routes/docs/lava-lamp/LavaLampDemo.svelte b/apps/web/src/routes/docs/lava-lamp/LavaLampDemo.svelte index b3f091f..093efa3 100644 --- a/apps/web/src/routes/docs/lava-lamp/LavaLampDemo.svelte +++ b/apps/web/src/routes/docs/lava-lamp/LavaLampDemo.svelte @@ -2,8 +2,4 @@ import { LavaLamp } from "motion-core"; - + diff --git a/apps/web/src/routes/docs/plasma-grid/PlasmaGridDemo.svelte b/apps/web/src/routes/docs/plasma-grid/PlasmaGridDemo.svelte index 490b93f..2179716 100644 --- a/apps/web/src/routes/docs/plasma-grid/PlasmaGridDemo.svelte +++ b/apps/web/src/routes/docs/plasma-grid/PlasmaGridDemo.svelte @@ -3,7 +3,6 @@ diff --git a/apps/web/src/routes/docs/rubiks-cube/+page.svx b/apps/web/src/routes/docs/rubiks-cube/+page.svx index ff76282..d49d011 100644 --- a/apps/web/src/routes/docs/rubiks-cube/+page.svx +++ b/apps/web/src/routes/docs/rubiks-cube/+page.svx @@ -101,7 +101,7 @@ import { RubiksCube } from "$lib/motion-core"; { key: "color", type: "string | number | [number, number, number] | { r: number; g: number; b: number }", - default: '"#111113"', + default: '"#17181A"', description: "Base color of the cubelets before the rim glow is applied.", }, { diff --git a/apps/web/src/routes/docs/water-ripple/WaterRippleDemo.svelte b/apps/web/src/routes/docs/water-ripple/WaterRippleDemo.svelte index 21eb411..1e5acb6 100644 --- a/apps/web/src/routes/docs/water-ripple/WaterRippleDemo.svelte +++ b/apps/web/src/routes/docs/water-ripple/WaterRippleDemo.svelte @@ -2,8 +2,4 @@ import { WaterRipple } from "motion-core"; - + diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte index bfd23dc..e283150 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRenderer.svelte @@ -21,7 +21,7 @@ density?: SceneProps["density"]; /** * Intensity of the ASCII character generation threshold. - * @default 25 + * @default 3 */ strength?: SceneProps["strength"]; /** @@ -41,7 +41,7 @@ src, class: className = "", density = 25, - strength = 25, + strength = 3, color = "#00ff00", backgroundColor = "#17181A", ...rest diff --git a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte index 5784002..e1af437 100644 --- a/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte +++ b/packages/motion-core/src/lib/components/ascii-renderer/AsciiRendererScene.svelte @@ -25,7 +25,7 @@ density?: number; /** * Intensity of the ASCII character generation threshold. - * @default 25.0 + * @default 3.0 */ strength?: number; /** @@ -43,7 +43,7 @@ let { image, density = 25.0, - strength = 25.0, + strength = 3.0, color = "#00ff00", backgroundColor = "#17181A", }: Props = $props(); diff --git a/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte b/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte index 5348063..85ef053 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte +++ b/packages/motion-core/src/lib/components/lava-lamp/LavaLamp.svelte @@ -12,7 +12,7 @@ class?: string; /** * Base color of the lava blobs. - * @default "#18181b" + * @default "#17181A" */ color?: SceneProps["color"]; /** @@ -45,7 +45,7 @@ let { class: className = "", - color = "#18181b", + color = "#17181A", fresnelColor = "#ff6900", speed = 1.0, fresnelPower = 3.0, diff --git a/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte b/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte index 953707a..fba9019 100644 --- a/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte +++ b/packages/motion-core/src/lib/components/lava-lamp/LavaLampScene.svelte @@ -15,7 +15,7 @@ interface Props { /** * Base color of the lava blobs. - * @default "#18181b" + * @default "#17181A" */ color?: string; /** @@ -46,7 +46,7 @@ } let { - color = "#18181b", + color = "#17181A", fresnelColor = "#ff6900", speed = 1.0, fresnelPower = 3.0, diff --git a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte index 0bc289c..baab039 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte +++ b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGrid.svelte @@ -8,7 +8,7 @@ interface Props { /** * The base background color of the effect. - * @default "#111113" + * @default "#17181A" */ color?: SceneProps["color"]; /** diff --git a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte index 512a6d3..5da68ed 100644 --- a/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte +++ b/packages/motion-core/src/lib/components/plasma-grid/PlasmaGridScene.svelte @@ -14,7 +14,7 @@ interface Props { /** * The base background color of the effect. - * @default "#111113" + * @default "#17181A" */ color?: ColorRepresentation; /** @@ -24,7 +24,7 @@ highlightColor?: ColorRepresentation; } - let { color = "#111113", highlightColor = "#FF6900" }: Props = $props(); + let { color = "#17181A", highlightColor = "#FF6900" }: Props = $props(); let canvas = $state(); let uniforms = $state<{ diff --git a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte index 0f47e7d..8922286 100644 --- a/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte +++ b/packages/motion-core/src/lib/components/rubiks-cube/RubiksCubeScene.svelte @@ -18,7 +18,7 @@ interface FresnelConfig { /** * Base body color for each cubelet. - * @default "#111113" + * @default "#17181A" */ color?: ColorRepresentation; /** @@ -98,7 +98,7 @@ t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2; const defaultFresnelConfig: Required = { - color: "#111113", + color: "#17181A", rimColor: "#FF6900", rimPower: 6, rimIntensity: 1.5, From a2766d65f8e876b6de2e237b0e7f0f9ba1146cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20J=C3=B3=C5=BAwiak?= <168720167+66HEX@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:34:10 +0200 Subject: [PATCH 13/24] refactor(globe): migrate canvas globe to ogl --- apps/web/src/lib/docs/generated-manifest.ts | 4 +- .../src/routes/docs/globe/GlobeDemo.svelte | 8 +- apps/web/static/registry/components.json | 40 +- apps/web/static/registry/registry.json | 12 +- .../src/lib/components/globe/Globe.svelte | 32 +- .../components/globe/GlobeMarkerItem.svelte | 175 +-- .../lib/components/globe/GlobeScene.svelte | 1127 +++++++++++------ .../src/lib/components/globe/component.json | 12 +- 8 files changed, 870 insertions(+), 540 deletions(-) diff --git a/apps/web/src/lib/docs/generated-manifest.ts b/apps/web/src/lib/docs/generated-manifest.ts index ead9a0e..fdb12c1 100644 --- a/apps/web/src/lib/docs/generated-manifest.ts +++ b/apps/web/src/lib/docs/generated-manifest.ts @@ -124,10 +124,8 @@ export const docsManifest: ComponentInfo[] = [ name: "Globe", category: "canvas", dependencies: { - "@threlte/core": "^8.3.1", - "@threlte/extras": "^9.7.1", gsap: "^3.14.2", - three: "^0.182.0", + ogl: "^1.0.11", }, }, { diff --git a/apps/web/src/routes/docs/globe/GlobeDemo.svelte b/apps/web/src/routes/docs/globe/GlobeDemo.svelte index 4db9167..63ae447 100644 --- a/apps/web/src/routes/docs/globe/GlobeDemo.svelte +++ b/apps/web/src/routes/docs/globe/GlobeDemo.svelte @@ -42,24 +42,22 @@ {/snippet}