@sumaris-net/ngx-components 4.0.0-rc8 → 18.0.0-rc1

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 (555) hide show
  1. package/README.md +5 -3
  2. package/doc/changelog.md +522 -280
  3. package/esm2022/public_api.mjs +38 -19
  4. package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
  5. package/esm2022/src/app/admin/admin.module.mjs +7 -9
  6. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
  7. package/esm2022/src/app/admin/services/person.service.mjs +31 -31
  8. package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
  9. package/esm2022/src/app/admin/users/users.mjs +22 -19
  10. package/esm2022/src/app/admin/users/users.module.mjs +8 -10
  11. package/esm2022/src/app/core/about/about.modal.mjs +7 -7
  12. package/esm2022/src/app/core/about/about.module.mjs +8 -21
  13. package/esm2022/src/app/core/account/account.module.mjs +28 -18
  14. package/esm2022/src/app/core/account/account.page.mjs +19 -5
  15. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  16. package/esm2022/src/app/core/account/new-token.modal.mjs +27 -86
  17. package/esm2022/src/app/core/account/password/change-password.form.mjs +60 -0
  18. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  19. package/esm2022/src/app/core/account/password/change-password.page.mjs +144 -0
  20. package/esm2022/src/app/core/account/token.table.mjs +47 -35
  21. package/esm2022/src/app/core/auth/auth.form.mjs +47 -28
  22. package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
  23. package/esm2022/src/app/core/auth/auth.module.mjs +22 -13
  24. package/esm2022/src/app/core/auth/reset-password.modal.mjs +77 -0
  25. package/esm2022/src/app/core/core.module.mjs +28 -61
  26. package/esm2022/src/app/core/core.testing.module.mjs +34 -20
  27. package/esm2022/src/app/core/form/array/form-array.mjs +325 -0
  28. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  29. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  30. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +24 -25
  31. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
  32. package/esm2022/src/app/core/form/entity/editor.class.mjs +64 -517
  33. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +26 -42
  34. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +42 -41
  35. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  36. package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
  37. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +194 -0
  38. package/esm2022/src/app/core/form/form-container.class.mjs +327 -0
  39. package/esm2022/src/app/core/form/form.class.mjs +39 -56
  40. package/esm2022/src/app/core/form/form.module.mjs +14 -10
  41. package/esm2022/src/app/core/form/form.utils.mjs +23 -306
  42. package/esm2022/src/app/core/form/list/list.form.mjs +16 -14
  43. package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
  44. package/esm2022/src/app/core/form/properties/properties.form.mjs +139 -57
  45. package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
  46. package/esm2022/src/app/core/form/properties/properties.table.mjs +27 -28
  47. package/esm2022/src/app/core/form/properties/properties.utils.mjs +60 -0
  48. package/esm2022/src/app/core/form/properties/property.validator.mjs +23 -9
  49. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
  50. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +15 -15
  52. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
  53. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +7 -7
  54. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
  55. package/esm2022/src/app/core/form/username/username.form.mjs +52 -0
  56. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  57. package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -16
  58. package/esm2022/src/app/core/graphql/graphql.service.mjs +101 -109
  59. package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
  60. package/esm2022/src/app/core/home/home.mjs +81 -52
  61. package/esm2022/src/app/core/home/home.module.mjs +10 -19
  62. package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
  63. package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
  64. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
  65. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
  66. package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
  67. package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
  68. package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
  69. package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
  70. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  71. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +7 -6
  72. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +43 -8
  73. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
  74. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
  75. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
  76. package/esm2022/src/app/core/peer/select-peer.modal.mjs +31 -21
  77. package/esm2022/src/app/core/peer/select-peer.module.mjs +11 -23
  78. package/esm2022/src/app/core/register/register-confirm.page.mjs +18 -16
  79. package/esm2022/src/app/core/register/register.form.mjs +7 -7
  80. package/esm2022/src/app/core/register/register.modal.mjs +6 -6
  81. package/esm2022/src/app/core/register/register.module.mjs +8 -29
  82. package/esm2022/src/app/core/services/account.service.mjs +272 -170
  83. package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
  84. package/esm2022/src/app/core/services/base-entity-service.class.mjs +55 -64
  85. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
  86. package/esm2022/src/app/core/services/base58.mjs +8 -4
  87. package/esm2022/src/app/core/services/config/core.config.mjs +88 -37
  88. package/esm2022/src/app/core/services/config.service.mjs +81 -62
  89. package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
  90. package/esm2022/src/app/core/services/errors.mjs +6 -5
  91. package/esm2022/src/app/core/services/local-settings.service.mjs +58 -44
  92. package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
  93. package/esm2022/src/app/core/services/model/config.model.mjs +7 -7
  94. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  95. package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
  96. package/esm2022/src/app/core/services/model/entity.model.mjs +27 -31
  97. package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
  98. package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
  99. package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
  100. package/esm2022/src/app/core/services/model/peer.model.mjs +19 -9
  101. package/esm2022/src/app/core/services/model/person.model.mjs +26 -22
  102. package/esm2022/src/app/core/services/model/referential.model.mjs +36 -23
  103. package/esm2022/src/app/core/services/model/settings.model.mjs +2 -1
  104. package/esm2022/src/app/core/services/model/token.model.mjs +7 -3
  105. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +3 -7
  106. package/esm2022/src/app/core/services/network.service.mjs +99 -76
  107. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  108. package/esm2022/src/app/core/services/network.utils.mjs +3 -3
  109. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
  110. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
  111. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +9 -9
  112. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  113. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  114. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
  115. package/esm2022/src/app/core/services/platform.service.mjs +102 -69
  116. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
  117. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
  118. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  119. package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
  120. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  121. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +5 -5
  122. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +34 -20
  123. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  124. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
  125. package/esm2022/src/app/core/settings/settings.module.mjs +9 -21
  126. package/esm2022/src/app/core/settings/settings.page.mjs +76 -63
  127. package/esm2022/src/app/core/table/async-table.class.mjs +219 -201
  128. package/esm2022/src/app/core/table/column/actions-column.component.mjs +127 -0
  129. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  130. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  131. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +31 -33
  132. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +36 -36
  133. package/esm2022/src/app/core/table/memory-table.class.mjs +5 -5
  134. package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
  135. package/esm2022/src/app/core/table/table.class.mjs +193 -152
  136. package/esm2022/src/app/core/table/table.model.mjs +1 -1
  137. package/esm2022/src/app/core/table/table.module.mjs +35 -24
  138. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  139. package/esm2022/src/app/core/table/table.utils.mjs +2 -4
  140. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +9 -5
  141. package/esm2022/src/app/core/table/testing/table.testing.mjs +116 -78
  142. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
  143. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  144. package/esm2022/src/app/core/table/testing/table2.testing.mjs +68 -45
  145. package/esm2022/src/app/shared/alerts.mjs +49 -45
  146. package/esm2022/src/app/shared/audio/audio.mjs +25 -27
  147. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  148. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
  149. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  150. package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
  151. package/esm2022/src/app/shared/constants.mjs +9 -4
  152. package/esm2022/src/app/shared/dates.mjs +18 -16
  153. package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
  154. package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
  155. package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
  156. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -15
  157. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +4 -4
  158. package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
  159. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  160. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  161. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  162. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  163. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  164. package/esm2022/src/app/shared/events.mjs +6 -8
  165. package/esm2022/src/app/shared/file/csv.utils.mjs +38 -18
  166. package/esm2022/src/app/shared/file/file.service.mjs +11 -15
  167. package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
  168. package/esm2022/src/app/shared/file/images.utils.mjs +29 -4
  169. package/esm2022/src/app/shared/file/json.utils.mjs +11 -4
  170. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  171. package/esm2022/src/app/shared/focusable.mjs +1 -1
  172. package/esm2022/src/app/shared/form/field.component.mjs +69 -43
  173. package/esm2022/src/app/shared/form/field.model.mjs +4 -4
  174. package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
  175. package/esm2022/src/app/shared/forms.mjs +116 -43
  176. package/esm2022/src/app/shared/functions.mjs +139 -71
  177. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
  178. package/esm2022/src/app/shared/gesture/gesture-config.mjs +10 -10
  179. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
  180. package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
  181. package/esm2022/src/app/shared/graph/graph-colors.mjs +23 -29
  182. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  183. package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
  184. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
  185. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +44 -17
  186. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
  187. package/esm2022/src/app/shared/http/http.utils.mjs +15 -11
  188. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +27 -27
  189. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
  190. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  191. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
  192. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
  194. package/esm2022/src/app/shared/image/image.model.mjs +1 -1
  195. package/esm2022/src/app/shared/image/image.module.mjs +8 -13
  196. package/esm2022/src/app/shared/image/image.service.mjs +14 -12
  197. package/esm2022/src/app/shared/inputs.mjs +52 -20
  198. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
  199. package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
  200. package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
  201. package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
  202. package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
  203. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
  204. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +348 -238
  205. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +13 -16
  206. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +5 -4
  207. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +51 -37
  208. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +99 -57
  209. package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
  210. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  211. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +19 -20
  212. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +209 -104
  213. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +15 -8
  214. package/esm2022/src/app/shared/material/chips/chips.module.mjs +12 -13
  215. package/esm2022/src/app/shared/material/chips/material.chips.mjs +228 -168
  216. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +20 -21
  217. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +12 -27
  218. package/esm2022/src/app/shared/material/datetime/material.date.mjs +167 -92
  219. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +128 -77
  220. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +297 -165
  221. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +34 -30
  222. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +31 -27
  223. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +26 -23
  224. package/esm2022/src/app/shared/material/duration/duration.module.mjs +11 -16
  225. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
  226. package/esm2022/src/app/shared/material/duration/material.duration.mjs +35 -34
  227. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +23 -22
  228. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +217 -170
  229. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +182 -241
  230. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +10 -15
  231. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +19 -14
  232. package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
  233. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  234. package/esm2022/src/app/shared/material/material.module.mjs +16 -16
  235. package/esm2022/src/app/shared/material/material.testing.module.mjs +50 -37
  236. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +12 -9
  237. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  238. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +26 -19
  239. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
  240. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
  241. package/esm2022/src/app/shared/material/testing/common.test.mjs +30 -24
  242. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +30 -19
  243. package/esm2022/src/app/shared/material/text/text-form.component.mjs +128 -21
  244. package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
  245. package/esm2022/src/app/shared/modules.mjs +1 -1
  246. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +118 -37
  247. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  248. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  249. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +8 -8
  250. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  251. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  252. package/esm2022/src/app/shared/observables.mjs +14 -18
  253. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +53 -38
  254. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +24 -0
  255. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +8 -6
  256. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
  257. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +15 -15
  258. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  259. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  260. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
  261. package/esm2022/src/app/shared/pipes/form.pipes.mjs +72 -47
  262. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +15 -15
  263. package/esm2022/src/app/shared/pipes/html.pipes.mjs +52 -0
  264. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
  265. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
  266. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +37 -88
  267. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  268. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
  269. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
  270. package/esm2022/src/app/shared/pipes/pipes.module.mjs +117 -137
  271. package/esm2022/src/app/shared/pipes/property.pipes.mjs +86 -47
  272. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  273. package/esm2022/src/app/shared/pipes/string.pipes.mjs +50 -49
  274. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
  275. package/esm2022/src/app/shared/pipes/types.pipes.mjs +33 -17
  276. package/esm2022/src/app/shared/platforms.mjs +7 -5
  277. package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
  278. package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
  279. package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
  280. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +43 -41
  281. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  282. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
  283. package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
  284. package/esm2022/src/app/shared/services/translate-context.service.mjs +18 -15
  285. package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
  286. package/esm2022/src/app/shared/services.mjs +12 -12
  287. package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
  288. package/esm2022/src/app/shared/shared.module.mjs +29 -28
  289. package/esm2022/src/app/shared/shared.testing.module.mjs +18 -10
  290. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +39 -46
  291. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
  292. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
  293. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
  294. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  295. package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
  296. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  297. package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
  298. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  299. package/esm2022/src/app/shared/toast/toast.testing.mjs +11 -11
  300. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
  301. package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
  302. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +10 -8
  303. package/esm2022/src/app/shared/toolbar/toolbar.mjs +31 -32
  304. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
  305. package/esm2022/src/app/shared/types.mjs +1 -1
  306. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +12 -12
  307. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
  308. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
  309. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +21 -19
  310. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
  311. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +64 -56
  312. package/esm2022/src/app/shared/validator/validators.mjs +60 -39
  313. package/esm2022/src/app/shared/version/versions.mjs +2 -2
  314. package/esm2022/src/app/social/job/job.module.mjs +8 -27
  315. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
  316. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +49 -46
  317. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +10 -13
  318. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
  319. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +39 -21
  320. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +6 -11
  321. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +11 -30
  322. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
  323. package/esm2022/src/app/social/message/message.form.mjs +5 -5
  324. package/esm2022/src/app/social/message/message.modal.mjs +8 -8
  325. package/esm2022/src/app/social/message/message.model.mjs +8 -8
  326. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  327. package/esm2022/src/app/social/message/message.service.mjs +7 -7
  328. package/esm2022/src/app/social/social.errors.mjs +2 -2
  329. package/esm2022/src/app/social/social.module.mjs +7 -32
  330. package/esm2022/src/app/social/social.testing.module.mjs +9 -20
  331. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +27 -23
  332. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
  333. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
  334. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
  335. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
  336. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
  337. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  338. package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
  339. package/esm2022/src/app/social/user-event/user-event.service.mjs +61 -64
  340. package/esm2022/src/environments/environment.class.mjs +9 -1
  341. package/esm2022/src/environments/environment.loader.mjs +5 -11
  342. package/esm2022/src/environments/environment.mjs +19 -11
  343. package/fesm2022/sumaris-net.ngx-components.mjs +16117 -14592
  344. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  345. package/package.json +36 -18
  346. package/public_api.d.ts +30 -22
  347. package/src/app/admin/services/filter/person.filter.d.ts +1 -1
  348. package/src/app/admin/users/users.d.ts +5 -6
  349. package/src/app/core/account/account.module.d.ts +10 -8
  350. package/src/app/core/account/account.page.d.ts +25 -15
  351. package/src/app/core/account/new-token.form.d.ts +29 -0
  352. package/src/app/core/account/new-token.modal.d.ts +9 -21
  353. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  354. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  355. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  356. package/src/app/core/account/token.table.d.ts +7 -5
  357. package/src/app/core/auth/auth.form.d.ts +11 -9
  358. package/src/app/core/auth/auth.module.d.ts +6 -4
  359. package/src/app/core/auth/reset-password.modal.d.ts +26 -0
  360. package/src/app/core/core.module.d.ts +21 -24
  361. package/src/app/core/core.testing.module.d.ts +2 -1
  362. package/src/app/core/form/array/form-array.d.ts +136 -0
  363. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  364. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  365. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -3
  366. package/src/app/core/form/entity/editor.class.d.ts +19 -179
  367. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +10 -13
  368. package/src/app/core/form/entity/entity-editor.class.d.ts +12 -17
  369. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  370. package/src/app/core/form/entity/tab-editor.class.d.ts +70 -0
  371. package/src/app/core/form/form-container.class.d.ts +126 -0
  372. package/src/app/core/form/form.class.d.ts +13 -26
  373. package/src/app/core/form/form.module.d.ts +2 -1
  374. package/src/app/core/form/form.utils.d.ts +60 -145
  375. package/src/app/core/form/list/list.form.d.ts +2 -2
  376. package/src/app/core/form/properties/properties.form.d.ts +34 -12
  377. package/src/app/core/form/properties/properties.table.d.ts +2 -2
  378. package/src/app/core/form/properties/properties.utils.d.ts +27 -0
  379. package/src/app/core/form/properties/property.validator.d.ts +9 -3
  380. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +3 -1
  381. package/src/app/core/form/username/username.form.d.ts +19 -0
  382. package/src/app/core/form/username/username.module.d.ts +9 -0
  383. package/src/app/core/graphql/graphql.module.d.ts +1 -2
  384. package/src/app/core/graphql/graphql.service.d.ts +2 -4
  385. package/src/app/core/home/home.d.ts +26 -6
  386. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  387. package/src/app/core/menu/testing/menu.testing.d.ts +11 -3
  388. package/src/app/core/peer/select-peer.modal.d.ts +13 -7
  389. package/src/app/core/peer/select-peer.module.d.ts +3 -4
  390. package/src/app/core/services/account.service.d.ts +9 -0
  391. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  392. package/src/app/core/services/config/core.config.d.ts +12 -1
  393. package/src/app/core/services/config.service.d.ts +4 -3
  394. package/src/app/core/services/errors.d.ts +11 -0
  395. package/src/app/core/services/local-settings.service.d.ts +8 -4
  396. package/src/app/core/services/model/entity.model.d.ts +6 -5
  397. package/src/app/core/services/model/filter.model.d.ts +1 -1
  398. package/src/app/core/services/model/peer.model.d.ts +1 -0
  399. package/src/app/core/services/model/person.model.d.ts +6 -2
  400. package/src/app/core/services/model/referential.model.d.ts +8 -3
  401. package/src/app/core/services/model/settings.model.d.ts +4 -2
  402. package/src/app/core/services/model/token.model.d.ts +1 -0
  403. package/src/app/core/services/model/tree-item-entity.model.d.ts +1 -1
  404. package/src/app/core/services/network.service.d.ts +11 -7
  405. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
  406. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +3 -1
  407. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  408. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  409. package/src/app/core/services/platform.service.d.ts +8 -3
  410. package/src/app/core/services/testing/referential-filter.model.d.ts +1 -1
  411. package/src/app/core/services/validator/local-settings.validator.d.ts +6 -2
  412. package/src/app/core/settings/settings.module.d.ts +2 -1
  413. package/src/app/core/settings/settings.page.d.ts +34 -21
  414. package/src/app/core/table/async-table.class.d.ts +22 -17
  415. package/src/app/core/table/column/actions-column.component.d.ts +59 -0
  416. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  417. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  418. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -0
  419. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
  420. package/src/app/core/table/table.class.d.ts +14 -11
  421. package/src/app/core/table/table.module.d.ts +8 -4
  422. package/src/app/core/table/table.pipes.d.ts +28 -0
  423. package/src/app/core/table/testing/table.testing.d.ts +12 -13
  424. package/src/app/core/table/testing/table2.testing.d.ts +13 -10
  425. package/src/app/shared/alerts.d.ts +4 -2
  426. package/src/app/shared/constants.d.ts +5 -0
  427. package/src/app/shared/dates.d.ts +12 -5
  428. package/src/app/shared/directives/autofocus.directive.d.ts +0 -1
  429. package/src/app/shared/events.d.ts +1 -1
  430. package/src/app/shared/file/csv.utils.d.ts +5 -0
  431. package/src/app/shared/file/images.utils.d.ts +17 -0
  432. package/src/app/shared/file/json.utils.d.ts +3 -0
  433. package/src/app/shared/form/field.component.d.ts +6 -3
  434. package/src/app/shared/forms.d.ts +32 -0
  435. package/src/app/shared/functions.d.ts +27 -8
  436. package/src/app/shared/graph/graph-colors.d.ts +1 -1
  437. package/src/app/shared/guard/component-dirty.guard.d.ts +1 -6
  438. package/src/app/shared/hotkeys/hotkeys.service.d.ts +17 -3
  439. package/src/app/shared/http/http.utils.d.ts +1 -0
  440. package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
  441. package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
  442. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
  443. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
  444. package/src/app/shared/inputs.d.ts +8 -6
  445. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +20 -1
  446. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +56 -16
  447. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +1 -1
  448. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +2 -1
  449. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +3 -2
  450. package/src/app/shared/material/badge/badge.directive.d.ts +10 -4
  451. package/src/app/shared/material/boolean/boolean.module.d.ts +15 -14
  452. package/src/app/shared/material/boolean/material.boolean.d.ts +51 -25
  453. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +1 -0
  454. package/src/app/shared/material/chips/chips.module.d.ts +2 -1
  455. package/src/app/shared/material/chips/material.chips.d.ts +46 -21
  456. package/src/app/shared/material/chips/testing/chips.test.d.ts +1 -0
  457. package/src/app/shared/material/datetime/datetime.module.d.ts +1 -1
  458. package/src/app/shared/material/datetime/material.date.d.ts +33 -18
  459. package/src/app/shared/material/datetime/material.dateshort.d.ts +29 -16
  460. package/src/app/shared/material/datetime/material.datetime.d.ts +41 -28
  461. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +3 -3
  462. package/src/app/shared/material/duration/duration.module.d.ts +1 -1
  463. package/src/app/shared/material/duration/material.duration.d.ts +1 -1
  464. package/src/app/shared/material/latlong/latlong.utils.d.ts +9 -1
  465. package/src/app/shared/material/latlong/material.latlong.d.ts +29 -32
  466. package/src/app/shared/material/latlong/material.latlong.module.d.ts +1 -1
  467. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +5 -1
  468. package/src/app/shared/material/material.config.d.ts +3 -0
  469. package/src/app/shared/material/material.module.d.ts +5 -6
  470. package/src/app/shared/material/material.testing.module.d.ts +8 -7
  471. package/src/app/shared/material/swipe/material.swipe.d.ts +4 -3
  472. package/src/app/shared/material/text/testing/text-form.testing.d.ts +10 -4
  473. package/src/app/shared/material/text/text-form.component.d.ts +42 -8
  474. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +30 -14
  475. package/src/app/shared/named-filter/named-filter.service.d.ts +12 -6
  476. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  477. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  478. package/src/app/shared/pipes/arrays.pipe.d.ts +5 -0
  479. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  480. package/src/app/shared/pipes/date-format.pipe.d.ts +3 -2
  481. package/src/app/shared/pipes/form.pipes.d.ts +18 -8
  482. package/src/app/shared/pipes/html.pipes.d.ts +15 -0
  483. package/src/app/shared/pipes/maps.pipe.d.ts +4 -4
  484. package/src/app/shared/pipes/maskito.pipe.d.ts +7 -9
  485. package/src/app/shared/pipes/pipes.module.d.ts +7 -4
  486. package/src/app/shared/pipes/property.pipes.d.ts +24 -3
  487. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  488. package/src/app/shared/pipes/string.pipes.d.ts +6 -6
  489. package/src/app/shared/pipes/types.pipes.d.ts +6 -1
  490. package/src/app/shared/services/entity-service.class.d.ts +0 -2
  491. package/src/app/shared/services/memory-entity-service.class.d.ts +6 -3
  492. package/src/app/shared/services.d.ts +1 -0
  493. package/src/app/shared/shared.testing.module.d.ts +2 -1
  494. package/src/app/shared/storage/storage-explorer.component.d.ts +4 -3
  495. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  496. package/src/app/shared/toolbar/toolbar.d.ts +7 -2
  497. package/src/app/shared/types.d.ts +5 -0
  498. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -0
  499. package/src/app/shared/validator/form-error-adapter.class.d.ts +17 -11
  500. package/src/app/shared/validator/validators.d.ts +20 -9
  501. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -5
  502. package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
  503. package/src/app/social/job/progression/job-progression.service.d.ts +3 -4
  504. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -1
  505. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -11
  506. package/src/app/social/message/message.modal.d.ts +2 -2
  507. package/src/app/social/message/message.model.d.ts +1 -1
  508. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -4
  509. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
  510. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +2 -3
  511. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
  512. package/src/assets/i18n/en-US.json +48 -19
  513. package/src/assets/i18n/en.json +48 -20
  514. package/src/assets/i18n/fr.json +50 -20
  515. package/src/assets/manifest.json +1 -1
  516. package/src/environments/environment.class.d.ts +10 -0
  517. package/src/environments/environment.d.ts +0 -1
  518. package/src/environments/environment.loader.d.ts +0 -2
  519. package/src/theme/_functions.scss +15 -0
  520. package/src/theme/_icons.scss +1 -1
  521. package/src/theme/_ionic.globals.scss +8 -2
  522. package/src/theme/_ionic.scss +10 -10
  523. package/src/theme/_material.globals.scss +16 -43
  524. package/src/theme/_material.scss +45 -32
  525. package/src/theme/_mixins.scss +99 -18
  526. package/src/theme/_ngx-components.forms.scss +354 -0
  527. package/src/theme/_ngx-components.globals.scss +20 -10
  528. package/src/theme/_ngx-components.scss +194 -400
  529. package/src/theme/_ngx-components.table.scss +200 -207
  530. package/src/theme/_ngx-components.tabs.scss +54 -0
  531. package/src/theme/_responsive.scss +0 -31
  532. package/src/theme/_theme.scss +2 -0
  533. package/src/theme/_theme.variables.scss +172 -0
  534. package/esm2022/src/app/core/table/actions-column.component.mjs +0 -115
  535. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +0 -266
  536. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
  537. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
  538. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
  539. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
  540. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
  541. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
  542. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
  543. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  544. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
  545. package/src/app/core/table/actions-column.component.d.ts +0 -48
  546. package/src/app/shared/material/boolean/material-boolean2.d.ts +0 -66
  547. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  548. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  549. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  550. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  551. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  552. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  553. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  554. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  555. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
