@bizdoc/core 1.13.38 → 1.14.0-next.3

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 (308) hide show
  1. package/assets/bizdoc-schema.json +5 -0
  2. package/assets/themes/brown.min.css +3 -3
  3. package/assets/themes/dark.min.css +3 -3
  4. package/assets/themes/deep-purple-light-blue.min.css +3 -3
  5. package/assets/themes/deep-purple-teal.min.css +3 -3
  6. package/assets/themes/default.min.css +3 -3
  7. package/assets/themes/green.min.css +3 -3
  8. package/assets/themes/indigo.min.css +3 -3
  9. package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
  10. package/esm2020/lib/admin/admin-menu.component.mjs +3 -3
  11. package/esm2020/lib/admin/core/ace.input.mjs +3 -3
  12. package/esm2020/lib/admin/core/color-picker.input.mjs +3 -3
  13. package/esm2020/lib/admin/core/search.input.mjs +3 -3
  14. package/esm2020/lib/admin/diff/configuration-diff.component.mjs +3 -3
  15. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +3 -3
  16. package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  17. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +3 -3
  18. package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
  19. package/esm2020/lib/admin/form/form.service.mjs +3 -3
  20. package/esm2020/lib/admin/form/workflow/node.component.mjs +3 -3
  21. package/esm2020/lib/admin/form/workflow/role-node.component.mjs +3 -3
  22. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +5 -5
  23. package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  24. package/esm2020/lib/admin/patterns/patterns.component.mjs +3 -3
  25. package/esm2020/lib/admin/permissions/permissions.component.mjs +3 -3
  26. package/esm2020/lib/admin/positions/positions-popup.component.mjs +3 -3
  27. package/esm2020/lib/admin/positions/positions.component.mjs +3 -3
  28. package/esm2020/lib/admin/profiler/profiler.component.mjs +3 -3
  29. package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
  30. package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
  31. package/esm2020/lib/app.component.mjs +8 -8
  32. package/esm2020/lib/bizdoc.module.mjs +4 -4
  33. package/esm2020/lib/browse/browse-items.component.mjs +3 -3
  34. package/esm2020/lib/browse/browse.mobile.component.mjs +3 -3
  35. package/esm2020/lib/browse/browse.pane.component.mjs +3 -3
  36. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
  37. package/esm2020/lib/browse/filter/filter.component.mjs +3 -3
  38. package/esm2020/lib/browse/folders-menu.component.mjs +3 -3
  39. package/esm2020/lib/chat/chat-info.mjs +3 -3
  40. package/esm2020/lib/chat/chat.mobile.component.mjs +3 -3
  41. package/esm2020/lib/chat/chat.service.mjs +3 -3
  42. package/esm2020/lib/chat/contacts.component.mjs +6 -6
  43. package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
  44. package/esm2020/lib/chat/conversation.component.mjs +3 -3
  45. package/esm2020/lib/chat/conversation.pane.component.mjs +3 -3
  46. package/esm2020/lib/compose/action/action-picker.component.mjs +3 -3
  47. package/esm2020/lib/compose/action/action.dialog.mjs +3 -3
  48. package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +3 -3
  49. package/esm2020/lib/compose/action/assign-action.component.mjs +3 -3
  50. package/esm2020/lib/compose/action/moveto-action.component.mjs +3 -3
  51. package/esm2020/lib/compose/action/return-action.component.mjs +18 -18
  52. package/esm2020/lib/compose/attachments/attachments.component.mjs +3 -3
  53. package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  54. package/esm2020/lib/compose/attachments/progress-button.directive.mjs +3 -3
  55. package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
  56. package/esm2020/lib/compose/comments/Comments.pane.component.mjs +3 -3
  57. package/esm2020/lib/compose/comments/comment.component.mjs +3 -3
  58. package/esm2020/lib/compose/comments/comments.component.mjs +3 -3
  59. package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
  60. package/esm2020/lib/compose/comments/edits.component.mjs +3 -3
  61. package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  62. package/esm2020/lib/compose/comments/votes.component.mjs +3 -3
  63. package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
  64. package/esm2020/lib/compose/compose.mobile.component.mjs +3 -3
  65. package/esm2020/lib/compose/compose.pane.component.mjs +3 -3
  66. package/esm2020/lib/compose/copy/copy.dialog.mjs +3 -3
  67. package/esm2020/lib/compose/dismiss.service.mjs +3 -3
  68. package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
  69. package/esm2020/lib/compose/document.component.mjs +3 -3
  70. package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
  71. package/esm2020/lib/compose/document.pane.component.mjs +3 -3
  72. package/esm2020/lib/compose/events/events.component.mjs +3 -3
  73. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  74. package/esm2020/lib/compose/form.component.mjs +3 -3
  75. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  76. package/esm2020/lib/compose/privilage.directive.mjs +6 -6
  77. package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
  78. package/esm2020/lib/compose/save-changes.dialog.mjs +3 -3
  79. package/esm2020/lib/compose/state.component.mjs +3 -3
  80. package/esm2020/lib/compose/tag/tags.component.mjs +3 -3
  81. package/esm2020/lib/compose/trace/flow.component.mjs +33 -6
  82. package/esm2020/lib/compose/trace/people.component.mjs +3 -3
  83. package/esm2020/lib/compose/trace/trace.base.mjs +3 -3
  84. package/esm2020/lib/compose/trace/trace.component.mjs +12 -5
  85. package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
  86. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
  87. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  88. package/esm2020/lib/compose/version-compare/version.pane.component.mjs +3 -3
  89. package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
  90. package/esm2020/lib/core/account.service.mjs +3 -3
  91. package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  92. package/esm2020/lib/core/animations.mjs +3 -3
  93. package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
  94. package/esm2020/lib/core/component-factory-resolver.mjs +3 -3
  95. package/esm2020/lib/core/controls/address.input.mjs +3 -3
  96. package/esm2020/lib/core/controls/auto-complete.input.mjs +5 -6
  97. package/esm2020/lib/core/controls/combination-picker-body.mjs +3 -3
  98. package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
  99. package/esm2020/lib/core/controls/combination-pool.mjs +3 -3
  100. package/esm2020/lib/core/controls/file.input.mjs +144 -116
  101. package/esm2020/lib/core/controls/select.input.mjs +19 -19
  102. package/esm2020/lib/core/controls/time-picker.mjs +3 -3
  103. package/esm2020/lib/core/controls/timespan.input.mjs +3 -3
  104. package/esm2020/lib/core/datasource.service.mjs +3 -3
  105. package/esm2020/lib/core/guide/guide.component.mjs +3 -3
  106. package/esm2020/lib/core/guide/guide.service.mjs +16 -5
  107. package/esm2020/lib/core/http.interceptor.mjs +3 -3
  108. package/esm2020/lib/core/hub.service.mjs +3 -3
  109. package/esm2020/lib/core/identity/identity.component.mjs +3 -3
  110. package/esm2020/lib/core/info/attachment-info.service.mjs +3 -3
  111. package/esm2020/lib/core/info/document-info.service.mjs +3 -3
  112. package/esm2020/lib/core/info/location-info.component.mjs +3 -3
  113. package/esm2020/lib/core/info/map-info.mjs +3 -3
  114. package/esm2020/lib/core/layout/autocomplete.field.mjs +3 -3
  115. package/esm2020/lib/core/layout/checkbox.field.mjs +3 -3
  116. package/esm2020/lib/core/layout/checkbox.mjs +3 -3
  117. package/esm2020/lib/core/layout/date-range.field.mjs +3 -3
  118. package/esm2020/lib/core/layout/date.field.mjs +3 -3
  119. package/esm2020/lib/core/layout/expression.field.mjs +3 -3
  120. package/esm2020/lib/core/layout/file.field.mjs +3 -3
  121. package/esm2020/lib/core/layout/html.field.mjs +3 -3
  122. package/esm2020/lib/core/layout/input.base.mjs +3 -3
  123. package/esm2020/lib/core/layout/input.field.mjs +3 -3
  124. package/esm2020/lib/core/layout/layout.component.mjs +3 -3
  125. package/esm2020/lib/core/layout/numeric.field.mjs +3 -3
  126. package/esm2020/lib/core/layout/select.field.mjs +3 -3
  127. package/esm2020/lib/core/layout/switch.field.mjs +3 -3
  128. package/esm2020/lib/core/layout/textarea.field.mjs +3 -3
  129. package/esm2020/lib/core/layout/timespan.field.mjs +3 -3
  130. package/esm2020/lib/core/lottie-animation.mjs +3 -3
  131. package/esm2020/lib/core/mailbox.service.mjs +19 -4
  132. package/esm2020/lib/core/models.mjs +1 -1
  133. package/esm2020/lib/core/none.component.mjs +3 -3
  134. package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
  135. package/esm2020/lib/core/pipes/calendar.pipe.mjs +3 -3
  136. package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
  137. package/esm2020/lib/core/pipes/daterange.pipe.mjs +6 -6
  138. package/esm2020/lib/core/pipes/difference.pipe.mjs +3 -3
  139. package/esm2020/lib/core/pipes/duration-format.pipe.mjs +3 -3
  140. package/esm2020/lib/core/pipes/duration.pipe.mjs +3 -3
  141. package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
  142. package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
  143. package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
  144. package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  145. package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
  146. package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
  147. package/esm2020/lib/core/pipes/time-ago.pipe.mjs +3 -3
  148. package/esm2020/lib/core/pipes/translate.pipe.mjs +6 -6
  149. package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
  150. package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
  151. package/esm2020/lib/core/popup/popup.component.mjs +3 -3
  152. package/esm2020/lib/core/popup/popup.service.mjs +3 -3
  153. package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
  154. package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  155. package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
  156. package/esm2020/lib/core/prompt.service.mjs +3 -3
  157. package/esm2020/lib/core/router.mjs +6 -6
  158. package/esm2020/lib/core/session.service.mjs +3 -3
  159. package/esm2020/lib/core/slots/router.directive.mjs +3 -3
  160. package/esm2020/lib/core/slots/router.service.mjs +3 -3
  161. package/esm2020/lib/core/slots/slots.component.mjs +3 -3
  162. package/esm2020/lib/core/tagging/documents.component.mjs +3 -3
  163. package/esm2020/lib/core/tagging/edit-input.component.mjs +3 -3
  164. package/esm2020/lib/core/tagging/emoji.component.mjs +3 -3
  165. package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
  166. package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
  167. package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
  168. package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
  169. package/esm2020/lib/core/tagging/users.component.mjs +3 -3
  170. package/esm2020/lib/core/translate.service.mjs +3 -3
  171. package/esm2020/lib/core/window-title.service.mjs +3 -3
  172. package/esm2020/lib/cube/accum/accum.component.mjs +3 -3
  173. package/esm2020/lib/cube/chart/chart.component.mjs +20 -5
  174. package/esm2020/lib/cube/cube-info.service.mjs +3 -3
  175. package/esm2020/lib/cube/cube-menu.component.mjs +3 -3
  176. package/esm2020/lib/cube/cube-view.component.mjs +3 -3
  177. package/esm2020/lib/cube/cube.service.mjs +3 -3
  178. package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
  179. package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
  180. package/esm2020/lib/cube/explore/explore-items.component.mjs +3 -3
  181. package/esm2020/lib/cube/explore/explore.pane.component.mjs +3 -3
  182. package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
  183. package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
  184. package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  185. package/esm2020/lib/cube/filter/filter.component.mjs +3 -3
  186. package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
  187. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -3
  188. package/esm2020/lib/cube/matrix/matrix.base.mjs +3 -3
  189. package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
  190. package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +3 -3
  191. package/esm2020/lib/cube/matrix/popup.component.mjs +3 -3
  192. package/esm2020/lib/cube/matrix/table.component.mjs +5 -5
  193. package/esm2020/lib/cube/parallel/parallel.component.mjs +3 -3
  194. package/esm2020/lib/cube/pivot/pivot.component.mjs +16 -5
  195. package/esm2020/lib/cube/sum/sum.component.mjs +3 -3
  196. package/esm2020/lib/cube/view-base.mjs +3 -3
  197. package/esm2020/lib/cube/view.mobile.component.mjs +3 -3
  198. package/esm2020/lib/cube/view.pane.component.mjs +3 -3
  199. package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
  200. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  201. package/esm2020/lib/dashboard/cube/compare.widget.mjs +3 -3
  202. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
  203. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  204. package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  205. package/esm2020/lib/dashboard/cube/documents.widget.mjs +3 -3
  206. package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  207. package/esm2020/lib/dashboard/dashboard.component.mjs +3 -3
  208. package/esm2020/lib/dashboard/dashboard.pane.component.mjs +3 -3
  209. package/esm2020/lib/dashboard/recents/recents.widget.mjs +3 -3
  210. package/esm2020/lib/dashboard/score/activity.widget.mjs +3 -3
  211. package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +3 -3
  212. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +3 -3
  213. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +3 -3
  214. package/esm2020/lib/dashboard/score/personal-score.widget.mjs +3 -3
  215. package/esm2020/lib/dashboard/widget-item.component.mjs +3 -3
  216. package/esm2020/lib/desktop.module.mjs +4 -4
  217. package/esm2020/lib/home/about/about.dialog.mjs +3 -3
  218. package/esm2020/lib/home/home-base.component.mjs +3 -3
  219. package/esm2020/lib/home/home.desktop.component.mjs +3 -3
  220. package/esm2020/lib/home/home.mobile.component.mjs +3 -3
  221. package/esm2020/lib/home/notifications/notifications.component.mjs +3 -3
  222. package/esm2020/lib/home/options/options.component.mjs +3 -3
  223. package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +3 -3
  224. package/esm2020/lib/home/search.service.mjs +3 -3
  225. package/esm2020/lib/home/sign/sign.component.mjs +3 -3
  226. package/esm2020/lib/home/tools.component.mjs +3 -3
  227. package/esm2020/lib/impersonate/impersonate.component.mjs +3 -3
  228. package/esm2020/lib/mobile.module.mjs +4 -4
  229. package/esm2020/lib/modules/chart.module.mjs +4 -4
  230. package/esm2020/lib/modules/circular-gauge.module.mjs +4 -4
  231. package/esm2020/lib/modules/datepicker.intl.mjs +3 -3
  232. package/esm2020/lib/modules/dayjs.module.mjs +4 -4
  233. package/esm2020/lib/modules/diagram.module.mjs +4 -4
  234. package/esm2020/lib/modules/gantt.module.mjs +4 -4
  235. package/esm2020/lib/modules/grid.module.mjs +4 -4
  236. package/esm2020/lib/modules/material.module.mjs +4 -4
  237. package/esm2020/lib/modules/paginator.intl.mjs +3 -3
  238. package/esm2020/lib/modules/pivot.module.mjs +4 -4
  239. package/esm2020/lib/modules/schedule.module.mjs +4 -4
  240. package/esm2020/lib/modules/spreadsheet.module.mjs +4 -4
  241. package/esm2020/lib/modules/stepper.intl.mjs +3 -3
  242. package/esm2020/lib/modules/texteditor.module.mjs +4 -4
  243. package/esm2020/lib/notifications/filter.component.mjs +3 -3
  244. package/esm2020/lib/notifications/notifications-table.component.mjs +3 -3
  245. package/esm2020/lib/notifications/notifications.mobile.component.mjs +3 -3
  246. package/esm2020/lib/notifications/notifications.pane.component.mjs +3 -3
  247. package/esm2020/lib/notifications/notifications.service.mjs +3 -3
  248. package/esm2020/lib/notifications/types/commented.notification.mjs +3 -3
  249. package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  250. package/esm2020/lib/notifications/types/escalated.notification.mjs +3 -3
  251. package/esm2020/lib/notifications/types/liked.notification.mjs +3 -3
  252. package/esm2020/lib/notifications/types/long-running-task.notification.mjs +3 -3
  253. package/esm2020/lib/notifications/types/notification-base.mjs +3 -3
  254. package/esm2020/lib/notifications/types/nudge.notification.mjs +3 -3
  255. package/esm2020/lib/notifications/types/state-changed.notification.mjs +3 -3
  256. package/esm2020/lib/notifications/types/tagged.notification.mjs +3 -3
  257. package/esm2020/lib/notifications/types/text.notification.mjs +3 -3
  258. package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  259. package/esm2020/lib/options/options.component.mjs +3 -3
  260. package/esm2020/lib/options/options.service.mjs +3 -3
  261. package/esm2020/lib/reports/arguments-component.mjs +3 -3
  262. package/esm2020/lib/reports/cube/documents.component.mjs +3 -3
  263. package/esm2020/lib/reports/cube/grid-documents.component.mjs +3 -3
  264. package/esm2020/lib/reports/cube/table-documents.component.mjs +3 -3
  265. package/esm2020/lib/reports/cube/usage-args.component.mjs +3 -3
  266. package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
  267. package/esm2020/lib/reports/cube/usage-chart.component.mjs +3 -3
  268. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +3 -3
  269. package/esm2020/lib/reports/cube/usage.component.mjs +3 -3
  270. package/esm2020/lib/reports/report-viewer.component.mjs +3 -3
  271. package/esm2020/lib/reports/report.mobile.component.mjs +3 -3
  272. package/esm2020/lib/reports/report.pane.component.mjs +3 -3
  273. package/esm2020/lib/reports/reports-menu.component.mjs +3 -3
  274. package/esm2020/lib/reports/substitution/substitution.component.mjs +3 -3
  275. package/esm2020/lib/reports/table/table-view.component.mjs +3 -3
  276. package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
  277. package/esm2020/lib/scheduler/schedule.component.mjs +3 -3
  278. package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  279. package/esm2020/lib/scheduler/scheduler.pane.component.mjs +3 -3
  280. package/esm2020/lib/shared.module.mjs +4 -4
  281. package/esm2020/lib/system.module.mjs +4 -4
  282. package/esm2020/lib/views/cube/chart.component.mjs +3 -3
  283. package/esm2020/lib/views/cube/cube-base.mjs +3 -3
  284. package/esm2020/lib/views/cube/explore.component.mjs +3 -3
  285. package/esm2020/lib/views/cube/matrix.component.mjs +3 -3
  286. package/esm2020/lib/views/cube/parallel.component.mjs +3 -3
  287. package/esm2020/lib/views/cube/pivot.component.mjs +3 -3
  288. package/esm2020/lib/views/cube/sum.component.mjs +3 -3
  289. package/esm2020/lib/views/cube/view.component.mjs +3 -3
  290. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +3 -3
  291. package/esm2020/lib/views/view-item.component.mjs +3 -3
  292. package/esm2020/lib/views/views.component.mjs +3 -3
  293. package/esm2020/lib/views/views.mobile.component.mjs +3 -3
  294. package/esm2020/lib/views/views.pane.component.mjs +3 -3
  295. package/esm2020/public-api.mjs +2 -2
  296. package/fesm2015/bizdoc-core.mjs +1207 -1089
  297. package/fesm2015/bizdoc-core.mjs.map +1 -1
  298. package/fesm2020/bizdoc-core.mjs +1207 -1091
  299. package/fesm2020/bizdoc-core.mjs.map +1 -1
  300. package/lib/compose/action/return-action.component.d.ts +4 -2
  301. package/lib/core/animations.d.ts +1 -1
  302. package/lib/core/controls/file.input.d.ts +15 -4
  303. package/lib/core/controls/select.input.d.ts +5 -5
  304. package/lib/core/guide/guide.service.d.ts +8 -2
  305. package/lib/core/mailbox.service.d.ts +1 -0
  306. package/lib/core/models.d.ts +2 -0
  307. package/package.json +10 -9
  308. package/public-api.d.ts +1 -1
