@sumaris-net/ngx-components 2.7.2-rc9 → 2.7.3-rc2

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 (378) hide show
  1. package/doc/changelog.md +36 -0
  2. package/esm2022/public_api.mjs +11 -9
  3. package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
  4. package/esm2022/src/app/admin/admin.module.mjs +7 -9
  5. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
  6. package/esm2022/src/app/admin/services/person.service.mjs +31 -31
  7. package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
  8. package/esm2022/src/app/admin/users/users.mjs +14 -7
  9. package/esm2022/src/app/admin/users/users.module.mjs +8 -10
  10. package/esm2022/src/app/core/about/about.modal.mjs +7 -7
  11. package/esm2022/src/app/core/about/about.module.mjs +8 -21
  12. package/esm2022/src/app/core/account/account.module.mjs +9 -15
  13. package/esm2022/src/app/core/account/account.page.mjs +5 -5
  14. package/esm2022/src/app/core/account/new-token.modal.mjs +9 -8
  15. package/esm2022/src/app/core/account/token.table.mjs +5 -5
  16. package/esm2022/src/app/core/auth/auth.form.mjs +9 -9
  17. package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
  18. package/esm2022/src/app/core/auth/auth.module.mjs +9 -9
  19. package/esm2022/src/app/core/core.module.mjs +17 -46
  20. package/esm2022/src/app/core/core.testing.module.mjs +15 -15
  21. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +16 -15
  22. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
  23. package/esm2022/src/app/core/form/entity/editor.class.mjs +87 -89
  24. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +12 -17
  25. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +31 -32
  26. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  27. package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
  28. package/esm2022/src/app/core/form/form.class.mjs +12 -12
  29. package/esm2022/src/app/core/form/form.module.mjs +8 -8
  30. package/esm2022/src/app/core/form/form.utils.mjs +25 -23
  31. package/esm2022/src/app/core/form/list/list.form.mjs +13 -12
  32. package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
  33. package/esm2022/src/app/core/form/properties/properties.form.mjs +12 -15
  34. package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
  35. package/esm2022/src/app/core/form/properties/properties.table.mjs +24 -26
  36. package/esm2022/src/app/core/form/properties/property.validator.mjs +6 -6
  37. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
  38. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
  39. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +9 -8
  40. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
  41. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +6 -6
  42. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
  43. package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -13
  44. package/esm2022/src/app/core/graphql/graphql.service.mjs +71 -95
  45. package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
  46. package/esm2022/src/app/core/home/home.mjs +26 -27
  47. package/esm2022/src/app/core/home/home.module.mjs +10 -19
  48. package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
  49. package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
  50. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
  51. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
  52. package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
  53. package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
  54. package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
  55. package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
  56. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  57. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
  58. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +5 -5
  59. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
  60. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
  61. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
  62. package/esm2022/src/app/core/peer/select-peer.modal.mjs +8 -9
  63. package/esm2022/src/app/core/peer/select-peer.module.mjs +10 -19
  64. package/esm2022/src/app/core/register/register-confirm.page.mjs +12 -12
  65. package/esm2022/src/app/core/register/register.form.mjs +5 -5
  66. package/esm2022/src/app/core/register/register.modal.mjs +6 -6
  67. package/esm2022/src/app/core/register/register.module.mjs +8 -29
  68. package/esm2022/src/app/core/services/account.service.mjs +172 -160
  69. package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
  70. package/esm2022/src/app/core/services/base-entity-service.class.mjs +51 -60
  71. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
  72. package/esm2022/src/app/core/services/base58.mjs +8 -4
  73. package/esm2022/src/app/core/services/config/core.config.mjs +37 -37
  74. package/esm2022/src/app/core/services/config.service.mjs +51 -49
  75. package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
  76. package/esm2022/src/app/core/services/errors.mjs +3 -3
  77. package/esm2022/src/app/core/services/local-settings.service.mjs +36 -37
  78. package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
  79. package/esm2022/src/app/core/services/model/config.model.mjs +5 -5
  80. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  81. package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
  82. package/esm2022/src/app/core/services/model/entity.model.mjs +25 -25
  83. package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
  84. package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
  85. package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
  86. package/esm2022/src/app/core/services/model/peer.model.mjs +9 -8
  87. package/esm2022/src/app/core/services/model/person.model.mjs +18 -17
  88. package/esm2022/src/app/core/services/model/referential.model.mjs +13 -13
  89. package/esm2022/src/app/core/services/model/settings.model.mjs +1 -1
  90. package/esm2022/src/app/core/services/model/token.model.mjs +2 -3
  91. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +2 -6
  92. package/esm2022/src/app/core/services/network.service.mjs +42 -43
  93. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  94. package/esm2022/src/app/core/services/network.utils.mjs +3 -3
  95. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
  96. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
  97. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +6 -6
  98. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  99. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  100. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
  101. package/esm2022/src/app/core/services/platform.service.mjs +45 -49
  102. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
  103. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
  104. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  105. package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
  106. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  107. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +4 -4
  108. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +13 -13
  109. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  110. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
  111. package/esm2022/src/app/core/settings/settings.module.mjs +8 -21
  112. package/esm2022/src/app/core/settings/settings.page.mjs +12 -17
  113. package/esm2022/src/app/core/table/actions-column.component.mjs +13 -5
  114. package/esm2022/src/app/core/table/async-table.class.mjs +106 -112
  115. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +21 -26
  116. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +26 -29
  117. package/esm2022/src/app/core/table/memory-table.class.mjs +4 -4
  118. package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
  119. package/esm2022/src/app/core/table/table.class.mjs +107 -110
  120. package/esm2022/src/app/core/table/table.model.mjs +1 -1
  121. package/esm2022/src/app/core/table/table.module.mjs +8 -12
  122. package/esm2022/src/app/core/table/table.utils.mjs +2 -4
  123. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
  124. package/esm2022/src/app/core/table/testing/table.testing.mjs +9 -9
  125. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
  126. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  127. package/esm2022/src/app/core/table/testing/table2.testing.mjs +28 -26
  128. package/esm2022/src/app/shared/alerts.mjs +37 -35
  129. package/esm2022/src/app/shared/audio/audio.mjs +25 -27
  130. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  131. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
  132. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  133. package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
  134. package/esm2022/src/app/shared/constants.mjs +2 -3
  135. package/esm2022/src/app/shared/dates.mjs +5 -8
  136. package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
  137. package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
  138. package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
  139. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -12
  140. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
  141. package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
  142. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  143. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  144. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  145. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  146. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  147. package/esm2022/src/app/shared/events.mjs +6 -8
  148. package/esm2022/src/app/shared/file/csv.utils.mjs +22 -18
  149. package/esm2022/src/app/shared/file/file.service.mjs +11 -15
  150. package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
  151. package/esm2022/src/app/shared/file/images.utils.mjs +4 -4
  152. package/esm2022/src/app/shared/file/json.utils.mjs +3 -4
  153. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  154. package/esm2022/src/app/shared/focusable.mjs +1 -1
  155. package/esm2022/src/app/shared/form/field.component.mjs +33 -30
  156. package/esm2022/src/app/shared/form/field.model.mjs +4 -4
  157. package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
  158. package/esm2022/src/app/shared/forms.mjs +30 -33
  159. package/esm2022/src/app/shared/functions.mjs +70 -65
  160. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
  161. package/esm2022/src/app/shared/gesture/gesture-config.mjs +9 -9
  162. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
  163. package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
  164. package/esm2022/src/app/shared/graph/graph-colors.mjs +16 -22
  165. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  166. package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
  167. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
  168. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +10 -11
  169. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
  170. package/esm2022/src/app/shared/http/http.utils.mjs +1 -1
  171. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +28 -27
  172. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
  173. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  174. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
  175. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
  176. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
  177. package/esm2022/src/app/shared/image/image.model.mjs +1 -1
  178. package/esm2022/src/app/shared/image/image.module.mjs +8 -13
  179. package/esm2022/src/app/shared/image/image.service.mjs +14 -12
  180. package/esm2022/src/app/shared/inputs.mjs +19 -20
  181. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
  182. package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
  183. package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
  184. package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
  185. package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
  186. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
  187. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +87 -96
  188. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +9 -15
  189. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +2 -2
  190. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +27 -26
  191. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +45 -19
  192. package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
  193. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  194. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +9 -13
  195. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +262 -0
  196. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +6 -6
  197. package/esm2022/src/app/shared/material/chips/chips.module.mjs +7 -11
  198. package/esm2022/src/app/shared/material/chips/material.chips.mjs +69 -70
  199. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +17 -17
  200. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  201. package/esm2022/src/app/shared/material/datetime/material.date.mjs +37 -36
  202. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +26 -33
  203. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +42 -38
  204. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +20 -17
  205. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +22 -20
  206. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +18 -17
  207. package/esm2022/src/app/shared/material/duration/duration.module.mjs +5 -5
  208. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
  209. package/esm2022/src/app/shared/material/duration/material.duration.mjs +23 -24
  210. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +17 -15
  211. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +22 -24
  212. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +46 -41
  213. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
  214. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +5 -5
  215. package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
  216. package/esm2022/src/app/shared/material/material.module.mjs +11 -11
  217. package/esm2022/src/app/shared/material/material.testing.module.mjs +26 -27
  218. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +8 -14
  219. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  220. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +15 -11
  221. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
  222. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
  223. package/esm2022/src/app/shared/material/testing/common.test.mjs +17 -15
  224. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +6 -6
  225. package/esm2022/src/app/shared/material/text/text-form.component.mjs +17 -16
  226. package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
  227. package/esm2022/src/app/shared/modules.mjs +1 -1
  228. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +6 -7
  229. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  230. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  231. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +6 -6
  232. package/esm2022/src/app/shared/observables.mjs +14 -18
  233. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +38 -38
  234. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +5 -5
  235. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
  236. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +14 -14
  237. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  238. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  239. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
  240. package/esm2022/src/app/shared/pipes/form.pipes.mjs +25 -25
  241. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +14 -14
  242. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
  243. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
  244. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +11 -14
  245. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  246. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
  247. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
  248. package/esm2022/src/app/shared/pipes/pipes.module.mjs +14 -22
  249. package/esm2022/src/app/shared/pipes/property.pipes.mjs +23 -25
  250. package/esm2022/src/app/shared/pipes/string.pipes.mjs +47 -48
  251. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
  252. package/esm2022/src/app/shared/pipes/types.pipes.mjs +17 -17
  253. package/esm2022/src/app/shared/platforms.mjs +7 -5
  254. package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
  255. package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
  256. package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
  257. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +37 -35
  258. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  259. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
  260. package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
  261. package/esm2022/src/app/shared/services/translate-context.service.mjs +17 -14
  262. package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
  263. package/esm2022/src/app/shared/services.mjs +10 -10
  264. package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
  265. package/esm2022/src/app/shared/shared.module.mjs +30 -27
  266. package/esm2022/src/app/shared/shared.testing.module.mjs +6 -6
  267. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +26 -28
  268. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
  269. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
  270. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
  271. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  272. package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
  273. package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
  274. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  275. package/esm2022/src/app/shared/toast/toast.testing.mjs +10 -10
  276. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
  277. package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
  278. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +9 -7
  279. package/esm2022/src/app/shared/toolbar/toolbar.mjs +10 -15
  280. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
  281. package/esm2022/src/app/shared/types.mjs +1 -1
  282. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +8 -9
  283. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
  284. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
  285. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +17 -18
  286. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
  287. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +52 -50
  288. package/esm2022/src/app/shared/validator/validators.mjs +30 -30
  289. package/esm2022/src/app/shared/version/versions.mjs +2 -2
  290. package/esm2022/src/app/social/job/job.module.mjs +8 -27
  291. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
  292. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +27 -24
  293. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +5 -7
  294. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
  295. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +21 -17
  296. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +5 -5
  297. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +7 -7
  298. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
  299. package/esm2022/src/app/social/message/message.form.mjs +5 -5
  300. package/esm2022/src/app/social/message/message.modal.mjs +8 -8
  301. package/esm2022/src/app/social/message/message.model.mjs +8 -8
  302. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  303. package/esm2022/src/app/social/message/message.service.mjs +7 -7
  304. package/esm2022/src/app/social/social.errors.mjs +2 -2
  305. package/esm2022/src/app/social/social.module.mjs +7 -32
  306. package/esm2022/src/app/social/social.testing.module.mjs +9 -20
  307. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +17 -14
  308. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
  309. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
  310. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
  311. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
  312. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
  313. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  314. package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
  315. package/esm2022/src/app/social/user-event/user-event.service.mjs +56 -61
  316. package/esm2022/src/environments/environment.class.mjs +2 -1
  317. package/esm2022/src/environments/environment.loader.mjs +4 -4
  318. package/esm2022/src/environments/environment.mjs +2 -2
  319. package/fesm2022/sumaris-net.ngx-components.mjs +6263 -7492
  320. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  321. package/package.json +12 -7
  322. package/public_api.d.ts +3 -8
  323. package/src/app/admin/users/users.d.ts +3 -2
  324. package/src/app/core/core.module.d.ts +21 -24
  325. package/src/app/core/form/form.utils.d.ts +1 -1
  326. package/src/app/core/services/config/core.config.d.ts +1 -1
  327. package/src/app/core/services/config.service.d.ts +3 -3
  328. package/src/app/core/services/local-settings.service.d.ts +2 -3
  329. package/src/app/core/services/model/entity.model.d.ts +3 -2
  330. package/src/app/core/services/model/settings.model.d.ts +2 -2
  331. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
  332. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  333. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +12 -0
  334. package/src/app/core/table/actions-column.component.d.ts +3 -1
  335. package/src/app/shared/events.d.ts +1 -1
  336. package/src/app/shared/functions.d.ts +6 -5
  337. package/src/app/shared/graph/graph-colors.d.ts +1 -1
  338. package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
  339. package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
  340. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
  341. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
  342. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
  343. package/src/app/shared/material/boolean/boolean.module.d.ts +1 -1
  344. package/src/app/shared/material/boolean/{material-boolean.d.ts → material.boolean.d.ts} +2 -2
  345. package/src/app/shared/material/material.module.d.ts +5 -6
  346. package/src/app/shared/material/material.testing.module.d.ts +14 -15
  347. package/src/app/shared/material/swipe/material.swipe.d.ts +1 -1
  348. package/src/app/shared/pipes/pipes.module.d.ts +1 -1
  349. package/src/app/shared/pipes/string.pipes.d.ts +4 -5
  350. package/src/app/shared/validator/validators.d.ts +13 -4
  351. package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
  352. package/src/app/social/message/message.modal.d.ts +2 -2
  353. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
  354. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
  355. package/src/assets/manifest.json +1 -1
  356. package/src/environments/environment.class.d.ts +1 -0
  357. package/src/theme/_ngx-components.scss +1 -25
  358. package/src/theme/_ngx-components.tabs.scss +361 -0
  359. package/src/theme/_theme.scss +1 -0
  360. package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +0 -262
  361. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
  362. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
  363. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
  364. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
  365. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
  366. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
  367. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
  368. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  369. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
  370. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  371. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  372. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  373. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  374. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  375. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  376. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  377. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  378. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
