angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.21

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 (321) 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 +24 -12
  4. package/abstractions/grid/grid.d.ts +50 -0
  5. package/abstractions/index.d.ts +2 -7
  6. package/abstractions/text/text.d.ts +10 -5
  7. package/abstractions/text-3d/text-3d.d.ts +51 -41
  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 +31 -12
  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 +180 -0
  19. package/esm2022/abstractions/index.mjs +3 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -124
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
  22. package/esm2022/cameras/camera/camera-content.mjs +6 -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 +105 -85
  29. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  30. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -0
  31. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  32. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
  33. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +150 -0
  34. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
  35. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
  36. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
  37. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
  38. package/esm2022/gizmos/index.mjs +4 -0
  39. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  40. package/esm2022/loaders/loader/loader.mjs +92 -87
  41. package/esm2022/loaders/progress/progress.mjs +29 -29
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  43. package/esm2022/materials/index.mjs +2 -1
  44. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  45. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  46. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +102 -99
  47. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  48. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  49. package/esm2022/materials/point-material/point-material.mjs +50 -0
  50. package/esm2022/misc/animations/animations.mjs +36 -32
  51. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  52. package/esm2022/misc/caustics/caustics.mjs +387 -0
  53. package/esm2022/misc/decal/decal.mjs +187 -0
  54. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  55. package/esm2022/misc/example/example.mjs +160 -0
  56. package/esm2022/misc/fbo/fbo.mjs +35 -35
  57. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  58. package/esm2022/misc/html/html.mjs +304 -0
  59. package/esm2022/misc/index.mjs +10 -1
  60. package/esm2022/misc/sampler/sampler.mjs +142 -0
  61. package/esm2022/misc/shadow/shadow.mjs +111 -0
  62. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  63. package/esm2022/misc/trail/trail.mjs +209 -0
  64. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  65. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  66. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  67. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  68. package/esm2022/modifiers/index.mjs +2 -0
  69. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  70. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  71. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  72. package/esm2022/performances/index.mjs +8 -0
  73. package/esm2022/performances/instances/instances.mjs +220 -0
  74. package/esm2022/performances/instances/position-mesh.mjs +52 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +326 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
  81. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  82. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  83. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  84. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  85. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  86. package/esm2022/shaders/index.mjs +6 -3
  87. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  88. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
  89. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  90. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  91. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  92. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  93. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  94. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  95. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  96. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  97. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  98. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  99. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  100. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  101. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  102. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  103. package/esm2022/staging/bounds/bounds.mjs +144 -143
  104. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  105. package/esm2022/staging/center/center.mjs +129 -112
  106. package/esm2022/staging/cloud/cloud.mjs +118 -124
  107. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  108. package/esm2022/staging/environment/assets.mjs +12 -12
  109. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  110. package/esm2022/staging/environment/environment-ground.mjs +17 -19
  111. package/esm2022/staging/environment/environment-input.mjs +98 -85
  112. package/esm2022/staging/environment/environment-map.mjs +33 -33
  113. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  114. package/esm2022/staging/environment/environment.mjs +34 -51
  115. package/esm2022/staging/environment/utils.mjs +37 -15
  116. package/esm2022/staging/float/float.mjs +70 -58
  117. package/esm2022/staging/index.mjs +7 -3
  118. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  119. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  120. package/esm2022/staging/sky/sky.mjs +85 -80
  121. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  122. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  123. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  125. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  126. package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
  127. package/esm2022/staging/stage/stage.mjs +305 -290
  128. package/esm2022/staging/stars/stars.mjs +101 -102
  129. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  130. package/esm2022/staging/wireframe/wireframe.mjs +228 -0
  131. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  132. package/esm2022/utils/content/content.mjs +15 -0
  133. package/esm2022/utils/index.mjs +2 -0
  134. package/fesm2022/angular-three-soba-abstractions.mjs +514 -1947
  135. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  136. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  137. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-controls.mjs +104 -83
  139. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
  141. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  142. package/fesm2022/angular-three-soba-loaders.mjs +121 -117
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +662 -592
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2214 -105
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +956 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +549 -252
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/gizmos/README.md +3 -0
  159. package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
  160. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  161. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
  162. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
  163. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
  164. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
  165. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
  166. package/gizmos/index.d.ts +3 -0
  167. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  168. package/loaders/loader/loader.d.ts +19 -17
  169. package/loaders/progress/progress.d.ts +1 -1
  170. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  171. package/materials/index.d.ts +1 -0
  172. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  173. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  174. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  175. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  176. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  177. package/materials/point-material/point-material.d.ts +24 -0
  178. package/metadata.json +1 -0
  179. package/misc/animations/animations.d.ts +6 -4
  180. package/misc/caustics/caustics.d.ts +87 -0
  181. package/misc/decal/decal.d.ts +49 -0
  182. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  183. package/misc/example/example.d.ts +81 -0
  184. package/misc/fbo/fbo.d.ts +2 -2
  185. package/misc/html/html-wrapper.d.ts +559 -0
  186. package/misc/html/html.d.ts +214 -0
  187. package/misc/index.d.ts +9 -0
  188. package/misc/sampler/sampler.d.ts +67 -0
  189. package/misc/shadow/shadow.d.ts +37 -0
  190. package/misc/stats-gl/stats-gl.d.ts +24 -0
  191. package/misc/trail/trail.d.ts +57 -0
  192. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  193. package/misc/trail-texture/trail-texture.d.ts +50 -0
  194. package/modifiers/README.md +3 -0
  195. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  196. package/modifiers/index.d.ts +1 -0
  197. package/package.json +31 -16
  198. package/performances/README.md +3 -0
  199. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  200. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  201. package/performances/index.d.ts +7 -0
  202. package/performances/instances/instances.d.ts +79 -0
  203. package/{performance → performances}/instances/position-mesh.d.ts +1 -1
  204. package/performances/points/points-input.d.ts +32 -0
  205. package/performances/points/points.d.ts +92 -0
  206. package/performances/points/position-point.d.ts +11 -0
  207. package/performances/segments/segment-object.d.ts +7 -0
  208. package/performances/segments/segments.d.ts +124 -0
  209. package/shaders/grid-material/grid-material.d.ts +37 -0
  210. package/shaders/index.d.ts +5 -2
  211. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +147 -2
  212. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  213. package/shaders/shader-material/shader-material.d.ts +2 -2
  214. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  215. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  216. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  217. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  218. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  219. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  220. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  221. package/staging/backdrop/backdrop.d.ts +30 -0
  222. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  223. package/staging/bounds/bounds.d.ts +100 -24
  224. package/staging/camera-shake/camera-shake.d.ts +30 -19
  225. package/staging/center/center.d.ts +43 -35
  226. package/staging/cloud/cloud.d.ts +26 -23
  227. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  228. package/staging/environment/assets.d.ts +9 -9
  229. package/staging/environment/environment-cube.d.ts +9 -5
  230. package/staging/environment/environment-ground.d.ts +7 -7
  231. package/staging/environment/environment-input.d.ts +37 -37
  232. package/staging/environment/environment-map.d.ts +10 -5
  233. package/staging/environment/environment-portal.d.ts +10 -5
  234. package/staging/environment/environment.d.ts +0 -4
  235. package/staging/environment/utils.d.ts +2 -2
  236. package/staging/float/float.d.ts +14 -10
  237. package/staging/index.d.ts +6 -2
  238. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  239. package/staging/normal-texture/normal-texture.d.ts +16 -0
  240. package/staging/sky/sky.d.ts +28 -21
  241. package/staging/sparkles/sparkles.d.ts +36 -22
  242. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  243. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  244. package/staging/spot-light/spot-light-input.d.ts +25 -25
  245. package/staging/spot-light/spot-light.d.ts +31 -15
  246. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  247. package/staging/stage/stage.d.ts +89 -65
  248. package/staging/stars/stars.d.ts +28 -17
  249. package/staging/wireframe/wireframe-input.d.ts +65 -0
  250. package/staging/wireframe/wireframe.d.ts +28 -0
  251. package/utils/README.md +3 -0
  252. package/utils/content/content.d.ts +8 -0
  253. package/utils/index.d.ts +1 -0
  254. package/web-types.json +1 -0
  255. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  256. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  257. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  258. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  259. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  260. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  261. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  262. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  263. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  264. package/abstractions/line/line-input.d.ts +0 -42
  265. package/abstractions/line/line.d.ts +0 -35
  266. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  267. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  268. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  269. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  270. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  271. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  272. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  273. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  274. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  275. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  276. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  277. package/esm2022/abstractions/line/line-input.mjs +0 -113
  278. package/esm2022/abstractions/line/line.mjs +0 -165
  279. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  280. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  281. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  282. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  283. package/esm2022/performance/detailed/detailed.mjs +0 -61
  284. package/esm2022/performance/index.mjs +0 -7
  285. package/esm2022/performance/instances/instance.mjs +0 -48
  286. package/esm2022/performance/instances/instances.mjs +0 -189
  287. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  288. package/esm2022/performance/stats/stats.mjs +0 -79
  289. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  290. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  291. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  292. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  293. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
  294. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  295. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  296. package/performance/README.md +0 -3
  297. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  298. package/performance/detailed/detailed.d.ts +0 -20
  299. package/performance/index.d.ts +0 -6
  300. package/performance/instances/instance.d.ts +0 -9
  301. package/performance/instances/instances.d.ts +0 -35
  302. package/performance/stats/stats.d.ts +0 -18
  303. package/plugin/generators.json +0 -19
  304. package/plugin/libs/plugin/README.md +0 -11
  305. package/plugin/package.json +0 -9
  306. package/plugin/src/generators/init/compat.d.ts +0 -2
  307. package/plugin/src/generators/init/compat.js +0 -6
  308. package/plugin/src/generators/init/compat.js.map +0 -1
  309. package/plugin/src/generators/init/init.d.ts +0 -4
  310. package/plugin/src/generators/init/init.js +0 -22
  311. package/plugin/src/generators/init/init.js.map +0 -1
  312. package/plugin/src/generators/init/schema.json +0 -6
  313. package/plugin/src/index.d.ts +0 -1
  314. package/plugin/src/index.js +0 -6
  315. package/plugin/src/index.js.map +0 -1
  316. package/staging/caustics/caustisc.d.ts +0 -70
  317. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  318. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  319. /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
  320. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  321. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,13 +1,14 @@
1
1
  import { NgIf } from '@angular/common';
2
- import { ChangeDetectorRef, Component, computed, CUSTOM_ELEMENTS_SCHEMA, Directive, EventEmitter, inject, Input, Output, } from '@angular/core';
3
- import { createSignal, extend, NgtArgs, NgtSignalStore, safeDetectChanges } from 'angular-three';
2
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Directive, EventEmitter, Input, Output, computed, } from '@angular/core';
3
+ import { NgtArgs, extend, signalStore } from 'angular-three';
4
4
  import { AmbientLight, Group, PointLight, SpotLight, Vector2 } from 'three';
5
- import { NgtsAccumulativeShadows } from '../accumulative-shadows/accumulative-shadows';
5
+ import { NgtsAccumulativeShadows, } from '../accumulative-shadows/accumulative-shadows';
6
6
  import { NgtsRandomizedLights } from '../accumulative-shadows/randomized-lights';
7
- import { NGTS_BOUNDS_API, NgtsBounds } from '../bounds/bounds';
7
+ import { NgtsBounds, injectNgtsBoundsApi } from '../bounds/bounds';
8
8
  import { NgtsCenter } from '../center/center';
9
9
  import { NgtsContactShadows } from '../contact-shadows/contact-shadows';
10
10
  import { NgtsEnvironment } from '../environment/environment';
11
+ import {} from '../environment/environment-input';
11
12
  import * as i0 from "@angular/core";
