angular-three-soba 2.0.0-beta.7 → 2.0.0-beta.8

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.
Files changed (296) hide show
  1. package/abstractions/billboard/billboard.d.ts +11 -7
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +23 -11
  4. package/abstractions/grid/grid.d.ts +41 -50
  5. package/abstractions/index.d.ts +1 -7
  6. package/abstractions/text/text.d.ts +10 -4
  7. package/abstractions/text-3d/text-3d.d.ts +47 -40
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +30 -13
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +140 -110
  19. package/esm2022/abstractions/index.mjs +2 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -122
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +119 -121
  22. package/esm2022/cameras/camera/camera-content.mjs +5 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +94 -90
  29. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  30. package/esm2022/loaders/loader/loader.mjs +92 -87
  31. package/esm2022/loaders/progress/progress.mjs +1 -1
  32. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  33. package/esm2022/materials/index.mjs +2 -1
  34. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  35. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  36. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
  37. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  38. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  39. package/esm2022/materials/point-material/point-material.mjs +46 -0
  40. package/esm2022/misc/animations/animations.mjs +20 -16
  41. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  42. package/esm2022/misc/caustics/caustics.mjs +387 -0
  43. package/esm2022/misc/decal/decal.mjs +187 -0
  44. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  45. package/esm2022/misc/example/example.mjs +160 -0
  46. package/esm2022/misc/fbo/fbo.mjs +35 -35
  47. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  48. package/esm2022/misc/html/html.mjs +304 -0
  49. package/esm2022/misc/index.mjs +10 -1
  50. package/esm2022/misc/sampler/sampler.mjs +142 -0
  51. package/esm2022/misc/shadow/shadow.mjs +111 -0
  52. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  53. package/esm2022/misc/trail/trail.mjs +209 -0
  54. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  55. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  56. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  57. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  58. package/esm2022/modifiers/index.mjs +2 -0
  59. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  60. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  61. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  62. package/esm2022/performances/index.mjs +6 -0
  63. package/esm2022/performances/points/points-input.mjs +64 -0
  64. package/esm2022/performances/points/points.mjs +329 -0
  65. package/esm2022/performances/points/position-point.mjs +54 -0
  66. package/esm2022/performances/segments/segment-object.mjs +9 -0
  67. package/esm2022/performances/segments/segments.mjs +182 -0
  68. package/esm2022/shaders/blur-pass/blur-pass.mjs +1 -1
  69. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  70. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  71. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  72. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  73. package/esm2022/shaders/grid-material/grid-material.mjs +29 -14
  74. package/esm2022/shaders/index.mjs +5 -3
  75. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  76. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +1 -1
  77. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  78. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  79. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  80. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  81. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  82. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  83. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  84. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  85. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  86. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  87. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  88. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  89. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  90. package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
  91. package/esm2022/staging/bounds/bounds.mjs +144 -143
  92. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  93. package/esm2022/staging/center/center.mjs +106 -91
  94. package/esm2022/staging/cloud/cloud.mjs +118 -124
  95. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  96. package/esm2022/staging/environment/assets.mjs +12 -12
  97. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  98. package/esm2022/staging/environment/environment-ground.mjs +18 -20
  99. package/esm2022/staging/environment/environment-input.mjs +97 -84
  100. package/esm2022/staging/environment/environment-map.mjs +33 -33
  101. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  102. package/esm2022/staging/environment/environment.mjs +34 -51
  103. package/esm2022/staging/environment/utils.mjs +35 -14
  104. package/esm2022/staging/float/float.mjs +70 -58
  105. package/esm2022/staging/index.mjs +7 -3
  106. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  107. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  108. package/esm2022/staging/sky/sky.mjs +85 -80
  109. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  110. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  111. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  112. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  113. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  114. package/esm2022/staging/spot-light/volumetric-mesh.mjs +61 -78
  115. package/esm2022/staging/stage/stage.mjs +304 -290
  116. package/esm2022/staging/stars/stars.mjs +101 -102
  117. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  118. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  119. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  120. package/esm2022/utils/content/content.mjs +15 -0
  121. package/esm2022/utils/index.mjs +2 -0
  122. package/fesm2022/angular-three-soba-abstractions.mjs +505 -2087
  123. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  124. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  125. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  126. package/fesm2022/angular-three-soba-controls.mjs +93 -88
  127. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  128. package/fesm2022/angular-three-soba-loaders.mjs +94 -90
  129. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  130. package/fesm2022/angular-three-soba-materials.mjs +655 -590
  131. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  132. package/fesm2022/angular-three-soba-misc.mjs +2198 -89
  133. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  134. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  135. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  136. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  137. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  138. package/fesm2022/angular-three-soba-shaders.mjs +501 -264
  139. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-staging.mjs +2870 -2555
  141. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  143. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  144. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  145. package/loaders/loader/loader.d.ts +19 -17
  146. package/loaders/progress/progress.d.ts +1 -1
  147. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  148. package/materials/index.d.ts +1 -0
  149. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  150. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  151. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  152. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  153. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  154. package/materials/point-material/point-material.d.ts +24 -0
  155. package/metadata.json +1 -0
  156. package/misc/animations/animations.d.ts +6 -4
  157. package/misc/caustics/caustics.d.ts +87 -0
  158. package/misc/decal/decal.d.ts +49 -0
  159. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  160. package/misc/example/example.d.ts +81 -0
  161. package/misc/fbo/fbo.d.ts +2 -2
  162. package/misc/html/html-wrapper.d.ts +559 -0
  163. package/misc/html/html.d.ts +214 -0
  164. package/misc/index.d.ts +9 -0
  165. package/misc/sampler/sampler.d.ts +67 -0
  166. package/misc/shadow/shadow.d.ts +37 -0
  167. package/misc/stats-gl/stats-gl.d.ts +24 -0
  168. package/misc/trail/trail.d.ts +57 -0
  169. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  170. package/misc/trail-texture/trail-texture.d.ts +50 -0
  171. package/modifiers/README.md +3 -0
  172. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  173. package/modifiers/index.d.ts +1 -0
  174. package/package.json +30 -22
  175. package/performances/README.md +3 -0
  176. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  177. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  178. package/performances/index.d.ts +5 -0
  179. package/performances/points/points-input.d.ts +32 -0
  180. package/performances/points/points.d.ts +92 -0
  181. package/{performance/instances/position-mesh.d.ts → performances/points/position-point.d.ts} +4 -3
  182. package/performances/segments/segment-object.d.ts +7 -0
  183. package/performances/segments/segments.d.ts +124 -0
  184. package/shaders/grid-material/grid-material.d.ts +33 -0
  185. package/shaders/index.d.ts +4 -2
  186. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +146 -1
  187. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  188. package/shaders/shader-material/shader-material.d.ts +2 -2
  189. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  190. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  191. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  192. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  193. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  194. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  195. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  196. package/staging/backdrop/backdrop.d.ts +30 -0
  197. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  198. package/staging/bounds/bounds.d.ts +100 -24
  199. package/staging/camera-shake/camera-shake.d.ts +30 -19
  200. package/staging/center/center.d.ts +43 -35
  201. package/staging/cloud/cloud.d.ts +26 -23
  202. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  203. package/staging/environment/assets.d.ts +9 -9
  204. package/staging/environment/environment-cube.d.ts +9 -5
  205. package/staging/environment/environment-ground.d.ts +7 -7
  206. package/staging/environment/environment-input.d.ts +36 -36
  207. package/staging/environment/environment-map.d.ts +10 -5
  208. package/staging/environment/environment-portal.d.ts +10 -5
  209. package/staging/environment/environment.d.ts +0 -4
  210. package/staging/environment/utils.d.ts +2 -2
  211. package/staging/float/float.d.ts +14 -10
  212. package/staging/index.d.ts +6 -2
  213. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  214. package/staging/normal-texture/normal-texture.d.ts +16 -0
  215. package/staging/sky/sky.d.ts +28 -21
  216. package/staging/sparkles/sparkles.d.ts +35 -21
  217. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  218. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  219. package/staging/spot-light/spot-light-input.d.ts +25 -25
  220. package/staging/spot-light/spot-light.d.ts +31 -15
  221. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  222. package/staging/stage/stage.d.ts +88 -63
  223. package/staging/stars/stars.d.ts +27 -16
  224. package/staging/wireframe/wireframe-input.d.ts +65 -0
  225. package/staging/wireframe/wireframe.d.ts +28 -0
  226. package/utils/README.md +3 -0
  227. package/utils/content/content.d.ts +8 -0
  228. package/utils/index.d.ts +1 -0
  229. package/web-types.json +1 -0
  230. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  231. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  232. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  233. package/abstractions/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  234. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  235. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  236. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  237. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  238. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  239. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  240. package/abstractions/line/line-input.d.ts +0 -42
  241. package/abstractions/line/line.d.ts +0 -35
  242. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  243. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  244. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  245. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  246. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  247. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  248. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  249. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  250. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  251. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  252. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  253. package/esm2022/abstractions/line/line-input.mjs +0 -113
  254. package/esm2022/abstractions/line/line.mjs +0 -165
  255. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  256. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  257. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  258. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  259. package/esm2022/performance/detailed/detailed.mjs +0 -61
  260. package/esm2022/performance/index.mjs +0 -7
  261. package/esm2022/performance/instances/instance.mjs +0 -48
  262. package/esm2022/performance/instances/instances.mjs +0 -189
  263. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  264. package/esm2022/performance/stats/stats.mjs +0 -79
  265. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  266. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  267. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  268. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  269. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -258
  270. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  271. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  272. package/performance/README.md +0 -3
  273. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  274. package/performance/detailed/detailed.d.ts +0 -20
  275. package/performance/index.d.ts +0 -6
  276. package/performance/instances/instance.d.ts +0 -9
  277. package/performance/instances/instances.d.ts +0 -35
  278. package/performance/stats/stats.d.ts +0 -18
  279. package/plugin/generators.json +0 -19
  280. package/plugin/libs/plugin/README.md +0 -11
  281. package/plugin/package.json +0 -9
  282. package/plugin/src/generators/init/compat.d.ts +0 -2
  283. package/plugin/src/generators/init/compat.js +0 -6
  284. package/plugin/src/generators/init/compat.js.map +0 -1
  285. package/plugin/src/generators/init/init.d.ts +0 -7
  286. package/plugin/src/generators/init/init.js +0 -28
  287. package/plugin/src/generators/init/init.js.map +0 -1
  288. package/plugin/src/generators/init/schema.json +0 -6
  289. package/plugin/src/index.d.ts +0 -1
  290. package/plugin/src/index.js +0 -6
  291. package/plugin/src/index.js.map +0 -1
  292. package/staging/caustics/caustisc.d.ts +0 -70
  293. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  294. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  295. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  296. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,62 +1,56 @@
