@sumaris-net/ngx-components 2.7.3-rc9 → 2.7.4-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 (281) hide show
  1. package/esm2022/src/app/admin/admin-routing.module.mjs +4 -4
  2. package/esm2022/src/app/admin/admin.module.mjs +4 -4
  3. package/esm2022/src/app/admin/services/person.service.mjs +3 -3
  4. package/esm2022/src/app/admin/services/validator/person.validator.mjs +3 -3
  5. package/esm2022/src/app/admin/users/users.mjs +4 -4
  6. package/esm2022/src/app/admin/users/users.module.mjs +4 -4
  7. package/esm2022/src/app/core/about/about.modal.mjs +3 -3
  8. package/esm2022/src/app/core/about/about.module.mjs +4 -4
  9. package/esm2022/src/app/core/account/account.module.mjs +4 -4
  10. package/esm2022/src/app/core/account/account.page.mjs +3 -3
  11. package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
  12. package/esm2022/src/app/core/account/token.table.mjs +3 -3
  13. package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
  14. package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
  15. package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
  16. package/esm2022/src/app/core/core.module.mjs +4 -4
  17. package/esm2022/src/app/core/core.testing.module.mjs +4 -4
  18. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +3 -3
  19. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
  20. package/esm2022/src/app/core/form/entity/editor.class.mjs +6 -6
  21. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
  22. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
  23. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
  24. package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
  25. package/esm2022/src/app/core/form/form.class.mjs +3 -3
  26. package/esm2022/src/app/core/form/form.module.mjs +4 -4
  27. package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
  28. package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
  29. package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
  30. package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
  31. package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
  32. package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
  33. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
  34. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
  35. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
  36. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
  37. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +3 -3
  38. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +4 -4
  39. package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
  40. package/esm2022/src/app/core/graphql/graphql.service.mjs +3 -3
  41. package/esm2022/src/app/core/home/home.mjs +5 -5
  42. package/esm2022/src/app/core/home/home.module.mjs +4 -4
  43. package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
  44. package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
  45. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
  46. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
  47. package/esm2022/src/app/core/menu/menu.component.mjs +5 -5
  48. package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
  49. package/esm2022/src/app/core/menu/menu.service.mjs +3 -3
  50. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
  51. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +7 -6
  52. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +42 -7
  53. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
  54. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
  55. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
  56. package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
  57. package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
  58. package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
  59. package/esm2022/src/app/core/register/register.form.mjs +3 -3
  60. package/esm2022/src/app/core/register/register.modal.mjs +3 -3
  61. package/esm2022/src/app/core/register/register.module.mjs +4 -4
  62. package/esm2022/src/app/core/services/account.service.mjs +3 -3
  63. package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
  64. package/esm2022/src/app/core/services/base-entity-service.class.mjs +3 -3
  65. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
  66. package/esm2022/src/app/core/services/config/core.config.mjs +7 -1
  67. package/esm2022/src/app/core/services/config.service.mjs +3 -3
  68. package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
  69. package/esm2022/src/app/core/services/local-settings.service.mjs +17 -4
  70. package/esm2022/src/app/core/services/model/settings.model.mjs +1 -1
  71. package/esm2022/src/app/core/services/network.service.mjs +3 -3
  72. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
  73. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
  74. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
  75. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +4 -4
  76. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +3 -3
  77. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
  78. package/esm2022/src/app/core/services/platform.service.mjs +3 -3
  79. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
  80. package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
  81. package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
  82. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
  83. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +12 -10
  84. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
  85. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
  86. package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
  87. package/esm2022/src/app/core/settings/settings.page.mjs +13 -5
  88. package/esm2022/src/app/core/table/actions-column.component.mjs +5 -4
  89. package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
  90. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
  91. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
  92. package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
  93. package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
  94. package/esm2022/src/app/core/table/table.class.mjs +3 -3
  95. package/esm2022/src/app/core/table/table.module.mjs +4 -4
  96. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +7 -4
  97. package/esm2022/src/app/core/table/testing/table.testing.mjs +42 -23
  98. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
  99. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
  100. package/esm2022/src/app/core/table/testing/table2.testing.mjs +4 -4
  101. package/esm2022/src/app/shared/audio/audio.mjs +3 -3
  102. package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
  103. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
  104. package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
  105. package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
  106. package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
  107. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
  108. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
  109. package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
  110. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
  111. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
  112. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  113. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
  114. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  115. package/esm2022/src/app/shared/file/file.service.mjs +3 -3
  116. package/esm2022/src/app/shared/form/field.component.mjs +13 -9
  117. package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
  118. package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
  119. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
  120. package/esm2022/src/app/shared/help/help.modal.mjs +3 -3
  121. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
  122. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
  123. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
  124. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
  125. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
  126. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
  127. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
  128. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
  129. package/esm2022/src/app/shared/image/image.module.mjs +4 -4
  130. package/esm2022/src/app/shared/image/image.service.mjs +3 -3
  131. package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
  132. package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
  133. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +12 -8
  134. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
  135. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +25 -21
  136. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
  137. package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
  138. package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
  139. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
  140. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +5 -5
  141. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +8 -5
  142. package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
  143. package/esm2022/src/app/shared/material/chips/material.chips.mjs +7 -6
  144. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +6 -5
  145. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
  146. package/esm2022/src/app/shared/material/datetime/material.date.mjs +14 -6
  147. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +5 -5
  148. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +72 -43
  149. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +18 -17
  150. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +14 -13
  151. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +11 -12
  152. package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
  153. package/esm2022/src/app/shared/material/duration/material.duration.mjs +11 -12
  154. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +10 -11
  155. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +18 -13
  156. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
  157. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +9 -5
  158. package/esm2022/src/app/shared/material/material.config.mjs +2 -1
  159. package/esm2022/src/app/shared/material/material.module.mjs +4 -4
  160. package/esm2022/src/app/shared/material/material.testing.module.mjs +4 -4
  161. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
  162. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
  163. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +13 -12
  164. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
  165. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
  166. package/esm2022/src/app/shared/material/testing/common.test.mjs +18 -14
  167. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +7 -6
  168. package/esm2022/src/app/shared/material/text/text-form.component.mjs +10 -6
  169. package/esm2022/src/app/shared/material/text/text-form.module.mjs +4 -4
  170. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
  171. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
  172. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
  173. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +24 -24
  174. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
  175. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
  176. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
  177. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
  178. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
  179. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
  180. package/esm2022/src/app/shared/pipes/form.pipes.mjs +18 -18
  181. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
  182. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
  183. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
  184. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +40 -19
  185. package/esm2022/src/app/shared/pipes/math.pipes.mjs +12 -12
  186. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
  187. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +4 -4
  188. package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
  189. package/esm2022/src/app/shared/pipes/property.pipes.mjs +7 -7
  190. package/esm2022/src/app/shared/pipes/string.pipes.mjs +34 -32
  191. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
  192. package/esm2022/src/app/shared/pipes/types.pipes.mjs +12 -12
  193. package/esm2022/src/app/shared/rx-state.module.mjs +4 -4
  194. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
  195. package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
  196. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
  197. package/esm2022/src/app/shared/services/startable-service.class.mjs +3 -3
  198. package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
  199. package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
  200. package/esm2022/src/app/shared/shared.module.mjs +4 -4
  201. package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
  202. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
  203. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
  204. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
  205. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
  206. package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
  207. package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
  208. package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
  209. package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
  210. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
  211. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
  212. package/esm2022/src/app/shared/toolbar/toolbar.mjs +3 -3
  213. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
  214. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
  215. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
  216. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
  217. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
  218. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
  219. package/esm2022/src/app/social/job/job.module.mjs +4 -4
  220. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
  221. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +8 -4
  222. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
  223. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +11 -7
  224. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
  225. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
  226. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
  227. package/esm2022/src/app/social/message/message.form.mjs +3 -3
  228. package/esm2022/src/app/social/message/message.modal.mjs +3 -3
  229. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  230. package/esm2022/src/app/social/message/message.service.mjs +3 -3
  231. package/esm2022/src/app/social/social.module.mjs +4 -4
  232. package/esm2022/src/app/social/social.testing.module.mjs +4 -4
  233. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +14 -12
  234. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
  235. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
  236. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
  237. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
  238. package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
  239. package/esm2022/src/app/social/user-event/user-event.service.mjs +8 -6
  240. package/esm2022/src/environments/environment.class.mjs +4 -2
  241. package/esm2022/src/environments/environment.loader.mjs +3 -3
  242. package/esm2022/src/environments/environment.mjs +3 -1
  243. package/fesm2022/sumaris-net.ngx-components.mjs +1372 -1174
  244. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  245. package/package.json +11 -11
  246. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  247. package/src/app/core/menu/testing/menu.testing.d.ts +10 -2
  248. package/src/app/core/services/config/core.config.d.ts +1 -0
  249. package/src/app/core/services/local-settings.service.d.ts +2 -0
  250. package/src/app/core/services/model/settings.model.d.ts +1 -0
  251. package/src/app/core/settings/settings.page.d.ts +2 -0
  252. package/src/app/shared/form/field.component.d.ts +5 -3
  253. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -0
  254. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +3 -2
  255. package/src/app/shared/material/datetime/material.date.d.ts +3 -2
  256. package/src/app/shared/material/datetime/material.dateshort.d.ts +1 -1
  257. package/src/app/shared/material/datetime/material.datetime.d.ts +25 -22
  258. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +2 -2
  259. package/src/app/shared/material/duration/material.duration.d.ts +1 -1
  260. package/src/app/shared/material/latlong/material.latlong.d.ts +5 -3
  261. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +4 -0
  262. package/src/app/shared/material/material.config.d.ts +2 -1
  263. package/src/app/shared/material/text/text-form.component.d.ts +3 -1
  264. package/src/app/shared/pipes/string.pipes.d.ts +2 -1
  265. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -4
  266. package/src/assets/i18n/en-US.json +1 -0
  267. package/src/assets/i18n/en.json +1 -0
  268. package/src/assets/i18n/fr.json +1 -0
  269. package/src/assets/manifest.json +1 -1
  270. package/src/environments/environment.class.d.ts +2 -1
  271. package/src/theme/_ionic.globals.scss +4 -1
  272. package/src/theme/_material.globals.scss +1 -36
  273. package/src/theme/_material.scss +30 -8
  274. package/src/theme/_mixins.scss +20 -5
  275. package/src/theme/_ngx-components.forms.scss +203 -0
  276. package/src/theme/_ngx-components.globals.scss +10 -7
  277. package/src/theme/_ngx-components.scss +6 -198
  278. package/src/theme/_ngx-components.table.scss +137 -143
  279. package/src/theme/_ngx-components.tabs.scss +16 -1
  280. package/src/theme/_theme.scss +1 -0
  281. package/src/theme/_theme.variables.scss +170 -0