@@ -4,7 +4,7 @@ import { Entity } from './entity.model';
4
4
  import { Department } from './department.model';
5
5
  import { fromDateISOString, toDateISOString } from '../../../shared/dates';
6
6
  import { EntityClass } from './entity.decorators';
7
- import { isEmptyArray, isNotNil } from '../../../shared/functions';
7
+ import { isEmptyArray, isNil, isNotNil } from '../../../shared/functions';
8
8
  export const PRIORITIZED_AUTHORITIES = Object.freeze(['ADMIN', 'SUPERVISOR', 'USER', 'GUEST']);
9
9
  // @dynamic
10
10
  let Person = class Person extends Entity {
@@ -29,16 +29,16 @@ let Person = class Person extends Entity {
29
29
  if (opts && opts.minify) {
30
30
  return {
31
31
  id: this.id,
32
- __typename: opts.keepTypename && this.__typename || undefined,
32
+ __typename: (opts.keepTypename && this.__typename) || undefined,
33
33
  firstName: this.firstName,
34
- lastName: this.lastName
34
+ lastName: this.lastName,
35
35
  };
36
36
  }
37
37
  const target = super.asObject(opts);
38
- target.department = this.department && this.department.asObject(opts) || undefined;
39
- target.profiles = this.profiles && this.profiles.slice(0) || [];
38
+ target.department = (this.department && this.department.asObject(opts)) || undefined;
39
+ target.profiles = (this.profiles && this.profiles.slice(0)) || [];
40
40
  // Set profile list from the main profile
41
- target.profiles = this.mainProfile && [this.mainProfile] || target.profiles;
41
+ target.profiles = (this.mainProfile && [this.mainProfile]) || target.profiles;
42
42
  target.creationDate = toDateISOString(this.creationDate);
43
43
  if (!opts || opts.minify !== true)
44
44
  target.mainProfile = PersonUtils.getMainProfile(target.profiles);
@@ -55,23 +55,24 @@ let Person = class Person extends Entity {
55
55
  this.usernameExtranet = source.usernameExtranet;
56
56
  this.avatar = source.avatar;
57
57
  this.statusId = source.statusId;
58
- this.department = source.department && Department.fromObject(source.department) || undefined;
59
- this.profiles = source.profiles && source.profiles.slice(0) || [];
58
+ this.department = (source.department && Department.fromObject(source.department)) || undefined;
59
+ this.profiles = (source.profiles && source.profiles.slice(0)) || [];
60
60
  // Add main profile to the list, if need
61
- if (source.mainProfile && !this.profiles.find(p => p === source.mainProfile)) {
61
+ if (source.mainProfile && !this.profiles.find((p) => p === source.mainProfile)) {
62
62
  this.profiles = this.profiles.concat(source.mainProfile);
63
63
  }
64
64
  this.mainProfile = PersonUtils.getMainProfile(this.profiles);
65
65
  }
66
66
  equals(other) {
67
- return other
68
- && ((isNotNil(this.id) && this.id === other.id)
67
+ return (other &&
68
+ ((isNotNil(this.id) && this.id === other.id) ||
69
69
  // Functional test
70
- || (
71
70
  // Pubkey should be unique
72
- (this.pubkey && this.pubkey === other.pubkey)
71
+ (this.pubkey &&
72
+ this.pubkey === other.pubkey &&
73
73
  // Email should be unique
74
- && (this.email && this.email === other.email)));
74
+ this.email &&
75
+ this.email === other.email)));
75
76
  }
76
77
  };
77
78
  Person = Person_1 = __decorate([
@@ -82,29 +83,32 @@ export class PersonUtils {
82
83
  static getMainProfile(profiles) {
83
84
  if (isEmptyArray(profiles))
84
85
  return 'GUEST';
85
- return PRIORITIZED_AUTHORITIES.find(label => profiles.includes(label)) || 'GUEST';
86
+ return PRIORITIZED_AUTHORITIES.find((label) => profiles.includes(label)) || 'GUEST';
86
87
  }
87
88
  static getMainProfileIndex(profiles) {
88
89
  if (isEmptyArray(profiles))
89
90
  return PRIORITIZED_AUTHORITIES.length - 1; // return last (lower) profile
90
- const index = PRIORITIZED_AUTHORITIES.findIndex(label => profiles.includes(label));
91
- return (index !== -1) ? index : (PRIORITIZED_AUTHORITIES.length - 1);
91
+ const index = PRIORITIZED_AUTHORITIES.findIndex((label) => profiles.includes(label));
92
+ return index !== -1 ? index : PRIORITIZED_AUTHORITIES.length - 1;
92
93
  }
93
94
  static hasUpperOrEqualsProfile(actualProfiles, expectedProfile) {
94
95
  const expectedProfileIndex = PRIORITIZED_AUTHORITIES.indexOf(expectedProfile);
95
96
  return expectedProfileIndex !== -1 && PersonUtils.getMainProfileIndex(actualProfiles) <= expectedProfileIndex;
96
97
  }
97
- static personToString(obj) {
98
- if (!obj || !obj.id)
98
+ static personToString(obj, opts) {
99
+ if (!obj || isNil(obj.id))
99
100
  return undefined;
101
+ if (opts?.withDepartment && obj.department?.label) {
102
+ return obj.firstName + ' ' + obj.lastName + ' (' + obj.department?.label + ')';
103
+ }
100
104
  return obj.lastName + ' ' + obj.firstName;
101
105
  }
102
- static personsToString(data, separator) {
103
- return (data || []).map(PersonUtils.personToString).join(separator || ', ');
106
+ static personsToString(data, separator, opts) {
107
+ return (data || []).map((p) => PersonUtils.personToString(p, opts)).join(separator || ', ');
104
108
  }
105
109
  static roleToProfile(role, defaultProfile) {
106
110
  const label = role?.replace(/^ROLE_/, '');
107
111
  return label || defaultProfile;
108
112
  }
109
113
  }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR25FLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUU3SCxXQUFXO0FBRUosSUFBTSxNQUFNLEdBQVosTUFBTSxNQUVULFNBQVEsTUFBNkM7O0lBRXZELE1BQU0sQ0FBQyxVQUFVLENBQXVDO0lBRXhELFNBQVMsQ0FBUztJQUNsQixRQUFRLENBQVM7SUFDakIsS0FBSyxDQUFTO0lBQ2QsTUFBTSxDQUFTO0lBQ2YsTUFBTSxDQUFTO0lBQ2YsWUFBWSxDQUFnQjtJQUM1QixRQUFRLENBQVM7SUFDakIsVUFBVSxHQUFlLElBQUksQ0FBQztJQUM5QixRQUFRLENBQVM7SUFDakIsZ0JBQWdCLENBQVM7SUFDekIsUUFBUSxDQUFXO0lBQ25CLFdBQVcsQ0FBUztJQUVwQixZQUFZLFVBQW1CO1FBQzdCLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBaUM7UUFDeEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRztZQUN4QixPQUFPO2dCQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVM7Z0JBQzdELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCLENBQUM7U0FDSDtRQUNELE1BQU0sTUFBTSxHQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNuRixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hFLHlDQUF5QztRQUN6QyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM1RSxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7WUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBVztRQUNwQixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDN0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRSx3Q0FBd0M7UUFDeEMsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVE7UUFDYixPQUFPLEtBQUs7ZUFDUCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLGtCQUFrQjttQkFDZjtnQkFDRCwwQkFBMEI7Z0JBQzFCLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQzdDLHlCQUF5Qjt1QkFDdEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUM5QyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YsQ0FBQTtBQTFFWSxNQUFNO0lBRGxCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsQ0FBQztHQUN2QixNQUFNLENBMEVsQjs7QUFFRCxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDLFFBQW1CO1FBQ3ZDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzNDLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztJQUNwRixDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQW1CO1FBQzVDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtRQUNyRyxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkYsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQUMsY0FBd0IsRUFBRSxlQUFpQztRQUN4RixNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5RSxPQUFPLG9CQUFvQixLQUFLLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxvQkFBb0IsQ0FBQztJQUNoSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFXO1FBQy9CLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFjLEVBQUUsU0FBa0I7UUFDdkQsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBWSxFQUFFLGNBQWlDO1FBQ2xFLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBcUIsQ0FBQztRQUM5RCxPQUFPLEtBQUssSUFBSSxjQUFjLENBQUM7SUFDakMsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zIH0gZnJvbSAnLi9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEZXBhcnRtZW50IH0gZnJvbSAnLi9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7IGZyb21EYXRlSVNPU3RyaW5nLCB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgVXNlclByb2ZpbGVMYWJlbCA9ICdBRE1JTicgfCAnVVNFUicgfCAnU1VQRVJWSVNPUicgfCAnR1VFU1QnO1xuZXhwb3J0IGNvbnN0IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTOiBSZWFkb25seTxVc2VyUHJvZmlsZUxhYmVsW10+ID0gT2JqZWN0LmZyZWV6ZShbJ0FETUlOJywgJ1NVUEVSVklTT1InLCAnVVNFUicsICdHVUVTVCddKTtcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdQZXJzb25WTyd9KVxuZXhwb3J0IGNsYXNzIFBlcnNvbjxcbiAgVCBleHRlbmRzIFBlcnNvbjxhbnk+ID0gUGVyc29uPGFueT5cbiAgPiBleHRlbmRzIEVudGl0eTxULCBudW1iZXIsIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gIFBlcnNvbjtcblxuICBmaXJzdE5hbWU6IHN0cmluZztcbiAgbGFzdE5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcHVia2V5OiBzdHJpbmc7XG4gIGF2YXRhcjogc3RyaW5nO1xuICBjcmVhdGlvbkRhdGU6IERhdGUgfCBNb21lbnQ7XG4gIHN0YXR1c0lkOiBudW1iZXI7XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQgPSBudWxsO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICB1c2VybmFtZUV4dHJhbmV0OiBzdHJpbmc7XG4gIHByb2ZpbGVzOiBzdHJpbmdbXTtcbiAgbWFpblByb2ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfX3R5cGVuYW1lPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoX190eXBlbmFtZSB8fCBQZXJzb24uVFlQRU5BTUUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICBpZiAob3B0cyAmJiBvcHRzLm1pbmlmeSkgIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBfX3R5cGVuYW1lOiBvcHRzLmtlZXBUeXBlbmFtZSAmJiB0aGlzLl9fdHlwZW5hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICBmaXJzdE5hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogdGhpcy5sYXN0TmFtZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBzdXBlci5hc09iamVjdChvcHRzKTtcbiAgICB0YXJnZXQuZGVwYXJ0bWVudCA9IHRoaXMuZGVwYXJ0bWVudCAmJiB0aGlzLmRlcGFydG1lbnQuYXNPYmplY3Qob3B0cykgfHwgdW5kZWZpbmVkO1xuICAgIHRhcmdldC5wcm9maWxlcyA9IHRoaXMucHJvZmlsZXMgJiYgdGhpcy5wcm9maWxlcy5zbGljZSgwKSB8fCBbXTtcbiAgICAvLyBTZXQgcHJvZmlsZSBsaXN0IGZyb20gdGhlIG1haW4gcHJvZmlsZVxuICAgIHRhcmdldC5wcm9maWxlcyA9IHRoaXMubWFpblByb2ZpbGUgJiYgW3RoaXMubWFpblByb2ZpbGVdIHx8IHRhcmdldC5wcm9maWxlcztcbiAgICB0YXJnZXQuY3JlYXRpb25EYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMuY3JlYXRpb25EYXRlKTtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLm1pbmlmeSAhPT0gdHJ1ZSkgdGFyZ2V0Lm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUodGFyZ2V0LnByb2ZpbGVzKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmZpcnN0TmFtZSA9IHNvdXJjZS5maXJzdE5hbWU7XG4gICAgdGhpcy5sYXN0TmFtZSA9IHNvdXJjZS5sYXN0TmFtZTtcbiAgICB0aGlzLmVtYWlsID0gc291cmNlLmVtYWlsO1xuICAgIHRoaXMuY3JlYXRpb25EYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLmNyZWF0aW9uRGF0ZSk7XG4gICAgdGhpcy5wdWJrZXkgPSBzb3VyY2UucHVia2V5O1xuICAgIHRoaXMudXNlcm5hbWUgPSBzb3VyY2UudXNlcm5hbWU7XG4gICAgdGhpcy51c2VybmFtZUV4dHJhbmV0ID0gc291cmNlLnVzZXJuYW1lRXh0cmFuZXQ7XG4gICAgdGhpcy5hdmF0YXIgPSBzb3VyY2UuYXZhdGFyO1xuICAgIHRoaXMuc3RhdHVzSWQgPSBzb3VyY2Uuc3RhdHVzSWQ7XG4gICAgdGhpcy5kZXBhcnRtZW50ID0gc291cmNlLmRlcGFydG1lbnQgJiYgRGVwYXJ0bWVudC5mcm9tT2JqZWN0KHNvdXJjZS5kZXBhcnRtZW50KSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm9maWxlcyA9IHNvdXJjZS5wcm9maWxlcyAmJiBzb3VyY2UucHJvZmlsZXMuc2xpY2UoMCkgfHwgW107XG4gICAgLy8gQWRkIG1haW4gcHJvZmlsZSB0byB0aGUgbGlzdCwgaWYgbmVlZFxuICAgIGlmIChzb3VyY2UubWFpblByb2ZpbGUgJiYgIXRoaXMucHJvZmlsZXMuZmluZChwID0+IHAgPT09IHNvdXJjZS5tYWluUHJvZmlsZSkpIHtcbiAgICAgIHRoaXMucHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzLmNvbmNhdChzb3VyY2UubWFpblByb2ZpbGUpO1xuICAgIH1cbiAgICB0aGlzLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUodGhpcy5wcm9maWxlcyk7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXJcbiAgICAgICYmICgoaXNOb3ROaWwodGhpcy5pZCkgJiYgdGhpcy5pZCA9PT0gb3RoZXIuaWQpXG4gICAgICAvLyBGdW5jdGlvbmFsIHRlc3RcbiAgICAgIHx8IChcbiAgICAgICAgLy8gUHVia2V5IHNob3VsZCBiZSB1bmlxdWVcbiAgICAgICAgKHRoaXMucHVia2V5ICYmIHRoaXMucHVia2V5ID09PSBvdGhlci5wdWJrZXkpXG4gICAgICAgIC8vIEVtYWlsIHNob3VsZCBiZSB1bmlxdWVcbiAgICAgICAgJiYgKHRoaXMuZW1haWwgJiYgdGhpcy5lbWFpbCA9PT0gb3RoZXIuZW1haWwpXG4gICAgICApKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVyc29uVXRpbHMge1xuICBzdGF0aWMgZ2V0TWFpblByb2ZpbGUocHJvZmlsZXM/OiBzdHJpbmdbXSk6IFVzZXJQcm9maWxlTGFiZWwge1xuICAgIGlmIChpc0VtcHR5QXJyYXkocHJvZmlsZXMpKSByZXR1cm4gJ0dVRVNUJztcbiAgICByZXR1cm4gUFJJT1JJVElaRURfQVVUSE9SSVRJRVMuZmluZChsYWJlbCA9PiBwcm9maWxlcy5pbmNsdWRlcyhsYWJlbCkpIHx8ICdHVUVTVCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWFpblByb2ZpbGVJbmRleChwcm9maWxlcz86IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KHByb2ZpbGVzKSkgcmV0dXJuIFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTLmxlbmd0aCAtIDE7IC8vIHJldHVybiBsYXN0IChsb3dlcikgcHJvZmlsZVxuICAgIGNvbnN0IGluZGV4ID0gUFJJT1JJVElaRURfQVVUSE9SSVRJRVMuZmluZEluZGV4KGxhYmVsID0+IHByb2ZpbGVzLmluY2x1ZGVzKGxhYmVsKSk7XG4gICAgcmV0dXJuIChpbmRleCAhPT0gLTEpID8gaW5kZXggOiAoUFJJT1JJVElaRURfQVVUSE9SSVRJRVMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBzdGF0aWMgaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUoYWN0dWFsUHJvZmlsZXM6IHN0cmluZ1tdLCBleHBlY3RlZFByb2ZpbGU6IFVzZXJQcm9maWxlTGFiZWwpOiBib29sZWFuIHtcbiAgICBjb25zdCBleHBlY3RlZFByb2ZpbGVJbmRleCA9IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTLmluZGV4T2YoZXhwZWN0ZWRQcm9maWxlKTtcbiAgICByZXR1cm4gZXhwZWN0ZWRQcm9maWxlSW5kZXggIT09IC0xICYmIFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlSW5kZXgoYWN0dWFsUHJvZmlsZXMpIDw9IGV4cGVjdGVkUHJvZmlsZUluZGV4O1xuICB9XG5cbiAgc3RhdGljIHBlcnNvblRvU3RyaW5nKG9iajogUGVyc29uKTogc3RyaW5nIHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmlkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBvYmoubGFzdE5hbWUgKyAnICcgKyBvYmouZmlyc3ROYW1lO1xuICB9XG5cbiAgc3RhdGljIHBlcnNvbnNUb1N0cmluZyhkYXRhOiBQZXJzb25bXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGRhdGEgfHwgW10pLm1hcChQZXJzb25VdGlscy5wZXJzb25Ub1N0cmluZykuam9pbihzZXBhcmF0b3IgfHwgJywgJyk7XG4gIH1cblxuICBzdGF0aWMgcm9sZVRvUHJvZmlsZShyb2xlOiBzdHJpbmcsIGRlZmF1bHRQcm9maWxlPzogVXNlclByb2ZpbGVMYWJlbCk6IFVzZXJQcm9maWxlTGFiZWwge1xuICAgIGNvbnN0IGxhYmVsID0gcm9sZT8ucmVwbGFjZSgvXlJPTEVfLywgJycpIGFzIFVzZXJQcm9maWxlTGFiZWw7XG4gICAgcmV0dXJuIGxhYmVsIHx8IGRlZmF1bHRQcm9maWxlO1xuICB9XG5cbn1cblxuXG5cblxuXG5cblxuIl19
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcxRSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFN0gsV0FBVztBQUVKLElBQU0sTUFBTSxHQUFaLE1BQU0sTUFBNEMsU0FBUSxNQUE2Qzs7SUFDNUcsTUFBTSxDQUFDLFVBQVUsQ0FBc0M7SUFFdkQsU0FBUyxDQUFTO0lBQ2xCLFFBQVEsQ0FBUztJQUNqQixLQUFLLENBQVM7SUFDZCxNQUFNLENBQVM7SUFDZixNQUFNLENBQVM7SUFDZixZQUFZLENBQWdCO0lBQzVCLFFBQVEsQ0FBUztJQUNqQixVQUFVLEdBQWUsSUFBSSxDQUFDO0lBQzlCLFFBQVEsQ0FBUztJQUNqQixnQkFBZ0IsQ0FBUztJQUN6QixRQUFRLENBQVc7SUFDbkIsV0FBVyxDQUFTO0lBRXBCLFlBQVksVUFBbUI7UUFDN0IsS0FBSyxDQUFDLFVBQVUsSUFBSSxRQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFpQztRQUN4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QUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFZLEVBQUUsY0FBaUM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFxQixDQUFDO1FBQzlELE9BQU8sS0FBSyxJQUFJLGNBQWMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMgfSBmcm9tICcuL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IERlcGFydG1lbnQgfSBmcm9tICcuL2RlcGFydG1lbnQubW9kZWwnO1xuaW1wb3J0IHsgZnJvbURhdGVJU09TdHJpbmcsIHRvRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBFbnRpdHlDbGFzcyB9IGZyb20gJy4vZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgVXNlclByb2ZpbGVMYWJlbCA9ICdBRE1JTicgfCAnVVNFUicgfCAnU1VQRVJWSVNPUicgfCAnR1VFU1QnO1xuZXhwb3J0IGNvbnN0IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTOiBSZWFkb25seTxVc2VyUHJvZmlsZUxhYmVsW10+ID0gT2JqZWN0LmZyZWV6ZShbJ0FETUlOJywgJ1NVUEVSVklTT1InLCAnVVNFUicsICdHVUVTVCddKTtcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7IHR5cGVuYW1lOiAnUGVyc29uVk8nIH0pXG5leHBvcnQgY2xhc3MgUGVyc29uPFQgZXh0ZW5kcyBQZXJzb248YW55PiA9IFBlcnNvbjxhbnk+PiBleHRlbmRzIEVudGl0eTxULCBudW1iZXIsIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zPiB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IFBlcnNvbjtcblxuICBmaXJzdE5hbWU6IHN0cmluZztcbiAgbGFzdE5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcHVia2V5OiBzdHJpbmc7XG4gIGF2YXRhcjogc3RyaW5nO1xuICBjcmVhdGlvbkRhdGU6IERhdGUgfCBNb21lbnQ7XG4gIHN0YXR1c0lkOiBudW1iZXI7XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQgPSBudWxsO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICB1c2VybmFtZUV4dHJhbmV0OiBzdHJpbmc7XG4gIHByb2ZpbGVzOiBzdHJpbmdbXTtcbiAgbWFpblByb2ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfX3R5cGVuYW1lPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoX190eXBlbmFtZSB8fCBQZXJzb24uVFlQRU5BTUUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICBpZiAob3B0cyAmJiBvcHRzLm1pbmlmeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIF9fdHlwZW5hbWU6IChvcHRzLmtlZXBUeXBlbmFtZSAmJiB0aGlzLl9fdHlwZW5hbWUpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZmlyc3ROYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQ6IGFueSA9IHN1cGVyLmFzT2JqZWN0KG9wdHMpO1xuICAgIHRhcmdldC5kZXBhcnRtZW50ID0gKHRoaXMuZGVwYXJ0bWVudCAmJiB0aGlzLmRlcGFydG1lbnQuYXNPYmplY3Qob3B0cykpIHx8IHVuZGVmaW5lZDtcbiAgICB0YXJnZXQucHJvZmlsZXMgPSAodGhpcy5wcm9maWxlcyAmJiB0aGlzLnByb2ZpbGVzLnNsaWNlKDApKSB8fCBbXTtcbiAgICAvLyBTZXQgcHJvZmlsZSBsaXN0IGZyb20gdGhlIG1haW4gcHJvZmlsZVxuICAgIHRhcmdldC5wcm9maWxlcyA9ICh0aGlzLm1haW5Qcm9maWxlICYmIFt0aGlzLm1haW5Qcm9maWxlXSkgfHwgdGFyZ2V0LnByb2ZpbGVzO1xuICAgIHRhcmdldC5jcmVhdGlvbkRhdGUgPSB0b0RhdGVJU09TdHJpbmcodGhpcy5jcmVhdGlvbkRhdGUpO1xuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMubWluaWZ5ICE9PSB0cnVlKSB0YXJnZXQubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZSh0YXJnZXQucHJvZmlsZXMpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHRoaXMuZmlyc3ROYW1lID0gc291cmNlLmZpcnN0TmFtZTtcbiAgICB0aGlzLmxhc3ROYW1lID0gc291cmNlLmxhc3ROYW1lO1xuICAgIHRoaXMuZW1haWwgPSBzb3VyY2UuZW1haWw7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzb3VyY2UuY3JlYXRpb25EYXRlKTtcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy51c2VybmFtZSA9IHNvdXJjZS51c2VybmFtZTtcbiAgICB0aGlzLnVzZXJuYW1lRXh0cmFuZXQgPSBzb3VyY2UudXNlcm5hbWVFeHRyYW5ldDtcbiAgICB0aGlzLmF2YXRhciA9IHNvdXJjZS5hdmF0YXI7XG4gICAgdGhpcy5zdGF0dXNJZCA9IHNvdXJjZS5zdGF0dXNJZDtcbiAgICB0aGlzLmRlcGFydG1lbnQgPSAoc291cmNlLmRlcGFydG1lbnQgJiYgRGVwYXJ0bWVudC5mcm9tT2JqZWN0KHNvdXJjZS5kZXBhcnRtZW50KSkgfHwgdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvZmlsZXMgPSAoc291cmNlLnByb2ZpbGVzICYmIHNvdXJjZS5wcm9maWxlcy5zbGljZSgwKSkgfHwgW107XG4gICAgLy8gQWRkIG1haW4gcHJvZmlsZSB0byB0aGUgbGlzdCwgaWYgbmVlZFxuICAgIGlmIChzb3VyY2UubWFpblByb2ZpbGUgJiYgIXRoaXMucHJvZmlsZXMuZmluZCgocCkgPT4gcCA9PT0gc291cmNlLm1haW5Qcm9maWxlKSkge1xuICAgICAgdGhpcy5wcm9maWxlcyA9IHRoaXMucHJvZmlsZXMuY29uY2F0KHNvdXJjZS5tYWluUHJvZmlsZSk7XG4gICAgfVxuICAgIHRoaXMubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZSh0aGlzLnByb2ZpbGVzKTtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBvdGhlciAmJlxuICAgICAgKChpc05vdE5pbCh0aGlzLmlkKSAmJiB0aGlzLmlkID09PSBvdGhlci5pZCkgfHxcbiAgICAgICAgLy8gRnVuY3Rpb25hbCB0ZXN0XG4gICAgICAgIC8vIFB1YmtleSBzaG91bGQgYmUgdW5pcXVlXG4gICAgICAgICh0aGlzLnB1YmtleSAmJlxuICAgICAgICAgIHRoaXMucHVia2V5ID09PSBvdGhlci5wdWJrZXkgJiZcbiAgICAgICAgICAvLyBFbWFpbCBzaG91bGQgYmUgdW5pcXVlXG4gICAgICAgICAgdGhpcy5lbWFpbCAmJlxuICAgICAgICAgIHRoaXMuZW1haWwgPT09IG90aGVyLmVtYWlsKSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25VdGlscyB7XG4gIHN0YXRpYyBnZXRNYWluUHJvZmlsZShwcm9maWxlcz86IHN0cmluZ1tdKTogVXNlclByb2ZpbGVMYWJlbCB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShwcm9maWxlcykpIHJldHVybiAnR1VFU1QnO1xuICAgIHJldHVybiBQUklPUklUSVpFRF9BVVRIT1JJVElFUy5maW5kKChsYWJlbCkgPT4gcHJvZmlsZXMuaW5jbHVkZXMobGFiZWwpKSB8fCAnR1VFU1QnO1xuICB9XG5cbiAgc3RhdGljIGdldE1haW5Qcm9maWxlSW5kZXgocHJvZmlsZXM/OiBzdHJpbmdbXSk6IG51bWJlciB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShwcm9maWxlcykpIHJldHVybiBQUklPUklUSVpFRF9BVVRIT1JJVElFUy5sZW5ndGggLSAxOyAvLyByZXR1cm4gbGFzdCAobG93ZXIpIHByb2ZpbGVcbiAgICBjb25zdCBpbmRleCA9IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTLmZpbmRJbmRleCgobGFiZWwpID0+IHByb2ZpbGVzLmluY2x1ZGVzKGxhYmVsKSk7XG4gICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogUFJJT1JJVElaRURfQVVUSE9SSVRJRVMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIHN0YXRpYyBoYXNVcHBlck9yRXF1YWxzUHJvZmlsZShhY3R1YWxQcm9maWxlczogc3RyaW5nW10sIGV4cGVjdGVkUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4cGVjdGVkUHJvZmlsZUluZGV4ID0gUFJJT1JJVElaRURfQVVUSE9SSVRJRVMuaW5kZXhPZihleHBlY3RlZFByb2ZpbGUpO1xuICAgIHJldHVybiBleHBlY3RlZFByb2ZpbGVJbmRleCAhPT0gLTEgJiYgUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGVJbmRleChhY3R1YWxQcm9maWxlcykgPD0gZXhwZWN0ZWRQcm9maWxlSW5kZXg7XG4gIH1cblxuICBzdGF0aWMgcGVyc29uVG9TdHJpbmcob2JqOiBQZXJzb24sIG9wdHM/OiB7IHdpdGhEZXBhcnRtZW50PzogYm9vbGVhbiB9KTogc3RyaW5nIHtcbiAgICBpZiAoIW9iaiB8fCBpc05pbChvYmouaWQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChvcHRzPy53aXRoRGVwYXJ0bWVudCAmJiBvYmouZGVwYXJ0bWVudD8ubGFiZWwpIHtcbiAgICAgIHJldHVybiBvYmouZmlyc3ROYW1lICsgJyAnICsgb2JqLmxhc3ROYW1lICsgJyAoJyArIG9iai5kZXBhcnRtZW50Py5sYWJlbCArICcpJztcbiAgICB9XG4gICAgcmV0dXJuIG9iai5sYXN0TmFtZSArICcgJyArIG9iai5maXJzdE5hbWU7XG4gIH1cblxuICBzdGF0aWMgcGVyc29uc1RvU3RyaW5nKGRhdGE6IFBlcnNvbltdLCBzZXBhcmF0b3I/OiBzdHJpbmcsIG9wdHM/OiB7IHdpdGhEZXBhcnRtZW50PzogYm9vbGVhbiB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGRhdGEgfHwgW10pLm1hcCgocCkgPT4gUGVyc29uVXRpbHMucGVyc29uVG9TdHJpbmcocCwgb3B0cykpLmpvaW4oc2VwYXJhdG9yIHx8ICcsICcpO1xuICB9XG5cbiAgc3RhdGljIHJvbGVUb1Byb2ZpbGUocm9sZTogc3RyaW5nLCBkZWZhdWx0UHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWwpOiBVc2VyUHJvZmlsZUxhYmVsIHtcbiAgICBjb25zdCBsYWJlbCA9IHJvbGU/LnJlcGxhY2UoL15ST0xFXy8sICcnKSBhcyBVc2VyUHJvZmlsZUxhYmVsO1xuICAgIHJldHVybiBsYWJlbCB8fCBkZWZhdWx0UHJvZmlsZTtcbiAgfVxufVxuIl19
@@ -1,32 +1,32 @@
1
1
  var ReferentialRef_1;
2
2
  import { __decorate } from "tslib";
3
- import { isNotNil, joinPropertiesPath, splitById } from '../../../shared/functions';
3
+ import { isNil, isNotNil, joinPropertiesPath, splitById } from '../../../shared/functions';
4
4
  import { Entity, EntityUtils } from './entity.model';
5
5
  import { StatusIds } from './model.enum';
6
6
  import { fromDateISOString, toDateISOString } from '../../../shared/dates';
7
7
  import { EntityClass } from './entity.decorators';
8
- export function referentialToString(obj, properties) {
9
- return (obj && isNotNil(obj.id) && joinPropertiesPath(obj, properties || ['label', 'name'])) || undefined;
8
+ export function referentialToString(obj, properties, separator) {
9
+ return (obj && isNotNil(obj.id) && joinPropertiesPath(obj, properties || ['label', 'name'], separator)) || undefined;
10
10
  }
11
- export function referentialsToString(values, properties, separator) {
12
- return (values || []).map(v => referentialToString(v, properties)).join(separator || ', ');
11
+ export function referentialsToString(values, properties, valueSeparator, propertySeparator) {
12
+ return (values || []).map((v) => referentialToString(v, properties, propertySeparator)).join(valueSeparator || ', ');
13
13
  }
14
14
  export const StatusList = Object.freeze([
15
15
  {
16
16
  id: StatusIds.ENABLE,
17
17
  icon: 'checkmark',
18
- label: 'REFERENTIAL.STATUS_ENUM.ENABLE'
18
+ label: 'REFERENTIAL.STATUS_ENUM.ENABLE',
19
19
  },
20
20
  {
21
21
  id: StatusIds.DISABLE,
22
22
  icon: 'close',
23
- label: 'REFERENTIAL.STATUS_ENUM.DISABLE'
23
+ label: 'REFERENTIAL.STATUS_ENUM.DISABLE',
24
24
  },
25
25
  {
26
26
  id: StatusIds.TEMPORARY,
27
27
  icon: 'help',
28
- label: 'REFERENTIAL.STATUS_ENUM.TEMPORARY'
29
- }
28
+ label: 'REFERENTIAL.STATUS_ENUM.TEMPORARY',
29
+ },
30
30
  ]);
31
31
  export const StatusById = Object.freeze(splitById(StatusList));
32
32
  //@dynamic
@@ -46,19 +46,23 @@ export class BaseReferential extends Entity {
46
46
  super(__typename);
47
47
  }
48
48
  asObject(opts) {
49
- if (opts && opts.minify) {
49
+ if (opts?.minify) {
50
50
  return {
51
51
  id: this.id,
52
- entityName: opts.keepEntityName && this.entityName || undefined,
53
- __typename: opts.keepTypename && this.__typename || undefined
52
+ entityName: (opts.keepEntityName && this.entityName) || undefined, // Don't keep by default
53
+ __typename: (opts.keepTypename && this.__typename) || undefined,
54
54
  };
55
55
  }
56
56
  const target = super.asObject(opts);
57
57
  target.creationDate = toDateISOString(this.creationDate);
58
- if (opts && opts.keepTypename === false)
58
+ if (opts?.keepEntityName === false)
59
59
  delete target.entityName;
60
- if (opts && opts.keepIcon === false)
60
+ if (opts?.keepIcon === false)
61
61
  delete target.icon;
62
+ if (opts?.keepProperties === false)
63
+ delete target.properties;
64
+ if (isNil(target.validityStatusId))
65
+ delete target.validityStatusId;
62
66
  return target;
63
67
  }
64
68
  fromObject(source, opts) {
@@ -88,7 +92,7 @@ let Referential = class Referential extends BaseReferential {
88
92
  }
89
93
  fromObject(source, opts) {
90
94
  super.fromObject(source, opts);
91
- this.properties = source.properties && { ...source.properties } || undefined;
95
+ this.properties = (source.properties && { ...source.properties }) || undefined;
92
96
  }
93
97
  asObject(opts) {
94
98
  const target = super.asObject(opts);
@@ -130,7 +134,8 @@ export const MINIFY_ENTITY_FOR_LOCAL_STORAGE = Object.freeze({
130
134
  keepTypename: true,
131
135
  keepEntityName: true,
132
136
  keepLocalId: true,
133
- keepIcon: true
137
+ keepIcon: true,
138
+ keepProperties: true,
134
139
  });
135
140
  /**
136
141
  * Used to send an entity to a pod
@@ -140,12 +145,16 @@ export const MINIFY_ENTITY_FOR_POD = Object.freeze({
140
145
  keepTypename: false,
141
146
  keepEntityName: false,
142
147
  keepLocalId: false,
143
- keepIcon: false
148
+ keepIcon: false,
149
+ keepProperties: false,
144
150
  });
145
151
  // @dynamic
146
152
  let ReferentialRef = class ReferentialRef extends Entity {
147
153
  static { ReferentialRef_1 = this; }
148
154
  static fromObject;
155
+ static clone(source) {
156
+ return ReferentialRef_1.fromObject(source)?.clone();
157
+ }
149
158
  label;
150
159
  name;
151
160
  description;
@@ -153,22 +162,25 @@ let ReferentialRef = class ReferentialRef extends Entity {
153
162
  levelId;
154
163
  entityName;
155
164
  icon;
165
+ properties;
156
166
  constructor() {
157
167
  super(ReferentialRef_1.TYPENAME);
158
168
  }
159
169
  asObject(opts) {
160
- if (opts && opts.minify) {
170
+ if (opts?.minify) {
161
171
  return {
162
172
  id: this.id,
163
- entityName: opts.keepEntityName && this.entityName || undefined,
164
- __typename: opts.keepTypename && this.__typename || undefined
173
+ entityName: (opts.keepEntityName && this.entityName) || undefined, // Don't keep by default
174
+ __typename: (opts.keepTypename && this.__typename) || undefined,
165
175
  };
166
176
  }
167
177
  const target = super.asObject(opts);
168
- if (opts && opts.keepEntityName === false)
178
+ if (opts?.keepEntityName === false)
169
179
  delete target.entityName;
170
- if (opts && opts.keepIcon === false)
180
+ if (opts?.keepIcon === false)
171
181
  delete target.icon;
182
+ if (opts?.keepProperties === false)
183
+ delete target.properties;
172
184
  return target;
173
185
  }
174
186
  fromObject(source, opts) {
@@ -180,10 +192,11 @@ let ReferentialRef = class ReferentialRef extends Entity {
180
192
  this.statusId = source.statusId;
181
193
  this.levelId = source.levelId;
182
194
  this.icon = source.icon;
195
+ this.properties = (source.properties && { ...source.properties }) || undefined;
183
196
  }
184
197
  };
185
198
  ReferentialRef = ReferentialRef_1 = __decorate([
186
199
  EntityClass({ typename: 'ReferentialVO' })
187
200
  ], ReferentialRef);
188
201
  export { ReferentialRef };
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxNQUFNLEVBQXlCLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdsRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBc0IsRUFBRSxVQUFxQjtJQUMvRSxPQUFPLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsR0FBRyxFQUFFLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0FBQzVHLENBQUM7QUFDRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBcUIsRUFBRSxVQUFxQixFQUFFLFNBQWtCO0lBQ25HLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBUUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNEO1FBQ0Us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QyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQ0YsQ0FBQTtBQWhEWSxjQUFjO0lBRDFCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsQ0FBQztHQUM1QixjQUFjLENBZ0QxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRoLCBzcGxpdEJ5SWQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zLCBFbnRpdHlVdGlscywgSUVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IFN0YXR1c0lkcyB9IGZyb20gJy4vbW9kZWwuZW51bSc7XG5pbXBvcnQgeyBmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IEVudGl0eUNsYXNzIH0gZnJvbSAnLi9lbnRpdHkuZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW50aWFsVG9TdHJpbmcob2JqOiBSZWZlcmVudGlhbCB8IGFueSwgcHJvcGVydGllcz86IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChvYmogJiYgaXNOb3ROaWwob2JqLmlkKSAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBwcm9wZXJ0aWVzIHx8IFsnbGFiZWwnLCAnbmFtZSddKSkgfHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW50aWFsc1RvU3RyaW5nKHZhbHVlczogUmVmZXJlbnRpYWxbXSwgcHJvcGVydGllcz86IHN0cmluZ1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHZhbHVlcyB8fCBbXSkubWFwKHYgPT4gcmVmZXJlbnRpYWxUb1N0cmluZyh2LCBwcm9wZXJ0aWVzKSkuam9pbihzZXBhcmF0b3IgfHwgJywgJyk7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJU3RhdHVzIHtcbiAgaWQ6IG51bWJlcjtcbiAgaWNvbj86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFN0YXR1c0xpc3Q6IFJlYWRvbmx5PElTdGF0dXNbXT4gPSBPYmplY3QuZnJlZXplKFtcbiAge1xuICAgIGlkOiBTdGF0dXNJZHMuRU5BQkxFLFxuICAgIGljb246ICdjaGVja21hcmsnLFxuICAgIGxhYmVsOiAnUkVGRVJFTlRJQUwuU1RBVFVTX0VOVU0uRU5BQkxFJ1xuICB9LFxuICB7XG4gICAgaWQ6IFN0YXR1c0lkcy5ESVNBQkxFLFxuICAgIGljb246ICdjbG9zZScsXG4gICAgbGFiZWw6ICdSRUZFUkVOVElBTC5TVEFUVVNfRU5VTS5ESVNBQkxFJ1xuICB9LFxuICB7XG4gICAgaWQ6IFN0YXR1c0lkcy5URU1QT1JBUlksXG4gICAgaWNvbjogJ2hlbHAnLFxuICAgIGxhYmVsOiAnUkVGRVJFTlRJQUwuU1RBVFVTX0VOVU0uVEVNUE9SQVJZJ1xuICB9XG5dKTtcblxuZXhwb3J0IGNvbnN0IFN0YXR1c0J5SWQgPSBPYmplY3QuZnJlZXplKHNwbGl0QnlJZChTdGF0dXNMaXN0KSk7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJUmVmZXJlbnRpYWxSZWY8XG4gIFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiA9IElFbnRpdHk8YW55LCBhbnk+LFxuICBJRCA9IG51bWJlclxuICA+XG4gIGV4dGVuZHMgSUVudGl0eTxULCBJRD4ge1xuICBsYWJlbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsZXZlbElkPzogbnVtYmVyO1xuICBzdGF0dXNJZDogbnVtYmVyO1xuICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gIGljb24/OiBJY29uUmVmO1xufVxuXG4vL0BkeW5hbWljXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVJlZmVyZW50aWFsPFxuICBUIGV4dGVuZHMgQmFzZVJlZmVyZW50aWFsPFQsIElELCBBTz4sXG4gIElEID0gbnVtYmVyLFxuICBBTyBleHRlbmRzIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zID0gUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMsXG4gIEZPID0gYW55XG4gID5cbiAgZXh0ZW5kcyBFbnRpdHk8VCwgSUQsIEFPLCBGTz5cbiAgaW1wbGVtZW50cyBJUmVmZXJlbnRpYWxSZWY8VCwgSUQ+IHtcblxuICBsYWJlbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNvbW1lbnRzOiBzdHJpbmc7XG4gIGNyZWF0aW9uRGF0ZTogRGF0ZSB8IE1vbWVudDtcbiAgc3RhdHVzSWQ6IG51bWJlcjtcbiAgdmFsaWRpdHlTdGF0dXNJZDogbnVtYmVyO1xuICBsZXZlbElkOiBudW1iZXI7XG4gIHBhcmVudElkOiBudW1iZXI7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgaWNvbj86IEljb25SZWY7XG5cbiAgY29uc3RydWN0b3IoX190eXBlbmFtZT86IHN0cmluZykge1xuICAgIHN1cGVyKF9fdHlwZW5hbWUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IEFPKTogYW55IHtcbiAgICBpZiAob3B0cyAmJiBvcHRzLm1pbmlmeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIGVudGl0eU5hbWU6IG9wdHMua2VlcEVudGl0eU5hbWUgJiYgdGhpcy5lbnRpdHlOYW1lIHx8IHVuZGVmaW5lZCwgLy8gRG9uJ3Qga2VlcCBieSBkZWZhdWx0XG4gICAgICAgIF9fdHlwZW5hbWU6IG9wdHMua2VlcFR5cGVuYW1lICYmIHRoaXMuX190eXBlbmFtZSB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldDogYW55ID0gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gICAgdGFyZ2V0LmNyZWF0aW9uRGF0ZSA9IHRvRGF0ZUlTT1N0cmluZyh0aGlzLmNyZWF0aW9uRGF0ZSk7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5rZWVwVHlwZW5hbWUgPT09IGZhbHNlKSBkZWxldGUgdGFyZ2V0LmVudGl0eU5hbWU7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5rZWVwSWNvbiA9PT0gZmFsc2UpIGRlbGV0ZSB0YXJnZXQuaWNvbjtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IEZPKSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgIHRoaXMubGFiZWwgPSBzb3VyY2UubGFiZWw7XG4gICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHNvdXJjZS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmNvbW1lbnRzID0gc291cmNlLmNvbW1lbnRzO1xuICAgIHRoaXMuc3RhdHVzSWQgPSBzb3VyY2Uuc3RhdHVzSWQ7XG4gICAgdGhpcy52YWxpZGl0eVN0YXR1c0lkICA9IHNvdXJjZS52YWxpZGl0eVN0YXR1c0lkO1xuICAgIHRoaXMubGV2ZWxJZCA9IHNvdXJjZS5sZXZlbElkICYmIHNvdXJjZS5sZXZlbElkICE9PSAwID8gc291cmNlLmxldmVsSWQgOiB1bmRlZmluZWQ7IC8vIERvIG5vdCBzZXQgYXMgbnVsbCAobmVlZCBmb3IgYWNjb3VudC5kZXBhcnRtZW50LCB3aGVuIHJlZ2lzdGVyKVxuICAgIHRoaXMucGFyZW50SWQgPSBzb3VyY2UucGFyZW50SWQ7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzb3VyY2UuY3JlYXRpb25EYXRlKTtcbiAgICB0aGlzLmVudGl0eU5hbWUgPSBzb3VyY2UuZW50aXR5TmFtZTtcbiAgICB0aGlzLmljb24gPSBzb3VyY2UuaWNvbjtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5lcXVhbHMob3RoZXIpICYmIHRoaXMuZW50aXR5TmFtZSA9PT0gb3RoZXIuZW50aXR5TmFtZTtcbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuQEVudGl0eUNsYXNzKHt0eXBlbmFtZTogJ1JlZmVyZW50aWFsVk8nfSlcbmV4cG9ydCBjbGFzcyBSZWZlcmVudGlhbDxcbiAgVCBleHRlbmRzIFJlZmVyZW50aWFsPFQsIGFueT4gPSBSZWZlcmVudGlhbDxhbnk+LFxuICBJRCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBCYXNlUmVmZXJlbnRpYWw8VCwgSUQ+IHtcblxuICBzdGF0aWMgZnJvbU9iamVjdDogKHNvdXJjZTogYW55LCBvcHRzPzogYW55KSA9PiBSZWZlcmVudGlhbDtcblxuICBwcm9wZXJ0aWVzPzoge1trZXk6IHN0cmluZ106IGFueX07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gc291cmNlLnByb3BlcnRpZXMgJiYgey4uLnNvdXJjZS5wcm9wZXJ0aWVzfSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMpOiBhbnkge1xuICAgIGNvbnN0IHRhcmdldCA9IHN1cGVyLmFzT2JqZWN0KG9wdHMpO1xuICAgIGlmIChvcHRzPy5taW5pZnkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXQucHJvcGVydGllcztcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxVdGlscyB7XG4gIC8vIEZJWE1FOiByZW1vdmUgdGhpc1xuICBzdGF0aWMgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IFJlZmVyZW50aWFsIHtcbiAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UgaW5zdGFuY2VvZiBSZWZlcmVudGlhbCkgcmV0dXJuIHNvdXJjZTtcbiAgICBjb25zdCByZXMgPSBuZXcgUmVmZXJlbnRpYWwoKTtcbiAgICByZXMuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgIHJldHVybiByZXMgYXMgUmVmZXJlbnRpYWw7XG4gIH1cblxuICBzdGF0aWMgaXNOb3RFbXB0eTxUIGV4dGVuZHMgSVJlZmVyZW50aWFsUmVmPFQ+PihvYmo6IFR8YW55KTogYm9vbGVhbiB7XG4gICAgLy8gQSByZWZlcmVudGlhbCBlbnRpdHkgc2hvdWxkIGFsd2F5cyBoYXZlIGEgJ2lkJyBmaWxsZWQgKGNhbiBiZSBuZWdhdGl2ZSBpcyBsb2NhbCBhbmQgdGVtcG9yYXJ5KVxuICAgIHJldHVybiBFbnRpdHlVdGlscy5pc05vdEVtcHR5KG9iaiwgJ2lkJyk7XG4gIH1cblxuICBzdGF0aWMgaXNFbXB0eTxUIGV4dGVuZHMgSVJlZmVyZW50aWFsUmVmPFQ+PihvYmo6IFR8YW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWxzLmlzRW1wdHkob2JqLCAnaWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHM8VCBleHRlbmRzIElSZWZlcmVudGlhbFJlZjxUPj4obzE6IFR8YW55LCBvMjogVHxhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuZXF1YWxzKG8xLCBvMiwgJ2lkJyk7XG4gIH1cbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zIHtcbiAga2VlcEVudGl0eU5hbWU/OiBib29sZWFuO1xuICBrZWVwSWNvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNlZCB0byBzdG9yZSBhbiBlbnRpdHkgbG9jYWxseVxuICovXG5leHBvcnQgY29uc3QgTUlOSUZZX0VOVElUWV9GT1JfTE9DQUxfU1RPUkFHRTogUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgbWluaWZ5OiB0cnVlLFxuICBrZWVwVHlwZW5hbWU6IHRydWUsXG4gIGtlZXBFbnRpdHlOYW1lOiB0cnVlLFxuICBrZWVwTG9jYWxJZDogdHJ1ZSxcbiAga2VlcEljb246IHRydWVcbn0pO1xuXG4vKipcbiAqIFVzZWQgdG8gc2VuZCBhbiBlbnRpdHkgdG8gYSBwb2RcbiAqL1xuZXhwb3J0IGNvbnN0IE1JTklGWV9FTlRJVFlfRk9SX1BPRDogUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgbWluaWZ5OiB0cnVlLFxuICBrZWVwVHlwZW5hbWU6IGZhbHNlLFxuICBrZWVwRW50aXR5TmFtZTogZmFsc2UsXG4gIGtlZXBMb2NhbElkOiBmYWxzZSxcbiAga2VlcEljb246IGZhbHNlXG59KTtcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdSZWZlcmVudGlhbFZPJ30pXG5leHBvcnQgY2xhc3MgUmVmZXJlbnRpYWxSZWY8XG4gIFQgZXh0ZW5kcyBSZWZlcmVudGlhbFJlZjxhbnksIElEPiA9IFJlZmVyZW50aWFsUmVmPGFueSwgYW55PixcbiAgSUQgPSBudW1iZXIsXG4gIE8gZXh0ZW5kcyBSZWZlcmVudGlhbEFzT2JqZWN0T3B0aW9ucyA9IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zLFxuICBGTyA9IGFueVxuICA+XG4gIGV4dGVuZHMgRW50aXR5PFQsIElELCBPLCBGTz5cbiAgaW1wbGVtZW50cyBJUmVmZXJlbnRpYWxSZWY8VCwgSUQ+IHtcblxuICBzdGF0aWMgZnJvbU9iamVjdDogKHNvdXJjZTogYW55LCBvcHRzPzogYW55KSA9PiBSZWZlcmVudGlhbFJlZjtcblxuICBsYWJlbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1c0lkOiBudW1iZXI7XG4gIGxldmVsSWQ6IG51bWJlcjtcbiAgZW50aXR5TmFtZTogc3RyaW5nO1xuICBpY29uPzogSWNvblJlZjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihSZWZlcmVudGlhbFJlZi5UWVBFTkFNRSk7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogTyk6IGFueSB7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5taW5pZnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBlbnRpdHlOYW1lOiBvcHRzLmtlZXBFbnRpdHlOYW1lICYmIHRoaXMuZW50aXR5TmFtZSB8fCB1bmRlZmluZWQsIC8vIERvbid0IGtlZXAgYnkgZGVmYXVsdFxuICAgICAgICBfX3R5cGVuYW1lOiBvcHRzLmtlZXBUeXBlbmFtZSAmJiB0aGlzLl9fdHlwZW5hbWUgfHwgdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQ6IGFueSA9IHN1cGVyLmFzT2JqZWN0KG9wdHMpO1xuICAgIGlmIChvcHRzICYmIG9wdHMua2VlcEVudGl0eU5hbWUgPT09IGZhbHNlKSBkZWxldGUgdGFyZ2V0LmVudGl0eU5hbWU7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5rZWVwSWNvbiA9PT0gZmFsc2UpIGRlbGV0ZSB0YXJnZXQuaWNvbjtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogRk8pIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5lbnRpdHlOYW1lID0gc291cmNlLmVudGl0eU5hbWUgfHwgdGhpcy5lbnRpdHlOYW1lO1xuICAgIHRoaXMubGFiZWwgPSBzb3VyY2UubGFiZWw7XG4gICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHNvdXJjZS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnN0YXR1c0lkID0gc291cmNlLnN0YXR1c0lkO1xuICAgIHRoaXMubGV2ZWxJZCA9IHNvdXJjZS5sZXZlbElkO1xuICAgIHRoaXMuaWNvbiA9IHNvdXJjZS5pY29uO1xuICB9XG59XG4iXX0=
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbnRpYWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsTUFBTSxFQUF5QixXQUFXLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbEQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQXNCLEVBQUUsVUFBcUIsRUFBRSxTQUFrQjtJQUNuRyxPQUFPLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsR0FBRyxFQUFFLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUN2SCxDQUFDO0FBQ0QsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQXFCLEVBQUUsVUFBcUIsRUFBRSxjQUF1QixFQUFFLGlCQUEwQjtJQUNwSSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN2SCxDQUFDO0FBUUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNEO1FBQ0UsRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3BCLElBQUksRUFBRSxXQUFXO1FBQ2pCLEtBQUssRUFBRSxnQ0FBZ0M7S0FDeEM7SUFDRDtRQUNFLEVBQUUsRUFBRSxTQUFTLENBQUMsT0FBTztRQUNyQixJQUFJLEVBQUUsT0FBTztRQUNiLEtBQUssRUFBRSxpQ0FBaUM7S0FDekM7SUFDRDtRQUNFLEVBQUUsRUFBRSxTQUFTLENBQUMsU0FBUztRQUN2QixJQUFJLEVBQUUsTUFBTTtRQUNaLEtBQUssRUFBRSxtQ0FBbUM7S0FDM0M7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQVkvRCxVQUFVO0FBQ1YsTUFBTSxPQUFnQixlQU1wQixTQUFRLE1BQXFCO0lBRzdCLEtBQUssQ0FBUztJQUNkLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBUztJQUNwQixRQUFRLENBQVM7SUFDakIsWUFBWSxDQUFnQjtJQUM1QixRQUFRLENBQVM7SUFDakIsZ0JBQWdCLENBQVM7SUFDekIsT0FBTyxDQUFTO0lBQ2hCLFFBQVEsQ0FBUztJQUNqQixVQUFVLENBQVM7SUFDbkIsSUFBSSxDQUFXO0lBRWYsWUFBc0IsVUFBbUI7UUFDdkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUztRQUNoQixJQUFJLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPO2dCQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxTQUFTLEVBQUUsd0JBQXdCO2dCQUMzRixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxTQUFTO2FBQ2hFLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLEVBQUUsY0FBYyxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDN0QsSUFBSSxJQUFJLEVBQUUsUUFBUSxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakQsSUFBSSxJQUFJLEVBQUUsY0FBYyxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDN0QsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDbkUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXLEVBQUUsSUFBUztRQUMvQixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxrRUFBa0U7UUFDdEosSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFRO1FBQ2IsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFFRCxXQUFXO0FBRUosSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBMkUsU0FBUSxlQUFzQjtJQUNwSCxNQUFNLENBQUMsVUFBVSxDQUEyQztJQUU1RCxVQUFVLENBQTBCO0lBRXBDO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVcsRUFBRSxJQUFVO1FBQ2hDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDakYsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFpQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUFyQlksV0FBVztJQUR2QixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7R0FDOUIsV0FBVyxDQXFCdkI7O0FBRUQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixxQkFBcUI7SUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFXLEVBQUUsSUFBVTtRQUN2QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sWUFBWSxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM5QixHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QixPQUFPLEdBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQStCLEdBQVk7UUFDMUQsaUdBQWlHO1FBQ2pHLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQStCLEdBQVk7UUFDdkQsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBK0IsRUFBVyxFQUFFLEVBQVc7UUFDbEUsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBUUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBK0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RixNQUFNLEVBQUUsSUFBSTtJQUNaLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsY0FBYyxFQUFFLElBQUk7Q0FDckIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBK0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3RSxNQUFNLEVBQUUsSUFBSTtJQUNaLFlBQVksRUFBRSxLQUFLO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsY0FBYyxFQUFFLEtBQUs7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsV0FBVztBQUVKLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBTVgsU0FBUSxNQUFvQjs7SUFHNUIsTUFBTSxDQUFDLFVBQVUsQ0FBOEM7SUFDL0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sZ0JBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBUztJQUNkLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBUztJQUNwQixRQUFRLENBQVM7SUFDakIsT0FBTyxDQUFTO0lBQ2hCLFVBQVUsQ0FBUztJQUNuQixJQUFJLENBQVc7SUFDZixVQUFVLENBQTBCO0lBRXBDO1FBQ0UsS0FBSyxDQUFDLGdCQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFRO1FBQ2YsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTztnQkFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxFQUFFLHdCQUF3QjtnQkFDM0YsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUzthQUNoRSxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFJLEVBQUUsY0FBYyxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDN0QsSUFBSSxJQUFJLEVBQUUsUUFBUSxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakQsSUFBSSxJQUFJLEVBQUUsY0FBYyxLQUFLLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFN0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXLEVBQUUsSUFBUztRQUMvQixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDakYsQ0FBQztDQUNGLENBQUE7QUF0RFksY0FBYztJQUQxQixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7R0FDOUIsY0FBYyxDQXNEMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCBqb2luUHJvcGVydGllc1BhdGgsIHNwbGl0QnlJZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEVudGl0eVV0aWxzLCBJRW50aXR5IH0gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgU3RhdHVzSWRzIH0gZnJvbSAnLi9tb2RlbC5lbnVtJztcbmltcG9ydCB7IGZyb21EYXRlSVNPU3RyaW5nLCB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IEljb25SZWYgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbnRpYWxUb1N0cmluZyhvYmo6IFJlZmVyZW50aWFsIHwgYW55LCBwcm9wZXJ0aWVzPzogc3RyaW5nW10sIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAob2JqICYmIGlzTm90TmlsKG9iai5pZCkgJiYgam9pblByb3BlcnRpZXNQYXRoKG9iaiwgcHJvcGVydGllcyB8fCBbJ2xhYmVsJywgJ25hbWUnXSwgc2VwYXJhdG9yKSkgfHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW50aWFsc1RvU3RyaW5nKHZhbHVlczogUmVmZXJlbnRpYWxbXSwgcHJvcGVydGllcz86IHN0cmluZ1tdLCB2YWx1ZVNlcGFyYXRvcj86IHN0cmluZywgcHJvcGVydHlTZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHZhbHVlcyB8fCBbXSkubWFwKCh2KSA9PiByZWZlcmVudGlhbFRvU3RyaW5nKHYsIHByb3BlcnRpZXMsIHByb3BlcnR5U2VwYXJhdG9yKSkuam9pbih2YWx1ZVNlcGFyYXRvciB8fCAnLCAnKTtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElTdGF0dXMge1xuICBpZDogbnVtYmVyO1xuICBpY29uPzogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgU3RhdHVzTGlzdDogUmVhZG9ubHk8SVN0YXR1c1tdPiA9IE9iamVjdC5mcmVlemUoW1xuICB7XG4gICAgaWQ6IFN0YXR1c0lkcy5FTkFCTEUsXG4gICAgaWNvbjogJ2NoZWNrbWFyaycsXG4gICAgbGFiZWw6ICdSRUZFUkVOVElBTC5TVEFUVVNfRU5VTS5FTkFCTEUnLFxuICB9LFxuICB7XG4gICAgaWQ6IFN0YXR1c0lkcy5ESVNBQkxFLFxuICAgIGljb246ICdjbG9zZScsXG4gICAgbGFiZWw6ICdSRUZFUkVOVElBTC5TVEFUVVNfRU5VTS5ESVNBQkxFJyxcbiAgfSxcbiAge1xuICAgIGlkOiBTdGF0dXNJZHMuVEVNUE9SQVJZLFxuICAgIGljb246ICdoZWxwJyxcbiAgICBsYWJlbDogJ1JFRkVSRU5USUFMLlNUQVRVU19FTlVNLlRFTVBPUkFSWScsXG4gIH0sXG5dKTtcblxuZXhwb3J0IGNvbnN0IFN0YXR1c0J5SWQgPSBPYmplY3QuZnJlZXplKHNwbGl0QnlJZChTdGF0dXNMaXN0KSk7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJUmVmZXJlbnRpYWxSZWY8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+ID0gSUVudGl0eTxhbnksIGFueT4sIElEID0gbnVtYmVyPiBleHRlbmRzIElFbnRpdHk8VCwgSUQ+IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbGV2ZWxJZD86IG51bWJlcjtcbiAgc3RhdHVzSWQ6IG51bWJlcjtcbiAgZW50aXR5TmFtZTogc3RyaW5nO1xuICBpY29uPzogSWNvblJlZjtcbn1cblxuLy9AZHluYW1pY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZWZlcmVudGlhbDxcbiAgICBUIGV4dGVuZHMgQmFzZVJlZmVyZW50aWFsPFQsIElELCBBTz4sXG4gICAgSUQgPSBudW1iZXIsXG4gICAgQU8gZXh0ZW5kcyBSZWZlcmVudGlhbEFzT2JqZWN0T3B0aW9ucyA9IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zLFxuICAgIEZPID0gYW55LFxuICA+XG4gIGV4dGVuZHMgRW50aXR5PFQsIElELCBBTywgRk8+XG4gIGltcGxlbWVudHMgSVJlZmVyZW50aWFsUmVmPFQsIElEPlxue1xuICBsYWJlbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNvbW1lbnRzOiBzdHJpbmc7XG4gIGNyZWF0aW9uRGF0ZTogRGF0ZSB8IE1vbWVudDtcbiAgc3RhdHVzSWQ6IG51bWJlcjtcbiAgdmFsaWRpdHlTdGF0dXNJZDogbnVtYmVyO1xuICBsZXZlbElkOiBudW1iZXI7XG4gIHBhcmVudElkOiBudW1iZXI7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgaWNvbj86IEljb25SZWY7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKF9fdHlwZW5hbWU/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihfX3R5cGVuYW1lKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBBTyk6IGFueSB7XG4gICAgaWYgKG9wdHM/Lm1pbmlmeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIGVudGl0eU5hbWU6IChvcHRzLmtlZXBFbnRpdHlOYW1lICYmIHRoaXMuZW50aXR5TmFtZSkgfHwgdW5kZWZpbmVkLCAvLyBEb24ndCBrZWVwIGJ5IGRlZmF1bHRcbiAgICAgICAgX190eXBlbmFtZTogKG9wdHMua2VlcFR5cGVuYW1lICYmIHRoaXMuX190eXBlbmFtZSkgfHwgdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBzdXBlci5hc09iamVjdChvcHRzKTtcbiAgICB0YXJnZXQuY3JlYXRpb25EYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMuY3JlYXRpb25EYXRlKTtcbiAgICBpZiAob3B0cz8ua2VlcEVudGl0eU5hbWUgPT09IGZhbHNlKSBkZWxldGUgdGFyZ2V0LmVudGl0eU5hbWU7XG4gICAgaWYgKG9wdHM/LmtlZXBJY29uID09PSBmYWxzZSkgZGVsZXRlIHRhcmdldC5pY29uO1xuICAgIGlmIChvcHRzPy5rZWVwUHJvcGVydGllcyA9PT0gZmFsc2UpIGRlbGV0ZSB0YXJnZXQucHJvcGVydGllcztcbiAgICBpZiAoaXNOaWwodGFyZ2V0LnZhbGlkaXR5U3RhdHVzSWQpKSBkZWxldGUgdGFyZ2V0LnZhbGlkaXR5U3RhdHVzSWQ7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBGTykge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICB0aGlzLmxhYmVsID0gc291cmNlLmxhYmVsO1xuICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBzb3VyY2UuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jb21tZW50cyA9IHNvdXJjZS5jb21tZW50cztcbiAgICB0aGlzLnN0YXR1c0lkID0gc291cmNlLnN0YXR1c0lkO1xuICAgIHRoaXMudmFsaWRpdHlTdGF0dXNJZCA9IHNvdXJjZS52YWxpZGl0eVN0YXR1c0lkO1xuICAgIHRoaXMubGV2ZWxJZCA9IHNvdXJjZS5sZXZlbElkICYmIHNvdXJjZS5sZXZlbElkICE9PSAwID8gc291cmNlLmxldmVsSWQgOiB1bmRlZmluZWQ7IC8vIERvIG5vdCBzZXQgYXMgbnVsbCAobmVlZCBmb3IgYWNjb3VudC5kZXBhcnRtZW50LCB3aGVuIHJlZ2lzdGVyKVxuICAgIHRoaXMucGFyZW50SWQgPSBzb3VyY2UucGFyZW50SWQ7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzb3VyY2UuY3JlYXRpb25EYXRlKTtcbiAgICB0aGlzLmVudGl0eU5hbWUgPSBzb3VyY2UuZW50aXR5TmFtZTtcbiAgICB0aGlzLmljb24gPSBzb3VyY2UuaWNvbjtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5lcXVhbHMob3RoZXIpICYmIHRoaXMuZW50aXR5TmFtZSA9PT0gb3RoZXIuZW50aXR5TmFtZTtcbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuQEVudGl0eUNsYXNzKHsgdHlwZW5hbWU6ICdSZWZlcmVudGlhbFZPJyB9KVxuZXhwb3J0IGNsYXNzIFJlZmVyZW50aWFsPFQgZXh0ZW5kcyBSZWZlcmVudGlhbDxULCBhbnk+ID0gUmVmZXJlbnRpYWw8YW55PiwgSUQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVJlZmVyZW50aWFsPFQsIElEPiB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IFJlZmVyZW50aWFsO1xuXG4gIHByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IChzb3VyY2UucHJvcGVydGllcyAmJiB7IC4uLnNvdXJjZS5wcm9wZXJ0aWVzIH0pIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBSZWZlcmVudGlhbEFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gICAgaWYgKG9wdHM/Lm1pbmlmeSkge1xuICAgICAgZGVsZXRlIHRhcmdldC5wcm9wZXJ0aWVzO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWZlcmVudGlhbFV0aWxzIHtcbiAgLy8gRklYTUU6IHJlbW92ZSB0aGlzXG4gIHN0YXRpYyBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogUmVmZXJlbnRpYWwge1xuICAgIGlmICghc291cmNlIHx8IHNvdXJjZSBpbnN0YW5jZW9mIFJlZmVyZW50aWFsKSByZXR1cm4gc291cmNlO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBSZWZlcmVudGlhbCgpO1xuICAgIHJlcy5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlcyBhcyBSZWZlcmVudGlhbDtcbiAgfVxuXG4gIHN0YXRpYyBpc05vdEVtcHR5PFQgZXh0ZW5kcyBJUmVmZXJlbnRpYWxSZWY8VD4+KG9iajogVCB8IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIEEgcmVmZXJlbnRpYWwgZW50aXR5IHNob3VsZCBhbHdheXMgaGF2ZSBhICdpZCcgZmlsbGVkIChjYW4gYmUgbmVnYXRpdmUgaXMgbG9jYWwgYW5kIHRlbXBvcmFyeSlcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuaXNOb3RFbXB0eShvYmosICdpZCcpO1xuICB9XG5cbiAgc3RhdGljIGlzRW1wdHk8VCBleHRlbmRzIElSZWZlcmVudGlhbFJlZjxUPj4ob2JqOiBUIHwgYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWxzLmlzRW1wdHkob2JqLCAnaWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHM8VCBleHRlbmRzIElSZWZlcmVudGlhbFJlZjxUPj4obzE6IFQgfCBhbnksIG8yOiBUIHwgYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyhvMSwgbzIsICdpZCcpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMgZXh0ZW5kcyBFbnRpdHlBc09iamVjdE9wdGlvbnMge1xuICBrZWVwRW50aXR5TmFtZT86IGJvb2xlYW47XG4gIGtlZXBJY29uPzogYm9vbGVhbjtcbiAga2VlcFByb3BlcnRpZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gc3RvcmUgYW4gZW50aXR5IGxvY2FsbHlcbiAqL1xuZXhwb3J0IGNvbnN0IE1JTklGWV9FTlRJVFlfRk9SX0xPQ0FMX1NUT1JBR0U6IFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIG1pbmlmeTogdHJ1ZSxcbiAga2VlcFR5cGVuYW1lOiB0cnVlLFxuICBrZWVwRW50aXR5TmFtZTogdHJ1ZSxcbiAga2VlcExvY2FsSWQ6IHRydWUsXG4gIGtlZXBJY29uOiB0cnVlLFxuICBrZWVwUHJvcGVydGllczogdHJ1ZSxcbn0pO1xuXG4vKipcbiAqIFVzZWQgdG8gc2VuZCBhbiBlbnRpdHkgdG8gYSBwb2RcbiAqL1xuZXhwb3J0IGNvbnN0IE1JTklGWV9FTlRJVFlfRk9SX1BPRDogUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgbWluaWZ5OiB0cnVlLFxuICBrZWVwVHlwZW5hbWU6IGZhbHNlLFxuICBrZWVwRW50aXR5TmFtZTogZmFsc2UsXG4gIGtlZXBMb2NhbElkOiBmYWxzZSxcbiAga2VlcEljb246IGZhbHNlLFxuICBrZWVwUHJvcGVydGllczogZmFsc2UsXG59KTtcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7IHR5cGVuYW1lOiAnUmVmZXJlbnRpYWxWTycgfSlcbmV4cG9ydCBjbGFzcyBSZWZlcmVudGlhbFJlZjxcbiAgICBUIGV4dGVuZHMgUmVmZXJlbnRpYWxSZWY8YW55LCBJRD4gPSBSZWZlcmVudGlhbFJlZjxhbnksIGFueT4sXG4gICAgSUQgPSBudW1iZXIsXG4gICAgTyBleHRlbmRzIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zID0gUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMsXG4gICAgRk8gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBFbnRpdHk8VCwgSUQsIE8sIEZPPlxuICBpbXBsZW1lbnRzIElSZWZlcmVudGlhbFJlZjxULCBJRD5cbntcbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gUmVmZXJlbnRpYWxSZWY7XG4gIHN0YXRpYyBjbG9uZShzb3VyY2U6IGFueSk6IFJlZmVyZW50aWFsUmVmIHtcbiAgICByZXR1cm4gUmVmZXJlbnRpYWxSZWYuZnJvbU9iamVjdChzb3VyY2UpPy5jbG9uZSgpO1xuICB9XG5cbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXNJZDogbnVtYmVyO1xuICBsZXZlbElkOiBudW1iZXI7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgaWNvbj86IEljb25SZWY7XG4gIHByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFJlZmVyZW50aWFsUmVmLlRZUEVOQU1FKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBPKTogYW55IHtcbiAgICBpZiAob3B0cz8ubWluaWZ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgZW50aXR5TmFtZTogKG9wdHMua2VlcEVudGl0eU5hbWUgJiYgdGhpcy5lbnRpdHlOYW1lKSB8fCB1bmRlZmluZWQsIC8vIERvbid0IGtlZXAgYnkgZGVmYXVsdFxuICAgICAgICBfX3R5cGVuYW1lOiAob3B0cy5rZWVwVHlwZW5hbWUgJiYgdGhpcy5fX3R5cGVuYW1lKSB8fCB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQ6IGFueSA9IHN1cGVyLmFzT2JqZWN0KG9wdHMpO1xuICAgIGlmIChvcHRzPy5rZWVwRW50aXR5TmFtZSA9PT0gZmFsc2UpIGRlbGV0ZSB0YXJnZXQuZW50aXR5TmFtZTtcbiAgICBpZiAob3B0cz8ua2VlcEljb24gPT09IGZhbHNlKSBkZWxldGUgdGFyZ2V0Lmljb247XG4gICAgaWYgKG9wdHM/LmtlZXBQcm9wZXJ0aWVzID09PSBmYWxzZSkgZGVsZXRlIHRhcmdldC5wcm9wZXJ0aWVzO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBGTykge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmVudGl0eU5hbWUgPSBzb3VyY2UuZW50aXR5TmFtZSB8fCB0aGlzLmVudGl0eU5hbWU7XG4gICAgdGhpcy5sYWJlbCA9IHNvdXJjZS5sYWJlbDtcbiAgICB0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gc291cmNlLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuc3RhdHVzSWQgPSBzb3VyY2Uuc3RhdHVzSWQ7XG4gICAgdGhpcy5sZXZlbElkID0gc291cmNlLmxldmVsSWQ7XG4gICAgdGhpcy5pY29uID0gc291cmNlLmljb247XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gKHNvdXJjZS5wcm9wZXJ0aWVzICYmIHsgLi4uc291cmNlLnByb3BlcnRpZXMgfSkgfHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  import { InjectionToken } from '@angular/core';
2
+ export function isOnFieldMode(usageMode) { }
2
3
  export const APP_LOCALES = new InjectionToken('locales');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVM3QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQWlCLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcm9wZXJ0aWVzTWFwLCBQcm9wZXJ0eX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIaXN0b3J5UGFnZVJlZmVyZW5jZX0gZnJvbSAnLi9oaXN0b3J5Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgVXNhZ2VNb2RlID0gJ0RFU0snIHwgJ0ZJRUxEJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIExvY2FsZUNvbmZpZyBleHRlbmRzIFByb3BlcnR5IHtcbiAgY291bnRyeT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTEVTID0gbmV3IEluamVjdGlvblRva2VuPExvY2FsZUNvbmZpZ1tdPignbG9jYWxlcycpO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgT2ZmbGluZUZlYXR1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhc3RTeW5jRGF0ZT86IHN0cmluZztcbiAgZmlsdGVyPzogYW55O1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTG9jYWxTZXR0aW5ncyB7XG4gIHBhZ2VzPzogYW55O1xuICBwZWVyVXJsPzogc3RyaW5nO1xuICBsYXRMb25nRm9ybWF0OiAnRERNTVNTJyB8ICdERE1NJyB8ICdERCc7XG4gIGFjY291bnRJbmhlcml0YW5jZT86IGJvb2xlYW47XG4gIGxvY2FsZTogc3RyaW5nO1xuICB1c2FnZU1vZGU/OiBVc2FnZU1vZGU7XG4gIG1vYmlsZT86IGJvb2xlYW47XG4gIHByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzTWFwO1xuICBwYWdlSGlzdG9yeT86IEhpc3RvcnlQYWdlUmVmZXJlbmNlW107XG4gIG9mZmxpbmVGZWF0dXJlcz86IChzdHJpbmcgfCBPZmZsaW5lRmVhdHVyZSlbXTtcbiAgcGFnZUhpc3RvcnlNYXhTaXplOiBudW1iZXI7XG59XG5cbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsvQyxNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQW9CLElBQUcsQ0FBQztBQU10RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQWlCLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvcGVydGllc01hcCwgUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhpc3RvcnlQYWdlUmVmZXJlbmNlIH0gZnJvbSAnLi9oaXN0b3J5Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgVXNhZ2VNb2RlID0gJ0RFU0snIHwgJ0ZJRUxEJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzT25GaWVsZE1vZGUodXNhZ2VNb2RlOiBVc2FnZU1vZGUpIHt9XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBMb2NhbGVDb25maWcgZXh0ZW5kcyBQcm9wZXJ0eSB7XG4gIGNvdW50cnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbGVDb25maWdbXT4oJ2xvY2FsZXMnKTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE9mZmxpbmVGZWF0dXJlPEYgPSBhbnk+IHtcbiAgbmFtZTogc3RyaW5nO1xuICBsYXN0U3luY0RhdGU/OiBzdHJpbmc7XG4gIGZpbHRlcj86IEY7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBMb2NhbFNldHRpbmdzIHtcbiAgcGFnZXM/OiBhbnk7XG4gIHBlZXJVcmw/OiBzdHJpbmc7XG4gIGxhdExvbmdGb3JtYXQ6ICdERE1NU1MnIHwgJ0RETU0nIHwgJ0REJztcbiAgYWNjb3VudEluaGVyaXRhbmNlPzogYm9vbGVhbjtcbiAgbG9jYWxlOiBzdHJpbmc7XG4gIHVzYWdlTW9kZT86IFVzYWdlTW9kZTtcbiAgbW9iaWxlPzogYm9vbGVhbjtcbiAgcHJvcGVydGllcz86IFByb3BlcnRpZXNNYXA7XG4gIHBhZ2VIaXN0b3J5PzogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXTtcbiAgb2ZmbGluZUZlYXR1cmVzPzogKHN0cmluZyB8IE9mZmxpbmVGZWF0dXJlKVtdO1xuICBwYWdlSGlzdG9yeU1heFNpemU6IG51bWJlcjtcbiAgZGFya01vZGU/OiBib29sZWFuO1xufVxuIl19
@@ -2,8 +2,8 @@ var UserToken_1;
2
2
  import { __decorate } from "tslib";
3
3
  import { EntityClass } from './entity.decorators';
4
4
  import { Entity } from './entity.model';
5
- import { fromDateISOString, toDateISOString } from '../../../shared/dates';
6
- import { toNumber } from '../../../shared/functions';
5
+ import { DateUtils, fromDateISOString, toDateISOString } from '../../../shared/dates';
6
+ import { isNotNil, toNumber } from '../../../shared/functions';
7
7
  export class TokenScope {
8
8
  id;
9
9
  flag;
@@ -13,6 +13,10 @@ export class TokenScope {
13
13
  let UserToken = class UserToken extends Entity {
14
14
  static { UserToken_1 = this; }
15
15
  static fromObject;
16
+ static equals(t1, t2) {
17
+ return ((isNotNil(t1.id) && t1.id === t2?.id) ||
18
+ (t1 && t1.pubkey && t1.pubkey === t2?.pubkey && t1.name === t2?.name && DateUtils.equals(t1.expirationDate, t2?.expirationDate)));
19
+ }
16
20
  pubkey = null;
17
21
  token = null;
18
22
  name = null;
@@ -50,4 +54,4 @@ UserToken = UserToken_1 = __decorate([
50
54
  EntityClass({ typename: 'UserTokenVO' })
51
55
  ], UserToken);
52
56
  export { UserToken };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvdG9rZW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDekUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxVQUFVO0lBQ3JCLEVBQUUsQ0FBUztJQUNYLElBQUksQ0FBUztJQUNiLElBQUksQ0FBUztDQUNkO0FBRUQsV0FBVztBQUVKLElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBVSxTQUFRLE1BQWlCOztJQUM5QyxNQUFNLENBQUMsVUFBVSxDQUF5QztJQUUxRCxNQUFNLEdBQVcsSUFBSSxDQUFDO0lBQ3RCLEtBQUssR0FBVyxJQUFJLENBQUM7SUFDckIsSUFBSSxHQUFXLElBQUksQ0FBQztJQUNwQixLQUFLLEdBQVcsSUFBSSxDQUFDO0lBQ3JCLE1BQU0sR0FBaUIsSUFBSSxDQUFDO0lBQzVCLGNBQWMsR0FBVyxJQUFJLENBQUM7SUFDOUIsWUFBWSxHQUFXLElBQUksQ0FBQztJQUM1QixZQUFZLEdBQVcsSUFBSSxDQUFDO0lBRTVCO1FBQ0UsS0FBSyxDQUFDLFdBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQTRCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN0QjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBVyxFQUFFLElBQVU7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FDRixDQUFBO0FBdENZLFNBQVM7SUFEckIsV0FBVyxDQUFDLEVBQUMsUUFBUSxFQUFFLGFBQWEsRUFBQyxDQUFDO0dBQzFCLFNBQVMsQ0FzQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnRpdHlDbGFzc30gZnJvbSAnLi9lbnRpdHkuZGVjb3JhdG9ycyc7XG5pbXBvcnQge0VudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zfSBmcm9tICcuL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQge2Zyb21EYXRlSVNPU3RyaW5nLCB0b0RhdGVJU09TdHJpbmd9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQge3RvTnVtYmVyfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuZXhwb3J0IGNsYXNzIFRva2VuU2NvcGUge1xuICBpZDogc3RyaW5nO1xuICBmbGFnOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdVc2VyVG9rZW5WTyd9KVxuZXhwb3J0IGNsYXNzIFVzZXJUb2tlbiBleHRlbmRzIEVudGl0eTxVc2VyVG9rZW4+IHtcbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gVXNlclRva2VuO1xuXG4gIHB1YmtleTogc3RyaW5nID0gbnVsbDtcbiAgdG9rZW46IHN0cmluZyA9IG51bGw7XG4gIG5hbWU6IHN0cmluZyA9IG51bGw7XG4gIGZsYWdzOiBudW1iZXIgPSBudWxsO1xuICBzY29wZXM6IFRva2VuU2NvcGVbXSA9IG51bGw7XG4gIGV4cGlyYXRpb25EYXRlOiBNb21lbnQgPSBudWxsO1xuICBsYXN0VXNlZERhdGU6IE1vbWVudCA9IG51bGw7XG4gIGNyZWF0aW9uRGF0ZTogTW9tZW50ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihVc2VyVG9rZW4uVFlQRU5BTUUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gICAgdGFyZ2V0LmV4cGlyYXRpb25EYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMuZXhwaXJhdGlvbkRhdGUpO1xuICAgIHRhcmdldC5sYXN0VXNlZERhdGUgPSB0b0RhdGVJU09TdHJpbmcodGhpcy5sYXN0VXNlZERhdGUpO1xuICAgIHRhcmdldC5jcmVhdGlvbkRhdGUgPSB0b0RhdGVJU09TdHJpbmcodGhpcy5jcmVhdGlvbkRhdGUpO1xuICAgIGlmIChvcHRzPy5taW5pZnkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXQuc2NvcGVzO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy50b2tlbiA9IHNvdXJjZS50b2tlbjtcbiAgICB0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTtcbiAgICB0aGlzLmZsYWdzID0gdG9OdW1iZXIoc291cmNlLmZsYWdzKTtcbiAgICB0aGlzLnNjb3BlcyA9IHNvdXJjZS5zY29wZXM7XG4gICAgdGhpcy5leHBpcmF0aW9uRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS5leHBpcmF0aW9uRGF0ZSk7XG4gICAgdGhpcy5sYXN0VXNlZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzb3VyY2UubGFzdFVzZWREYXRlKTtcbiAgICB0aGlzLmNyZWF0aW9uRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS5jcmVhdGlvbkRhdGUpO1xuICB9XG59XG4iXX0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvdG9rZW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBeUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsTUFBTSxPQUFPLFVBQVU7SUFDckIsRUFBRSxDQUFTO0lBQ1gsSUFBSSxDQUFTO0lBQ2IsSUFBSSxDQUFTO0NBQ2Q7QUFFRCxXQUFXO0FBRUosSUFBTSxTQUFTLEdBQWYsTUFBTSxTQUFVLFNBQVEsTUFBaUI7O0lBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQXlDO0lBRTFELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBYSxFQUFFLEVBQWE7UUFDeEMsT0FBTyxDQUNMLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDckMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDakksQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQVcsSUFBSSxDQUFDO0lBQ3RCLEtBQUssR0FBVyxJQUFJLENBQUM7SUFDckIsSUFBSSxHQUFXLElBQUksQ0FBQztJQUNwQixLQUFLLEdBQVcsSUFBSSxDQUFDO0lBQ3JCLE1BQU0sR0FBaUIsSUFBSSxDQUFDO0lBQzVCLGNBQWMsR0FBVyxJQUFJLENBQUM7SUFDOUIsWUFBWSxHQUFXLElBQUksQ0FBQztJQUM1QixZQUFZLEdBQVcsSUFBSSxDQUFDO0lBRTVCO1FBQ0UsS0FBSyxDQUFDLFdBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQTRCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVcsRUFBRSxJQUFVO1FBQ2hDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0YsQ0FBQTtBQTdDWSxTQUFTO0lBRHJCLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQztHQUM1QixTQUFTLENBNkNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUNsYXNzIH0gZnJvbSAnLi9lbnRpdHkuZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eUFzT2JqZWN0T3B0aW9ucyB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudC9tb21lbnQnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzLCBmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGlzTm90TmlsLCB0b051bWJlciB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgVG9rZW5TY29wZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGZsYWc6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vLyBAZHluYW1pY1xuQEVudGl0eUNsYXNzKHsgdHlwZW5hbWU6ICdVc2VyVG9rZW5WTycgfSlcbmV4cG9ydCBjbGFzcyBVc2VyVG9rZW4gZXh0ZW5kcyBFbnRpdHk8VXNlclRva2VuPiB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IFVzZXJUb2tlbjtcblxuICBzdGF0aWMgZXF1YWxzKHQxOiBVc2VyVG9rZW4sIHQyOiBVc2VyVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGlzTm90TmlsKHQxLmlkKSAmJiB0MS5pZCA9PT0gdDI/LmlkKSB8fFxuICAgICAgKHQxICYmIHQxLnB1YmtleSAmJiB0MS5wdWJrZXkgPT09IHQyPy5wdWJrZXkgJiYgdDEubmFtZSA9PT0gdDI/Lm5hbWUgJiYgRGF0ZVV0aWxzLmVxdWFscyh0MS5leHBpcmF0aW9uRGF0ZSwgdDI/LmV4cGlyYXRpb25EYXRlKSlcbiAgICApO1xuICB9XG5cbiAgcHVia2V5OiBzdHJpbmcgPSBudWxsO1xuICB0b2tlbjogc3RyaW5nID0gbnVsbDtcbiAgbmFtZTogc3RyaW5nID0gbnVsbDtcbiAgZmxhZ3M6IG51bWJlciA9IG51bGw7XG4gIHNjb3BlczogVG9rZW5TY29wZVtdID0gbnVsbDtcbiAgZXhwaXJhdGlvbkRhdGU6IE1vbWVudCA9IG51bGw7XG4gIGxhc3RVc2VkRGF0ZTogTW9tZW50ID0gbnVsbDtcbiAgY3JlYXRpb25EYXRlOiBNb21lbnQgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFVzZXJUb2tlbi5UWVBFTkFNRSk7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCB0YXJnZXQgPSBzdXBlci5hc09iamVjdChvcHRzKTtcbiAgICB0YXJnZXQuZXhwaXJhdGlvbkRhdGUgPSB0b0RhdGVJU09TdHJpbmcodGhpcy5leHBpcmF0aW9uRGF0ZSk7XG4gICAgdGFyZ2V0Lmxhc3RVc2VkRGF0ZSA9IHRvRGF0ZUlTT1N0cmluZyh0aGlzLmxhc3RVc2VkRGF0ZSk7XG4gICAgdGFyZ2V0LmNyZWF0aW9uRGF0ZSA9IHRvRGF0ZUlTT1N0cmluZyh0aGlzLmNyZWF0aW9uRGF0ZSk7XG4gICAgaWYgKG9wdHM/Lm1pbmlmeSkge1xuICAgICAgZGVsZXRlIHRhcmdldC5zY29wZXM7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHRoaXMucHVia2V5ID0gc291cmNlLnB1YmtleTtcbiAgICB0aGlzLnRva2VuID0gc291cmNlLnRva2VuO1xuICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZmxhZ3MgPSB0b051bWJlcihzb3VyY2UuZmxhZ3MpO1xuICAgIHRoaXMuc2NvcGVzID0gc291cmNlLnNjb3BlcztcbiAgICB0aGlzLmV4cGlyYXRpb25EYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLmV4cGlyYXRpb25EYXRlKTtcbiAgICB0aGlzLmxhc3RVc2VkRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS5sYXN0VXNlZERhdGUpO1xuICAgIHRoaXMuY3JlYXRpb25EYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLmNyZWF0aW9uRGF0ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -71,13 +71,9 @@ export class TreeItemEntityUtils {
71
71
  }
72
72
  static first(node, filterFn) {
73
73
  // Node has children: dive into children
74
- const child = (node.children || []).find((c) => !filterFn || filterFn(c));
74
+ const child = (node.children || []).find((c) => this.first(c, filterFn));
75
75
  if (child)
76
76
  return child;
77
- // Lookup in descendants
78
- const descendant = (node.children || []).map((c) => this.first(c, filterFn)).find(isNotNil);
79
- if (descendant)
80
- return descendant;
81
77
  // Node match: use it
82
78
  return !filterFn || filterFn(node) ? node : undefined;
83
79
  }
@@ -113,7 +109,7 @@ export class TreeItemEntityUtils {
113
109
  return this.deleteRecursively(node, filterFn);
114
110
  }
115
111
  static filterRecursively(node, filterFn) {
116
- return (node.children || []).reduce((res, child) => res.concat(this.filterRecursively(child, filterFn)),
112
+ return (node?.children || []).reduce((res, child) => res.concat(this.filterRecursively(child, filterFn)),
117
113
  // Init result
118
114
  filterFn(node) ? [node] : []);
119
115
  }
@@ -196,4 +192,4 @@ export class TreeItemEntityUtils {
196
192
  });
197
193
  }
198
194
  }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLWVudGl0eS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC90cmVlLWl0ZW0tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFTbkUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsT0FBTyxDQUE4QyxJQUFPLEVBQUUsUUFBc0IsRUFBRSxTQUFrQjtRQUM3RyxxQkFBcUI7UUFDckIsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztZQUNyRixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixZQUFZO1FBQ1osSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNuQztRQUVELHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RixJQUFJLFVBQVU7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUVs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SUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0MsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFpQyxNQUFTO1FBQzdELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IEZpbHRlckZuIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudGl0eUZpbHRlciB9IGZyb20gJy4vZmlsdGVyLm1vZGVsJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElUcmVlSXRlbUVudGl0eTxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPiB7XG4gIHBhcmVudElkOiBJRDtcbiAgcGFyZW50OiBUO1xuICBjaGlsZHJlbjogVFtdO1xufVxuXG5leHBvcnQgY2xhc3MgVHJlZUl0ZW1FbnRpdHlVdGlscyB7XG4gIHN0YXRpYyBmb3J3YXJkPFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55PiwgSUQgPSBudW1iZXI+KG5vZGU6IFQsIGZpbHRlckZuPzogRmlsdGVyRm48VD4sIGxvb3BDb3VudD86IG51bWJlcik6IFQge1xuICAgIC8vIFN0b3AgaW5maW5pdGUgbG9vcFxuICAgIGlmIChsb29wQ291bnQgPT09IDEwMCkge1xuICAgICAgY29uc29sZS5lcnJvcignSW5maW5pdGUgbG9vcCBkZXRlY3RlZCEgTWFrZSBzdXJlIHRoZXJlIGlzIHZhbGlkIG5vZGUgaW4gdGhpcyB0cmVlIScpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXhJblBhcmVudCA9IG5vZGUucGFyZW50ID8gKG5vZGUucGFyZW50LmNoaWxkcmVuIHx8IFtdKS5pbmRleE9mKG5vZGUpIDogLTE7XG4gICAgLy8gUm9vdCBub2RlXG4gICAgaWYgKGluZGV4SW5QYXJlbnQgPT09IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcy5maXJzdChub2RlLCBmaWx0ZXJGbik7XG4gICAgfVxuXG4gICAgLy8gRGl2ZSBpbnRvIGNoaWxkcmVuXG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IChub2RlLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGMpID0+IHRoaXMuZmlyc3QoYywgZmlsdGVyRm4pKS5maW5kKGlzTm90TmlsKTtcbiAgICBpZiAoZmlyc3RDaGlsZCkgcmV0dXJuIGZpcnN0Q2hpbGQ7XG5cbiAgICAvLyBMb29rdXAgaW4gYnJvdGhlcnNcbiAgICBsZXQgY3VycmVudCA9IG5vZGU7XG4gICAgd2hpbGUgKGN1cnJlbnQucGFyZW50ICYmIGluZGV4SW5QYXJlbnQgIT09IC0xKSB7XG4gICAgICAvLyBIYXMgYnJvdGhlciA/XG4gICAgICBpZiAoaW5kZXhJblBhcmVudCArIDEgPCBjdXJyZW50LnBhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYnJvdGhlciA9IChjdXJyZW50LnBhcmVudC5jaGlsZHJlbiB8fCBbXSlcbiAgICAgICAgICAuc2xpY2UoaW5kZXhJblBhcmVudCArIDEpXG4gICAgICAgICAgLm1hcCgoYykgPT4gKCFmaWx0ZXJGbiB8fCBmaWx0ZXJGbihjKSA/IGMgOiB0aGlzLmZpcnN0KGMsIGZpbHRlckZuKSkpXG4gICAgICAgICAgLmZpbmQoaXNOb3ROaWwpO1xuICAgICAgICAvLyBPSywgZm91bmQgYSBicm90aGVyXG4gICAgICAgIGlmIChicm90aGVyKSByZXR1cm4gYnJvdGhlcjtcbiAgICAgIH1cbiAgICAgIC8vIFJldHJ5LCB3aXRoIHBhcmVudCdzIGJyb3RoZXJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICAgIGluZGV4SW5QYXJlbnQgPSBjdXJyZW50LnBhcmVudCA/IChjdXJyZW50LnBhcmVudC5jaGlsZHJlbiB8fCBbXSkuaW5kZXhPZihjdXJyZW50KSA6IC0xO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBwYXJlbnRcbiAgICBpZiAoY3VycmVudCAhPT0gbm9kZSAmJiAoIWZpbHRlckZuIHx8IGZpbHRlckZuKGN1cnJlbnQpKSkgcmV0dXJuIGN1cnJlbnQ7XG5cbiAgICByZXR1cm4gdGhpcy5maXJzdChjdXJyZW50LCBmaWx0ZXJGbik7XG4gIH1cblxuICBzdGF0aWMgYmFja3dhcmQ8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+LCBJRCA9IG51bWJlcj4obm9kZTogVCwgZmlsdGVyRm4/OiBGaWx0ZXJGbjxUPiwgbG9vcENvdW50PzogbnVtYmVyKTogVCB7XG4gICAgLy8gU3RvcCBpbmZpbml0ZSBsb29wXG4gICAgaWYgKGxvb3BDb3VudCA9PT0gMTAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbmZpbml0ZSBsb29wIGRldGVjdGVkISBNYWtlIHN1cmUgdGhlcmUgaXMgdmFsaWQgbm9kZSBpbiB0aGlzIHRyZWUhJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4SW5QYXJlbnQgPSBub2RlLnBhcmVudCA/IChub2RlLnBhcmVudC5jaGlsZHJlbiB8fCBbXSkuaW5kZXhPZihub2RlKSA6IC0xO1xuICAgIC8vIFJvb3Qgbm9kZVxuICAgIGlmIChpbmRleEluUGFyZW50ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdExlYWYobm9kZSwgZmlsdGVyRm4pO1xuICAgIH1cblxuICAgIC8vIE5vIHByZXZpb3VzIGJyb3RoZXIgKGZpcnN0IGluIHBhcmVudCdzIGxpc3QpXG4gICAgZWxzZSBpZiAoaW5kZXhJblBhcmVudCA9PT0gMCkge1xuICAgICAgLy8gUmV0dXJuIHRoZSBwYXJlbnQsIGlmIG1hdGNoXG4gICAgICByZXR1cm4gIWZpbHRlckZuIHx8IGZpbHRlckZuKG5vZGUucGFyZW50KVxuICAgICAgICA/IG5vZGUucGFyZW50XG4gICAgICAgIDogLy8gT3IgcmVjdXJzaXZlbHkgY2FsbCBiYWNrd2FyZCgpIG9uIHRoZSBwYXJlbnRcbiAgICAgICAgICB0aGlzLmJhY2t3YXJkKG5vZGUucGFyZW50LCBmaWx0ZXJGbiwgKGxvb3BDb3VudCB8fCAwKSArIDEpO1xuICAgIH1cblxuICAgIC8vIExvb2t1cCBpbiBicm90aGVyXG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwcmV2aW91c0Jyb3RoZXIgPSAobm9kZS5wYXJlbnQuY2hpbGRyZW4gfHwgW10pXG4gICAgICAgIC5zbGljZSgwLCBpbmRleEluUGFyZW50KVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5maW5kKChjKSA9PiAhZmlsdGVyRm4gfHwgZmlsdGVyRm4oYykpO1xuXG4gICAgICAvLyBPSywgdGhlcmUgaXMgYSBicm90aGVyIGJlZm9yZSB0aGUgY3VycmVudCBpbmRleFxuICAgICAgaWYgKHByZXZpb3VzQnJvdGhlcikgcmV0dXJuIHRoaXMubGFzdExlYWYocHJldmlvdXNCcm90aGVyLCBmaWx0ZXJGbik7XG4gICAgfVxuXG4gICAgLy8gTm90IGZvdW5kIGluIGJyb3RoZXI6IHJlY3Vyc2l2ZWx5IGNhbGwgYmFja3dhcmQoKSBvbiB0aGUgcGFyZW50XG4gICAgcmV0dXJuIHRoaXMuYmFja3dhcmQobm9kZS5wYXJlbnQsIGZpbHRlckZuLCAobG9vcENvdW50IHx8IDApICsgMSk7XG4gIH1cblxuICBzdGF0aWMgZmlyc3Q8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihub2RlOiBULCBmaWx0ZXJGbj86IEZpbHRlckZuPFQ+KTogVCB7XG4gICAgLy8gTm9kZSBoYXMgY2hpbGRyZW46IGRpdmUgaW50byBjaGlsZHJlblxuICAgIGNvbnN0IGNoaWxkID0gKG5vZGUuY2hpbGRyZW4gfHwgW10pLmZpbmQoKGMpID0+ICFmaWx0ZXJGbiB8fCBmaWx0ZXJGbihjKSk7XG4gICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG5cbiAgICAvLyBMb29rdXAgaW4gZGVzY2VuZGFudHNcbiAgICBjb25zdCBkZXNjZW5kYW50ID0gKG5vZGUuY2hpbGRyZW4gfHwgW10pLm1hcCgoYykgPT4gdGhpcy5maXJzdChjLCBmaWx0ZXJGbikpLmZpbmQoaXNOb3ROaWwpO1xuICAgIGlmIChkZXNjZW5kYW50KSByZXR1cm4gZGVzY2VuZGFudDtcblxuICAgIC8vIE5vZGUgbWF0Y2g6IHVzZSBpdFxuICAgIHJldHVybiAhZmlsdGVyRm4gfHwgZmlsdGVyRm4obm9kZSkgPyBub2RlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGxhc3RMZWFmPFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4obm9kZTogVCwgZmlsdGVyRm4/OiBGaWx0ZXJGbjxUPik6IFQge1xuICAgIC8vIE5vZGUgaGFzIGNoaWxkcmVuOiBkaXZlIGludG8gY2hpbGRyZW5cbiAgICBjb25zdCBjaGlsZExlYWYgPSAobm9kZS5jaGlsZHJlbiB8fCBbXSlcbiAgICAgIC8vIFJldmVyc2Ugb3JkZXIgKGFmdGVyIGNsb25lKVxuICAgICAgLnNsaWNlKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5tYXAoKGMpID0+IHRoaXMubGFzdExlYWYoYywgZmlsdGVyRm4pKVxuICAgICAgLmZpbmQoaXNOb3ROaWwpO1xuICAgIGlmIChjaGlsZExlYWYpIHJldHVybiBjaGlsZExlYWY7IC8vIE9LLCBmb3VuZCBpbiBjaGlsZHJlblxuXG4gICAgLy8gTm9kZSBpcyBhIGxlYWYsIG9yIG5vdCBtYXRjaCBmb3VuZCBpbiBjaGlsZHJlbjogY2hlY2sgY3VycmVudFxuICAgIHJldHVybiAhZmlsdGVyRm4gfHwgZmlsdGVyRm4obm9kZSkgPyBub2RlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGZpbmRCeUZpbHRlcjxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PFQ+ICYgSUVudGl0eTxUPj4obm9kZTogVCwgZmlsdGVyOiBFbnRpdHlGaWx0ZXI8YW55LCBUPik6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyRm4gPSBmaWx0ZXI/LmFzRmlsdGVyRm4oKTtcbiAgICBpZiAoIWZpbHRlckZuKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgZW1wdHkgZmlsdGVyIGFyZ3VtZW50Jyk7XG5cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJSZWN1cnNpdmVseShub2RlLCBmaWx0ZXJGbik7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG1hdGNoZXMgYmF0Y2hlc1xuICAgKlxuICAgKiBAcGFyYW0gbm9kZVxuICAgKiBAcGFyYW0gZmlsdGVyXG4gICAqL1xuICBzdGF0aWMgZGVsZXRlQnlGaWx0ZXI8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxUPiAmIElFbnRpdHk8VD4+KG5vZGU6IFQsIGZpbHRlcjogRW50aXR5RmlsdGVyPGFueSwgVD4pOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlckZuID0gZmlsdGVyPy5hc0ZpbHRlckZuKCk7XG4gICAgaWYgKCFmaWx0ZXJGbikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGVtcHR5IGZpbHRlciBhcmd1bWVudCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlUmVjdXJzaXZlbHkobm9kZSwgZmlsdGVyRm4pO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlclJlY3Vyc2l2ZWx5PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4obm9kZTogVCwgZmlsdGVyRm46IChuOiBUKSA9PiBib29sZWFuKTogVFtdIHtcbiAgICByZXR1cm4gKG5vZGUuY2hpbGRyZW4gfHwgW10pLnJlZHVjZShcbiAgICAgIChyZXMsIGNoaWxkKSA9PiByZXMuY29uY2F0KHRoaXMuZmlsdGVyUmVjdXJzaXZlbHkoY2hpbGQsIGZpbHRlckZuKSksXG4gICAgICAvLyBJbml0IHJlc3VsdFxuICAgICAgZmlsdGVyRm4obm9kZSkgPyBbbm9kZV0gOiBbXVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVsZXRlUmVjdXJzaXZlbHk8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihub2RlOiBULCBmaWx0ZXJGbjogKG46IFQpID0+IGJvb2xlYW4pOiBUW10ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkobm9kZS5jaGlsZHJlbikpIHJldHVybiBbXTsgLy8gU2tpcFxuXG4gICAgLy8gRGVsZXRlIGNoaWxkcmVuXG4gICAgY29uc3QgZGVsZXRlZENoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoZmlsdGVyRm4pO1xuICAgIG5vZGUuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmZpbHRlcigoYykgPT4gIWRlbGV0ZWRDaGlsZHJlbi5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBUT0RPOiBhZGQgYW4gb3B0aW9ucyB0byBjbGVhbiB0aGUgcGFyZW50XG4gICAgLy9kZWxldGVkQ2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5wYXJlbnQgPSBudWxsKTtcblxuICAgIC8vIFJlY3Vyc2l2ZSBjYWxsLCBpbiBzdGlsbCBleGlzdGluZyBjaGlsZHJlblxuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLnJlZHVjZSgocmVzLCBjKSA9PiByZXMuY29uY2F0KC4uLnRoaXMuZGVsZXRlUmVjdXJzaXZlbHkoYywgZmlsdGVyRm4pKSwgZGVsZXRlZENoaWxkcmVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdCBlYWNoIG5vZGUsIGZyb20gcm9vdCB0byBsZWFmXG4gICAqXG4gICAqIEBwYXJhbSBub2RlXG4gICAqIEBwYXJhbSBhY3Rpb25cbiAgICovXG4gIHN0YXRpYyB2aXNpdDxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KG5vZGU6IFQsIGFjdGlvbjogKGl0ZW06IFQpID0+IHZvaWQpIHtcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXBwbGlxdWVyIGwnYWN0aW9uIHN1ciBsZSBuxZN1ZCBhY3R1ZWxcbiAgICBhY3Rpb24obm9kZSk7XG5cbiAgICAvLyBQYXJjb3VyaXIgbGVzIGVuZmFudHNcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gdGhpcy52aXNpdChjaGlsZCwgYWN0aW9uKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0IGVhY2ggbm9kZSwgZnJvbSBsZWFmIHRvIHJvb3RcbiAgICpcbiAgICogQHBhcmFtIG5vZGVcbiAgICogQHBhcmFtIGFjdGlvblxuICAgKi9cbiAgc3RhdGljIHZpc2l0SW52ZXJzZTxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KG5vZGU6IFQsIGFjdGlvbjogKFQpID0+IHZvaWQpIHtcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUGFyY291cmlyIGxlcyBlbmZhbnRzXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMudmlzaXRJbnZlcnNlKGNoaWxkLCBhY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvLyBBcHBsaXF1ZXIgbCdhY3Rpb24gc3VyIGxlIG7Fk3VkIGFjdHVlbFxuICAgIGFjdGlvbihub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSBiYXRjaCBlbnRpdHkgdHJlZSBpbnRvIGEgYXJyYXkgbGlzdC4gVGhpcyBtZXRob2Qga2VlcCBsaW5rcyBwYXJlbnQvY2hpbGRyZW4uXG4gICAqXG4gICAqIE1ldGhvZCB1c2VkIHRvIGZpbmQgYmF0Y2ggd2l0aG91dCBpZCAoZS5nLiBiZWZvcmUgbG9jYWwgc3RvcmFnZSlcbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZVxuICAgKi9cbiAgc3RhdGljIHRyZWVUb0FycmF5PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlOiBUKTogVFtdIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChzb3VyY2UuY2hpbGRyZW4gfHwgW10pLnJlZHVjZShcbiAgICAgIChyZXMsIGJhdGNoKSA9PiB7XG4gICAgICAgIGJhdGNoLnBhcmVudCA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQodGhpcy50cmVlVG9BcnJheShiYXRjaCkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgICAgfSxcbiAgICAgIFtzb3VyY2VdXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBsaXN0T2ZUcmVlVG9BcnJheTxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KHNvdXJjZXM6IFRbXSk6IFRbXSB7XG4gICAgaWYgKCFzb3VyY2VzIHx8ICFzb3VyY2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNvdXJjZXMucmVkdWNlKChyZXMsIHNvdXJjZSkgPT4gcmVzLmNvbmNhdCh0aGlzLnRyZWVUb0FycmF5PFQ+KHNvdXJjZSkpLCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogRmlsbCBwYXJlbnQgYXR0cmlidXRlLCBvZiBhbGwgY2hpbGRyZW4gZm91bmQgaW4gdGhlIHRyZWVcbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZVxuICAgKi9cbiAgc3RhdGljIHRyZWVGaWxsUGFyZW50PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlOiBUKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiBudWxsO1xuICAgIChzb3VyY2UuY2hpbGRyZW4gfHwgW10pLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBjaGlsZC5wYXJlbnQgPSBzb3VyY2U7XG4gICAgICB0aGlzLnRyZWVGaWxsUGFyZW50KGNoaWxkKTsgLy8gTG9vcFxuICAgIH0pO1xuICB9XG59XG4iXX0=
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLWVudGl0eS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC90cmVlLWl0ZW0tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFVbkUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsT0FBTyxDQUE4QyxJQUFPLEVBQUUsUUFBc0IsRUFBRSxTQUFrQjtRQUM3RyxxQkFBcUI7UUFDckIsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQ3JGLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsWUFBWTtRQUNaLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVGLElBQUksVUFBVTtZQUFF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LEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBaUMsTUFBUztRQUM3RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pCLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFbnRpdHkgfSBmcm9tICcuL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTm90TmlsIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBFbnRpdHlGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBGaWx0ZXJGbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJVHJlZUl0ZW1FbnRpdHk8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4ge1xuICBwYXJlbnRJZDogSUQ7XG4gIHBhcmVudDogVDtcbiAgY2hpbGRyZW46IFRbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFRyZWVJdGVtRW50aXR5VXRpbHMge1xuICBzdGF0aWMgZm9yd2FyZDxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4sIElEID0gbnVtYmVyPihub2RlOiBULCBmaWx0ZXJGbj86IEZpbHRlckZuPFQ+LCBsb29wQ291bnQ/OiBudW1iZXIpOiBUIHtcbiAgICAvLyBTdG9wIGluZmluaXRlIGxvb3BcbiAgICBpZiAobG9vcENvdW50ID09PSAxMDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0luZmluaXRlIGxvb3AgZGV0ZWN0ZWQhIE1ha2Ugc3VyZSB0aGVyZSBpcyB2YWxpZCBub2RlIGluIHRoaXMgdHJlZSEnKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4SW5QYXJlbnQgPSBub2RlLnBhcmVudCA/IChub2RlLnBhcmVudC5jaGlsZHJlbiB8fCBbXSkuaW5kZXhPZihub2RlKSA6IC0xO1xuICAgIC8vIFJvb3Qgbm9kZVxuICAgIGlmIChpbmRleEluUGFyZW50ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlyc3Qobm9kZSwgZmlsdGVyRm4pO1xuICAgIH1cblxuICAgIC8vIERpdmUgaW50byBjaGlsZHJlblxuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSAobm9kZS5jaGlsZHJlbiB8fCBbXSkubWFwKChjKSA9PiB0aGlzLmZpcnN0KGMsIGZpbHRlckZuKSkuZmluZChpc05vdE5pbCk7XG4gICAgaWYgKGZpcnN0Q2hpbGQpIHJldHVybiBmaXJzdENoaWxkO1xuXG4gICAgLy8gTG9va3VwIGluIGJyb3RoZXJzXG4gICAgbGV0IGN1cnJlbnQgPSBub2RlO1xuICAgIHdoaWxlIChjdXJyZW50LnBhcmVudCAmJiBpbmRleEluUGFyZW50ICE9PSAtMSkge1xuICAgICAgLy8gSGFzIGJyb3RoZXIgP1xuICAgICAgaWYgKGluZGV4SW5QYXJlbnQgKyAxIDwgY3VycmVudC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJyb3RoZXIgPSAoY3VycmVudC5wYXJlbnQuY2hpbGRyZW4gfHwgW10pXG4gICAgICAgICAgLnNsaWNlKGluZGV4SW5QYXJlbnQgKyAxKVxuICAgICAgICAgIC5tYXAoKGMpID0+ICghZmlsdGVyRm4gfHwgZmlsdGVyRm4oYykgPyBjIDogdGhpcy5maXJzdChjLCBmaWx0ZXJGbikpKVxuICAgICAgICAgIC5maW5kKGlzTm90TmlsKTtcbiAgICAgICAgLy8gT0ssIGZvdW5kIGEgYnJvdGhlclxuICAgICAgICBpZiAoYnJvdGhlcikgcmV0dXJuIGJyb3RoZXI7XG4gICAgICB9XG4gICAgICAvLyBSZXRyeSwgd2l0aCBwYXJlbnQncyBicm90aGVyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gICAgICBpbmRleEluUGFyZW50ID0gY3VycmVudC5wYXJlbnQgPyAoY3VycmVudC5wYXJlbnQuY2hpbGRyZW4gfHwgW10pLmluZGV4T2YoY3VycmVudCkgOiAtMTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gcGFyZW50XG4gICAgaWYgKGN1cnJlbnQgIT09IG5vZGUgJiYgKCFmaWx0ZXJGbiB8fCBmaWx0ZXJGbihjdXJyZW50KSkpIHJldHVybiBjdXJyZW50O1xuXG4gICAgcmV0dXJuIHRoaXMuZmlyc3QoY3VycmVudCwgZmlsdGVyRm4pO1xuICB9XG5cbiAgc3RhdGljIGJhY2t3YXJkPFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55PiwgSUQgPSBudW1iZXI+KG5vZGU6IFQsIGZpbHRlckZuPzogRmlsdGVyRm48VD4sIGxvb3BDb3VudD86IG51bWJlcik6IFQge1xuICAgIC8vIFN0b3AgaW5maW5pdGUgbG9vcFxuICAgIGlmIChsb29wQ291bnQgPT09IDEwMCkge1xuICAgICAgY29uc29sZS5lcnJvcignSW5maW5pdGUgbG9vcCBkZXRlY3RlZCEgTWFrZSBzdXJlIHRoZXJlIGlzIHZhbGlkIG5vZGUgaW4gdGhpcyB0cmVlIScpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleEluUGFyZW50ID0gbm9kZS5wYXJlbnQgPyAobm9kZS5wYXJlbnQuY2hpbGRyZW4gfHwgW10pLmluZGV4T2Yobm9kZSkgOiAtMTtcbiAgICAvLyBSb290IG5vZGVcbiAgICBpZiAoaW5kZXhJblBhcmVudCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhc3RMZWFmKG5vZGUsIGZpbHRlckZuKTtcbiAgICB9XG5cbiAgICAvLyBObyBwcmV2aW91cyBicm90aGVyIChmaXJzdCBpbiBwYXJlbnQncyBsaXN0KVxuICAgIGVsc2UgaWYgKGluZGV4SW5QYXJlbnQgPT09IDApIHtcbiAgICAgIC8vIFJldHVybiB0aGUgcGFyZW50LCBpZiBtYXRjaFxuICAgICAgcmV0dXJuICFmaWx0ZXJGbiB8fCBmaWx0ZXJGbihub2RlLnBhcmVudClcbiAgICAgICAgPyBub2RlLnBhcmVudFxuICAgICAgICA6IC8vIE9yIHJlY3Vyc2l2ZWx5IGNhbGwgYmFja3dhcmQoKSBvbiB0aGUgcGFyZW50XG4gICAgICAgICAgdGhpcy5iYWNrd2FyZChub2RlLnBhcmVudCwgZmlsdGVyRm4sIChsb29wQ291bnQgfHwgMCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBMb29rdXAgaW4gYnJvdGhlclxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcHJldmlvdXNCcm90aGVyID0gKG5vZGUucGFyZW50LmNoaWxkcmVuIHx8IFtdKVxuICAgICAgICAuc2xpY2UoMCwgaW5kZXhJblBhcmVudClcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAuZmluZCgoYykgPT4gIWZpbHRlckZuIHx8IGZpbHRlckZuKGMpKTtcblxuICAgICAgLy8gT0ssIHRoZXJlIGlzIGEgYnJvdGhlciBiZWZvcmUgdGhlIGN1cnJlbnQgaW5kZXhcbiAgICAgIGlmIChwcmV2aW91c0Jyb3RoZXIpIHJldHVybiB0aGlzLmxhc3RMZWFmKHByZXZpb3VzQnJvdGhlciwgZmlsdGVyRm4pO1xuICAgIH1cblxuICAgIC8vIE5vdCBmb3VuZCBpbiBicm90aGVyOiByZWN1cnNpdmVseSBjYWxsIGJhY2t3YXJkKCkgb24gdGhlIHBhcmVudFxuICAgIHJldHVybiB0aGlzLmJhY2t3YXJkKG5vZGUucGFyZW50LCBmaWx0ZXJGbiwgKGxvb3BDb3VudCB8fCAwKSArIDEpO1xuICB9XG5cbiAgc3RhdGljIGZpcnN0PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4obm9kZTogVCwgZmlsdGVyRm4/OiBGaWx0ZXJGbjxUPik6IFQge1xuICAgIC8vIE5vZGUgaGFzIGNoaWxkcmVuOiBkaXZlIGludG8gY2hpbGRyZW5cbiAgICBjb25zdCBjaGlsZCA9IChub2RlLmNoaWxkcmVuIHx8IFtdKS5maW5kKChjKSA9PiB0aGlzLmZpcnN0KGMsIGZpbHRlckZuKSk7XG4gICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG5cbiAgICAvLyBOb2RlIG1hdGNoOiB1c2UgaXRcbiAgICByZXR1cm4gIWZpbHRlckZuIHx8IGZpbHRlckZuKG5vZGUpID8gbm9kZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBsYXN0TGVhZjxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KG5vZGU6IFQsIGZpbHRlckZuPzogRmlsdGVyRm48VD4pOiBUIHtcbiAgICAvLyBOb2RlIGhhcyBjaGlsZHJlbjogZGl2ZSBpbnRvIGNoaWxkcmVuXG4gICAgY29uc3QgY2hpbGRMZWFmID0gKG5vZGUuY2hpbGRyZW4gfHwgW10pXG4gICAgICAvLyBSZXZlcnNlIG9yZGVyIChhZnRlciBjbG9uZSlcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAubWFwKChjKSA9PiB0aGlzLmxhc3RMZWFmKGMsIGZpbHRlckZuKSlcbiAgICAgIC5maW5kKGlzTm90TmlsKTtcbiAgICBpZiAoY2hpbGRMZWFmKSByZXR1cm4gY2hpbGRMZWFmOyAvLyBPSywgZm91bmQgaW4gY2hpbGRyZW5cblxuICAgIC8vIE5vZGUgaXMgYSBsZWFmLCBvciBub3QgbWF0Y2ggZm91bmQgaW4gY2hpbGRyZW46IGNoZWNrIGN1cnJlbnRcbiAgICByZXR1cm4gIWZpbHRlckZuIHx8IGZpbHRlckZuKG5vZGUpID8gbm9kZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kQnlGaWx0ZXI8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxUPiAmIElFbnRpdHk8VD4+KG5vZGU6IFQsIGZpbHRlcjogRW50aXR5RmlsdGVyPGFueSwgVD4pOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlckZuID0gZmlsdGVyPy5hc0ZpbHRlckZuKCk7XG4gICAgaWYgKCFmaWx0ZXJGbikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGVtcHR5IGZpbHRlciBhcmd1bWVudCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyUmVjdXJzaXZlbHkobm9kZSwgZmlsdGVyRm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBtYXRjaGVzIGJhdGNoZXNcbiAgICpcbiAgICogQHBhcmFtIG5vZGVcbiAgICogQHBhcmFtIGZpbHRlclxuICAgKi9cbiAgc3RhdGljIGRlbGV0ZUJ5RmlsdGVyPFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8VD4gJiBJRW50aXR5PFQ+Pihub2RlOiBULCBmaWx0ZXI6IEVudGl0eUZpbHRlcjxhbnksIFQ+KTogVFtdIHtcbiAgICBjb25zdCBmaWx0ZXJGbiA9IGZpbHRlcj8uYXNGaWx0ZXJGbigpO1xuICAgIGlmICghZmlsdGVyRm4pIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBvciBlbXB0eSBmaWx0ZXIgYXJndW1lbnQnKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVJlY3Vyc2l2ZWx5KG5vZGUsIGZpbHRlckZuKTtcbiAgfVxuXG4gIHN0YXRpYyBmaWx0ZXJSZWN1cnNpdmVseTxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KG5vZGU6IFQsIGZpbHRlckZuOiAobjogVCkgPT4gYm9vbGVhbik6IFRbXSB7XG4gICAgcmV0dXJuIChub2RlPy5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKFxuICAgICAgKHJlcywgY2hpbGQpID0+IHJlcy5jb25jYXQodGhpcy5maWx0ZXJSZWN1cnNpdmVseShjaGlsZCwgZmlsdGVyRm4pKSxcbiAgICAgIC8vIEluaXQgcmVzdWx0XG4gICAgICBmaWx0ZXJGbihub2RlKSA/IFtub2RlXSA6IFtdXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWxldGVSZWN1cnNpdmVseTxUIGV4dGVuZHMgSVRyZWVJdGVtRW50aXR5PGFueT4+KG5vZGU6IFQsIGZpbHRlckZuOiAobjogVCkgPT4gYm9vbGVhbik6IFRbXSB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShub2RlLmNoaWxkcmVuKSkgcmV0dXJuIFtdOyAvLyBTa2lwXG5cbiAgICAvLyBEZWxldGUgY2hpbGRyZW5cbiAgICBjb25zdCBkZWxldGVkQ2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmZpbHRlcihmaWx0ZXJGbik7XG4gICAgbm9kZS5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKChjKSA9PiAhZGVsZXRlZENoaWxkcmVuLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFRPRE86IGFkZCBhbiBvcHRpb25zIHRvIGNsZWFuIHRoZSBwYXJlbnRcbiAgICAvL2RlbGV0ZWRDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG51bGwpO1xuXG4gICAgLy8gUmVjdXJzaXZlIGNhbGwsIGluIHN0aWxsIGV4aXN0aW5nIGNoaWxkcmVuXG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ucmVkdWNlKChyZXMsIGMpID0+IHJlcy5jb25jYXQoLi4udGhpcy5kZWxldGVSZWN1cnNpdmVseShjLCBmaWx0ZXJGbikpLCBkZWxldGVkQ2hpbGRyZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0IGVhY2ggbm9kZSwgZnJvbSByb290IHRvIGxlYWZcbiAgICpcbiAgICogQHBhcmFtIG5vZGVcbiAgICogQHBhcmFtIGFjdGlvblxuICAgKi9cbiAgc3RhdGljIHZpc2l0PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4obm9kZTogVCwgYWN0aW9uOiAoaXRlbTogVCkgPT4gdm9pZCkge1xuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcHBsaXF1ZXIgbCdhY3Rpb24gc3VyIGxlIG7Fk3VkIGFjdHVlbFxuICAgIGFjdGlvbihub2RlKTtcblxuICAgIC8vIFBhcmNvdXJpciBsZXMgZW5mYW50c1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLnZpc2l0KGNoaWxkLCBhY3Rpb24pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmlzaXQgZWFjaCBub2RlLCBmcm9tIGxlYWYgdG8gcm9vdFxuICAgKlxuICAgKiBAcGFyYW0gbm9kZVxuICAgKiBAcGFyYW0gYWN0aW9uXG4gICAqL1xuICBzdGF0aWMgdmlzaXRJbnZlcnNlPFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4obm9kZTogVCwgYWN0aW9uOiAoVCkgPT4gdm9pZCkge1xuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQYXJjb3VyaXIgbGVzIGVuZmFudHNcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gdGhpcy52aXNpdEludmVyc2UoY2hpbGQsIGFjdGlvbikpO1xuICAgIH1cblxuICAgIC8vIEFwcGxpcXVlciBsJ2FjdGlvbiBzdXIgbGUgbsWTdWQgYWN0dWVsXG4gICAgYWN0aW9uKG5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIGJhdGNoIGVudGl0eSB0cmVlIGludG8gYSBhcnJheSBsaXN0LiBUaGlzIG1ldGhvZCBrZWVwIGxpbmtzIHBhcmVudC9jaGlsZHJlbi5cbiAgICpcbiAgICogTWV0aG9kIHVzZWQgdG8gZmluZCBiYXRjaCB3aXRob3V0IGlkIChlLmcuIGJlZm9yZSBsb2NhbCBzdG9yYWdlKVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZVRvQXJyYXk8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihzb3VyY2U6IFQpOiBUW10ge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKFxuICAgICAgKHJlcywgYmF0Y2gpID0+IHtcbiAgICAgICAgYmF0Y2gucGFyZW50ID0gc291cmNlO1xuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLnRyZWVUb0FycmF5KGJhdGNoKSk7IC8vIHJlY3Vyc2l2ZSBjYWxsXG4gICAgICB9LFxuICAgICAgW3NvdXJjZV1cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGxpc3RPZlRyZWVUb0FycmF5PFQgZXh0ZW5kcyBJVHJlZUl0ZW1FbnRpdHk8YW55Pj4oc291cmNlczogVFtdKTogVFtdIHtcbiAgICBpZiAoIXNvdXJjZXMgfHwgIXNvdXJjZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc291cmNlcy5yZWR1Y2UoKHJlcywgc291cmNlKSA9PiByZXMuY29uY2F0KHRoaXMudHJlZVRvQXJyYXk8VD4oc291cmNlKSksIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWxsIHBhcmVudCBhdHRyaWJ1dGUsIG9mIGFsbCBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZUZpbGxQYXJlbnQ8VCBleHRlbmRzIElUcmVlSXRlbUVudGl0eTxhbnk+Pihzb3VyY2U6IFQpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIG51bGw7XG4gICAgKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGNoaWxkLnBhcmVudCA9IHNvdXJjZTtcbiAgICAgIHRoaXMudHJlZUZpbGxQYXJlbnQoY2hpbGQpOyAvLyBMb29wXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==