@@ -19,8 +19,8 @@ export class DateRangeField extends FieldBase {
19
19
  this.inp.nativeElement.focus();
20
20
  }
21
21
  }
22
- DateRangeField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: DateRangeField, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
23
- DateRangeField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: DateRangeField, selector: "ng-component", viewQueries: [{ propertyName: "inp", first: true, predicate: ["inp"], descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
22
+ DateRangeField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DateRangeField, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
23
+ DateRangeField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: DateRangeField, selector: "ng-component", viewQueries: [{ propertyName: "inp", first: true, predicate: ["inp"], descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
24
24
  <mat-label>{{field.label || field.name}}</mat-label>
25
25
  <mat-date-range-input [formGroup]="control" [rangePicker]="picker"
26
26
  [required]="field.required" [min]="field.min" [max]="field.max">
@@ -31,7 +31,7 @@ DateRangeField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
31
31
  <mat-date-range-picker #picker></mat-date-range-picker>
32
32
  <mat-hint *ngIf="field.hint"> {{ field.hint }}</mat-hint>
33
33
  </mat-form-field>`, isInline: true, components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { type: i3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i3.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }], directives: [{ type: i2.MatLabel, selector: "mat-label" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { type: i2.MatSuffix, selector: "[matSuffix]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }] });
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: DateRangeField, decorators: [{
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DateRangeField, decorators: [{
35
35
  type: Component,
36
36
  args: [{
37
37
  template: `<mat-form-field>
@@ -16,8 +16,8 @@ export class DateField extends FieldBase {
16
16
  }
17
17
  focus() { this.input.focus(); }
18
18
  }
19
- DateField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: DateField, deps: null, target: i0.ɵɵFactoryTarget.Component });
20
- DateField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: DateField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
19
+ DateField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DateField, deps: null, target: i0.ɵɵFactoryTarget.Component });
20
+ DateField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: DateField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
21
21
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
22
22
  <input matInput [placeholder]="field.placeholder || field.label || field.name" [formControl]=control
23
23
  [required]="field.required" [min]="field.min" [max]="field.max"
@@ -29,7 +29,7 @@ DateField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
29
29
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
30
30
  </ng-container>
31
31
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i4.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"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: DateField, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DateField, decorators: [{
33
33
  type: Component,
34
34
  args: [{
35
35
  template: `<mat-form-field>
@@ -15,8 +15,8 @@ export class ExpressionField extends FieldBase {
15
15
  }
16
16
  focus() { this.input.focus(); }
17
17
  }
18
- ExpressionField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ExpressionField, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
- ExpressionField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: ExpressionField, selector: "ng-component", inputs: { params: "params" }, viewQueries: [{ propertyName: "input", first: true, predicate: AceInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
18
+ ExpressionField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ExpressionField, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ ExpressionField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: ExpressionField, selector: "ng-component", inputs: { params: "params" }, viewQueries: [{ propertyName: "input", first: true, predicate: AceInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
20
20
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
21
21
  <bizdoc-ace-input
22
22
  [placeholder]="field.placeholder || field.label || field.name" [formControl]=control
@@ -27,7 +27,7 @@ ExpressionField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
27
27
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
28
28
  </ng-container>
29
29
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ExpressionField, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ExpressionField, decorators: [{
31
31
  type: Component,
32
32
  args: [{
33
33
  template: `<mat-form-field>
@@ -17,8 +17,8 @@ export class FileField extends FieldBase {
17
17
  this.multiple = this.field.isArray;
18
18
  }
19
19
  }
20
- FileField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FileField, deps: null, target: i0.ɵɵFactoryTarget.Component });
21
- FileField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: FileField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: FileInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
20
+ FileField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FileField, deps: null, target: i0.ɵɵFactoryTarget.Component });
21
+ FileField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: FileField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: FileInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
22
22
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
23
23
  <bizdoc-file-upload [formControl]=control [placeholder]="field.placeholder || field.label || field.name"
24
24
  [required]="field.required" [multiple]="multiple"></bizdoc-file-upload>
@@ -27,7 +27,7 @@ FileField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
27
27
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
28
28
  </ng-container>
29
29
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.FileInput, selector: "bizdoc-file-upload", inputs: ["multiple", "accept", "icon", "value", "placeholder", "required", "disabled"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FileField, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FileField, decorators: [{
31
31
  type: Component,
32
32
  args: [{
33
33
  template: `<mat-form-field>
@@ -22,15 +22,15 @@ export class HtmlField extends FieldBase {
22
22
  }
23
23
  focus() { this.input.focus(); }
24
24
  }
25
- HtmlField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: HtmlField, deps: null, target: i0.ɵɵFactoryTarget.Component });
26
- HtmlField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: HtmlField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: RichTextEditorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
25
+ HtmlField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: HtmlField, deps: null, target: i0.ɵɵFactoryTarget.Component });
26
+ HtmlField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: HtmlField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: RichTextEditorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
27
27
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
28
28
  <ejs-richtexteditor [formControl]=control
29
29
  [placeholder]="field.placeholder||field.label || field.name" [maxlength]="field.max"
30
30
  [required]="field.required" ></ejs-richtexteditor>
31
31
  <mat-hint *ngIf="field.hint"> {{ field.hint }}</mat-hint>
32
32
  <mat-hint *ngIf="field.max" align="end">{{control.value?.length || 0}} / {{field.max}}</mat-hint>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatter", "height", "htmlAttributes", "iframeSettings", "inlineMode", "insertImageSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }] });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: HtmlField, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: HtmlField, decorators: [{
34
34
  type: Component,
35
35
  args: [{
36
36
  template: `<mat-form-field>
@@ -3,9 +3,9 @@ import * as i0 from "@angular/core";
3
3
  export class FieldBase {
4
4
  focus() { }
5
5
  }
6
- FieldBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FieldBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7
- FieldBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.5", type: FieldBase, ngImport: i0 });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: FieldBase, decorators: [{
6
+ FieldBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FieldBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7
+ FieldBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: FieldBase, ngImport: i0 });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FieldBase, decorators: [{
9
9
  type: Directive
10
10
  }] });
11
11
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9sYXlvdXQvaW5wdXQuYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsxQyxNQUFNLE9BQ1csU0FBUztJQUd4QixLQUFLLEtBQUssQ0FBQzs7c0dBSEksU0FBUzswRkFBVCxTQUFTOzJGQUFULFNBQVM7a0JBRnpCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWVsZEluZm8gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydFxyXG4gIGFic3RyYWN0IGNsYXNzIEZpZWxkQmFzZSB7XHJcbiAgYWJzdHJhY3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIGZpZWxkOiBGaWVsZEluZm87XHJcbiAgZm9jdXMoKSB7IH1cclxufVxyXG5cclxuIl19
@@ -34,8 +34,8 @@ export class InputField extends FieldBase {
34
34
  }
35
35
  focus() { this.input.focus(); }
36
36
  }
37
- InputField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: InputField, deps: null, target: i0.ɵɵFactoryTarget.Component });
38
- InputField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: InputField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
37
+ InputField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: InputField, deps: null, target: i0.ɵɵFactoryTarget.Component });
38
+ InputField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: InputField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
39
39
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
40
40
  <input matInput [type]="type" autocomplete="off" [formControl]=control [placeholder]="field.placeholder || field.label || field.name"
41
41
  [required]="field.required" [minlength]="field.min" [maxlength]="field.max" [pattern]="field.pattern"/>
@@ -44,7 +44,7 @@ InputField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "1
44
44
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
45
45
  </ng-container>
46
46
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i3.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"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: InputField, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: InputField, decorators: [{
48
48
  type: Component,
