@acorex/platform 1.0.0 → 1.0.2

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 (686) hide show
  1. package/auth/index.d.ts +3 -6
  2. package/auth/lib/application/application.loader.d.ts +2 -3
  3. package/auth/lib/auth.module.d.ts +5 -4
  4. package/auth/lib/auth.strategy.d.ts +17 -6
  5. package/auth/lib/errors.types.d.ts +12 -2
  6. package/auth/lib/feature/feature.directive.d.ts +15 -0
  7. package/auth/lib/feature/feature.guard.d.ts +2 -0
  8. package/auth/lib/feature/feature.loader.d.ts +2 -1
  9. package/auth/lib/feature/index.d.ts +4 -0
  10. package/auth/lib/permission/index.d.ts +4 -0
  11. package/auth/lib/permission/permission.directive.d.ts +5 -6
  12. package/auth/lib/permission/permission.guard.d.ts +1 -1
  13. package/auth/lib/permission/permission.loader.d.ts +2 -1
  14. package/auth/lib/session.service.d.ts +21 -13
  15. package/auth/lib/session.types.d.ts +24 -0
  16. package/auth/lib/tenant/tenant.loader.d.ts +2 -3
  17. package/common/index.d.ts +0 -1
  18. package/common/lib/common.module.d.ts +1 -1
  19. package/common/lib/configs/app.config.d.ts +0 -1
  20. package/common/lib/data/data-provider.types.d.ts +4 -0
  21. package/common/lib/shared/state-persistence/state-persistence.actions.d.ts +1 -1
  22. package/common/lib/store/common.actions.d.ts +3 -3
  23. package/core/README.md +4 -0
  24. package/core/index.d.ts +4 -0
  25. package/core/lib/app/application.types.d.ts +144 -0
  26. package/core/lib/app/operators.d.ts +22 -0
  27. package/core/lib/configs/config.types.d.ts +5 -0
  28. package/core/lib/core.module.d.ts +6 -0
  29. package/esm2022/auth/index.mjs +4 -7
  30. package/esm2022/auth/lib/application/application.loader.mjs +2 -5
  31. package/esm2022/auth/lib/auth-registry.service.mjs +3 -3
  32. package/esm2022/auth/lib/auth.guard.mjs +7 -9
  33. package/esm2022/auth/lib/auth.module.mjs +26 -20
  34. package/esm2022/auth/lib/auth.strategy.mjs +1 -1
  35. package/esm2022/auth/lib/errors.types.mjs +7 -5
  36. package/esm2022/auth/lib/feature/feature.directive.mjs +55 -0
  37. package/esm2022/auth/lib/feature/feature.guard.mjs +19 -0
  38. package/esm2022/auth/lib/feature/feature.loader.mjs +2 -2
  39. package/esm2022/auth/lib/feature/index.mjs +5 -0
  40. package/esm2022/auth/lib/permission/index.mjs +5 -0
  41. package/esm2022/auth/lib/permission/permission.directive.mjs +24 -21
  42. package/esm2022/auth/lib/permission/permission.guard.mjs +12 -9
  43. package/esm2022/auth/lib/permission/permission.loader.mjs +2 -2
  44. package/esm2022/auth/lib/session.service.mjs +116 -121
  45. package/esm2022/auth/lib/session.types.mjs +29 -0
  46. package/esm2022/auth/lib/tenant/tenant.loader.mjs +2 -5
  47. package/esm2022/common/index.mjs +1 -2
  48. package/esm2022/common/lib/common.module.mjs +19 -26
  49. package/esm2022/common/lib/configs/app.config.mjs +2 -3
  50. package/esm2022/common/lib/data/data-provider.types.mjs +1 -1
  51. package/esm2022/common/lib/errors/error-handler-registry.service.mjs +3 -3
  52. package/esm2022/common/lib/errors/global-error-handler.mjs +3 -3
  53. package/esm2022/common/lib/settings/settings.service.mjs +3 -3
  54. package/esm2022/common/lib/shared/state-persistence/state-persistence.module.mjs +4 -4
  55. package/esm2022/common/lib/store/common.effects.mjs +3 -3
  56. package/esm2022/common/lib/utils/clipboard-service.mjs +3 -3
  57. package/esm2022/common/lib/utils/router-util.service.mjs +3 -3
  58. package/esm2022/common/lib/utils/sticky.directive.mjs +3 -3
  59. package/esm2022/core/acorex-platform-core.mjs +5 -0
  60. package/esm2022/core/index.mjs +5 -0
  61. package/esm2022/core/lib/app/application.types.mjs +19 -0
  62. package/esm2022/core/lib/app/operators.mjs +50 -0
  63. package/esm2022/core/lib/configs/config.types.mjs +3 -0
  64. package/esm2022/core/lib/core.module.mjs +16 -0
  65. package/esm2022/layout/acorex-platform-layout.mjs +5 -0
  66. package/esm2022/layout/index.mjs +3 -0
  67. package/esm2022/layout/lib/builder/builder.module.mjs +66 -0
  68. package/esm2022/layout/lib/builder/context.service.mjs +64 -0
  69. package/esm2022/layout/lib/builder/index.mjs +8 -0
  70. package/esm2022/layout/lib/builder/widget-column-renderer.mjs +75 -0
  71. package/esm2022/layout/lib/builder/widget-container.mjs +45 -0
  72. package/esm2022/layout/lib/builder/widget-registery.service.mjs +33 -0
  73. package/esm2022/layout/lib/builder/widget-renderer.mjs +279 -0
  74. package/esm2022/layout/lib/builder/widget.types.mjs +49 -0
  75. package/esm2022/layout/lib/component-slot/component-slot-loader.service.mjs +56 -0
  76. package/esm2022/layout/lib/component-slot/component-slot-registery.service.mjs +28 -0
  77. package/esm2022/layout/lib/component-slot/component-slot.directive.mjs +24 -0
  78. package/esm2022/layout/lib/component-slot/component-slot.module.mjs +72 -0
  79. package/esm2022/layout/lib/component-slot/component-slot.types.mjs +2 -0
  80. package/esm2022/layout/lib/component-slot/index.mjs +6 -0
  81. package/esm2022/layouts/lib/admin/admin-child-layout/admin-child-features-list.component.mjs +3 -3
  82. package/esm2022/layouts/lib/admin/admin-child-layout/admin-child-layout.component.mjs +3 -3
  83. package/esm2022/layouts/lib/admin/admin-child-layout/admin-child-layout.module.mjs +4 -4
  84. package/esm2022/layouts/lib/admin/admin-root-layout/admin-root-layout.component.mjs +6 -6
  85. package/esm2022/layouts/lib/admin/admin-root-layout/admin-root-layout.module.mjs +6 -6
  86. package/esm2022/layouts/lib/admin/admin-root-layout/components/admin-footer/admin-footer.component.mjs +4 -4
  87. package/esm2022/layouts/lib/admin/admin-root-layout/components/admin-header/admin-header.component.mjs +5 -5
  88. package/esm2022/layouts/lib/admin/admin.module.mjs +18 -10
  89. package/esm2022/layouts/lib/admin/admin.routes.mjs +14 -2
  90. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +4 -4
  91. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.config.mjs +3 -3
  92. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/detail-view.config.mjs +3 -3
  93. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +15 -15
  94. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/entity-custom-view/entity-custom-view.component.mjs +4 -4
  95. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-columns/list-view-option-columns.component.mjs +3 -3
  96. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-conditions.component.mjs +3 -3
  97. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-filter-operator.component.mjs +6 -6
  98. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-sorting/list-view-option-sorting.component.mjs +3 -3
  99. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +31 -27
  100. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/list-view.config.mjs +8 -6
  101. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/list-view.module.mjs +11 -7
  102. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +4 -4
  103. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.config.mjs +3 -3
  104. package/esm2022/layouts/lib/admin/entity-layout/entity-quick-view/entity-quick-view.component.mjs +16 -18
  105. package/esm2022/layouts/lib/admin/entity-layout/index.mjs +2 -1
  106. package/esm2022/layouts/lib/admin/entity-layout/workflows/create-entity.workflow.mjs +3 -3
  107. package/esm2022/layouts/lib/admin/entity-layout/workflows/delete-entity.workflow.mjs +7 -22
  108. package/esm2022/layouts/lib/admin/entity-layout/workflows/index.mjs +4 -0
  109. package/esm2022/layouts/lib/admin/entity-layout/workflows/modify-entity.workflow.mjs +3 -3
  110. package/esm2022/layouts/lib/admin/entity-layout/workflows/show-details.workflow.mjs +10 -0
  111. package/esm2022/layouts/lib/admin/entity-layout/workflows/show-list.workflow.mjs +10 -0
  112. package/esm2022/layouts/lib/admin/entity-layout/workflows/show-quick-view.workflow.mjs +10 -0
  113. package/esm2022/layouts/lib/admin/entity.resolver.mjs +1 -5
  114. package/esm2022/layouts/lib/admin/store/admin-layout.effects.mjs +3 -3
  115. package/esm2022/layouts/lib/layout.module.mjs +9 -24
  116. package/esm2022/layouts/lib/shared/components/content-view/content-view.page.mjs +4 -4
  117. package/esm2022/layouts/lib/shared/components/error-401/error-401.component.mjs +5 -6
  118. package/esm2022/layouts/lib/shared/components/error-404/error-404.component.mjs +3 -3
  119. package/esm2022/layouts/lib/shared/components/error-offline/error-offline.component.mjs +3 -3
  120. package/esm2022/layouts/lib/shared/components/index.mjs +2 -1
  121. package/esm2022/layouts/lib/shared/components/logo/logo.component.mjs +5 -5
  122. package/esm2022/layouts/lib/shared/components/slots/footer-text-slot.component.mjs +3 -3
  123. package/esm2022/layouts/lib/shared/components/slots/navbar-slot.component.mjs +3 -3
  124. package/esm2022/layouts/lib/shared/components/slots/theme-slot.component.mjs +4 -4
  125. package/esm2022/layouts/lib/shared/entity/entity-registery.service.mjs +3 -3
  126. package/esm2022/layouts/lib/shared/entity/entity.class.mjs +1 -1
  127. package/esm2022/layouts/lib/shared/services/layout.service.mjs +3 -3
  128. package/esm2022/layouts/lib/shared/workflows/common.workflow.mjs +54 -17
  129. package/esm2022/layouts/lib/shared/workflows/error-handler.mjs +3 -3
  130. package/esm2022/layouts/lib/themes/default/entity-layouts/entity-details-view/entity-details-view.component.mjs +73 -0
  131. package/esm2022/layouts/lib/themes/default/entity-layouts/entity-details.viewmodel.mjs +99 -0
  132. package/esm2022/layouts/lib/themes/default/index.mjs +3 -0
  133. package/esm2022/layouts/lib/widgets/avatar/avatar-widget-edit.component.mjs +70 -12
  134. package/esm2022/layouts/lib/widgets/avatar/avatar-widget-view.component.mjs +41 -13
  135. package/esm2022/layouts/lib/widgets/checkbox/checkbox-widget-column.component.mjs +6 -6
  136. package/esm2022/layouts/lib/widgets/checkbox/checkbox-widget-edit.component.mjs +3 -3
  137. package/esm2022/layouts/lib/widgets/checkbox/checkbox-widget-view.component.mjs +5 -5
  138. package/esm2022/layouts/lib/widgets/common-widget-filter/boolean-widget-filter.component.mjs +4 -4
  139. package/esm2022/layouts/lib/widgets/common-widget-filter/number-widget-filter.component.mjs +3 -3
  140. package/esm2022/layouts/lib/widgets/common-widget-filter/string-widget-filter.component.mjs +3 -3
  141. package/esm2022/layouts/lib/widgets/common-widgets.module.mjs +32 -7
  142. package/esm2022/layouts/lib/widgets/dateTime/dateTime-widget-column.component.mjs +7 -7
  143. package/esm2022/layouts/lib/widgets/dateTime/dateTime-widget-edit.component.mjs +12 -9
  144. package/esm2022/layouts/lib/widgets/dateTime/dateTime-widget-filter.component.mjs +10 -26
  145. package/esm2022/layouts/lib/widgets/dateTime/dateTime-widget-view.component.mjs +6 -6
  146. package/esm2022/layouts/lib/widgets/email/email-widget-column.component.mjs +7 -7
  147. package/esm2022/layouts/lib/widgets/email/email-widget-edit.component.mjs +5 -5
  148. package/esm2022/layouts/lib/widgets/email/email-widget-view.component.mjs +5 -5
  149. package/esm2022/layouts/lib/widgets/file/file-widget-column.component.mjs +6 -6
  150. package/esm2022/layouts/lib/widgets/file/file-widget-edit.component.mjs +5 -5
  151. package/esm2022/layouts/lib/widgets/file/file-widget-filter.component.mjs +5 -5
  152. package/esm2022/layouts/lib/widgets/file/file-widget-view.component.mjs +5 -5
  153. package/esm2022/layouts/lib/widgets/gallery/gallery-widget-edit.component.mjs +5 -5
  154. package/esm2022/layouts/lib/widgets/gallery/gallery-widget-filter.component.mjs +5 -5
  155. package/esm2022/layouts/lib/widgets/gallery/gallery-widget-view.component.mjs +6 -6
  156. package/esm2022/layouts/lib/widgets/lookup/lookup-widget-column.component.mjs +6 -6
  157. package/esm2022/layouts/lib/widgets/lookup/lookup-widget-edit.component.mjs +5 -5
  158. package/esm2022/layouts/lib/widgets/lookup/lookup-widget-filter.component.mjs +10 -34
  159. package/esm2022/layouts/lib/widgets/lookup/lookup-widget-view.component.mjs +5 -5
  160. package/esm2022/layouts/lib/widgets/map/map-widget-edit.component.mjs +3 -3
  161. package/esm2022/layouts/lib/widgets/map/map-widget-view.component.mjs +5 -5
  162. package/esm2022/layouts/lib/widgets/messenger/messenger-widget-column.component.mjs +7 -7
  163. package/esm2022/layouts/lib/widgets/messenger/messenger-widget-edit.component.mjs +5 -5
  164. package/esm2022/layouts/lib/widgets/messenger/messenger-widget-view.component.mjs +5 -5
  165. package/esm2022/layouts/lib/widgets/number/number-widget-edit.component.mjs +3 -3
  166. package/esm2022/layouts/lib/widgets/number/number-widget-view.component.mjs +6 -6
  167. package/esm2022/layouts/lib/widgets/password/change-password.component.mjs +5 -5
  168. package/esm2022/layouts/lib/widgets/password/password-widget-column.component.mjs +10 -20
  169. package/esm2022/layouts/lib/widgets/password/password-widget-edit.component.mjs +17 -10
  170. package/esm2022/layouts/lib/widgets/password/password-widget-view.component.mjs +5 -5
  171. package/esm2022/layouts/lib/widgets/phone/phone-widget-column.component.mjs +7 -7
  172. package/esm2022/layouts/lib/widgets/phone/phone-widget-edit.component.mjs +8 -92
  173. package/esm2022/layouts/lib/widgets/phone/phone-widget-view.component.mjs +5 -5
  174. package/esm2022/layouts/lib/widgets/rich-text/rich-text-widget-column.component.mjs +9 -17
  175. package/esm2022/layouts/lib/widgets/rich-text/rich-text-widget-edit.component.mjs +3 -3
  176. package/esm2022/layouts/lib/widgets/rich-text/rich-text-widget-view.component.mjs +5 -5
  177. package/esm2022/layouts/lib/widgets/selection-list/selection-list-widget-column.component.mjs +6 -6
  178. package/esm2022/layouts/lib/widgets/selection-list/selection-list-widget-edit.component.mjs +28 -28
  179. package/esm2022/layouts/lib/widgets/selection-list/selection-list-widget-filter.component.mjs +6 -6
  180. package/esm2022/layouts/lib/widgets/selection-list/selection-list-widget-view.component.mjs +6 -6
  181. package/esm2022/layouts/lib/widgets/signature-pad/signature-pad-widget-edit.component.mjs +5 -5
  182. package/esm2022/layouts/lib/widgets/signature-pad/signature-pad-widget-view.component.mjs +5 -5
  183. package/esm2022/layouts/lib/widgets/text/largetext-widget-edit.component.mjs +3 -3
  184. package/esm2022/layouts/lib/widgets/text/text-widget-column.component.mjs +10 -11
  185. package/esm2022/layouts/lib/widgets/text/text-widget-edit.component.mjs +5 -5
  186. package/esm2022/layouts/lib/widgets/text/text-widget-view.component.mjs +5 -5
  187. package/esm2022/layouts/lib/widgets/toggle/toggle-widget-column.component.mjs +6 -6
  188. package/esm2022/layouts/lib/widgets/toggle/toggle-widget-edit.component.mjs +3 -3
  189. package/esm2022/layouts/lib/widgets/toggle/toggle-widget-view.component.mjs +5 -5
  190. package/esm2022/mocks/lib/mocks.module.mjs +4 -4
  191. package/esm2022/mocks/lib/services/mocker.service.mjs +8 -18
  192. package/esm2022/mocks/lib/storage/storage.mock.service.mjs +6 -9
  193. package/esm2022/native/lib/native.module.mjs +4 -4
  194. package/esm2022/native/lib/native.service.mjs +3 -3
  195. package/esm2022/schema/index.mjs +2 -2
  196. package/esm2022/schema/lib/schema-registery.service.mjs +4 -4
  197. package/esm2022/schema/lib/schema.module.mjs +4 -4
  198. package/esm2022/schema/lib/schema.types.mjs +2 -0
  199. package/esm2022/schema/lib/widget/widget-base.mjs +14 -11
  200. package/esm2022/schema/lib/widget/widget-column-renderer.mjs +36 -17
  201. package/esm2022/schema/lib/widget/widget-filter-renderer.mjs +3 -3
  202. package/esm2022/schema/lib/widget/widget-renderer.mjs +7 -7
  203. package/esm2022/schema/lib/widget/widget-token.mjs +1 -1
  204. package/esm2022/widgets/acorex-platform-widgets.mjs +5 -0
  205. package/esm2022/widgets/index.mjs +2 -0
  206. package/esm2022/widgets/lib/editors/checkbox/checkbox-widget-edit.component.mjs +45 -0
  207. package/esm2022/widgets/lib/editors/checkbox/checkbox-widget.config.mjs +9 -0
  208. package/esm2022/widgets/lib/editors/checkbox/index.mjs +3 -0
  209. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget-column.component.mjs +19 -0
  210. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget-designer.component.mjs +19 -0
  211. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget-edit.component.mjs +113 -0
  212. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget-filter.component.mjs +20 -0
  213. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget-print.component.mjs +19 -0
  214. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget-view.component.mjs +45 -0
  215. package/esm2022/widgets/lib/editors/date-time-box-widget/date-time-box-widget.config.mjs +24 -0
  216. package/esm2022/widgets/lib/editors/date-time-box-widget/index.mjs +8 -0
  217. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget-column.component.mjs +19 -0
  218. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget-designer.component.mjs +19 -0
  219. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget-edit.component.mjs +196 -0
  220. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget-filter.component.mjs +20 -0
  221. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget-print.component.mjs +19 -0
  222. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget-view.component.mjs +111 -0
  223. package/esm2022/widgets/lib/editors/email-box-widget/email-box-widget.config.mjs +24 -0
  224. package/esm2022/widgets/lib/editors/email-box-widget/index.mjs +8 -0
  225. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget-column.component.mjs +19 -0
  226. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget-designer.component.mjs +19 -0
  227. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget-edit.component.mjs +189 -0
  228. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget-filter.component.mjs +20 -0
  229. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget-print.component.mjs +19 -0
  230. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget-view.component.mjs +147 -0
  231. package/esm2022/widgets/lib/editors/file-box-widget/file-box-widget.config.mjs +24 -0
  232. package/esm2022/widgets/lib/editors/file-box-widget/index.mjs +8 -0
  233. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-column.component.mjs +19 -0
  234. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-designer.component.mjs +19 -0
  235. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-edit.component.mjs +172 -0
  236. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-filter.component.mjs +20 -0
  237. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-print.component.mjs +19 -0
  238. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-types.mjs +2 -0
  239. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget-view.component.mjs +159 -0
  240. package/esm2022/widgets/lib/editors/gallery-widget/gallery-widget.config.mjs +24 -0
  241. package/esm2022/widgets/lib/editors/gallery-widget/index.mjs +8 -0
  242. package/esm2022/widgets/lib/editors/map-box-widget/index.mjs +8 -0
  243. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget-column.component.mjs +19 -0
  244. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget-designer.component.mjs +19 -0
  245. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget-edit.component.mjs +92 -0
  246. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget-filter.component.mjs +20 -0
  247. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget-print.component.mjs +19 -0
  248. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget-view.component.mjs +65 -0
  249. package/esm2022/widgets/lib/editors/map-box-widget/map-box-widget.config.mjs +24 -0
  250. package/esm2022/widgets/lib/editors/number-box-widget/index.mjs +8 -0
  251. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget-column.component.mjs +19 -0
  252. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget-designer.component.mjs +19 -0
  253. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget-edit.component.mjs +135 -0
  254. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget-filter.component.mjs +20 -0
  255. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget-print.component.mjs +19 -0
  256. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget-view.component.mjs +39 -0
  257. package/esm2022/widgets/lib/editors/number-box-widget/number-box-widget.config.mjs +24 -0
  258. package/esm2022/widgets/lib/editors/password-box-widget/index.mjs +8 -0
  259. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget-column.component.mjs +19 -0
  260. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget-designer.component.mjs +19 -0
  261. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget-edit.component.mjs +39 -0
  262. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget-filter.component.mjs +20 -0
  263. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget-print.component.mjs +19 -0
  264. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget-view.component.mjs +73 -0
  265. package/esm2022/widgets/lib/editors/password-box-widget/password-box-widget.config.mjs +24 -0
  266. package/esm2022/widgets/lib/editors/phone-box-widget/index.mjs +8 -0
  267. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget-column.component.mjs +19 -0
  268. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget-designer.component.mjs +19 -0
  269. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget-edit.component.mjs +190 -0
  270. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget-filter.component.mjs +20 -0
  271. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget-print.component.mjs +19 -0
  272. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget-view.component.mjs +113 -0
  273. package/esm2022/widgets/lib/editors/phone-box-widget/phone-box-widget.config.mjs +24 -0
  274. package/esm2022/widgets/lib/editors/rich-text-widget/index.mjs +8 -0
  275. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget-column.component.mjs +19 -0
  276. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget-designer.component.mjs +19 -0
  277. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget-edit.component.mjs +63 -0
  278. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget-filter.component.mjs +20 -0
  279. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget-print.component.mjs +19 -0
  280. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget-view.component.mjs +33 -0
  281. package/esm2022/widgets/lib/editors/rich-text-widget/rich-text-widget.config.mjs +24 -0
  282. package/esm2022/widgets/lib/editors/select-box-widget/index.mjs +8 -0
  283. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget-column.component.mjs +19 -0
  284. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget-designer.component.mjs +19 -0
  285. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget-edit.component.mjs +80 -0
  286. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget-filter.component.mjs +19 -0
  287. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget-print.component.mjs +19 -0
  288. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget-view.component.mjs +54 -0
  289. package/esm2022/widgets/lib/editors/select-box-widget/select-box-widget.config.mjs +24 -0
  290. package/esm2022/widgets/lib/editors/selection-list-widget/index.mjs +8 -0
  291. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget-column.component.mjs +19 -0
  292. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget-designer.component.mjs +19 -0
  293. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget-edit.component.mjs +58 -0
  294. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget-filter.component.mjs +20 -0
  295. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget-print.component.mjs +19 -0
  296. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget-view.component.mjs +19 -0
  297. package/esm2022/widgets/lib/editors/selection-list-widget/selection-list-widget.config.mjs +24 -0
  298. package/esm2022/widgets/lib/editors/signature-pad-widget/index.mjs +8 -0
  299. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget-column.component.mjs +19 -0
  300. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget-designer.component.mjs +19 -0
  301. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget-edit.component.mjs +129 -0
  302. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget-filter.component.mjs +20 -0
  303. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget-print.component.mjs +19 -0
  304. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget-view.component.mjs +41 -0
  305. package/esm2022/widgets/lib/editors/signature-pad-widget/signature-pad-widget.config.mjs +24 -0
  306. package/esm2022/widgets/lib/editors/text-box-widget/index.mjs +8 -0
  307. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget-column.component.mjs +19 -0
  308. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget-designer.component.mjs +19 -0
  309. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget-edit.component.mjs +120 -0
  310. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget-filter.component.mjs +20 -0
  311. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget-print.component.mjs +19 -0
  312. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget-view.component.mjs +39 -0
  313. package/esm2022/widgets/lib/editors/text-box-widget/text-box-widget.config.mjs +24 -0
  314. package/esm2022/widgets/lib/layout/block-widget/block-widget.component.mjs +39 -0
  315. package/esm2022/widgets/lib/layout/block-widget/block-widget.config.mjs +9 -0
  316. package/esm2022/widgets/lib/layout/block-widget/index.mjs +3 -0
  317. package/esm2022/widgets/lib/widgets.module.mjs +71 -0
  318. package/esm2022/workflow/lib/workflow-event-dispatcher.service.mjs +3 -3
  319. package/esm2022/workflow/lib/workflow-registery.service.mjs +3 -3
  320. package/esm2022/workflow/lib/workflow.module.mjs +4 -4
  321. package/esm2022/workflow/lib/workflow.service.mjs +3 -3
  322. package/esm2022/workflow/lib/workflow.types.mjs +7 -7
  323. package/fesm2022/acorex-platform-auth.mjs +311 -214
  324. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  325. package/fesm2022/acorex-platform-common.mjs +70 -244
  326. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  327. package/fesm2022/acorex-platform-core.mjs +94 -0
  328. package/fesm2022/acorex-platform-core.mjs.map +1 -0
  329. package/fesm2022/acorex-platform-layout.mjs +756 -0
  330. package/fesm2022/acorex-platform-layout.mjs.map +1 -0
  331. package/fesm2022/{acorex-platform-layouts-avatar-widget-edit.component-PZr1lXj-.mjs → acorex-platform-layouts-avatar-widget-edit.component-a_eCmVu5.mjs} +72 -14
  332. package/fesm2022/acorex-platform-layouts-avatar-widget-edit.component-a_eCmVu5.mjs.map +1 -0
  333. package/fesm2022/acorex-platform-layouts-avatar-widget-view.component-wwI7L0Kc.mjs +64 -0
  334. package/fesm2022/acorex-platform-layouts-avatar-widget-view.component-wwI7L0Kc.mjs.map +1 -0
  335. package/fesm2022/{acorex-platform-layouts-boolean-widget-filter.component-H056Q5Gz.mjs → acorex-platform-layouts-boolean-widget-filter.component-CHW4rgxA.mjs} +6 -6
  336. package/fesm2022/{acorex-platform-layouts-boolean-widget-filter.component-H056Q5Gz.mjs.map → acorex-platform-layouts-boolean-widget-filter.component-CHW4rgxA.mjs.map} +1 -1
  337. package/fesm2022/{acorex-platform-layouts-change-password.component-QMAm6dxN.mjs → acorex-platform-layouts-change-password.component-vUZy2W_B.mjs} +7 -7
  338. package/fesm2022/{acorex-platform-layouts-change-password.component-QMAm6dxN.mjs.map → acorex-platform-layouts-change-password.component-vUZy2W_B.mjs.map} +1 -1
  339. package/fesm2022/{acorex-platform-layouts-checkbox-widget-column.component-vRJI5S-w.mjs → acorex-platform-layouts-checkbox-widget-column.component-BNEtAS7g.mjs} +6 -6
  340. package/fesm2022/acorex-platform-layouts-checkbox-widget-column.component-BNEtAS7g.mjs.map +1 -0
  341. package/fesm2022/{acorex-platform-layouts-checkbox-widget-edit.component-P4cD_Nwg.mjs → acorex-platform-layouts-checkbox-widget-edit.component-Cqn_QBcv.mjs} +4 -4
  342. package/fesm2022/{acorex-platform-layouts-checkbox-widget-edit.component-P4cD_Nwg.mjs.map → acorex-platform-layouts-checkbox-widget-edit.component-Cqn_QBcv.mjs.map} +1 -1
  343. package/fesm2022/{acorex-platform-layouts-checkbox-widget-view.component-m6bF8XFR.mjs → acorex-platform-layouts-checkbox-widget-view.component-DQLggJ9x.mjs} +5 -5
  344. package/fesm2022/acorex-platform-layouts-checkbox-widget-view.component-DQLggJ9x.mjs.map +1 -0
  345. package/fesm2022/{acorex-platform-layouts-dateTime-widget-column.component-qeQRJePy.mjs → acorex-platform-layouts-dateTime-widget-column.component-D0eNN66F.mjs} +7 -7
  346. package/fesm2022/acorex-platform-layouts-dateTime-widget-column.component-D0eNN66F.mjs.map +1 -0
  347. package/fesm2022/{acorex-platform-layouts-dateTime-widget-edit.component-zeJXGXY8.mjs → acorex-platform-layouts-dateTime-widget-edit.component-BLqAWdRX.mjs} +13 -10
  348. package/fesm2022/acorex-platform-layouts-dateTime-widget-edit.component-BLqAWdRX.mjs.map +1 -0
  349. package/fesm2022/{acorex-platform-layouts-dateTime-widget-filter.component-DJ6esclU.mjs → acorex-platform-layouts-dateTime-widget-filter.component-tvc-cTos.mjs} +10 -26
  350. package/fesm2022/acorex-platform-layouts-dateTime-widget-filter.component-tvc-cTos.mjs.map +1 -0
  351. package/fesm2022/{acorex-platform-layouts-dateTime-widget-view.component-BrwycTWz.mjs → acorex-platform-layouts-dateTime-widget-view.component-CjChqiJw.mjs} +6 -6
  352. package/fesm2022/acorex-platform-layouts-dateTime-widget-view.component-CjChqiJw.mjs.map +1 -0
  353. package/fesm2022/{acorex-platform-layouts-email-widget-column.component-ac8gqsFT.mjs → acorex-platform-layouts-email-widget-column.component-CUnxKERe.mjs} +7 -7
  354. package/fesm2022/acorex-platform-layouts-email-widget-column.component-CUnxKERe.mjs.map +1 -0
  355. package/fesm2022/{acorex-platform-layouts-email-widget-edit.component-m2dI7y9X.mjs → acorex-platform-layouts-email-widget-edit.component-DqnNien2.mjs} +8 -8
  356. package/fesm2022/{acorex-platform-layouts-email-widget-edit.component-m2dI7y9X.mjs.map → acorex-platform-layouts-email-widget-edit.component-DqnNien2.mjs.map} +1 -1
  357. package/fesm2022/{acorex-platform-layouts-email-widget-view.component-XrV8va7z.mjs → acorex-platform-layouts-email-widget-view.component-BZsLYW2w.mjs} +5 -5
  358. package/fesm2022/{acorex-platform-layouts-email-widget-view.component-XrV8va7z.mjs.map → acorex-platform-layouts-email-widget-view.component-BZsLYW2w.mjs.map} +1 -1
  359. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-8rtifIvM.mjs → acorex-platform-layouts-entity-create-view.component-C3TUCnB2.mjs} +6 -6
  360. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-8rtifIvM.mjs.map → acorex-platform-layouts-entity-create-view.component-C3TUCnB2.mjs.map} +1 -1
  361. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-VeTkP3-n.mjs → acorex-platform-layouts-entity-modify-view.component-BnSfJlc5.mjs} +6 -6
  362. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-VeTkP3-n.mjs.map → acorex-platform-layouts-entity-modify-view.component-BnSfJlc5.mjs.map} +1 -1
  363. package/fesm2022/{acorex-platform-layouts-file-widget-column.component-v7kAdIQ9.mjs → acorex-platform-layouts-file-widget-column.component-f54Z9E5C.mjs} +6 -6
  364. package/fesm2022/acorex-platform-layouts-file-widget-column.component-f54Z9E5C.mjs.map +1 -0
  365. package/fesm2022/{acorex-platform-layouts-file-widget-edit.component-Wrq7ZL9R.mjs → acorex-platform-layouts-file-widget-edit.component-CW9ESi46.mjs} +6 -6
  366. package/fesm2022/{acorex-platform-layouts-file-widget-edit.component-Wrq7ZL9R.mjs.map → acorex-platform-layouts-file-widget-edit.component-CW9ESi46.mjs.map} +1 -1
  367. package/fesm2022/{acorex-platform-layouts-file-widget-filter.component-1-NJh38j.mjs → acorex-platform-layouts-file-widget-filter.component-K3mC1xLX.mjs} +5 -5
  368. package/fesm2022/{acorex-platform-layouts-file-widget-filter.component-1-NJh38j.mjs.map → acorex-platform-layouts-file-widget-filter.component-K3mC1xLX.mjs.map} +1 -1
  369. package/fesm2022/{acorex-platform-layouts-file-widget-view.component-mXBrKX0K.mjs → acorex-platform-layouts-file-widget-view.component-DVlbi33v.mjs} +7 -7
  370. package/fesm2022/acorex-platform-layouts-file-widget-view.component-DVlbi33v.mjs.map +1 -0
  371. package/fesm2022/{acorex-platform-layouts-gallery-widget-edit.component-cWNvVwum.mjs → acorex-platform-layouts-gallery-widget-edit.component-BUlkUU5u.mjs} +6 -6
  372. package/fesm2022/{acorex-platform-layouts-gallery-widget-edit.component-cWNvVwum.mjs.map → acorex-platform-layouts-gallery-widget-edit.component-BUlkUU5u.mjs.map} +1 -1
  373. package/fesm2022/{acorex-platform-layouts-gallery-widget-filter.component-OCz0hj5i.mjs → acorex-platform-layouts-gallery-widget-filter.component-BYFQSXOV.mjs} +5 -5
  374. package/fesm2022/{acorex-platform-layouts-gallery-widget-filter.component-OCz0hj5i.mjs.map → acorex-platform-layouts-gallery-widget-filter.component-BYFQSXOV.mjs.map} +1 -1
  375. package/fesm2022/{acorex-platform-layouts-gallery-widget-view.component-xU52uaP0.mjs → acorex-platform-layouts-gallery-widget-view.component-BqVO3rDH.mjs} +7 -7
  376. package/fesm2022/acorex-platform-layouts-gallery-widget-view.component-BqVO3rDH.mjs.map +1 -0
  377. package/fesm2022/{acorex-platform-layouts-largetext-widget-edit.component-Um_eBRFi.mjs → acorex-platform-layouts-largetext-widget-edit.component-CmH9daul.mjs} +4 -4
  378. package/fesm2022/{acorex-platform-layouts-largetext-widget-edit.component-Um_eBRFi.mjs.map → acorex-platform-layouts-largetext-widget-edit.component-CmH9daul.mjs.map} +1 -1
  379. package/fesm2022/{acorex-platform-layouts-lookup-widget-column.component-Ts0MJe8O.mjs → acorex-platform-layouts-lookup-widget-column.component-C4Bb5AYW.mjs} +6 -6
  380. package/fesm2022/acorex-platform-layouts-lookup-widget-column.component-C4Bb5AYW.mjs.map +1 -0
  381. package/fesm2022/{acorex-platform-layouts-lookup-widget-edit.component-l5nSr9Cm.mjs → acorex-platform-layouts-lookup-widget-edit.component-B2Qyoi4Q.mjs} +8 -7
  382. package/fesm2022/acorex-platform-layouts-lookup-widget-edit.component-B2Qyoi4Q.mjs.map +1 -0
  383. package/fesm2022/{acorex-platform-layouts-lookup-widget-filter.component-gp5skvmz.mjs → acorex-platform-layouts-lookup-widget-filter.component-JJzSun3D.mjs} +14 -37
  384. package/fesm2022/acorex-platform-layouts-lookup-widget-filter.component-JJzSun3D.mjs.map +1 -0
  385. package/fesm2022/{acorex-platform-layouts-lookup-widget-view.component-ftFXFj6k.mjs → acorex-platform-layouts-lookup-widget-view.component-Bmp_zVcQ.mjs} +5 -5
  386. package/fesm2022/acorex-platform-layouts-lookup-widget-view.component-Bmp_zVcQ.mjs.map +1 -0
  387. package/fesm2022/{acorex-platform-layouts-map-widget-edit.component-SOQvPhmX.mjs → acorex-platform-layouts-map-widget-edit.component-EWlgQnx5.mjs} +4 -4
  388. package/fesm2022/{acorex-platform-layouts-map-widget-edit.component-SOQvPhmX.mjs.map → acorex-platform-layouts-map-widget-edit.component-EWlgQnx5.mjs.map} +1 -1
  389. package/fesm2022/{acorex-platform-layouts-map-widget-view.component-1Lj9efbd.mjs → acorex-platform-layouts-map-widget-view.component-cB5Mq7G7.mjs} +5 -5
  390. package/fesm2022/acorex-platform-layouts-map-widget-view.component-cB5Mq7G7.mjs.map +1 -0
  391. package/fesm2022/{acorex-platform-layouts-messenger-widget-column.component-W7ZY-W84.mjs → acorex-platform-layouts-messenger-widget-column.component-DWgWrdmz.mjs} +7 -7
  392. package/fesm2022/acorex-platform-layouts-messenger-widget-column.component-DWgWrdmz.mjs.map +1 -0
  393. package/fesm2022/{acorex-platform-layouts-messenger-widget-edit.component-dAX8nirB.mjs → acorex-platform-layouts-messenger-widget-edit.component-C7VOe49a.mjs} +8 -8
  394. package/fesm2022/acorex-platform-layouts-messenger-widget-edit.component-C7VOe49a.mjs.map +1 -0
  395. package/fesm2022/{acorex-platform-layouts-messenger-widget-view.component-9TJiFdq-.mjs → acorex-platform-layouts-messenger-widget-view.component-uciMJWYn.mjs} +5 -5
  396. package/fesm2022/acorex-platform-layouts-messenger-widget-view.component-uciMJWYn.mjs.map +1 -0
  397. package/fesm2022/{acorex-platform-layouts-number-widget-edit.component-DDi-o_Zn.mjs → acorex-platform-layouts-number-widget-edit.component-CXTwKvM4.mjs} +4 -4
  398. package/fesm2022/{acorex-platform-layouts-number-widget-edit.component-DDi-o_Zn.mjs.map → acorex-platform-layouts-number-widget-edit.component-CXTwKvM4.mjs.map} +1 -1
  399. package/fesm2022/{acorex-platform-layouts-number-widget-filter.component-DPGSzdNm.mjs → acorex-platform-layouts-number-widget-filter.component-ARH7BdkE.mjs} +6 -6
  400. package/fesm2022/{acorex-platform-layouts-number-widget-filter.component-DPGSzdNm.mjs.map → acorex-platform-layouts-number-widget-filter.component-ARH7BdkE.mjs.map} +1 -1
  401. package/fesm2022/{acorex-platform-layouts-number-widget-view.component-hqkAR0LG.mjs → acorex-platform-layouts-number-widget-view.component-B0duuEhX.mjs} +6 -6
  402. package/fesm2022/acorex-platform-layouts-number-widget-view.component-B0duuEhX.mjs.map +1 -0
  403. package/fesm2022/{acorex-platform-layouts-password-widget-column.component-ic1jykZL.mjs → acorex-platform-layouts-password-widget-column.component-Cav_zCe4.mjs} +10 -20
  404. package/fesm2022/acorex-platform-layouts-password-widget-column.component-Cav_zCe4.mjs.map +1 -0
  405. package/fesm2022/acorex-platform-layouts-password-widget-edit.component-Dm2E5zA_.mjs +44 -0
  406. package/fesm2022/acorex-platform-layouts-password-widget-edit.component-Dm2E5zA_.mjs.map +1 -0
  407. package/fesm2022/{acorex-platform-layouts-password-widget-view.component-E2vtPKRO.mjs → acorex-platform-layouts-password-widget-view.component-BaipF6fT.mjs} +8 -8
  408. package/fesm2022/{acorex-platform-layouts-password-widget-view.component-E2vtPKRO.mjs.map → acorex-platform-layouts-password-widget-view.component-BaipF6fT.mjs.map} +1 -1
  409. package/fesm2022/{acorex-platform-layouts-phone-widget-column.component-s04WZfzv.mjs → acorex-platform-layouts-phone-widget-column.component-BtZ5Qke0.mjs} +7 -7
  410. package/fesm2022/acorex-platform-layouts-phone-widget-column.component-BtZ5Qke0.mjs.map +1 -0
  411. package/fesm2022/{acorex-platform-layouts-phone-widget-edit.component-MKzlZ0_B.mjs → acorex-platform-layouts-phone-widget-edit.component-BugCYS-l.mjs} +11 -95
  412. package/fesm2022/acorex-platform-layouts-phone-widget-edit.component-BugCYS-l.mjs.map +1 -0
  413. package/fesm2022/{acorex-platform-layouts-phone-widget-view.component-NEO22XO7.mjs → acorex-platform-layouts-phone-widget-view.component-C7EN8qDk.mjs} +5 -5
  414. package/fesm2022/{acorex-platform-layouts-phone-widget-view.component-NEO22XO7.mjs.map → acorex-platform-layouts-phone-widget-view.component-C7EN8qDk.mjs.map} +1 -1
  415. package/fesm2022/{acorex-platform-layouts-rich-text-widget-column.component-P0YzXTIB.mjs → acorex-platform-layouts-rich-text-widget-column.component-B99s2Zhi.mjs} +11 -19
  416. package/fesm2022/acorex-platform-layouts-rich-text-widget-column.component-B99s2Zhi.mjs.map +1 -0
  417. package/fesm2022/{acorex-platform-layouts-rich-text-widget-edit.component-ro2yg7PR.mjs → acorex-platform-layouts-rich-text-widget-edit.component-Di1P6EQV.mjs} +4 -4
  418. package/fesm2022/{acorex-platform-layouts-rich-text-widget-edit.component-ro2yg7PR.mjs.map → acorex-platform-layouts-rich-text-widget-edit.component-Di1P6EQV.mjs.map} +1 -1
  419. package/fesm2022/{acorex-platform-layouts-rich-text-widget-view.component--Rzxm2a6.mjs → acorex-platform-layouts-rich-text-widget-view.component-B_QG0YJc.mjs} +5 -5
  420. package/fesm2022/acorex-platform-layouts-rich-text-widget-view.component-B_QG0YJc.mjs.map +1 -0
  421. package/fesm2022/{acorex-platform-layouts-selection-list-widget-column.component-9FTkDGmq.mjs → acorex-platform-layouts-selection-list-widget-column.component-Cx9QqR9f.mjs} +6 -6
  422. package/fesm2022/acorex-platform-layouts-selection-list-widget-column.component-Cx9QqR9f.mjs.map +1 -0
  423. package/fesm2022/{acorex-platform-layouts-selection-list-widget-edit.component-FpOQ12Ie.mjs → acorex-platform-layouts-selection-list-widget-edit.component-DU-U-Af-.mjs} +28 -28
  424. package/fesm2022/acorex-platform-layouts-selection-list-widget-edit.component-DU-U-Af-.mjs.map +1 -0
  425. package/fesm2022/{acorex-platform-layouts-selection-list-widget-filter.component-hGk-ZZ78.mjs → acorex-platform-layouts-selection-list-widget-filter.component-B8y8heXR.mjs} +6 -6
  426. package/fesm2022/acorex-platform-layouts-selection-list-widget-filter.component-B8y8heXR.mjs.map +1 -0
  427. package/fesm2022/{acorex-platform-layouts-selection-list-widget-view.component-s9xq___Y.mjs → acorex-platform-layouts-selection-list-widget-view.component-BDupWZy-.mjs} +6 -6
  428. package/fesm2022/acorex-platform-layouts-selection-list-widget-view.component-BDupWZy-.mjs.map +1 -0
  429. package/fesm2022/{acorex-platform-layouts-signature-pad-widget-edit.component-W28Uk9zO.mjs → acorex-platform-layouts-signature-pad-widget-edit.component-bEDsl8mg.mjs} +7 -7
  430. package/fesm2022/{acorex-platform-layouts-signature-pad-widget-edit.component-W28Uk9zO.mjs.map → acorex-platform-layouts-signature-pad-widget-edit.component-bEDsl8mg.mjs.map} +1 -1
  431. package/fesm2022/{acorex-platform-layouts-signature-pad-widget-view.component-R40Ml757.mjs → acorex-platform-layouts-signature-pad-widget-view.component-DB903O2F.mjs} +5 -5
  432. package/fesm2022/acorex-platform-layouts-signature-pad-widget-view.component-DB903O2F.mjs.map +1 -0
  433. package/fesm2022/{acorex-platform-layouts-string-widget-filter.component-4oZ6BVis.mjs → acorex-platform-layouts-string-widget-filter.component-D3ZxVk6S.mjs} +7 -7
  434. package/fesm2022/{acorex-platform-layouts-string-widget-filter.component-4oZ6BVis.mjs.map → acorex-platform-layouts-string-widget-filter.component-D3ZxVk6S.mjs.map} +1 -1
  435. package/fesm2022/{acorex-platform-layouts-text-widget-column.component-qhh6MT79.mjs → acorex-platform-layouts-text-widget-column.component-D8WDAbQB.mjs} +10 -11
  436. package/fesm2022/acorex-platform-layouts-text-widget-column.component-D8WDAbQB.mjs.map +1 -0
  437. package/fesm2022/{acorex-platform-layouts-text-widget-edit.component-TC127Dq8.mjs → acorex-platform-layouts-text-widget-edit.component-BrDbNXgJ.mjs} +6 -6
  438. package/fesm2022/{acorex-platform-layouts-text-widget-edit.component-TC127Dq8.mjs.map → acorex-platform-layouts-text-widget-edit.component-BrDbNXgJ.mjs.map} +1 -1
  439. package/fesm2022/{acorex-platform-layouts-text-widget-view.component-65eOj0qR.mjs → acorex-platform-layouts-text-widget-view.component-XHN41M3T.mjs} +5 -5
  440. package/fesm2022/acorex-platform-layouts-text-widget-view.component-XHN41M3T.mjs.map +1 -0
  441. package/fesm2022/{acorex-platform-layouts-toggle-widget-column.component-uxOXR-bL.mjs → acorex-platform-layouts-toggle-widget-column.component-BjIyTuZj.mjs} +6 -6
  442. package/fesm2022/acorex-platform-layouts-toggle-widget-column.component-BjIyTuZj.mjs.map +1 -0
  443. package/fesm2022/{acorex-platform-layouts-toggle-widget-edit.component-R44L1pgJ.mjs → acorex-platform-layouts-toggle-widget-edit.component-BKbBile6.mjs} +4 -4
  444. package/fesm2022/{acorex-platform-layouts-toggle-widget-edit.component-R44L1pgJ.mjs.map → acorex-platform-layouts-toggle-widget-edit.component-BKbBile6.mjs.map} +1 -1
  445. package/fesm2022/{acorex-platform-layouts-toggle-widget-view.component-DTOeAUiy.mjs → acorex-platform-layouts-toggle-widget-view.component-CyjhQSiV.mjs} +5 -5
  446. package/fesm2022/{acorex-platform-layouts-toggle-widget-view.component-DTOeAUiy.mjs.map → acorex-platform-layouts-toggle-widget-view.component-CyjhQSiV.mjs.map} +1 -1
  447. package/fesm2022/acorex-platform-layouts.mjs +565 -422
  448. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  449. package/fesm2022/acorex-platform-mocks.mjs +16 -29
  450. package/fesm2022/acorex-platform-mocks.mjs.map +1 -1
  451. package/fesm2022/acorex-platform-native.mjs +7 -7
  452. package/fesm2022/acorex-platform-schema.mjs +63 -41
  453. package/fesm2022/acorex-platform-schema.mjs.map +1 -1
  454. package/fesm2022/acorex-platform-widgets.mjs +3966 -0
  455. package/fesm2022/acorex-platform-widgets.mjs.map +1 -0
  456. package/fesm2022/acorex-platform-workflow.mjs +19 -19
  457. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  458. package/layout/README.md +4 -0
  459. package/layout/index.d.ts +2 -0
  460. package/layout/lib/builder/builder.module.d.ts +23 -0
  461. package/layout/lib/builder/context.service.d.ts +17 -0
  462. package/layout/lib/builder/index.d.ts +7 -0
  463. package/layout/lib/builder/widget-column-renderer.d.ts +30 -0
  464. package/layout/lib/builder/widget-container.d.ts +13 -0
  465. package/layout/lib/builder/widget-registery.service.d.ts +10 -0
  466. package/layout/lib/builder/widget-renderer.d.ts +41 -0
  467. package/layout/lib/builder/widget.types.d.ts +55 -0
  468. package/layouts/lib/admin/admin-root-layout/admin-root-layout.module.d.ts +1 -1
  469. package/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.d.ts +3 -5
  470. package/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.d.ts +7 -2
  471. package/layouts/lib/admin/entity-layout/entity-list-view/list-view.config.d.ts +2 -0
  472. package/layouts/lib/admin/entity-layout/entity-list-view/list-view.module.d.ts +2 -1
  473. package/layouts/lib/admin/entity-layout/entity-quick-view/entity-quick-view.component.d.ts +3 -0
  474. package/layouts/lib/admin/entity-layout/index.d.ts +1 -0
  475. package/layouts/lib/admin/entity-layout/workflows/index.d.ts +3 -0
  476. package/layouts/lib/admin/entity-layout/workflows/show-details.workflow.d.ts +2 -0
  477. package/layouts/lib/admin/entity-layout/workflows/show-list.workflow.d.ts +2 -0
  478. package/layouts/lib/admin/entity-layout/workflows/show-quick-view.workflow.d.ts +2 -0
  479. package/layouts/lib/admin/store/admin-layout.actions.d.ts +8 -8
  480. package/layouts/lib/admin/store/admin-layout.effects.d.ts +1 -1
  481. package/layouts/lib/admin/store/admin-layout.reducers.d.ts +2 -2
  482. package/layouts/lib/layout.module.d.ts +1 -1
  483. package/layouts/lib/shared/components/error-401/error-401.component.d.ts +1 -4
  484. package/layouts/lib/shared/components/index.d.ts +1 -0
  485. package/layouts/lib/shared/components/slots/theme-slot.component.d.ts +1 -1
  486. package/layouts/lib/shared/entity/entity.class.d.ts +10 -2
  487. package/layouts/lib/shared/workflows/common.workflow.d.ts +9 -0
  488. package/layouts/lib/themes/default/entity-layouts/entity-details-view/entity-details-view.component.d.ts +11 -0
  489. package/layouts/lib/themes/default/entity-layouts/entity-details.viewmodel.d.ts +34 -0
  490. package/layouts/lib/themes/default/index.d.ts +2 -0
  491. package/layouts/lib/widgets/avatar/avatar-widget-edit.component.d.ts +8 -2
  492. package/layouts/lib/widgets/avatar/avatar-widget-view.component.d.ts +6 -1
  493. package/layouts/lib/widgets/checkbox/checkbox-widget-column.component.d.ts +1 -1
  494. package/layouts/lib/widgets/dateTime/dateTime-widget-column.component.d.ts +1 -1
  495. package/layouts/lib/widgets/dateTime/dateTime-widget-edit.component.d.ts +4 -2
  496. package/layouts/lib/widgets/email/email-widget-column.component.d.ts +1 -1
  497. package/layouts/lib/widgets/file/file-widget-column.component.d.ts +1 -1
  498. package/layouts/lib/widgets/lookup/lookup-widget-column.component.d.ts +1 -1
  499. package/layouts/lib/widgets/messenger/messenger-widget-column.component.d.ts +1 -1
  500. package/layouts/lib/widgets/number/number-widget-view.component.d.ts +1 -1
  501. package/layouts/lib/widgets/password/password-widget-column.component.d.ts +2 -2
  502. package/layouts/lib/widgets/phone/phone-widget-column.component.d.ts +1 -1
  503. package/layouts/lib/widgets/rich-text/rich-text-widget-column.component.d.ts +1 -1
  504. package/layouts/lib/widgets/selection-list/selection-list-widget-column.component.d.ts +1 -1
  505. package/layouts/lib/widgets/selection-list/selection-list-widget-edit.component.d.ts +2 -0
  506. package/layouts/lib/widgets/selection-list/selection-list-widget-filter.component.d.ts +1 -1
  507. package/layouts/lib/widgets/selection-list/selection-list-widget-view.component.d.ts +1 -1
  508. package/layouts/lib/widgets/text/text-widget-column.component.d.ts +2 -1
  509. package/layouts/lib/widgets/toggle/toggle-widget-column.component.d.ts +1 -1
  510. package/mocks/lib/storage/storage.mock.service.d.ts +1 -1
  511. package/package.json +21 -3
  512. package/schema/index.d.ts +1 -1
  513. package/schema/lib/schema-registery.service.d.ts +1 -1
  514. package/schema/lib/{schema.d.ts → schema.types.d.ts} +1 -6
  515. package/schema/lib/widget/widget-base.d.ts +3 -1
  516. package/schema/lib/widget/widget-column-renderer.d.ts +10 -3
  517. package/schema/lib/widget/widget-token.d.ts +2 -1
  518. package/widgets/README.md +4 -0
  519. package/widgets/index.d.ts +1 -0
  520. package/widgets/lib/editors/checkbox/checkbox-widget-edit.component.d.ts +13 -0
  521. package/widgets/lib/editors/checkbox/checkbox-widget.config.d.ts +2 -0
  522. package/widgets/lib/editors/checkbox/index.d.ts +2 -0
  523. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget-column.component.d.ts +6 -0
  524. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget-designer.component.d.ts +6 -0
  525. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget-edit.component.d.ts +20 -0
  526. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget-filter.component.d.ts +6 -0
  527. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget-print.component.d.ts +6 -0
  528. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget-view.component.d.ts +11 -0
  529. package/widgets/lib/editors/date-time-box-widget/date-time-box-widget.config.d.ts +2 -0
  530. package/widgets/lib/editors/date-time-box-widget/index.d.ts +7 -0
  531. package/widgets/lib/editors/email-box-widget/email-box-widget-column.component.d.ts +6 -0
  532. package/widgets/lib/editors/email-box-widget/email-box-widget-designer.component.d.ts +6 -0
  533. package/widgets/lib/editors/email-box-widget/email-box-widget-edit.component.d.ts +25 -0
  534. package/widgets/lib/editors/email-box-widget/email-box-widget-filter.component.d.ts +6 -0
  535. package/widgets/lib/editors/email-box-widget/email-box-widget-print.component.d.ts +6 -0
  536. package/widgets/lib/editors/email-box-widget/email-box-widget-view.component.d.ts +12 -0
  537. package/widgets/lib/editors/email-box-widget/email-box-widget.config.d.ts +2 -0
  538. package/widgets/lib/editors/email-box-widget/index.d.ts +7 -0
  539. package/widgets/lib/editors/file-box-widget/file-box-widget-column.component.d.ts +6 -0
  540. package/widgets/lib/editors/file-box-widget/file-box-widget-designer.component.d.ts +6 -0
  541. package/widgets/lib/editors/file-box-widget/file-box-widget-edit.component.d.ts +18 -0
  542. package/widgets/lib/editors/file-box-widget/file-box-widget-filter.component.d.ts +6 -0
  543. package/widgets/lib/editors/file-box-widget/file-box-widget-print.component.d.ts +6 -0
  544. package/widgets/lib/editors/file-box-widget/file-box-widget-view.component.d.ts +17 -0
  545. package/widgets/lib/editors/file-box-widget/file-box-widget.config.d.ts +2 -0
  546. package/widgets/lib/editors/file-box-widget/index.d.ts +7 -0
  547. package/widgets/lib/editors/gallery-widget/gallery-widget-column.component.d.ts +6 -0
  548. package/widgets/lib/editors/gallery-widget/gallery-widget-designer.component.d.ts +6 -0
  549. package/widgets/lib/editors/gallery-widget/gallery-widget-edit.component.d.ts +15 -0
  550. package/widgets/lib/editors/gallery-widget/gallery-widget-filter.component.d.ts +6 -0
  551. package/widgets/lib/editors/gallery-widget/gallery-widget-print.component.d.ts +6 -0
  552. package/widgets/lib/editors/gallery-widget/gallery-widget-types.d.ts +10 -0
  553. package/widgets/lib/editors/gallery-widget/gallery-widget-view.component.d.ts +15 -0
  554. package/widgets/lib/editors/gallery-widget/gallery-widget.config.d.ts +2 -0
  555. package/widgets/lib/editors/gallery-widget/index.d.ts +7 -0
  556. package/widgets/lib/editors/map-box-widget/index.d.ts +7 -0
  557. package/widgets/lib/editors/map-box-widget/map-box-widget-column.component.d.ts +6 -0
  558. package/widgets/lib/editors/map-box-widget/map-box-widget-designer.component.d.ts +6 -0
  559. package/widgets/lib/editors/map-box-widget/map-box-widget-edit.component.d.ts +15 -0
  560. package/widgets/lib/editors/map-box-widget/map-box-widget-filter.component.d.ts +6 -0
  561. package/widgets/lib/editors/map-box-widget/map-box-widget-print.component.d.ts +6 -0
  562. package/widgets/lib/editors/map-box-widget/map-box-widget-view.component.d.ts +16 -0
  563. package/widgets/lib/editors/map-box-widget/map-box-widget.config.d.ts +2 -0
  564. package/widgets/lib/editors/number-box-widget/index.d.ts +7 -0
  565. package/widgets/lib/editors/number-box-widget/number-box-widget-column.component.d.ts +6 -0
  566. package/widgets/lib/editors/number-box-widget/number-box-widget-designer.component.d.ts +6 -0
  567. package/widgets/lib/editors/number-box-widget/number-box-widget-edit.component.d.ts +25 -0
  568. package/widgets/lib/editors/number-box-widget/number-box-widget-filter.component.d.ts +6 -0
  569. package/widgets/lib/editors/number-box-widget/number-box-widget-print.component.d.ts +6 -0
  570. package/widgets/lib/editors/number-box-widget/number-box-widget-view.component.d.ts +8 -0
  571. package/widgets/lib/editors/number-box-widget/number-box-widget.config.d.ts +2 -0
  572. package/widgets/lib/editors/password-box-widget/index.d.ts +7 -0
  573. package/widgets/lib/editors/password-box-widget/password-box-widget-column.component.d.ts +6 -0
  574. package/widgets/lib/editors/password-box-widget/password-box-widget-designer.component.d.ts +6 -0
  575. package/widgets/lib/editors/password-box-widget/password-box-widget-edit.component.d.ts +8 -0
  576. package/widgets/lib/editors/password-box-widget/password-box-widget-filter.component.d.ts +6 -0
  577. package/widgets/lib/editors/password-box-widget/password-box-widget-print.component.d.ts +6 -0
  578. package/widgets/lib/editors/password-box-widget/password-box-widget-view.component.d.ts +13 -0
  579. package/widgets/lib/editors/password-box-widget/password-box-widget.config.d.ts +2 -0
  580. package/widgets/lib/editors/phone-box-widget/index.d.ts +7 -0
  581. package/widgets/lib/editors/phone-box-widget/phone-box-widget-column.component.d.ts +6 -0
  582. package/widgets/lib/editors/phone-box-widget/phone-box-widget-designer.component.d.ts +6 -0
  583. package/widgets/lib/editors/phone-box-widget/phone-box-widget-edit.component.d.ts +25 -0
  584. package/widgets/lib/editors/phone-box-widget/phone-box-widget-filter.component.d.ts +6 -0
  585. package/widgets/lib/editors/phone-box-widget/phone-box-widget-print.component.d.ts +6 -0
  586. package/widgets/lib/editors/phone-box-widget/phone-box-widget-view.component.d.ts +12 -0
  587. package/widgets/lib/editors/phone-box-widget/phone-box-widget.config.d.ts +2 -0
  588. package/widgets/lib/editors/rich-text-widget/index.d.ts +7 -0
  589. package/widgets/lib/editors/rich-text-widget/rich-text-widget-column.component.d.ts +6 -0
  590. package/widgets/lib/editors/rich-text-widget/rich-text-widget-designer.component.d.ts +6 -0
  591. package/widgets/lib/editors/rich-text-widget/rich-text-widget-edit.component.d.ts +33 -0
  592. package/widgets/lib/editors/rich-text-widget/rich-text-widget-filter.component.d.ts +6 -0
  593. package/widgets/lib/editors/rich-text-widget/rich-text-widget-print.component.d.ts +6 -0
  594. package/widgets/lib/editors/rich-text-widget/rich-text-widget-view.component.d.ts +9 -0
  595. package/widgets/lib/editors/rich-text-widget/rich-text-widget.config.d.ts +2 -0
  596. package/widgets/lib/editors/select-box-widget/index.d.ts +7 -0
  597. package/widgets/lib/editors/select-box-widget/select-box-widget-column.component.d.ts +6 -0
  598. package/widgets/lib/editors/select-box-widget/select-box-widget-designer.component.d.ts +6 -0
  599. package/widgets/lib/editors/select-box-widget/select-box-widget-edit.component.d.ts +15 -0
  600. package/widgets/lib/editors/select-box-widget/select-box-widget-filter.component.d.ts +6 -0
  601. package/widgets/lib/editors/select-box-widget/select-box-widget-print.component.d.ts +6 -0
  602. package/widgets/lib/editors/select-box-widget/select-box-widget-view.component.d.ts +12 -0
  603. package/widgets/lib/editors/select-box-widget/select-box-widget.config.d.ts +2 -0
  604. package/widgets/lib/editors/selection-list-widget/index.d.ts +7 -0
  605. package/widgets/lib/editors/selection-list-widget/selection-list-widget-column.component.d.ts +6 -0
  606. package/widgets/lib/editors/selection-list-widget/selection-list-widget-designer.component.d.ts +6 -0
  607. package/widgets/lib/editors/selection-list-widget/selection-list-widget-edit.component.d.ts +13 -0
  608. package/widgets/lib/editors/selection-list-widget/selection-list-widget-filter.component.d.ts +6 -0
  609. package/widgets/lib/editors/selection-list-widget/selection-list-widget-print.component.d.ts +6 -0
  610. package/widgets/lib/editors/selection-list-widget/selection-list-widget-view.component.d.ts +6 -0
  611. package/widgets/lib/editors/selection-list-widget/selection-list-widget.config.d.ts +2 -0
  612. package/widgets/lib/editors/signature-pad-widget/index.d.ts +7 -0
  613. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget-column.component.d.ts +6 -0
  614. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget-designer.component.d.ts +6 -0
  615. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget-edit.component.d.ts +19 -0
  616. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget-filter.component.d.ts +6 -0
  617. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget-print.component.d.ts +6 -0
  618. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget-view.component.d.ts +7 -0
  619. package/widgets/lib/editors/signature-pad-widget/signature-pad-widget.config.d.ts +2 -0
  620. package/widgets/lib/editors/text-box-widget/index.d.ts +7 -0
  621. package/widgets/lib/editors/text-box-widget/text-box-widget-column.component.d.ts +6 -0
  622. package/widgets/lib/editors/text-box-widget/text-box-widget-designer.component.d.ts +6 -0
  623. package/widgets/lib/editors/text-box-widget/text-box-widget-edit.component.d.ts +19 -0
  624. package/widgets/lib/editors/text-box-widget/text-box-widget-filter.component.d.ts +6 -0
  625. package/widgets/lib/editors/text-box-widget/text-box-widget-print.component.d.ts +6 -0
  626. package/widgets/lib/editors/text-box-widget/text-box-widget-view.component.d.ts +8 -0
  627. package/widgets/lib/editors/text-box-widget/text-box-widget.config.d.ts +2 -0
  628. package/widgets/lib/layout/block-widget/block-widget.component.d.ts +8 -0
  629. package/widgets/lib/layout/block-widget/block-widget.config.d.ts +2 -0
  630. package/widgets/lib/layout/block-widget/index.d.ts +2 -0
  631. package/widgets/lib/widgets.module.d.ts +7 -0
  632. package/workflow/lib/workflow.types.d.ts +2 -2
  633. package/esm2022/common/lib/layout/component-slot/component-slot-loader.service.mjs +0 -56
  634. package/esm2022/common/lib/layout/component-slot/component-slot-registery.service.mjs +0 -28
  635. package/esm2022/common/lib/layout/component-slot/component-slot.directive.mjs +0 -24
  636. package/esm2022/common/lib/layout/component-slot/component-slot.module.mjs +0 -72
  637. package/esm2022/common/lib/layout/component-slot/component-slot.types.mjs +0 -2
  638. package/esm2022/common/lib/layout/component-slot/index.mjs +0 -6
  639. package/esm2022/layouts/lib/admin/entity-layout/store/entity.actions.mjs +0 -18
  640. package/esm2022/layouts/lib/admin/entity-layout/store/entity.effects.mjs +0 -76
  641. package/esm2022/schema/lib/schema.mjs +0 -2
  642. package/fesm2022/acorex-platform-layouts-avatar-widget-edit.component-PZr1lXj-.mjs.map +0 -1
  643. package/fesm2022/acorex-platform-layouts-avatar-widget-view.component-pJJYkvdH.mjs +0 -36
  644. package/fesm2022/acorex-platform-layouts-avatar-widget-view.component-pJJYkvdH.mjs.map +0 -1
  645. package/fesm2022/acorex-platform-layouts-checkbox-widget-column.component-vRJI5S-w.mjs.map +0 -1
  646. package/fesm2022/acorex-platform-layouts-checkbox-widget-view.component-m6bF8XFR.mjs.map +0 -1
  647. package/fesm2022/acorex-platform-layouts-dateTime-widget-column.component-qeQRJePy.mjs.map +0 -1
  648. package/fesm2022/acorex-platform-layouts-dateTime-widget-edit.component-zeJXGXY8.mjs.map +0 -1
  649. package/fesm2022/acorex-platform-layouts-dateTime-widget-filter.component-DJ6esclU.mjs.map +0 -1
  650. package/fesm2022/acorex-platform-layouts-dateTime-widget-view.component-BrwycTWz.mjs.map +0 -1
  651. package/fesm2022/acorex-platform-layouts-email-widget-column.component-ac8gqsFT.mjs.map +0 -1
  652. package/fesm2022/acorex-platform-layouts-file-widget-column.component-v7kAdIQ9.mjs.map +0 -1
  653. package/fesm2022/acorex-platform-layouts-file-widget-view.component-mXBrKX0K.mjs.map +0 -1
  654. package/fesm2022/acorex-platform-layouts-gallery-widget-view.component-xU52uaP0.mjs.map +0 -1
  655. package/fesm2022/acorex-platform-layouts-lookup-widget-column.component-Ts0MJe8O.mjs.map +0 -1
  656. package/fesm2022/acorex-platform-layouts-lookup-widget-edit.component-l5nSr9Cm.mjs.map +0 -1
  657. package/fesm2022/acorex-platform-layouts-lookup-widget-filter.component-gp5skvmz.mjs.map +0 -1
  658. package/fesm2022/acorex-platform-layouts-lookup-widget-view.component-ftFXFj6k.mjs.map +0 -1
  659. package/fesm2022/acorex-platform-layouts-map-widget-view.component-1Lj9efbd.mjs.map +0 -1
  660. package/fesm2022/acorex-platform-layouts-messenger-widget-column.component-W7ZY-W84.mjs.map +0 -1
  661. package/fesm2022/acorex-platform-layouts-messenger-widget-edit.component-dAX8nirB.mjs.map +0 -1
  662. package/fesm2022/acorex-platform-layouts-messenger-widget-view.component-9TJiFdq-.mjs.map +0 -1
  663. package/fesm2022/acorex-platform-layouts-number-widget-view.component-hqkAR0LG.mjs.map +0 -1
  664. package/fesm2022/acorex-platform-layouts-password-widget-column.component-ic1jykZL.mjs.map +0 -1
  665. package/fesm2022/acorex-platform-layouts-password-widget-edit.component-D8xI17yk.mjs +0 -37
  666. package/fesm2022/acorex-platform-layouts-password-widget-edit.component-D8xI17yk.mjs.map +0 -1
  667. package/fesm2022/acorex-platform-layouts-phone-widget-column.component-s04WZfzv.mjs.map +0 -1
  668. package/fesm2022/acorex-platform-layouts-phone-widget-edit.component-MKzlZ0_B.mjs.map +0 -1
  669. package/fesm2022/acorex-platform-layouts-rich-text-widget-column.component-P0YzXTIB.mjs.map +0 -1
  670. package/fesm2022/acorex-platform-layouts-rich-text-widget-view.component--Rzxm2a6.mjs.map +0 -1
  671. package/fesm2022/acorex-platform-layouts-selection-list-widget-column.component-9FTkDGmq.mjs.map +0 -1
  672. package/fesm2022/acorex-platform-layouts-selection-list-widget-edit.component-FpOQ12Ie.mjs.map +0 -1
  673. package/fesm2022/acorex-platform-layouts-selection-list-widget-filter.component-hGk-ZZ78.mjs.map +0 -1
  674. package/fesm2022/acorex-platform-layouts-selection-list-widget-view.component-s9xq___Y.mjs.map +0 -1
  675. package/fesm2022/acorex-platform-layouts-signature-pad-widget-view.component-R40Ml757.mjs.map +0 -1
  676. package/fesm2022/acorex-platform-layouts-text-widget-column.component-qhh6MT79.mjs.map +0 -1
  677. package/fesm2022/acorex-platform-layouts-text-widget-view.component-65eOj0qR.mjs.map +0 -1
  678. package/fesm2022/acorex-platform-layouts-toggle-widget-column.component-uxOXR-bL.mjs.map +0 -1
  679. package/layouts/lib/admin/entity-layout/store/entity.actions.d.ts +0 -48
  680. package/layouts/lib/admin/entity-layout/store/entity.effects.d.ts +0 -22
  681. /package/{common/lib/layout → layout/lib}/component-slot/component-slot-loader.service.d.ts +0 -0
  682. /package/{common/lib/layout → layout/lib}/component-slot/component-slot-registery.service.d.ts +0 -0
  683. /package/{common/lib/layout → layout/lib}/component-slot/component-slot.directive.d.ts +0 -0
  684. /package/{common/lib/layout → layout/lib}/component-slot/component-slot.module.d.ts +0 -0
  685. /package/{common/lib/layout → layout/lib}/component-slot/component-slot.types.d.ts +0 -0
  686. /package/{common/lib/layout → layout/lib}/component-slot/index.d.ts +0 -0
