angular-three-soba 2.0.0-beta.26 → 2.0.0-beta.261

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 (397) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +278 -2
  3. package/abstractions/index.d.ts +11 -6
  4. package/abstractions/lib/catmull-rom-line.d.ts +648 -0
  5. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  6. package/abstractions/lib/edges.d.ts +850 -0
  7. package/abstractions/lib/gradient-texture.d.ts +24 -0
  8. package/abstractions/lib/grid.d.ts +339 -0
  9. package/abstractions/lib/helper.d.ts +25 -0
  10. package/abstractions/lib/line.d.ts +41 -0
  11. package/abstractions/lib/prism-geometry.d.ts +30 -0
  12. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  13. package/abstractions/lib/text-3d.d.ts +338 -0
  14. package/abstractions/lib/text.d.ts +55 -0
  15. package/cameras/README.md +91 -2
  16. package/cameras/index.d.ts +4 -4
  17. package/cameras/lib/camera-content.d.ts +10 -0
  18. package/cameras/lib/cube-camera.d.ts +38 -0
  19. package/cameras/lib/orthographic-camera.d.ts +40 -0
  20. package/cameras/lib/perspective-camera.d.ts +36 -0
  21. package/controls/README.md +95 -2
  22. package/controls/index.d.ts +2 -1
  23. package/controls/lib/camera-controls.d.ts +31 -0
  24. package/controls/lib/orbit-controls.d.ts +38 -0
  25. package/esm2022/abstractions/index.mjs +12 -7
  26. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  27. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  28. package/esm2022/abstractions/lib/edges.mjs +70 -0
  29. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  30. package/esm2022/abstractions/lib/grid.mjs +103 -0
  31. package/esm2022/abstractions/lib/helper.mjs +80 -0
  32. package/esm2022/abstractions/lib/line.mjs +123 -0
  33. package/esm2022/abstractions/lib/prism-geometry.mjs +55 -0
  34. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  35. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  36. package/esm2022/abstractions/lib/text.mjs +92 -0
  37. package/esm2022/cameras/index.mjs +5 -5
  38. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  39. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  40. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  41. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  42. package/esm2022/controls/index.mjs +3 -2
  43. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  44. package/esm2022/controls/lib/orbit-controls.mjs +126 -0
  45. package/esm2022/loaders/index.mjs +6 -5
  46. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  47. package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
  48. package/esm2022/loaders/lib/loader.mjs +109 -0
  49. package/esm2022/loaders/lib/progress.mjs +51 -0
  50. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  51. package/esm2022/materials/index.mjs +7 -7
  52. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  53. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  54. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  55. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  56. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  57. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  58. package/esm2022/misc/index.mjs +10 -14
  59. package/esm2022/misc/lib/animations.mjs +74 -0
  60. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  61. package/esm2022/misc/lib/computed-attribute.mjs +56 -0
  62. package/esm2022/misc/lib/constants.mjs +5 -0
  63. package/esm2022/misc/lib/decal.mjs +135 -0
  64. package/esm2022/misc/lib/deprecated.mjs +15 -0
  65. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  66. package/esm2022/misc/lib/fbo.mjs +89 -0
  67. package/esm2022/misc/lib/sampler.mjs +121 -0
  68. package/esm2022/shaders/index.mjs +3 -18
  69. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  70. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  71. package/esm2022/staging/index.mjs +19 -22
  72. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  73. package/esm2022/staging/lib/backdrop.mjs +73 -0
  74. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  75. package/esm2022/staging/lib/bounds.mjs +286 -0
  76. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  77. package/esm2022/staging/lib/caustics.mjs +188 -0
  78. package/esm2022/staging/lib/center.mjs +113 -0
  79. package/esm2022/staging/lib/contact-shadows.mjs +201 -0
  80. package/esm2022/staging/lib/environment.mjs +465 -0
  81. package/esm2022/staging/lib/float.mjs +60 -0
  82. package/esm2022/staging/lib/lightformer.mjs +107 -0
  83. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  84. package/esm2022/staging/lib/normal-texture.mjs +85 -0
  85. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  86. package/esm2022/staging/lib/render-texture.mjs +213 -0
  87. package/esm2022/staging/lib/sky.mjs +86 -0
  88. package/esm2022/staging/lib/spot-light.mjs +450 -0
  89. package/esm2022/staging/lib/stage.mjs +236 -0
  90. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  91. package/esm2022/vanilla-exports/index.mjs +3 -0
  92. package/fesm2022/angular-three-soba-abstractions.mjs +739 -718
  93. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  94. package/fesm2022/angular-three-soba-cameras.mjs +260 -307
  95. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  96. package/fesm2022/angular-three-soba-controls.mjs +174 -110
  97. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  98. package/fesm2022/angular-three-soba-loaders.mjs +151 -129
  99. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  100. package/fesm2022/angular-three-soba-materials.mjs +511 -764
  101. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  102. package/fesm2022/angular-three-soba-misc.mjs +405 -2149
  103. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  104. package/fesm2022/angular-three-soba-shaders.mjs +33 -1373
  105. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  106. package/fesm2022/angular-three-soba-staging.mjs +2329 -3538
  107. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  108. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  109. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  110. package/loaders/README.md +130 -2
  111. package/loaders/index.d.ts +5 -4
  112. package/loaders/lib/font-loader.d.ts +27 -0
  113. package/loaders/lib/gltf-loader.d.ts +21 -0
  114. package/loaders/lib/loader.d.ts +29 -0
  115. package/loaders/lib/progress.d.ts +9 -0
  116. package/loaders/lib/texture-loader.d.ts +13 -0
  117. package/materials/README.md +160 -2
  118. package/materials/index.d.ts +6 -6
  119. package/materials/lib/custom-shader-material.d.ts +19 -0
  120. package/materials/lib/mesh-distort-material.d.ts +18 -0
  121. package/materials/lib/mesh-reflector-material.d.ts +50 -0
  122. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  123. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  124. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  125. package/metadata.json +1 -1
  126. package/misc/README.md +217 -2
  127. package/misc/index.d.ts +9 -13
  128. package/misc/lib/animations.d.ts +14 -0
  129. package/misc/lib/computed-attribute.d.ts +69 -0
  130. package/misc/lib/constants.d.ts +1 -0
  131. package/misc/lib/decal.d.ts +27 -0
  132. package/misc/lib/deprecated.d.ts +14 -0
  133. package/misc/lib/depth-buffer.d.ts +8 -0
  134. package/misc/lib/fbo.d.ts +47 -0
  135. package/misc/lib/sampler.d.ts +73 -0
  136. package/package.json +60 -38
  137. package/shaders/index.d.ts +2 -17
  138. package/shaders/lib/grid-material.d.ts +69 -0
  139. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  140. package/staging/README.md +472 -2
  141. package/staging/index.d.ts +18 -21
  142. package/staging/lib/accumulative-shadows.d.ts +75 -0
  143. package/staging/lib/backdrop.d.ts +22 -0
  144. package/staging/lib/bb-anchor.d.ts +17 -0
  145. package/staging/lib/bounds.d.ts +47 -0
  146. package/staging/lib/camera-shake.d.ts +29 -0
  147. package/staging/lib/caustics.d.ts +53 -0
  148. package/staging/lib/center.d.ts +422 -0
  149. package/staging/lib/contact-shadows.d.ts +45 -0
  150. package/staging/lib/environment.d.ts +159 -0
  151. package/staging/lib/float.d.ts +19 -0
  152. package/staging/lib/lightformer.d.ts +334 -0
  153. package/staging/lib/matcap-texture.d.ts +32 -0
  154. package/staging/lib/normal-texture.d.ts +37 -0
  155. package/staging/lib/randomized-lights.d.ts +54 -0
  156. package/staging/lib/render-texture.d.ts +64 -0
  157. package/staging/lib/sky.d.ts +32 -0
  158. package/staging/lib/spot-light.d.ts +120 -0
  159. package/staging/lib/stage.d.ts +376 -0
  160. package/vanilla-exports/README.md +3 -0
  161. package/vanilla-exports/index.d.ts +27 -0
  162. package/web-types.json +1 -1
  163. package/abstractions/billboard/billboard.d.ts +0 -28
  164. package/abstractions/detailed/detailed.d.ts +0 -26
  165. package/abstractions/edges/edges.d.ts +0 -34
  166. package/abstractions/grid/grid.d.ts +0 -50
  167. package/abstractions/text/text.d.ts +0 -82
  168. package/abstractions/text-3d/text-3d.d.ts +0 -84
  169. package/assets/distort.vert.glsl +0 -1
  170. package/cameras/camera/camera-content.d.ts +0 -13
  171. package/cameras/camera/camera.d.ts +0 -26
  172. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  173. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  174. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  175. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  176. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  177. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  178. package/esm2022/abstractions/edges/edges.mjs +0 -88
  179. package/esm2022/abstractions/grid/grid.mjs +0 -180
  180. package/esm2022/abstractions/text/text.mjs +0 -274
  181. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -172
  182. package/esm2022/cameras/camera/camera-content.mjs +0 -21
  183. package/esm2022/cameras/camera/camera.mjs +0 -77
  184. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  185. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  186. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  187. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -185
  188. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  189. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +0 -197
  190. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  191. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -93
  192. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -150
  193. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +0 -66
  194. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -71
  195. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  196. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -272
  197. package/esm2022/gizmos/index.mjs +0 -4
  198. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  199. package/esm2022/loaders/loader/loader.mjs +0 -138
  200. package/esm2022/loaders/progress/progress.mjs +0 -52
  201. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  202. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  203. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  204. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  205. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  206. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  207. package/esm2022/materials/point-material/point-material.mjs +0 -50
  208. package/esm2022/misc/animations/animations.mjs +0 -59
  209. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  210. package/esm2022/misc/caustics/caustics.mjs +0 -387
  211. package/esm2022/misc/decal/decal.mjs +0 -187
  212. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  213. package/esm2022/misc/example/example.mjs +0 -160
  214. package/esm2022/misc/fbo/fbo.mjs +0 -47
  215. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  216. package/esm2022/misc/html/html.mjs +0 -304
  217. package/esm2022/misc/sampler/sampler.mjs +0 -142
  218. package/esm2022/misc/shadow/shadow.mjs +0 -111
  219. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  220. package/esm2022/misc/trail/trail.mjs +0 -209
  221. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  222. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  223. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  224. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  225. package/esm2022/modifiers/index.mjs +0 -2
  226. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  227. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  228. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  229. package/esm2022/performances/index.mjs +0 -8
  230. package/esm2022/performances/instances/instances.mjs +0 -220
  231. package/esm2022/performances/instances/position-mesh.mjs +0 -52
  232. package/esm2022/performances/points/points-input.mjs +0 -64
  233. package/esm2022/performances/points/points.mjs +0 -326
  234. package/esm2022/performances/points/position-point.mjs +0 -54
  235. package/esm2022/performances/segments/segment-object.mjs +0 -9
  236. package/esm2022/performances/segments/segments.mjs +0 -182
  237. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  238. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  239. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  240. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  241. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  242. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  243. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  244. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  245. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  246. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  247. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  248. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  249. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  250. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  251. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  252. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  253. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  254. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  255. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  256. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  257. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  258. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -69
  259. package/esm2022/staging/bounds/bounds.mjs +0 -308
  260. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  261. package/esm2022/staging/center/center.mjs +0 -165
  262. package/esm2022/staging/cloud/cloud.mjs +0 -158
  263. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  264. package/esm2022/staging/environment/assets.mjs +0 -13
  265. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  266. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  267. package/esm2022/staging/environment/environment-input.mjs +0 -119
  268. package/esm2022/staging/environment/environment-map.mjs +0 -53
  269. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  270. package/esm2022/staging/environment/environment.mjs +0 -61
  271. package/esm2022/staging/environment/utils.mjs +0 -106
  272. package/esm2022/staging/float/float.mjs +0 -94
  273. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  274. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  275. package/esm2022/staging/sky/sky.mjs +0 -119
  276. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  277. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  278. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  279. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  280. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  281. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  282. package/esm2022/staging/stage/stage.mjs +0 -389
  283. package/esm2022/staging/stars/stars.mjs +0 -147
  284. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  285. package/esm2022/staging/wireframe/wireframe.mjs +0 -228
  286. package/esm2022/utils/angular-three-soba-utils.mjs +0 -5
  287. package/esm2022/utils/content/content.mjs +0 -15
  288. package/esm2022/utils/index.mjs +0 -2
  289. package/fesm2022/angular-three-soba-gizmos.mjs +0 -1043
  290. package/fesm2022/angular-three-soba-gizmos.mjs.map +0 -1
  291. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  292. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  293. package/fesm2022/angular-three-soba-performances.mjs +0 -956
  294. package/fesm2022/angular-three-soba-performances.mjs.map +0 -1
  295. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  296. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  297. package/gizmos/README.md +0 -3
  298. package/gizmos/gizmo-helper/gizmo-helper.d.ts +0 -69
  299. package/gizmos/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  300. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  301. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -29
  302. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +0 -33
  303. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -10
  304. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -40
  305. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -30
  306. package/gizmos/index.d.ts +0 -3
  307. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  308. package/loaders/loader/loader.d.ts +0 -33
  309. package/loaders/progress/progress.d.ts +0 -9
  310. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  311. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  312. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  313. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  314. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  315. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  316. package/materials/point-material/point-material.d.ts +0 -24
  317. package/misc/animations/animations.d.ts +0 -15
  318. package/misc/caustics/caustics.d.ts +0 -87
  319. package/misc/decal/decal.d.ts +0 -49
  320. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  321. package/misc/example/example.d.ts +0 -81
  322. package/misc/fbo/fbo.d.ts +0 -17
  323. package/misc/html/html-wrapper.d.ts +0 -559
  324. package/misc/html/html.d.ts +0 -214
  325. package/misc/sampler/sampler.d.ts +0 -67
  326. package/misc/shadow/shadow.d.ts +0 -37
  327. package/misc/stats-gl/stats-gl.d.ts +0 -24
  328. package/misc/trail/trail.d.ts +0 -57
  329. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  330. package/misc/trail-texture/trail-texture.d.ts +0 -50
  331. package/modifiers/README.md +0 -3
  332. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  333. package/modifiers/index.d.ts +0 -1
  334. package/performances/README.md +0 -3
  335. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  336. package/performances/adaptive-events/adaptive-events.d.ts +0 -9
  337. package/performances/index.d.ts +0 -7
  338. package/performances/instances/instances.d.ts +0 -79
  339. package/performances/instances/position-mesh.d.ts +0 -10
  340. package/performances/points/points-input.d.ts +0 -32
  341. package/performances/points/points.d.ts +0 -92
  342. package/performances/points/position-point.d.ts +0 -11
  343. package/performances/segments/segment-object.d.ts +0 -7
  344. package/performances/segments/segments.d.ts +0 -124
  345. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  346. package/shaders/caustics/caustics-material.d.ts +0 -4
  347. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  348. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  349. package/shaders/discard-material/discard-material.d.ts +0 -3
  350. package/shaders/grid-material/grid-material.d.ts +0 -37
  351. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  352. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  353. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  354. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  355. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  356. package/shaders/shader-material/shader-material.d.ts +0 -6
  357. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  358. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  359. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  360. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  361. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  362. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  363. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  364. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  365. package/staging/backdrop/backdrop.d.ts +0 -30
  366. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  367. package/staging/bounds/bounds.d.ts +0 -134
  368. package/staging/camera-shake/camera-shake.d.ts +0 -43
  369. package/staging/center/center.d.ts +0 -70
  370. package/staging/cloud/cloud.d.ts +0 -51
  371. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  372. package/staging/environment/assets.d.ts +0 -13
  373. package/staging/environment/environment-cube.d.ts +0 -15
  374. package/staging/environment/environment-ground.d.ts +0 -13
  375. package/staging/environment/environment-input.d.ts +0 -68
  376. package/staging/environment/environment-map.d.ts +0 -16
  377. package/staging/environment/environment-portal.d.ts +0 -18
  378. package/staging/environment/environment.d.ts +0 -8
  379. package/staging/environment/utils.d.ts +0 -7
  380. package/staging/float/float.d.ts +0 -31
  381. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  382. package/staging/normal-texture/normal-texture.d.ts +0 -16
  383. package/staging/sky/sky.d.ts +0 -48
  384. package/staging/sparkles/sparkles.d.ts +0 -63
  385. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  386. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  387. package/staging/spot-light/spot-light-input.d.ts +0 -38
  388. package/staging/spot-light/spot-light.d.ts +0 -39
  389. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  390. package/staging/stage/stage.d.ts +0 -130
  391. package/staging/stars/stars.d.ts +0 -45
  392. package/staging/wireframe/wireframe-input.d.ts +0 -65
  393. package/staging/wireframe/wireframe.d.ts +0 -28
  394. package/utils/README.md +0 -3
  395. package/utils/content/content.d.ts +0 -8
  396. package/utils/index.d.ts +0 -1
  397. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -0,0 +1,32 @@