49
49
  args: [{
50
50
  template: `<mat-form-field>
@@ -168,9 +168,9 @@ export class LayoutComponent {
168
168
  this._cmpRef && this._cmpRef.destroy();
169
169
  }
170
170
  }
171
- LayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: LayoutComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
172
- LayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: LayoutComponent, selector: "bizdoc-layout", inputs: { fields: "fields", model: "model", dirty: "dirty", params: "params", valid: "valid" }, outputs: { modelChange: "modelChange", dirtyChange: "dirtyChange", validChange: "validChange" }, host: { classAttribute: "layout" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: '<ng-container #container></ng-container>', isInline: true, styles: [":host{display:flex;flex-direction:column;padding:8px}::ng-deep .layout>*{display:contents}\n"] });
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: LayoutComponent, decorators: [{
171
+ LayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: LayoutComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
172
+ LayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: LayoutComponent, selector: "bizdoc-layout", inputs: { fields: "fields", model: "model", dirty: "dirty", params: "params", valid: "valid" }, outputs: { modelChange: "modelChange", dirtyChange: "dirtyChange", validChange: "validChange" }, host: { classAttribute: "layout" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: '<ng-container #container></ng-container>', isInline: true, styles: [":host{display:flex;flex-direction:column;padding:8px}::ng-deep .layout>*{display:contents}\n"] });
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: LayoutComponent, decorators: [{
174
174
  type: Component,
175
175
  args: [{ selector: 'bizdoc-layout', template: '<ng-container #container></ng-container>', host: { class: 'layout' }, styles: [":host{display:flex;flex-direction:column;padding:8px}::ng-deep .layout>*{display:contents}\n"] }]
176
176
  }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.NgZone }]; }, propDecorators: { fields: [{
@@ -15,8 +15,8 @@ export class NumericField extends FieldBase {
15
15
  }
16
16
  focus() { this.input.focus(); }
17
17
  }
18
- NumericField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NumericField, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
- NumericField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: NumericField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
18
+ NumericField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NumericField, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ NumericField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: NumericField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
20
20
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
21
21
  <input matInput autocomplete="off" type="number" [formControl]=control [placeholder]="field.placeholder || field.label || field.name"
22
22
  [required]="field.required" [min]="field.min" [max]="field.max" [pattern]="field.pattern"/>
@@ -26,7 +26,7 @@ NumericField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
26
26
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
27
27
  </ng-container>
28
28
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i3.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"] }, { type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NumericField, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NumericField, decorators: [{
30
30
  type: Component,
31
31
  args: [{
32
32
  template: `<mat-form-field>
@@ -31,8 +31,8 @@ export class SelectField extends FieldBase {
31
31
  this.input2.focus();
32
32
  }
33
33
  }
34
- SelectField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SelectField, deps: [{ token: i1.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
35
- SelectField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: SelectField, selector: "ng-component", inputs: { params: "params" }, viewQueries: [{ propertyName: "input", first: true, predicate: TypeSelect, descendants: true }, { propertyName: "input2", first: true, predicate: MatSelect, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
34
+ SelectField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SelectField, deps: [{ token: i1.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
35
+ SelectField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: SelectField, selector: "ng-component", inputs: { params: "params" }, viewQueries: [{ propertyName: "input", first: true, predicate: TypeSelect, descendants: true }, { propertyName: "input2", first: true, predicate: MatSelect, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
36
36
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
37
37
  <bizdoc-select *ngIf="!field.options; else options" [type]="field.source"
38
38
  [placeholder]="field.placeholder || field.label || field.name" [formControl]=control
@@ -49,7 +49,7 @@ SelectField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
49
49
  </mat-select>
50
50
  </ng-template>
51
51
  `, isInline: true, components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.TypeSelect, selector: "bizdoc-select", inputs: ["type", "scope", "multiple", "placeholder", "required", "disabled", "text", "value"], outputs: ["selectionChange", "textChange"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatLabel, selector: "mat-label" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatError, selector: "mat-error", inputs: ["id"] }] });
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SelectField, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SelectField, decorators: [{
53
53
  type: Component,
54
54
  args: [{
55
55
  template: `<mat-form-field>
@@ -15,15 +15,15 @@ export class SwitchField extends FieldBase {
15
15
  }
16
16
  focus() { this.input.focus(); }
17
17
  }
18
- SwitchField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SwitchField, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
- SwitchField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: SwitchField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatSlideToggle, descendants: true }], usesInheritance: true, ngImport: i0, template: `<div>
18
+ SwitchField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SwitchField, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ SwitchField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: SwitchField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatSlideToggle, descendants: true }], usesInheritance: true, ngImport: i0, template: `<div>
20
20
  <mat-hint *ngIf="field.hint"> {{ field.hint }}</mat-hint>
21
21
  <mat-slide-toggle [formControl]=control> {{ field.label || field.name }}</mat-slide-toggle>
22
22
  <ng-container>
23
23
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
24
24
  </ng-container>
25
25
  </div>`, isInline: true, components: [{ type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatError, selector: "mat-error", inputs: ["id"] }] });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SwitchField, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: SwitchField, decorators: [{
27
27
  type: Component,
28
28
  args: [{
29
29
  template: `<div>
@@ -16,15 +16,15 @@ export class TextareaField extends FieldBase {
16
16
  }
17
17
  focus() { this.input.focus(); }
18
18
  }
19
- TextareaField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: TextareaField, deps: null, target: i0.ɵɵFactoryTarget.Component });
20
- TextareaField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: TextareaField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
19
+ TextareaField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TextareaField, deps: null, target: i0.ɵɵFactoryTarget.Component });
20
+ TextareaField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: TextareaField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
21
21
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
22
22
  <textarea matInput [formControl]=control cdkTextareaAutosize [placeholder]="field.placeholder || field.label || field.name"
23
23
  [required]="field.required" [minlength]="field.min" [maxlength]="field.max" [pattern]="field.pattern"></textarea>
24
24
  <mat-hint *ngIf="field.hint"> {{ field.hint }}</mat-hint>
25
25
  <mat-hint *ngIf="field.max" align="end">{{control.value?.length || 0}} / {{field.max}}</mat-hint>
26
26
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i3.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"] }, { type: i4.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }] });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: TextareaField, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TextareaField, decorators: [{
28
28
  type: Component,
29
29
  args: [{
30
30
  template: `<mat-form-field>
@@ -16,8 +16,8 @@ export class TimespanField extends FieldBase {
16
16
  }
17
17
  focus() { this.input.focus(); }
18
18
  }
19
- TimespanField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: TimespanField, deps: null, target: i0.ɵɵFactoryTarget.Component });
20
- TimespanField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: TimespanField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: TimespanInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
19
+ TimespanField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TimespanField, deps: null, target: i0.ɵɵFactoryTarget.Component });
20
+ TimespanField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: TimespanField, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: TimespanInput, descendants: true }], usesInheritance: true, ngImport: i0, template: `<mat-form-field>
21
21
  <mat-label *ngIf="field.placeholder">{{field.label || field.name}}</mat-label>
22
22
  <bizdoc-timespan-input
23
23
  [placeholder]="field.placeholder || field.label || field.name" [formControl]=control
@@ -28,7 +28,7 @@ TimespanField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
28
28
  <mat-error *ngFor="let v of field.validations" [style.display]="control.hasError(v.type) ? '': 'none'"> {{ v.message }} </mat-error>
29
29
  </ng-container>
30
30
  </mat-form-field>`, isInline: true, components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.TimespanInput, selector: "bizdoc-timespan-input", inputs: ["placeholder", "required", "disabled", "value"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i1.MatSuffix, selector: "[matSuffix]" }, { type: i1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatError, selector: "mat-error", inputs: ["id"] }] });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: TimespanField, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TimespanField, decorators: [{
32
32
  type: Component,
33
33
  args: [{
34
34
  template: `<mat-form-field>
@@ -24,9 +24,9 @@ export class LottieAnimation {
24
24
  }
25
25
  play() { this._instance.play(); }
26
26
  }
27
- LottieAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: LottieAnimation, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
28
- LottieAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: LottieAnimation, selector: "lottie", inputs: { name: "name", size: "size", autoplay: "autoplay" }, host: { properties: { "style.width": "size", "style.height": "size" }, styleAttribute: "display:block" }, ngImport: i0, template: '', isInline: true });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: LottieAnimation, decorators: [{
27
+ LottieAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: LottieAnimation, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
28
+ LottieAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: LottieAnimation, selector: "lottie", inputs: { name: "name", size: "size", autoplay: "autoplay" }, host: { properties: { "style.width": "size", "style.height": "size" }, styleAttribute: "display:block" }, ngImport: i0, template: '', isInline: true });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: LottieAnimation, decorators: [{
30
30
  type: Component,
31
31
  args: [{
32
32
  selector: 'lottie', template: '',
@@ -339,9 +339,9 @@ export class MailboxService {
339
339
  });
340
340
  }
341
341
  }
342
- MailboxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: MailboxService, deps: [{ token: i1.SessionService }, { token: i2.AuthenticationImpl }, { token: i3.HubService }, { token: i4.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
343
- MailboxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: MailboxService, providedIn: 'root' });
344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: MailboxService, decorators: [{
342
+ MailboxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MailboxService, deps: [{ token: i1.SessionService }, { token: i2.AuthenticationImpl }, { token: i3.HubService }, { token: i4.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
343
+ MailboxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MailboxService, providedIn: 'root' });
344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MailboxService, decorators: [{
345
345
  type: Injectable,
346
346
  args: [{ providedIn: 'root' }]
347
347
  }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.AuthenticationImpl }, { type: i3.HubService }, { type: i4.HttpClient }]; } });
@@ -392,4 +392,19 @@ function reportprogress(filename) {
392
392
  return r;
393
393
  }));