@@ -1,13 +1,12 @@
1
1
  import { AXActionSheetService } from '@acorex/components/action-sheet';
2
- import { AXDataTableComponent, } from '@acorex/components/data-table';
2
+ import { AXDataTableComponent } from '@acorex/components/data-table';
3
3
  import { AXDrawerComponent } from '@acorex/components/drawer';
4
4
  import { AXPopupService } from '@acorex/components/popup';
5
5
  import { AXPlatform } from '@acorex/core/platform';
6
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, TemplateRef, ViewChild, ViewEncapsulation, inject, } from '@angular/core';
6
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, TemplateRef, ViewChild, ViewEncapsulation, inject } from '@angular/core';
7
7
  import { ActivatedRoute } from '@angular/router';
8
8
  import { Store } from '@ngrx/store';
9
9
  import { AXPLayoutChildDrawerToggle } from '../../store';
10
- import { AXPEntityDetailViewAction, AXPEntityQuickViewAction } from '../store/entity.actions';
11
10
  import { AXUnsubscriber } from '@acorex/core/utils';
12
11
  import { AXP_MENU_LOADER } from '@acorex/platform/common';
13
12
  import { AXPWorkflowService, ofType } from '@acorex/platform/workflow';
@@ -29,9 +28,10 @@ import * as i10 from "@acorex/components/dropdown";
29
28
  import * as i11 from "@acorex/components/drawer";
