@scion/workbench 18.0.0-beta.1 → 18.0.0-beta.10

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 (275) hide show
  1. package/_index.scss +7 -5
  2. package/design/_workbench-global-styles.scss +18 -0
  3. package/design/_workbench-icon-font.scss +1 -1
  4. package/design/_workbench-popup-global-styles.scss +1 -1
  5. package/design/{_workbench-view-drag-image-global-styles.scss → _workbench-view-global-styles.scss} +1 -2
  6. package/esm2022/lib/common/class-list.mjs +67 -29
  7. package/esm2022/lib/common/math.util.mjs +16 -0
  8. package/esm2022/lib/common/objects.util.mjs +7 -1
  9. package/esm2022/lib/common/operators.mjs +1 -12
  10. package/esm2022/lib/common/uid.util.mjs +22 -0
  11. package/esm2022/lib/content-projection/content-as-overlay.component.mjs +85 -28
  12. package/esm2022/lib/content-projection/workbench-element-references.mjs +32 -0
  13. package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +3 -8
  14. package/esm2022/lib/dialog/movable.directive.mjs +3 -3
  15. package/esm2022/lib/dialog/resizable.directive.mjs +3 -3
  16. package/esm2022/lib/dialog/workbench-dialog.component.mjs +25 -23
  17. package/esm2022/lib/dialog/workbench-dialog.mjs +61 -1
  18. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +98 -60
  19. package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +26 -23
  20. package/esm2022/lib/executor/latest-task-executor.mjs +55 -0
  21. package/esm2022/lib/executor/single-task-executor.mjs +9 -19
  22. package/esm2022/lib/filter-field/filter-field.component.mjs +5 -5
  23. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +8 -18
  24. package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +18 -21
  25. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +11 -0
  26. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v6.model.mjs +11 -0
  27. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +4 -4
  28. package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +67 -0
  29. package/esm2022/lib/layout/migration/workbench-layout-migration-v6.service.mjs +59 -0
  30. package/esm2022/lib/layout/stringifier.mjs +70 -0
  31. package/esm2022/lib/layout/workbench-layout.component.mjs +18 -22
  32. package/esm2022/lib/layout/workbench-layout.mjs +1 -1
  33. package/esm2022/lib/layout/workbench-layout.model.mjs +1 -1
  34. package/esm2022/lib/layout/workbench-layout.service.mjs +26 -24
  35. package/esm2022/lib/layout/workbench-layouts.util.mjs +1 -9
  36. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +19 -27
  37. package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +3 -2
  38. package/esm2022/lib/layout//311/265workbench-layout.mjs +73 -62
  39. package/esm2022/lib/logging/logging-support.mjs +7 -13
  40. package/esm2022/lib/logging//311/265logger.mjs +10 -10
  41. package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +7 -6
  42. package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +3 -3
  43. package/esm2022/lib/message-box/workbench-message-box.component.mjs +2 -2
  44. package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +3 -2
  45. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +22 -6
  46. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +28 -21
  47. package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +3 -3
  48. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +11 -1
  49. package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +63 -0
  50. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +5 -4
  51. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +6 -10
  52. package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +18 -9
  53. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +7 -6
  54. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +3 -3
  55. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +15 -13
  56. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +3 -2
  57. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +6 -11
  58. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +39 -0
  59. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +120 -0
  60. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +55 -0
  61. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +19 -0
  62. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +4 -3
  63. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +11 -12
  64. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +12 -28
  65. package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +3 -3
  66. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +11 -27
  67. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +91 -71
  68. package/esm2022/lib/microfrontend-platform/public_api.mjs +2 -1
  69. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +5 -4
  70. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +18 -16
  71. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +30 -8
  72. package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +32 -0
  73. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +26 -8
  74. package/esm2022/lib/notification/notification-list.component.mjs +4 -8
  75. package/esm2022/lib/notification/notification.component.mjs +4 -5
  76. package/esm2022/lib/notification/notification.service.mjs +5 -4
  77. package/esm2022/lib/page-not-found/page-not-found.component.mjs +5 -7
  78. package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +11 -19
  79. package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +4 -4
  80. package/esm2022/lib/part/part-bar/part-bar.component.mjs +333 -264
  81. package/esm2022/lib/part/part-portal.pipe.mjs +8 -8
  82. package/esm2022/lib/part/part.component.mjs +33 -42
  83. package/esm2022/lib/part/view-context-menu/text.component.mjs +16 -12
  84. package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +4 -6
  85. package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +2 -2
  86. package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +48 -49
  87. package/esm2022/lib/part/view-list/view-list.component.mjs +41 -48
  88. package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +22 -26
  89. package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +15 -17
  90. package/esm2022/lib/part/view-tab/view-tab.component.mjs +99 -110
  91. package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +3 -4
  92. package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +16 -17
  93. package/esm2022/lib/part/workbench-part-action.registry.mjs +18 -42
  94. package/esm2022/lib/part/workbench-part.model.mjs +10 -1
  95. package/esm2022/lib/part/workbench-part.registry.mjs +11 -45
  96. package/esm2022/lib/part//311/265workbench-part.model.mjs +71 -55
  97. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +3 -3
  98. package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
  99. package/esm2022/lib/perspective/workbench-perspective.registry.mjs +11 -43
  100. package/esm2022/lib/perspective/workbench-perspective.service.mjs +71 -62
  101. package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +2 -2
  102. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +62 -47
  103. package/esm2022/lib/popup/popup.component.mjs +3 -3
  104. package/esm2022/lib/popup/popup.config.mjs +27 -25
  105. package/esm2022/lib/popup/popup.service.mjs +169 -174
  106. package/esm2022/lib/portal/wb-component-portal.mjs +18 -17
  107. package/esm2022/lib/public_api.mjs +1 -1
  108. package/esm2022/lib/registry/workbench-object-registry.mjs +38 -17
  109. package/esm2022/lib/routing/public_api.mjs +2 -2
  110. package/esm2022/lib/routing/routing.model.mjs +1 -1
  111. package/esm2022/lib/routing/routing.util.mjs +215 -0
  112. package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +110 -0
  113. package/esm2022/lib/routing/workbench-dialog-differ.mjs +3 -3
  114. package/esm2022/lib/routing/workbench-layout-differ.mjs +3 -10
  115. package/esm2022/lib/routing/workbench-message-box-differ.mjs +3 -3
  116. package/esm2022/lib/routing/workbench-navigational-states.mjs +2 -2
  117. package/esm2022/lib/routing/workbench-popup-differ.mjs +3 -3
  118. package/esm2022/lib/routing/workbench-route-guards.mjs +57 -0
  119. package/esm2022/lib/routing/workbench-url-observer.service.mjs +140 -148
  120. package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +58 -0
  121. package/esm2022/lib/routing//311/265workbench-router.service.mjs +119 -74
  122. package/esm2022/lib/startup/splash/splash.component.mjs +3 -3
  123. package/esm2022/lib/startup/workbench-launcher.service.mjs +22 -10
  124. package/esm2022/lib/testing/workbench.provider.mjs +2 -2
  125. package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +15 -19
  126. package/esm2022/lib/view/public_api.mjs +1 -2
  127. package/esm2022/lib/view/view-move-handler.service.mjs +71 -56
  128. package/esm2022/lib/view/view-portal.pipe.mjs +7 -7
  129. package/esm2022/lib/view/view.component.mjs +54 -42
  130. package/esm2022/lib/view/workbench-view.model.mjs +1 -1
  131. package/esm2022/lib/view/workbench-view.registry.mjs +11 -45
  132. package/esm2022/lib/view//311/265workbench-view.model.mjs +183 -153
  133. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +2 -2
  134. package/esm2022/lib/view-dnd/view-drag.service.mjs +87 -71
  135. package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +6 -6
  136. package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +6 -6
  137. package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +43 -56
  138. package/esm2022/lib/workbench-config.mjs +2 -2
  139. package/esm2022/lib/workbench-id.mjs +3 -3
  140. package/esm2022/lib/workbench.component.mjs +66 -54
  141. package/esm2022/lib/workbench.constants.mjs +1 -5
  142. package/esm2022/lib/workbench.model.mjs +1 -1
  143. package/esm2022/lib/workbench.provider.mjs +3 -9
  144. package/esm2022/lib/workbench.service.mjs +1 -1
  145. package/esm2022/lib//311/265workbench.service.mjs +38 -42
  146. package/fesm2022/scion-workbench.mjs +4054 -3276
  147. package/fesm2022/scion-workbench.mjs.map +1 -1
  148. package/lib/common/class-list.d.ts +35 -22
  149. package/lib/common/math.util.d.ts +7 -0
  150. package/lib/common/objects.util.d.ts +4 -0
  151. package/lib/common/operators.d.ts +1 -6
  152. package/lib/common/uid.util.d.ts +9 -0
  153. package/lib/content-projection/content-as-overlay.component.d.ts +39 -22
  154. package/lib/content-projection/workbench-element-references.d.ts +13 -0
  155. package/lib/dialog/workbench-dialog.component.d.ts +3 -2
  156. package/lib/dialog/workbench-dialog.d.ts +57 -13
  157. package/lib/dialog//311/265workbench-dialog.d.ts +38 -24
  158. package/lib/dialog//311/265workbench-dialog.service.d.ts +10 -11
  159. package/lib/executor/latest-task-executor.d.ts +26 -0
  160. package/lib/executor/single-task-executor.d.ts +5 -8
  161. package/lib/filter-field/filter-field.component.d.ts +1 -1
  162. package/lib/layout/grid-element/grid-element.component.d.ts +1 -8
  163. package/lib/layout/main-area-layout/main-area-layout.component.d.ts +0 -4
  164. package/lib/layout/migration/model/workbench-layout-migration-v5.model.d.ts +36 -0
  165. package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
  166. package/lib/layout/migration/workbench-layout-migration-v5.service.d.ts +12 -0
  167. package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
  168. package/lib/layout/stringifier.d.ts +26 -0
  169. package/lib/layout/workbench-layout.component.d.ts +4 -5
  170. package/lib/layout/workbench-layout.d.ts +9 -6
  171. package/lib/layout/workbench-layout.model.d.ts +4 -3
  172. package/lib/layout/workbench-layout.service.d.ts +14 -16
  173. package/lib/layout/workbench-layouts.util.d.ts +0 -6
  174. package/lib/layout/workench-layout-serializer.service.d.ts +13 -16
  175. package/lib/layout//311/265workbench-layout.d.ts +18 -19
  176. package/lib/layout//311/265workbench-layout.factory.d.ts +3 -2
  177. package/lib/logging//311/265logger.d.ts +2 -3
  178. package/lib/microfrontend-platform/common/microfrontend.util.d.ts +5 -1
  179. package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +7 -3
  180. package/lib/microfrontend-platform/manifest-object-cache.service.d.ts +33 -0
  181. package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +3 -6
  182. package/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.d.ts +2 -1
  183. package/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.d.ts +1 -1
  184. package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +2 -1
  185. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.d.ts +10 -0
  186. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.d.ts +24 -0
  187. package/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.d.ts +20 -0
  188. package/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.d.ts +9 -0
  189. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.d.ts +4 -8
  190. package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +0 -4
  191. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.d.ts +5 -12
  192. package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +23 -33
  193. package/lib/microfrontend-platform/public_api.d.ts +1 -0
  194. package/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.d.ts +1 -1
  195. package/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.d.ts +3 -7
  196. package/lib/microfrontend-platform/routing/microfrontend-view-routes.d.ts +9 -2
  197. package/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.d.ts +11 -0
  198. package/lib/notification/notification-list.component.d.ts +0 -2
  199. package/lib/page-not-found/page-not-found.component.d.ts +1 -0
  200. package/lib/part/part-action-bar/part-action-bar.component.d.ts +3 -4
  201. package/lib/part/part-action-bar/part-action.directive.d.ts +2 -2
  202. package/lib/part/part-bar/part-bar.component.d.ts +73 -63
  203. package/lib/part/part-portal.pipe.d.ts +3 -5
  204. package/lib/part/part.component.d.ts +9 -12
  205. package/lib/part/view-context-menu/text.component.d.ts +3 -4
  206. package/lib/part/view-context-menu/view-menu.directive.d.ts +1 -1
  207. package/lib/part/view-context-menu/view-menu.service.d.ts +13 -17
  208. package/lib/part/view-list/view-list.component.d.ts +8 -21
  209. package/lib/part/view-list-button/view-list-button.component.d.ts +8 -11
  210. package/lib/part/view-list-item/view-list-item.component.d.ts +3 -7
  211. package/lib/part/view-tab/view-tab.component.d.ts +19 -29
  212. package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +4 -4
  213. package/lib/part/workbench-part-action.registry.d.ts +3 -23
  214. package/lib/part/workbench-part.model.d.ts +8 -27
  215. package/lib/part/workbench-part.registry.d.ts +3 -26
  216. package/lib/part//311/265workbench-part.model.d.ts +23 -17
  217. package/lib/perspective/workbench-perspective.model.d.ts +18 -25
  218. package/lib/perspective/workbench-perspective.registry.d.ts +3 -26
  219. package/lib/perspective/workbench-perspective.service.d.ts +16 -14
  220. package/lib/perspective/workench-perspective-serializer.service.d.ts +1 -1
  221. package/lib/perspective//311/265workbench-perspective.model.d.ts +30 -21
  222. package/lib/popup/popup.config.d.ts +11 -10
  223. package/lib/popup/popup.service.d.ts +15 -28
  224. package/lib/portal/wb-component-portal.d.ts +21 -5
  225. package/lib/public_api.d.ts +1 -1
  226. package/lib/registry/workbench-object-registry.d.ts +10 -6
  227. package/lib/routing/public_api.d.ts +2 -2
  228. package/lib/routing/routing.model.d.ts +25 -13
  229. package/lib/routing/{router.util.d.ts → routing.util.d.ts} +28 -1
  230. package/lib/routing/{workbench-auxiliary-routes-registrator.service.d.ts → workbench-auxiliary-route-installer.service.d.ts} +10 -3
  231. package/lib/routing/workbench-layout-differ.d.ts +1 -2
  232. package/lib/routing/workbench-navigational-states.d.ts +8 -4
  233. package/lib/{view/workbench-view-route-guards.d.ts → routing/workbench-route-guards.d.ts} +8 -2
  234. package/lib/routing/workbench-url-observer.service.d.ts +31 -55
  235. package/lib/routing/workbench-view-outlet-differ.d.ts +32 -0
  236. package/lib/routing//311/265workbench-router.service.d.ts +22 -18
  237. package/lib/startup/workbench-launcher.service.d.ts +4 -5
  238. package/lib/testing/workbench.provider.d.ts +3 -1
  239. package/lib/theme/workbench-theme-switcher.service.d.ts +4 -6
  240. package/lib/view/public_api.d.ts +0 -1
  241. package/lib/view/view-move-handler.service.d.ts +16 -14
  242. package/lib/view/view-portal.pipe.d.ts +1 -3
  243. package/lib/view/view.component.d.ts +21 -12
  244. package/lib/view/workbench-view.model.d.ts +88 -36
  245. package/lib/view/workbench-view.registry.d.ts +3 -27
  246. package/lib/view//311/265workbench-view.model.d.ts +62 -71
  247. package/lib/view-dnd/view-drag.service.d.ts +79 -49
  248. package/lib/view-dnd/view-drop-placeholder-renderer.service.d.ts +1 -1
  249. package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +12 -36
  250. package/lib/workbench-config.d.ts +19 -7
  251. package/lib/workbench.component.d.ts +16 -30
  252. package/lib/workbench.constants.d.ts +0 -5
  253. package/lib/workbench.model.d.ts +31 -3
  254. package/lib/workbench.service.d.ts +58 -56
  255. package/lib//311/265workbench.service.d.ts +18 -31
  256. package/package.json +5 -5
  257. package/esm2022/lib/common/filter-by-predicate.pipe.mjs +0 -27
  258. package/esm2022/lib/common/filter-by-text.pipe.mjs +0 -39
  259. package/esm2022/lib/common/uuid.util.mjs +0 -17
  260. package/esm2022/lib/content-projection/content-projection.directive.mjs +0 -101
  261. package/esm2022/lib/content-projection/view-container.reference.mjs +0 -68
  262. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +0 -41
  263. package/esm2022/lib/page-not-found/format-url.pipe.mjs +0 -26
  264. package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +0 -26
  265. package/esm2022/lib/routing/router.util.mjs +0 -126
  266. package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +0 -94
  267. package/esm2022/lib/view/workbench-view-route-guards.mjs +0 -47
  268. package/lib/common/filter-by-predicate.pipe.d.ts +0 -10
  269. package/lib/common/filter-by-text.pipe.d.ts +0 -12
  270. package/lib/common/uuid.util.d.ts +0 -8
  271. package/lib/content-projection/content-projection.directive.d.ts +0 -30
  272. package/lib/content-projection/view-container.reference.d.ts +0 -42
  273. package/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.d.ts +0 -10
  274. package/lib/page-not-found/format-url.pipe.d.ts +0 -11
  275. package/lib/part/part-action-bar/part-action-filter.pipe.d.ts +0 -11
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
+ import { signal, untracked } from '@angular/core';
10
11
  /**
11
12
  * Handle to interact with a dialog opened via {@link WorkbenchDialogService}.
12
13
  *
@@ -16,4 +17,63 @@
16
17
  */
