@theseam/ui-common 0.4.0-beta.5 → 0.4.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 (720) hide show
  1. package/breadcrumbs/breadcrumb.d.ts +1 -1
  2. package/breadcrumbs/breadcrumbs/breadcrumbs.component.d.ts +1 -3
  3. package/breadcrumbs/breadcrumbs-resolver.d.ts +1 -1
  4. package/card/card-body/card-body.component.d.ts +2 -4
  5. package/card/card-footer/card-footer.component.d.ts +1 -4
  6. package/card/card-header/card-header.component.d.ts +1 -4
  7. package/card/card.component.d.ts +1 -4
  8. package/carousel/carousel-slide.directive.d.ts +8 -0
  9. package/carousel/carousel.component.d.ts +85 -0
  10. package/carousel/carousel.module.d.ts +11 -0
  11. package/carousel/index.d.ts +5 -0
  12. package/carousel/public-api.d.ts +3 -0
  13. package/checkbox/checkbox.component.d.ts +2 -4
  14. package/core/common-behaviors/active.d.ts +2 -2
  15. package/core/common-behaviors/constructor.d.ts +1 -1
  16. package/core/common-behaviors/disabled.d.ts +2 -2
  17. package/core/common-behaviors/initialized.d.ts +2 -2
  18. package/core/common-behaviors/size.d.ts +1 -1
  19. package/core/common-behaviors/tabindex.d.ts +1 -1
  20. package/core/common-behaviors/theme.d.ts +1 -1
  21. package/data-exporter/data-exporter.d.ts +1 -1
  22. package/data-filters/data-filter.d.ts +4 -4
  23. package/data-filters/filters/data-filter-search/search-filter-options.d.ts +1 -1
  24. package/datatable/datatable-column/datatable-column.component.d.ts +3 -4
  25. package/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.d.ts +1 -3
  26. package/datatable/datatable-export-button/datatable-export-button.component.d.ts +1 -3
  27. package/datatable/datatable-menu-bar/datatable-menu-bar.component.d.ts +2 -5
  28. package/datatable/datatable-menu-bar-column-center/datatable-menu-bar-column-center.component.d.ts +1 -4
  29. package/datatable/datatable-menu-bar-column-left/datatable-menu-bar-column-left.component.d.ts +1 -4
  30. package/datatable/datatable-menu-bar-column-right/datatable-menu-bar-column-right.component.d.ts +1 -4
  31. package/datatable/datatable-menu-bar-row/datatable-menu-bar-row.component.d.ts +1 -4
  32. package/datatable/datatable-menu-bar-text/datatable-menu-bar-text.component.d.ts +1 -3
  33. package/datatable/directives/datatable-action-menu-item.directive.d.ts +2 -4
  34. package/datatable/models/preferences.d.ts +1 -1
  35. package/datatable/models/table-column.d.ts +1 -1
  36. package/datatable/services/columns-manager.service.d.ts +1 -1
  37. package/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.d.ts +1 -3
  38. package/datatable-dynamic/datatable-dynamic-def.d.ts +3 -3
  39. package/datatable-dynamic/datatable-dynamic-menu-bar-content/datatable-dynamic-menu-bar-content.component.d.ts +3 -4
  40. package/datatable-dynamic/datatable-dynamic-menu-bar-item-manifest.d.ts +1 -1
  41. package/datatable-dynamic/datatable-dynamic.component.d.ts +1 -4
  42. package/datatable-dynamic/directives/datatable-dynamic-action-menu-item.directive.d.ts +3 -4
  43. package/datatable-dynamic/models/dynamic-datatable-action-menu-record.d.ts +1 -1
  44. package/dynamic/action/modal/dynamic-action-modal-def.d.ts +1 -1
  45. package/dynamic/models/dynamic-value-base-type.d.ts +1 -1
  46. package/dynamic/models/dynamic-value-evaluatable-type.d.ts +1 -1
  47. package/dynamic/models/dynamic-value-primitive.d.ts +1 -1
  48. package/dynamic/models/dynamic-value.d.ts +1 -1
  49. package/dynamic/tokens/api-config.d.ts +1 -1
  50. package/esm2020/asset-reader/asset-reader-helper.service.mjs +7 -5
  51. package/esm2020/asset-reader/asset-reader.module.mjs +4 -4
  52. package/esm2020/asset-reader/encrypted-asset-link.directive.mjs +12 -12
  53. package/esm2020/breadcrumbs/breadcrumb.mjs +1 -1
  54. package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +4 -5
  55. package/esm2020/breadcrumbs/breadcrumbs-resolver.mjs +1 -1
  56. package/esm2020/breadcrumbs/breadcrumbs.module.mjs +5 -5
  57. package/esm2020/breadcrumbs/breadcrumbs.service.mjs +7 -7
  58. package/esm2020/buttons/badge-button/badge-button.component.mjs +9 -7
  59. package/esm2020/buttons/button/button.component.mjs +12 -10
  60. package/esm2020/buttons/buttons.module.mjs +4 -4
  61. package/esm2020/buttons/progress-circle-button/progress-circle-button.component.mjs +4 -4
  62. package/esm2020/buttons/toggle-button/toggle-button.component.mjs +7 -7
  63. package/esm2020/card/card-action/card-action.component.mjs +4 -4
  64. package/esm2020/card/card-body/card-body.component.mjs +5 -6
  65. package/esm2020/card/card-footer/card-footer.component.mjs +5 -8
  66. package/esm2020/card/card-header/card-header.component.mjs +5 -7
  67. package/esm2020/card/card.component.mjs +5 -7
  68. package/esm2020/card/card.module.mjs +4 -4
  69. package/esm2020/carousel/carousel-slide.directive.mjs +16 -0
  70. package/esm2020/carousel/carousel.component.mjs +211 -0
  71. package/esm2020/carousel/carousel.module.mjs +38 -0
  72. package/esm2020/carousel/public-api.mjs +4 -0
  73. package/esm2020/carousel/theseam-ui-common-carousel.mjs +5 -0
  74. package/esm2020/checkbox/checkbox.component.mjs +44 -45
  75. package/esm2020/checkbox/checkbox.module.mjs +4 -4
  76. package/esm2020/checkbox/testing/checkbox.harness.mjs +1 -1
  77. package/esm2020/checkbox/testing/index.mjs +1 -1
  78. package/esm2020/confirm-dialog/confirm-click.directive.mjs +11 -11
  79. package/esm2020/confirm-dialog/confirm-dialog.component.mjs +3 -3
  80. package/esm2020/confirm-dialog/confirm-dialog.module.mjs +4 -4
  81. package/esm2020/confirm-dialog/confirm-dialog.service.mjs +3 -3
  82. package/esm2020/core/common-behaviors/active.mjs +4 -3
  83. package/esm2020/core/common-behaviors/disabled.mjs +4 -3
  84. package/esm2020/core/common-behaviors/initialized.mjs +2 -1
  85. package/esm2020/core/common-behaviors/size.mjs +6 -6
  86. package/esm2020/core/common-behaviors/tabindex.mjs +6 -5
  87. package/esm2020/core/common-behaviors/theme.mjs +6 -6
  88. package/esm2020/core/input-decorators/input-boolean.decorator.mjs +4 -5
  89. package/esm2020/core/input-decorators/input-number.decorator.mjs +4 -5
  90. package/esm2020/data-exporter/data-exporter.module.mjs +4 -4
  91. package/esm2020/data-exporter/exporters/csv-exporter.mjs +3 -3
  92. package/esm2020/data-exporter/exporters/xlsx-exporter.mjs +3 -3
  93. package/esm2020/data-filters/data-filter.mjs +1 -1
  94. package/esm2020/data-filters/data-filters.module.mjs +4 -4
  95. package/esm2020/data-filters/filters/data-filter-search/data-filter-search.component.mjs +11 -11
  96. package/esm2020/data-filters/filters/data-filter-text/data-filter-text.component.mjs +12 -12
  97. package/esm2020/data-filters/filters/data-filter-toggle-buttons/data-filter-toggle-buttons.component.mjs +18 -15
  98. package/esm2020/datatable/datatable/datatable.component.mjs +114 -109
  99. package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +3 -3
  100. package/esm2020/datatable/datatable-action-menu-item/datatable-action-menu-item.component.mjs +5 -4
  101. package/esm2020/datatable/datatable-column/datatable-column.component.mjs +7 -8
  102. package/esm2020/datatable/datatable-column-preferences/datatable-column-preferences.component.mjs +3 -3
  103. package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +4 -5
  104. package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +8 -8
  105. package/esm2020/datatable/datatable-footer/datatable-footer-tpl.directive.mjs +3 -3
  106. package/esm2020/datatable/datatable-footer/datatable-footer.directive.mjs +5 -5
  107. package/esm2020/datatable/datatable-menu-bar/datatable-menu-bar.component.mjs +5 -9
  108. package/esm2020/datatable/datatable-menu-bar-column-center/datatable-menu-bar-column-center.component.mjs +5 -8
  109. package/esm2020/datatable/datatable-menu-bar-column-left/datatable-menu-bar-column-left.component.mjs +5 -8
  110. package/esm2020/datatable/datatable-menu-bar-column-right/datatable-menu-bar-column-right.component.mjs +5 -8
  111. package/esm2020/datatable/datatable-menu-bar-row/datatable-menu-bar-row.component.mjs +5 -8
  112. package/esm2020/datatable/datatable-menu-bar-text/datatable-menu-bar-text.component.mjs +4 -5
  113. package/esm2020/datatable/datatable-row-detail/datatable-row-detail-tpl.directive.mjs +3 -3
  114. package/esm2020/datatable/datatable-row-detail/datatable-row-detail.directive.mjs +5 -5
  115. package/esm2020/datatable/datatable.module.mjs +4 -4
  116. package/esm2020/datatable/directives/datatable-action-menu-item.directive.mjs +5 -6
  117. package/esm2020/datatable/directives/datatable-action-menu-toggle.directive.mjs +11 -11
  118. package/esm2020/datatable/directives/datatable-cell-tpl.directive.mjs +3 -3
  119. package/esm2020/datatable/directives/datatable-filter.directive.mjs +3 -3
  120. package/esm2020/datatable/directives/datatable-row-action-item.directive.mjs +3 -3
  121. package/esm2020/datatable/models/columns-alteration.mjs +1 -1
  122. package/esm2020/datatable/models/columns-alterations/order.columns-alteration.mjs +3 -1
  123. package/esm2020/datatable/models/datatable-gql-data-source.mjs +1 -1
  124. package/esm2020/datatable/models/internal-column-props.mjs +1 -1
  125. package/esm2020/datatable/models/sort-item.mjs +1 -1
  126. package/esm2020/datatable/services/columns-alterations-manager.service.mjs +4 -4
  127. package/esm2020/datatable/services/columns-manager.service.mjs +5 -5
  128. package/esm2020/datatable/services/datatable-column-changes.service.mjs +3 -3
  129. package/esm2020/datatable/services/datatable-preferences.service.mjs +7 -6
  130. package/esm2020/datatable/services/datatable-scrollbar-helper.service.mjs +5 -5
  131. package/esm2020/datatable/utils/map-columns-alterations-states.mjs +4 -1
  132. package/esm2020/datatable/utils/set-column-defaults.mjs +2 -2
  133. package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +13 -14
  134. package/esm2020/datatable-dynamic/datatable-dynamic-filter-container/datatable-dynamic-filter-container.component.mjs +8 -8
  135. package/esm2020/datatable-dynamic/datatable-dynamic-menu-bar-content/datatable-dynamic-menu-bar-content.component.mjs +8 -9
  136. package/esm2020/datatable-dynamic/datatable-dynamic-menu-bar-item-manifest.mjs +1 -1
  137. package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +8 -10
  138. package/esm2020/datatable-dynamic/datatable-dynamic.module.mjs +4 -4
  139. package/esm2020/datatable-dynamic/directives/datatable-dynamic-action-menu-item.directive.mjs +9 -9
  140. package/esm2020/datatable-dynamic/dynamic-datatable-def.service.mjs +7 -7
  141. package/esm2020/datatable-dynamic/dynamic-datatable-row-actions.service.mjs +6 -6
  142. package/esm2020/dynamic/action/api/dynamic-action-api.service.mjs +11 -8
  143. package/esm2020/dynamic/action/dynamic-action-helper.service.mjs +6 -5
  144. package/esm2020/dynamic/action/link/dynamic-action-link.service.mjs +4 -4
  145. package/esm2020/dynamic/action/modal/dynamic-action-modal-def.mjs +1 -1
  146. package/esm2020/dynamic/action/modal/dynamic-action-modal.service.mjs +4 -4
  147. package/esm2020/dynamic/dynamic-value-helper.service.mjs +5 -4
  148. package/esm2020/dynamic/evaluators/exporters-data-evaluator/exporters-data-evaluator.mjs +4 -4
  149. package/esm2020/dynamic/evaluators/jexl-evaluator/jexl-evaluator.mjs +5 -5
  150. package/esm2020/dynamic-component-loader/dynamic-component-loader.module.mjs +4 -4
  151. package/esm2020/dynamic-component-loader/dynamic-component-loader.service.mjs +9 -9
  152. package/esm2020/footer-bar/footer-bar/footer-bar.component.mjs +5 -8
  153. package/esm2020/footer-bar/footer-bar.module.mjs +5 -5
  154. package/esm2020/form-field/form-field-error.directive.mjs +6 -6
  155. package/esm2020/form-field/form-field-help-text.directive.mjs +3 -3
  156. package/esm2020/form-field/form-field-label-tpl.directive.mjs +3 -3
  157. package/esm2020/form-field/form-field-required-indicator.component.mjs +4 -4
  158. package/esm2020/form-field/form-field.component.mjs +49 -49
  159. package/esm2020/form-field/form-field.module.mjs +4 -4
  160. package/esm2020/form-field/input.directive.mjs +49 -48
  161. package/esm2020/form-field/testing/form-field-required-indicator.harness.mjs +1 -1
  162. package/esm2020/form-field/testing/index.mjs +1 -1
  163. package/esm2020/form-field-error/form-field-error/form-field-error.component.mjs +5 -7
  164. package/esm2020/form-field-error/form-field-error-list/form-field-error-list-item-tpl.directive.mjs +4 -4
  165. package/esm2020/form-field-error/form-field-error-list/form-field-error-list-item.directive.mjs +3 -3
  166. package/esm2020/form-field-error/form-field-error-list/form-field-error-list.component.mjs +96 -96
  167. package/esm2020/form-field-error/form-field-error.module.mjs +4 -4
  168. package/esm2020/framework/base-layout/base-layout.component.mjs +7 -6
  169. package/esm2020/framework/base-layout/base-layout.module.mjs +5 -5
  170. package/esm2020/framework/base-layout/directives/base-layout-content-footer.directive.mjs +3 -3
  171. package/esm2020/framework/base-layout/directives/base-layout-content-header.directive.mjs +3 -3
  172. package/esm2020/framework/base-layout/directives/base-layout-content.directive.mjs +3 -3
  173. package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +10 -10
  174. package/esm2020/framework/base-layout/directives/base-layout-side-bar-footer.directive.mjs +3 -3
  175. package/esm2020/framework/base-layout/directives/base-layout-side-bar.directive.mjs +3 -3
  176. package/esm2020/framework/base-layout/directives/base-layout-top-bar.directive.mjs +3 -3
  177. package/esm2020/framework/dashboard/dashboard-widget-container/dashboard-widget-container.component.mjs +5 -7
  178. package/esm2020/framework/dashboard/dashboard-widget-template-container/dashboard-widget-template-container.component.mjs +4 -5
  179. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widget-portal-outlet.directive.mjs +7 -7
  180. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets-preferences.service.mjs +6 -5
  181. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.component.mjs +18 -18
  182. package/esm2020/framework/dashboard/dashboard-widgets/dashboard-widgets.service.mjs +15 -13
  183. package/esm2020/framework/dashboard/dashboard.component.mjs +5 -5
  184. package/esm2020/framework/dashboard/dashboard.module.mjs +4 -4
  185. package/esm2020/framework/dynamic-router/dynamic-route-def.mjs +1 -1
  186. package/esm2020/framework/dynamic-router/dynamic-router.module.mjs +5 -5
  187. package/esm2020/framework/dynamic-router/hierarchy-router-outlet/hierarchy-route-animations.mjs +1 -1
  188. package/esm2020/framework/dynamic-router/hierarchy-router-outlet/hierarchy-router-outlet.component.mjs +5 -6
  189. package/esm2020/framework/dynamic-router/resolvers/hierarchy-level.resolver.mjs +5 -6
  190. package/esm2020/framework/schema-form/schema-form-framework.component.mjs +3 -3
  191. package/esm2020/framework/schema-form/schema-form-framework.mjs +3 -3
  192. package/esm2020/framework/schema-form/schema-form.module.mjs +4 -4
  193. package/esm2020/framework/schema-form-controls/schema-form-checkbox/schema-form-checkbox.component.mjs +3 -3
  194. package/esm2020/framework/schema-form-controls/schema-form-controls.module.mjs +4 -4
  195. package/esm2020/framework/schema-form-controls/schema-form-input/schema-form-input.component.mjs +3 -3
  196. package/esm2020/framework/schema-form-controls/schema-form-number/schema-form-number.component.mjs +3 -3
  197. package/esm2020/framework/schema-form-controls/schema-form-select/schema-form-select.component.mjs +3 -3
  198. package/esm2020/framework/schema-form-controls/schema-form-submit/schema-form-submit.component.mjs +3 -3
  199. package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +5 -4
  200. package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +25 -25
  201. package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +5 -6
  202. package/esm2020/framework/side-nav/side-nav-utils.mjs +2 -1
  203. package/esm2020/framework/side-nav/side-nav.component.mjs +19 -20
  204. package/esm2020/framework/side-nav/side-nav.module.mjs +4 -4
  205. package/esm2020/framework/side-nav/side-nav.service.mjs +3 -3
  206. package/esm2020/framework/top-bar/top-bar-item.directive.mjs +3 -3
  207. package/esm2020/framework/top-bar/top-bar-menu-btn-detail.directive.mjs +3 -3
  208. package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +4 -6
  209. package/esm2020/framework/top-bar/top-bar-menu.directive.mjs +3 -3
  210. package/esm2020/framework/top-bar/top-bar-title/top-bar-title.component.mjs +5 -7
  211. package/esm2020/framework/top-bar/top-bar.component.mjs +4 -6
  212. package/esm2020/framework/top-bar/top-bar.module.mjs +4 -4
  213. package/esm2020/google-maps/google-maps/google-maps.component.mjs +36 -39
  214. package/esm2020/google-maps/google-maps-api-loader/lazy-google-maps-api-loader.mjs +103 -0
  215. package/esm2020/google-maps/google-maps-api-loader/noop-google-maps-api-loader.mjs +25 -0
  216. package/esm2020/google-maps/google-maps-contextmenu.mjs +9 -8
  217. package/esm2020/google-maps/google-maps-controls.service.mjs +3 -3
  218. package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.mjs +24 -25
  219. package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.mjs +12 -12
  220. package/esm2020/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.mjs +9 -9
  221. package/esm2020/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.mjs +9 -9
  222. package/esm2020/google-maps/google-maps.module.mjs +4 -4
  223. package/esm2020/google-maps/google-maps.service.mjs +9 -9
  224. package/esm2020/google-maps/map-control.component.mjs +9 -9
  225. package/esm2020/google-maps/map-file-drop/map-file-drop.component.mjs +4 -4
  226. package/esm2020/google-maps/map-value-manager.service.mjs +3 -3
  227. package/esm2020/google-maps/public-api.mjs +4 -1
  228. package/esm2020/graphql/datatable/datatable-graphql-query-ref.mjs +5 -31
  229. package/esm2020/graphql/datatable/datatable-graphql.service.mjs +4 -4
  230. package/esm2020/graphql/datatable/datatable-helpers.mjs +2 -2
  231. package/esm2020/graphql/datatable/map-filter-states.mjs +2 -1
  232. package/esm2020/graphql/utils/inline-variables.mjs +2 -1
  233. package/esm2020/graphql/utils/parse-hints.mjs +3 -3
  234. package/esm2020/graphql/utils/to-gql.mjs +3 -3
  235. package/esm2020/icon/icon/icon.component.mjs +5 -5
  236. package/esm2020/icon/icon-btn/icon-btn.component.mjs +24 -25
  237. package/esm2020/icon/icon-notification/icon-notification.component.mjs +3 -3
  238. package/esm2020/icon/icon.module.mjs +4 -4
  239. package/esm2020/icon/utils/get-known-icon.mjs +71 -71
  240. package/esm2020/layout/breakpoint-aliases.mjs +1 -1
  241. package/esm2020/layout/layout.module.mjs +4 -4
  242. package/esm2020/layout/layout.service.mjs +3 -3
  243. package/esm2020/layout/observe-media-query.mjs +1 -1
  244. package/esm2020/loading/loading/loading.component.mjs +5 -6
  245. package/esm2020/loading/loading-overlay.service.mjs +3 -3
  246. package/esm2020/loading/loading.module.mjs +4 -4
  247. package/esm2020/menu/menu-divider.component.mjs +3 -3
  248. package/esm2020/menu/menu-footer/menu-footer.component.mjs +3 -3
  249. package/esm2020/menu/menu-footer-action/menu-footer-action.component.mjs +7 -7
  250. package/esm2020/menu/menu-header/menu-header.component.mjs +3 -3
  251. package/esm2020/menu/menu-item.component.mjs +4 -5
  252. package/esm2020/menu/menu-toggle.directive.mjs +42 -42
  253. package/esm2020/menu/menu.component.mjs +15 -15
  254. package/esm2020/menu/menu.module.mjs +4 -4
  255. package/esm2020/modal/directives/modal-close.directive.mjs +11 -11
  256. package/esm2020/modal/directives/modal-footer-tpl.directive.mjs +3 -3
  257. package/esm2020/modal/directives/modal-header-icon-tpl.directive.mjs +3 -3
  258. package/esm2020/modal/directives/modal-header-title-tpl.directive.mjs +3 -3
  259. package/esm2020/modal/directives/modal-title.directive.mjs +3 -3
  260. package/esm2020/modal/directives/modal.directive.mjs +5 -5
  261. package/esm2020/modal/modal/modal.component.mjs +20 -21
  262. package/esm2020/modal/modal-body/modal-body.component.mjs +5 -7
  263. package/esm2020/modal/modal-config.mjs +1 -1
  264. package/esm2020/modal/modal-container/modal-container.component.mjs +12 -12
  265. package/esm2020/modal/modal-footer/modal-footer.component.mjs +5 -7
  266. package/esm2020/modal/modal-header/modal-header.component.mjs +5 -7
  267. package/esm2020/modal/modal-ref.mjs +1 -1
  268. package/esm2020/modal/modal.module.mjs +4 -4
  269. package/esm2020/modal/modal.service.mjs +38 -35
  270. package/esm2020/modal/route-modal/route-modal.component.mjs +4 -5
  271. package/esm2020/popover/popover/popover.component.mjs +18 -18
  272. package/esm2020/popover/popover.directive.mjs +32 -32
  273. package/esm2020/popover/popover.module.mjs +5 -5
  274. package/esm2020/progress/progress-circle/progress-circle.component.mjs +5 -5
  275. package/esm2020/progress/progress.module.mjs +4 -4
  276. package/esm2020/scrollbar/overlay-scrollbar.directive.mjs +10 -11
  277. package/esm2020/scrollbar/overlay-scrollbars.service.mjs +4 -4
  278. package/esm2020/scrollbar/scrollbar.module.mjs +4 -4
  279. package/esm2020/services/asset-loader.service.mjs +5 -6
  280. package/esm2020/services/font-loader.service.mjs +5 -6
  281. package/esm2020/services/router-helpers.service.mjs +3 -3
  282. package/esm2020/shared/components/password-input-reveal/password-input-reveal.component.mjs +3 -3
  283. package/esm2020/shared/directives/auto-focus.directive.mjs +3 -3
  284. package/esm2020/shared/directives/click-outside.directive.mjs +9 -9
  285. package/esm2020/shared/directives/disable-control.directive.mjs +7 -7
  286. package/esm2020/shared/directives/elem-resized.directive.mjs +5 -5
  287. package/esm2020/shared/directives/hover-class-toggle.directive.mjs +10 -10
  288. package/esm2020/shared/directives/hover-class.directive.mjs +9 -9
  289. package/esm2020/shared/directives/ng-select-extra.directive.mjs +29 -29
  290. package/esm2020/shared/directives/ngx-quill-extra.directive.mjs +11 -11
  291. package/esm2020/shared/pipes/mask-chars.pipe.mjs +3 -3
  292. package/esm2020/shared/pipes/truncate.pipe.mjs +3 -3
  293. package/esm2020/shared/shared.module.mjs +4 -4
  294. package/esm2020/storage/local-storage.service.mjs +8 -8
  295. package/esm2020/storage/localstorage-memory.mjs +4 -4
  296. package/esm2020/story-helpers/arg-type-helpers.mjs +1 -1
  297. package/esm2020/story-helpers/initial-route.service.mjs +3 -3
  298. package/esm2020/story-helpers/on-story-bootstrapped-trigger.mjs +2 -1
  299. package/esm2020/story-helpers/public-api.mjs +2 -2
  300. package/esm2020/story-helpers/story-empty-with-route.component.mjs +3 -3
  301. package/esm2020/story-helpers/story-empty.component.mjs +3 -3
  302. package/esm2020/story-helpers/story-helper-components.module.mjs +4 -4
  303. package/esm2020/story-helpers/story-initial-route.mjs +4 -4
  304. package/esm2020/story-helpers/story-modal-container.component.mjs +6 -6
  305. package/esm2020/story-helpers/story-toastr.service.mjs +3 -3
  306. package/esm2020/tabbed/directives/tabbed-tab-content.directive.mjs +5 -5
  307. package/esm2020/tabbed/directives/tabbed-tab.directive.mjs +5 -4
  308. package/esm2020/tabbed/tabbed-content/tabbed-content.component.mjs +5 -7
  309. package/esm2020/tabbed/tabbed-item/tabbed-item.component.mjs +5 -6
  310. package/esm2020/tabbed/tabbed.component.mjs +13 -13
  311. package/esm2020/tabbed/tabbed.module.mjs +4 -4
  312. package/esm2020/tabbed/tabbed.service.mjs +5 -5
  313. package/esm2020/table/table/table.component.mjs +12 -13
  314. package/esm2020/table/table.module.mjs +4 -4
  315. package/esm2020/table-cell-type/services/table-cell-types-helpers.service.mjs +5 -5
  316. package/esm2020/table-cell-type/table-cell-type-export-props.mjs +1 -1
  317. package/esm2020/table-cell-type/table-cell-type-models.mjs +1 -1
  318. package/esm2020/table-cell-type/table-cell-type-selector.component.mjs +5 -6
  319. package/esm2020/table-cell-type/table-cell-type.module.mjs +4 -4
  320. package/esm2020/table-cell-types/table-cell-type-currency/table-cell-type-currency.component.mjs +12 -12
  321. package/esm2020/table-cell-types/table-cell-type-date/table-cell-type-date.component.mjs +8 -12
  322. package/esm2020/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.component.mjs +14 -14
  323. package/esm2020/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.mjs +37 -37
  324. package/esm2020/table-cell-types/table-cell-type-integer/table-cell-type-integer.component.mjs +14 -14
  325. package/esm2020/table-cell-types/table-cell-type-phone/table-cell-type-phone.component.mjs +8 -9
  326. package/esm2020/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle.component.mjs +11 -10
  327. package/esm2020/table-cell-types/table-cell-type-progress-circle-icon/table-cell-type-progress-circle-icon.component.mjs +7 -8
  328. package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +30 -27
  329. package/esm2020/table-cell-types/table-cell-types.module.mjs +4 -4
  330. package/esm2020/tel-input/intl-tel-input.mjs +2 -2
  331. package/esm2020/tel-input/phone-number.pipe.mjs +3 -3
  332. package/esm2020/tel-input/tel-input/tel-input.component.mjs +35 -36
  333. package/esm2020/tel-input/tel-input.directive.mjs +18 -18
  334. package/esm2020/tel-input/tel-input.module.mjs +4 -4
  335. package/esm2020/tel-input/utils/add-country-code.mjs +4 -4
  336. package/esm2020/tel-input/utils/process-country-codes.mjs +4 -7
  337. package/esm2020/testing/story-expect.mjs +2 -1
  338. package/esm2020/tiled-select/components/tiled-select/tiled-select.component.mjs +21 -22
  339. package/esm2020/tiled-select/components/tiled-select-tile/tiled-select-tile.component.mjs +6 -7
  340. package/esm2020/tiled-select/components/tiled-select-tile-icon/tiled-select-tile-icon.component.mjs +6 -7
  341. package/esm2020/tiled-select/directives/tiled-select-tile-icon-tpl.directive.mjs +3 -3
  342. package/esm2020/tiled-select/directives/tiled-select-tile-label-tpl.directive.mjs +3 -3
  343. package/esm2020/tiled-select/directives/tiled-select-tile-overlay.directive.mjs +3 -3
  344. package/esm2020/tiled-select/testing/index.mjs +1 -1
  345. package/esm2020/tiled-select/tiled-select.module.mjs +4 -4
  346. package/esm2020/toggle-edit/toggle-edit-actions-container/toggle-edit-actions-container.component.mjs +5 -8
  347. package/esm2020/toggle-edit/toggle-edit-display-tpl.directive.mjs +3 -3
  348. package/esm2020/toggle-edit/toggle-edit-keyboard-listener.service.mjs +3 -3
  349. package/esm2020/toggle-edit/toggle-edit.component.mjs +19 -19
  350. package/esm2020/toggle-edit/toggle-edit.module.mjs +4 -4
  351. package/esm2020/toggle-group/toggle-group-option.directive.mjs +12 -12
  352. package/esm2020/toggle-group/toggle-group.directive.mjs +6 -6
  353. package/esm2020/toggle-group/toggle-group.module.mjs +4 -4
  354. package/esm2020/unsaved-changes-dialog/unsaved-changes-can-deactivate.mjs +5 -5
  355. package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +5 -8
  356. package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.guard.mjs +5 -4
  357. package/esm2020/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +4 -4
  358. package/esm2020/utils/array-move.mjs +1 -1
  359. package/esm2020/utils/cdk/get-closest-widget-cdk-drag.mjs +3 -3
  360. package/esm2020/utils/file-utils.mjs +2 -2
  361. package/esm2020/utils/form/get-control-path.mjs +6 -5
  362. package/esm2020/utils/geo-json/geo-json-to-area.mjs +3 -3
  363. package/esm2020/utils/geo-json/is-only-geometry-types.validator.mjs +1 -1
  364. package/esm2020/utils/geo-json/min-max-points.validator.mjs +5 -5
  365. package/esm2020/utils/geo-json/read-geo-file.mjs +3 -2
  366. package/esm2020/utils/has-property.mjs +2 -2
  367. package/esm2020/utils/load-style-sheet.mjs +2 -2
  368. package/esm2020/utils/load-style.mjs +2 -2
  369. package/esm2020/utils/obj-utils.mjs +2 -2
  370. package/esm2020/utils/polling-ticker.mjs +2 -2
  371. package/esm2020/utils/router/operators/activated-routes-with-data-property.mjs +2 -2
  372. package/esm2020/utils/router/route-snapshot-path-full.mjs +2 -2
  373. package/esm2020/utils/router/route-snapshot-path-relative.mjs +2 -2
  374. package/esm2020/utils/router/will-have-data-prop.mjs +3 -3
  375. package/esm2020/utils/subscriber-count.mjs +2 -1
  376. package/esm2020/utils/toggle-attribute.mjs +6 -5
  377. package/esm2020/utils/wait-on-condition-async.mjs +5 -5
  378. package/esm2020/vertical-list-filter/public-api.mjs +3 -0
  379. package/esm2020/vertical-list-filter/testing/index.mjs +2 -0
  380. package/esm2020/vertical-list-filter/testing/vertical-list-filter.harness.mjs +28 -0
  381. package/esm2020/vertical-list-filter/theseam-ui-common-vertical-list-filter.mjs +5 -0
  382. package/esm2020/vertical-list-filter/vertical-list-filter.component.mjs +52 -0
  383. package/esm2020/viewers/html-template-viewer/html-template-viewer.component.mjs +37 -37
  384. package/esm2020/viewers/html-template-viewer/html-template-viewer.module.mjs +4 -4
  385. package/esm2020/viewers/pdf-viewer/pdf-page/pdf-page.component.mjs +11 -10
  386. package/esm2020/viewers/pdf-viewer/pdf-renderer.service.mjs +4 -4
  387. package/esm2020/viewers/pdf-viewer/pdf-viewer.component.mjs +39 -38
  388. package/esm2020/viewers/pdf-viewer/pdf-viewer.module.mjs +4 -4
  389. package/esm2020/widget/directives/widget-drag-handle.directive.mjs +15 -15
  390. package/esm2020/widget/directives/widget-icon-tpl.directive.mjs +3 -3
  391. package/esm2020/widget/directives/widget-title-tpl.directive.mjs +3 -3
  392. package/esm2020/widget/widget/widget.component.mjs +3 -3
  393. package/esm2020/widget/widget-content-components/widget-button-group/widget-button-group.component.mjs +5 -8
  394. package/esm2020/widget/widget-content-components/widget-button-group/widget-button-group.module.mjs +4 -4
  395. package/esm2020/widget/widget-content-components/widget-content-header/widget-content-header.component.mjs +5 -8
  396. package/esm2020/widget/widget-content-components/widget-content-header/widget-content-header.module.mjs +4 -4
  397. package/esm2020/widget/widget-content-components/widget-description/widget-description.component.mjs +3 -3
  398. package/esm2020/widget/widget-content-components/widget-description/widget-description.module.mjs +4 -4
  399. package/esm2020/widget/widget-content-components/widget-empty-label/widget-empty-label.component.mjs +9 -10
  400. package/esm2020/widget/widget-content-components/widget-empty-label/widget-empty-label.module.mjs +4 -4
  401. package/esm2020/widget/widget-content-components/widget-footer-link/widget-footer-link.component.mjs +5 -7
  402. package/esm2020/widget/widget-content-components/widget-footer-link/widget-footer-link.module.mjs +4 -4
  403. package/esm2020/widget/widget-content-components/widget-footer-text/widget-footer-text.component.mjs +5 -8
  404. package/esm2020/widget/widget-content-components/widget-footer-text/widget-footer-text.module.mjs +4 -4
  405. package/esm2020/widget/widget-content-components/widget-header-badge/widget-header-badge.component.mjs +5 -5
  406. package/esm2020/widget/widget-content-components/widget-header-badge/widget-header-badge.module.mjs +4 -4
  407. package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item-icon-tpl.directive.mjs +3 -3
  408. package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item.component.mjs +16 -19
  409. package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group.component.mjs +5 -7
  410. package/esm2020/widget/widget-content-components/widget-list-group/widget-list-group.module.mjs +4 -4
  411. package/esm2020/widget/widget-content-components/widget-table/widget-table.component.mjs +5 -5
  412. package/esm2020/widget/widget-content-components/widget-table/widget-table.module.mjs +4 -4
  413. package/esm2020/widget/widget-content-components/widget-tile/widget-tile-footer/widget-tile-footer.component.mjs +6 -9
  414. package/esm2020/widget/widget-content-components/widget-tile/widget-tile-footer-item/widget-tile-footer-item.component.mjs +9 -10
  415. package/esm2020/widget/widget-content-components/widget-tile/widget-tile-group/widget-tile-group.component.mjs +5 -8
  416. package/esm2020/widget/widget-content-components/widget-tile/widget-tile-secondary-icon.directive.mjs +5 -5
  417. package/esm2020/widget/widget-content-components/widget-tile/widget-tile.component.mjs +17 -16
  418. package/esm2020/widget/widget-content-components/widget-tile/widget-tile.module.mjs +10 -10
  419. package/esm2020/widget/widget-content-components/widget-tile-list/widget-tile-list.component.mjs +5 -8
  420. package/esm2020/widget/widget-content-components/widget-tile-list/widget-tile-list.module.mjs +4 -4
  421. package/esm2020/widget/widget-footer/widget-footer.component.mjs +5 -7
  422. package/esm2020/widget/widget-registry.service.mjs +6 -5
  423. package/esm2020/widget/widget.module.mjs +7 -7
  424. package/fesm2015/theseam-ui-common-asset-reader.mjs +21 -19
  425. package/fesm2015/theseam-ui-common-asset-reader.mjs.map +1 -1
  426. package/fesm2015/theseam-ui-common-breadcrumbs.mjs +13 -14
  427. package/fesm2015/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  428. package/fesm2015/theseam-ui-common-buttons.mjs +32 -28
  429. package/fesm2015/theseam-ui-common-buttons.mjs.map +1 -1
  430. package/fesm2015/theseam-ui-common-card.mjs +23 -31
  431. package/fesm2015/theseam-ui-common-card.mjs.map +1 -1
  432. package/fesm2015/theseam-ui-common-carousel.mjs +265 -0
  433. package/fesm2015/theseam-ui-common-carousel.mjs.map +1 -0
  434. package/fesm2015/theseam-ui-common-checkbox.mjs +47 -48
  435. package/fesm2015/theseam-ui-common-checkbox.mjs.map +1 -1
  436. package/fesm2015/theseam-ui-common-confirm-dialog.mjs +20 -20
  437. package/fesm2015/theseam-ui-common-confirm-dialog.mjs.map +1 -1
  438. package/fesm2015/theseam-ui-common-core.mjs +28 -26
  439. package/fesm2015/theseam-ui-common-core.mjs.map +1 -1
  440. package/fesm2015/theseam-ui-common-data-exporter.mjs +10 -10
  441. package/fesm2015/theseam-ui-common-data-filters.mjs +42 -39
  442. package/fesm2015/theseam-ui-common-data-filters.mjs.map +1 -1
  443. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +55 -59
  444. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  445. package/fesm2015/theseam-ui-common-datatable.mjs +229 -237
  446. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  447. package/fesm2015/theseam-ui-common-dynamic-component-loader.mjs +12 -12
  448. package/fesm2015/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
  449. package/fesm2015/theseam-ui-common-dynamic.mjs +36 -26
  450. package/fesm2015/theseam-ui-common-dynamic.mjs.map +1 -1
  451. package/fesm2015/theseam-ui-common-footer-bar.mjs +8 -11
  452. package/fesm2015/theseam-ui-common-footer-bar.mjs.map +1 -1
  453. package/fesm2015/theseam-ui-common-form-field-error.mjs +109 -111
  454. package/fesm2015/theseam-ui-common-form-field-error.mjs.map +1 -1
  455. package/fesm2015/theseam-ui-common-form-field.mjs +114 -113
  456. package/fesm2015/theseam-ui-common-form-field.mjs.map +1 -1
  457. package/fesm2015/theseam-ui-common-framework.mjs +216 -223
  458. package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
  459. package/fesm2015/theseam-ui-common-google-maps.mjs +246 -126
  460. package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
  461. package/fesm2015/theseam-ui-common-graphql.mjs +14 -38
  462. package/fesm2015/theseam-ui-common-graphql.mjs.map +1 -1
  463. package/fesm2015/theseam-ui-common-icon.mjs +104 -105
  464. package/fesm2015/theseam-ui-common-icon.mjs.map +1 -1
  465. package/fesm2015/theseam-ui-common-layout.mjs +7 -7
  466. package/fesm2015/theseam-ui-common-layout.mjs.map +1 -1
  467. package/fesm2015/theseam-ui-common-loading.mjs +11 -12
  468. package/fesm2015/theseam-ui-common-loading.mjs.map +1 -1
  469. package/fesm2015/theseam-ui-common-menu.mjs +79 -80
  470. package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
  471. package/fesm2015/theseam-ui-common-modal.mjs +112 -117
  472. package/fesm2015/theseam-ui-common-modal.mjs.map +1 -1
  473. package/fesm2015/theseam-ui-common-popover.mjs +52 -52
  474. package/fesm2015/theseam-ui-common-popover.mjs.map +1 -1
  475. package/fesm2015/theseam-ui-common-progress.mjs +8 -8
  476. package/fesm2015/theseam-ui-common-progress.mjs.map +1 -1
  477. package/fesm2015/theseam-ui-common-scrollbar.mjs +16 -17
  478. package/fesm2015/theseam-ui-common-scrollbar.mjs.map +1 -1
  479. package/fesm2015/theseam-ui-common-services.mjs +11 -13
  480. package/fesm2015/theseam-ui-common-services.mjs.map +1 -1
  481. package/fesm2015/theseam-ui-common-shared.mjs +89 -89
  482. package/fesm2015/theseam-ui-common-shared.mjs.map +1 -1
  483. package/fesm2015/theseam-ui-common-storage.mjs +10 -10
  484. package/fesm2015/theseam-ui-common-storage.mjs.map +1 -1
  485. package/fesm2015/theseam-ui-common-story-helpers.mjs +27 -102
  486. package/fesm2015/theseam-ui-common-story-helpers.mjs.map +1 -1
  487. package/fesm2015/theseam-ui-common-tabbed.mjs +36 -38
  488. package/fesm2015/theseam-ui-common-tabbed.mjs.map +1 -1
  489. package/fesm2015/theseam-ui-common-table-cell-type.mjs +12 -13
  490. package/fesm2015/theseam-ui-common-table-cell-type.mjs.map +1 -1
  491. package/fesm2015/theseam-ui-common-table-cell-types.mjs +136 -138
  492. package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
  493. package/fesm2015/theseam-ui-common-table.mjs +15 -16
  494. package/fesm2015/theseam-ui-common-table.mjs.map +1 -1
  495. package/fesm2015/theseam-ui-common-tel-input.mjs +67 -71
  496. package/fesm2015/theseam-ui-common-tel-input.mjs.map +1 -1
  497. package/fesm2015/theseam-ui-common-testing.mjs.map +1 -1
  498. package/fesm2015/theseam-ui-common-tiled-select.mjs +43 -46
  499. package/fesm2015/theseam-ui-common-tiled-select.mjs.map +1 -1
  500. package/fesm2015/theseam-ui-common-toggle-edit.mjs +32 -35
  501. package/fesm2015/theseam-ui-common-toggle-edit.mjs.map +1 -1
  502. package/fesm2015/theseam-ui-common-toggle-group.mjs +20 -20
  503. package/fesm2015/theseam-ui-common-toggle-group.mjs.map +1 -1
  504. package/fesm2015/theseam-ui-common-unsaved-changes-dialog.mjs +16 -18
  505. package/fesm2015/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
  506. package/fesm2015/theseam-ui-common-utils.mjs +36 -32
  507. package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
  508. package/fesm2015/theseam-ui-common-vertical-list-filter.mjs +96 -0
  509. package/fesm2015/theseam-ui-common-vertical-list-filter.mjs.map +1 -0
  510. package/fesm2015/theseam-ui-common-viewers.mjs +95 -93
  511. package/fesm2015/theseam-ui-common-viewers.mjs.map +1 -1
  512. package/fesm2015/theseam-ui-common-widget.mjs +182 -209
  513. package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
  514. package/fesm2020/theseam-ui-common-asset-reader.mjs +21 -19
  515. package/fesm2020/theseam-ui-common-asset-reader.mjs.map +1 -1
  516. package/fesm2020/theseam-ui-common-breadcrumbs.mjs +13 -14
  517. package/fesm2020/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  518. package/fesm2020/theseam-ui-common-buttons.mjs +32 -28
  519. package/fesm2020/theseam-ui-common-buttons.mjs.map +1 -1
  520. package/fesm2020/theseam-ui-common-card.mjs +23 -31
  521. package/fesm2020/theseam-ui-common-card.mjs.map +1 -1
  522. package/fesm2020/theseam-ui-common-carousel.mjs +265 -0
  523. package/fesm2020/theseam-ui-common-carousel.mjs.map +1 -0
  524. package/fesm2020/theseam-ui-common-checkbox.mjs +47 -48
  525. package/fesm2020/theseam-ui-common-checkbox.mjs.map +1 -1
  526. package/fesm2020/theseam-ui-common-confirm-dialog.mjs +20 -20
  527. package/fesm2020/theseam-ui-common-confirm-dialog.mjs.map +1 -1
  528. package/fesm2020/theseam-ui-common-core.mjs +28 -26
  529. package/fesm2020/theseam-ui-common-core.mjs.map +1 -1
  530. package/fesm2020/theseam-ui-common-data-exporter.mjs +10 -10
  531. package/fesm2020/theseam-ui-common-data-filters.mjs +42 -39
  532. package/fesm2020/theseam-ui-common-data-filters.mjs.map +1 -1
  533. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +55 -59
  534. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  535. package/fesm2020/theseam-ui-common-datatable.mjs +229 -237
  536. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  537. package/fesm2020/theseam-ui-common-dynamic-component-loader.mjs +12 -12
  538. package/fesm2020/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
  539. package/fesm2020/theseam-ui-common-dynamic.mjs +36 -26
  540. package/fesm2020/theseam-ui-common-dynamic.mjs.map +1 -1
  541. package/fesm2020/theseam-ui-common-footer-bar.mjs +8 -11
  542. package/fesm2020/theseam-ui-common-footer-bar.mjs.map +1 -1
  543. package/fesm2020/theseam-ui-common-form-field-error.mjs +109 -111
  544. package/fesm2020/theseam-ui-common-form-field-error.mjs.map +1 -1
  545. package/fesm2020/theseam-ui-common-form-field.mjs +114 -113
  546. package/fesm2020/theseam-ui-common-form-field.mjs.map +1 -1
  547. package/fesm2020/theseam-ui-common-framework.mjs +216 -223
  548. package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
  549. package/fesm2020/theseam-ui-common-google-maps.mjs +243 -126
  550. package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
  551. package/fesm2020/theseam-ui-common-graphql.mjs +14 -38
  552. package/fesm2020/theseam-ui-common-graphql.mjs.map +1 -1
  553. package/fesm2020/theseam-ui-common-icon.mjs +104 -105
  554. package/fesm2020/theseam-ui-common-icon.mjs.map +1 -1
  555. package/fesm2020/theseam-ui-common-layout.mjs +16 -8
  556. package/fesm2020/theseam-ui-common-layout.mjs.map +1 -1
  557. package/fesm2020/theseam-ui-common-loading.mjs +11 -12
  558. package/fesm2020/theseam-ui-common-loading.mjs.map +1 -1
  559. package/fesm2020/theseam-ui-common-menu.mjs +77 -78
  560. package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
  561. package/fesm2020/theseam-ui-common-modal.mjs +112 -117
  562. package/fesm2020/theseam-ui-common-modal.mjs.map +1 -1
  563. package/fesm2020/theseam-ui-common-models.mjs +2 -1
  564. package/fesm2020/theseam-ui-common-models.mjs.map +1 -1
  565. package/fesm2020/theseam-ui-common-popover.mjs +52 -52
  566. package/fesm2020/theseam-ui-common-popover.mjs.map +1 -1
  567. package/fesm2020/theseam-ui-common-progress.mjs +8 -8
  568. package/fesm2020/theseam-ui-common-progress.mjs.map +1 -1
  569. package/fesm2020/theseam-ui-common-scrollbar.mjs +16 -17
  570. package/fesm2020/theseam-ui-common-scrollbar.mjs.map +1 -1
  571. package/fesm2020/theseam-ui-common-services.mjs +11 -13
  572. package/fesm2020/theseam-ui-common-services.mjs.map +1 -1
  573. package/fesm2020/theseam-ui-common-shared.mjs +89 -89
  574. package/fesm2020/theseam-ui-common-shared.mjs.map +1 -1
  575. package/fesm2020/theseam-ui-common-storage.mjs +10 -10
  576. package/fesm2020/theseam-ui-common-storage.mjs.map +1 -1
  577. package/fesm2020/theseam-ui-common-story-helpers.mjs +27 -98
  578. package/fesm2020/theseam-ui-common-story-helpers.mjs.map +1 -1
  579. package/fesm2020/theseam-ui-common-tabbed.mjs +36 -38
  580. package/fesm2020/theseam-ui-common-tabbed.mjs.map +1 -1
  581. package/fesm2020/theseam-ui-common-table-cell-type.mjs +12 -13
  582. package/fesm2020/theseam-ui-common-table-cell-type.mjs.map +1 -1
  583. package/fesm2020/theseam-ui-common-table-cell-types.mjs +136 -138
  584. package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
  585. package/fesm2020/theseam-ui-common-table.mjs +15 -16
  586. package/fesm2020/theseam-ui-common-table.mjs.map +1 -1
  587. package/fesm2020/theseam-ui-common-tel-input.mjs +65 -69
  588. package/fesm2020/theseam-ui-common-tel-input.mjs.map +1 -1
  589. package/fesm2020/theseam-ui-common-testing.mjs +1 -0
  590. package/fesm2020/theseam-ui-common-testing.mjs.map +1 -1
  591. package/fesm2020/theseam-ui-common-tiled-select.mjs +43 -46
  592. package/fesm2020/theseam-ui-common-tiled-select.mjs.map +1 -1
  593. package/fesm2020/theseam-ui-common-toggle-edit.mjs +32 -35
  594. package/fesm2020/theseam-ui-common-toggle-edit.mjs.map +1 -1
  595. package/fesm2020/theseam-ui-common-toggle-group.mjs +20 -20
  596. package/fesm2020/theseam-ui-common-toggle-group.mjs.map +1 -1
  597. package/fesm2020/theseam-ui-common-unsaved-changes-dialog.mjs +16 -18
  598. package/fesm2020/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
  599. package/fesm2020/theseam-ui-common-utils.mjs +36 -32
  600. package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
  601. package/fesm2020/theseam-ui-common-vertical-list-filter.mjs +87 -0
  602. package/fesm2020/theseam-ui-common-vertical-list-filter.mjs.map +1 -0
  603. package/fesm2020/theseam-ui-common-viewers.mjs +95 -93
  604. package/fesm2020/theseam-ui-common-viewers.mjs.map +1 -1
  605. package/fesm2020/theseam-ui-common-widget.mjs +182 -209
  606. package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
  607. package/footer-bar/footer-bar/footer-bar.component.d.ts +1 -4
  608. package/form-field-error/form-field-error/form-field-error.component.d.ts +1 -4
  609. package/form-field-error/form-field-error-list/form-field-error-list.component.d.ts +2 -3
  610. package/framework/base-layout/base-layout-action.d.ts +1 -1
  611. package/framework/dashboard/dashboard-widget-container/dashboard-widget-container.component.d.ts +2 -4
  612. package/framework/dashboard/dashboard-widget-template-container/dashboard-widget-template-container.component.d.ts +2 -3
  613. package/framework/dashboard/dashboard.component.d.ts +0 -1
  614. package/framework/dynamic-router/hierarchy-router-outlet/hierarchy-router-outlet.component.d.ts +2 -3
  615. package/framework/dynamic-router/resolvers/hierarchy-level.resolver.d.ts +0 -1
  616. package/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.d.ts +1 -1
  617. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +2 -4
  618. package/framework/side-nav/side-nav.models.d.ts +1 -1
  619. package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +3 -5
  620. package/framework/top-bar/top-bar-title/top-bar-title.component.d.ts +1 -4
  621. package/framework/top-bar/top-bar.component.d.ts +2 -4
  622. package/google-maps/google-maps/google-maps.component.d.ts +3 -6
  623. package/google-maps/google-maps-api-loader/lazy-google-maps-api-loader.d.ts +73 -0
  624. package/google-maps/google-maps-api-loader/noop-google-maps-api-loader.d.ts +13 -0
  625. package/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.d.ts +2 -3
  626. package/google-maps/map-value-manager.service.d.ts +1 -1
  627. package/google-maps/public-api.d.ts +3 -0
  628. package/graphql/datatable/datatable-graphql-query-ref.d.ts +2 -3
  629. package/graphql/datatable/datatable-graphql.service.d.ts +1 -1
  630. package/graphql/datatable/datatable-helpers.d.ts +2 -2
  631. package/graphql/datatable/map-filter-states.d.ts +2 -2
  632. package/graphql/datatable/map-page-info.d.ts +1 -1
  633. package/graphql/datatable/mapper-context.d.ts +1 -1
  634. package/graphql/models/gql-datatable-accessor.d.ts +1 -1
  635. package/graphql/models/hint-transformer.d.ts +1 -1
  636. package/icon/icon/icon.component.d.ts +1 -1
  637. package/icon/icon-btn/icon-btn.component.d.ts +2 -3
  638. package/icon/icon.d.ts +1 -1
  639. package/layout/breakpoint-aliases.d.ts +1 -1
  640. package/loading/loading/loading.component.d.ts +1 -4
  641. package/loading/loading.models.d.ts +1 -1
  642. package/menu/menu-item.component.d.ts +2 -3
  643. package/modal/modal/modal.component.d.ts +3 -4
  644. package/modal/modal-body/modal-body.component.d.ts +1 -4
  645. package/modal/modal-config.d.ts +1 -1
  646. package/modal/modal-footer/modal-footer.component.d.ts +1 -4
  647. package/modal/modal-header/modal-header.component.d.ts +1 -4
  648. package/modal/route-modal/route-modal.component.d.ts +2 -3
  649. package/models/component-type.d.ts +1 -1
  650. package/models/size-prefixes.d.ts +1 -1
  651. package/models/size-types.d.ts +1 -1
  652. package/models/theme-prefixes.d.ts +1 -1
  653. package/models/theme-types.d.ts +2 -2
  654. package/package.json +17 -1
  655. package/progress/progress-circle/progress-circle.component.d.ts +0 -1
  656. package/scrollbar/overlay-scrollbar.directive.d.ts +2 -3
  657. package/scrollbar/overlay-scrollbars-config-model.d.ts +1 -1
  658. package/services/asset-loader.service.d.ts +0 -1
  659. package/services/font-loader.service.d.ts +1 -2
  660. package/story-helpers/public-api.d.ts +0 -1
  661. package/tabbed/directives/tabbed-tab-content.directive.d.ts +0 -1
  662. package/tabbed/tabbed-content/tabbed-content.component.d.ts +1 -4
  663. package/tabbed/tabbed-item/tabbed-item.component.d.ts +2 -4
  664. package/tabbed/tabbed.service.d.ts +0 -1
  665. package/table/table/table.component.d.ts +3 -4
  666. package/table-cell-type/table-cell-type-models.d.ts +4 -4
  667. package/table-cell-type/table-cell-type-name.d.ts +1 -1
  668. package/table-cell-type/table-cell-type-selector.component.d.ts +3 -4
  669. package/table-cell-types/table-cell-type-currency/table-cell-type-currency-config.d.ts +1 -1
  670. package/table-cell-types/table-cell-type-currency/table-cell-type-currency.component.d.ts +2 -3
  671. package/table-cell-types/table-cell-type-currency/table-cell-type-currency.d.ts +1 -1
  672. package/table-cell-types/table-cell-type-date/table-cell-type-date.component.d.ts +2 -3
  673. package/table-cell-types/table-cell-type-date/table-cell-type-date.d.ts +1 -1
  674. package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal-config.d.ts +1 -1
  675. package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.component.d.ts +2 -3
  676. package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.d.ts +1 -1
  677. package/table-cell-types/table-cell-type-icon/table-cell-type-icon-config.d.ts +1 -1
  678. package/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.d.ts +3 -4
  679. package/table-cell-types/table-cell-type-integer/table-cell-type-integer-config.d.ts +1 -1
  680. package/table-cell-types/table-cell-type-integer/table-cell-type-integer.component.d.ts +2 -3
  681. package/table-cell-types/table-cell-type-integer/table-cell-type-integer.d.ts +1 -1
  682. package/table-cell-types/table-cell-type-phone/table-cell-type-phone.component.d.ts +2 -3
  683. package/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle-config.d.ts +1 -1
  684. package/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle.component.d.ts +2 -3
  685. package/table-cell-types/table-cell-type-progress-circle-icon/table-cell-type-progress-circle-icon-config.d.ts +1 -1
  686. package/table-cell-types/table-cell-type-progress-circle-icon/table-cell-type-progress-circle-icon.component.d.ts +2 -3
  687. package/table-cell-types/table-cell-type-string/table-cell-type-string-config.d.ts +1 -1
  688. package/table-cell-types/table-cell-type-string/table-cell-type-string.component.d.ts +1 -1
  689. package/tel-input/utils/coerce-phone-number-format.d.ts +1 -1
  690. package/tiled-select/components/tiled-select/tiled-select.component.d.ts +3 -4
  691. package/tiled-select/components/tiled-select-tile-icon/tiled-select-tile-icon.component.d.ts +1 -4
  692. package/tiled-select/tiled-select.models.d.ts +2 -2
  693. package/toggle-edit/toggle-edit-actions-container/toggle-edit-actions-container.component.d.ts +1 -4
  694. package/toggle-group/toggle-group.directive.d.ts +0 -1
  695. package/unsaved-changes-dialog/unsaved-changes-dialog.component.d.ts +1 -4
  696. package/utils/obj-utils.d.ts +2 -2
  697. package/utils/polling-ticker.d.ts +1 -1
  698. package/utils/subscriber-count.d.ts +1 -1
  699. package/vertical-list-filter/index.d.ts +5 -0
  700. package/vertical-list-filter/public-api.d.ts +2 -0
  701. package/vertical-list-filter/testing/index.d.ts +1 -0
  702. package/vertical-list-filter/testing/vertical-list-filter.harness.d.ts +9 -0
  703. package/vertical-list-filter/vertical-list-filter.component.d.ts +17 -0
  704. package/widget/directives/widget-drag-handle.directive.d.ts +1 -1
  705. package/widget/widget-content-components/widget-button-group/widget-button-group.component.d.ts +1 -4
  706. package/widget/widget-content-components/widget-content-header/widget-content-header.component.d.ts +1 -4
  707. package/widget/widget-content-components/widget-empty-label/widget-empty-label.component.d.ts +2 -3
  708. package/widget/widget-content-components/widget-footer-link/widget-footer-link.component.d.ts +1 -4
  709. package/widget/widget-content-components/widget-footer-text/widget-footer-text.component.d.ts +1 -4
  710. package/widget/widget-content-components/widget-header-badge/widget-header-badge.component.d.ts +2 -3
  711. package/widget/widget-content-components/widget-list-group/widget-list-group-item/widget-list-group-item.component.d.ts +4 -7
  712. package/widget/widget-content-components/widget-list-group/widget-list-group.component.d.ts +1 -4
  713. package/widget/widget-content-components/widget-table/widget-table.component.d.ts +0 -1
  714. package/widget/widget-content-components/widget-tile/widget-tile-footer/widget-tile-footer.component.d.ts +1 -4
  715. package/widget/widget-content-components/widget-tile/widget-tile-footer-item/widget-tile-footer-item.component.d.ts +2 -3
  716. package/widget/widget-content-components/widget-tile/widget-tile-group/widget-tile-group.component.d.ts +1 -4
  717. package/widget/widget-content-components/widget-tile-list/widget-tile-list.component.d.ts +1 -4
  718. package/widget/widget-footer/widget-footer.component.d.ts +1 -4
  719. package/esm2020/story-helpers/args-to-tpl.mjs +0 -72
  720. package/story-helpers/args-to-tpl.d.ts +0 -24
