angular-three 0.0.2 → 0.0.3

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 (388) hide show
  1. package/attributes/README.md +3 -0
  2. package/attributes/index.d.ts +22 -0
  3. package/attributes/lib/buffer-attribute/buffer-attribute.d.ts +8 -0
  4. package/attributes/lib/color-attribute/color-attribute.d.ts +8 -0
  5. package/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.d.ts +8 -0
  6. package/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.d.ts +8 -0
  7. package/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.d.ts +8 -0
  8. package/attributes/lib/fog-attribute/fog-attribute.d.ts +8 -0
  9. package/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.d.ts +8 -0
  10. package/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.d.ts +8 -0
  11. package/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.d.ts +8 -0
  12. package/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.d.ts +8 -0
  13. package/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.d.ts +8 -0
  14. package/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.d.ts +8 -0
  15. package/attributes/lib/matrix3-attribute/matrix3-attribute.d.ts +8 -0
  16. package/attributes/lib/matrix4-attribute/matrix4-attribute.d.ts +8 -0
  17. package/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.d.ts +8 -0
  18. package/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.d.ts +8 -0
  19. package/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.d.ts +8 -0
  20. package/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.d.ts +8 -0
  21. package/attributes/lib/value-attribute/value-attribute.d.ts +8 -0
  22. package/attributes/lib/vector2-attribute/vector2-attribute.d.ts +8 -0
  23. package/attributes/lib/vector3-attribute/vector3-attribute.d.ts +8 -0
  24. package/attributes/lib/vector4-attribute/vector4-attribute.d.ts +8 -0
  25. package/audios/README.md +3 -0
  26. package/audios/index.d.ts +3 -0
  27. package/audios/lib/audio/audio.d.ts +49 -0
  28. package/audios/lib/audio-listener/audio-listener.d.ts +35 -0
  29. package/audios/lib/positional-audio/positional-audio.d.ts +49 -0
  30. package/cameras/README.md +3 -0
  31. package/cameras/index.d.ts +5 -0
  32. package/cameras/lib/array-camera/array-camera.d.ts +56 -0
  33. package/cameras/lib/cube-camera/cube-camera.d.ts +36 -0
  34. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +54 -0
  35. package/cameras/lib/perspective-camera/perspective-camera.d.ts +55 -0
  36. package/cameras/lib/stereo-camera/stereo-camera.d.ts +42 -0
  37. package/esm2020/attributes/angular-three-attributes.mjs +5 -0
  38. package/esm2020/attributes/index.mjs +24 -0
  39. package/esm2020/attributes/lib/buffer-attribute/buffer-attribute.mjs +25 -0
  40. package/esm2020/attributes/lib/color-attribute/color-attribute.mjs +25 -0
  41. package/esm2020/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.mjs +25 -0
  42. package/esm2020/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.mjs +25 -0
  43. package/esm2020/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.mjs +25 -0
  44. package/esm2020/attributes/lib/fog-attribute/fog-attribute.mjs +25 -0
  45. package/esm2020/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.mjs +25 -0
  46. package/esm2020/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.mjs +25 -0
  47. package/esm2020/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.mjs +25 -0
  48. package/esm2020/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.mjs +25 -0
  49. package/esm2020/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.mjs +25 -0
  50. package/esm2020/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.mjs +29 -0
  51. package/esm2020/attributes/lib/matrix3-attribute/matrix3-attribute.mjs +25 -0
  52. package/esm2020/attributes/lib/matrix4-attribute/matrix4-attribute.mjs +25 -0
  53. package/esm2020/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.mjs +25 -0
  54. package/esm2020/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.mjs +25 -0
  55. package/esm2020/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.mjs +25 -0
  56. package/esm2020/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.mjs +25 -0
  57. package/esm2020/attributes/lib/value-attribute/value-attribute.mjs +27 -0
  58. package/esm2020/attributes/lib/vector2-attribute/vector2-attribute.mjs +25 -0
  59. package/esm2020/attributes/lib/vector3-attribute/vector3-attribute.mjs +25 -0
  60. package/esm2020/attributes/lib/vector4-attribute/vector4-attribute.mjs +25 -0
  61. package/esm2020/audios/angular-three-audios.mjs +5 -0
  62. package/esm2020/audios/index.mjs +5 -0
  63. package/esm2020/audios/lib/audio/audio.mjs +68 -0
  64. package/esm2020/audios/lib/audio-listener/audio-listener.mjs +65 -0
  65. package/esm2020/audios/lib/positional-audio/positional-audio.mjs +68 -0
  66. package/esm2020/cameras/angular-three-cameras.mjs +5 -0
  67. package/esm2020/cameras/index.mjs +7 -0
  68. package/esm2020/cameras/lib/array-camera/array-camera.mjs +67 -0
  69. package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +55 -0
  70. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +65 -0
  71. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +66 -0
  72. package/esm2020/cameras/lib/stereo-camera/stereo-camera.mjs +61 -0
  73. package/esm2020/geometries/angular-three-geometries.mjs +5 -0
  74. package/esm2020/geometries/index.mjs +25 -0
  75. package/esm2020/geometries/lib/box-geometry/box-geometry.mjs +25 -0
  76. package/esm2020/geometries/lib/buffer-geometry/buffer-geometry.mjs +25 -0
  77. package/esm2020/geometries/lib/capsule-geometry/capsule-geometry.mjs +25 -0
  78. package/esm2020/geometries/lib/circle-geometry/circle-geometry.mjs +25 -0
  79. package/esm2020/geometries/lib/cone-geometry/cone-geometry.mjs +25 -0
  80. package/esm2020/geometries/lib/cylinder-geometry/cylinder-geometry.mjs +25 -0
  81. package/esm2020/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.mjs +25 -0
  82. package/esm2020/geometries/lib/edges-geometry/edges-geometry.mjs +25 -0
  83. package/esm2020/geometries/lib/extrude-geometry/extrude-geometry.mjs +25 -0
  84. package/esm2020/geometries/lib/icosahedron-geometry/icosahedron-geometry.mjs +25 -0
  85. package/esm2020/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.mjs +25 -0
  86. package/esm2020/geometries/lib/lathe-geometry/lathe-geometry.mjs +25 -0
  87. package/esm2020/geometries/lib/octahedron-geometry/octahedron-geometry.mjs +25 -0
  88. package/esm2020/geometries/lib/plane-geometry/plane-geometry.mjs +25 -0
  89. package/esm2020/geometries/lib/polyhedron-geometry/polyhedron-geometry.mjs +25 -0
  90. package/esm2020/geometries/lib/ring-geometry/ring-geometry.mjs +25 -0
  91. package/esm2020/geometries/lib/shape-geometry/shape-geometry.mjs +25 -0
  92. package/esm2020/geometries/lib/sphere-geometry/sphere-geometry.mjs +25 -0
  93. package/esm2020/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.mjs +25 -0
  94. package/esm2020/geometries/lib/torus-geometry/torus-geometry.mjs +25 -0
  95. package/esm2020/geometries/lib/torus-knot-geometry/torus-knot-geometry.mjs +25 -0
  96. package/esm2020/geometries/lib/tube-geometry/tube-geometry.mjs +25 -0
  97. package/esm2020/geometries/lib/wireframe-geometry/wireframe-geometry.mjs +25 -0
  98. package/esm2020/helpers/angular-three-helpers.mjs +5 -0
  99. package/esm2020/helpers/index.mjs +15 -0
  100. package/esm2020/helpers/lib/arrow-helper/arrow-helper.mjs +25 -0
  101. package/esm2020/helpers/lib/axes-helper/axes-helper.mjs +25 -0
  102. package/esm2020/helpers/lib/box-helper/box-helper.mjs +35 -0
  103. package/esm2020/helpers/lib/box3-helper/box3-helper.mjs +35 -0
  104. package/esm2020/helpers/lib/camera-helper/camera-helper.mjs +35 -0
  105. package/esm2020/helpers/lib/directional-light-helper/directional-light-helper.mjs +35 -0
  106. package/esm2020/helpers/lib/grid-helper/grid-helper.mjs +25 -0
  107. package/esm2020/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.mjs +35 -0
  108. package/esm2020/helpers/lib/plane-helper/plane-helper.mjs +35 -0
  109. package/esm2020/helpers/lib/point-light-helper/point-light-helper.mjs +35 -0
  110. package/esm2020/helpers/lib/polar-grid-helper/polar-grid-helper.mjs +25 -0
  111. package/esm2020/helpers/lib/skeleton-helper/skeleton-helper.mjs +35 -0
  112. package/esm2020/helpers/lib/spot-light-helper/spot-light-helper.mjs +35 -0
  113. package/esm2020/index.mjs +12 -2
  114. package/esm2020/lib/canvas.mjs +227 -0
  115. package/esm2020/lib/di/resize.mjs +19 -0
  116. package/esm2020/lib/di/window.mjs +13 -0
  117. package/esm2020/lib/directives/args.mjs +30 -0
  118. package/esm2020/lib/events.mjs +53 -0
  119. package/esm2020/lib/instance.mjs +358 -0
  120. package/esm2020/lib/ref.mjs +15 -0
  121. package/esm2020/lib/services/loader.mjs +45 -0
  122. package/esm2020/lib/services/resize.mjs +127 -0
  123. package/esm2020/lib/stores/component-store.mjs +137 -0
  124. package/esm2020/lib/stores/store.mjs +433 -0
  125. package/esm2020/lib/types.mjs +2 -0
  126. package/esm2020/lib/utils/apply-props.mjs +135 -0
  127. package/esm2020/lib/utils/build-graph.mjs +15 -0
  128. package/esm2020/lib/utils/camera.mjs +28 -0
  129. package/esm2020/lib/utils/capitalize.mjs +4 -0
  130. package/esm2020/lib/utils/check-update.mjs +22 -0
  131. package/esm2020/lib/utils/events.mjs +353 -0
  132. package/esm2020/lib/utils/get-instance-local-state.mjs +6 -0
  133. package/esm2020/lib/utils/inject.mjs +18 -0
  134. package/esm2020/lib/utils/instance.mjs +35 -0
  135. package/esm2020/lib/utils/is.mjs +54 -0
  136. package/esm2020/lib/utils/loop.mjs +139 -0
  137. package/esm2020/lib/utils/make.mjs +30 -0
  138. package/esm2020/lib/utils/mutate.mjs +24 -0
  139. package/esm2020/lib/utils/proxy.mjs +99 -0
  140. package/esm2020/lib/utils/renderer.mjs +15 -0
  141. package/esm2020/lights/angular-three-lights.mjs +5 -0
  142. package/esm2020/lights/index.mjs +11 -0
  143. package/esm2020/lights/lib/ambient-light/ambient-light.mjs +68 -0
  144. package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +69 -0
  145. package/esm2020/lights/lib/directional-light/directional-light.mjs +69 -0
  146. package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +70 -0
  147. package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +71 -0
  148. package/esm2020/lights/lib/light-probe/light-probe.mjs +69 -0
  149. package/esm2020/lights/lib/point-light/point-light.mjs +71 -0
  150. package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +71 -0
  151. package/esm2020/lights/lib/spot-light/spot-light.mjs +74 -0
  152. package/esm2020/materials/angular-three-materials.mjs +5 -0
  153. package/esm2020/materials/index.mjs +19 -0
  154. package/esm2020/materials/lib/line-basic-material/line-basic-material.mjs +76 -0
  155. package/esm2020/materials/lib/line-dashed-material/line-dashed-material.mjs +79 -0
  156. package/esm2020/materials/lib/mesh-basic-material/mesh-basic-material.mjs +88 -0
  157. package/esm2020/materials/lib/mesh-depth-material/mesh-depth-material.mjs +79 -0
  158. package/esm2020/materials/lib/mesh-distance-material/mesh-distance-material.mjs +79 -0
  159. package/esm2020/materials/lib/mesh-lambert-material/mesh-lambert-material.mjs +99 -0
  160. package/esm2020/materials/lib/mesh-matcap-material/mesh-matcap-material.mjs +85 -0
  161. package/esm2020/materials/lib/mesh-normal-material/mesh-normal-material.mjs +82 -0
  162. package/esm2020/materials/lib/mesh-phong-material/mesh-phong-material.mjs +102 -0
  163. package/esm2020/materials/lib/mesh-physical-material/mesh-physical-material.mjs +118 -0
  164. package/esm2020/materials/lib/mesh-standard-material/mesh-standard-material.mjs +99 -0
  165. package/esm2020/materials/lib/mesh-toon-material/mesh-toon-material.mjs +95 -0
  166. package/esm2020/materials/lib/points-material/points-material.mjs +77 -0
  167. package/esm2020/materials/lib/raw-shader-material/raw-shader-material.mjs +82 -0
  168. package/esm2020/materials/lib/shader-material/shader-material.mjs +82 -0
  169. package/esm2020/materials/lib/shadow-material/shadow-material.mjs +73 -0
  170. package/esm2020/materials/lib/sprite-material/sprite-material.mjs +77 -0
  171. package/esm2020/objects/angular-three-objects.mjs +5 -0
  172. package/esm2020/objects/index.mjs +14 -0
  173. package/esm2020/objects/lib/bone/bone.mjs +54 -0
  174. package/esm2020/objects/lib/group/group.mjs +54 -0
  175. package/esm2020/objects/lib/instanced-mesh/instanced-mesh.mjs +63 -0
  176. package/esm2020/objects/lib/line/line.mjs +58 -0
  177. package/esm2020/objects/lib/line-loop/line-loop.mjs +58 -0
  178. package/esm2020/objects/lib/line-segments/line-segments.mjs +58 -0
  179. package/esm2020/objects/lib/lod/lod.mjs +57 -0
  180. package/esm2020/objects/lib/mesh/mesh.mjs +58 -0
  181. package/esm2020/objects/lib/points/points.mjs +58 -0
  182. package/esm2020/objects/lib/skeleton/skeleton.mjs +49 -0
  183. package/esm2020/objects/lib/skinned-mesh/skinned-mesh.mjs +62 -0
  184. package/esm2020/objects/lib/sprite/sprite.mjs +57 -0
  185. package/esm2020/primitives/angular-three-primitives.mjs +5 -0
  186. package/esm2020/primitives/index.mjs +3 -0
  187. package/esm2020/primitives/lib/object-primitive/object-primitive.mjs +54 -0
  188. package/esm2020/primitives/lib/primitive/primitive.mjs +37 -0
  189. package/esm2020/stats/angular-three-stats.mjs +5 -0
  190. package/esm2020/stats/index.mjs +2 -0
  191. package/esm2020/stats/lib/stats/stats.mjs +54 -0
  192. package/esm2020/textures/angular-three-textures.mjs +5 -0
  193. package/esm2020/textures/index.mjs +12 -0
  194. package/esm2020/textures/lib/canvas-texture/canvas-texture.mjs +25 -0
  195. package/esm2020/textures/lib/compressed-array-texture/compressed-array-texture.mjs +25 -0
  196. package/esm2020/textures/lib/compressed-texture/compressed-texture.mjs +25 -0
  197. package/esm2020/textures/lib/cube-texture/cube-texture.mjs +25 -0
  198. package/esm2020/textures/lib/data-array-texture/data-array-texture.mjs +25 -0
  199. package/esm2020/textures/lib/data-texture/data-texture.mjs +25 -0
  200. package/esm2020/textures/lib/data3-dtexture/data3-dtexture.mjs +25 -0
  201. package/esm2020/textures/lib/depth-texture/depth-texture.mjs +25 -0
  202. package/esm2020/textures/lib/framebuffer-texture/framebuffer-texture.mjs +25 -0
  203. package/esm2020/textures/lib/video-texture/video-texture.mjs +25 -0
  204. package/fesm2015/angular-three-attributes.mjs +462 -0
  205. package/fesm2015/angular-three-attributes.mjs.map +1 -0
  206. package/fesm2015/angular-three-audios.mjs +200 -0
  207. package/fesm2015/angular-three-audios.mjs.map +1 -0
  208. package/fesm2015/angular-three-cameras.mjs +304 -0
  209. package/fesm2015/angular-three-cameras.mjs.map +1 -0
  210. package/fesm2015/angular-three-geometries.mjs +475 -0
  211. package/fesm2015/angular-three-geometries.mjs.map +1 -0
  212. package/fesm2015/angular-three-helpers.mjs +365 -0
  213. package/fesm2015/angular-three-helpers.mjs.map +1 -0
  214. package/fesm2015/angular-three-lights.mjs +602 -0
  215. package/fesm2015/angular-three-lights.mjs.map +1 -0
  216. package/fesm2015/angular-three-materials.mjs +1402 -0
  217. package/fesm2015/angular-three-materials.mjs.map +1 -0
  218. package/fesm2015/angular-three-objects.mjs +641 -0
  219. package/fesm2015/angular-three-objects.mjs.map +1 -0
  220. package/fesm2015/angular-three-primitives.mjs +95 -0
  221. package/fesm2015/angular-three-primitives.mjs.map +1 -0
  222. package/fesm2015/angular-three-stats.mjs +62 -0
  223. package/fesm2015/angular-three-stats.mjs.map +1 -0
  224. package/fesm2015/angular-three-textures.mjs +215 -0
  225. package/fesm2015/angular-three-textures.mjs.map +1 -0
  226. package/fesm2015/angular-three.mjs +2327 -10
  227. package/fesm2015/angular-three.mjs.map +1 -1
  228. package/fesm2020/angular-three-attributes.mjs +462 -0
  229. package/fesm2020/angular-three-attributes.mjs.map +1 -0
  230. package/fesm2020/angular-three-audios.mjs +200 -0
  231. package/fesm2020/angular-three-audios.mjs.map +1 -0
  232. package/fesm2020/angular-three-cameras.mjs +304 -0
  233. package/fesm2020/angular-three-cameras.mjs.map +1 -0
  234. package/fesm2020/angular-three-geometries.mjs +475 -0
  235. package/fesm2020/angular-three-geometries.mjs.map +1 -0
  236. package/fesm2020/angular-three-helpers.mjs +365 -0
  237. package/fesm2020/angular-three-helpers.mjs.map +1 -0
  238. package/fesm2020/angular-three-lights.mjs +602 -0
  239. package/fesm2020/angular-three-lights.mjs.map +1 -0
  240. package/fesm2020/angular-three-materials.mjs +1402 -0
  241. package/fesm2020/angular-three-materials.mjs.map +1 -0
  242. package/fesm2020/angular-three-objects.mjs +641 -0
  243. package/fesm2020/angular-three-objects.mjs.map +1 -0
  244. package/fesm2020/angular-three-primitives.mjs +95 -0
  245. package/fesm2020/angular-three-primitives.mjs.map +1 -0
  246. package/fesm2020/angular-three-stats.mjs +62 -0
  247. package/fesm2020/angular-three-stats.mjs.map +1 -0
  248. package/fesm2020/angular-three-textures.mjs +215 -0
  249. package/fesm2020/angular-three-textures.mjs.map +1 -0
  250. package/fesm2020/angular-three.mjs +2344 -10
  251. package/fesm2020/angular-three.mjs.map +1 -1
  252. package/geometries/README.md +3 -0
  253. package/geometries/index.d.ts +23 -0
  254. package/geometries/lib/box-geometry/box-geometry.d.ts +8 -0
  255. package/geometries/lib/buffer-geometry/buffer-geometry.d.ts +8 -0
  256. package/geometries/lib/capsule-geometry/capsule-geometry.d.ts +8 -0
  257. package/geometries/lib/circle-geometry/circle-geometry.d.ts +8 -0
  258. package/geometries/lib/cone-geometry/cone-geometry.d.ts +8 -0
  259. package/geometries/lib/cylinder-geometry/cylinder-geometry.d.ts +8 -0
  260. package/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.d.ts +8 -0
  261. package/geometries/lib/edges-geometry/edges-geometry.d.ts +8 -0
  262. package/geometries/lib/extrude-geometry/extrude-geometry.d.ts +8 -0
  263. package/geometries/lib/icosahedron-geometry/icosahedron-geometry.d.ts +8 -0
  264. package/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.d.ts +8 -0
  265. package/geometries/lib/lathe-geometry/lathe-geometry.d.ts +8 -0
  266. package/geometries/lib/octahedron-geometry/octahedron-geometry.d.ts +8 -0
  267. package/geometries/lib/plane-geometry/plane-geometry.d.ts +8 -0
  268. package/geometries/lib/polyhedron-geometry/polyhedron-geometry.d.ts +8 -0
  269. package/geometries/lib/ring-geometry/ring-geometry.d.ts +8 -0
  270. package/geometries/lib/shape-geometry/shape-geometry.d.ts +8 -0
  271. package/geometries/lib/sphere-geometry/sphere-geometry.d.ts +8 -0
  272. package/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.d.ts +8 -0
  273. package/geometries/lib/torus-geometry/torus-geometry.d.ts +8 -0
  274. package/geometries/lib/torus-knot-geometry/torus-knot-geometry.d.ts +8 -0
  275. package/geometries/lib/tube-geometry/tube-geometry.d.ts +8 -0
  276. package/geometries/lib/wireframe-geometry/wireframe-geometry.d.ts +8 -0
  277. package/helpers/README.md +3 -0
  278. package/helpers/index.d.ts +13 -0
  279. package/helpers/lib/arrow-helper/arrow-helper.d.ts +8 -0
  280. package/helpers/lib/axes-helper/axes-helper.d.ts +8 -0
  281. package/helpers/lib/box-helper/box-helper.d.ts +8 -0
  282. package/helpers/lib/box3-helper/box3-helper.d.ts +8 -0
  283. package/helpers/lib/camera-helper/camera-helper.d.ts +8 -0
  284. package/helpers/lib/directional-light-helper/directional-light-helper.d.ts +8 -0
  285. package/helpers/lib/grid-helper/grid-helper.d.ts +8 -0
  286. package/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.d.ts +8 -0
  287. package/helpers/lib/plane-helper/plane-helper.d.ts +8 -0
  288. package/helpers/lib/point-light-helper/point-light-helper.d.ts +8 -0
  289. package/helpers/lib/polar-grid-helper/polar-grid-helper.d.ts +8 -0
  290. package/helpers/lib/skeleton-helper/skeleton-helper.d.ts +8 -0
  291. package/helpers/lib/spot-light-helper/spot-light-helper.d.ts +8 -0
  292. package/index.d.ts +11 -1
  293. package/lib/canvas.d.ts +46 -0
  294. package/lib/di/resize.d.ts +12 -0
  295. package/lib/di/window.d.ts +1 -0
  296. package/lib/directives/args.d.ts +19 -0
  297. package/lib/events.d.ts +2 -0
  298. package/lib/instance.d.ts +81 -0
  299. package/lib/ref.d.ts +5 -0
  300. package/lib/services/loader.d.ts +11 -0
  301. package/lib/services/resize.d.ts +19 -0
  302. package/lib/stores/component-store.d.ts +69 -0
  303. package/lib/stores/store.d.ts +32 -0
  304. package/lib/types.d.ts +358 -0
  305. package/lib/utils/apply-props.d.ts +6 -0
  306. package/lib/utils/build-graph.d.ts +3 -0
  307. package/lib/utils/camera.d.ts +4 -0
  308. package/lib/utils/capitalize.d.ts +1 -0
  309. package/lib/utils/check-update.d.ts +2 -0
  310. package/lib/utils/events.d.ts +6 -0
  311. package/lib/utils/get-instance-local-state.d.ts +2 -0
  312. package/lib/utils/inject.d.ts +9 -0
  313. package/lib/utils/instance.d.ts +4 -0
  314. package/lib/utils/is.d.ts +21 -0
  315. package/lib/utils/loop.d.ts +32 -0
  316. package/lib/utils/make.d.ts +4 -0
  317. package/lib/utils/mutate.d.ts +2 -0
  318. package/lib/utils/proxy.d.ts +7 -0
  319. package/lib/utils/renderer.d.ts +3 -0
  320. package/lights/README.md +3 -0
  321. package/lights/index.d.ts +9 -0
  322. package/lights/lib/ambient-light/ambient-light.d.ts +49 -0
  323. package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +50 -0
  324. package/lights/lib/directional-light/directional-light.d.ts +50 -0
  325. package/lights/lib/hemisphere-light/hemisphere-light.d.ts +51 -0
  326. package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +52 -0
  327. package/lights/lib/light-probe/light-probe.d.ts +50 -0
  328. package/lights/lib/point-light/point-light.d.ts +52 -0
  329. package/lights/lib/rect-area-light/rect-area-light.d.ts +52 -0
  330. package/lights/lib/spot-light/spot-light.d.ts +55 -0
  331. package/materials/README.md +3 -0
  332. package/materials/index.d.ts +17 -0
  333. package/materials/lib/line-basic-material/line-basic-material.d.ts +55 -0
  334. package/materials/lib/line-dashed-material/line-dashed-material.d.ts +58 -0
  335. package/materials/lib/mesh-basic-material/mesh-basic-material.d.ts +67 -0
  336. package/materials/lib/mesh-depth-material/mesh-depth-material.d.ts +58 -0
  337. package/materials/lib/mesh-distance-material/mesh-distance-material.d.ts +58 -0
  338. package/materials/lib/mesh-lambert-material/mesh-lambert-material.d.ts +78 -0
  339. package/materials/lib/mesh-matcap-material/mesh-matcap-material.d.ts +64 -0
  340. package/materials/lib/mesh-normal-material/mesh-normal-material.d.ts +61 -0
  341. package/materials/lib/mesh-phong-material/mesh-phong-material.d.ts +81 -0
  342. package/materials/lib/mesh-physical-material/mesh-physical-material.d.ts +97 -0
  343. package/materials/lib/mesh-standard-material/mesh-standard-material.d.ts +78 -0
  344. package/materials/lib/mesh-toon-material/mesh-toon-material.d.ts +74 -0
  345. package/materials/lib/points-material/points-material.d.ts +56 -0
  346. package/materials/lib/raw-shader-material/raw-shader-material.d.ts +68 -0
  347. package/materials/lib/shader-material/shader-material.d.ts +68 -0
  348. package/materials/lib/shadow-material/shadow-material.d.ts +52 -0
  349. package/materials/lib/sprite-material/sprite-material.d.ts +56 -0
  350. package/objects/README.md +3 -0
  351. package/objects/index.d.ts +12 -0
  352. package/objects/lib/bone/bone.d.ts +35 -0
  353. package/objects/lib/group/group.d.ts +35 -0
  354. package/objects/lib/instanced-mesh/instanced-mesh.d.ts +44 -0
  355. package/objects/lib/line/line.d.ts +41 -0
  356. package/objects/lib/line-loop/line-loop.d.ts +41 -0
  357. package/objects/lib/line-segments/line-segments.d.ts +41 -0
  358. package/objects/lib/lod/lod.d.ts +41 -0
  359. package/objects/lib/mesh/mesh.d.ts +41 -0
  360. package/objects/lib/points/points.d.ts +41 -0
  361. package/objects/lib/skeleton/skeleton.d.ts +17 -0
  362. package/objects/lib/skinned-mesh/skinned-mesh.d.ts +45 -0
  363. package/objects/lib/sprite/sprite.d.ts +38 -0
  364. package/package.json +93 -2
  365. package/primitives/README.md +3 -0
  366. package/primitives/index.d.ts +2 -0
  367. package/primitives/lib/object-primitive/object-primitive.d.ts +35 -0
  368. package/primitives/lib/primitive/primitive.d.ts +10 -0
  369. package/schematics/src/generators/init/generator.d.ts +1 -1
  370. package/schematics/src/generators/init/generator.js +4 -4
  371. package/schematics/src/generators/init/generator.js.map +1 -1
  372. package/stats/README.md +3 -0
  373. package/stats/index.d.ts +1 -0
  374. package/stats/lib/stats/stats.d.ts +16 -0
  375. package/textures/README.md +3 -0
  376. package/textures/index.d.ts +10 -0
  377. package/textures/lib/canvas-texture/canvas-texture.d.ts +8 -0
  378. package/textures/lib/compressed-array-texture/compressed-array-texture.d.ts +8 -0
  379. package/textures/lib/compressed-texture/compressed-texture.d.ts +8 -0
  380. package/textures/lib/cube-texture/cube-texture.d.ts +8 -0
  381. package/textures/lib/data-array-texture/data-array-texture.d.ts +8 -0
  382. package/textures/lib/data-texture/data-texture.d.ts +8 -0
  383. package/textures/lib/data3-dtexture/data3-dtexture.d.ts +8 -0
  384. package/textures/lib/depth-texture/depth-texture.d.ts +8 -0
  385. package/textures/lib/framebuffer-texture/framebuffer-texture.d.ts +8 -0
  386. package/textures/lib/video-texture/video-texture.d.ts +8 -0
  387. package/esm2020/lib/angular-three.module.mjs +0 -15
  388. package/lib/angular-three.module.d.ts +0 -7
