@colijnit/configurator 261.1.1 → 261.20.1

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 (401) hide show
  1. package/{fesm2015/colijnit-configurator.js → fesm2022/colijnit-configurator.mjs} +19087 -18481
  2. package/fesm2022/colijnit-configurator.mjs.map +1 -0
  3. package/index.d.ts +3299 -0
  4. package/lib/components/answer-card/style/_layout.scss +3 -3
  5. package/lib/components/answers-slideout/style/_layout.scss +1 -0
  6. package/lib/style/configurator-globals.scss +1 -21
  7. package/package.json +24 -19
  8. package/bundles/colijnit-configurator.umd.js +0 -20167
  9. package/bundles/colijnit-configurator.umd.js.map +0 -1
  10. package/colijnit-configurator.d.ts +0 -5
  11. package/esm2015/colijnit-configurator.js +0 -5
  12. package/esm2015/lib/builder.js +0 -795
  13. package/esm2015/lib/components/answer-card/answer-card.component.js +0 -313
  14. package/esm2015/lib/components/answer-card/answer-card.module.js +0 -50
  15. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +0 -182
  16. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +0 -34
  17. package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +0 -490
  18. package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +0 -61
  19. package/esm2015/lib/components/color-filter/color-filter.component.js +0 -59
  20. package/esm2015/lib/components/color-filter/color-filter.module.js +0 -26
  21. package/esm2015/lib/components/configurator/configurator.component.js +0 -133
  22. package/esm2015/lib/components/configurator/configurator.module.js +0 -42
  23. package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +0 -222
  24. package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +0 -48
  25. package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +0 -82
  26. package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +0 -163
  27. package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +0 -49
  28. package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +0 -33
  29. package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +0 -60
  30. package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +0 -17
  31. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +0 -46
  32. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +0 -26
  33. package/esm2015/lib/components/element-buttons/element-buttons.component.js +0 -168
  34. package/esm2015/lib/components/element-buttons/element-buttons.module.js +0 -30
  35. package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +0 -186
  36. package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +0 -34
  37. package/esm2015/lib/components/image-zoom/image-zoom.component.js +0 -61
  38. package/esm2015/lib/components/image-zoom/image-zoom.module.js +0 -30
  39. package/esm2015/lib/components/lite-selector/lite-selector.component.js +0 -206
  40. package/esm2015/lib/components/lite-selector/lite-selector.module.js +0 -34
  41. package/esm2015/lib/components/product-configurator/product-configurator.component.js +0 -184
  42. package/esm2015/lib/components/product-configurator/product-configurator.module.js +0 -72
  43. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +0 -237
  44. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +0 -38
  45. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +0 -284
  46. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +0 -42
  47. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +0 -72
  48. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +0 -34
  49. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +0 -82
  50. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +0 -30
  51. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +0 -80
  52. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +0 -34
  53. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +0 -93
  54. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +0 -34
  55. package/esm2015/lib/components/progress-bar/progress-bar.component.js +0 -55
  56. package/esm2015/lib/components/progress-bar/progress-bar.module.js +0 -29
  57. package/esm2015/lib/components/scene-options/scene-options.component.js +0 -164
  58. package/esm2015/lib/components/scene-options/scene-options.module.js +0 -38
  59. package/esm2015/lib/components/selections-summary/selections-summary.component.js +0 -163
  60. package/esm2015/lib/components/selections-summary/selections-summary.module.js +0 -45
  61. package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +0 -171
  62. package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +0 -34
  63. package/esm2015/lib/components/slideout/slideout.component.js +0 -83
  64. package/esm2015/lib/components/slideout/slideout.module.js +0 -17
  65. package/esm2015/lib/components/summary-line/summary-line.component.js +0 -273
  66. package/esm2015/lib/components/summary-line/summary-line.module.js +0 -44
  67. package/esm2015/lib/components/tag-filter/tag-filter.component.js +0 -39
  68. package/esm2015/lib/components/tag-filter/tag-filter.module.js +0 -21
  69. package/esm2015/lib/components/threedselector/threedselector.component.js +0 -155
  70. package/esm2015/lib/components/threedselector/threedselector.module.js +0 -34
  71. package/esm2015/lib/core/helper/variation-helper.js +0 -553
  72. package/esm2015/lib/core/shader/floor-fade.shader.js +0 -33
  73. package/esm2015/lib/core/textures/depth-data-texture.js +0 -19
  74. package/esm2015/lib/directives/directives.module.js +0 -26
  75. package/esm2015/lib/directives/visibility-observer-master.directive.js +0 -53
  76. package/esm2015/lib/directives/visibility-observer.directive.js +0 -54
  77. package/esm2015/lib/enum/ar-feature.enum.js +0 -14
  78. package/esm2015/lib/enum/configuration-key.enum.js +0 -41
  79. package/esm2015/lib/enum/configuration-template.enum.js +0 -6
  80. package/esm2015/lib/enum/device-size-type.js +0 -7
  81. package/esm2015/lib/enum/device-tier.enum.js +0 -7
  82. package/esm2015/lib/enum/icon.enum.js +0 -113
  83. package/esm2015/lib/enum/item-type.enum.js +0 -23
  84. package/esm2015/lib/enum/light.enum.js +0 -9
  85. package/esm2015/lib/enum/navigator-type.enum.js +0 -6
  86. package/esm2015/lib/enum/output-encoding.enum.js +0 -9
  87. package/esm2015/lib/enum/result-type.enum.js +0 -21
  88. package/esm2015/lib/enum/scene-event.enum.js +0 -12
  89. package/esm2015/lib/enum/shadow-map-type.enum.js +0 -8
  90. package/esm2015/lib/enum/texture-type.js +0 -9
  91. package/esm2015/lib/enum/tone-mapping-local.enum.js +0 -12
  92. package/esm2015/lib/enum/view-mode.enum.js +0 -7
  93. package/esm2015/lib/enum/xr-mode.enum.js +0 -6
  94. package/esm2015/lib/environments/environment.js +0 -8
  95. package/esm2015/lib/interfaces/aa-options.interface.js +0 -2
  96. package/esm2015/lib/interfaces/adjustable-element.interface.js +0 -2
  97. package/esm2015/lib/interfaces/ao-options.interface.js +0 -2
  98. package/esm2015/lib/interfaces/changes.interface.js +0 -2
  99. package/esm2015/lib/interfaces/configuration-data.interface.js +0 -2
  100. package/esm2015/lib/interfaces/light-preset.interface.js +0 -2
  101. package/esm2015/lib/interfaces/post-processing-setting.interface.js +0 -2
  102. package/esm2015/lib/interfaces/scene-option-button.interface.js +0 -6
  103. package/esm2015/lib/interfaces/screen-size-info.js +0 -2
  104. package/esm2015/lib/interfaces/setting.interface.js +0 -2
  105. package/esm2015/lib/interfaces/texture.interface.js +0 -2
  106. package/esm2015/lib/interfaces/vignette-options.interface.js +0 -2
  107. package/esm2015/lib/model/ar-position-indicator.js +0 -18
  108. package/esm2015/lib/model/camera-settings.js +0 -14
  109. package/esm2015/lib/model/configuration-result-object.js +0 -6
  110. package/esm2015/lib/model/configurator-error-message.js +0 -9
  111. package/esm2015/lib/model/configurator-settings.js +0 -25
  112. package/esm2015/lib/model/custom-button.js +0 -16
  113. package/esm2015/lib/model/factory.js +0 -28
  114. package/esm2015/lib/model/icon.js +0 -112
  115. package/esm2015/lib/model/intersected-objects.js +0 -7
  116. package/esm2015/lib/model/light-preset.js +0 -73
  117. package/esm2015/lib/model/light-properties.js +0 -45
  118. package/esm2015/lib/model/material.js +0 -11
  119. package/esm2015/lib/model/metadata.js +0 -2
  120. package/esm2015/lib/model/render-parameters.js +0 -16
  121. package/esm2015/lib/model/setting-options.js +0 -71
  122. package/esm2015/lib/model/settings.js +0 -16
  123. package/esm2015/lib/model/shadow-properties.js +0 -10
  124. package/esm2015/lib/model/skin.js +0 -3
  125. package/esm2015/lib/model/texture.js +0 -76
  126. package/esm2015/lib/model/variation-settings.js +0 -54
  127. package/esm2015/lib/model/variation.js +0 -3
  128. package/esm2015/lib/model/xr-reticle.js +0 -79
  129. package/esm2015/lib/modules/render/enum/scene-type.enum.js +0 -6
  130. package/esm2015/lib/modules/render/model/ar-parameters.js +0 -12
  131. package/esm2015/lib/modules/render/model/scene-setting.js +0 -6
  132. package/esm2015/lib/modules/render/model/scene-settings.js +0 -3
  133. package/esm2015/lib/pipes/append.pipe.js +0 -21
  134. package/esm2015/lib/pipes/google-translate.pipe.js +0 -21
  135. package/esm2015/lib/pipes/localize.pipe.js +0 -28
  136. package/esm2015/lib/pipes/pipes.module.js +0 -41
  137. package/esm2015/lib/pipes/prepend.pipe.js +0 -21
  138. package/esm2015/lib/pipes/strip-html.pipe.js +0 -17
  139. package/esm2015/lib/services/app-event.service.js +0 -36
  140. package/esm2015/lib/services/app-initializer.service.js +0 -27
  141. package/esm2015/lib/services/ar.service.js +0 -844
  142. package/esm2015/lib/services/build-furniture-base.service.js +0 -1181
  143. package/esm2015/lib/services/build-furniture-without-scene.service.js +0 -86
  144. package/esm2015/lib/services/build-furniture.service.js +0 -169
  145. package/esm2015/lib/services/bundle-initialzer.service.js +0 -113
  146. package/esm2015/lib/services/camera.service.js +0 -123
  147. package/esm2015/lib/services/configuration.service.js +0 -79
  148. package/esm2015/lib/services/configurator-connector.service.js +0 -830
  149. package/esm2015/lib/services/configurator.service.js +0 -285
  150. package/esm2015/lib/services/configuring.service.js +0 -119
  151. package/esm2015/lib/services/controls.js +0 -799
  152. package/esm2015/lib/services/debug.service.js +0 -43
  153. package/esm2015/lib/services/dictionary.service.js +0 -65
  154. package/esm2015/lib/services/dynamic-camera.service.js +0 -96
  155. package/esm2015/lib/services/floor-plane.service.js +0 -252
  156. package/esm2015/lib/services/font.service.js +0 -27
  157. package/esm2015/lib/services/google-translate.service.js +0 -79
  158. package/esm2015/lib/services/icon-cache.service.js +0 -44
  159. package/esm2015/lib/services/intersection.service.js +0 -47
  160. package/esm2015/lib/services/item.service.js +0 -75
  161. package/esm2015/lib/services/json-utils.service.js +0 -48
  162. package/esm2015/lib/services/light-creation.service.js +0 -35
  163. package/esm2015/lib/services/light-presets.service.js +0 -157
  164. package/esm2015/lib/services/lights.service.js +0 -146
  165. package/esm2015/lib/services/load-furniture-base.service.js +0 -164
  166. package/esm2015/lib/services/load-furniture-without-scene.service.js +0 -45
  167. package/esm2015/lib/services/load-furniture.service.js +0 -72
  168. package/esm2015/lib/services/loader.service.js +0 -32
  169. package/esm2015/lib/services/locator.service.js +0 -11
  170. package/esm2015/lib/services/message-board.service.js +0 -50
  171. package/esm2015/lib/services/post-processing.service.js +0 -378
  172. package/esm2015/lib/services/product-configurator.service.js +0 -16
  173. package/esm2015/lib/services/progress.service.js +0 -20
  174. package/esm2015/lib/services/scene-event.service.js +0 -246
  175. package/esm2015/lib/services/scene-options.service.js +0 -24
  176. package/esm2015/lib/services/scene.service.js +0 -313
  177. package/esm2015/lib/services/screen-size-analysis.service.js +0 -97
  178. package/esm2015/lib/services/settings.service.js +0 -142
  179. package/esm2015/lib/services/switch-build-furniture.service.js +0 -37
  180. package/esm2015/lib/services/switch-load-furniture.service.js +0 -35
  181. package/esm2015/lib/services/threedselector.service.js +0 -72
  182. package/esm2015/lib/services/utils.service.js +0 -207
  183. package/esm2015/lib/services/variation-cache.service.js +0 -143
  184. package/esm2015/lib/services/variation.service.js +0 -490
  185. package/esm2015/lib/services/view-mode.service.js +0 -37
  186. package/esm2015/lib/services/vr.service.js +0 -191
  187. package/esm2015/lib/services/xr.service.js +0 -294
  188. package/esm2015/lib/utils/asset.utils.js +0 -120
  189. package/esm2015/lib/utils/base-utils.js +0 -9
  190. package/esm2015/lib/utils/color.utils.js +0 -30
  191. package/esm2015/lib/utils/debug.utils.js +0 -9
  192. package/esm2015/lib/utils/device.utils.js +0 -25
  193. package/esm2015/lib/utils/file.utils.js +0 -167
  194. package/esm2015/lib/utils/image.utils.js +0 -61
  195. package/esm2015/lib/utils/json-parser.utils.js +0 -180
  196. package/esm2015/lib/utils/material.utils.js +0 -433
  197. package/esm2015/lib/utils/object.utils.js +0 -360
  198. package/esm2015/lib/utils/relative-position.utils.js +0 -75
  199. package/esm2015/lib/utils/rotation-helper.utils.js +0 -15
  200. package/esm2015/lib/utils/scene-3d.utils.js +0 -213
  201. package/esm2015/lib/utils/scene-utils.js +0 -191
  202. package/esm2015/lib/utils/text-utils.js +0 -68
  203. package/esm2015/lib/utils/threed.utils.js +0 -281
  204. package/esm2015/lib/utils/variation-utils.js +0 -459
  205. package/esm2015/public-api.js +0 -65
  206. package/fesm2015/colijnit-configurator.js.map +0 -1
  207. package/lib/builder.d.ts +0 -83
  208. package/lib/components/answer-card/answer-card.component.d.ts +0 -58
  209. package/lib/components/answer-card/answer-card.module.d.ts +0 -11
  210. package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +0 -38
  211. package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +0 -10
  212. package/lib/components/answers-slideout/answers-slideout.component.d.ts +0 -86
  213. package/lib/components/answers-slideout/answers-slideout.module.d.ts +0 -16
  214. package/lib/components/color-filter/color-filter.component.d.ts +0 -20
  215. package/lib/components/color-filter/color-filter.module.d.ts +0 -8
  216. package/lib/components/configurator/configurator.component.d.ts +0 -37
  217. package/lib/components/configurator/configurator.module.d.ts +0 -12
  218. package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +0 -30
  219. package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +0 -13
  220. package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +0 -16
  221. package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +0 -26
  222. package/lib/components/configurator-loader/configurator-loader.component.d.ts +0 -7
  223. package/lib/components/configurator-loader/configurator-loader.module.d.ts +0 -9
  224. package/lib/components/configurator-scene/configurator-scene.component.d.ts +0 -24
  225. package/lib/components/configurator-scene/configurator-scene.module.d.ts +0 -7
  226. package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +0 -7
  227. package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +0 -8
  228. package/lib/components/element-buttons/element-buttons.component.d.ts +0 -32
  229. package/lib/components/element-buttons/element-buttons.module.d.ts +0 -9
  230. package/lib/components/element-toolbar/element-toolbar.component.d.ts +0 -27
  231. package/lib/components/element-toolbar/element-toolbar.module.d.ts +0 -10
  232. package/lib/components/image-zoom/image-zoom.component.d.ts +0 -15
  233. package/lib/components/image-zoom/image-zoom.module.d.ts +0 -9
  234. package/lib/components/lite-selector/lite-selector.component.d.ts +0 -40
  235. package/lib/components/lite-selector/lite-selector.module.d.ts +0 -10
  236. package/lib/components/product-configurator/product-configurator.component.d.ts +0 -50
  237. package/lib/components/product-configurator/product-configurator.module.d.ts +0 -15
  238. package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +0 -35
  239. package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +0 -11
  240. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +0 -31
  241. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +0 -13
  242. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +0 -20
  243. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +0 -10
  244. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +0 -20
  245. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +0 -10
  246. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +0 -21
  247. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +0 -10
  248. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +0 -21
  249. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +0 -10
  250. package/lib/components/progress-bar/progress-bar.component.d.ts +0 -10
  251. package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
  252. package/lib/components/scene-options/scene-options.component.d.ts +0 -24
  253. package/lib/components/scene-options/scene-options.module.d.ts +0 -11
  254. package/lib/components/selections-summary/selections-summary.component.d.ts +0 -38
  255. package/lib/components/selections-summary/selections-summary.module.d.ts +0 -12
  256. package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +0 -27
  257. package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +0 -10
  258. package/lib/components/slideout/slideout.component.d.ts +0 -22
  259. package/lib/components/slideout/slideout.module.d.ts +0 -7
  260. package/lib/components/summary-line/summary-line.component.d.ts +0 -50
  261. package/lib/components/summary-line/summary-line.module.d.ts +0 -11
  262. package/lib/components/tag-filter/tag-filter.component.d.ts +0 -9
  263. package/lib/components/tag-filter/tag-filter.module.d.ts +0 -7
  264. package/lib/components/threedselector/threedselector.component.d.ts +0 -38
  265. package/lib/components/threedselector/threedselector.module.d.ts +0 -10
  266. package/lib/core/helper/variation-helper.d.ts +0 -25
  267. package/lib/core/shader/floor-fade.shader.d.ts +0 -5
  268. package/lib/core/textures/depth-data-texture.d.ts +0 -5
  269. package/lib/directives/directives.module.d.ts +0 -8
  270. package/lib/directives/visibility-observer-master.directive.d.ts +0 -12
  271. package/lib/directives/visibility-observer.directive.d.ts +0 -16
  272. package/lib/enum/ar-feature.enum.d.ts +0 -12
  273. package/lib/enum/configuration-key.enum.d.ts +0 -39
  274. package/lib/enum/configuration-template.enum.d.ts +0 -4
  275. package/lib/enum/device-size-type.d.ts +0 -5
  276. package/lib/enum/device-tier.enum.d.ts +0 -5
  277. package/lib/enum/icon.enum.d.ts +0 -111
  278. package/lib/enum/item-type.enum.d.ts +0 -21
  279. package/lib/enum/light.enum.d.ts +0 -7
  280. package/lib/enum/navigator-type.enum.d.ts +0 -4
  281. package/lib/enum/output-encoding.enum.d.ts +0 -7
  282. package/lib/enum/result-type.enum.d.ts +0 -19
  283. package/lib/enum/scene-event.enum.d.ts +0 -10
  284. package/lib/enum/shadow-map-type.enum.d.ts +0 -6
  285. package/lib/enum/texture-type.d.ts +0 -7
  286. package/lib/enum/tone-mapping-local.enum.d.ts +0 -10
  287. package/lib/enum/view-mode.enum.d.ts +0 -5
  288. package/lib/enum/xr-mode.enum.d.ts +0 -4
  289. package/lib/environments/environment.d.ts +0 -4
  290. package/lib/interfaces/aa-options.interface.d.ts +0 -4
  291. package/lib/interfaces/adjustable-element.interface.d.ts +0 -5
  292. package/lib/interfaces/ao-options.interface.d.ts +0 -18
  293. package/lib/interfaces/changes.interface.d.ts +0 -9
  294. package/lib/interfaces/configuration-data.interface.d.ts +0 -40
  295. package/lib/interfaces/light-preset.interface.d.ts +0 -22
  296. package/lib/interfaces/post-processing-setting.interface.d.ts +0 -11
  297. package/lib/interfaces/scene-option-button.interface.d.ts +0 -19
  298. package/lib/interfaces/screen-size-info.d.ts +0 -10
  299. package/lib/interfaces/setting.interface.d.ts +0 -8
  300. package/lib/interfaces/texture.interface.d.ts +0 -44
  301. package/lib/interfaces/vignette-options.interface.d.ts +0 -4
  302. package/lib/model/ar-position-indicator.d.ts +0 -4
  303. package/lib/model/camera-settings.d.ts +0 -12
  304. package/lib/model/configuration-result-object.d.ts +0 -30
  305. package/lib/model/configurator-error-message.d.ts +0 -8
  306. package/lib/model/configurator-settings.d.ts +0 -62
  307. package/lib/model/custom-button.d.ts +0 -10
  308. package/lib/model/factory.d.ts +0 -5
  309. package/lib/model/icon.d.ts +0 -4
  310. package/lib/model/intersected-objects.d.ts +0 -6
  311. package/lib/model/light-preset.d.ts +0 -33
  312. package/lib/model/light-properties.d.ts +0 -25
  313. package/lib/model/material.d.ts +0 -41
  314. package/lib/model/metadata.d.ts +0 -78
  315. package/lib/model/render-parameters.d.ts +0 -12
  316. package/lib/model/setting-options.d.ts +0 -67
  317. package/lib/model/settings.d.ts +0 -10
  318. package/lib/model/shadow-properties.d.ts +0 -7
  319. package/lib/model/skin.d.ts +0 -15
  320. package/lib/model/texture.d.ts +0 -52
  321. package/lib/model/variation-settings.d.ts +0 -55
  322. package/lib/model/variation.d.ts +0 -11
  323. package/lib/model/xr-reticle.d.ts +0 -17
  324. package/lib/modules/render/enum/scene-type.enum.d.ts +0 -4
  325. package/lib/modules/render/model/ar-parameters.d.ts +0 -9
  326. package/lib/modules/render/model/scene-setting.d.ts +0 -13
  327. package/lib/modules/render/model/scene-settings.d.ts +0 -4
  328. package/lib/pipes/append.pipe.d.ts +0 -7
  329. package/lib/pipes/google-translate.pipe.d.ts +0 -11
  330. package/lib/pipes/localize.pipe.d.ts +0 -10
  331. package/lib/pipes/pipes.module.d.ts +0 -11
  332. package/lib/pipes/prepend.pipe.d.ts +0 -7
  333. package/lib/pipes/strip-html.pipe.d.ts +0 -7
  334. package/lib/services/app-event.service.d.ts +0 -32
  335. package/lib/services/app-initializer.service.d.ts +0 -14
  336. package/lib/services/ar.service.d.ts +0 -120
  337. package/lib/services/build-furniture-base.service.d.ts +0 -117
  338. package/lib/services/build-furniture-without-scene.service.d.ts +0 -14
  339. package/lib/services/build-furniture.service.d.ts +0 -14
  340. package/lib/services/bundle-initialzer.service.d.ts +0 -45
  341. package/lib/services/camera.service.d.ts +0 -44
  342. package/lib/services/configuration.service.d.ts +0 -18
  343. package/lib/services/configurator-connector.service.d.ts +0 -140
  344. package/lib/services/configurator.service.d.ts +0 -62
  345. package/lib/services/configuring.service.d.ts +0 -46
  346. package/lib/services/controls.d.ts +0 -11
  347. package/lib/services/debug.service.d.ts +0 -16
  348. package/lib/services/dictionary.service.d.ts +0 -15
  349. package/lib/services/dynamic-camera.service.d.ts +0 -21
  350. package/lib/services/floor-plane.service.d.ts +0 -47
  351. package/lib/services/font.service.d.ts +0 -10
  352. package/lib/services/google-translate.service.d.ts +0 -26
  353. package/lib/services/icon-cache.service.d.ts +0 -21
  354. package/lib/services/intersection.service.d.ts +0 -11
  355. package/lib/services/item.service.d.ts +0 -18
  356. package/lib/services/json-utils.service.d.ts +0 -7
  357. package/lib/services/light-creation.service.d.ts +0 -9
  358. package/lib/services/light-presets.service.d.ts +0 -34
  359. package/lib/services/lights.service.d.ts +0 -34
  360. package/lib/services/load-furniture-base.service.d.ts +0 -37
  361. package/lib/services/load-furniture-without-scene.service.d.ts +0 -9
  362. package/lib/services/load-furniture.service.d.ts +0 -9
  363. package/lib/services/loader.service.d.ts +0 -11
  364. package/lib/services/locator.service.d.ts +0 -7
  365. package/lib/services/message-board.service.d.ts +0 -18
  366. package/lib/services/post-processing.service.d.ts +0 -74
  367. package/lib/services/product-configurator.service.d.ts +0 -11
  368. package/lib/services/progress.service.d.ts +0 -9
  369. package/lib/services/scene-event.service.d.ts +0 -72
  370. package/lib/services/scene-options.service.d.ts +0 -11
  371. package/lib/services/scene.service.d.ts +0 -71
  372. package/lib/services/screen-size-analysis.service.d.ts +0 -32
  373. package/lib/services/settings.service.d.ts +0 -24
  374. package/lib/services/switch-build-furniture.service.d.ts +0 -21
  375. package/lib/services/switch-load-furniture.service.d.ts +0 -21
  376. package/lib/services/threedselector.service.d.ts +0 -17
  377. package/lib/services/utils.service.d.ts +0 -24
  378. package/lib/services/variation-cache.service.d.ts +0 -23
  379. package/lib/services/variation.service.d.ts +0 -26
  380. package/lib/services/view-mode.service.d.ts +0 -17
  381. package/lib/services/vr.service.d.ts +0 -42
  382. package/lib/services/xr.service.d.ts +0 -56
  383. package/lib/utils/asset.utils.d.ts +0 -19
  384. package/lib/utils/base-utils.d.ts +0 -4
  385. package/lib/utils/color.utils.d.ts +0 -8
  386. package/lib/utils/debug.utils.d.ts +0 -3
  387. package/lib/utils/device.utils.d.ts +0 -7
  388. package/lib/utils/file.utils.d.ts +0 -30
  389. package/lib/utils/image.utils.d.ts +0 -9
  390. package/lib/utils/json-parser.utils.d.ts +0 -9
  391. package/lib/utils/material.utils.d.ts +0 -34
  392. package/lib/utils/object.utils.d.ts +0 -32
  393. package/lib/utils/relative-position.utils.d.ts +0 -12
  394. package/lib/utils/rotation-helper.utils.d.ts +0 -6
  395. package/lib/utils/scene-3d.utils.d.ts +0 -8
  396. package/lib/utils/scene-utils.d.ts +0 -7
  397. package/lib/utils/text-utils.d.ts +0 -4
  398. package/lib/utils/threed.utils.d.ts +0 -20
  399. package/lib/utils/variation-utils.d.ts +0 -18
  400. package/public-api.d.ts +0 -60
  401. /package/lib/style/{template_variables.scss → _variables.scss} +0 -0