@@ -64,22 +64,19 @@ export class EntityStore {
64
64
  */
65
65
  watchAll(variables, opts) {
66
66
  // If need full entities, but use light entities in the entities array
67
- if (this._mapToLightEntity && (opts && opts.fullLoad === true)) {
67
+ if (this._mapToLightEntity && opts && opts.fullLoad === true) {
68
68
  console.warn('[entity-store] WARN: Watching full entities, splited by id in entity store. This can be long! Please make sure you need full entities here.');
69
- return this._onChange
70
- .pipe(
69
+ return this._onChange.pipe(
71
70
  // Apply filter on cache
72
71
  map((_) => this.reduceAndSort(this._cache, variables)),
73
72
  // Then convert into full entities (using parallel jobs - /!\ can use lot of memory)
74
- mergeMap((res) => Promise.all((res.data || [])
75
- .map(e => this.loadFullEntity(e.id, opts))).then(data => ({
73
+ mergeMap((res) => Promise.all((res.data || []).map((e) => this.loadFullEntity(e.id, opts))).then((data) => ({
76
74
  data,
77
- total: res.total
75
+ total: res.total,
78
76
  }))));
79
77
  }
80
78
  // Load using entities array
81
- return this._onChange
82
- .pipe(map((_) => this.reduceAndSort(this._cache, variables)));
79
+ return this._onChange.pipe(map((_) => this.reduceAndSort(this._cache, variables)));
83
80
  }
84
81
  /**
85
82
  * WIll apply a filter, then a sort, then a page slice
@@ -90,14 +87,14 @@ export class EntityStore {
90
87
  async loadAll(variables, opts) {
91
88
  const res = this.reduceAndSort(this._cache, variables);
92
89
  // If store by ID: make sure to full the full entities
93
- if (this._mapToLightEntity && isNotEmptyArray(res.data) && (opts && opts.fullLoad === true)) {
90
+ if (this._mapToLightEntity && isNotEmptyArray(res.data) && opts && opts.fullLoad === true) {
94
91
  // Load full entities, one by one
95
- res.data = await chainPromises((res.data || []).map(e => () => this.load(e.id)));
92
+ res.data = await chainPromises((res.data || []).map((e) => () => this.load(e.id)));
96
93
  }
97
94
  return res;
98
95
  }
99
96
  save(entity, opts) {
100
- const status = isNotNil(entity.id) && this._statusById.get(entity.id) || { index: undefined };
97
+ const status = (isNotNil(entity.id) && this._statusById.get(entity.id)) || { index: undefined };
101
98
  const isNew = isNil(status.index);
102
99
  if (isNew) {
103
100
  if (isNil(entity.id)) {
@@ -173,9 +170,7 @@ export class EntityStore {
173
170
  }
174
171
  deleteMany(ids, opts) {
175
172
  // Delete by id, but NOT emit event on each deletion
176
- const deletedEntities = (ids || [])
177
- .map(id => this.delete(id, { emitEvent: false }))
178
- .filter(isNotNil);
173
+ const deletedEntities = (ids || []).map((id) => this.delete(id, { emitEvent: false })).filter(isNotNil);
179
174
  // No changes: exit
180
175
  if (!deletedEntities.length)
181
176
  return [];
@@ -208,16 +203,17 @@ export class EntityStore {
208
203
  return this._cache.length;
209
204
  }
210
205
  // Copy some data, BEFORE to call markAsPristine() to allow parallel changes
211
- const dirtyIndexes = this.isByIdMode && Array.from(this._statusById.values())
212
- .filter(s => !opts.skipIfPristine || (s && s.dirty))
213
- .map(s => s.index);
206
+ const dirtyIndexes = this.isByIdMode &&
207
+ Array.from(this._statusById.values())
208
+ .filter((s) => !opts.skipIfPristine || (s && s.dirty))
209
+ .map((s) => s.index);
214
210
  const entities = this._cache.slice(); // Copy cached entities
215
211
  // Mark all (entities and status) as pristine
216
212
  this.markAsPristine({ emitEvent: false });
217
213
  // Convert dirty entities into light entities (/!\ AFTER the previous copy)
218
214
  // and update the cache (but NOT the 'entities' variable)
219
215
  if (dirtyIndexes && this._mapToLightEntity) {
220
- dirtyIndexes.forEach(index => this._cache[index] = this._mapToLightEntity(entities[index]));
216
+ dirtyIndexes.forEach((index) => (this._cache[index] = this._mapToLightEntity(entities[index])));
221
217
  }
222
218
  // If no entity found
223
219
  if (isEmptyArray(entities)) {
@@ -228,10 +224,9 @@ export class EntityStore {
228
224
  // Save each entity into a unique key (advanced mode)
229
225
  if (this.isByIdMode) {
230
226
  // Save ids
231
- await this.storage.set(this.storageKeyById, entities.filter(isNotNil).map(e => e.id));
227
+ await this.storage.set(this.storageKeyById, entities.filter(isNotNil).map((e) => e.id));
232
228
  // Saved dirty entities
233
- await Promise.all(dirtyIndexes
234
- .map(index => {
229
+ await Promise.all(dirtyIndexes.map((index) => {
235
230
  const entity = entities[index];
236
231
  console.debug(`[entity-storage] Persisting ${this.name}#${entity.id}...`);
237
232
  return this.storage.set(this._storageKey + '#' + entity.id, entity);
@@ -248,10 +243,7 @@ export class EntityStore {
248
243
  }
249
244
  async restore(opts) {
250
245
  let entities;
251
- const res = await Promise.all([
252
- this.storage.get(this._storageKey),
253
- this.storage.get(this.storageKeyById)
254
- ]);
246
+ const res = await Promise.all([this.storage.get(this._storageKey), this.storage.get(this.storageKeyById)]);
255
247
  const values = res[0] && Array.isArray(res[0]) ? res[0] : null;
256
248
  const ids = res[1] && Array.isArray(res[1]) ? res[1] : null;
257
249
  let migration = false;
@@ -260,12 +252,12 @@ export class EntityStore {
260
252
  if (this.isByIdMode) {
261
253
  if (isNotNil(ids)) {
262
254
  // Load entity by id (one by one)
263
- const storageKeys = ids.map(id => this._storageKey + '#' + id);
264
- entities = await chainPromises(storageKeys.map(key => () => this.storage.get(key)));
255
+ const storageKeys = ids.map((id) => this._storageKey + '#' + id);
256
+ entities = await chainPromises(storageKeys.map((key) => () => this.storage.get(key)));
265
257
  }
266
258
  // Migrate from the standard mode
267
259
  else if (isNotNil(values)) {
268
- entities = values.filter(e => e && isNotNil(e.id));
260
+ entities = values.filter((e) => e && isNotNil(e.id));
269
261
  migration = true;
270
262
  oldKeysToClean = [this._storageKey];
271
263
  }
@@ -273,12 +265,12 @@ export class EntityStore {
273
265
  // Else (default mode)
274
266
  else {
275
267
  if (isNotNil(values)) {
276
- entities = values.filter(e => e && isNotNil(e.id));
268
+ entities = values.filter((e) => e && isNotNil(e.id));
277
269
  }
278
270
  else if (isNotNil(ids)) {
279
- const storageKeys = ids.map(id => this._storageKey + '#' + id);
271
+ const storageKeys = ids.map((id) => this._storageKey + '#' + id);
280
272
  // Load entity by id (one by one)
281
- entities = await chainPromises(storageKeys.map(key => () => this.storage.get(key)));
273
+ entities = await chainPromises(storageKeys.map((key) => () => this.storage.get(key)));
282
274
  migration = true;
283
275
  oldKeysToClean = [...storageKeys, this.storageKeyById];
284
276
  }
@@ -303,7 +295,7 @@ export class EntityStore {
303
295
  await this.persist({ skipIfPristine: false /* force persist using the new mode */ });
304
296
  // Clean old storage keys (one by one)
305
297
  if (isNotEmptyArray(oldKeysToClean))
306
- await chainPromises(oldKeysToClean.map(key => () => this.storage.remove(key)));
298
+ await chainPromises(oldKeysToClean.map((key) => () => this.storage.remove(key)));
307
299
  }
308
300
  catch (err) {
309
301
  console.error(err);
@@ -361,17 +353,15 @@ export class EntityStore {
361
353
  }
362
354
  setEntities(entities, opts) {
363
355
  // Filter non nil (and if need non local) entities
364
- entities = (entities || [])
365
- .filter(item => isNotNil(item)
366
- && (!this.policy.skipNonLocalEntities || +item.id < 0));
356
+ entities = (entities || []).filter((item) => isNotNil(item) && (!this.policy.skipNonLocalEntities || +item.id < 0));
367
357
  this._cache = entities;
368
358
  // Update the sequence with min(id) of all temporary ids
369
- this._sequence = this._cache.reduce((res, item) => +item.id < 0 ? Math.min(res, +item.id) : res, 0);
359
+ this._sequence = this._cache.reduce((res, item) => (+item.id < 0 ? Math.min(res, +item.id) : res), 0);
370
360
  this._statusById.clear();
371
361
  this._cache.forEach((item, index) => {
372
362
  this._statusById.set(item.id, {
373
363
  index,
374
- dirty: false
364
+ dirty: false,
375
365
  });
376
366
  });
377
367
  this._loaded = true;
@@ -407,7 +397,7 @@ export class EntityStore {
407
397
  return { data: [], total };
408
398
  // Sort by
409
399
  if (variables.sortBy) {
410
- EntityUtils.sort(data, variables.sortBy, variables.sortDirection);
400
+ EntityUtils.sort(data, variables.sortBy, variables.sortDirection?.toLowerCase() || 'asc');
411
401
  }
412
402
  // Slice in a page (using offset and size)
413
403
  if (variables.offset > 0) {
@@ -416,11 +406,12 @@ export class EntityStore {
416
406
  data = [];
417
407
  }
418
408
  else {
419
- data = (variables.size > 0 && ((variables.offset + variables.size) < data.length)) ?
420
- // Slice using limit to size
421
- data.slice(variables.offset, variables.offset + variables.size) :
422
- // Slice without limit
423
- data.slice(variables.offset);
409
+ data =
410
+ variables.size > 0 && variables.offset + variables.size < data.length
411
+ ? // Slice using limit to size
412
+ data.slice(variables.offset, variables.offset + variables.size)
413
+ : // Slice without limit
414
+ data.slice(variables.offset);
424
415
  }
425
416
  }
426
417
  // Apply a limit
@@ -443,7 +434,7 @@ export class EntityStore {
443
434
  res[attr] = undefined;
444
435
  return res;
445
436
  }, {}));
446
- return (entity) => entity ? Object.assign({}, entity, excludeAttributesMask) : undefined;
437
+ return (entity) => (entity ? Object.assign({}, entity, excludeAttributesMask) : undefined);
447
438
  }
448
439
  /**
449
440
  * Update the entitiesSubject.
@@ -455,4 +446,4 @@ export class EntityStore {
455
446
  this._onChange.next(true);
456
447
  }
457
448
  }
458
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQVMsV0FBVyxFQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXpGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR3JDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFVBQVUsQ0FBQztBQW1CdEQsTUFBTSxPQUFPLFdBQVc7SUFxQ0Q7SUFDQTtJQWpDSixXQUFXLENBQVM7SUFDcEIsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLGlCQUFpQixDQUFXO0lBQ3JDLE1BQU0sQ0FBTTtJQUNaLFdBQVcsQ0FBd0I7SUFDbkMsU0FBUyxDQUFTO0lBQ2xCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDZixPQUFPLENBQVU7SUFFaEIsTUFBTSxDQUEyQjtJQUUxQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENB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RSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxTQUFTO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcCwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5LCBFbnRpdHlVdGlscywgSUVudGl0eX0gZnJvbSAnLi4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0xvYWRSZXN1bHR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2NoYWluUHJvbWlzZXN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge0Vycm9yQ29kZXN9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge0lTdG9yYWdlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc3RvcmFnZS9zdG9yYWdlLnV0aWxzJztcblxuZXhwb3J0IGNvbnN0IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCA9ICdlbnRpdGllcyc7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVN0b3JlVHlwZVBvbGljeU1vZGUgPSAnZGVmYXVsdCcgfCAnYnktaWQnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmVUeXBlUG9saWN5PFQgZXh0ZW5kcyBFbnRpdHk8VCwgYW55PiA9IEVudGl0eTxhbnksIGFueT4sIEsgPSBrZXlvZiBUPiAge1xuICBtb2RlPzogRW50aXR5U3RvcmVUeXBlUG9saWN5TW9kZTsgLy8gJ2RlZmF1bHQnIGJ5IGRlZmF1bHRcbiAgc2tpcE5vbkxvY2FsRW50aXRpZXM/OiBib29sZWFuOyAvLyBGYWxzZSBieSBkZWZhdWx0XG4gIGxpZ2h0RmllbGRzRXhjbHVkZXM/OiBLW107IC8vIG5vbmUgYnkgZGVmYXVsdFxufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zIHtcbiAgZnVsbExvYWQ/OiBib29sZWFuO1xufVxuXG5kZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdGF0dXMge1xuICBpbmRleDogbnVtYmVyO1xuICBkaXJ0eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlTdG9yZTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgTyBleHRlbmRzIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyA9IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucz4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0b3JhZ2VLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXBUb0xpZ2h0RW50aXR5OiAoVCkgPT4gVDtcbiAgcHJpdmF0ZSBfY2FjaGU6IFRbXTtcbiAgcHJpdmF0ZSBfc3RhdHVzQnlJZDogTWFwPElELCBFbnRpdHlTdGF0dXM+O1xuICBwcml2YXRlIF9zZXF1ZW5jZTogbnVtYmVyO1xuICBwcml2YXRlIF9kaXJ0eSA9IGZhbHNlO1xuICBwcml2YXRlIF9sb2FkZWQ6IGJvb2xlYW47XG5cbiAgcmVhZG9ubHkgcG9saWN5OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD47XG5cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZT8ubGVuZ3RoIHx8IDA7XG4gIH1cblxuICBnZXQgY2FjaGUoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGU7XG4gIH1cblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcnR5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpc0J5SWRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBvbGljeS5tb2RlID09PSAnYnktaWQnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzdG9yYWdlS2V5QnlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdG9yYWdlS2V5ICsgJyNpZHMnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZTogSVN0b3JhZ2UsXG4gICAgcG9saWN5PzogRW50aXR5U3RvcmVUeXBlUG9saWN5PFQ+KSB7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3kgfHwge307XG4gICAgdGhpcy5yZXNldCh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmFnZUtleSA9IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCArICcjJyArIG5hbWU7XG4gICAgdGhpcy5fbWFwVG9MaWdodEVudGl0eSA9IHRoaXMuY3JlYXRlTGlnaHRFbnRpdHlNYXBGbih0aGlzLnBvbGljeSk7XG4gIH1cblxuICBuZXh0VmFsdWUoKTogSUQge1xuICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fc2VxdWVuY2UgLSAxO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2UgYXMgdW5rbm93biBhcyBJRDtcbiAgfVxuXG4gIGN1cnJlbnRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoaWQ6IElELCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgKCFvcHRzIHx8IG9wdHMuZnVsbExvYWQgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZEZ1bGxFbnRpdHkoaWQsIG9wdHMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2FkQ2FjaGVkRW50aXR5KGlkLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBhIHNldCBvZiBlbnRpdGllc1xuICAgKlxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICB3YXRjaEFsbCh2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgfSwgb3B0cz86IE8pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIC8vIElmIG5lZWQgZnVsbCBlbnRpdGllcywgYnV0IHVzZSBsaWdodCBlbnRpdGllcyBpbiB0aGUgZW50aXRpZXMgYXJyYXlcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAob3B0cyAmJiBvcHRzLmZ1bGxMb2FkID09PSB0cnVlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbZW50aXR5LXN0b3JlXSBXQVJOOiBXYXRjaGluZyBmdWxsIGVudGl0aWVzLCBzcGxpdGVkIGJ5IGlkIGluIGVudGl0eSBzdG9yZS4gVGhpcyBjYW4gYmUgbG9uZyEgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgbmVlZCBmdWxsIGVudGl0aWVzIGhlcmUuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gQXBwbHkgZmlsdGVyIG9uIGNhY2hlXG4gICAgICAgICAgbWFwKChfKSA9PiB0aGlzLnJlZHVjZUFuZFNvcnQodGhpcy5fY2FjaGUsIHZhcmlhYmxlcykpLFxuXG4gICAgICAgICAgLy8gVGhlbiBjb252ZXJ0IGludG8gZnVsbCBlbnRpdGllcyAodXNpbmcgcGFyYWxsZWwgam9icyAtIC8hXFwgY2FuIHVzZSBsb3Qgb2YgbWVtb3J5KVxuICAgICAgICAgIG1lcmdlTWFwKChyZXMpID0+IFByb21pc2UuYWxsKChyZXMuZGF0YSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoZSA9PiB0aGlzLmxvYWRGdWxsRW50aXR5KGUuaWQsIG9wdHMpKSkudGhlbihkYXRhID0+ICh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0b3RhbDogcmVzLnRvdGFsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIHVzaW5nIGVudGl0aWVzIGFycmF5XG4gICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChfKSA9PiB0aGlzLnJlZHVjZUFuZFNvcnQodGhpcy5fY2FjaGUsIHZhcmlhYmxlcykpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdJbGwgYXBwbHkgYSBmaWx0ZXIsIHRoZW4gYSBzb3J0LCB0aGVuIGEgcGFnZSBzbGljZVxuICAgKlxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkQWxsKHZhcmlhYmxlczoge1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIHNvcnRCeT86IHN0cmluZztcbiAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICB9LCBvcHRzPzogTyk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgcmVzID0gdGhpcy5yZWR1Y2VBbmRTb3J0KHRoaXMuX2NhY2hlLCB2YXJpYWJsZXMpO1xuXG4gICAgLy8gSWYgc3RvcmUgYnkgSUQ6IG1ha2Ugc3VyZSB0byBmdWxsIHRoZSBmdWxsIGVudGl0aWVzXG4gICAgaWYgKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkgJiYgaXNOb3RFbXB0eUFycmF5KHJlcy5kYXRhKSAmJiAob3B0cyAmJiBvcHRzLmZ1bGxMb2FkID09PSB0cnVlKSkge1xuICAgICAgLy8gTG9hZCBmdWxsIGVudGl0aWVzLCBvbmUgYnkgb25lXG4gICAgICByZXMuZGF0YSA9IGF3YWl0IGNoYWluUHJvbWlzZXMoKHJlcy5kYXRhIHx8IFtdKS5tYXAoZSA9PiAoKSA9PiB0aGlzLmxvYWQoZS5pZCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzIDtcbiAgfVxuXG4gIHNhdmUoZW50aXR5OiBULCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KTogVCB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNOb3ROaWwoZW50aXR5LmlkKSAmJiB0aGlzLl9zdGF0dXNCeUlkLmdldChlbnRpdHkuaWQpIHx8IHtpbmRleDogdW5kZWZpbmVkfTtcbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKHN0YXR1cy5pbmRleCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBpZiAoaXNOaWwoZW50aXR5LmlkKSkge1xuICAgICAgICBlbnRpdHkuaWQgPSB0aGlzLm5leHRWYWx1ZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoK2VudGl0eS5pZCA8IDAgJiYgK2VudGl0eS5pZCA+IHRoaXMuX3NlcXVlbmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIHNhdmUgYSBsb2NhbCBlbnRpdHkgd2l0aCBhbiBpZCA+IHNlcXVlbmNlLiBXaWxsIHJlcGxhY2UgaWQgYnkgc2VxdWVuY2UgbmV4dCB2YWx1ZScpO1xuICAgICAgICBlbnRpdHkuaWQgPSB0aGlzLm5leHRWYWx1ZSgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIE9LOiB1c2UgYSB2YWxpZCBpZCA6XG4gICAgICAgIC8vIC0gaWQgPj0gMCAoc2hvdWxkIGJlIGEgcmVtb3RlIGlkKVxuICAgICAgICAvLyAtIE9SIDwgc2VxdWVuY2UsIGFuZCBub3QgZXhpc3RzIGluIHRoZSBpbmRleCBtYXBcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RhdHVzQnlJZC5zZXQoZW50aXR5LmlkLCBzdGF0dXMpO1xuICAgICAgc3RhdHVzLmluZGV4ID0gdGhpcy5fY2FjaGUucHVzaChlbnRpdHkpIC0gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9jYWNoZVtzdGF0dXMuaW5kZXhdID0gZW50aXR5O1xuICAgIH1cblxuICAgIC8vIE1hcmsgZW50aXR5IGFzIGRpcnR5XG4gICAgc3RhdHVzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIE1hcmsgc3RvcmFnZSBhcyBkaXJ0eVxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgc2F2ZUFsbChlbnRpdGllczogVFtdLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXNldD86IGJvb2xlYW4gfSk6IFRbXSB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShlbnRpdGllcykgJiYgKCFvcHRzIHx8IG9wdHMucmVzZXQgIT09IHRydWUpKSByZXR1cm4gZW50aXRpZXM7IC8vIFNraXAgKE5vdGhpbmcgdG8gc2F2ZSlcblxuICAgIGxldCByZXN1bHQ6IFRbXTtcblxuICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBTYXZpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKWApO1xuXG4gICAgLy8gRmlyc3Qgc2F2ZSwgb3IgcmVzZXQgdXNpbmcgZ2l2ZW4gZW50aXRpZXNcbiAgICBpZiAoaXNFbXB0eUFycmF5KHRoaXMuX2NhY2hlKSB8fCAob3B0cyAmJiBvcHRzLnJlc2V0KSkge1xuICAgICAgdGhpcy5zZXRFbnRpdGllcyhlbnRpdGllcywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHQgPSBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gdGhpcy5zYXZlKGVudGl0eSwge2VtaXRFdmVudDogZmFsc2V9KSk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IHx8IHRoaXMuX2NhY2hlLnNsaWNlKCk7XG4gIH1cblxuICBkZWxldGUoaWQ6IElELCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0dXMgPSBpc05vdE5pbChpZCkgPyB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgPyBzdGF0dXMuaW5kZXggOiB1bmRlZmluZWQ7XG4gICAgaWYgKGlzTmlsKGluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuX2NhY2hlW2luZGV4XTtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlXG4gICAgdGhpcy5fY2FjaGVbaW5kZXhdID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N0YXR1c0J5SWQuZGVsZXRlKGVudGl0eS5pZCk7XG5cbiAgICAvLyBSZW1vdmUgZnVsbCBlbnRpdHksIGJ5IGlkXG4gICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZSh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eSBhcyBUO1xuICB9XG5cbiAgZGVsZXRlTWFueShpZHM6IElEW10sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pOiBUW10ge1xuXG4gICAgLy8gRGVsZXRlIGJ5IGlkLCBidXQgTk9UIGVtaXQgZXZlbnQgb24gZWFjaCBkZWxldGlvblxuICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IChpZHMgfHwgW10pXG4gICAgICAubWFwKGlkID0+IHRoaXMuZGVsZXRlKGlkLCB7ZW1pdEV2ZW50OiBmYWxzZX0pKVxuICAgICAgLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICAvLyBObyBjaGFuZ2VzOiBleGl0XG4gICAgaWYgKCFkZWxldGVkRW50aXRpZXMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRFbnRpdGllcztcbiAgfVxuXG4gIHJlc2V0KG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLl9jYWNoZSA9IFtdO1xuICAgIHRoaXMuX3NlcXVlbmNlID0gMDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkID0gbmV3IE1hcDxJRCwgYW55PigpO1xuXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqICBvcHRzLnNraXBJZlByaXN0aW5lID0gZmFsc2UgcGVyc2lzdCBhbGwgZW50aXRpZXMsIGV2ZW4gaWYgbm90IGRpcnR5XG4gICAqL1xuICBhc3luYyBwZXJzaXN0KG9wdHMgPSB7IHNraXBJZlByaXN0aW5lOiB0cnVlIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuXG4gICAgLy8gU2tpcCBpcyBub3QgZGlydHlcbiAgICBpZiAob3B0cy5za2lwSWZQcmlzdGluZSAmJiAhdGhpcy5fZGlydHkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke3RoaXMubmFtZX0gbm90IG5lZWQuIFNraXBgKTtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb21lIGRhdGEsIEJFRk9SRSB0byBjYWxsIG1hcmtBc1ByaXN0aW5lKCkgdG8gYWxsb3cgcGFyYWxsZWwgY2hhbmdlc1xuICAgIGNvbnN0IGRpcnR5SW5kZXhlcyA9IHRoaXMuaXNCeUlkTW9kZSAmJiBBcnJheS5mcm9tKHRoaXMuX3N0YXR1c0J5SWQudmFsdWVzKCkpXG4gICAgICAuZmlsdGVyKHMgPT4gIW9wdHMuc2tpcElmUHJpc3RpbmUgfHwgKHMgJiYgcy5kaXJ0eSkpXG4gICAgICAubWFwKHMgPT4gcy5pbmRleCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLl9jYWNoZS5zbGljZSgpOyAvLyBDb3B5IGNhY2hlZCBlbnRpdGllc1xuXG4gICAgLy8gTWFyayBhbGwgKGVudGl0aWVzIGFuZCBzdGF0dXMpIGFzIHByaXN0aW5lXG4gICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgLy8gQ29udmVydCBkaXJ0eSBlbnRpdGllcyBpbnRvIGxpZ2h0IGVudGl0aWVzICgvIVxcIEFGVEVSIHRoZSBwcmV2aW91cyBjb3B5KVxuICAgIC8vIGFuZCB1cGRhdGUgdGhlIGNhY2hlIChidXQgTk9UIHRoZSAnZW50aXRpZXMnIHZhcmlhYmxlKVxuICAgIGlmIChkaXJ0eUluZGV4ZXMgJiYgdGhpcy5fbWFwVG9MaWdodEVudGl0eSkge1xuICAgICAgZGlydHlJbmRleGVzLmZvckVhY2goaW5kZXggPT4gdGhpcy5fY2FjaGVbaW5kZXhdID0gdGhpcy5fbWFwVG9MaWdodEVudGl0eShlbnRpdGllc1tpbmRleF0pKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBlbnRpdHkgZm91bmRcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSkge1xuXG4gICAgICAvLyBDbGVhbiB0aGUgbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZSh0aGlzLl9zdG9yYWdlS2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIFNhdmUgZWFjaCBlbnRpdHkgaW50byBhIHVuaXF1ZSBrZXkgKGFkdmFuY2VkIG1vZGUpXG4gICAgICBpZiAodGhpcy5pc0J5SWRNb2RlKSB7XG4gICAgICAgIC8vIFNhdmUgaWRzXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQodGhpcy5zdG9yYWdlS2V5QnlJZCwgZW50aXRpZXMuZmlsdGVyKGlzTm90TmlsKS5tYXAoZSA9PiBlLmlkKSk7XG5cbiAgICAgICAgLy8gU2F2ZWQgZGlydHkgZW50aXRpZXNcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZGlydHlJbmRleGVzXG4gICAgICAgICAgICAubWFwKGluZGV4ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbaW5kZXhdO1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IyR7ZW50aXR5LmlkfS4uLmApO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldCh0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgZW50aXR5LmlkLCBlbnRpdHkpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZGlydHlJbmRleGVzLmxlbmd0aH0vJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIGFsbCBlbnRpdGllcyBpbiBhIHNpbmdsZSBrZXkgKGRlZmF1bHQpXG4gICAgICBlbHNlIHtcblxuICAgICAgICBjb25zb2xlLmluZm8oYFtlbnRpdHktc3RvcmFnZV0gUGVyc2lzdGluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQodGhpcy5fc3RvcmFnZUtleSwgZW50aXRpZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRpdGllcy5sZW5ndGg7XG4gIH1cblxuICBhc3luYyByZXN0b3JlKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGVudGl0aWVzOiBUW107XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuX3N0b3JhZ2VLZXkpLFxuICAgICAgdGhpcy5zdG9yYWdlLmdldCh0aGlzLnN0b3JhZ2VLZXlCeUlkKVxuICAgIF0pO1xuICAgIGNvbnN0IHZhbHVlcyA9IHJlc1swXSAmJiBBcnJheS5pc0FycmF5KHJlc1swXSkgPyByZXNbMF0gOiBudWxsO1xuICAgIGNvbnN0IGlkcyA9IHJlc1sxXSAmJiBBcnJheS5pc0FycmF5KHJlc1sxXSkgPyByZXNbMV0gOiBudWxsO1xuICAgIGxldCBtaWdyYXRpb24gPSBmYWxzZTtcbiAgICBsZXQgb2xkS2V5c1RvQ2xlYW46IHN0cmluZ1tdO1xuXG4gICAgLy8gXCJTcGxpdCBieSBpZFwiIG1vZGVcbiAgICBpZiAodGhpcy5pc0J5SWRNb2RlKSB7XG4gICAgICBpZiAoaXNOb3ROaWwoaWRzKSkge1xuICAgICAgICAvLyBMb2FkIGVudGl0eSBieSBpZCAob25lIGJ5IG9uZSlcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleXMgPSBpZHMubWFwKGlkID0+IHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICAgIGVudGl0aWVzID0gYXdhaXQgY2hhaW5Qcm9taXNlczxUPihzdG9yYWdlS2V5cy5tYXAoa2V5ID0+ICgpID0+IHRoaXMuc3RvcmFnZS5nZXQoa2V5KSkpO1xuICAgICAgfVxuICAgICAgLy8gTWlncmF0ZSBmcm9tIHRoZSBzdGFuZGFyZCBtb2RlXG4gICAgICBlbHNlIGlmIChpc05vdE5pbCh2YWx1ZXMpKSB7XG4gICAgICAgIGVudGl0aWVzID0gdmFsdWVzLmZpbHRlcihlID0+IGUgJiYgaXNOb3ROaWwoZS5pZCkpO1xuICAgICAgICBtaWdyYXRpb24gPSB0cnVlO1xuICAgICAgICBvbGRLZXlzVG9DbGVhbiA9IFt0aGlzLl9zdG9yYWdlS2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbHNlIChkZWZhdWx0IG1vZGUpXG4gICAgZWxzZSB7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWVzKSkge1xuICAgICAgICBlbnRpdGllcyA9IHZhbHVlcy5maWx0ZXIoZSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzTm90TmlsKGlkcykpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleXMgPSBpZHMubWFwKGlkID0+IHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICAgIC8vIExvYWQgZW50aXR5IGJ5IGlkIChvbmUgYnkgb25lKVxuICAgICAgICBlbnRpdGllcyA9IGF3YWl0IGNoYWluUHJvbWlzZXM8VD4oc3RvcmFnZUtleXMubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbLi4uc3RvcmFnZUtleXMsIHRoaXMuc3RvcmFnZUtleUJ5SWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9LLCB0aGVyZSBpcyBzb21ldGhpbmcgaW4gc3RvcmFnZS4uLlxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoZW50aXRpZXMpKSB7XG4gICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID49IDEwMDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXR5LXN0b3JhZ2VdIC0gUmVzdG9yaW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0uIENoZWNrIGlmIG5vdCB0b28gbWFueSBlbGVtZW50cz8hYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcCBlbnRpdGllcyBpbnRvIGxpZ2h0IGVsZW1lbnQgKGlmIGlmIG5vdCBuZWVkIHRvIHBlcnNpc3QsIGJlY2F1c2Ugb2YgbWlncmF0aW9uXG4gICAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAhbWlncmF0aW9uKSB7XG4gICAgICAgIGVudGl0aWVzID0gZW50aXRpZXMubWFwKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0RW50aXRpZXMoZW50aXRpZXMgfHwgW10sIHsuLi5vcHRzLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAvLyBGaW5pc2ggdGhlIG1pZ3JhdGlvblxuICAgIGlmIChtaWdyYXRpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2VudGl0eS1zdG9yYWdlXSAtIE1pZ3JhdGUgJHt0aGlzLm5hbWV9IGludG8ge21vZGU6ICcke3RoaXMucG9saWN5Lm1vZGV9J30uLi5gKTtcblxuICAgICAgICAvLyBGb3JjZSB0byBwZXJzaXN0LCB1c2luZyB0aGUgbmV3IG1vZGVcbiAgICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KHtza2lwSWZQcmlzdGluZTogZmFsc2UgLyogZm9yY2UgcGVyc2lzdCB1c2luZyB0aGUgbmV3IG1vZGUgKi8gfSk7XG5cbiAgICAgICAgLy8gQ2xlYW4gb2xkIHN0b3JhZ2Uga2V5cyAob25lIGJ5IG9uZSlcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShvbGRLZXlzVG9DbGVhbikpIGF3YWl0IGNoYWluUHJvbWlzZXMob2xkS2V5c1RvQ2xlYW4ubWFwKGtleSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UucmVtb3ZlKGtleSkpKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5FTlRJVFlfU1RPUkFHRV9NSUdSQVRJT05fRkFJTEVELCBtZXNzYWdlOiAnRVJST1IuRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRCcsIGRldGFpbHM6IGVycn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5sZW5ndGg7XG4gIH1cblxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG5cbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3RhdHVzQnlJZC52YWx1ZXMoKSkge1xuICAgICAgaWYgKGlzTm90TmlsKHMpKSB7XG4gICAgICAgIHMuZGlydHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByaXZhdGUgbG9hZENhY2hlZEVudGl0eShpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBUIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCk7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgJiYgc3RhdHVzLmluZGV4O1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBleGlzdHNcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh0aGlzLl9jYWNoZVtpbmRleF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnVsbEVudGl0eShpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCk7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgJiYgc3RhdHVzLmluZGV4O1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBleGlzdHNcblxuICAgIC8vIFJlbG9hZCBmcm9tIHN0b3JhZ2UsIGlmIG5lZWQgKGUuZy4gc29tZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIGV4Y2x1ZGVkIGluIGxpZ2h0IGVsZW1lbnRzKVxuICAgIGlmIChzdGF0dXMuZGlydHkgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIEZ1bGwgcmVsb2FkaW5nICR7dGhpcy5uYW1lfSMke2lkfS4uLmApO1xuICAgICAgY29uc3QgZnVsbERhdGEgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICBpZiAoZnVsbERhdGEpIHJldHVybiBPYmplY3QuZnJlZXplKGZ1bGxEYXRhKTtcbiAgICAgIC8vIE5vdCBmb3VuZCBieSBpZCwgY29udGludWUgZnJvbSBjYWNoZSAodmVyc2lvbiBwcmlvciB0byAxLjUuMylcbiAgICB9XG5cbiAgICAvLyBMb2FkIGZyb20gdGhlIGNhY2hlLCBpZiBkaXJ0eSBPUiBpZiBzdG9yYWdlIGlzIG5vdCBzcGxpdHRlZCBieSBpZFxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMuX2NhY2hlW2luZGV4XSk7XG4gIH1cblxuICBwcml2YXRlIHNldEVudGl0aWVzKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gRmlsdGVyIG5vbiBuaWwgKGFuZCBpZiBuZWVkIG5vbiBsb2NhbCkgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IChlbnRpdGllcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGlzTm90TmlsKGl0ZW0pXG4gICAgICAgICAgJiYgKCF0aGlzLnBvbGljeS5za2lwTm9uTG9jYWxFbnRpdGllcyB8fCAraXRlbS5pZCA8IDApXG4gICAgICAgICk7XG5cbiAgICB0aGlzLl9jYWNoZSA9IGVudGl0aWVzO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSB3aXRoIG1pbihpZCkgb2YgYWxsIHRlbXBvcmFyeSBpZHNcbiAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2NhY2hlLnJlZHVjZSgocmVzLCBpdGVtKSA9PiAraXRlbS5pZCA8IDAgPyBNYXRoLm1pbihyZXMsICtpdGVtLmlkKSA6IHJlcywgMCk7XG5cbiAgICB0aGlzLl9zdGF0dXNCeUlkLmNsZWFyKCk7XG4gICAgdGhpcy5fY2FjaGUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGl0ZW0uaWQsIDxFbnRpdHlTdGF0dXM+e1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZGlydHk6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICovXG4gIHByaXZhdGUgcmVkdWNlQW5kU29ydChkYXRhOiBUW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk6IExvYWRSZXN1bHQ8VD4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiB7ZGF0YTogW10sIHRvdGFsOiAwfTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbmlsIHZhbHVlc1xuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpc05vdE5pbCk7XG5cbiAgICBpZiAoIXZhcmlhYmxlcykge1xuICAgICAgLy8gUmV0dXJuIGFsbCAoYnV0IGFycmF5IGhhcyBiZWVuIGZpbHRlcmVkLCBhbmQgY29waWVkKVxuICAgICAgcmV0dXJuIHtkYXRhLCB0b3RhbDogZGF0YS5sZW5ndGh9O1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIsIGlmIGFueVxuICAgIGlmICh2YXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICBkYXRhID0gZGF0YS5maWx0ZXIodmFyaWFibGVzLmZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoXG4gICAgY29uc3QgdG90YWwgPSBkYXRhLmxlbmd0aDtcblxuICAgIC8vIElmIHBhZ2Ugc2l6ZT0wIChlLmcuIG9ubHkgbmVlZCB0b3RhbClcbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT09IDApIHJldHVybiB7ZGF0YTogW10sIHRvdGFsfTtcblxuICAgIC8vIFNvcnQgYnlcbiAgICBpZiAodmFyaWFibGVzLnNvcnRCeSkge1xuICAgICAgRW50aXR5VXRpbHMuc29ydChkYXRhLCB2YXJpYWJsZXMuc29ydEJ5LCB2YXJpYWJsZXMuc29ydERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gU2xpY2UgaW4gYSBwYWdlICh1c2luZyBvZmZzZXQgYW5kIHNpemUpXG4gICAgaWYgKHZhcmlhYmxlcy5vZmZzZXQgPiAwKSB7XG5cbiAgICAgIC8vIE9mZnNldCBhZnRlciB0aGUgZW5kOiBubyByZXN1bHRcbiAgICAgIGlmICh2YXJpYWJsZXMub2Zmc2V0ID49IGRhdGEubGVuZ3RoIHx8IHZhcmlhYmxlcy5zaXplID09PSAwKSB7XG4gICAgICAgIGRhdGEgPSBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gKHZhcmlhYmxlcy5zaXplID4gMCAmJiAoKHZhcmlhYmxlcy5vZmZzZXQgKyB2YXJpYWJsZXMuc2l6ZSkgPCBkYXRhLmxlbmd0aCkpID9cbiAgICAgICAgICAvLyBTbGljZSB1c2luZyBsaW1pdCB0byBzaXplXG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0LCB2YXJpYWJsZXMub2Zmc2V0ICsgdmFyaWFibGVzLnNpemUpIDpcbiAgICAgICAgICAvLyBTbGljZSB3aXRob3V0IGxpbWl0XG4gICAgICAgICAgZGF0YS5zbGljZSh2YXJpYWJsZXMub2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBhIGxpbWl0XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPiAwKXtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIHZhcmlhYmxlcy5zaXplKTtcbiAgICB9XG4gICAgLy8gTm8gbGltaXQ6XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPT09IC0xKXtcbiAgICAgIC8vIEtlZXAgYWxsIGRhdGFcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRvdGFsfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlnaHRFbnRpdHlNYXBGbihwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPik6IChUKSA9PiBUIHtcbiAgICBpZiAocG9saWN5Lm1vZGUgIT09ICdieS1pZCcpIHJldHVybiB1bmRlZmluZWQ7IC8vIE9ubHkgbmVlZCBmb3IgdGhlICdieS1pZCcgbW9kZVxuICAgIGlmIChpc0VtcHR5QXJyYXkocG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICAvLyBDcmVhdGUgYSBpbW11dGFibGUgbWFzayBvYmplY3QsIHVzZSB0byBjbGVhbiBzb21lIHByb3BlcnRpZXNcbiAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlc01hc2sgPSBPYmplY3QuZnJlZXplKHRoaXMucG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMucmVkdWNlKChyZXMsIGF0dHIpID0+IHtcbiAgICAgIHJlc1thdHRyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgPFQ+e30pKTtcblxuICAgIHJldHVybiAoZW50aXR5KSA9PiBlbnRpdHkgPyBPYmplY3QuYXNzaWduKDxUPnt9LCBlbnRpdHksIGV4Y2x1ZGVBdHRyaWJ1dGVzTWFzaykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBlbnRpdGllc1N1YmplY3QuXG4gICAqXG4gICAqIEJlZm9yZSB3ZW5kaW5nIGl0ZW1zLCBhIGZpbHRlciBpcyBhcHBseSwgdG8gcmVtb3ZlIG51bGwgdmFsdWUuXG4gICAqIFRoaXMgZmlsdGVyIHdpbGwgY3JlYXRlIGEgYXJyYXkgY29weS5cbiAgICovXG4gIHByaXZhdGUgZW1pdEV2ZW50KCkge1xuICAgIHRoaXMuX29uQ2hhbmdlLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXR5LXN0b3JlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVUsV0FBVyxFQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXZDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFVBQVUsQ0FBQztBQW1CdEQsTUFBTSxPQUFPLFdBQVc7SUFpQ0Q7SUFDQTtJQWpDSixXQUFXLENBQVM7SUFDcEIsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLGlCQUFpQixDQUFXO0lBQ3JDLE1BQU0sQ0FBTTtJQUNaLFdBQVcsQ0FBd0I7SUFDbkMsU0FBUyxDQUFTO0lBQ2xCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDZixPQUFPLENBQVU7SUFFaEIsTUFBTSxDQUEyQjtJQUUxQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENB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QUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0UsRUFBRSxDQUNOLENBQ0YsQ0FBQztRQUVGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssU0FBUztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBjaGFpblByb21pc2VzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgSVN0b3JhZ2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc3RvcmFnZS9zdG9yYWdlLnV0aWxzJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuZXhwb3J0IGNvbnN0IEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCA9ICdlbnRpdGllcyc7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVN0b3JlVHlwZVBvbGljeU1vZGUgPSAnZGVmYXVsdCcgfCAnYnktaWQnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmVUeXBlUG9saWN5PFQgZXh0ZW5kcyBFbnRpdHk8VCwgYW55PiA9IEVudGl0eTxhbnksIGFueT4sIEsgPSBrZXlvZiBUPiB7XG4gIG1vZGU/OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3lNb2RlOyAvLyAnZGVmYXVsdCcgYnkgZGVmYXVsdFxuICBza2lwTm9uTG9jYWxFbnRpdGllcz86IGJvb2xlYW47IC8vIEZhbHNlIGJ5IGRlZmF1bHRcbiAgbGlnaHRGaWVsZHNFeGNsdWRlcz86IEtbXTsgLy8gbm9uZSBieSBkZWZhdWx0XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMge1xuICBmdWxsTG9hZD86IGJvb2xlYW47XG59XG5cbmRlY2xhcmUgaW50ZXJmYWNlIEVudGl0eVN0YXR1cyB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGRpcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEVudGl0eVN0b3JlPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiwgSUQgPSBudW1iZXIsIE8gZXh0ZW5kcyBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMgPSBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnM+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcFRvTGlnaHRFbnRpdHk6IChUKSA9PiBUO1xuICBwcml2YXRlIF9jYWNoZTogVFtdO1xuICBwcml2YXRlIF9zdGF0dXNCeUlkOiBNYXA8SUQsIEVudGl0eVN0YXR1cz47XG4gIHByaXZhdGUgX3NlcXVlbmNlOiBudW1iZXI7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX2xvYWRlZDogYm9vbGVhbjtcblxuICByZWFkb25seSBwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPjtcblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIGdldCBjYWNoZSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQnlJZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9saWN5Lm1vZGUgPT09ICdieS1pZCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHN0b3JhZ2VLZXlCeUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2VLZXkgKyAnI2lkcyc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlOiBJU3RvcmFnZSxcbiAgICBwb2xpY3k/OiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k8VD5cbiAgKSB7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3kgfHwge307XG4gICAgdGhpcy5yZXNldCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yYWdlS2V5ID0gRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYICsgJyMnICsgbmFtZTtcbiAgICB0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ID0gdGhpcy5jcmVhdGVMaWdodEVudGl0eU1hcEZuKHRoaXMucG9saWN5KTtcbiAgfVxuXG4gIG5leHRWYWx1ZSgpOiBJRCB7XG4gICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9zZXF1ZW5jZSAtIDE7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9zZXF1ZW5jZSBhcyB1bmtub3duIGFzIElEO1xuICB9XG5cbiAgY3VycmVudFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlO1xuICB9XG5cbiAgYXN5bmMgbG9hZChpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAoIW9wdHMgfHwgb3B0cy5mdWxsTG9hZCAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkRnVsbEVudGl0eShpZCwgb3B0cyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvYWRDYWNoZWRFbnRpdHkoaWQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGEgc2V0IG9mIGVudGl0aWVzXG4gICAqXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHdhdGNoQWxsKFxuICAgIHZhcmlhYmxlczoge1xuICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICB9LFxuICAgIG9wdHM/OiBPXG4gICk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIC8vIElmIG5lZWQgZnVsbCBlbnRpdGllcywgYnV0IHVzZSBsaWdodCBlbnRpdGllcyBpbiB0aGUgZW50aXRpZXMgYXJyYXlcbiAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiBvcHRzICYmIG9wdHMuZnVsbExvYWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tlbnRpdHktc3RvcmVdIFdBUk46IFdhdGNoaW5nIGZ1bGwgZW50aXRpZXMsIHNwbGl0ZWQgYnkgaWQgaW4gZW50aXR5IHN0b3JlLiBUaGlzIGNhbiBiZSBsb25nISBQbGVhc2UgbWFrZSBzdXJlIHlvdSBuZWVkIGZ1bGwgZW50aXRpZXMgaGVyZS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlLnBpcGUoXG4gICAgICAgIC8vIEFwcGx5IGZpbHRlciBvbiBjYWNoZVxuICAgICAgICBtYXAoKF8pID0+IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKSksXG5cbiAgICAgICAgLy8gVGhlbiBjb252ZXJ0IGludG8gZnVsbCBlbnRpdGllcyAodXNpbmcgcGFyYWxsZWwgam9icyAtIC8hXFwgY2FuIHVzZSBsb3Qgb2YgbWVtb3J5KVxuICAgICAgICBtZXJnZU1hcCgocmVzKSA9PlxuICAgICAgICAgIFByb21pc2UuYWxsKChyZXMuZGF0YSB8fCBbXSkubWFwKChlKSA9PiB0aGlzLmxvYWRGdWxsRW50aXR5KGUuaWQsIG9wdHMpKSkudGhlbigoZGF0YSkgPT4gKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0b3RhbDogcmVzLnRvdGFsLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIExvYWQgdXNpbmcgZW50aXRpZXMgYXJyYXlcbiAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2UucGlwZShtYXAoKF8pID0+IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdJbGwgYXBwbHkgYSBmaWx0ZXIsIHRoZW4gYSBzb3J0LCB0aGVuIGEgcGFnZSBzbGljZVxuICAgKlxuICAgKiBAcGFyYW0gdmFyaWFibGVzXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkQWxsKFxuICAgIHZhcmlhYmxlczoge1xuICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICB9LFxuICAgIG9wdHM/OiBPXG4gICk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMucmVkdWNlQW5kU29ydCh0aGlzLl9jYWNoZSwgdmFyaWFibGVzKTtcblxuICAgIC8vIElmIHN0b3JlIGJ5IElEOiBtYWtlIHN1cmUgdG8gZnVsbCB0aGUgZnVsbCBlbnRpdGllc1xuICAgIGlmICh0aGlzLl9tYXBUb0xpZ2h0RW50aXR5ICYmIGlzTm90RW1wdHlBcnJheShyZXMuZGF0YSkgJiYgb3B0cyAmJiBvcHRzLmZ1bGxMb2FkID09PSB0cnVlKSB7XG4gICAgICAvLyBMb2FkIGZ1bGwgZW50aXRpZXMsIG9uZSBieSBvbmVcbiAgICAgIHJlcy5kYXRhID0gYXdhaXQgY2hhaW5Qcm9taXNlcygocmVzLmRhdGEgfHwgW10pLm1hcCgoZSkgPT4gKCkgPT4gdGhpcy5sb2FkKGUuaWQpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHNhdmUoZW50aXR5OiBULCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBUIHtcbiAgICBjb25zdCBzdGF0dXMgPSAoaXNOb3ROaWwoZW50aXR5LmlkKSAmJiB0aGlzLl9zdGF0dXNCeUlkLmdldChlbnRpdHkuaWQpKSB8fCB7IGluZGV4OiB1bmRlZmluZWQgfTtcbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKHN0YXR1cy5pbmRleCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBpZiAoaXNOaWwoZW50aXR5LmlkKSkge1xuICAgICAgICBlbnRpdHkuaWQgPSB0aGlzLm5leHRWYWx1ZSgpO1xuICAgICAgfSBlbHNlIGlmICgrZW50aXR5LmlkIDwgMCAmJiArZW50aXR5LmlkID4gdGhpcy5fc2VxdWVuY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gc2F2ZSBhIGxvY2FsIGVudGl0eSB3aXRoIGFuIGlkID4gc2VxdWVuY2UuIFdpbGwgcmVwbGFjZSBpZCBieSBzZXF1ZW5jZSBuZXh0IHZhbHVlJyk7XG4gICAgICAgIGVudGl0eS5pZCA9IHRoaXMubmV4dFZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPSzogdXNlIGEgdmFsaWQgaWQgOlxuICAgICAgICAvLyAtIGlkID49IDAgKHNob3VsZCBiZSBhIHJlbW90ZSBpZClcbiAgICAgICAgLy8gLSBPUiA8IHNlcXVlbmNlLCBhbmQgbm90IGV4aXN0cyBpbiB0aGUgaW5kZXggbWFwXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0YXR1c0J5SWQuc2V0KGVudGl0eS5pZCwgc3RhdHVzKTtcbiAgICAgIHN0YXR1cy5pbmRleCA9IHRoaXMuX2NhY2hlLnB1c2goZW50aXR5KSAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NhY2hlW3N0YXR1cy5pbmRleF0gPSBlbnRpdHk7XG4gICAgfVxuXG4gICAgLy8gTWFyayBlbnRpdHkgYXMgZGlydHlcbiAgICBzdGF0dXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gTWFyayBzdG9yYWdlIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBzYXZlQWxsKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHJlc2V0PzogYm9vbGVhbiB9KTogVFtdIHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSAmJiAoIW9wdHMgfHwgb3B0cy5yZXNldCAhPT0gdHJ1ZSkpIHJldHVybiBlbnRpdGllczsgLy8gU2tpcCAoTm90aGluZyB0byBzYXZlKVxuXG4gICAgbGV0IHJlc3VsdDogVFtdO1xuXG4gICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFNhdmluZyAke2VudGl0aWVzLmxlbmd0aH0gJHt0aGlzLm5hbWV9KHMpYCk7XG5cbiAgICAvLyBGaXJzdCBzYXZlLCBvciByZXNldCB1c2luZyBnaXZlbiBlbnRpdGllc1xuICAgIGlmIChpc0VtcHR5QXJyYXkodGhpcy5fY2FjaGUpIHx8IChvcHRzICYmIG9wdHMucmVzZXQpKSB7XG4gICAgICB0aGlzLnNldEVudGl0aWVzKGVudGl0aWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiB0aGlzLnNhdmUoZW50aXR5LCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCB8fCB0aGlzLl9jYWNoZS5zbGljZSgpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBJRCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogVCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdHVzID0gaXNOb3ROaWwoaWQpID8gdGhpcy5fc3RhdHVzQnlJZC5nZXQoaWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGluZGV4ID0gc3RhdHVzID8gc3RhdHVzLmluZGV4IDogdW5kZWZpbmVkO1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLl9jYWNoZVtpbmRleF07XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgIHRoaXMuX2NhY2hlW2luZGV4XSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkLmRlbGV0ZShlbnRpdHkuaWQpO1xuXG4gICAgLy8gUmVtb3ZlIGZ1bGwgZW50aXR5LCBieSBpZFxuICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGlkKTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHkgYXMgVDtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkoaWRzOiBJRFtdLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBUW10ge1xuICAgIC8vIERlbGV0ZSBieSBpZCwgYnV0IE5PVCBlbWl0IGV2ZW50IG9uIGVhY2ggZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSAoaWRzIHx8IFtdKS5tYXAoKGlkKSA9PiB0aGlzLmRlbGV0ZShpZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKS5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgLy8gTm8gY2hhbmdlczogZXhpdFxuICAgIGlmICghZGVsZXRlZEVudGl0aWVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgLy8gRW1pdCB1cGRhdGUgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICByZXNldChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLl9jYWNoZSA9IFtdO1xuICAgIHRoaXMuX3NlcXVlbmNlID0gMDtcbiAgICB0aGlzLl9zdGF0dXNCeUlkID0gbmV3IE1hcDxJRCwgYW55PigpO1xuXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqICBvcHRzLnNraXBJZlByaXN0aW5lID0gZmFsc2UgcGVyc2lzdCBhbGwgZW50aXRpZXMsIGV2ZW4gaWYgbm90IGRpcnR5XG4gICAqL1xuICBhc3luYyBwZXJzaXN0KG9wdHMgPSB7IHNraXBJZlByaXN0aW5lOiB0cnVlIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIC8vIFNraXAgaXMgbm90IGRpcnR5XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuX2RpcnR5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IG5vdCBuZWVkLiBTa2lwYCk7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGUubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENvcHkgc29tZSBkYXRhLCBCRUZPUkUgdG8gY2FsbCBtYXJrQXNQcmlzdGluZSgpIHRvIGFsbG93IHBhcmFsbGVsIGNoYW5nZXNcbiAgICBjb25zdCBkaXJ0eUluZGV4ZXMgPVxuICAgICAgdGhpcy5pc0J5SWRNb2RlICYmXG4gICAgICBBcnJheS5mcm9tKHRoaXMuX3N0YXR1c0J5SWQudmFsdWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+ICFvcHRzLnNraXBJZlByaXN0aW5lIHx8IChzICYmIHMuZGlydHkpKVxuICAgICAgICAubWFwKChzKSA9PiBzLmluZGV4KTtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuX2NhY2hlLnNsaWNlKCk7IC8vIENvcHkgY2FjaGVkIGVudGl0aWVzXG5cbiAgICAvLyBNYXJrIGFsbCAoZW50aXRpZXMgYW5kIHN0YXR1cykgYXMgcHJpc3RpbmVcbiAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIC8vIENvbnZlcnQgZGlydHkgZW50aXRpZXMgaW50byBsaWdodCBlbnRpdGllcyAoLyFcXCBBRlRFUiB0aGUgcHJldmlvdXMgY29weSlcbiAgICAvLyBhbmQgdXBkYXRlIHRoZSBjYWNoZSAoYnV0IE5PVCB0aGUgJ2VudGl0aWVzJyB2YXJpYWJsZSlcbiAgICBpZiAoZGlydHlJbmRleGVzICYmIHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpIHtcbiAgICAgIGRpcnR5SW5kZXhlcy5mb3JFYWNoKChpbmRleCkgPT4gKHRoaXMuX2NhY2hlW2luZGV4XSA9IHRoaXMuX21hcFRvTGlnaHRFbnRpdHkoZW50aXRpZXNbaW5kZXhdKSkpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIGVudGl0eSBmb3VuZFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpKSB7XG4gICAgICAvLyBDbGVhbiB0aGUgbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZSh0aGlzLl9zdG9yYWdlS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSBlYWNoIGVudGl0eSBpbnRvIGEgdW5pcXVlIGtleSAoYWR2YW5jZWQgbW9kZSlcbiAgICAgIGlmICh0aGlzLmlzQnlJZE1vZGUpIHtcbiAgICAgICAgLy8gU2F2ZSBpZHNcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VLZXlCeUlkLFxuICAgICAgICAgIGVudGl0aWVzLmZpbHRlcihpc05vdE5pbCkubWFwKChlKSA9PiBlLmlkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFNhdmVkIGRpcnR5IGVudGl0aWVzXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGRpcnR5SW5kZXhlcy5tYXAoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllc1tpbmRleF07XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHt0aGlzLm5hbWV9IyR7ZW50aXR5LmlkfS4uLmApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQodGhpcy5fc3RvcmFnZUtleSArICcjJyArIGVudGl0eS5pZCwgZW50aXR5KTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0eS1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZGlydHlJbmRleGVzLmxlbmd0aH0vJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIGFsbCBlbnRpdGllcyBpbiBhIHNpbmdsZSBrZXkgKGRlZmF1bHQpXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbZW50aXR5LXN0b3JhZ2VdIFBlcnNpc3RpbmcgJHtlbnRpdGllcy5sZW5ndGh9ICR7dGhpcy5uYW1lfShzKS4uLmApO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KHRoaXMuX3N0b3JhZ2VLZXksIGVudGl0aWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXRpZXMubGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBlbnRpdGllczogVFtdO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuc3RvcmFnZS5nZXQodGhpcy5fc3RvcmFnZUtleSksIHRoaXMuc3RvcmFnZS5nZXQodGhpcy5zdG9yYWdlS2V5QnlJZCldKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZXNbMF0gJiYgQXJyYXkuaXNBcnJheShyZXNbMF0pID8gcmVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBpZHMgPSByZXNbMV0gJiYgQXJyYXkuaXNBcnJheShyZXNbMV0pID8gcmVzWzFdIDogbnVsbDtcbiAgICBsZXQgbWlncmF0aW9uID0gZmFsc2U7XG4gICAgbGV0IG9sZEtleXNUb0NsZWFuOiBzdHJpbmdbXTtcblxuICAgIC8vIFwiU3BsaXQgYnkgaWRcIiBtb2RlXG4gICAgaWYgKHRoaXMuaXNCeUlkTW9kZSkge1xuICAgICAgaWYgKGlzTm90TmlsKGlkcykpIHtcbiAgICAgICAgLy8gTG9hZCBlbnRpdHkgYnkgaWQgKG9uZSBieSBvbmUpXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICAgIGVudGl0aWVzID0gYXdhaXQgY2hhaW5Qcm9taXNlczxUPihzdG9yYWdlS2V5cy5tYXAoKGtleSkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLmdldChrZXkpKSk7XG4gICAgICB9XG4gICAgICAvLyBNaWdyYXRlIGZyb20gdGhlIHN0YW5kYXJkIG1vZGVcbiAgICAgIGVsc2UgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKChlKSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbdGhpcy5fc3RvcmFnZUtleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxzZSAoZGVmYXVsdCBtb2RlKVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlcykpIHtcbiAgICAgICAgZW50aXRpZXMgPSB2YWx1ZXMuZmlsdGVyKChlKSA9PiBlICYmIGlzTm90TmlsKGUuaWQpKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOb3ROaWwoaWRzKSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlS2V5cyA9IGlkcy5tYXAoKGlkKSA9PiB0aGlzLl9zdG9yYWdlS2V5ICsgJyMnICsgaWQpO1xuICAgICAgICAvLyBMb2FkIGVudGl0eSBieSBpZCAob25lIGJ5IG9uZSlcbiAgICAgICAgZW50aXRpZXMgPSBhd2FpdCBjaGFpblByb21pc2VzPFQ+KHN0b3JhZ2VLZXlzLm1hcCgoa2V5KSA9PiAoKSA9PiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpKTtcbiAgICAgICAgbWlncmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgb2xkS2V5c1RvQ2xlYW4gPSBbLi4uc3RvcmFnZUtleXMsIHRoaXMuc3RvcmFnZUtleUJ5SWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9LLCB0aGVyZSBpcyBzb21ldGhpbmcgaW4gc3RvcmFnZS4uLlxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoZW50aXRpZXMpKSB7XG4gICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID49IDEwMDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXR5LXN0b3JhZ2VdIC0gUmVzdG9yaW5nICR7ZW50aXRpZXMubGVuZ3RofSAke3RoaXMubmFtZX0uIENoZWNrIGlmIG5vdCB0b28gbWFueSBlbGVtZW50cz8hYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcCBlbnRpdGllcyBpbnRvIGxpZ2h0IGVsZW1lbnQgKGlmIGlmIG5vdCBuZWVkIHRvIHBlcnNpc3QsIGJlY2F1c2Ugb2YgbWlncmF0aW9uXG4gICAgICBpZiAodGhpcy5fbWFwVG9MaWdodEVudGl0eSAmJiAhbWlncmF0aW9uKSB7XG4gICAgICAgIGVudGl0aWVzID0gZW50aXRpZXMubWFwKHRoaXMuX21hcFRvTGlnaHRFbnRpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0RW50aXRpZXMoZW50aXRpZXMgfHwgW10sIHsgLi4ub3B0cywgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgLy8gRmluaXNoIHRoZSBtaWdyYXRpb25cbiAgICBpZiAobWlncmF0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdHktc3RvcmFnZV0gLSBNaWdyYXRlICR7dGhpcy5uYW1lfSBpbnRvIHttb2RlOiAnJHt0aGlzLnBvbGljeS5tb2RlfSd9Li4uYCk7XG5cbiAgICAgICAgLy8gRm9yY2UgdG8gcGVyc2lzdCwgdXNpbmcgdGhlIG5ldyBtb2RlXG4gICAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCh7IHNraXBJZlByaXN0aW5lOiBmYWxzZSAvKiBmb3JjZSBwZXJzaXN0IHVzaW5nIHRoZSBuZXcgbW9kZSAqLyB9KTtcblxuICAgICAgICAvLyBDbGVhbiBvbGQgc3RvcmFnZSBrZXlzIChvbmUgYnkgb25lKVxuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KG9sZEtleXNUb0NsZWFuKSkgYXdhaXQgY2hhaW5Qcm9taXNlcyhvbGRLZXlzVG9DbGVhbi5tYXAoKGtleSkgPT4gKCkgPT4gdGhpcy5zdG9yYWdlLnJlbW92ZShrZXkpKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRCwgbWVzc2FnZTogJ0VSUk9SLkVOVElUWV9TVE9SQUdFX01JR1JBVElPTl9GQUlMRUQnLCBkZXRhaWxzOiBlcnIgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbWl0IHVwZGF0ZSBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxlbmd0aDtcbiAgfVxuXG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3RhdHVzQnlJZC52YWx1ZXMoKSkge1xuICAgICAgaWYgKGlzTm90TmlsKHMpKSB7XG4gICAgICAgIHMuZGlydHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByaXZhdGUgbG9hZENhY2hlZEVudGl0eShpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBUIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCk7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgJiYgc3RhdHVzLmluZGV4O1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBleGlzdHNcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh0aGlzLl9jYWNoZVtpbmRleF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnVsbEVudGl0eShpZDogSUQsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9zdGF0dXNCeUlkLmdldChpZCk7XG4gICAgY29uc3QgaW5kZXggPSBzdGF0dXMgJiYgc3RhdHVzLmluZGV4O1xuICAgIGlmIChpc05pbChpbmRleCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBleGlzdHNcblxuICAgIC8vIFJlbG9hZCBmcm9tIHN0b3JhZ2UsIGlmIG5lZWQgKGUuZy4gc29tZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIGV4Y2x1ZGVkIGluIGxpZ2h0IGVsZW1lbnRzKVxuICAgIGlmIChzdGF0dXMuZGlydHkgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbZW50aXR5LXN0b3JhZ2VdIEZ1bGwgcmVsb2FkaW5nICR7dGhpcy5uYW1lfSMke2lkfS4uLmApO1xuICAgICAgY29uc3QgZnVsbERhdGEgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KHRoaXMuX3N0b3JhZ2VLZXkgKyAnIycgKyBpZCk7XG4gICAgICBpZiAoZnVsbERhdGEpIHJldHVybiBPYmplY3QuZnJlZXplKGZ1bGxEYXRhKTtcbiAgICAgIC8vIE5vdCBmb3VuZCBieSBpZCwgY29udGludWUgZnJvbSBjYWNoZSAodmVyc2lvbiBwcmlvciB0byAxLjUuMylcbiAgICB9XG5cbiAgICAvLyBMb2FkIGZyb20gdGhlIGNhY2hlLCBpZiBkaXJ0eSBPUiBpZiBzdG9yYWdlIGlzIG5vdCBzcGxpdHRlZCBieSBpZFxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMuX2NhY2hlW2luZGV4XSk7XG4gIH1cblxuICBwcml2YXRlIHNldEVudGl0aWVzKGVudGl0aWVzOiBUW10sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIC8vIEZpbHRlciBub24gbmlsIChhbmQgaWYgbmVlZCBub24gbG9jYWwpIGVudGl0aWVzXG4gICAgZW50aXRpZXMgPSAoZW50aXRpZXMgfHwgW10pLmZpbHRlcigoaXRlbSkgPT4gaXNOb3ROaWwoaXRlbSkgJiYgKCF0aGlzLnBvbGljeS5za2lwTm9uTG9jYWxFbnRpdGllcyB8fCAraXRlbS5pZCA8IDApKTtcblxuICAgIHRoaXMuX2NhY2hlID0gZW50aXRpZXM7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNlcXVlbmNlIHdpdGggbWluKGlkKSBvZiBhbGwgdGVtcG9yYXJ5IGlkc1xuICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fY2FjaGUucmVkdWNlKChyZXMsIGl0ZW0pID0+ICgraXRlbS5pZCA8IDAgPyBNYXRoLm1pbihyZXMsICtpdGVtLmlkKSA6IHJlcyksIDApO1xuXG4gICAgdGhpcy5fc3RhdHVzQnlJZC5jbGVhcigpO1xuICAgIHRoaXMuX2NhY2hlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9zdGF0dXNCeUlkLnNldChpdGVtLmlkLCA8RW50aXR5U3RhdHVzPntcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRpcnR5OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgdXBkYXRlIGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV0lsbCBhcHBseSBhIGZpbHRlciwgdGhlbiBhIHNvcnQsIHRoZW4gYSBwYWdlIHNsaWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB2YXJpYWJsZXNcbiAgICovXG4gIHByaXZhdGUgcmVkdWNlQW5kU29ydChcbiAgICBkYXRhOiBUW10sXG4gICAgdmFyaWFibGVzOiB7XG4gICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogTG9hZFJlc3VsdDxUPiB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShkYXRhKSkge1xuICAgICAgcmV0dXJuIHsgZGF0YTogW10sIHRvdGFsOiAwIH07XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5pbCB2YWx1ZXNcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXNOb3ROaWwpO1xuXG4gICAgaWYgKCF2YXJpYWJsZXMpIHtcbiAgICAgIC8vIFJldHVybiBhbGwgKGJ1dCBhcnJheSBoYXMgYmVlbiBmaWx0ZXJlZCwgYW5kIGNvcGllZClcbiAgICAgIHJldHVybiB7IGRhdGEsIHRvdGFsOiBkYXRhLmxlbmd0aCB9O1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIsIGlmIGFueVxuICAgIGlmICh2YXJpYWJsZXMuZmlsdGVyKSB7XG4gICAgICBkYXRhID0gZGF0YS5maWx0ZXIodmFyaWFibGVzLmZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgbGVuZ3RoXG4gICAgY29uc3QgdG90YWwgPSBkYXRhLmxlbmd0aDtcblxuICAgIC8vIElmIHBhZ2Ugc2l6ZT0wIChlLmcuIG9ubHkgbmVlZCB0b3RhbClcbiAgICBpZiAodmFyaWFibGVzLnNpemUgPT09IDApIHJldHVybiB7IGRhdGE6IFtdLCB0b3RhbCB9O1xuXG4gICAgLy8gU29ydCBieVxuICAgIGlmICh2YXJpYWJsZXMuc29ydEJ5KSB7XG4gICAgICBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHZhcmlhYmxlcy5zb3J0QnksICh2YXJpYWJsZXMuc29ydERpcmVjdGlvbj8udG9Mb3dlckNhc2UoKSBhcyBTb3J0RGlyZWN0aW9uKSB8fCAnYXNjJyk7XG4gICAgfVxuXG4gICAgLy8gU2xpY2UgaW4gYSBwYWdlICh1c2luZyBvZmZzZXQgYW5kIHNpemUpXG4gICAgaWYgKHZhcmlhYmxlcy5vZmZzZXQgPiAwKSB7XG4gICAgICAvLyBPZmZzZXQgYWZ0ZXIgdGhlIGVuZDogbm8gcmVzdWx0XG4gICAgICBpZiAodmFyaWFibGVzLm9mZnNldCA+PSBkYXRhLmxlbmd0aCB8fCB2YXJpYWJsZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICBkYXRhID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID1cbiAgICAgICAgICB2YXJpYWJsZXMuc2l6ZSA+IDAgJiYgdmFyaWFibGVzLm9mZnNldCArIHZhcmlhYmxlcy5zaXplIDwgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgID8gLy8gU2xpY2UgdXNpbmcgbGltaXQgdG8gc2l6ZVxuICAgICAgICAgICAgICBkYXRhLnNsaWNlKHZhcmlhYmxlcy5vZmZzZXQsIHZhcmlhYmxlcy5vZmZzZXQgKyB2YXJpYWJsZXMuc2l6ZSlcbiAgICAgICAgICAgIDogLy8gU2xpY2Ugd2l0aG91dCBsaW1pdFxuICAgICAgICAgICAgICBkYXRhLnNsaWNlKHZhcmlhYmxlcy5vZmZzZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IGEgbGltaXRcbiAgICBlbHNlIGlmICh2YXJpYWJsZXMuc2l6ZSA+IDApIHtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIHZhcmlhYmxlcy5zaXplKTtcbiAgICB9XG4gICAgLy8gTm8gbGltaXQ6XG4gICAgZWxzZSBpZiAodmFyaWFibGVzLnNpemUgPT09IC0xKSB7XG4gICAgICAvLyBLZWVwIGFsbCBkYXRhXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGF0YSwgdG90YWwgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlnaHRFbnRpdHlNYXBGbihwb2xpY3k6IEVudGl0eVN0b3JlVHlwZVBvbGljeTxUPik6IChUKSA9PiBUIHtcbiAgICBpZiAocG9saWN5Lm1vZGUgIT09ICdieS1pZCcpIHJldHVybiB1bmRlZmluZWQ7IC8vIE9ubHkgbmVlZCBmb3IgdGhlICdieS1pZCcgbW9kZVxuICAgIGlmIChpc0VtcHR5QXJyYXkocG9saWN5LmxpZ2h0RmllbGRzRXhjbHVkZXMpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICAvLyBDcmVhdGUgYSBpbW11dGFibGUgbWFzayBvYmplY3QsIHVzZSB0byBjbGVhbiBzb21lIHByb3BlcnRpZXNcbiAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlc01hc2sgPSBPYmplY3QuZnJlZXplKFxuICAgICAgdGhpcy5wb2xpY3kubGlnaHRGaWVsZHNFeGNsdWRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIGF0dHIpID0+IHtcbiAgICAgICAgICByZXNbYXR0cl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgPFQ+e31cbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIChlbnRpdHkpID0+IChlbnRpdHkgPyBPYmplY3QuYXNzaWduKDxUPnt9LCBlbnRpdHksIGV4Y2x1ZGVBdHRyaWJ1dGVzTWFzaykgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZW50aXRpZXNTdWJqZWN0LlxuICAgKlxuICAgKiBCZWZvcmUgd2VuZGluZyBpdGVtcywgYSBmaWx0ZXIgaXMgYXBwbHksIHRvIHJlbW92ZSBudWxsIHZhbHVlLlxuICAgKiBUaGlzIGZpbHRlciB3aWxsIGNyZWF0ZSBhIGFycmF5IGNvcHkuXG4gICAqL1xuICBwcml2YXRlIGVtaXRFdmVudCgpIHtcbiAgICB0aGlzLl9vbkNoYW5nZS5uZXh0KHRydWUpO1xuICB9XG59XG4iXX0=
@@ -22,4 +22,4 @@ ReferentialFilter = __decorate([
22
22
  EntityClass({ typename: 'ReferentialFilterVO' })
23
23
  ], ReferentialFilter);
24
24
  export { ReferentialFilter };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRCxXQUFXO0FBRUosSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBa0IsU0FBUSxZQUE0QztJQUVqRixNQUFNLENBQUMsVUFBVSxDQUFpRDtJQUVsRSxVQUFVLENBQVM7SUFFbkIsVUFBVSxDQUFDLE1BQVcsRUFBRSxJQUFVO1FBQ2hDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRVMsV0FBVztRQUNuQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RixJQUFJLFlBQVk7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFBO0FBbkJZLGlCQUFpQjtJQUQ3QixXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUMsQ0FBQztHQUNsQyxpQkFBaUIsQ0FtQjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi4vbW9kZWwvZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHlGaWx0ZXJ9IGZyb20gJy4uL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge1JlZmVyZW50aWFsfSBmcm9tICcuLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuLi9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtGaWx0ZXJGbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdSZWZlcmVudGlhbEZpbHRlclZPJ30pXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxGaWx0ZXIgZXh0ZW5kcyBFbnRpdHlGaWx0ZXI8UmVmZXJlbnRpYWxGaWx0ZXIsIFJlZmVyZW50aWFsPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gUmVmZXJlbnRpYWxGaWx0ZXI7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gc291cmNlLnNlYXJjaFRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRGaWx0ZXIoKTogRmlsdGVyRm48UmVmZXJlbnRpYWw+W10ge1xuICAgIGNvbnN0IHRhcmdldCA9IHN1cGVyLmJ1aWxkRmlsdGVyKCk7XG5cbiAgICBjb25zdCBzZWFyY2hUZXh0Rm4gPSBFbnRpdHlVdGlscy5zZWFyY2hUZXh0RmlsdGVyKFsnbGFiZWwnLCAnbmFtZSddLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgIGlmIChzZWFyY2hUZXh0Rm4pIHRhcmdldC5wdXNoKHNlYXJjaFRleHRGbik7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG4iXX0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxXQUFXO0FBRUosSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBa0IsU0FBUSxZQUE0QztJQUNqRixNQUFNLENBQUMsVUFBVSxDQUFpRDtJQUVsRSxVQUFVLENBQVM7SUFFbkIsVUFBVSxDQUFDLE1BQVcsRUFBRSxJQUFVO1FBQ2hDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRVMsV0FBVztRQUNuQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RixJQUFJLFlBQVk7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFBO0FBbEJZLGlCQUFpQjtJQUQ3QixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztHQUNwQyxpQkFBaUIsQ0FrQjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuLi9tb2RlbC9lbnRpdHkuZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdHlGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbC9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgUmVmZXJlbnRpYWwgfSBmcm9tICcuLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4uL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBGaWx0ZXJGbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3MoeyB0eXBlbmFtZTogJ1JlZmVyZW50aWFsRmlsdGVyVk8nIH0pXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxGaWx0ZXIgZXh0ZW5kcyBFbnRpdHlGaWx0ZXI8UmVmZXJlbnRpYWxGaWx0ZXIsIFJlZmVyZW50aWFsPiB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IFJlZmVyZW50aWFsRmlsdGVyO1xuXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNvdXJjZS5zZWFyY2hUZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkRmlsdGVyKCk6IEZpbHRlckZuPFJlZmVyZW50aWFsPltdIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzdXBlci5idWlsZEZpbHRlcigpO1xuXG4gICAgY29uc3Qgc2VhcmNoVGV4dEZuID0gRW50aXR5VXRpbHMuc2VhcmNoVGV4dEZpbHRlcihbJ2xhYmVsJywgJ25hbWUnXSwgdGhpcy5zZWFyY2hUZXh0KTtcbiAgICBpZiAoc2VhcmNoVGV4dEZuKSB0YXJnZXQucHVzaChzZWFyY2hUZXh0Rm4pO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuIl19
@@ -17,30 +17,30 @@ export class ReferentialValidatorService extends AppValidatorService {
17
17
  }
18
18
  getFormGroupConfig(data, opts) {
19
19
  const controlsConfig = {
20
- id: [data && data.id || null],
21
- updateDate: [data && data.updateDate || null],
22
- creationDate: [data && data.creationDate || null],
23
- statusId: [data && data.statusId || null, Validators.required],
24
- levelId: [data && data.levelId || null],
25
- label: [data && data.label || null, Validators.required],
26
- name: [data && data.name || null, Validators.required],
27
- entityName: [data && data.entityName || null, Validators.required]
20
+ id: [(data && data.id) || null],
21
+ updateDate: [(data && data.updateDate) || null],
22
+ creationDate: [(data && data.creationDate) || null],
23
+ statusId: [(data && data.statusId) || null, Validators.required],
24
+ levelId: [(data && data.levelId) || null],
25
+ label: [(data && data.label) || null, Validators.required],
26
+ name: [(data && data.name) || null, Validators.required],
27
+ entityName: [(data && data.entityName) || null, Validators.required],
28
28
  };
29
29
  if (!opts || opts.withDescription !== false) {
30
- controlsConfig.description = [data && data.description || null, Validators.maxLength(255)];
30
+ controlsConfig.description = [(data && data.description) || null, Validators.maxLength(255)];
31
31
  }
32
32
  if (!opts || opts.withComments !== false) {
33
- controlsConfig.comments = [data && data.comments || null, Validators.maxLength(2000)];
33
+ controlsConfig.comments = [(data && data.comments) || null, Validators.maxLength(2000)];
34
34
  }
35
35
  return controlsConfig;
36
36
  }
37
37
  getFormGroupOptions(data, opts) {
38
38
  return null;
39
39
  }
40
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ReferentialValidatorService, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable });
41
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ReferentialValidatorService });
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ReferentialValidatorService, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable });
41
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ReferentialValidatorService });
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ReferentialValidatorService, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ReferentialValidatorService, decorators: [{
44
44
  type: Injectable
45
45
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUErRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBSXRFLE1BQU0sT0FBTywyQkFDWCxTQUFRLG1CQUFzQjtJQUVSO0lBQXRCLFlBQXNCLFdBQStCO1FBQ25ELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQURDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtJQUVyRCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUSxFQUFFLElBR3RCO1FBQ0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFRLEVBQUUsSUFHNUI7UUFDQyxNQUFNLGNBQWMsR0FBeUI7WUFDM0MsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztZQUM3QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7WUFDakQsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUQsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1lBQ3ZDLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hELElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3RELFVBQVUsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDNUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxjQUFjLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVEsRUFBRSxJQUFVO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0FoRFUsMkJBQTJCOzJHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7UmVmZXJlbnRpYWx9IGZyb20gJy4uL21vZGVsL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7QXBwVmFsaWRhdG9yU2VydmljZX0gZnJvbSAnLi4vdmFsaWRhdG9yL2Jhc2UudmFsaWRhdG9yLmNsYXNzJztcbmltcG9ydCB7U3RhdHVzSWRzfSBmcm9tICcuLi9tb2RlbC9tb2RlbC5lbnVtJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZmVyZW50aWFsVmFsaWRhdG9yU2VydmljZTxUIGV4dGVuZHMgUmVmZXJlbnRpYWwgPSBSZWZlcmVudGlhbD5cbiAgZXh0ZW5kcyBBcHBWYWxpZGF0b3JTZXJ2aWNlPFQ+IHtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xuICAgIHN1cGVyKGZvcm1CdWlsZGVyKTtcbiAgfVxuXG4gIGdldFJvd1ZhbGlkYXRvcigpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGb3JtR3JvdXAoKTtcbiAgfVxuXG4gIGdldEZvcm1Hcm91cChkYXRhPzogVCwgb3B0cz86IHtcbiAgICB3aXRoRGVzY3JpcHRpb24/OiBib29sZWFuO1xuICAgIHdpdGhDb21tZW50cz86IGJvb2xlYW47XG4gIH0pOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgIHRoaXMuZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGEsIG9wdHMpLFxuICAgICAgdGhpcy5nZXRGb3JtR3JvdXBPcHRpb25zKGRhdGEsIG9wdHMpXG4gICAgKTtcbiAgfVxuXG4gIGdldEZvcm1Hcm91cENvbmZpZyhkYXRhPzogVCwgb3B0cz86IHtcbiAgICB3aXRoRGVzY3JpcHRpb24/OiBib29sZWFuO1xuICAgIHdpdGhDb21tZW50cz86IGJvb2xlYW47XG4gIH0pOiB7W2tleTogc3RyaW5nXTogYW55fSB7XG4gICAgY29uc3QgY29udHJvbHNDb25maWc6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge1xuICAgICAgaWQ6IFtkYXRhICYmIGRhdGEuaWQgfHwgbnVsbF0sXG4gICAgICB1cGRhdGVEYXRlOiBbZGF0YSAmJiBkYXRhLnVwZGF0ZURhdGUgfHwgbnVsbF0sXG4gICAgICBjcmVhdGlvbkRhdGU6IFtkYXRhICYmIGRhdGEuY3JlYXRpb25EYXRlIHx8IG51bGxdLFxuICAgICAgc3RhdHVzSWQ6IFtkYXRhICYmIGRhdGEuc3RhdHVzSWQgfHwgbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBsZXZlbElkOiBbZGF0YSAmJiBkYXRhLmxldmVsSWQgfHwgbnVsbF0sXG4gICAgICBsYWJlbDogW2RhdGEgJiYgZGF0YS5sYWJlbCB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG5hbWU6IFtkYXRhICYmIGRhdGEubmFtZSB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVudGl0eU5hbWU6IFtkYXRhICYmIGRhdGEuZW50aXR5TmFtZSB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgIH07XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy53aXRoRGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICBjb250cm9sc0NvbmZpZy5kZXNjcmlwdGlvbiA9IFtkYXRhICYmIGRhdGEuZGVzY3JpcHRpb24gfHwgbnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KV07XG4gICAgfVxuICAgIGlmICghb3B0cyB8fCBvcHRzLndpdGhDb21tZW50cyAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRyb2xzQ29uZmlnLmNvbW1lbnRzID0gW2RhdGEgJiYgZGF0YS5jb21tZW50cyB8fCBudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMDAwKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzQ29uZmlnO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwT3B0aW9ucyhkYXRhPzogVCwgb3B0cz86IGFueSk6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFnRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBSXhFLE1BQU0sT0FBTywyQkFBaUUsU0FBUSxtQkFBc0I7SUFDcEY7SUFBdEIsWUFBc0IsV0FBK0I7UUFDbkQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBREMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBRXJELENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FDVixJQUFRLEVBQ1IsSUFHQztRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVELGtCQUFrQixDQUNoQixJQUFRLEVBQ1IsSUFHQztRQUVELE1BQU0sY0FBYyxHQUEyQjtZQUM3QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO1lBQy9CLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDL0MsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNuRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDaEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztZQUN6QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDMUQsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hELFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNyRSxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzVDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVEsRUFBRSxJQUFVO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0FqRFUsMkJBQTJCOzJHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZWZlcmVudGlhbCB9IGZyb20gJy4uL21vZGVsL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7IEFwcFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi92YWxpZGF0b3IvYmFzZS52YWxpZGF0b3IuY2xhc3MnO1xuaW1wb3J0IHsgU3RhdHVzSWRzIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWwuZW51bSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWZlcmVudGlhbFZhbGlkYXRvclNlcnZpY2U8VCBleHRlbmRzIFJlZmVyZW50aWFsID0gUmVmZXJlbnRpYWw+IGV4dGVuZHMgQXBwVmFsaWRhdG9yU2VydmljZTxUPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgc3VwZXIoZm9ybUJ1aWxkZXIpO1xuICB9XG5cbiAgZ2V0Um93VmFsaWRhdG9yKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKFxuICAgIGRhdGE/OiBULFxuICAgIG9wdHM/OiB7XG4gICAgICB3aXRoRGVzY3JpcHRpb24/OiBib29sZWFuO1xuICAgICAgd2l0aENvbW1lbnRzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHRoaXMuZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGEsIG9wdHMpLCB0aGlzLmdldEZvcm1Hcm91cE9wdGlvbnMoZGF0YSwgb3B0cykpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwQ29uZmlnKFxuICAgIGRhdGE/OiBULFxuICAgIG9wdHM/OiB7XG4gICAgICB3aXRoRGVzY3JpcHRpb24/OiBib29sZWFuO1xuICAgICAgd2l0aENvbW1lbnRzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGNvbnRyb2xzQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuICAgICAgaWQ6IFsoZGF0YSAmJiBkYXRhLmlkKSB8fCBudWxsXSxcbiAgICAgIHVwZGF0ZURhdGU6IFsoZGF0YSAmJiBkYXRhLnVwZGF0ZURhdGUpIHx8IG51bGxdLFxuICAgICAgY3JlYXRpb25EYXRlOiBbKGRhdGEgJiYgZGF0YS5jcmVhdGlvbkRhdGUpIHx8IG51bGxdLFxuICAgICAgc3RhdHVzSWQ6IFsoZGF0YSAmJiBkYXRhLnN0YXR1c0lkKSB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGxldmVsSWQ6IFsoZGF0YSAmJiBkYXRhLmxldmVsSWQpIHx8IG51bGxdLFxuICAgICAgbGFiZWw6IFsoZGF0YSAmJiBkYXRhLmxhYmVsKSB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG5hbWU6IFsoZGF0YSAmJiBkYXRhLm5hbWUpIHx8IG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZW50aXR5TmFtZTogWyhkYXRhICYmIGRhdGEuZW50aXR5TmFtZSkgfHwgbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLndpdGhEZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnRyb2xzQ29uZmlnLmRlc2NyaXB0aW9uID0gWyhkYXRhICYmIGRhdGEuZGVzY3JpcHRpb24pIHx8IG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSldO1xuICAgIH1cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy53aXRoQ29tbWVudHMgIT09IGZhbHNlKSB7XG4gICAgICBjb250cm9sc0NvbmZpZy5jb21tZW50cyA9IFsoZGF0YSAmJiBkYXRhLmNvbW1lbnRzKSB8fCBudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMDAwKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzQ29uZmlnO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwT3B0aW9ucyhkYXRhPzogVCwgb3B0cz86IGFueSk6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -32,14 +32,14 @@ export class AccountValidatorService extends PersonValidatorService {
32
32
  return {
33
33
  withSettings: true,
34
34
  withTokens: true,
35
- ...super.fillDefaultOptions(opts)
35
+ ...super.fillDefaultOptions(opts),
36
36
  };
37
37
  }
38
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AccountValidatorService, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.TranslateService }, { token: i3.AccountService }, { token: i4.UserSettingsValidatorService }], target: i0.ɵɵFactoryTarget.Injectable });
39
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AccountValidatorService, providedIn: 'root' });
38
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AccountValidatorService, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.TranslateService }, { token: i3.AccountService }, { token: i4.UserSettingsValidatorService }], target: i0.ɵɵFactoryTarget.Injectable });
39
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AccountValidatorService, providedIn: 'root' });
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AccountValidatorService, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AccountValidatorService, decorators: [{
42
42
  type: Injectable,
43
43
  args: [{ providedIn: 'root' }]
44
44
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.TranslateService }, { type: i3.AccountService }, { type: i4.UserSettingsValidatorService }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2FjY291bnQudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLM0MsT0FBTyxFQUEwQixzQkFBc0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7QUFTcEgsTUFBTSxPQUFPLHVCQUNYLFNBQVEsc0JBQTRCO0lBR3hCO0lBQ0E7SUFDQTtJQUNBO0lBSlosWUFDWSxXQUErQixFQUMvQixTQUEyQixFQUMzQixjQUE4QixFQUM5Qiw0QkFBMEQ7UUFFcEUsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFMcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO0lBR3RFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFRLEVBQUUsSUFBUTtRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxJQUFRO1FBQ25DLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7U0FDbEMsQ0FBQztJQUNKLENBQUM7dUdBakNVLHVCQUF1QjsyR0FBdkIsdUJBQXVCLGNBRFgsTUFBTTs7MkZBQ2xCLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXNldHRpbmdzLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBQZXJzb25WYWxpZGF0b3JPcHRpb25zLCBQZXJzb25WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYWRtaW4vc2VydmljZXMvdmFsaWRhdG9yL3BlcnNvbi52YWxpZGF0b3InO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgUGVyc29uVmFsaWRhdG9yT3B0aW9ucyB7XG4gIHdpdGhTZXR0aW5ncz86IGJvb2xlYW47XG4gIHdpdGhUb2tlbnM/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50VmFsaWRhdG9yU2VydmljZTxUIGV4dGVuZHMgQWNjb3VudCA9IEFjY291bnQsIE8gZXh0ZW5kcyBBY2NvdW50VmFsaWRhdG9yT3B0aW9ucyA9IEFjY291bnRWYWxpZGF0b3JPcHRpb25zPlxuICBleHRlbmRzIFBlcnNvblZhbGlkYXRvclNlcnZpY2U8VCwgTz4ge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdXNlclNldHRpbmdzVmFsaWRhdG9yU2VydmljZTogVXNlclNldHRpbmdzVmFsaWRhdG9yU2VydmljZVxuICApIHtcbiAgICBzdXBlcihmb3JtQnVpbGRlciwgdHJhbnNsYXRlLCBhY2NvdW50U2VydmljZSk7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBDb25maWcoZGF0YT86IFQsIG9wdHM/OiBPKTogeyBba2V5OiBzdHJpbmddOiBhbnlbXX0ge1xuICAgIG9wdHMgPSB0aGlzLmZpbGxEZWZhdWx0T3B0aW9ucyhvcHRzKTtcblxuICAgIGNvbnN0IGZvcm1Db25maWcgPSBzdXBlci5nZXRGb3JtR3JvdXBDb25maWcoZGF0YSwgb3B0cyk7XG5cbiAgICBpZiAob3B0cy53aXRoU2V0dGluZ3MpIHtcbiAgICAgIGZvcm1Db25maWcuc2V0dGluZ3MgPSB0aGlzLnVzZXJTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2UuZ2V0Rm9ybUdyb3VwKGRhdGE/LnNldHRpbmdzKTtcbiAgICB9XG4gICAgaWYgKG9wdHMud2l0aFRva2Vucykge1xuICAgICAgZm9ybUNvbmZpZy50b2tlbnMgPSBbZGF0YT8udG9rZW5zIHx8IG51bGxdO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbGxEZWZhdWx0T3B0aW9ucyhvcHRzPzogTyk6IE8ge1xuICAgIHJldHVybiB7XG4gICAgICB3aXRoU2V0dGluZ3M6IHRydWUsXG4gICAgICB3aXRoVG9rZW5zOiB0cnVlLFxuICAgICAgLi4uc3VwZXIuZmlsbERlZmF1bHRPcHRpb25zKG9wdHMpXG4gICAgfTtcbiAgfVxufVxuIl19
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2FjY291bnQudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLM0MsT0FBTyxFQUEwQixzQkFBc0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7QUFTcEgsTUFBTSxPQUFPLHVCQUdYLFNBQVEsc0JBQTRCO0lBRXhCO0lBQ0E7SUFDQTtJQUNBO0lBSlosWUFDWSxXQUErQixFQUMvQixTQUEyQixFQUMzQixjQUE4QixFQUM5Qiw0QkFBMEQ7UUFFcEUsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFMcEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO0lBR3RFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFRLEVBQUUsSUFBUTtRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxJQUFRO1FBQ25DLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7U0FDbEMsQ0FBQztJQUNKLENBQUM7dUdBbENVLHVCQUF1QjsyR0FBdkIsdUJBQXVCLGNBRFYsTUFBTTs7MkZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXNldHRpbmdzLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBQZXJzb25WYWxpZGF0b3JPcHRpb25zLCBQZXJzb25WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYWRtaW4vc2VydmljZXMvdmFsaWRhdG9yL3BlcnNvbi52YWxpZGF0b3InO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRWYWxpZGF0b3JPcHRpb25zIGV4dGVuZHMgUGVyc29uVmFsaWRhdG9yT3B0aW9ucyB7XG4gIHdpdGhTZXR0aW5ncz86IGJvb2xlYW47XG4gIHdpdGhUb2tlbnM/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFjY291bnRWYWxpZGF0b3JTZXJ2aWNlPFxuICBUIGV4dGVuZHMgQWNjb3VudCA9IEFjY291bnQsXG4gIE8gZXh0ZW5kcyBBY2NvdW50VmFsaWRhdG9yT3B0aW9ucyA9IEFjY291bnRWYWxpZGF0b3JPcHRpb25zLFxuPiBleHRlbmRzIFBlcnNvblZhbGlkYXRvclNlcnZpY2U8VCwgTz4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2U6IFVzZXJTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZm9ybUJ1aWxkZXIsIHRyYW5zbGF0ZSwgYWNjb3VudFNlcnZpY2UpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGE/OiBULCBvcHRzPzogTyk6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSB7XG4gICAgb3B0cyA9IHRoaXMuZmlsbERlZmF1bHRPcHRpb25zKG9wdHMpO1xuXG4gICAgY29uc3QgZm9ybUNvbmZpZyA9IHN1cGVyLmdldEZvcm1Hcm91cENvbmZpZyhkYXRhLCBvcHRzKTtcblxuICAgIGlmIChvcHRzLndpdGhTZXR0aW5ncykge1xuICAgICAgZm9ybUNvbmZpZy5zZXR0aW5ncyA9IHRoaXMudXNlclNldHRpbmdzVmFsaWRhdG9yU2VydmljZS5nZXRGb3JtR3JvdXAoZGF0YT8uc2V0dGluZ3MpO1xuICAgIH1cbiAgICBpZiAob3B0cy53aXRoVG9rZW5zKSB7XG4gICAgICBmb3JtQ29uZmlnLnRva2VucyA9IFtkYXRhPy50b2tlbnMgfHwgbnVsbF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1Db25maWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRPcHRpb25zKG9wdHM/OiBPKTogTyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpdGhTZXR0aW5nczogdHJ1ZSxcbiAgICAgIHdpdGhUb2tlbnM6IHRydWUsXG4gICAgICAuLi5zdXBlci5maWxsRGVmYXVsdE9wdGlvbnMob3B0cyksXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -40,10 +40,10 @@ export class AppValidatorService extends ValidatorService {
40
40
  console.error(`[validator] Cannot translate error key '${errorKey}'. Please override translateError() in your validator`);
41
41
  return changeCaseToUnderscore(errorKey);
42
42
  }
43
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AppValidatorService, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
44
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.1", type: AppValidatorService, usesInheritance: true, ngImport: i0 });
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AppValidatorService, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
44
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: AppValidatorService, usesInheritance: true, ngImport: i0 });
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AppValidatorService, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AppValidatorService, decorators: [{
47
47
  type: Directive
48
48
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.TranslateService }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS52YWxpZGF0b3IuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2Jhc2UudmFsaWRhdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBS25FLE1BQU0sT0FBZ0IsbUJBQTZCLFNBQVEsZ0JBQWdCO0lBQ3pDO0lBQTJDO0lBQTNFLFlBQWdDLFdBQStCLEVBQVksU0FBNEI7UUFDckcsS0FBSyxFQUFFLENBQUM7UUFEc0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQVksY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFFdkcsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVE7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUTtRQUN6QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUF3QjtRQUN4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCO1FBQzlCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxZQUFrQjtRQUN6RCxNQUFNLE9BQU8sR0FBRyxjQUFjLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLElBQUksT0FBTyxLQUFLLFdBQVc7WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUNoRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVE7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUUxRCw2QkFBNkI7UUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsUUFBUSx1REFBdUQsQ0FBQyxDQUFDO1FBRTFILE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQzt1R0FwQ21CLG1CQUFtQjsyRkFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUR4QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3ZhbGlkYXRvci1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzIH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZvcm1FcnJvcnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybXMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBWYWxpZGF0b3JTZXJ2aWNlPFQgPSBhbnk+IGV4dGVuZHMgVmFsaWRhdG9yU2VydmljZSBpbXBsZW1lbnRzIElWYWxpZGF0b3JTZXJ2aWNlPFQ+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLCBwcm90ZWN0ZWQgdHJhbnNsYXRlPzogVHJhbnNsYXRlU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXRSb3dWYWxpZGF0b3IoKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUdyb3VwKCk7XG4gIH1cblxuICBnZXRGb3JtR3JvdXAoZGF0YT86IFQpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh0aGlzLmdldEZvcm1Hcm91cENvbmZpZyhkYXRhKSk7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBDb25maWcoZGF0YT86IFQpOiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH0ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEkxOG5Gb3JtRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnMgPSBBcHBGb3JtVXRpbHMuZ2V0Rm9ybUVycm9ycyhjb250cm9sKTtcbiAgICByZXR1cm4gdGhpcy5nZXRJMThuRXJyb3JzKGVycm9ycyk7XG4gIH1cblxuICBnZXRJMThuRXJyb3JzKGVycm9yczogRm9ybUVycm9ycyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzIHx8IHt9KS5tYXAoKGVycm9yS2V5KSA9PiB0aGlzLmdldEkxOG5FcnJvcihlcnJvcktleSwgZXJyb3JzW2Vycm9yS2V5XSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEkxOG5FcnJvcihlcnJvcktleTogc3RyaW5nLCBlcnJvckNvbnRlbnQ/OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGkxOG5LZXkgPSAnRVJST1IuRklFTERfJyArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoZXJyb3JLZXkpLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgaTE4bk1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGkxOG5LZXksIGVycm9yQ29udGVudCk7XG4gICAgaWYgKGkxOG5LZXkgIT09IGkxOG5NZXNzYWdlKSByZXR1cm4gaTE4bk1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBlcnJvckNvbnRlbnQgPT09ICdzdHJpbmcnKSByZXR1cm4gZXJyb3JDb250ZW50O1xuXG4gICAgLy8gTm90IHRyYW5zbGF0ZWQ6IHNob3cgZXJyb3JcbiAgICBjb25zb2xlLmVycm9yKGBbdmFsaWRhdG9yXSBDYW5ub3QgdHJhbnNsYXRlIGVycm9yIGtleSAnJHtlcnJvcktleX0nLiBQbGVhc2Ugb3ZlcnJpZGUgdHJhbnNsYXRlRXJyb3IoKSBpbiB5b3VyIHZhbGlkYXRvcmApO1xuXG4gICAgcmV0dXJuIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoZXJyb3JLZXkpO1xuICB9XG59XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS52YWxpZGF0b3IuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2Jhc2UudmFsaWRhdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBS25FLE1BQU0sT0FBZ0IsbUJBQTZCLFNBQVEsZ0JBQWdCO0lBRTdEO0lBQ0E7SUFGWixZQUNZLFdBQStCLEVBQy9CLFNBQTRCO1FBRXRDLEtBQUssRUFBRSxDQUFDO1FBSEUsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQW1CO0lBR3hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFRO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVE7UUFDekIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBd0I7UUFDeEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRVMsWUFBWSxDQUFDLFFBQWdCLEVBQUUsWUFBa0I7UUFDekQsTUFBTSxPQUFPLEdBQUcsY0FBYyxHQUFHLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNsRSxJQUFJLE9BQU8sS0FBSyxXQUFXO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDaEQsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFFMUQsNkJBQTZCO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLFFBQVEsdURBQXVELENBQUMsQ0FBQztRQUUxSCxPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7dUdBdkNtQixtQkFBbUI7MkZBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEeEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0b3Itc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcEZvcm1VdGlscyB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybS51dGlscyc7XG5pbXBvcnQgeyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGb3JtRXJyb3JzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVmFsaWRhdG9yU2VydmljZTxUID0gYW55PiBleHRlbmRzIFZhbGlkYXRvclNlcnZpY2UgaW1wbGVtZW50cyBJVmFsaWRhdG9yU2VydmljZTxUPiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlPzogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0Um93VmFsaWRhdG9yKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwKGRhdGE/OiBUKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAodGhpcy5nZXRGb3JtR3JvdXBDb25maWcoZGF0YSkpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGE/OiBUKTogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRJMThuRm9ybUVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzID0gQXBwRm9ybVV0aWxzLmdldEZvcm1FcnJvcnMoY29udHJvbCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0STE4bkVycm9ycyhlcnJvcnMpO1xuICB9XG5cbiAgZ2V0STE4bkVycm9ycyhlcnJvcnM6IEZvcm1FcnJvcnMpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycyB8fCB7fSkubWFwKChlcnJvcktleSkgPT4gdGhpcy5nZXRJMThuRXJyb3IoZXJyb3JLZXksIGVycm9yc1tlcnJvcktleV0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJMThuRXJyb3IoZXJyb3JLZXk6IHN0cmluZywgZXJyb3JDb250ZW50PzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBpMThuS2V5ID0gJ0VSUk9SLkZJRUxEXycgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGVycm9yS2V5KS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGkxOG5NZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChpMThuS2V5LCBlcnJvckNvbnRlbnQpO1xuICAgIGlmIChpMThuS2V5ICE9PSBpMThuTWVzc2FnZSkgcmV0dXJuIGkxOG5NZXNzYWdlO1xuICAgIGlmICh0eXBlb2YgZXJyb3JDb250ZW50ID09PSAnc3RyaW5nJykgcmV0dXJuIGVycm9yQ29udGVudDtcblxuICAgIC8vIE5vdCB0cmFuc2xhdGVkOiBzaG93IGVycm9yXG4gICAgY29uc29sZS5lcnJvcihgW3ZhbGlkYXRvcl0gQ2Fubm90IHRyYW5zbGF0ZSBlcnJvciBrZXkgJyR7ZXJyb3JLZXl9Jy4gUGxlYXNlIG92ZXJyaWRlIHRyYW5zbGF0ZUVycm9yKCkgaW4geW91ciB2YWxpZGF0b3JgKTtcblxuICAgIHJldHVybiBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGVycm9yS2V5KTtcbiAgfVxufVxuIl19