@@ -0,0 +1,433 @@
1
+ import { inject, Injectable, NgZone } from '@angular/core';
2
+ import { filter, tap } from 'rxjs';
3
+ import * as THREE from 'three';
4
+ import { injectWindow } from '../di/window';
5
+ import { NgtRef } from '../ref';
6
+ import { applyProps } from '../utils/apply-props';
7
+ import { createDefaultCamera, updateCamera } from '../utils/camera';
8
+ import { checkNeedsUpdate } from '../utils/check-update';
9
+ import { prepare } from '../utils/instance';
10
+ import { is } from '../utils/is';
11
+ import { createLoop } from '../utils/loop';
12
+ import { makeDpr } from '../utils/make';
13
+ import { createRenderer } from '../utils/renderer';
14
+ import { defaultProjector, NgtComponentStore, tapEffect } from './component-store';
15
+ import * as i0 from "@angular/core";
16
+ export const rootStateMap = new Map();
17
+ const { invalidate, advance } = createLoop(rootStateMap);
18
+ const shallowLoose = { objects: 'shallow', strict: false };
19
+ export class NgtStore extends NgtComponentStore {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.parentStore = inject(NgtStore, { optional: true, skipSelf: true });
23
+ this.zone = inject(NgZone);
24
+ this.window = injectWindow();
25
+ this.position = new THREE.Vector3();
26
+ this.defaultTarget = new THREE.Vector3();
27
+ this.tempTarget = new THREE.Vector3();
28
+ this.resize = this.effect(($) => {
29
+ let oldSize = this.read((s) => s.size);
30
+ let oldDpr = this.read((s) => s.viewport?.dpr);
31
+ return $.pipe(tap(() => {
32
+ const { camera, size, viewport, gl } = this.read();
33
+ // Resize camera and renderer on changes to size and pixelratio
34
+ if (size !== oldSize || viewport.dpr !== oldDpr) {
35
+ oldSize = size;
36
+ oldDpr = viewport.dpr;
37
+ // Update camera & renderer
38
+ updateCamera(camera, size);
39
+ gl.setPixelRatio(viewport.dpr);
40
+ gl.setSize(size.width, size.height, size.updateStyle);
41
+ }
42
+ }));
43
+ });
44
+ this.invalidate = this.effect(tap(() => void this.read((s) => s.invalidate)()));
45
+ this.isInit = false;
46
+ this.isConfigured = false;
47
+ this.addInteraction = (interaction) => {
48
+ this.write((state) => ({
49
+ ...state,
50
+ internal: {
51
+ ...state.internal,
52
+ interaction: [...state.internal.interaction, interaction],
53
+ },
54
+ }));
55
+ };
56
+ this.removeInteraction = (uuid) => {
57
+ this.write((state) => ({
58
+ ...state,
59
+ internal: {
60
+ ...state.internal,
61
+ interaction: state.internal.interaction.filter((interaction) => interaction.uuid !== uuid),
62
+ },
63
+ }));
64
+ };
65
+ this.setPerformanceCurrent = (current) => {
66
+ this.write((s) => ({ performance: { ...s.performance, current } }));
67
+ };
68
+ this.setEvents = (events) => {
69
+ this.write((s) => ({ events: { ...s.events, ...events } }));
70
+ };
71
+ this.setSize = (width, height, top, left, updateStyle) => {
72
+ const camera = this.read((s) => s.camera);
73
+ const size = { width, height, top: top || 0, left: left || 0, updateStyle };
74
+ this.write((state) => ({
75
+ size,
76
+ viewport: {
77
+ ...state.viewport,
78
+ ...this.getCurrentViewport(camera, this.defaultTarget, size),
79
+ },
80
+ }));
81
+ };
82
+ this.setCamera = (camera) => {
83
+ this.write((s) => ({
84
+ camera,
85
+ viewport: {
86
+ ...s.viewport,
87
+ ...this.getCurrentViewport(camera),
88
+ },
89
+ }));
90
+ this.read((s) => s.cameraRef).set(camera);
91
+ };
92
+ this.setDpr = (dpr) => {
93
+ const resolved = makeDpr(dpr, this.window);
94
+ this.write((s) => ({
95
+ viewport: {
96
+ ...s.viewport,
97
+ dpr: resolved,
98
+ initialDpr: s.viewport.initialDpr || resolved,
99
+ },
100
+ }));
101
+ };
102
+ this.setFrameloop = (frameloop = 'always') => {
103
+ const clock = this.read((s) => s.clock);
104
+ // if frameloop === "never" clock.elapsedTime is updated using advance(timestamp)
105
+ clock.stop();
106
+ clock.elapsedTime = 0;
107
+ if (frameloop !== 'never') {
108
+ clock.start();
109
+ clock.elapsedTime = 0;
110
+ }
111
+ this.write({ frameloop });
112
+ };
113
+ this.getCurrentViewport = (camera = this.read((s) => s.camera), target = this.defaultTarget, size = this.read((s) => s.size)) => {
114
+ const { width, height, top, left } = size;
115
+ const aspect = width / height;
116
+ if (target instanceof THREE.Vector3)
117
+ this.tempTarget.copy(target);
118
+ else
119
+ this.tempTarget.set(...target);
120
+ const distance = camera.getWorldPosition(this.position).distanceTo(this.tempTarget);
121
+ if (is.orthographic(camera)) {
122
+ return {
123
+ width: width / camera.zoom,
124
+ height: height / camera.zoom,
125
+ top,
126
+ left,
127
+ factor: 1,
128
+ distance,
129
+ aspect,
130
+ };
131
+ }
132
+ const fov = (camera.fov * Math.PI) / 180; // convert vertical fov to radians
133
+ const h = 2 * Math.tan(fov / 2) * distance; // visible height
134
+ const w = h * (width / height);
135
+ return {
136
+ width: w,
137
+ height: h,
138
+ top,
139
+ left,
140
+ factor: width / w,
141
+ distance,
142
+ aspect,
143
+ };
144
+ };
145
+ }
146
+ get rootStateFactory() {
147
+ let root = this.read((s) => s.previousStateFactory);
148
+ while (root && root().previousStateFactory) {
149
+ root = root().previousStateFactory;
150
+ }
151
+ return root || this.read;
152
+ }
153
+ init() {
154
+ if (!this.isInit) {
155
+ const pointer = new THREE.Vector2();
156
+ const scene = prepare(new THREE.Scene(), this.read, this.rootStateFactory, this.parentStore?.get((s) => s.sceneRef));
157
+ let performanceTimeout;
158
+ this.write({
159
+ ready: false,
160
+ cameraRef: new NgtRef(),
161
+ scene,
162
+ sceneRef: new NgtRef(scene),
163
+ events: { priority: 1, enabled: true, connected: false },
164
+ invalidate: (frames = 1) => invalidate(this.read, frames),
165
+ advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, this.read),
166
+ legacy: false,
167
+ linear: false,
168
+ flat: false,
169
+ controls: null,
170
+ clock: new THREE.Clock(),
171
+ pointer,
172
+ frameloop: 'always',
173
+ performance: {
174
+ current: 1,
175
+ min: 0.5,
176
+ max: 1,
177
+ debounce: 200,
178
+ regress: () => {
179
+ this.zone.runOutsideAngular(() => {
180
+ const state = this.read();
181
+ // Clear timeout
182
+ if (performanceTimeout)
183
+ clearTimeout(performanceTimeout);
184
+ // Set lower bound performance
185
+ if (state.performance.current !== state.performance.min)
186
+ this.setPerformanceCurrent(state.performance.min);
187
+ // Go back to upper bound performance after a while unless something regresses meanwhile
188
+ performanceTimeout = setTimeout(() => this.setPerformanceCurrent(this.read((s) => s.performance)?.max || 1), state.performance.debounce);
189
+ });
190
+ },
191
+ },
192
+ size: { width: 0, height: 0, top: 0, left: 0, updateStyle: false },
193
+ viewport: {
194
+ initialDpr: 0,
195
+ dpr: 0,
196
+ width: 0,
197
+ height: 0,
198
+ top: 0,
199
+ left: 0,
200
+ aspect: 0,
201
+ distance: 0,
202
+ factor: 0,
203
+ getCurrentViewport: this.getCurrentViewport,
204
+ },
205
+ previousStateFactory: this.parentStore?.read.bind(this.parentStore),
206
+ internal: {
207
+ active: false,
208
+ priority: 0,
209
+ frames: 0,
210
+ lastEvent: null,
211
+ interaction: [],
212
+ hovered: new Map(),
213
+ capturedMap: new Map(),
214
+ animations: new Map(),
215
+ subscribers: [],
216
+ initialClick: [0, 0],
217
+ initialHits: [],
218
+ subscribe: (callback, priority = 0, stateFactory = this.read, obj) => {
219
+ const internal = this.read((s) => s.internal);
220
+ // If this subscription was given a priority, it takes rendering into its own hands
221
+ // For that reason we switch off automatic rendering and increase the manual flag
222
+ // As long as this flag is positive there can be no internal rendering at all
223
+ // because there could be multiple render subscriptions
224
+ internal.priority = internal.priority + (priority > 0 ? 1 : 0);
225
+ internal.subscribers.push({ priority, stateFactory, callback, obj });
226
+ // Register subscriber and sort layers from lowest to highest, meaning,
227
+ // highest priority renders last (on top of the other frames)
228
+ internal.subscribers.sort((a, b) => (a.priority || 0) - (b.priority || 0));
229
+ return () => {
230
+ const internalOnCleanUp = this.read((s) => s.internal);
231
+ if (internalOnCleanUp.subscribers) {
232
+ // Decrease manual flag if this subscription had a priority
233
+ internalOnCleanUp.priority = internalOnCleanUp.priority - (priority > 0 ? 1 : 0);
234
+ // Remove subscriber from list
235
+ internalOnCleanUp.subscribers = internalOnCleanUp.subscribers.filter((s) => s.callback !== callback);
236
+ }
237
+ };
238
+ },
239
+ },
240
+ setPerformanceCurrent: this.setPerformanceCurrent,
241
+ setEvents: this.setEvents,
242
+ setFrameloop: this.setFrameloop,
243
+ setSize: this.setSize,
244
+ setDpr: this.setDpr,
245
+ setCamera: this.setCamera,
246
+ addInteraction: this.addInteraction,
247
+ removeInteraction: this.removeInteraction,
248
+ });
249
+ this.isInit = true;
250
+ }
251
+ }
252
+ configure(inputs, canvasElement) {
253
+ const { gl: glOptions, size: sizeOptions, camera: cameraOptions, raycaster: raycasterOptions, events, orthographic, lookAt, shadows, linear, flat, legacy, dpr, frameloop, performance, } = inputs;
254
+ const state = this.read();
255
+ // Set up renderer (one time only!)
256
+ let gl = state.gl;
257
+ if (!state.gl) {
258
+ this.write({ gl: (gl = createRenderer(glOptions, canvasElement)) });
259
+ }
260
+ // Set up raycaster (one time only!)
261
+ let raycaster = state.raycaster;
262
+ if (!raycaster) {
263
+ this.write({ raycaster: (raycaster = new THREE.Raycaster()) });
264
+ }
265
+ // Set raycaster options
266
+ const { params, ...options } = raycasterOptions || {};
267
+ if (!is.equ(options, raycaster, shallowLoose)) {
268
+ applyProps(raycaster, { ...options });
269
+ }
270
+ if (!is.equ(params, raycaster.params, shallowLoose)) {
271
+ applyProps(raycaster, {
272
+ params: { ...raycaster.params, ...(params || {}) },
273
+ });
274
+ }
275
+ // Create default camera (one time only!)
276
+ if (!state.camera) {
277
+ const isCamera = is.camera(cameraOptions);
278
+ let camera = isCamera ? cameraOptions : createDefaultCamera(orthographic, state.size);
279
+ if (!isCamera) {
280
+ if (cameraOptions) {
281
+ applyProps(camera, cameraOptions);
282
+ }
283
+ // Set position.z if position not passed in
284
+ if (!cameraOptions?.position) {
285
+ camera.position.z = 5;
286
+ }
287
+ // Always look at center or passed-in lookAt by default
288
+ if (!cameraOptions?.rotation) {
289
+ if (Array.isArray(lookAt)) {
290
+ camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);
291
+ }
292
+ else if (lookAt instanceof THREE.Vector3) {
293
+ camera.lookAt(lookAt);
294
+ }
295
+ else {
296
+ camera.lookAt(0, 0, 0);
297
+ }
298
+ }
299
+ // Update projection matrix after applying props
300
+ camera.updateProjectionMatrix();
301
+ }
302
+ if (!is.instance(camera)) {
303
+ camera = prepare(camera, this.read, this.rootStateFactory, this.parentStore?.get((s) => s.cameraRef));
304
+ }
305
+ this.write({ camera });
306
+ this.read((s) => s.cameraRef).set(camera);
307
+ }
308
+ // Set up XR (one time only!)
309
+ if (!state.xr) {
310
+ // Handle frame behavior in WebXR
311
+ const handleXRFrame = (timestamp, frame) => {
312
+ const state = this.read();
313
+ if (state.frameloop === 'never')
314
+ return;
315
+ advance(timestamp, true, this.read, frame);
316
+ };
317
+ // Toggle render switching on session
318
+ const handleSessionChange = () => {
319
+ const state = this.read();
320
+ state.gl.xr.enabled = state.gl.xr.isPresenting;
321
+ state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);
322
+ if (!state.gl.xr.isPresenting)
323
+ invalidate(this.read);
324
+ };
325
+ // WebXR session manager
326
+ const xr = {
327
+ connect: () => {
328
+ const gl = this.read((s) => s.gl);
329
+ gl.xr.addEventListener('sessionstart', handleSessionChange);
330
+ gl.xr.addEventListener('sessionend', handleSessionChange);
331
+ },
332
+ disconnect: () => {
333
+ const gl = this.read((s) => s.gl);
334
+ gl.xr.removeEventListener('sessionstart', handleSessionChange);
335
+ gl.xr.removeEventListener('sessionend', handleSessionChange);
336
+ },
337
+ };
338
+ // Subscribe to WebXR session events
339
+ if (gl.xr)
340
+ xr.connect();
341
+ this.write({ xr });
342
+ }
343
+ // Set shadowmap
344
+ if (gl.shadowMap) {
345
+ const isBoolean = typeof shadows === 'boolean';
346
+ if ((isBoolean && gl.shadowMap.enabled !== shadows) || !is.equ(shadows, gl.shadowMap, shallowLoose)) {
347
+ const old = gl.shadowMap.enabled;
348
+ gl.shadowMap.enabled = !!shadows;
349
+ if (!isBoolean)
350
+ Object.assign(gl.shadowMap, shadows);
351
+ else
352
+ gl.shadowMap.type = THREE.PCFSoftShadowMap;
353
+ if (old !== gl.shadowMap.enabled)
354
+ checkNeedsUpdate(gl.shadowMap);
355
+ }
356
+ }
357
+ // Safely set color management if available.
358
+ // Avoid accessing THREE.ColorManagement to play nice with older versions
359
+ if (is.supportColorManagement()) {
360
+ THREE.ColorManagement.legacyMode = state.legacy;
361
+ }
362
+ const outputEncoding = linear ? THREE.LinearEncoding : THREE.sRGBEncoding;
363
+ const toneMapping = flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping;
364
+ if (gl.outputEncoding !== outputEncoding)
365
+ gl.outputEncoding = outputEncoding;
366
+ if (gl.toneMapping !== toneMapping)
367
+ gl.toneMapping = toneMapping;
368
+ // Update color management state
369
+ if (state.legacy !== legacy)
370
+ this.write({ legacy });
371
+ if (state.linear !== linear)
372
+ this.write({ linear });
373
+ if (state.flat !== flat)
374
+ this.write({ flat });
375
+ // Set gl props
376
+ gl.setClearAlpha(0);
377
+ gl.setPixelRatio(makeDpr(state.viewport.dpr));
378
+ gl.setSize(state.size.width, state.size.height, state.size.updateStyle);
379
+ if (is.obj(glOptions) &&
380
+ !(typeof glOptions === 'function') &&
381
+ !is.glRenderer(glOptions) &&
382
+ !is.equ(glOptions, gl, shallowLoose)) {
383
+ applyProps(gl, glOptions);
384
+ }
385
+ // Store events internally
386
+ if (events && !state.events.handlers) {
387
+ this.write({ events: events(this.read) });
388
+ }
389
+ // Check pixelratio
390
+ if (dpr && state.viewport.dpr !== makeDpr(dpr)) {
391
+ state.setDpr(dpr);
392
+ }
393
+ // Check size, allow it to take on container bounds initially
394
+ const size = computeInitialSize(canvasElement, sizeOptions);
395
+ if (!is.equ(size, state.size, shallowLoose)) {
396
+ state.setSize(size.width, size.height, size.top, size.left);
397
+ }
398
+ // Check frameloop
399
+ if (state.frameloop !== frameloop)
400
+ state.setFrameloop(frameloop);
401
+ // Check performance
402
+ if (performance && !is.equ(performance, state.performance, shallowLoose)) {
403
+ this.write((state) => ({
404
+ performance: { ...state.performance, ...performance },
405
+ }));
406
+ }
407
+ this.write({ ready: true });
408
+ this.resize(this.select(this.select((s) => s.size), this.select((s) => s.viewport.dpr), defaultProjector, { debounce: true }));
409
+ this.invalidate(this.select((s) => s, { debounce: true }));
410
+ this.zone.run(() => {
411
+ this.isConfigured = true;
412
+ });
413
+ }
414
+ onReady(cb) {
415
+ return this.effect(tapEffect(cb))(this.select((s) => s.ready).pipe(filter((ready) => ready)));
416
+ }
417
+ }
418
+ NgtStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
419
+ NgtStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtStore });
420
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtStore, decorators: [{
421
+ type: Injectable
422
+ }] });
423
+ function computeInitialSize(canvas, defaultSize) {
424
+ if (defaultSize) {
425
+ return defaultSize;
426
+ }
427
+ if (is.canvas(canvas) && canvas.parentElement) {
428
+ const { width, height, top, left } = canvas.parentElement.getBoundingClientRect();
429
+ return { width, height, top, left };
430
+ }
431
+ return { width: 0, height: 0, top: 0, left: 0 };
432
+ }
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvc3RvcmVzL3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBYWhDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRW5GLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztBQUNoRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FB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LEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDOztxR0ExZVEsUUFBUTt5R0FBUixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLFVBQVU7O0FBOGVYLFNBQVMsa0JBQWtCLENBQUMsTUFBaUQsRUFBRSxXQUFxQjtJQUNoRyxJQUFJLFdBQVcsRUFBRTtRQUNiLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0lBRUQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7UUFDM0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUVsRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDdkM7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0V2luZG93IH0gZnJvbSAnLi4vZGkvd2luZG93JztcbmltcG9ydCB7IE5ndFJlZiB9IGZyb20gJy4uL3JlZic7XG5pbXBvcnQgdHlwZSB7XG4gICAgTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2ssXG4gICAgTmd0Q2FtZXJhLFxuICAgIE5ndENhbnZhc0lucHV0cyxcbiAgICBOZ3REcHIsXG4gICAgTmd0RXF1Q29uZmlnLFxuICAgIE5ndEV2ZW50TWFuYWdlcixcbiAgICBOZ3RTaXplLFxuICAgIE5ndFN0YXRlLFxuICAgIE5ndFN0YXRlRmFjdG9yeSxcbiAgICBOZ3RWaWV3cG9ydCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGNyZWF0ZURlZmF1bHRDYW1lcmEsIHVwZGF0ZUNhbWVyYSB9IGZyb20gJy4uL3V0aWxzL2NhbWVyYSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi4vdXRpbHMvY2hlY2stdXBkYXRlJztcbmltcG9ydCB7IHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IGNyZWF0ZUxvb3AgfSBmcm9tICcuLi91dGlscy9sb29wJztcbmltcG9ydCB7IG1ha2VEcHIgfSBmcm9tICcuLi91dGlscy9tYWtlJztcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyIH0gZnJvbSAnLi4vdXRpbHMvcmVuZGVyZXInO1xuaW1wb3J0IHsgZGVmYXVsdFByb2plY3RvciwgTmd0Q29tcG9uZW50U3RvcmUsIHRhcEVmZmVjdCB9IGZyb20gJy4vY29tcG9uZW50LXN0b3JlJztcblxuZXhwb3J0IGNvbnN0IHJvb3RTdGF0ZU1hcCA9IG5ldyBNYXA8RWxlbWVudCwgTmd0U3RhdGVGYWN0b3J5PigpO1xuY29uc3QgeyBpbnZhbGlkYXRlLCBhZHZhbmNlIH0gPSBjcmVhdGVMb29wKHJvb3RTdGF0ZU1hcCk7XG5cbmNvbnN0IHNoYWxsb3dMb29zZSA9IHsgb2JqZWN0czogJ3NoYWxsb3cnLCBzdHJpY3Q6IGZhbHNlIH0gYXMgTmd0RXF1Q29uZmlnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U3RvcmUgZXh0ZW5kcyBOZ3RDb21wb25lbnRTdG9yZTxOZ3RTdGF0ZT4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50U3RvcmUgPSBpbmplY3QoTmd0U3RvcmUsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93ID0gaW5qZWN0V2luZG93KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRUYXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cbiAgICBnZXQgcm9vdFN0YXRlRmFjdG9yeSgpOiBOZ3RTdGF0ZUZhY3Rvcnkge1xuICAgICAgICBsZXQgcm9vdCA9IHRoaXMucmVhZCgocykgPT4gcy5wcmV2aW91c1N0YXRlRmFjdG9yeSk7XG4gICAgICAgIHdoaWxlIChyb290ICYmIHJvb3QoKS5wcmV2aW91c1N0YXRlRmFjdG9yeSkge1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QoKS5wcmV2aW91c1N0YXRlRmFjdG9yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb290IHx8IHRoaXMucmVhZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc2l6ZSA9IHRoaXMuZWZmZWN0PGFueT4oKCQpID0+IHtcbiAgICAgICAgbGV0IG9sZFNpemUgPSB0aGlzLnJlYWQoKHMpID0+IHMuc2l6ZSk7XG4gICAgICAgIGxldCBvbGREcHIgPSB0aGlzLnJlYWQoKHMpID0+IHMudmlld3BvcnQ/LmRwcik7XG5cbiAgICAgICAgcmV0dXJuICQucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjYW1lcmEsIHNpemUsIHZpZXdwb3J0LCBnbCB9ID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICAgICAgLy8gUmVzaXplIGNhbWVyYSBhbmQgcmVuZGVyZXIgb24gY2hhbmdlcyB0byBzaXplIGFuZCBwaXhlbHJhdGlvXG4gICAgICAgICAgICAgICAgaWYgKHNpemUgIT09IG9sZFNpemUgfHwgdmlld3BvcnQuZHByICE9PSBvbGREcHIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgICAgIG9sZERwciA9IHZpZXdwb3J0LmRwcjtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNhbWVyYSAmIHJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbWVyYShjYW1lcmEsIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBnbC5zZXRQaXhlbFJhdGlvKHZpZXdwb3J0LmRwcik7XG4gICAgICAgICAgICAgICAgICAgIGdsLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHNpemUudXBkYXRlU3R5bGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGludmFsaWRhdGUgPSB0aGlzLmVmZmVjdCh0YXAoKCkgPT4gdm9pZCB0aGlzLnJlYWQoKHMpID0+IHMuaW52YWxpZGF0ZSkoKSkpO1xuXG4gICAgaXNJbml0ID0gZmFsc2U7XG4gICAgaXNDb25maWd1cmVkID0gZmFsc2U7XG5cbiAgICBpbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJbml0KSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludGVyID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcblxuICAgICAgICAgICAgY29uc3Qgc2NlbmUgPSBwcmVwYXJlKFxuICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5TY2VuZSgpLFxuICAgICAgICAgICAgICAgIHRoaXMucmVhZCxcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3RTdGF0ZUZhY3RvcnksXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRTdG9yZT8uZ2V0KChzKSA9PiBzLnNjZW5lUmVmKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IHBlcmZvcm1hbmNlVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgICAgICAgICAgIHRoaXMud3JpdGUoe1xuICAgICAgICAgICAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjYW1lcmFSZWY6IG5ldyBOZ3RSZWYoKSxcbiAgICAgICAgICAgICAgICBzY2VuZSxcbiAgICAgICAgICAgICAgICBzY2VuZVJlZjogbmV3IE5ndFJlZihzY2VuZSksXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7IHByaW9yaXR5OiAxLCBlbmFibGVkOiB0cnVlLCBjb25uZWN0ZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgaW52YWxpZGF0ZTogKGZyYW1lcyA9IDEpID0+IGludmFsaWRhdGUodGhpcy5yZWFkLCBmcmFtZXMpLFxuICAgICAgICAgICAgICAgIGFkdmFuY2U6ICh0aW1lc3RhbXA6IG51bWJlciwgcnVuR2xvYmFsRWZmZWN0cz86IGJvb2xlYW4pID0+XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UodGltZXN0YW1wLCBydW5HbG9iYWxFZmZlY3RzLCB0aGlzLnJlYWQpLFxuXG4gICAgICAgICAgICAgICAgbGVnYWN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsaW5lYXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZsYXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xzOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgY2xvY2s6IG5ldyBUSFJFRS5DbG9jaygpLFxuICAgICAgICAgICAgICAgIHBvaW50ZXIsXG5cbiAgICAgICAgICAgICAgICBmcmFtZWxvb3A6ICdhbHdheXMnLFxuXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDogMSxcbiAgICAgICAgICAgICAgICAgICAgbWluOiAwLjUsXG4gICAgICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2U6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgcmVncmVzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyZm9ybWFuY2VUaW1lb3V0KSBjbGVhclRpbWVvdXQocGVyZm9ybWFuY2VUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbG93ZXIgYm91bmQgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUucGVyZm9ybWFuY2UuY3VycmVudCAhPT0gc3RhdGUucGVyZm9ybWFuY2UubWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBlcmZvcm1hbmNlQ3VycmVudChzdGF0ZS5wZXJmb3JtYW5jZS5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIGJhY2sgdG8gdXBwZXIgYm91bmQgcGVyZm9ybWFuY2UgYWZ0ZXIgYSB3aGlsZSB1bmxlc3Mgc29tZXRoaW5nIHJlZ3Jlc3NlcyBtZWFud2hpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnNldFBlcmZvcm1hbmNlQ3VycmVudCh0aGlzLnJlYWQoKHMpID0+IHMucGVyZm9ybWFuY2UpPy5tYXggfHwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBlcmZvcm1hbmNlLmRlYm91bmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBzaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCwgdXBkYXRlU3R5bGU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERwcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZHByOiAwLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFzcGVjdDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudFZpZXdwb3J0OiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCxcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdGF0ZUZhY3Rvcnk6IHRoaXMucGFyZW50U3RvcmU/LnJlYWQuYmluZCh0aGlzLnBhcmVudFN0b3JlKSxcbiAgICAgICAgICAgICAgICBpbnRlcm5hbDoge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogMCxcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVzOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYXN0RXZlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJlZDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25zOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENsaWNrOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxIaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogbnVtYmVyID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlRmFjdG9yeTogTmd0U3RhdGVGYWN0b3J5ID0gdGhpcy5yZWFkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPzogVEhSRUUuT2JqZWN0M0QgfCBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzLnJlYWQoKHMpID0+IHMuaW50ZXJuYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzdWJzY3JpcHRpb24gd2FzIGdpdmVuIGEgcHJpb3JpdHksIGl0IHRha2VzIHJlbmRlcmluZyBpbnRvIGl0cyBvd24gaGFuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGF0IHJlYXNvbiB3ZSBzd2l0Y2ggb2ZmIGF1dG9tYXRpYyByZW5kZXJpbmcgYW5kIGluY3JlYXNlIHRoZSBtYW51YWwgZmxhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgbG9uZyBhcyB0aGlzIGZsYWcgaXMgcG9zaXRpdmUgdGhlcmUgY2FuIGJlIG5vIGludGVybmFsIHJlbmRlcmluZyBhdCBhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgcmVuZGVyIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnByaW9yaXR5ID0gaW50ZXJuYWwucHJpb3JpdHkgKyAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuc3Vic2NyaWJlcnMucHVzaCh7IHByaW9yaXR5LCBzdGF0ZUZhY3RvcnksIGNhbGxiYWNrLCBvYmogfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmliZXIgYW5kIHNvcnQgbGF5ZXJzIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIG1lYW5pbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdoZXN0IHByaW9yaXR5IHJlbmRlcnMgbGFzdCAob24gdG9wIG9mIHRoZSBvdGhlciBmcmFtZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycy5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSB8fCAwKSAtIChiLnByaW9yaXR5IHx8IDApKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbE9uQ2xlYW5VcCA9IHRoaXMucmVhZCgocykgPT4gcy5pbnRlcm5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFsT25DbGVhblVwLnN1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY3JlYXNlIG1hbnVhbCBmbGFnIGlmIHRoaXMgc3Vic2NyaXB0aW9uIGhhZCBhIHByaW9yaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsT25DbGVhblVwLnByaW9yaXR5ID0gaW50ZXJuYWxPbkNsZWFuVXAucHJpb3JpdHkgLSAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc3Vic2NyaWJlciBmcm9tIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxPbkNsZWFuVXAuc3Vic2NyaWJlcnMgPSBpbnRlcm5hbE9uQ2xlYW5VcC5zdWJzY3JpYmVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykgPT4gcy5jYWxsYmFjayAhPT0gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0UGVyZm9ybWFuY2VDdXJyZW50OiB0aGlzLnNldFBlcmZvcm1hbmNlQ3VycmVudCxcbiAgICAgICAgICAgICAgICBzZXRFdmVudHM6IHRoaXMuc2V0RXZlbnRzLFxuICAgICAgICAgICAgICAgIHNldEZyYW1lbG9vcDogdGhpcy5zZXRGcmFtZWxvb3AsXG4gICAgICAgICAgICAgICAgc2V0U2l6ZTogdGhpcy5zZXRTaXplLFxuICAgICAgICAgICAgICAgIHNldERwcjogdGhpcy5zZXREcHIsXG4gICAgICAgICAgICAgICAgc2V0Q2FtZXJhOiB0aGlzLnNldENhbWVyYSxcbiAgICAgICAgICAgICAgICBhZGRJbnRlcmFjdGlvbjogdGhpcy5hZGRJbnRlcmFjdGlvbixcbiAgICAgICAgICAgICAgICByZW1vdmVJbnRlcmFjdGlvbjogdGhpcy5yZW1vdmVJbnRlcmFjdGlvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc0luaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRJbnRlcmFjdGlvbiA9IChpbnRlcmFjdGlvbjogVEhSRUUuT2JqZWN0M0QpID0+IHtcbiAgICAgICAgdGhpcy53cml0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGludGVybmFsOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUuaW50ZXJuYWwsXG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb246IFsuLi5zdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbiwgaW50ZXJhY3Rpb25dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbW92ZUludGVyYWN0aW9uID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLndyaXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5pbnRlcm5hbCxcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbjogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChpbnRlcmFjdGlvbikgPT4gaW50ZXJhY3Rpb24udXVpZCAhPT0gdXVpZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0UGVyZm9ybWFuY2VDdXJyZW50ID0gKGN1cnJlbnQ6IG51bWJlcikgPT4ge1xuICAgICAgICB0aGlzLndyaXRlKChzKSA9PiAoeyBwZXJmb3JtYW5jZTogeyAuLi5zLnBlcmZvcm1hbmNlLCBjdXJyZW50IH0gfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldEV2ZW50cyA9IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PiB7XG4gICAgICAgIHRoaXMud3JpdGUoKHMpID0+ICh7IGV2ZW50czogeyAuLi5zLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldFNpemUgPSAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRvcD86IG51bWJlciwgbGVmdD86IG51bWJlciwgdXBkYXRlU3R5bGU/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMucmVhZCgocykgPT4gcy5jYW1lcmEpO1xuICAgICAgICBjb25zdCBzaXplID0geyB3aWR0aCwgaGVpZ2h0LCB0b3A6IHRvcCB8fCAwLCBsZWZ0OiBsZWZ0IHx8IDAsIHVwZGF0ZVN0eWxlIH07XG5cbiAgICAgICAgdGhpcy53cml0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIHRoaXMuZGVmYXVsdFRhcmdldCwgc2l6ZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0Q2FtZXJhID0gKGNhbWVyYTogTmd0Q2FtZXJhKSA9PiB7XG4gICAgICAgIHRoaXMud3JpdGUoKHMpID0+ICh7XG4gICAgICAgICAgICBjYW1lcmEsXG4gICAgICAgICAgICB2aWV3cG9ydDoge1xuICAgICAgICAgICAgICAgIC4uLnMudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDdXJyZW50Vmlld3BvcnQoY2FtZXJhKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5yZWFkKChzKSA9PiBzLmNhbWVyYVJlZikuc2V0KGNhbWVyYSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0RHByID0gKGRwcjogTmd0RHByKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gbWFrZURwcihkcHIsIHRoaXMud2luZG93KTtcbiAgICAgICAgdGhpcy53cml0ZSgocykgPT4gKHtcbiAgICAgICAgICAgIHZpZXdwb3J0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICBkcHI6IHJlc29sdmVkLFxuICAgICAgICAgICAgICAgIGluaXRpYWxEcHI6IHMudmlld3BvcnQuaW5pdGlhbERwciB8fCByZXNvbHZlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXRGcmFtZWxvb3AgPSAoZnJhbWVsb29wOiAnYWx3YXlzJyB8ICdkZW1hbmQnIHwgJ25ldmVyJyA9ICdhbHdheXMnKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gdGhpcy5yZWFkKChzKSA9PiBzLmNsb2NrKTtcblxuICAgICAgICAvLyBpZiBmcmFtZWxvb3AgPT09IFwibmV2ZXJcIiBjbG9jay5lbGFwc2VkVGltZSBpcyB1cGRhdGVkIHVzaW5nIGFkdmFuY2UodGltZXN0YW1wKVxuICAgICAgICBjbG9jay5zdG9wKCk7XG4gICAgICAgIGNsb2NrLmVsYXBzZWRUaW1lID0gMDtcblxuICAgICAgICBpZiAoZnJhbWVsb29wICE9PSAnbmV2ZXInKSB7XG4gICAgICAgICAgICBjbG9jay5zdGFydCgpO1xuICAgICAgICAgICAgY2xvY2suZWxhcHNlZFRpbWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZSh7IGZyYW1lbG9vcCB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRDdXJyZW50Vmlld3BvcnQgPSAoXG4gICAgICAgIGNhbWVyYSA9IHRoaXMucmVhZCgocykgPT4gcy5jYW1lcmEpLFxuICAgICAgICB0YXJnZXQ6IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPiA9IHRoaXMuZGVmYXVsdFRhcmdldCxcbiAgICAgICAgc2l6ZSA9IHRoaXMucmVhZCgocykgPT4gcy5zaXplKVxuICAgICk6IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPiA9PiB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSBzaXplO1xuICAgICAgICBjb25zdCBhc3BlY3QgPSB3aWR0aCAvIGhlaWdodDtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIHRoaXMudGVtcFRhcmdldC5jb3B5KHRhcmdldCk7XG4gICAgICAgIGVsc2UgdGhpcy50ZW1wVGFyZ2V0LnNldCguLi50YXJnZXQpO1xuXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24odGhpcy5wb3NpdGlvbikuZGlzdGFuY2VUbyh0aGlzLnRlbXBUYXJnZXQpO1xuXG4gICAgICAgIGlmIChpcy5vcnRob2dyYXBoaWMoY2FtZXJhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggLyBjYW1lcmEuem9vbSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGNhbWVyYS56b29tLFxuICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICAgIGZhY3RvcjogMSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBhc3BlY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm92ID0gKGNhbWVyYS5mb3YgKiBNYXRoLlBJKSAvIDE4MDsgLy8gY29udmVydCB2ZXJ0aWNhbCBmb3YgdG8gcmFkaWFuc1xuICAgICAgICBjb25zdCBoID0gMiAqIE1hdGgudGFuKGZvdiAvIDIpICogZGlzdGFuY2U7IC8vIHZpc2libGUgaGVpZ2h0XG4gICAgICAgIGNvbnN0IHcgPSBoICogKHdpZHRoIC8gaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgICAgaGVpZ2h0OiBoLFxuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGZhY3Rvcjogd2lkdGggLyB3LFxuICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICBhc3BlY3QsXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbmZpZ3VyZShpbnB1dHM6IE5ndENhbnZhc0lucHV0cywgY2FudmFzRWxlbWVudDogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZ2w6IGdsT3B0aW9ucyxcbiAgICAgICAgICAgIHNpemU6IHNpemVPcHRpb25zLFxuICAgICAgICAgICAgY2FtZXJhOiBjYW1lcmFPcHRpb25zLFxuICAgICAgICAgICAgcmF5Y2FzdGVyOiByYXljYXN0ZXJPcHRpb25zLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgb3J0aG9ncmFwaGljLFxuICAgICAgICAgICAgbG9va0F0LFxuICAgICAgICAgICAgc2hhZG93cyxcbiAgICAgICAgICAgIGxpbmVhcixcbiAgICAgICAgICAgIGZsYXQsXG4gICAgICAgICAgICBsZWdhY3ksXG4gICAgICAgICAgICBkcHIsXG4gICAgICAgICAgICBmcmFtZWxvb3AsXG4gICAgICAgICAgICBwZXJmb3JtYW5jZSxcbiAgICAgICAgfSA9IGlucHV0cztcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucmVhZCgpO1xuXG4gICAgICAgIC8vIFNldCB1cCByZW5kZXJlciAob25lIHRpbWUgb25seSEpXG4gICAgICAgIGxldCBnbCA9IHN0YXRlLmdsO1xuICAgICAgICBpZiAoIXN0YXRlLmdsKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgZ2w6IChnbCA9IGNyZWF0ZVJlbmRlcmVyKGdsT3B0aW9ucywgY2FudmFzRWxlbWVudCkpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHVwIHJheWNhc3RlciAob25lIHRpbWUgb25seSEpXG4gICAgICAgIGxldCByYXljYXN0ZXIgPSBzdGF0ZS5yYXljYXN0ZXI7XG4gICAgICAgIGlmICghcmF5Y2FzdGVyKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgcmF5Y2FzdGVyOiAocmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpKSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCByYXljYXN0ZXIgb3B0aW9uc1xuICAgICAgICBjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKCFpcy5lcXUob3B0aW9ucywgcmF5Y2FzdGVyLCBzaGFsbG93TG9vc2UpKSB7XG4gICAgICAgICAgICBhcHBseVByb3BzKHJheWNhc3RlciwgeyAuLi5vcHRpb25zIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXMuZXF1KHBhcmFtcywgcmF5Y2FzdGVyLnBhcmFtcywgc2hhbGxvd0xvb3NlKSkge1xuICAgICAgICAgICAgYXBwbHlQcm9wcyhyYXljYXN0ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHsgLi4ucmF5Y2FzdGVyLnBhcmFtcywgLi4uKHBhcmFtcyB8fCB7fSkgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgY2FtZXJhIChvbmUgdGltZSBvbmx5ISlcbiAgICAgICAgaWYgKCFzdGF0ZS5jYW1lcmEpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ2FtZXJhID0gaXMuY2FtZXJhKGNhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgbGV0IGNhbWVyYSA9IGlzQ2FtZXJhID8gKGNhbWVyYU9wdGlvbnMgYXMgTmd0Q2FtZXJhKSA6IGNyZWF0ZURlZmF1bHRDYW1lcmEob3J0aG9ncmFwaGljISwgc3RhdGUuc2l6ZSk7XG4gICAgICAgICAgICBpZiAoIWlzQ2FtZXJhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wcyhjYW1lcmEsIGNhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNldCBwb3NpdGlvbi56IGlmIHBvc2l0aW9uIG5vdCBwYXNzZWQgaW5cbiAgICAgICAgICAgICAgICBpZiAoIWNhbWVyYU9wdGlvbnM/LnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgbG9vayBhdCBjZW50ZXIgb3IgcGFzc2VkLWluIGxvb2tBdCBieSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW1lcmFPcHRpb25zPy5yb3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsb29rQXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KGxvb2tBdFswXSwgbG9va0F0WzFdLCBsb29rQXRbMl0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQobG9va0F0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvamVjdGlvbiBtYXRyaXggYWZ0ZXIgYXBwbHlpbmcgcHJvcHNcbiAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzLmluc3RhbmNlKGNhbWVyYSkpIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEgPSBwcmVwYXJlKFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmEsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290U3RhdGVGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudFN0b3JlPy5nZXQoKHMpID0+IHMuY2FtZXJhUmVmKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgY2FtZXJhIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkKChzKSA9PiBzLmNhbWVyYVJlZikuc2V0KGNhbWVyYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdXAgWFIgKG9uZSB0aW1lIG9ubHkhKVxuICAgICAgICBpZiAoIXN0YXRlLnhyKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZyYW1lbG9vcCA9PT0gJ25ldmVyJykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGFkdmFuY2UodGltZXN0YW1wLCB0cnVlLCB0aGlzLnJlYWQsIGZyYW1lKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSByZW5kZXIgc3dpdGNoaW5nIG9uIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5nbC54ci5lbmFibGVkID0gc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nO1xuXG4gICAgICAgICAgICAgICAgc3RhdGUuZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcgPyBoYW5kbGVYUkZyYW1lIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcpIGludmFsaWRhdGUodGhpcy5yZWFkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFdlYlhSIHNlc3Npb24gbWFuYWdlclxuICAgICAgICAgICAgY29uc3QgeHIgPSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnbCA9IHRoaXMucmVhZCgocykgPT4gcy5nbCk7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNjb25uZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsID0gdGhpcy5yZWFkKChzKSA9PiBzLmdsKTtcbiAgICAgICAgICAgICAgICAgICAgZ2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIFdlYlhSIHNlc3Npb24gZXZlbnRzXG4gICAgICAgICAgICBpZiAoZ2wueHIpIHhyLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoeyB4ciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzaGFkb3dtYXBcbiAgICAgICAgaWYgKGdsLnNoYWRvd01hcCkge1xuICAgICAgICAgICAgY29uc3QgaXNCb29sZWFuID0gdHlwZW9mIHNoYWRvd3MgPT09ICdib29sZWFuJztcbiAgICAgICAgICAgIGlmICgoaXNCb29sZWFuICYmIGdsLnNoYWRvd01hcC5lbmFibGVkICE9PSBzaGFkb3dzKSB8fCAhaXMuZXF1KHNoYWRvd3MsIGdsLnNoYWRvd01hcCwgc2hhbGxvd0xvb3NlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZCA9IGdsLnNoYWRvd01hcC5lbmFibGVkO1xuICAgICAgICAgICAgICAgIGdsLnNoYWRvd01hcC5lbmFibGVkID0gISFzaGFkb3dzO1xuICAgICAgICAgICAgICAgIGlmICghaXNCb29sZWFuKSBPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG4gICAgICAgICAgICAgICAgZWxzZSBnbC5zaGFkb3dNYXAudHlwZSA9IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXA7XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FmZWx5IHNldCBjb2xvciBtYW5hZ2VtZW50IGlmIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gQXZvaWQgYWNjZXNzaW5nIFRIUkVFLkNvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuICAgICAgICBpZiAoaXMuc3VwcG9ydENvbG9yTWFuYWdlbWVudCgpKSB7XG4gICAgICAgICAgICBUSFJFRS5Db2xvck1hbmFnZW1lbnQubGVnYWN5TW9kZSA9IHN0YXRlLmxlZ2FjeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXRFbmNvZGluZyA9IGxpbmVhciA/IFRIUkVFLkxpbmVhckVuY29kaW5nIDogVEhSRUUuc1JHQkVuY29kaW5nO1xuICAgICAgICBjb25zdCB0b25lTWFwcGluZyA9IGZsYXQgPyBUSFJFRS5Ob1RvbmVNYXBwaW5nIDogVEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nO1xuICAgICAgICBpZiAoZ2wub3V0cHV0RW5jb2RpbmcgIT09IG91dHB1dEVuY29kaW5nKSBnbC5vdXRwdXRFbmNvZGluZyA9IG91dHB1dEVuY29kaW5nO1xuICAgICAgICBpZiAoZ2wudG9uZU1hcHBpbmcgIT09IHRvbmVNYXBwaW5nKSBnbC50b25lTWFwcGluZyA9IHRvbmVNYXBwaW5nO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHN0YXRlXG4gICAgICAgIGlmIChzdGF0ZS5sZWdhY3kgIT09IGxlZ2FjeSkgdGhpcy53cml0ZSh7IGxlZ2FjeSB9KTtcbiAgICAgICAgaWYgKHN0YXRlLmxpbmVhciAhPT0gbGluZWFyKSB0aGlzLndyaXRlKHsgbGluZWFyIH0pO1xuICAgICAgICBpZiAoc3RhdGUuZmxhdCAhPT0gZmxhdCkgdGhpcy53cml0ZSh7IGZsYXQgfSk7XG5cbiAgICAgICAgLy8gU2V0IGdsIHByb3BzXG4gICAgICAgIGdsLnNldENsZWFyQWxwaGEoMCk7XG4gICAgICAgIGdsLnNldFBpeGVsUmF0aW8obWFrZURwcihzdGF0ZS52aWV3cG9ydC5kcHIpKTtcbiAgICAgICAgZ2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCwgc3RhdGUuc2l6ZS51cGRhdGVTdHlsZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXMub2JqKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICEodHlwZW9mIGdsT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgICAgICAgICFpcy5nbFJlbmRlcmVyKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHMoZ2wsIGdsT3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuICAgICAgICBpZiAoZXZlbnRzICYmICFzdGF0ZS5ldmVudHMuaGFuZGxlcnMpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoeyBldmVudHM6IGV2ZW50cyh0aGlzLnJlYWQpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgcGl4ZWxyYXRpb1xuICAgICAgICBpZiAoZHByICYmIHN0YXRlLnZpZXdwb3J0LmRwciAhPT0gbWFrZURwcihkcHIpKSB7XG4gICAgICAgICAgICBzdGF0ZS5zZXREcHIoZHByKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBzaXplLCBhbGxvdyBpdCB0byB0YWtlIG9uIGNvbnRhaW5lciBib3VuZHMgaW5pdGlhbGx5XG4gICAgICAgIGNvbnN0IHNpemUgPSBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzRWxlbWVudCwgc2l6ZU9wdGlvbnMpO1xuICAgICAgICBpZiAoIWlzLmVxdShzaXplLCBzdGF0ZS5zaXplLCBzaGFsbG93TG9vc2UpKSB7XG4gICAgICAgICAgICBzdGF0ZS5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBzaXplLnRvcCwgc2l6ZS5sZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZyYW1lbG9vcFxuICAgICAgICBpZiAoc3RhdGUuZnJhbWVsb29wICE9PSBmcmFtZWxvb3ApIHN0YXRlLnNldEZyYW1lbG9vcChmcmFtZWxvb3AhKTtcblxuICAgICAgICAvLyBDaGVjayBwZXJmb3JtYW5jZVxuICAgICAgICBpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZSh7IHJlYWR5OiB0cnVlIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZShcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KChzKSA9PiBzLnNpemUpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KChzKSA9PiBzLnZpZXdwb3J0LmRwciksXG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb2plY3RvcixcbiAgICAgICAgICAgICAgICB7IGRlYm91bmNlOiB0cnVlIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pbnZhbGlkYXRlKHRoaXMuc2VsZWN0KChzKSA9PiBzLCB7IGRlYm91bmNlOiB0cnVlIH0pKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQ29uZmlndXJlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUmVhZHkoY2I6IFBhcmFtZXRlcnM8dHlwZW9mIHRhcEVmZmVjdD5bMF0pOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZmZlY3QodGFwRWZmZWN0KGNiKSkodGhpcy5zZWxlY3QoKHMpID0+IHMucmVhZHkpLnBpcGUoZmlsdGVyKChyZWFkeSkgPT4gcmVhZHkpKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IFRIUkVFLk9mZnNjcmVlbkNhbnZhcywgZGVmYXVsdFNpemU/OiBOZ3RTaXplKTogTmd0U2l6ZSB7XG4gICAgaWYgKGRlZmF1bHRTaXplKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0U2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXMuY2FudmFzKGNhbnZhcykgJiYgY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQgfSA9IGNhbnZhcy5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCB9O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgUmVuZGVyZXIsIFdlYkdMUmVuZGVyZXIsIFdlYkdMUmVuZGVyZXJQYXJhbWV0ZXJzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0UmVmIH0gZnJvbSAnLi9yZWYnO1xuXG5leHBvcnQgdHlwZSBOZ3RFcXVDb25maWcgPSB7XG4gICAgLyoqIENvbXBhcmUgYXJyYXlzIGJ5IHJlZmVyZW5jZSBlcXVhbGl0eSBhID09PSBiIChkZWZhdWx0KSwgb3IgYnkgc2hhbGxvdyBlcXVhbGl0eSAqL1xuICAgIGFycmF5cz86ICdyZWZlcmVuY2UnIHwgJ3NoYWxsb3cnO1xuICAgIC8qKiBDb21wYXJlIG9iamVjdHMgYnkgcmVmZXJlbmNlIGVxdWFsaXR5IGEgPT09IGIgKGRlZmF1bHQpLCBvciBieSBzaGFsbG93IGVxdWFsaXR5ICovXG4gICAgb2JqZWN0cz86ICdyZWZlcmVuY2UnIHwgJ3NoYWxsb3cnO1xuICAgIC8qKiBJZiB0cnVlIHRoZSBrZXlzIGluIGJvdGggYSBhbmQgYiBtdXN0IG1hdGNoIDE6MSAoZGVmYXVsdCksIGlmIGZhbHNlIGEncyBrZXlzIG11c3QgaW50ZXJzZWN0IGIncyAqL1xuICAgIHN0cmljdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RPYnNlcnZhYmxlSW5wdXQ8VD4gPSBUIHwgT2JzZXJ2YWJsZUlucHV0PFQ+O1xuXG5leHBvcnQgdHlwZSBOZ3RBbnlSZWNvcmQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuZXhwb3J0IHR5cGUgTmd0QW55RnVuY3Rpb248VFJldHVybiA9IGFueT4gPSAoLi4uYXJnczogYW55W10pID0+IFRSZXR1cm47XG5leHBvcnQgdHlwZSBOZ3RBbnlDb25zdHJ1Y3RvcjxUT2JqZWN0ID0gYW55PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFRPYmplY3Q7XG5leHBvcnQgdHlwZSBOZ3RBbnlBYnN0cmFjdENvbnN0cnVjdG9yPFRPYmplY3QgPSBhbnk+ID0gYWJzdHJhY3QgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVE9iamVjdDtcbmV4cG9ydCB0eXBlIE5ndEFueUN0b3I8VE9iamVjdCA9IGFueT4gPSBOZ3RBbnlDb25zdHJ1Y3RvcjxUT2JqZWN0PiB8IE5ndEFueUFic3RyYWN0Q29uc3RydWN0b3I8VE9iamVjdD47XG5leHBvcnQgdHlwZSBOZ3RQcm9wZXJ0aWVzPFQ+ID0gUGljazxULCB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgKF86IGFueSkgPT4gYW55ID8gbmV2ZXIgOiBLIH1ba2V5b2YgVF0+O1xuZXhwb3J0IHR5cGUgTmd0Tm9uRnVuY3Rpb25LZXlzPFQ+ID0geyBbSyBpbiBrZXlvZiBUXS0/OiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEsgfVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIE5ndE92ZXJ3cml0ZTxULCBPPiA9IE9taXQ8VCwgTmd0Tm9uRnVuY3Rpb25LZXlzPE8+PiAmIE87XG5cbmV4cG9ydCB0eXBlIE5ndERwciA9IG51bWJlciB8IFttaW46IG51bWJlciwgbWF4OiBudW1iZXJdO1xuZXhwb3J0IHR5cGUgTmd0U2l6ZSA9IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHVwZGF0ZVN0eWxlPzogYm9vbGVhbiB9O1xuZXhwb3J0IHR5cGUgTmd0Vmlld3BvcnQgPSBOZ3RTaXplICYge1xuICAgIC8qKiBUaGUgaW5pdGlhbCBwaXhlbCByYXRpbyAqL1xuICAgIGluaXRpYWxEcHI6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwaXhlbCByYXRpbyAqL1xuICAgIGRwcjogbnVtYmVyO1xuICAgIC8qKiBzaXplLndpZHRoIC8gdmlld3BvcnQud2lkdGggKi9cbiAgICBmYWN0b3I6IG51bWJlcjtcbiAgICAvKiogQ2FtZXJhIGRpc3RhbmNlICovXG4gICAgZGlzdGFuY2U6IG51bWJlcjtcbiAgICAvKiogQ2FtZXJhIGFzcGVjdCByYXRpbzogd2lkdGggLyBoZWlnaHQgKi9cbiAgICBhc3BlY3Q6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndFBlcmZvcm1hbmNlID0ge1xuICAgIC8qKiBDdXJyZW50IHBlcmZvcm1hbmNlIG5vcm1hbCwgYmV0d2VlbiBtaW4gYW5kIG1heCAqL1xuICAgIGN1cnJlbnQ6IG51bWJlcjtcbiAgICAvKiogSG93IGxvdyB0aGUgcGVyZm9ybWFuY2UgY2FuIGdvLCBiZXR3ZWVuIDAgYW5kIG1heCAqL1xuICAgIG1pbjogbnVtYmVyO1xuICAgIC8qKiBIb3cgaGlnaCB0aGUgcGVyZm9ybWFuY2UgY2FuIGdvLCBiZXR3ZWVuIG1pbiBhbmQgbWF4ICovXG4gICAgbWF4OiBudW1iZXI7XG4gICAgLyoqIFRpbWUgdW50aWwgY3VycmVudCByZXR1cm5zIHRvIG1heCBpbiBtcyAqL1xuICAgIGRlYm91bmNlOiBudW1iZXI7XG4gICAgLyoqIFNldHMgY3VycmVudCB0byBtaW4sIHB1dHMgdGhlIHN5c3RlbSBpbiByZWdyZXNzaW9uICovXG4gICAgcmVncmVzczogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndENhbWVyYSA9IFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSB8IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xuXG5leHBvcnQgdHlwZSBOZ3REb21FdmVudCA9IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQgfCBXaGVlbEV2ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEludGVyc2VjdGlvbkV2ZW50PFRTb3VyY2VFdmVudD4gZXh0ZW5kcyBOZ3RJbnRlcnNlY3Rpb24ge1xuICAgIC8qKiBBbiBhcnJheSBvZiBpbnRlcnNlY3Rpb25zICovXG4gICAgaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW107XG4gICAgLyoqIHZlYzMuc2V0KHBvaW50ZXIueCwgcG9pbnRlci55LCAwKS51bnByb2plY3QoY2FtZXJhKSAqL1xuICAgIHVucHJvamVjdGVkUG9pbnQ6IFRIUkVFLlZlY3RvcjM7XG4gICAgLyoqIE5vcm1hbGl6ZWQgZXZlbnQgY29vcmRpbmF0ZXMgKHg6IFstMSwgMV0sIHk6IFstMSwgMV0pICovXG4gICAgcG9pbnRlcjogVEhSRUUuVmVjdG9yMjtcbiAgICAvKiogZGVsdGEgYmV0d2VlbiBmaXJzdCBjbGljayBhbmQgdGhpcyBldmVudCAqL1xuICAgIGRlbHRhOiBudW1iZXI7XG4gICAgLyoqIHRoZSByYXkgY2FzdGVkIGZyb20gdGhlIGNhbWVyYSAqL1xuICAgIHJheTogVEhSRUUuUmF5O1xuICAgIC8qKiB0aGUgY2FtZXJhIHVzZWQgdG8gcmF5Y2FzdCAqL1xuICAgIGNhbWVyYTogTmd0Q2FtZXJhO1xuICAgIC8qKiBzdG9wUHJvcGFnYXRpb24gd2lsbCBzdG9wIHVuZGVybHlpbmcgaGFuZGxlcnMgZnJvbSBmaXJpbmcgKi9cbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgLyoqIHRoZSBvcmlnaW5hbCBldmVudCAqL1xuICAgIG5hdGl2ZUV2ZW50OiBUU291cmNlRXZlbnQ7XG4gICAgLyoqIGlmIHRoZSBldmVudCB3YXMgc3RvcHBlZCBieSBjYWxsaW5nIHN0b3BQcm9wYWdhdGlvbiAqL1xuICAgIHN0b3BwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW50ZXJzZWN0aW9uIGV4dGVuZHMgVEhSRUUuSW50ZXJzZWN0aW9uIHtcbiAgICAvKiogVGhlIGV2ZW50IHNvdXJjZSAodGhlIG9iamVjdCB3aGljaCByZWdpc3RlcmVkIHRoZSBoYW5kbGVyKSAqL1xuICAgIGV2ZW50T2JqZWN0OiBUSFJFRS5PYmplY3QzRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB7XG4gICAgaW50ZXJzZWN0aW9uOiBOZ3RJbnRlcnNlY3Rpb247XG4gICAgdGFyZ2V0OiBFbGVtZW50O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RUaHJlZUV2ZW50PFRFdmVudD4gPSBOZ3RJbnRlcnNlY3Rpb25FdmVudDxURXZlbnQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEV2ZW50SGFuZGxlcnMge1xuICAgIGNsaWNrPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICAgIGNvbnRleHRtZW51PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICAgIGRibGNsaWNrPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJ1cD86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJkb3duPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcm92ZXI/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcbiAgICBwb2ludGVyb3V0PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcmVudGVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcmxlYXZlPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcm1vdmU/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcbiAgICBwb2ludGVybWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJjYW5jZWw/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcbiAgICB3aGVlbD86IChldmVudDogTmd0VGhyZWVFdmVudDxXaGVlbEV2ZW50PikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRzID0ge1xuICAgIGNsaWNrOiBFdmVudExpc3RlbmVyO1xuICAgIGNvbnRleHRtZW51OiBFdmVudExpc3RlbmVyO1xuICAgIGRibGNsaWNrOiBFdmVudExpc3RlbmVyO1xuICAgIHdoZWVsOiBFdmVudExpc3RlbmVyO1xuICAgIHBvaW50ZXJkb3duOiBFdmVudExpc3RlbmVyO1xuICAgIHBvaW50ZXJ1cDogRXZlbnRMaXN0ZW5lcjtcbiAgICBwb2ludGVybGVhdmU6IEV2ZW50TGlzdGVuZXI7XG4gICAgcG9pbnRlcm1vdmU6IEV2ZW50TGlzdGVuZXI7XG4gICAgcG9pbnRlcmNhbmNlbDogRXZlbnRMaXN0ZW5lcjtcbiAgICBsb3N0cG9pbnRlcmNhcHR1cmU6IEV2ZW50TGlzdGVuZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RDb25kaXRpb25hbFR5cGU8Q2hpbGQsIFBhcmVudCwgVHJ1dGh5LCBGYWxzeT4gPSBDaGlsZCBleHRlbmRzIFBhcmVudCA/IFRydXRoeSA6IEZhbHN5O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndExvYWRlclByb3RvPFQ+IGV4dGVuZHMgVEhSRUUuTG9hZGVyIHtcbiAgICBsb2FkKFxuICAgICAgICB1cmw6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvbkxvYWQ/OiAocmVzdWx0OiBUKSA9PiB2b2lkLFxuICAgICAgICBvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkLFxuICAgICAgICBvbkVycm9yPzogKGV2ZW50OiBFcnJvckV2ZW50KSA9PiB2b2lkXG4gICAgKTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RMb2FkZXJFeHRlbnNpb25zIHtcbiAgICAobG9hZGVyOiBUSFJFRS5Mb2FkZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXN1bHQ8VD4gPSBUIGV4dGVuZHMgYW55W10gPyBOZ3RMb2FkZXJQcm90bzxUW251bWJlcl0+IDogTmd0TG9hZGVyUHJvdG88VD47XG5leHBvcnQgdHlwZSBOZ3RCcmFuY2hpbmdSZXR1cm48VCA9IGFueSwgUGFyZW50ID0gYW55LCBDb2VyY2VkID0gYW55PiA9IE5ndENvbmRpdGlvbmFsVHlwZTxULCBQYXJlbnQsIENvZXJjZWQsIFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndE9iamVjdE1hcCB7XG4gICAgbm9kZXM6IHsgW25hbWU6IHN0cmluZ106IFRIUkVFLk9iamVjdDNEIH07XG4gICAgbWF0ZXJpYWxzOiB7IFtuYW1lOiBzdHJpbmddOiBUSFJFRS5NYXRlcmlhbCB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBJZiAqKlQqKiBjb250YWlucyBhIGNvbnN0cnVjdG9yLCBAc2VlIENvbnN0cnVjdG9yUGFyYW1ldGVycyBtdXN0IGJlIHVzZWQsIG90aGVyd2lzZSAqKlQqKi5cbiAqL1xuZXhwb3J0IHR5cGUgTmd0Tm9kZUFyZ3M8VD4gPSBUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnkpID0+IGFueSA/IENvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiA6IFQ7XG5cbi8qKlxuICogVHVybiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUSFJFRS5WZWN0b3IgaW4gdG8gdGhlIHR5cGUgdGhhdCBhbiByM2YgY29tcG9uZW50IHdvdWxkIGFjY2VwdCBhcyBhIHByb3AuXG4gKi9cbnR5cGUgTmd0VmVjdG9yTGlrZTxWZWN0b3JDbGFzcyBleHRlbmRzIFRIUkVFLlZlY3Rvcj4gPVxuICAgIHwgVmVjdG9yQ2xhc3NcbiAgICB8IFBhcmFtZXRlcnM8VmVjdG9yQ2xhc3NbJ3NldCddPlxuICAgIHwgUmVhZG9ubHk8UGFyYW1ldGVyczxWZWN0b3JDbGFzc1snc2V0J10+PlxuICAgIHwgUGFyYW1ldGVyczxWZWN0b3JDbGFzc1snc2V0U2NhbGFyJ10+WzBdO1xuXG5leHBvcnQgdHlwZSBOZ3RWZWN0b3IyID0gTmd0VmVjdG9yTGlrZTxUSFJFRS5WZWN0b3IyPjtcbmV4cG9ydCB0eXBlIE5ndFZlY3RvcjMgPSBOZ3RWZWN0b3JMaWtlPFRIUkVFLlZlY3RvcjM+O1xuZXhwb3J0IHR5cGUgTmd0VmVjdG9yNCA9IE5ndFZlY3Rvckxpa2U8VEhSRUUuVmVjdG9yND47XG5leHBvcnQgdHlwZSBOZ3RMYXllcnMgPSBUSFJFRS5MYXllcnMgfCBQYXJhbWV0ZXJzPFRIUkVFLkxheWVyc1snc2V0J10+WzBdO1xuZXhwb3J0IHR5cGUgTmd0UXVhdGVybmlvbiA9IFRIUkVFLlF1YXRlcm5pb24gfCBQYXJhbWV0ZXJzPFRIUkVFLlF1YXRlcm5pb25bJ3NldCddPjtcbmV4cG9ydCB0eXBlIE5ndEV1bGVyID0gVEhSRUUuRXVsZXIgfCBQYXJhbWV0ZXJzPFRIUkVFLkV1bGVyWydzZXQnXT47XG5leHBvcnQgdHlwZSBOZ3RNYXRyaXg0ID0gVEhSRUUuTWF0cml4NCB8IFBhcmFtZXRlcnM8VEhSRUUuTWF0cml4NFsnc2V0J10+IHwgUmVhZG9ubHk8VEhSRUUuTWF0cml4NFsnc2V0J10+O1xuXG5leHBvcnQgdHlwZSBOZ3RDb2xvciA9IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgVEhSRUUuQ29sb3I+IHwgVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblxuZXhwb3J0IHR5cGUgTmd0RXh0ZW5kZWRDb2xvcnM8VD4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBUSFJFRS5Db2xvciB8IHVuZGVmaW5lZCA/IE5ndENvbG9yIDogVFtLXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Tm9kZVByb3BzPFA+IHtcbiAgICBhdHRhY2g/OiBzdHJpbmdbXTtcbiAgICAvKiogQ29uc3RydWN0b3IgYXJndW1lbnRzICovXG4gICAgYXJncz86IE5ndE5vZGVBcmdzPFA+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3ROb2RlPFQsIFA+ID0gTmd0RXh0ZW5kZWRDb2xvcnM8Tmd0T3ZlcndyaXRlPFBhcnRpYWw8VD4sIE5ndE5vZGVQcm9wczxQPj4+O1xuZXhwb3J0IHR5cGUgTmd0T2JqZWN0M0ROb2RlPFQsIFA+ID0gTmd0T3ZlcndyaXRlPFxuICAgIE5ndE5vZGU8VCwgUD4sXG4gICAge1xuICAgICAgICBwb3NpdGlvbj86IE5ndFZlY3RvcjM7XG4gICAgICAgIHVwPzogTmd0VmVjdG9yMztcbiAgICAgICAgc2NhbGU/OiBOZ3RWZWN0b3IzO1xuICAgICAgICByb3RhdGlvbj86IE5ndEV1bGVyO1xuICAgICAgICBtYXRyaXg/OiBOZ3RNYXRyaXg0O1xuICAgICAgICBxdWF0ZXJuaW9uPzogTmd0UXVhdGVybmlvbjtcbiAgICAgICAgbGF5ZXJzPzogTmd0TGF5ZXJzO1xuICAgICAgICBkaXNwb3NlPzogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICB9XG4+ICZcbiAgICBOZ3RFdmVudEhhbmRsZXJzO1xuXG5leHBvcnQgdHlwZSBOZ3RDYW1lcmFXaXRoTWFudWFsID0gTmd0Q2FtZXJhICYgeyBtYW51YWw/OiBib29sZWFuIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0UmVuZGVyU3RhdGUgZXh0ZW5kcyBOZ3RTdGF0ZSB7XG4gICAgZGVsdGE6IG51bWJlcjtcbiAgICBmcmFtZT86IFhSRnJhbWU7XG59XG5cbmV4cG9ydCB0eXBlIE5ndEJlZm9yZVJlbmRlckNhbGxiYWNrPFRPYmplY3QgPSBhbnk+ID0gKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSwgb2JqOiBUT2JqZWN0KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEJlZm9yZVJlbmRlclJlY29yZCB7XG4gICAgb2JqPzogVEhSRUUuT2JqZWN0M0QgfCBOZ3RSZWY7XG4gICAgY2FsbGJhY2s6IE5ndEJlZm9yZVJlbmRlckNhbGxiYWNrPFRIUkVFLk9iamVjdDNEIHwgdW5kZWZpbmVkPjtcbiAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICBzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RJbnRlcm5hbFN0YXRlIHtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgcHJpb3JpdHk6IG51bWJlcjtcbiAgICBmcmFtZXM6IG51bWJlcjtcbiAgICBsYXN0RXZlbnQ6IE5ndERvbUV2ZW50IHwgbnVsbDtcbiAgICBpbnRlcmFjdGlvbjogVEhSRUUuT2JqZWN0M0RbXTtcbiAgICBob3ZlcmVkOiBNYXA8c3RyaW5nLCBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50Pj47XG4gICAgc3Vic2NyaWJlcnM6IE5ndEJlZm9yZVJlbmRlclJlY29yZFtdO1xuICAgIGNhcHR1cmVkTWFwOiBNYXA8bnVtYmVyLCBNYXA8VEhSRUUuT2JqZWN0M0QsIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0Pj47XG4gICAgaW5pdGlhbENsaWNrOiBbeDogbnVtYmVyLCB5OiBudW1iZXJdO1xuICAgIGluaXRpYWxIaXRzOiBUSFJFRS5PYmplY3QzRFtdO1xuICAgIHN1YnNjcmliZTogKFxuICAgICAgICBjYWxsYmFjazogTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2ssXG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxuICAgICAgICBzdGF0ZUZhY3Rvcnk/OiBOZ3RTdGF0ZUZhY3RvcnksXG4gICAgICAgIG9iaj86IFRIUkVFLk9iamVjdDNEIHwgTmd0UmVmXG4gICAgKSA9PiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFN0YXRlIHtcbiAgICAvKiogVGhlIGZsYWcgdG8gbm90aWZ5IGlmIHRoZSBDYW52YXMgaXMgcmVhZHkgdG8gcmVuZGVyICovXG4gICAgcmVhZHk6IGJvb2xlYW47XG4gICAgLyoqIFRoZSBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyZXIgKi9cbiAgICBnbDogVEhSRUUuV2ViR0xSZW5kZXJlcjtcbiAgICAvKiogRGVmYXVsdCBjYW1lcmEgKi9cbiAgICBjYW1lcmE6IE5ndENhbWVyYVdpdGhNYW51YWwgLyoqIERlZmF1bHQgc2NlbmUgKi87XG4gICAgY2FtZXJhUmVmOiBOZ3RSZWY8Tmd0Q2FtZXJhV2l0aE1hbnVhbD47XG4gICAgc2NlbmU6IFRIUkVFLlNjZW5lO1xuICAgIHNjZW5lUmVmOiBOZ3RSZWY8VEhSRUUuU2NlbmU+O1xuICAgIC8qKiBEZWZhdWx0IHJheWNhc3RlciAqL1xuICAgIHJheWNhc3RlcjogVEhSRUUuUmF5Y2FzdGVyO1xuICAgIC8qKiBEZWZhdWx0IGNsb2NrICovXG4gICAgY2xvY2s6IFRIUkVFLkNsb2NrO1xuICAgIC8qKiBFdmVudCBsYXllciBpbnRlcmZhY2UsIGNvbnRhaW5zIHRoZSBldmVudCBoYW5kbGVyIGFuZCB0aGUgbm9kZSB0aGV5J3JlIGNvbm5lY3RlZCB0byAqL1xuICAgIGV2ZW50czogTmd0RXZlbnRNYW5hZ2VyPGFueT47XG4gICAgLyoqIFhSIGludGVyZmFjZSAqL1xuICAgIHhyOiB7IGNvbm5lY3Q6ICgpID0+IHZvaWQ7IGRpc2Nvbm5lY3Q6ICgpID0+IHZvaWQgfTtcbiAgICAvKiogQ3VycmVudGx5IHVzZWQgY29udHJvbHMgKi9cbiAgICBjb250cm9sczogVEhSRUUuRXZlbnREaXNwYXRjaGVyIHwgbnVsbDtcbiAgICAvKiogTm9ybWFsaXplZCBldmVudCBjb29yZGluYXRlcyAqL1xuICAgIHBvaW50ZXI6IFRIUkVFLlZlY3RvcjI7XG4gICAgLyogV2hldGhlciB0byBlbmFibGUgcjEzOSdzIFRIUkVFLkNvbG9yTWFuYWdlbWVudC5sZWdhY3lNb2RlICovXG4gICAgbGVnYWN5OiBib29sZWFuO1xuICAgIC8qKiBTaG9ydGN1dCB0byBnbC5vdXRwdXRFbmNvZGluZyA9IExpbmVhckVuY29kaW5nICovXG4gICAgbGluZWFyOiBib29sZWFuO1xuICAgIC8qKiBTaG9ydGN1dCB0byBnbC50b25lTWFwcGluZyA9IE5vVG9uZW1hcHBpbmcgKi9cbiAgICBmbGF0OiBib29sZWFuO1xuICAgIC8qKiBSZW5kZXIgbG9vcCBmbGFncyAqL1xuICAgIGZyYW1lbG9vcDogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcic7XG4gICAgLyoqIEFkYXB0aXZlIHBlcmZvcm1hbmNlIGludGVyZmFjZSAqL1xuICAgIHBlcmZvcm1hbmNlOiBOZ3RQZXJmb3JtYW5jZTtcbiAgICAvKiogUmVhY3RpdmUgcGl4ZWwtc2l6ZSBvZiB0aGUgY2FudmFzICovXG4gICAgc2l6ZTogTmd0U2l6ZTtcbiAgICAvKiogUmVhY3RpdmUgc2l6ZSBvZiB0aGUgdmlld3BvcnQgaW4gdGhyZWVqcyB1bml0cyAqL1xuICAgIHZpZXdwb3J0OiBOZ3RWaWV3cG9ydCAmIHtcbiAgICAgICAgZ2V0Q3VycmVudFZpZXdwb3J0OiAoXG4gICAgICAgICAgICBjYW1lcmE/OiBOZ3RDYW1lcmEsXG4gICAgICAgICAgICB0YXJnZXQ/OiBUSFJFRS5WZWN0b3IzIHwgUGFyYW1ldGVyczxUSFJFRS5WZWN0b3IzWydzZXQnXT4sXG4gICAgICAgICAgICBzaXplPzogTmd0U2l6ZVxuICAgICAgICApID0+IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPjtcbiAgICB9O1xuICAgIC8qKiBGbGFncyB0aGUgY2FudmFzIGZvciByZW5kZXIsIGJ1dCBkb2Vzbid0IHJlbmRlciBpbiBpdHNlbGYgKi9cbiAgICBpbnZhbGlkYXRlOiAoZnJhbWVzPzogbnVtYmVyKSA9PiB2b2lkO1xuICAgIC8qKiBBZHZhbmNlIChyZW5kZXIpIG9uZSBzdGVwICovXG4gICAgYWR2YW5jZTogKHRpbWVzdGFtcDogbnVtYmVyLCBydW5HbG9iYWxFZmZlY3RzPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgICAvKiogU2hvcnRjdXQgdG8gc2V0dGluZyB0aGUgZXZlbnQgbGF5ZXIgKi9cbiAgICBzZXRFdmVudHM6IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PiB2b2lkO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IHRvIG1hbnVhbCBzaXppbmdcbiAgICAgKi9cbiAgICBzZXRTaXplOiAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRvcD86IG51bWJlciwgbGVmdD86IG51bWJlciwgdXBkYXRlU3R5bGU/OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIC8qKiBTaG9ydGN1dCB0byBtYW51YWwgc2V0dGluZyB0aGUgcGl4ZWwgcmF0aW8gKi9cbiAgICBzZXREcHI6IChkcHI6IE5ndERwcikgPT4gdm9pZDtcbiAgICAvKiogU2hvcnRjdXQgdG8gZnJhbWVsb29wIGZsYWdzICovXG4gICAgc2V0RnJhbWVsb29wOiAoZnJhbWVsb29wPzogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcicpID0+IHZvaWQ7XG4gICAgLyoqIFNob3J0Y3V0IHRvIHNldCBwZXJmb3JtYW5jZS5jdXJyZW50IGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW5nICovXG4gICAgc2V0UGVyZm9ybWFuY2VDdXJyZW50OiAoY3VycmVudDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIC8qKiBTaG9ydGN1dCB0byBzZXQgdGhlIGN1cnJlbnQgY2FtZXJhICovXG4gICAgc2V0Q2FtZXJhOiAoY2FtZXJhOiBOZ3RDYW1lcmEpID0+IHZvaWQ7XG5cbiAgICAvKiogU2hvcnRjdXQgdG8gYWRkIGFuIG9iamVjdCBhcyBhbiBFdmVudCBpbnRlcmFjdGlvbiAqL1xuICAgIGFkZEludGVyYWN0aW9uKGludGVyYWN0aW9uOiBUSFJFRS5PYmplY3QzRCk6IHZvaWQ7XG5cbiAgICAvKiogU2hvcnRjdXQgdG8gcmVtb3ZlIGFuIG9iamVjdCBVVUlEIGZyb20gcGFydGljaXBhdGluZyBpbiBFdmVudHMgKi9cbiAgICByZW1vdmVJbnRlcmFjdGlvbih1dWlkOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgLyoqIFdoZW4gdGhlIGNhbnZhcyB3YXMgY2xpY2tlZCBidXQgbm90aGluZyB3YXMgaGl0ICovXG4gICAgb25Qb2ludGVyTWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIC8qIGludGVybmFscyAqL1xuICAgIGludGVybmFsOiBOZ3RJbnRlcm5hbFN0YXRlO1xuICAgIC8qKiBJZiB0aGlzIHN0YXRlIG1vZGVsIGlzIGxheWVyZCAodmlhIGNyZWF0ZVBvcnRhbCkgdGhlbiB0aGlzIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBsYXllciAqL1xuICAgIHByZXZpb3VzU3RhdGVGYWN0b3J5PzogTmd0U3RhdGVGYWN0b3J5O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RTdGF0ZUZhY3RvcnkgPSAoKSA9PiBOZ3RTdGF0ZTtcblxuZXhwb3J0IHR5cGUgTmd0RmlsdGVyRnVuY3Rpb24gPSAoaXRlbXM6IFRIUkVFLkludGVyc2VjdGlvbltdLCBzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeSkgPT4gVEhSRUUuSW50ZXJzZWN0aW9uW107XG5leHBvcnQgdHlwZSBOZ3RDb21wdXRlRnVuY3Rpb24gPSAoXG4gICAgZXZlbnQ6IE5ndERvbUV2ZW50LFxuICAgIHJvb3RTdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeSxcbiAgICBwcmV2aW91c1N0YXRlRmFjdG9yeT86IE5ndFN0YXRlRmFjdG9yeVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEV2ZW50TWFuYWdlcjxUVGFyZ2V0PiB7XG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGV2ZW50IGxheWVyIGlzIGFjdGl2ZSAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqIEV2ZW50IGxheWVyIHByaW9yaXR5LCBoaWdoZXIgcHJpb3JpdGl6ZWQgbGF5ZXJzIGNvbWUgZmlyc3QgYW5kIG1heSBzdG9wKC1wcm9wYWdhdGUpIGxvd2VyIGxheWVyICAqL1xuICAgIHByaW9yaXR5OiBudW1iZXI7XG4gICAgLyoqIFRoZSBjb21wdXRlIGZ1bmN0aW9uIG5lZWRzIHRvIHNldCB1cCB0aGUgcmF5Y2FzdGVyIGFuZCBhbiB4eS0gcG9pbnRlciAgKi9cbiAgICBjb21wdXRlPzogTmd0Q29tcHV0ZUZ1bmN0aW9uO1xuICAgIC8qKiBUaGUgZmlsdGVyIGNhbiByZS1vcmRlciBvciByZS1zdHJ1Y3R1cmUgdGhlIGludGVyc2VjdGlvbnMgICovXG4gICAgZmlsdGVyPzogTmd0RmlsdGVyRnVuY3Rpb247XG4gICAgLyoqIFRoZSB0YXJnZXQgbm9kZSB0aGUgZXZlbnQgbGF5ZXIgaXMgdGllZCB0byAqL1xuICAgIGNvbm5lY3RlZD86IFRUYXJnZXQ7XG4gICAgLyoqIEFsbCB0aGUgcG9pbnRlciBldmVudCBoYW5kbGVycyB0aHJvdWdoIHdoaWNoIHRoZSBob3N0IGZvcndhcmRzIG5hdGl2ZSBldmVudHMgKi9cbiAgICBoYW5kbGVycz86IE5ndEV2ZW50cztcbiAgICAvKiogQWxsb3dzIHJlLWNvbm5lY3RpbmcgdG8gYW5vdGhlciB0YXJnZXQgKi9cbiAgICBjb25uZWN0PzogKHRhcmdldDogVFRhcmdldCkgPT4gdm9pZDtcbiAgICAvKiogUmVtb3ZlcyBhbGwgZXhpc3RpbmcgZXZlbnRzIGhhbmRsZXJzIGZyb20gdGhlIHRhcmdldCAqL1xuICAgIGRpc2Nvbm5lY3Q/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RBdHRhY2hGdW5jdGlvbjxUQ2hpbGQgPSBhbnksIFRQYXJlbnQgPSBhbnk+ID0gKFxuICAgIHBhcmVudDogTmd0UmVmPFRQYXJlbnQ+LFxuICAgIGNoaWxkOiBOZ3RSZWY8VENoaWxkPixcbiAgICBzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeVxuKSA9PiB2b2lkIHwgKCgpID0+IHZvaWQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgLyoqIHRoZSBzdGF0ZSBnZXR0ZXIgb2YgdGhlIGNhbnZhcyB0aGF0IHRoZSBpbnN0YW5jZSBpcyBiZWluZyByZW5kZXJlZCB0byAqL1xuICAgIHN0YXRlRmFjdG9yeTogTmd0U3RhdGVGYWN0b3J5O1xuICAgIHJvb3RGYWN0b3J5OiBOZ3RTdGF0ZUZhY3Rvcnk7XG4gICAgLy8gbm9uLW9iamVjdCAzZFxuICAgIGluc3RhbmNlc1JlZnM6IE5ndFJlZjxOZ3RSZWZbXT47XG4gICAgLy8gb2JqZWN0LTNkXG4gICAgb2JqZWN0c1JlZnM6IE5ndFJlZjxOZ3RSZWZbXT47XG4gICAgcGFyZW50UmVmOiBOZ3RSZWY8Tmd0SW5zdGFuY2VOb2RlPiB8IG51bGw7XG4gICAgaXNQcmltaXRpdmU/OiBib29sZWFuO1xuICAgIGlzUmF3PzogYm9vbGVhbjtcbiAgICBldmVudENvdW50OiBudW1iZXI7XG4gICAgaGFuZGxlcnM6IFBhcnRpYWw8Tmd0RXZlbnRIYW5kbGVycz47XG4gICAgYXJncz86IHVua25vd25bXTtcbiAgICBhdHRhY2g/OiBzdHJpbmdbXSB8ICgoKSA9PiB2b2lkKTtcbiAgICBhdHRhY2hWYWx1ZT86IHVua25vd247XG4gICAgbWVtb2l6ZWQ/OiBOZ3RBbnlSZWNvcmQ7XG59XG5cbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlTm9kZTxUTm9kZSA9IGFueT4gPSBUTm9kZSAmIHtcbiAgICBfX25ndF9fOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGU7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0R0xPcHRpb25zID1cbiAgICB8IFJlbmRlcmVyXG4gICAgfCAoKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpID0+IFJlbmRlcmVyKVxuICAgIHwgUGFydGlhbDxOZ3RQcm9wZXJ0aWVzPFdlYkdMUmVuZGVyZXI+IHwgV2ViR0xSZW5kZXJlclBhcmFtZXRlcnM+XG4gICAgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Q2FudmFzSW5wdXRzIHtcbiAgICAvKiogQSB0aHJlZWpzIHJlbmRlcmVyIGluc3RhbmNlIG9yIHByb3BzIHRoYXQgZ28gaW50byB0aGUgZGVmYXVsdCByZW5kZXJlciAqL1xuICAgIGdsPzogTmd0R0xPcHRpb25zO1xuICAgIC8qKiBEaW1lbnNpb25zIHRvIGZpdCB0aGUgcmVuZGVyZXIgdG8uIFdpbGwgbWVhc3VyZSBjYW52YXMgZGltZW5zaW9ucyBpZiBvbWl0dGVkICovXG4gICAgc2l6ZT86IE5ndFNpemU7XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBQQ0Zzb2Z0IHNoYWRvd3MuIENhbiBhY2NlcHQgYGdsLnNoYWRvd01hcGAgb3B0aW9ucyBmb3IgZmluZS10dW5pbmcuXG4gICAgICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9yZW5kZXJlcnMvV2ViR0xSZW5kZXJlci5zaGFkb3dNYXBcbiAgICAgKi9cbiAgICBzaGFkb3dzPzogYm9vbGVhbiB8IFBhcnRpYWw8VEhSRUUuV2ViR0xTaGFkb3dNYXA+O1xuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRocmVlIHIxMzkgY29sb3IgbWFuYWdlbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jbWFudWFsL2VuL2ludHJvZHVjdGlvbi9Db2xvci1tYW5hZ2VtZW50XG4gICAgICovXG4gICAgbGVnYWN5PzogYm9vbGVhbjtcbiAgICAvKiogU3dpdGNoIG9mZiBhdXRvbWF0aWMgc1JHQiBlbmNvZGluZyBhbmQgZ2FtbWEgY29ycmVjdGlvbiAqL1xuICAgIGxpbmVhcj86IGJvb2xlYW47XG4gICAgLyoqIFVzZSBgVEhSRUUuTm9Ub25lTWFwcGluZ2AgaW5zdGVhZCBvZiBgVEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nYCAqL1xuICAgIGZsYXQ/OiBib29sZWFuO1xuICAgIC8qKiBDcmVhdGVzIGFuIG9ydGhvZ3JhcGhpYyBjYW1lcmEgKi9cbiAgICBvcnRob2dyYXBoaWM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFIzRidzIHJlbmRlciBtb2RlLiBTZXQgdG8gYGRlbWFuZGAgdG8gb25seSByZW5kZXIgb24gc3RhdGUgY2hhbmdlIG9yIGBuZXZlcmAgdG8gdGFrZSBjb250cm9sLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYWR2YW5jZWQvc2NhbGluZy1wZXJmb3JtYW5jZSNvbi1kZW1hbmQtcmVuZGVyaW5nXG4gICAgICovXG4gICAgZnJhbWVsb29wPzogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcic7XG4gICAgLyoqXG4gICAgICogUjNGIHBlcmZvcm1hbmNlIG9wdGlvbnMgZm9yIGFkYXB0aXZlIHBlcmZvcm1hbmNlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYWR2YW5jZWQvc2NhbGluZy1wZXJmb3JtYW5jZSNtb3ZlbWVudC1yZWdyZXNzaW9uXG4gICAgICovXG4gICAgcGVyZm9ybWFuY2U/OiBQYXJ0aWFsPE9taXQ8Tmd0UGVyZm9ybWFuY2UsICdyZWdyZXNzJz4+O1xuICAgIC8qKiBUYXJnZXQgcGl4ZWwgcmF0aW8uIENhbiBjbGFtcCBiZXR3ZWVuIGEgcmFuZ2U6IGBbbWluLCBtYXhdYCAqL1xuICAgIGRwcj86IE5ndERwcjtcbiAgICAvKiogUHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHJheWNhc3RlciAqL1xuICAgIHJheWNhc3Rlcj86IFBhcnRpYWw8VEhSRUUuUmF5Y2FzdGVyPjtcbiAgICAvKiogQSBgVEhSRUUuQ2FtZXJhYCBpbnN0YW5jZSBvciBwcm9wcyB0aGF0IGdvIGludG8gdGhlIGRlZmF1bHQgY2FtZXJhICovXG4gICAgY2FtZXJhPzogKFxuICAgICAgICB8IE5ndENhbWVyYVxuICAgICAgICB8IFBhcnRpYWw8XG4gICAgICAgICAgICAgIE5ndE9iamVjdDNETm9kZTxUSFJFRS5DYW1lcmEsIHR5cGVvZiBUSFJFRS5DYW1lcmE+ICZcbiAgICAgICAgICAgICAgICAgIE5ndE9iamVjdDNETm9kZTxUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSwgdHlwZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhPiAmXG4gICAgICAgICAgICAgICAgICBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhLCB0eXBlb2YgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhPlxuICAgICAgICAgID5cbiAgICApICYge1xuICAgICAgICAvKiogRmxhZ3MgdGhlIGNhbWVyYSBhcyBtYW51YWwsIHB1dHRpbmcgcHJvamVjdGlvbiBpbnRvIHlvdXIgb3duIGhhbmRzICovXG4gICAgICAgIG1hbnVhbD86IGJvb2xlYW47XG4gICAgfTtcbiAgICAvKiogQW4gUjNGIGV2ZW50IG1hbmFnZXIgdG8gbWFuYWdlIGVsZW1lbnRzJyBwb2ludGVyIGV2ZW50cyAqL1xuICAgIGV2ZW50cz86IChzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeSkgPT4gTmd0RXZlbnRNYW5hZ2VyPEhUTUxFbGVtZW50PjtcbiAgICAvKiogVGhlIHRhcmdldCB3aGVyZSBldmVudHMgYXJlIGJlaW5nIHN1YnNjcmliZWQgdG8sIGRlZmF1bHQ6IHRoZSBkaXYgdGhhdCB3cmFwcyBjYW52YXMgKi9cbiAgICBldmVudFNvdXJjZT86IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgLyoqIFRoZSBldmVudCBwcmVmaXggdGhhdCBpcyBjYXN0IGludG8gY2FudmFzIHBvaW50ZXIgeC95IGV2ZW50cywgZGVmYXVsdDogXCJvZmZzZXRcIiAqL1xuICAgIGV2ZW50UHJlZml4PzogJ29mZnNldCcgfCAnY2xpZW50JyB8ICdwYWdlJyB8ICdsYXllcicgfCAnc2NyZWVuJztcbiAgICAvKiogRGVmYXVsdCBjb29yZGluYXRlIGZvciB0aGUgY2FtZXJhIHRvIGxvb2sgYXQgKi9cbiAgICBsb29rQXQ/OiBUSFJFRS5WZWN0b3IzO1xufVxuIl19