@@ -8,13 +8,13 @@ import { isMobile } from '../../platforms';
8
8
  import { IonicSlides } from '@ionic/angular';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@angular/forms";
11
- import * as i2 from "@angular/common";
12
- import * as i3 from "@ionic/angular";
13
- import * as i4 from "@angular/material/button";
14
- import * as i5 from "@angular/material/icon";
15
- import * as i6 from "@ngx-translate/core";
16
- import * as i7 from "@angular/material/form-field";
17
- import * as i8 from "@angular/material/input";
11
+ import * as i2 from "@ionic/angular";
12
+ import * as i3 from "@angular/material/button";
13
+ import * as i4 from "@angular/material/icon";
14
+ import * as i5 from "@ngx-translate/core";
15
+ import * as i6 from "@angular/material/form-field";
16
+ import * as i7 from "@angular/material/input";
17
+ import * as i8 from "@angular/common";
18
18
  import * as i9 from "../../pipes/types.pipes";
19
19
  const DEFAULT_VALUE_ACCESSOR = {
20
20
  provide: NG_VALUE_ACCESSOR,
@@ -52,6 +52,7 @@ export class MatSwipeField {
52
52
  displayWith;
53
53
  displayAttributes;
54
54
  appAutofocus;
55
+ // eslint-disable-next-line @angular-eslint/no-input-rename
55
56
  classList;
56
57
  set tabindex(value) {
57
58
  if (this._tabindex !== value) {
@@ -304,12 +305,12 @@ export class MatSwipeField {
304
305
  await firstTruePromise(this.$loaded);
305
306
  }
306
307
  }
307
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: MatSwipeField, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
308
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: MatSwipeField, selector: "mat-swipe-field", inputs: { logPrefix: "logPrefix", formControl: "formControl", formControlName: "formControlName", floatLabel: "floatLabel", appearance: "appearance", placeholder: "placeholder", debug: "debug", required: "required", mobile: "mobile", clearable: "clearable", equals: "equals", displayWith: "displayWith", displayAttributes: "displayAttributes", appAutofocus: "appAutofocus", classList: ["class", "classList"], tabindex: "tabindex", items: "items" }, outputs: { onClick: "click", blurred: "blur", focused: "focus" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "fakeInput", first: true, predicate: ["fakeInput"], descendants: true }, { propertyName: "swiperRef", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "prevButton", first: true, predicate: ["prevButton"], descendants: true }, { propertyName: "nextButton", first: true, predicate: ["nextButton"], descendants: true }], ngImport: i0, template: "<mat-form-field\n [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\"\n>\n <mat-label *ngIf=\"!!placeholder && floatLabel !== 'never'\">\n {{ placeholder }}\n </mat-label>\n <input\n matInput\n #fakeInput\n type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\"\n />\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <swiper-container\n #swiper\n [modules]=\"swiperModules\"\n [speed]=\"100\"\n [slidesPerView]=\"1\"\n (init)=\"swiperLoaded()\"\n (reachbeginning)=\"reachStart(true)\"\n (reachend)=\"reachEnd(true)\"\n (slidenexttransitionend)=\"reachStart(false)\"\n (slideprevtransitionend)=\"reachEnd(false)\"\n (slidechange)=\"slideChanged()\"\n >\n <swiper-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </swiper-slide>\n </swiper-container>\n </div>\n\n <button\n #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n</mat-form-field>\n", styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container{padding-inline-start:40px;padding-inline-end:40px}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-prev,.button-next{width:24px;height:24px;padding:0;position:absolute;top:15px;z-index:10}.button-prev ion-icon,.button-prev .mat-icon,.button-next ion-icon,.button-next .mat-icon{font-size:calculateRem(18px);line-height:1.125}.button-prev .mat-mdc-button-touch-target,.button-next .mat-mdc-button-touch-target{width:24px}.button-prev{left:0;right:auto}.button-next{left:auto;right:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.AsFloatLabelTypePipe, name: "asFloatLabelType" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
308
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MatSwipeField, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
309
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MatSwipeField, selector: "mat-swipe-field", inputs: { logPrefix: "logPrefix", formControl: "formControl", formControlName: "formControlName", floatLabel: "floatLabel", appearance: "appearance", placeholder: "placeholder", debug: "debug", required: "required", mobile: "mobile", clearable: "clearable", equals: "equals", displayWith: "displayWith", displayAttributes: "displayAttributes", appAutofocus: "appAutofocus", classList: ["class", "classList"], tabindex: "tabindex", items: "items" }, outputs: { onClick: "click", blurred: "blur", focused: "focus" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "fakeInput", first: true, predicate: ["fakeInput"], descendants: true }, { propertyName: "swiperRef", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "prevButton", first: true, predicate: ["prevButton"], descendants: true }, { propertyName: "nextButton", first: true, predicate: ["nextButton"], descendants: true }], ngImport: i0, template: "<mat-form-field\n [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input\n matInput\n #fakeInput\n type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\"\n />\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <swiper-container\n #swiper\n [modules]=\"swiperModules\"\n [speed]=\"100\"\n [slidesPerView]=\"1\"\n (init)=\"swiperLoaded()\"\n (reachbeginning)=\"reachStart(true)\"\n (reachend)=\"reachEnd(true)\"\n (slidenexttransitionend)=\"reachStart(false)\"\n (slideprevtransitionend)=\"reachEnd(false)\"\n (slidechange)=\"slideChanged()\"\n >\n @for (item of $items | async; track item) {\n <swiper-slide>\n <ion-label>{{ displayWith(item) }}</ion-label>\n </swiper-slide>\n }\n </swiper-container>\n </div>\n\n <button\n #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @if (formControl.hasError('entity')) {\n <mat-error translate>ERROR.FIELD_INVALID</mat-error>\n }\n</mat-form-field>\n", styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container{padding-inline-start:40px;padding-inline-end:40px}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-prev,.button-next{width:24px;height:24px;padding:0;position:absolute;top:15px;z-index:10}.button-prev ion-icon,.button-prev .mat-icon,.button-next ion-icon,.button-next .mat-icon{font-size:calculateRem(18px);line-height:1.125}.button-prev .mat-mdc-button-touch-target,.button-next .mat-mdc-button-touch-target{width:24px}.button-prev{left:0;right:auto}.button-next{left:auto;right:5px}\n"], dependencies: [{ kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.AsFloatLabelTypePipe, name: "asFloatLabelType" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
309
310
  }
310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: MatSwipeField, decorators: [{
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MatSwipeField, decorators: [{
311
312
  type: Component,
312
- args: [{ selector: 'mat-swipe-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field\n [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\"\n>\n <mat-label *ngIf=\"!!placeholder && floatLabel !== 'never'\">\n {{ placeholder }}\n </mat-label>\n <input\n matInput\n #fakeInput\n type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\"\n />\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <swiper-container\n #swiper\n [modules]=\"swiperModules\"\n [speed]=\"100\"\n [slidesPerView]=\"1\"\n (init)=\"swiperLoaded()\"\n (reachbeginning)=\"reachStart(true)\"\n (reachend)=\"reachEnd(true)\"\n (slidenexttransitionend)=\"reachStart(false)\"\n (slideprevtransitionend)=\"reachEnd(false)\"\n (slidechange)=\"slideChanged()\"\n >\n <swiper-slide *ngFor=\"let item of $items | async\">\n <ion-label>{{ displayWith(item) }}</ion-label>\n </swiper-slide>\n </swiper-container>\n </div>\n\n <button\n #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n</mat-form-field>\n", styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container{padding-inline-start:40px;padding-inline-end:40px}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-prev,.button-next{width:24px;height:24px;padding:0;position:absolute;top:15px;z-index:10}.button-prev ion-icon,.button-prev .mat-icon,.button-next ion-icon,.button-next .mat-icon{font-size:calculateRem(18px);line-height:1.125}.button-prev .mat-mdc-button-touch-target,.button-next .mat-mdc-button-touch-target{width:24px}.button-prev{left:0;right:auto}.button-next{left:auto;right:5px}\n"] }]
313
+ args: [{ selector: 'mat-swipe-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field\n [floatLabel]=\"showSlides && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [class]=\"classList\"\n [class.mat-form-field-disabled]=\"disabled\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input\n matInput\n #fakeInput\n type=\"text\"\n [formControl]=\"formControl\"\n [readonly]=\"true\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showSlides\"\n [tabindex]=\"tabindex\"\n />\n\n <div class=\"slides-container\" [class.hidden]=\"!showSlides\">\n <swiper-container\n #swiper\n [modules]=\"swiperModules\"\n [speed]=\"100\"\n [slidesPerView]=\"1\"\n (init)=\"swiperLoaded()\"\n (reachbeginning)=\"reachStart(true)\"\n (reachend)=\"reachEnd(true)\"\n (slidenexttransitionend)=\"reachStart(false)\"\n (slideprevtransitionend)=\"reachEnd(false)\"\n (slidechange)=\"slideChanged()\"\n >\n @for (item of $items | async; track item) {\n <swiper-slide>\n <ion-label>{{ displayWith(item) }}</ion-label>\n </swiper-slide>\n }\n </swiper-container>\n </div>\n\n <button\n #prevButton\n mat-icon-button\n type=\"button\"\n class=\"button-prev\"\n [hidden]=\"!showSlides\"\n [disabled]=\"previousDisabled\"\n (click)=\"previous()\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n #nextButton\n mat-icon-button\n type=\"button\"\n class=\"button-next\"\n [hidden]=\"!showSlides\"\n [disabled]=\"nextDisabled\"\n (click)=\"next()\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @if (formControl.hasError('entity')) {\n <mat-error translate>ERROR.FIELD_INVALID</mat-error>\n }\n</mat-form-field>\n", styles: [":host{display:inline-block;width:100%;position:relative}input.hidden{display:none}.slides-container{padding-inline-start:40px;padding-inline-end:40px}.slides-container .swiper-slide{font-size:16px!important}.slides-container.hidden{visibility:hidden;height:0!important}.button-prev,.button-next{width:24px;height:24px;padding:0;position:absolute;top:15px;z-index:10}.button-prev ion-icon,.button-prev .mat-icon,.button-next ion-icon,.button-next .mat-icon{font-size:calculateRem(18px);line-height:1.125}.button-prev .mat-mdc-button-touch-target,.button-next .mat-mdc-button-touch-target{width:24px}.button-prev{left:0;right:auto}.button-next{left:auto;right:5px}\n"] }]
313
314
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupDirective, decorators: [{
314
315
  type: Optional
315
316
  }] }], propDecorators: { logPrefix: [{
@@ -369,4 +370,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
369
370
  type: ViewChild,
370
371
  args: ['nextButton']
371
372
  }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuc3dpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9zd2lwZS9tYXRlcmlhbC5zd2lwZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N3aXBlL21hdGVyaWFsLnN3aXBlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQUk3QyxNQUFNLHNCQUFzQixHQUFhO0lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDNUMsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBU0YsTUFBTSxPQUFPLGFBQWE7SUErRlo7SUFDVTtJQS9GZCxpQkFBaUIsR0FBcUIsSUFBSSxDQUFDO0lBQzNDLGtCQUFrQixHQUFlLElBQUksQ0FBQztJQUN0QyxNQUFNLENBQU07SUFDWixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxrQkFBa0IsQ0FBZTtJQUNqQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFNBQVMsQ0FBUztJQUNsQixPQUFPLENBQVM7SUFDZCxnQkFBZ0IsQ0FBVTtJQUMxQixZQUFZLENBQVU7SUFDdEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVEsU0FBUyxDQUFDLENBQUM7SUFDL0MsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRTlDLGFBQWEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRS9CLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztJQUNoQyxXQUFXLENBQXFCO0lBQ2hDLGVBQWUsQ0FBUztJQUN4QixVQUFVLENBQW9CO0lBQzlCLFVBQVUsQ0FBeUI7SUFDbkMsV0FBVyxDQUFTO0lBQ3BCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLE1BQU0sQ0FBVTtJQUNoQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE1BQU0sQ0FBa0I7SUFDeEIsV0FBVyxDQUFtQjtJQUM5QixpQkFBaUIsQ0FBVztJQUM1QixZQUFZLENBQVU7SUFDZixTQUFTLENBQVM7SUFFbEMsSUFBYSxRQUFRLENBQUMsS0FBYTtRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLEtBQUssQ0FBQyxLQUFnQztRQUNqRCxvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMseUJBQXlCLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFjLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDO0lBRUQsNERBQTREO0lBQzNDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO0lBQzFELDREQUE0RDtJQUM1QyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztJQUN6RCw0REFBNEQ7SUFDM0MsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7SUFFbEMsU0FBUyxDQUFhO0lBQ1AsU0FBUyxDQUF5QjtJQUNoRCxVQUFVLENBQVk7SUFDdEIsVUFBVSxDQUFZO0lBRS9DLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFDWSxFQUFxQixFQUNYLFlBQWdDO1FBRDFDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ1gsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBQ25ELENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFnQixDQUFDO1FBQzdELElBQUksQ0FBQyxXQUFXO1lBQ2QsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBd0IsQ0FBQyxDQUFDO1FBQzlJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0ZBQXNGLENBQUMsQ0FBQztRQUUvSCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBaUI7UUFDakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLHNCQUFzQjtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPO1FBRTNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBWTtRQUNyQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUV4QyxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFnQjtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBZ0I7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU87UUFFaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUN2RSxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDhCQUE4QixXQUFXLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCw0QkFBNEI7SUFFcEIsVUFBVSxDQUFDLElBQWE7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQVk7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN2RyxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxPQUFPLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsK0JBQStCLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsS0FBSyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFFLENBQUM7SUFFRCxlQUFlO0lBQ2YsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsY0FBYztRQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO3VHQWhVVSxhQUFhOzJGQUFiLGFBQWEsNmlCQUhiLENBQUMsc0JBQXNCLENBQUMsNFpDckNyQyw0cUVBOEVBOzsyRkR0Q2EsYUFBYTtrQkFQekIsU0FBUzsrQkFDRSxpQkFBaUIsYUFHaEIsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFDbEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBa0c1QyxRQUFRO3lDQS9FRixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO3VCQUFDLE9BQU87Z0JBRUQsUUFBUTtzQkFBcEIsS0FBSztnQkFXTyxLQUFLO3NCQUFqQixLQUFLO2dCQTJCVyxPQUFPO3NCQUF2QixNQUFNO3VCQUFDLE9BQU87Z0JBRUMsT0FBTztzQkFBdEIsTUFBTTt1QkFBQyxNQUFNO2dCQUVHLE9BQU87c0JBQXZCLE1BQU07dUJBQUMsT0FBTztnQkFFUyxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ2lCLFNBQVM7c0JBQS9DLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDWixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgbm9vcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOb3ROaWwsIGpvaW5Qcm9wZXJ0aWVzUGF0aCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dEVsZW1lbnQsIHNlbGVjdElucHV0Q29udGVudCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSwgRGlzcGxheUZuLCBFcXVhbHNGbiB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgZmlyc3RUcnVlUHJvbWlzZSB9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IFN3aXBlciB9IGZyb20gJ3N3aXBlci90eXBlcyc7XG5pbXBvcnQgeyBJb25pY1NsaWRlcyB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0U3dpcGVGaWVsZCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LXN3aXBlLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuc3dpcGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuc3dpcGUuaHRtbCcsXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0U3dpcGVGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgSW5wdXRFbGVtZW50LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9pdGVtc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF93cml0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX3N3aXBlcjogU3dpcGVyO1xuICBwcm90ZWN0ZWQgcHJldmlvdXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIG5leHREaXNhYmxlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHNob3dTbGlkZXMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkICRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCAkbG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIHN3aXBlck1vZHVsZXMgPSBbSW9uaWNTbGlkZXNdO1xuXG4gIEBJbnB1dCgpIGxvZ1ByZWZpeCA9ICdbbWF0LXN3aXBlLWZpZWxkXSc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZTtcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZGVidWcgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZXF1YWxzOiBFcXVhbHNGbiB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlXaXRoOiBEaXNwbGF5Rm4gfCBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5QXR0cmlidXRlczogc3RyaW5nW107XG4gIEBJbnB1dCgpIGFwcEF1dG9mb2N1czogYm9vbGVhbjtcbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX3RhYmluZGV4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IE9ic2VydmFibGU8YW55W10+IHwgYW55W10pIHtcbiAgICAvLyBSZW1vdmUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIG9uIGl0ZW1zLCAoaWYgZXhpdHMpXG4gICAgaWYgKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5sb2dQcmVmaXh9IEl0ZW1zIHJlY2VpdmVkIHR3aWNlICFgKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24gPSB2YWx1ZS5zdWJzY3JpYmUoKHYpID0+IHRoaXMubG9hZEl0ZW1zKHYpKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5sb2FkSXRlbXModmFsdWUgYXMgYW55W10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy4kaXRlbXMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBpdGVtQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkgfHwgW10pLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdjbGljaycpIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdibHVyJykgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdmYWtlSW5wdXQnKSBmYWtlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N3aXBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHN3aXBlclJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcbiAgQFZpZXdDaGlsZCgncHJldkJ1dHRvbicpIHByZXZCdXR0b246IE1hdEJ1dHRvbjtcbiAgQFZpZXdDaGlsZCgnbmV4dEJ1dHRvbicpIG5leHRCdXR0b246IE1hdEJ1dHRvbjtcblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc3dpcGVyID0gdGhpcy5zd2lwZXJSZWYubmF0aXZlRWxlbWVudC5zd2lwZXIgYXMgU3dpcGVyO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPVxuICAgICAgdGhpcy5mb3JtQ29udHJvbCB8fCAodGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgKHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wpKTtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSAnZm9ybUNvbnRyb2wnIG9yICdmb3JtQ29udHJvbE5hbWUnIGluIDxtYXQtc3dpcGUtZmllbGQ+LlwiKTtcblxuICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggfHwgKChvYmopID0+IG9iaiAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzKSk7XG4gICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyB8fCAoKG8xOiBhbnksIG8yOiBhbnkpID0+IG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZCk7XG4gICAgdGhpcy5tb2JpbGUgPSBpc05vdE5pbCh0aGlzLm1vYmlsZSkgPyB0aGlzLm1vYmlsZSA6IGlzTW9iaWxlKHdpbmRvdyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiRpdGVtcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgX29uRm9jdXNGYWtlSW5wdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gSGlkZSB0aGUgZmFrZSBpbnB1dFxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBidXR0b25cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICAvLyBzaG93IHNsaWRlcyBjb21wb25lbnRcbiAgICB0aGlzLnNob3dTbGlkZXMgPSB0cnVlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcmV2QnV0dG9uKSB7XG4gICAgICAgIHRoaXMucHJldkJ1dHRvbi5mb2N1cygpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzTmlsKHRoaXMuX3ZhbHVlKSkge1xuICAgICAgLy8gU2xpZGUgdG8gZmlyc3QgYW5kIGFmZmVjdCB2YWx1ZVxuICAgICAgdGhpcy5zbGlkZVRvKDApO1xuICAgICAgdGhpcy5zbGlkZUNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2UsIHRoaXMgY29tcG9uZW50IGhhcyBhIHRlbXBvcmFyeSBjb21wb25lbnQgZGlzcGxheWVkIGJlZm9yZSB0aGUgZmlyc3QgZm9jdXMgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVGFiSW5kZXgoKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuX3RhYmluZGV4KSB8fCB0aGlzLl90YWJpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgaWYgKHRoaXMuc2hvd1NsaWRlcykge1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5fdGFiaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnByZXZCdXR0b24gJiYgdGhpcy5uZXh0QnV0dG9uKSB7XG4gICAgICB0aGlzLnByZXZCdXR0b24uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1NsaWRlcyA/IHRoaXMuX3RhYmluZGV4IDogLTE7XG4gICAgICB0aGlzLm5leHRCdXR0b24uX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1NsaWRlcyA/IHRoaXMuX3RhYmluZGV4ICsgMSA6IC0xO1xuICAgIH1cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy5lcXVhbHModmFsdWUsIHRoaXMuX3ZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2hvd1NsaWRlcyA9IGlzTm90TmlsKHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMudXBkYXRlU2xpZGVzKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgfVxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbGVhclZhbHVlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBjbGVhciB2YWx1ZWApO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5zaG93U2xpZGVzID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgICB0aGlzLnNsaWRlVG8oMCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKG51bGwpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMubG9ja1N3aXBlcyhpc0Rpc2FibGVkKTtcbiAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuXG4gIHByZXZpb3VzKCkge1xuICAgIHRoaXMuX3N3aXBlci5zbGlkZVByZXYoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fc3dpcGVyLnNsaWRlTmV4dCgpO1xuICB9XG5cbiAgcmVhY2hTdGFydChyZWFjaGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wcmV2aW91c0Rpc2FibGVkID0gcmVhY2hlZDtcbiAgfVxuXG4gIHJlYWNoRW5kKHJlYWNoZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm5leHREaXNhYmxlZCA9IHJlYWNoZWQ7XG4gIH1cblxuICBzd2lwZXJMb2FkZWQoKSB7XG4gICAgY29uc29sZS5sb2coJ1RPRE8gc3dpcGVyIGluaXQnKTtcbiAgICB0aGlzLl9zd2lwZXIgPSB0aGlzLnN3aXBlclJlZi5uYXRpdmVFbGVtZW50LnN3aXBlcjtcbiAgICB0aGlzLiRsb2FkZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHNsaWRlQ2hhbmdlZCgpIHtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX3N3aXBlci5hY3RpdmVJbmRleDtcbiAgICBpZiAodGhpcy5fd3JpdGluZyB8fCBpc05pbChhY3RpdmVJbmRleCkpIHJldHVybjtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkgfHwgW10pW2FjdGl2ZUluZGV4XSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IHNsaWRlIGNoYW5nZWQgQWN0aXZlSW5kZXg6JHthY3RpdmVJbmRleH0sIG5ldyB2YWx1ZToke3ZhbHVlfWApO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBsb2NrU3dpcGVzKGxvY2s6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zd2lwZXIuYWxsb3dTbGlkZU5leHQgPSAhbG9jaztcbiAgICB0aGlzLl9zd2lwZXIuYWxsb3dTbGlkZVByZXYgPSAhbG9jaztcbiAgICB0aGlzLl9zd2lwZXIuYWxsb3dUb3VjaE1vdmUgPSAhbG9jaztcbiAgICB0aGlzLl9zd2lwZXIudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRJdGVtcyhpdGVtczogYW55W10pIHtcbiAgICB0aGlzLiRsb2FkZWQubmV4dChmYWxzZSk7XG4gICAgdGhpcy4kaXRlbXMubmV4dChpdGVtcyk7XG4gICAgdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4gdGhpcy5fc3dpcGVyLnVwZGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2xpZGVzKCkge1xuICAgIGlmICh0aGlzLnNob3dTbGlkZXMpIHtcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9ICh0aGlzLiRpdGVtcy5nZXRWYWx1ZSgpIHx8IFtdKS5maW5kSW5kZXgoKHZhbHVlKSA9PiB0aGlzLmVxdWFscyh2YWx1ZSwgdGhpcy5fdmFsdWUpKTtcbiAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLnNsaWRlVG8oaXRlbUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLmxvZ1ByZWZpeH0gSXRlbSBub3QgZm91bmRgLCB0aGlzLl92YWx1ZSk7XG4gICAgICAgIHRoaXMuc2xpZGVUbygwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNsaWRlVG8oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3N3aXBlci5zbGlkZVRvKGluZGV4LCAwLCBmYWxzZSk7XG4gICAgdGhpcy5fc3dpcGVyLnVwZGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQnV0dG9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVCdXR0b25zKCkge1xuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSB1cGRhdGUgYnV0dG9ucyBBY3RpdmVJbmRleDoke2FjdGl2ZUluZGV4fWApO1xuICAgIHRoaXMucHJldmlvdXNEaXNhYmxlZCA9IGFjdGl2ZUluZGV4ID09PSAwIHx8IHRoaXMuZGlzYWJsZWQ7XG4gICAgdGhpcy5uZXh0RGlzYWJsZWQgPSBhY3RpdmVJbmRleCA9PT0gdGhpcy5pdGVtQ291bnQgLSAxIHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBub3QgdXNlZCAuLi5cbiAgYXN5bmMgZ2V0U3dpcGVyKCk6IFByb21pc2U8U3dpcGVyPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLl9zd2lwZXI7XG4gIH1cblxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBXYWl0IGxvYWRlZFxuICAgIGlmICh0aGlzLiRsb2FkZWQuZ2V0VmFsdWUoKSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSB3YWl0aW5nIHNsaWRlcyB0byBiZSByZWFkeS4uLmApO1xuICAgICAgYXdhaXQgZmlyc3RUcnVlUHJvbWlzZSh0aGlzLiRsb2FkZWQpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkXG4gIFtmbG9hdExhYmVsXT1cInNob3dTbGlkZXMgJiYgKCFmbG9hdExhYmVsIHx8IGZsb2F0TGFiZWwgPT09ICdhdXRvJykgPyAnYWx3YXlzJyA6IChmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZSlcIlxuICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgW2NsYXNzXT1cImNsYXNzTGlzdFwiXG4gIFtjbGFzcy5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4+XG4gIDxtYXQtbGFiZWwgKm5nSWY9XCIhIXBsYWNlaG9sZGVyICYmIGZsb2F0TGFiZWwgIT09ICduZXZlcidcIj5cbiAgICB7eyBwbGFjZWhvbGRlciB9fVxuICA8L21hdC1sYWJlbD5cbiAgPGlucHV0XG4gICAgbWF0SW5wdXRcbiAgICAjZmFrZUlucHV0XG4gICAgdHlwZT1cInRleHRcIlxuICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgIChmb2N1cyk9XCJfb25Gb2N1c0Zha2VJbnB1dCgkZXZlbnQpXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cInNob3dTbGlkZXNcIlxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gIC8+XG5cbiAgPGRpdiBjbGFzcz1cInNsaWRlcy1jb250YWluZXJcIiBbY2xhc3MuaGlkZGVuXT1cIiFzaG93U2xpZGVzXCI+XG4gICAgPHN3aXBlci1jb250YWluZXJcbiAgICAgICNzd2lwZXJcbiAgICAgIFttb2R1bGVzXT1cInN3aXBlck1vZHVsZXNcIlxuICAgICAgW3NwZWVkXT1cIjEwMFwiXG4gICAgICBbc2xpZGVzUGVyVmlld109XCIxXCJcbiAgICAgIChpbml0KT1cInN3aXBlckxvYWRlZCgpXCJcbiAgICAgIChyZWFjaGJlZ2lubmluZyk9XCJyZWFjaFN0YXJ0KHRydWUpXCJcbiAgICAgIChyZWFjaGVuZCk9XCJyZWFjaEVuZCh0cnVlKVwiXG4gICAgICAoc2xpZGVuZXh0dHJhbnNpdGlvbmVuZCk9XCJyZWFjaFN0YXJ0KGZhbHNlKVwiXG4gICAgICAoc2xpZGVwcmV2dHJhbnNpdGlvbmVuZCk9XCJyZWFjaEVuZChmYWxzZSlcIlxuICAgICAgKHNsaWRlY2hhbmdlKT1cInNsaWRlQ2hhbmdlZCgpXCJcbiAgICA+XG4gICAgICA8c3dpcGVyLXNsaWRlICpuZ0Zvcj1cImxldCBpdGVtIG9mICRpdGVtcyB8IGFzeW5jXCI+XG4gICAgICAgIDxpb24tbGFiZWw+e3sgZGlzcGxheVdpdGgoaXRlbSkgfX08L2lvbi1sYWJlbD5cbiAgICAgIDwvc3dpcGVyLXNsaWRlPlxuICAgIDwvc3dpcGVyLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGJ1dHRvblxuICAgICNwcmV2QnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidXR0b24tcHJldlwiXG4gICAgW2hpZGRlbl09XCIhc2hvd1NsaWRlc1wiXG4gICAgW2Rpc2FibGVkXT1cInByZXZpb3VzRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcbiAgPlxuICAgIDxtYXQtaWNvbj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgICNuZXh0QnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXG4gICAgW2hpZGRlbl09XCIhc2hvd1NsaWRlc1wiXG4gICAgW2Rpc2FibGVkXT1cIm5leHREaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gID5cbiAgICA8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBtYXRTdWZmaXhcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAqbmdJZj1cImNsZWFyYWJsZVwiXG4gICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoJGV2ZW50KVwiXG4gICAgW2hpZGRlbl09XCJkaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICA+XG4gICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG5cbiAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcignZW50aXR5JylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfSU5WQUxJRDwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuc3dpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9zd2lwZS9tYXRlcmlhbC5zd2lwZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N3aXBlL21hdGVyaWFsLnN3aXBlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQUk3QyxNQUFNLHNCQUFzQixHQUFhO0lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDNUMsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBU0YsTUFBTSxPQUFPLGFBQWE7SUFnR1o7SUFDVTtJQWhHZCxpQkFBaUIsR0FBcUIsSUFBSSxD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c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFByb3ZpZGVyLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaXNPYnNlcnZhYmxlLCBub29wLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRoIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IElucHV0RWxlbWVudCwgc2VsZWN0SW5wdXRDb250ZW50IH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlLCBEaXNwbGF5Rm4sIEVxdWFsc0ZuIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBmaXJzdFRydWVQcm9taXNlIH0gZnJvbSAnLi4vLi4vb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9wbGF0Zm9ybXMnO1xuaW1wb3J0IHsgU3dpcGVyIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcbmltcG9ydCB7IElvbmljU2xpZGVzIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRTd2lwZUZpZWxkKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtc3dpcGUtZmllbGQnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5zd2lwZS5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5zd2lwZS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRTd2lwZUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBJbnB1dEVsZW1lbnQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF92YWx1ZTogYW55O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2l0ZW1zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3dyaXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3dpcGVyOiBTd2lwZXI7XG4gIHByb3RlY3RlZCBwcmV2aW91c0Rpc2FibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgbmV4dERpc2FibGVkOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgc2hvd1NsaWRlcyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkICRsb2FkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgc3dpcGVyTW9kdWxlcyA9IFtJb25pY1NsaWRlc107XG5cbiAgQElucHV0KCkgbG9nUHJlZml4ID0gJ1ttYXQtc3dpcGUtZmllbGRdJztcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlO1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBkZWJ1ZyA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlcXVhbHM6IEVxdWFsc0ZuIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVdpdGg6IERpc3BsYXlGbiB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgYXBwQXV0b2ZvY3VzOiBib29sZWFuO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSkge1xuICAgIC8vIFJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gaXRlbXMsIChpZiBleGl0cylcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLmxvZ1ByZWZpeH0gSXRlbXMgcmVjZWl2ZWQgdHdpY2UgIWApO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbiA9IHZhbHVlLnN1YnNjcmliZSgodikgPT4gdGhpcy5sb2FkSXRlbXModikpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4kaXRlbXMuZ2V0VmFsdWUoKSkge1xuICAgICAgICB0aGlzLmxvYWRJdGVtcyh2YWx1ZSBhcyBhbnlbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGl0ZW1zKCk6IE9ic2VydmFibGU8YW55W10+IHwgYW55W10ge1xuICAgIHJldHVybiB0aGlzLiRpdGVtcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy4kaXRlbXMuZ2V0VmFsdWUoKSB8fCBbXSkubGVuZ3RoO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2NsaWNrJykgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2JsdXInKSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnZm9jdXMnKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2Zha2VJbnB1dCcpIGZha2VJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3dpcGVyJywgeyBzdGF0aWM6IHRydWUgfSkgc3dpcGVyUmVmOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKCdwcmV2QnV0dG9uJykgcHJldkJ1dHRvbjogTWF0QnV0dG9uO1xuICBAVmlld0NoaWxkKCduZXh0QnV0dG9uJykgbmV4dEJ1dHRvbjogTWF0QnV0dG9uO1xuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5lbmFibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zd2lwZXIgPSB0aGlzLnN3aXBlclJlZi5uYXRpdmVFbGVtZW50LnN3aXBlciBhcyBTd2lwZXI7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlICdmb3JtQ29udHJvbCcgb3IgJ2Zvcm1Db250cm9sTmFtZScgaW4gPG1hdC1zd2lwZS1maWVsZD4uXCIpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCAoKG9iaikgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMpKTtcbiAgICB0aGlzLmVxdWFscyA9IHRoaXMuZXF1YWxzIHx8ICgobzE6IGFueSwgbzI6IGFueSkgPT4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkKTtcbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuJGl0ZW1zLmNvbXBsZXRlKCk7XG4gIH1cblxuICBfb25Gb2N1c0Zha2VJbnB1dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBIaWRlIHRoZSBmYWtlIGlucHV0XG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgIH1cblxuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGJ1dHRvblxuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIC8vIHNob3cgc2xpZGVzIGNvbXBvbmVudFxuICAgIHRoaXMuc2hvd1NsaWRlcyA9IHRydWU7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXZCdXR0b24pIHtcbiAgICAgICAgdGhpcy5wcmV2QnV0dG9uLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOaWwodGhpcy5fdmFsdWUpKSB7XG4gICAgICAvLyBTbGlkZSB0byBmaXJzdCBhbmQgYWZmZWN0IHZhbHVlXG4gICAgICB0aGlzLnNsaWRlVG8oMCk7XG4gICAgICB0aGlzLnNsaWRlQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy5zaG93U2xpZGVzKSB7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0aGlzLl90YWJpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMucHJldkJ1dHRvbiAmJiB0aGlzLm5leHRCdXR0b24pIHtcbiAgICAgIHRoaXMucHJldkJ1dHRvbi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93U2xpZGVzID8gdGhpcy5fdGFiaW5kZXggOiAtMTtcbiAgICAgIHRoaXMubmV4dEJ1dHRvbi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93U2xpZGVzID8gdGhpcy5fdGFiaW5kZXggKyAxIDogLTE7XG4gICAgfVxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmVxdWFscyh2YWx1ZSwgdGhpcy5fdmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zaG93U2xpZGVzID0gaXNOb3ROaWwodGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVTbGlkZXMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IGNsZWFyIHZhbHVlYCk7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnNob3dTbGlkZXMgPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgICAgIHRoaXMuc2xpZGVUbygwKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5sb2NrU3dpcGVzKGlzRGlzYWJsZWQpO1xuICAgIHRoaXMudXBkYXRlQnV0dG9ucygpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzZWxlY3RJbnB1dENvbnRlbnQgPSBzZWxlY3RJbnB1dENvbnRlbnQ7XG5cbiAgcHJldmlvdXMoKSB7XG4gICAgdGhpcy5fc3dpcGVyLnNsaWRlUHJldigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLl9zd2lwZXIuc2xpZGVOZXh0KCk7XG4gIH1cblxuICByZWFjaFN0YXJ0KHJlYWNoZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnByZXZpb3VzRGlzYWJsZWQgPSByZWFjaGVkO1xuICB9XG5cbiAgcmVhY2hFbmQocmVhY2hlZDogYm9vbGVhbikge1xuICAgIHRoaXMubmV4dERpc2FibGVkID0gcmVhY2hlZDtcbiAgfVxuXG4gIHN3aXBlckxvYWRlZCgpIHtcbiAgICBjb25zb2xlLmxvZygnVE9ETyBzd2lwZXIgaW5pdCcpO1xuICAgIHRoaXMuX3N3aXBlciA9IHRoaXMuc3dpcGVyUmVmLm5hdGl2ZUVsZW1lbnQuc3dpcGVyO1xuICAgIHRoaXMuJGxvYWRlZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgc2xpZGVDaGFuZ2VkKCkge1xuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIGlmICh0aGlzLl93cml0aW5nIHx8IGlzTmlsKGFjdGl2ZUluZGV4KSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgY29uc3QgdmFsdWUgPSAodGhpcy4kaXRlbXMuZ2V0VmFsdWUoKSB8fCBbXSlbYWN0aXZlSW5kZXhdIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gc2xpZGUgY2hhbmdlZCBBY3RpdmVJbmRleDoke2FjdGl2ZUluZGV4fSwgbmV3IHZhbHVlOiR7dmFsdWV9YCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGxvY2tTd2lwZXMobG9jazogYm9vbGVhbikge1xuICAgIHRoaXMuX3N3aXBlci5hbGxvd1NsaWRlTmV4dCA9ICFsb2NrO1xuICAgIHRoaXMuX3N3aXBlci5hbGxvd1NsaWRlUHJldiA9ICFsb2NrO1xuICAgIHRoaXMuX3N3aXBlci5hbGxvd1RvdWNoTW92ZSA9ICFsb2NrO1xuICAgIHRoaXMuX3N3aXBlci51cGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgIHRoaXMuJGxvYWRlZC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLiRpdGVtcy5uZXh0KGl0ZW1zKTtcbiAgICB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB0aGlzLl9zd2lwZXIudXBkYXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTbGlkZXMoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1NsaWRlcykge1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gKHRoaXMuJGl0ZW1zLmdldFZhbHVlKCkgfHwgW10pLmZpbmRJbmRleCgodmFsdWUpID0+IHRoaXMuZXF1YWxzKHZhbHVlLCB0aGlzLl92YWx1ZSkpO1xuICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2xpZGVUbyhpdGVtSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubG9nUHJlZml4fSBJdGVtIG5vdCBmb3VuZGAsIHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdGhpcy5zbGlkZVRvKDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2xpZGVUbyhpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3dpcGVyLnNsaWRlVG8oaW5kZXgsIDAsIGZhbHNlKTtcbiAgICB0aGlzLl9zd2lwZXIudXBkYXRlKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25zKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUJ1dHRvbnMoKSB7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLl9zd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IHVwZGF0ZSBidXR0b25zIEFjdGl2ZUluZGV4OiR7YWN0aXZlSW5kZXh9YCk7XG4gICAgdGhpcy5wcmV2aW91c0Rpc2FibGVkID0gYWN0aXZlSW5kZXggPT09IDAgfHwgdGhpcy5kaXNhYmxlZDtcbiAgICB0aGlzLm5leHREaXNhYmxlZCA9IGFjdGl2ZUluZGV4ID09PSB0aGlzLml0ZW1Db3VudCAtIDEgfHwgdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIC8vIG5vdCB1c2VkIC4uLlxuICBhc3luYyBnZXRTd2lwZXIoKTogUHJvbWlzZTxTd2lwZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuX3N3aXBlcjtcbiAgfVxuXG4gIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFdhaXQgbG9hZGVkXG4gICAgaWYgKHRoaXMuJGxvYWRlZC5nZXRWYWx1ZSgpID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IHdhaXRpbmcgc2xpZGVzIHRvIGJlIHJlYWR5Li4uYCk7XG4gICAgICBhd2FpdCBmaXJzdFRydWVQcm9taXNlKHRoaXMuJGxvYWRlZCk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGRcbiAgW2Zsb2F0TGFiZWxdPVwic2hvd1NsaWRlcyAmJiAoIWZsb2F0TGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ2F1dG8nKSA/ICdhbHdheXMnIDogKGZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlKVwiXG4gIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICBbY2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgPlxuICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgfVxuICA8aW5wdXRcbiAgICBtYXRJbnB1dFxuICAgICNmYWtlSW5wdXRcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgKGZvY3VzKT1cIl9vbkZvY3VzRmFrZUlucHV0KCRldmVudClcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwic2hvd1NsaWRlc1wiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJzbGlkZXMtY29udGFpbmVyXCIgW2NsYXNzLmhpZGRlbl09XCIhc2hvd1NsaWRlc1wiPlxuICAgIDxzd2lwZXItY29udGFpbmVyXG4gICAgICAjc3dpcGVyXG4gICAgICBbbW9kdWxlc109XCJzd2lwZXJNb2R1bGVzXCJcbiAgICAgIFtzcGVlZF09XCIxMDBcIlxuICAgICAgW3NsaWRlc1BlclZpZXddPVwiMVwiXG4gICAgICAoaW5pdCk9XCJzd2lwZXJMb2FkZWQoKVwiXG4gICAgICAocmVhY2hiZWdpbm5pbmcpPVwicmVhY2hTdGFydCh0cnVlKVwiXG4gICAgICAocmVhY2hlbmQpPVwicmVhY2hFbmQodHJ1ZSlcIlxuICAgICAgKHNsaWRlbmV4dHRyYW5zaXRpb25lbmQpPVwicmVhY2hTdGFydChmYWxzZSlcIlxuICAgICAgKHNsaWRlcHJldnRyYW5zaXRpb25lbmQpPVwicmVhY2hFbmQoZmFsc2UpXCJcbiAgICAgIChzbGlkZWNoYW5nZSk9XCJzbGlkZUNoYW5nZWQoKVwiXG4gICAgICA+XG4gICAgICBAZm9yIChpdGVtIG9mICRpdGVtcyB8IGFzeW5jOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxzd2lwZXItc2xpZGU+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBkaXNwbGF5V2l0aChpdGVtKSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3N3aXBlci1zbGlkZT5cbiAgICAgIH1cbiAgICA8L3N3aXBlci1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxidXR0b25cbiAgICAjcHJldkJ1dHRvblxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYnV0dG9uLXByZXZcIlxuICAgIFtoaWRkZW5dPVwiIXNob3dTbGlkZXNcIlxuICAgIFtkaXNhYmxlZF09XCJwcmV2aW91c0Rpc2FibGVkXCJcbiAgICAoY2xpY2spPVwicHJldmlvdXMoKVwiXG4gICAgPlxuICAgIDxtYXQtaWNvbj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgICNuZXh0QnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidXR0b24tbmV4dFwiXG4gICAgW2hpZGRlbl09XCIhc2hvd1NsaWRlc1wiXG4gICAgW2Rpc2FibGVkXT1cIm5leHREaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgPlxuICAgIDxtYXQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG5cbiAgQGlmIChjbGVhcmFibGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgW2hpZGRlbl09XCJkaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgfVxuXG4gIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICB9XG4gIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ2VudGl0eScpKSB7XG4gICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfSU5WQUxJRDwvbWF0LWVycm9yPlxuICB9XG48L21hdC1mb3JtLWZpZWxkPlxuIl19
@@ -12,15 +12,15 @@ import { SharedPipesModule } from '../../pipes/pipes.module';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@ngx-translate/core";
14
14
  export class SharedMatSwipeModule {
15
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SharedMatSwipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: SharedMatSwipeModule, declarations: [MatSwipeField], imports: [CommonModule,
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SharedMatSwipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: SharedMatSwipeModule, declarations: [MatSwipeField], imports: [CommonModule,
17
17
  IonicModule,
18
18
  MatButtonModule,
19
19
  MatIconModule, i1.TranslateModule, MatFormFieldModule,
20
20
  ReactiveFormsModule,
21
21
  MatInputModule,
22
22
  SharedPipesModule], exports: [MatSwipeField] });
23
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SharedMatSwipeModule, imports: [CommonModule,
23
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SharedMatSwipeModule, imports: [CommonModule,
24
24
  IonicModule,
25
25
  MatButtonModule,
26
26
  MatIconModule,
@@ -30,7 +30,7 @@ export class SharedMatSwipeModule {
30
30
  MatInputModule,
31
31
  SharedPipesModule] });
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SharedMatSwipeModule, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SharedMatSwipeModule, decorators: [{
34
34
  type: NgModule,
35
35
  args: [{
36
36
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
@@ -57,10 +57,10 @@ export class SwipeTestPage {
57
57
  compareDate() {
58
58
  return (d1, d2) => (d1 && d2 && d1.isSame(d2)) || false;
59
59
  }
60
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SwipeTestPage, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.DateFormatService }], target: i0.ɵɵFactoryTarget.Component });
61
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SwipeTestPage, selector: "app-swipe-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Swipe test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <h1>Swipe page:</h1>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <!-- empty -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Empty</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"empty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [tabindex]=\"1\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- date -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Date</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"date\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"2\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"disabledEmpty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"3\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- read-only-->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled with date</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"disabledDate\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"4\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ion-content>\n", dependencies: [{ kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatSwipeField, selector: "mat-swipe-field", inputs: ["logPrefix", "formControl", "formControlName", "floatLabel", "appearance", "placeholder", "debug", "required", "mobile", "clearable", "equals", "displayWith", "displayAttributes", "appAutofocus", "class", "tabindex", "items"], outputs: ["click", "blur", "focus"] }] });
60
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SwipeTestPage, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.DateFormatService }], target: i0.ɵɵFactoryTarget.Component });
61
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: SwipeTestPage, selector: "app-swipe-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Swipe test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <h1>Swipe page:</h1>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <!-- empty -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Empty</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"empty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [tabindex]=\"1\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- date -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Date</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"date\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"2\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"disabledEmpty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"3\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- read-only-->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled with date</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"disabledDate\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"4\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ion-content>\n", dependencies: [{ kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatSwipeField, selector: "mat-swipe-field", inputs: ["logPrefix", "formControl", "formControlName", "floatLabel", "appearance", "placeholder", "debug", "required", "mobile", "clearable", "equals", "displayWith", "displayAttributes", "appAutofocus", "class", "tabindex", "items"], outputs: ["click", "blur", "focus"] }] });
62
62
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SwipeTestPage, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SwipeTestPage, decorators: [{
64
64
  type: Component,
65
65
  args: [{ selector: 'app-swipe-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Swipe test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <h1>Swipe page:</h1>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <!-- empty -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Empty</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"empty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [tabindex]=\"1\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- date -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Date</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"date\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"2\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"disabledEmpty\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"3\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- read-only-->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled with date</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-swipe-field\n formControlName=\"disabledDate\"\n placeholder=\"placeholder\"\n [items]=\"$dates\"\n [displayWith]=\"displayDate()\"\n [equals]=\"compareDate()\"\n [clearable]=\"true\"\n [tabindex]=\"4\"\n [debug]=\"true\"\n ></mat-swipe-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ion-content>\n" }]
66
66
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.DateFormatService }] });