12
13
  const presets = {
13
14
  rembrandt: {
@@ -27,23 +28,22 @@ const presets = {
27
28
  fill: [-1, 0.5, -1.5],
28
29
  },
29
30
  };
30
- class NgtsStageRefit {
31
+ extend({ AmbientLight, SpotLight, Vector2, PointLight, Group });
32
+ export class NgtsStageRefit {
31
33
  constructor() {
32
- this.#boundsApi = inject(NGTS_BOUNDS_API);
34
+ this.boundsApi = injectNgtsBoundsApi();
33
35
  this.radius = 0;
34
36
  this.adjustCamera = true;
35
37
  }
36
- #boundsApi;
37
38
  ngOnChanges() {
38
39
  if (this.adjustCamera) {
39
- this.#boundsApi().refresh().clip().fit();
40
+ this.boundsApi().refresh().clip().fit();
40
41
  }
41
42
  }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStageRefit, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
43
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStageRefit, isStandalone: true, selector: "ngts-stage-refit", inputs: { radius: "radius", adjustCamera: "adjustCamera" }, usesOnChanges: true, ngImport: i0 }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsStageRefit, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
44
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtsStageRefit, isStandalone: true, selector: "ngts-stage-refit", inputs: { radius: "radius", adjustCamera: "adjustCamera" }, usesOnChanges: true, ngImport: i0 }); }
44
45
  }
45
- export { NgtsStageRefit };
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStageRefit, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsStageRefit, decorators: [{
47
47
  type: Directive,
48
48
  args: [{ selector: 'ngts-stage-refit', standalone: true }]
49
49
  }], propDecorators: { radius: [{
@@ -51,304 +51,313 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
51
51
  }], adjustCamera: [{
52
52
  type: Input
53
53
  }] } });