17
18
  export class WorkbenchDialog {
18
19
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLWRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2RpYWxvZy93b3JrYmVuY2gtZGlhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBSUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFnQixlQUFlO0NBd0NwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMyBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBIYW5kbGUgdG8gaW50ZXJhY3Qgd2l0aCBhIGRpYWxvZyBvcGVuZWQgdmlhIHtAbGluayBXb3JrYmVuY2hEaWFsb2dTZXJ2aWNlfS5cbiAqXG4gKiBUaGUgZGlhbG9nIGNvbXBvbmVudCBjYW4gaW5qZWN0IHRoaXMgaGFuZGxlIHRvIGludGVyYWN0IHdpdGggdGhlIGRpYWxvZywgc3VjaCBhcyBzZXR0aW5nIHRoZSB0aXRsZSBvciBjbG9zaW5nIHRoZSBkaWFsb2cuXG4gKlxuICogRGlhbG9nIGlucHV0cyBhcmUgYXZhaWxhYmxlIGFzIGlucHV0IHByb3BlcnRpZXMgaW4gdGhlIGRpYWxvZyBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXb3JrYmVuY2hEaWFsb2c8UiA9IHVua25vd24+IHtcblxuICAvKipcbiAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZzsgY2FuIGJlIGEgc3RyaW5nIGxpdGVyYWwgb3IgYW4gT2JzZXJ2YWJsZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCB0aXRsZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBkaWFsb2cgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzaXplOiBXb3JrYmVuY2hEaWFsb2dTaXplO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBpZiB0byBhcHBseSBhIHBhZGRpbmcgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGRpYWxvZy4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIHBhZGRpbmcgb2YgdGhlIGRpYWxvZyBoZWFkZXIgYW5kIGZvb3Rlci5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgcGFkZGluZyBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIENTUyB2YXJpYWJsZSBgLS1zY2ktd29ya2JlbmNoLWRpYWxvZy1wYWRkaW5nYC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBwYWRkaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgdG8gZGlzcGxheSBhIGNsb3NlIGJ1dHRvbiBpbiB0aGUgZGlhbG9nIGhlYWRlci4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY2xvc2FibGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBpZiB0aGUgdXNlciBjYW4gcmVzaXplIHRoZSBkaWFsb2cuIERlZmF1bHQgaXMgYHRydWVgLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlc2l6YWJsZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIENTUyBjbGFzcyhlcykgdG8gYWRkIHRvIHRoZSBkaWFsb2csIGUuZy4sIHRvIGxvY2F0ZSB0aGUgZGlhbG9nIGluIHRlc3RzLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGNzc0NsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkaWFsb2cuIE9wdGlvbmFsbHksIHBhc3MgYSByZXN1bHQgb3IgYW4gZXJyb3IgdG8gdGhlIGRpYWxvZyBvcGVuZXIuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY2xvc2UocmVzdWx0PzogUiB8IEVycm9yKTogdm9pZDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBwcmVmZXJyZWQgZGlhbG9nIHNpemUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2JlbmNoRGlhbG9nU2l6ZSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBkaWFsb2cuXG4gICAqL1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgZGlhbG9nLCBkaXNwbGF5aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyIGlmIGl0cyBjb250ZW50IG92ZXJmbG93cy5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGRpYWxvZyBhZGFwdHMgaXRzIGhlaWdodCB0byBpdHMgY29udGV4dCBoZWlnaHQsIHJlc3BlY3RpbmcgYW55IGBtaW5IZWlnaHQnIG9yIGBtYXhIZWlnaHQnIGNvbnN0cmFpbnQuXG4gICAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gaGVpZ2h0IG9mIHRoZSBkaWFsb2cuXG4gICAqL1xuICBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gd2lkdGggb2YgdGhlIGRpYWxvZy5cbiAgICovXG4gIG1pbldpZHRoPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgZGlhbG9nLCBkaXNwbGF5aW5nIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaWYgaXRzIGNvbnRlbnQgb3ZlcmZsb3dzLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGlhbG9nIGFkYXB0cyBpdHMgd2lkdGggdG8gaXRzIGNvbnRleHQgd2lkdGgsIHJlc3BlY3RpbmcgYW55IGBtaW5XaWR0aCcgb3IgYG1heFdpZHRoJyBjb25zdHJhaW50LlxuICAgKi9cbiAgd2lkdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gd2lkdGggb2YgdGhlIGRpYWxvZy5cbiAgICovXG4gIG1heFdpZHRoPzogc3RyaW5nO1xufVxuIl19
20
+ /** @inheritDoc */
21
+ export class ɵWorkbenchDialogSize {
22
+ constructor() {
23
+ this._minHeight = signal(undefined);
24
+ this._height = signal(undefined);
25
+ this._maxHeight = signal(undefined);
26
+ this._minWidth = signal(undefined);
27
+ this._width = signal(undefined);
28
+ this._maxWidth = signal(undefined);
29
+ }
30
+ /** @inheritDoc */
31
+ get minHeight() {
32
+ return this._minHeight;
33
+ }
34
+ /** @inheritDoc */
35
+ set minHeight(minHeight) {
36
+ untracked(() => this._minHeight.set(minHeight));
37
+ }
38
+ /** @inheritDoc */
39
+ get height() {
40
+ return this._height;
41
+ }
42
+ /** @inheritDoc */
43
+ set height(height) {
44
+ untracked(() => this._height.set(height));
45
+ }
46
+ /** @inheritDoc */
47
+ get maxHeight() {
48
+ return this._maxHeight;
49
+ }
50
+ /** @inheritDoc */
51
+ set maxHeight(maxHeight) {
52
+ untracked(() => this._maxHeight.set(maxHeight));
53
+ }
54
+ /** @inheritDoc */
55
+ get minWidth() {
56
+ return this._minWidth;
57
+ }
58
+ /** @inheritDoc */
59
+ set minWidth(minWidth) {
60
+ untracked(() => this._minWidth.set(minWidth));
61
+ }
62
+ /** @inheritDoc */
63
+ get width() {
64
+ return this._width;
65
+ }
66
+ /** @inheritDoc */
67
+ set width(width) {
68
+ untracked(() => this._width.set(width));
69
+ }
70
+ /** @inheritDoc */
71
+ get maxWidth() {
72
+ return this._maxWidth;
73
+ }
74
+ /** @inheritDoc */
75
+ set maxWidth(maxWidth) {
76
+ untracked(() => this._maxWidth.set(maxWidth));
77
+ }
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLWRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL2RpYWxvZy93b3JrYmVuY2gtZGlhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBVSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFnQixlQUFlO0NBNkNwQztBQW9ERCxrQkFBa0I7QUFDbEIsTUFBTSxPQUFPLG9CQUFvQjtJQUFqQztRQUVtQixlQUFVLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUNoRCxlQUFVLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUNuRCxjQUFTLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUNsRCxXQUFNLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUMvQyxjQUFTLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztJQTZEckUsQ0FBQztJQTNEQyxrQkFBa0I7SUFDbEIsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQVcsU0FBUyxDQUFDLFNBQTZCO1FBQ2hELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBVyxNQUFNLENBQUMsTUFBMEI7UUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBVyxTQUFTLENBQUMsU0FBNkI7UUFDaEQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBVyxRQUFRLENBQUMsUUFBNEI7UUFDOUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFXLEtBQUssQ0FBQyxLQUF5QjtRQUN4QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFXLFFBQVEsQ0FBQyxRQUE0QjtRQUM5QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7c2lnbmFsLCBTaWduYWwsIHVudHJhY2tlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogSGFuZGxlIHRvIGludGVyYWN0IHdpdGggYSBkaWFsb2cgb3BlbmVkIHZpYSB7QGxpbmsgV29ya2JlbmNoRGlhbG9nU2VydmljZX0uXG4gKlxuICogVGhlIGRpYWxvZyBjb21wb25lbnQgY2FuIGluamVjdCB0aGlzIGhhbmRsZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBkaWFsb2csIHN1Y2ggYXMgc2V0dGluZyB0aGUgdGl0bGUgb3IgY2xvc2luZyB0aGUgZGlhbG9nLlxuICpcbiAqIERpYWxvZyBpbnB1dHMgYXJlIGF2YWlsYWJsZSBhcyBpbnB1dCBwcm9wZXJ0aWVzIGluIHRoZSBkaWFsb2cgY29tcG9uZW50LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2JlbmNoRGlhbG9nPFIgPSB1bmtub3duPiB7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0IHRpdGxlKCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwdWJsaWMgYWJzdHJhY3Qgc2V0IHRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBkaWFsb2cgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzaXplOiBXb3JrYmVuY2hEaWFsb2dTaXplO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBpZiB0byBhcHBseSBhIHBhZGRpbmcgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGRpYWxvZy4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIHBhZGRpbmcgb2YgdGhlIGRpYWxvZyBoZWFkZXIgYW5kIGZvb3Rlci5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgcGFkZGluZyBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIENTUyB2YXJpYWJsZSBgLS1zY2ktd29ya2JlbmNoLWRpYWxvZy1wYWRkaW5nYC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXQgcGFkZGluZygpOiBTaWduYWw8Ym9vbGVhbj47XG4gIHB1YmxpYyBhYnN0cmFjdCBzZXQgcGFkZGluZyhwYWRkaW5nOiBib29sZWFuKTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGlmIHRvIGRpc3BsYXkgYSBjbG9zZSBidXR0b24gaW4gdGhlIGRpYWxvZyBoZWFkZXIuIERlZmF1bHQgaXMgYHRydWVgLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldCBjbG9zYWJsZSgpOiBTaWduYWw8Ym9vbGVhbj47XG4gIHB1YmxpYyBhYnN0cmFjdCBzZXQgY2xvc2FibGUoY2xvc2FibGU6IGJvb2xlYW4pO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgdGhlIHVzZXIgY2FuIHJlc2l6ZSB0aGUgZGlhbG9nLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXQgcmVzaXphYmxlKCk6IFNpZ25hbDxib29sZWFuPjtcbiAgcHVibGljIGFic3RyYWN0IHNldCByZXNpemFibGUocmVzaXphYmxlOiBib29sZWFuKTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIENTUyBjbGFzcyhlcykgdG8gYWRkIHRvIHRoZSBkaWFsb2csIGUuZy4sIHRvIGxvY2F0ZSB0aGUgZGlhbG9nIGluIHRlc3RzLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldCBjc3NDbGFzcygpOiBTaWduYWw8c3RyaW5nW10+O1xuICBwdWJsaWMgYWJzdHJhY3Qgc2V0IGNzc0NsYXNzKGNzc0NsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk7XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZGlhbG9nLiBPcHRpb25hbGx5LCBwYXNzIGEgcmVzdWx0IG9yIGFuIGVycm9yIHRvIHRoZSBkaWFsb2cgb3BlbmVyLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGNsb3NlKHJlc3VsdD86IFIgfCBFcnJvcik6IHZvaWQ7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcHJlZmVycmVkIGRpYWxvZyBzaXplLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtiZW5jaERpYWxvZ1NpemUge1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBkaWFsb2cuXG4gICAqL1xuICBnZXQgbWluSGVpZ2h0KCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gIHNldCBtaW5IZWlnaHQobWluSGVpZ2h0OiBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgZGlhbG9nLCBkaXNwbGF5aW5nIGEgdmVydGljYWwgc2Nyb2xsYmFyIGlmIGl0cyBjb250ZW50IG92ZXJmbG93cy5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGRpYWxvZyBhZGFwdHMgaXRzIGhlaWdodCB0byBpdHMgY29udGV4dCBoZWlnaHQsIHJlc3BlY3RpbmcgYW55IGBtaW5IZWlnaHQnIG9yIGBtYXhIZWlnaHQnIGNvbnN0cmFpbnQuXG4gICAqL1xuICBnZXQgaGVpZ2h0KCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gIHNldCBoZWlnaHQoaGVpZ2h0OiBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gaGVpZ2h0IG9mIHRoZSBkaWFsb2cuXG4gICAqL1xuICBnZXQgbWF4SGVpZ2h0KCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gIHNldCBtYXhIZWlnaHQobWF4SGVpZ2h0OiBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gd2lkdGggb2YgdGhlIGRpYWxvZy5cbiAgICovXG4gIGdldCBtaW5XaWR0aCgpOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICBzZXQgbWluV2lkdGgobWluV2lkdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGRpYWxvZywgZGlzcGxheWluZyBhIGhvcml6b250YWwgc2Nyb2xsYmFyIGlmIGl0cyBjb250ZW50IG92ZXJmbG93cy5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGRpYWxvZyBhZGFwdHMgaXRzIHdpZHRoIHRvIGl0cyBjb250ZXh0IHdpZHRoLCByZXNwZWN0aW5nIGFueSBgbWluV2lkdGgnIG9yIGBtYXhXaWR0aCcgY29uc3RyYWludC5cbiAgICovXG4gIGdldCB3aWR0aCgpOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuICBzZXQgd2lkdGgod2lkdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZGlhbG9nLlxuICAgKi9cbiAgZ2V0IG1heFdpZHRoKCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4gIHNldCBtYXhXaWR0aChtYXhXaWR0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTtcbn1cblxuLyoqIEBpbmhlcml0RG9jICovXG5leHBvcnQgY2xhc3MgybVXb3JrYmVuY2hEaWFsb2dTaXplIGltcGxlbWVudHMgV29ya2JlbmNoRGlhbG9nU2l6ZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWluSGVpZ2h0ID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0ID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4SGVpZ2h0ID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluV2lkdGggPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93aWR0aCA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heFdpZHRoID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBtaW5IZWlnaHQoKTogU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9taW5IZWlnaHQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCBtaW5IZWlnaHQobWluSGVpZ2h0OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5fbWluSGVpZ2h0LnNldChtaW5IZWlnaHQpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc2V0IGhlaWdodChoZWlnaHQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLl9oZWlnaHQuc2V0KGhlaWdodCkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgbWF4SGVpZ2h0KCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fbWF4SGVpZ2h0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzZXQgbWF4SGVpZ2h0KG1heEhlaWdodDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMuX21heEhlaWdodC5zZXQobWF4SGVpZ2h0KSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBtaW5XaWR0aCgpOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX21pbldpZHRoO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzZXQgbWluV2lkdGgobWluV2lkdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLl9taW5XaWR0aC5zZXQobWluV2lkdGgpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCB3aWR0aCh3aWR0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMuX3dpZHRoLnNldCh3aWR0aCkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgbWF4V2lkdGgoKTogU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9tYXhXaWR0aDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc2V0IG1heFdpZHRoKG1heFdpZHRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5fbWF4V2lkdGguc2V0KG1heFdpZHRoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -7,9 +7,9 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  */
10
- import { BehaviorSubject, combineLatest, concatWith, delay, EMPTY, firstValueFrom, map, merge, of, Subject, switchMap } from 'rxjs';
11
- import { inject, Injector, NgZone } from '@angular/core';
12
- import { WorkbenchDialog } from './workbench-dialog';
10
+ import { BehaviorSubject, concatWith, delay, firstValueFrom, map, of, Subject, switchMap } from 'rxjs';
11
+ import { ApplicationRef, assertNotInReactiveContext, computed, effect, EnvironmentInjector, inject, Injector, signal, untracked } from '@angular/core';
12
+ import { WorkbenchDialog, ɵWorkbenchDialogSize } from './workbench-dialog';
13
13
  import { ComponentPortal } from '@angular/cdk/portal';
14
14
  import { Overlay } from '@angular/cdk/overlay';
15
15
  import { WorkbenchDialogComponent } from './workbench-dialog.component';
@@ -18,36 +18,35 @@ import { WorkbenchDialogRegistry } from './workbench-dialog.registry';
18
18
  import { ɵDestroyRef } from '../common/ɵdestroy-ref';
19
19
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
20
20
  import { setStyle } from '../common/dom.util';
21
- import { fromDimension$ } from '@scion/toolkit/observable';
22
- import { subscribeInside } from '@scion/toolkit/operators';
21
+ import { fromResize$ } from '@scion/toolkit/observable';
23
22
  import { ViewDragService } from '../view-dnd/view-drag.service';
24
- import { WORKBENCH_ELEMENT_REF } from '../content-projection/view-container.reference';
23
+ import { WORKBENCH_ELEMENT_REF } from '../content-projection/workbench-element-references';
25
24
  import { Arrays } from '@scion/toolkit/util';
26
25
  import { WorkbenchConfig } from '../workbench-config';
27
26
  import { distinctUntilChanged, filter } from 'rxjs/operators';
28
- import { randomUUID } from '../common/uuid.util';
27
+ import { provideViewContext } from '../view/view-context-provider';
28
+ import { boundingClientRect } from '@scion/components/dimension';
29
29
  /** @inheritDoc */
30
30
  export class ɵWorkbenchDialog {
31
- constructor(component, _options) {
31
+ constructor(id, component, _options) {
32
+ this.id = id;
32
33
  this.component = component;
33
34
  this._options = _options;
35
+ this._dialogEnvironmentInjector = inject(EnvironmentInjector);
34
36
  this._workbenchDialogRegistry = inject(WorkbenchDialogRegistry);
35
- this._zone = inject(NgZone);
36
37
  this._workbenchConfig = inject(WorkbenchConfig);
37
38
  this._destroyRef = new ɵDestroyRef();
38
39
  this._blink$ = new Subject();
39
- /**
40
- * Unique identity of this dialog.
41
- */
42
- this.id = randomUUID();
40
+ this._title = signal(undefined);
41
+ this._closable = signal(true);
42
+ this._resizable = signal(true);
43
+ this._padding = signal(true);
44
+ this._cssClass = signal([]);
43
45
  /**
44
46
  * Indicates whether this dialog is blocked by other dialog(s) that overlay this dialog.
45
47
  */
46
48
  this.blockedBy$ = new BehaviorSubject(null);
47
- this.size = {};
48
- this.closable = true;
49
- this.resizable = true;
50
- this.padding = true;
49
+ this.size = new ɵWorkbenchDialogSize();
51
50
  this.actions = new Array();
52
51
  this.blinking$ = new BehaviorSubject(false);
53
52
  this.context = {
@@ -55,9 +54,8 @@ export class ɵWorkbenchDialog {
55
54
  };
56
55
  this._overlayRef = this.createOverlay();
57
56
  this._portal = this.createPortal();
58
- this._cssClass = Arrays.coerce(this._options.cssClass).join(' ');
59
- this._attached$ = this.monitorHostElementAttached$();
60
- this.hideOnHostElementDetachOrViewDrag();
57
+ this._cssClass.set(Arrays.coerce(this._options.cssClass));
58
+ this._attached = this.monitorHostElementAttached();
61
59
  this.stickToHostElement();
62
60
  this.blockWhenNotOnTop();
63
61
  this.restoreFocusOnAttach();
@@ -67,7 +65,7 @@ export class ɵWorkbenchDialog {
67
65
  async open() {
68
66
  // Wait for the overlay to be initially positioned to have a smooth slide-in animation.
69
67
  if (this.animate) {
70
- await firstValueFrom(fromDimension$(this._overlayRef.hostElement));
68
+ await firstValueFrom(fromResize$(this._overlayRef.hostElement));
71
69
  }
72
70
  // Attach the dialog portal to the overlay.
73
71
  this._componentRef = this._overlayRef.attach(this._portal);
@@ -85,6 +83,7 @@ export class ɵWorkbenchDialog {
85
83
  }
86
84
  /** @inheritDoc */
87
85
  close(result) {
86
+ assertNotInReactiveContext(this.close, 'Call WorkbenchDialog.close() in a non-reactive (non-tracking) context, such as within the untracked() function.');
88
87
  this._result = result;
89
88
  this.destroy();
90
89
  }
@@ -138,28 +137,72 @@ export class ɵWorkbenchDialog {
138
137
  dispose: () => this.actions = this.actions.filter(candidate => candidate !== action),
139
138
  };
140
139
  }
141
- /**
142
- * Returns the position of the dialog in the dialog stack.
143
- */
144
- getPositionInDialogStack() {
145
- return this._workbenchDialogRegistry.indexOf(this);
140
+ /** @inheritDoc */
141
+ get title() {
142
+ return this._title;
146
143
  }
147
144
  /** @inheritDoc */
148
- set cssClass(cssClass) {
149
- this._cssClass = new Array().concat(this._options.cssClass ?? []).concat(cssClass).join(' ');
145
+ set title(title) {
146
+ untracked(() => this._title.set(title));
147
+ }
148
+ /** @inheritDoc */
149
+ get closable() {
150
+ return this._closable;
151
+ }
152
+ /** @inheritDoc */
153
+ set closable(closable) {
154
+ untracked(() => this._closable.set(closable));
155
+ }
156
+ /** @inheritDoc */
157
+ get resizable() {
158
+ return this._resizable;
159
+ }
160
+ /** @inheritDoc */
161
+ set resizable(resizable) {
162
+ untracked(() => this._resizable.set(resizable));
163
+ }
164
+ /** @inheritDoc */
165
+ get padding() {
166
+ return this._padding;
167
+ }
168
+ /** @inheritDoc */
169
+ set padding(padding) {
170
+ untracked(() => this._padding.set(padding));
150
171
  }
151
172
  /** @inheritDoc */
152
173
  get cssClass() {
153
174
  return this._cssClass;
154
175
  }
155
176
  /** @inheritDoc */
177
+ set cssClass(cssClass) {
178
+ untracked(() => this._cssClass.set(new Array().concat(this._options.cssClass ?? []).concat(cssClass)));
179
+ }
180
+ /**
181
+ * Returns the position of the dialog in the dialog stack.
182
+ */
183
+ getPositionInDialogStack() {
184
+ return this._workbenchDialogRegistry.indexOf(this);
185
+ }
186
+ /** @inheritDoc */
156
187
  blink() {
157
188
  this._blink$.next();
158
189
  }
190
+ /**
191
+ * Reference to the handle's injector. The injector will be destroyed when closing the dialog.
192
+ */
193
+ get injector() {
194
+ return this._dialogEnvironmentInjector;
195
+ }
159
196
  createPortal() {
160
197
  return new ComponentPortal(WorkbenchDialogComponent, null, Injector.create({
161
- parent: inject(Injector),
198
+ // Use the root environment injector instead of the dialog's environment injector.
199
+ // Otherwise, if an application-modal dialog opens a view-modal dialog, the view-modal dialog
200
+ // would not open because it uses the same environment injector, which, however, was destroyed
201
+ // when closed the application-modal dialog. View-modal dialogs are only opened after
202
+ // all application-modal dialogs have been closed.
203
+ parent: this._options.injector ?? inject(ApplicationRef).injector,
162
204
  providers: [
205
+ provideViewContext(this.context.view),
163
206
  { provide: ɵWorkbenchDialog, useValue: this },
164
207
  { provide: WorkbenchDialog, useExisting: ɵWorkbenchDialog },
165
208
  ],
@@ -181,10 +224,9 @@ export class ɵWorkbenchDialog {
181
224
  * Restores focus when re-attaching this dialog.
182
225
  */
183
226
  restoreFocusOnAttach() {
184
- this._attached$
185
- .pipe(filter(Boolean), takeUntilDestroyed())
186
- .subscribe(() => {
187
- this.focus();
227
+ effect(() => {
228
+ const attached = this._attached();
229
+ untracked(() => attached && this.focus());
188
230
  });
189
231
  }
190
232
  /**
@@ -200,28 +242,15 @@ export class ɵWorkbenchDialog {
200
242
  /**
201
243
  * Monitors attachment of the host element.
202
244
  */
203
- monitorHostElementAttached$() {
245
+ monitorHostElementAttached() {
204
246
  if (this.context.view) {
205
- return this.context.view.portal.attached$;
247
+ return this.context.view.portal.attached;
206
248
  }
207
249
  if (this._workbenchConfig.dialog?.modalityScope === 'viewport') {
208
- return of(true);
250
+ return computed(() => true);
209
251
  }
210
- return inject(WORKBENCH_ELEMENT_REF).ref$.pipe(map(ref => !!ref));
211
- }
212
- /**
213
- * Hides this dialog when either its host element is detached or during view drag and drop operation.
214
- */
215
- hideOnHostElementDetachOrViewDrag() {
216
- const viewDragService = inject(ViewDragService);
217
- const viewDrag$ = merge(viewDragService.viewDragStart$.pipe(map(() => true)), viewDragService.viewDragEnd$.pipe(map(() => false)), of(false));
218
- combineLatest([this._attached$, viewDrag$])
219
- .pipe(subscribeInside(fn => this._zone.runOutsideAngular(fn)), takeUntilDestroyed(this._destroyRef))
220
- .subscribe(([attached, dragging]) => {
221
- const hideDialog = !attached || dragging;
222
- // Hide via `visibility: hidden` instead of `display: none` in order to preserve the dimension of the dialog.
223
- setStyle(this._overlayRef.overlayElement, { visibility: hideDialog ? 'hidden' : null });
224
- });
252
+ const workbenchElementRef = inject(WORKBENCH_ELEMENT_REF);
253
+ return computed(() => !!workbenchElementRef());
225
254
  }
226
255
  /**
227
256
  * Aligns this dialog with the boundaries of the host element.
@@ -231,12 +260,20 @@ export class ɵWorkbenchDialog {
231
260
  setStyle(this._overlayRef.hostElement, { inset: '0' });
232
261
  }
233
262
  else {
234
- const workbenchViewElement$ = (view) => of(view.portal.componentRef.location.nativeElement);
235
- const workbenchRootElement$ = () => inject(WORKBENCH_ELEMENT_REF).ref$.pipe(map(ref => ref?.element.nativeElement));
236
- const hostElement$ = this.context.view ? workbenchViewElement$(this.context.view) : workbenchRootElement$();
237
- hostElement$
238
- .pipe(switchMap(hostElement => hostElement ? fromDimension$(hostElement) : EMPTY), map(({ element: hostElement }) => hostElement.getBoundingClientRect()), subscribeInside(fn => this._zone.runOutsideAngular(fn)), takeUntilDestroyed(this._destroyRef))
239
- .subscribe(({ top, left, width, height }) => {
263
+ const workbenchElementRef = inject(WORKBENCH_ELEMENT_REF);
264
+ const hostElement = computed(() => this.context.view ? this.context.view.portal.componentRef.location.nativeElement : workbenchElementRef()?.element.nativeElement);
265
+ const hostBounds = boundingClientRect(hostElement);
266
+ const viewDragService = inject(ViewDragService);
267
+ effect(() => {
268
+ const visible = this._attached() && !viewDragService.dragging();
269
+ // Maintain position and size when hidden to prevent flickering when visible again and to support for virtual scrolling in dialog content.
270
+ if (!visible) {
271
+ setStyle(this._overlayRef.overlayElement, { visibility: 'hidden' }); // Hide via `visibility` instead of `display` property to retain the size.
272
+ return;
273
+ }
274
+ // IMPORTANT: Track host bounds only if visible to prevent flickering.
275
+ const { left, top, width, height } = hostBounds();
276
+ setStyle(this._overlayRef.overlayElement, { visibility: null });
240
277
  setStyle(this._overlayRef.hostElement, {
241
278
  top: `${top}px`,
242
279
  left: `${left}px`,
@@ -251,12 +288,12 @@ export class ɵWorkbenchDialog {
251
288
  */
252
289
  blockWhenNotOnTop() {
253
290
  this._workbenchDialogRegistry.top$({ viewId: this.context.view?.id })
254
- .pipe(map(top => top === this ? null : top), takeUntilDestroyed(this._destroyRef))
291
+ .pipe(map(top => top === this ? null : top), takeUntilDestroyed())
255
292
  .subscribe(this.blockedBy$);
256
293
  }
257
294
  blinkOnRequest() {
258
295
  this._blink$
259
- .pipe(switchMap(() => of(true).pipe(concatWith(of(false).pipe(delay(300))))), distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))
296
+ .pipe(switchMap(() => of(true).pipe(concatWith(of(false).pipe(delay(300))))), distinctUntilChanged(), takeUntilDestroyed())
260
297
  .subscribe(this.blinking$);
261
298
  }
262
299
  /**
@@ -264,9 +301,10 @@ export class ɵWorkbenchDialog {
264
301
  */
265
302
  destroy() {
266
303
  if (!this._destroyRef.destroyed) {
304
+ this._dialogEnvironmentInjector.destroy();
267
305
  this._destroyRef.destroy();
268
306
  this._overlayRef.dispose();
269
307
  }
270
308
  }
271
309
  }
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvZGlhbG9nL8m1d29ya2JlbmNoLWRpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlJLE9BQU8sRUFBZSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFzQixNQUFNLG9CQUFvQixDQUFDO0FBRXhFLE9BQU8sRUFBQyxlQUFlLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxFQUFDLE9BQU8sRUFBYSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFB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QztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO2FBQ2hFLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUNyQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3JDO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsT0FBTzthQUNULElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdEUsb0JBQW9CLEVBQUUsRUFDdEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQzthQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIzIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgY29uY2F0V2l0aCwgZGVsYXksIEVNUFRZLCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvbXBvbmVudFJlZiwgaW5qZWN0LCBJbmplY3RvciwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V29ya2JlbmNoRGlhbG9nLCBXb3JrYmVuY2hEaWFsb2dTaXplfSBmcm9tICcuL3dvcmtiZW5jaC1kaWFsb2cnO1xuaW1wb3J0IHtXb3JrYmVuY2hEaWFsb2dPcHRpb25zfSBmcm9tICcuL3dvcmtiZW5jaC1kaWFsb2cub3B0aW9ucyc7XG5pbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge092ZXJsYXksIE92ZXJsYXlSZWZ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7V29ya2JlbmNoRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuL3dvcmtiZW5jaC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7ybVXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi92aWV3L8m1d29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hEaWFsb2dSZWdpc3RyeX0gZnJvbSAnLi93b3JrYmVuY2gtZGlhbG9nLnJlZ2lzdHJ5JztcbmltcG9ydCB7ybVEZXN0cm95UmVmfSBmcm9tICcuLi9jb21tb24vybVkZXN0cm95LXJlZic7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtzZXRTdHlsZX0gZnJvbSAnLi4vY29tbW9uL2RvbS51dGlsJztcbmltcG9ydCB7ZnJvbURpbWVuc2lvbiR9IGZyb20gJ0BzY2lvbi90b29sa2l0L29ic2VydmFibGUnO1xuaW1wb3J0IHtzdWJzY3JpYmVJbnNpZGV9IGZyb20gJ0BzY2lvbi90b29sa2l0L29wZXJhdG9ycyc7XG5pbXBvcnQge1ZpZXdEcmFnU2VydmljZX0gZnJvbSAnLi4vdmlldy1kbmQvdmlldy1kcmFnLnNlcnZpY2UnO1xuaW1wb3J0IHtXT1JLQkVOQ0hfRUxFTUVOVF9SRUZ9IGZyb20gJy4uL2NvbnRlbnQtcHJvamVjdGlvbi92aWV3LWNvbnRhaW5lci5yZWZlcmVuY2UnO1xuaW1wb3J0IHtBcnJheXN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hDb25maWd9IGZyb20gJy4uL3dvcmtiZW5jaC1jb25maWcnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0FjdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi9kaWFsb2ctZm9vdGVyL3dvcmtiZW5jaC1kaWFsb2ctYWN0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0Zvb3RlckRpcmVjdGl2ZX0gZnJvbSAnLi9kaWFsb2ctZm9vdGVyL3dvcmtiZW5jaC1kaWFsb2ctZm9vdGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0hlYWRlckRpcmVjdGl2ZX0gZnJvbSAnLi9kaWFsb2ctaGVhZGVyL3dvcmtiZW5jaC1kaWFsb2ctaGVhZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0Rpc3Bvc2FibGV9IGZyb20gJy4uL2NvbW1vbi9kaXNwb3NhYmxlJztcbmltcG9ydCB7QmxvY2thYmxlfSBmcm9tICcuLi9nbGFzcy1wYW5lL2Jsb2NrYWJsZSc7XG5pbXBvcnQge0Jsb2NraW5nfSBmcm9tICcuLi9nbGFzcy1wYW5lL2Jsb2NraW5nJztcbmltcG9ydCB7cmFuZG9tVVVJRH0gZnJvbSAnLi4vY29tbW9uL3V1aWQudXRpbCc7XG5cbi8qKiBAaW5oZXJpdERvYyAqL1xuZXhwb3J0IGNsYXNzIMm1V29ya2JlbmNoRGlhbG9nPFIgPSB1bmtub3duPiBpbXBsZW1lbnRzIFdvcmtiZW5jaERpYWxvZzxSPiwgQmxvY2thYmxlLCBCbG9ja2luZyB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcG9ydGFsOiBDb21wb25lbnRQb3J0YWw8V29ya2JlbmNoRGlhbG9nQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya2JlbmNoRGlhbG9nUmVnaXN0cnkgPSBpbmplY3QoV29ya2JlbmNoRGlhbG9nUmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dvcmtiZW5jaENvbmZpZyA9IGluamVjdChXb3JrYmVuY2hDb25maWcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gbmV3IMm1RGVzdHJveVJlZigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdHRhY2hlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgX2JsaW5rJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFJlc3VsdCAob3IgZXJyb3IpIHRvIGJlIHBhc3NlZCB0byB0aGUgZGlhbG9nIG9wZW5lci5cbiAgICovXG4gIHByaXZhdGUgX3Jlc3VsdDogUiB8IEVycm9yIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9jb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxXb3JrYmVuY2hEaWFsb2dDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9jc3NDbGFzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpdHkgb2YgdGhpcyBkaWFsb2cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQgPSByYW5kb21VVUlEKCk7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGRpYWxvZyBpcyBibG9ja2VkIGJ5IG90aGVyIGRpYWxvZyhzKSB0aGF0IG92ZXJsYXkgdGhpcyBkaWFsb2cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYmxvY2tlZEJ5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8ybVXb3JrYmVuY2hEaWFsb2cgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHNpemU6IFdvcmtiZW5jaERpYWxvZ1NpemUgPSB7fTtcbiAgcHVibGljIHRpdGxlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBjbG9zYWJsZSA9IHRydWU7XG4gIHB1YmxpYyByZXNpemFibGUgPSB0cnVlO1xuICBwdWJsaWMgcGFkZGluZyA9IHRydWU7XG4gIHB1YmxpYyBoZWFkZXI6IFdvcmtiZW5jaERpYWxvZ0hlYWRlckRpcmVjdGl2ZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGZvb3RlcjogV29ya2JlbmNoRGlhbG9nRm9vdGVyRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgYWN0aW9ucyA9IG5ldyBBcnJheTxXb3JrYmVuY2hEaWFsb2dBY3Rpb25EaXJlY3RpdmU+KCk7XG4gIHB1YmxpYyBibGlua2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGNvbnRleHQgPSB7XG4gICAgdmlldzogaW5qZWN0KMm1V29ya2JlbmNoVmlldywge29wdGlvbmFsOiB0cnVlfSksXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTx1bmtub3duPiwgcHVibGljIF9vcHRpb25zOiBXb3JrYmVuY2hEaWFsb2dPcHRpb25zKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuICAgIHRoaXMuX3BvcnRhbCA9IHRoaXMuY3JlYXRlUG9ydGFsKCk7XG4gICAgdGhpcy5fY3NzQ2xhc3MgPSBBcnJheXMuY29lcmNlKHRoaXMuX29wdGlvbnMuY3NzQ2xhc3MpLmpvaW4oJyAnKTtcbiAgICB0aGlzLl9hdHRhY2hlZCQgPSB0aGlzLm1vbml0b3JIb3N0RWxlbWVudEF0dGFjaGVkJCgpO1xuXG4gICAgdGhpcy5oaWRlT25Ib3N0RWxlbWVudERldGFjaE9yVmlld0RyYWcoKTtcbiAgICB0aGlzLnN0aWNrVG9Ib3N0RWxlbWVudCgpO1xuICAgIHRoaXMuYmxvY2tXaGVuTm90T25Ub3AoKTtcbiAgICB0aGlzLnJlc3RvcmVGb2N1c09uQXR0YWNoKCk7XG4gICAgdGhpcy5yZXN0b3JlRm9jdXNPblVuYmxvY2soKTtcbiAgICB0aGlzLmJsaW5rT25SZXF1ZXN0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb3BlbigpOiBQcm9taXNlPFIgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBXYWl0IGZvciB0aGUgb3ZlcmxheSB0byBiZSBpbml0aWFsbHkgcG9zaXRpb25lZCB0byBoYXZlIGEgc21vb3RoIHNsaWRlLWluIGFuaW1hdGlvbi5cbiAgICBpZiAodGhpcy5hbmltYXRlKSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShmcm9tRGltZW5zaW9uJCh0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50KSk7XG4gICAgfVxuXG4gICAgLy8gQXR0YWNoIHRoZSBkaWFsb2cgcG9ydGFsIHRvIHRoZSBvdmVybGF5LlxuICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3BvcnRhbCk7XG5cbiAgICAvLyBFbnN1cmUgdG8gZGVzdHJveSB0aGlzIGhhbmRsZSBvbiBicm93c2VyIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uLlxuICAgIHRoaXMuX2NvbXBvbmVudFJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuXG4gICAgLy8gVHJpZ2dlciBhIG1hbnVhbCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIHRvIGF2b2lkICdFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yJ1xuICAgIC8vIHdoZW4gdGhlIGRpYWxvZyBzZXRzIGRpYWxvZy1zcGVjaWZpYyBwcm9wZXJ0aWVzIHN1Y2ggYXMgdGl0bGUgb3Igc2l6ZSBkdXJpbmcgY29uc3RydWN0aW9uLlxuICAgIHRoaXMuX2NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAvLyBXYWl0IGZvciB0aGUgZGlhbG9nIHRvIGNsb3NlLCByZXNvbHZpbmcgdG8gaXRzIHJlc3VsdCBvciByZWplY3RpbmcgaWYgY2xvc2VkIHdpdGggYW4gZXJyb3IuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFIgfCB1bmRlZmluZWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IgPyByZWplY3QodGhpcy5fcmVzdWx0KSA6IHJlc29sdmUodGhpcy5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjbG9zZShyZXN1bHQ/OiBSIHwgRXJyb3IpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5wdXRzIHBhc3NlZCB0byB0aGUgZGlhbG9nLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dHMoKToge1tuYW1lOiBzdHJpbmddOiB1bmtub3dufSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuaW5wdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0byBhbmltYXRlIHRoZSBkaWFsb2cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFuaW1hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuYW5pbWF0ZSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJsb2NrZWRCeSQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2UuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJIZWFkZXIoaGVhZGVyOiBXb3JrYmVuY2hEaWFsb2dIZWFkZXJEaXJlY3RpdmUpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oZWFkZXIgPT09IGhlYWRlcikge1xuICAgICAgICAgIHRoaXMuaGVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGb290ZXIoZm9vdGVyOiBXb3JrYmVuY2hEaWFsb2dGb290ZXJEaXJlY3RpdmUpOiBEaXNwb3NhYmxlIHtcbiAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1tEaWFsb2dJbml0RXJyb3JdIEN1c3RvbSBkaWFsb2cgZm9vdGVyIG5vdCBzdXBwb3J0ZWQgaWYgdXNpbmcgZGlhbG9nIGFjdGlvbnMuJyk7XG4gICAgfVxuICAgIHRoaXMuZm9vdGVyID0gZm9vdGVyO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvb3RlciA9PT0gZm9vdGVyKSB7XG4gICAgICAgICAgdGhpcy5mb290ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckFjdGlvbihhY3Rpb246IFdvcmtiZW5jaERpYWxvZ0FjdGlvbkRpcmVjdGl2ZSk6IERpc3Bvc2FibGUge1xuICAgIGlmICh0aGlzLmZvb3Rlcikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1tEaWFsb2dJbml0RXJyb3JdIERpYWxvZyBhY3Rpb25zIG5vdCBzdXBwb3J0ZWQgaWYgdXNpbmcgYSBjdXN0b20gZGlhbG9nIGZvb3Rlci4nKTtcbiAgICB9XG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zLmNvbmNhdChhY3Rpb24pO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwb3NlOiAoKSA9PiB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUgIT09IGFjdGlvbiksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nIGluIHRoZSBkaWFsb2cgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgZ2V0UG9zaXRpb25JbkRpYWxvZ1N0YWNrKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtiZW5jaERpYWxvZ1JlZ2lzdHJ5LmluZGV4T2YodGhpcyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCBjc3NDbGFzcyhjc3NDbGFzczogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLl9jc3NDbGFzcyA9IG5ldyBBcnJheTxzdHJpbmc+KCkuY29uY2F0KHRoaXMuX29wdGlvbnMuY3NzQ2xhc3MgPz8gW10pLmNvbmNhdChjc3NDbGFzcykuam9pbignICcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgY3NzQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY3NzQ2xhc3M7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGJsaW5rKCk6IHZvaWQge1xuICAgIHRoaXMuX2JsaW5rJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBvcnRhbCgpOiBDb21wb25lbnRQb3J0YWw8V29ya2JlbmNoRGlhbG9nQ29tcG9uZW50PiB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwoV29ya2JlbmNoRGlhbG9nQ29tcG9uZW50LCBudWxsLCBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiBpbmplY3QoSW5qZWN0b3IpLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtwcm92aWRlOiDJtVdvcmtiZW5jaERpYWxvZywgdXNlVmFsdWU6IHRoaXN9LFxuICAgICAgICB7cHJvdmlkZTogV29ya2JlbmNoRGlhbG9nLCB1c2VFeGlzdGluZzogybVXb3JrYmVuY2hEaWFsb2d9LFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGRlZGljYXRlZCBvdmVybGF5IHBlciBkaWFsb2cgdG8gcGxhY2UgaXQgb24gdG9wIG9mIHByZXZpb3VzbHkgY3JlYXRlZCBvdmVybGF5cywgc3VjaCBhcyBkaWFsb2dzLCBwb3B1cHMsIGRyb3Bkb3ducywgZXRjLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xuICAgIGNvbnN0IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gICAgcmV0dXJuIG92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsIC8vIGRpc3Bvc2UgZGlhbG9nIG9uIGJyb3dzZXIgYmFjay9mb3J3YXJkIG5hdmlnYXRpb25cbiAgICAgIHBhbmVsQ2xhc3M6IFsnd2ItZGlhbG9nLW1vZGFsaXR5LWNvbnRleHQnXSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIGZvY3VzIHdoZW4gcmUtYXR0YWNoaW5nIHRoaXMgZGlhbG9nLlxuICAgKi9cbiAgcHJpdmF0ZSByZXN0b3JlRm9jdXNPbkF0dGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hdHRhY2hlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIGZvY3VzIHdoZW4gdW5ibG9ja2luZyB0aGlzIGRpYWxvZy5cbiAgICovXG4gIHByaXZhdGUgcmVzdG9yZUZvY3VzT25VbmJsb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuYmxvY2tlZEJ5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihibG9ja2VkQnkgPT4gIWJsb2NrZWRCeSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vbml0b3JzIGF0dGFjaG1lbnQgb2YgdGhlIGhvc3QgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgbW9uaXRvckhvc3RFbGVtZW50QXR0YWNoZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNvbnRleHQudmlldykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC52aWV3LnBvcnRhbC5hdHRhY2hlZCQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl93b3JrYmVuY2hDb25maWcuZGlhbG9nPy5tb2RhbGl0eVNjb3BlID09PSAndmlld3BvcnQnKSB7XG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBpbmplY3QoV09SS0JFTkNIX0VMRU1FTlRfUkVGKS5yZWYkLnBpcGUobWFwKHJlZiA9PiAhIXJlZikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoaXMgZGlhbG9nIHdoZW4gZWl0aGVyIGl0cyBob3N0IGVsZW1lbnQgaXMgZGV0YWNoZWQgb3IgZHVyaW5nIHZpZXcgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGhpZGVPbkhvc3RFbGVtZW50RGV0YWNoT3JWaWV3RHJhZygpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3RHJhZ1NlcnZpY2UgPSBpbmplY3QoVmlld0RyYWdTZXJ2aWNlKTtcbiAgICBjb25zdCB2aWV3RHJhZyQgPSBtZXJnZShcbiAgICAgIHZpZXdEcmFnU2VydmljZS52aWV3RHJhZ1N0YXJ0JC5waXBlKG1hcCgoKSA9PiB0cnVlKSksXG4gICAgICB2aWV3RHJhZ1NlcnZpY2Uudmlld0RyYWdFbmQkLnBpcGUobWFwKCgpID0+IGZhbHNlKSksXG4gICAgICBvZihmYWxzZSksIC8vIHRvIGluaXRpYWxpemUgYGNvbWJpbmVMYXRlc3RgXG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX2F0dGFjaGVkJCwgdmlld0RyYWckXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzdWJzY3JpYmVJbnNpZGUoZm4gPT4gdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmbikpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbYXR0YWNoZWQsIGRyYWdnaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBoaWRlRGlhbG9nID0gIWF0dGFjaGVkIHx8IGRyYWdnaW5nO1xuXG4gICAgICAgIC8vIEhpZGUgdmlhIGB2aXNpYmlsaXR5OiBoaWRkZW5gIGluc3RlYWQgb2YgYGRpc3BsYXk6IG5vbmVgIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBkaW1lbnNpb24gb2YgdGhlIGRpYWxvZy5cbiAgICAgICAgc2V0U3R5bGUodGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCwge3Zpc2liaWxpdHk6IGhpZGVEaWFsb2cgPyAnaGlkZGVuJyA6IG51bGx9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaWducyB0aGlzIGRpYWxvZyB3aXRoIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBob3N0IGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIHN0aWNrVG9Ib3N0RWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5tb2RhbGl0eSA9PT0gJ2FwcGxpY2F0aW9uJyAmJiB0aGlzLl93b3JrYmVuY2hDb25maWcuZGlhbG9nPy5tb2RhbGl0eVNjb3BlID09PSAndmlld3BvcnQnKSB7XG4gICAgICBzZXRTdHlsZSh0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LCB7aW5zZXQ6ICcwJ30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHdvcmtiZW5jaFZpZXdFbGVtZW50JCA9ICh2aWV3OiDJtVdvcmtiZW5jaFZpZXcpOiBPYnNlcnZhYmxlPEhUTUxFbGVtZW50PiA9PiBvZih2aWV3LnBvcnRhbC5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICBjb25zdCB3b3JrYmVuY2hSb290RWxlbWVudCQgPSAoKTogT2JzZXJ2YWJsZTxIVE1MRWxlbWVudD4gPT4gaW5qZWN0KFdPUktCRU5DSF9FTEVNRU5UX1JFRikucmVmJC5waXBlKG1hcChyZWYgPT4gcmVmPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKTtcbiAgICAgIGNvbnN0IGhvc3RFbGVtZW50JCA9IHRoaXMuY29udGV4dC52aWV3ID8gd29ya2JlbmNoVmlld0VsZW1lbnQkKHRoaXMuY29udGV4dC52aWV3KSA6IHdvcmtiZW5jaFJvb3RFbGVtZW50JCgpO1xuXG4gICAgICBob3N0RWxlbWVudCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGhvc3RFbGVtZW50ID0+IGhvc3RFbGVtZW50ID8gZnJvbURpbWVuc2lvbiQoaG9zdEVsZW1lbnQpIDogRU1QVFkpLFxuICAgICAgICAgIG1hcCgoe2VsZW1lbnQ6IGhvc3RFbGVtZW50fSkgPT4gaG9zdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgICAgIHN1YnNjcmliZUluc2lkZShmbiA9PiB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZuKSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHt0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHR9KSA9PiB7XG4gICAgICAgICAgc2V0U3R5bGUodGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudCwge1xuICAgICAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICAgICAgbGVmdDogYCR7bGVmdH1weGAsXG4gICAgICAgICAgICB3aWR0aDogYCR7d2lkdGh9cHhgLFxuICAgICAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmxvY2tzIHRoaXMgZGlhbG9nIGlmIG5vdCB0aGUgdG9wbW9zdCBkaWFsb2cgaW4gaXRzIGNvbnRleHQuXG4gICAqL1xuICBwcml2YXRlIGJsb2NrV2hlbk5vdE9uVG9wKCk6IHZvaWQge1xuICAgIHRoaXMuX3dvcmtiZW5jaERpYWxvZ1JlZ2lzdHJ5LnRvcCQoe3ZpZXdJZDogdGhpcy5jb250ZXh0LnZpZXc/LmlkfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodG9wID0+IHRvcCA9PT0gdGhpcyA/IG51bGwgOiB0b3ApLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuYmxvY2tlZEJ5JCk7XG4gIH1cblxuICBwcml2YXRlIGJsaW5rT25SZXF1ZXN0KCk6IHZvaWQge1xuICAgIHRoaXMuX2JsaW5rJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvZih0cnVlKS5waXBlKGNvbmNhdFdpdGgob2YoZmFsc2UpLnBpcGUoZGVsYXkoMzAwKSkpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5ibGlua2luZyQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoaXMgZGlhbG9nIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy5cbiAgICovXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZGVzdHJveVJlZi5kZXN0cm95ZWQpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvZGlhbG9nL8m1d29ya2JlbmNoLWRpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxjQUFjLEVBQUUsMEJBQTBCLEVBQWdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNLLE9BQU8sRUFBQyxlQUFlLEVBQXVCLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFOUYsT0FBTyxFQUFDLGVBQWUsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsT0FBTyxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxlQUFl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SSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0RSxvQkFBb0IsRUFBRSxFQUN0QixrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMyBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbmNhdFdpdGgsIGRlbGF5LCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXBwbGljYXRpb25SZWYsIGFzc2VydE5vdEluUmVhY3RpdmVDb250ZXh0LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIEVudmlyb25tZW50SW5qZWN0b3IsIGluamVjdCwgSW5qZWN0b3IsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXb3JrYmVuY2hEaWFsb2csIFdvcmtiZW5jaERpYWxvZ1NpemUsIMm1V29ya2JlbmNoRGlhbG9nU2l6ZX0gZnJvbSAnLi93b3JrYmVuY2gtZGlhbG9nJztcbmltcG9ydCB7V29ya2JlbmNoRGlhbG9nT3B0aW9uc30gZnJvbSAnLi93b3JrYmVuY2gtZGlhbG9nLm9wdGlvbnMnO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWwsIENvbXBvbmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtPdmVybGF5LCBPdmVybGF5UmVmfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi93b3JrYmVuY2gtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge8m1V29ya2JlbmNoVmlld30gZnJvbSAnLi4vdmlldy/JtXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7V29ya2JlbmNoRGlhbG9nUmVnaXN0cnl9IGZyb20gJy4vd29ya2JlbmNoLWRpYWxvZy5yZWdpc3RyeSc7XG5pbXBvcnQge8m1RGVzdHJveVJlZn0gZnJvbSAnLi4vY29tbW9uL8m1ZGVzdHJveS1yZWYnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7c2V0U3R5bGV9IGZyb20gJy4uL2NvbW1vbi9kb20udXRpbCc7XG5pbXBvcnQge2Zyb21SZXNpemUkfSBmcm9tICdAc2Npb24vdG9vbGtpdC9vYnNlcnZhYmxlJztcbmltcG9ydCB7Vmlld0RyYWdTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWRuZC92aWV3LWRyYWcuc2VydmljZSc7XG5pbXBvcnQge1dPUktCRU5DSF9FTEVNRU5UX1JFRn0gZnJvbSAnLi4vY29udGVudC1wcm9qZWN0aW9uL3dvcmtiZW5jaC1lbGVtZW50LXJlZmVyZW5jZXMnO1xuaW1wb3J0IHtBcnJheXN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hDb25maWd9IGZyb20gJy4uL3dvcmtiZW5jaC1jb25maWcnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0FjdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi9kaWFsb2ctZm9vdGVyL3dvcmtiZW5jaC1kaWFsb2ctYWN0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0Zvb3RlckRpcmVjdGl2ZX0gZnJvbSAnLi9kaWFsb2ctZm9vdGVyL3dvcmtiZW5jaC1kaWFsb2ctZm9vdGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ0hlYWRlckRpcmVjdGl2ZX0gZnJvbSAnLi9kaWFsb2ctaGVhZGVyL3dvcmtiZW5jaC1kaWFsb2ctaGVhZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0Rpc3Bvc2FibGV9IGZyb20gJy4uL2NvbW1vbi9kaXNwb3NhYmxlJztcbmltcG9ydCB7QmxvY2thYmxlfSBmcm9tICcuLi9nbGFzcy1wYW5lL2Jsb2NrYWJsZSc7XG5pbXBvcnQge0Jsb2NraW5nfSBmcm9tICcuLi9nbGFzcy1wYW5lL2Jsb2NraW5nJztcbmltcG9ydCB7cHJvdmlkZVZpZXdDb250ZXh0fSBmcm9tICcuLi92aWV3L3ZpZXctY29udGV4dC1wcm92aWRlcic7XG5pbXBvcnQge2JvdW5kaW5nQ2xpZW50UmVjdH0gZnJvbSAnQHNjaW9uL2NvbXBvbmVudHMvZGltZW5zaW9uJztcblxuLyoqIEBpbmhlcml0RG9jICovXG5leHBvcnQgY2xhc3MgybVXb3JrYmVuY2hEaWFsb2c8UiA9IHVua25vd24+IGltcGxlbWVudHMgV29ya2JlbmNoRGlhbG9nPFI+LCBCbG9ja2FibGUsIEJsb2NraW5nIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dFbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BvcnRhbDogQ29tcG9uZW50UG9ydGFsPFdvcmtiZW5jaERpYWxvZ0NvbXBvbmVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dvcmtiZW5jaERpYWxvZ1JlZ2lzdHJ5ID0gaW5qZWN0KFdvcmtiZW5jaERpYWxvZ1JlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya2JlbmNoQ29uZmlnID0gaW5qZWN0KFdvcmtiZW5jaENvbmZpZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBuZXcgybVEZXN0cm95UmVmKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JsaW5rJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaGVkOiBTaWduYWw8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpdGxlID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xvc2FibGUgPSBzaWduYWwodHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6YWJsZSA9IHNpZ25hbCh0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFkZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3NzQ2xhc3MgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAvKipcbiAgICogUmVzdWx0IChvciBlcnJvcikgdG8gYmUgcGFzc2VkIHRvIHRoZSBkaWFsb2cgb3BlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzdWx0OiBSIHwgRXJyb3IgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFdvcmtiZW5jaERpYWxvZ0NvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgZGlhbG9nIGlzIGJsb2NrZWQgYnkgb3RoZXIgZGlhbG9nKHMpIHRoYXQgb3ZlcmxheSB0aGlzIGRpYWxvZy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBibG9ja2VkQnkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDzJtVdvcmtiZW5jaERpYWxvZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogV29ya2JlbmNoRGlhbG9nU2l6ZSA9IG5ldyDJtVdvcmtiZW5jaERpYWxvZ1NpemUoKTtcbiAgcHVibGljIGhlYWRlcjogV29ya2JlbmNoRGlhbG9nSGVhZGVyRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgZm9vdGVyOiBXb3JrYmVuY2hEaWFsb2dGb290ZXJEaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBhY3Rpb25zID0gbmV3IEFycmF5PFdvcmtiZW5jaERpYWxvZ0FjdGlvbkRpcmVjdGl2ZT4oKTtcbiAgcHVibGljIGJsaW5raW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgY29udGV4dCA9IHtcbiAgICB2aWV3OiBpbmplY3QoybVXb3JrYmVuY2hWaWV3LCB7b3B0aW9uYWw6IHRydWV9KSxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgcHVibGljIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTx1bmtub3duPixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfb3B0aW9uczogV29ya2JlbmNoRGlhbG9nT3B0aW9ucykge1xuICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICB0aGlzLl9wb3J0YWwgPSB0aGlzLmNyZWF0ZVBvcnRhbCgpO1xuICAgIHRoaXMuX2Nzc0NsYXNzLnNldChBcnJheXMuY29lcmNlKHRoaXMuX29wdGlvbnMuY3NzQ2xhc3MpKTtcbiAgICB0aGlzLl9hdHRhY2hlZCA9IHRoaXMubW9uaXRvckhvc3RFbGVtZW50QXR0YWNoZWQoKTtcblxuICAgIHRoaXMuc3RpY2tUb0hvc3RFbGVtZW50KCk7XG4gICAgdGhpcy5ibG9ja1doZW5Ob3RPblRvcCgpO1xuICAgIHRoaXMucmVzdG9yZUZvY3VzT25BdHRhY2goKTtcbiAgICB0aGlzLnJlc3RvcmVGb2N1c09uVW5ibG9jaygpO1xuICAgIHRoaXMuYmxpbmtPblJlcXVlc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvcGVuKCk6IFByb21pc2U8UiB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIFdhaXQgZm9yIHRoZSBvdmVybGF5IHRvIGJlIGluaXRpYWxseSBwb3NpdGlvbmVkIHRvIGhhdmUgYSBzbW9vdGggc2xpZGUtaW4gYW5pbWF0aW9uLlxuICAgIGlmICh0aGlzLmFuaW1hdGUpIHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKGZyb21SZXNpemUkKHRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQpKTtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggdGhlIGRpYWxvZyBwb3J0YWwgdG8gdGhlIG92ZXJsYXkuXG4gICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fcG9ydGFsKTtcblxuICAgIC8vIEVuc3VyZSB0byBkZXN0cm95IHRoaXMgaGFuZGxlIG9uIGJyb3dzZXIgYmFjay9mb3J3YXJkIG5hdmlnYXRpb24uXG4gICAgdGhpcy5fY29tcG9uZW50UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRlc3Ryb3koKSk7XG5cbiAgICAvLyBUcmlnZ2VyIGEgbWFudWFsIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgdG8gYXZvaWQgJ0V4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3InXG4gICAgLy8gd2hlbiB0aGUgZGlhbG9nIHNldHMgZGlhbG9nLXNwZWNpZmljIHByb3BlcnRpZXMgc3VjaCBhcyB0aXRsZSBvciBzaXplIGR1cmluZyBjb25zdHJ1Y3Rpb24uXG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gY2xvc2UsIHJlc29sdmluZyB0byBpdHMgcmVzdWx0IG9yIHJlamVjdGluZyBpZiBjbG9zZWQgd2l0aCBhbiBlcnJvci5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8UiB8IHVuZGVmaW5lZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZXN1bHQgaW5zdGFuY2VvZiBFcnJvciA/IHJlamVjdCh0aGlzLl9yZXN1bHQpIDogcmVzb2x2ZSh0aGlzLl9yZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsb3NlKHJlc3VsdD86IFIgfCBFcnJvcik6IHZvaWQge1xuICAgIGFzc2VydE5vdEluUmVhY3RpdmVDb250ZXh0KHRoaXMuY2xvc2UsICdDYWxsIFdvcmtiZW5jaERpYWxvZy5jbG9zZSgpIGluIGEgbm9uLXJlYWN0aXZlIChub24tdHJhY2tpbmcpIGNvbnRleHQsIHN1Y2ggYXMgd2l0aGluIHRoZSB1bnRyYWNrZWQoKSBmdW5jdGlvbi4nKTtcbiAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5wdXRzIHBhc3NlZCB0byB0aGUgZGlhbG9nLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dHMoKToge1tuYW1lOiBzdHJpbmddOiB1bmtub3dufSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuaW5wdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0byBhbmltYXRlIHRoZSBkaWFsb2cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFuaW1hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuYW5pbWF0ZSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJsb2NrZWRCeSQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2UuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJIZWFkZXIoaGVhZGVyOiBXb3JrYmVuY2hEaWFsb2dIZWFkZXJEaXJlY3RpdmUpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oZWFkZXIgPT09IGhlYWRlcikge1xuICAgICAgICAgIHRoaXMuaGVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGb290ZXIoZm9vdGVyOiBXb3JrYmVuY2hEaWFsb2dGb290ZXJEaXJlY3RpdmUpOiBEaXNwb3NhYmxlIHtcbiAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1tEaWFsb2dJbml0RXJyb3JdIEN1c3RvbSBkaWFsb2cgZm9vdGVyIG5vdCBzdXBwb3J0ZWQgaWYgdXNpbmcgZGlhbG9nIGFjdGlvbnMuJyk7XG4gICAgfVxuICAgIHRoaXMuZm9vdGVyID0gZm9vdGVyO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvb3RlciA9PT0gZm9vdGVyKSB7XG4gICAgICAgICAgdGhpcy5mb290ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckFjdGlvbihhY3Rpb246IFdvcmtiZW5jaERpYWxvZ0FjdGlvbkRpcmVjdGl2ZSk6IERpc3Bvc2FibGUge1xuICAgIGlmICh0aGlzLmZvb3Rlcikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1tEaWFsb2dJbml0RXJyb3JdIERpYWxvZyBhY3Rpb25zIG5vdCBzdXBwb3J0ZWQgaWYgdXNpbmcgYSBjdXN0b20gZGlhbG9nIGZvb3Rlci4nKTtcbiAgICB9XG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zLmNvbmNhdChhY3Rpb24pO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwb3NlOiAoKSA9PiB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUgIT09IGFjdGlvbiksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCB0aXRsZSh0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMuX3RpdGxlLnNldCh0aXRsZSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgY2xvc2FibGUoKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xvc2FibGU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCBjbG9zYWJsZShjbG9zYWJsZTogYm9vbGVhbikge1xuICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLl9jbG9zYWJsZS5zZXQoY2xvc2FibGUpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0IHJlc2l6YWJsZSgpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZXNpemFibGU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCByZXNpemFibGUocmVzaXphYmxlOiBib29sZWFuKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMuX3Jlc2l6YWJsZS5zZXQocmVzaXphYmxlKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBwYWRkaW5nKCk6IFNpZ25hbDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZGRpbmc7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHNldCBwYWRkaW5nKHBhZGRpbmc6IGJvb2xlYW4pIHtcbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5fcGFkZGluZy5zZXQocGFkZGluZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgY3NzQ2xhc3MoKTogU2lnbmFsPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nzc0NsYXNzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzZXQgY3NzQ2xhc3MoY3NzQ2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMuX2Nzc0NsYXNzLnNldChuZXcgQXJyYXk8c3RyaW5nPigpLmNvbmNhdCh0aGlzLl9vcHRpb25zLmNzc0NsYXNzID8/IFtdKS5jb25jYXQoY3NzQ2xhc3MpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGRpYWxvZyBpbiB0aGUgZGlhbG9nIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGdldFBvc2l0aW9uSW5EaWFsb2dTdGFjaygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93b3JrYmVuY2hEaWFsb2dSZWdpc3RyeS5pbmRleE9mKHRoaXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBibGluaygpOiB2b2lkIHtcbiAgICB0aGlzLl9ibGluayQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgaGFuZGxlJ3MgaW5qZWN0b3IuIFRoZSBpbmplY3RvciB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIGNsb3NpbmcgdGhlIGRpYWxvZy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5qZWN0b3IoKTogSW5qZWN0b3Ige1xuICAgIHJldHVybiB0aGlzLl9kaWFsb2dFbnZpcm9ubWVudEluamVjdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQb3J0YWwoKTogQ29tcG9uZW50UG9ydGFsPFdvcmtiZW5jaERpYWxvZ0NvbXBvbmVudD4ge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50UG9ydGFsKFdvcmtiZW5jaERpYWxvZ0NvbXBvbmVudCwgbnVsbCwgSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIC8vIFVzZSB0aGUgcm9vdCBlbnZpcm9ubWVudCBpbmplY3RvciBpbnN0ZWFkIG9mIHRoZSBkaWFsb2cncyBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAgICAgIC8vIE90aGVyd2lzZSwgaWYgYW4gYXBwbGljYXRpb24tbW9kYWwgZGlhbG9nIG9wZW5zIGEgdmlldy1tb2RhbCBkaWFsb2csIHRoZSB2aWV3LW1vZGFsIGRpYWxvZ1xuICAgICAgLy8gd291bGQgbm90IG9wZW4gYmVjYXVzZSBpdCB1c2VzIHRoZSBzYW1lIGVudmlyb25tZW50IGluamVjdG9yLCB3aGljaCwgaG93ZXZlciwgd2FzIGRlc3Ryb3llZFxuICAgICAgLy8gd2hlbiBjbG9zZWQgdGhlIGFwcGxpY2F0aW9uLW1vZGFsIGRpYWxvZy4gVmlldy1tb2RhbCBkaWFsb2dzIGFyZSBvbmx5IG9wZW5lZCBhZnRlclxuICAgICAgLy8gYWxsIGFwcGxpY2F0aW9uLW1vZGFsIGRpYWxvZ3MgaGF2ZSBiZWVuIGNsb3NlZC5cbiAgICAgIHBhcmVudDogdGhpcy5fb3B0aW9ucy5pbmplY3RvciA/PyBpbmplY3QoQXBwbGljYXRpb25SZWYpLmluamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVWaWV3Q29udGV4dCh0aGlzLmNvbnRleHQudmlldyksXG4gICAgICAgIHtwcm92aWRlOiDJtVdvcmtiZW5jaERpYWxvZywgdXNlVmFsdWU6IHRoaXN9LFxuICAgICAgICB7cHJvdmlkZTogV29ya2JlbmNoRGlhbG9nLCB1c2VFeGlzdGluZzogybVXb3JrYmVuY2hEaWFsb2d9LFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGRlZGljYXRlZCBvdmVybGF5IHBlciBkaWFsb2cgdG8gcGxhY2UgaXQgb24gdG9wIG9mIHByZXZpb3VzbHkgY3JlYXRlZCBvdmVybGF5cywgc3VjaCBhcyBkaWFsb2dzLCBwb3B1cHMsIGRyb3Bkb3ducywgZXRjLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xuICAgIGNvbnN0IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gICAgcmV0dXJuIG92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsIC8vIGRpc3Bvc2UgZGlhbG9nIG9uIGJyb3dzZXIgYmFjay9mb3J3YXJkIG5hdmlnYXRpb25cbiAgICAgIHBhbmVsQ2xhc3M6IFsnd2ItZGlhbG9nLW1vZGFsaXR5LWNvbnRleHQnXSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIGZvY3VzIHdoZW4gcmUtYXR0YWNoaW5nIHRoaXMgZGlhbG9nLlxuICAgKi9cbiAgcHJpdmF0ZSByZXN0b3JlRm9jdXNPbkF0dGFjaCgpOiB2b2lkIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYXR0YWNoZWQgPSB0aGlzLl9hdHRhY2hlZCgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IGF0dGFjaGVkICYmIHRoaXMuZm9jdXMoKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgZm9jdXMgd2hlbiB1bmJsb2NraW5nIHRoaXMgZGlhbG9nLlxuICAgKi9cbiAgcHJpdmF0ZSByZXN0b3JlRm9jdXNPblVuYmxvY2soKTogdm9pZCB7XG4gICAgdGhpcy5ibG9ja2VkQnkkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGJsb2NrZWRCeSA9PiAhYmxvY2tlZEJ5KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW9uaXRvcnMgYXR0YWNobWVudCBvZiB0aGUgaG9zdCBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBtb25pdG9ySG9zdEVsZW1lbnRBdHRhY2hlZCgpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmNvbnRleHQudmlldykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC52aWV3LnBvcnRhbC5hdHRhY2hlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dvcmtiZW5jaENvbmZpZy5kaWFsb2c/Lm1vZGFsaXR5U2NvcGUgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB0cnVlKTtcbiAgICB9XG4gICAgY29uc3Qgd29ya2JlbmNoRWxlbWVudFJlZiA9IGluamVjdChXT1JLQkVOQ0hfRUxFTUVOVF9SRUYpO1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiAhIXdvcmtiZW5jaEVsZW1lbnRSZWYoKSk7XG4gIH1cblxuICAvKipcbiAgICogQWxpZ25zIHRoaXMgZGlhbG9nIHdpdGggdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGhvc3QgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgc3RpY2tUb0hvc3RFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9vcHRpb25zLm1vZGFsaXR5ID09PSAnYXBwbGljYXRpb24nICYmIHRoaXMuX3dvcmtiZW5jaENvbmZpZy5kaWFsb2c/Lm1vZGFsaXR5U2NvcGUgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgIHNldFN0eWxlKHRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQsIHtpbnNldDogJzAnfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qgd29ya2JlbmNoRWxlbWVudFJlZiA9IGluamVjdChXT1JLQkVOQ0hfRUxFTUVOVF9SRUYpO1xuICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRleHQudmlldyA/IHRoaXMuY29udGV4dC52aWV3LnBvcnRhbC5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCA6IHdvcmtiZW5jaEVsZW1lbnRSZWYoKT8uZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGNvbnN0IGhvc3RCb3VuZHMgPSBib3VuZGluZ0NsaWVudFJlY3QoaG9zdEVsZW1lbnQpO1xuICAgICAgY29uc3Qgdmlld0RyYWdTZXJ2aWNlID0gaW5qZWN0KFZpZXdEcmFnU2VydmljZSk7XG5cbiAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLl9hdHRhY2hlZCgpICYmICF2aWV3RHJhZ1NlcnZpY2UuZHJhZ2dpbmcoKTtcblxuICAgICAgICAvLyBNYWludGFpbiBwb3NpdGlvbiBhbmQgc2l6ZSB3aGVuIGhpZGRlbiB0byBwcmV2ZW50IGZsaWNrZXJpbmcgd2hlbiB2aXNpYmxlIGFnYWluIGFuZCB0byBzdXBwb3J0IGZvciB2aXJ0dWFsIHNjcm9sbGluZyBpbiBkaWFsb2cgY29udGVudC5cbiAgICAgICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICAgICAgc2V0U3R5bGUodGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCwge3Zpc2liaWxpdHk6ICdoaWRkZW4nfSk7IC8vIEhpZGUgdmlhIGB2aXNpYmlsaXR5YCBpbnN0ZWFkIG9mIGBkaXNwbGF5YCBwcm9wZXJ0eSB0byByZXRhaW4gdGhlIHNpemUuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSU1QT1JUQU5UOiBUcmFjayBob3N0IGJvdW5kcyBvbmx5IGlmIHZpc2libGUgdG8gcHJldmVudCBmbGlja2VyaW5nLlxuICAgICAgICBjb25zdCB7bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0fSA9IGhvc3RCb3VuZHMoKTtcbiAgICAgICAgc2V0U3R5bGUodGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCwge3Zpc2liaWxpdHk6IG51bGx9KTtcbiAgICAgICAgc2V0U3R5bGUodGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudCwge1xuICAgICAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgICAgICBsZWZ0OiBgJHtsZWZ0fXB4YCxcbiAgICAgICAgICB3aWR0aDogYCR7d2lkdGh9cHhgLFxuICAgICAgICAgIGhlaWdodDogYCR7aGVpZ2h0fXB4YCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmxvY2tzIHRoaXMgZGlhbG9nIGlmIG5vdCB0aGUgdG9wbW9zdCBkaWFsb2cgaW4gaXRzIGNvbnRleHQuXG4gICAqL1xuICBwcml2YXRlIGJsb2NrV2hlbk5vdE9uVG9wKCk6IHZvaWQge1xuICAgIHRoaXMuX3dvcmtiZW5jaERpYWxvZ1JlZ2lzdHJ5LnRvcCQoe3ZpZXdJZDogdGhpcy5jb250ZXh0LnZpZXc/LmlkfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAodG9wID0+IHRvcCA9PT0gdGhpcyA/IG51bGwgOiB0b3ApLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5ibG9ja2VkQnkkKTtcbiAgfVxuXG4gIHByaXZhdGUgYmxpbmtPblJlcXVlc3QoKTogdm9pZCB7XG4gICAgdGhpcy5fYmxpbmskXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG9mKHRydWUpLnBpcGUoY29uY2F0V2l0aChvZihmYWxzZSkucGlwZShkZWxheSgzMDApKSkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuYmxpbmtpbmckKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGlzIGRpYWxvZyBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Rlc3Ryb3lSZWYuZGVzdHJveWVkKSB7XG4gICAgICB0aGlzLl9kaWFsb2dFbnZpcm9ubWVudEluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=