30
29
  import * as i12 from "@acorex/components/search-box";
31
30
  import * as i13 from "@acorex/platform/schema";
32
- import * as i14 from "./components/list-view-option-columns/list-view-option-columns.component";
33
- import * as i15 from "./components/list-view-option-conditions/list-view-option-conditions.component";
34
- import * as i16 from "./components/list-view-option-sorting/list-view-option-sorting.component";
31
+ import * as i14 from "@acorex/platform/auth";
32
+ import * as i15 from "./components/list-view-option-columns/list-view-option-columns.component";
33
+ import * as i16 from "./components/list-view-option-conditions/list-view-option-conditions.component";
34
+ import * as i17 from "./components/list-view-option-sorting/list-view-option-sorting.component";
35
35
  export class AXPEntityListViewComponent {
36
36
  constructor(actionSheetService, unsubscriber, platform, cdr) {
37
37
  this.actionSheetService = actionSheetService;
@@ -64,11 +64,15 @@ export class AXPEntityListViewComponent {
64
64
  this.sortCount$ = this.loader.sortsCount$;
65
65
  //
66
66
  this.dataSource = this.loader.dataSource;
67
+ //
68
+ this.canDelete = this.loader.entity.editOptions?.delete ?? true;
69
+ this.canCreate = this.loader.entity.editOptions?.create ?? true;
70
+ this.canUpdate = this.loader.entity.editOptions?.update ?? true;
67
71
  this.popupService = inject(AXPopupService);
68
72
  this.dropdownRowItems = [
69
73
  {
70
- text: 'Edit',
71
- icon: 'fa-solid fa-floppy-disk',
74
+ text: 'Details',
75
+ icon: 'fa-solid fa-eye',
72
76
  name: 'edit',
73
77
  divided: true,
74
78
  },
@@ -77,6 +81,7 @@ export class AXPEntityListViewComponent {
77
81
  icon: 'fa-solid fa-trash-can',
78
82
  name: 'delete',
79
83
  color: 'danger',
84
+ disabled: !this.canDelete,
80
85
  },
81
86
  ];
82
87
  this.inlineRowItems = [
@@ -93,16 +98,10 @@ export class AXPEntityListViewComponent {
93
98
  this.getInlineRowItems = (rowData) => {
94
99
  return this.inlineRowItems;
95
100
  };
96
- this.log = () => console.log('abc');
97
101
  //TODO: namespace, module name issues
98
- this.title = this.manuLoader.currentMenuItem()?.text ?? '';
99
- this.loader.views$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {
100
- this.grid?.render();
101
- });
102
+ this.title = this.manuLoader.currentMenuItem()?.text ?? this.loader.entity.formats?.list ?? this.loader.entity.formats?.default ?? 'Title';
102
103
  //
103
- this.workflow.events$
104
- .pipe(ofType(AXPEntityDeletedEvent, AXPEntityCreateEvent), this.unsubscriber.takeUntilDestroy)
105
- .subscribe((event) => {
104
+ this.workflow.events$.pipe(ofType(AXPEntityDeletedEvent, AXPEntityCreateEvent), this.unsubscriber.takeUntilDestroy).subscribe((event) => {
106
105
  if (event.payload.entity == this.loader.entity.name && event.payload.module == this.loader.entity.module) {
107
106
  this.grid.selectedRows = [];
108
107
  this.grid?.refresh();
@@ -114,6 +113,9 @@ export class AXPEntityListViewComponent {
114
113
  });
115
114
  this._getInlineConditionTitles();
116
115
  }
116
+ ngAfterViewInit() {
117
+ this.loader.setDefaultView();
118
+ }
117
119
  _getInlineConditionTitles() {
118
120
  const titles = this.loader.getInlineFilterTitles();
119
121
  this.searchBoxTitle = titles.join(', ');
@@ -142,23 +144,23 @@ export class AXPEntityListViewComponent {
142
144
  async handleRowCommandClick(e) {
143
145
  switch (e.name) {
144
146
  case 'view': {
145
- this.store.dispatch(AXPEntityQuickViewAction({
147
+ await this.workflow.execute('show-quick-view', {
146
148
  payload: {
147
149
  module: this.loader.entity.module,
148
150
  entity: this.loader.entity.name,
149
151
  data: e.data,
150
152
  },
151
- }));
153
+ });
152
154
  break;
153
155
  }
154
156
  case 'edit': {
155
- this.store.dispatch(AXPEntityDetailViewAction({
157
+ await this.workflow.execute('show-details', {
156
158
  payload: {
157
159
  module: this.loader.entity.module,
158
160
  entity: this.loader.entity.name,
159
- id: e.data.id,
160
161
  },
161
- }));
162
+ id: e.data.id,
163
+ });
162
164
  break;
163
165
  }
164
166
  case 'delete': {
@@ -194,7 +196,6 @@ export class AXPEntityListViewComponent {
194
196
  }
195
197
  clearSelectedItems() {
196
198
  this.grid.selectedRows = [];
197
- this.grid?.render();
198
199
  }
199
200
  closeDrawer(name, collapsed) {
200
201
  if (collapsed != false) {
@@ -264,12 +265,15 @@ export class AXPEntityListViewComponent {
264
265
  this.loader.updateView(popup.data.updatedView);
265
266
  }
266
267
  }
267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AXPEntityListViewComponent, deps: [{ token: i1.AXActionSheetService }, { token: i2.AXUnsubscriber }, { token: i3.AXPlatform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
268
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: AXPEntityListViewComponent, selector: "ng-component", providers: [AXUnsubscriber], viewQueries: [{ propertyName: "viewsTemplate", first: true, predicate: ["viewsTemplate"], descendants: true }, { propertyName: "grid", first: true, predicate: ["grid"], descendants: true }, { propertyName: "entityViewDrawer", first: true, predicate: ["entityViewDrawer"], descendants: true }], ngImport: i0, template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\">\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item *ngFor=\"let v of customViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item (onClick)=\"addCustomViewPopup()\" text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button (onClick)=\"toggleSearchBox()\" [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div [class.collapsed-search-box]=\"searchBoxCollapsed\" class=\"ax-transition-all ax-mt-4\">\n <ax-search-box [title]=\"searchBoxTitle\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Create New\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item class=\"ax-pe-4 ax-flex ax-justify-between\" *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\" [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\">\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item text=\"Add Custom View\" (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\">\n <ax-search-box [title]=\"searchBoxTitle\" [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Columns\" color=\"ghost\" #columns (onClick)=\"columnsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Conditions\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Sort\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex\">\n <ax-data-table class=\"ax-flex-1\" #grid [dataSource]=\"dataSource\" (onRowDbClick)=\"handleRowDbClick($event)\">\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer [schema]=\"col.schema\" [dataField]=\"col.name\" [caption]=\"col.title\"\n *ngIf=\"col.visible\" width=\"180px\" [allowSorting]=\"false\" [options]=\"col.options\"\n [displayFormat]=\"col.displayFormat\">\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column [width]=\"'60px'\" [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-dropdown-command-column>\n <ax-command-column [width]=\"'60px'\" [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.AXDataTableComponent, selector: "ax-data-table", inputs: ["rowTemplate", "emptyTemplate", "showHeader", "fetchDataMode", "dataSource", "loading", "focusedRow", "selectedRows", "itemHeight"], outputs: ["onPageChanged", "onRowClick", "onRowDbClick", "focusedRowChange", "selectedRowsChange", "onScrolledIndexChanged"] }, { kind: "component", type: i6.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i6.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i6.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i7.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i8.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title , ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i9.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: i10.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i11.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i11.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "component", type: i12.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: i13.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["width", "caption", "headerTemplate", "allowSorting", "fixed", "options", "dataField", "displayFormat", "schema"] }, { kind: "component", type: i14.AXPListViewOptionsColumnsComponent, selector: "axp-list-view-option-columns", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i15.AXPListViewOptionConditionsComponent, selector: "axp-list-view-option-conditions", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i16.AXPListViewOptionSortingComponent, selector: "axp-list-view-option-sorting", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
268
+ ngOnDestroy() {
269
+ this.dataSource.reset();
270
+ }
271
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXPEntityListViewComponent, deps: [{ token: i1.AXActionSheetService }, { token: i2.AXUnsubscriber }, { token: i3.AXPlatform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
272
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AXPEntityListViewComponent, selector: "ng-component", providers: [AXUnsubscriber], viewQueries: [{ propertyName: "viewsTemplate", first: true, predicate: ["viewsTemplate"], descendants: true }, { propertyName: "grid", first: true, predicate: ["grid"], descendants: true }, { propertyName: "entityViewDrawer", first: true, predicate: ["entityViewDrawer"], descendants: true }], ngImport: i0, template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\">\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canCreate)\n {\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canDelete)\n {\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item *ngFor=\"let v of customViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item (onClick)=\"addCustomViewPopup()\" text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button *feature=\"'axp-entity-list-quick-search'\" (onClick)=\"toggleSearchBox()\"\n [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div *feature=\"'axp-entity-list-quick-search'\" [class.collapsed-search-box]=\"searchBoxCollapsed\"\n class=\"ax-transition-all ax-mt-4\">\n <ax-search-box [title]=\"searchBoxTitle\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n @if(canCreate)\n {\n <ax-button text=\"Create New\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n @if(canDelete)\n {\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item class=\"ax-pe-4 ax-flex ax-justify-between\" *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\" [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\">\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item text=\"Add Custom View\" (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\" *feature=\"'axp-entity-list-quick-search'\">\n <ax-search-box [title]=\"searchBoxTitle\" [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Columns\" color=\"ghost\" #columns (onClick)=\"columnsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Filters\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Sort\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex ax-overflow-auto\">\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1\" [dataSource]=\"dataSource\" [paging]=\"true\"\n [fetchDataMode]=\"'manual'\" (onRowDbClick)=\"handleRowDbClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\">\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer *ngIf=\"col.visible\" [schema]=\"col.schema\" [dataField]=\"col.name\"\n [caption]=\"col.title\" [options]=\"col.options\" [displayFormat]=\"col.displayFormat\" width=\"180px\"\n [allowSorting]=\"false\">\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-dropdown-command-column>\n <ax-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged"] }, { kind: "component", type: i6.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i6.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i6.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i7.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i8.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i9.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: i10.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i11.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i11.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "component", type: i12.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: i13.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["width", "caption", "headerTemplate", "allowSorting", "fixed", "footerTemplate", "cellTemplate", "options", "dataField", "displayFormat", "schema"] }, { kind: "directive", type: i14.AXPFeatureDirective, selector: "[feature]", inputs: ["feature", "featureElse"] }, { kind: "component", type: i15.AXPListViewOptionsColumnsComponent, selector: "axp-list-view-option-columns", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i16.AXPListViewOptionConditionsComponent, selector: "axp-list-view-option-conditions", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i17.AXPListViewOptionSortingComponent, selector: "axp-list-view-option-sorting", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
269
273
  }
270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AXPEntityListViewComponent, decorators: [{
274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AXPEntityListViewComponent, decorators: [{
271
275
  type: Component,
272
- args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [AXUnsubscriber], template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\">\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item *ngFor=\"let v of customViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item (onClick)=\"addCustomViewPopup()\" text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button (onClick)=\"toggleSearchBox()\" [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div [class.collapsed-search-box]=\"searchBoxCollapsed\" class=\"ax-transition-all ax-mt-4\">\n <ax-search-box [title]=\"searchBoxTitle\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Create New\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item class=\"ax-pe-4 ax-flex ax-justify-between\" *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\" [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\">\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item text=\"Add Custom View\" (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\">\n <ax-search-box [title]=\"searchBoxTitle\" [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Columns\" color=\"ghost\" #columns (onClick)=\"columnsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Conditions\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Sort\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex\">\n <ax-data-table class=\"ax-flex-1\" #grid [dataSource]=\"dataSource\" (onRowDbClick)=\"handleRowDbClick($event)\">\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer [schema]=\"col.schema\" [dataField]=\"col.name\" [caption]=\"col.title\"\n *ngIf=\"col.visible\" width=\"180px\" [allowSorting]=\"false\" [options]=\"col.options\"\n [displayFormat]=\"col.displayFormat\">\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column [width]=\"'60px'\" [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-dropdown-command-column>\n <ax-command-column [width]=\"'60px'\" [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"] }]
276
+ args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [AXUnsubscriber], template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\">\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canCreate)\n {\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canDelete)\n {\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item *ngFor=\"let v of customViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item (onClick)=\"addCustomViewPopup()\" text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button *feature=\"'axp-entity-list-quick-search'\" (onClick)=\"toggleSearchBox()\"\n [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div *feature=\"'axp-entity-list-quick-search'\" [class.collapsed-search-box]=\"searchBoxCollapsed\"\n class=\"ax-transition-all ax-mt-4\">\n <ax-search-box [title]=\"searchBoxTitle\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n @if(canCreate)\n {\n <ax-button text=\"Create New\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n @if(canDelete)\n {\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button text=\"Actions\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">Public Views</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item class=\"ax-pe-4 ax-flex ax-justify-between\" *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\" [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\">\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item text=\"Add Custom View\" (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\" *feature=\"'axp-entity-list-quick-search'\">\n <ax-search-box [title]=\"searchBoxTitle\" [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"'Search on ' + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button text=\"Columns\" color=\"ghost\" #columns (onClick)=\"columnsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Filters\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Sort\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex ax-overflow-auto\">\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1\" [dataSource]=\"dataSource\" [paging]=\"true\"\n [fetchDataMode]=\"'manual'\" (onRowDbClick)=\"handleRowDbClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\">\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer *ngIf=\"col.visible\" [schema]=\"col.schema\" [dataField]=\"col.name\"\n [caption]=\"col.title\" [options]=\"col.options\" [displayFormat]=\"col.displayFormat\" width=\"180px\"\n [allowSorting]=\"false\">\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-dropdown-command-column>\n <ax-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"] }]
273
277
  }], ctorParameters: () => [{ type: i1.AXActionSheetService }, { type: i2.AXUnsubscriber }, { type: i3.AXPlatform }, { type: i0.ChangeDetectorRef }], propDecorators: { viewsTemplate: [{
274
278
  type: ViewChild,
275
279
  args: ['viewsTemplate']
@@ -280,4 +284,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
280
284
  type: ViewChild,
281
285
  args: ['entityViewDrawer']
282
286
  }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsb0JBQW9CLEdBSXJCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBdUIsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVsSCxNQUFNLE9BQU8sMEJBQTBCO0lBc0NyQyxZQUNVLGtCQUF3QyxFQUN4QyxZQUE0QixFQUMxQixRQUFvQixFQUNwQixHQUFzQjtRQUh4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQ3BCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBekMxQixVQUFLLEdBQUcsTUFBTSxDQUFDLENBQUEsS0FBMEIsQ0FBQSxDQUFDLENBQUM7UUFDM0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLFdBQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLGVBQVUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbkMsV0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQXNCLENBQUM7UUFDakUsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6Qix5QkFBb0IsR0FBVyxFQUFFLENBQUM7UUFDbEMsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBRW5DLGlCQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDeEMsaUJBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN4QyxvQkFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQzlDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNwQyxFQUFFO1FBQ1EsZ0JBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQzFELEVBQUU7UUFDUSxhQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1FBQzNELEVBQUU7UUFDUSxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDM0IsZUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQy9DLEVBQUU7UUFDUSxlQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFRdEMsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFnRHRDLHFCQUFnQixHQUF1QjtZQUM3QztnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUseUJBQXlCO2dCQUMvQixJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsSUFBSTthQUNkO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLFFBQVE7YUFDaEI7U0FDRixDQUFDO1FBRU0sbUJBQWMsR0FBdUI7WUFDM0M7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLElBQUk7YUFDZDtTQUNGLENBQUM7UUFFUSx3QkFBbUIsR0FBRyxDQUFDLE9BQWdCLEVBQStCLEVBQUU7WUFDaEYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztRQUVRLHNCQUFpQixHQUFHLENBQUMsT0FBZ0IsRUFBc0IsRUFBRTtZQUNyRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBb0pGLFFBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBMU43QixxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO2FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDO2FBQzdGLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsRUFBRTtRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1RixJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7O1lBQ3JGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3JELENBQUM7SUFrQ1MsZ0JBQWdCLENBQUMsQ0FBd0I7UUFDakQsTUFBTSxDQUFDLEdBQStCO1lBQ3BDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztZQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbkMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1NBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQTZCO1FBQ2pFLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQix3QkFBd0IsQ0FBQztvQkFDdkIsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO3dCQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTt3QkFDL0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3FCQUNiO2lCQUNGLENBQUMsQ0FDSCxDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQix5QkFBeUIsQ0FBQztvQkFDeEIsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO3dCQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTt3QkFDL0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtxQkFDZDtpQkFDRixDQUFDLENBQ0gsQ0FBQztnQkFDRixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDZCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtvQkFDM0MsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07b0JBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJO29CQUMvQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztpQkFDakIsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQ3JDLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtnQkFDakMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUk7YUFDaEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsa0JBQWtCLENBQUMsT0FBZTtRQUMxQyxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7b0JBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO29CQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTtvQkFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRVMsV0FBVyxDQUFDLElBQVksRUFBRSxTQUFrQjtRQUNwRCxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN2QixRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssWUFBWTtvQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUM5QixNQUFNO2dCQUNSLEtBQUssU0FBUztvQkFDWixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUMzQixNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN4QixNQUFNO2dCQUNSO29CQUNFLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxDQUFzQjtRQUM1QyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLGtCQUFrQjtRQUNoQyxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxhQUFhO1lBQ25CLEtBQUssRUFBRSxhQUFhO1lBQ3BCLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsMEJBQTBCLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDckUsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtZQUM3RSxLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzFFLG9CQUFvQixFQUFFLElBQUk7WUFDMUIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsWUFBWSxFQUFFLE9BQU87Z0JBQ3JCLElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUNTLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBZSxFQUFFLFlBQWlCO1FBQ2hFLGdEQUFnRDtRQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO1lBQzdFLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDMUUsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixTQUFTLEVBQUUsS0FBSztZQUNoQixJQUFJLEVBQUU7Z0JBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixZQUFZO2dCQUNaLElBQUksRUFBRSxNQUFNO2FBQ2I7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDOzhHQXBRVSwwQkFBMEI7a0dBQTFCLDBCQUEwQix1Q0FGMUIsQ0FBQyxjQUFjLENBQUMsZ1VDdkM3Qiw4dmNBbVJzQjs7MkZEMU9ULDBCQUEwQjtrQkFQdEMsU0FBUztvQ0FHTyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsY0FBYyxDQUFDOytLQWtDQyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ1AsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUNjLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hY3Rpb24tc2hlZXQnO1xuaW1wb3J0IHtcbiAgQVhEYXRhVGFibGVDb21wb25lbnQsXG4gIEFYRGF0YVRhYmxlUm93RGJDbGljayxcbiAgQVhSb3dDb21tYW5kSXRlbSxcbiAgQVhSb3dDb21tYW5kSXRlbUNsaWNrRXZlbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7IEFYRHJhd2VyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RyYXdlcic7XG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQVhQQWRtaW5MYXlvdXRTdGF0ZSwgQVhQTGF5b3V0Q2hpbGREcmF3ZXJUb2dnbGUgfSBmcm9tICcuLi8uLi9zdG9yZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlEZXRhaWxWaWV3QWN0aW9uLCBBWFBFbnRpdHlRdWlja1ZpZXdBY3Rpb24gfSBmcm9tICcuLi9zdG9yZS9lbnRpdHkuYWN0aW9ucyc7XG5cbmltcG9ydCB7IEFYQ2xpY2tFdmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQVhQX01FTlVfTE9BREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dTZXJ2aWNlLCBvZlR5cGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUExheW91dFNlcnZpY2UsIGNvbnZlcnRQcm9wZXJ0aWVzVG9Db2x1bW5zIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IEFYUEVudGl0eUNyZWF0ZUV2ZW50IH0gZnJvbSAnLi4vLi4vZW50aXR5LWxheW91dC93b3JrZmxvd3MvY3JlYXRlLWVudGl0eS53b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlEZWxldGVkRXZlbnQgfSBmcm9tICcuLi8uLi9lbnRpdHktbGF5b3V0L3dvcmtmbG93cy9kZWxldGUtZW50aXR5LndvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eUNyZWF0ZUN1c3RvbVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZW50aXR5LWN1c3RvbS12aWV3L2VudGl0eS1jdXN0b20tdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQTGlzdFZpZXdMb2FkZXIgfSBmcm9tICcuL2xpc3Qtdmlldy5jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdlbnRpdHktbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2VudGl0eS1saXN0LXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0FYVW5zdWJzY3JpYmVyXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TGlzdFZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIHN0b3JlID0gaW5qZWN0KFN0b3JlPEFYUEFkbWluTGF5b3V0U3RhdGU+KTtcbiAgcHJpdmF0ZSB3b3JrZmxvdyA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpO1xuICBwcml2YXRlIGxheW91dCA9IGluamVjdChBWFBMYXlvdXRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgbWFudUxvYWRlciA9IGluamVjdChBWFBfTUVOVV9MT0FERVIpO1xuXG4gIHByb3RlY3RlZCBsb2FkZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2xvYWRlciddIGFzIEFYUExpc3RWaWV3TG9hZGVyO1xuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94UGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94VGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94Q29sbGFwc2VkOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgcHVibGljVmlld3MkID0gdGhpcy5sb2FkZXIucHVibGljVmlld3MkO1xuICBwcm90ZWN0ZWQgY3VzdG9tVmlld3MkID0gdGhpcy5sb2FkZXIuY3VzdG9tVmlld3MkO1xuICBwcm90ZWN0ZWQgaGFzQ3VzdG9tVmlld3MkID0gdGhpcy5sb2FkZXIuaGFzQ3VzdG9tVmlld3MkO1xuICBwcm90ZWN0ZWQgdmlldyQgPSB0aGlzLmxvYWRlci52aWV3JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGNvbmRpdGlvbnMkID0gdGhpcy5sb2FkZXIuY29uZGl0aW9ucyQ7XG4gIHByb3RlY3RlZCBjb25kaXRpb25zQ291bnQkID0gdGhpcy5sb2FkZXIuY29uZGl0aW9uc0NvdW50JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGNvbHVtbnMkID0gdGhpcy5sb2FkZXIuZGlzcGxheUNvbHVtbnMkO1xuICBwcm90ZWN0ZWQgY29sdW1uc0NvdW50JCA9IHRoaXMubG9hZGVyLmRpc3BsYXlDb2x1bW5zQ291bnQkO1xuICAvL1xuICBwcm90ZWN0ZWQgc29ydCQgPSB0aGlzLmxvYWRlci5zb3J0cyQ7XG4gIHByb3RlY3RlZCBzb3J0Q291bnQkID0gdGhpcy5sb2FkZXIuc29ydHNDb3VudCQ7XG4gIC8vXG4gIHByb3RlY3RlZCBkYXRhU291cmNlID0gdGhpcy5sb2FkZXIuZGF0YVNvdXJjZTtcbiAgLy9cbiAgcHJvdGVjdGVkIGZvY3VzZWRSb3c6IGFueTtcbiAgLy9cbiAgQFZpZXdDaGlsZCgndmlld3NUZW1wbGF0ZScpIHZpZXdzVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgQFZpZXdDaGlsZCgnZ3JpZCcpIGdyaWQhOiBBWERhdGFUYWJsZUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZW50aXR5Vmlld0RyYXdlcicpIGVudGl0eVZpZXdEcmF3ZXIhOiBBWERyYXdlckNvbXBvbmVudDtcblxuICBwcml2YXRlIHBvcHVwU2VydmljZSA9IGluamVjdChBWFBvcHVwU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3Rpb25TaGVldFNlcnZpY2U6IEFYQWN0aW9uU2hlZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVyOiBBWFVuc3Vic2NyaWJlcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IEFYUGxhdGZvcm0sXG4gICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy9UT0RPOiBuYW1lc3BhY2UsIG1vZHVsZSBuYW1lIGlzc3Vlc1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLm1hbnVMb2FkZXIuY3VycmVudE1lbnVJdGVtKCk/LnRleHQgPz8gJyc7XG4gICAgdGhpcy5sb2FkZXIudmlld3MkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZD8ucmVuZGVyKCk7XG4gICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLndvcmtmbG93LmV2ZW50cyRcbiAgICAgIC5waXBlKG9mVHlwZShBWFBFbnRpdHlEZWxldGVkRXZlbnQsIEFYUEVudGl0eUNyZWF0ZUV2ZW50KSwgdGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5wYXlsb2FkLmVudGl0eSA9PSB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSAmJiBldmVudC5wYXlsb2FkLm1vZHVsZSA9PSB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlKSB7XG4gICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICAgIHRoaXMuZ3JpZD8ucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuZGF0YVNvdXJjZS5vbkxvYWRpbmdDaGFuZ2VkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXQuc2V0TmF2aWdhdGlvbkxvYWRpbmcodmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2dldElubGluZUNvbmRpdGlvblRpdGxlcygpO1xuICB9XG5cbiAgX2dldElubGluZUNvbmRpdGlvblRpdGxlcygpIHtcbiAgICBjb25zdCB0aXRsZXMgPSB0aGlzLmxvYWRlci5nZXRJbmxpbmVGaWx0ZXJUaXRsZXMoKTtcbiAgICB0aGlzLnNlYXJjaEJveFRpdGxlID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAyKSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLnNsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnIC4uLic7XG4gICAgZWxzZSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gIH1cblxuICBfaGFuZGxlVmlld3NQb3BvdmVyKCkge1xuICAgIHRoaXMuYWN0aW9uU2hlZXRTZXJ2aWNlLm9wZW4oeyBjb250ZW50OiB0aGlzLnZpZXdzVGVtcGxhdGUgfSk7XG4gIH1cblxuICBoYW5kbGVEcmF3ZXJDbGljaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFYUExheW91dENoaWxkRHJhd2VyVG9nZ2xlKCkpO1xuICB9XG5cbiAgdG9nZ2xlU2VhcmNoQm94KCkge1xuICAgIHRoaXMuc2VhcmNoQm94Q29sbGFwc2VkID0gIXRoaXMuc2VhcmNoQm94Q29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93blJvd0l0ZW1zOiBBWFJvd0NvbW1hbmRJdGVtW10gPSBbXG4gICAge1xuICAgICAgdGV4dDogJ0VkaXQnLFxuICAgICAgaWNvbjogJ2ZhLXNvbGlkIGZhLWZsb3BweS1kaXNrJyxcbiAgICAgIG5hbWU6ICdlZGl0JyxcbiAgICAgIGRpdmlkZWQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICB0ZXh0OiAnRGVsZXRlJyxcbiAgICAgIGljb246ICdmYS1zb2xpZCBmYS10cmFzaC1jYW4nLFxuICAgICAgbmFtZTogJ2RlbGV0ZScsXG4gICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIGlubGluZVJvd0l0ZW1zOiBBWFJvd0NvbW1hbmRJdGVtW10gPSBbXG4gICAge1xuICAgICAgdGV4dDogJ1ZpZXcnLFxuICAgICAgaWNvbjogJ2ZhLXNvbGlkICBmYS1leWUnLFxuICAgICAgbmFtZTogJ3ZpZXcnLFxuICAgICAgZGl2aWRlZDogdHJ1ZSxcbiAgICB9LFxuICBdO1xuXG4gIHByb3RlY3RlZCBnZXREcm9wZG93blJvd0l0ZW1zID0gKHJvd0RhdGE6IHVua25vd24pOiBQcm9taXNlPEFYUm93Q29tbWFuZEl0ZW1bXT4gPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kcm9wZG93blJvd0l0ZW1zKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0SW5saW5lUm93SXRlbXMgPSAocm93RGF0YTogdW5rbm93bik6IEFYUm93Q29tbWFuZEl0ZW1bXSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lUm93SXRlbXM7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVJvd0RiQ2xpY2soZTogQVhEYXRhVGFibGVSb3dEYkNsaWNrKSB7XG4gICAgY29uc3QgZDogQVhSb3dDb21tYW5kSXRlbUNsaWNrRXZlbnQgPSB7XG4gICAgICBjb21wb25lbnQ6IGUuY29tcG9uZW50LFxuICAgICAgbmFtZTogdGhpcy5kcm9wZG93blJvd0l0ZW1zWzBdLm5hbWUsXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZVJvd0NvbW1hbmRDbGljayhkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVSb3dDb21tYW5kQ2xpY2soZTogQVhSb3dDb21tYW5kSXRlbUNsaWNrRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGUubmFtZSkge1xuICAgICAgY2FzZSAndmlldyc6IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBBWFBFbnRpdHlRdWlja1ZpZXdBY3Rpb24oe1xuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdlZGl0Jzoge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIEFYUEVudGl0eURldGFpbFZpZXdBY3Rpb24oe1xuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgICAgIGlkOiBlLmRhdGEuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGVsZXRlJzoge1xuICAgICAgICBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ2RlbGV0ZS1lbnRpdHknLCB7XG4gICAgICAgICAgbW9kdWxlOiB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlLFxuICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgaWRzOiBbZS5kYXRhLmlkXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDcmVhdGVDbGljaygpIHtcbiAgICB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ2NyZWF0ZS1lbnRpdHknLCB7XG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIG1vZHVsZTogdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSxcbiAgICAgICAgZW50aXR5OiB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ29tbWFuZENsaWNrKGNvbW1hbmQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdkZWxldGUtZW50aXR5Jywge1xuICAgICAgICAgIG1vZHVsZTogdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSxcbiAgICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgICAgIGlkczogdGhpcy5ncmlkLnNlbGVjdGVkUm93cy5tYXAoKGMpID0+IChjIGFzIGFueSlbJ2lkJ10pLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYXJTZWxlY3RlZEl0ZW1zKCkge1xuICAgIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICB0aGlzLmdyaWQ/LnJlbmRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlRHJhd2VyKG5hbWU6IHN0cmluZywgY29sbGFwc2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGNvbGxhcHNlZCAhPSBmYWxzZSkge1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NvbmRpdGlvbnMnOlxuICAgICAgICAgIHRoaXMubG9hZGVyLnJlc2V0Q29uZGl0aW9ucygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICB0aGlzLmxvYWRlci5yZXNldENvbHVtbnMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc29ydHMnOlxuICAgICAgICAgIHRoaXMubG9hZGVyLnJlc2V0U29ydCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVNlYXJjaFZhbHVlKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXIuaGFuZGxlSW5saW5lU2VhcmNoKGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRDdXN0b21WaWV3UG9wdXAoKSB7XG4gICAgY29uc3QgbmV3VmlldyA9IHtcbiAgICAgIG5hbWU6ICdjdXN0b20tdmlldycsXG4gICAgICB0aXRsZTogJ0N1c3RvbSBWaWV3JyxcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHNvcnRzOiBbXSxcbiAgICAgIGNvbHVtbnM6IGNvbnZlcnRQcm9wZXJ0aWVzVG9Db2x1bW5zKC4uLnRoaXMubG9hZGVyLmVudGl0eS5wcm9wZXJ0aWVzKSxcbiAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgIH07XG5cbiAgICBjb25zdCBwb3B1cCA9IGF3YWl0IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oQVhQRW50aXR5Q3JlYXRlQ3VzdG9tVmlld0NvbXBvbmVudCwge1xuICAgICAgdGl0bGU6ICdDcmVhdGUgQ3VzdG9tIFZpZXcnLFxuICAgICAgc2l6ZTogdGhpcy5wbGF0Zm9ybS5pcygnTW9iaWxlJykgfHwgdGhpcy5wbGF0Zm9ybS5pcygnU00nKSA/ICdmdWxsJyA6ICdtZCcsXG4gICAgICBjbG9zZU9uQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxvYWRlcjogdGhpcy5sb2FkZXIsXG4gICAgICAgIHNlbGVjdGVkVmlldzogbmV3VmlldyxcbiAgICAgICAgbW9kZTogJ2NyZWF0ZScsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChwb3B1cC5kYXRhPy5zYXZlID09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkVmlldzogJywgcG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgICB0aGlzLmxvYWRlci5jcmVhdGVWaWV3KHBvcHVwLmRhdGEudXBkYXRlZFZpZXcpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVmlld1BvcHVwKGU6IEFYQ2xpY2tFdmVudCwgc2VsZWN0ZWRWaWV3OiBhbnkpIHtcbiAgICAvLyAoZS5uYXRpdmVFdmVudCBhcyBVSUV2ZW50KS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBwb3B1cCA9IGF3YWl0IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oQVhQRW50aXR5Q3JlYXRlQ3VzdG9tVmlld0NvbXBvbmVudCwge1xuICAgICAgdGl0bGU6ICdNb2RpZnkgQ3VzdG9tIFZpZXcnLFxuICAgICAgc2l6ZTogdGhpcy5wbGF0Zm9ybS5pcygnTW9iaWxlJykgfHwgdGhpcy5wbGF0Zm9ybS5pcygnU00nKSA/ICdmdWxsJyA6ICdtZCcsXG4gICAgICBjbG9zZU9uQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxvYWRlcjogdGhpcy5sb2FkZXIsXG4gICAgICAgIHNlbGVjdGVkVmlldyxcbiAgICAgICAgbW9kZTogJ2VkaXQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAocG9wdXAuZGF0YT8uZGVsZXRlID09IHRydWUpIHtcbiAgICAgIHRoaXMubG9hZGVyLmRlbGV0ZVZpZXcocG9wdXAuZGF0YS52aWV3TmFtZSk7XG4gICAgfVxuICAgIGlmIChwb3B1cC5kYXRhPy5zYXZlID09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkVmlldzogJywgcG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgICB0aGlzLmxvYWRlci51cGRhdGVWaWV3KHBvcHVwLmRhdGEudXBkYXRlZFZpZXcpO1xuICAgIH1cbiAgfVxuXG4gIGxvZyA9ICgpID0+IGNvbnNvbGUubG9nKCdhYmMnKTtcbn1cbiIsIjxheC1kcmF3ZXItY29udGFpbmVyPlxuICA8IS0tIDxheC1kcmF3ZXIgI2RyYXdlciBsb2NhdGlvbj1cInN0YXJ0XCIgW2NvbGxhcHNlZF09XCJ0cnVlXCIgW21vZGVdPVwicGxhdGZvcm0uaXMoJ1NNJykgPyAnb3ZlcmxheScgOiAncHVzaCdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctNjQgYXgtYm9yZGVyLWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTYgYXgtcHktNCBheC1nYXAtNiBheC1mbGV4IGF4LWZsZXgtY29sXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC0yeGwgYXgtZm9udC1ib2xkXCI+Rm9sZGVyczwvcD5cbiAgICAgICAgPGF4LXNpZGUtbWVudT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub2RlIG9mIG1lbnVJdGVtc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVNZW51XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXgtc2lkZS1tZW51PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NpZGVNZW51IGxldC1pdGVtPlxuICAgICAgICAgIDxheC1zaWRlLW1lbnUtaXRlbSBbdGV4dF09XCJpdGVtLnRleHRcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZm9sZGVyIGF4LXRleHQtd2FybmluZy01MDBcIj48L2F4LWljb24+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW5cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlTWVudVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjaGlsZCB9XCI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9heC1zaWRlLW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+IC0tPlxuICA8YXgtY29udGVudCBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0wIG1kOmF4LWdhcC00IGF4LXB4LTQgYXgtcHktMyBtZDpheC1weS00IG1kOmF4LXB4LTYgYXgtYmctc3VyZmFjZSBheC1ib3JkZXItYiBtZDpheC1ib3JkZXItMCBtZDpheC1iZy1kZWZhdWx0XCI+XG4gICAgICBAaWYocGxhdGZvcm0uaXMoJ01EJykpe1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LW1iLTRcIj5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApe1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTJcIj5cbiAgICAgICAgICA8YXgtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYXgtc21cIiAob25DbGljayk9XCJoYW5kbGVDcmVhdGVDbGljaygpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWFkZFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8YXgtYnV0dG9uIGNvbG9yPVwiZ2hvc3RcIiBjbGFzcz1cImF4LXNtXCIgI21vcmU+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWVsbGlwc2lzLXZlcnRpY2FsXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbCBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gdGV4dD1cIkV4cG9ydFwiIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLXNvbGlkIGZhLWZpbGUtZXhwb3J0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9QGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRleHQteGwgYXgtZm9udC1ib2xkXCI+IHt7IHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggfX0gSXRlbXMgU2VsZWN0ZWQgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjbGVhclNlbGVjdGVkSXRlbXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LXRleHQtc20gYXgtdGV4dC1wcmltYXJ5IGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMCBheC11bmRlcmxpbmUgYXgtY3Vyc29yLXBvaW50ZXJcIj5DbGVhclxuICAgICAgICAgICAgSXRlbXM8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTJcIj5cbiAgICAgICAgICA8YXgtYnV0dG9uIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJheC1zbVwiIChvbkNsaWNrKT1cImhhbmRsZUNvbW1hbmRDbGljaygnZGVsZXRlJylcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJnaG9zdFwiIGNsYXNzPVwiYXgtc21cIiAjbW9yZT5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgW3RleHRdPVwiKHZpZXckIHwgYXN5bmMpPy50aXRsZVwiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWV5ZSBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jYXJldC1kb3duXCI+PC9pPlxuICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbCBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3QgY2xhc3M9XCJheC1iZy1zdXJmYWNlXCI+XG4gICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiPlB1YmxpYyBWaWV3czwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSAqbmdGb3I9XCJsZXQgdiBvZiBwdWJsaWNWaWV3cyQgfCBhc3luY1wiIFt0ZXh0XT1cInYudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1iZy1vbi1zdXJmYWNlXT1cIih2aWV3JCB8IGFzeW5jKSA9PSB2XCIgKG9uQ2xpY2spPVwibG9hZGVyLnNldFZpZXcodi5uYW1lKVwiPjwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiICpuZ0lmPVwiaGFzQ3VzdG9tVmlld3MkIHwgYXN5bmNcIj5DcmVhdGVkIGJ5IG1lPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtICpuZ0Zvcj1cImxldCB2IG9mIGN1c3RvbVZpZXdzJCB8IGFzeW5jXCIgW3RleHRdPVwidi50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIiAob25DbGljayk9XCJsb2FkZXIuc2V0Vmlldyh2Lm5hbWUpXCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKG9uQ2xpY2spPVwiYWRkQ3VzdG9tVmlld1BvcHVwKClcIiB0ZXh0PVwiQWRkIEN1c3RvbSBWaWV3XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1wcmltYXJ5XCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTJcIj5cbiAgICAgICAgICBAaWYoc2VhcmNoQm94VGl0bGUpe1xuICAgICAgICAgIDxheC1idXR0b24gKG9uQ2xpY2spPVwidG9nZ2xlU2VhcmNoQm94KClcIiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1zZWFyY2ggYXgtdGV4dC1uZXV0cmFsLTQwMFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIGNvbG9yPVwiZ2hvc3RcIiAob25DbGljayk9XCJjb2x1bW5zRHJhd2VyLm9wZW4oKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzIGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIDxheC1idXR0b24gW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIGNvbG9yPVwiZ2hvc3RcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiY29uZGl0aW9uc0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtc2xpZGVycyBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgIEBpZiAoKGNvbmRpdGlvbnNDb3VudCQgfCBhc3luYykpIHtcbiAgICAgICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgICAgIDxheC1iYWRnZSBbY29sb3JdPVwiJ3ByaW1hcnknXCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIDxheC1idXR0b24gW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIGNvbG9yPVwiZ2hvc3RcIiAob25DbGljayk9XCJzb3J0c0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtYmFycy1zb3J0IGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgQGlmICgoc29ydENvdW50JCB8IGFzeW5jKSkge1xuICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgPGF4LWJhZGdlIFtjb2xvcl09XCIncHJpbWFyeSdcIj48L2F4LWJhZGdlPlxuICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtjbGFzcy5jb2xsYXBzZWQtc2VhcmNoLWJveF09XCJzZWFyY2hCb3hDb2xsYXBzZWRcIiBjbGFzcz1cImF4LXRyYW5zaXRpb24tYWxsIGF4LW10LTRcIj5cbiAgICAgICAgPGF4LXNlYXJjaC1ib3ggW3RpdGxlXT1cInNlYXJjaEJveFRpdGxlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBvbiAnICsgc2VhcmNoQm94UGxhY2Vob2xkZXJcIj48YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWdhcC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXhsIG1kOmF4LXRleHQtM3hsIGF4LWZvbnQtYm9sZCBheC1tYi0yXCI+e3sgdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApe1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtM1wiPlxuICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkNyZWF0ZSBOZXdcIiBjb2xvcj1cInByaW1hcnlcIiAob25DbGljayk9XCJoYW5kbGVDcmVhdGVDbGljaygpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWFkZFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkFjdGlvbnNcIiBjb2xvcj1cImdob3N0XCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVsbGlwc2lzLXZlcnRpY2FsXCI+PC9pPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWwgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIHRleHQ9XCJFeHBvcnRcIiBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS1maWxlLWV4cG9ydFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfUBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTNcIj5cbiAgICAgICAgICA8YXgtYnV0dG9uIHRleHQ9XCJEZWxldGUgSXRlbXNcIiBjb2xvcj1cImRhbmdlclwiIChvbkNsaWNrKT1cImhhbmRsZUNvbW1hbmRDbGljaygnZGVsZXRlJylcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8YXgtYnV0dG9uIHRleHQ9XCJBY3Rpb25zXCIgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFZpZXcgTW9kZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtdy1mdWxsIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zXCI+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIih2aWV3JCB8IGFzeW5jKT8udGl0bGVcIiAjdmlld3MgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZXllXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNhcmV0LWRvd25cIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWwgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdCBjbGFzcz1cImF4LWJnLXN1cmZhY2VcIj5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiPlB1YmxpYyBWaWV3czwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKm5nRm9yPVwibGV0IHYgb2YgcHVibGljVmlld3MkIHwgYXN5bmNcIiBbdGV4dF09XCJ2LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIiAob25DbGljayk9XCJsb2FkZXIuc2V0Vmlldyh2Lm5hbWUpXCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiICpuZ0lmPVwiaGFzQ3VzdG9tVmlld3MkIHwgYXN5bmNcIj5DcmVhdGVkIGJ5IG1lPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSBjbGFzcz1cImF4LXBlLTQgYXgtZmxleCBheC1qdXN0aWZ5LWJldHdlZW5cIiAqbmdGb3I9XCJsZXQgdiBvZiBjdXN0b21WaWV3cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInYudGl0bGVcIiBbY2xhc3MuYXgtYmctb24tc3VyZmFjZV09XCIodmlldyQgfCBhc3luYykgPT0gdlwiIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInVwZGF0ZVZpZXdQb3B1cCgkZXZlbnQsIHYpXCIgY2xhc3M9XCJheC14c1wiIGxvb2s9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhciBmYS1lZGl0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIHRleHQ9XCJBZGQgQ3VzdG9tIFZpZXdcIiAob25DbGljayk9XCJhZGRDdXN0b21WaWV3UG9wdXAoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LXByaW1hcnlcIj48L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgQGlmKHNlYXJjaEJveFRpdGxlKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC13LTcyXCI+XG4gICAgICAgICAgICAgIDxheC1zZWFyY2gtYm94IFt0aXRsZV09XCJzZWFyY2hCb3hUaXRsZVwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVDaGFuZ2VTZWFyY2hWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBvbiAnICsgc2VhcmNoQm94UGxhY2Vob2xkZXJcIj48YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTNcIj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkNvbHVtbnNcIiBjb2xvcj1cImdob3N0XCIgI2NvbHVtbnMgKG9uQ2xpY2spPVwiY29sdW1uc0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnNcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgY29sdW1uc0NvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkNvbmRpdGlvbnNcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwiY29uZGl0aW9uc0RyYXdlci5vcGVuKClcIiAjY29uZGl0aW9ucz5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNsaWRlcnNcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgY29uZGl0aW9uc0NvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIlNvcnRcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwic29ydHNEcmF3ZXIub3BlbigpXCI+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzLXNvcnRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4ICpuZ0lmPVwiKHNvcnRDb3VudCQgfCBhc3luYykhID4gMFwiPlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgc29ydENvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgfSBAZWxzZXtcbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU2VsZWN0aW9uIE1vZGUgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTMgYXgtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRleHQteGwgYXgtZm9udC1ib2xkXCI+IHt7IHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggfX0gSXRlbXMgU2VsZWN0ZWQgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRJdGVtcygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC10ZXh0LXNtIGF4LXRleHQtcHJpbWFyeSBkYXJrOmF4LXRleHQtcHJpbWFyeS0zMDAgYXgtdW5kZXJsaW5lIGF4LWN1cnNvci1wb2ludGVyXCI+Q2xlYXJcbiAgICAgICAgICAgICAgSXRlbXM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC0xIGF4LXB4LTYgYXgtcHktNCBheC1mbGV4XCI+XG4gICAgICA8YXgtZGF0YS10YWJsZSBjbGFzcz1cImF4LWZsZXgtMVwiICNncmlkIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiAob25Sb3dEYkNsaWNrKT1cImhhbmRsZVJvd0RiQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8IS0tIDxheC1pbmRleC1jb2x1bW4gKm5nSWY9XCIhcGxhdGZvcm0uaXMoJ1NNJylcIiBbd2lkdGhdPVwiJzg1cHgnXCI+PC9heC1pbmRleC1jb2x1bW4+IC0tPlxuICAgICAgICA8YXgtc2VsZWN0LWNvbHVtbiBbd2lkdGhdPVwiJzUwcHgnXCI+PC9heC1zZWxlY3QtY29sdW1uPlxuICAgICAgICBAZm9yKGNvbCBvZiAoY29sdW1ucyQgfCBhc3luYyk7dHJhY2sgY29sLm5hbWUpIHtcbiAgICAgICAgPGF4cC13aWRnZXQtY29sdW1uLXJlbmRlcmVyIFtzY2hlbWFdPVwiY29sLnNjaGVtYVwiIFtkYXRhRmllbGRdPVwiY29sLm5hbWVcIiBbY2FwdGlvbl09XCJjb2wudGl0bGVcIlxuICAgICAgICAgICpuZ0lmPVwiY29sLnZpc2libGVcIiB3aWR0aD1cIjE4MHB4XCIgW2FsbG93U29ydGluZ109XCJmYWxzZVwiIFtvcHRpb25zXT1cImNvbC5vcHRpb25zXCJcbiAgICAgICAgICBbZGlzcGxheUZvcm1hdF09XCJjb2wuZGlzcGxheUZvcm1hdFwiPlxuICAgICAgICA8L2F4cC13aWRnZXQtY29sdW1uLXJlbmRlcmVyPlxuICAgICAgICB9XG4gICAgICAgIDxheC1kcm9wZG93bi1jb21tYW5kLWNvbHVtbiBbd2lkdGhdPVwiJzYwcHgnXCIgW2l0ZW1zXT1cImdldERyb3Bkb3duUm93SXRlbXNcIlxuICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiPjwvYXgtZHJvcGRvd24tY29tbWFuZC1jb2x1bW4+XG4gICAgICAgIDxheC1jb21tYW5kLWNvbHVtbiBbd2lkdGhdPVwiJzYwcHgnXCIgW2l0ZW1zXT1cImdldElubGluZVJvd0l0ZW1zXCJcbiAgICAgICAgICAob25JdGVtQ2xpY2spPVwiaGFuZGxlUm93Q29tbWFuZENsaWNrKCRldmVudClcIj48L2F4LWNvbW1hbmQtY29sdW1uPlxuICAgICAgPC9heC1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L2F4LWNvbnRlbnQ+XG4gIDxheC1kcmF3ZXIgKGNvbGxhcHNlZENoYW5nZSk9XCJjbG9zZURyYXdlcignY29sdW1ucycsICRldmVudClcIiAjY29sdW1uc0RyYXdlciBsb2NhdGlvbj1cImVuZFwiIFttb2RlXT1cIidvdmVybGF5J1wiPlxuICAgIDxheC1jb250ZW50IGNsYXNzPVwiYXgtdy1bODV2d10gbWQ6YXgtdy1bNDV2d10gbGc6YXgtdy1bMzV2d10gMnhsOmF4LXctWzIwdnddIGF4LWJvcmRlci1lXCI+XG4gICAgICA8YXhwLWxpc3Qtdmlldy1vcHRpb24tY29sdW1ucyBbbG9hZGVyXT1cImxvYWRlclwiIChvbkNsb3NlZCk9XCJjb2x1bW5zRHJhd2VyLmNsb3NlKClcIj48L2F4cC1saXN0LXZpZXctb3B0aW9uLWNvbHVtbnM+XG4gICAgPC9heC1jb250ZW50PlxuICA8L2F4LWRyYXdlcj5cbiAgPGF4LWRyYXdlciAoY29sbGFwc2VkQ2hhbmdlKT1cImNsb3NlRHJhd2VyKCdjb25kaXRpb25zJywgJGV2ZW50KVwiICNjb25kaXRpb25zRHJhd2VyIGxvY2F0aW9uPVwiZW5kXCIgW21vZGVdPVwiJ292ZXJsYXknXCI+XG4gICAgPGF4LWNvbnRlbnQgY2xhc3M9XCJheC13LVs4NXZ3XSBtZDpheC13LVs0NXZ3XSBsZzpheC13LVszNXZ3XSAyeGw6YXgtdy1bMjV2d10gYXgtYm9yZGVyLWVcIj5cbiAgICAgIDxheHAtbGlzdC12aWV3LW9wdGlvbi1jb25kaXRpb25zIFtsb2FkZXJdPVwibG9hZGVyXCJcbiAgICAgICAgKG9uQ2xvc2VkKT1cImNvbmRpdGlvbnNEcmF3ZXIuY2xvc2UoKVwiPjwvYXhwLWxpc3Qtdmlldy1vcHRpb24tY29uZGl0aW9ucz5cbiAgICA8L2F4LWNvbnRlbnQ+XG4gIDwvYXgtZHJhd2VyPlxuICA8YXgtZHJhd2VyIChjb2xsYXBzZWRDaGFuZ2UpPVwiY2xvc2VEcmF3ZXIoJ3NvcnRzJywgJGV2ZW50KVwiICNzb3J0c0RyYXdlciBsb2NhdGlvbj1cImVuZFwiIFttb2RlXT1cIidvdmVybGF5J1wiPlxuICAgIDxheC1jb250ZW50IGNsYXNzPVwiYXgtdy1bODV2d10gbWQ6YXgtdy1bNDV2d10gbGc6YXgtdy1bMzV2d10gMnhsOmF4LXctWzIwdnddIGF4LWJvcmRlci1lXCI+XG4gICAgICA8YXhwLWxpc3Qtdmlldy1vcHRpb24tc29ydGluZyAob25DbG9zZWQpPVwic29ydHNEcmF3ZXIuY2xvc2UoKVwiIFtsb2FkZXJdPVwibG9hZGVyXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1zb3J0aW5nPlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+XG48L2F4LWRyYXdlci1jb250YWluZXI+Il19
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQWdELE1BQU0sK0JBQStCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBdUIsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztB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QyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hY3Rpb24tc2hlZXQnO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb21wb25lbnQsIEFYUm93Q29tbWFuZEl0ZW0sIEFYUm93Q29tbWFuZEl0ZW1DbGlja0V2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgQVhEcmF3ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJhd2VyJztcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcHVwJztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQVhQQWRtaW5MYXlvdXRTdGF0ZSwgQVhQTGF5b3V0Q2hpbGREcmF3ZXJUb2dnbGUgfSBmcm9tICcuLi8uLi9zdG9yZSc7XG5cbmltcG9ydCB7IEFYQ2xpY2tFdmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVSb3dEYkNsaWNrIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RhdGEtdGFibGUvbGliL2Jhc2UtZGF0YS10YWJsZS5jbGFzcyc7XG5pbXBvcnQgeyBBWFVuc3Vic2NyaWJlciB9IGZyb20gJ0BhY29yZXgvY29yZS91dGlscyc7XG5pbXBvcnQgeyBBWFBfTUVOVV9MT0FERVIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd1NlcnZpY2UsIG9mVHlwZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vd29ya2Zsb3cnO1xuaW1wb3J0IHsgQVhQTGF5b3V0U2VydmljZSwgY29udmVydFByb3BlcnRpZXNUb0NvbHVtbnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgQVhQRW50aXR5Q3JlYXRlRXZlbnQgfSBmcm9tICcuLi8uLi9lbnRpdHktbGF5b3V0L3dvcmtmbG93cy9jcmVhdGUtZW50aXR5LndvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eURlbGV0ZWRFdmVudCB9IGZyb20gJy4uLy4uL2VudGl0eS1sYXlvdXQvd29ya2Zsb3dzL2RlbGV0ZS1lbnRpdHkud29ya2Zsb3cnO1xuaW1wb3J0IHsgQVhQRW50aXR5Q3JlYXRlQ3VzdG9tVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lbnRpdHktY3VzdG9tLXZpZXcvZW50aXR5LWN1c3RvbS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFBMaXN0Vmlld0xvYWRlciB9IGZyb20gJy4vbGlzdC12aWV3LmNvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJ2VudGl0eS1saXN0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQVhVbnN1YnNjcmliZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBFbnRpdHlMaXN0Vmlld0NvbXBvbmVudCB7XG4gIHByaXZhdGUgc3RvcmUgPSBpbmplY3QoU3RvcmU8QVhQQWRtaW5MYXlvdXRTdGF0ZT4pO1xuICBwcml2YXRlIHdvcmtmbG93ID0gaW5qZWN0KEFYUFdvcmtmbG93U2VydmljZSk7XG4gIHByaXZhdGUgbGF5b3V0ID0gaW5qZWN0KEFYUExheW91dFNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBtYW51TG9hZGVyID0gaW5qZWN0KEFYUF9NRU5VX0xPQURFUik7XG5cbiAgcHJvdGVjdGVkIGxvYWRlciA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnbG9hZGVyJ10gYXMgQVhQTGlzdFZpZXdMb2FkZXI7XG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCBzZWFyY2hCb3hQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCBzZWFyY2hCb3hUaXRsZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCBzZWFyY2hCb3hDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBwdWJsaWNWaWV3cyQgPSB0aGlzLmxvYWRlci5wdWJsaWNWaWV3cyQ7XG4gIHByb3RlY3RlZCBjdXN0b21WaWV3cyQgPSB0aGlzLmxvYWRlci5jdXN0b21WaWV3cyQ7XG4gIHByb3RlY3RlZCBoYXNDdXN0b21WaWV3cyQgPSB0aGlzLmxvYWRlci5oYXNDdXN0b21WaWV3cyQ7XG4gIHByb3RlY3RlZCB2aWV3JCA9IHRoaXMubG9hZGVyLnZpZXckO1xuICAvL1xuICBwcm90ZWN0ZWQgY29uZGl0aW9ucyQgPSB0aGlzLmxvYWRlci5jb25kaXRpb25zJDtcbiAgcHJvdGVjdGVkIGNvbmRpdGlvbnNDb3VudCQgPSB0aGlzLmxvYWRlci5jb25kaXRpb25zQ291bnQkO1xuICAvL1xuICBwcm90ZWN0ZWQgY29sdW1ucyQgPSB0aGlzLmxvYWRlci5kaXNwbGF5Q29sdW1ucyQ7XG4gIHByb3RlY3RlZCBjb2x1bW5zQ291bnQkID0gdGhpcy5sb2FkZXIuZGlzcGxheUNvbHVtbnNDb3VudCQ7XG4gIC8vXG4gIHByb3RlY3RlZCBzb3J0JCA9IHRoaXMubG9hZGVyLnNvcnRzJDtcbiAgcHJvdGVjdGVkIHNvcnRDb3VudCQgPSB0aGlzLmxvYWRlci5zb3J0c0NvdW50JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGRhdGFTb3VyY2UgPSB0aGlzLmxvYWRlci5kYXRhU291cmNlO1xuICAvL1xuICBwcm90ZWN0ZWQgY2FuRGVsZXRlID0gdGhpcy5sb2FkZXIuZW50aXR5LmVkaXRPcHRpb25zPy5kZWxldGUgPz8gdHJ1ZTtcbiAgcHJvdGVjdGVkIGNhbkNyZWF0ZSA9IHRoaXMubG9hZGVyLmVudGl0eS5lZGl0T3B0aW9ucz8uY3JlYXRlID8/IHRydWU7XG4gIHByb3RlY3RlZCBjYW5VcGRhdGUgPSB0aGlzLmxvYWRlci5lbnRpdHkuZWRpdE9wdGlvbnM/LnVwZGF0ZSA/PyB0cnVlO1xuICAvL1xuICBwcm90ZWN0ZWQgZm9jdXNlZFJvdzogYW55O1xuICAvL1xuICBAVmlld0NoaWxkKCd2aWV3c1RlbXBsYXRlJykgdmlld3NUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAvLyBAVmlld0NoaWxkKCdncmlkJykgZ3JpZCE6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZCE6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdlbnRpdHlWaWV3RHJhd2VyJykgZW50aXR5Vmlld0RyYXdlciE6IEFYRHJhd2VyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcG9wdXBTZXJ2aWNlID0gaW5qZWN0KEFYUG9wdXBTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGlvblNoZWV0U2VydmljZTogQVhBY3Rpb25TaGVldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZXI6IEFYVW5zdWJzY3JpYmVyLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogQVhQbGF0Zm9ybSxcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvL1RPRE86IG5hbWVzcGFjZSwgbW9kdWxlIG5hbWUgaXNzdWVzXG4gICAgdGhpcy50aXRsZSA9IHRoaXMubWFudUxvYWRlci5jdXJyZW50TWVudUl0ZW0oKT8udGV4dCA/PyB0aGlzLmxvYWRlci5lbnRpdHkuZm9ybWF0cz8ubGlzdCA/PyB0aGlzLmxvYWRlci5lbnRpdHkuZm9ybWF0cz8uZGVmYXVsdCA/PyAnVGl0bGUnO1xuICAgIC8vXG5cbiAgICB0aGlzLndvcmtmbG93LmV2ZW50cyQucGlwZShvZlR5cGUoQVhQRW50aXR5RGVsZXRlZEV2ZW50LCBBWFBFbnRpdHlDcmVhdGVFdmVudCksIHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5wYXlsb2FkLmVudGl0eSA9PSB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSAmJiBldmVudC5wYXlsb2FkLm1vZHVsZSA9PSB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5ncmlkPy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLmRhdGFTb3VyY2Uub25Mb2FkaW5nQ2hhbmdlZC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0LnNldE5hdmlnYXRpb25Mb2FkaW5nKHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9nZXRJbmxpbmVDb25kaXRpb25UaXRsZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxvYWRlci5zZXREZWZhdWx0VmlldygpO1xuICB9XG5cbiAgX2dldElubGluZUNvbmRpdGlvblRpdGxlcygpIHtcbiAgICBjb25zdCB0aXRsZXMgPSB0aGlzLmxvYWRlci5nZXRJbmxpbmVGaWx0ZXJUaXRsZXMoKTtcbiAgICB0aGlzLnNlYXJjaEJveFRpdGxlID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAyKSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLnNsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnIC4uLic7XG4gICAgZWxzZSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gIH1cblxuICBfaGFuZGxlVmlld3NQb3BvdmVyKCkge1xuICAgIHRoaXMuYWN0aW9uU2hlZXRTZXJ2aWNlLm9wZW4oeyBjb250ZW50OiB0aGlzLnZpZXdzVGVtcGxhdGUgfSk7XG4gIH1cblxuICBoYW5kbGVEcmF3ZXJDbGljaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFYUExheW91dENoaWxkRHJhd2VyVG9nZ2xlKCkpO1xuICB9XG5cbiAgdG9nZ2xlU2VhcmNoQm94KCkge1xuICAgIHRoaXMuc2VhcmNoQm94Q29sbGFwc2VkID0gIXRoaXMuc2VhcmNoQm94Q29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93blJvd0l0ZW1zOiBBWFJvd0NvbW1hbmRJdGVtW10gPSBbXG4gICAge1xuICAgICAgdGV4dDogJ0RldGFpbHMnLFxuICAgICAgaWNvbjogJ2ZhLXNvbGlkIGZhLWV5ZScsXG4gICAgICBuYW1lOiAnZWRpdCcsXG4gICAgICBkaXZpZGVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICBpY29uOiAnZmEtc29saWQgZmEtdHJhc2gtY2FuJyxcbiAgICAgIG5hbWU6ICdkZWxldGUnLFxuICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgZGlzYWJsZWQ6ICF0aGlzLmNhbkRlbGV0ZSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgaW5saW5lUm93SXRlbXM6IEFYUm93Q29tbWFuZEl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICB0ZXh0OiAnVmlldycsXG4gICAgICBpY29uOiAnZmEtc29saWQgIGZhLWV5ZScsXG4gICAgICBuYW1lOiAndmlldycsXG4gICAgICBkaXZpZGVkOiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgcHJvdGVjdGVkIGdldERyb3Bkb3duUm93SXRlbXMgPSAocm93RGF0YTogdW5rbm93bik6IFByb21pc2U8QVhSb3dDb21tYW5kSXRlbVtdPiA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRyb3Bkb3duUm93SXRlbXMpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXRJbmxpbmVSb3dJdGVtcyA9IChyb3dEYXRhOiB1bmtub3duKTogQVhSb3dDb21tYW5kSXRlbVtdID0+IHtcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVSb3dJdGVtcztcbiAgfTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlUm93RGJDbGljayhlOiBBWERhdGFUYWJsZVJvd0RiQ2xpY2spIHtcbiAgICBjb25zdCBkOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogZS5jb21wb25lbnQsXG4gICAgICBuYW1lOiB0aGlzLmRyb3Bkb3duUm93SXRlbXNbMF0ubmFtZSxcbiAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlUm93Q29tbWFuZENsaWNrKGQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVJvd0NvbW1hbmRDbGljayhlOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCkge1xuICAgIHN3aXRjaCAoZS5uYW1lKSB7XG4gICAgICBjYXNlICd2aWV3Jzoge1xuICAgICAgICBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ3Nob3ctcXVpY2stdmlldycsIHtcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VkaXQnOiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnc2hvdy1kZXRhaWxzJywge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIG1vZHVsZTogdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSxcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZDogZS5kYXRhLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkZWxldGUnOiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnZGVsZXRlLWVudGl0eScsIHtcbiAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSxcbiAgICAgICAgICBpZHM6IFtlLmRhdGEuaWRdLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNyZWF0ZUNsaWNrKCkge1xuICAgIHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnY3JlYXRlLWVudGl0eScsIHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgbW9kdWxlOiB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlLFxuICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDb21tYW5kQ2xpY2soY29tbWFuZDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ2RlbGV0ZS1lbnRpdHknLCB7XG4gICAgICAgICAgbW9kdWxlOiB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlLFxuICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgaWRzOiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzLm1hcCgoYykgPT4gKGMgYXMgYW55KVsnaWQnXSksXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclNlbGVjdGVkSXRlbXMoKSB7XG4gICAgdGhpcy5ncmlkLnNlbGVjdGVkUm93cyA9IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlRHJhd2VyKG5hbWU6IHN0cmluZywgY29sbGFwc2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGNvbGxhcHNlZCAhPSBmYWxzZSkge1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NvbmRpdGlvbnMnOlxuICAgICAgICAgIHRoaXMubG9hZGVyLnJlc2V0Q29uZGl0aW9ucygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICB0aGlzLmxvYWRlci5yZXNldENvbHVtbnMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc29ydHMnOlxuICAgICAgICAgIHRoaXMubG9hZGVyLnJlc2V0U29ydCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNoYW5nZVNlYXJjaFZhbHVlKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXIuaGFuZGxlSW5saW5lU2VhcmNoKGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRDdXN0b21WaWV3UG9wdXAoKSB7XG4gICAgY29uc3QgbmV3VmlldyA9IHtcbiAgICAgIG5hbWU6ICdjdXN0b20tdmlldycsXG4gICAgICB0aXRsZTogJ0N1c3RvbSBWaWV3JyxcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHNvcnRzOiBbXSxcbiAgICAgIGNvbHVtbnM6IGNvbnZlcnRQcm9wZXJ0aWVzVG9Db2x1bW5zKC4uLnRoaXMubG9hZGVyLmVudGl0eS5wcm9wZXJ0aWVzKSxcbiAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgIH07XG5cbiAgICBjb25zdCBwb3B1cCA9IGF3YWl0IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oQVhQRW50aXR5Q3JlYXRlQ3VzdG9tVmlld0NvbXBvbmVudCwge1xuICAgICAgdGl0bGU6ICdDcmVhdGUgQ3VzdG9tIFZpZXcnLFxuICAgICAgc2l6ZTogdGhpcy5wbGF0Zm9ybS5pcygnTW9iaWxlJykgfHwgdGhpcy5wbGF0Zm9ybS5pcygnU00nKSA/ICdmdWxsJyA6ICdtZCcsXG4gICAgICBjbG9zZU9uQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxvYWRlcjogdGhpcy5sb2FkZXIsXG4gICAgICAgIHNlbGVjdGVkVmlldzogbmV3VmlldyxcbiAgICAgICAgbW9kZTogJ2NyZWF0ZScsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChwb3B1cC5kYXRhPy5zYXZlID09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkVmlldzogJywgcG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgICB0aGlzLmxvYWRlci5jcmVhdGVWaWV3KHBvcHVwLmRhdGEudXBkYXRlZFZpZXcpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVmlld1BvcHVwKGU6IEFYQ2xpY2tFdmVudCwgc2VsZWN0ZWRWaWV3OiBhbnkpIHtcbiAgICAvLyAoZS5uYXRpdmVFdmVudCBhcyBVSUV2ZW50KS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBwb3B1cCA9IGF3YWl0IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oQVhQRW50aXR5Q3JlYXRlQ3VzdG9tVmlld0NvbXBvbmVudCwge1xuICAgICAgdGl0bGU6ICdNb2RpZnkgQ3VzdG9tIFZpZXcnLFxuICAgICAgc2l6ZTogdGhpcy5wbGF0Zm9ybS5pcygnTW9iaWxlJykgfHwgdGhpcy5wbGF0Zm9ybS5pcygnU00nKSA/ICdmdWxsJyA6ICdtZCcsXG4gICAgICBjbG9zZU9uQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxvYWRlcjogdGhpcy5sb2FkZXIsXG4gICAgICAgIHNlbGVjdGVkVmlldyxcbiAgICAgICAgbW9kZTogJ2VkaXQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAocG9wdXAuZGF0YT8uZGVsZXRlID09IHRydWUpIHtcbiAgICAgIHRoaXMubG9hZGVyLmRlbGV0ZVZpZXcocG9wdXAuZGF0YS52aWV3TmFtZSk7XG4gICAgfVxuICAgIGlmIChwb3B1cC5kYXRhPy5zYXZlID09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkVmlldzogJywgcG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgICB0aGlzLmxvYWRlci51cGRhdGVWaWV3KHBvcHVwLmRhdGEudXBkYXRlZFZpZXcpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5yZXNldCgpO1xuICB9XG59XG4iLCI8YXgtZHJhd2VyLWNvbnRhaW5lcj5cbiAgPCEtLSA8YXgtZHJhd2VyICNkcmF3ZXIgbG9jYXRpb249XCJzdGFydFwiIFtjb2xsYXBzZWRdPVwidHJ1ZVwiIFttb2RlXT1cInBsYXRmb3JtLmlzKCdTTScpID8gJ292ZXJsYXknIDogJ3B1c2gnXCI+XG4gICAgPGF4LWNvbnRlbnQgY2xhc3M9XCJheC13LTY0IGF4LWJvcmRlci1lXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtcC02IGF4LXB5LTQgYXgtZ2FwLTYgYXgtZmxleCBheC1mbGV4LWNvbFwiPlxuICAgICAgICA8cCBjbGFzcz1cImF4LXRleHQtMnhsIGF4LWZvbnQtYm9sZFwiPkZvbGRlcnM8L3A+XG4gICAgICAgIDxheC1zaWRlLW1lbnU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbm9kZSBvZiBtZW51SXRlbXNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlTWVudVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2F4LXNpZGUtbWVudT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaWRlTWVudSBsZXQtaXRlbT5cbiAgICAgICAgICA8YXgtc2lkZS1tZW51LWl0ZW0gW3RleHRdPVwiaXRlbS50ZXh0XCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWZvbGRlciBheC10ZXh0LXdhcm5pbmctNTAwXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jaGlsZHJlblwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLmNoaWxkcmVuXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2lkZU1lbnVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2hpbGQgfVwiPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvYXgtc2lkZS1tZW51LWl0ZW0+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2F4LWNvbnRlbnQ+XG4gIDwvYXgtZHJhd2VyPiAtLT5cbiAgPGF4LWNvbnRlbnQgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW92ZXJmbG93LWhpZGRlblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMCBtZDpheC1nYXAtNCBheC1weC00IGF4LXB5LTMgbWQ6YXgtcHktNCBtZDpheC1weC02IGF4LWJnLXN1cmZhY2UgYXgtYm9yZGVyLWIgbWQ6YXgtYm9yZGVyLTAgbWQ6YXgtYmctZGVmYXVsdFwiPlxuICAgICAgQGlmKHBsYXRmb3JtLmlzKCdNRCcpKXtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWp1c3RpZnktYmV0d2VlbiBheC1tYi00XCI+XG4gICAgICAgIEBpZih0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoPT0wKXtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRleHQteGwgYXgtZm9udC1ib2xkXCI+e3sgdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0yXCI+XG4gICAgICAgICAgQGlmKGNhbkNyZWF0ZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgPGF4LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImF4LXNtXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj48L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJnaG9zdFwiIGNsYXNzPVwiYXgtc21cIiAjbW9yZT5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsIFthZGFwdGl2aXR5RW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRXhwb3J0XCIgY2xhc3M9XCJheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZmlsZS1leHBvcnRcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1AZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj4ge3sgdGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCB9fSBJdGVtcyBTZWxlY3RlZCA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRJdGVtcygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdGV4dC1zbSBheC10ZXh0LXByaW1hcnkgZGFyazpheC10ZXh0LXByaW1hcnktMzAwIGF4LXVuZGVybGluZSBheC1jdXJzb3ItcG9pbnRlclwiPkNsZWFyXG4gICAgICAgICAgICBJdGVtczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMlwiPlxuICAgICAgICAgIEBpZihjYW5EZWxldGUpXG4gICAgICAgICAge1xuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImF4LXNtXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ29tbWFuZENsaWNrKCdkZWxldGUnKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJnaG9zdFwiIGNsYXNzPVwiYXgtc21cIiAjbW9yZT5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgW3RleHRdPVwiKHZpZXckIHwgYXN5bmMpPy50aXRsZVwiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWV5ZSBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jYXJldC1kb3duXCI+PC9pPlxuICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbCBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3QgY2xhc3M9XCJheC1iZy1zdXJmYWNlXCI+XG4gICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiPlB1YmxpYyBWaWV3czwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSAqbmdGb3I9XCJsZXQgdiBvZiBwdWJsaWNWaWV3cyQgfCBhc3luY1wiIFt0ZXh0XT1cInYudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1iZy1vbi1zdXJmYWNlXT1cIih2aWV3JCB8IGFzeW5jKSA9PSB2XCIgKG9uQ2xpY2spPVwibG9hZGVyLnNldFZpZXcodi5uYW1lKVwiPjwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiICpuZ0lmPVwiaGFzQ3VzdG9tVmlld3MkIHwgYXN5bmNcIj5DcmVhdGVkIGJ5IG1lPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtICpuZ0Zvcj1cImxldCB2IG9mIGN1c3RvbVZpZXdzJCB8IGFzeW5jXCIgW3RleHRdPVwidi50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIiAob25DbGljayk9XCJsb2FkZXIuc2V0Vmlldyh2Lm5hbWUpXCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZmVhdHVyZT1cIidheHAtZW50aXR5LWxpc3QtY3VzdG9tLXZpZXcnXCI+XG4gICAgICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSAob25DbGljayk9XCJhZGRDdXN0b21WaWV3UG9wdXAoKVwiIHRleHQ9XCJBZGQgQ3VzdG9tIFZpZXdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQtcHJpbWFyeVwiPjwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtMlwiPlxuICAgICAgICAgIEBpZihzZWFyY2hCb3hUaXRsZSl7XG4gICAgICAgICAgPGF4LWJ1dHRvbiAqZmVhdHVyZT1cIidheHAtZW50aXR5LWxpc3QtcXVpY2stc2VhcmNoJ1wiIChvbkNsaWNrKT1cInRvZ2dsZVNlYXJjaEJveCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoICE9IDBcIiBjb2xvcj1cImdob3N0XCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLXNlYXJjaCBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgY29sb3I9XCJnaG9zdFwiIChvbkNsaWNrKT1cImNvbHVtbnNEcmF3ZXIub3BlbigpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnMgYXgtdGV4dC1uZXV0cmFsLTQwMFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgY29sb3I9XCJnaG9zdFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJjb25kaXRpb25zRHJhd2VyLm9wZW4oKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1zbGlkZXJzIGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgQGlmICgoY29uZGl0aW9uc0NvdW50JCB8IGFzeW5jKSkge1xuICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgPGF4LWJhZGdlIFtjb2xvcl09XCIncHJpbWFyeSdcIj48L2F4LWJhZGdlPlxuICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgY29sb3I9XCJnaG9zdFwiIChvbkNsaWNrKT1cInNvcnRzRHJhd2VyLm9wZW4oKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzLXNvcnQgYXgtdGV4dC1uZXV0cmFsLTQwMFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgICBAaWYgKChzb3J0Q291bnQkIHwgYXN5bmMpKSB7XG4gICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICA8YXgtYmFkZ2UgW2NvbG9yXT1cIidwcmltYXJ5J1wiPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKmZlYXR1cmU9XCInYXhwLWVudGl0eS1saXN0LXF1aWNrLXNlYXJjaCdcIiBbY2xhc3MuY29sbGFwc2VkLXNlYXJjaC1ib3hdPVwic2VhcmNoQm94Q29sbGFwc2VkXCJcbiAgICAgICAgY2xhc3M9XCJheC10cmFuc2l0aW9uLWFsbCBheC1tdC00XCI+XG4gICAgICAgIDxheC1zZWFyY2gtYm94IFt0aXRsZV09XCJzZWFyY2hCb3hUaXRsZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggb24gJyArIHNlYXJjaEJveFBsYWNlaG9sZGVyXCI+PGF4LWNsZWFyLWJ1dHRvbj48L2F4LWNsZWFyLWJ1dHRvbj48L2F4LXNlYXJjaC1ib3g+XG4gICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14bCBtZDpheC10ZXh0LTN4bCBheC1mb250LWJvbGQgYXgtbWItMlwiPnt7IHRpdGxlIH19PC9kaXY+XG4gICAgICAgIEBpZih0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoPT0wKXtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTNcIj5cbiAgICAgICAgICBAaWYoY2FuQ3JlYXRlKVxuICAgICAgICAgIHtcbiAgICAgICAgICA8YXgtYnV0dG9uIHRleHQ9XCJDcmVhdGUgTmV3XCIgY29sb3I9XCJwcmltYXJ5XCIgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGF4LWJ1dHRvbiB0ZXh0PVwiQWN0aW9uc1wiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbCBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gdGV4dD1cIkV4cG9ydFwiIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLXNvbGlkIGZhLWZpbGUtZXhwb3J0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9QGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtM1wiPlxuICAgICAgICAgIEBpZihjYW5EZWxldGUpXG4gICAgICAgICAge1xuICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkRlbGV0ZSBJdGVtc1wiIGNvbG9yPVwiZGFuZ2VyXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ29tbWFuZENsaWNrKCdkZWxldGUnKVwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uIHRleHQ9XCJBY3Rpb25zXCIgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFZpZXcgTW9kZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtdy1mdWxsIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zXCI+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIih2aWV3JCB8IGFzeW5jKT8udGl0bGVcIiAjdmlld3MgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZXllXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNhcmV0LWRvd25cIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWwgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdCBjbGFzcz1cImF4LWJnLXN1cmZhY2VcIj5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiPlB1YmxpYyBWaWV3czwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKm5nRm9yPVwibGV0IHYgb2YgcHVibGljVmlld3MkIHwgYXN5bmNcIiBbdGV4dF09XCJ2LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIiAob25DbGljayk9XCJsb2FkZXIuc2V0Vmlldyh2Lm5hbWUpXCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiICpuZ0lmPVwiaGFzQ3VzdG9tVmlld3MkIHwgYXN5bmNcIj5DcmVhdGVkIGJ5IG1lPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSBjbGFzcz1cImF4LXBlLTQgYXgtZmxleCBheC1qdXN0aWZ5LWJldHdlZW5cIiAqbmdGb3I9XCJsZXQgdiBvZiBjdXN0b21WaWV3cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInYudGl0bGVcIiBbY2xhc3MuYXgtYmctb24tc3VyZmFjZV09XCIodmlldyQgfCBhc3luYykgPT0gdlwiIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInVwZGF0ZVZpZXdQb3B1cCgkZXZlbnQsIHYpXCIgY2xhc3M9XCJheC14c1wiIGxvb2s9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhciBmYS1lZGl0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZmVhdHVyZT1cIidheHAtZW50aXR5LWxpc3QtY3VzdG9tLXZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxheC1kaXZpZGVyPjwvYXgtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIHRleHQ9XCJBZGQgQ3VzdG9tIFZpZXdcIiAob25DbGljayk9XCJhZGRDdXN0b21WaWV3UG9wdXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQtcHJpbWFyeVwiPjwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIEBpZihzZWFyY2hCb3hUaXRsZSl7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdy03MlwiICpmZWF0dXJlPVwiJ2F4cC1lbnRpdHktbGlzdC1xdWljay1zZWFyY2gnXCI+XG4gICAgICAgICAgICAgIDxheC1zZWFyY2gtYm94IFt0aXRsZV09XCJzZWFyY2hCb3hUaXRsZVwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVDaGFuZ2VTZWFyY2hWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBvbiAnICsgc2VhcmNoQm94UGxhY2Vob2xkZXJcIj48YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTNcIj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkNvbHVtbnNcIiBjb2xvcj1cImdob3N0XCIgI2NvbHVtbnMgKG9uQ2xpY2spPVwiY29sdW1uc0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnNcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgY29sdW1uc0NvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkZpbHRlcnNcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwiY29uZGl0aW9uc0RyYXdlci5vcGVuKClcIiAjY29uZGl0aW9ucz5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNsaWRlcnNcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgY29uZGl0aW9uc0NvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIlNvcnRcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwic29ydHNEcmF3ZXIub3BlbigpXCI+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzLXNvcnRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4ICpuZ0lmPVwiKHNvcnRDb3VudCQgfCBhc3luYykhID4gMFwiPlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgc29ydENvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgfSBAZWxzZXtcbiAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU2VsZWN0aW9uIE1vZGUgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTMgYXgtaXRlbXMtY2VudGVyIGF4LWgtMTBcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj4ge3sgdGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCB9fSBJdGVtcyBTZWxlY3RlZCA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZEl0ZW1zKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXRleHQtc20gYXgtdGV4dC1wcmltYXJ5IGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMCBheC11bmRlcmxpbmUgYXgtY3Vyc29yLXBvaW50ZXJcIj5DbGVhclxuICAgICAgICAgICAgICBJdGVtczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4LTEgYXgtcHgtNiBheC1weS00IGF4LWZsZXggYXgtb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgPGF4LWRhdGEtdGFibGUgI2dyaWQgW3Nob3dGb290ZXJdPVwiZmFsc2VcIiBjbGFzcz1cImF4LWZsZXgtMVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbcGFnaW5nXT1cInRydWVcIlxuICAgICAgICBbZmV0Y2hEYXRhTW9kZV09XCInbWFudWFsJ1wiIChvblJvd0RiQ2xpY2spPVwiaGFuZGxlUm93RGJDbGljaygkZXZlbnQpXCJcbiAgICAgICAgW2xvYWRpbmddPVwieyBlbmFibGVkOiB0cnVlLCBhbmltYXRpb246IHRydWUgfVwiPlxuICAgICAgICA8IS0tIDxheC1pbmRleC1jb2x1bW4gKm5nSWY9XCIhcGxhdGZvcm0uaXMoJ1NNJylcIiBbd2lkdGhdPVwiJzg1cHgnXCI+PC9heC1pbmRleC1jb2x1bW4+IC0tPlxuICAgICAgICA8YXgtc2VsZWN0LWNvbHVtbiBmaXhlZD1cInN0YXJ0XCIgW3dpZHRoXT1cIic1MHB4J1wiPjwvYXgtc2VsZWN0LWNvbHVtbj5cbiAgICAgICAgQGZvcihjb2wgb2YgKGNvbHVtbnMkIHwgYXN5bmMpO3RyYWNrIGNvbC5uYW1lKSB7XG4gICAgICAgIDxheHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlciAqbmdJZj1cImNvbC52aXNpYmxlXCIgW3NjaGVtYV09XCJjb2wuc2NoZW1hXCIgW2RhdGFGaWVsZF09XCJjb2wubmFtZVwiXG4gICAgICAgICAgW2NhcHRpb25dPVwiY29sLnRpdGxlXCIgW29wdGlvbnNdPVwiY29sLm9wdGlvbnNcIiBbZGlzcGxheUZvcm1hdF09XCJjb2wuZGlzcGxheUZvcm1hdFwiIHdpZHRoPVwiMTgwcHhcIlxuICAgICAgICAgIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIj5cbiAgICAgICAgPC9heHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlcj5cbiAgICAgICAgfVxuICAgICAgICA8YXgtZHJvcGRvd24tY29tbWFuZC1jb2x1bW4gZml4ZWQ9XCJlbmRcIiBbd2lkdGhdPVwiJzYwcHgnXCIgW2l0ZW1zXT1cImdldERyb3Bkb3duUm93SXRlbXNcIlxuICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiPjwvYXgtZHJvcGRvd24tY29tbWFuZC1jb2x1bW4+XG4gICAgICAgIDxheC1jb21tYW5kLWNvbHVtbiBmaXhlZD1cImVuZFwiIFt3aWR0aF09XCInNjBweCdcIiBbaXRlbXNdPVwiZ2V0SW5saW5lUm93SXRlbXNcIlxuICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiPjwvYXgtY29tbWFuZC1jb2x1bW4+XG4gICAgICA8L2F4LWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvYXgtY29udGVudD5cbiAgPGF4LWRyYXdlciAoY29sbGFwc2VkQ2hhbmdlKT1cImNsb3NlRHJhd2VyKCdjb2x1bW5zJywgJGV2ZW50KVwiICNjb2x1bW5zRHJhd2VyIGxvY2F0aW9uPVwiZW5kXCIgW21vZGVdPVwiJ292ZXJsYXknXCI+XG4gICAgPGF4LWNvbnRlbnQgY2xhc3M9XCJheC13LVs4NXZ3XSBtZDpheC13LVs0NXZ3XSBsZzpheC13LVszNXZ3XSAyeGw6YXgtdy1bMjB2d10gYXgtYm9yZGVyLWVcIj5cbiAgICAgIDxheHAtbGlzdC12aWV3LW9wdGlvbi1jb2x1bW5zIFtsb2FkZXJdPVwibG9hZGVyXCIgKG9uQ2xvc2VkKT1cImNvbHVtbnNEcmF3ZXIuY2xvc2UoKVwiPjwvYXhwLWxpc3Qtdmlldy1vcHRpb24tY29sdW1ucz5cbiAgICA8L2F4LWNvbnRlbnQ+XG4gIDwvYXgtZHJhd2VyPlxuICA8YXgtZHJhd2VyIChjb2xsYXBzZWRDaGFuZ2UpPVwiY2xvc2VEcmF3ZXIoJ2NvbmRpdGlvbnMnLCAkZXZlbnQpXCIgI2NvbmRpdGlvbnNEcmF3ZXIgbG9jYXRpb249XCJlbmRcIiBbbW9kZV09XCInb3ZlcmxheSdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctWzg1dnddIG1kOmF4LXctWzQ1dnddIGxnOmF4LXctWzM1dnddIDJ4bDpheC13LVsyNXZ3XSBheC1ib3JkZXItZVwiPlxuICAgICAgPGF4cC1saXN0LXZpZXctb3B0aW9uLWNvbmRpdGlvbnMgW2xvYWRlcl09XCJsb2FkZXJcIlxuICAgICAgICAob25DbG9zZWQpPVwiY29uZGl0aW9uc0RyYXdlci5jbG9zZSgpXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1jb25kaXRpb25zPlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+XG4gIDxheC1kcmF3ZXIgKGNvbGxhcHNlZENoYW5nZSk9XCJjbG9zZURyYXdlcignc29ydHMnLCAkZXZlbnQpXCIgI3NvcnRzRHJhd2VyIGxvY2F0aW9uPVwiZW5kXCIgW21vZGVdPVwiJ292ZXJsYXknXCI+XG4gICAgPGF4LWNvbnRlbnQgY2xhc3M9XCJheC13LVs4NXZ3XSBtZDpheC13LVs0NXZ3XSBsZzpheC13LVszNXZ3XSAyeGw6YXgtdy1bMjB2d10gYXgtYm9yZGVyLWVcIj5cbiAgICAgIDxheHAtbGlzdC12aWV3LW9wdGlvbi1zb3J0aW5nIChvbkNsb3NlZCk9XCJzb3J0c0RyYXdlci5jbG9zZSgpXCIgW2xvYWRlcl09XCJsb2FkZXJcIj48L2F4cC1saXN0LXZpZXctb3B0aW9uLXNvcnRpbmc+XG4gICAgPC9heC1jb250ZW50PlxuICA8L2F4LWRyYXdlcj5cbjwvYXgtZHJhd2VyLWNvbnRhaW5lcj4iXX0=