angular-three-soba 2.0.0-beta.4 → 2.0.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/billboard/billboard.d.ts +12 -8
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +24 -12
- package/abstractions/grid/grid.d.ts +42 -51
- package/abstractions/index.d.ts +1 -7
- package/abstractions/text/text.d.ts +10 -4
- package/abstractions/text-3d/text-3d.d.ts +51 -41
- package/cameras/camera/camera-content.d.ts +1 -1
- package/cameras/camera/camera.d.ts +16 -13
- package/cameras/cube-camera/cube-camera.d.ts +49 -23
- package/cameras/index.d.ts +0 -1
- package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
- package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
- package/controls/orbit-controls/orbit-controls.d.ts +34 -15
- package/esm2022/abstractions/billboard/billboard.mjs +36 -33
- package/esm2022/abstractions/detailed/detailed.mjs +64 -0
- package/esm2022/abstractions/edges/edges.mjs +58 -63
- package/esm2022/abstractions/grid/grid.mjs +140 -110
- package/esm2022/abstractions/index.mjs +2 -8
- package/esm2022/abstractions/text/text.mjs +123 -122
- package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
- package/esm2022/cameras/camera/camera-content.mjs +6 -6
- package/esm2022/cameras/camera/camera.mjs +48 -42
- package/esm2022/cameras/cube-camera/cube-camera.mjs +120 -100
- package/esm2022/cameras/index.mjs +1 -2
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +109 -85
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +198 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +151 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
- package/esm2022/gizmos/index.mjs +4 -0
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +14 -9
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +31 -30
- package/esm2022/loaders/texture-loader/texture-loader.mjs +20 -15
- package/esm2022/materials/index.mjs +2 -1
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +164 -144
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
- package/esm2022/materials/point-material/point-material.mjs +50 -0
- package/esm2022/misc/animations/animations.mjs +28 -23
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
- package/esm2022/misc/caustics/caustics.mjs +387 -0
- package/esm2022/misc/decal/decal.mjs +187 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +41 -37
- package/esm2022/misc/example/example.mjs +161 -0
- package/esm2022/misc/fbo/fbo.mjs +42 -36
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +305 -0
- package/esm2022/misc/index.mjs +10 -1
- package/esm2022/misc/sampler/sampler.mjs +132 -0
- package/esm2022/misc/shadow/shadow.mjs +111 -0
- package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
- package/esm2022/misc/trail/trail.mjs +204 -0
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
- package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
- package/esm2022/modifiers/index.mjs +2 -0
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
- package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
- package/esm2022/performances/index.mjs +8 -0
- package/esm2022/performances/instances/instances.mjs +221 -0
- package/esm2022/performances/instances/position-mesh.mjs +52 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +327 -0
- package/esm2022/performances/points/position-point.mjs +54 -0
- package/esm2022/performances/segments/segment-object.mjs +9 -0
- package/esm2022/performances/segments/segments.mjs +183 -0
- package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
- package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +32 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +3 -2
- package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
- package/esm2022/shaders/grid-material/grid-material.mjs +30 -14
- package/esm2022/shaders/index.mjs +5 -3
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +3 -2
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +7 -4
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
- package/esm2022/shaders/shader-material/shader-material.mjs +3 -5
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +18 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +8 -7
- package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +161 -176
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +8 -8
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +129 -129
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
- package/esm2022/staging/bounds/bounds.mjs +145 -143
- package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
- package/esm2022/staging/center/center.mjs +129 -112
- package/esm2022/staging/cloud/cloud.mjs +118 -124
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -136
- package/esm2022/staging/environment/assets.mjs +12 -12
- package/esm2022/staging/environment/environment-cube.mjs +28 -30
- package/esm2022/staging/environment/environment-ground.mjs +17 -19
- package/esm2022/staging/environment/environment-input.mjs +98 -85
- package/esm2022/staging/environment/environment-map.mjs +33 -33
- package/esm2022/staging/environment/environment-portal.mjs +75 -97
- package/esm2022/staging/environment/environment.mjs +34 -51
- package/esm2022/staging/environment/utils.mjs +40 -17
- package/esm2022/staging/float/float.mjs +70 -58
- package/esm2022/staging/index.mjs +7 -3
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
- package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
- package/esm2022/staging/sky/sky.mjs +85 -80
- package/esm2022/staging/sparkles/sparkles.mjs +108 -105
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
- package/esm2022/staging/spot-light/shadow-mesh.mjs +267 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
- package/esm2022/staging/spot-light/spot-light.mjs +51 -63
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
- package/esm2022/staging/stage/stage.mjs +305 -290
- package/esm2022/staging/stars/stars.mjs +101 -102
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +228 -0
- package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
- package/esm2022/utils/constants.mjs +3 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +3 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +504 -2079
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +293 -260
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +108 -83
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +1045 -0
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs +148 -132
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +656 -588
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2202 -99
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
- package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
- package/fesm2022/angular-three-soba-performances.mjs +957 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +508 -269
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2910 -2573
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +25 -0
- package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
- package/gizmos/README.md +3 -0
- package/gizmos/gizmo-helper/gizmo-helper.d.ts +73 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
- package/gizmos/index.d.ts +3 -0
- package/loaders/gltf-loader/gltf-loader.d.ts +15 -4
- package/loaders/loader/loader.d.ts +19 -17
- package/loaders/progress/progress.d.ts +1 -1
- package/loaders/texture-loader/texture-loader.d.ts +8 -3
- package/materials/index.d.ts +1 -0
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
- package/materials/point-material/point-material.d.ts +24 -0
- package/metadata.json +1 -0
- package/misc/animations/animations.d.ts +6 -4
- package/misc/caustics/caustics.d.ts +87 -0
- package/misc/decal/decal.d.ts +49 -0
- package/misc/depth-buffer/depth-buffer.d.ts +2 -2
- package/misc/example/example.d.ts +85 -0
- package/misc/fbo/fbo.d.ts +2 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +218 -0
- package/misc/index.d.ts +9 -0
- package/misc/sampler/sampler.d.ts +67 -0
- package/misc/shadow/shadow.d.ts +37 -0
- package/misc/stats-gl/stats-gl.d.ts +24 -0
- package/misc/trail/trail.d.ts +57 -0
- package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
- package/misc/trail-texture/trail-texture.d.ts +50 -0
- package/modifiers/README.md +3 -0
- package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
- package/modifiers/index.d.ts +1 -0
- package/package.json +36 -18
- package/performances/README.md +3 -0
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
- package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
- package/performances/index.d.ts +7 -0
- package/performances/instances/instances.d.ts +83 -0
- package/{performance → performances}/instances/position-mesh.d.ts +1 -1
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +96 -0
- package/performances/points/position-point.d.ts +11 -0
- package/performances/segments/segment-object.d.ts +7 -0
- package/performances/segments/segments.d.ts +128 -0
- package/shaders/grid-material/grid-material.d.ts +33 -0
- package/shaders/index.d.ts +4 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +173 -6
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
- package/shaders/shader-material/shader-material.d.ts +2 -2
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
- package/shaders/sparkles-material/sparkles-material.d.ts +13 -0
- package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
- package/shaders/star-field-material/star-field-material.d.ts +9 -0
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +93 -39
- package/staging/accumulative-shadows/randomized-lights.d.ts +41 -28
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +105 -25
- package/staging/camera-shake/camera-shake.d.ts +30 -19
- package/staging/center/center.d.ts +43 -35
- package/staging/cloud/cloud.d.ts +27 -24
- package/staging/contact-shadows/contact-shadows.d.ts +43 -30
- package/staging/environment/assets.d.ts +9 -9
- package/staging/environment/environment-cube.d.ts +9 -5
- package/staging/environment/environment-ground.d.ts +7 -7
- package/staging/environment/environment-input.d.ts +38 -38
- package/staging/environment/environment-map.d.ts +10 -5
- package/staging/environment/environment-portal.d.ts +10 -5
- package/staging/environment/environment.d.ts +0 -4
- package/staging/environment/utils.d.ts +2 -2
- package/staging/float/float.d.ts +15 -11
- package/staging/index.d.ts +6 -2
- package/staging/matcap-texture/matcap-texture.d.ts +13 -0
- package/staging/normal-texture/normal-texture.d.ts +16 -0
- package/staging/sky/sky.d.ts +28 -21
- package/staging/sparkles/sparkles.d.ts +36 -22
- package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
- package/staging/spot-light/shadow-mesh.d.ts +37 -0
- package/staging/spot-light/spot-light-input.d.ts +25 -25
- package/staging/spot-light/spot-light.d.ts +35 -15
- package/staging/spot-light/volumetric-mesh.d.ts +15 -9
- package/staging/stage/stage.d.ts +89 -65
- package/staging/stars/stars.d.ts +28 -17
- package/staging/wireframe/wireframe-input.d.ts +65 -0
- package/staging/wireframe/wireframe.d.ts +28 -0
- package/utils/README.md +3 -0
- package/utils/constants.d.ts +1 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +2 -0
- package/web-types.json +1 -0
- package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
- package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
- package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
- package/abstractions/line/line-input.d.ts +0 -42
- package/abstractions/line/line.d.ts +0 -35
- package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
- package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
- package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
- package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
- package/esm2022/abstractions/line/line-input.mjs +0 -113
- package/esm2022/abstractions/line/line.mjs +0 -165
- package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
- package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
- package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
- package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
- package/esm2022/performance/detailed/detailed.mjs +0 -61
- package/esm2022/performance/index.mjs +0 -7
- package/esm2022/performance/instances/instance.mjs +0 -48
- package/esm2022/performance/instances/instances.mjs +0 -189
- package/esm2022/performance/instances/position-mesh.mjs +0 -52
- package/esm2022/performance/stats/stats.mjs +0 -79
- package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
- package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
- package/esm2022/staging/caustics/caustisc.mjs +0 -384
- package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
- package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
- package/fesm2022/angular-three-soba-performance.mjs +0 -487
- package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
- package/performance/README.md +0 -3
- package/performance/adaptive/adaptive-dpr.d.ts +0 -8
- package/performance/detailed/detailed.d.ts +0 -20
- package/performance/index.d.ts +0 -6
- package/performance/instances/instance.d.ts +0 -9
- package/performance/instances/instances.d.ts +0 -35
- package/performance/stats/stats.d.ts +0 -18
- package/plugin/generators.json +0 -19
- package/plugin/libs/plugin/README.md +0 -11
- package/plugin/package.json +0 -9
- package/plugin/src/generators/init/compat.d.ts +0 -2
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/init.d.ts +0 -7
- package/plugin/src/generators/init/init.js +0 -28
- package/plugin/src/generators/init/init.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -6
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -6
- package/plugin/src/index.js.map +0 -1
- package/staging/caustics/caustisc.d.ts +0 -70
- package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
- /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
|
@@ -1,47 +1,33 @@
|
|
|
1
|
+
import { revision } from 'angular-three-soba/utils';
|
|
1
2
|
import { shaderMaterial } from '../shader-material/shader-material';
|
|
2
|
-
export const SparklesMaterial = shaderMaterial({ time: 0, pixelRatio: 1 },
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
attribute
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
`,
|
|
35
|
-
// language=GLSL
|
|
36
|
-
`
|
|
37
|
-
varying vec3 vColor;
|
|
38
|
-
varying float vOpacity;
|
|
39
|
-
|
|
40
|
-
void main() {
|
|
41
|
-
float distanceToCenter = distance(gl_PointCoord, vec2(0.5));
|
|
42
|
-
float strength = 0.05 / distanceToCenter - 0.1;
|
|
43
|
-
|
|
44
|
-
gl_FragColor = vec4(vColor, strength * vOpacity);
|
|
45
|
-
}
|
|
46
|
-
`);
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvc3BhcmtsZXMtbWF0ZXJpYWwvc3BhcmtsZXMtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FDMUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7QUFDMUIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QkQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7R0FVRCxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgU3BhcmtsZXNNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHsgdGltZTogMCwgcGl4ZWxSYXRpbzogMSB9LFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIGZsb2F0IHRpbWU7XG5cbmF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuYXR0cmlidXRlIGZsb2F0IHNwZWVkO1xuYXR0cmlidXRlIGZsb2F0IG9wYWNpdHk7XG5hdHRyaWJ1dGUgdmVjMyBub2lzZTtcbmF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuXG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IG1vZGVsUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG5cbiAgbW9kZWxQb3NpdGlvbi55ICs9IHNpbih0aW1lICogc3BlZWQgKyBtb2RlbFBvc2l0aW9uLnggKiBub2lzZS54ICogMTAwLjApICogMC4yO1xuICBtb2RlbFBvc2l0aW9uLnogKz0gY29zKHRpbWUgKiBzcGVlZCArIG1vZGVsUG9zaXRpb24ueCAqIG5vaXNlLnkgKiAxMDAuMCkgKiAwLjI7XG4gIG1vZGVsUG9zaXRpb24ueCArPSBjb3ModGltZSAqIHNwZWVkICsgbW9kZWxQb3NpdGlvbi54ICogbm9pc2UueiAqIDEwMC4wKSAqIDAuMjtcblxuICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXdNYXRyaXggKiBtb2RlbFBvc2l0aW9uO1xuICB2ZWM0IHByb2plY3Rpb25Qb3N0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdQb3NpdGlvbjtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25Qb3N0aW9uO1xuICBnbF9Qb2ludFNpemUgPSBzaXplICogMjUuICogcGl4ZWxSYXRpbztcbiAgZ2xfUG9pbnRTaXplICo9ICgxLjAgLyAtIHZpZXdQb3NpdGlvbi56KTtcblxuICB2Q29sb3IgPSBjb2xvcjtcbiAgdk9wYWNpdHkgPSBvcGFjaXR5O1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0YW5jZVRvQ2VudGVyID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUpKTtcbiAgZmxvYXQgc3RyZW5ndGggPSAwLjA1IC8gZGlzdGFuY2VUb0NlbnRlciAtIDAuMTtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZDb2xvciwgc3RyZW5ndGggKiB2T3BhY2l0eSk7XG59XG4gIGBcbik7XG4iXX0=
|
|
3
|
+
export const SparklesMaterial = shaderMaterial({ time: 0, pixelRatio: 1 }, ` uniform float pixelRatio;
|
|
4
|
+
uniform float time;
|
|
5
|
+
attribute float size;
|
|
6
|
+
attribute float speed;
|
|
7
|
+
attribute float opacity;
|
|
8
|
+
attribute vec3 noise;
|
|
9
|
+
attribute vec3 color;
|
|
10
|
+
varying vec3 vColor;
|
|
11
|
+
varying float vOpacity;
|
|
12
|
+
void main() {
|
|
13
|
+
vec4 modelPosition = modelMatrix * vec4(position, 1.0);
|
|
14
|
+
modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;
|
|
15
|
+
modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;
|
|
16
|
+
modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;
|
|
17
|
+
vec4 viewPosition = viewMatrix * modelPosition;
|
|
18
|
+
vec4 projectionPostion = projectionMatrix * viewPosition;
|
|
19
|
+
gl_Position = projectionPostion;
|
|
20
|
+
gl_PointSize = size * 25. * pixelRatio;
|
|
21
|
+
gl_PointSize *= (1.0 / - viewPosition.z);
|
|
22
|
+
vColor = color;
|
|
23
|
+
vOpacity = opacity;
|
|
24
|
+
}`, ` varying vec3 vColor;
|
|
25
|
+
varying float vOpacity;
|
|
26
|
+
void main() {
|
|
27
|
+
float distanceToCenter = distance(gl_PointCoord, vec2(0.5));
|
|
28
|
+
float strength = 0.05 / distanceToCenter - 0.1;
|
|
29
|
+
gl_FragColor = vec4(vColor, strength * vOpacity);
|
|
30
|
+
#include <tonemapping_fragment>
|
|
31
|
+
#include <${revision >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
32
|
+
}`);
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvc3BhcmtsZXMtbWF0ZXJpYWwvc3BhcmtsZXMtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQzdDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQzFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFxQkssRUFDTDs7Ozs7OztrQkFPaUIsUUFBUSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtNQUMxRSxDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5ndFNoYWRlck1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyByZXZpc2lvbiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS91dGlscyc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgU3BhcmtsZXNNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7IHRpbWU6IDAsIHBpeGVsUmF0aW86IDEgfSxcblx0YCB1bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG4gICAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCBzcGVlZDtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgb3BhY2l0eTtcbiAgICBhdHRyaWJ1dGUgdmVjMyBub2lzZTtcbiAgICBhdHRyaWJ1dGUgdmVjMyBjb2xvcjtcbiAgICB2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdk9wYWNpdHk7XG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgdmVjNCBtb2RlbFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgICAgbW9kZWxQb3NpdGlvbi55ICs9IHNpbih0aW1lICogc3BlZWQgKyBtb2RlbFBvc2l0aW9uLnggKiBub2lzZS54ICogMTAwLjApICogMC4yO1xuICAgICAgbW9kZWxQb3NpdGlvbi56ICs9IGNvcyh0aW1lICogc3BlZWQgKyBtb2RlbFBvc2l0aW9uLnggKiBub2lzZS55ICogMTAwLjApICogMC4yO1xuICAgICAgbW9kZWxQb3NpdGlvbi54ICs9IGNvcyh0aW1lICogc3BlZWQgKyBtb2RlbFBvc2l0aW9uLnggKiBub2lzZS56ICogMTAwLjApICogMC4yO1xuICAgICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3TWF0cml4ICogbW9kZWxQb3NpdGlvbjtcbiAgICAgIHZlYzQgcHJvamVjdGlvblBvc3Rpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogdmlld1Bvc2l0aW9uO1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uUG9zdGlvbjtcbiAgICAgIGdsX1BvaW50U2l6ZSA9IHNpemUgKiAyNS4gKiBwaXhlbFJhdGlvO1xuICAgICAgZ2xfUG9pbnRTaXplICo9ICgxLjAgLyAtIHZpZXdQb3NpdGlvbi56KTtcbiAgICAgIHZDb2xvciA9IGNvbG9yO1xuICAgICAgdk9wYWNpdHkgPSBvcGFjaXR5O1xuICAgIH1gLFxuXHRgIHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4gICAgdmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICBmbG9hdCBkaXN0YW5jZVRvQ2VudGVyID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUpKTtcbiAgICAgIGZsb2F0IHN0cmVuZ3RoID0gMC4wNSAvIGRpc3RhbmNlVG9DZW50ZXIgLSAwLjE7XG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZDb2xvciwgc3RyZW5ndGggKiB2T3BhY2l0eSk7XG4gICAgICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG4gICAgICAjaW5jbHVkZSA8JHtyZXZpc2lvbiA+PSAxNTQgPyAnY29sb3JzcGFjZV9mcmFnbWVudCcgOiAnZW5jb2RpbmdzX2ZyYWdtZW50J30+XG4gICAgfWAsXG4pO1xuXG5leHBvcnQgdHlwZSBOZ3RTcGFya2xlc01hdGVyaWFsU3RhdGUgPSB7XG5cdHRpbWU/OiBudW1iZXI7XG5cdHBpeGVsUmF0aW8/OiBudW1iZXI7XG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHQgKi9cblx0XHQnbmd0LXNwYXJrbGVzLW1hdGVyaWFsJzogTmd0U3BhcmtsZXNNYXRlcmlhbFN0YXRlICYgTmd0U2hhZGVyTWF0ZXJpYWw7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { revision } from 'angular-three-soba/utils';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
export class SpotLightMaterial extends THREE.ShaderMaterial {
|
|
3
4
|
constructor() {
|
|
4
5
|
super({
|
|
5
6
|
uniforms: {
|
|
@@ -7,11 +8,11 @@ export class SpotLightMaterial extends ShaderMaterial {
|
|
|
7
8
|
opacity: { value: 1 },
|
|
8
9
|
attenuation: { value: 2.5 },
|
|
9
10
|
anglePower: { value: 12 },
|
|
10
|
-
spotPosition: { value: new Vector3(0, 0, 0) },
|
|
11
|
-
lightColor: { value: new Color('white') },
|
|
11
|
+
spotPosition: { value: new THREE.Vector3(0, 0, 0) },
|
|
12
|
+
lightColor: { value: new THREE.Color('white') },
|
|
12
13
|
cameraNear: { value: 0 },
|
|
13
14
|
cameraFar: { value: 1 },
|
|
14
|
-
resolution: { value: new Vector2(0, 0) },
|
|
15
|
+
resolution: { value: new THREE.Vector2(0, 0) },
|
|
15
16
|
},
|
|
16
17
|
transparent: true,
|
|
17
18
|
depthWrite: false,
|
|
@@ -78,9 +79,9 @@ export class SpotLightMaterial extends ShaderMaterial {
|
|
|
78
79
|
gl_FragColor = vec4(lightColor, intensity * opacity);
|
|
79
80
|
|
|
80
81
|
#include <tonemapping_fragment>
|
|
81
|
-
#include
|
|
82
|
+
#include <${revision >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
82
83
|
}`,
|
|
83
84
|
});
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxLQUFLLENBQUMsY0FBYztJQUMxRDtRQUNDLEtBQUssQ0FBQztZQUNMLFFBQVEsRUFBRTtnQkFDVCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN0QixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25ELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQy9DLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ3ZCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2FBQzlDO1lBQ0QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBcUJwQjtZQUNMLGNBQWMsRUFBRSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQXlDWCxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1FBQ3pFO1NBQ0wsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgcmV2aXNpb24gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdXRpbHMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgY2xhc3MgU3BvdExpZ2h0TWF0ZXJpYWwgZXh0ZW5kcyBUSFJFRS5TaGFkZXJNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKHtcblx0XHRcdHVuaWZvcm1zOiB7XG5cdFx0XHRcdGRlcHRoOiB7IHZhbHVlOiBudWxsIH0sXG5cdFx0XHRcdG9wYWNpdHk6IHsgdmFsdWU6IDEgfSxcblx0XHRcdFx0YXR0ZW51YXRpb246IHsgdmFsdWU6IDIuNSB9LFxuXHRcdFx0XHRhbmdsZVBvd2VyOiB7IHZhbHVlOiAxMiB9LFxuXHRcdFx0XHRzcG90UG9zaXRpb246IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApIH0sXG5cdFx0XHRcdGxpZ2h0Q29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcignd2hpdGUnKSB9LFxuXHRcdFx0XHRjYW1lcmFOZWFyOiB7IHZhbHVlOiAwIH0sXG5cdFx0XHRcdGNhbWVyYUZhcjogeyB2YWx1ZTogMSB9LFxuXHRcdFx0XHRyZXNvbHV0aW9uOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMigwLCAwKSB9LFxuXHRcdFx0fSxcblx0XHRcdHRyYW5zcGFyZW50OiB0cnVlLFxuXHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6IC8qIGdsc2wgKi8gYFxuICAgICAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4gICAgICB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZWaWV3WjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdkludGVuc2l0eTtcbiAgICAgIHVuaWZvcm0gdmVjMyBzcG90UG9zaXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uO1xuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIC8vIGNvbXB1dGUgaW50ZW5zaXR5XG4gICAgICAgIHZOb3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuICAgICAgICB2ZWM0IHdvcmxkUG9zaXRpb25cdD0gbW9kZWxNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG4gICAgICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4gICAgICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlld01hdHJpeCAqIHdvcmxkUG9zaXRpb247XG4gICAgICAgIHZWaWV3WiA9IHZpZXdQb3NpdGlvbi56O1xuICAgICAgICBmbG9hdCBpbnRlbnNpdHlcdD0gZGlzdGFuY2Uod29ybGRQb3NpdGlvbi54eXosIHNwb3RQb3NpdGlvbikgLyBhdHRlbnVhdGlvbjtcbiAgICAgICAgaW50ZW5zaXR5XHQ9IDEuMCAtIGNsYW1wKGludGVuc2l0eSwgMC4wLCAxLjApO1xuICAgICAgICB2SW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xuICAgICAgICAvLyBzZXQgZ2xfUG9zaXRpb25cbiAgICAgICAgZ2xfUG9zaXRpb25cdD0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdQb3NpdGlvbjtcblxuICAgICAgfWAsXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICAjaW5jbHVkZSA8cGFja2luZz5cblxuICAgICAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4gICAgICB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4gICAgICB1bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcbiAgICAgIHVuaWZvcm0gdmVjMyBzcG90UG9zaXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBhbmdsZVBvd2VyO1xuICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgZGVwdGg7XG4gICAgICB1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgY2FtZXJhTmVhcjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgY2FtZXJhRmFyO1xuICAgICAgdmFyeWluZyBmbG9hdCB2Vmlld1o7XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZJbnRlbnNpdHk7XG4gICAgICB1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbiAgICAgIGZsb2F0IHJlYWREZXB0aCggc2FtcGxlcjJEIGRlcHRoU2FtcGxlciwgdmVjMiBjb29yZCApIHtcbiAgICAgICAgZmxvYXQgZnJhZ0Nvb3JkWiA9IHRleHR1cmUyRCggZGVwdGhTYW1wbGVyLCBjb29yZCApLng7XG4gICAgICAgIGZsb2F0IHZpZXdaID0gcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooZnJhZ0Nvb3JkWiwgY2FtZXJhTmVhciwgY2FtZXJhRmFyKTtcbiAgICAgICAgcmV0dXJuIHZpZXdaO1xuICAgICAgfVxuXG4gICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgIGZsb2F0IGQgPSAxLjA7XG4gICAgICAgIGJvb2wgaXNTb2Z0ID0gcmVzb2x1dGlvblswXSA+IDAuMCAmJiByZXNvbHV0aW9uWzFdID4gMC4wO1xuICAgICAgICBpZiAoaXNTb2Z0KSB7XG4gICAgICAgICAgdmVjMiBzVXYgPSBnbF9GcmFnQ29vcmQueHkgLyByZXNvbHV0aW9uO1xuICAgICAgICAgIGQgPSByZWFkRGVwdGgoZGVwdGgsIHNVdik7XG4gICAgICAgIH1cbiAgICAgICAgZmxvYXQgaW50ZW5zaXR5ID0gdkludGVuc2l0eTtcbiAgICAgICAgdmVjMyBub3JtYWxcdD0gdmVjMyh2Tm9ybWFsLngsIHZOb3JtYWwueSwgYWJzKHZOb3JtYWwueikpO1xuICAgICAgICBmbG9hdCBhbmdsZUludGVuc2l0eVx0PSBwb3coIGRvdChub3JtYWwsIHZlYzMoMC4wLCAwLjAsIDEuMCkpLCBhbmdsZVBvd2VyICk7XG4gICAgICAgIGludGVuc2l0eVx0Kj0gYW5nbGVJbnRlbnNpdHk7XG4gICAgICAgIC8vIGZhZGVzIHdoZW4geiBpcyBjbG9zZSB0byBzYW1wbGVkIGRlcHRoLCBtZWFuaW5nIHRoZSBjb25lIGlzIGludGVyc2VjdGluZyBleGlzdGluZyBnZW9tZXRyeVxuICAgICAgICBpZiAoaXNTb2Z0KSB7XG4gICAgICAgICAgaW50ZW5zaXR5XHQqPSBzbW9vdGhzdGVwKDAuLCAxLiwgdlZpZXdaIC0gZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChsaWdodENvbG9yLCBpbnRlbnNpdHkgKiBvcGFjaXR5KTtcblxuICAgICAgICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCAgICAgICNpbmNsdWRlIDwke3JldmlzaW9uID49IDE1NCA/ICdjb2xvcnNwYWNlX2ZyYWdtZW50JyA6ICdlbmNvZGluZ3NfZnJhZ21lbnQnfT5cbiAgICAgIH1gLFxuXHRcdH0pO1xuXHR9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3Qtc3BvdC1saWdodC1tYXRlcmlhbCc6IE5ndFNoYWRlck1hdGVyaWFsO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { revision } from 'angular-three-soba/utils';
|
|
1
2
|
import { shaderMaterial } from '../shader-material/shader-material';
|
|
2
3
|
export const StarFieldMaterial = shaderMaterial({ time: 0.0, fade: 0.0 },
|
|
3
4
|
// language=GLSL
|
|
@@ -26,7 +27,7 @@ void main() {
|
|
|
26
27
|
gl_FragColor = vec4(vColor, opacity);
|
|
27
28
|
|
|
28
29
|
#include <tonemapping_fragment>
|
|
29
|
-
|
|
30
|
+
#include <${revision >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
30
31
|
}
|
|
31
32
|
`);
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rhci1maWVsZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zdGFyLWZpZWxkLW1hdGVyaWFsL3N0YXItZmllbGQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQzlDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3hCLGdCQUFnQjtBQUNoQjs7Ozs7Ozs7OztHQVVFO0FBQ0YsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7O2FBYVksUUFBUSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjs7R0FFeEUsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgcmV2aXNpb24gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdXRpbHMnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IFN0YXJGaWVsZE1hdGVyaWFsID0gc2hhZGVyTWF0ZXJpYWwoXG5cdHsgdGltZTogMC4wLCBmYWRlOiAwLjAgfSxcblx0Ly8gbGFuZ3VhZ2U9R0xTTFxuXHRgXG51bmlmb3JtIGZsb2F0IHRpbWU7XG5hdHRyaWJ1dGUgZmxvYXQgc2l6ZTtcbnZhcnlpbmcgdmVjMyB2Q29sb3I7XG52b2lkIG1haW4oKSB7XG4gIHZDb2xvciA9IGNvbG9yO1xuICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAwLjUpO1xuICBnbF9Qb2ludFNpemUgPSBzaXplICogKDMwLjAgLyAtbXZQb3NpdGlvbi56KSAqICgzLjAgKyBzaW4odGltZSArIDEwMC4wKSk7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG59XG4gIGAsXG5cdC8vIGxhbmd1YWdlPUdMU0xcblx0YFxudW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCBmYWRlO1xudmFyeWluZyB2ZWMzIHZDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgb3BhY2l0eSA9IDEuMDtcbiAgaWYgKGZhZGUgPT0gMS4wKSB7XG4gICAgZmxvYXQgZCA9IGRpc3RhbmNlKGdsX1BvaW50Q29vcmQsIHZlYzIoMC41LCAwLjUpKTtcbiAgICBvcGFjaXR5ID0gMS4wIC8gKDEuMCArIGV4cCgxNi4wICogKGQgLSAwLjI1KSkpO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQodkNvbG9yLCBvcGFjaXR5KTtcblxuICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDwke3JldmlzaW9uID49IDE1NCA/ICdjb2xvcnNwYWNlX2ZyYWdtZW50JyA6ICdlbmNvZGluZ3NfZnJhZ21lbnQnfT5cbn1cbiAgYCxcbik7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3Qtc3Rhci1maWVsZC1tYXRlcmlhbCc6IE5ndFNoYWRlck1hdGVyaWFsO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { computed, effect, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { shaderMaterial } from '../shader-material/shader-material';
|
|
5
|
+
export const WireframeMaterialShaders = {
|
|
6
|
+
uniforms: {
|
|
7
|
+
strokeOpacity: 1,
|
|
8
|
+
fillOpacity: 0.25,
|
|
9
|
+
fillMix: 0,
|
|
10
|
+
thickness: 0.05,
|
|
11
|
+
colorBackfaces: false,
|
|
12
|
+
dashInvert: true,
|
|
13
|
+
dash: false,
|
|
14
|
+
dashRepeats: 4,
|
|
15
|
+
dashLength: 0.5,
|
|
16
|
+
squeeze: false,
|
|
17
|
+
squeezeMin: 0.2,
|
|
18
|
+
squeezeMax: 1,
|
|
19
|
+
stroke: new THREE.Color('#ff0000'),
|
|
20
|
+
backfaceStroke: new THREE.Color('#0000ff'),
|
|
21
|
+
fill: new THREE.Color('#00ff00'),
|
|
22
|
+
},
|
|
23
|
+
vertex: /* glsl */ `
|
|
24
|
+
attribute vec3 barycentric;
|
|
25
|
+
|
|
26
|
+
varying vec3 v_edges_Barycentric;
|
|
27
|
+
varying vec3 v_edges_Position;
|
|
28
|
+
|
|
29
|
+
void initWireframe() {
|
|
30
|
+
v_edges_Barycentric = barycentric;
|
|
31
|
+
v_edges_Position = position.xyz;
|
|
32
|
+
}
|
|
33
|
+
`,
|
|
34
|
+
fragment: /* glsl */ `
|
|
35
|
+
#ifndef PI
|
|
36
|
+
#define PI 3.1415926535897932384626433832795
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
varying vec3 v_edges_Barycentric;
|
|
40
|
+
varying vec3 v_edges_Position;
|
|
41
|
+
|
|
42
|
+
uniform float strokeOpacity;
|
|
43
|
+
uniform float fillOpacity;
|
|
44
|
+
uniform float fillMix;
|
|
45
|
+
uniform float thickness;
|
|
46
|
+
uniform bool colorBackfaces;
|
|
47
|
+
|
|
48
|
+
// Dash
|
|
49
|
+
uniform bool dashInvert;
|
|
50
|
+
uniform bool dash;
|
|
51
|
+
uniform bool dashOnly;
|
|
52
|
+
uniform float dashRepeats;
|
|
53
|
+
uniform float dashLength;
|
|
54
|
+
|
|
55
|
+
// Squeeze
|
|
56
|
+
uniform bool squeeze;
|
|
57
|
+
uniform float squeezeMin;
|
|
58
|
+
uniform float squeezeMax;
|
|
59
|
+
|
|
60
|
+
// Colors
|
|
61
|
+
uniform vec3 stroke;
|
|
62
|
+
uniform vec3 backfaceStroke;
|
|
63
|
+
uniform vec3 fill;
|
|
64
|
+
|
|
65
|
+
// This is like
|
|
66
|
+
float wireframe_aastep(float threshold, float dist) {
|
|
67
|
+
float afwidth = fwidth(dist) * 0.5;
|
|
68
|
+
return smoothstep(threshold - afwidth, threshold + afwidth, dist);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
float wireframe_map(float value, float min1, float max1, float min2, float max2) {
|
|
72
|
+
return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
float getWireframe() {
|
|
76
|
+
vec3 barycentric = v_edges_Barycentric;
|
|
77
|
+
|
|
78
|
+
// Distance from center of each triangle to its edges.
|
|
79
|
+
float d = min(min(barycentric.x, barycentric.y), barycentric.z);
|
|
80
|
+
|
|
81
|
+
// for dashed rendering, we can use this to get the 0 .. 1 value of the line length
|
|
82
|
+
float positionAlong = max(barycentric.x, barycentric.y);
|
|
83
|
+
if (barycentric.y < barycentric.x && barycentric.y < barycentric.z) {
|
|
84
|
+
positionAlong = 1.0 - positionAlong;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// the thickness of the stroke
|
|
88
|
+
float computedThickness = wireframe_map(thickness, 0.0, 1.0, 0.0, 0.34);
|
|
89
|
+
|
|
90
|
+
// if we want to shrink the thickness toward the center of the line segment
|
|
91
|
+
if (squeeze) {
|
|
92
|
+
computedThickness *= mix(squeezeMin, squeezeMax, (1.0 - sin(positionAlong * PI)));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Create dash pattern
|
|
96
|
+
if (dash) {
|
|
97
|
+
// here we offset the stroke position depending on whether it
|
|
98
|
+
// should overlap or not
|
|
99
|
+
float offset = 1.0 / dashRepeats * dashLength / 2.0;
|
|
100
|
+
if (!dashInvert) {
|
|
101
|
+
offset += 1.0 / dashRepeats / 2.0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// if we should animate the dash or not
|
|
105
|
+
// if (dashAnimate) {
|
|
106
|
+
// offset += time * 0.22;
|
|
107
|
+
// }
|
|
108
|
+
|
|
109
|
+
// create the repeating dash pattern
|
|
110
|
+
float pattern = fract((positionAlong + offset) * dashRepeats);
|
|
111
|
+
computedThickness *= 1.0 - wireframe_aastep(dashLength, pattern);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// compute the anti-aliased stroke edge
|
|
115
|
+
float edge = 1.0 - wireframe_aastep(computedThickness, d);
|
|
116
|
+
|
|
117
|
+
return edge;
|
|
118
|
+
}
|
|
119
|
+
`,
|
|
120
|
+
};
|
|
121
|
+
export const WireframeMaterial = shaderMaterial(WireframeMaterialShaders.uniforms, WireframeMaterialShaders.vertex +
|
|
122
|
+
/* glsl */ `
|
|
123
|
+
void main() {
|
|
124
|
+
initWireframe();
|
|
125
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
126
|
+
}
|
|
127
|
+
`, WireframeMaterialShaders.fragment +
|
|
128
|
+
/* glsl */ `
|
|
129
|
+
void main () {
|
|
130
|
+
// Compute color
|
|
131
|
+
|
|
132
|
+
float edge = getWireframe();
|
|
133
|
+
vec4 colorStroke = vec4(stroke, edge);
|
|
134
|
+
|
|
135
|
+
#ifdef FLIP_SIDED
|
|
136
|
+
colorStroke.rgb = backfaceStroke;
|
|
137
|
+
#endif
|
|
138
|
+
|
|
139
|
+
vec4 colorFill = vec4(fill, fillOpacity);
|
|
140
|
+
vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);
|
|
141
|
+
|
|
142
|
+
gl_FragColor = outColor;
|
|
143
|
+
}
|
|
144
|
+
`);
|
|
145
|
+
export function setWireframeOverride(material, uniforms) {
|
|
146
|
+
material.onBeforeCompile = (shader) => {
|
|
147
|
+
shader.uniforms = {
|
|
148
|
+
...shader.uniforms,
|
|
149
|
+
...uniforms,
|
|
150
|
+
};
|
|
151
|
+
shader.vertexShader = shader.vertexShader.replace('void main() {', `
|
|
152
|
+
${WireframeMaterialShaders.vertex}
|
|
153
|
+
void main() {
|
|
154
|
+
initWireframe();
|
|
155
|
+
`);
|
|
156
|
+
shader.fragmentShader = shader.fragmentShader.replace('void main() {', `
|
|
157
|
+
${WireframeMaterialShaders.fragment}
|
|
158
|
+
void main() {
|
|
159
|
+
`);
|
|
160
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <color_fragment>',
|
|
161
|
+
/* glsl */ `
|
|
162
|
+
#include <color_fragment>
|
|
163
|
+
float edge = getWireframe();
|
|
164
|
+
vec4 colorStroke = vec4(stroke, edge);
|
|
165
|
+
#ifdef FLIP_SIDED
|
|
166
|
+
colorStroke.rgb = backfaceStroke;
|
|
167
|
+
#endif
|
|
168
|
+
vec4 colorFill = vec4(mix(diffuseColor.rgb, fill, fillMix), mix(diffuseColor.a, fillOpacity, fillMix));
|
|
169
|
+
vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);
|
|
170
|
+
|
|
171
|
+
diffuseColor.rgb = outColor.rgb;
|
|
172
|
+
diffuseColor.a *= outColor.a;
|
|
173
|
+
`);
|
|
174
|
+
};
|
|
175
|
+
material.side = THREE.DoubleSide;
|
|
176
|
+
material.transparent = true;
|
|
177
|
+
}
|
|
178
|
+
export function injectNgtsWireframeUniforms(uniformsFactory, stateFactory, { injector } = {}) {
|
|
179
|
+
injector = assertInjector(injectNgtsWireframeUniforms, injector);
|
|
180
|
+
return runInInjectionContext(injector, () => {
|
|
181
|
+
const uniforms = uniformsFactory();
|
|
182
|
+
const state = computed(() => stateFactory());
|
|
183
|
+
const fillOpacity = computed(() => state().fillOpacity);
|
|
184
|
+
const fillMix = computed(() => state().fillMix);
|
|
185
|
+
const strokeOpacity = computed(() => state().strokeOpacity);
|
|
186
|
+
const thickness = computed(() => state().thickness);
|
|
187
|
+
const colorBackfaces = computed(() => state().colorBackfaces);
|
|
188
|
+
const dash = computed(() => state().dash);
|
|
189
|
+
const dashInvert = computed(() => state().dashInvert);
|
|
190
|
+
const dashRepeats = computed(() => state().dashRepeats);
|
|
191
|
+
const dashLength = computed(() => state().dashLength);
|
|
192
|
+
const squeeze = computed(() => state().squeeze);
|
|
193
|
+
const squeezeMin = computed(() => state().squeezeMin);
|
|
194
|
+
const squeezeMax = computed(() => state().squeezeMax);
|
|
195
|
+
const stroke = computed(() => state().stroke);
|
|
196
|
+
const fill = computed(() => state().fill);
|
|
197
|
+
const backfaceStroke = computed(() => state().backfaceStroke);
|
|
198
|
+
effect(() => {
|
|
199
|
+
uniforms['fillOpacity'].value = fillOpacity() ?? uniforms['fillOpacity'].value;
|
|
200
|
+
});
|
|
201
|
+
effect(() => {
|
|
202
|
+
uniforms['fillMix'].value = fillMix() ?? uniforms['fillMix'].value;
|
|
203
|
+
});
|
|
204
|
+
effect(() => {
|
|
205
|
+
uniforms['strokeOpacity'].value = strokeOpacity() ?? uniforms['strokeOpacity'].value;
|
|
206
|
+
});
|
|
207
|
+
effect(() => {
|
|
208
|
+
uniforms['thickness'].value = thickness() ?? uniforms['thickness'].value;
|
|
209
|
+
});
|
|
210
|
+
effect(() => {
|
|
211
|
+
uniforms['colorBackfaces'].value = colorBackfaces() ?? uniforms['colorBackfaces'].value;
|
|
212
|
+
});
|
|
213
|
+
effect(() => {
|
|
214
|
+
uniforms['dash'].value = dash() ?? uniforms['dash'].value;
|
|
215
|
+
});
|
|
216
|
+
effect(() => {
|
|
217
|
+
uniforms['dashInvert'].value = dashInvert() ?? uniforms['dashInvert'].value;
|
|
218
|
+
});
|
|
219
|
+
effect(() => {
|
|
220
|
+
uniforms['dashRepeats'].value = dashRepeats() ?? uniforms['dashRepeats'].value;
|
|
221
|
+
});
|
|
222
|
+
effect(() => {
|
|
223
|
+
uniforms['dashLength'].value = dashLength() ?? uniforms['dashLength'].value;
|
|
224
|
+
});
|
|
225
|
+
effect(() => {
|
|
226
|
+
uniforms['squeeze'].value = squeeze() ?? uniforms['squeeze'].value;
|
|
227
|
+
});
|
|
228
|
+
effect(() => {
|
|
229
|
+
uniforms['squeezeMin'].value = squeezeMin() ?? uniforms['squeezeMin'].value;
|
|
230
|
+
});
|
|
231
|
+
effect(() => {
|
|
232
|
+
uniforms['squeezeMax'].value = squeezeMax() ?? uniforms['squeezeMax'].value;
|
|
233
|
+
});
|
|
234
|
+
effect(() => {
|
|
235
|
+
uniforms['stroke'].value = stroke() ? new THREE.Color(stroke()) : uniforms['stroke'].value;
|
|
236
|
+
});
|
|
237
|
+
effect(() => {
|
|
238
|
+
uniforms['fill'].value = fill() ? new THREE.Color(fill()) : uniforms['fill'].value;
|
|
239
|
+
});
|
|
240
|
+
effect(() => {
|
|
241
|
+
uniforms['backfaceStroke'].value = backfaceStroke()
|
|
242
|
+
? new THREE.Color(backfaceStroke())
|
|
243
|
+
: uniforms['backfaceStroke'].value;
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZWZyYW1lLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL3dpcmVmcmFtZS1tYXRlcmlhbC93aXJlZnJhbWUtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFvQnBFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHO0lBQ3ZDLFFBQVEsRUFBRTtRQUNULGFBQWEsRUFBRSxDQUFDO1FBQ2hCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO1FBQ1YsU0FBUyxFQUFFLElBQUk7UUFDZixjQUFjLEVBQUUsS0FBSztRQUNyQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsS0FBSztRQUNYLFdBQVcsRUFBRSxDQUFDO1FBQ2QsVUFBVSxFQUFFLEdBQUc7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFVBQVUsRUFBRSxHQUFHO1FBQ2YsVUFBVSxFQUFFLENBQUM7UUFDYixNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxjQUFjLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztLQUNoQztJQUNELE1BQU0sRUFBRSxVQUFVLENBQUM7Ozs7Ozs7Ozs7SUFVaEI7SUFDSCxRQUFRLEVBQUUsVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBcUZsQjtDQUNILENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQzlDLHdCQUF3QixDQUFDLFFBQVEsRUFDakMsd0JBQXdCLENBQUMsTUFBTTtJQUM5QixVQUFVLENBQUM7Ozs7O0dBS1YsRUFDRix3QkFBd0IsQ0FBQyxRQUFRO0lBQ2hDLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCVixDQUNGLENBQUM7QUFXRixNQUFNLFVBQVUsb0JBQW9CLENBQ25DLFFBQXdCLEVBQ3hCLFFBRUM7SUFFRCxRQUFRLENBQUMsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxDQUFDLFFBQVEsR0FBRztZQUNqQixHQUFHLE1BQU0sQ0FBQyxRQUFRO1lBQ2xCLEdBQUcsUUFBUTtTQUNYLENBQUM7UUFFRixNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUNoRCxlQUFlLEVBQ2Y7TUFDRyx3QkFBd0IsQ0FBQyxNQUFNOzs7R0FHbEMsQ0FDQSxDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEQsZUFBZSxFQUNmO01BQ0csd0JBQXdCLENBQUMsUUFBUTs7R0FFcEMsQ0FDQSxDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDcEQsMkJBQTJCO1FBQzNCLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7O0dBWVgsQ0FDQSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQzFDLGVBQTBELEVBQzFELFlBQW1ELEVBQ25ELEVBQUUsUUFBUSxLQUE4QixFQUFFO0lBRTFDLFFBQVEsR0FBRyxjQUFjLENBQUMsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sUUFBUSxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFHLFdBQVcsRUFBRSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxHQUFHLGNBQWMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLEVBQUUsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxFQUFFLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxFQUFFLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxHQUFHLGNBQWMsRUFBRTtnQkFDbEQsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgdHlwZSBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgdHlwZSBXaXJlZnJhbWVNYXRlcmlhbFN0YXRlID0ge1xuXHRmaWxsT3BhY2l0eT86IG51bWJlcjtcblx0ZmlsbE1peD86IG51bWJlcjtcblx0c3Ryb2tlT3BhY2l0eT86IG51bWJlcjtcblx0dGhpY2tuZXNzPzogbnVtYmVyO1xuXHRjb2xvckJhY2tmYWNlcz86IGJvb2xlYW47XG5cdGRhc2hJbnZlcnQ/OiBib29sZWFuO1xuXHRkYXNoPzogYm9vbGVhbjtcblx0ZGFzaFJlcGVhdHM/OiBudW1iZXI7XG5cdGRhc2hMZW5ndGg/OiBudW1iZXI7XG5cdHNxdWVlemU/OiBib29sZWFuO1xuXHRzcXVlZXplTWluPzogbnVtYmVyO1xuXHRzcXVlZXplTWF4PzogbnVtYmVyO1xuXHRzdHJva2U/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHRiYWNrZmFjZVN0cm9rZT86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG5cdGZpbGw/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IFdpcmVmcmFtZU1hdGVyaWFsU2hhZGVycyA9IHtcblx0dW5pZm9ybXM6IHtcblx0XHRzdHJva2VPcGFjaXR5OiAxLFxuXHRcdGZpbGxPcGFjaXR5OiAwLjI1LFxuXHRcdGZpbGxNaXg6IDAsXG5cdFx0dGhpY2tuZXNzOiAwLjA1LFxuXHRcdGNvbG9yQmFja2ZhY2VzOiBmYWxzZSxcblx0XHRkYXNoSW52ZXJ0OiB0cnVlLFxuXHRcdGRhc2g6IGZhbHNlLFxuXHRcdGRhc2hSZXBlYXRzOiA0LFxuXHRcdGRhc2hMZW5ndGg6IDAuNSxcblx0XHRzcXVlZXplOiBmYWxzZSxcblx0XHRzcXVlZXplTWluOiAwLjIsXG5cdFx0c3F1ZWV6ZU1heDogMSxcblx0XHRzdHJva2U6IG5ldyBUSFJFRS5Db2xvcignI2ZmMDAwMCcpLFxuXHRcdGJhY2tmYWNlU3Ryb2tlOiBuZXcgVEhSRUUuQ29sb3IoJyMwMDAwZmYnKSxcblx0XHRmaWxsOiBuZXcgVEhSRUUuQ29sb3IoJyMwMGZmMDAnKSxcblx0fSxcblx0dmVydGV4OiAvKiBnbHNsICovIGBcblx0ICBhdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcblxuXHRcdHZhcnlpbmcgdmVjMyB2X2VkZ2VzX0JhcnljZW50cmljO1xuXHRcdHZhcnlpbmcgdmVjMyB2X2VkZ2VzX1Bvc2l0aW9uO1xuXG5cdFx0dm9pZCBpbml0V2lyZWZyYW1lKCkge1xuXHRcdFx0dl9lZGdlc19CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xuXHRcdFx0dl9lZGdlc19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5ejtcblx0XHR9XG5cdCAgYCxcblx0ZnJhZ21lbnQ6IC8qIGdsc2wgKi8gYFxuXHRcdCNpZm5kZWYgUElcblx0ICBcdCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1XG5cdFx0I2VuZGlmXG5cblx0ICB2YXJ5aW5nIHZlYzMgdl9lZGdlc19CYXJ5Y2VudHJpYztcblx0ICB2YXJ5aW5nIHZlYzMgdl9lZGdlc19Qb3NpdGlvbjtcblxuXHQgIHVuaWZvcm0gZmxvYXQgc3Ryb2tlT3BhY2l0eTtcblx0ICB1bmlmb3JtIGZsb2F0IGZpbGxPcGFjaXR5O1xuXHQgIHVuaWZvcm0gZmxvYXQgZmlsbE1peDtcblx0ICB1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0ICB1bmlmb3JtIGJvb2wgY29sb3JCYWNrZmFjZXM7XG5cblx0ICAvLyBEYXNoXG5cdCAgdW5pZm9ybSBib29sIGRhc2hJbnZlcnQ7XG5cdCAgdW5pZm9ybSBib29sIGRhc2g7XG5cdCAgdW5pZm9ybSBib29sIGRhc2hPbmx5O1xuXHQgIHVuaWZvcm0gZmxvYXQgZGFzaFJlcGVhdHM7XG5cdCAgdW5pZm9ybSBmbG9hdCBkYXNoTGVuZ3RoO1xuXG5cdCAgLy8gU3F1ZWV6ZVxuXHQgIHVuaWZvcm0gYm9vbCBzcXVlZXplO1xuXHQgIHVuaWZvcm0gZmxvYXQgc3F1ZWV6ZU1pbjtcblx0ICB1bmlmb3JtIGZsb2F0IHNxdWVlemVNYXg7XG5cblx0ICAvLyBDb2xvcnNcblx0ICB1bmlmb3JtIHZlYzMgc3Ryb2tlO1xuXHQgIHVuaWZvcm0gdmVjMyBiYWNrZmFjZVN0cm9rZTtcblx0ICB1bmlmb3JtIHZlYzMgZmlsbDtcblxuXHQgIC8vIFRoaXMgaXMgbGlrZVxuXHQgIGZsb2F0IHdpcmVmcmFtZV9hYXN0ZXAoZmxvYXQgdGhyZXNob2xkLCBmbG9hdCBkaXN0KSB7XG5cdFx0ICBmbG9hdCBhZndpZHRoID0gZndpZHRoKGRpc3QpICogMC41O1xuXHRcdCAgcmV0dXJuIHNtb290aHN0ZXAodGhyZXNob2xkIC0gYWZ3aWR0aCwgdGhyZXNob2xkICsgYWZ3aWR0aCwgZGlzdCk7XG5cdCAgfVxuXG5cdCAgZmxvYXQgd2lyZWZyYW1lX21hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4Mikge1xuXHRcdCAgcmV0dXJuIG1pbjIgKyAodmFsdWUgLSBtaW4xKSAqIChtYXgyIC0gbWluMikgLyAobWF4MSAtIG1pbjEpO1xuXHQgIH1cblxuXHQgIGZsb2F0IGdldFdpcmVmcmFtZSgpIHtcblx0XHRcdHZlYzMgYmFyeWNlbnRyaWMgPSB2X2VkZ2VzX0JhcnljZW50cmljO1xuXG5cdFx0XHQvLyBEaXN0YW5jZSBmcm9tIGNlbnRlciBvZiBlYWNoIHRyaWFuZ2xlIHRvIGl0cyBlZGdlcy5cblx0XHRcdGZsb2F0IGQgPSBtaW4obWluKGJhcnljZW50cmljLngsIGJhcnljZW50cmljLnkpLCBiYXJ5Y2VudHJpYy56KTtcblxuXHRcdFx0Ly8gZm9yIGRhc2hlZCByZW5kZXJpbmcsIHdlIGNhbiB1c2UgdGhpcyB0byBnZXQgdGhlIDAgLi4gMSB2YWx1ZSBvZiB0aGUgbGluZSBsZW5ndGhcblx0XHRcdGZsb2F0IHBvc2l0aW9uQWxvbmcgPSBtYXgoYmFyeWNlbnRyaWMueCwgYmFyeWNlbnRyaWMueSk7XG5cdFx0XHRpZiAoYmFyeWNlbnRyaWMueSA8IGJhcnljZW50cmljLnggJiYgYmFyeWNlbnRyaWMueSA8IGJhcnljZW50cmljLnopIHtcblx0XHRcdFx0cG9zaXRpb25BbG9uZyA9IDEuMCAtIHBvc2l0aW9uQWxvbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZVxuXHRcdFx0ZmxvYXQgY29tcHV0ZWRUaGlja25lc3MgPSB3aXJlZnJhbWVfbWFwKHRoaWNrbmVzcywgMC4wLCAxLjAsIDAuMCwgMC4zNCk7XG5cblx0XHRcdC8vIGlmIHdlIHdhbnQgdG8gc2hyaW5rIHRoZSB0aGlja25lc3MgdG93YXJkIHRoZSBjZW50ZXIgb2YgdGhlIGxpbmUgc2VnbWVudFxuXHRcdFx0aWYgKHNxdWVlemUpIHtcblx0XHRcdFx0Y29tcHV0ZWRUaGlja25lc3MgKj0gbWl4KHNxdWVlemVNaW4sIHNxdWVlemVNYXgsICgxLjAgLSBzaW4ocG9zaXRpb25BbG9uZyAqIFBJKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgZGFzaCBwYXR0ZXJuXG5cdFx0XHRpZiAoZGFzaCkge1xuXHRcdFx0XHQvLyBoZXJlIHdlIG9mZnNldCB0aGUgc3Ryb2tlIHBvc2l0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0XG5cdFx0XHRcdC8vIHNob3VsZCBvdmVybGFwIG9yIG5vdFxuXHRcdFx0XHRmbG9hdCBvZmZzZXQgPSAxLjAgLyBkYXNoUmVwZWF0cyAqIGRhc2hMZW5ndGggLyAyLjA7XG5cdFx0XHRcdGlmICghZGFzaEludmVydCkge1xuXHRcdFx0XHRcdG9mZnNldCArPSAxLjAgLyBkYXNoUmVwZWF0cyAvIDIuMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIHdlIHNob3VsZCBhbmltYXRlIHRoZSBkYXNoIG9yIG5vdFxuXHRcdFx0XHQvLyBpZiAoZGFzaEFuaW1hdGUpIHtcblx0XHRcdFx0Ly8gXHRvZmZzZXQgKz0gdGltZSAqIDAuMjI7XG5cdFx0XHRcdC8vIH1cblxuXHRcdFx0XHQvLyBjcmVhdGUgdGhlIHJlcGVhdGluZyBkYXNoIHBhdHRlcm5cblx0XHRcdFx0ZmxvYXQgcGF0dGVybiA9IGZyYWN0KChwb3NpdGlvbkFsb25nICsgb2Zmc2V0KSAqIGRhc2hSZXBlYXRzKTtcblx0XHRcdFx0Y29tcHV0ZWRUaGlja25lc3MgKj0gMS4wIC0gd2lyZWZyYW1lX2Fhc3RlcChkYXNoTGVuZ3RoLCBwYXR0ZXJuKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gY29tcHV0ZSB0aGUgYW50aS1hbGlhc2VkIHN0cm9rZSBlZGdlXG5cdFx0XHRmbG9hdCBlZGdlID0gMS4wIC0gd2lyZWZyYW1lX2Fhc3RlcChjb21wdXRlZFRoaWNrbmVzcywgZCk7XG5cblx0XHRcdHJldHVybiBlZGdlO1xuXHQgIH1cblx0ICBgLFxufTtcblxuZXhwb3J0IGNvbnN0IFdpcmVmcmFtZU1hdGVyaWFsID0gc2hhZGVyTWF0ZXJpYWwoXG5cdFdpcmVmcmFtZU1hdGVyaWFsU2hhZGVycy51bmlmb3Jtcyxcblx0V2lyZWZyYW1lTWF0ZXJpYWxTaGFkZXJzLnZlcnRleCArXG5cdFx0LyogZ2xzbCAqLyBgXG4gIFx0dm9pZCBtYWluKCkge1xuXHRcdGluaXRXaXJlZnJhbWUoKTtcblx0XHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuXHR9XG4gIGAsXG5cdFdpcmVmcmFtZU1hdGVyaWFsU2hhZGVycy5mcmFnbWVudCArXG5cdFx0LyogZ2xzbCAqLyBgXG4gIHZvaWQgbWFpbiAoKSB7XG5cdFx0Ly8gQ29tcHV0ZSBjb2xvclxuXG5cdFx0ZmxvYXQgZWRnZSA9IGdldFdpcmVmcmFtZSgpO1xuXHRcdHZlYzQgY29sb3JTdHJva2UgPSB2ZWM0KHN0cm9rZSwgZWRnZSk7XG5cblx0XHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdFx0Y29sb3JTdHJva2UucmdiID0gYmFja2ZhY2VTdHJva2U7XG5cdFx0I2VuZGlmXG5cblx0XHR2ZWM0IGNvbG9yRmlsbCA9IHZlYzQoZmlsbCwgZmlsbE9wYWNpdHkpO1xuXHRcdHZlYzQgb3V0Q29sb3IgPSBtaXgoY29sb3JGaWxsLCBjb2xvclN0cm9rZSwgZWRnZSAqIHN0cm9rZU9wYWNpdHkpO1xuXG5cdFx0Z2xfRnJhZ0NvbG9yID0gb3V0Q29sb3I7XG5cdH1cbiAgYCxcbik7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3Qtd2lyZWZyYW1lLW1hdGVyaWFsJzogV2lyZWZyYW1lTWF0ZXJpYWxTdGF0ZSAmIE5ndFNoYWRlck1hdGVyaWFsO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRXaXJlZnJhbWVPdmVycmlkZShcblx0bWF0ZXJpYWw6IFRIUkVFLk1hdGVyaWFsLFxuXHR1bmlmb3Jtczoge1xuXHRcdFtrZXk6IHN0cmluZ106IFRIUkVFLklVbmlmb3JtPGFueT47XG5cdH0sXG4pIHtcblx0bWF0ZXJpYWwub25CZWZvcmVDb21waWxlID0gKHNoYWRlcikgPT4ge1xuXHRcdHNoYWRlci51bmlmb3JtcyA9IHtcblx0XHRcdC4uLnNoYWRlci51bmlmb3Jtcyxcblx0XHRcdC4uLnVuaWZvcm1zLFxuXHRcdH07XG5cblx0XHRzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0J3ZvaWQgbWFpbigpIHsnLFxuXHRcdFx0YFxuXHRcdCAgJHtXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMudmVydGV4fVxuXHRcdCAgdm9pZCBtYWluKCkge1xuXHRcdFx0aW5pdFdpcmVmcmFtZSgpO1xuXHRcdGAsXG5cdFx0KTtcblxuXHRcdHNoYWRlci5mcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0J3ZvaWQgbWFpbigpIHsnLFxuXHRcdFx0YFxuXHRcdCAgJHtXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMuZnJhZ21lbnR9XG5cdFx0ICB2b2lkIG1haW4oKSB7XG5cdFx0YCxcblx0XHQpO1xuXG5cdFx0c2hhZGVyLmZyYWdtZW50U2hhZGVyID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyLnJlcGxhY2UoXG5cdFx0XHQnI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PicsXG5cdFx0XHQvKiBnbHNsICovIGBcblx0XHQgICNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0XHRcdCAgZmxvYXQgZWRnZSA9IGdldFdpcmVmcmFtZSgpO1xuXHRcdCAgdmVjNCBjb2xvclN0cm9rZSA9IHZlYzQoc3Ryb2tlLCBlZGdlKTtcblx0XHQgICNpZmRlZiBGTElQX1NJREVEXG5cdFx0XHQgIGNvbG9yU3Ryb2tlLnJnYiA9IGJhY2tmYWNlU3Ryb2tlO1xuXHRcdCAgI2VuZGlmXG5cdFx0ICB2ZWM0IGNvbG9yRmlsbCA9IHZlYzQobWl4KGRpZmZ1c2VDb2xvci5yZ2IsIGZpbGwsIGZpbGxNaXgpLCBtaXgoZGlmZnVzZUNvbG9yLmEsIGZpbGxPcGFjaXR5LCBmaWxsTWl4KSk7XG5cdFx0ICB2ZWM0IG91dENvbG9yID0gbWl4KGNvbG9yRmlsbCwgY29sb3JTdHJva2UsIGVkZ2UgKiBzdHJva2VPcGFjaXR5KTtcblxuXHRcdCAgZGlmZnVzZUNvbG9yLnJnYiA9IG91dENvbG9yLnJnYjtcblx0XHQgIGRpZmZ1c2VDb2xvci5hICo9IG91dENvbG9yLmE7XG5cdFx0YCxcblx0XHQpO1xuXHR9O1xuXG5cdG1hdGVyaWFsLnNpZGUgPSBUSFJFRS5Eb3VibGVTaWRlO1xuXHRtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzV2lyZWZyYW1lVW5pZm9ybXMoXG5cdHVuaWZvcm1zRmFjdG9yeTogKCkgPT4gUmVjb3JkPHN0cmluZywgVEhSRUUuSVVuaWZvcm08YW55Pj4sXG5cdHN0YXRlRmFjdG9yeTogKCkgPT4gUGFydGlhbDxXaXJlZnJhbWVNYXRlcmlhbFN0YXRlPixcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdGluamVjdG9yID0gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Tmd0c1dpcmVmcmFtZVVuaWZvcm1zLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCB1bmlmb3JtcyA9IHVuaWZvcm1zRmFjdG9yeSgpO1xuXHRcdGNvbnN0IHN0YXRlID0gY29tcHV0ZWQoKCkgPT4gc3RhdGVGYWN0b3J5KCkpO1xuXHRcdGNvbnN0IGZpbGxPcGFjaXR5ID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5maWxsT3BhY2l0eSk7XG5cdFx0Y29uc3QgZmlsbE1peCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZmlsbE1peCk7XG5cdFx0Y29uc3Qgc3Ryb2tlT3BhY2l0eSA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuc3Ryb2tlT3BhY2l0eSk7XG5cdFx0Y29uc3QgdGhpY2tuZXNzID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS50aGlja25lc3MpO1xuXHRcdGNvbnN0IGNvbG9yQmFja2ZhY2VzID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5jb2xvckJhY2tmYWNlcyk7XG5cdFx0Y29uc3QgZGFzaCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZGFzaCk7XG5cdFx0Y29uc3QgZGFzaEludmVydCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZGFzaEludmVydCk7XG5cdFx0Y29uc3QgZGFzaFJlcGVhdHMgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLmRhc2hSZXBlYXRzKTtcblx0XHRjb25zdCBkYXNoTGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5kYXNoTGVuZ3RoKTtcblx0XHRjb25zdCBzcXVlZXplID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplKTtcblx0XHRjb25zdCBzcXVlZXplTWluID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplTWluKTtcblx0XHRjb25zdCBzcXVlZXplTWF4ID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplTWF4KTtcblx0XHRjb25zdCBzdHJva2UgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLnN0cm9rZSk7XG5cdFx0Y29uc3QgZmlsbCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZmlsbCk7XG5cdFx0Y29uc3QgYmFja2ZhY2VTdHJva2UgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLmJhY2tmYWNlU3Ryb2tlKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snZmlsbE9wYWNpdHknXS52YWx1ZSA9IGZpbGxPcGFjaXR5KCkgPz8gdW5pZm9ybXNbJ2ZpbGxPcGFjaXR5J10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2ZpbGxNaXgnXS52YWx1ZSA9IGZpbGxNaXgoKSA/PyB1bmlmb3Jtc1snZmlsbE1peCddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydzdHJva2VPcGFjaXR5J10udmFsdWUgPSBzdHJva2VPcGFjaXR5KCkgPz8gdW5pZm9ybXNbJ3N0cm9rZU9wYWNpdHknXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1sndGhpY2tuZXNzJ10udmFsdWUgPSB0aGlja25lc3MoKSA/PyB1bmlmb3Jtc1sndGhpY2tuZXNzJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2NvbG9yQmFja2ZhY2VzJ10udmFsdWUgPSBjb2xvckJhY2tmYWNlcygpID8/IHVuaWZvcm1zWydjb2xvckJhY2tmYWNlcyddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydkYXNoJ10udmFsdWUgPSBkYXNoKCkgPz8gdW5pZm9ybXNbJ2Rhc2gnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snZGFzaEludmVydCddLnZhbHVlID0gZGFzaEludmVydCgpID8/IHVuaWZvcm1zWydkYXNoSW52ZXJ0J10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2Rhc2hSZXBlYXRzJ10udmFsdWUgPSBkYXNoUmVwZWF0cygpID8/IHVuaWZvcm1zWydkYXNoUmVwZWF0cyddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydkYXNoTGVuZ3RoJ10udmFsdWUgPSBkYXNoTGVuZ3RoKCkgPz8gdW5pZm9ybXNbJ2Rhc2hMZW5ndGgnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snc3F1ZWV6ZSddLnZhbHVlID0gc3F1ZWV6ZSgpID8/IHVuaWZvcm1zWydzcXVlZXplJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ3NxdWVlemVNaW4nXS52YWx1ZSA9IHNxdWVlemVNaW4oKSA/PyB1bmlmb3Jtc1snc3F1ZWV6ZU1pbiddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydzcXVlZXplTWF4J10udmFsdWUgPSBzcXVlZXplTWF4KCkgPz8gdW5pZm9ybXNbJ3NxdWVlemVNYXgnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snc3Ryb2tlJ10udmFsdWUgPSBzdHJva2UoKSA/IG5ldyBUSFJFRS5Db2xvcihzdHJva2UoKSkgOiB1bmlmb3Jtc1snc3Ryb2tlJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2ZpbGwnXS52YWx1ZSA9IGZpbGwoKSA/IG5ldyBUSFJFRS5Db2xvcihmaWxsKCkpIDogdW5pZm9ybXNbJ2ZpbGwnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snYmFja2ZhY2VTdHJva2UnXS52YWx1ZSA9IGJhY2tmYWNlU3Ryb2tlKClcblx0XHRcdFx0PyBuZXcgVEhSRUUuQ29sb3IoYmFja2ZhY2VTdHJva2UoKSlcblx0XHRcdFx0OiB1bmlmb3Jtc1snYmFja2ZhY2VTdHJva2UnXS52YWx1ZTtcblx0XHR9KTtcblx0fSk7XG59XG4iXX0=
|