54
- extend({ AmbientLight, SpotLight, Vector2, PointLight, Group });
55
- class NgtsStage extends NgtSignalStore {
56
- #cdr;
57
- set preset(preset) {
58
- this.set({ preset });
59
- }
60
- set shadows(shadows) {
61
- this.set({ shadows });
62
- }
63
- set adjustCamera(adjustCamera) {
64
- this.set({ adjustCamera });
65
- }
66
- set environment(environment) {
67
- this.set({ environment });
68
- }
69
- set intensity(intensity) {
70
- this.set({ intensity });
71
- }
72
- set center(center) {
73
- this.set({ center });
74
- }
75
- #preset;
76
- #environment;
54
+ export class NgtsStage {
77
55
  constructor() {
78
- super({
56
+ this.Number = Number;
57
+ this.inputs = signalStore({
79
58
  adjustCamera: true,
80
59
  intensity: 0.5,
81
60
  shadows: 'contact',
82
61
  environment: 'city',
83
62
  preset: 'rembrandt',
84
63
  });
85
- this.#cdr = inject(ChangeDetectorRef);
86
- this.Number = Number;
87
64
  this.centered = new EventEmitter();
88
- this.boundingState = createSignal({ radius: 0, width: 0, height: 0, depth: 0 });
89
- this.#preset = this.select('preset');
90
- this.#environment = this.select('environment');
91
- this.stageShadows = this.select('shadows');
92
- this.stageIntensity = this.select('intensity');
93
- this.stageAdjustCamera = this.select('adjustCamera');
94
- this.stageCenter = this.select('center');
65
+ this.preset = this.inputs.select('preset');
66
+ this.environment = this.inputs.select('environment');
67
+ this.boundingState = signalStore({ radius: 0, width: 0, height: 0, depth: 0 });
95
68
  this.config = computed(() => {
96
- const preset = this.#preset();
69
+ const preset = this.preset();
97
70
  return typeof preset === 'string' ? presets[preset] : preset;
98
71
  });
99
- this.shadowsInfo = computed(() => {
100
- const shadows = this.stageShadows();
101
- const restProps = typeof shadows === 'string' ? {} : shadows || {};
72
+ this.shadows = this.inputs.select('shadows');
73
+ this.intensity = this.inputs.select('intensity');
74
+ this.adjustCamera = this.inputs.select('adjustCamera');
75
+ this.center = this.inputs.select('center');
76
+ this.shadowsState = computed(() => {
77
+ const shadows = this.shadows();
78
+ const { bias: shadowBias = -0.0001, normalBias = 0, size: shadowSize = 1024, offset: shadowOffset = 0, ...restProps } = (typeof shadows === 'string' ? {} : shadows || {});
102
79
  return {
103
- contactShadow: shadows === 'contact' || shadows?.type === 'contact',
104
- accumulativeShadow: shadows === 'accumulative' || shadows?.type === 'accumulative',
105
- shadowBias: shadows?.bias ?? -0.0001,
106
- normalBias: shadows?.normalBias ?? 0,
107
- shadowSize: shadows?.size ?? 1024,
108
- shadowOffset: shadows?.offset ?? 0,
80
+ contactShadow: shadows === 'contact' || restProps.type === 'contact',
81
+ accumulativeShadow: shadows === 'accumulative' || restProps.type === 'accumulative',
82
+ shadowBias,
83
+ normalBias,
84
+ shadowSize,
85
+ shadowOffset,
109
86
  ...restProps,
110
87
  };
111
88
  });
112
- this.spotLightPosition = computed(() => {
113
- const config = this.config();
114
- if (!config)
115
- return [0, 0, 0];
116
- const radius = this.boundingState().radius;
117
- return [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius];
118
- });
119
- this.pointLightPosition = computed(() => {
120
- const config = this.config();
121
- if (!config)
122
- return [0, 0, 0];
123
- const radius = this.boundingState().radius;
124
- return [config.fill[0] * radius, config.fill[1] * radius, config.fill[2] * radius];
125
- });
126
- this.environmentInfo = computed(() => {
127
- const environment = this.#environment();
128
- if (!environment)
129
- return null;
130
- if (typeof environment === 'string')
131
- return { preset: environment };
132
- return environment;
89
+ this.environmentState = computed(() => {
90
+ const environment = this.environment();
91
+ return !environment ? null : typeof environment === 'string' ? { preset: environment } : environment;
133
92
  });
134
93
  }
135
- onCentered(props) {
136
- const { boundingSphere, width, height, depth } = props;
94
+ set _preset(preset) {
95
+ this.inputs.set({ preset });
96
+ }
97
+ set _shadows(shadows) {
98
+ this.inputs.set({ shadows });
99
+ }
100
+ set _adjustCamera(adjustCamera) {
101
+ this.inputs.set({ adjustCamera });
102
+ }
103
+ set _environment(environment) {
104
+ this.inputs.set({ environment });
105
+ }
106
+ set _intensity(intensity) {
107
+ this.inputs.set({ intensity });
108
+ }
109
+ set _center(center) {
110
+ this.inputs.set({ center });
111
+ }
112
+ onCentered($event) {
113
+ const { width, height, depth, boundingSphere } = $event;
137
114
  this.boundingState.set({ radius: boundingSphere.radius, width, height, depth });
138
- safeDetectChanges(this.#cdr);
139
115
  if (this.centered.observed)
140
- this.centered.emit(props);
116
+ this.centered.emit($event);
141
117
  }
142
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStage, isStandalone: true, selector: "ngts-stage", inputs: { preset: "preset", shadows: "shadows", adjustCamera: "adjustCamera", environment: "environment", intensity: "intensity", center: "center" }, outputs: { centered: "centered" }, usesInheritance: true, ngImport: i0, template: `
144
- <ngt-ambient-light [intensity]="stageIntensity() / 3" />
145
- <ngt-spot-light
146
- [penumbra]="1"
147
- [position]="spotLightPosition()"
148
- [intensity]="stageIntensity() * 2"
149
- [castShadow]="!!stageShadows()"
150
- >
151
- <ngt-value [rawValue]="shadowsInfo().shadowBias" attach="shadow.bias" />
152
- <ngt-value [rawValue]="shadowsInfo().normalBias" attach="shadow.normalBias" />
153
- <ngt-vector2 *args="[shadowsInfo().shadowSize, shadowsInfo().shadowSize]" attach="shadow.mapSize" />
154
- </ngt-spot-light>
155
- <ngt-point-light [position]="pointLightPosition()" [intensity]="stageIntensity()" />
118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsStage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsStage, isStandalone: true, selector: "ngts-stage", inputs: { _preset: ["preset", "_preset"], _shadows: ["shadows", "_shadows"], _adjustCamera: ["adjustCamera", "_adjustCamera"], _environment: ["environment", "_environment"], _intensity: ["intensity", "_intensity"], _center: ["center", "_center"] }, outputs: { centered: "centered" }, ngImport: i0, template: `
120
+ <ngt-ambient-light [intensity]="intensity() / 3" />
121
+ <ngt-spot-light
122
+ [penumbra]="1"
123
+ [position]="[
124
+ config().main[0] * boundingState.get('radius'),
125
+ config().main[1] * boundingState.get('radius'),
126
+ config().main[2] * boundingState.get('radius')
127
+ ]"
128
+ [intensity]="intensity() * 2"
129
+ [castShadow]="!!shadows()"
130
+ >
131
+ <ngt-value [rawValue]="shadowsState().shadowBias" attach="shadow.bias" />
132
+ <ngt-value [rawValue]="shadowsState().normalBias" attach="shadow.normalBias" />
133
+ <ngt-vector2 *args="[shadowsState().shadowSize, shadowsState().shadowSize]" attach="shadow.mapSize" />
134
+ </ngt-spot-light>
135
+ <ngt-point-light
136
+ [position]="[
137
+ config().fill[0] * boundingState.get('radius'),
138
+ config().fill[1] * boundingState.get('radius'),
139
+ config().fill[2] * boundingState.get('radius')
140
+ ]"
141
+ [intensity]="intensity()"
142
+ />
143
+
144
+ <ngts-bounds
145
+ [fit]="!!adjustCamera()"
146
+ [clip]="!!adjustCamera()"
147
+ [margin]="Number(adjustCamera())"
148
+ [observe]="true"
149
+ >
150
+ <ngts-stage-refit [radius]="boundingState.get('radius')" [adjustCamera]="adjustCamera()" />
151
+ <ngts-center
152
+ [position]="[0, shadowsState().shadowOffset / 2, 0]"
153
+ [top]="!!center()?.top"
154
+ [right]="!!center()?.right"
155
+ [bottom]="!!center()?.bottom"
156
+ [left]="!!center()?.left"
157
+ [front]="!!center()?.front"
158
+ [back]="!!center()?.back"
159
+ [disableX]="!!center()?.disableX"
160
+ [disableY]="!!center()?.disableY"
161
+ [disableZ]="!!center()?.disableZ"
162
+ [precise]="!!center()?.precise"
163
+ (centered)="onCentered($event)"
164
+ >
165
+ <ng-content />
166
+ </ngts-center>
167
+ </ngts-bounds>
168
+
169
+ <ngt-group [position]="[0, -boundingState.get('height') / 2 - shadowsState().shadowOffset / 2, 0]">
170
+ <ngts-contact-shadows
171
+ *ngIf="shadowsState().contactShadow"
172
+ [scale]="boundingState.get('radius') * 4"
173
+ [far]="boundingState.get('radius')"
174
+ [blur]="2"
175
+ [opacity]="shadowsState().opacity!"
176
+ [width]="shadowsState().width!"
177
+ [height]="shadowsState().height!"
178
+ [smooth]="shadowsState().smooth!"
179
+ [resolution]="shadowsState().resolution!"
180
+ [frames]="shadowsState().frames!"
181
+ [scale]="shadowsState().scale!"
182
+ [color]="shadowsState().color!"
183
+ [depthWrite]="shadowsState().depthWrite!"
184
+ [renderOrder]="shadowsState().renderOrder!"
185
+ />
186
+ <ngts-accumulative-shadows
187
+ *ngIf="shadowsState().accumulativeShadow"
188
+ [temporal]="true"
189
+ [frames]="100"
190
+ [alphaTest]="0.9"
191
+ [toneMapped]="true"
192
+ [scale]="boundingState.get('radius') * 4"
193
+ [opacity]="shadowsState().opacity!"
194
+ [alphaTest]="shadowsState().alphaTest!"
195
+ [color]="shadowsState().color!"
196
+ [colorBlend]="shadowsState().colorBlend!"
197
+ [resolution]="shadowsState().resolution!"
198
+ >
199
+ <ngts-randomized-lights
200
+ [amount]="shadowsState().amount ?? 8"
201
+ [radius]="shadowsState().radius ?? boundingState.get('radius')"
202
+ [ambient]="shadowsState().ambient ?? 0.5"
203
+ [intensity]="shadowsState().intensity ?? 1"
204
+ [position]="[
205
+ config().main[0] * boundingState.get('radius'),
206
+ config().main[1] * boundingState.get('radius'),
207
+ config().main[2] * boundingState.get('radius')
208
+ ]"
209
+ [size]="boundingState.get('radius') * 4"
210
+ [bias]="-shadowsState().shadowBias"
211
+ [mapSize]="shadowsState().shadowSize"
212
+ />
213
+ </ngts-accumulative-shadows>
214
+ </ngt-group>
156
215
 
157
- <ngts-bounds
158
- [fit]="!!stageAdjustCamera()"
159
- [clip]="!!stageAdjustCamera()"
160
- [margin]="Number(stageAdjustCamera())"
161
- [observe]="true"
162
- >
163
- <ngts-stage-refit [radius]="boundingState().radius" [adjustCamera]="!!stageAdjustCamera()" />
164
- <ngts-center
165
- [position]="[0, shadowsInfo().shadowOffset / 2, 0]"
166
- [top]="!!stageCenter()?.top"
167
- [right]="!!stageCenter()?.right"
168
- [bottom]="!!stageCenter()?.bottom"
169
- [left]="!!stageCenter()?.left"
170
- [front]="!!stageCenter()?.front"
171
- [back]="!!stageCenter()?.back"
172
- [disableX]="!!stageCenter()?.disableX"
173
- [disableY]="!!stageCenter()?.disableY"
174
- [disableZ]="!!stageCenter()?.disableZ"
175
- [precise]="!!stageCenter()?.precise"
176
- (centered)="onCentered($event)"
177
- >
178
- <ng-content />
179
- </ngts-center>
180
- </ngts-bounds>
181
- <ngt-group [position]="[0, -boundingState().height / 2 - shadowsInfo().shadowOffset / 2, 0]">
182
- <ngts-contact-shadows
183
- *ngIf="shadowsInfo().contactShadow"
184
- [scale]="boundingState().radius * 4"
185
- [far]="boundingState().radius"
186
- [blur]="2"
187
- [opacity]="shadowsInfo().opacity"
188
- [width]="shadowsInfo().width"
189
- [height]="shadowsInfo().height"
190
- [smooth]="shadowsInfo().smooth"
191
- [resolution]="shadowsInfo().resolution"
192
- [frames]="shadowsInfo().frames"
193
- [scale]="shadowsInfo().scale"
194
- [color]="shadowsInfo().color"
195
- [depthWrite]="shadowsInfo().depthWrite"
196
- [renderOrder]="shadowsInfo().renderOrder"
197
- />
198
- <ngts-accumulative-shadows
199
- *ngIf="shadowsInfo().accumulativeShadow"
200
- [temporal]="true"
201
- [frames]="100"
202
- [alphaTest]="0.9"
203
- [toneMapped]="true"
204
- [scale]="boundingState().radius * 4"
205
- [opacity]="shadowsInfo().opacity"
206
- [alphaTest]="shadowsInfo().alphaTest"
207
- [color]="shadowsInfo().color"
208
- [colorBlend]="shadowsInfo().colorBlend"
209
- [resolution]="shadowsInfo().resolution"
210
- >
211
- <ngts-randomized-lights
212
- [amount]="shadowsInfo().amount ?? 8"
213
- [radius]="shadowsInfo().radius ?? boundingState().radius"
214
- [ambient]="shadowsInfo().ambient ?? 0.5"
215
- [intensity]="shadowsInfo().intensity ?? 1"
216
- [position]="spotLightPosition()"
217
- [size]="boundingState().radius * 4"
218
- [bias]="-shadowsInfo().shadowBias"
219
- [mapSize]="shadowsInfo().shadowSize"
220
- />
221
- </ngts-accumulative-shadows>
222
- </ngt-group>
223
- <ngts-environment
224
- *ngIf="environmentInfo() as environmentInfo"
225
- [frames]="environmentInfo.frames"
226
- [near]="environmentInfo.near"
227
- [far]="environmentInfo.far"
228
- [resolution]="environmentInfo.resolution"
229
- [background]="environmentInfo.background"
230
- [blur]="environmentInfo.blur"
231
- [map]="environmentInfo.map"
232
- [files]="environmentInfo.files"
233
- [path]="environmentInfo.path"
234
- [preset]="environmentInfo.preset"
235
- [scene]="environmentInfo.scene"
236
- [extensions]="environmentInfo.extensions"
237
- [ground]="environmentInfo.ground"
238
- [encoding]="environmentInfo.encoding"
239
- />
240
- `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }, { kind: "component", type: NgtsBounds, selector: "ngts-bounds", inputs: ["boundsRef", "damping", "fit", "clip", "observe", "margin", "eps"], outputs: ["fitted"] }, { kind: "directive", type: NgtsStageRefit, selector: "ngts-stage-refit", inputs: ["radius", "adjustCamera"] }, { kind: "component", type: NgtsCenter, selector: "ngts-center", inputs: ["centerRef", "top", "right", "bottom", "left", "front", "back", "disableX", "disableY", "disableZ", "disable", "precise"], outputs: ["centered"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgtsContactShadows, selector: "ngts-contact-shadows", inputs: ["contactShadowsRef", "opacity", "width", "height", "blur", "far", "smooth", "resolution", "frames", "scale", "color", "depthWrite", "renderOrder"] }, { kind: "component", type: NgtsAccumulativeShadows, selector: "ngts-accumulative-shadows", inputs: ["frames", "blend", "limit", "scale", "temporal", "opacity", "alphaTest", "color", "colorBlend", "resolution", "toneMapped"] }, { kind: "component", type: NgtsRandomizedLights, selector: "ngts-randomized-lights", inputs: ["lightsRef", "frames", "position", "radius", "amount", "intensity", "ambient", "castShadow", "bias", "mapSize", "size", "near", "far"] }, { kind: "component", type: NgtsEnvironment, selector: "ngts-environment" }] }); }
216
+ <ngts-environment
217
+ *ngIf="environmentState() as environment"
218
+ [frames]="environment.frames"
219
+ [near]="environment.near"
220
+ [far]="environment.far"
221
+ [resolution]="environment.resolution"
222
+ [background]="environment.background"
223
+ [blur]="environment.blur"
224
+ [map]="environment.map"
225
+ [files]="environment.files"
226
+ [path]="environment.path"
227
+ [preset]="environment.preset"
228
+ [scene]="environment.scene"
229
+ [extensions]="environment.extensions"
230
+ [ground]="environment.ground"
231
+ [encoding]="environment.encoding"
232
+ />
233
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgtsBounds, selector: "ngts-bounds", inputs: ["boundsRef", "damping", "fit", "clip", "observe", "margin", "eps"], outputs: ["fitted"] }, { kind: "directive", type: NgtsStageRefit, selector: "ngts-stage-refit", inputs: ["radius", "adjustCamera"] }, { kind: "component", type: NgtsCenter, selector: "ngts-center", inputs: ["centerRef", "top", "right", "bottom", "left", "front", "back", "disableX", "disableY", "disableZ", "disable", "precise", "cacheKey"], outputs: ["centered"] }, { kind: "component", type: NgtsContactShadows, selector: "ngts-contact-shadows", inputs: ["contactShadowsRef", "opacity", "width", "height", "blur", "far", "smooth", "resolution", "frames", "scale", "color", "depthWrite", "renderOrder"] }, { kind: "component", type: NgtsAccumulativeShadows, selector: "ngts-accumulative-shadows", inputs: ["accumulativeShadowsRef", "frames", "blend", "limit", "scale", "temporal", "opacity", "alphaTest", "color", "colorBlend", "resolution", "toneMapped"] }, { kind: "component", type: NgtsRandomizedLights, selector: "ngts-randomized-lights", inputs: ["lightsRef", "frames", "position", "radius", "amount", "intensity", "ambient", "castShadow", "bias", "mapSize", "size", "near", "far"] }, { kind: "component", type: NgtsEnvironment, selector: "ngts-environment" }] }); }
241
234
  }
242
- export { NgtsStage };
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStage, decorators: [{
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsStage, decorators: [{
244
236
  type: Component,
245
237
  args: [{
246
238
  selector: 'ngts-stage',
247
239
  standalone: true,
248
240
  template: `
249
- <ngt-ambient-light [intensity]="stageIntensity() / 3" />
250
- <ngt-spot-light
251
- [penumbra]="1"
252
- [position]="spotLightPosition()"
253
- [intensity]="stageIntensity() * 2"
254
- [castShadow]="!!stageShadows()"
255
- >
256
- <ngt-value [rawValue]="shadowsInfo().shadowBias" attach="shadow.bias" />
257
- <ngt-value [rawValue]="shadowsInfo().normalBias" attach="shadow.normalBias" />
258
- <ngt-vector2 *args="[shadowsInfo().shadowSize, shadowsInfo().shadowSize]" attach="shadow.mapSize" />
259
- </ngt-spot-light>
260
- <ngt-point-light [position]="pointLightPosition()" [intensity]="stageIntensity()" />
241
+ <ngt-ambient-light [intensity]="intensity() / 3" />
242
+ <ngt-spot-light
243
+ [penumbra]="1"
244
+ [position]="[
245
+ config().main[0] * boundingState.get('radius'),
246
+ config().main[1] * boundingState.get('radius'),
247
+ config().main[2] * boundingState.get('radius')
248
+ ]"
249
+ [intensity]="intensity() * 2"
250
+ [castShadow]="!!shadows()"
251
+ >
252
+ <ngt-value [rawValue]="shadowsState().shadowBias" attach="shadow.bias" />
253
+ <ngt-value [rawValue]="shadowsState().normalBias" attach="shadow.normalBias" />
254
+ <ngt-vector2 *args="[shadowsState().shadowSize, shadowsState().shadowSize]" attach="shadow.mapSize" />
255
+ </ngt-spot-light>
256
+ <ngt-point-light
257
+ [position]="[
258
+ config().fill[0] * boundingState.get('radius'),
259
+ config().fill[1] * boundingState.get('radius'),
260
+ config().fill[2] * boundingState.get('radius')
261
+ ]"
262
+ [intensity]="intensity()"
263
+ />
261
264
 
262
- <ngts-bounds
263
- [fit]="!!stageAdjustCamera()"
264
- [clip]="!!stageAdjustCamera()"
265
- [margin]="Number(stageAdjustCamera())"
266
- [observe]="true"
267
- >
268
- <ngts-stage-refit [radius]="boundingState().radius" [adjustCamera]="!!stageAdjustCamera()" />
269
- <ngts-center
270
- [position]="[0, shadowsInfo().shadowOffset / 2, 0]"
271
- [top]="!!stageCenter()?.top"
272
- [right]="!!stageCenter()?.right"
273
- [bottom]="!!stageCenter()?.bottom"
274
- [left]="!!stageCenter()?.left"
275
- [front]="!!stageCenter()?.front"
276
- [back]="!!stageCenter()?.back"
277
- [disableX]="!!stageCenter()?.disableX"
278
- [disableY]="!!stageCenter()?.disableY"
279
- [disableZ]="!!stageCenter()?.disableZ"
280
- [precise]="!!stageCenter()?.precise"
281
- (centered)="onCentered($event)"
282
- >
283
- <ng-content />
284
- </ngts-center>
285
- </ngts-bounds>
286
- <ngt-group [position]="[0, -boundingState().height / 2 - shadowsInfo().shadowOffset / 2, 0]">
287
- <ngts-contact-shadows
288
- *ngIf="shadowsInfo().contactShadow"
289
- [scale]="boundingState().radius * 4"
290
- [far]="boundingState().radius"
291
- [blur]="2"
292
- [opacity]="shadowsInfo().opacity"
293
- [width]="shadowsInfo().width"
294
- [height]="shadowsInfo().height"
295
- [smooth]="shadowsInfo().smooth"
296
- [resolution]="shadowsInfo().resolution"
297
- [frames]="shadowsInfo().frames"
298
- [scale]="shadowsInfo().scale"
299
- [color]="shadowsInfo().color"
300
- [depthWrite]="shadowsInfo().depthWrite"
301
- [renderOrder]="shadowsInfo().renderOrder"
302
- />
303
- <ngts-accumulative-shadows
304
- *ngIf="shadowsInfo().accumulativeShadow"
305
- [temporal]="true"
306
- [frames]="100"
307
- [alphaTest]="0.9"
308
- [toneMapped]="true"
309
- [scale]="boundingState().radius * 4"
310
- [opacity]="shadowsInfo().opacity"
311
- [alphaTest]="shadowsInfo().alphaTest"
312
- [color]="shadowsInfo().color"
313
- [colorBlend]="shadowsInfo().colorBlend"
314
- [resolution]="shadowsInfo().resolution"
315
- >
316
- <ngts-randomized-lights
317
- [amount]="shadowsInfo().amount ?? 8"
318
- [radius]="shadowsInfo().radius ?? boundingState().radius"
319
- [ambient]="shadowsInfo().ambient ?? 0.5"
320
- [intensity]="shadowsInfo().intensity ?? 1"
321
- [position]="spotLightPosition()"
322
- [size]="boundingState().radius * 4"
323
- [bias]="-shadowsInfo().shadowBias"
324
- [mapSize]="shadowsInfo().shadowSize"
325
- />
326
- </ngts-accumulative-shadows>
327
- </ngt-group>
328
- <ngts-environment
329
- *ngIf="environmentInfo() as environmentInfo"
330
- [frames]="environmentInfo.frames"
331
- [near]="environmentInfo.near"
332
- [far]="environmentInfo.far"
333
- [resolution]="environmentInfo.resolution"
334
- [background]="environmentInfo.background"
335
- [blur]="environmentInfo.blur"
336
- [map]="environmentInfo.map"
337
- [files]="environmentInfo.files"
338
- [path]="environmentInfo.path"
339
- [preset]="environmentInfo.preset"
340
- [scene]="environmentInfo.scene"
341
- [extensions]="environmentInfo.extensions"
342
- [ground]="environmentInfo.ground"
343
- [encoding]="environmentInfo.encoding"
344
- />
345
- `,
265
+ <ngts-bounds
266
+ [fit]="!!adjustCamera()"
267
+ [clip]="!!adjustCamera()"
268
+ [margin]="Number(adjustCamera())"
269
+ [observe]="true"
270
+ >
271
+ <ngts-stage-refit [radius]="boundingState.get('radius')" [adjustCamera]="adjustCamera()" />
272
+ <ngts-center
273
+ [position]="[0, shadowsState().shadowOffset / 2, 0]"
274
+ [top]="!!center()?.top"
275
+ [right]="!!center()?.right"
276
+ [bottom]="!!center()?.bottom"
277
+ [left]="!!center()?.left"
278
+ [front]="!!center()?.front"
279
+ [back]="!!center()?.back"
280
+ [disableX]="!!center()?.disableX"
281
+ [disableY]="!!center()?.disableY"
282
+ [disableZ]="!!center()?.disableZ"
283
+ [precise]="!!center()?.precise"
284
+ (centered)="onCentered($event)"
285
+ >
286
+ <ng-content />
287
+ </ngts-center>
288
+ </ngts-bounds>
289
+
290
+ <ngt-group [position]="[0, -boundingState.get('height') / 2 - shadowsState().shadowOffset / 2, 0]">
291
+ <ngts-contact-shadows
292
+ *ngIf="shadowsState().contactShadow"
293
+ [scale]="boundingState.get('radius') * 4"
294
+ [far]="boundingState.get('radius')"
295
+ [blur]="2"
296
+ [opacity]="shadowsState().opacity!"
297
+ [width]="shadowsState().width!"
298
+ [height]="shadowsState().height!"
299
+ [smooth]="shadowsState().smooth!"
300
+ [resolution]="shadowsState().resolution!"
301
+ [frames]="shadowsState().frames!"
302
+ [scale]="shadowsState().scale!"
303
+ [color]="shadowsState().color!"
304
+ [depthWrite]="shadowsState().depthWrite!"
305
+ [renderOrder]="shadowsState().renderOrder!"
306
+ />
307
+ <ngts-accumulative-shadows
308
+ *ngIf="shadowsState().accumulativeShadow"
309
+ [temporal]="true"
310
+ [frames]="100"
311
+ [alphaTest]="0.9"
312
+ [toneMapped]="true"
313
+ [scale]="boundingState.get('radius') * 4"
314
+ [opacity]="shadowsState().opacity!"
315
+ [alphaTest]="shadowsState().alphaTest!"
316
+ [color]="shadowsState().color!"
317
+ [colorBlend]="shadowsState().colorBlend!"
318
+ [resolution]="shadowsState().resolution!"
319
+ >
320
+ <ngts-randomized-lights
321
+ [amount]="shadowsState().amount ?? 8"
322
+ [radius]="shadowsState().radius ?? boundingState.get('radius')"
323
+ [ambient]="shadowsState().ambient ?? 0.5"
324
+ [intensity]="shadowsState().intensity ?? 1"
325
+ [position]="[
326
+ config().main[0] * boundingState.get('radius'),
327
+ config().main[1] * boundingState.get('radius'),
328
+ config().main[2] * boundingState.get('radius')
329
+ ]"
330
+ [size]="boundingState.get('radius') * 4"
331
+ [bias]="-shadowsState().shadowBias"
332
+ [mapSize]="shadowsState().shadowSize"
333
+ />
334
+ </ngts-accumulative-shadows>
335
+ </ngt-group>
336
+
337
+ <ngts-environment
338
+ *ngIf="environmentState() as environment"
339
+ [frames]="environment.frames"
340
+ [near]="environment.near"
341
+ [far]="environment.far"
342
+ [resolution]="environment.resolution"
343
+ [background]="environment.background"
344
+ [blur]="environment.blur"
345
+ [map]="environment.map"
346
+ [files]="environment.files"
347
+ [path]="environment.path"
348
+ [preset]="environment.preset"
349
+ [scene]="environment.scene"
350
+ [extensions]="environment.extensions"
351
+ [ground]="environment.ground"
352
+ [encoding]="environment.encoding"
353
+ />
354
+ `,
346
355
  imports: [
347
356
  NgtArgs,
357
+ NgIf,
348
358
  NgtsBounds,
349
359
  NgtsStageRefit,
350
360
  NgtsCenter,
351
- NgIf,
352
361
  NgtsContactShadows,
353
362
  NgtsAccumulativeShadows,
354
363
  NgtsRandomizedLights,
@@ -356,19 +365,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
356
365
  ],
357
366
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
358
367
  }]
359
- }], ctorParameters: function () { return []; }, propDecorators: { preset: [{
360
- type: Input
361
- }], shadows: [{
362
- type: Input
363
- }], adjustCamera: [{
364
- type: Input
365
- }], environment: [{
366
- type: Input
367
- }], intensity: [{
368
- type: Input
369
- }], center: [{
370
- type: Input
368
+ }], propDecorators: { _preset: [{
369
+ type: Input,
370
+ args: [{ alias: 'preset' }]
371
+ }], _shadows: [{
372
+ type: Input,
373
+ args: [{ alias: 'shadows' }]
374
+ }], _adjustCamera: [{
375
+ type: Input,
376
+ args: [{ alias: 'adjustCamera' }]
377
+ }], _environment: [{
378
+ type: Input,
379
+ args: [{ alias: 'environment' }]
380
+ }], _intensity: [{
381
+ type: Input,
382
+ args: [{ alias: 'intensity' }]
383
+ }], _center: [{
384
+ type: Input,
385
+ args: [{ alias: 'center' }]
371
386
  }], centered: [{
372
387
  type: Output
373
388
  }] } });
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3RhZ2Uvc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHN0QsTUFBTSxPQUFPLEdBQUc7SUFDWixTQUFTLEVBQUU7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tB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QUksNkZBQ0osa0JBQWtCLDhOQUNsQix1QkFBdUIsNE1BQ3ZCLG9CQUFvQixvTkFDcEIsZUFBZTs7U0FJVixTQUFTOzJGQUFULFNBQVM7a0JBbEhyQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUdUO29CQUNELE9BQU8sRUFBRTt3QkFDTCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLElBQUk7d0JBQ0osa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsZUFBZTtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUtnQixNQUFNO3NCQUFsQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBleHRlbmQsIE5ndEFyZ3MsIE5ndFNpZ25hbFN0b3JlLCBzYWZlRGV0ZWN0Q2hhbmdlcyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQW1iaWVudExpZ2h0LCBHcm91cCwgUG9pbnRMaWdodCwgU3BvdExpZ2h0LCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgfSBmcm9tICcuLi9hY2N1bXVsYXRpdmUtc2hhZG93cy9hY2N1bXVsYXRpdmUtc2hhZG93cyc7XG5pbXBvcnQgeyBOZ3RzUmFuZG9taXplZExpZ2h0cyB9IGZyb20gJy4uL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3JhbmRvbWl6ZWQtbGlnaHRzJztcbmltcG9ydCB7IE5HVFNfQk9VTkRTX0FQSSwgTmd0c0JvdW5kcyB9IGZyb20gJy4uL2JvdW5kcy9ib3VuZHMnO1xuaW1wb3J0IHsgTmd0c0NlbnRlciB9IGZyb20gJy4uL2NlbnRlci9jZW50ZXInO1xuaW1wb3J0IHsgTmd0c0NvbnRhY3RTaGFkb3dzIH0gZnJvbSAnLi4vY29udGFjdC1zaGFkb3dzL2NvbnRhY3Qtc2hhZG93cyc7XG5pbXBvcnQgeyBOZ3RzRW52aXJvbm1lbnRQcmVzZXRzVHlwZSB9IGZyb20gJy4uL2Vudmlyb25tZW50L2Fzc2V0cyc7XG5pbXBvcnQgeyBOZ3RzRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudC9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBOZ3RzRW52aXJvbm1lbnRJbnB1dCB9IGZyb20gJy4uL2Vudmlyb25tZW50L2Vudmlyb25tZW50LWlucHV0JztcblxuY29uc3QgcHJlc2V0cyA9IHtcbiAgICByZW1icmFuZHQ6IHtcbiAgICAgICAgbWFpbjogWzEsIDIsIDFdLFxuICAgICAgICBmaWxsOiBbLTIsIC0wLjUsIC0yXSxcbiAgICB9LFxuICAgIHBvcnRyYWl0OiB7XG4gICAgICAgIG1haW46IFstMSwgMiwgMC41XSxcbiAgICAgICAgZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuICAgIH0sXG4gICAgdXBmcm9udDoge1xuICAgICAgICBtYWluOiBbMCwgMiwgMV0sXG4gICAgICAgIGZpbGw6IFstMSwgMC41LCAtMS41XSxcbiAgICB9LFxuICAgIHNvZnQ6IHtcbiAgICAgICAgbWFpbjogWy0yLCA0LCA0XSxcbiAgICAgICAgZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuICAgIH0sXG59O1xuXG50eXBlIE5ndHNTdGFnZVNoYWRvd3MgPSBQYXJ0aWFsPE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzPiAmXG4gICAgUGFydGlhbDxOZ3RzUmFuZG9taXplZExpZ2h0cz4gJlxuICAgIFBhcnRpYWw8Tmd0c0NvbnRhY3RTaGFkb3dzPiAmIHtcbiAgICAgICAgdHlwZTogJ2NvbnRhY3QnIHwgJ2FjY3VtdWxhdGl2ZSc7XG4gICAgICAgIC8qKiBTaGFkb3cgcGxhbmUgb2Zmc2V0LCBkZWZhdWx0OiAwICovXG4gICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgLyoqIFNoYWRvdyBiaWFzLCBkZWZhdWx0OiAtMC4wMDAxICovXG4gICAgICAgIGJpYXM/OiBudW1iZXI7XG4gICAgICAgIC8qKiBTaGFkb3cgbm9ybWFsIGJpYXMsIGRlZmF1bHQ6IDAgKi9cbiAgICAgICAgbm9ybWFsQmlhcz86IG51bWJlcjtcbiAgICAgICAgLyoqIFNoYWRvdyBtYXAgc2l6ZSwgZGVmYXVsdDogMTAyNCAqL1xuICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG5cbmludGVyZmFjZSBOZ3RzU3RhZ2VQcm9wcyB7XG4gICAgLyoqIExpZ2h0aW5nIHNldHVwLCBkZWZhdWx0OiBcInJlbWJyYW5kdFwiICovXG4gICAgcHJlc2V0OlxuICAgICAgICB8ICdyZW1icmFuZHQnXG4gICAgICAgIHwgJ3BvcnRyYWl0J1xuICAgICAgICB8ICd1cGZyb250J1xuICAgICAgICB8ICdzb2Z0J1xuICAgICAgICB8IHsgbWFpbjogW3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJdOyBmaWxsOiBbeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcl0gfTtcbiAgICAvKiogQ29udHJvbHMgdGhlIGdyb3VuZCBzaGFkb3dzLCBkZWZhdWx0OiBcImNvbnRhY3RcIiAqL1xuICAgIHNoYWRvd3M6IGJvb2xlYW4gfCAnY29udGFjdCcgfCAnYWNjdW11bGF0aXZlJyB8IE5ndHNTdGFnZVNoYWRvd3M7XG4gICAgLyoqIE9wdGlvbmFsbHkgd3JhcHMgYW5kIHRoZXJlYnkgY2VudGVycyB0aGUgbW9kZWxzIHVzaW5nIDxCb3VuZHM+LCBjYW4gYWxzbyBiZSBhIG1hcmdpbiwgZGVmYXVsdDogdHJ1ZSAqL1xuICAgIGFkanVzdENhbWVyYTogYm9vbGVhbiB8IG51bWJlcjtcbiAgICAvKiogVGhlIGRlZmF1bHQgZW52aXJvbm1lbnQsIGRlZmF1bHQ6IFwiY2l0eVwiICovXG4gICAgZW52aXJvbm1lbnQ6IE5ndHNFbnZpcm9ubWVudFByZXNldHNUeXBlIHwgUGFydGlhbDxOZ3RzRW52aXJvbm1lbnRJbnB1dD47XG4gICAgLyoqIFRoZSBsaWdodGluZyBpbnRlbnNpdHksIGRlZmF1bHQ6IDAuNSAqL1xuICAgIGludGVuc2l0eTogbnVtYmVyO1xuICAgIC8qKiBUbyBhZGp1c3QgY2VudGVyaW5nLCBkZWZhdWx0OiB1bmRlZmluZWQgKi9cbiAgICBjZW50ZXI/OiBQYXJ0aWFsPE5ndHNDZW50ZXI+O1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RzLXN0YWdlLXJlZml0Jywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNTdGFnZVJlZml0IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICByZWFkb25seSAjYm91bmRzQXBpID0gaW5qZWN0KE5HVFNfQk9VTkRTX0FQSSk7XG5cbiAgICBASW5wdXQoKSByYWRpdXMgPSAwO1xuICAgIEBJbnB1dCgpIGFkanVzdENhbWVyYSA9IHRydWU7XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRqdXN0Q2FtZXJhKSB7XG4gICAgICAgICAgICB0aGlzLiNib3VuZHNBcGkoKS5yZWZyZXNoKCkuY2xpcCgpLmZpdCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHRlbmQoeyBBbWJpZW50TGlnaHQsIFNwb3RMaWdodCwgVmVjdG9yMiwgUG9pbnRMaWdodCwgR3JvdXAgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zdGFnZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWFtYmllbnQtbGlnaHQgW2ludGVuc2l0eV09XCJzdGFnZUludGVuc2l0eSgpIC8gM1wiIC8+XG4gICAgICAgIDxuZ3Qtc3BvdC1saWdodFxuICAgICAgICAgICAgW3BlbnVtYnJhXT1cIjFcIlxuICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInNwb3RMaWdodFBvc2l0aW9uKClcIlxuICAgICAgICAgICAgW2ludGVuc2l0eV09XCJzdGFnZUludGVuc2l0eSgpICogMlwiXG4gICAgICAgICAgICBbY2FzdFNoYWRvd109XCIhIXN0YWdlU2hhZG93cygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwic2hhZG93c0luZm8oKS5zaGFkb3dCaWFzXCIgYXR0YWNoPVwic2hhZG93LmJpYXNcIiAvPlxuICAgICAgICAgICAgPG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwic2hhZG93c0luZm8oKS5ub3JtYWxCaWFzXCIgYXR0YWNoPVwic2hhZG93Lm5vcm1hbEJpYXNcIiAvPlxuICAgICAgICAgICAgPG5ndC12ZWN0b3IyICphcmdzPVwiW3NoYWRvd3NJbmZvKCkuc2hhZG93U2l6ZSwgc2hhZG93c0luZm8oKS5zaGFkb3dTaXplXVwiIGF0dGFjaD1cInNoYWRvdy5tYXBTaXplXCIgLz5cbiAgICAgICAgPC9uZ3Qtc3BvdC1saWdodD5cbiAgICAgICAgPG5ndC1wb2ludC1saWdodCBbcG9zaXRpb25dPVwicG9pbnRMaWdodFBvc2l0aW9uKClcIiBbaW50ZW5zaXR5XT1cInN0YWdlSW50ZW5zaXR5KClcIiAvPlxuXG4gICAgICAgIDxuZ3RzLWJvdW5kc1xuICAgICAgICAgICAgW2ZpdF09XCIhIXN0YWdlQWRqdXN0Q2FtZXJhKClcIlxuICAgICAgICAgICAgW2NsaXBdPVwiISFzdGFnZUFkanVzdENhbWVyYSgpXCJcbiAgICAgICAgICAgIFttYXJnaW5dPVwiTnVtYmVyKHN0YWdlQWRqdXN0Q2FtZXJhKCkpXCJcbiAgICAgICAgICAgIFtvYnNlcnZlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmd0cy1zdGFnZS1yZWZpdCBbcmFkaXVzXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXNcIiBbYWRqdXN0Q2FtZXJhXT1cIiEhc3RhZ2VBZGp1c3RDYW1lcmEoKVwiIC8+XG4gICAgICAgICAgICA8bmd0cy1jZW50ZXJcbiAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWzAsIHNoYWRvd3NJbmZvKCkuc2hhZG93T2Zmc2V0IC8gMiwgMF1cIlxuICAgICAgICAgICAgICAgIFt0b3BdPVwiISFzdGFnZUNlbnRlcigpPy50b3BcIlxuICAgICAgICAgICAgICAgIFtyaWdodF09XCIhIXN0YWdlQ2VudGVyKCk/LnJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbYm90dG9tXT1cIiEhc3RhZ2VDZW50ZXIoKT8uYm90dG9tXCJcbiAgICAgICAgICAgICAgICBbbGVmdF09XCIhIXN0YWdlQ2VudGVyKCk/LmxlZnRcIlxuICAgICAgICAgICAgICAgIFtmcm9udF09XCIhIXN0YWdlQ2VudGVyKCk/LmZyb250XCJcbiAgICAgICAgICAgICAgICBbYmFja109XCIhIXN0YWdlQ2VudGVyKCk/LmJhY2tcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlWF09XCIhIXN0YWdlQ2VudGVyKCk/LmRpc2FibGVYXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVldPVwiISFzdGFnZUNlbnRlcigpPy5kaXNhYmxlWVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVaXT1cIiEhc3RhZ2VDZW50ZXIoKT8uZGlzYWJsZVpcIlxuICAgICAgICAgICAgICAgIFtwcmVjaXNlXT1cIiEhc3RhZ2VDZW50ZXIoKT8ucHJlY2lzZVwiXG4gICAgICAgICAgICAgICAgKGNlbnRlcmVkKT1cIm9uQ2VudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgIDwvbmd0cy1jZW50ZXI+XG4gICAgICAgIDwvbmd0cy1ib3VuZHM+XG4gICAgICAgIDxuZ3QtZ3JvdXAgW3Bvc2l0aW9uXT1cIlswLCAtYm91bmRpbmdTdGF0ZSgpLmhlaWdodCAvIDIgLSBzaGFkb3dzSW5mbygpLnNoYWRvd09mZnNldCAvIDIsIDBdXCI+XG4gICAgICAgICAgICA8bmd0cy1jb250YWN0LXNoYWRvd3NcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNoYWRvd3NJbmZvKCkuY29udGFjdFNoYWRvd1wiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXMgKiA0XCJcbiAgICAgICAgICAgICAgICBbZmFyXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXNcIlxuICAgICAgICAgICAgICAgIFtibHVyXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtvcGFjaXR5XT1cInNoYWRvd3NJbmZvKCkub3BhY2l0eVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cInNoYWRvd3NJbmZvKCkud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwic2hhZG93c0luZm8oKS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzbW9vdGhdPVwic2hhZG93c0luZm8oKS5zbW9vdGhcIlxuICAgICAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cInNoYWRvd3NJbmZvKCkucmVzb2x1dGlvblwiXG4gICAgICAgICAgICAgICAgW2ZyYW1lc109XCJzaGFkb3dzSW5mbygpLmZyYW1lc1wiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cInNoYWRvd3NJbmZvKCkuc2NhbGVcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJzaGFkb3dzSW5mbygpLmNvbG9yXCJcbiAgICAgICAgICAgICAgICBbZGVwdGhXcml0ZV09XCJzaGFkb3dzSW5mbygpLmRlcHRoV3JpdGVcIlxuICAgICAgICAgICAgICAgIFtyZW5kZXJPcmRlcl09XCJzaGFkb3dzSW5mbygpLnJlbmRlck9yZGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93c1xuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hhZG93c0luZm8oKS5hY2N1bXVsYXRpdmVTaGFkb3dcIlxuICAgICAgICAgICAgICAgIFt0ZW1wb3JhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZnJhbWVzXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgW2FscGhhVGVzdF09XCIwLjlcIlxuICAgICAgICAgICAgICAgIFt0b25lTWFwcGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzY2FsZV09XCJib3VuZGluZ1N0YXRlKCkucmFkaXVzICogNFwiXG4gICAgICAgICAgICAgICAgW29wYWNpdHldPVwic2hhZG93c0luZm8oKS5vcGFjaXR5XCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUZXN0XT1cInNoYWRvd3NJbmZvKCkuYWxwaGFUZXN0XCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwic2hhZG93c0luZm8oKS5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2NvbG9yQmxlbmRdPVwic2hhZG93c0luZm8oKS5jb2xvckJsZW5kXCJcbiAgICAgICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJzaGFkb3dzSW5mbygpLnJlc29sdXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzXG4gICAgICAgICAgICAgICAgICAgIFthbW91bnRdPVwic2hhZG93c0luZm8oKS5hbW91bnQgPz8gOFwiXG4gICAgICAgICAgICAgICAgICAgIFtyYWRpdXNdPVwic2hhZG93c0luZm8oKS5yYWRpdXMgPz8gYm91bmRpbmdTdGF0ZSgpLnJhZGl1c1wiXG4gICAgICAgICAgICAgICAgICAgIFthbWJpZW50XT1cInNoYWRvd3NJbmZvKCkuYW1iaWVudCA/PyAwLjVcIlxuICAgICAgICAgICAgICAgICAgICBbaW50ZW5zaXR5XT1cInNoYWRvd3NJbmZvKCkuaW50ZW5zaXR5ID8/IDFcIlxuICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwic3BvdExpZ2h0UG9zaXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXMgKiA0XCJcbiAgICAgICAgICAgICAgICAgICAgW2JpYXNdPVwiLXNoYWRvd3NJbmZvKCkuc2hhZG93Qmlhc1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXBTaXplXT1cInNoYWRvd3NJbmZvKCkuc2hhZG93U2l6ZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cz5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgICAgIDxuZ3RzLWVudmlyb25tZW50XG4gICAgICAgICAgICAqbmdJZj1cImVudmlyb25tZW50SW5mbygpIGFzIGVudmlyb25tZW50SW5mb1wiXG4gICAgICAgICAgICBbZnJhbWVzXT1cImVudmlyb25tZW50SW5mby5mcmFtZXNcIlxuICAgICAgICAgICAgW25lYXJdPVwiZW52aXJvbm1lbnRJbmZvLm5lYXJcIlxuICAgICAgICAgICAgW2Zhcl09XCJlbnZpcm9ubWVudEluZm8uZmFyXCJcbiAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cImVudmlyb25tZW50SW5mby5yZXNvbHV0aW9uXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kXT1cImVudmlyb25tZW50SW5mby5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgIFtibHVyXT1cImVudmlyb25tZW50SW5mby5ibHVyXCJcbiAgICAgICAgICAgIFttYXBdPVwiZW52aXJvbm1lbnRJbmZvLm1hcFwiXG4gICAgICAgICAgICBbZmlsZXNdPVwiZW52aXJvbm1lbnRJbmZvLmZpbGVzXCJcbiAgICAgICAgICAgIFtwYXRoXT1cImVudmlyb25tZW50SW5mby5wYXRoXCJcbiAgICAgICAgICAgIFtwcmVzZXRdPVwiZW52aXJvbm1lbnRJbmZvLnByZXNldFwiXG4gICAgICAgICAgICBbc2NlbmVdPVwiZW52aXJvbm1lbnRJbmZvLnNjZW5lXCJcbiAgICAgICAgICAgIFtleHRlbnNpb25zXT1cImVudmlyb25tZW50SW5mby5leHRlbnNpb25zXCJcbiAgICAgICAgICAgIFtncm91bmRdPVwiZW52aXJvbm1lbnRJbmZvLmdyb3VuZFwiXG4gICAgICAgICAgICBbZW5jb2RpbmddPVwiZW52aXJvbm1lbnRJbmZvLmVuY29kaW5nXCJcbiAgICAgICAgLz5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmd0QXJncyxcbiAgICAgICAgTmd0c0JvdW5kcyxcbiAgICAgICAgTmd0c1N0YWdlUmVmaXQsXG4gICAgICAgIE5ndHNDZW50ZXIsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5ndHNDb250YWN0U2hhZG93cyxcbiAgICAgICAgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MsXG4gICAgICAgIE5ndHNSYW5kb21pemVkTGlnaHRzLFxuICAgICAgICBOZ3RzRW52aXJvbm1lbnQsXG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTdGFnZSBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndHNTdGFnZVByb3BzPiB7XG4gICAgcmVhZG9ubHkgI2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcmVhZG9ubHkgTnVtYmVyID0gTnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2V0IHByZXNldChwcmVzZXQ6IE5ndHNTdGFnZVByb3BzWydwcmVzZXQnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHByZXNldCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBOZ3RzU3RhZ2VQcm9wc1snc2hhZG93cyddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2hhZG93cyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYWRqdXN0Q2FtZXJhKGFkanVzdENhbWVyYTogTmd0c1N0YWdlUHJvcHNbJ2FkanVzdENhbWVyYSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWRqdXN0Q2FtZXJhIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogTmd0c1N0YWdlUHJvcHNbJ2Vudmlyb25tZW50J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZpcm9ubWVudCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaW50ZW5zaXR5KGludGVuc2l0eTogTmd0c1N0YWdlUHJvcHNbJ2ludGVuc2l0eSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaW50ZW5zaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjZW50ZXIoY2VudGVyOiBOZ3RzU3RhZ2VQcm9wc1snY2VudGVyJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjZW50ZXIgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGNlbnRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcigpIGFzIE5ndHNDZW50ZXJbJ2NlbnRlcmVkJ107XG5cbiAgICByZWFkb25seSBib3VuZGluZ1N0YXRlID0gY3JlYXRlU2lnbmFsKHsgcmFkaXVzOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwLCBkZXB0aDogMCB9KTtcblxuICAgIHJlYWRvbmx5ICNwcmVzZXQgPSB0aGlzLnNlbGVjdCgncHJlc2V0Jyk7XG4gICAgcmVhZG9ubHkgI2Vudmlyb25tZW50ID0gdGhpcy5zZWxlY3QoJ2Vudmlyb25tZW50Jyk7XG5cbiAgICByZWFkb25seSBzdGFnZVNoYWRvd3MgPSB0aGlzLnNlbGVjdCgnc2hhZG93cycpO1xuICAgIHJlYWRvbmx5IHN0YWdlSW50ZW5zaXR5ID0gdGhpcy5zZWxlY3QoJ2ludGVuc2l0eScpO1xuICAgIHJlYWRvbmx5IHN0YWdlQWRqdXN0Q2FtZXJhID0gdGhpcy5zZWxlY3QoJ2FkanVzdENhbWVyYScpO1xuICAgIHJlYWRvbmx5IHN0YWdlQ2VudGVyID0gdGhpcy5zZWxlY3QoJ2NlbnRlcicpO1xuXG4gICAgcmVhZG9ubHkgY29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmVzZXQgPSB0aGlzLiNwcmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwcmVzZXQgPT09ICdzdHJpbmcnID8gcHJlc2V0c1twcmVzZXRdIDogcHJlc2V0O1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgc2hhZG93c0luZm8gPSBjb21wdXRlZDxhbnk+KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2hhZG93cyA9IHRoaXMuc3RhZ2VTaGFkb3dzKCk7XG4gICAgICAgIGNvbnN0IHJlc3RQcm9wcyA9IHR5cGVvZiBzaGFkb3dzID09PSAnc3RyaW5nJyA/IHt9IDogKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cykgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250YWN0U2hhZG93OiBzaGFkb3dzID09PSAnY29udGFjdCcgfHwgKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LnR5cGUgPT09ICdjb250YWN0JyxcbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvdzogc2hhZG93cyA9PT0gJ2FjY3VtdWxhdGl2ZScgfHwgKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LnR5cGUgPT09ICdhY2N1bXVsYXRpdmUnLFxuICAgICAgICAgICAgc2hhZG93QmlhczogKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LmJpYXMgPz8gLTAuMDAwMSxcbiAgICAgICAgICAgIG5vcm1hbEJpYXM6IChzaGFkb3dzIGFzIE5ndHNTdGFnZVNoYWRvd3MpPy5ub3JtYWxCaWFzID8/IDAsXG4gICAgICAgICAgICBzaGFkb3dTaXplOiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKT8uc2l6ZSA/PyAxMDI0LFxuICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKT8ub2Zmc2V0ID8/IDAsXG4gICAgICAgICAgICAuLi5yZXN0UHJvcHMsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZWFkb25seSBzcG90TGlnaHRQb3NpdGlvbiA9IGNvbXB1dGVkPFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFswLCAwLCAwXTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5ib3VuZGluZ1N0YXRlKCkucmFkaXVzO1xuICAgICAgICByZXR1cm4gW2NvbmZpZy5tYWluWzBdICogcmFkaXVzLCBjb25maWcubWFpblsxXSAqIHJhZGl1cywgY29uZmlnLm1haW5bMl0gKiByYWRpdXNdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgcG9pbnRMaWdodFBvc2l0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFswLCAwLCAwXTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5ib3VuZGluZ1N0YXRlKCkucmFkaXVzO1xuICAgICAgICByZXR1cm4gW2NvbmZpZy5maWxsWzBdICogcmFkaXVzLCBjb25maWcuZmlsbFsxXSAqIHJhZGl1cywgY29uZmlnLmZpbGxbMl0gKiByYWRpdXNdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmZvID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuI2Vudmlyb25tZW50KCk7XG4gICAgICAgIGlmICghZW52aXJvbm1lbnQpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIGVudmlyb25tZW50ID09PSAnc3RyaW5nJykgcmV0dXJuIHsgcHJlc2V0OiBlbnZpcm9ubWVudCB9O1xuICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgYWRqdXN0Q2FtZXJhOiB0cnVlLFxuICAgICAgICAgICAgaW50ZW5zaXR5OiAwLjUsXG4gICAgICAgICAgICBzaGFkb3dzOiAnY29udGFjdCcsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogJ2NpdHknLFxuICAgICAgICAgICAgcHJlc2V0OiAncmVtYnJhbmR0JyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DZW50ZXJlZChwcm9wczoge1xuICAgICAgICAvKiogVGhlIG5leHQgcGFyZW50IGFib3ZlIDxDZW50ZXI+ICovXG4gICAgICAgIHBhcmVudDogVEhSRUUuT2JqZWN0M0Q7XG4gICAgICAgIC8qKiBUaGUgb3V0bW9zdCBjb250YWluZXIgZ3JvdXAgb2YgdGhlIDxDZW50ZXI+IGNvbXBvbmVudCAqL1xuICAgICAgICBjb250YWluZXI6IFRIUkVFLk9iamVjdDNEO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgZGVwdGg6IG51bWJlcjtcbiAgICAgICAgYm91bmRpbmdCb3g6IFRIUkVFLkJveDM7XG4gICAgICAgIGJvdW5kaW5nU3BoZXJlOiBUSFJFRS5TcGhlcmU7XG4gICAgICAgIGNlbnRlcjogVEhSRUUuVmVjdG9yMztcbiAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IG51bWJlcjtcbiAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogbnVtYmVyO1xuICAgICAgICBkZXB0aEFsaWdubWVudDogbnVtYmVyO1xuICAgIH0pIHtcbiAgICAgICAgY29uc3QgeyBib3VuZGluZ1NwaGVyZSwgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHByb3BzO1xuICAgICAgICB0aGlzLmJvdW5kaW5nU3RhdGUuc2V0KHsgcmFkaXVzOiBib3VuZGluZ1NwaGVyZS5yYWRpdXMsIHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0pO1xuICAgICAgICBzYWZlRGV0ZWN0Q2hhbmdlcyh0aGlzLiNjZHIpO1xuICAgICAgICBpZiAodGhpcy5jZW50ZXJlZC5vYnNlcnZlZCkgdGhpcy5jZW50ZXJlZC5lbWl0KHByb3BzKTtcbiAgICB9XG59XG4iXX0=
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3RhZ2Uvc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEdBRVIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFDTix1QkFBdUIsR0FFdkIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQWtDLE1BQU0sMkNBQTJDLENBQUM7QUFDakgsT0FBTyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQWdELE1BQU0sa0JBQWtCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGtCQUFrQixFQUFnQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQWtDLE1BQU0sa0NBQWtDLENBQUM7O0FBRWxGLE1BQU0sT0FBTyxHQUFHO0lBQ2YsU0FBUyxFQUFFO1FBQ1YsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNwQjtJ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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEV2ZW50RW1pdHRlcixcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0Y29tcHV0ZWQsXG5cdHR5cGUgT25DaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIGV4dGVuZCwgc2lnbmFsU3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEFtYmllbnRMaWdodCwgR3JvdXAsIFBvaW50TGlnaHQsIFNwb3RMaWdodCwgVmVjdG9yMiB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7XG5cdE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzLFxuXHR0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzU3RhdGUsXG59IGZyb20gJy4uL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL2FjY3VtdWxhdGl2ZS1zaGFkb3dzJztcbmltcG9ydCB7IE5ndHNSYW5kb21pemVkTGlnaHRzLCB0eXBlIE5ndHNSYW5kb21pemVkTGlnaHRzU3RhdGUgfSBmcm9tICcuLi9hY2N1bXVsYXRpdmUtc2hhZG93cy9yYW5kb21pemVkLWxpZ2h0cyc7XG5pbXBvcnQgeyBOZ3RzQm91bmRzLCBpbmplY3ROZ3RzQm91bmRzQXBpIH0gZnJvbSAnLi4vYm91bmRzL2JvdW5kcyc7XG5pbXBvcnQgeyBOZ3RzQ2VudGVyLCB0eXBlIE5ndHNDZW50ZXJTdGF0ZSwgdHlwZSBOZ3RzQ2VudGVyZWRFdmVudCB9IGZyb20gJy4uL2NlbnRlci9jZW50ZXInO1xuaW1wb3J0IHsgTmd0c0NvbnRhY3RTaGFkb3dzLCB0eXBlIE5ndHNDb250YWN0U2hhZG93c1N0YXRlIH0gZnJvbSAnLi4vY29udGFjdC1zaGFkb3dzL2NvbnRhY3Qtc2hhZG93cyc7XG5pbXBvcnQgdHlwZSB7IE5ndHNFbnZpcm9ubWVudFByZXNldHNUeXBlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQvYXNzZXRzJztcbmltcG9ydCB7IE5ndHNFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50L2Vudmlyb25tZW50JztcbmltcG9ydCB7IHR5cGUgTmd0c0Vudmlyb25tZW50SW5wdXRTdGF0ZSB9IGZyb20gJy4uL2Vudmlyb25tZW50L2Vudmlyb25tZW50LWlucHV0JztcblxuY29uc3QgcHJlc2V0cyA9IHtcblx0cmVtYnJhbmR0OiB7XG5cdFx0bWFpbjogWzEsIDIsIDFdLFxuXHRcdGZpbGw6IFstMiwgLTAuNSwgLTJdLFxuXHR9LFxuXHRwb3J0cmFpdDoge1xuXHRcdG1haW46IFstMSwgMiwgMC41XSxcblx0XHRmaWxsOiBbLTEsIDAuNSwgLTEuNV0sXG5cdH0sXG5cdHVwZnJvbnQ6IHtcblx0XHRtYWluOiBbMCwgMiwgMV0sXG5cdFx0ZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuXHR9LFxuXHRzb2Z0OiB7XG5cdFx0bWFpbjogWy0yLCA0LCA0XSxcblx0XHRmaWxsOiBbLTEsIDAuNSwgLTEuNV0sXG5cdH0sXG59O1xuXG50eXBlIE5ndHNTdGFnZVNoYWRvd3NTdGF0ZSA9IFBhcnRpYWw8Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZT4gJlxuXHRQYXJ0aWFsPE5ndHNSYW5kb21pemVkTGlnaHRzU3RhdGU+ICZcblx0UGFydGlhbDxOZ3RzQ29udGFjdFNoYWRvd3NTdGF0ZT4gJiB7XG5cdFx0dHlwZTogJ2NvbnRhY3QnIHwgJ2FjY3VtdWxhdGl2ZSc7XG5cdFx0LyoqIFNoYWRvdyBwbGFuZSBvZmZzZXQsIGRlZmF1bHQ6IDAgKi9cblx0XHRvZmZzZXQ/OiBudW1iZXI7XG5cdFx0LyoqIFNoYWRvdyBiaWFzLCBkZWZhdWx0OiAtMC4wMDAxICovXG5cdFx0Ymlhcz86IG51bWJlcjtcblx0XHQvKiogU2hhZG93IG5vcm1hbCBiaWFzLCBkZWZhdWx0OiAwICovXG5cdFx0bm9ybWFsQmlhcz86IG51bWJlcjtcblx0XHQvKiogU2hhZG93IG1hcCBzaXplLCBkZWZhdWx0OiAxMDI0ICovXG5cdFx0c2l6ZT86IG51bWJlcjtcblx0fTtcblxuZXhwb3J0IHR5cGUgTmd0c1N0YWdlU3RhdGUgPSB7XG5cdC8qKiBMaWdodGluZyBzZXR1cCwgZGVmYXVsdDogXCJyZW1icmFuZHRcIiAqL1xuXHRwcmVzZXQ6XG5cdFx0fCAncmVtYnJhbmR0J1xuXHRcdHwgJ3BvcnRyYWl0J1xuXHRcdHwgJ3VwZnJvbnQnXG5cdFx0fCAnc29mdCdcblx0XHR8IHsgbWFpbjogW3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJdOyBmaWxsOiBbeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcl0gfTtcblx0LyoqIENvbnRyb2xzIHRoZSBncm91bmQgc2hhZG93cywgZGVmYXVsdDogXCJjb250YWN0XCIgKi9cblx0c2hhZG93czogYm9vbGVhbiB8ICdjb250YWN0JyB8ICdhY2N1bXVsYXRpdmUnIHwgTmd0c1N0YWdlU2hhZG93c1N0YXRlO1xuXHQvKiogT3B0aW9uYWxseSB3cmFwcyBhbmQgdGhlcmVieSBjZW50ZXJzIHRoZSBtb2RlbHMgdXNpbmcgPEJvdW5kcz4sIGNhbiBhbHNvIGJlIGEgbWFyZ2luLCBkZWZhdWx0OiB0cnVlICovXG5cdGFkanVzdENhbWVyYTogYm9vbGVhbiB8IG51bWJlcjtcblx0LyoqIFRoZSBkZWZhdWx0IGVudmlyb25tZW50LCBkZWZhdWx0OiBcImNpdHlcIiAqL1xuXHRlbnZpcm9ubWVudDogTmd0c0Vudmlyb25tZW50UHJlc2V0c1R5cGUgfCBQYXJ0aWFsPE5ndHNFbnZpcm9ubWVudElucHV0U3RhdGU+O1xuXHQvKiogVGhlIGxpZ2h0aW5nIGludGVuc2l0eSwgZGVmYXVsdDogMC41ICovXG5cdGludGVuc2l0eTogbnVtYmVyO1xuXHQvKiogVG8gYWRqdXN0IGNlbnRlcmluZywgZGVmYXVsdDogdW5kZWZpbmVkICovXG5cdGNlbnRlcj86IFBhcnRpYWw8Tmd0c0NlbnRlclN0YXRlPjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0J25ndHMtc3RhZ2UnOiBOZ3RzU3RhZ2VTdGF0ZTtcblx0fVxufVxuXG5leHRlbmQoeyBBbWJpZW50TGlnaHQsIFNwb3RMaWdodCwgVmVjdG9yMiwgUG9pbnRMaWdodCwgR3JvdXAgfSk7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndHMtc3RhZ2UtcmVmaXQnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c1N0YWdlUmVmaXQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXHRib3VuZHNBcGkgPSBpbmplY3ROZ3RzQm91bmRzQXBpKCk7XG5cblx0QElucHV0KCkgcmFkaXVzID0gMDtcblx0QElucHV0KCkgYWRqdXN0Q2FtZXJhOiBib29sZWFuIHwgbnVtYmVyID0gdHJ1ZTtcblxuXHRuZ09uQ2hhbmdlcygpIHtcblx0XHRpZiAodGhpcy5hZGp1c3RDYW1lcmEpIHtcblx0XHRcdHRoaXMuYm91bmRzQXBpKCkucmVmcmVzaCgpLmNsaXAoKS5maXQoKTtcblx0XHR9XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zdGFnZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1hbWJpZW50LWxpZ2h0IFtpbnRlbnNpdHldPVwiaW50ZW5zaXR5KCkgLyAzXCIgLz5cblx0XHQ8bmd0LXNwb3QtbGlnaHRcblx0XHRcdFtwZW51bWJyYV09XCIxXCJcblx0XHRcdFtwb3NpdGlvbl09XCJbXG5cdFx0XHRcdGNvbmZpZygpLm1haW5bMF0gKiBib3VuZGluZ1N0YXRlLmdldCgncmFkaXVzJyksXG5cdFx0XHRcdGNvbmZpZygpLm1haW5bMV0gKiBib3VuZGluZ1N0YXRlLmdldCgncmFkaXVzJyksXG5cdFx0XHRcdGNvbmZpZygpLm1haW5bMl0gKiBib3VuZGluZ1N0YXRlLmdldCgncmFkaXVzJylcblx0XHRcdF1cIlxuXHRcdFx0W2ludGVuc2l0eV09XCJpbnRlbnNpdHkoKSAqIDJcIlxuXHRcdFx0W2Nhc3RTaGFkb3ddPVwiISFzaGFkb3dzKClcIlxuXHRcdD5cblx0XHRcdDxuZ3QtdmFsdWUgW3Jhd1ZhbHVlXT1cInNoYWRvd3NTdGF0ZSgpLnNoYWRvd0JpYXNcIiBhdHRhY2g9XCJzaGFkb3cuYmlhc1wiIC8+XG5cdFx0XHQ8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJzaGFkb3dzU3RhdGUoKS5ub3JtYWxCaWFzXCIgYXR0YWNoPVwic2hhZG93Lm5vcm1hbEJpYXNcIiAvPlxuXHRcdFx0PG5ndC12ZWN0b3IyICphcmdzPVwiW3NoYWRvd3NTdGF0ZSgpLnNoYWRvd1NpemUsIHNoYWRvd3NTdGF0ZSgpLnNoYWRvd1NpemVdXCIgYXR0YWNoPVwic2hhZG93Lm1hcFNpemVcIiAvPlxuXHRcdDwvbmd0LXNwb3QtbGlnaHQ+XG5cdFx0PG5ndC1wb2ludC1saWdodFxuXHRcdFx0W3Bvc2l0aW9uXT1cIltcblx0XHRcdFx0Y29uZmlnKCkuZmlsbFswXSAqIGJvdW5kaW5nU3RhdGUuZ2V0KCdyYWRpdXMnKSxcblx0XHRcdFx0Y29uZmlnKCkuZmlsbFsxXSAqIGJvdW5kaW5nU3RhdGUuZ2V0KCdyYWRpdXMnKSxcblx0XHRcdFx0Y29uZmlnKCkuZmlsbFsyXSAqIGJvdW5kaW5nU3RhdGUuZ2V0KCdyYWRpdXMnKVxuXHRcdFx0XVwiXG5cdFx0XHRbaW50ZW5zaXR5XT1cImludGVuc2l0eSgpXCJcblx0XHQvPlxuXG5cdFx0PG5ndHMtYm91bmRzXG5cdFx0XHRbZml0XT1cIiEhYWRqdXN0Q2FtZXJhKClcIlxuXHRcdFx0W2NsaXBdPVwiISFhZGp1c3RDYW1lcmEoKVwiXG5cdFx0XHRbbWFyZ2luXT1cIk51bWJlcihhZGp1c3RDYW1lcmEoKSlcIlxuXHRcdFx0W29ic2VydmVdPVwidHJ1ZVwiXG5cdFx0PlxuXHRcdFx0PG5ndHMtc3RhZ2UtcmVmaXQgW3JhZGl1c109XCJib3VuZGluZ1N0YXRlLmdldCgncmFkaXVzJylcIiBbYWRqdXN0Q2FtZXJhXT1cImFkanVzdENhbWVyYSgpXCIgLz5cblx0XHRcdDxuZ3RzLWNlbnRlclxuXHRcdFx0XHRbcG9zaXRpb25dPVwiWzAsIHNoYWRvd3NTdGF0ZSgpLnNoYWRvd09mZnNldCAvIDIsIDBdXCJcblx0XHRcdFx0W3RvcF09XCIhIWNlbnRlcigpPy50b3BcIlxuXHRcdFx0XHRbcmlnaHRdPVwiISFjZW50ZXIoKT8ucmlnaHRcIlxuXHRcdFx0XHRbYm90dG9tXT1cIiEhY2VudGVyKCk/LmJvdHRvbVwiXG5cdFx0XHRcdFtsZWZ0XT1cIiEhY2VudGVyKCk/LmxlZnRcIlxuXHRcdFx0XHRbZnJvbnRdPVwiISFjZW50ZXIoKT8uZnJvbnRcIlxuXHRcdFx0XHRbYmFja109XCIhIWNlbnRlcigpPy5iYWNrXCJcblx0XHRcdFx0W2Rpc2FibGVYXT1cIiEhY2VudGVyKCk/LmRpc2FibGVYXCJcblx0XHRcdFx0W2Rpc2FibGVZXT1cIiEhY2VudGVyKCk/LmRpc2FibGVZXCJcblx0XHRcdFx0W2Rpc2FibGVaXT1cIiEhY2VudGVyKCk/LmRpc2FibGVaXCJcblx0XHRcdFx0W3ByZWNpc2VdPVwiISFjZW50ZXIoKT8ucHJlY2lzZVwiXG5cdFx0XHRcdChjZW50ZXJlZCk9XCJvbkNlbnRlcmVkKCRldmVudClcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3RzLWNlbnRlcj5cblx0XHQ8L25ndHMtYm91bmRzPlxuXG5cdFx0PG5ndC1ncm91cCBbcG9zaXRpb25dPVwiWzAsIC1ib3VuZGluZ1N0YXRlLmdldCgnaGVpZ2h0JykgLyAyIC0gc2hhZG93c1N0YXRlKCkuc2hhZG93T2Zmc2V0IC8gMiwgMF1cIj5cblx0XHRcdDxuZ3RzLWNvbnRhY3Qtc2hhZG93c1xuXHRcdFx0XHQqbmdJZj1cInNoYWRvd3NTdGF0ZSgpLmNvbnRhY3RTaGFkb3dcIlxuXHRcdFx0XHRbc2NhbGVdPVwiYm91bmRpbmdTdGF0ZS5nZXQoJ3JhZGl1cycpICogNFwiXG5cdFx0XHRcdFtmYXJdPVwiYm91bmRpbmdTdGF0ZS5nZXQoJ3JhZGl1cycpXCJcblx0XHRcdFx0W2JsdXJdPVwiMlwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cInNoYWRvd3NTdGF0ZSgpLm9wYWNpdHkhXCJcblx0XHRcdFx0W3dpZHRoXT1cInNoYWRvd3NTdGF0ZSgpLndpZHRoIVwiXG5cdFx0XHRcdFtoZWlnaHRdPVwic2hhZG93c1N0YXRlKCkuaGVpZ2h0IVwiXG5cdFx0XHRcdFtzbW9vdGhdPVwic2hhZG93c1N0YXRlKCkuc21vb3RoIVwiXG5cdFx0XHRcdFtyZXNvbHV0aW9uXT1cInNoYWRvd3NTdGF0ZSgpLnJlc29sdXRpb24hXCJcblx0XHRcdFx0W2ZyYW1lc109XCJzaGFkb3dzU3RhdGUoKS5mcmFtZXMhXCJcblx0XHRcdFx0W3NjYWxlXT1cInNoYWRvd3NTdGF0ZSgpLnNjYWxlIVwiXG5cdFx0XHRcdFtjb2xvcl09XCJzaGFkb3dzU3RhdGUoKS5jb2xvciFcIlxuXHRcdFx0XHRbZGVwdGhXcml0ZV09XCJzaGFkb3dzU3RhdGUoKS5kZXB0aFdyaXRlIVwiXG5cdFx0XHRcdFtyZW5kZXJPcmRlcl09XCJzaGFkb3dzU3RhdGUoKS5yZW5kZXJPcmRlciFcIlxuXHRcdFx0Lz5cblx0XHRcdDxuZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzXG5cdFx0XHRcdCpuZ0lmPVwic2hhZG93c1N0YXRlKCkuYWNjdW11bGF0aXZlU2hhZG93XCJcblx0XHRcdFx0W3RlbXBvcmFsXT1cInRydWVcIlxuXHRcdFx0XHRbZnJhbWVzXT1cIjEwMFwiXG5cdFx0XHRcdFthbHBoYVRlc3RdPVwiMC45XCJcblx0XHRcdFx0W3RvbmVNYXBwZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzY2FsZV09XCJib3VuZGluZ1N0YXRlLmdldCgncmFkaXVzJykgKiA0XCJcblx0XHRcdFx0W29wYWNpdHldPVwic2hhZG93c1N0YXRlKCkub3BhY2l0eSFcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cInNoYWRvd3NTdGF0ZSgpLmFscGhhVGVzdCFcIlxuXHRcdFx0XHRbY29sb3JdPVwic2hhZG93c1N0YXRlKCkuY29sb3IhXCJcblx0XHRcdFx0W2NvbG9yQmxlbmRdPVwic2hhZG93c1N0YXRlKCkuY29sb3JCbGVuZCFcIlxuXHRcdFx0XHRbcmVzb2x1dGlvbl09XCJzaGFkb3dzU3RhdGUoKS5yZXNvbHV0aW9uIVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzXG5cdFx0XHRcdFx0W2Ftb3VudF09XCJzaGFkb3dzU3RhdGUoKS5hbW91bnQgPz8gOFwiXG5cdFx0XHRcdFx0W3JhZGl1c109XCJzaGFkb3dzU3RhdGUoKS5yYWRpdXMgPz8gYm91bmRpbmdTdGF0ZS5nZXQoJ3JhZGl1cycpXCJcblx0XHRcdFx0XHRbYW1iaWVudF09XCJzaGFkb3dzU3RhdGUoKS5hbWJpZW50ID8/IDAuNVwiXG5cdFx0XHRcdFx0W2ludGVuc2l0eV09XCJzaGFkb3dzU3RhdGUoKS5pbnRlbnNpdHkgPz8gMVwiXG5cdFx0XHRcdFx0W3Bvc2l0aW9uXT1cIltcblx0XHRcdFx0XHRcdGNvbmZpZygpLm1haW5bMF0gKiBib3VuZGluZ1N0YXRlLmdldCgncmFkaXVzJyksXG5cdFx0XHRcdFx0XHRjb25maWcoKS5tYWluWzFdICogYm91bmRpbmdTdGF0ZS5nZXQoJ3JhZGl1cycpLFxuXHRcdFx0XHRcdFx0Y29uZmlnKCkubWFpblsyXSAqIGJvdW5kaW5nU3RhdGUuZ2V0KCdyYWRpdXMnKVxuXHRcdFx0XHRcdF1cIlxuXHRcdFx0XHRcdFtzaXplXT1cImJvdW5kaW5nU3RhdGUuZ2V0KCdyYWRpdXMnKSAqIDRcIlxuXHRcdFx0XHRcdFtiaWFzXT1cIi1zaGFkb3dzU3RhdGUoKS5zaGFkb3dCaWFzXCJcblx0XHRcdFx0XHRbbWFwU2l6ZV09XCJzaGFkb3dzU3RhdGUoKS5zaGFkb3dTaXplXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cz5cblx0XHQ8L25ndC1ncm91cD5cblxuXHRcdDxuZ3RzLWVudmlyb25tZW50XG5cdFx0XHQqbmdJZj1cImVudmlyb25tZW50U3RhdGUoKSBhcyBlbnZpcm9ubWVudFwiXG5cdFx0XHRbZnJhbWVzXT1cImVudmlyb25tZW50LmZyYW1lc1wiXG5cdFx0XHRbbmVhcl09XCJlbnZpcm9ubWVudC5uZWFyXCJcblx0XHRcdFtmYXJdPVwiZW52aXJvbm1lbnQuZmFyXCJcblx0XHRcdFtyZXNvbHV0aW9uXT1cImVudmlyb25tZW50LnJlc29sdXRpb25cIlxuXHRcdFx0W2JhY2tncm91bmRdPVwiZW52aXJvbm1lbnQuYmFja2dyb3VuZFwiXG5cdFx0XHRbYmx1cl09XCJlbnZpcm9ubWVudC5ibHVyXCJcblx0XHRcdFttYXBdPVwiZW52aXJvbm1lbnQubWFwXCJcblx0XHRcdFtmaWxlc109XCJlbnZpcm9ubWVudC5maWxlc1wiXG5cdFx0XHRbcGF0aF09XCJlbnZpcm9ubWVudC5wYXRoXCJcblx0XHRcdFtwcmVzZXRdPVwiZW52aXJvbm1lbnQucHJlc2V0XCJcblx0XHRcdFtzY2VuZV09XCJlbnZpcm9ubWVudC5zY2VuZVwiXG5cdFx0XHRbZXh0ZW5zaW9uc109XCJlbnZpcm9ubWVudC5leHRlbnNpb25zXCJcblx0XHRcdFtncm91bmRdPVwiZW52aXJvbm1lbnQuZ3JvdW5kXCJcblx0XHRcdFtlbmNvZGluZ109XCJlbnZpcm9ubWVudC5lbmNvZGluZ1wiXG5cdFx0Lz5cblx0YCxcblx0aW1wb3J0czogW1xuXHRcdE5ndEFyZ3MsXG5cdFx0TmdJZixcblx0XHROZ3RzQm91bmRzLFxuXHRcdE5ndHNTdGFnZVJlZml0LFxuXHRcdE5ndHNDZW50ZXIsXG5cdFx0Tmd0c0NvbnRhY3RTaGFkb3dzLFxuXHRcdE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzLFxuXHRcdE5ndHNSYW5kb21pemVkTGlnaHRzLFxuXHRcdE5ndHNFbnZpcm9ubWVudCxcblx0XSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3RhZ2Uge1xuXHROdW1iZXIgPSBOdW1iZXI7XG5cblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzU3RhZ2VTdGF0ZT4oe1xuXHRcdGFkanVzdENhbWVyYTogdHJ1ZSxcblx0XHRpbnRlbnNpdHk6IDAuNSxcblx0XHRzaGFkb3dzOiAnY29udGFjdCcsXG5cdFx0ZW52aXJvbm1lbnQ6ICdjaXR5Jyxcblx0XHRwcmVzZXQ6ICdyZW1icmFuZHQnLFxuXHR9KTtcblxuXHRASW5wdXQoeyBhbGlhczogJ3ByZXNldCcgfSkgc2V0IF9wcmVzZXQocHJlc2V0OiBOZ3RzU3RhZ2VTdGF0ZVsncHJlc2V0J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBwcmVzZXQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3NoYWRvd3MnIH0pIHNldCBfc2hhZG93cyhzaGFkb3dzOiBOZ3RzU3RhZ2VTdGF0ZVsnc2hhZG93cyddKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc2hhZG93cyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYWRqdXN0Q2FtZXJhJyB9KSBzZXQgX2FkanVzdENhbWVyYShhZGp1c3RDYW1lcmE6IE5ndHNTdGFnZVN0YXRlWydhZGp1c3RDYW1lcmEnXSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFkanVzdENhbWVyYSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZW52aXJvbm1lbnQnIH0pIHNldCBfZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IE5ndHNTdGFnZVN0YXRlWydlbnZpcm9ubWVudCddKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZW52aXJvbm1lbnQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2ludGVuc2l0eScgfSkgc2V0IF9pbnRlbnNpdHkoaW50ZW5zaXR5OiBOZ3RzU3RhZ2VTdGF0ZVsnaW50ZW5zaXR5J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBpbnRlbnNpdHkgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2NlbnRlcicgfSkgc2V0IF9jZW50ZXIoY2VudGVyOiBOZ3RzU3RhZ2VTdGF0ZVsnY2VudGVyJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjZW50ZXIgfSk7XG5cdH1cblxuXHRAT3V0cHV0KCkgY2VudGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndHNDZW50ZXJlZEV2ZW50PigpO1xuXG5cdHByaXZhdGUgcHJlc2V0ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdwcmVzZXQnKTtcblx0cHJpdmF0ZSBlbnZpcm9ubWVudCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZW52aXJvbm1lbnQnKTtcblxuXHRib3VuZGluZ1N0YXRlID0gc2lnbmFsU3RvcmUoeyByYWRpdXM6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAsIGRlcHRoOiAwIH0pO1xuXHRjb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcHJlc2V0ID0gdGhpcy5wcmVzZXQoKTtcblx0XHRyZXR1cm4gdHlwZW9mIHByZXNldCA9PT0gJ3N0cmluZycgPyBwcmVzZXRzW3ByZXNldF0gOiBwcmVzZXQ7XG5cdH0pO1xuXHRzaGFkb3dzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdzaGFkb3dzJyk7XG5cdGludGVuc2l0eSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnaW50ZW5zaXR5Jyk7XG5cdGFkanVzdENhbWVyYSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYWRqdXN0Q2FtZXJhJyk7XG5cdGNlbnRlciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY2VudGVyJyk7XG5cblx0c2hhZG93c1N0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHNoYWRvd3MgPSB0aGlzLnNoYWRvd3MoKTtcblx0XHRjb25zdCB7XG5cdFx0XHRiaWFzOiBzaGFkb3dCaWFzID0gLTAuMDAwMSxcblx0XHRcdG5vcm1hbEJpYXMgPSAwLFxuXHRcdFx0c2l6ZTogc2hhZG93U2l6ZSA9IDEwMjQsXG5cdFx0XHRvZmZzZXQ6IHNoYWRvd09mZnNldCA9IDAsXG5cdFx0XHQuLi5yZXN0UHJvcHNcblx0XHR9ID0gKHR5cGVvZiBzaGFkb3dzID09PSAnc3RyaW5nJyA/IHt9IDogc2hhZG93cyB8fCB7fSkgYXMgTmd0c1N0YWdlU2hhZG93c1N0YXRlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb250YWN0U2hhZG93OiBzaGFkb3dzID09PSAnY29udGFjdCcgfHwgcmVzdFByb3BzLnR5cGUgPT09ICdjb250YWN0Jyxcblx0XHRcdGFjY3VtdWxhdGl2ZVNoYWRvdzogc2hhZG93cyA9PT0gJ2FjY3VtdWxhdGl2ZScgfHwgcmVzdFByb3BzLnR5cGUgPT09ICdhY2N1bXVsYXRpdmUnLFxuXHRcdFx0c2hhZG93Qmlhcyxcblx0XHRcdG5vcm1hbEJpYXMsXG5cdFx0XHRzaGFkb3dTaXplLFxuXHRcdFx0c2hhZG93T2Zmc2V0LFxuXHRcdFx0Li4ucmVzdFByb3BzLFxuXHRcdH07XG5cdH0pO1xuXHRlbnZpcm9ubWVudFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudCgpO1xuXHRcdHJldHVybiAhZW52aXJvbm1lbnQgPyBudWxsIDogdHlwZW9mIGVudmlyb25tZW50ID09PSAnc3RyaW5nJyA/IHsgcHJlc2V0OiBlbnZpcm9ubWVudCB9IDogZW52aXJvbm1lbnQ7XG5cdH0pO1xuXG5cdG9uQ2VudGVyZWQoJGV2ZW50OiBOZ3RzQ2VudGVyZWRFdmVudCkge1xuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvdW5kaW5nU3BoZXJlIH0gPSAkZXZlbnQ7XG5cdFx0dGhpcy5ib3VuZGluZ1N0YXRlLnNldCh7IHJhZGl1czogYm91bmRpbmdTcGhlcmUucmFkaXVzLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9KTtcblx0XHRpZiAodGhpcy5jZW50ZXJlZC5vYnNlcnZlZCkgdGhpcy5jZW50ZXJlZC5lbWl0KCRldmVudCk7XG5cdH1cbn1cbiJdfQ==