1
+ import { effect } from '@angular/core';
2
+ import { injectLoader, injectStore } from 'angular-three';
3
+ import { assertInjector } from 'ngxtension/assert-injector';
4
+ import { Texture, TextureLoader } from 'three';
5
+ function _injectTexture(input, { onLoad, injector } = {}) {
6
+ return assertInjector(_injectTexture, injector, () => {
7
+ const store = injectStore();
8
+ const result = injectLoader(() => TextureLoader, input);
9
+ effect(() => {
10
+ const textures = result();
11
+ if (!textures)
12
+ return;
13
+ const gl = store.get('gl');
14
+ if ('initTexture' in gl) {
15
+ const array = Array.isArray(textures)
16
+ ? textures
17
+ : textures instanceof Texture
18
+ ? [textures]
19
+ : Object.values(textures);
20
+ if (onLoad)
21
+ onLoad(array);
22
+ array.forEach(gl.initTexture.bind(gl));
23
+ }
24
+ });
25
+ return result;
26
+ });
27
+ }
28
+ _injectTexture.preload = (input) => {
29
+ injectLoader.preload(() => TextureLoader, input);
30
+ };
31
+ export const injectTexture = _injectTexture;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dHVyZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvbGliL3RleHR1cmUtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFL0MsU0FBUyxjQUFjLENBQ3RCLEtBQW1CLEVBQ25CLEVBQUUsTUFBTSxFQUFFLFFBQVEsS0FBcUUsRUFBRTtJQUV6RixPQUFPLGNBQWMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNwRCxNQUFNLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUM1QixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxhQUFhLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNwQyxDQUFDLENBQUMsUUFBUTtvQkFDVixDQUFDLENBQUMsUUFBUSxZQUFZLE9BQU87d0JBQzVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzt3QkFDWixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxNQUFNO29CQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsY0FBYyxDQUFDLE9BQU8sR0FBRyxDQUE0RCxLQUFtQixFQUFFLEVBQUU7SUFDM0csWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFzQixjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlZmZlY3QsIEluamVjdG9yLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdExvYWRlciwgaW5qZWN0U3RvcmUsIE5ndExvYWRlclJlc3VsdHMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgVGV4dHVyZSwgVGV4dHVyZUxvYWRlciB9IGZyb20gJ3RocmVlJztcblxuZnVuY3Rpb24gX2luamVjdFRleHR1cmU8VElucHV0IGV4dGVuZHMgc3RyaW5nW10gfCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pihcblx0aW5wdXQ6ICgpID0+IFRJbnB1dCxcblx0eyBvbkxvYWQsIGluamVjdG9yIH06IHsgb25Mb2FkPzogKHRleHR1cmU6IFRleHR1cmVbXSkgPT4gdm9pZDsgaW5qZWN0b3I/OiBJbmplY3RvciB9ID0ge30sXG4pOiBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUSW5wdXQsIFRleHR1cmU+IHwgbnVsbD4ge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoX2luamVjdFRleHR1cmUsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3Qgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGluamVjdExvYWRlcigoKSA9PiBUZXh0dXJlTG9hZGVyLCBpbnB1dCk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dHVyZXMgPSByZXN1bHQoKTtcblx0XHRcdGlmICghdGV4dHVyZXMpIHJldHVybjtcblx0XHRcdGNvbnN0IGdsID0gc3RvcmUuZ2V0KCdnbCcpO1xuXHRcdFx0aWYgKCdpbml0VGV4dHVyZScgaW4gZ2wpIHtcblx0XHRcdFx0Y29uc3QgYXJyYXkgPSBBcnJheS5pc0FycmF5KHRleHR1cmVzKVxuXHRcdFx0XHRcdD8gdGV4dHVyZXNcblx0XHRcdFx0XHQ6IHRleHR1cmVzIGluc3RhbmNlb2YgVGV4dHVyZVxuXHRcdFx0XHRcdFx0PyBbdGV4dHVyZXNdXG5cdFx0XHRcdFx0XHQ6IE9iamVjdC52YWx1ZXModGV4dHVyZXMpO1xuXHRcdFx0XHRpZiAob25Mb2FkKSBvbkxvYWQoYXJyYXkpO1xuXHRcdFx0XHRhcnJheS5mb3JFYWNoKGdsLmluaXRUZXh0dXJlLmJpbmQoZ2wpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xufVxuXG5faW5qZWN0VGV4dHVyZS5wcmVsb2FkID0gPFRJbnB1dCBleHRlbmRzIHN0cmluZ1tdIHwgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oaW5wdXQ6ICgpID0+IFRJbnB1dCkgPT4ge1xuXHRpbmplY3RMb2FkZXIucHJlbG9hZCgoKSA9PiBUZXh0dXJlTG9hZGVyLCBpbnB1dCk7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RzVGV4dHVyZUxvYWRlciA9IHR5cGVvZiBfaW5qZWN0VGV4dHVyZTtcbmV4cG9ydCBjb25zdCBpbmplY3RUZXh0dXJlOiBOZ3RzVGV4dHVyZUxvYWRlciA9IF9pbmplY3RUZXh0dXJlO1xuIl19
@@ -1,7 +1,7 @@
1
- export * from './mesh-distort-material/mesh-distort-material';
2
- export * from './mesh-reflector-material/mesh-reflector-material';
3
- export * from './mesh-refraction-material/mesh-refraction-material';
4
- export * from './mesh-transmission-material/mesh-transmission-material';
5
- export * from './mesh-wobble-material/mesh-wobble-material';
6
- export * from './point-material/point-material';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc2gtcmVmbGVjdG9yLW1hdGVyaWFsL21lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc2gtdHJhbnNtaXNzaW9uLW1hdGVyaWFsL21lc2gtdHJhbnNtaXNzaW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzaC13b2JibGUtbWF0ZXJpYWwvbWVzaC13b2JibGUtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9wb2ludC1tYXRlcmlhbC9wb2ludC1tYXRlcmlhbCc7XG4iXX0=
1
+ export * from './lib/custom-shader-material';
2
+ export * from './lib/mesh-distort-material';
3
+ export * from './lib/mesh-reflector-material';
4
+ export * from './lib/mesh-refraction-material';
5
+ export * from './lib/mesh-transmission-material';
6
+ export * from './lib/mesh-wobble-material';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2N1c3RvbS1zaGFkZXItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
@@ -0,0 +1,71 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, } from '@angular/core';
2
+ import { is, NgtArgs, omit, pick } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import CustomShaderMaterial from 'three-custom-shader-material/vanilla';
5
+ import * as i0 from "@angular/core";
6
+ export class NgtsCustomShaderMaterial {
7
+ constructor() {
8
+ this.baseMaterial = input.required();
9
+ this.attach = input('material');
10
+ this.options = input({});
11
+ this.parameters = omit(this.options, ['fragmentShader', 'vertexShader', 'uniforms', 'cacheKey']);
12
+ this.base = computed(() => {
13
+ const baseMaterial = this.baseMaterial();
14
+ return is.ref(baseMaterial) ? baseMaterial.nativeElement : baseMaterial;
15
+ });
16
+ this.fragmentShader = pick(this.options, 'fragmentShader');
17
+ this.vertexShader = pick(this.options, 'vertexShader');
18
+ this.uniforms = pick(this.options, 'uniforms');
19
+ this.cacheKey = pick(this.options, 'cacheKey');
20
+ this.material = computed(() => {
21
+ const [base, fragmentShader, vertexShader, uniforms, cacheKey] = [
22
+ this.base(),
23
+ this.fragmentShader(),
24
+ this.vertexShader(),
25
+ this.uniforms(),
26
+ this.cacheKey(),
27
+ ];
28
+ // NOTE: this is specific to angular-three
29
+ if (is.instance(base)) {
30
+ delete base['__ngt__'];
31
+ delete base['__ngt_renderer__'];
32
+ }
33
+ return new CustomShaderMaterial({
34
+ baseMaterial: base,
35
+ fragmentShader,
36
+ vertexShader,
37
+ uniforms,
38
+ cacheKey,
39
+ });
40
+ });
41
+ const autoEffect = injectAutoEffect();
42
+ afterNextRender(() => {
43
+ autoEffect(() => {
44
+ const material = this.material();
45
+ return () => material.dispose();
46
+ });
47
+ });
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCustomShaderMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsCustomShaderMaterial, isStandalone: true, selector: "ngts-custom-shader-material", inputs: { baseMaterial: { classPropertyName: "baseMaterial", publicName: "baseMaterial", isSignal: true, isRequired: true, transformFunction: null }, attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
51
+ <ngt-primitive *args="[material()]" [attach]="attach()" [parameters]="parameters()">
52
+ <ng-content />
53
+ </ngt-primitive>
54
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCustomShaderMaterial, decorators: [{
57
+ type: Component,
58
+ args: [{
59
+ selector: 'ngts-custom-shader-material',
60
+ standalone: true,
61
+ template: `
62
+ <ngt-primitive *args="[material()]" [attach]="attach()" [parameters]="parameters()">
63
+ <ng-content />
64
+ </ngt-primitive>
65
+ `,
66
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
67
+ changeDetection: ChangeDetectionStrategy.OnPush,
68
+ imports: [NgtArgs],
69
+ }]
70
+ }], ctorParameters: () => [] });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNoYWRlci1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9jdXN0b20tc2hhZGVyLW1hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFnQixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLG9CQUFvQixNQUFNLHNDQUFzQyxDQUFDOztBQWN4RSxNQUFNLE9BQU8sd0JBQXdCO0lBd0NwQztRQXZDQSxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFELENBQUM7UUFDbkYsV0FBTSxHQUFHLEtBQUssQ0FBb0IsVUFBVSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFpRixDQUFDLENBQUM7UUFDbkcsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRTVGLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUVLLG1CQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELGFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDaEUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDZixDQUFDO1lBRUYsMENBQTBDO1lBQzFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFRLElBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLE9BQVEsSUFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxPQUFPLElBQUksb0JBQW9CLENBQUM7Z0JBQy9CLFlBQVksRUFBRSxJQUFJO2dCQUNsQixjQUFjO2dCQUNkLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixRQUFRO2FBQ1IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWhEVyx3QkFBd0I7a0dBQXhCLHdCQUF3Qix3ZUFUMUI7Ozs7RUFJVCw0REFHUyxPQUFPOzsyRkFFTCx3QkFBd0I7a0JBWnBDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzLCBOZ3RBbnlSZWNvcmQsIE5ndEFyZ3MsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IEN1c3RvbVNoYWRlck1hdGVyaWFsIGZyb20gJ3RocmVlLWN1c3RvbS1zaGFkZXItbWF0ZXJpYWwvdmFuaWxsYSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtY3VzdG9tLXNoYWRlci1tYXRlcmlhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbWF0ZXJpYWwoKV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCIgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3VzdG9tU2hhZGVyTWF0ZXJpYWwge1xuXHRiYXNlTWF0ZXJpYWwgPSBpbnB1dC5yZXF1aXJlZDxNYXRlcmlhbCB8IHR5cGVvZiBNYXRlcmlhbCB8IEVsZW1lbnRSZWY8TWF0ZXJpYWw+PigpO1xuXHRhdHRhY2ggPSBpbnB1dDxzdHJpbmcgfCBzdHJpbmdbXT4oJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBPbWl0PENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgQ3VzdG9tU2hhZGVyTWF0ZXJpYWw+WzBdLCAnYmFzZU1hdGVyaWFsJz4pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnZnJhZ21lbnRTaGFkZXInLCAndmVydGV4U2hhZGVyJywgJ3VuaWZvcm1zJywgJ2NhY2hlS2V5J10pO1xuXG5cdGJhc2UgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgYmFzZU1hdGVyaWFsID0gdGhpcy5iYXNlTWF0ZXJpYWwoKTtcblx0XHRyZXR1cm4gaXMucmVmKGJhc2VNYXRlcmlhbCkgPyBiYXNlTWF0ZXJpYWwubmF0aXZlRWxlbWVudCA6IGJhc2VNYXRlcmlhbDtcblx0fSk7XG5cblx0cHJpdmF0ZSBmcmFnbWVudFNoYWRlciA9IHBpY2sodGhpcy5vcHRpb25zLCAnZnJhZ21lbnRTaGFkZXInKTtcblx0cHJpdmF0ZSB2ZXJ0ZXhTaGFkZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ZlcnRleFNoYWRlcicpO1xuXHRwcml2YXRlIHVuaWZvcm1zID0gcGljayh0aGlzLm9wdGlvbnMsICd1bmlmb3JtcycpO1xuXHRwcml2YXRlIGNhY2hlS2V5ID0gcGljayh0aGlzLm9wdGlvbnMsICdjYWNoZUtleScpO1xuXG5cdG1hdGVyaWFsID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtiYXNlLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB1bmlmb3JtcywgY2FjaGVLZXldID0gW1xuXHRcdFx0dGhpcy5iYXNlKCksXG5cdFx0XHR0aGlzLmZyYWdtZW50U2hhZGVyKCksXG5cdFx0XHR0aGlzLnZlcnRleFNoYWRlcigpLFxuXHRcdFx0dGhpcy51bmlmb3JtcygpLFxuXHRcdFx0dGhpcy5jYWNoZUtleSgpLFxuXHRcdF07XG5cblx0XHQvLyBOT1RFOiB0aGlzIGlzIHNwZWNpZmljIHRvIGFuZ3VsYXItdGhyZWVcblx0XHRpZiAoaXMuaW5zdGFuY2UoYmFzZSkpIHtcblx0XHRcdGRlbGV0ZSAoYmFzZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRkZWxldGUgKGJhc2UgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgQ3VzdG9tU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0YmFzZU1hdGVyaWFsOiBiYXNlLFxuXHRcdFx0ZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHR2ZXJ0ZXhTaGFkZXIsXG5cdFx0XHR1bmlmb3Jtcyxcblx0XHRcdGNhY2hlS2V5LFxuXHRcdH0pO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBtYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -0,0 +1,42 @@
1
+ import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, input } from '@angular/core';
2
+ import { MeshDistortMaterial } from '@pmndrs/vanilla';
3
+ import { injectBeforeRender, NgtArgs, omit, pick } from 'angular-three';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import * as i0 from "@angular/core";
6
+ const defaultOptions = {
7
+ speed: 1,
8
+ };
9
+ export class NgtsMeshDistortMaterial {
10
+ constructor() {
11
+ this.attach = input('material');
12
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
13
+ this.parameters = omit(this.options, ['speed']);
14
+ this.material = new MeshDistortMaterial();
15
+ this.speed = pick(this.options, 'speed');
16
+ injectBeforeRender(({ clock }) => {
17
+ this.material.time = clock.getElapsedTime() * this.speed();
18
+ });
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsMeshDistortMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsMeshDistortMaterial, isStandalone: true, selector: "ngts-mesh-distort-material", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
22
+ <ngt-primitive *args="[material]" [attach]="attach()" [parameters]="parameters()">
23
+ <ng-content />
24
+ </ngt-primitive>
25
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsMeshDistortMaterial, decorators: [{
28
+ type: Component,
29
+ args: [{
30
+ selector: 'ngts-mesh-distort-material',
31
+ standalone: true,
32
+ template: `
33
+ <ngt-primitive *args="[material]" [attach]="attach()" [parameters]="parameters()">
34
+ <ng-content />
35
+ </ngt-primitive>
36
+ `,
37
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
38
+ changeDetection: ChangeDetectionStrategy.OnPush,
39
+ imports: [NgtArgs],
40
+ }]
41
+ }], ctorParameters: () => [] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUEyQixJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFTdkQsTUFBTSxjQUFjLEdBQW1DO0lBQ3RELEtBQUssRUFBRSxDQUFDO0NBQ1IsQ0FBQztBQWNGLE1BQU0sT0FBTyx1QkFBdUI7SUFTbkM7UUFSQSxXQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUzQyxhQUFRLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBRTdCLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUczQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FiVyx1QkFBdUI7a0dBQXZCLHVCQUF1QiwyVkFUekI7Ozs7RUFJVCw0REFHUyxPQUFPOzsyRkFFTCx1QkFBdUI7a0JBWm5DLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXNoRGlzdG9ydE1hdGVyaWFsIH0gZnJvbSAnQHBtbmRycy92YW5pbGxhJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgTmd0QXJncywgTmd0TWVzaFBoeXNpY2FsTWF0ZXJpYWwsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE1lc2hEaXN0b3J0TWF0ZXJpYWxQYXJhbWV0ZXJzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3ZhbmlsbGEtZXhwb3J0cyc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hEaXN0b3J0TWF0ZXJpYWxPcHRpb25zXG5cdGV4dGVuZHMgUGFydGlhbDxNZXNoRGlzdG9ydE1hdGVyaWFsUGFyYW1ldGVycz4sXG5cdFx0UGFydGlhbDxOZ3RNZXNoUGh5c2ljYWxNYXRlcmlhbD4ge1xuXHRzcGVlZDogbnVtYmVyO1xuXHRmYWN0b3I/OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTWVzaERpc3RvcnRNYXRlcmlhbE9wdGlvbnMgPSB7XG5cdHNwZWVkOiAxLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1tZXNoLWRpc3RvcnQtbWF0ZXJpYWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW21hdGVyaWFsXVwiIFthdHRhY2hdPVwiYXR0YWNoKClcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtcHJpbWl0aXZlPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsIHtcblx0YXR0YWNoID0gaW5wdXQoJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3NwZWVkJ10pO1xuXG5cdG1hdGVyaWFsID0gbmV3IE1lc2hEaXN0b3J0TWF0ZXJpYWwoKTtcblxuXHRwcml2YXRlIHNwZWVkID0gcGljayh0aGlzLm9wdGlvbnMsICdzcGVlZCcpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBjbG9jayB9KSA9PiB7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLnRpbWUgPSBjbG9jay5nZXRFbGFwc2VkVGltZSgpICogdGhpcy5zcGVlZCgpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,278 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input, untracked, viewChild, } from '@angular/core';
2
+ import { applyProps, getLocalState, injectBeforeRender, injectStore, NgtArgs, omit, pick, } from 'angular-three';
3
+ import { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/vanilla-exports';
4
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
5
+ import { mergeInputs } from 'ngxtension/inject-inputs';
6
+ import { DepthFormat, DepthTexture, HalfFloatType, LinearFilter, Matrix4, PerspectiveCamera, Plane, UnsignedShortType, Vector3, Vector4, WebGLRenderTarget, } from 'three';
7
+ import * as i0 from "@angular/core";
8
+ const defaultOptions = {
9
+ mixBlur: 0,
10
+ mixStrength: 1,
11
+ resolution: 256,
12
+ blur: [0, 0],
13
+ minDepthThreshold: 0.9,
14
+ maxDepthThreshold: 1,
15
+ depthScale: 0,
16
+ depthToBlurRatioBias: 0.25,
17
+ mirror: 0,
18
+ distortion: 1,
19
+ mixContrast: 1,
20
+ reflectorOffset: 0,
21
+ };
22
+ export class NgtsMeshReflectorMaterial {
23
+ constructor() {
24
+ this.attach = input('material');
25
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
26
+ this.parameters = omit(this.options, [
27
+ 'distortionMap',
28
+ 'resolution',
29
+ 'mixBlur',
30
+ 'mixStrength',
31
+ 'blur',
32
+ 'minDepthThreshold',
33
+ 'maxDepthThreshold',
34
+ 'depthScale',
35
+ 'depthToBlurRatioBias',
36
+ 'mirror',
37
+ 'distortion',
38
+ 'mixContrast',
39
+ 'reflectorOffset',
40
+ ]);
41
+ this.store = injectStore();
42
+ this.gl = this.store.select('gl');
43
+ this.materialRef = viewChild('material');
44
+ this.reflectOptions = pick(this.options, [
45
+ 'distortionMap',
46
+ 'resolution',
47
+ 'mixBlur',
48
+ 'mixStrength',
49
+ 'blur',
50
+ 'minDepthThreshold',
51
+ 'maxDepthThreshold',
52
+ 'depthScale',
53
+ 'depthToBlurRatioBias',
54
+ 'mirror',
55
+ 'distortion',
56
+ 'mixContrast',
57
+ 'reflectorOffset',
58
+ ]);
59
+ this.blur = pick(this.reflectOptions, 'blur');
60
+ this.normalizedBlur = computed(() => {
61
+ const blur = this.blur();
62
+ return Array.isArray(blur) ? blur : [blur, blur];
63
+ });
64
+ this.hasBlur = computed(() => this.normalizedBlur()[0] + this.normalizedBlur()[1] > 0);
65
+ this.reflectorPlane = new Plane();
66
+ this.normal = new Vector3();
67
+ this.reflectorWorldPosition = new Vector3();
68
+ this.cameraWorldPosition = new Vector3();
69
+ this.rotationMatrix = new Matrix4();
70
+ this.lookAtPosition = new Vector3(0, 0, -1);
71
+ this.clipPlane = new Vector4();
72
+ this.view = new Vector3();
73
+ this.target = new Vector3();
74
+ this.q = new Vector4();
75
+ this.textureMatrix = new Matrix4();
76
+ this.virtualCamera = new PerspectiveCamera();
77
+ this.reflectState = computed(() => {
78
+ const [gl, { resolution, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, mirror, mixBlur, mixStrength, distortion, distortionMap, mixContrast, }, blur, hasBlur,] = [this.gl(), this.reflectOptions(), this.normalizedBlur(), this.hasBlur()];
79
+ const renderTargetParameters = {
80
+ minFilter: LinearFilter,
81
+ magFilter: LinearFilter,
82
+ type: HalfFloatType,
83
+ };
84
+ const fbo1 = new WebGLRenderTarget(resolution, resolution, renderTargetParameters);
85
+ fbo1.depthBuffer = true;
86
+ fbo1.depthTexture = new DepthTexture(resolution, resolution);
87
+ fbo1.depthTexture.format = DepthFormat;
88
+ fbo1.depthTexture.type = UnsignedShortType;
89
+ const fbo2 = new WebGLRenderTarget(resolution, resolution, renderTargetParameters);
90
+ const blurPass = new BlurPass({
91
+ gl,
92
+ resolution,
93
+ width: blur[0],
94
+ height: blur[1],
95
+ minDepthThreshold,
96
+ maxDepthThreshold,
97
+ depthScale,
98
+ depthToBlurRatioBias,
99
+ });
100
+ const defines = {};
101
+ if (hasBlur) {
102
+ defines['USE_BLUR'] = '';
103
+ }
104
+ if (depthScale > 0) {
105
+ defines['USE_DEPTH'] = '';
106
+ }
107
+ if (distortionMap) {
108
+ defines['USE_DISTORTION'] = '';
109
+ }
110
+ const reflectorParameters = {
111
+ mirror,
112
+ textureMatrix: this.textureMatrix,
113
+ mixBlur,
114
+ tDiffuse: fbo1.texture,
115
+ tDepth: fbo1.depthTexture,
116
+ tDiffuseBlur: fbo2.texture,
117
+ hasBlur,
118
+ mixStrength,
119
+ minDepthThreshold,
120
+ maxDepthThreshold,
121
+ depthScale,
122
+ depthToBlurRatioBias,
123
+ distortion,
124
+ distortionMap,
125
+ mixContrast,
126
+ defines,
127
+ };
128
+ return { fbo1, fbo2, blurPass, reflectorParameters };
129
+ });
130
+ this.definesKey = computed(() => {
131
+ const defines = this.reflectState().reflectorParameters.defines;
132
+ return Object.entries(defines).reduce((acc, [key, value]) => (value != null ? `${acc} ${key}` : acc), '');
133
+ });
134
+ this.material = computed(() => {
135
+ const prevMaterial = untracked(this.materialRef)?.nativeElement;
136
+ if (prevMaterial) {
137
+ prevMaterial.dispose();
138
+ delete prevMaterial['__ngt__'];
139
+ delete prevMaterial['__ngt_renderer__'];
140
+ }
141
+ // tracking defines key so that the material is recreated when the defines change
142
+ this.definesKey();
143
+ return new MeshReflectorMaterial();
144
+ });
145
+ const autoEffect = injectAutoEffect();
146
+ afterNextRender(() => {
147
+ autoEffect(() => {
148
+ const material = this.materialRef()?.nativeElement;
149
+ if (!material)
150
+ return;
151
+ const { reflectorParameters } = this.reflectState();
152
+ applyProps(material, { ...reflectorParameters, ...this.parameters() });
153
+ });
154
+ });
155
+ inject(DestroyRef).onDestroy(() => {
156
+ const material = this.materialRef()?.nativeElement;
157
+ if (material) {
158
+ material.dispose();
159
+ delete material['__ngt__'];
160
+ delete material['__ngt_renderer__'];
161
+ }
162
+ });
163
+ injectBeforeRender(({ gl, scene }) => {
164
+ const material = this.materialRef()?.nativeElement;
165
+ if (!material)
166
+ return;
167
+ const localState = getLocalState(material);
168
+ if (!localState)
169
+ return;
170
+ const parent = Reflect.get(material, 'parent') ?? untracked(localState.parent);
171
+ if (!parent)
172
+ return;
173
+ const { fbo1, fbo2, blurPass } = this.reflectState();
174
+ const hasBlur = this.hasBlur();
175
+ parent.visible = false;
176
+ const currentXrEnabled = gl.xr.enabled;
177
+ const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
178
+ this.beforeRender();
179
+ gl.xr.enabled = false;
180
+ gl.shadowMap.autoUpdate = false;
181
+ gl.setRenderTarget(fbo1);
182
+ gl.state.buffers.depth.setMask(true);
183
+ if (!gl.autoClear)
184
+ gl.clear();
185
+ gl.render(scene, this.virtualCamera);
186
+ if (hasBlur)
187
+ blurPass.render(gl, fbo1, fbo2);
188
+ gl.xr.enabled = currentXrEnabled;
189
+ gl.shadowMap.autoUpdate = currentShadowAutoUpdate;
190
+ parent.visible = true;
191
+ gl.setRenderTarget(null);
192
+ });
193
+ }
194
+ beforeRender() {
195
+ const material = this.materialRef()?.nativeElement;
196
+ if (!material)
197
+ return;
198
+ const localState = getLocalState(material);
199
+ if (!localState)
200
+ return;
201
+ const parent = Reflect.get(material, 'parent') ?? untracked(localState.parent);
202
+ if (!parent)
203
+ return;
204
+ const { camera } = this.store.snapshot;
205
+ const { reflectorOffset } = untracked(this.reflectOptions);
206
+ this.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
207
+ this.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
208
+ this.rotationMatrix.extractRotation(parent.matrixWorld);
209
+ this.normal.set(0, 0, 1);
210
+ this.normal.applyMatrix4(this.rotationMatrix);
211
+ this.reflectorWorldPosition.addScaledVector(this.normal, reflectorOffset);
212
+ this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);
213
+ // Avoid rendering when reflector is facing away
214
+ if (this.view.dot(this.normal) > 0)
215
+ return;
216
+ this.view.reflect(this.normal).negate();
217
+ this.view.add(this.reflectorWorldPosition);
218
+ this.rotationMatrix.extractRotation(camera.matrixWorld);
219
+ this.lookAtPosition.set(0, 0, -1);
220
+ this.lookAtPosition.applyMatrix4(this.rotationMatrix);
221
+ this.lookAtPosition.add(this.cameraWorldPosition);
222
+ this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);
223
+ this.target.reflect(this.normal).negate();
224
+ this.target.add(this.reflectorWorldPosition);
225
+ this.virtualCamera.position.copy(this.view);
226
+ this.virtualCamera.up.set(0, 1, 0);
227
+ this.virtualCamera.up.applyMatrix4(this.rotationMatrix);
228
+ this.virtualCamera.up.reflect(this.normal);
229
+ this.virtualCamera.lookAt(this.target);
230
+ this.virtualCamera.far = camera.far; // Used in WebGLBackground
231
+ this.virtualCamera.updateMatrixWorld();
232
+ this.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
233
+ // Update the texture matrix
234
+ this.textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
235
+ this.textureMatrix.multiply(this.virtualCamera.projectionMatrix);
236
+ this.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);
237
+ this.textureMatrix.multiply(parent.matrixWorld);
238
+ // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
239
+ // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
240
+ this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);
241
+ this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);
242
+ this.clipPlane.set(this.reflectorPlane.normal.x, this.reflectorPlane.normal.y, this.reflectorPlane.normal.z, this.reflectorPlane.constant);
243
+ const projectionMatrix = this.virtualCamera.projectionMatrix;
244
+ this.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
245
+ this.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
246
+ this.q.z = -1.0;
247
+ this.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
248
+ // Calculate the scaled plane vector
249
+ this.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));
250
+ // Replacing the third row of the projection matrix
251
+ projectionMatrix.elements[2] = this.clipPlane.x;
252
+ projectionMatrix.elements[6] = this.clipPlane.y;
253
+ projectionMatrix.elements[10] = this.clipPlane.z + 1.0;
254
+ projectionMatrix.elements[14] = this.clipPlane.w;
255
+ }
256
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
257
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "materialRef", first: true, predicate: ["material"], descendants: true, isSignal: true }], ngImport: i0, template: `
258
+ <ngt-primitive #material *args="[material()]" [attach]="attach()">
259
+ <ng-content />
260
+ </ngt-primitive>
261
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
262
+ }
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
264
+ type: Component,
265
+ args: [{
266
+ selector: 'ngts-mesh-reflector-material',
267
+ standalone: true,
268
+ template: `
269
+ <ngt-primitive #material *args="[material()]" [attach]="attach()">
270
+ <ng-content />
271
+ </ngt-primitive>
272
+ `,
273
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
274
+ changeDetection: ChangeDetectionStrategy.OnPush,
275
+ imports: [NgtArgs],
276
+ }]
277
+ }], ctorParameters: () => [] });
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sVUFBVSxFQUNWLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsV0FBVyxFQUVYLE9BQU8sRUFFUCxJQUFJLEVBQ0osSUFBSSxHQUNKLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLFlBQVksRUFDWixPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLEtBQUssRUFFTCxpQkFBaUIsRUFDakIsT0FBTyxFQUNQLE9BQU8sRUFDUCxpQkFBaUIsR0FDakIsTUFBTSxPQUFPLENBQUM7O0FBa0JmLE1BQU0sY0FBYyxHQUFxQztJQUN4RCxPQUFPLEVBQUUsQ0FBQztJQUNWLFdBQVcsRUFBRSxDQUFDO0lBQ2QsVUFBVSxFQUFFLEdBQUc7SUFDZixJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1osaUJBQWlCLEVBQUUsR0FBRztJQUN0QixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLFVBQVUsRUFBRSxDQUFDO0lBQ2Isb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixNQUFNLEVBQUUsQ0FBQztJQUNULFVBQVUsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLENBQUM7SUFDZCxlQUFlLEVBQUUsQ0FBQztDQUNsQixDQUFDO0FBY0YsTUFBTSxPQUFPLHlCQUF5QjtJQWdLckM7UUEvSkEsV0FBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxlQUFlO1lBQ2YsWUFBWTtZQUNaLFNBQVM7WUFDVCxhQUFhO1lBQ2IsTUFBTTtZQUNOLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLHNCQUFzQjtZQUN0QixRQUFRO1lBQ1IsWUFBWTtZQUNaLGFBQWE7WUFDYixpQkFBaUI7U0FDakIsQ0FBQyxDQUFDO1FBRUssVUFBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLE9BQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixnQkFBVyxHQUFHLFNBQVMsQ0FBb0MsVUFBVSxDQUFDLENBQUM7UUFFdkUsbUJBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMzQyxlQUFlO1lBQ2YsWUFBWTtZQUNaLFNBQVM7WUFDVCxhQUFhO1lBQ2IsTUFBTTtZQUNOLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLHNCQUFzQjtZQUN0QixRQUFRO1lBQ1IsWUFBWTtZQUNaLGFBQWE7WUFDYixpQkFBaUI7U0FDakIsQ0FBQyxDQUFDO1FBRUssU0FBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBQ0ssWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxGLG1CQUFjLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM3QixXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QiwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9CLG1CQUFjLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzFCLFNBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE1BQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixrQkFBYSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUV4QyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxDQUNMLEVBQUUsRUFDRixFQUNDLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxXQUFXLEVBQ1gsVUFBVSxFQUNWLGFBQWEsRUFDYixXQUFXLEdBQ1gsRUFDRCxJQUFJLEVBQ0osT0FBTyxFQUNQLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUU5RSxNQUFNLHNCQUFzQixHQUFHO2dCQUM5QixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLElBQUksRUFBRSxhQUFhO2FBQ25CLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7WUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFFbkYsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7Z0JBQzdCLEVBQUU7Z0JBQ0YsVUFBVTtnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDZixpQkFBaUI7Z0JBQ2pCLGlCQUFpQjtnQkFDakIsVUFBVTtnQkFDVixvQkFBb0I7YUFDcEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQztZQUVqQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUVELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUVELE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzNCLE1BQU07Z0JBQ04sYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxPQUFPO2dCQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN6QixZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQzFCLE9BQU87Z0JBQ1AsV0FBVztnQkFDWCxpQkFBaUI7Z0JBQ2pCLGlCQUFpQjtnQkFDakIsVUFBVTtnQkFDVixvQkFBb0I7Z0JBQ3BCLFVBQVU7Z0JBQ1YsYUFBYTtnQkFDYixXQUFXO2dCQUNYLE9BQU87YUFDUCxDQUFDO1lBRUYsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSyxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1lBQ2hFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDO1FBRUgsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhLENBQUM7WUFFaEUsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixPQUFRLFlBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2pELE9BQVEsWUFBNkIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCxpRkFBaUY7WUFDakYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBR0YsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUV0QyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLGFBQWEsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFFBQVE7b0JBQUUsT0FBTztnQkFDdEIsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwRCxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDbkQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDZCxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25CLE9BQVEsUUFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0MsT0FBUSxRQUF5QixDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTztZQUV4QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFFcEIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUvQixNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDeEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN0QixFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDaEMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUztnQkFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLElBQUksT0FBTztnQkFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7WUFDakMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsdUJBQXVCLENBQUM7WUFDbEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDdEIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFcEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RSxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsMEJBQTBCO1FBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRSw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsc0hBQXNIO1FBQ3RILHVGQUF1RjtRQUN2RixJQUFJLENBQUMsY0FBYyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FDNUIsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3RCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLG1EQUFtRDtRQUNuRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7OEdBdFJXLHlCQUF5QjtrR0FBekIseUJBQXlCLHNkQVQzQjs7OztFQUlULDREQUdTLE9BQU87OzJGQUVMLHlCQUF5QjtrQkFackMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0YXBwbHlQcm9wcyxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0Tmd0QW55UmVjb3JkLFxuXHROZ3RBcmdzLFxuXHROZ3RNZXNoU3RhbmRhcmRNYXRlcmlhbCxcblx0b21pdCxcblx0cGljayxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBCbHVyUGFzcywgTWVzaFJlZmxlY3Rvck1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3ZhbmlsbGEtZXhwb3J0cyc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQge1xuXHREZXB0aEZvcm1hdCxcblx0RGVwdGhUZXh0dXJlLFxuXHRIYWxmRmxvYXRUeXBlLFxuXHRMaW5lYXJGaWx0ZXIsXG5cdE1hdHJpeDQsXG5cdFBlcnNwZWN0aXZlQ2FtZXJhLFxuXHRQbGFuZSxcblx0VGV4dHVyZSxcblx0VW5zaWduZWRTaG9ydFR5cGUsXG5cdFZlY3RvcjMsXG5cdFZlY3RvcjQsXG5cdFdlYkdMUmVuZGVyVGFyZ2V0LFxufSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsPiB7XG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0bWl4Qmx1cjogbnVtYmVyO1xuXHRtaXhTdHJlbmd0aDogbnVtYmVyO1xuXHRibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyO1xuXHRtaXJyb3I6IG51bWJlcjtcblx0bWluRGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcblx0bWF4RGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcblx0ZGVwdGhTY2FsZTogbnVtYmVyO1xuXHRkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyO1xuXHRkaXN0b3J0aW9uOiBudW1iZXI7XG5cdG1peENvbnRyYXN0OiBudW1iZXI7XG5cdHJlZmxlY3Rvck9mZnNldDogbnVtYmVyO1xuXHRkaXN0b3J0aW9uTWFwPzogVGV4dHVyZTtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxPcHRpb25zID0ge1xuXHRtaXhCbHVyOiAwLFxuXHRtaXhTdHJlbmd0aDogMSxcblx0cmVzb2x1dGlvbjogMjU2LFxuXHRibHVyOiBbMCwgMF0sXG5cdG1pbkRlcHRoVGhyZXNob2xkOiAwLjksXG5cdG1heERlcHRoVGhyZXNob2xkOiAxLFxuXHRkZXB0aFNjYWxlOiAwLFxuXHRkZXB0aFRvQmx1clJhdGlvQmlhczogMC4yNSxcblx0bWlycm9yOiAwLFxuXHRkaXN0b3J0aW9uOiAxLFxuXHRtaXhDb250cmFzdDogMSxcblx0cmVmbGVjdG9yT2Zmc2V0OiAwLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgI21hdGVyaWFsICphcmdzPVwiW21hdGVyaWFsKCldXCIgW2F0dGFjaF09XCJhdHRhY2goKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1wcmltaXRpdmU+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbCB7XG5cdGF0dGFjaCA9IGlucHV0KCdtYXRlcmlhbCcpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J2Rpc3RvcnRpb25NYXAnLFxuXHRcdCdyZXNvbHV0aW9uJyxcblx0XHQnbWl4Qmx1cicsXG5cdFx0J21peFN0cmVuZ3RoJyxcblx0XHQnYmx1cicsXG5cdFx0J21pbkRlcHRoVGhyZXNob2xkJyxcblx0XHQnbWF4RGVwdGhUaHJlc2hvbGQnLFxuXHRcdCdkZXB0aFNjYWxlJyxcblx0XHQnZGVwdGhUb0JsdXJSYXRpb0JpYXMnLFxuXHRcdCdtaXJyb3InLFxuXHRcdCdkaXN0b3J0aW9uJyxcblx0XHQnbWl4Q29udHJhc3QnLFxuXHRcdCdyZWZsZWN0b3JPZmZzZXQnLFxuXHRdKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXG5cdHByaXZhdGUgbWF0ZXJpYWxSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxNZXNoUmVmbGVjdG9yTWF0ZXJpYWw+PignbWF0ZXJpYWwnKTtcblxuXHRwcml2YXRlIHJlZmxlY3RPcHRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsIFtcblx0XHQnZGlzdG9ydGlvbk1hcCcsXG5cdFx0J3Jlc29sdXRpb24nLFxuXHRcdCdtaXhCbHVyJyxcblx0XHQnbWl4U3RyZW5ndGgnLFxuXHRcdCdibHVyJyxcblx0XHQnbWluRGVwdGhUaHJlc2hvbGQnLFxuXHRcdCdtYXhEZXB0aFRocmVzaG9sZCcsXG5cdFx0J2RlcHRoU2NhbGUnLFxuXHRcdCdkZXB0aFRvQmx1clJhdGlvQmlhcycsXG5cdFx0J21pcnJvcicsXG5cdFx0J2Rpc3RvcnRpb24nLFxuXHRcdCdtaXhDb250cmFzdCcsXG5cdFx0J3JlZmxlY3Rvck9mZnNldCcsXG5cdF0pO1xuXG5cdHByaXZhdGUgYmx1ciA9IHBpY2sodGhpcy5yZWZsZWN0T3B0aW9ucywgJ2JsdXInKTtcblxuXHRwcml2YXRlIG5vcm1hbGl6ZWRCbHVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGJsdXIgPSB0aGlzLmJsdXIoKTtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShibHVyKSA/IGJsdXIgOiBbYmx1ciwgYmx1cl07XG5cdH0pO1xuXHRwcml2YXRlIGhhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vcm1hbGl6ZWRCbHVyKClbMF0gKyB0aGlzLm5vcm1hbGl6ZWRCbHVyKClbMV0gPiAwKTtcblxuXHRwcml2YXRlIHJlZmxlY3RvclBsYW5lID0gbmV3IFBsYW5lKCk7XG5cdHByaXZhdGUgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcblx0cHJpdmF0ZSByZWZsZWN0b3JXb3JsZFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0cHJpdmF0ZSBjYW1lcmFXb3JsZFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0cHJpdmF0ZSByb3RhdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdHByaXZhdGUgbG9va0F0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygwLCAwLCAtMSk7XG5cdHByaXZhdGUgY2xpcFBsYW5lID0gbmV3IFZlY3RvcjQoKTtcblx0cHJpdmF0ZSB2aWV3ID0gbmV3IFZlY3RvcjMoKTtcblx0cHJpdmF0ZSB0YXJnZXQgPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHEgPSBuZXcgVmVjdG9yNCgpO1xuXHRwcml2YXRlIHRleHR1cmVNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRwcml2YXRlIHZpcnR1YWxDYW1lcmEgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcblxuXHRwcml2YXRlIHJlZmxlY3RTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbXG5cdFx0XHRnbCxcblx0XHRcdHtcblx0XHRcdFx0cmVzb2x1dGlvbixcblx0XHRcdFx0bWluRGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRcdG1heERlcHRoVGhyZXNob2xkLFxuXHRcdFx0XHRkZXB0aFNjYWxlLFxuXHRcdFx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyxcblx0XHRcdFx0bWlycm9yLFxuXHRcdFx0XHRtaXhCbHVyLFxuXHRcdFx0XHRtaXhTdHJlbmd0aCxcblx0XHRcdFx0ZGlzdG9ydGlvbixcblx0XHRcdFx0ZGlzdG9ydGlvbk1hcCxcblx0XHRcdFx0bWl4Q29udHJhc3QsXG5cdFx0XHR9LFxuXHRcdFx0Ymx1cixcblx0XHRcdGhhc0JsdXIsXG5cdFx0XSA9IFt0aGlzLmdsKCksIHRoaXMucmVmbGVjdE9wdGlvbnMoKSwgdGhpcy5ub3JtYWxpemVkQmx1cigpLCB0aGlzLmhhc0JsdXIoKV07XG5cblx0XHRjb25zdCByZW5kZXJUYXJnZXRQYXJhbWV0ZXJzID0ge1xuXHRcdFx0bWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRtYWdGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdHR5cGU6IEhhbGZGbG9hdFR5cGUsXG5cdFx0fTtcblxuXHRcdGNvbnN0IGZibzEgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcmVuZGVyVGFyZ2V0UGFyYW1ldGVycyk7XG5cdFx0ZmJvMS5kZXB0aEJ1ZmZlciA9IHRydWU7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUgPSBuZXcgRGVwdGhUZXh0dXJlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlLmZvcm1hdCA9IERlcHRoRm9ybWF0O1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlLnR5cGUgPSBVbnNpZ25lZFNob3J0VHlwZTtcblx0XHRjb25zdCBmYm8yID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHJlbmRlclRhcmdldFBhcmFtZXRlcnMpO1xuXG5cdFx0Y29uc3QgYmx1clBhc3MgPSBuZXcgQmx1clBhc3Moe1xuXHRcdFx0Z2wsXG5cdFx0XHRyZXNvbHV0aW9uLFxuXHRcdFx0d2lkdGg6IGJsdXJbMF0sXG5cdFx0XHRoZWlnaHQ6IGJsdXJbMV0sXG5cdFx0XHRtaW5EZXB0aFRocmVzaG9sZCxcblx0XHRcdG1heERlcHRoVGhyZXNob2xkLFxuXHRcdFx0ZGVwdGhTY2FsZSxcblx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgZGVmaW5lczogTmd0QW55UmVjb3JkID0ge307XG5cblx0XHRpZiAoaGFzQmx1cikge1xuXHRcdFx0ZGVmaW5lc1snVVNFX0JMVVInXSA9ICcnO1xuXHRcdH1cblxuXHRcdGlmIChkZXB0aFNjYWxlID4gMCkge1xuXHRcdFx0ZGVmaW5lc1snVVNFX0RFUFRIJ10gPSAnJztcblx0XHR9XG5cblx0XHRpZiAoZGlzdG9ydGlvbk1hcCkge1xuXHRcdFx0ZGVmaW5lc1snVVNFX0RJU1RPUlRJT04nXSA9ICcnO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlZmxlY3RvclBhcmFtZXRlcnMgPSB7XG5cdFx0XHRtaXJyb3IsXG5cdFx0XHR0ZXh0dXJlTWF0cml4OiB0aGlzLnRleHR1cmVNYXRyaXgsXG5cdFx0XHRtaXhCbHVyLFxuXHRcdFx0dERpZmZ1c2U6IGZibzEudGV4dHVyZSxcblx0XHRcdHREZXB0aDogZmJvMS5kZXB0aFRleHR1cmUsXG5cdFx0XHR0RGlmZnVzZUJsdXI6IGZibzIudGV4dHVyZSxcblx0XHRcdGhhc0JsdXIsXG5cdFx0XHRtaXhTdHJlbmd0aCxcblx0XHRcdG1pbkRlcHRoVGhyZXNob2xkLFxuXHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRkZXB0aFNjYWxlLFxuXHRcdFx0ZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG5cdFx0XHRkaXN0b3J0aW9uLFxuXHRcdFx0ZGlzdG9ydGlvbk1hcCxcblx0XHRcdG1peENvbnRyYXN0LFxuXHRcdFx0ZGVmaW5lcyxcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHsgZmJvMSwgZmJvMiwgYmx1clBhc3MsIHJlZmxlY3RvclBhcmFtZXRlcnMgfTtcblx0fSk7XG5cblx0cHJpdmF0ZSBkZWZpbmVzS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGRlZmluZXMgPSB0aGlzLnJlZmxlY3RTdGF0ZSgpLnJlZmxlY3RvclBhcmFtZXRlcnMuZGVmaW5lcztcblx0XHRyZXR1cm4gT2JqZWN0LmVudHJpZXMoZGVmaW5lcykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHZhbHVlICE9IG51bGwgPyBgJHthY2N9ICR7a2V5fWAgOiBhY2MpLCAnJyk7XG5cdH0pO1xuXG5cdG1hdGVyaWFsID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHByZXZNYXRlcmlhbCA9IHVudHJhY2tlZCh0aGlzLm1hdGVyaWFsUmVmKT8ubmF0aXZlRWxlbWVudDtcblxuXHRcdGlmIChwcmV2TWF0ZXJpYWwpIHtcblx0XHRcdHByZXZNYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHRkZWxldGUgKHByZXZNYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRkZWxldGUgKHByZXZNYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9yZW5kZXJlcl9fJ107XG5cdFx0fVxuXG5cdFx0Ly8gdHJhY2tpbmcgZGVmaW5lcyBrZXkgc28gdGhhdCB0aGUgbWF0ZXJpYWwgaXMgcmVjcmVhdGVkIHdoZW4gdGhlIGRlZmluZXMgY2hhbmdlXG5cdFx0dGhpcy5kZWZpbmVzS2V5KCk7XG5cdFx0cmV0dXJuIG5ldyBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwoKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgeyByZWZsZWN0b3JQYXJhbWV0ZXJzIH0gPSB0aGlzLnJlZmxlY3RTdGF0ZSgpO1xuXHRcdFx0XHRhcHBseVByb3BzKG1hdGVyaWFsLCB7IC4uLnJlZmxlY3RvclBhcmFtZXRlcnMsIC4uLnRoaXMucGFyYW1ldGVycygpIH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKG1hdGVyaWFsKSB7XG5cdFx0XHRcdG1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRcdFx0ZGVsZXRlIChtYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRcdGRlbGV0ZSAobWF0ZXJpYWwgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGdsLCBzY2VuZSB9KSA9PiB7XG5cdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IHBhcmVudCA9IFJlZmxlY3QuZ2V0KG1hdGVyaWFsLCAncGFyZW50JykgPz8gdW50cmFja2VkKGxvY2FsU3RhdGUucGFyZW50KTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRcdGNvbnN0IHsgZmJvMSwgZmJvMiwgYmx1clBhc3MgfSA9IHRoaXMucmVmbGVjdFN0YXRlKCk7XG5cdFx0XHRjb25zdCBoYXNCbHVyID0gdGhpcy5oYXNCbHVyKCk7XG5cblx0XHRcdHBhcmVudC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRjb25zdCBjdXJyZW50WHJFbmFibGVkID0gZ2wueHIuZW5hYmxlZDtcblx0XHRcdGNvbnN0IGN1cnJlbnRTaGFkb3dBdXRvVXBkYXRlID0gZ2wuc2hhZG93TWFwLmF1dG9VcGRhdGU7XG5cdFx0XHR0aGlzLmJlZm9yZVJlbmRlcigpO1xuXHRcdFx0Z2wueHIuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0Z2wuc2hhZG93TWFwLmF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8xKTtcblx0XHRcdGdsLnN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayh0cnVlKTtcblx0XHRcdGlmICghZ2wuYXV0b0NsZWFyKSBnbC5jbGVhcigpO1xuXHRcdFx0Z2wucmVuZGVyKHNjZW5lLCB0aGlzLnZpcnR1YWxDYW1lcmEpO1xuXHRcdFx0aWYgKGhhc0JsdXIpIGJsdXJQYXNzLnJlbmRlcihnbCwgZmJvMSwgZmJvMik7XG5cdFx0XHRnbC54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcblx0XHRcdGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gY3VycmVudFNoYWRvd0F1dG9VcGRhdGU7XG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGJlZm9yZVJlbmRlcigpIHtcblx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRpZiAoIW1hdGVyaWFsKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShtYXRlcmlhbCk7XG5cdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXJlbnQgPSBSZWZsZWN0LmdldChtYXRlcmlhbCwgJ3BhcmVudCcpID8/IHVudHJhY2tlZChsb2NhbFN0YXRlLnBhcmVudCk7XG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHsgY2FtZXJhIH0gPSB0aGlzLnN0b3JlLnNuYXBzaG90O1xuXHRcdGNvbnN0IHsgcmVmbGVjdG9yT2Zmc2V0IH0gPSB1bnRyYWNrZWQodGhpcy5yZWZsZWN0T3B0aW9ucyk7XG5cblx0XHR0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMucm90YXRpb25NYXRyaXguZXh0cmFjdFJvdGF0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5ub3JtYWwuc2V0KDAsIDAsIDEpO1xuXHRcdHRoaXMubm9ybWFsLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsLCByZWZsZWN0b3JPZmZzZXQpO1xuXHRcdHRoaXMudmlldy5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcblx0XHQvLyBBdm9pZCByZW5kZXJpbmcgd2hlbiByZWZsZWN0b3IgaXMgZmFjaW5nIGF3YXlcblx0XHRpZiAodGhpcy52aWV3LmRvdCh0aGlzLm5vcm1hbCkgPiAwKSByZXR1cm47XG5cdFx0dGhpcy52aWV3LnJlZmxlY3QodGhpcy5ub3JtYWwpLm5lZ2F0ZSgpO1xuXHRcdHRoaXMudmlldy5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnJvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMubG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFkZCh0aGlzLmNhbWVyYVdvcmxkUG9zaXRpb24pO1xuXHRcdHRoaXMudGFyZ2V0LnN1YlZlY3RvcnModGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLmxvb2tBdFBvc2l0aW9uKTtcblx0XHR0aGlzLnRhcmdldC5yZWZsZWN0KHRoaXMubm9ybWFsKS5uZWdhdGUoKTtcblx0XHR0aGlzLnRhcmdldC5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLnZpZXcpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cC5zZXQoMCwgMSwgMCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEudXAucmVmbGVjdCh0aGlzLm5vcm1hbCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmxvb2tBdCh0aGlzLnRhcmdldCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmZhciA9IGNhbWVyYS5mYXI7IC8vIFVzZWQgaW4gV2ViR0xCYWNrZ3JvdW5kXG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0Ly8gVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeFxuXHRcdHRoaXMudGV4dHVyZU1hdHJpeC5zZXQoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC4wLCAwLjUsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcblx0XHR0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkodGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdHRoaXMudGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLnZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkocGFyZW50Lm1hdHJpeFdvcmxkKTtcblx0XHQvLyBOb3cgdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IHdpdGggbmV3IGNsaXAgcGxhbmUsIGltcGxlbWVudGluZyBjb2RlIGZyb206IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2NvZGUvb2JsaXF1ZS5odG1sXG5cdFx0Ly8gUGFwZXIgZXhwbGFpbmluZyB0aGlzIHRlY2huaXF1ZTogaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vbGVuZ3llbC9MZW5neWVsLU9ibGlxdWUucGRmXG5cdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLm5vcm1hbCwgdGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLmFwcGx5TWF0cml4NCh0aGlzLnZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLmNsaXBQbGFuZS5zZXQoXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC54LFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueSxcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLnosXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLmNvbnN0YW50LFxuXHRcdCk7XG5cdFx0Y29uc3QgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4O1xuXHRcdHRoaXMucS54ID0gKE1hdGguc2lnbih0aGlzLmNsaXBQbGFuZS54KSArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOF0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1swXTtcblx0XHR0aGlzLnEueSA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueSkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzldKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNV07XG5cdFx0dGhpcy5xLnogPSAtMS4wO1xuXHRcdHRoaXMucS53ID0gKDEuMCArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTBdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTRdO1xuXHRcdC8vIENhbGN1bGF0ZSB0aGUgc2NhbGVkIHBsYW5lIHZlY3RvclxuXHRcdHRoaXMuY2xpcFBsYW5lLm11bHRpcGx5U2NhbGFyKDIuMCAvIHRoaXMuY2xpcFBsYW5lLmRvdCh0aGlzLnEpKTtcblx0XHQvLyBSZXBsYWNpbmcgdGhlIHRoaXJkIHJvdyBvZiB0aGUgcHJvamVjdGlvbiBtYXRyaXhcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzJdID0gdGhpcy5jbGlwUGxhbmUueDtcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzZdID0gdGhpcy5jbGlwUGxhbmUueTtcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSA9IHRoaXMuY2xpcFBsYW5lLnogKyAxLjA7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxNF0gPSB0aGlzLmNsaXBQbGFuZS53O1xuXHR9XG59XG4iXX0=