394
394
  }
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGJveC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL21haWxib3guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBRUwsYUFBYSxFQUNNLFdBQVcsRUFBRSxZQUFZLEVBQzdDLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7OztBQUsvQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQXFCLE9BQU8sQ0FBQyxDQUFDO0FBUzlFLE1BQU0sT0FBTyxjQUFjO0lBTXpCLFlBQW9CLFFBQXdCLEVBQ2xDLEtBQXlCLEVBQ2pDLFNBQXFCLEVBQ2IsS0FBaUI7UUFIUCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFvQjtRQUV6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBUlYsYUFBUSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQzlDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ2xELE1BQU07UUFDVSxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQXNWdkQ7V0FDRztRQUNLLFlBQU8sR0FBRyxHQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQXNDLEVBQUUsRUFB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TCxRQUFRO1FBQ1IsNkRBQTZEO1FBQzdELHVCQUF1QjtRQUN2QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsXHJcbiAgSHR0cEV2ZW50VHlwZSxcclxuICBIdHRwUHJvZ3Jlc3NFdmVudCwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tbWVudCwgVXNlckluZm8sIFJlY2lwaWVudE1vZGVsLCBBdHRhY2htZW50LCBTY2hlZHVsZWRFdmVudCwgSGVhZGVyTW9kZWwsIERvY3VtZW50TW9kZWwsIFZvdGUsIENvbW1lbnRWZXJzaW9uLCBDaGFpbiB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgY2xlYW51cCwgaXNBcnJheSB9IGZyb20gJy4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgSHViU2VydmljZSB9IGZyb20gJy4vaHViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkltcGwgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uJztcclxuaW1wb3J0IHsgU2FmZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IERPQ1VNRU5UX01PREVMID0gbmV3IEluamVjdGlvblRva2VuPERvY3VtZW50TW9kZWw8YW55Pj4oJ21vZGVsJyk7XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJUeXBlID0gJ3JlY2VudCcgfCAndW5yZWFkJyB8ICdmbGFnZ2VkJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQ8VD4ge1xyXG4gIG1vZGVsOiBSZWNpcGllbnRNb2RlbDxUPjtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1haWxib3hTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2UkID0gbmV3IFN1YmplY3Q8UmVjaXBpZW50TW9kZWw8YW55Pj4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWxldGUkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG4gIC8qKiAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBjaGFuZ2VkID0gdGhpcy5fY2hhbmdlJC5hc09ic2VydmFibGUoKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlZCA9IHRoaXMuX2RlbGV0ZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hdXRoOiBBdXRoZW50aWNhdGlvbkltcGwsXHJcbiAgICBtZXNzYWdpbmc6IEh1YlNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICBtZXNzYWdpbmcubmV3JC5cclxuICAgICAgc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICAgIGlmIChtLnVzZXJJZCAhPT0gX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpIHJldHVybjtcclxuICAgICAgICBfc2Vzc2lvbi5wcm9maWxlLmluYm94Q291bnQrKztcclxuICAgICAgICBjb25zdCBmb2xkZXIgPSBfc2Vzc2lvbi5wcm9maWxlLmZvbGRlcnMuZmluZChmID0+IGYubmFtZSA9PT0gbS5tb2RlbC5mb2xkZXJJZCk7XHJcbiAgICAgICAgZm9sZGVyLmNvdW50Kys7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBmb3JtYXREb3dubG9hZFVybChkb2N1bWVudElkOiBudW1iZXIsIGZpbGVJZDogbnVtYmVyLCBpbmxpbmU/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5fYXV0aC5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgcmV0dXJuIGAvYXBpL2F0dGFjaG1lbnRzLyR7ZG9jdW1lbnRJZH0vJHtmaWxlSWR9P2FjY2Vzc190b2tlbj0ke3Rva2VufSZpbmxpbmU9JHtpbmxpbmUgPyB0cnVlIDogZmFsc2V9YDtcclxuICB9XHJcbiAgZG93bmxvYWQoZG9jdW1lbnRJZDogbnVtYmVyLCBmaWxlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvL25ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAvLyAgb2JzZXJ2ZS5uZXh0KHt9KTtcclxuICAgIC8vICByZXR1cm4ge1xyXG4gICAgLy8gICAgdW5zdWJzY3JpYmUoKSB7IH1cclxuICAgIC8vICB9XHJcbiAgICAvL30pO1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGAvYXBpL2F0dGFjaG1lbnRzLyR7ZG9jdW1lbnRJZH0vJHtmaWxlSWR9YCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVtb3ZlYXR0YWNobWVudChyZWNpcGllbnRJZDogbnVtYmVyLCBmaWxlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGUoYC9hcGkvYXR0YWNobWVudHMvJHtyZWNpcGllbnRJZH0vJHtmaWxlSWR9YCk7XHJcbiAgfVxyXG4gIHJlYWQoaWQ6IG51bWJlciwgcmVhZDogYm9vbGVhbiwgZm9sZGVySWQ/OiBzdHJpbmcsIHJlY2VpdmVkPzogRGF0ZSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQoYC9hcGkvbWFpbGJveC9yZWFkLyR7aWR9YCwgdW5kZWZpbmVkLCB7IHBhcmFtczogeyByZWFkIH0gYXMgYW55IH0pLnBpcGUodGFwKCgpID0+XHJcbiAgICAgIGZvbGRlcklkICYmIHRoaXMuX3VwZGF0ZXVucmVhZGNvdW50ZXIocmVjZWl2ZWQsIGZvbGRlcklkLCByZWFkID8gMSA6IC0xKVxyXG4gICAgKSk7XHJcbiAgfVxyXG4gIGNvbW1lbnRzKGlkOiBudW1iZXIsIGJlZm9yZTogRGF0ZSk6IE9ic2VydmFibGU8Q29tbWVudFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8Q29tbWVudFtdPihgL2FwaS9jb21tZW50cy8ke2lkfWAsIHsgcGFyYW1zOiB7IGJlZm9yZTogbmV3IERhdGUoYmVmb3JlKS50b0pTT04oKSB9IH0pO1xyXG4gIH1cclxuICB0YWdzKGlkOiBudW1iZXIsIHRhZ3M6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dChgL2FwaS9tYWlsYm94L3RhZy8ke2lkfWAsIHsgdGFncyB9KS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZSQubmV4dCh7IGlkLCB0YWdzIH0gYXMgYW55KTtcclxuICAgIH0pKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWRcclxuICAgKiBAcGFyYW0gc3RhdGVJZFxyXG4gICAqIEBwYXJhbSB1c2VySWQgc3Vic3RpdHV0ZVxyXG4gICAqL1xyXG4gIGNoYW5nZVN0YXRlKGRvY3VtZW50SWQ6IG51bWJlciwgc3RhdGVJZDogc3RyaW5nLCB1c2VySWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL21haWxib3gvY2hhbmdlc3RhdGUvJHtkb2N1bWVudElkfWAsIHsgc3RhdGVJZCwgdXNlcklkIH0pO1xyXG4gIH1cclxuICBtb3ZlKGlkOiBudW1iZXIsIGZvbGRlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL21haWxib3gvbW92ZS8ke2lkfT9mb2xkZXJJZD0ke2ZvbGRlcklkfWAsIHt9KS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZSQubmV4dCh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZm9sZGVySWRcclxuICAgICAgfSBhcyBhbnkpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuICBjaGVja091dChyZWNpcGllbnRJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGF0dGFjaG1lbnRJZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8QXR0YWNobWVudD4oYC9hcGkvYXR0YWNobWVudHMvJHtyZWNpcGllbnRJZH0vJHthdHRhY2htZW50SWR9L2NoZWNrb3V0YCwgbnVsbCwgeyBwYXJhbXM6IHsgdmVyc2lvbiB9IH0pO1xyXG4gIH1cclxuICBjaGVja0luKHJlY2lwaWVudElkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgYXR0YWNobWVudElkOiBudW1iZXIsIGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnQ+IHtcclxuICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmZC5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlKTtcclxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUFVUJyxcclxuICAgICAgYC9hcGkvYXR0YWNobWVudHMvJHtyZWNpcGllbnRJZH0vJHthdHRhY2htZW50SWR9L2NoZWNraW4/dmVyc2lvbj0ke3ZlcnNpb259YCwgZmQsIHtcclxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIC8vY29uc3QgaW5pdGlhbFN0YXRlOiBVcGxvYWRFdmVudCA9IHsgc3RhdGU6ICdQRU5ESU5HJywgcHJvZ3Jlc3M6IDAgfVxyXG4gICAgLy9jb25zdCBjYWxjdWxhdGVTdGF0ZSA9IChcclxuICAgIC8vICB1cGxvYWQ6IFVwbG9hZEV2ZW50LFxyXG4gICAgLy8gIGV2ZW50OiBIdHRwRXZlbnQ8dW5rbm93bj5cclxuICAgIC8vKTogVXBsb2FkRXZlbnQgPT4ge1xyXG4gICAgLy8gIC8vIGltcGxlbWVudGF0aW9uXHJcbiAgICAvL31cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmUgPT4ge1xyXG4gICAgICB0aGlzLl9odHRwLnJlcXVlc3QocmVxKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFByb2dyZXNzRXZlbnQpIHtcclxuICAgICAgICAgIC8vICBvYnNlcnZlLm5leHQobmV3IFVwbG9hZEV2ZW50KFxyXG4gICAgICAgICAgLy8gICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgLy8gICAgKGV2ZW50IGFzIFByb2dyZXNzRXZlbnQpLmxvYWRlZCxcclxuICAgICAgICAgIC8vICAgIChldmVudCBhcyBQcm9ncmVzc0V2ZW50KS50b3RhbFxyXG4gICAgICAgICAgLy8gICkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IGV2ZW50IGFzIEh0dHBSZXNwb25zZTxhbnk+O1xyXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHJlcy5ib2R5IGFzIEF0dGFjaG1lbnQ7XHJcbiAgICAgICAgICAgIG9ic2VydmUubmV4dChtb2RlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIG9ic2VydmUuZXJyb3IoeyBzdGF0dXM6IHJlcy5zdGF0dXMsIGVycm9yOiByZXMuYm9keSB9KTtcclxuICAgICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGUgPT4ge1xyXG4gICAgICAgIG9ic2VydmUuZXJyb3IoZSk7XHJcbiAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB1bnN1YnNjcmliZSgpIHtcclxuICAgICAgICAgIC8vcmVxLlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHVwbG9hZChyZWNpcGllbnRJZDogbnVtYmVyLCBmb3JtSWQ6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBmaWxlOiBGaWxlLCBvcHRpb25zPzogeyBpc1ByaXZhdGU/OiBib29sZWFuIH0pOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnQ+O1xyXG4gIHVwbG9hZChyZWNpcGllbnRJZDogbnVtYmVyLCBmb3JtSWQ6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBmaWxlczogRmlsZVtdLCBvcHRpb25zPzogeyBpc1ByaXZhdGU/OiBib29sZWFuIH0pOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRbXT47XHJcbiAgdXBsb2FkKHJlY2lwaWVudElkOiBudW1iZXIsIGZvcm1JZDogc3RyaW5nLCB2ZXJzaW9uOiBudW1iZXIsIGZpbGVzOiBGaWxlIHwgRmlsZVtdLCBvcHRpb25zPzogeyBpc1ByaXZhdGU/OiBib29sZWFuIH0pOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnQgfCBBdHRhY2htZW50W10+IHtcclxuICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBpZiAoaXNBcnJheShmaWxlcykpIGZpbGVzLmZvckVhY2goZiA9PlxyXG4gICAgICBmZC5hcHBlbmQoZi5uYW1lLCBmKSk7XHJcbiAgICBlbHNlIGZkLmFwcGVuZChmaWxlcy5uYW1lLCBmaWxlcyk7XHJcbiAgICAvL2NvbnN0IGJ5dGVzUGVyQ2h1bmsgPSAyMCAqIDEwMjQgKiAxMDI0O1xyXG4gICAgLy8gYXF1aXJlIHRoZSBsb2NhdGlvbiBwcmlvciB0byBzZW5kaW5nIHRoZSByZXF1ZXN0XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0R2VvTG9jYXRpb24oZm9ybUlkKS5waXBlKHN3aXRjaE1hcChwYXJhbXMgPT5cclxuICAgICAgbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgICBsZXQgdXJsID0gYC9hcGkvYXR0YWNobWVudHMvJHtyZWNpcGllbnRJZH0/dmVyc2lvbj0ke3ZlcnNpb259YDtcclxuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2gocCA9PiB1cmwgKz0gYCYke3B9PSR7cGFyYW1zW3BdfWApO1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5pc1ByaXZhdGUpIHVybCArPSAnJmlzcHJpdmF0ZT10cnVlJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BPU1QnLCB1cmwsIGZkLCB7XHJcbiAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9odHRwLnJlcXVlc3QocmVxKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgUHJvZ3Jlc3NFdmVudCkge1xyXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIHVwbG9hZCBwcm9ncmVzcyBldmVudC4gQ29tcHV0ZSBhbmQgc2hvdyB0aGUgJSBkb25lOlxyXG4gICAgICAgICAgICAvL2NvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgxMDAgKiBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYEZpbGUgaXMgJHtwZXJjZW50RG9uZX0lIHVwbG9hZGVkLmApO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBldmVudCBhcyBIdHRwUmVzcG9uc2U8YW55PjtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gcmVzLmJvZHkgYXMgQXR0YWNobWVudFtdO1xyXG4gICAgICAgICAgICAgIG9ic2VydmUubmV4dChpc0FycmF5KGZpbGVzKSA/IG1vZGVsIDogbW9kZWxbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBvYnNlcnZlLmVycm9yKHsgc3RhdHVzOiByZXMuc3RhdHVzLCBlcnJvcjogcmVzLmJvZHkgfSk7XHJcbiAgICAgICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlID0+IHtcclxuICAgICAgICAgIG9ic2VydmUuZXJyb3IoZSk7XHJcbiAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogcmV0cmlldmUgc2VuZGVyc1xyXG4gICAqIEBwYXJhbSBuYW1lXHJcbiAgICovXHJcbiAgc2VuZGVycyhuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxVc2VySW5mb1tdPignL2FwaS9tYWlsYm94L3NlbmRlcnMvJywge1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBuYW1lXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBmbGFnKGlkOiBudW1iZXIsIGZsYWc6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL21haWxib3gvZmxhZy8ke2lkfT9mbGFnPSR7ZmxhZ31gLCBudWxsKS5waXBlKHRhcCgoKSA9PiB0aGlzLl9jaGFuZ2UkLm5leHQoeyBpZCwgZmxhZyB9IGFzIGFueSkpKTtcclxuICB9XHJcbiAgdmlld2VkY29tbWVudHMoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8eyB0aW1lOiBEYXRlIH0+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDx7IHRpbWU6IERhdGUgfT4oYC9hcGkvY29tbWVudHMvdmlld2VkLyR7aWR9YCwge30sIHsgaGVhZGVyczogeyAnbm8tcHJvZ3Jlc3MnOiAndHJ1ZScgfSB9KS5waXBlKHRhcCgoZTogeyB0aW1lOiBEYXRlIH0pID0+IHRoaXMuX2NoYW5nZSQubmV4dCh7IGlkLCB2aWV3ZWQ6IGUudGltZSB9IGFzIGFueSkpKTtcclxuICB9XHJcbiAgdHlwaW5nKGlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL2NvbW1lbnRzL3R5cGluZy8ke2lkfWAsIHt9LCB7IGhlYWRlcnM6IHsgJ25vLXByb2dyZXNzJzogJ3RydWUnIH0gfSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIGVkaXRpbmcoaWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQoYC9hcGkvbWFpbGJveC9lZGl0aW5nLyR7aWR9YCwge30sIHsgaGVhZGVyczogeyAnbm8tcHJvZ3Jlc3MnOiAndHJ1ZScgfSB9KS50b1Byb21pc2UoKTtcclxuICB9XHJcbiAgY29weShpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxhbnk+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlY2lwaWVudE1vZGVsPGFueT4+KGAvYXBpL21haWxib3gvY29weS8ke2lkfWAsIHt9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlkIGRvY3VtZW50IGlkXHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBjb21tZW50KGlkOiBudW1iZXIsIG9wdGlvbnM6IHtcclxuICAgIHRleHQ/OiBzdHJpbmcsXHJcbiAgICByZXNvdXJjZT86IHsgW2tleTogc3RyaW5nXTogYW55IH0sXHJcbiAgICBpbWFnZT86IHN0cmluZyxcclxuICAgIHBhcmVudElkPzogbnVtYmVyXHJcbiAgfSk6IE9ic2VydmFibGU8Q29tbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxDb21tZW50PihgL2FwaS9jb21tZW50cy8ke2lkfWAsIG9wdGlvbnMpO1xyXG4gIH1cclxuICBjb21tZW50dXBkYXRlKGlkOiBudW1iZXIsIGNvbW1lbnRJZDogbnVtYmVyLCBvcHRpb25zOiB7XHJcbiAgICB0ZXh0Pzogc3RyaW5nLFxyXG4gICAgaW1hZ2U/OiBzdHJpbmcsXHJcbiAgICByZXNvdXJjZT86IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICB9KTogT2JzZXJ2YWJsZTxDb21tZW50PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8Q29tbWVudD4oYC9hcGkvY29tbWVudHMvZWRpdC8ke2lkfS8ke2NvbW1lbnRJZH1gLCBvcHRpb25zKTtcclxuICB9XHJcbiAgaW5mbzxUID0gYW55Pihkb2N1bWVudElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPERvY3VtZW50TW9kZWw8VD4+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxEb2N1bWVudE1vZGVsPFQ+PihgL2FwaS9tYWlsYm94L2luZm8vJHtkb2N1bWVudElkfWApO1xyXG4gIH1cclxuICB0aW1lbGluZShkb2N1bWVudElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENoYWluPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8Q2hhaW4+KGAvYXBpL21haWxib3gvdGltZWxpbmUvJHtkb2N1bWVudElkfWApO1xyXG4gIH1cclxuICB2b3RlKGlkOiBudW1iZXIsIGNvbW1lbnRJZDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QoYC9hcGkvY29tbWVudHMvdm90ZS8ke2lkfS8ke2NvbW1lbnRJZH1gLCB7fSwgeyBwYXJhbXM6IHsgdmFsdWU6IHZhbHVlLnRvU3RyaW5nKCkgfSB9KTtcclxuICB9XHJcbiAgdm90ZXMoaWQ6IG51bWJlciwgY29tbWVudElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFZvdGVbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFZvdGVbXT4oYC9hcGkvY29tbWVudHMvdm90ZXMvJHtpZH0vJHtjb21tZW50SWR9YCk7XHJcbiAgfVxyXG4gIGVkaXRzKGlkOiBudW1iZXIsIGNvbW1lbnRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb21tZW50VmVyc2lvbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8Q29tbWVudFZlcnNpb25bXT4oYC9hcGkvY29tbWVudHMvZWRpdHMvJHtpZH0vJHtjb21tZW50SWR9YCk7XHJcbiAgfVxyXG4gIGZpbmRBbGwoZmlsdGVyOiB7IHR5cGU/OiBGaWx0ZXJUeXBlOyBjb250YWlucz86IHN0cmluZzsgc3RhdGU/OiBzdHJpbmc7IGZvcm0/OiBzdHJpbmc7IGZvbGRlcklkPzogc3RyaW5nOyBzZW5kZXJJZD86IHN0cmluZzsgfSxcclxuICAgIG9wdGlvbnM/OiB7IHNraXA/OiBudW1iZXI7IHRha2U/OiBudW1iZXI7IG9yZGVyQnk/OiAndmFsdWUnIHwgJ3ZpZXdlZCcgfCAnZGF0ZScgfSk6IE9ic2VydmFibGU8SGVhZGVyTW9kZWxbXT4ge1xyXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7IC4uLmZpbHRlciwgLi4ub3B0aW9ucyB9O1xyXG4gICAgY2xlYW51cChwYXJhbXMpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PEhlYWRlck1vZGVsW10+KCcvYXBpL21haWwnLCB7IHBhcmFtcyB9KTtcclxuICB9XHJcbiAgY3JlYXRlPFQgPSBhbnk+KGZvcm06IHN0cmluZyk6IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8VD4+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRHZW9Mb2NhdGlvbihmb3JtKS5waXBlKHN3aXRjaE1hcChwID0+XHJcbiAgICAgIHRoaXMuX2h0dHAucG9zdDxSZWNpcGllbnRNb2RlbDxhbnk+PignL2FwaS9tYWlsJywgbnVsbCwge1xyXG4gICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgZm9ybSxcclxuICAgICAgICAgIC4uLnBcclxuICAgICAgICB9XHJcbiAgICAgIH0pKSwgdGhpcy5fbm90aWZ5PFQ+KCkpO1xyXG4gIH1cclxuICBnZXQ8VCA9IGFueT4oaWQ6IG51bWJlciwgcmVhZD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPFQ+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVjaXBpZW50TW9kZWw8VD4+KGAvYXBpL21haWwvJHtpZH1gKS5waXBlKFxyXG4gICAgICB0YXAoKG06IFJlY2lwaWVudE1vZGVsKSA9PlxyXG4gICAgICAgIHJlYWQgPT09IGZhbHNlICYmIG0ucmVhZCA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZXVucmVhZGNvdW50ZXIobS5yZWNlaXZlZCwgbS5mb2xkZXJJZCwgLTEpXHJcbiAgICAgICkpO1xyXG4gIH1cclxuICBwcml2YXRlIF91cGRhdGV1bnJlYWRjb3VudGVyKGRhdGU6IERhdGUsIGZvbGRlcklkOiBzdHJpbmcsIHZhbDogbnVtYmVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIC8vIGRhdGUgaXMgYWJvdmUgd2F0ZXJtYXJrXHJcbiAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zLmluYm94VmlldyAmJlxyXG4gICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUub3B0aW9ucy5pbmJveFZpZXcgPCBkYXRlXHJcbiAgICApXHJcbiAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5pbmJveENvdW50ICs9IHZhbDtcclxuICAgIC8vIGRlY3JlYXNlXHJcbiAgICBjb25zdCBmb2xkZXIgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9sZGVycy5cclxuICAgICAgZmluZChmID0+IGYubmFtZSA9PT0gZm9sZGVySWQpO1xyXG4gICAgZm9sZGVyLmNvdW50ID0gTWF0aC5tYXgoMCwgZm9sZGVyLmNvdW50ICsgdmFsKTtcclxuICB9XHJcblxyXG4gIHNhdmU8VCA9IGFueT4oaWQ6IG51bWJlciwgZm9ybTogc3RyaW5nLCB2ZXJzaW9uOiBudW1iZXIsIG1vZGVsOiB7fSwgZmlsZXM/OiBGaWxlW10gfCBGaWxlTGlzdCk6IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8VD4+IHtcclxuICAgIC8vY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIC8vY29uc3QgbW9kZWxCbG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KG1vZGVsKV0sIHtcclxuICAgIC8vICB0eXBlOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAvL30pO1xyXG4gICAgLy9mZC5hcHBlbmQoJ2Zvcm0tZGF0YScsIG1vZGVsQmxvYik7XHJcbiAgICAvL2lmIChmaWxlcykge1xyXG4gICAgLy8gIGlmIChpc0FycmF5KGZpbGVzKSkgZmlsZXMuZm9yRWFjaChmID0+XHJcbiAgICAvLyAgICBmZC5hcHBlbmQoZi5uYW1lLCBmKSk7XHJcbiAgICAvLyAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgICBsZXQgZmlsZSA9IGZpbGVzLml0ZW0oaSk7XHJcbiAgICAvLyAgICBmZC5hcHBlbmQoZmlsZS5uYW1lLCBmaWxlKTtcclxuICAgIC8vICB9XHJcbiAgICAvL31cclxuICAgIC8vICByZXR1cm4gdGhpcy5fd2l0aEdlb0xvY2F0aW9uKGZvcm0pLnBpcGUoc3dpdGNoTWFwKHBhcmFtcyA9PiB7XHJcbiAgICAvLyAgICBsZXQgdXJsID0gYC9hcGkvbWFpbC8ke2lkfT92ZXJzaW9uPSR7dmVyc2lvbn1gO1xyXG4gICAgLy8gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKHAgPT4gdXJsICs9IGAmJHtwfT0ke3BhcmFtc1twXX1gKTtcclxuICAgIC8vICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUFVUJywgdXJsLCBmZCwge1xyXG4gICAgLy8gICAgfSk7XHJcbiAgICAvLyAgICByZXR1cm4gdGhpcy5faHR0cC5yZXF1ZXN0KHJlcSkucGlwZShtYXAoZXZlbnQgPT4ge1xyXG4gICAgLy8gICAgICBjb25zdCByZXMgPSBldmVudCBhcyBIdHRwUmVzcG9uc2U8YW55PjtcclxuICAgIC8vICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgLy8gICAgICAgIGNvbnN0IG1vZGVsID0gcmVzLmJvZHkgYXMgUmVjaXBpZW50TW9kZWw8YW55PjtcclxuICAgIC8vICAgICAgICByZXR1cm4gbW9kZWw7XHJcbiAgICAvLyAgICAgIH1cclxuICAgIC8vICAgICAgZWxzZVxyXG4gICAgLy8gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHsgc3RhdHVzOiByZXMuc3RhdHVzLCBlcnJvcjogcmVzLmJvZHkgfSk7XHJcbiAgICAvLyAgICB9KSlcclxuICAgIC8vICB9KSwgdGhpcy5fbm90aWZ5PFQ+KCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEdlb0xvY2F0aW9uKGZvcm0pLnBpcGUoc3dpdGNoTWFwKHBhcmFtcyA9PlxyXG4gICAgICB0aGlzLl9odHRwLnB1dDxSZWNpcGllbnRNb2RlbDxUPj4oYC9hcGkvbWFpbC8ke2lkfT92ZXJzaW9uPSR7dmVyc2lvbn1gLCBtb2RlbCwgeyBwYXJhbXMgfSkpLCB0aGlzLl9ub3RpZnk8VD4oKSk7XHJcbiAgfVxyXG4gIGRlbGV0ZShpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZShgL2FwaS9tYWlsLyR7aWR9YCkucGlwZSh0YXAoKCkgPT5cclxuICAgICAgdGhpcy5fZGVsZXRlJC5uZXh0KGlkKSkpO1xyXG4gIH1cclxuICByZW1vdmVjb21tZW50KGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlKGAvYXBpL2NvbW1lbnRzLyR7aWR9YCk7XHJcbiAgfVxyXG4gIHN1Ym1pdDxUID0gYW55PihpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGZvcm06IHN0cmluZywgbW9kZWw/OiBhbnksIHJlYWQ/OiBib29sZWFuLCBmb2xkZXJJZD86IHN0cmluZywgcmVjZWl2ZWQ/OiBEYXRlKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEdlb0xvY2F0aW9uKGZvcm0pLnBpcGUoc3dpdGNoTWFwKHBhcmFtcyA9PlxyXG4gICAgICB0aGlzLl9odHRwLnB1dDxSZWNpcGllbnRNb2RlbDxhbnk+PihgL2FwaS9tYWlsLyR7aWR9P3ZlcnNpb249JHt2ZXJzaW9ufSZnbz10cnVlYCwgbW9kZWwsIHsgcGFyYW1zIH0pKSkucGlwZShcclxuICAgICAgICB0aGlzLl9ub3RpZnk8VD4oKSk7XHJcbiAgfVxyXG4gIHNlbmQ8VCA9IGFueT4oaWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBmb3JtOiBzdHJpbmcsIG1vZGVsOiBhbnksIGFjdGlvbjogc3RyaW5nLCBhY3Rpb25BcmdzOiB7fSwgcmVhZD86IGJvb2xlYW4sIGZvbGRlcklkPzogc3RyaW5nLCByZWNlaXZlZD86IERhdGUpOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPFQ+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0R2VvTG9jYXRpb24oZm9ybSkucGlwZShzd2l0Y2hNYXAocGFyYW1zID0+XHJcbiAgICAgIHRoaXMuX2h0dHAucHV0PFJlY2lwaWVudE1vZGVsPFQ+PihgL2FwaS9tYWlsLyR7aWR9P3ZlcnNpb249JHt2ZXJzaW9ufSZhY3Rpb249JHthY3Rpb259YCwgbW9kZWwsIHsgcGFyYW1zOiB7IC4uLnBhcmFtcywgLi4uYWN0aW9uQXJncyB9IH0pKSkucGlwZShcclxuICAgICAgICB0YXAoKCkgPT5cclxuICAgICAgICAgIHJlYWQgPT09IGZhbHNlICYmIHRoaXMuX3VwZGF0ZXVucmVhZGNvdW50ZXIocmVjZWl2ZWQsIGZvbGRlcklkLCAtMSlcclxuICAgICAgICApLFxyXG4gICAgICAgIHRoaXMuX25vdGlmeTxUPigpKTtcclxuICB9XHJcbiAgZXZlbnRzKHN0YXJ0aW5nOiBEYXRlLCBlbmRpbmc/OiBEYXRlLCBjb250YWlucz86IHN0cmluZyk6IE9ic2VydmFibGU8U2NoZWR1bGVkRXZlbnRbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFNjaGVkdWxlZEV2ZW50W10+KGAvYXBpL2V2ZW50c2AsIHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgc3RhcnRpbmc6IHN0YXJ0aW5nLnRvSlNPTigpLFxyXG4gICAgICAgIGVuZGluZzogZW5kaW5nLnRvSlNPTigpLFxyXG4gICAgICAgIGNvbnRhaW5zOiBjb250YWlucyB8fCAnJ1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY2hhbmdlRXZlbnQoaWQ6IG51bWJlciwgb3B0aW9uczogeyBzdGFydGluZzogRGF0ZTsgZW5kaW5nPzogRGF0ZTsgY29tcGxldGU/OiBib29sZWFuIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL2V2ZW50cy8ke2lkfWAsIG9wdGlvbnMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBnZXQgZ2VvIGxvY2F0aW9uIGlmIGZvcm0gc2V0dGluZ3MgcmVxdWllc1xyXG4gICAqIEBwYXJhbSBmb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0R2VvTG9jYXRpb24oZm9ybTogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IGxuZz86IHN0cmluZzsgbGF0Pzogc3RyaW5nIH0+IHtcclxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9ybXMuZmluZChmID0+IGYubmFtZSA9PT0gZm9ybSk7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnUmVxdWlyZSc6XHJcbiAgICAgICAgY2FzZSAnQXNrJzpcclxuICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ociA9PiB7XHJcbiAgICAgICAgICAgIG9ic2VydmUubmV4dCh7XHJcbiAgICAgICAgICAgICAgbG5nOiByLmNvb3Jkcy5sb25naXR1ZGUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICBsYXQ6IHIuY29vcmRzLmxhdGl0dWRlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0sIGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5wb3NpdGlvbiA9PT0gJ0FzaycpXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZS5uZXh0KHt9KTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIG9ic2VydmUuZXJyb3IoJ25vIHBvc2l0aW9uJyk7XHJcbiAgICAgICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG9ic2VydmUubmV4dCh7fSk7XHJcbiAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKi9cclxuICBwcml2YXRlIF9ub3RpZnkgPSA8VD4oKSA9PiAob2JzZXJ2ZTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxUPj4pID0+IHtcclxuICAgIHJldHVybiBvYnNlcnZlLnBpcGUodGFwKG0gPT4ge1xyXG4gICAgICAobSBhcyBJdGVtRXh0cmEpLmxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2NoYW5nZSQubmV4dChtKTtcclxuICAgIH0pKTtcclxuICB9O1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUV4dHJhIHtcclxuICBsb2FkaW5nPzogYm9vbGVhbjtcclxuICBsb2FkZWQ/OiBib29sZWFuO1xyXG4gIHdvcmtpbmc/OiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudEV4dHJhIGV4dGVuZHMgQXR0YWNobWVudCB7XHJcbiAgdXJsOiBTYWZlVXJsO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmlsZUV4dDogc3RyaW5nO1xyXG4gIGlzSW1hZ2U6IGJvb2xlYW47XHJcbiAgcHJvZ3Jlc3M/OiBudW1iZXI7XHJcbiAgdmlld2VkPzogRGF0ZTtcclxuICBmYWlsZWQ/OiBib29sZWFuO1xyXG59XHJcbmZ1bmN0aW9uIGlzSHR0cFJlc3BvbnNlPFQ+KGV2ZW50OiBIdHRwRXZlbnQ8VD4pOiBldmVudCBpcyBIdHRwUmVzcG9uc2U8VD4ge1xyXG4gIHJldHVybiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSHR0cFByb2dyZXNzRXZlbnQoXHJcbiAgZXZlbnQ6IEh0dHBFdmVudDx1bmtub3duPlxyXG4pOiBldmVudCBpcyBIdHRwUHJvZ3Jlc3NFdmVudCB7XHJcbiAgcmV0dXJuIChcclxuICAgIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzcyB8fFxyXG4gICAgZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzc1xyXG4gIClcclxufVxyXG5mdW5jdGlvbiBjYWxjdWxhdGVTdGF0ZSh1cGxvYWQ6IFVwbG9hZEV2ZW50LCBldmVudDogSHR0cEV2ZW50PHVua25vd24+KTogVXBsb2FkRXZlbnQge1xyXG4gIGlmIChpc0h0dHBQcm9ncmVzc0V2ZW50KGV2ZW50KSkge1xyXG4gICAgcmV0dXJuIG5ldyBVcGxvYWRFdmVudCh7XHJcbiAgICAgIHByb2dyZXNzOiBldmVudC50b3RhbFxyXG4gICAgICAgID8gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKVxyXG4gICAgICAgIDogdXBsb2FkLnByb2dyZXNzLFxyXG4gICAgICBzdGF0ZTogJ3Byb2dyZXNzJyxcclxuICAgIH0pO1xyXG4gIH1cclxuICBpZiAoaXNIdHRwUmVzcG9uc2UoZXZlbnQpKSB7XHJcbiAgICByZXR1cm4gbmV3IFVwbG9hZEV2ZW50KHtcclxuICAgICAgcHJvZ3Jlc3M6IDEwMCxcclxuICAgICAgc3RhdGU6ICdkb25lJyxcclxuICAgIH0pXHJcbiAgfVxyXG4gIHJldHVybiB1cGxvYWRcclxufVxyXG5leHBvcnQgY2xhc3MgVXBsb2FkRXZlbnQge1xyXG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAvLyBieXRlc1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcbiAgc3RhdGU6ICdwZW5kaW5nJyB8ICdwcm9ncmVzcycgfCAnZG9uZSc7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucykgeyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcG9ydHByb2dyZXNzKGZpbGVuYW1lOiBzdHJpbmcpOiAoc291cmNlOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnQ+KSA9PiBPYnNlcnZhYmxlPEF0dGFjaG1lbnQ+IHtcclxuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxBdHRhY2htZW50PikgPT5cclxuICAgIHNvdXJjZS5waXBlKG1hcChyID0+IHtcclxuICAgICAgLy9pZiAoZXZlbnQgaW5zdGFuY2VvZiBQcm9ncmVzc0V2ZW50KSB7XHJcbiAgICAgIC8vICBvYnNlcnZlLm5leHQobmV3IFVwbG9hZEV2ZW50KFxyXG4gICAgICAvLyAgICBmaWxlLm5hbWUsXHJcbiAgICAgIC8vICAgIChldmVudCBhcyBQcm9ncmVzc0V2ZW50KS5sb2FkZWQsXHJcbiAgICAgIC8vICAgIChldmVudCBhcyBQcm9ncmVzc0V2ZW50KS50b3RhbFxyXG4gICAgICAvLyAgKSk7XHJcbiAgICAgIC8vfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAvLyAgY29uc3QgcmVzID0gZXZlbnQgYXMgSHR0cFJlc3BvbnNlPGFueT47XHJcbiAgICAgIC8vICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIC8vICAgIGNvbnN0IG1vZGVsID0gcmVzLmJvZHkgYXMgQXR0YWNobWVudDtcclxuICAgICAgLy8gICAgb2JzZXJ2ZS5uZXh0KG1vZGVsKTtcclxuICAgICAgLy8gIH1cclxuICAgICAgLy8gIGVsc2VcclxuICAgICAgLy8gICAgb2JzZXJ2ZS5lcnJvcih7IHN0YXR1czogcmVzLnN0YXR1cywgZXJyb3I6IHJlcy5ib2R5IH0pO1xyXG4gICAgICAvLyAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH0pKTtcclxufVxyXG4iXX0=
395
+ export function reportProgress(attachment) {
396
+ return (source) => new Observable(observe => {
397
+ source.subscribe(r => {
398
+ //TODO progress
399
+ //if (a instanceof UploadEvent) {
400
+ // Object.assign(item, {
401
+ // progress: a.loaded / a.total
402
+ // });
403
+ // return;
404
+ //}
405
+ observe.next(r);
406
+ observe.complete();
407
+ }, e => observe.error(e));
408
+ });
409
+ }
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGJveC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL21haWxib3guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBRUwsYUFBYSxFQUNNLFdBQVcsRUFBRSxZQUFZLEVBQzdDLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7OztBQUsvQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQXFCLE9BQU8sQ0FBQyxDQUFDO0FBUzlFLE1BQU0sT0FBTyxjQUFjO0lBTXpCLFlBQW9CLFFBQXdCLEVBQ2xDLEtBQXlCLEVBQ2pDLFNBQXFCLEVBQ2IsS0FBaUI7UUFIUCxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFvQjtRQUV6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBUlYsYUFBUSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQzlDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ2xELE1BQU07UUFDVSxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQXNWdkQ7V0FDRztRQUNLLFlBQU8sR0FBRyxHQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQXNDLEVBQUUsRUFB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TCxRQUFRO1FBQ1IsNkRBQTZEO1FBQzdELHVCQUF1QjtRQUN2QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUEyQjtJQUN4RCxPQUFPLENBQUMsTUFBOEIsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixlQUFlO1lBQ1gsaUNBQWlDO1lBQ2pDLHlCQUF5QjtZQUN6QixrQ0FBa0M7WUFDbEMsT0FBTztZQUNQLFdBQVc7WUFDWCxHQUFHO1lBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFckIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSHR0cENsaWVudCwgSHR0cEV2ZW50LFxyXG4gIEh0dHBFdmVudFR5cGUsXHJcbiAgSHR0cFByb2dyZXNzRXZlbnQsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2VcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1lbnQsIFVzZXJJbmZvLCBSZWNpcGllbnRNb2RlbCwgQXR0YWNobWVudCwgU2NoZWR1bGVkRXZlbnQsIEhlYWRlck1vZGVsLCBEb2N1bWVudE1vZGVsLCBWb3RlLCBDb21tZW50VmVyc2lvbiwgQ2hhaW4gfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgc3dpdGNoTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGNsZWFudXAsIGlzQXJyYXkgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEh1YlNlcnZpY2UgfSBmcm9tICcuL2h1Yi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25JbXBsIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XHJcbmltcG9ydCB7IFNhZmVVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbmV4cG9ydCBjb25zdCBET0NVTUVOVF9NT0RFTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEb2N1bWVudE1vZGVsPGFueT4+KCdtb2RlbCcpO1xyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyVHlwZSA9ICdyZWNlbnQnIHwgJ3VucmVhZCcgfCAnZmxhZ2dlZCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50PFQ+IHtcclxuICBtb2RlbDogUmVjaXBpZW50TW9kZWw8VD47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNYWlsYm94U2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlJCA9IG5ldyBTdWJqZWN0PFJlY2lwaWVudE1vZGVsPGFueT4+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVsZXRlJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuICAvKiogKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlZCA9IHRoaXMuX2NoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRlbGV0ZWQgPSB0aGlzLl9kZWxldGUkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXV0aDogQXV0aGVudGljYXRpb25JbXBsLFxyXG4gICAgbWVzc2FnaW5nOiBIdWJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge1xyXG4gICAgbWVzc2FnaW5nLm5ldyQuXHJcbiAgICAgIHN1YnNjcmliZShtID0+IHtcclxuICAgICAgICBpZiAobS51c2VySWQgIT09IF9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgX3Nlc3Npb24ucHJvZmlsZS5pbmJveENvdW50Kys7XHJcbiAgICAgICAgY29uc3QgZm9sZGVyID0gX3Nlc3Npb24ucHJvZmlsZS5mb2xkZXJzLmZpbmQoZiA9PiBmLm5hbWUgPT09IG0ubW9kZWwuZm9sZGVySWQpO1xyXG4gICAgICAgIGZvbGRlci5jb3VudCsrO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZm9ybWF0RG93bmxvYWRVcmwoZG9jdW1lbnRJZDogbnVtYmVyLCBmaWxlSWQ6IG51bWJlciwgaW5saW5lPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuX2F1dGguZ2V0QWNjZXNzVG9rZW4oKTtcclxuICAgIHJldHVybiBgL2FwaS9hdHRhY2htZW50cy8ke2RvY3VtZW50SWR9LyR7ZmlsZUlkfT9hY2Nlc3NfdG9rZW49JHt0b2tlbn0maW5saW5lPSR7aW5saW5lID8gdHJ1ZSA6IGZhbHNlfWA7XHJcbiAgfVxyXG4gIGRvd25sb2FkKGRvY3VtZW50SWQ6IG51bWJlciwgZmlsZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy9uZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmUgPT4ge1xyXG4gICAgLy8gIG9ic2VydmUubmV4dCh7fSk7XHJcbiAgICAvLyAgcmV0dXJuIHtcclxuICAgIC8vICAgIHVuc3Vic2NyaWJlKCkgeyB9XHJcbiAgICAvLyAgfVxyXG4gICAgLy99KTtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgL2FwaS9hdHRhY2htZW50cy8ke2RvY3VtZW50SWR9LyR7ZmlsZUlkfWAsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJlbW92ZWF0dGFjaG1lbnQocmVjaXBpZW50SWQ6IG51bWJlciwgZmlsZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlKGAvYXBpL2F0dGFjaG1lbnRzLyR7cmVjaXBpZW50SWR9LyR7ZmlsZUlkfWApO1xyXG4gIH1cclxuICByZWFkKGlkOiBudW1iZXIsIHJlYWQ6IGJvb2xlYW4sIGZvbGRlcklkPzogc3RyaW5nLCByZWNlaXZlZD86IERhdGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL21haWxib3gvcmVhZC8ke2lkfWAsIHVuZGVmaW5lZCwgeyBwYXJhbXM6IHsgcmVhZCB9IGFzIGFueSB9KS5waXBlKHRhcCgoKSA9PlxyXG4gICAgICBmb2xkZXJJZCAmJiB0aGlzLl91cGRhdGV1bnJlYWRjb3VudGVyKHJlY2VpdmVkLCBmb2xkZXJJZCwgcmVhZCA/IDEgOiAtMSlcclxuICAgICkpO1xyXG4gIH1cclxuICBjb21tZW50cyhpZDogbnVtYmVyLCBiZWZvcmU6IERhdGUpOiBPYnNlcnZhYmxlPENvbW1lbnRbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PENvbW1lbnRbXT4oYC9hcGkvY29tbWVudHMvJHtpZH1gLCB7IHBhcmFtczogeyBiZWZvcmU6IG5ldyBEYXRlKGJlZm9yZSkudG9KU09OKCkgfSB9KTtcclxuICB9XHJcbiAgdGFncyhpZDogbnVtYmVyLCB0YWdzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQoYC9hcGkvbWFpbGJveC90YWcvJHtpZH1gLCB7IHRhZ3MgfSkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9jaGFuZ2UkLm5leHQoeyBpZCwgdGFncyB9IGFzIGFueSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkXHJcbiAgICogQHBhcmFtIHN0YXRlSWRcclxuICAgKiBAcGFyYW0gdXNlcklkIHN1YnN0aXR1dGVcclxuICAgKi9cclxuICBjaGFuZ2VTdGF0ZShkb2N1bWVudElkOiBudW1iZXIsIHN0YXRlSWQ6IHN0cmluZywgdXNlcklkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dChgL2FwaS9tYWlsYm94L2NoYW5nZXN0YXRlLyR7ZG9jdW1lbnRJZH1gLCB7IHN0YXRlSWQsIHVzZXJJZCB9KTtcclxuICB9XHJcbiAgbW92ZShpZDogbnVtYmVyLCBmb2xkZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dChgL2FwaS9tYWlsYm94L21vdmUvJHtpZH0/Zm9sZGVySWQ9JHtmb2xkZXJJZH1gLCB7fSkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9jaGFuZ2UkLm5leHQoe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGZvbGRlcklkXHJcbiAgICAgIH0gYXMgYW55KTtcclxuICAgIH0pKTtcclxuICB9XHJcbiAgY2hlY2tPdXQocmVjaXBpZW50SWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBhdHRhY2htZW50SWQ6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PEF0dGFjaG1lbnQ+KGAvYXBpL2F0dGFjaG1lbnRzLyR7cmVjaXBpZW50SWR9LyR7YXR0YWNobWVudElkfS9jaGVja291dGAsIG51bGwsIHsgcGFyYW1zOiB7IHZlcnNpb24gfSB9KTtcclxuICB9XHJcbiAgY2hlY2tJbihyZWNpcGllbnRJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGF0dGFjaG1lbnRJZDogbnVtYmVyLCBmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxBdHRhY2htZW50PiB7XHJcbiAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZmQuYXBwZW5kKGZpbGUubmFtZSwgZmlsZSk7XHJcbiAgICBjb25zdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BVVCcsXHJcbiAgICAgIGAvYXBpL2F0dGFjaG1lbnRzLyR7cmVjaXBpZW50SWR9LyR7YXR0YWNobWVudElkfS9jaGVja2luP3ZlcnNpb249JHt2ZXJzaW9ufWAsIGZkLCB7XHJcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICAvL2NvbnN0IGluaXRpYWxTdGF0ZTogVXBsb2FkRXZlbnQgPSB7IHN0YXRlOiAnUEVORElORycsIHByb2dyZXNzOiAwIH1cclxuICAgIC8vY29uc3QgY2FsY3VsYXRlU3RhdGUgPSAoXHJcbiAgICAvLyAgdXBsb2FkOiBVcGxvYWRFdmVudCxcclxuICAgIC8vICBldmVudDogSHR0cEV2ZW50PHVua25vd24+XHJcbiAgICAvLyk6IFVwbG9hZEV2ZW50ID0+IHtcclxuICAgIC8vICAvLyBpbXBsZW1lbnRhdGlvblxyXG4gICAgLy99XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgdGhpcy5faHR0cC5yZXF1ZXN0KHJlcSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBQcm9ncmVzc0V2ZW50KSB7XHJcbiAgICAgICAgICAvLyAgb2JzZXJ2ZS5uZXh0KG5ldyBVcGxvYWRFdmVudChcclxuICAgICAgICAgIC8vICAgIGZpbGUubmFtZSxcclxuICAgICAgICAgIC8vICAgIChldmVudCBhcyBQcm9ncmVzc0V2ZW50KS5sb2FkZWQsXHJcbiAgICAgICAgICAvLyAgICAoZXZlbnQgYXMgUHJvZ3Jlc3NFdmVudCkudG90YWxcclxuICAgICAgICAgIC8vICApKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBjb25zdCByZXMgPSBldmVudCBhcyBIdHRwUmVzcG9uc2U8YW55PjtcclxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSByZXMuYm9keSBhcyBBdHRhY2htZW50O1xyXG4gICAgICAgICAgICBvYnNlcnZlLm5leHQobW9kZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBvYnNlcnZlLmVycm9yKHsgc3RhdHVzOiByZXMuc3RhdHVzLCBlcnJvcjogcmVzLmJvZHkgfSk7XHJcbiAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGUpO1xyXG4gICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdW5zdWJzY3JpYmUoKSB7XHJcbiAgICAgICAgICAvL3JlcS5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICB1cGxvYWQocmVjaXBpZW50SWQ6IG51bWJlciwgZm9ybUlkOiBzdHJpbmcsIHZlcnNpb246IG51bWJlciwgZmlsZTogRmlsZSwgb3B0aW9ucz86IHsgaXNQcml2YXRlPzogYm9vbGVhbiB9KTogT2JzZXJ2YWJsZTxBdHRhY2htZW50PjtcclxuICB1cGxvYWQocmVjaXBpZW50SWQ6IG51bWJlciwgZm9ybUlkOiBzdHJpbmcsIHZlcnNpb246IG51bWJlciwgZmlsZXM6IEZpbGVbXSwgb3B0aW9ucz86IHsgaXNQcml2YXRlPzogYm9vbGVhbiB9KTogT2JzZXJ2YWJsZTxBdHRhY2htZW50W10+O1xyXG4gIHVwbG9hZChyZWNpcGllbnRJZDogbnVtYmVyLCBmb3JtSWQ6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBmaWxlczogRmlsZSB8IEZpbGVbXSwgb3B0aW9ucz86IHsgaXNQcml2YXRlPzogYm9vbGVhbiB9KTogT2JzZXJ2YWJsZTxBdHRhY2htZW50IHwgQXR0YWNobWVudFtdPiB7XHJcbiAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgaWYgKGlzQXJyYXkoZmlsZXMpKSBmaWxlcy5mb3JFYWNoKGYgPT5cclxuICAgICAgZmQuYXBwZW5kKGYubmFtZSwgZikpO1xyXG4gICAgZWxzZSBmZC5hcHBlbmQoZmlsZXMubmFtZSwgZmlsZXMpO1xyXG4gICAgLy9jb25zdCBieXRlc1BlckNodW5rID0gMjAgKiAxMDI0ICogMTAyNDtcclxuICAgIC8vIGFxdWlyZSB0aGUgbG9jYXRpb24gcHJpb3IgdG8gc2VuZGluZyB0aGUgcmVxdWVzdFxyXG4gICAgcmV0dXJuIHRoaXMuX2dldEdlb0xvY2F0aW9uKGZvcm1JZCkucGlwZShzd2l0Y2hNYXAocGFyYW1zID0+XHJcbiAgICAgIG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAgICAgbGV0IHVybCA9IGAvYXBpL2F0dGFjaG1lbnRzLyR7cmVjaXBpZW50SWR9P3ZlcnNpb249JHt2ZXJzaW9ufWA7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKHAgPT4gdXJsICs9IGAmJHtwfT0ke3BhcmFtc1twXX1gKTtcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaXNQcml2YXRlKSB1cmwgKz0gJyZpc3ByaXZhdGU9dHJ1ZSdcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCdQT1NUJywgdXJsLCBmZCwge1xyXG4gICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5faHR0cC5yZXF1ZXN0KHJlcSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFByb2dyZXNzRXZlbnQpIHtcclxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnQuIENvbXB1dGUgYW5kIHNob3cgdGhlICUgZG9uZTpcclxuICAgICAgICAgICAgLy9jb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoMTAwICogZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBGaWxlIGlzICR7cGVyY2VudERvbmV9JSB1cGxvYWRlZC5gKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gZXZlbnQgYXMgSHR0cFJlc3BvbnNlPGFueT47XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IHJlcy5ib2R5IGFzIEF0dGFjaG1lbnRbXTtcclxuICAgICAgICAgICAgICBvYnNlcnZlLm5leHQoaXNBcnJheShmaWxlcykgPyBtb2RlbCA6IG1vZGVsWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZS5lcnJvcih7IHN0YXR1czogcmVzLnN0YXR1cywgZXJyb3I6IHJlcy5ib2R5IH0pO1xyXG4gICAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZSA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlLmVycm9yKGUpO1xyXG4gICAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB1bnN1YnNjcmliZSgpIHtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIHNlbmRlcnNcclxuICAgKiBAcGFyYW0gbmFtZVxyXG4gICAqL1xyXG4gIHNlbmRlcnMobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8VXNlckluZm9bXT4oJy9hcGkvbWFpbGJveC9zZW5kZXJzLycsIHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbmFtZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZmxhZyhpZDogbnVtYmVyLCBmbGFnOiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dChgL2FwaS9tYWlsYm94L2ZsYWcvJHtpZH0/ZmxhZz0ke2ZsYWd9YCwgbnVsbCkucGlwZSh0YXAoKCkgPT4gdGhpcy5fY2hhbmdlJC5uZXh0KHsgaWQsIGZsYWcgfSBhcyBhbnkpKSk7XHJcbiAgfVxyXG4gIHZpZXdlZGNvbW1lbnRzKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHsgdGltZTogRGF0ZSB9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8eyB0aW1lOiBEYXRlIH0+KGAvYXBpL2NvbW1lbnRzL3ZpZXdlZC8ke2lkfWAsIHt9LCB7IGhlYWRlcnM6IHsgJ25vLXByb2dyZXNzJzogJ3RydWUnIH0gfSkucGlwZSh0YXAoKGU6IHsgdGltZTogRGF0ZSB9KSA9PiB0aGlzLl9jaGFuZ2UkLm5leHQoeyBpZCwgdmlld2VkOiBlLnRpbWUgfSBhcyBhbnkpKSk7XHJcbiAgfVxyXG4gIHR5cGluZyhpZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dChgL2FwaS9jb21tZW50cy90eXBpbmcvJHtpZH1gLCB7fSwgeyBoZWFkZXJzOiB7ICduby1wcm9ncmVzcyc6ICd0cnVlJyB9IH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuICBlZGl0aW5nKGlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0KGAvYXBpL21haWxib3gvZWRpdGluZy8ke2lkfWAsIHt9LCB7IGhlYWRlcnM6IHsgJ25vLXByb2dyZXNzJzogJ3RydWUnIH0gfSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIGNvcHkoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8YW55Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZWNpcGllbnRNb2RlbDxhbnk+PihgL2FwaS9tYWlsYm94L2NvcHkvJHtpZH1gLCB7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpZCBkb2N1bWVudCBpZFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgY29tbWVudChpZDogbnVtYmVyLCBvcHRpb25zOiB7XHJcbiAgICB0ZXh0Pzogc3RyaW5nLFxyXG4gICAgcmVzb3VyY2U/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxyXG4gICAgaW1hZ2U/OiBzdHJpbmcsXHJcbiAgICBwYXJlbnRJZD86IG51bWJlclxyXG4gIH0pOiBPYnNlcnZhYmxlPENvbW1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8Q29tbWVudD4oYC9hcGkvY29tbWVudHMvJHtpZH1gLCBvcHRpb25zKTtcclxuICB9XHJcbiAgY29tbWVudHVwZGF0ZShpZDogbnVtYmVyLCBjb21tZW50SWQ6IG51bWJlciwgb3B0aW9uczoge1xyXG4gICAgdGV4dD86IHN0cmluZyxcclxuICAgIGltYWdlPzogc3RyaW5nLFxyXG4gICAgcmVzb3VyY2U/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgfSk6IE9ic2VydmFibGU8Q29tbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PENvbW1lbnQ+KGAvYXBpL2NvbW1lbnRzL2VkaXQvJHtpZH0vJHtjb21tZW50SWR9YCwgb3B0aW9ucyk7XHJcbiAgfVxyXG4gIGluZm88VCA9IGFueT4oZG9jdW1lbnRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxEb2N1bWVudE1vZGVsPFQ+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8RG9jdW1lbnRNb2RlbDxUPj4oYC9hcGkvbWFpbGJveC9pbmZvLyR7ZG9jdW1lbnRJZH1gKTtcclxuICB9XHJcbiAgdGltZWxpbmUoZG9jdW1lbnRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDaGFpbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PENoYWluPihgL2FwaS9tYWlsYm94L3RpbWVsaW5lLyR7ZG9jdW1lbnRJZH1gKTtcclxuICB9XHJcbiAgdm90ZShpZDogbnVtYmVyLCBjb21tZW50SWQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KGAvYXBpL2NvbW1lbnRzL3ZvdGUvJHtpZH0vJHtjb21tZW50SWR9YCwge30sIHsgcGFyYW1zOiB7IHZhbHVlOiB2YWx1ZS50b1N0cmluZygpIH0gfSk7XHJcbiAgfVxyXG4gIHZvdGVzKGlkOiBudW1iZXIsIGNvbW1lbnRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxWb3RlW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxWb3RlW10+KGAvYXBpL2NvbW1lbnRzL3ZvdGVzLyR7aWR9LyR7Y29tbWVudElkfWApO1xyXG4gIH1cclxuICBlZGl0cyhpZDogbnVtYmVyLCBjb21tZW50SWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q29tbWVudFZlcnNpb25bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PENvbW1lbnRWZXJzaW9uW10+KGAvYXBpL2NvbW1lbnRzL2VkaXRzLyR7aWR9LyR7Y29tbWVudElkfWApO1xyXG4gIH1cclxuICBmaW5kQWxsKGZpbHRlcjogeyB0eXBlPzogRmlsdGVyVHlwZTsgY29udGFpbnM/OiBzdHJpbmc7IHN0YXRlPzogc3RyaW5nOyBmb3JtPzogc3RyaW5nOyBmb2xkZXJJZD86IHN0cmluZzsgc2VuZGVySWQ/OiBzdHJpbmc7IH0sXHJcbiAgICBvcHRpb25zPzogeyBza2lwPzogbnVtYmVyOyB0YWtlPzogbnVtYmVyOyBvcmRlckJ5PzogJ3ZhbHVlJyB8ICd2aWV3ZWQnIHwgJ2RhdGUnIH0pOiBPYnNlcnZhYmxlPEhlYWRlck1vZGVsW10+IHtcclxuICAgIGNvbnN0IHBhcmFtczogYW55ID0geyAuLi5maWx0ZXIsIC4uLm9wdGlvbnMgfTtcclxuICAgIGNsZWFudXAocGFyYW1zKTtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxIZWFkZXJNb2RlbFtdPignL2FwaS9tYWlsJywgeyBwYXJhbXMgfSk7XHJcbiAgfVxyXG4gIGNyZWF0ZTxUID0gYW55Pihmb3JtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPFQ+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0R2VvTG9jYXRpb24oZm9ybSkucGlwZShzd2l0Y2hNYXAocCA9PlxyXG4gICAgICB0aGlzLl9odHRwLnBvc3Q8UmVjaXBpZW50TW9kZWw8YW55Pj4oJy9hcGkvbWFpbCcsIG51bGwsIHtcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGZvcm0sXHJcbiAgICAgICAgICAuLi5wXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSksIHRoaXMuX25vdGlmeTxUPigpKTtcclxuICB9XHJcbiAgZ2V0PFQgPSBhbnk+KGlkOiBudW1iZXIsIHJlYWQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlY2lwaWVudE1vZGVsPFQ+PihgL2FwaS9tYWlsLyR7aWR9YCkucGlwZShcclxuICAgICAgdGFwKChtOiBSZWNpcGllbnRNb2RlbCkgPT5cclxuICAgICAgICByZWFkID09PSBmYWxzZSAmJiBtLnJlYWQgPT09IHRydWUgJiZcclxuICAgICAgICB0aGlzLl91cGRhdGV1bnJlYWRjb3VudGVyKG0ucmVjZWl2ZWQsIG0uZm9sZGVySWQsIC0xKVxyXG4gICAgICApKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdXBkYXRldW5yZWFkY291bnRlcihkYXRlOiBEYXRlLCBmb2xkZXJJZDogc3RyaW5nLCB2YWw6IG51bWJlcikge1xyXG4gICAgaWYgKFxyXG4gICAgICAvLyBkYXRlIGlzIGFib3ZlIHdhdGVybWFya1xyXG4gICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUub3B0aW9ucy5pbmJveFZpZXcgJiZcclxuICAgICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm9wdGlvbnMuaW5ib3hWaWV3IDwgZGF0ZVxyXG4gICAgKVxyXG4gICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuaW5ib3hDb3VudCArPSB2YWw7XHJcbiAgICAvLyBkZWNyZWFzZVxyXG4gICAgY29uc3QgZm9sZGVyID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvbGRlcnMuXHJcbiAgICAgIGZpbmQoZiA9PiBmLm5hbWUgPT09IGZvbGRlcklkKTtcclxuICAgIGZvbGRlci5jb3VudCA9IE1hdGgubWF4KDAsIGZvbGRlci5jb3VudCArIHZhbCk7XHJcbiAgfVxyXG5cclxuICBzYXZlPFQgPSBhbnk+KGlkOiBudW1iZXIsIGZvcm06IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBtb2RlbDoge30sIGZpbGVzPzogRmlsZVtdIHwgRmlsZUxpc3QpOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPFQ+PiB7XHJcbiAgICAvL2NvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAvL2NvbnN0IG1vZGVsQmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShtb2RlbCldLCB7XHJcbiAgICAvLyAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgLy99KTtcclxuICAgIC8vZmQuYXBwZW5kKCdmb3JtLWRhdGEnLCBtb2RlbEJsb2IpO1xyXG4gICAgLy9pZiAoZmlsZXMpIHtcclxuICAgIC8vICBpZiAoaXNBcnJheShmaWxlcykpIGZpbGVzLmZvckVhY2goZiA9PlxyXG4gICAgLy8gICAgZmQuYXBwZW5kKGYubmFtZSwgZikpO1xyXG4gICAgLy8gIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgbGV0IGZpbGUgPSBmaWxlcy5pdGVtKGkpO1xyXG4gICAgLy8gICAgZmQuYXBwZW5kKGZpbGUubmFtZSwgZmlsZSk7XHJcbiAgICAvLyAgfVxyXG4gICAgLy99XHJcbiAgICAvLyAgcmV0dXJuIHRoaXMuX3dpdGhHZW9Mb2NhdGlvbihmb3JtKS5waXBlKHN3aXRjaE1hcChwYXJhbXMgPT4ge1xyXG4gICAgLy8gICAgbGV0IHVybCA9IGAvYXBpL21haWwvJHtpZH0/dmVyc2lvbj0ke3ZlcnNpb259YDtcclxuICAgIC8vICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChwID0+IHVybCArPSBgJiR7cH09JHtwYXJhbXNbcF19YCk7XHJcbiAgICAvLyAgICBjb25zdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BVVCcsIHVybCwgZmQsIHtcclxuICAgIC8vICAgIH0pO1xyXG4gICAgLy8gICAgcmV0dXJuIHRoaXMuX2h0dHAucmVxdWVzdChyZXEpLnBpcGUobWFwKGV2ZW50ID0+IHtcclxuICAgIC8vICAgICAgY29uc3QgcmVzID0gZXZlbnQgYXMgSHR0cFJlc3BvbnNlPGFueT47XHJcbiAgICAvLyAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcclxuICAgIC8vICAgICAgICBjb25zdCBtb2RlbCA9IHJlcy5ib2R5IGFzIFJlY2lwaWVudE1vZGVsPGFueT47XHJcbiAgICAvLyAgICAgICAgcmV0dXJuIG1vZGVsO1xyXG4gICAgLy8gICAgICB9XHJcbiAgICAvLyAgICAgIGVsc2VcclxuICAgIC8vICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih7IHN0YXR1czogcmVzLnN0YXR1cywgZXJyb3I6IHJlcy5ib2R5IH0pO1xyXG4gICAgLy8gICAgfSkpXHJcbiAgICAvLyAgfSksIHRoaXMuX25vdGlmeTxUPigpKTtcclxuICAgIHJldHVybiB0aGlzLl9nZXRHZW9Mb2NhdGlvbihmb3JtKS5waXBlKHN3aXRjaE1hcChwYXJhbXMgPT5cclxuICAgICAgdGhpcy5faHR0cC5wdXQ8UmVjaXBpZW50TW9kZWw8VD4+KGAvYXBpL21haWwvJHtpZH0/dmVyc2lvbj0ke3ZlcnNpb259YCwgbW9kZWwsIHsgcGFyYW1zIH0pKSwgdGhpcy5fbm90aWZ5PFQ+KCkpO1xyXG4gIH1cclxuICBkZWxldGUoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGUoYC9hcGkvbWFpbC8ke2lkfWApLnBpcGUodGFwKCgpID0+XHJcbiAgICAgIHRoaXMuX2RlbGV0ZSQubmV4dChpZCkpKTtcclxuICB9XHJcbiAgcmVtb3ZlY29tbWVudChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZShgL2FwaS9jb21tZW50cy8ke2lkfWApO1xyXG4gIH1cclxuICBzdWJtaXQ8VCA9IGFueT4oaWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBmb3JtOiBzdHJpbmcsIG1vZGVsPzogYW55LCByZWFkPzogYm9vbGVhbiwgZm9sZGVySWQ/OiBzdHJpbmcsIHJlY2VpdmVkPzogRGF0ZSk6IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8VD4+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRHZW9Mb2NhdGlvbihmb3JtKS5waXBlKHN3aXRjaE1hcChwYXJhbXMgPT5cclxuICAgICAgdGhpcy5faHR0cC5wdXQ8UmVjaXBpZW50TW9kZWw8YW55Pj4oYC9hcGkvbWFpbC8ke2lkfT92ZXJzaW9uPSR7dmVyc2lvbn0mZ289dHJ1ZWAsIG1vZGVsLCB7IHBhcmFtcyB9KSkpLnBpcGUoXHJcbiAgICAgICAgdGhpcy5fbm90aWZ5PFQ+KCkpO1xyXG4gIH1cclxuICBzZW5kPFQgPSBhbnk+KGlkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgZm9ybTogc3RyaW5nLCBtb2RlbDogYW55LCBhY3Rpb246IHN0cmluZywgYWN0aW9uQXJnczoge30sIHJlYWQ/OiBib29sZWFuLCBmb2xkZXJJZD86IHN0cmluZywgcmVjZWl2ZWQ/OiBEYXRlKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEdlb0xvY2F0aW9uKGZvcm0pLnBpcGUoc3dpdGNoTWFwKHBhcmFtcyA9PlxyXG4gICAgICB0aGlzLl9odHRwLnB1dDxSZWNpcGllbnRNb2RlbDxUPj4oYC9hcGkvbWFpbC8ke2lkfT92ZXJzaW9uPSR7dmVyc2lvbn0mYWN0aW9uPSR7YWN0aW9ufWAsIG1vZGVsLCB7IHBhcmFtczogeyAuLi5wYXJhbXMsIC4uLmFjdGlvbkFyZ3MgfSB9KSkpLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+XHJcbiAgICAgICAgICByZWFkID09PSBmYWxzZSAmJiB0aGlzLl91cGRhdGV1bnJlYWRjb3VudGVyKHJlY2VpdmVkLCBmb2xkZXJJZCwgLTEpXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0aGlzLl9ub3RpZnk8VD4oKSk7XHJcbiAgfVxyXG4gIGV2ZW50cyhzdGFydGluZzogRGF0ZSwgZW5kaW5nPzogRGF0ZSwgY29udGFpbnM/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNjaGVkdWxlZEV2ZW50W10+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxTY2hlZHVsZWRFdmVudFtdPihgL2FwaS9ldmVudHNgLCB7XHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIHN0YXJ0aW5nOiBzdGFydGluZy50b0pTT04oKSxcclxuICAgICAgICBlbmRpbmc6IGVuZGluZy50b0pTT04oKSxcclxuICAgICAgICBjb250YWluczogY29udGFpbnMgfHwgJydcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNoYW5nZUV2ZW50KGlkOiBudW1iZXIsIG9wdGlvbnM6IHsgc3RhcnRpbmc6IERhdGU7IGVuZGluZz86IERhdGU7IGNvbXBsZXRlPzogYm9vbGVhbiB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwLnB1dChgL2FwaS9ldmVudHMvJHtpZH1gLCBvcHRpb25zKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogZ2V0IGdlbyBsb2NhdGlvbiBpZiBmb3JtIHNldHRpbmdzIHJlcXVpZXNcclxuICAgKiBAcGFyYW0gZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEdlb0xvY2F0aW9uKGZvcm06IHN0cmluZyk6IE9ic2VydmFibGU8eyBsbmc/OiBzdHJpbmc7IGxhdD86IHN0cmluZyB9PiB7XHJcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZvcm0pO1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5wb3NpdGlvbikge1xyXG4gICAgICAgIGNhc2UgJ1JlcXVpcmUnOlxyXG4gICAgICAgIGNhc2UgJ0Fzayc6XHJcbiAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHIgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlLm5leHQoe1xyXG4gICAgICAgICAgICAgIGxuZzogci5jb29yZHMubG9uZ2l0dWRlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgbGF0OiByLmNvb3Jkcy5sYXRpdHVkZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9LCBlID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24ucG9zaXRpb24gPT09ICdBc2snKVxyXG4gICAgICAgICAgICAgIG9ic2VydmUubmV4dCh7fSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBvYnNlcnZlLmVycm9yKCdubyBwb3NpdGlvbicpO1xyXG4gICAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBvYnNlcnZlLm5leHQoe30pO1xyXG4gICAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbm90aWZ5ID0gPFQ+KCkgPT4gKG9ic2VydmU6IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8VD4+KSA9PiB7XHJcbiAgICByZXR1cm4gb2JzZXJ2ZS5waXBlKHRhcChtID0+IHtcclxuICAgICAgKG0gYXMgSXRlbUV4dHJhKS5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9jaGFuZ2UkLm5leHQobSk7XHJcbiAgICB9KSk7XHJcbiAgfTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1FeHRyYSB7XHJcbiAgbG9hZGluZz86IGJvb2xlYW47XHJcbiAgbG9hZGVkPzogYm9vbGVhbjtcclxuICB3b3JraW5nPzogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnRFeHRyYSBleHRlbmRzIEF0dGFjaG1lbnQge1xyXG4gIHVybDogU2FmZVVybDtcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGZpbGVFeHQ6IHN0cmluZztcclxuICBpc0ltYWdlOiBib29sZWFuO1xyXG4gIHByb2dyZXNzPzogbnVtYmVyO1xyXG4gIHZpZXdlZD86IERhdGU7XHJcbiAgZmFpbGVkPzogYm9vbGVhbjtcclxufVxyXG5mdW5jdGlvbiBpc0h0dHBSZXNwb25zZTxUPihldmVudDogSHR0cEV2ZW50PFQ+KTogZXZlbnQgaXMgSHR0cFJlc3BvbnNlPFQ+IHtcclxuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0h0dHBQcm9ncmVzc0V2ZW50KFxyXG4gIGV2ZW50OiBIdHRwRXZlbnQ8dW5rbm93bj5cclxuKTogZXZlbnQgaXMgSHR0cFByb2dyZXNzRXZlbnQge1xyXG4gIHJldHVybiAoXHJcbiAgICBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3MgfHxcclxuICAgIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3NcclxuICApXHJcbn1cclxuZnVuY3Rpb24gY2FsY3VsYXRlU3RhdGUodXBsb2FkOiBVcGxvYWRFdmVudCwgZXZlbnQ6IEh0dHBFdmVudDx1bmtub3duPik6IFVwbG9hZEV2ZW50IHtcclxuICBpZiAoaXNIdHRwUHJvZ3Jlc3NFdmVudChldmVudCkpIHtcclxuICAgIHJldHVybiBuZXcgVXBsb2FkRXZlbnQoe1xyXG4gICAgICBwcm9ncmVzczogZXZlbnQudG90YWxcclxuICAgICAgICA/IE1hdGgucm91bmQoKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyBldmVudC50b3RhbClcclxuICAgICAgICA6IHVwbG9hZC5wcm9ncmVzcyxcclxuICAgICAgc3RhdGU6ICdwcm9ncmVzcycsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgaWYgKGlzSHR0cFJlc3BvbnNlKGV2ZW50KSkge1xyXG4gICAgcmV0dXJuIG5ldyBVcGxvYWRFdmVudCh7XHJcbiAgICAgIHByb2dyZXNzOiAxMDAsXHJcbiAgICAgIHN0YXRlOiAnZG9uZScsXHJcbiAgICB9KVxyXG4gIH1cclxuICByZXR1cm4gdXBsb2FkXHJcbn1cclxuZXhwb3J0IGNsYXNzIFVwbG9hZEV2ZW50IHtcclxuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xyXG4gIHByb2dyZXNzOiBudW1iZXI7XHJcbiAgLy8gYnl0ZXNcclxuICB0b3RhbDogbnVtYmVyO1xyXG4gIHN0YXRlOiAncGVuZGluZycgfCAncHJvZ3Jlc3MnIHwgJ2RvbmUnO1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXBvcnRwcm9ncmVzcyhmaWxlbmFtZTogc3RyaW5nKTogKHNvdXJjZTogT2JzZXJ2YWJsZTxBdHRhY2htZW50PikgPT4gT2JzZXJ2YWJsZTxBdHRhY2htZW50PiB7XHJcbiAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8QXR0YWNobWVudD4pID0+XHJcbiAgICBzb3VyY2UucGlwZShtYXAociA9PiB7XHJcbiAgICAgIC8vaWYgKGV2ZW50IGluc3RhbmNlb2YgUHJvZ3Jlc3NFdmVudCkge1xyXG4gICAgICAvLyAgb2JzZXJ2ZS5uZXh0KG5ldyBVcGxvYWRFdmVudChcclxuICAgICAgLy8gICAgZmlsZS5uYW1lLFxyXG4gICAgICAvLyAgICAoZXZlbnQgYXMgUHJvZ3Jlc3NFdmVudCkubG9hZGVkLFxyXG4gICAgICAvLyAgICAoZXZlbnQgYXMgUHJvZ3Jlc3NFdmVudCkudG90YWxcclxuICAgICAgLy8gICkpO1xyXG4gICAgICAvL30gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgLy8gIGNvbnN0IHJlcyA9IGV2ZW50IGFzIEh0dHBSZXNwb25zZTxhbnk+O1xyXG4gICAgICAvLyAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAvLyAgICBjb25zdCBtb2RlbCA9IHJlcy5ib2R5IGFzIEF0dGFjaG1lbnQ7XHJcbiAgICAgIC8vICAgIG9ic2VydmUubmV4dChtb2RlbCk7XHJcbiAgICAgIC8vICB9XHJcbiAgICAgIC8vICBlbHNlXHJcbiAgICAgIC8vICAgIG9ic2VydmUuZXJyb3IoeyBzdGF0dXM6IHJlcy5zdGF0dXMsIGVycm9yOiByZXMuYm9keSB9KTtcclxuICAgICAgLy8gIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9KSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBvcnRQcm9ncmVzcyhhdHRhY2htZW50OiBBdHRhY2htZW50RXh0cmEpIHtcclxuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxBdHRhY2htZW50PikgPT4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZSA9PiB7XHJcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAvL1RPRE8gcHJvZ3Jlc3NcclxuICAgICAgICAgIC8vaWYgKGEgaW5zdGFuY2VvZiBVcGxvYWRFdmVudCkge1xyXG4gICAgICAgICAgLy8gIE9iamVjdC5hc3NpZ24oaXRlbSwge1xyXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3M6IGEubG9hZGVkIC8gYS50b3RhbFxyXG4gICAgICAgICAgLy8gIH0pO1xyXG4gICAgICAgICAgLy8gIHJldHVybjtcclxuICAgICAgICAgIC8vfVxyXG4gICAgICBvYnNlcnZlLm5leHQocik7XHJcbiAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuXHJcbiAgICB9LCBlID0+IG9ic2VydmUuZXJyb3IoZSkpO1xyXG4gIH0pO1xyXG59XHJcbiJdfQ==