@@ -1,459 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { VariationSettings } from '../model/variation-settings';
3
- // @ts-ignore
4
- import JSZip from 'jszip';
5
- import { Color, MaterialLoader } from 'three';
6
- import { FileUtils } from './file.utils';
7
- import { DebugUtils } from './debug.utils';
8
- // @dynamic
9
- export class VariationUtils {
10
- static ClearCache() {
11
- this.MaterialCache.clear();
12
- }
13
- static LoadVariation(url, fileName, includeVariationFolder = true) {
14
- return __awaiter(this, void 0, void 0, function* () {
15
- if (!fileName) {
16
- return null;
17
- }
18
- if (!fileName.includes('ione3d')) {
19
- fileName = fileName.concat('.ione3d');
20
- }
21
- const id = fileName.substr(0, fileName.lastIndexOf('.ione3d'));
22
- const variationUrl = `${url + (includeVariationFolder ? '/variation' : '')}/${fileName}`;
23
- if (this.MaterialCache.has(id)) {
24
- return this.MaterialCache.get(id);
25
- }
26
- if (!window.hasOwnProperty('downloadVariation')) {
27
- try {
28
- const fileExists = yield FileUtils.DoesFileExist(variationUrl);
29
- if (!fileExists) {
30
- DebugUtils.log(`Failed to find variation file: ${variationUrl}`);
31
- return null;
32
- }
33
- else {
34
- const response = yield fetch(variationUrl);
35
- if (!response.ok) {
36
- DebugUtils.log(`Failed to fetch variation file: ${variationUrl} - ${response.status}`);
37
- return null;
38
- }
39
- const compressed = yield response.blob();
40
- return yield VariationUtils.GetVariationSettingsFromFile(id, compressed);
41
- }
42
- }
43
- catch (err) {
44
- const mute = err;
45
- return null;
46
- }
47
- }
48
- else {
49
- try {
50
- const file = yield window.downloadVariation(variationUrl);
51
- const settings = yield VariationUtils.GetVariationSettingsFromFile(id, file);
52
- this.MaterialCache.set(id, settings);
53
- return settings;
54
- }
55
- catch (err) {
56
- console.error('Error loading variation:', err);
57
- throw err;
58
- }
59
- }
60
- });
61
- }
62
- static LoadVariationByUrl(materialCode, url) {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- if (!url) {
65
- return null;
66
- }
67
- if (!url.includes('ione3d')) {
68
- url = url.concat('.ione3d');
69
- }
70
- if (this.MaterialCache.has(materialCode)) {
71
- return this.MaterialCache.get(materialCode);
72
- }
73
- if (!window.hasOwnProperty('downloadVariation')) {
74
- // Normal download
75
- try {
76
- const fileExists = yield FileUtils.DoesFileExist(url);
77
- if (!fileExists) {
78
- DebugUtils.log(`Failed to find variation file: ${url}`);
79
- return null;
80
- }
81
- else {
82
- const response = yield fetch(url);
83
- if (!response.ok) {
84
- DebugUtils.log(`Failed to fetch variation file: ${url} - ${response.status}`);
85
- return null;
86
- }
87
- const compressed = yield response.blob();
88
- return yield VariationUtils.GetVariationSettingsFromFile(materialCode, compressed);
89
- }
90
- }
91
- catch (err) {
92
- console.error('Error loading variation:', err);
93
- throw err;
94
- }
95
- // console.error('downloadVariation not defined in window global');
96
- // throw new Error('downloadVariation not defined in window global');
97
- }
98
- else {
99
- // Headless
100
- try {
101
- const file = yield window.downloadVariation(url);
102
- const settings = yield VariationUtils.GetVariationSettingsFromFile(materialCode, file);
103
- this.MaterialCache.set(materialCode, settings);
104
- return settings;
105
- }
106
- catch (err) {
107
- console.error('Error loading variation:', err);
108
- throw err;
109
- }
110
- }
111
- });
112
- }
113
- static GetUrl(assetPath, url, fileName, includeVariationFolder = true) {
114
- if (fileName.indexOf('ione3d') < 0) {
115
- fileName = fileName.concat('.ione3d');
116
- }
117
- if (assetPath && !assetPath.endsWith('/')) {
118
- assetPath += '/';
119
- }
120
- return `${assetPath}${url + (includeVariationFolder ? '/variation' : '')}/${fileName}`;
121
- }
122
- static GetFloorAssetUrl(assetPath, url, fileName, articleNumber) {
123
- if (fileName.indexOf('ione3d') < 0) {
124
- fileName = fileName.concat('.ione3d');
125
- }
126
- if (assetPath && !assetPath.endsWith('/')) {
127
- assetPath += '/';
128
- }
129
- return `${assetPath}${url + '/' + articleNumber}/${fileName}`;
130
- }
131
- // public static GetMaterialFromName(variationFolder: string, material: any): Promise<MeshStandardMaterial> {
132
- // return new Promise((resolve: Function) => {
133
- // if (!material) {
134
- // resolve(null);
135
- // }
136
- // if (this.MaterialCache.has(material.name)) {
137
- // resolve(this.MaterialCache.get(material.name).clone());
138
- // } else {
139
- // VariationUtils.LoadVariation(variationFolder, material.name, false).then((settings: VariationSettings) => {
140
- // if (settings) {
141
- // AssetUtils.CreateMaterialFromAsset(settings).then((materialObj: Material) => {
142
- // const materialParams: MeshStandardMaterialParameters = {};
143
- // materialParams.name = material.name;
144
- // materialParams.map = materialObj.texture;
145
- // materialParams.normalMap = materialObj.normal;
146
- // materialParams.aoMap = materialObj.ao;
147
- // materialParams.roughnessMap = materialObj.roughness;
148
- // materialParams.metalnessMap = materialObj.metalness;
149
- // materialParams.roughness = 1;
150
- // materialParams.metalness = 1;
151
- // const pbrMat: MeshStandardMaterial = new MeshStandardMaterial(materialParams);
152
- // this.MaterialCache.set(material.name, pbrMat);
153
- // resolve(pbrMat.clone());
154
- // });
155
- // } else {
156
- // resolve(material);
157
- // }
158
- // });
159
- // }
160
- // });
161
- // }
162
- static GetVariationSettingsFromFile(id, compressedFile) {
163
- return __awaiter(this, void 0, void 0, function* () {
164
- // TODO CHECK with Patrick
165
- if (!compressedFile) {
166
- return null;
167
- }
168
- // const zipContent = await VariationUtils.GetZipContent(compressedFile);
169
- // const variationSettings: VariationSettings = new VariationSettings();
170
- // let index;
171
- // variationSettings.id = id;
172
- //
173
- // if (zipContent) {
174
- // if (zipContent.files['material.glb']) {
175
- // const material: string = await zipContent.files['material.glb'].async('arraybuffer');
176
- // variationSettings.material = await VariationUtils.LoadMaterialFromGlb(material);
177
- // } else {
178
- // if (zipContent.files['index.json']) {
179
- // const indexFile: string = await zipContent.files['index.json'].async('string');
180
- // index = JSON.parse(indexFile);
181
- // }
182
- // if (index) {
183
- // await VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);
184
- // } else {
185
- // await VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);
186
- // }
187
- // }
188
- // }
189
- // return variationSettings;
190
- const zipContent = yield VariationUtils.GetZipContent(compressedFile);
191
- const variationSettings = new VariationSettings();
192
- let index;
193
- variationSettings.id = id;
194
- if (zipContent.files.hasOwnProperty('index.json')) {
195
- const indexFile = yield zipContent.files['index.json'].async('string');
196
- index = JSON.parse(indexFile);
197
- }
198
- if (index) {
199
- yield VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);
200
- }
201
- else {
202
- yield VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);
203
- }
204
- return variationSettings;
205
- });
206
- }
207
- static CreateSettingsBasedOnIndex(index, variationSettings, zipContent) {
208
- return __awaiter(this, void 0, void 0, function* () {
209
- if (index.normalFile) {
210
- variationSettings.normal = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.normalFile], index.normalFile);
211
- variationSettings.normalFilename = index.normalFile;
212
- }
213
- if (index.diffuseFile) {
214
- variationSettings.texture = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.diffuseFile], index.diffuseFile);
215
- variationSettings.textureFilename = index.diffuseFile;
216
- }
217
- if (index.ormFile) {
218
- variationSettings.orm = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.ormFile], index.ormFile);
219
- variationSettings.ormFilename = index.ormFile;
220
- }
221
- else {
222
- if (index.aoFile) {
223
- variationSettings.ao = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.aoFile], index.aoFile);
224
- variationSettings.aoFilename = index.aoFile;
225
- }
226
- if (index.metalnessFile) {
227
- variationSettings.metalness = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.metalnessFile], index.metalnessFile);
228
- variationSettings.metalnessFilename = index.metalnessFile;
229
- }
230
- if (index.roughnessFile) {
231
- variationSettings.roughness = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.roughnessFile], index.roughnessFile);
232
- variationSettings.roughnessFilename = index.roughnessFile;
233
- }
234
- }
235
- if (index.displacementFile) {
236
- variationSettings.displacement = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.displacementFile], index.displacementFile);
237
- variationSettings.displacementFilename = index.displacementFile;
238
- }
239
- if (index.emissiveFile) {
240
- variationSettings.emissive = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.emissiveFile], index.emissiveFile);
241
- variationSettings.emissiveFilename = index.emissiveFile;
242
- }
243
- if (index.envMapFile) {
244
- variationSettings.envMap = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.envMapFile], index.envMapFile);
245
- variationSettings.envMapFilename = index.envMapFile;
246
- }
247
- if (index.sheenColorMapFile) {
248
- variationSettings.sheenColorMap = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.sheenColorMapFile], index.sheenColorMapFile);
249
- variationSettings.sheenColorMapFilename = index.sheenColorMapFile;
250
- }
251
- if (index.sheenRoughnessMapFile) {
252
- variationSettings.sheenRoughnessMap = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.sheenRoughnessMapFile], index.sheenRoughnessMapFile);
253
- variationSettings.sheenRoughnessMapFilename = index.sheenColorMapFile;
254
- }
255
- if (index.transmissionMapFile) {
256
- variationSettings.transmissionMap = yield VariationUtils.LoadFileContentFromZip(zipContent.files[index.transmissionMapFile], index.transmissionMapFile);
257
- variationSettings.transmissionMapFilename = index.transmissionMapFile;
258
- }
259
- if (index.repeat) {
260
- variationSettings.settings.repeatx = index.repeat.repeatx;
261
- variationSettings.settings.repeaty = index.repeat.repeaty;
262
- }
263
- variationSettings.settings.metalness = index.metalness;
264
- variationSettings.settings.roughness = index.roughness;
265
- variationSettings.sheen = index.sheen;
266
- if (index.sheenColor) {
267
- variationSettings.sheenColor = new Color(index.sheenColor.r, index.sheenColor.g, index.sheenColor.b);
268
- }
269
- variationSettings.sheenRoughness = index.sheenRoughness;
270
- variationSettings.envMapIntensity = index.envMapIntensity;
271
- variationSettings.transparent = index.transparent;
272
- variationSettings.opacity = index.opacity;
273
- if (index.emissiveValue) {
274
- variationSettings.emissiveValue = new Color(index.emissiveValue.r, index.emissiveValue.g, index.emissiveValue.b);
275
- }
276
- variationSettings.emissiveIntensity = index.emissiveIntensity;
277
- variationSettings.reflectivity = index.reflectivity;
278
- variationSettings.displacementValue = index.displacementValue;
279
- variationSettings.side = index.side;
280
- variationSettings.transmission = index.transmission;
281
- variationSettings.ior = index.ior;
282
- variationSettings.thickness = index.thickness;
283
- variationSettings.specularIntensity = index.specularIntensity;
284
- });
285
- }
286
- static CreateSettingsBasedOnFileName(variationSettings, zipContent) {
287
- return __awaiter(this, void 0, void 0, function* () {
288
- const allLoaded = [];
289
- for (const fileName in zipContent.files) {
290
- if (zipContent.files.hasOwnProperty(fileName)) {
291
- const file = yield zipContent.files[fileName];
292
- if (file.name.toLowerCase().indexOf('normal') > -1 && this.FileIsImage(file.name)) {
293
- allLoaded.push(zipContent.files[fileName].async('base64').then((normalFile) => {
294
- variationSettings.normal = `data:image/${this.GetBase64FileType(file.name)};base64,${normalFile}`;
295
- variationSettings.normalFilename = fileName;
296
- }));
297
- }
298
- else if (file.name.toLowerCase().indexOf('ao') > -1 && this.FileIsImage(file.name)) {
299
- allLoaded.push(zipContent.files[fileName].async('base64').then((aoFile) => {
300
- variationSettings.ao = `data:image/${this.GetBase64FileType(file.name)};base64,${aoFile}`;
301
- variationSettings.aoFilename = fileName;
302
- }));
303
- }
304
- else if (file.name.toLowerCase().indexOf('metalness') > -1 && this.FileIsImage(file.name)) {
305
- allLoaded.push(zipContent.files[fileName].async('base64').then((metalnessFile) => {
306
- variationSettings.metalness = `data:image/${this.GetBase64FileType(file.name)};base64,${metalnessFile}`;
307
- variationSettings.metalnessFilename = fileName;
308
- }));
309
- }
310
- else if (file.name.toLowerCase().indexOf('roughness') > -1 && this.FileIsImage(file.name)) {
311
- allLoaded.push(zipContent.files[fileName].async('base64').then((roughnessFile) => {
312
- variationSettings.roughness = `data:image/${this.GetBase64FileType(file.name)};base64,${roughnessFile}`;
313
- variationSettings.roughnessFilename = fileName;
314
- }));
315
- }
316
- else if (file.name.toLowerCase().indexOf('diffuse') > -1 && this.FileIsImage(file.name)) {
317
- allLoaded.push(zipContent.files[fileName].async('base64').then((diffuseFile) => {
318
- variationSettings.texture = `data:image/${this.GetBase64FileType(file.name)};base64,${diffuseFile}`;
319
- variationSettings.textureFilename = fileName;
320
- }));
321
- }
322
- else if (file.name.toLowerCase().indexOf('displacement') > -1 && this.FileIsImage(file.name)) {
323
- allLoaded.push(zipContent.files[fileName].async('base64').then((displacementFile) => {
324
- variationSettings.displacement = `data:image/${this.GetBase64FileType(file.name)};base64,${displacementFile}`;
325
- variationSettings.displacementFilename = fileName;
326
- }));
327
- }
328
- else if (file.name.toLowerCase().indexOf('emissive') > -1 && this.FileIsImage(file.name)) {
329
- allLoaded.push(zipContent.files[fileName].async('base64').then((emissiveFile) => {
330
- variationSettings.emissive = `data:image/${this.GetBase64FileType(file.name)};base64,${emissiveFile}`;
331
- variationSettings.emissiveFilename = fileName;
332
- }));
333
- }
334
- else if (file.name.toLowerCase().indexOf('envMap') > -1 && this.FileIsImage(file.name)) {
335
- allLoaded.push(zipContent.files[fileName].async('base64').then((envMapFile) => {
336
- variationSettings.envMap = `data:image/${this.GetBase64FileType(file.name)};base64,${envMapFile}`;
337
- variationSettings.envMapFilename = fileName;
338
- }));
339
- }
340
- else if (file.name.toLowerCase().indexOf('sheenColorMap') > -1 && this.FileIsImage(file.name)) {
341
- allLoaded.push(zipContent.files[fileName].async('base64').then((sheenColorMapFile) => {
342
- variationSettings.sheenColorMap = `data:image/${this.GetBase64FileType(file.name)};base64,${sheenColorMapFile}`;
343
- variationSettings.sheenColorMapFilename = fileName;
344
- }));
345
- }
346
- else if (file.name.toLowerCase().indexOf('sheenRoughnessMap') > -1 && this.FileIsImage(file.name)) {
347
- allLoaded.push(zipContent.files[fileName].async('base64').then((sheenRoughnessMapFile) => {
348
- variationSettings.sheenRoughnessMap = `data:image/${this.GetBase64FileType(file.name)};base64,${sheenRoughnessMapFile}`;
349
- variationSettings.sheenRoughnessMapFilename = fileName;
350
- }));
351
- }
352
- else if (file.name.toLowerCase().indexOf('transmissionMap') > -1 && this.FileIsImage(file.name)) {
353
- allLoaded.push(zipContent.files[fileName].async('base64').then((transmissionMapFile) => {
354
- variationSettings.transmissionMap = `data:image/${this.GetBase64FileType(file.name)};base64,${transmissionMapFile}`;
355
- variationSettings.transmissionMapFilename = fileName;
356
- }));
357
- }
358
- else if (file.name.indexOf('.jp') > -1) {
359
- allLoaded.push(zipContent.files[fileName].async('base64').then((textureFile) => {
360
- variationSettings.texture = 'data:image/jpeg;base64,' + textureFile;
361
- variationSettings.textureFilename = fileName;
362
- }));
363
- }
364
- else if (file.name.indexOf('.json') > -1) {
365
- allLoaded.push(zipContent.files[fileName].async('string').then((settingsFile) => {
366
- const settingsFileObj = JSON.parse(settingsFile);
367
- for (const key in settingsFileObj) {
368
- if (settingsFileObj.hasOwnProperty(key)) {
369
- variationSettings.settings[key] = settingsFileObj[key];
370
- }
371
- }
372
- }));
373
- }
374
- }
375
- }
376
- yield Promise.all(allLoaded);
377
- });
378
- }
379
- static LoadMaterialFromJson(material) {
380
- const loader = new MaterialLoader();
381
- if (material.textures) {
382
- const textures = {};
383
- for (let i = 0; i < material.textures.length; i++) {
384
- textures[material.textures[i].uuid] = material.textures[i];
385
- }
386
- loader.setTextures(textures);
387
- }
388
- return loader.parse(material);
389
- }
390
- static LoadMaterialFromGlb(material) {
391
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
392
- if (!window.hasOwnProperty('loadGLTF')) {
393
- console.error('loadGLTF not defined in window global');
394
- return reject();
395
- }
396
- const obj = yield window.loadGLTF(material, false);
397
- if (obj) {
398
- return resolve(obj.children[0].material);
399
- }
400
- }));
401
- }
402
- static LoadFileContentFromZip(zip, fileName, base64 = true) {
403
- return new Promise((resolve) => {
404
- if (zip && fileName) {
405
- zip.async(base64 ? 'base64' : 'string').then((fileContent) => {
406
- if (base64) {
407
- resolve(`data:image/${this.GetBase64FileType(fileName)};base64,${fileContent}`);
408
- }
409
- else {
410
- resolve(fileContent);
411
- }
412
- });
413
- }
414
- else {
415
- resolve(undefined);
416
- }
417
- });
418
- }
419
- static FileIsImage(fileName) {
420
- const ext = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();
421
- switch (ext) {
422
- case 'jpg':
423
- case 'jpeg':
424
- case 'png':
425
- case 'bmp':
426
- return true;
427
- default:
428
- return false;
429
- }
430
- }
431
- static GetBase64FileType(fileName) {
432
- const ext = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();
433
- switch (ext) {
434
- case 'jpg':
435
- case 'jpeg':
436
- return 'jpeg';
437
- case 'png':
438
- return 'png';
439
- case 'bmp':
440
- return 'bmp';
441
- default:
442
- return 'jpeg';
443
- }
444
- }
445
- // Get the content
446
- static GetZipContent(file) {
447
- return __awaiter(this, void 0, void 0, function* () {
448
- try {
449
- const jszip = new JSZip();
450
- return yield jszip.loadAsync(file);
451
- }
452
- catch (e) {
453
- return null;
454
- }
455
- });
456
- }
457
- }
458
- VariationUtils.MaterialCache = new Map();
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWF0aW9uLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvdXRpbHMvdmFyaWF0aW9uLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxhQUFhO0FBQ2IsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxLQUFLLEVBQVksY0FBYyxFQUFpQyxNQUFNLE9BQU8sQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsV0FBVztBQUNYLE1BQU0sT0FBTyxjQUFjO0lBR2xCLE1BQU0sQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLE1BQU0sQ0FBTyxhQUFhLENBQy9CLEdBQVcsRUFDWCxRQUFnQixFQUNoQix5QkFBa0MsSUFBSTs7WUFFdEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2hDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsTUFBTSxFQUFFLEdBQVcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sWUFBWSxHQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksUUFB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Q2YsS0FBSyxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsT0FBTyxNQUFNLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1YsTUFBTSxDQUFPLGFBQWEsQ0FBQyxJQUFJOztZQUNyQyxJQUFJO2dCQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxJQUFJLENBQUM7YUFDYjtRQUNILENBQUM7S0FBQTs7QUExYmMsNEJBQWEsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VmFyaWF0aW9uU2V0dGluZ3N9IGZyb20gJy4uL21vZGVsL3ZhcmlhdGlvbi1zZXR0aW5ncyc7XHJcbi8vIEB0cy1pZ25vcmVcclxuaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJztcclxuaW1wb3J0IHtDb2xvciwgTWF0ZXJpYWwsIE1hdGVyaWFsTG9hZGVyLCBNZXNoLCBPYmplY3QzRCwgU1JHQkNvbG9yU3BhY2V9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHsgRmlsZVV0aWxzIH0gZnJvbSAnLi9maWxlLnV0aWxzJztcclxuaW1wb3J0IHtEZWJ1Z1V0aWxzfSBmcm9tICcuL2RlYnVnLnV0aWxzJztcclxuXHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBWYXJpYXRpb25VdGlscyB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTWF0ZXJpYWxDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbGVhckNhY2hlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5NYXRlcmlhbENhY2hlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFzeW5jIExvYWRWYXJpYXRpb24oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGZpbGVOYW1lOiBzdHJpbmcsXHJcbiAgICBpbmNsdWRlVmFyaWF0aW9uRm9sZGVyOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IFByb21pc2U8VmFyaWF0aW9uU2V0dGluZ3M+IHtcclxuICAgIGlmICghZmlsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcygnaW9uZTNkJykpIHtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5jb25jYXQoJy5pb25lM2QnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpZDogc3RyaW5nID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuaW9uZTNkJykpO1xyXG4gICAgY29uc3QgdmFyaWF0aW9uVXJsOiBzdHJpbmcgPSBgJHt1cmwgKyAoaW5jbHVkZVZhcmlhdGlvbkZvbGRlciA/ICcvdmFyaWF0aW9uJyA6ICcnKX0vJHtmaWxlTmFtZX1gO1xyXG5cclxuICAgIGlmICh0aGlzLk1hdGVyaWFsQ2FjaGUuaGFzKGlkKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5NYXRlcmlhbENhY2hlLmdldChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2Rvd25sb2FkVmFyaWF0aW9uJykpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBmaWxlRXhpc3RzOiBib29sZWFuID0gYXdhaXQgRmlsZVV0aWxzLkRvZXNGaWxlRXhpc3QodmFyaWF0aW9uVXJsKTtcclxuICAgICAgICBpZiAoIWZpbGVFeGlzdHMpIHtcclxuICAgICAgICAgIERlYnVnVXRpbHMubG9nKGBGYWlsZWQgdG8gZmluZCB2YXJpYXRpb24gZmlsZTogJHt2YXJpYXRpb25Vcmx9YCk7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godmFyaWF0aW9uVXJsKTtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgRGVidWdVdGlscy5sb2coYEZhaWxlZCB0byBmZXRjaCB2YXJpYXRpb24gZmlsZTogJHt2YXJpYXRpb25Vcmx9IC0gJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgY29tcHJlc3NlZCA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcclxuICAgICAgICAgIHJldHVybiBhd2FpdCBWYXJpYXRpb25VdGlscy5HZXRWYXJpYXRpb25TZXR0aW5nc0Zyb21GaWxlKGlkLCBjb21wcmVzc2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnN0IG11dGUgPSBlcnI7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0ICh3aW5kb3cgYXMgYW55KS5kb3dubG9hZFZhcmlhdGlvbih2YXJpYXRpb25VcmwpO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncyA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkdldFZhcmlhdGlvblNldHRpbmdzRnJvbUZpbGUoaWQsIGZpbGUpO1xyXG4gICAgICAgIHRoaXMuTWF0ZXJpYWxDYWNoZS5zZXQoaWQsIHNldHRpbmdzKTtcclxuICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdmFyaWF0aW9uOicsIGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFzeW5jIExvYWRWYXJpYXRpb25CeVVybChtYXRlcmlhbENvZGU6IHN0cmluZywgdXJsOiBzdHJpbmcpOiBQcm9taXNlPFZhcmlhdGlvblNldHRpbmdzPiB7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICghdXJsLmluY2x1ZGVzKCdpb25lM2QnKSkge1xyXG4gICAgICB1cmwgPSB1cmwuY29uY2F0KCcuaW9uZTNkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuTWF0ZXJpYWxDYWNoZS5oYXMobWF0ZXJpYWxDb2RlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5NYXRlcmlhbENhY2hlLmdldChtYXRlcmlhbENvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdkb3dubG9hZFZhcmlhdGlvbicpKSB7XHJcbiAgICAgIC8vIE5vcm1hbCBkb3dubG9hZFxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVFeGlzdHM6IGJvb2xlYW4gPSBhd2FpdCBGaWxlVXRpbHMuRG9lc0ZpbGVFeGlzdCh1cmwpO1xyXG4gICAgICAgIGlmICghZmlsZUV4aXN0cykge1xyXG4gICAgICAgICAgRGVidWdVdGlscy5sb2coYEZhaWxlZCB0byBmaW5kIHZhcmlhdGlvbiBmaWxlOiAke3VybH1gKTtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZTogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xyXG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBEZWJ1Z1V0aWxzLmxvZyhgRmFpbGVkIHRvIGZldGNoIHZhcmlhdGlvbiBmaWxlOiAke3VybH0gLSAke3Jlc3BvbnNlLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBjb21wcmVzc2VkID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xyXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFZhcmlhdGlvblV0aWxzLkdldFZhcmlhdGlvblNldHRpbmdzRnJvbUZpbGUobWF0ZXJpYWxDb2RlLCBjb21wcmVzc2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdmFyaWF0aW9uOicsIGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ2Rvd25sb2FkVmFyaWF0aW9uIG5vdCBkZWZpbmVkIGluIHdpbmRvdyBnbG9iYWwnKTtcclxuICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCdkb3dubG9hZFZhcmlhdGlvbiBub3QgZGVmaW5lZCBpbiB3aW5kb3cgZ2xvYmFsJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBIZWFkbGVzc1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCAod2luZG93IGFzIGFueSkuZG93bmxvYWRWYXJpYXRpb24odXJsKTtcclxuICAgICAgICBjb25zdCBzZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPSBhd2FpdCBWYXJpYXRpb25VdGlscy5HZXRWYXJpYXRpb25TZXR0aW5nc0Zyb21GaWxlKG1hdGVyaWFsQ29kZSwgZmlsZSk7XHJcbiAgICAgICAgdGhpcy5NYXRlcmlhbENhY2hlLnNldChtYXRlcmlhbENvZGUsIHNldHRpbmdzKTtcclxuICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdmFyaWF0aW9uOicsIGVycik7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldFVybChhc3NldFBhdGg6IHN0cmluZywgdXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGluY2x1ZGVWYXJpYXRpb25Gb2xkZXI6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcclxuICAgIGlmIChmaWxlTmFtZS5pbmRleE9mKCdpb25lM2QnKSA8IDApIHtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5jb25jYXQoJy5pb25lM2QnKTtcclxuICAgIH1cclxuICAgIGlmIChhc3NldFBhdGggJiYgIWFzc2V0UGF0aC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgIGFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7YXNzZXRQYXRofSR7dXJsICsgKGluY2x1ZGVWYXJpYXRpb25Gb2xkZXIgPyAnL3ZhcmlhdGlvbicgOiAnJyl9LyR7ZmlsZU5hbWV9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgR2V0Rmxvb3JBc3NldFVybChhc3NldFBhdGg6IHN0cmluZywgdXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGFydGljbGVOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoZmlsZU5hbWUuaW5kZXhPZignaW9uZTNkJykgPCAwKSB7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuY29uY2F0KCcuaW9uZTNkJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXNzZXRQYXRoICYmICFhc3NldFBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICBhc3NldFBhdGggKz0gJy8nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2Fzc2V0UGF0aH0ke3VybCArICcvJyArIGFydGljbGVOdW1iZXJ9LyR7ZmlsZU5hbWV9YDtcclxuICB9XHJcblxyXG5cclxuICAvLyBwdWJsaWMgc3RhdGljIEdldE1hdGVyaWFsRnJvbU5hbWUodmFyaWF0aW9uRm9sZGVyOiBzdHJpbmcsIG1hdGVyaWFsOiBhbnkpOiBQcm9taXNlPE1lc2hTdGFuZGFyZE1hdGVyaWFsPiB7XHJcbiAgLy8gICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgLy8gICAgIGlmICghbWF0ZXJpYWwpIHtcclxuICAvLyAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmICh0aGlzLk1hdGVyaWFsQ2FjaGUuaGFzKG1hdGVyaWFsLm5hbWUpKSB7XHJcbiAgLy8gICAgICAgcmVzb2x2ZSh0aGlzLk1hdGVyaWFsQ2FjaGUuZ2V0KG1hdGVyaWFsLm5hbWUpLmNsb25lKCkpO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIFZhcmlhdGlvblV0aWxzLkxvYWRWYXJpYXRpb24odmFyaWF0aW9uRm9sZGVyLCBtYXRlcmlhbC5uYW1lLCBmYWxzZSkudGhlbigoc2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoc2V0dGluZ3MpIHtcclxuICAvLyAgICAgICAgICAgQXNzZXRVdGlscy5DcmVhdGVNYXRlcmlhbEZyb21Bc3NldChzZXR0aW5ncykudGhlbigobWF0ZXJpYWxPYmo6IE1hdGVyaWFsKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWxQYXJhbXM6IE1lc2hTdGFuZGFyZE1hdGVyaWFsUGFyYW1ldGVycyA9IHt9O1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm5hbWUgPSBtYXRlcmlhbC5uYW1lO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm1hcCA9IG1hdGVyaWFsT2JqLnRleHR1cmU7XHJcbiAgLy8gICAgICAgICAgICAgbWF0ZXJpYWxQYXJhbXMubm9ybWFsTWFwID0gbWF0ZXJpYWxPYmoubm9ybWFsO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLmFvTWFwID0gbWF0ZXJpYWxPYmouYW87XHJcbiAgLy8gICAgICAgICAgICAgbWF0ZXJpYWxQYXJhbXMucm91Z2huZXNzTWFwID0gbWF0ZXJpYWxPYmoucm91Z2huZXNzO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm1ldGFsbmVzc01hcCA9IG1hdGVyaWFsT2JqLm1ldGFsbmVzcztcclxuICAvLyAgICAgICAgICAgICBtYXRlcmlhbFBhcmFtcy5yb3VnaG5lc3MgPSAxO1xyXG4gIC8vICAgICAgICAgICAgIG1hdGVyaWFsUGFyYW1zLm1ldGFsbmVzcyA9IDE7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgcGJyTWF0OiBNZXNoU3RhbmRhcmRNYXRlcmlhbCA9IG5ldyBNZXNoU3RhbmRhcmRNYXRlcmlhbChtYXRlcmlhbFBhcmFtcyk7XHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5NYXRlcmlhbENhY2hlLnNldChtYXRlcmlhbC5uYW1lLCBwYnJNYXQpO1xyXG4gIC8vICAgICAgICAgICAgIHJlc29sdmUocGJyTWF0LmNsb25lKCkpO1xyXG4gIC8vICAgICAgICAgICB9KTtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIHJlc29sdmUobWF0ZXJpYWwpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgR2V0VmFyaWF0aW9uU2V0dGluZ3NGcm9tRmlsZShpZDogc3RyaW5nLCBjb21wcmVzc2VkRmlsZTogYW55KTogUHJvbWlzZTxWYXJpYXRpb25TZXR0aW5ncz4ge1xyXG4gICAgLy8gVE9ETyBDSEVDSyB3aXRoIFBhdHJpY2tcclxuICAgIGlmICghY29tcHJlc3NlZEZpbGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zdCB6aXBDb250ZW50ID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuR2V0WmlwQ29udGVudChjb21wcmVzc2VkRmlsZSk7XHJcbiAgICAvLyBjb25zdCB2YXJpYXRpb25TZXR0aW5nczogVmFyaWF0aW9uU2V0dGluZ3MgPSBuZXcgVmFyaWF0aW9uU2V0dGluZ3MoKTtcclxuICAgIC8vIGxldCBpbmRleDtcclxuICAgIC8vIHZhcmlhdGlvblNldHRpbmdzLmlkID0gaWQ7XHJcbiAgICAvL1xyXG4gICAgLy8gaWYgKHppcENvbnRlbnQpIHtcclxuICAgIC8vICAgaWYgKHppcENvbnRlbnQuZmlsZXNbJ21hdGVyaWFsLmdsYiddKSB7XHJcbiAgICAvLyAgICAgY29uc3QgbWF0ZXJpYWw6IHN0cmluZyA9IGF3YWl0IHppcENvbnRlbnQuZmlsZXNbJ21hdGVyaWFsLmdsYiddLmFzeW5jKCdhcnJheWJ1ZmZlcicpO1xyXG4gICAgLy8gICAgIHZhcmlhdGlvblNldHRpbmdzLm1hdGVyaWFsID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZE1hdGVyaWFsRnJvbUdsYihtYXRlcmlhbCk7XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgaWYgKHppcENvbnRlbnQuZmlsZXNbJ2luZGV4Lmpzb24nXSkge1xyXG4gICAgLy8gICAgICAgY29uc3QgaW5kZXhGaWxlOiBzdHJpbmcgPSBhd2FpdCB6aXBDb250ZW50LmZpbGVzWydpbmRleC5qc29uJ10uYXN5bmMoJ3N0cmluZycpO1xyXG4gICAgLy8gICAgICAgaW5kZXggPSBKU09OLnBhcnNlKGluZGV4RmlsZSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGlmIChpbmRleCkge1xyXG4gICAgLy8gICAgICAgYXdhaXQgVmFyaWF0aW9uVXRpbHMuQ3JlYXRlU2V0dGluZ3NCYXNlZE9uSW5kZXgoaW5kZXgsIHZhcmlhdGlvblNldHRpbmdzLCB6aXBDb250ZW50KTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgYXdhaXQgVmFyaWF0aW9uVXRpbHMuQ3JlYXRlU2V0dGluZ3NCYXNlZE9uRmlsZU5hbWUodmFyaWF0aW9uU2V0dGluZ3MsIHppcENvbnRlbnQpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIHZhcmlhdGlvblNldHRpbmdzO1xyXG5cclxuICAgIGNvbnN0IHppcENvbnRlbnQgPSBhd2FpdCBWYXJpYXRpb25VdGlscy5HZXRaaXBDb250ZW50KGNvbXByZXNzZWRGaWxlKTtcclxuICAgIGNvbnN0IHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncyA9IG5ldyBWYXJpYXRpb25TZXR0aW5ncygpO1xyXG4gICAgbGV0IGluZGV4O1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3MuaWQgPSBpZDtcclxuXHJcbiAgICBpZiAoemlwQ29udGVudC5maWxlcy5oYXNPd25Qcm9wZXJ0eSgnaW5kZXguanNvbicpKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4RmlsZTogc3RyaW5nID0gYXdhaXQgemlwQ29udGVudC5maWxlc1snaW5kZXguanNvbiddLmFzeW5jKCdzdHJpbmcnKTtcclxuICAgICAgaW5kZXggPSBKU09OLnBhcnNlKGluZGV4RmlsZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXgpIHtcclxuICAgICAgYXdhaXQgVmFyaWF0aW9uVXRpbHMuQ3JlYXRlU2V0dGluZ3NCYXNlZE9uSW5kZXgoaW5kZXgsIHZhcmlhdGlvblNldHRpbmdzLCB6aXBDb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IFZhcmlhdGlvblV0aWxzLkNyZWF0ZVNldHRpbmdzQmFzZWRPbkZpbGVOYW1lKHZhcmlhdGlvblNldHRpbmdzLCB6aXBDb250ZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YXJpYXRpb25TZXR0aW5ncztcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgQ3JlYXRlU2V0dGluZ3NCYXNlZE9uSW5kZXgoaW5kZXg6IGFueSwgdmFyaWF0aW9uU2V0dGluZ3M6IFZhcmlhdGlvblNldHRpbmdzLCB6aXBDb250ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChpbmRleC5ub3JtYWxGaWxlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLm5vcm1hbCA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC5ub3JtYWxGaWxlXSwgaW5kZXgubm9ybWFsRmlsZSk7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLm5vcm1hbEZpbGVuYW1lID0gaW5kZXgubm9ybWFsRmlsZTtcclxuICAgIH1cclxuICAgIGlmIChpbmRleC5kaWZmdXNlRmlsZSkge1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy50ZXh0dXJlID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXBDb250ZW50LmZpbGVzW2luZGV4LmRpZmZ1c2VGaWxlXSwgaW5kZXguZGlmZnVzZUZpbGUpO1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy50ZXh0dXJlRmlsZW5hbWUgPSBpbmRleC5kaWZmdXNlRmlsZTtcclxuICAgIH1cclxuICAgIGlmIChpbmRleC5vcm1GaWxlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLm9ybSA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC5vcm1GaWxlXSwgaW5kZXgub3JtRmlsZSk7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLm9ybUZpbGVuYW1lID0gaW5kZXgub3JtRmlsZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleC5hb0ZpbGUpIHtcclxuICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5hbyA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC5hb0ZpbGVdLCBpbmRleC5hb0ZpbGUpO1xyXG4gICAgICAgIHZhcmlhdGlvblNldHRpbmdzLmFvRmlsZW5hbWUgPSBpbmRleC5hb0ZpbGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGluZGV4Lm1ldGFsbmVzc0ZpbGUpIHtcclxuICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5tZXRhbG5lc3MgPSBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkRmlsZUNvbnRlbnRGcm9tWmlwKHppcENvbnRlbnQuZmlsZXNbaW5kZXgubWV0YWxuZXNzRmlsZV0sIGluZGV4Lm1ldGFsbmVzc0ZpbGUpO1xyXG4gICAgICAgIHZhcmlhdGlvblNldHRpbmdzLm1ldGFsbmVzc0ZpbGVuYW1lID0gaW5kZXgubWV0YWxuZXNzRmlsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5kZXgucm91Z2huZXNzRmlsZSkge1xyXG4gICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnJvdWdobmVzcyA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC5yb3VnaG5lc3NGaWxlXSwgaW5kZXgucm91Z2huZXNzRmlsZSk7XHJcbiAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mucm91Z2huZXNzRmlsZW5hbWUgPSBpbmRleC5yb3VnaG5lc3NGaWxlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXguZGlzcGxhY2VtZW50RmlsZSkge1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5kaXNwbGFjZW1lbnQgPSBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkRmlsZUNvbnRlbnRGcm9tWmlwKHppcENvbnRlbnQuZmlsZXNbaW5kZXguZGlzcGxhY2VtZW50RmlsZV0sIGluZGV4LmRpc3BsYWNlbWVudEZpbGUpO1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5kaXNwbGFjZW1lbnRGaWxlbmFtZSA9IGluZGV4LmRpc3BsYWNlbWVudEZpbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXguZW1pc3NpdmVGaWxlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLmVtaXNzaXZlID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXBDb250ZW50LmZpbGVzW2luZGV4LmVtaXNzaXZlRmlsZV0sIGluZGV4LmVtaXNzaXZlRmlsZSk7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLmVtaXNzaXZlRmlsZW5hbWUgPSBpbmRleC5lbWlzc2l2ZUZpbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXguZW52TWFwRmlsZSkge1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5lbnZNYXAgPSBhd2FpdCBWYXJpYXRpb25VdGlscy5Mb2FkRmlsZUNvbnRlbnRGcm9tWmlwKHppcENvbnRlbnQuZmlsZXNbaW5kZXguZW52TWFwRmlsZV0sIGluZGV4LmVudk1hcEZpbGUpO1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5lbnZNYXBGaWxlbmFtZSA9IGluZGV4LmVudk1hcEZpbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXguc2hlZW5Db2xvck1hcEZpbGUpIHtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Muc2hlZW5Db2xvck1hcCA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC5zaGVlbkNvbG9yTWFwRmlsZV0sIGluZGV4LnNoZWVuQ29sb3JNYXBGaWxlKTtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Muc2hlZW5Db2xvck1hcEZpbGVuYW1lID0gaW5kZXguc2hlZW5Db2xvck1hcEZpbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXguc2hlZW5Sb3VnaG5lc3NNYXBGaWxlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnNoZWVuUm91Z2huZXNzTWFwID0gYXdhaXQgVmFyaWF0aW9uVXRpbHMuTG9hZEZpbGVDb250ZW50RnJvbVppcCh6aXBDb250ZW50LmZpbGVzW2luZGV4LnNoZWVuUm91Z2huZXNzTWFwRmlsZV0sIGluZGV4LnNoZWVuUm91Z2huZXNzTWFwRmlsZSk7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnNoZWVuUm91Z2huZXNzTWFwRmlsZW5hbWUgPSBpbmRleC5zaGVlbkNvbG9yTWFwRmlsZTtcclxuICAgIH1cclxuICAgIGlmIChpbmRleC50cmFuc21pc3Npb25NYXBGaWxlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRyYW5zbWlzc2lvbk1hcCA9IGF3YWl0IFZhcmlhdGlvblV0aWxzLkxvYWRGaWxlQ29udGVudEZyb21aaXAoemlwQ29udGVudC5maWxlc1tpbmRleC50cmFuc21pc3Npb25NYXBGaWxlXSwgaW5kZXgudHJhbnNtaXNzaW9uTWFwRmlsZSk7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRyYW5zbWlzc2lvbk1hcEZpbGVuYW1lID0gaW5kZXgudHJhbnNtaXNzaW9uTWFwRmlsZTtcclxuICAgIH1cclxuICAgIGlmIChpbmRleC5yZXBlYXQpIHtcclxuICAgICAgdmFyaWF0aW9uU2V0dGluZ3Muc2V0dGluZ3MucmVwZWF0eCA9IGluZGV4LnJlcGVhdC5yZXBlYXR4O1xyXG4gICAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5ncy5yZXBlYXR5ID0gaW5kZXgucmVwZWF0LnJlcGVhdHk7XHJcbiAgICB9XHJcbiAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5ncy5tZXRhbG5lc3MgPSBpbmRleC5tZXRhbG5lc3M7XHJcbiAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5ncy5yb3VnaG5lc3MgPSBpbmRleC5yb3VnaG5lc3M7XHJcblxyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3Muc2hlZW4gPSBpbmRleC5zaGVlbjtcclxuICAgIGlmIChpbmRleC5zaGVlbkNvbG9yKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLnNoZWVuQ29sb3IgPSBuZXcgQ29sb3IoaW5kZXguc2hlZW5Db2xvci5yLCBpbmRleC5zaGVlbkNvbG9yLmcsIGluZGV4LnNoZWVuQ29sb3IuYik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3Muc2hlZW5Sb3VnaG5lc3MgPSBpbmRleC5zaGVlblJvdWdobmVzcztcclxuICAgIHZhcmlhdGlvblNldHRpbmdzLmVudk1hcEludGVuc2l0eSA9IGluZGV4LmVudk1hcEludGVuc2l0eTtcclxuICAgIHZhcmlhdGlvblNldHRpbmdzLnRyYW5zcGFyZW50ID0gaW5kZXgudHJhbnNwYXJlbnQ7XHJcbiAgICB2YXJpYXRpb25TZXR0aW5ncy5vcGFjaXR5ID0gaW5kZXgub3BhY2l0eTtcclxuICAgIGlmIChpbmRleC5lbWlzc2l2ZVZhbHVlKSB7XHJcbiAgICAgIHZhcmlhdGlvblNldHRpbmdzLmVtaXNzaXZlVmFsdWUgPSBuZXcgQ29sb3IoaW5kZXguZW1pc3NpdmVWYWx1ZS5yLCBpbmRleC5lbWlzc2l2ZVZhbHVlLmcsIGluZGV4LmVtaXNzaXZlVmFsdWUuYik7XHJcbiAgICB9XHJcbiAgICB2YXJpYXRpb25TZXR0aW5ncy5lbWlzc2l2ZUludGVuc2l0eSA9IGluZGV4LmVtaXNzaXZlSW50ZW5zaXR5O1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3MucmVmbGVjdGl2aXR5ID0gaW5kZXgucmVmbGVjdGl2aXR5O1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3MuZGlzcGxhY2VtZW50VmFsdWUgPSBpbmRleC5kaXNwbGFjZW1lbnRWYWx1ZTtcclxuICAgIHZhcmlhdGlvblNldHRpbmdzLnNpZGUgPSBpbmRleC5zaWRlO1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3MudHJhbnNtaXNzaW9uID0gaW5kZXgudHJhbnNtaXNzaW9uO1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3MuaW9yID0gaW5kZXguaW9yO1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3MudGhpY2tuZXNzID0gaW5kZXgudGhpY2tuZXNzO1xyXG4gICAgdmFyaWF0aW9uU2V0dGluZ3Muc3BlY3VsYXJJbnRlbnNpdHkgPSBpbmRleC5zcGVjdWxhckludGVuc2l0eTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIENyZWF0ZVNldHRpbmdzQmFzZWRPbkZpbGVOYW1lKHZhcmlhdGlvblNldHRpbmdzOiBWYXJpYXRpb25TZXR0aW5ncywgemlwQ29udGVudDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhbGxMb2FkZWQ6IFByb21pc2U8VmFyaWF0aW9uU2V0dGluZ3M+W10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgaW4gemlwQ29udGVudC5maWxlcykge1xyXG4gICAgICBpZiAoemlwQ29udGVudC5maWxlcy5oYXNPd25Qcm9wZXJ0eShmaWxlTmFtZSkpIHtcclxuICAgICAgICBjb25zdCBmaWxlOiBhbnkgPSBhd2FpdCB6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXTtcclxuICAgICAgICBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignbm9ybWFsJykgPiAtMSAmJiB0aGlzLkZpbGVJc0ltYWdlKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgIGFsbExvYWRlZC5wdXNoKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdLmFzeW5jKCdiYXNlNjQnKS50aGVuKChub3JtYWxGaWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mubm9ybWFsID0gYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGUubmFtZSl9O2Jhc2U2NCwke25vcm1hbEZpbGV9YDtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3Mubm9ybWFsRmlsZW5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2FvJykgPiAtMSAmJiB0aGlzLkZpbGVJc0ltYWdlKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgIGFsbExvYWRlZC5wdXNoKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdLmFzeW5jKCdiYXNlNjQnKS50aGVuKChhb0ZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5hbyA9IGBkYXRhOmltYWdlLyR7dGhpcy5HZXRCYXNlNjRGaWxlVHlwZShmaWxlLm5hbWUpfTtiYXNlNjQsJHthb0ZpbGV9YDtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3MuYW9GaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignbWV0YWxuZXNzJykgPiAtMSAmJiB0aGlzLkZpbGVJc0ltYWdlKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgIGFsbExvYWRlZC5wdXNoKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdLmFzeW5jKCdiYXNlNjQnKS50aGVuKChtZXRhbG5lc3NGaWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3MubWV0YWxuZXNzID0gYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGUubmFtZSl9O2Jhc2U2NCwke21ldGFsbmVzc0ZpbGV9YDtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3MubWV0YWxuZXNzRmlsZW5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3JvdWdobmVzcycpID4gLTEgJiYgdGhpcy5GaWxlSXNJbWFnZShmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICBhbGxMb2FkZWQucHVzaCh6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXS5hc3luYygnYmFzZTY0JykudGhlbigocm91Z2huZXNzRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnJvdWdobmVzcyA9IGBkYXRhOmltYWdlLyR7dGhpcy5HZXRCYXNlNjRGaWxlVHlwZShmaWxlLm5hbWUpfTtiYXNlNjQsJHtyb3VnaG5lc3NGaWxlfWA7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnJvdWdobmVzc0ZpbGVuYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdkaWZmdXNlJykgPiAtMSAmJiB0aGlzLkZpbGVJc0ltYWdlKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgIGFsbExvYWRlZC5wdXNoKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdLmFzeW5jKCdiYXNlNjQnKS50aGVuKChkaWZmdXNlRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmUgPSBgZGF0YTppbWFnZS8ke3RoaXMuR2V0QmFzZTY0RmlsZVR5cGUoZmlsZS5uYW1lKX07YmFzZTY0LCR7ZGlmZnVzZUZpbGV9YDtcclxuICAgICAgICAgICAgdmFyaWF0aW9uU2V0dGluZ3MudGV4dHVyZUZpbGVuYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdkaXNwbGFjZW1lbnQnKSA+IC0xICYmIHRoaXMuRmlsZUlzSW1hZ2UoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ2Jhc2U2NCcpLnRoZW4oKGRpc3BsYWNlbWVudEZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5kaXNwbGFjZW1lbnQgPSBgZGF0YTppbWFnZS8ke3RoaXMuR2V0QmFzZTY0RmlsZVR5cGUoZmlsZS5uYW1lKX07YmFzZTY0LCR7ZGlzcGxhY2VtZW50RmlsZX1gO1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5kaXNwbGFjZW1lbnRGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZW1pc3NpdmUnKSA+IC0xICYmIHRoaXMuRmlsZUlzSW1hZ2UoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ2Jhc2U2NCcpLnRoZW4oKGVtaXNzaXZlRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLmVtaXNzaXZlID0gYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGUubmFtZSl9O2Jhc2U2NCwke2VtaXNzaXZlRmlsZX1gO1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5lbWlzc2l2ZUZpbGVuYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlbnZNYXAnKSA+IC0xICYmIHRoaXMuRmlsZUlzSW1hZ2UoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ2Jhc2U2NCcpLnRoZW4oKGVudk1hcEZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5lbnZNYXAgPSBgZGF0YTppbWFnZS8ke3RoaXMuR2V0QmFzZTY0RmlsZVR5cGUoZmlsZS5uYW1lKX07YmFzZTY0LCR7ZW52TWFwRmlsZX1gO1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5lbnZNYXBGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignc2hlZW5Db2xvck1hcCcpID4gLTEgJiYgdGhpcy5GaWxlSXNJbWFnZShmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICBhbGxMb2FkZWQucHVzaCh6aXBDb250ZW50LmZpbGVzW2ZpbGVOYW1lXS5hc3luYygnYmFzZTY0JykudGhlbigoc2hlZW5Db2xvck1hcEZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5zaGVlbkNvbG9yTWFwID0gYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGUubmFtZSl9O2Jhc2U2NCwke3NoZWVuQ29sb3JNYXBGaWxlfWA7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnNoZWVuQ29sb3JNYXBGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignc2hlZW5Sb3VnaG5lc3NNYXAnKSA+IC0xICYmIHRoaXMuRmlsZUlzSW1hZ2UoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ2Jhc2U2NCcpLnRoZW4oKHNoZWVuUm91Z2huZXNzTWFwRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnNoZWVuUm91Z2huZXNzTWFwID0gYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGUubmFtZSl9O2Jhc2U2NCwke3NoZWVuUm91Z2huZXNzTWFwRmlsZX1gO1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5zaGVlblJvdWdobmVzc01hcEZpbGVuYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd0cmFuc21pc3Npb25NYXAnKSA+IC0xICYmIHRoaXMuRmlsZUlzSW1hZ2UoZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ2Jhc2U2NCcpLnRoZW4oKHRyYW5zbWlzc2lvbk1hcEZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy50cmFuc21pc3Npb25NYXAgPSBgZGF0YTppbWFnZS8ke3RoaXMuR2V0QmFzZTY0RmlsZVR5cGUoZmlsZS5uYW1lKX07YmFzZTY0LCR7dHJhbnNtaXNzaW9uTWFwRmlsZX1gO1xyXG4gICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy50cmFuc21pc3Npb25NYXBGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLmluZGV4T2YoJy5qcCcpID4gLTEpIHtcclxuICAgICAgICAgIGFsbExvYWRlZC5wdXNoKHppcENvbnRlbnQuZmlsZXNbZmlsZU5hbWVdLmFzeW5jKCdiYXNlNjQnKS50aGVuKCh0ZXh0dXJlRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmUgPSAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnICsgdGV4dHVyZUZpbGU7XHJcbiAgICAgICAgICAgIHZhcmlhdGlvblNldHRpbmdzLnRleHR1cmVGaWxlbmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5uYW1lLmluZGV4T2YoJy5qc29uJykgPiAtMSkge1xyXG4gICAgICAgICAgYWxsTG9hZGVkLnB1c2goemlwQ29udGVudC5maWxlc1tmaWxlTmFtZV0uYXN5bmMoJ3N0cmluZycpLnRoZW4oKHNldHRpbmdzRmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzRmlsZU9iaiA9IEpTT04ucGFyc2Uoc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2V0dGluZ3NGaWxlT2JqKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHNldHRpbmdzRmlsZU9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXJpYXRpb25TZXR0aW5ncy5zZXR0aW5nc1trZXldID0gc2V0dGluZ3NGaWxlT2JqW2tleV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChhbGxMb2FkZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgTG9hZE1hdGVyaWFsRnJvbUpzb24obWF0ZXJpYWw6IGFueSk6IE1hdGVyaWFsIHtcclxuICAgIGNvbnN0IGxvYWRlciA9IG5ldyBNYXRlcmlhbExvYWRlcigpO1xyXG4gICAgaWYgKG1hdGVyaWFsLnRleHR1cmVzKSB7XHJcbiAgICAgIGNvbnN0IHRleHR1cmVzOiB7fSA9IHt9O1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGVyaWFsLnRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGV4dHVyZXNbbWF0ZXJpYWwudGV4dHVyZXNbaV0udXVpZF0gPSBtYXRlcmlhbC50ZXh0dXJlc1tpXTtcclxuICAgICAgfVxyXG4gICAgICBsb2FkZXIuc2V0VGV4dHVyZXModGV4dHVyZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxvYWRlci5wYXJzZShtYXRlcmlhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBMb2FkTWF0ZXJpYWxGcm9tR2xiKG1hdGVyaWFsOiBhbnkpOiBQcm9taXNlPE1hdGVyaWFsPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdsb2FkR0xURicpKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignbG9hZEdMVEYgbm90IGRlZmluZWQgaW4gd2luZG93IGdsb2JhbCcpO1xyXG4gICAgICAgIHJldHVybiByZWplY3QoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvYmo6IE9iamVjdDNEID0gYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmxvYWRHTFRGKG1hdGVyaWFsLCBmYWxzZSk7XHJcbiAgICAgIGlmIChvYmopIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZSgob2JqLmNoaWxkcmVuWzBdIGFzIE1lc2gpLm1hdGVyaWFsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBMb2FkRmlsZUNvbnRlbnRGcm9tWmlwKHppcDogYW55LCBmaWxlTmFtZTogc3RyaW5nLCBiYXNlNjQ6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgaWYgKHppcCAmJiBmaWxlTmFtZSkge1xyXG4gICAgICAgIHppcC5hc3luYyhiYXNlNjQgPyAnYmFzZTY0JyA6ICdzdHJpbmcnKS50aGVuKChmaWxlQ29udGVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoYmFzZTY0KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoYGRhdGE6aW1hZ2UvJHt0aGlzLkdldEJhc2U2NEZpbGVUeXBlKGZpbGVOYW1lKX07YmFzZTY0LCR7ZmlsZUNvbnRlbnR9YCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKGZpbGVDb250ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgRmlsZUlzSW1hZ2UoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZXh0OiBzdHJpbmcgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEsIGZpbGVOYW1lLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAoZXh0KSB7XHJcbiAgICAgIGNhc2UgJ2pwZyc6XHJcbiAgICAgIGNhc2UgJ2pwZWcnOlxyXG4gICAgICBjYXNlICdwbmcnOlxyXG4gICAgICBjYXNlICdibXAnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEdldEJhc2U2NEZpbGVUeXBlKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXh0OiBzdHJpbmcgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEsIGZpbGVOYW1lLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAoZXh0KSB7XHJcbiAgICAgIGNhc2UgJ2pwZyc6XHJcbiAgICAgIGNhc2UgJ2pwZWcnOlxyXG4gICAgICAgIHJldHVybiAnanBlZyc7XHJcbiAgICAgIGNhc2UgJ3BuZyc6XHJcbiAgICAgICAgcmV0dXJuICdwbmcnO1xyXG4gICAgICBjYXNlICdibXAnOlxyXG4gICAgICAgIHJldHVybiAnYm1wJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ2pwZWcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBjb250ZW50XHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgR2V0WmlwQ29udGVudChmaWxlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGpzemlwID0gbmV3IEpTWmlwKCk7XHJcbiAgICAgIHJldHVybiBhd2FpdCBqc3ppcC5sb2FkQXN5bmMoZmlsZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=