@@ -52,6 +52,110 @@ export const _THESEAM_DATATABLE_ACCESSOR = {
52
52
  useExisting: forwardRef(() => DatatableComponent)
53
53
  };
54
54
  export class DatatableComponent {
55
+ get filters() { return this._filtersSubject.value; }
56
+ get preferencesKey() { return this._preferencesKey.value; }
57
+ set preferencesKey(value) { this._preferencesKey.next(value || undefined); }
58
+ set columns(value) {
59
+ this._columnsManager.setInputColumns(Array.isArray(value) ? value : []);
60
+ }
61
+ get rows() { return this._rows.value; }
62
+ set rows(value) {
63
+ this._rows.next(value || []);
64
+ }
65
+ get selectionType() { return this._columnsManager.getSelectionType(); }
66
+ set selectionType(value) {
67
+ this._columnsManager.setSelectionType(notNullOrUndefined(value) ? value : undefined);
68
+ }
69
+ get sortType() { return this._sortType; }
70
+ set sortType(value) {
71
+ if (notNullOrUndefined(value) && (value === SortType.single || value === SortType.multi)) {
72
+ this._sortType = value;
73
+ }
74
+ else {
75
+ this._sortType = SortType.single;
76
+ }
77
+ }
78
+ get sorts() {
79
+ return this.ngxDatatable ? this.ngxDatatable.sorts : this._sorts;
80
+ }
81
+ set sorts(value) {
82
+ this._sorts = notNullOrUndefined(value) ? coerceArray(value) : [];
83
+ }
84
+ set dataSource(value) {
85
+ if (value instanceof DatatableDataSource) {
86
+ value.setDatatableAccessor(this);
87
+ }
88
+ this._dataSourceSubject.next(value || undefined);
89
+ }
90
+ set columnComponents(value) {
91
+ this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []));
92
+ }
93
+ get rowActionItem() { return this._rowActionItem; }
94
+ set rowActionItem(value) {
95
+ this._rowActionItem = value;
96
+ this._columnsManager.setRowActionItem(notNullOrUndefined(value) ? value : undefined);
97
+ }
98
+ get menuBarComponent() { return this._menuBarComponent; }
99
+ set menuBarComponent(value) {
100
+ this._menuBarComponent = value;
101
+ if (this._menuBarSub) {
102
+ this._menuBarSub.unsubscribe();
103
+ }
104
+ if (value) {
105
+ this._setMenuBarFilters(value.filters());
106
+ this._menuBarSub = this._menuBarComponent?.filtersChanged
107
+ .subscribe(v => { this._setMenuBarFilters(value.filters()); });
108
+ }
109
+ }
110
+ get actionMenuCellTpl() { return this._actionMenuCellTpl; }
111
+ set actionMenuCellTpl(value) {
112
+ this._actionMenuCellTpl = value;
113
+ this._columnsManager.setActionMenuCellTpl(notNullOrUndefined(value) ? value : undefined);
114
+ }
115
+ get treeToggleTpl() { return this._treeToggleTpl; }
116
+ set treeToggleTpl(value) {
117
+ this._treeToggleTpl = value;
118
+ this._columnsManager.setTreeToggleTpl(notNullOrUndefined(value) ? value : undefined);
119
+ }
120
+ get headerTpl() { return this._headerTpl; }
121
+ set headerTpl(value) {
122
+ this._headerTpl = value;
123
+ this._columnsManager.setHeaderTpl(notNullOrUndefined(value) ? value : undefined);
124
+ }
125
+ get blankHeaderTpl() { return this._blankHeaderTpl; }
126
+ set blankHeaderTpl(value) {
127
+ this._blankHeaderTpl = value;
128
+ this._columnsManager.setBlankHeaderTpl(notNullOrUndefined(value) ? value : undefined);
129
+ }
130
+ get cellTypeSelectorTpl() { return this._cellTypeSelectorTpl; }
131
+ set cellTypeSelectorTpl(value) {
132
+ this._cellTypeSelectorTpl = value;
133
+ this._columnsManager.setCellTypeSelectorTpl(notNullOrUndefined(value) ? value : undefined);
134
+ }
135
+ // TODO: Remove this DOM-dependent code when a way to property listen for
136
+ // dblclick on the header reasize handles.
137
+ _dblClick(event) {
138
+ const isHandle = event.target.classList.contains('resize-handle');
139
+ if (isHandle) {
140
+ const isResizeable = event.target.parentElement?.classList.contains('resizeable');
141
+ if (isResizeable) {
142
+ event.stopPropagation();
143
+ const id = event.target.parentElement
144
+ ?.querySelector('.datatable-column-header-separator')
145
+ ?.getAttribute('data-column-id');
146
+ this._columnsManager.columns$.pipe(take(1)).subscribe(columns => {
147
+ const column = columns.find(c => c.$$id === id);
148
+ if (column) {
149
+ const columnProp = getColumnProp(column);
150
+ if (columnProp) {
151
+ const alteration = new WidthColumnsAlteration({ columnProp, canAutoResize: true }, false);
152
+ this._columnsAlterationsManager.add([alteration]);
153
+ }
154
+ }
155
+ });
156
+ }
157
+ }
158
+ }
55
159
  constructor(_preferences, _columnsManager, _columnsAlterationsManager) {
56
160
  this._preferences = _preferences;
57
161
  this._columnsManager = _columnsManager;
@@ -94,7 +198,7 @@ export class DatatableComponent {
94
198
  // Footer selected message
95
199
  selectedMessage: 'selected'
96
200
  };
97
- this.rowIdentity = ((x) => x);
201
+ this.rowIdentity = (x) => x;
98
202
  this.groupExpansionDefault = false;
99
203
  this.selectAllRowsOnPage = false;
100
204
  this.summaryRow = false;
@@ -106,12 +210,15 @@ export class DatatableComponent {
106
210
  this.footerHeight = 40;
107
211
  this.scrollbarV = true;
108
212
  this.scrollbarH = true;
213
+ // eslint-disable-next-line @angular-eslint/no-output-native
109
214
  this.scroll = new EventEmitter();
110
215
  this.activate = new EventEmitter();
216
+ // eslint-disable-next-line @angular-eslint/no-output-native
111
217
  this.select = new EventEmitter();
112
218
  this.sort = new EventEmitter();
113
219
  this.page = new EventEmitter();
114
220
  this.reorder = new EventEmitter();
221
+ // eslint-disable-next-line @angular-eslint/no-output-native
115
222
  this.resize = new EventEmitter();
116
223
  this.tableContextmenu = new EventEmitter(false);
117
224
  this.treeAction = new EventEmitter();
@@ -146,7 +253,9 @@ export class DatatableComponent {
146
253
  }
147
254
  catch (e) {
148
255
  if (isDevMode()) {
256
+ // eslint-disable-next-line no-console
149
257
  console.warn('Unable to map columns alterations states');
258
+ // eslint-disable-next-line no-console
150
259
  console.warn(e);
151
260
  }
152
261
  }
@@ -195,110 +304,6 @@ export class DatatableComponent {
195
304
  // TODO: Implement viewChange for CollectionViewer.
196
305
  this.viewChange = this.page.pipe(map(p => ({ start: 0, end: p.count })));
197
306
  }
198
- get filters() { return this._filtersSubject.value; }
199
- get preferencesKey() { return this._preferencesKey.value; }
200
- set preferencesKey(value) { this._preferencesKey.next(value || undefined); }
201
- set columns(value) {
202
- this._columnsManager.setInputColumns(Array.isArray(value) ? value : []);
203
- }
204
- get rows() { return this._rows.value; }
205
- set rows(value) {
206
- this._rows.next(value || []);
207
- }
208
- get selectionType() { return this._columnsManager.getSelectionType(); }
209
- set selectionType(value) {
210
- this._columnsManager.setSelectionType(notNullOrUndefined(value) ? value : undefined);
211
- }
212
- get sortType() { return this._sortType; }
213
- set sortType(value) {
214
- if (notNullOrUndefined(value) && (value === SortType.single || value == SortType.multi)) {
215
- this._sortType = value;
216
- }
217
- else {
218
- this._sortType = SortType.single;
219
- }
220
- }
221
- get sorts() {
222
- return this.ngxDatatable ? this.ngxDatatable.sorts : this._sorts;
223
- }
224
- set sorts(value) {
225
- this._sorts = notNullOrUndefined(value) ? coerceArray(value) : [];
226
- }
227
- set dataSource(value) {
228
- if (value instanceof DatatableDataSource) {
229
- value.setDatatableAccessor(this);
230
- }
231
- this._dataSourceSubject.next(value || undefined);
232
- }
233
- set columnComponents(value) {
234
- this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []));
235
- }
236
- get rowActionItem() { return this._rowActionItem; }
237
- set rowActionItem(value) {
238
- this._rowActionItem = value;
239
- this._columnsManager.setRowActionItem(notNullOrUndefined(value) ? value : undefined);
240
- }
241
- get menuBarComponent() { return this._menuBarComponent; }
242
- set menuBarComponent(value) {
243
- this._menuBarComponent = value;
244
- if (this._menuBarSub) {
245
- this._menuBarSub.unsubscribe();
246
- }
247
- if (value) {
248
- this._setMenuBarFilters(value.filters());
249
- this._menuBarSub = this._menuBarComponent?.filtersChanged
250
- .subscribe(v => { this._setMenuBarFilters(value.filters()); });
251
- }
252
- }
253
- get actionMenuCellTpl() { return this._actionMenuCellTpl; }
254
- set actionMenuCellTpl(value) {
255
- this._actionMenuCellTpl = value;
256
- this._columnsManager.setActionMenuCellTpl(notNullOrUndefined(value) ? value : undefined);
257
- }
258
- get treeToggleTpl() { return this._treeToggleTpl; }
259
- set treeToggleTpl(value) {
260
- this._treeToggleTpl = value;
261
- this._columnsManager.setTreeToggleTpl(notNullOrUndefined(value) ? value : undefined);
262
- }
263
- get headerTpl() { return this._headerTpl; }
264
- set headerTpl(value) {
265
- this._headerTpl = value;
266
- this._columnsManager.setHeaderTpl(notNullOrUndefined(value) ? value : undefined);
267
- }
268
- get blankHeaderTpl() { return this._blankHeaderTpl; }
269
- set blankHeaderTpl(value) {
270
- this._blankHeaderTpl = value;
271
- this._columnsManager.setBlankHeaderTpl(notNullOrUndefined(value) ? value : undefined);
272
- }
273
- get cellTypeSelectorTpl() { return this._cellTypeSelectorTpl; }
274
- set cellTypeSelectorTpl(value) {
275
- this._cellTypeSelectorTpl = value;
276
- this._columnsManager.setCellTypeSelectorTpl(notNullOrUndefined(value) ? value : undefined);
277
- }
278
- // TODO: Remove this DOM-dependent code when a way to property listen for
279
- // dblclick on the header reasize handles.
280
- _dblClick(event) {
281
- const isHandle = event.target.classList.contains('resize-handle');
282
- if (isHandle) {
283
- const isResizeable = event.target.parentElement?.classList.contains('resizeable');
284
- if (isResizeable) {
285
- event.stopPropagation();
286
- const id = event.target.parentElement
287
- ?.querySelector('.datatable-column-header-separator')
288
- ?.getAttribute('data-column-id');
289
- this._columnsManager.columns$.pipe(take(1)).subscribe(columns => {
290
- const column = columns.find(c => c.$$id === id);
291
- if (column) {
292
- const columnProp = getColumnProp(column);
293
- if (columnProp) {
294
- const alteration = new WidthColumnsAlteration({ columnProp, canAutoResize: true }, false);
295
- this._columnsAlterationsManager.add([alteration]);
296
- }
297
- }
298
- });
299
- }
300
- }
301
- }
302
307
  ngOnInit() {
303
308
  if (this.rowDetail) {
304
309
  this._rowDetailToggleSubscription = this.rowDetail._toggle.subscribe(event => {
@@ -416,8 +421,8 @@ export class DatatableComponent {
416
421
  };
417
422
  }
418
423
  }
419
- DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: DatatableComponent, deps: [{ token: i1.DatatablePreferencesService }, { token: i2.ColumnsManagerService }, { token: i3.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
420
- DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.4", type: DatatableComponent, selector: "seam-datatable", inputs: { preferencesKey: "preferencesKey", targetMarkerTemplate: "targetMarkerTemplate", columns: "columns", rows: "rows", columnMode: "columnMode", groupRowsBy: "groupRowsBy", groupedRows: "groupedRows", selected: "selected", externalPaging: "externalPaging", externalSorting: "externalSorting", externalFiltering: "externalFiltering", limit: "limit", count: "count", offset: "offset", loadingIndicator: "loadingIndicator", selectionType: "selectionType", reorderable: "reorderable", swapColumns: "swapColumns", sortType: "sortType", sorts: "sorts", cssClasses: "cssClasses", messages: "messages", rowIdentity: "rowIdentity", rowClass: "rowClass", selectCheck: "selectCheck", displayCheck: "displayCheck", groupExpansionDefault: "groupExpansionDefault", trackByProp: "trackByProp", selectAllRowsOnPage: "selectAllRowsOnPage", treeFromRelation: "treeFromRelation", treeToRelation: "treeToRelation", summaryRow: "summaryRow", summaryHeight: "summaryHeight", summaryPosition: "summaryPosition", virtualization: "virtualization", headerHeight: "headerHeight", rowHeight: "rowHeight", footerHeight: "footerHeight", scrollbarV: "scrollbarV", scrollbarH: "scrollbarH", dataSource: "dataSource" }, outputs: { scroll: "scroll", activate: "activate", select: "select", sort: "sort", page: "page", reorder: "reorder", resize: "resize", tableContextmenu: "tableContextmenu", treeAction: "treeAction", actionRefreshRequest: "actionRefreshRequest", hiddenColumnsChange: "hiddenColumnsChange" }, host: { listeners: { "dblclick": "_dblClick($event)" } }, providers: [
424
+ DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableComponent, deps: [{ token: i1.DatatablePreferencesService }, { token: i2.ColumnsManagerService }, { token: i3.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
425
+ DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableComponent, selector: "seam-datatable", inputs: { preferencesKey: "preferencesKey", targetMarkerTemplate: "targetMarkerTemplate", columns: "columns", rows: "rows", columnMode: "columnMode", groupRowsBy: "groupRowsBy", groupedRows: "groupedRows", selected: "selected", externalPaging: "externalPaging", externalSorting: "externalSorting", externalFiltering: "externalFiltering", limit: "limit", count: "count", offset: "offset", loadingIndicator: "loadingIndicator", selectionType: "selectionType", reorderable: "reorderable", swapColumns: "swapColumns", sortType: "sortType", sorts: "sorts", cssClasses: "cssClasses", messages: "messages", rowIdentity: "rowIdentity", rowClass: "rowClass", selectCheck: "selectCheck", displayCheck: "displayCheck", groupExpansionDefault: "groupExpansionDefault", trackByProp: "trackByProp", selectAllRowsOnPage: "selectAllRowsOnPage", treeFromRelation: "treeFromRelation", treeToRelation: "treeToRelation", summaryRow: "summaryRow", summaryHeight: "summaryHeight", summaryPosition: "summaryPosition", virtualization: "virtualization", headerHeight: "headerHeight", rowHeight: "rowHeight", footerHeight: "footerHeight", scrollbarV: "scrollbarV", scrollbarH: "scrollbarH", dataSource: "dataSource" }, outputs: { scroll: "scroll", activate: "activate", select: "select", sort: "sort", page: "page", reorder: "reorder", resize: "resize", tableContextmenu: "tableContextmenu", treeAction: "treeAction", actionRefreshRequest: "actionRefreshRequest", hiddenColumnsChange: "hiddenColumnsChange" }, host: { listeners: { "dblclick": "_dblClick($event)" } }, providers: [
421
426
  _THESEAM_DATATABLE,
422
427
  DatatableColumnChangesService,
423
428
  _THESEAM_DATATABLE_ACCESSOR,
@@ -492,7 +497,7 @@ __decorate([
492
497
  __decorate([
493
498
  InputBoolean()
494
499
  ], DatatableComponent.prototype, "scrollbarH", void 0);
495
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: DatatableComponent, decorators: [{
500
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableComponent, decorators: [{
496
501
  type: Component,
497
502
  args: [{ selector: 'seam-datatable', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
498
503
  trigger('slideDown', [
@@ -662,4 +667,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImpor
662
667
  type: HostListener,
663
668
  args: ['dblclick', ['$event']]
664
669
  }] } });
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVFLLFNBQVM7c0JBQTVFLFlBQVk7dUJBQUMsa0NBQWtDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNELE1BQU07c0JBQXRFLFlBQVk7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUczRCxnQkFBZ0I7c0JBRG5CLFlBQVk7dUJBQUMseUJBQXlCO2dCQWlCTCxZQUFZO3NCQUE3QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDd0IsbUJBQW1CO3NCQUExRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDZCxZQUFZO3NCQUFuRCxTQUFTO3VCQUFDLDJCQUEyQjtnQkFHbEMsaUJBQWlCO3NCQURwQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTNUMsYUFBYTtzQkFEaEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN4QyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTcEMsY0FBYztzQkFEakIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3pDLG1CQUFtQjtzQkFEdEIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0JsRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VBcnJheSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBEYXRhU291cmNlLCBpc0RhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucydcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBpc0Rldk1vZGUsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IGZhQ2hldnJvbkRvd24sIGZhQ2hldnJvblJpZ2h0LCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQge1xuICBDb2x1bW5Nb2RlLFxuICBDb250ZXh0bWVudVR5cGUsXG4gIERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlLFxuICBEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmUsXG4gIERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZSxcbiAgRGF0YXRhYmxlQ29tcG9uZW50IGFzIE5neERhdGF0YWJsZUNvbXBvbmVudCxcbiAgRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLFxuICBTb3J0VHlwZSxcbiAgVHJlZVN0YXR1c1xufSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvblR5cGUgfSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiwgSW5wdXROdW1iZXIgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB7IGNvbXBvc2VEYXRhRmlsdGVycywgY29tcG9zZURhdGFGaWx0ZXJTdGF0ZXMsIERhdGFGaWx0ZXIsIERhdGFGaWx0ZXJTdGF0ZSB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9kYXRhLWZpbHRlcnMnXG5pbXBvcnQgeyBJRWxlbWVudFJlc2l6ZWRFdmVudCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9zaGFyZWQnXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQsIHdhaXRPbkNvbmRpdGlvbkFzeW5jIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWFjdGlvbi1tZW51L2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtY29sdW1uL2RhdGF0YWJsZS1jb2x1bW4uY29tcG9uZW50J1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGF0YWJsZS1mb290ZXIvZGF0YXRhYmxlLWZvb3Rlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLW1lbnUtYmFyL2RhdGF0YWJsZS1tZW51LWJhci5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy1kZXRhaWwvZGF0YXRhYmxlLXJvdy1kZXRhaWwuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0YXRhYmxlLXJvdy1hY3Rpb24taXRlbS5kaXJlY3RpdmUnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgRGF0YXRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtZGF0YS1zb3VyY2UnXG5pbXBvcnQgeyBUaGVTZWFtUGFnZUluZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1pbmZvJ1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtZXZlbnQnXG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gJy4uL21vZGVscy9zb3J0LWl0ZW0nXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcbmltcG9ydCB7IENvbHVtbnNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtY29sdW1uLWNoYW5nZXMuc2VydmljZSdcbmltcG9ydCB7IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IgfSBmcm9tICcuLi90b2tlbnMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgcmVtb3ZlVW51c2VkRGlmZnMgfSBmcm9tICcuLi91dGlscy9yZW1vdmUtdW51c2VkLWRpZmZzJ1xuaW1wb3J0IHsgdHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNsYXRlLXRlbXBsYXRlcydcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1hbHRlcmF0aW9ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMgfSBmcm9tICcuLi91dGlscy9tYXAtY29sdW1ucy1hbHRlcmF0aW9ucy1zdGF0ZXMnXG5pbXBvcnQgeyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvd2lkdGguY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgZ2V0Q29sdW1uUHJvcCB9IGZyb20gJy4uL3V0aWxzL2dldC1jb2x1bW4tcHJvcCdcbmltcG9ydCB7IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24sIE9yZGVyQ29sdW1uc0FsdGVyYXRpb25TdGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL29yZGVyLmNvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IFNvcnRDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL3NvcnQuY29sdW1ucy1hbHRlcmF0aW9uJ1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoaXMgbW9kZWxcbiAqIGJlY2F1c2UgYG5neC1kYXRhdGFibGVgIGp1c3QgdXNlcyBhbiB1bnR5cGVkIG9iamVjdCBhbmQgc2V0cyBwcm9wZXJ0aWVzIGluXG4gKiBtdWx0aXBsZSBwbGFjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNlbGxDb250ZXh0IHtcbiAgYWxsUm93c1NlbGVjdGVkOiBmYWxzZVxuXG4gIHNlbGVjdEZuOiAoKSA9PiBhbnlcbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnXG4gIHNvcnRGbjogKCkgPT4gYW55XG5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG5cbiAgb25DaGVja2JveENoYW5nZUZuPzogYW55XG4gIGFjdGl2YXRlRm4/OiBhbnlcbiAgcm93PzogYW55XG4gIGdyb3VwPzogYW55XG4gIHZhbHVlPzogYW55XG4gIGNvbHVtbj86IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5cbiAgcm93SGVpZ2h0PzogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gIHJvd0luZGV4PzogbnVtYmVyXG4gIHRyZWVTdGF0dXM/OiBUcmVlU3RhdHVzXG4gIG9uVHJlZUFjdGlvbj86IGFueVxufVxuXG4vKipcbiAqIEludGVuZGVkIGZvciBpbnRlcm5hbCBjbGFzc2VzIGRlY2xhcmVkIGJ5IHRoZSBgVGhlU2VhbURhdGF0YWJsZU1vZHVsZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVTRUFNX0RBVEFUQUJMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRhRmlsdGVyPignTGliRGF0YXRhYmxlJylcblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRTogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZURvd24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSkpLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSkpLFxuICAgICAgXSlcbiAgICBdKVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEUsXG4gICAgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsXG4gICAgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAgIENvbHVtbnNNYW5hZ2VyU2VydmljZSxcbiAgICBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgVGhlU2VhbURhdGF0YWJsZUFjY2Vzc29yLCBDb2xsZWN0aW9uVmlld2VyIHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsUGFnaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsU29ydGluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbEZpbHRlcmluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nSW5kaWNhdG9yOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jlb3JkZXJhYmxlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N3YXBDb2x1bW5zOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2dyb3VwRXhwYW5zaW9uRGVmYXVsdDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RBbGxSb3dzT25QYWdlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlSb3c6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbGl6YXRpb246IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFyVjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJIOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xpbWl0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY291bnQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vZmZzZXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oZWFkZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yb3dIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9mb290ZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29sdW1uczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc29ydHM6IFNvcnRJdGVtW10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvbkRvd24gPSBmYUNoZXZyb25Eb3duXG4gIHJlYWRvbmx5IF9mYUNoZXZyb25SaWdodCA9IGZhQ2hldnJvblJpZ2h0XG4gIHJlYWRvbmx5IF9mYVNwaW5uZXIgPSBmYVNwaW5uZXJcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKVxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YUZpbHRlcltdPihbXSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YVNvdXJjZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgcHJpdmF0ZSBfcmVzaXppbmc6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlclN0YXRlczogT2JzZXJ2YWJsZTxEYXRhRmlsdGVyU3RhdGVbXT5cblxuICBnZXQgZmlsdGVycygpOiBEYXRhRmlsdGVyW10geyByZXR1cm4gdGhpcy5fZmlsdGVyc1N1YmplY3QudmFsdWUgfVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxEYXRhRmlsdGVyW10+XG5cbiAgQElucHV0KClcbiAgZ2V0IHByZWZlcmVuY2VzS2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNLZXkudmFsdWUgfVxuICBzZXQgcHJlZmVyZW5jZXNLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHsgdGhpcy5fcHJlZmVyZW5jZXNLZXkubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpIH1cbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNLZXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZClcblxuICBASW5wdXQoKSB0YXJnZXRNYXJrZXJUZW1wbGF0ZTogYW55XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbnModmFsdWU6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldElucHV0Q29sdW1ucyhBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10pXG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcm93cygpOiBhbnlbXSB7IHJldHVybiB0aGlzLl9yb3dzLnZhbHVlIH1cbiAgc2V0IHJvd3ModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fcm93cy5uZXh0KHZhbHVlIHx8IFtdKVxuICB9XG4gIHByaXZhdGUgX3Jvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcblxuICBwdWJsaWMgcm93cyQ6IE9ic2VydmFibGU8YW55W10+XG5cbiAgQElucHV0KCkgY29sdW1uTW9kZTogQ29sdW1uTW9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPSBDb2x1bW5Nb2RlLmZvcmNlXG5cbiAgQElucHV0KCkgZ3JvdXBSb3dzQnk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZ3JvdXBlZFJvd3M6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBbXVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFBhZ2luZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFNvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIGNvdW50OiBudW1iZXIgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQ6IG51bWJlciA9IDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZ0luZGljYXRvcjogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGlvblR5cGUoKTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fY29sdW1uc01hbmFnZXIuZ2V0U2VsZWN0aW9uVHlwZSgpIH1cbiAgc2V0IHNlbGVjdGlvblR5cGUodmFsdWU6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0U2VsZWN0aW9uVHlwZShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVvcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzd2FwQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRUeXBlKCk6IFNvcnRUeXBlIHsgcmV0dXJuIHRoaXMuX3NvcnRUeXBlIH1cbiAgc2V0IHNvcnRUeXBlKHZhbHVlOiBTb3J0VHlwZSkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmICh2YWx1ZSA9PT0gU29ydFR5cGUuc2luZ2xlIHx8IHZhbHVlID09IFNvcnRUeXBlLm11bHRpKSkge1xuICAgICAgdGhpcy5fc29ydFR5cGUgPSB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IFNvcnRUeXBlLnNpbmdsZVxuICAgIH1cbiAgfVxuICBfc29ydFR5cGU6IFNvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRzKCk6IFNvcnRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZSA/IHRoaXMubmd4RGF0YXRhYmxlLnNvcnRzIDogdGhpcy5fc29ydHNcbiAgfVxuICBzZXQgc29ydHModmFsdWU6IFNvcnRJdGVtW10pIHtcbiAgICB0aGlzLl9zb3J0cyA9IG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyBjb2VyY2VBcnJheSh2YWx1ZSkgOiBbXVxuICB9XG4gIF9zb3J0czogU29ydEl0ZW1bXSA9IFtdXG5cbiAgQElucHV0KCkgY3NzQ2xhc3NlczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCA9IHtcbiAgICBzb3J0QXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tdXAnLFxuICAgIHNvcnREZXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tZG93bicsXG4gICAgcGFnZXJMZWZ0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1sZWZ0JyxcbiAgICBwYWdlclJpZ2h0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1yaWdodCcsXG4gICAgcGFnZXJQcmV2aW91czogJ2RhdGF0YWJsZS1pY29uLXByZXYnLFxuICAgIHBhZ2VyTmV4dDogJ2RhdGF0YWJsZS1pY29uLXNraXAnXG4gIH1cblxuICBASW5wdXQoKSBtZXNzYWdlczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCA9IHtcbiAgICAvLyBNZXNzYWdlIHRvIHNob3cgd2hlbiBhcnJheSBpcyBwcmVzZW50ZWRcbiAgICAvLyBidXQgY29udGFpbnMgbm8gdmFsdWVzXG4gICAgZW1wdHlNZXNzYWdlOiAnTm8gcmVjb3JkcyBmb3VuZCcsXG5cbiAgICAvLyBGb290ZXIgdG90YWwgbWVzc2FnZVxuICAgIHRvdGFsTWVzc2FnZTogJ3RvdGFsJyxcblxuICAgIC8vIEZvb3RlciBzZWxlY3RlZCBtZXNzYWdlXG4gICAgc2VsZWN0ZWRNZXNzYWdlOiAnc2VsZWN0ZWQnXG4gIH1cblxuICBASW5wdXQoKSByb3dJZGVudGl0eTogKCh4OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgfCBudWxsID0gKCh4OiBhbnkpID0+IHgpXG5cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RDaGVjazogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6ICgocm93OiBhbnksIGNvbHVtbj86IGFueSwgdmFsdWU/OiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBncm91cEV4cGFuc2lvbkRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNlbGVjdEFsbFJvd3NPblBhZ2U6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN1bW1hcnlSb3c6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBzdW1tYXJ5SGVpZ2h0OiBudW1iZXIgPSAzMFxuICBASW5wdXQoKSBzdW1tYXJ5UG9zaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgPSAndG9wJ1xuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB2aXJ0dWFsaXphdGlvbjogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBoZWFkZXJIZWlnaHQ6IG51bWJlciA9IDUwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHJvd0hlaWdodDogbnVtYmVyID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZm9vdGVySGVpZ2h0OiBudW1iZXIgPSA0MFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJWOiBib29sZWFuID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFySDogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YXRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdmFsdWUuc2V0RGF0YXRhYmxlQWNjZXNzb3IodGhpcylcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpXG4gIH1cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0RXZlbnQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZVNlYW1QYWdlSW5mbz4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFibGVDb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogTW91c2VFdmVudCwgdHlwZTogQ29udGV4dG1lbnVUeXBlLCBjb250ZW50OiBhbnkgfT4oZmFsc2UpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aW9uUmVmcmVzaFJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGhpZGRlbkNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG5cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhdGFibGVDb2x1bW5Db21wb25lbnQpXG4gIHNldCBjb2x1bW5Db21wb25lbnRzKHZhbHVlOiBRdWVyeUxpc3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRlbXBsYXRlQ29sdW1ucyh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnModmFsdWU/LnRvQXJyYXkoKSA/PyBbXSkpXG4gIH1cblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGFjdGlvbk1lbnU/OiBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50XG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IHJvd0FjdGlvbkl0ZW0oKTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yb3dBY3Rpb25JdGVtIH1cbiAgc2V0IHJvd0FjdGlvbkl0ZW0odmFsdWU6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRSb3dBY3Rpb25JdGVtKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG5cbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dEZXRhaWw/OiBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyPzogVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudClcbiAgZ2V0IG1lbnVCYXJDb21wb25lbnQoKTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9tZW51QmFyQ29tcG9uZW50IH1cbiAgc2V0IG1lbnVCYXJDb21wb25lbnQodmFsdWU6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51QmFyQ29tcG9uZW50ID0gdmFsdWVcblxuICAgIGlmICh0aGlzLl9tZW51QmFyU3ViKSB7IHRoaXMuX21lbnVCYXJTdWIudW5zdWJzY3JpYmUoKSB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSlcblxuICAgICAgdGhpcy5fbWVudUJhclN1YiA9IHRoaXMuX21lbnVCYXJDb21wb25lbnQ/LmZpbHRlcnNDaGFuZ2VkXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7IHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSkgfSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudUJhckNvbXBvbmVudDogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9tZW51QmFyU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCkgbmd4RGF0YXRhYmxlPzogTmd4RGF0YXRhYmxlQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmd4RGF0YXRhYmxlRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUpIG5neFJvd0RldGFpbD86IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDZWxsVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGFjdGlvbk1lbnVDZWxsVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgfVxuICBzZXQgYWN0aW9uTWVudUNlbGxUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QWN0aW9uTWVudUNlbGxUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgndHJlZVRvZ2dsZVRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCB0cmVlVG9nZ2xlVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl90cmVlVG9nZ2xlVHBsIH1cbiAgc2V0IHRyZWVUb2dnbGVUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RyZWVUb2dnbGVUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRyZWVUb2dnbGVUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBoZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9oZWFkZXJUcGwgfVxuICBzZXQgaGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2JsYW5rSGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGJsYW5rSGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYmxhbmtIZWFkZXJUcGwgfVxuICBzZXQgYmxhbmtIZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ibGFua0hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QmxhbmtIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnY2VsbFR5cGVTZWxlY3RvclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBjZWxsVHlwZVNlbGVjdG9yVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCB9XG4gIHNldCBjZWxsVHlwZVNlbGVjdG9yVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Q2VsbFR5cGVTZWxlY3RvclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIHB1YmxpYyBjb2x1bW5Db21wb25lbnRzJD86IE9ic2VydmFibGU8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+XG4gIHByaXZhdGUgX2NvbERpZmZlcnNJbnA6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG4gIHByaXZhdGUgX2NvbERpZmZlcnNUcGw6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cbiAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlDb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgdmlld0NoYW5nZTogT2JzZXJ2YWJsZTxMaXN0UmFuZ2U+XG5cbiAgcHJpdmF0ZSBfcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZXG5cbiAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgRE9NLWRlcGVuZGVudCBjb2RlIHdoZW4gYSB3YXkgdG8gcHJvcGVydHkgbGlzdGVuIGZvclxuICAvLyBkYmxjbGljayBvbiB0aGUgaGVhZGVyIHJlYXNpemUgaGFuZGxlcy5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbICckZXZlbnQnIF0pXG4gIF9kYmxDbGljayhldmVudDogYW55KSB7XG4gICAgY29uc3QgaXNIYW5kbGUgPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJylcbiAgICBpZiAoaXNIYW5kbGUpIHtcbiAgICAgIGNvbnN0IGlzUmVzaXplYWJsZSA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZWFibGUnKVxuICAgICAgaWYgKGlzUmVzaXplYWJsZSkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBjb25zdCBpZCA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcuZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yJylcbiAgICAgICAgICA/LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4taWQnKVxuICAgICAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICkuc3Vic2NyaWJlKGNvbHVtbnMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuJCRpZCA9PT0gaWQpXG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoY29sdW1uKVxuICAgICAgICAgICAgaWYgKGNvbHVtblByb3ApICB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7IGNvbHVtblByb3AsIGNhbkF1dG9SZXNpemU6IHRydWUgfSwgZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmZXJlbmNlczogRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNNYW5hZ2VyOiBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlcjogQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGtleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGtleSkgfHwga2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbSh3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5sb2FkZWQpKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0QWx0ZXJhdGlvbnMoa2V5LCB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFwcGx5KGNvbHMsIHRoaXMpXG4gICAgICAgIHJldHVybiBjb2xzXG4gICAgICB9KSxcbiAgICApXG5cbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChwcmVmc0tleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByZWZzS2V5KSkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKHByZWZzS2V5KS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyAocHJlZmVyZW5jZXMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmxvYWRlZClcbiAgICAgICAgICAgIHJldHVybiBwcmVmZXJlbmNlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKHByZWZlcmVuY2VzID0+IHtcbiAgICAgICAgICAgIGxldCBhbHRlcmF0aW9uczogQ29sdW1uc0FsdGVyYXRpb25bXSA9IFtdXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhbHRlcmF0aW9ucyA9IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyhwcmVmZXJlbmNlcy5hbHRlcmF0aW9ucylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbWFwIGNvbHVtbnMgYWx0ZXJhdGlvbnMgc3RhdGVzJylcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChhbHRlcmF0aW9ucylcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJFxuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmNvbHVtbnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29scyA9PiBhcHBseVByZWZzKGNvbHMpKSxcbiAgICAgIG1hcChjb2xzID0+IGNvbHMuZmlsdGVyKGMgPT4gIWMuaGlkZGVuKSksXG4gICAgICB0YXAodiA9PiByZW1vdmVVbnVzZWREaWZmcyh2LCB0aGlzLl9jb2xEaWZmZXJzSW5wLCB0aGlzLl9jb2xEaWZmZXJzVHBsKSksXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJzJCA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICB0aGlzLmZpbHRlclN0YXRlcyA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICB0aGlzLnJvd3MkID0gdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcChkYXRhU291cmNlID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2RhdGFTb3VyY2UnLCBkYXRhU291cmNlKVxuICAgICAgICBsZXQgZGF0YVN0cmVhbTogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35kYXRhc291cmNlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+b2JzZXJ2YWJsZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+YXJyYXknKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBvZihkYXRhU291cmNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+cm93cyBmYWxsYmFjaycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuX3Jvd3MuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIC5waXBlKHRhcCh2ID0+IGNvbnNvbGUubG9nKCdyb3dzficsIHYpKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5leHRlcm5hbEZpbHRlcmluZykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdub3QgdXNpbmcgZXh0ZXJuYWxGaWx0ZXJpbmcnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocm93cyA9PiB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gb2Yocm93cykucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICApKVxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIGRhdGFTdHJlYW0gPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gICBjb25jYXRNYXAoZmlsdGVycyA9PiBkYXRhU3RyZWFtLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdzdHJlYW0nLCB2KSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHZpZXdDaGFuZ2UgZm9yIENvbGxlY3Rpb25WaWV3ZXIuXG4gICAgdGhpcy52aWV3Q2hhbmdlID0gdGhpcy5wYWdlLnBpcGUobWFwKHAgPT4gKHsgc3RhcnQ6IDAsIGVuZDogcC5jb3VudCB9KSkpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5yb3dEZXRhaWwpIHtcbiAgICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IHRoaXMucm93RGV0YWlsLl90b2dnbGUuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMubmd4Um93RGV0YWlsKSB7XG4gICAgICAgICAgdGhpcy5uZ3hSb3dEZXRhaWwudG9nZ2xlLmVtaXQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1lbnVCYXJGaWx0ZXJzKGZpbHRlcnM6IERhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlcnNTdWJqZWN0Lm5leHQoZmlsdGVycyB8fCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Db21wb25lbnQocHJvcE5hbWU6IHN0cmluZyk6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb2x1bW5Db21wb25lbnRzIHx8IHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdHBsID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLmZpbmQodCA9PiB0LnByb3AgPT09IHByb3BOYW1lKVxuICAgIGlmICh0cGwpIHtcbiAgICAgIHJldHVybiB0cGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgX2NvbHVtbkRhdGEoY29sOiBhbnkpOiB7IGNvbDogYW55LCBjb21wOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldENvbHVtbkNvbXBvbmVudChjb2wucHJvcClcbiAgICByZXR1cm4geyBjb2wsIGNvbXAgfVxuICB9XG5cbiAgX2dldFJvd0V4cGFuZGVkKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50LmdldFJvd0V4cGFuZGVkKHJvdylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUZuQ29sdW1uKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLnByb3BcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGF0YWJsZVJlc2l6ZShldmVudDogSUVsZW1lbnRSZXNpemVkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50ICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBpbnRlZ3JhdGluZyB0aGlzIGludG8gdGhlIG5neC1kYXRhdGFibGUgbGlicmFyeSB0byBhdm9pZFxuICAgICAgLy8gbXVsdGlwbGUgcmVzaXplIGNhbGxzIHdoZW4gdGhlIHRhYmxlIHJlc2l6ZXMgaXRzZWxmLlxuICAgICAgdGhpcy5uZ3hEYXRhdGFibGUucmVjYWxjdWxhdGUoKVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNpemUuZW1pdChldmVudClcblxuICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGV2ZW50LmNvbHVtbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgbGV0IGFkZEFsdGVyYXRpb24gPSBmYWxzZVxuXG4gICAgICBpZiAoIXRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gdHJ1ZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuaXNEb25lKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gZmFsc2VcbiAgICAgICAgYWRkQWx0ZXJhdGlvbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZEFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uKHtcbiAgICAgICAgICBjb2x1bW5Qcm9wLFxuICAgICAgICAgIHdpZHRoOiBldmVudC5jb2x1bW4ud2lkdGgsXG4gICAgICAgICAgY2FuQXV0b1Jlc2l6ZTogZmFsc2VcbiAgICAgICAgfSwgdHJ1ZSlcbiAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBfb25SZW9yZGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudClcblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyQWx0ZXJhdGlvbiA9IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkuZmluZCh4ID0+IHgudHlwZSA9PT0gJ29yZGVyJylcbiAgICAgIGNvbnN0IHN0YXRlOiBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgPSB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAuLi4oY3VycmVudE9yZGVyQWx0ZXJhdGlvbj8uc3RhdGUuY29sdW1ucyB8fCBbXSksXG4gICAgICAgICAgeyBjb2x1bW5Qcm9wLCBpbmRleDogZXZlbnQubmV3VmFsdWUgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24oc3RhdGUsIHRydWUpXG4gICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICB9XG4gIH1cblxuICBfb25Tb3J0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuZW1pdChldmVudClcblxuICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgU29ydENvbHVtbnNBbHRlcmF0aW9uKHsgc29ydHM6IGV2ZW50LnNvcnRzIH0sIHRydWUpXG4gICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gIH1cblxuICBfb25UcmVlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IGV2ZW50LnJvd0luZGV4XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93XG4gICAgaWYgKHJvdy50cmVlU3RhdHVzID09PSAnY29sbGFwc2VkJykge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnZXhwYW5kZWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCdcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gWyAuLi50aGlzLnJvd3MgXVxuICB9XG5cbiAgcHVibGljIHRyaWdnZXJBY3Rpb25SZWZyZXNoUmVxdWVzdCgpIHtcbiAgICB0aGlzLmFjdGlvblJlZnJlc2hSZXF1ZXN0LmVtaXQodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhZ2UgaW5mbyBmcm9tIHRoZSB3cmFwcGVkIE5neERhdGF0YWJsZSBpbnN0YW5jZSBvciBkZWZhdWx0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRhdGFibGUtd3JhcHBlclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJzZWFtLWRhdGF0YWJsZS1tZW51LWJhclwiPjwvbmctY29udGVudD5cbiAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS10YWJsZS13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxuZ3gtZGF0YXRhYmxlXG4gICAgICAgIFtjb2x1bW5Nb2RlXT1cIiRhbnkoY29sdW1uTW9kZSlcIlxuICAgICAgICBbc2Nyb2xsYmFyVl09XCJzY3JvbGxiYXJWXCJcbiAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJ2aXJ0dWFsaXphdGlvblwiXG4gICAgICAgIFt0YXJnZXRNYXJrZXJUZW1wbGF0ZV09XCJ0YXJnZXRNYXJrZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtncm91cFJvd3NCeV09XCIkYW55KGdyb3VwUm93c0J5KVwiXG4gICAgICAgIFtncm91cGVkUm93c109XCIkYW55KGdyb3VwZWRSb3dzKVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCIkYW55KHNlbGVjdGVkKVwiXG4gICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJleHRlcm5hbFBhZ2luZ1wiXG4gICAgICAgIFtleHRlcm5hbFNvcnRpbmddPVwiZXh0ZXJuYWxTb3J0aW5nXCJcbiAgICAgICAgW2xpbWl0XT1cIiRhbnkobGltaXQpXCJcbiAgICAgICAgW2NvdW50XT1cIiRhbnkoY291bnQpXCJcbiAgICAgICAgW29mZnNldF09XCIkYW55KG9mZnNldClcIlxuICAgICAgICBbbG9hZGluZ0luZGljYXRvcl09XCJsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiJGFueShzZWxlY3Rpb25UeXBlKVwiXG4gICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIFtzd2FwQ29sdW1uc109XCJzd2FwQ29sdW1uc1wiXG4gICAgICAgIFtzb3J0VHlwZV09XCIkYW55KHNvcnRUeXBlKVwiXG4gICAgICAgIFtzb3J0c109XCIkYW55KF9zb3J0cylcIlxuICAgICAgICBbY3NzQ2xhc3Nlc109XCJjc3NDbGFzc2VzXCJcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgW3Jvd0lkZW50aXR5XT1cIiRhbnkocm93SWRlbnRpdHkpXCJcbiAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCJcbiAgICAgICAgW2Rpc3BsYXlDaGVja109XCIkYW55KGRpc3BsYXlDaGVjaylcIlxuICAgICAgICBbZ3JvdXBFeHBhbnNpb25EZWZhdWx0XT1cImdyb3VwRXhwYW5zaW9uRGVmYXVsdFwiXG4gICAgICAgIFt0cmFja0J5UHJvcF09XCIkYW55KHRyYWNrQnlQcm9wKVwiXG4gICAgICAgIFtzZWxlY3RBbGxSb3dzT25QYWdlXT1cInNlbGVjdEFsbFJvd3NPblBhZ2VcIlxuICAgICAgICBbdHJlZUZyb21SZWxhdGlvbl09XCIkYW55KHRyZWVGcm9tUmVsYXRpb24pXCJcbiAgICAgICAgW3RyZWVUb1JlbGF0aW9uXT1cIiRhbnkodHJlZVRvUmVsYXRpb24pXCJcbiAgICAgICAgW3N1bW1hcnlSb3ddPVwic3VtbWFyeVJvd1wiXG4gICAgICAgIFtzdW1tYXJ5SGVpZ2h0XT1cIiRhbnkoc3VtbWFyeUhlaWdodClcIlxuICAgICAgICBbc3VtbWFyeVBvc2l0aW9uXT1cIiRhbnkoc3VtbWFyeVBvc2l0aW9uKVwiXG4gICAgICAgIFtyb3dzXT1cInJvd3MkIHwgYXN5bmNcIlxuICAgICAgICBbY29sdW1uc109XCIkYW55KGRpc3BsYXlDb2x1bW5zJCB8IGFzeW5jKVwiXG4gICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiJGFueShoZWFkZXJIZWlnaHQpXCJcbiAgICAgICAgW3Jvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbZm9vdGVySGVpZ2h0XT1cIiRhbnkoZm9vdGVySGVpZ2h0KVwiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmF0ZSk9XCJhY3RpdmF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc29ydCk9XCJfb25Tb3J0KCRldmVudClcIlxuICAgICAgICAocGFnZSk9XCJwYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZW9yZGVyKT1cIl9vblJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNpemUpPVwiX29uUmVzaXplKCRldmVudClcIlxuICAgICAgICAodGFibGVDb250ZXh0bWVudSk9XCJ0YWJsZUNvbnRleHRtZW51LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cInRyZWVBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlYW1FbGVtUmVzaXplZCk9XCJvbkRhdGF0YWJsZVJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwiX29uVHJlZUFjdGlvbigkZXZlbnQpXCI+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyIFtyb3dIZWlnaHRdPVwiNTBcIiAjbXlHcm91cEhlYWRlciAqbmdJZj1cImdyb3VwUm93c0J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ncm91cD1cImdyb3VwXCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIiBuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBiZy1saWdodCBwLTFcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJvdHRvbV09XCIhZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWljb24tcmlnaHRdPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLWRvd25dPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkV4cGFuZC9Db2xsYXBzZSBHcm91cFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZ3hEYXRhdGFibGU/Lmdyb3VwSGVhZGVyPy50b2dnbGVFeHBhbmRHcm91cChncm91cClcIj5cbiAgICAgICAgICAgICAgPGI+QWdlOiB7eyBncm91cC5hZ2UgfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWwgKm5nSWY9XCJyb3dEZXRhaWwgJiYgcm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgICBbcm93SGVpZ2h0XT1cInJvd0RldGFpbC5yb3dIZWlnaHQgfHwgMFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkocm93RGV0YWlsLnRlbXBsYXRlKVwiXG4gICAgICAgICAgKHRvZ2dsZSk9XCJyb3dEZXRhaWwudG9nZ2xlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtcm93LWRldGFpbD5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1mb290ZXIgKm5nSWY9XCJmb290ZXIgJiYgZm9vdGVyLnRlbXBsYXRlXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiJGFueShmb290ZXIudGVtcGxhdGUpXCI+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtIZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1zb3J0Rm49XCJzb3J0Rm5cIj5cbiAgPHN0cm9uZyAqbmdJZj1cIiFjb2x1bW4uc29ydGFibGVcIiBjbGFzcz1cImRyYWdnYWJsZVwiPnt7Y29sdW1uLm5hbWV9fTwvc3Ryb25nPlxuICA8c3Ryb25nICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCIgY2xhc3M9XCJkYXRhdGFibGUtc29ydC10YXJnZXQgZHJhZ2dhYmxlXCIgKGNsaWNrKT1cInNvcnRGbigpXCI+e3tjb2x1bW4ubmFtZX19PC9zdHJvbmc+XG4gIDxkaXYgY2xhc3M9XCJkYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3JcIiBbYXR0ci5kYXRhLWNvbHVtbi1pZF09XCJjb2x1bW4uJCRpZFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjZWxsVHlwZVNlbGVjdG9yVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yICpuZ0lmPVwicm93XCJcbiAgICBbdHlwZV09XCJjb2x1bW4uY2VsbFR5cGVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93XT1cInJvd1wiXG4gICAgW2NvbERhdGFdPVwiY29sdW1uXCI+XG4gIDwvc2VhbS10YWJsZS1jZWxsLXR5cGUtc2VsZWN0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbk1lbnVDZWxsVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cgJiYgcm93QWN0aW9uSXRlbT8udGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkocm93QWN0aW9uSXRlbT8udGVtcGxhdGUpXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmVlVG9nZ2xlVHBsIG5neC1kYXRhdGFibGUtdHJlZS10b2dnbGUgbGV0LXRyZWU9XCJjZWxsQ29udGV4dFwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJwLTAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYnRuXCJcbiAgICBbZGlzYWJsZWRdPVwidHJlZS50cmVlU3RhdHVzPT09J2Rpc2FibGVkJ1wiXG4gICAgKGNsaWNrKT1cInRyZWUub25UcmVlQWN0aW9uKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdsb2FkaW5nJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhU3Bpbm5lclwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nY29sbGFwc2VkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvblJpZ2h0XCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdleHBhbmRlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25Eb3duXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
670
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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QUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFeEQsYUFBYTtzQkFEaEIsWUFBWTt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUUssU0FBUztzQkFBNUUsWUFBWTt1QkFBQyxrQ0FBa0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsTUFBTTtzQkFBdEUsWUFBWTt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzNELGdCQUFnQjtzQkFEbkIsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBaUJMLFlBQVk7c0JBQTdDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUN3QixtQkFBbUI7c0JBQTFFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNkLFlBQVk7c0JBQW5ELFNBQVM7dUJBQUMsMkJBQTJCO2dCQUdsQyxpQkFBaUI7c0JBRHBCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVM1QyxhQUFhO3NCQURoQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3hDLFNBQVM7c0JBRFosU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVNwQyxjQUFjO3NCQURqQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTekMsbUJBQW1CO3NCQUR0QixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFzQmxELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UsIGlzRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDaGV2cm9uRG93biwgZmFDaGV2cm9uUmlnaHQsIGZhU3Bpbm5lciB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7XG4gIENvbHVtbk1vZGUsXG4gIENvbnRleHRtZW51VHlwZSxcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBEYXRhdGFibGVDb21wb25lbnQgYXMgTmd4RGF0YXRhYmxlQ29tcG9uZW50LFxuICBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsXG4gIFNvcnRUeXBlLFxuICBUcmVlU3RhdHVzXG59IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgY29tcG9zZURhdGFGaWx0ZXJzLCBjb21wb3NlRGF0YUZpbHRlclN0YXRlcywgRGF0YUZpbHRlciwgRGF0YUZpbHRlclN0YXRlIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCwgd2FpdE9uQ29uZGl0aW9uQXN5bmMgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLWZvb3Rlci9kYXRhdGFibGUtZm9vdGVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtbWVudS1iYXIvZGF0YXRhYmxlLW1lbnUtYmFyLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtcm93LWRldGFpbC9kYXRhdGFibGUtcm93LWRldGFpbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyBEYXRhdGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1kYXRhLXNvdXJjZSdcbmltcG9ydCB7IFRoZVNlYW1QYWdlSW5mbyB9IGZyb20gJy4uL21vZGVscy9wYWdlLWluZm8nXG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi9tb2RlbHMvc29ydC1ldmVudCdcbmltcG9ydCB7IFNvcnRJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtaXRlbSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuaW1wb3J0IHsgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUiB9IGZyb20gJy4uL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyByZW1vdmVVbnVzZWREaWZmcyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZS11bnVzZWQtZGlmZnMnXG5pbXBvcnQgeyB0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMgfSBmcm9tICcuLi91dGlscy90cmFuc2xhdGUtdGVtcGxhdGVzJ1xuaW1wb3J0IHsgQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLWFsdGVyYXRpb25zLW1hbmFnZXIuc2VydmljZSdcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyB9IGZyb20gJy4uL3V0aWxzL21hcC1jb2x1bW5zLWFsdGVyYXRpb25zLXN0YXRlcydcbmltcG9ydCB7IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy93aWR0aC5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBnZXRDb2x1bW5Qcm9wIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbHVtbi1wcm9wJ1xuaW1wb3J0IHsgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvbiwgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvblN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvb3JkZXIuY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgU29ydENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvc29ydC5jb2x1bW5zLWFsdGVyYXRpb24nXG5cbi8qKlxuICogTk9URTogVGhpcyBpcyBzdGlsbCBiZWluZyB3b3JrZWQgb24uIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBtb2RlbFxuICogYmVjYXVzZSBgbmd4LWRhdGF0YWJsZWAganVzdCB1c2VzIGFuIHVudHlwZWQgb2JqZWN0IGFuZCBzZXRzIHByb3BlcnRpZXMgaW5cbiAqIG11bHRpcGxlIHBsYWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbENvbnRleHQge1xuICBhbGxSb3dzU2VsZWN0ZWQ6IGZhbHNlXG5cbiAgc2VsZWN0Rm46ICgpID0+IGFueVxuICBzb3J0RGlyPzogJ2FzYycgfCAnZGVzYydcbiAgc29ydEZuOiAoKSA9PiBhbnlcblxuICBleHBhbmRlZD86IGJvb2xlYW5cblxuICBvbkNoZWNrYm94Q2hhbmdlRm4/OiBhbnlcbiAgYWN0aXZhdGVGbj86IGFueVxuICByb3c/OiBhbnlcbiAgZ3JvdXA/OiBhbnlcbiAgdmFsdWU/OiBhbnlcbiAgY29sdW1uPzogVGhlU2VhbURhdGF0YWJsZUNvbHVtblxuICByb3dIZWlnaHQ/OiBudW1iZXJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW5cbiAgcm93SW5kZXg/OiBudW1iZXJcbiAgdHJlZVN0YXR1cz86IFRyZWVTdGF0dXNcbiAgb25UcmVlQWN0aW9uPzogYW55XG59XG5cbi8qKlxuICogSW50ZW5kZWQgZm9yIGludGVybmFsIGNsYXNzZXMgZGVjbGFyZWQgYnkgdGhlIGBUaGVTZWFtRGF0YXRhYmxlTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRIRVNFQU1fREFUQVRBQkxFID0gbmV3IEluamVjdGlvblRva2VuPERhdGFGaWx0ZXI+KCdMaWJEYXRhdGFibGUnKVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUixcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tZGF0YXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGF0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlRG93bicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSksXG4gICAgICBdKVxuICAgIF0pXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIF9USEVTRUFNX0RBVEFUQUJMRSxcbiAgICBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gICAgQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IsIENvbGxlY3Rpb25WaWV3ZXIge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxQYWdpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxTb3J0aW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsRmlsdGVyaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xvYWRpbmdJbmRpY2F0b3I6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVvcmRlcmFibGU6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3dhcENvbHVtbnM6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdEFsbFJvd3NPblBhZ2U6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeVJvdzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsaXphdGlvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJWOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhckg6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGltaXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb3VudDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29mZnNldDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jvd0hlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Zvb3RlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQgfCBudWxsXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zb3J0czogU29ydEl0ZW1bXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICByZWFkb25seSBfZmFDaGV2cm9uRG93biA9IGZhQ2hldnJvbkRvd25cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvblJpZ2h0ID0gZmFDaGV2cm9uUmlnaHRcbiAgcmVhZG9ubHkgX2ZhU3Bpbm5lciA9IGZhU3Bpbm5lclxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhRmlsdGVyW10+KFtdKVxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBwcml2YXRlIF9yZXNpemluZzogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RhdGVzOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJTdGF0ZVtdPlxuXG4gIGdldCBmaWx0ZXJzKCk6IERhdGFGaWx0ZXJbXSB7IHJldHVybiB0aGlzLl9maWx0ZXJzU3ViamVjdC52YWx1ZSB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnMkOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJbXT5cblxuICBASW5wdXQoKVxuICBnZXQgcHJlZmVyZW5jZXNLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7IHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc0tleS52YWx1ZSB9XG4gIHNldCBwcmVmZXJlbmNlc0tleSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkgeyB0aGlzLl9wcmVmZXJlbmNlc0tleS5uZXh0KHZhbHVlIHx8IHVuZGVmaW5lZCkgfVxuICBwcml2YXRlIF9wcmVmZXJlbmNlc0tleSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbD4odW5kZWZpbmVkKVxuXG4gIEBJbnB1dCgpIHRhcmdldE1hcmtlclRlbXBsYXRlOiBhbnlcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SW5wdXRDb2x1bW5zKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSlcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuX3Jvd3MudmFsdWUgfVxuICBzZXQgcm93cyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLl9yb3dzLm5leHQodmFsdWUgfHwgW10pXG4gIH1cbiAgcHJpdmF0ZSBfcm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXG4gIHB1YmxpYyByb3dzJDogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICBASW5wdXQoKSBjb2x1bW5Nb2RlOiBDb2x1bW5Nb2RlIHwgdW5kZWZpbmVkIHwgbnVsbCA9IENvbHVtbk1vZGUuZm9yY2VcblxuICBASW5wdXQoKSBncm91cFJvd3NCeTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBncm91cGVkUm93czogYW55W10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IFtdXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsUGFnaW5nID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsU29ydGluZyA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbEZpbHRlcmluZyA9IGZhbHNlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgY291bnQgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQgPSAwXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGxvYWRpbmdJbmRpY2F0b3IgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmdldFNlbGVjdGlvblR5cGUoKSB9XG4gIHNldCBzZWxlY3Rpb25UeXBlKHZhbHVlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFNlbGVjdGlvblR5cGUobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlb3JkZXJhYmxlID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3dhcENvbHVtbnMgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0VHlwZSgpOiBTb3J0VHlwZSB7IHJldHVybiB0aGlzLl9zb3J0VHlwZSB9XG4gIHNldCBzb3J0VHlwZSh2YWx1ZTogU29ydFR5cGUpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSAmJiAodmFsdWUgPT09IFNvcnRUeXBlLnNpbmdsZSB8fCB2YWx1ZSA9PT0gU29ydFR5cGUubXVsdGkpKSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IHZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG4gICAgfVxuICB9XG4gIF9zb3J0VHlwZTogU29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGVcblxuICBASW5wdXQoKVxuICBnZXQgc29ydHMoKTogU29ydEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlID8gdGhpcy5uZ3hEYXRhdGFibGUuc29ydHMgOiB0aGlzLl9zb3J0c1xuICB9XG4gIHNldCBzb3J0cyh2YWx1ZTogU29ydEl0ZW1bXSkge1xuICAgIHRoaXMuX3NvcnRzID0gbm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IGNvZXJjZUFycmF5KHZhbHVlKSA6IFtdXG4gIH1cbiAgX3NvcnRzOiBTb3J0SXRlbVtdID0gW11cblxuICBASW5wdXQoKSBjc3NDbGFzc2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIHNvcnRBc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi11cCcsXG4gICAgc29ydERlc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi1kb3duJyxcbiAgICBwYWdlckxlZnRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLWxlZnQnLFxuICAgIHBhZ2VyUmlnaHRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLXJpZ2h0JyxcbiAgICBwYWdlclByZXZpb3VzOiAnZGF0YXRhYmxlLWljb24tcHJldicsXG4gICAgcGFnZXJOZXh0OiAnZGF0YXRhYmxlLWljb24tc2tpcCdcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIC8vIE1lc3NhZ2UgdG8gc2hvdyB3aGVuIGFycmF5IGlzIHByZXNlbnRlZFxuICAgIC8vIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICBlbXB0eU1lc3NhZ2U6ICdObyByZWNvcmRzIGZvdW5kJyxcblxuICAgIC8vIEZvb3RlciB0b3RhbCBtZXNzYWdlXG4gICAgdG90YWxNZXNzYWdlOiAndG90YWwnLFxuXG4gICAgLy8gRm9vdGVyIHNlbGVjdGVkIG1lc3NhZ2VcbiAgICBzZWxlY3RlZE1lc3NhZ2U6ICdzZWxlY3RlZCdcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd0lkZW50aXR5OiAoKHg6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB8IG51bGwgPSAoeDogYW55KSA9PiB4XG5cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RDaGVjazogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6ICgocm93OiBhbnksIGNvbHVtbj86IGFueSwgdmFsdWU/OiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBncm91cEV4cGFuc2lvbkRlZmF1bHQgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNlbGVjdEFsbFJvd3NPblBhZ2UgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN1bW1hcnlSb3cgPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBzdW1tYXJ5SGVpZ2h0ID0gMzBcbiAgQElucHV0KCkgc3VtbWFyeVBvc2l0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsID0gJ3RvcCdcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdmlydHVhbGl6YXRpb24gPSB0cnVlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgaGVhZGVySGVpZ2h0ID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcm93SGVpZ2h0ID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZm9vdGVySGVpZ2h0ID0gNDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFyViA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhckggPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGF0YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHZhbHVlLnNldERhdGF0YWJsZUFjY2Vzc29yKHRoaXMpXG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0RXZlbnQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZVNlYW1QYWdlSW5mbz4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYmxlQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IENvbnRleHRtZW51VHlwZSwgY29udGVudDogYW55IH0+KGZhbHNlKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGlvblJlZnJlc2hSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWRkZW5Db2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICBzZXQgY29sdW1uQ29tcG9uZW50cyh2YWx1ZTogUXVlcnlMaXN0PERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUZW1wbGF0ZUNvbHVtbnModHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zKHZhbHVlPy50b0FycmF5KCkgPz8gW10pKVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBhY3Rpb25NZW51PzogRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudFxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCByb3dBY3Rpb25JdGVtKCk6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcm93QWN0aW9uSXRlbSB9XG4gIHNldCByb3dBY3Rpb25JdGVtKHZhbHVlOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcm93QWN0aW9uSXRlbSA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Um93QWN0aW9uSXRlbShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfcm93QWN0aW9uSXRlbTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZFxuXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcm93RGV0YWlsPzogVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3Rlcj86IFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQpXG4gIGdldCBtZW51QmFyQ29tcG9uZW50KCk6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fbWVudUJhckNvbXBvbmVudCB9XG4gIHNldCBtZW51QmFyQ29tcG9uZW50KHZhbHVlOiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWVudUJhckNvbXBvbmVudCA9IHZhbHVlXG5cbiAgICBpZiAodGhpcy5fbWVudUJhclN1YikgeyB0aGlzLl9tZW51QmFyU3ViLnVuc3Vic2NyaWJlKCkgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpXG5cbiAgICAgIHRoaXMuX21lbnVCYXJTdWIgPSB0aGlzLl9tZW51QmFyQ29tcG9uZW50Py5maWx0ZXJzQ2hhbmdlZFxuICAgICAgICAuc3Vic2NyaWJlKHYgPT4geyB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpIH0pXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnVCYXJDb21wb25lbnQ6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfbWVudUJhclN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZChOZ3hEYXRhdGFibGVDb21wb25lbnQpIG5neERhdGF0YWJsZT86IE5neERhdGF0YWJsZUNvbXBvbmVudFxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5neERhdGF0YWJsZUVsZW1lbnQ/OiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlKSBuZ3hSb3dEZXRhaWw/OiBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmVcblxuICBAVmlld0NoaWxkKCdhY3Rpb25NZW51Q2VsbFRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBhY3Rpb25NZW51Q2VsbFRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsIH1cbiAgc2V0IGFjdGlvbk1lbnVDZWxsVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEFjdGlvbk1lbnVDZWxsVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9hY3Rpb25NZW51Q2VsbFRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ3RyZWVUb2dnbGVUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgdHJlZVRvZ2dsZVRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fdHJlZVRvZ2dsZVRwbCB9XG4gIHNldCB0cmVlVG9nZ2xlVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmVlVG9nZ2xlVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUcmVlVG9nZ2xlVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF90cmVlVG9nZ2xlVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdoZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgaGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5faGVhZGVyVHBsIH1cbiAgc2V0IGhlYWRlclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SGVhZGVyVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9oZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdibGFua0hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBibGFua0hlYWRlclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2JsYW5rSGVhZGVyVHBsIH1cbiAgc2V0IGJsYW5rSGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYmxhbmtIZWFkZXJUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEJsYW5rSGVhZGVyVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9ibGFua0hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2NlbGxUeXBlU2VsZWN0b3JUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgY2VsbFR5cGVTZWxlY3RvclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgfVxuICBzZXQgY2VsbFR5cGVTZWxlY3RvclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldENlbGxUeXBlU2VsZWN0b3JUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2NlbGxUeXBlU2VsZWN0b3JUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBwdWJsaWMgY29sdW1uQ29tcG9uZW50cyQ/OiBPYnNlcnZhYmxlPERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdPlxuICBwcml2YXRlIF9jb2xEaWZmZXJzSW5wOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IH0gPSB7fVxuICBwcml2YXRlIF9jb2xEaWZmZXJzVHBsOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IH0gPSB7fVxuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG4gIHB1YmxpYyByZWFkb25seSBkaXNwbGF5Q29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuXG4gIHZpZXdDaGFuZ2U6IE9ic2VydmFibGU8TGlzdFJhbmdlPlxuXG4gIHByaXZhdGUgX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuXG4gIC8vIFRPRE86IFJlbW92ZSB0aGlzIERPTS1kZXBlbmRlbnQgY29kZSB3aGVuIGEgd2F5IHRvIHByb3BlcnR5IGxpc3RlbiBmb3JcbiAgLy8gZGJsY2xpY2sgb24gdGhlIGhlYWRlciByZWFzaXplIGhhbmRsZXMuXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyAnJGV2ZW50JyBdKVxuICBfZGJsQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzSGFuZGxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJylcbiAgICBpZiAoaXNIYW5kbGUpIHtcbiAgICAgIGNvbnN0IGlzUmVzaXplYWJsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygncmVzaXplYWJsZScpXG4gICAgICBpZiAoaXNSZXNpemVhYmxlKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGNvbnN0IGlkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudFxuICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLmRhdGF0YWJsZS1jb2x1bW4taGVhZGVyLXNlcGFyYXRvcicpXG4gICAgICAgICAgPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uLWlkJylcbiAgICAgICAgdGhpcy5fY29sdW1uc01hbmFnZXIuY29sdW1ucyQucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICApLnN1YnNjcmliZShjb2x1bW5zID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoYyA9PiBjLiQkaWQgPT09IGlkKVxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGNvbHVtbilcbiAgICAgICAgICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7IGNvbHVtblByb3AsIGNhbkF1dG9SZXNpemU6IHRydWUgfSwgZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmZXJlbmNlczogRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNNYW5hZ2VyOiBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlcjogQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGtleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGtleSkgfHwga2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbSh3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5sb2FkZWQpKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0QWx0ZXJhdGlvbnMoa2V5LCB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFwcGx5KGNvbHMsIHRoaXMpXG4gICAgICAgIHJldHVybiBjb2xzXG4gICAgICB9KSxcbiAgICApXG5cbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChwcmVmc0tleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByZWZzS2V5KSkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKHByZWZzS2V5KS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyBwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBhd2FpdCB3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5sb2FkZWQpXG4gICAgICAgICAgICByZXR1cm4gcHJlZmVyZW5jZXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcChwcmVmZXJlbmNlcyA9PiB7XG4gICAgICAgICAgICBsZXQgYWx0ZXJhdGlvbnM6IENvbHVtbnNBbHRlcmF0aW9uW10gPSBbXVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYWx0ZXJhdGlvbnMgPSBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMocHJlZmVyZW5jZXMuYWx0ZXJhdGlvbnMpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbWFwIGNvbHVtbnMgYWx0ZXJhdGlvbnMgc3RhdGVzJylcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKGFsdGVyYXRpb25zKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkXG5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zJCA9IHRoaXMuY29sdW1ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjb2xzID0+IGFwcGx5UHJlZnMoY29scykpLFxuICAgICAgbWFwKGNvbHMgPT4gY29scy5maWx0ZXIoYyA9PiAhYy5oaWRkZW4pKSxcbiAgICAgIHRhcCh2ID0+IHJlbW92ZVVudXNlZERpZmZzKHYsIHRoaXMuX2NvbERpZmZlcnNJbnAsIHRoaXMuX2NvbERpZmZlcnNUcGwpKSxcbiAgICApXG5cbiAgICB0aGlzLmZpbHRlcnMkID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKClcblxuICAgIHRoaXMuZmlsdGVyU3RhdGVzID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChmaWx0ZXJzID0+IGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzKGZpbHRlcnMpKVxuICAgIClcblxuICAgIHRoaXMucm93cyQgPSB0aGlzLl9kYXRhU291cmNlU3ViamVjdC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRhdGFTb3VyY2UgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZGF0YVNvdXJjZScsIGRhdGFTb3VyY2UpXG4gICAgICAgIGxldCBkYXRhU3RyZWFtOiBPYnNlcnZhYmxlPGFueVtdPlxuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmRhdGFzb3VyY2UnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlLmNvbm5lY3QodGhpcykgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35vYnNlcnZhYmxlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35hcnJheScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IG9mKGRhdGFTb3VyY2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35yb3dzIGZhbGxiYWNrJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gdGhpcy5fcm93cy5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLy8gLnBpcGUodGFwKHYgPT4gY29uc29sZS5sb2coJ3Jvd3N+JywgdikpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmV4dGVybmFsRmlsdGVyaW5nKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ25vdCB1c2luZyBleHRlcm5hbEZpbHRlcmluZycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChyb3dzID0+IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgICBjb25jYXRNYXAoZmlsdGVycyA9PiBvZihyb3dzKS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gZGF0YVN0cmVhbSA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IGRhdGFTdHJlYW0ucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3N0cmVhbScsIHYpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG5cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdmlld0NoYW5nZSBmb3IgQ29sbGVjdGlvblZpZXdlci5cbiAgICB0aGlzLnZpZXdDaGFuZ2UgPSB0aGlzLnBhZ2UucGlwZShtYXAocCA9PiAoeyBzdGFydDogMCwgZW5kOiBwLmNvdW50IH0pKSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvd0RldGFpbCkge1xuICAgICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3dEZXRhaWwuX3RvZ2dsZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5uZ3hSb3dEZXRhaWwpIHtcbiAgICAgICAgICB0aGlzLm5neFJvd0RldGFpbC50b2dnbGUuZW1pdChldmVudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWVudUJhckZpbHRlcnMoZmlsdGVyczogRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5fZmlsdGVyc1N1YmplY3QubmV4dChmaWx0ZXJzIHx8IFtdKVxuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkNvbXBvbmVudChwcm9wTmFtZTogc3RyaW5nKTogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvbXBvbmVudHMgfHwgdGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0cGwgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZmluZCh0ID0+IHQucHJvcCA9PT0gcHJvcE5hbWUpXG4gICAgaWYgKHRwbCkge1xuICAgICAgcmV0dXJuIHRwbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBfY29sdW1uRGF0YShjb2w6IGFueSk6IHsgY29sOiBhbnksIGNvbXA6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwgfSB7XG4gICAgY29uc3QgY29tcCA9IHRoaXMuZ2V0Q29sdW1uQ29tcG9uZW50KGNvbC5wcm9wKVxuICAgIHJldHVybiB7IGNvbCwgY29tcCB9XG4gIH1cblxuICBfZ2V0Um93RXhwYW5kZWQocm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGUuYm9keUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQuZ2V0Um93RXhwYW5kZWQocm93KVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5Rm5Db2x1bW4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0ucHJvcFxuICB9XG5cbiAgcHVibGljIG9uRGF0YXRhYmxlUmVzaXplKGV2ZW50OiBJRWxlbWVudFJlc2l6ZWRFdmVudCkge1xuICAgIGlmICh0aGlzLm5neERhdGF0YWJsZSAmJiB0aGlzLm5neERhdGF0YWJsZUVsZW1lbnQgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIGludGVncmF0aW5nIHRoaXMgaW50byB0aGUgbmd4LWRhdGF0YWJsZSBsaWJyYXJ5IHRvIGF2b2lkXG4gICAgICAvLyBtdWx0aXBsZSByZXNpemUgY2FsbHMgd2hlbiB0aGUgdGFibGUgcmVzaXplcyBpdHNlbGYuXG4gICAgICB0aGlzLm5neERhdGF0YWJsZS5yZWNhbGN1bGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX29uUmVzaXplKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc2l6ZS5lbWl0KGV2ZW50KVxuXG4gICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoZXZlbnQuY29sdW1uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoZXZlbnQuY29sdW1uKVxuICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICBsZXQgYWRkQWx0ZXJhdGlvbiA9IGZhbHNlXG5cbiAgICAgIGlmICghdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0pIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSB0cnVlXG4gICAgICAgIGFkZEFsdGVyYXRpb24gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5pc0RvbmUpIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSBmYWxzZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRkQWx0ZXJhdGlvbikge1xuICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oe1xuICAgICAgICAgIGNvbHVtblByb3AsXG4gICAgICAgICAgd2lkdGg6IGV2ZW50LmNvbHVtbi53aWR0aCxcbiAgICAgICAgICBjYW5BdXRvUmVzaXplOiBmYWxzZVxuICAgICAgICB9LCB0cnVlKVxuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25SZW9yZGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudClcblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyQWx0ZXJhdGlvbiA9IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkuZmluZCh4ID0+IHgudHlwZSA9PT0gJ29yZGVyJylcbiAgICAgIGNvbnN0IHN0YXRlOiBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgPSB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAuLi4oY3VycmVudE9yZGVyQWx0ZXJhdGlvbj8uc3RhdGUuY29sdW1ucyB8fCBbXSksXG4gICAgICAgICAgeyBjb2x1bW5Qcm9wLCBpbmRleDogZXZlbnQubmV3VmFsdWUgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24oc3RhdGUsIHRydWUpXG4gICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICB9XG4gIH1cblxuICBfb25Tb3J0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuZW1pdChldmVudClcblxuICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgU29ydENvbHVtbnNBbHRlcmF0aW9uKHsgc29ydHM6IGV2ZW50LnNvcnRzIH0sIHRydWUpXG4gICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gIH1cblxuICBfb25UcmVlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IGV2ZW50LnJvd0luZGV4XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93XG4gICAgaWYgKHJvdy50cmVlU3RhdHVzID09PSAnY29sbGFwc2VkJykge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnZXhwYW5kZWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCdcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gWyAuLi50aGlzLnJvd3MgXVxuICB9XG5cbiAgcHVibGljIHRyaWdnZXJBY3Rpb25SZWZyZXNoUmVxdWVzdCgpIHtcbiAgICB0aGlzLmFjdGlvblJlZnJlc2hSZXF1ZXN0LmVtaXQodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhZ2UgaW5mbyBmcm9tIHRoZSB3cmFwcGVkIE5neERhdGF0YWJsZSBpbnN0YW5jZSBvciBkZWZhdWx0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRhdGFibGUtd3JhcHBlclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJzZWFtLWRhdGF0YWJsZS1tZW51LWJhclwiPjwvbmctY29udGVudD5cbiAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS10YWJsZS13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxuZ3gtZGF0YXRhYmxlXG4gICAgICAgIFtjb2x1bW5Nb2RlXT1cIiRhbnkoY29sdW1uTW9kZSlcIlxuICAgICAgICBbc2Nyb2xsYmFyVl09XCJzY3JvbGxiYXJWXCJcbiAgICAgICAgW3Njcm9sbGJhckhdPVwic2Nyb2xsYmFySFwiXG4gICAgICAgIFt2aXJ0dWFsaXphdGlvbl09XCJ2aXJ0dWFsaXphdGlvblwiXG4gICAgICAgIFt0YXJnZXRNYXJrZXJUZW1wbGF0ZV09XCJ0YXJnZXRNYXJrZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtncm91cFJvd3NCeV09XCIkYW55KGdyb3VwUm93c0J5KVwiXG4gICAgICAgIFtncm91cGVkUm93c109XCIkYW55KGdyb3VwZWRSb3dzKVwiXG4gICAgICAgIFtzZWxlY3RlZF09XCIkYW55KHNlbGVjdGVkKVwiXG4gICAgICAgIFtleHRlcm5hbFBhZ2luZ109XCJleHRlcm5hbFBhZ2luZ1wiXG4gICAgICAgIFtleHRlcm5hbFNvcnRpbmddPVwiZXh0ZXJuYWxTb3J0aW5nXCJcbiAgICAgICAgW2xpbWl0XT1cIiRhbnkobGltaXQpXCJcbiAgICAgICAgW2NvdW50XT1cIiRhbnkoY291bnQpXCJcbiAgICAgICAgW29mZnNldF09XCIkYW55KG9mZnNldClcIlxuICAgICAgICBbbG9hZGluZ0luZGljYXRvcl09XCJsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwiJGFueShzZWxlY3Rpb25UeXBlKVwiXG4gICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgIFtzd2FwQ29sdW1uc109XCJzd2FwQ29sdW1uc1wiXG4gICAgICAgIFtzb3J0VHlwZV09XCIkYW55KHNvcnRUeXBlKVwiXG4gICAgICAgIFtzb3J0c109XCIkYW55KF9zb3J0cylcIlxuICAgICAgICBbY3NzQ2xhc3Nlc109XCJjc3NDbGFzc2VzXCJcbiAgICAgICAgW21lc3NhZ2VzXT1cIm1lc3NhZ2VzXCJcbiAgICAgICAgW3Jvd0lkZW50aXR5XT1cIiRhbnkocm93SWRlbnRpdHkpXCJcbiAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgW3NlbGVjdENoZWNrXT1cInNlbGVjdENoZWNrXCJcbiAgICAgICAgW2Rpc3BsYXlDaGVja109XCIkYW55KGRpc3BsYXlDaGVjaylcIlxuICAgICAgICBbZ3JvdXBFeHBhbnNpb25EZWZhdWx0XT1cImdyb3VwRXhwYW5zaW9uRGVmYXVsdFwiXG4gICAgICAgIFt0cmFja0J5UHJvcF09XCIkYW55KHRyYWNrQnlQcm9wKVwiXG4gICAgICAgIFtzZWxlY3RBbGxSb3dzT25QYWdlXT1cInNlbGVjdEFsbFJvd3NPblBhZ2VcIlxuICAgICAgICBbdHJlZUZyb21SZWxhdGlvbl09XCIkYW55KHRyZWVGcm9tUmVsYXRpb24pXCJcbiAgICAgICAgW3RyZWVUb1JlbGF0aW9uXT1cIiRhbnkodHJlZVRvUmVsYXRpb24pXCJcbiAgICAgICAgW3N1bW1hcnlSb3ddPVwic3VtbWFyeVJvd1wiXG4gICAgICAgIFtzdW1tYXJ5SGVpZ2h0XT1cIiRhbnkoc3VtbWFyeUhlaWdodClcIlxuICAgICAgICBbc3VtbWFyeVBvc2l0aW9uXT1cIiRhbnkoc3VtbWFyeVBvc2l0aW9uKVwiXG4gICAgICAgIFtyb3dzXT1cInJvd3MkIHwgYXN5bmNcIlxuICAgICAgICBbY29sdW1uc109XCIkYW55KGRpc3BsYXlDb2x1bW5zJCB8IGFzeW5jKVwiXG4gICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiJGFueShoZWFkZXJIZWlnaHQpXCJcbiAgICAgICAgW3Jvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbZm9vdGVySGVpZ2h0XT1cIiRhbnkoZm9vdGVySGVpZ2h0KVwiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmF0ZSk9XCJhY3RpdmF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc29ydCk9XCJfb25Tb3J0KCRldmVudClcIlxuICAgICAgICAocGFnZSk9XCJwYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZW9yZGVyKT1cIl9vblJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZXNpemUpPVwiX29uUmVzaXplKCRldmVudClcIlxuICAgICAgICAodGFibGVDb250ZXh0bWVudSk9XCJ0YWJsZUNvbnRleHRtZW51LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cInRyZWVBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlYW1FbGVtUmVzaXplZCk9XCJvbkRhdGF0YWJsZVJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwiX29uVHJlZUFjdGlvbigkZXZlbnQpXCI+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyIFtyb3dIZWlnaHRdPVwiNTBcIiAjbXlHcm91cEhlYWRlciAqbmdJZj1cImdyb3VwUm93c0J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ncm91cD1cImdyb3VwXCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIiBuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBiZy1saWdodCBwLTFcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJvdHRvbV09XCIhZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWljb24tcmlnaHRdPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLWRvd25dPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkV4cGFuZC9Db2xsYXBzZSBHcm91cFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZ3hEYXRhdGFibGU/Lmdyb3VwSGVhZGVyPy50b2dnbGVFeHBhbmRHcm91cChncm91cClcIj5cbiAgICAgICAgICAgICAgPGI+QWdlOiB7eyBncm91cC5hZ2UgfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWwgKm5nSWY9XCJyb3dEZXRhaWwgJiYgcm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgICBbcm93SGVpZ2h0XT1cInJvd0RldGFpbC5yb3dIZWlnaHQgfHwgMFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkocm93RGV0YWlsLnRlbXBsYXRlKVwiXG4gICAgICAgICAgKHRvZ2dsZSk9XCJyb3dEZXRhaWwudG9nZ2xlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtcm93LWRldGFpbD5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1mb290ZXIgKm5nSWY9XCJmb290ZXIgJiYgZm9vdGVyLnRlbXBsYXRlXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiJGFueShmb290ZXIudGVtcGxhdGUpXCI+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1mb290ZXI+XG4gICAgICA8L25neC1kYXRhdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtIZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUcGwgbmd4LWRhdGF0YWJsZS1oZWFkZXItdGVtcGxhdGVcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1zb3J0Rm49XCJzb3J0Rm5cIj5cbiAgPHN0cm9uZyAqbmdJZj1cIiFjb2x1bW4uc29ydGFibGVcIiBjbGFzcz1cImRyYWdnYWJsZVwiPnt7Y29sdW1uLm5hbWV9fTwvc3Ryb25nPlxuICA8c3Ryb25nICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCIgY2xhc3M9XCJkYXRhdGFibGUtc29ydC10YXJnZXQgZHJhZ2dhYmxlXCIgKGNsaWNrKT1cInNvcnRGbigpXCI+e3tjb2x1bW4ubmFtZX19PC9zdHJvbmc+XG4gIDxkaXYgY2xhc3M9XCJkYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3JcIiBbYXR0ci5kYXRhLWNvbHVtbi1pZF09XCJjb2x1bW4uJCRpZFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjZWxsVHlwZVNlbGVjdG9yVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPHNlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yICpuZ0lmPVwicm93XCJcbiAgICBbdHlwZV09XCJjb2x1bW4uY2VsbFR5cGVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICBbcm93XT1cInJvd1wiXG4gICAgW2NvbERhdGFdPVwiY29sdW1uXCI+XG4gIDwvc2VhbS10YWJsZS1jZWxsLXR5cGUtc2VsZWN0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbk1lbnVDZWxsVHBsIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZVxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCIgbGV0LXJvdz1cInJvd1wiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cgJiYgcm93QWN0aW9uSXRlbT8udGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkocm93QWN0aW9uSXRlbT8udGVtcGxhdGUpXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmVlVG9nZ2xlVHBsIG5neC1kYXRhdGFibGUtdHJlZS10b2dnbGUgbGV0LXRyZWU9XCJjZWxsQ29udGV4dFwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJwLTAgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYnRuXCJcbiAgICBbZGlzYWJsZWRdPVwidHJlZS50cmVlU3RhdHVzPT09J2Rpc2FibGVkJ1wiXG4gICAgKGNsaWNrKT1cInRyZWUub25UcmVlQWN0aW9uKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdsb2FkaW5nJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhU3Bpbm5lclwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nY29sbGFwc2VkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvblJpZ2h0XCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdleHBhbmRlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25Eb3duXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==