1
1
  import { NgIf } from '@angular/common';
2
- import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, Input } from '@angular/core';
3
- import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtSignalStore, NgtStore } from 'angular-three';
2
+ import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, Input } from '@angular/core';
3
+ import { extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, NgtKey, signalStore, } from 'angular-three';
4
4
  import { MeshRefractionMaterial } from 'angular-three-soba/shaders';
5
5
  import { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';
6
6
  import * as i0 from "@angular/core";
7
7
  extend({ MeshRefractionMaterial });
8
8
  const isCubeTexture = (def) => def && def.isCubeTexture;
9
- class NgtsMeshRefractionMaterial extends NgtSignalStore {
9
+ export class NgtsMeshRefractionMaterial {
10
10
  /** Environment map */
11
- set envMap(envMap) {
12
- this.set({ envMap });
11
+ set _envMap(envMap) {
12
+ this.inputs.set({ envMap });
13
13
  }
14
14
  /** Number of ray-cast bounces, it can be expensive to have too many, 2 */
15
- set bounces(bounces) {
16
- this.set({ bounces });
15
+ set _bounces(bounces) {
16
+ this.inputs.set({ bounces });
17
17
  }
18
18
  /** Refraction index, 2.4 */
19
- set ior(ior) {
20
- this.set({ ior });
19
+ set _ior(ior) {
20
+ this.inputs.set({ ior });
21
21
  }
22
22
  /** Fresnel (strip light), 0 */
23
- set fresnel(fresnel) {
24
- this.set({ fresnel });
23
+ set _fresnel(fresnel) {
24
+ this.inputs.set({ fresnel });
25
25
  }
26
26
  /** RGB shift intensity, can be expensive, 0 */
27
- set aberrationStrength(aberrationStrength) {
28
- this.set({ aberrationStrength });
27
+ set _aberrationStrength(aberrationStrength) {
28
+ this.inputs.set({ aberrationStrength });
29
29
  }
30
30
  /** Color, white */
31
- set color(color) {
32
- this.set({ color });
31
+ set _color(color) {
32
+ this.inputs.set({ color });
33
33
  }
34
34
  /** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */
35
- set fastChroma(fastChroma) {
36
- this.set({ fastChroma });
35
+ set _fastChroma(fastChroma) {
36
+ this.inputs.set({ fastChroma });
37
37
  }
38
- #store;
39
- #size;
40
- #envMap;
41
38
  constructor() {
42
- super({ aberrationStrength: 0, fastChroma: true });
39
+ this.inputs = signalStore({ aberrationStrength: 0, fastChroma: true });
43
40
  this.materialRef = injectNgtRef();
44
- this.refractionEnvMap = this.select('envMap');
45
- this.refractionBounces = this.select('bounces');
46
- this.refractionIor = this.select('ior');
47
- this.refractionFresnel = this.select('fresnel');
48
- this.refractionAberrationStrength = this.select('aberrationStrength');
49
- this.refractionColor = this.select('color');
50
- this.refractionFastChroma = this.select('fastChroma');
51
- this.#store = inject(NgtStore);
52
- this.#size = this.#store.select('size');
53
- this.#envMap = this.select('envMap');
41
+ this.envMap = this.inputs.select('envMap');
42
+ this.bounces = this.inputs.select('bounces');
43
+ this.ior = this.inputs.select('ior');
44
+ this.fresnel = this.inputs.select('fresnel');
45
+ this.aberrationStrength = this.inputs.select('aberrationStrength');
46
+ this.color = this.inputs.select('color');
47
+ this.fastChroma = this.inputs.select('fastChroma');
48
+ this.store = injectNgtStore();
49
+ this.size = this.store.select('size');
54
50
  this.defines = computed(() => {
55
- const envMap = this.#envMap();
51
+ const [envMap, aberrationStrength, fastChroma] = [this.envMap(), this.aberrationStrength(), this.fastChroma()];
56
52
  if (!envMap)
57
53
  return null;
58
- const aberrationStrength = this.refractionAberrationStrength();
59
- const fastChroma = this.refractionFastChroma();
60
54
  const temp = {};
61
55
  // Sampler2D and SamplerCube need different defines
62
56
  const isCubeMap = isCubeTexture(envMap);
@@ -78,92 +72,100 @@ class NgtsMeshRefractionMaterial extends NgtSignalStore {
78
72
  temp['FAST_CHROMA'] = '';
79
73
  return temp;
80
74
  });
81
- this.resolution = computed(() => [this.#size().width, this.#size().height]);
75
+ this.resolution = computed(() => [this.size().width, this.size().height]);
82
76
  injectBeforeRender(({ camera }) => {
83
- if (this.materialRef.nativeElement) {
84
- this.materialRef.nativeElement.viewMatrixInverse = camera.matrixWorld;
85
- this.materialRef.nativeElement.projectionMatrixInverse = camera.projectionMatrixInverse;
77
+ const material = this.materialRef.nativeElement;
78
+ if (material) {
79
+ material.viewMatrixInverse = camera.matrixWorld;
80
+ material.projectionMatrixInverse = camera.projectionMatrixInverse;
86
81
  }
87
82
  });
88
- this.#setupGeometry();
83
+ this.setupGeometry();
89
84
  }
90
- #setupGeometry() {
85
+ setupGeometry() {
91
86
  effect(() => {
92
87
  const material = this.materialRef.nativeElement;
93
88
  if (!material)
94
89
  return;
95
- const geometry = getLocalState(material).parent?.value?.geometry;
90
+ const geometry = getLocalState(material).parent?.()?.geometry;
96
91
  if (geometry) {
97
92
  material.bvh = new MeshBVHUniformStruct();
98
93
  material.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { lazyGeneration: false, strategy: SAH }));
99
94
  }
100
95
  });
101
96
  }
102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", envMap: "envMap", bounces: "bounces", ior: "ior", fresnel: "fresnel", aberrationStrength: "aberrationStrength", color: "color", fastChroma: "fastChroma" }, usesInheritance: true, ngImport: i0, template: `
104
- <ngt-mesh-refraction-material
105
- *ngIf="defines() as defines"
106
- [ref]="materialRef"
107
- [defines]="defines"
108
- [resolution]="resolution()"
109
- [aberrationStrength]="refractionAberrationStrength()"
110
- [envMap]="refractionEnvMap()"
111
- [bounces]="refractionBounces()"
112
- [ior]="refractionIor()"
113
- [fresnel]="refractionFresnel()"
114
- [color]="refractionColor()"
115
- [fastChroma]="refractionFastChroma()"
116
- ngtCompound
117
- attach="material"
118
- >
119
- <ng-content />
120
- </ngt-mesh-refraction-material>
121
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshRefractionMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsMeshRefractionMaterial, isStandalone: true, selector: "ngts-mesh-refraction-material", inputs: { materialRef: "materialRef", _envMap: ["envMap", "_envMap"], _bounces: ["bounces", "_bounces"], _ior: ["ior", "_ior"], _fresnel: ["fresnel", "_fresnel"], _aberrationStrength: ["aberrationStrength", "_aberrationStrength"], _color: ["color", "_color"], _fastChroma: ["fastChroma", "_fastChroma"] }, ngImport: i0, template: `
99
+ <ngt-mesh-refraction-material
100
+ *ngIf="defines() as defines"
101
+ [key]="defines"
102
+ [ref]="materialRef"
103
+ [defines]="defines"
104
+ [resolution]="resolution()"
105
+ [aberrationStrength]="aberrationStrength()"
106
+ [envMap]="envMap()"
107
+ [bounces]="bounces()"
108
+ [ior]="ior()"
109
+ [fresnel]="fresnel()"
110
+ [color]="color()"
111
+ [fastChroma]="fastChroma()"
112
+ ngtCompound
113
+ attach="material"
114
+ >
115
+ <ng-content />
116
+ </ngt-mesh-refraction-material>
117
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
122
118
  }
123
- export { NgtsMeshRefractionMaterial };
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshRefractionMaterial, decorators: [{
125
120
  type: Component,
126
121
  args: [{
127
122
  selector: 'ngts-mesh-refraction-material',
128
123
  standalone: true,
129
124
  template: `
130
- <ngt-mesh-refraction-material
131
- *ngIf="defines() as defines"
132
- [ref]="materialRef"
133
- [defines]="defines"
134
- [resolution]="resolution()"
135
- [aberrationStrength]="refractionAberrationStrength()"
136
- [envMap]="refractionEnvMap()"
137
- [bounces]="refractionBounces()"
138
- [ior]="refractionIor()"
139
- [fresnel]="refractionFresnel()"
140
- [color]="refractionColor()"
141
- [fastChroma]="refractionFastChroma()"
142
- ngtCompound
143
- attach="material"
144
- >
145
- <ng-content />
146
- </ngt-mesh-refraction-material>
147
- `,
148
- imports: [NgIf],
125
+ <ngt-mesh-refraction-material
126
+ *ngIf="defines() as defines"
127
+ [key]="defines"
128
+ [ref]="materialRef"
129
+ [defines]="defines"
130
+ [resolution]="resolution()"
131
+ [aberrationStrength]="aberrationStrength()"
132
+ [envMap]="envMap()"
133
+ [bounces]="bounces()"
134
+ [ior]="ior()"
135
+ [fresnel]="fresnel()"
136
+ [color]="color()"
137
+ [fastChroma]="fastChroma()"
138
+ ngtCompound
139
+ attach="material"
140
+ >
141
+ <ng-content />
142
+ </ngt-mesh-refraction-material>
143
+ `,
144
+ imports: [NgIf, NgtKey],
149
145
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
150
146
  }]
151
147
  }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
152
148
  type: Input
153
- }], envMap: [{
149
+ }], _envMap: [{
154
150
  type: Input,
155
- args: [{ required: true }]
156
- }], bounces: [{
157
- type: Input
158
- }], ior: [{
159
- type: Input
160
- }], fresnel: [{
161
- type: Input
162
- }], aberrationStrength: [{
163
- type: Input
164
- }], color: [{
165
- type: Input
166
- }], fastChroma: [{
167
- type: Input
151
+ args: [{ required: true, alias: 'envMap' }]
152
+ }], _bounces: [{
153
+ type: Input,
154
+ args: [{ alias: 'bounces' }]
155
+ }], _ior: [{
156
+ type: Input,
157
+ args: [{ alias: 'ior' }]
158
+ }], _fresnel: [{
159
+ type: Input,
160
+ args: [{ alias: 'fresnel' }]
161
+ }], _aberrationStrength: [{
162
+ type: Input,
163
+ args: [{ alias: 'aberrationStrength' }]
164
+ }], _color: [{
165
+ type: Input,
166
+ args: [{ alias: 'color' }]
167
+ }], _fastChroma: [{
168
+ type: Input,
169
+ args: [{ alias: 'fastChroma' }]
168
170
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFcEUsTUFBTSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBbUJuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQXNDLEVBQTRCLEVBQUUsQ0FDdkYsR0FBRyxJQUFLLEdBQXlCLENBQUMsYUFBYSxDQUFDO0FBRXBELE1BeUJhLDBCQUEyQixTQUFRLGNBQStDO0lBRTNGLHNCQUFzQjtJQUN0QixJQUErQixNQUFNLENBQUMsTUFBeUM7UUFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCw0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LElBQUksRUFBRTtnQkFJWixPQUFPO3NCQUFuQixLQUFLO2dCQUlPLEdBQUc7c0JBQWYsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLGtCQUFrQjtzQkFBOUIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGVmZmVjdCwgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgTmd0U2lnbmFsU3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgTWVzaEJWSCwgTWVzaEJWSFVuaWZvcm1TdHJ1Y3QsIFNBSCB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcblxuZXh0ZW5kKHsgTWVzaFJlZnJhY3Rpb25NYXRlcmlhbCB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbFN0YXRlIHtcbiAgICAvKiogRW52aXJvbm1lbnQgbWFwICovXG4gICAgZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmU7XG4gICAgLyoqIE51bWJlciBvZiByYXktY2FzdCBib3VuY2VzLCBpdCBjYW4gYmUgZXhwZW5zaXZlIHRvIGhhdmUgdG9vIG1hbnksIDIgKi9cbiAgICBib3VuY2VzOiBudW1iZXI7XG4gICAgLyoqIFJlZnJhY3Rpb24gaW5kZXgsIDIuNCAqL1xuICAgIGlvcjogbnVtYmVyO1xuICAgIC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cbiAgICBmcmVzbmVsOiBudW1iZXI7XG4gICAgLyoqIFJHQiBzaGlmdCBpbnRlbnNpdHksIGNhbiBiZSBleHBlbnNpdmUsIDAgKi9cbiAgICBhYmVycmF0aW9uU3RyZW5ndGg6IG51bWJlcjtcbiAgICAvKiogQ29sb3IsIHdoaXRlICovXG4gICAgY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG4gICAgLyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cbiAgICBmYXN0Q2hyb21hOiBib29sZWFuO1xufVxuXG5jb25zdCBpc0N1YmVUZXh0dXJlID0gKGRlZjogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlKTogZGVmIGlzIFRIUkVFLkN1YmVUZXh0dXJlID0+XG4gICAgZGVmICYmIChkZWYgYXMgVEhSRUUuQ3ViZVRleHR1cmUpLmlzQ3ViZVRleHR1cmU7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWxcbiAgICAgICAgICAgICpuZ0lmPVwiZGVmaW5lcygpIGFzIGRlZmluZXNcIlxuICAgICAgICAgICAgW3JlZl09XCJtYXRlcmlhbFJlZlwiXG4gICAgICAgICAgICBbZGVmaW5lc109XCJkZWZpbmVzXCJcbiAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cInJlc29sdXRpb24oKVwiXG4gICAgICAgICAgICBbYWJlcnJhdGlvblN0cmVuZ3RoXT1cInJlZnJhY3Rpb25BYmVycmF0aW9uU3RyZW5ndGgoKVwiXG4gICAgICAgICAgICBbZW52TWFwXT1cInJlZnJhY3Rpb25FbnZNYXAoKVwiXG4gICAgICAgICAgICBbYm91bmNlc109XCJyZWZyYWN0aW9uQm91bmNlcygpXCJcbiAgICAgICAgICAgIFtpb3JdPVwicmVmcmFjdGlvbklvcigpXCJcbiAgICAgICAgICAgIFtmcmVzbmVsXT1cInJlZnJhY3Rpb25GcmVzbmVsKClcIlxuICAgICAgICAgICAgW2NvbG9yXT1cInJlZnJhY3Rpb25Db2xvcigpXCJcbiAgICAgICAgICAgIFtmYXN0Q2hyb21hXT1cInJlZnJhY3Rpb25GYXN0Q2hyb21hKClcIlxuICAgICAgICAgICAgbmd0Q29tcG91bmRcbiAgICAgICAgICAgIGF0dGFjaD1cIm1hdGVyaWFsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPC9uZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05nSWZdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbFN0YXRlPiB7XG4gICAgQElucHV0KCkgbWF0ZXJpYWxSZWYgPSBpbmplY3ROZ3RSZWY8SW5zdGFuY2VUeXBlPHR5cGVvZiBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsPj4oKTtcbiAgICAvKiogRW52aXJvbm1lbnQgbWFwICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2V0IGVudk1hcChlbnZNYXA6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSkge1xuICAgICAgICB0aGlzLnNldCh7IGVudk1hcCB9KTtcbiAgICB9XG4gICAgLyoqIE51bWJlciBvZiByYXktY2FzdCBib3VuY2VzLCBpdCBjYW4gYmUgZXhwZW5zaXZlIHRvIGhhdmUgdG9vIG1hbnksIDIgKi9cbiAgICBASW5wdXQoKSBzZXQgYm91bmNlcyhib3VuY2VzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBib3VuY2VzIH0pO1xuICAgIH1cbiAgICAvKiogUmVmcmFjdGlvbiBpbmRleCwgMi40ICovXG4gICAgQElucHV0KCkgc2V0IGlvcihpb3I6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGlvciB9KTtcbiAgICB9XG4gICAgLyoqIEZyZXNuZWwgKHN0cmlwIGxpZ2h0KSwgMCAqL1xuICAgIEBJbnB1dCgpIHNldCBmcmVzbmVsKGZyZXNuZWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyZXNuZWwgfSk7XG4gICAgfVxuICAgIC8qKiBSR0Igc2hpZnQgaW50ZW5zaXR5LCBjYW4gYmUgZXhwZW5zaXZlLCAwICovXG4gICAgQElucHV0KCkgc2V0IGFiZXJyYXRpb25TdHJlbmd0aChhYmVycmF0aW9uU3RyZW5ndGg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGFiZXJyYXRpb25TdHJlbmd0aCB9KTtcbiAgICB9XG4gICAgLyoqIENvbG9yLCB3aGl0ZSAqL1xuICAgIEBJbnB1dCgpIHNldCBjb2xvcihjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cbiAgICAvKiogSWYgdGhpcyBpcyBvbiBpdCB1c2VzIGZld2VyIHJheSBjYXN0cyBmb3IgdGhlIFJHQiBzaGlmdCBzYWNyaWZpY2luZyBwaHlzaWNhbCBhY2N1cmFjeSwgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpIHNldCBmYXN0Q2hyb21hKGZhc3RDaHJvbWE6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYXN0Q2hyb21hIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25FbnZNYXAgPSB0aGlzLnNlbGVjdCgnZW52TWFwJyk7XG4gICAgcmVhZG9ubHkgcmVmcmFjdGlvbkJvdW5jZXMgPSB0aGlzLnNlbGVjdCgnYm91bmNlcycpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25Jb3IgPSB0aGlzLnNlbGVjdCgnaW9yJyk7XG4gICAgcmVhZG9ubHkgcmVmcmFjdGlvbkZyZXNuZWwgPSB0aGlzLnNlbGVjdCgnZnJlc25lbCcpO1xuICAgIHJlYWRvbmx5IHJlZnJhY3Rpb25BYmVycmF0aW9uU3RyZW5ndGggPSB0aGlzLnNlbGVjdCgnYWJlcnJhdGlvblN0cmVuZ3RoJyk7XG4gICAgcmVhZG9ubHkgcmVmcmFjdGlvbkNvbG9yID0gdGhpcy5zZWxlY3QoJ2NvbG9yJyk7XG4gICAgcmVhZG9ubHkgcmVmcmFjdGlvbkZhc3RDaHJvbWEgPSB0aGlzLnNlbGVjdCgnZmFzdENocm9tYScpO1xuXG4gICAgcmVhZG9ubHkgI3N0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcbiAgICByZWFkb25seSAjc2l6ZSA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXG4gICAgcmVhZG9ubHkgI2Vudk1hcCA9IHRoaXMuc2VsZWN0KCdlbnZNYXAnKTtcblxuICAgIHJlYWRvbmx5IGRlZmluZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudk1hcCA9IHRoaXMuI2Vudk1hcCgpO1xuICAgICAgICBpZiAoIWVudk1hcCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgYWJlcnJhdGlvblN0cmVuZ3RoID0gdGhpcy5yZWZyYWN0aW9uQWJlcnJhdGlvblN0cmVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGZhc3RDaHJvbWEgPSB0aGlzLnJlZnJhY3Rpb25GYXN0Q2hyb21hKCk7XG5cbiAgICAgICAgY29uc3QgdGVtcCA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgICAgIC8vIFNhbXBsZXIyRCBhbmQgU2FtcGxlckN1YmUgbmVlZCBkaWZmZXJlbnQgZGVmaW5lc1xuICAgICAgICBjb25zdCBpc0N1YmVNYXAgPSBpc0N1YmVUZXh0dXJlKGVudk1hcCk7XG4gICAgICAgIGNvbnN0IHcgPSAoaXNDdWJlTWFwID8gZW52TWFwLmltYWdlWzBdPy53aWR0aCA6IGVudk1hcC5pbWFnZS53aWR0aCkgPz8gMTAyNDtcbiAgICAgICAgY29uc3QgY3ViZVNpemUgPSB3IC8gNDtcbiAgICAgICAgY29uc3QgX2xvZE1heCA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGN1YmVTaXplKSk7XG4gICAgICAgIGNvbnN0IF9jdWJlU2l6ZSA9IE1hdGgucG93KDIsIF9sb2RNYXgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IDMgKiBNYXRoLm1heChfY3ViZVNpemUsIDE2ICogNyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IDQgKiBfY3ViZVNpemU7XG4gICAgICAgIGlmIChpc0N1YmVNYXApIHRlbXBbJ0VOVk1BUF9UWVBFX0NVQkVNJ10gPSAnJztcbiAgICAgICAgdGVtcFsnQ1VCRVVWX1RFWEVMX1dJRFRIJ10gPSBgJHsxLjAgLyB3aWR0aH1gO1xuICAgICAgICB0ZW1wWydDVUJFVVZfVEVYRUxfSEVJR0hUJ10gPSBgJHsxLjAgLyBoZWlnaHR9YDtcbiAgICAgICAgdGVtcFsnQ1VCRVVWX01BWF9NSVAnXSA9IGAke19sb2RNYXh9LjBgO1xuICAgICAgICAvLyBBZGQgZGVmaW5lcyBmcm9tIGNocm9tYXRpYyBhYmVycmF0aW9uXG4gICAgICAgIGlmIChhYmVycmF0aW9uU3RyZW5ndGggPiAwKSB0ZW1wWydDSFJPTUFUSUNfQUJFUlJBVElPTlMnXSA9ICcnO1xuICAgICAgICBpZiAoZmFzdENocm9tYSkgdGVtcFsnRkFTVF9DSFJPTUEnXSA9ICcnO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9KTtcbiAgICByZWFkb25seSByZXNvbHV0aW9uID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMuI3NpemUoKS53aWR0aCwgdGhpcy4jc2l6ZSgpLmhlaWdodF0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHsgYWJlcnJhdGlvblN0cmVuZ3RoOiAwLCBmYXN0Q2hyb21hOiB0cnVlIH0pO1xuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50IGFzIGFueSkhLnZpZXdNYXRyaXhJbnZlcnNlID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuICAgICAgICAgICAgICAgICh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQgYXMgYW55KSEucHJvamVjdGlvbk1hdHJpeEludmVyc2UgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiNzZXR1cEdlb21ldHJ5KCk7XG4gICAgfVxuXG4gICAgI3NldHVwR2VvbWV0cnkoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghbWF0ZXJpYWwpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZ2V0TG9jYWxTdGF0ZShtYXRlcmlhbCkucGFyZW50Py52YWx1ZT8uZ2VvbWV0cnk7XG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICAobWF0ZXJpYWwgYXMgYW55KS5idmggPSBuZXcgTWVzaEJWSFVuaWZvcm1TdHJ1Y3QoKTtcbiAgICAgICAgICAgICAgICAobWF0ZXJpYWwgYXMgYW55KS5idmgudXBkYXRlRnJvbShcbiAgICAgICAgICAgICAgICAgICAgbmV3IE1lc2hCVkgoZ2VvbWV0cnkuY2xvbmUoKS50b05vbkluZGV4ZWQoKSwgeyBsYXp5R2VuZXJhdGlvbjogZmFsc2UsIHN0cmF0ZWd5OiBTQUggfSBhcyBhbnkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQ04sTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxNQUFNLEVBQ04sV0FBVyxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR3BFLE1BQU0sQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztBQTRCbkMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFzQyxFQUE0QixFQUFFLENBQzFGLEdBQUcsSUFBSyxHQUF5QixDQUFDLGFBQWEsQ0FBQztBQTRCakQsTUFBTSxPQUFPLDBCQUEwQjtJQUl0QyxzQkFBc0I7SUFDdEIsSUFBZ0QsT0FBTyxDQUFDLE1BQXlDO1FBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsMEVBQTBFO0lBQzFFLElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJ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QyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFJVCxRQUFRO3NCQUF4QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFJRSxJQUFJO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFJVSxRQUFRO3NCQUF4QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFJaUIsbUJBQW1CO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO2dCQUlQLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUlXLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBlZmZlY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRleHRlbmQsXG5cdGdldExvY2FsU3RhdGUsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0Tmd0S2V5LFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RTaGFkZXJNYXRlcmlhbCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgTWVzaEJWSCwgTWVzaEJWSFVuaWZvcm1TdHJ1Y3QsIFNBSCB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcbmltcG9ydCB7IE5ndHNNZXNoVHJhbm1pc3Npb25NYXRlcmlhbFN0YXRlIH0gZnJvbSAnLi4vbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwnO1xuXG5leHRlbmQoeyBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIH0pO1xuXG5leHBvcnQgdHlwZSBOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbFN0YXRlID0ge1xuXHQvKiogRW52aXJvbm1lbnQgbWFwICovXG5cdGVudk1hcDogVEhSRUUuQ3ViZVRleHR1cmUgfCBUSFJFRS5UZXh0dXJlO1xuXHQvKiogTnVtYmVyIG9mIHJheS1jYXN0IGJvdW5jZXMsIGl0IGNhbiBiZSBleHBlbnNpdmUgdG8gaGF2ZSB0b28gbWFueSwgMiAqL1xuXHRib3VuY2VzOiBudW1iZXI7XG5cdC8qKiBSZWZyYWN0aW9uIGluZGV4LCAyLjQgKi9cblx0aW9yOiBudW1iZXI7XG5cdC8qKiBGcmVzbmVsIChzdHJpcCBsaWdodCksIDAgKi9cblx0ZnJlc25lbDogbnVtYmVyO1xuXHQvKiogUkdCIHNoaWZ0IGludGVuc2l0eSwgY2FuIGJlIGV4cGVuc2l2ZSwgMCAqL1xuXHRhYmVycmF0aW9uU3RyZW5ndGg6IG51bWJlcjtcblx0LyoqIENvbG9yLCB3aGl0ZSAqL1xuXHRjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0LyoqIElmIHRoaXMgaXMgb24gaXQgdXNlcyBmZXdlciByYXkgY2FzdHMgZm9yIHRoZSBSR0Igc2hpZnQgc2FjcmlmaWNpbmcgcGh5c2ljYWwgYWNjdXJhY3ksIHRydWUgKi9cblx0ZmFzdENocm9tYTogYm9vbGVhbjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3RzLW1lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbCc6IE5ndHNNZXNoVHJhbm1pc3Npb25NYXRlcmlhbFN0YXRlICYgTmd0U2hhZGVyTWF0ZXJpYWw7XG5cdH1cbn1cblxuY29uc3QgaXNDdWJlVGV4dHVyZSA9IChkZWY6IFRIUkVFLkN1YmVUZXh0dXJlIHwgVEhSRUUuVGV4dHVyZSk6IGRlZiBpcyBUSFJFRS5DdWJlVGV4dHVyZSA9PlxuXHRkZWYgJiYgKGRlZiBhcyBUSFJFRS5DdWJlVGV4dHVyZSkuaXNDdWJlVGV4dHVyZTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsXG5cdFx0XHQqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcblx0XHRcdFtrZXldPVwiZGVmaW5lc1wiXG5cdFx0XHRbcmVmXT1cIm1hdGVyaWFsUmVmXCJcblx0XHRcdFtkZWZpbmVzXT1cImRlZmluZXNcIlxuXHRcdFx0W3Jlc29sdXRpb25dPVwicmVzb2x1dGlvbigpXCJcblx0XHRcdFthYmVycmF0aW9uU3RyZW5ndGhdPVwiYWJlcnJhdGlvblN0cmVuZ3RoKClcIlxuXHRcdFx0W2Vudk1hcF09XCJlbnZNYXAoKVwiXG5cdFx0XHRbYm91bmNlc109XCJib3VuY2VzKClcIlxuXHRcdFx0W2lvcl09XCJpb3IoKVwiXG5cdFx0XHRbZnJlc25lbF09XCJmcmVzbmVsKClcIlxuXHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0W2Zhc3RDaHJvbWFdPVwiZmFzdENocm9tYSgpXCJcblx0XHRcdG5ndENvbXBvdW5kXG5cdFx0XHRhdHRhY2g9XCJtYXRlcmlhbFwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWw+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ3RLZXldLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmcmFjdGlvbk1hdGVyaWFsIHtcblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzTWVzaFJlZnJhY3Rpb25NYXRlcmlhbFN0YXRlPih7IGFiZXJyYXRpb25TdHJlbmd0aDogMCwgZmFzdENocm9tYTogdHJ1ZSB9KTtcblxuXHRASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxJbnN0YW5jZVR5cGU8dHlwZW9mIE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWw+PigpO1xuXHQvKiogRW52aXJvbm1lbnQgbWFwICovXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Vudk1hcCcgfSkgc2V0IF9lbnZNYXAoZW52TWFwOiBUSFJFRS5DdWJlVGV4dHVyZSB8IFRIUkVFLlRleHR1cmUpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBlbnZNYXAgfSk7XG5cdH1cblx0LyoqIE51bWJlciBvZiByYXktY2FzdCBib3VuY2VzLCBpdCBjYW4gYmUgZXhwZW5zaXZlIHRvIGhhdmUgdG9vIG1hbnksIDIgKi9cblx0QElucHV0KHsgYWxpYXM6ICdib3VuY2VzJyB9KSBzZXQgX2JvdW5jZXMoYm91bmNlczogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYm91bmNlcyB9KTtcblx0fVxuXHQvKiogUmVmcmFjdGlvbiBpbmRleCwgMi40ICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnaW9yJyB9KSBzZXQgX2lvcihpb3I6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGlvciB9KTtcblx0fVxuXHQvKiogRnJlc25lbCAoc3RyaXAgbGlnaHQpLCAwICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnZnJlc25lbCcgfSkgc2V0IF9mcmVzbmVsKGZyZXNuZWw6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZyZXNuZWwgfSk7XG5cdH1cblx0LyoqIFJHQiBzaGlmdCBpbnRlbnNpdHksIGNhbiBiZSBleHBlbnNpdmUsIDAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdhYmVycmF0aW9uU3RyZW5ndGgnIH0pIHNldCBfYWJlcnJhdGlvblN0cmVuZ3RoKGFiZXJyYXRpb25TdHJlbmd0aDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYWJlcnJhdGlvblN0cmVuZ3RoIH0pO1xuXHR9XG5cdC8qKiBDb2xvciwgd2hpdGUgKi9cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvcicgfSkgc2V0IF9jb2xvcihjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvbG9yIH0pO1xuXHR9XG5cdC8qKiBJZiB0aGlzIGlzIG9uIGl0IHVzZXMgZmV3ZXIgcmF5IGNhc3RzIGZvciB0aGUgUkdCIHNoaWZ0IHNhY3JpZmljaW5nIHBoeXNpY2FsIGFjY3VyYWN5LCB0cnVlICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnZmFzdENocm9tYScgfSkgc2V0IF9mYXN0Q2hyb21hKGZhc3RDaHJvbWE6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBmYXN0Q2hyb21hIH0pO1xuXHR9XG5cblx0ZW52TWFwID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdlbnZNYXAnKTtcblx0Ym91bmNlcyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYm91bmNlcycpO1xuXHRpb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2lvcicpO1xuXHRmcmVzbmVsID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdmcmVzbmVsJyk7XG5cdGFiZXJyYXRpb25TdHJlbmd0aCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYWJlcnJhdGlvblN0cmVuZ3RoJyk7XG5cdGNvbG9yID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdjb2xvcicpO1xuXHRmYXN0Q2hyb21hID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdmYXN0Q2hyb21hJyk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0ZGVmaW5lcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbZW52TWFwLCBhYmVycmF0aW9uU3RyZW5ndGgsIGZhc3RDaHJvbWFdID0gW3RoaXMuZW52TWFwKCksIHRoaXMuYWJlcnJhdGlvblN0cmVuZ3RoKCksIHRoaXMuZmFzdENocm9tYSgpXTtcblx0XHRpZiAoIWVudk1hcCkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCB0ZW1wID0ge30gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblx0XHQvLyBTYW1wbGVyMkQgYW5kIFNhbXBsZXJDdWJlIG5lZWQgZGlmZmVyZW50IGRlZmluZXNcblx0XHRjb25zdCBpc0N1YmVNYXAgPSBpc0N1YmVUZXh0dXJlKGVudk1hcCk7XG5cdFx0Y29uc3QgdyA9IChpc0N1YmVNYXAgPyBlbnZNYXAuaW1hZ2VbMF0/LndpZHRoIDogZW52TWFwLmltYWdlLndpZHRoKSA/PyAxMDI0O1xuXHRcdGNvbnN0IGN1YmVTaXplID0gdyAvIDQ7XG5cdFx0Y29uc3QgX2xvZE1heCA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGN1YmVTaXplKSk7XG5cdFx0Y29uc3QgX2N1YmVTaXplID0gTWF0aC5wb3coMiwgX2xvZE1heCk7XG5cdFx0Y29uc3Qgd2lkdGggPSAzICogTWF0aC5tYXgoX2N1YmVTaXplLCAxNiAqIDcpO1xuXHRcdGNvbnN0IGhlaWdodCA9IDQgKiBfY3ViZVNpemU7XG5cdFx0aWYgKGlzQ3ViZU1hcCkgdGVtcFsnRU5WTUFQX1RZUEVfQ1VCRU0nXSA9ICcnO1xuXHRcdHRlbXBbJ0NVQkVVVl9URVhFTF9XSURUSCddID0gYCR7MS4wIC8gd2lkdGh9YDtcblx0XHR0ZW1wWydDVUJFVVZfVEVYRUxfSEVJR0hUJ10gPSBgJHsxLjAgLyBoZWlnaHR9YDtcblx0XHR0ZW1wWydDVUJFVVZfTUFYX01JUCddID0gYCR7X2xvZE1heH0uMGA7XG5cdFx0Ly8gQWRkIGRlZmluZXMgZnJvbSBjaHJvbWF0aWMgYWJlcnJhdGlvblxuXHRcdGlmIChhYmVycmF0aW9uU3RyZW5ndGggPiAwKSB0ZW1wWydDSFJPTUFUSUNfQUJFUlJBVElPTlMnXSA9ICcnO1xuXHRcdGlmIChmYXN0Q2hyb21hKSB0ZW1wWydGQVNUX0NIUk9NQSddID0gJyc7XG5cdFx0cmV0dXJuIHRlbXA7XG5cdH0pO1xuXHRyZXNvbHV0aW9uID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMuc2l6ZSgpLndpZHRoLCB0aGlzLnNpemUoKS5oZWlnaHRdKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKG1hdGVyaWFsKSB7XG5cdFx0XHRcdChtYXRlcmlhbCBhcyBhbnkpLnZpZXdNYXRyaXhJbnZlcnNlID0gY2FtZXJhLm1hdHJpeFdvcmxkO1xuXHRcdFx0XHQobWF0ZXJpYWwgYXMgYW55KS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSA9IGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnNldHVwR2VvbWV0cnkoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0dXBHZW9tZXRyeSgpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIW1hdGVyaWFsKSByZXR1cm47XG5cdFx0XHRjb25zdCBnZW9tZXRyeSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpLnBhcmVudD8uKCk/Lmdlb21ldHJ5O1xuXHRcdFx0aWYgKGdlb21ldHJ5KSB7XG5cdFx0XHRcdChtYXRlcmlhbCBhcyBhbnkpLmJ2aCA9IG5ldyBNZXNoQlZIVW5pZm9ybVN0cnVjdCgpO1xuXHRcdFx0XHQobWF0ZXJpYWwgYXMgYW55KS5idmgudXBkYXRlRnJvbShcblx0XHRcdFx0XHRuZXcgTWVzaEJWSChnZW9tZXRyeS5jbG9uZSgpLnRvTm9uSW5kZXhlZCgpLCB7IGxhenlHZW5lcmF0aW9uOiBmYWxzZSwgc3RyYXRlZ3k6IFNBSCB9IGFzIGFueSksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==