@bizdoc/core 2.3.21 → 2.3.23

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 (421) hide show
  1. package/assets/system/icons.json +1 -1
  2. package/assets/themes/brown.min.css +1 -90
  3. package/assets/themes/dark.min.css +1 -90
  4. package/assets/themes/deep-purple-light-blue.min.css +1 -90
  5. package/assets/themes/deep-purple-teal.min.css +1 -90
  6. package/assets/themes/green.min.css +1 -90
  7. package/assets/themes/indigo.min.css +1 -90
  8. package/assets/themes/spreadsheet.min.css +15 -0
  9. package/esm2022/lib/admin/admin-dismiss.service.mjs +3 -3
  10. package/esm2022/lib/admin/admin-menu.component.mjs +3 -3
  11. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +3 -3
  12. package/esm2022/lib/admin/architecture/designer-element.component.mjs +57 -59
  13. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +3 -3
  14. package/esm2022/lib/admin/architecture/designer.base.mjs +19 -35
  15. package/esm2022/lib/admin/architecture/designer.component.mjs +18 -8
  16. package/esm2022/lib/admin/architecture/elements/action.component.mjs +5 -5
  17. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +5 -5
  18. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +3 -3
  19. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +3 -3
  20. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +5 -5
  21. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +3 -3
  22. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +3 -3
  23. package/esm2022/lib/admin/architecture/elements/control.component.mjs +5 -9
  24. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +3 -3
  25. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +5 -5
  26. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +5 -5
  27. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +3 -3
  28. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +3 -3
  29. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +3 -3
  30. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +3 -3
  31. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +5 -5
  32. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +3 -3
  33. package/esm2022/lib/admin/architecture/elements/form.component.mjs +7 -7
  34. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +5 -5
  35. package/esm2022/lib/admin/architecture/elements/job.component.mjs +5 -5
  36. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +22 -5
  37. package/esm2022/lib/admin/architecture/elements/node.component.mjs +5 -5
  38. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +5 -5
  39. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +3 -3
  40. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +3 -3
  41. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +8 -7
  42. package/esm2022/lib/admin/architecture/elements/policy.component.mjs +5 -5
  43. package/esm2022/lib/admin/architecture/elements/report.component.mjs +5 -5
  44. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +3 -3
  45. package/esm2022/lib/admin/architecture/elements/role.component.mjs +5 -5
  46. package/esm2022/lib/admin/architecture/elements/rule.component.mjs +5 -5
  47. package/esm2022/lib/admin/architecture/elements/source.component.mjs +5 -5
  48. package/esm2022/lib/admin/architecture/elements/state.component.mjs +5 -5
  49. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +3 -3
  50. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +3 -3
  51. package/esm2022/lib/admin/architecture/elements/type.component.mjs +5 -5
  52. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +3 -3
  53. package/esm2022/lib/admin/architecture/elements/utility.component.mjs +5 -5
  54. package/esm2022/lib/admin/architecture/elements/view.component.mjs +5 -5
  55. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +5 -5
  56. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +3 -3
  57. package/esm2022/lib/admin/core/ace.input.mjs +3 -3
  58. package/esm2022/lib/admin/core/color-picker.input.mjs +3 -3
  59. package/esm2022/lib/admin/core/localized-string.component.mjs +3 -3
  60. package/esm2022/lib/admin/core/search.input.mjs +3 -3
  61. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +3 -3
  62. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +6 -6
  63. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  64. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +3 -3
  65. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +3 -3
  66. package/esm2022/lib/admin/form/designer/design-control.component.mjs +3 -3
  67. package/esm2022/lib/admin/form/designer/properties.component.mjs +3 -3
  68. package/esm2022/lib/admin/form/designer/section.component.mjs +3 -3
  69. package/esm2022/lib/admin/form/designer/settings.component.mjs +3 -3
  70. package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -3
  71. package/esm2022/lib/admin/form/workflow/node.component.mjs +3 -3
  72. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +3 -3
  73. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -3
  74. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  75. package/esm2022/lib/admin/patterns/patterns.component.mjs +3 -3
  76. package/esm2022/lib/admin/permissions/permissions.component.mjs +3 -3
  77. package/esm2022/lib/admin/positions/positions-popup.component.mjs +3 -3
  78. package/esm2022/lib/admin/positions/positions.component.mjs +3 -3
  79. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +3 -3
  80. package/esm2022/lib/admin/profiler/profiler.component.mjs +6 -6
  81. package/esm2022/lib/admin/system.service.mjs +3 -3
  82. package/esm2022/lib/admin/utility-wrapper.component.mjs +3 -3
  83. package/esm2022/lib/admin/utility.pane.component.mjs +3 -3
  84. package/esm2022/lib/app.component.mjs +6 -6
  85. package/esm2022/lib/bizdoc.module.mjs +4 -4
  86. package/esm2022/lib/browse/browse-items.component.mjs +9 -7
  87. package/esm2022/lib/browse/browse.mobile.component.mjs +5 -5
  88. package/esm2022/lib/browse/browse.pane.component.mjs +3 -3
  89. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
  90. package/esm2022/lib/browse/filter/filter.component.mjs +3 -3
  91. package/esm2022/lib/browse/folders-menu.component.mjs +3 -3
  92. package/esm2022/lib/chat/chat-info.mjs +3 -3
  93. package/esm2022/lib/chat/chat.mobile.component.mjs +3 -3
  94. package/esm2022/lib/chat/chat.service.mjs +3 -3
  95. package/esm2022/lib/chat/contacts.component.mjs +6 -6
  96. package/esm2022/lib/chat/contacts.pane.component.mjs +3 -3
  97. package/esm2022/lib/chat/conversation.component.mjs +3 -3
  98. package/esm2022/lib/chat/conversation.pane.component.mjs +3 -3
  99. package/esm2022/lib/compose/action/action-picker.component.mjs +3 -3
  100. package/esm2022/lib/compose/action/action.dialog.mjs +3 -3
  101. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +3 -3
  102. package/esm2022/lib/compose/action/assign-action.component.mjs +3 -3
  103. package/esm2022/lib/compose/action/moveto-action.component.mjs +3 -3
  104. package/esm2022/lib/compose/action/return-action.component.mjs +3 -3
  105. package/esm2022/lib/compose/attachments/attachments.component.mjs +3 -3
  106. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  107. package/esm2022/lib/compose/attachments/progress-button.directive.mjs +3 -3
  108. package/esm2022/lib/compose/box/box.component.mjs +3 -3
  109. package/esm2022/lib/compose/box/control.component.mjs +3 -3
  110. package/esm2022/lib/compose/box/row.component.mjs +3 -3
  111. package/esm2022/lib/compose/can-deactivate-changes.service.mjs +3 -3
  112. package/esm2022/lib/compose/comments/comment.component.mjs +3 -3
  113. package/esm2022/lib/compose/comments/comments.component.mjs +3 -3
  114. package/esm2022/lib/compose/comments/comments.pane.component.mjs +3 -3
  115. package/esm2022/lib/compose/comments/edit-comment.component.mjs +3 -3
  116. package/esm2022/lib/compose/comments/edits.component.mjs +3 -3
  117. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  118. package/esm2022/lib/compose/comments/votes.component.mjs +3 -3
  119. package/esm2022/lib/compose/compose-resolve.service.mjs +6 -6
  120. package/esm2022/lib/compose/compose.mobile.component.mjs +7 -11
  121. package/esm2022/lib/compose/compose.pane.component.mjs +5 -15
  122. package/esm2022/lib/compose/copy/copy.dialog.mjs +3 -3
  123. package/esm2022/lib/compose/dismiss.service.mjs +3 -3
  124. package/esm2022/lib/compose/document-resolver.service.mjs +3 -3
  125. package/esm2022/lib/compose/document.component.mjs +3 -3
  126. package/esm2022/lib/compose/document.mobile.component.mjs +3 -3
  127. package/esm2022/lib/compose/document.pane.component.mjs +3 -3
  128. package/esm2022/lib/compose/events/events.component.mjs +3 -3
  129. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  130. package/esm2022/lib/compose/form.component.mjs +3 -3
  131. package/esm2022/lib/compose/new-menu.component.mjs +3 -3
  132. package/esm2022/lib/compose/privilage.directive.mjs +6 -6
  133. package/esm2022/lib/compose/recipient-resolver.service.mjs +3 -3
  134. package/esm2022/lib/compose/state.component.mjs +3 -3
  135. package/esm2022/lib/compose/tag/tags.component.mjs +3 -3
  136. package/esm2022/lib/compose/trace/flow.component.mjs +3 -3
  137. package/esm2022/lib/compose/trace/people.component.mjs +3 -3
  138. package/esm2022/lib/compose/trace/trace.base.mjs +3 -3
  139. package/esm2022/lib/compose/trace/trace.component.mjs +3 -3
  140. package/esm2022/lib/compose/trace/trace.pane.component.mjs +3 -3
  141. package/esm2022/lib/compose/version-compare/version-compare.component.mjs +3 -3
  142. package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  143. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +3 -3
  144. package/esm2022/lib/core/StickyToolbar.mjs +30 -0
  145. package/esm2022/lib/core/account.service.mjs +3 -3
  146. package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  147. package/esm2022/lib/core/animations.mjs +2 -2
  148. package/esm2022/lib/core/avatar/avatar.component.mjs +3 -3
  149. package/esm2022/lib/core/checkbox.mjs +3 -3
  150. package/esm2022/lib/core/component-factory-resolver.mjs +3 -3
  151. package/esm2022/lib/core/datasource.service.mjs +3 -3
  152. package/esm2022/lib/core/fields/address.designer.mjs +3 -3
  153. package/esm2022/lib/core/fields/address.field.mjs +3 -3
  154. package/esm2022/lib/core/fields/autocomplete.field.mjs +6 -6
  155. package/esm2022/lib/core/fields/checkbox.designer.mjs +3 -3
  156. package/esm2022/lib/core/fields/checkbox.field.mjs +3 -3
  157. package/esm2022/lib/core/fields/checklist.designer.mjs +3 -3
  158. package/esm2022/lib/core/fields/checklist.field.mjs +3 -3
  159. package/esm2022/lib/core/fields/date-range.designer.mjs +3 -3
  160. package/esm2022/lib/core/fields/date-range.field.mjs +3 -3
  161. package/esm2022/lib/core/fields/date.designer.mjs +3 -3
  162. package/esm2022/lib/core/fields/date.field.mjs +3 -3
  163. package/esm2022/lib/core/fields/expression.field.mjs +6 -6
  164. package/esm2022/lib/core/fields/file.designer.mjs +3 -3
  165. package/esm2022/lib/core/fields/file.field.mjs +3 -3
  166. package/esm2022/lib/core/fields/html.designer.mjs +3 -3
  167. package/esm2022/lib/core/fields/html.field.mjs +3 -3
  168. package/esm2022/lib/core/fields/input.designer.mjs +3 -3
  169. package/esm2022/lib/core/fields/input.field.mjs +3 -3
  170. package/esm2022/lib/core/fields/localized-string.field.mjs +6 -6
  171. package/esm2022/lib/core/fields/numeric.designer.mjs +3 -3
  172. package/esm2022/lib/core/fields/numeric.field.mjs +3 -3
  173. package/esm2022/lib/core/fields/options.base.mjs +6 -6
  174. package/esm2022/lib/core/fields/options.component.mjs +3 -3
  175. package/esm2022/lib/core/fields/radio-button.designer.mjs +3 -3
  176. package/esm2022/lib/core/fields/radio-button.field.mjs +3 -3
  177. package/esm2022/lib/core/fields/select.designer.mjs +3 -3
  178. package/esm2022/lib/core/fields/select.field.mjs +3 -3
  179. package/esm2022/lib/core/fields/signature.designer.mjs +3 -3
  180. package/esm2022/lib/core/fields/signature.field.mjs +3 -3
  181. package/esm2022/lib/core/fields/switch.field.mjs +3 -3
  182. package/esm2022/lib/core/fields/tags.designer.mjs +3 -3
  183. package/esm2022/lib/core/fields/tags.field.mjs +3 -3
  184. package/esm2022/lib/core/fields/textarea.designer.mjs +3 -3
  185. package/esm2022/lib/core/fields/textarea.field.mjs +3 -3
  186. package/esm2022/lib/core/fields/time.designer.mjs +3 -3
  187. package/esm2022/lib/core/fields/time.field.mjs +3 -3
  188. package/esm2022/lib/core/fields/timespan.field.mjs +6 -6
  189. package/esm2022/lib/core/fields/yesno.designer.mjs +3 -3
  190. package/esm2022/lib/core/fields/yesno.field.mjs +3 -3
  191. package/esm2022/lib/core/guide/guide.component.mjs +3 -3
  192. package/esm2022/lib/core/guide/guide.service.mjs +3 -3
  193. package/esm2022/lib/core/guide/help-tip.component.mjs +3 -3
  194. package/esm2022/lib/core/http.interceptor.mjs +3 -3
  195. package/esm2022/lib/core/hub.service.mjs +3 -3
  196. package/esm2022/lib/core/identity/identity.component.mjs +3 -3
  197. package/esm2022/lib/core/info/attachment-info.service.mjs +3 -3
  198. package/esm2022/lib/core/info/document-info.service.mjs +3 -3
  199. package/esm2022/lib/core/info/location-info.component.mjs +3 -3
  200. package/esm2022/lib/core/info/map-info.mjs +3 -3
  201. package/esm2022/lib/core/inputs/address.input.mjs +3 -3
  202. package/esm2022/lib/core/inputs/auto-complete.input.mjs +3 -3
  203. package/esm2022/lib/core/inputs/combination-picker-body.mjs +3 -3
  204. package/esm2022/lib/core/inputs/combination-picker.mjs +5 -5
  205. package/esm2022/lib/core/inputs/combination-pool.mjs +3 -3
  206. package/esm2022/lib/core/inputs/file.input.mjs +3 -3
  207. package/esm2022/lib/core/inputs/select.input.mjs +3 -3
  208. package/esm2022/lib/core/inputs/signature.input.mjs +3 -3
  209. package/esm2022/lib/core/inputs/time-picker.mjs +3 -3
  210. package/esm2022/lib/core/inputs/timespan.input.mjs +3 -3
  211. package/esm2022/lib/core/layout.component.mjs +3 -3
  212. package/esm2022/lib/core/lottie-animation.mjs +3 -3
  213. package/esm2022/lib/core/mailbox.service.mjs +3 -3
  214. package/esm2022/lib/core/none.component.mjs +3 -3
  215. package/esm2022/lib/core/pipes/action.pipe.mjs +3 -3
  216. package/esm2022/lib/core/pipes/calendar.pipe.mjs +3 -3
  217. package/esm2022/lib/core/pipes/date-format.pipe.mjs +3 -3
  218. package/esm2022/lib/core/pipes/daterange.pipe.mjs +6 -6
  219. package/esm2022/lib/core/pipes/difference.pipe.mjs +3 -3
  220. package/esm2022/lib/core/pipes/duration-format.pipe.mjs +3 -3
  221. package/esm2022/lib/core/pipes/duration.pipe.mjs +3 -3
  222. package/esm2022/lib/core/pipes/form.pipe.mjs +3 -3
  223. package/esm2022/lib/core/pipes/join.pipe.mjs +3 -3
  224. package/esm2022/lib/core/pipes/localized-string.pipe.mjs +3 -3
  225. package/esm2022/lib/core/pipes/role.pipe.mjs +3 -3
  226. package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  227. package/esm2022/lib/core/pipes/sort.pipe.mjs +6 -6
  228. package/esm2022/lib/core/pipes/state.pipe.mjs +3 -3
  229. package/esm2022/lib/core/pipes/time-ago.pipe.mjs +6 -6
  230. package/esm2022/lib/core/pipes/translate.pipe.mjs +9 -9
  231. package/esm2022/lib/core/pipes/type-value.pipe.mjs +3 -3
  232. package/esm2022/lib/core/pipes/user-name.pipe.mjs +3 -3
  233. package/esm2022/lib/core/popup/popup.component.mjs +3 -3
  234. package/esm2022/lib/core/popup/popup.service.mjs +3 -3
  235. package/esm2022/lib/core/popup/tooltip.directive.mjs +6 -6
  236. package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  237. package/esm2022/lib/core/prompt/mask/mask.component.mjs +3 -3
  238. package/esm2022/lib/core/prompt.service.mjs +3 -3
  239. package/esm2022/lib/core/router.mjs +6 -6
  240. package/esm2022/lib/core/save-changes.dialog.mjs +3 -3
  241. package/esm2022/lib/core/session.service.mjs +3 -3
  242. package/esm2022/lib/core/slots/router.directive.mjs +3 -3
  243. package/esm2022/lib/core/slots/router.service.mjs +3 -3
  244. package/esm2022/lib/core/slots/slots.component.mjs +5 -5
  245. package/esm2022/lib/core/tagging/documents.component.mjs +3 -3
  246. package/esm2022/lib/core/tagging/edit-input.component.mjs +3 -3
  247. package/esm2022/lib/core/tagging/emoji.component.mjs +3 -3
  248. package/esm2022/lib/core/tagging/tagging-item.directive.mjs +3 -3
  249. package/esm2022/lib/core/tagging/tagging.component-base.mjs +3 -3
  250. package/esm2022/lib/core/tagging/tagging.directive.mjs +3 -3
  251. package/esm2022/lib/core/tagging/tagging.pipe.mjs +3 -3
  252. package/esm2022/lib/core/tagging/users.component.mjs +3 -3
  253. package/esm2022/lib/core/translate.service.mjs +3 -3
  254. package/esm2022/lib/core/translations.mjs +6 -4
  255. package/esm2022/lib/core/window-title.service.mjs +3 -3
  256. package/esm2022/lib/cube/accum/accum.component.mjs +6 -6
  257. package/esm2022/lib/cube/chart/chart.component.mjs +6 -6
  258. package/esm2022/lib/cube/cube-info.service.mjs +3 -3
  259. package/esm2022/lib/cube/cube-menu.component.mjs +3 -3
  260. package/esm2022/lib/cube/cube-view.component.mjs +5 -5
  261. package/esm2022/lib/cube/cube.service.mjs +16 -9
  262. package/esm2022/lib/cube/explore/document-item.component.mjs +3 -3
  263. package/esm2022/lib/cube/explore/explore-item.component.mjs +3 -3
  264. package/esm2022/lib/cube/explore/explore-items.component.mjs +3 -3
  265. package/esm2022/lib/cube/explore/explore.pane.component.mjs +3 -3
  266. package/esm2022/lib/cube/explore/item-resolver.service.mjs +6 -6
  267. package/esm2022/lib/cube/explore/item.pane.component.mjs +3 -3
  268. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  269. package/esm2022/lib/cube/filter/filter.component.mjs +3 -3
  270. package/esm2022/lib/cube/grid/grid.component.mjs +54 -59
  271. package/esm2022/lib/cube/matrix/matrix.base.mjs +3 -3
  272. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
  273. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +3 -3
  274. package/esm2022/lib/cube/matrix/popup.component.mjs +3 -3
  275. package/esm2022/lib/cube/matrix/table.component.mjs +8 -5
  276. package/esm2022/lib/cube/parallel/parallel.component.mjs +6 -6
  277. package/esm2022/lib/cube/pivot/pivot.component.mjs +6 -6
  278. package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +392 -0
  279. package/esm2022/lib/cube/spreadsheet/spreadsheet.container.mjs +19 -0
  280. package/esm2022/lib/cube/sum/sum.component.mjs +3 -3
  281. package/esm2022/lib/cube/view-base.mjs +3 -3
  282. package/esm2022/lib/cube/view.mobile.component.mjs +3 -3
  283. package/esm2022/lib/cube/view.pane.component.mjs +3 -3
  284. package/esm2022/lib/dashboard/actions/actions.widget.mjs +6 -6
  285. package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  286. package/esm2022/lib/dashboard/cube/compare.widget.mjs +6 -6
  287. package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +6 -6
  288. package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  289. package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  290. package/esm2022/lib/dashboard/cube/document-state.widget.mjs +6 -6
  291. package/esm2022/lib/dashboard/cube/documents.widget.mjs +3 -3
  292. package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  293. package/esm2022/lib/dashboard/dashboard.component.mjs +3 -3
  294. package/esm2022/lib/dashboard/dashboard.pane.component.mjs +3 -3
  295. package/esm2022/lib/dashboard/recents/recents.widget.mjs +3 -3
  296. package/esm2022/lib/dashboard/score/activity.widget.mjs +6 -6
  297. package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +6 -6
  298. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +6 -6
  299. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +3 -3
  300. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +10 -7
  301. package/esm2022/lib/dashboard/widget-item.component.mjs +3 -3
  302. package/esm2022/lib/designer.module.mjs +4 -4
  303. package/esm2022/lib/desktop.module.mjs +4 -4
  304. package/esm2022/lib/home/about/about.dialog.mjs +3 -3
  305. package/esm2022/lib/home/home-base.component.mjs +3 -3
  306. package/esm2022/lib/home/home.desktop.component.mjs +3 -3
  307. package/esm2022/lib/home/home.mobile.component.mjs +6 -6
  308. package/esm2022/lib/home/notifications/notifications.component.mjs +3 -3
  309. package/esm2022/lib/home/options/options.component.mjs +3 -3
  310. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +3 -3
  311. package/esm2022/lib/home/sign/sign.component.mjs +3 -3
  312. package/esm2022/lib/home/tools.component.mjs +3 -3
  313. package/esm2022/lib/impersonate/impersonate.component.mjs +3 -3
  314. package/esm2022/lib/mobile.module.mjs +4 -4
  315. package/esm2022/lib/modules/chart.module.mjs +4 -4
  316. package/esm2022/lib/modules/circular-gauge.module.mjs +4 -4
  317. package/esm2022/lib/modules/datepicker.intl.mjs +3 -3
  318. package/esm2022/lib/modules/dayjs.module.mjs +4 -4
  319. package/esm2022/lib/modules/diagram.module.mjs +4 -4
  320. package/esm2022/lib/modules/gantt.module.mjs +4 -4
  321. package/esm2022/lib/modules/grid.module.mjs +4 -4
  322. package/esm2022/lib/modules/linear-gauge.module.mjs +4 -4
  323. package/esm2022/lib/modules/material.module.mjs +4 -4
  324. package/esm2022/lib/modules/paginator.intl.mjs +3 -3
  325. package/esm2022/lib/modules/pivot.module.mjs +4 -4
  326. package/esm2022/lib/modules/schedule.module.mjs +4 -4
  327. package/esm2022/lib/modules/spreadsheet.module.mjs +4 -4
  328. package/esm2022/lib/modules/stepper.intl.mjs +3 -3
  329. package/esm2022/lib/modules/texteditor.module.mjs +4 -4
  330. package/esm2022/lib/notifications/filter.component.mjs +3 -3
  331. package/esm2022/lib/notifications/notifications-table.component.mjs +3 -3
  332. package/esm2022/lib/notifications/notifications.mobile.component.mjs +3 -3
  333. package/esm2022/lib/notifications/notifications.pane.component.mjs +3 -3
  334. package/esm2022/lib/notifications/notifications.service.mjs +3 -3
  335. package/esm2022/lib/notifications/types/commented.notification.mjs +3 -3
  336. package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  337. package/esm2022/lib/notifications/types/escalated.notification.mjs +3 -3
  338. package/esm2022/lib/notifications/types/invite.notification.mjs +3 -3
  339. package/esm2022/lib/notifications/types/liked.notification.mjs +3 -3
  340. package/esm2022/lib/notifications/types/long-running-task.notification.mjs +3 -3
  341. package/esm2022/lib/notifications/types/notification-base.mjs +3 -3
  342. package/esm2022/lib/notifications/types/nudge.notification.mjs +3 -3
  343. package/esm2022/lib/notifications/types/state-changed.notification.mjs +3 -3
  344. package/esm2022/lib/notifications/types/tagged.notification.mjs +3 -3
  345. package/esm2022/lib/notifications/types/text.notification.mjs +3 -3
  346. package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  347. package/esm2022/lib/options/options.component.mjs +3 -3
  348. package/esm2022/lib/options/options.service.mjs +3 -3
  349. package/esm2022/lib/reports/arguments-component.mjs +3 -3
  350. package/esm2022/lib/reports/cube/documents.component.mjs +3 -3
  351. package/esm2022/lib/reports/cube/grid-documents.component.mjs +5 -5
  352. package/esm2022/lib/reports/cube/role-performance.component.mjs +3 -3
  353. package/esm2022/lib/reports/cube/table-documents.component.mjs +3 -3
  354. package/esm2022/lib/reports/cube/usage-args.component.mjs +3 -3
  355. package/esm2022/lib/reports/cube/usage-base.mjs +3 -3
  356. package/esm2022/lib/reports/cube/usage-chart.component.mjs +6 -6
  357. package/esm2022/lib/reports/cube/usage-pivot.component.mjs +3 -3
  358. package/esm2022/lib/reports/cube/usage.component.mjs +3 -3
  359. package/esm2022/lib/reports/report-viewer.component.mjs +6 -9
  360. package/esm2022/lib/reports/report.mobile.component.mjs +3 -3
  361. package/esm2022/lib/reports/report.pane.component.mjs +3 -3
  362. package/esm2022/lib/reports/reports-menu.component.mjs +3 -3
  363. package/esm2022/lib/reports/substitution/substitution.component.mjs +3 -3
  364. package/esm2022/lib/reports/table/table-view.component.mjs +3 -3
  365. package/esm2022/lib/reports/tasks/tasks.component.mjs +3 -3
  366. package/esm2022/lib/routes.mobile.mjs +4 -7
  367. package/esm2022/lib/scheduler/schedule.component.mjs +3 -3
  368. package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  369. package/esm2022/lib/scheduler/scheduler.pane.component.mjs +5 -5
  370. package/esm2022/lib/search/cube.component.mjs +3 -3
  371. package/esm2022/lib/search/document.component.mjs +3 -3
  372. package/esm2022/lib/search/guide.component.mjs +3 -3
  373. package/esm2022/lib/search/path.component.mjs +3 -3
  374. package/esm2022/lib/search/search.service.mjs +3 -3
  375. package/esm2022/lib/shared.module.mjs +24 -15
  376. package/esm2022/lib/system.module.mjs +16 -16
  377. package/esm2022/lib/views/cube/chart.component.mjs +3 -3
  378. package/esm2022/lib/views/cube/cube-base.mjs +3 -3
  379. package/esm2022/lib/views/cube/explore.component.mjs +3 -3
  380. package/esm2022/lib/views/cube/matrix.component.mjs +3 -3
  381. package/esm2022/lib/views/cube/parallel.component.mjs +3 -3
  382. package/esm2022/lib/views/cube/pivot.component.mjs +3 -3
  383. package/esm2022/lib/views/cube/sum.component.mjs +3 -3
  384. package/esm2022/lib/views/cube/view.component.mjs +3 -3
  385. package/esm2022/lib/views/timeline/timeline.component.exp.mjs +3 -3
  386. package/esm2022/lib/views/view-item.component.mjs +3 -3
  387. package/esm2022/lib/views/views.component.mjs +3 -3
  388. package/esm2022/lib/views/views.mobile.component.mjs +3 -3
  389. package/esm2022/lib/views/views.pane.component.mjs +3 -3
  390. package/esm2022/public-api.mjs +4 -2
  391. package/fesm2022/bizdoc-core.mjs +1544 -1477
  392. package/fesm2022/bizdoc-core.mjs.map +1 -1
  393. package/lib/admin/architecture/designer-element.component.d.ts +26 -22
  394. package/lib/admin/architecture/designer.base.d.ts +7 -12
  395. package/lib/admin/architecture/elements/control.component.d.ts +0 -1
  396. package/lib/admin/architecture/elements/form.component.d.ts +1 -1
  397. package/lib/admin/architecture/elements/matrix-view.component.d.ts +13 -3
  398. package/lib/admin/profiler/profiler.component.d.ts +1 -1
  399. package/lib/compose/compose.mobile.component.d.ts +1 -2
  400. package/lib/compose/compose.pane.component.d.ts +0 -3
  401. package/lib/core/StickyToolbar.d.ts +13 -0
  402. package/lib/core/translations.d.ts +2 -0
  403. package/lib/cube/accum/accum.component.d.ts +1 -1
  404. package/lib/cube/chart/chart.component.d.ts +1 -1
  405. package/lib/cube/grid/grid.component.d.ts +1 -1
  406. package/lib/cube/parallel/parallel.component.d.ts +1 -1
  407. package/lib/cube/{grid → spreadsheet}/spreadsheet.component.d.ts +9 -2
  408. package/lib/cube/spreadsheet/spreadsheet.container.d.ts +5 -0
  409. package/lib/dashboard/actions/actions.widget.d.ts +1 -1
  410. package/lib/dashboard/cube/compare.widget.d.ts +1 -1
  411. package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -1
  412. package/lib/dashboard/cube/document-state.widget.d.ts +1 -1
  413. package/lib/dashboard/score/activity.widget.d.ts +1 -1
  414. package/lib/dashboard/score/compare-groups.widget.d.ts +1 -1
  415. package/lib/dashboard/score/peers-performance.widget.d.ts +1 -1
  416. package/lib/dashboard/score/personal-score.widget.d.ts +1 -1
  417. package/lib/shared.module.d.ts +140 -138
  418. package/lib/system.module.d.ts +1 -1
  419. package/package.json +17 -17
  420. package/public-api.d.ts +3 -1
  421. package/esm2022/lib/cube/grid/spreadsheet.component.mjs +0 -376
@@ -1,376 +0,0 @@
1
- import { EventEmitter, Component, Output, HostBinding, Input } from "@angular/core";
2
- import { firstValueFrom } from "rxjs";
3
- import { Spreadsheet, isNumber } from "@syncfusion/ej2-spreadsheet";
4
- import { Workbook } from '@syncfusion/ej2-excel-export';
5
- import { errResource } from "../cube.service";
6
- import { isArray, isString } from "../../core/functions";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../core/session.service";
9
- import * as i2 from "../../core/prompt.service";
10
- import * as i3 from "../cube.service";
11
- import * as i4 from "../../core/translate.service";
12
- import * as i5 from "../../core/datasource.service";
13
- export class CubeSpreadsheetComponent {
14
- static { this.nextId = 0; }
15
- set xAxis(val) {
16
- this._xAxis = isArray(val) ? val : [val];
17
- }
18
- set series(val) {
19
- if (val)
20
- this._series = isArray(val) ? val : [val];
21
- }
22
- set indices(val) {
23
- if (val)
24
- this._indices = isArray(val) ? val : [val];
25
- }
26
- constructor(_session, _sb, _service, _translate, _ds, _elementRef) {
27
- this._session = _session;
28
- this._sb = _sb;
29
- this._service = _service;
30
- this._translate = _translate;
31
- this._ds = _ds;
32
- this._elementRef = _elementRef;
33
- this.explore = new EventEmitter();
34
- this.loadingChange = new EventEmitter();
35
- this.id = `cube-spreadsheet-${CubeSpreadsheetComponent.nextId++}`;
36
- this.rows = [];
37
- this.scrollSettings = { isFinite: true };
38
- this.numberStyle = { textAlign: 'right' };
39
- this.autoFillSettings = { showFillOptions: false };
40
- this._yrows = [];
41
- this._xcolumns = [];
42
- }
43
- ngOnInit() {
44
- this._cube = this.cube ? this._session.profile.cubes.find(c => c.name === this.cube) : this._session.profile.cubes[0];
45
- this._numberFormat = `${this._cube.currencyCode ? 'c' : 'n'}${this._service.fractionDigits}`;
46
- if (this._series) {
47
- const yName = this._series[0], xName = this._xAxis[0], xAxis = this._cube.axes.find(a => a.name === xName), yAxis = this._cube.axes.find(a => a.name === yName);
48
- const promises = [];
49
- this.columns = [{
50
- width: 120
51
- }];
52
- // acquire columns source
53
- let promise = firstValueFrom(this._ds.all(xAxis.dataType)).
54
- then(c => {
55
- this._xcolumns = c;
56
- c.forEach(_ => this.columns.push({
57
- width: 90
58
- }));
59
- });
60
- promises.push(promise);
61
- // acquire rows source
62
- promise = firstValueFrom(this._ds.all(yAxis.dataType)).
63
- then(r => this._yrows = r);
64
- promises.push(promise);
65
- this._prepare = Promise.all(promises);
66
- }
67
- else {
68
- this._axes = this._xAxis.map(c => this._cube.axes.find(a => a.name == c));
69
- this.columns = this._axes.map(_ => {
70
- return {
71
- width: 120
72
- };
73
- });
74
- this.columns.push({
75
- width: 90
76
- } /* value */);
77
- this._indices && this._indices.forEach(_ => this.columns.push({
78
- width: 90
79
- }));
80
- }
81
- if (this._indices)
82
- this._cindices = this._cube.indices.filter(i => this._indices.indexOf(i.name) > -1);
83
- this.execute();
84
- }
85
- ngOnChanges(changes) {
86
- if (changes['filters'] && !changes['filters'].firstChange)
87
- this.execute();
88
- else if (changes['height'] || changes['width'])
89
- this.resize();
90
- }
91
- resize() {
92
- if (this.spreadsheet) {
93
- this.spreadsheet.height = this.height;
94
- this.spreadsheet.width = this.width;
95
- this.spreadsheet.refresh();
96
- }
97
- }
98
- execute() {
99
- this.loadingChange.emit(true);
100
- if (this._series)
101
- this._service.series(this.cube, this._xAxis, { series: this._series, filters: this.filters, indices: this._indices }).
102
- subscribe({
103
- next: data => {
104
- this._prepare.then(() => {
105
- this._dataseries(data);
106
- this._draw();
107
- this.loadingChange.emit(false);
108
- });
109
- }, error: e => {
110
- this._sb.error(errResource(e));
111
- this.loadingChange.emit(false);
112
- }
113
- });
114
- else
115
- this._service.table(this._cube.name, this._xAxis, { filters: this.filters, indices: this._indices }).
116
- subscribe({
117
- next: data => {
118
- this._datatable(data);
119
- this._draw();
120
- this.loadingChange.emit(false);
121
- }, error: e => {
122
- this._sb.error(errResource(e));
123
- this.loadingChange.emit(false);
124
- }
125
- });
126
- }
127
- _datatable(data) {
128
- const cells = [], style = { fontWeight: 'bold', textAlign: 'center' };
129
- this._axes.forEach(c => cells.push({
130
- value: c.title, style
131
- }));
132
- this._cindices?.forEach(i => cells.push({ value: i.title, style }));
133
- cells.push({
134
- value: this.yAxis ? this.yAxis.title : this._translate.get('Value'),
135
- style
136
- });
137
- this.rows = [{
138
- cells, height: 25
139
- }];
140
- data.forEach(d => {
141
- const cells = [];
142
- this._xAxis.forEach(c => cells.push({
143
- value: d[c],
144
- }));
145
- this._indices?.forEach(i => cells.push({
146
- style: this.numberStyle,
147
- format: this._numberFormat,
148
- value: (d[i] || 0),
149
- }));
150
- cells.push({
151
- style: this.numberStyle,
152
- format: this._numberFormat,
153
- value: (d.value || 0),
154
- });
155
- this.rows.push({ cells, source: d, height: 25 });
156
- });
157
- }
158
- _dataseries(d) {
159
- const style = { fontWeight: 'bold', textAlign: 'center' };
160
- const cells = [{ value: '' }];
161
- this._xcolumns.forEach(c => cells.push({ value: c.value, style }));
162
- this.rows = [{ cells, height: 25 }];
163
- this._cindices?.forEach(i => {
164
- const cells = [{ value: i.title, style }], series = d.find(s => s.index === i.name), map = {};
165
- if (series) {
166
- series.points.forEach(p => map[p.x] = p.y);
167
- this._xcolumns.forEach(c => cells.push({
168
- value: (map[c.key] || 0),
169
- format: this._numberFormat,
170
- style: this.numberStyle
171
- }));
172
- this.rows.push({ cells, height: 25 });
173
- }
174
- });
175
- this._yrows.forEach(r => {
176
- const cells = [{ value: r.value, style }], serie = d.find(s => s.name === r.key), map = {};
177
- if (serie) {
178
- serie.points.forEach(p => map[p.x] = p.y);
179
- this._xcolumns.forEach(c => cells.push({
180
- value: (map[c.key] || 0),
181
- format: this._numberFormat,
182
- style: this.numberStyle
183
- }));
184
- }
185
- else
186
- this._xcolumns.forEach(_ => cells.push({ value: 0 }));
187
- this.rows.push({ cells, height: 25 });
188
- });
189
- }
190
- _draw() {
191
- this.spreadsheet && this.spreadsheet.destroy();
192
- this.spreadsheet = new Spreadsheet({
193
- scrollSettings: this.scrollSettings,
194
- isProtected: true,
195
- allowEditing: false,
196
- allowDelete: false,
197
- allowInsert: false,
198
- showRibbon: false,
199
- allowAutoFill: false,
200
- autoFillSettings: this.autoFillSettings,
201
- enableClipboard: true,
202
- enableContextMenu: false,
203
- showFormulaBar: false,
204
- showSheetTabs: false,
205
- enableKeyboardNavigation: true,
206
- select: this.select.bind(this),
207
- sheets: [{
208
- columns: this.columns,
209
- frozenColumns: this._series !== undefined ? 1 : 0,
210
- frozenRows: 1,
211
- rows: this.rows,
212
- }],
213
- width: this.width,
214
- height: this.height,
215
- }, this._elementRef.nativeElement);
216
- }
217
- /**
218
- *
219
- * @param evt
220
- * @returns
221
- */
222
- select(evt) {
223
- const address = this.spreadsheet.getAddressInfo(evt.range);
224
- let [y, x, y1, x1] = address.indices;
225
- if (y1 < y) {
226
- const range = y;
227
- y = y1, y1 = range;
228
- }
229
- if (x1 < x) {
230
- const range = x;
231
- x = x1, x1 = range;
232
- }
233
- const axes = {};
234
- let index;
235
- if (y > this.rows.length - 1 || x > this.rows[y].cells.length - 1)
236
- return;
237
- if (y === y1 && x === x1 && this.rows[y].cells[x].value === 0)
238
- return;
239
- if (this._series) {
240
- if (y < 1) {
241
- if (this._indices)
242
- return;
243
- this._fillx(x, x1, axes);
244
- }
245
- else if (this._indices && y <= this._indices.length) {
246
- index = this._indices[y - 1];
247
- this._fillx(x, x1, axes);
248
- }
249
- else {
250
- if (this._indices)
251
- this._filly(y - this._indices.length, y1 - this._indices.length, axes);
252
- else
253
- this._filly(y, y1, axes);
254
- if (x > 0)
255
- this._fillx(x, x1, axes);
256
- }
257
- }
258
- else {
259
- if (y === 0)
260
- return;
261
- index = this._indices && x >= this._axes.length && x < this._axes.length + this._cindices.length ? this._cindices[x - this._axes.length].name : null;
262
- let i = y;
263
- do {
264
- this._axes.forEach(a => {
265
- const key = this.rows[i].source['_' + a.name];
266
- if (!axes[a.name])
267
- axes[a.name] = key;
268
- else if (isString(axes[a.name])) {
269
- if (axes[a.name] !== key)
270
- axes[a.name] = [axes[a.name], key];
271
- }
272
- else if (axes[a.name].indexOf(key) < 0)
273
- axes[a.name].push(key);
274
- });
275
- i++;
276
- } while (i <= y1);
277
- }
278
- this.explore.emit({ axes, index });
279
- }
280
- _filly(y, y1, axes) {
281
- const yName = this._series[0];
282
- let i = y - 1;
283
- while (i < y1) {
284
- let { key } = this._yrows[i];
285
- if (!axes[yName])
286
- axes[yName] = key;
287
- else if (isString(axes[yName]))
288
- axes[yName] = [axes[yName], key];
289
- else if (axes[yName].indexOf(key) < 0)
290
- axes[yName].push(key);
291
- i++;
292
- }
293
- }
294
- _fillx(x, x1, axes) {
295
- const xName = this._xAxis[0];
296
- let i = x - 1;
297
- while (i < x1) {
298
- let { key } = this._xcolumns[i];
299
- if (!axes[xName])
300
- axes[xName] = key;
301
- else if (isString(axes[xName]))
302
- axes[xName] = [axes[xName], key];
303
- else if (axes[xName].indexOf(key) < 0)
304
- axes[xName].push(key);
305
- i++;
306
- }
307
- }
308
- exportToExcel(title) {
309
- const { rows } = this.spreadsheet.sheets[0], numberFormat = this._service.numberFormat, book = new Workbook({
310
- worksheets: [
311
- {
312
- enableRtl: this._session.inverse,
313
- name: this._translate.get('SheetN', 1),
314
- columns: rows[0].cells.map((_, i) => ({ index: i + 1, width: 150 })),
315
- rows: rows.map((r, i) => ({
316
- index: i + 1,
317
- cells: r.cells.map((c, j) => {
318
- const header = i === 0 || (this._series !== undefined && j === 0), isnumber = !header && isNumber(c.value);
319
- return {
320
- type: isnumber ? 'number' : 'text',
321
- index: j + 1,
322
- value: c.value,
323
- style: {
324
- numberFormat,
325
- hAlign: isnumber ? 'right' : 'center',
326
- bold: header
327
- }
328
- };
329
- })
330
- })),
331
- },
332
- ],
333
- }, 'xlsx');
334
- book.save(`${title}.xlsx`);
335
- }
336
- ngOnDestroy() {
337
- this.spreadsheet && this.spreadsheet.destroy();
338
- }
339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: CubeSpreadsheetComponent, deps: [{ token: i1.SessionService }, { token: i2.PromptService }, { token: i3.CubeService }, { token: i4.TranslateService }, { token: i5.DatasourceService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
340
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: CubeSpreadsheetComponent, selector: "bizdoc-cube-spreadsheet", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", yAxis: "yAxis", series: "series", indices: "indices", filters: "filters", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true }); }
341
- }
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: CubeSpreadsheetComponent, decorators: [{
343
- type: Component,
344
- args: [{
345
- selector: 'bizdoc-cube-spreadsheet',
346
- template: '',
347
- host: {
348
- class: 'cube-view'
349
- }
350
- }]
351
- }], ctorParameters: () => [{ type: i1.SessionService }, { type: i2.PromptService }, { type: i3.CubeService }, { type: i4.TranslateService }, { type: i5.DatasourceService }, { type: i0.ElementRef }], propDecorators: { width: [{
352
- type: Input
353
- }], height: [{
354
- type: Input
355
- }], cube: [{
356
- type: Input
357
- }], xAxis: [{
358
- type: Input
359
- }], yAxis: [{
360
- type: Input
361
- }], series: [{
362
- type: Input
363
- }], indices: [{
364
- type: Input
365
- }], filters: [{
366
- type: Input
367
- }], explore: [{
368
- type: Output
369
- }], loading: [{
370
- type: Input
371
- }], loadingChange: [{
372
- type: Output
373
- }], id: [{
374
- type: HostBinding
375
- }] } });
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByZWFkc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL2dyaWQvc3ByZWFkc2hlZXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxXQUFXLEVBQXlCLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDN0ksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQW9DLFdBQVcsRUFBMEQsUUFBUSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQ25MLE9BQU8sRUFBRSxRQUFRLEVBQTBCLE1BQU0sOEJBQThCLENBQUM7QUFHaEYsT0FBTyxFQUFlLFdBQVcsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBS25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUFTekQsTUFBTSxPQUFPLHdCQUF3QjthQUNwQixXQUFNLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFRMUIsSUFDSSxLQUFLLENBQUMsR0FBc0I7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsSUFDSSxNQUFNLENBQUMsR0FBc0I7UUFDL0IsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFDSSxPQUFPLENBQUMsR0FBc0I7UUFDaEMsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBc0JELFlBQ1UsUUFBd0IsRUFDeEIsR0FBa0IsRUFDbEIsUUFBcUIsRUFDckIsVUFBNEIsRUFDNUIsR0FBc0IsRUFDdEIsV0FBdUI7UUFMdkIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBekJkLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUU3QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDaEQsT0FBRSxHQUFHLG9CQUFvQix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBRTVFLFNBQUksR0FBZSxFQUFFLENBQUM7UUFFYixtQkFBYyxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBeUIsQ0FBQztRQUMzRCxnQkFBVyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBb0IsQ0FBQztRQUN2RCxxQkFBZ0IsR0FBRyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQTJCLENBQUM7UUFNeEUsV0FBTSxHQUErQixFQUFFLENBQUM7UUFDeEMsY0FBUyxHQUErQixFQUFFLENBQUM7SUFTZCxDQUFDO0lBQ3RDLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RILElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUM1RixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFDbkQsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxRQUFRLEdBQW1CLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUM7b0JBQ2QsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsQ0FBQyxDQUFDO1lBQ0gseUJBQXlCO1lBQ3pCLElBQUksT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUMvQixLQUFLLEVBQUUsRUFBRTtpQkFDSyxDQUNmLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBaUIsQ0FBQztZQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLHNCQUFzQjtZQUN0QixPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXZCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEMsT0FBTztvQkFDTCxLQUFLLEVBQUUsR0FBRztpQkFDSSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLEtBQUssRUFBRSxFQUFFO2FBQ1YsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDNUQsS0FBSyxFQUFFLEVBQUU7YUFDSyxDQUNmLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXO1lBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUVmLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25ILFNBQVMsQ0FBQztnQkFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDOztZQUVMLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsRyxTQUFTLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDWixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7YUFDRixDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQTBCO1FBQzNDLE1BQU0sS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQW9CLENBQUM7UUFDeEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2pDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUs7U0FDVCxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDakYsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ25FLEtBQUs7U0FDTyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO2dCQUNYLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTthQUNOLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDckMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQzFCLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQVE7YUFDYixDQUFDLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUMxQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBUTthQUNoQixDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFjLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsQ0FBVztRQUM3QixNQUFNLEtBQUssR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBb0IsQ0FBQztRQUM1RSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBZSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxQixNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFlLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDM0csSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ3JDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFRO29CQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDeEIsQ0FBQyxDQUNELENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBYyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBZSxDQUFDLEVBQ3BELEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNsRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDckMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQVE7b0JBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUN4QixDQUFDLENBQ0QsQ0FBQztZQUNKLENBQUM7O2dCQUVDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFRLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBYyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSztRQUNYLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQ2pDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsS0FBSztZQUNuQixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztZQUNsQixVQUFVLEVBQUUsS0FBSztZQUNqQixhQUFhLEVBQUUsS0FBSztZQUNwQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsY0FBYyxFQUFFLEtBQUs7WUFDckIsYUFBYSxFQUFFLEtBQUs7WUFDcEIsd0JBQXdCLEVBQUUsSUFBSTtZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxDQUFDO29CQUNQLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELFVBQVUsRUFBRSxDQUFDO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQztZQUNGLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQW9CO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNoQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQU8sRUFBRSxDQUFDO1FBQ3BCLElBQUksS0FBYSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBQzFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQVksS0FBSyxDQUFDO1lBQUUsT0FBTztRQUM3RSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVixJQUFJLElBQUksQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO2lCQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0IsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLElBQUksSUFBSSxDQUFDLFFBQVE7b0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDOztvQkFFdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDO29CQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU87WUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNySixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixHQUFHLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JCLE1BQU0sR0FBRyxHQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQzt5QkFDaEIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHOzRCQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUMvRCxDQUFDO3lCQUNJLElBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0YsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxFQUFFLENBQUM7WUFDTixDQUFDLFFBQ00sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ08sTUFBTSxDQUFDLENBQVMsRUFBRSxFQUFVLEVBQUUsSUFBUTtRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ2YsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzlCLElBQUssSUFBSSxDQUFDLEtBQUssQ0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsRUFBRSxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsQ0FBUyxFQUFFLEVBQVUsRUFBRSxJQUFRO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2QsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDZixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDOUIsSUFBSyxJQUFJLENBQUMsS0FBSyxDQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxLQUFLLENBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDekMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUN6QyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQ2pCO1lBQ0UsVUFBVSxFQUFFO2dCQUNWO29CQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87b0JBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYSxDQUFBLENBQUM7b0JBQzlFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDdkI7d0JBQ0UsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUNaLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDL0QsUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzFDLE9BQU87Z0NBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dDQUNsQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0NBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dDQUNkLEtBQUssRUFBRTtvQ0FDTCxZQUFZO29DQUNaLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtvQ0FDckMsSUFBSSxFQUFFLE1BQU07aUNBQ2I7NkJBQ0YsQ0FBQzt3QkFDSixDQUFDLENBQ0E7cUJBQ00sQ0FBQSxDQUFDO2lCQUNBO2FBQ2Y7U0FDRixFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakQsQ0FBQzs4R0E1V1Usd0JBQXdCO2tHQUF4Qix3QkFBd0IsdVlBTHpCLEVBQUU7OzJGQUtELHdCQUF3QjtrQkFQcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLFdBQVc7cUJBQ25CO2lCQUNGO2lPQUlDLEtBQUs7c0JBREosS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sSUFBSTtzQkFESCxLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBR0YsTUFBTTtzQkFEVCxLQUFLO2dCQUtGLE9BQU87c0JBRFYsS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBRWEsT0FBTztzQkFBekIsTUFBTTtnQkFDRSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ2EsYUFBYTtzQkFBL0IsTUFBTTtnQkFDUSxFQUFFO3NCQUFoQixXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBDb21wb25lbnQsIE91dHB1dCwgT25Jbml0LCBIb3N0QmluZGluZywgRWxlbWVudFJlZiwgT25EZXN0cm95LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDZWxsTW9kZWwsIENvbHVtbk1vZGVsLCBSb3dNb2RlbCwgU3ByZWFkc2hlZXQsIENlbGxTdHlsZU1vZGVsLCBTZWxlY3RFdmVudEFyZ3MsIEF1dG9GaWxsU2V0dGluZ3NNb2RlbCwgaXNOdW1iZXIsIFNjcm9sbFNldHRpbmdzTW9kZWwgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLXNwcmVhZHNoZWV0XCI7XHJcbmltcG9ydCB7IFdvcmtib29rLCBXb3Jrc2hlZXQsIFJvdywgQ29sdW1uIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IEF4aXNDbGlja0V2ZW50LCBDdWJlVmlld2VyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBBeGVzTWFwLCBDdWJlLCBDdWJlQXhpcywgQ3ViZUluZGV4LCBZQXhpcyB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBDdWJlU2VydmljZSwgZXJyUmVzb3VyY2UsIFNlcmllcyB9IGZyb20gXCIuLi9jdWJlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRhc291cmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2RhdGFzb3VyY2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1zcHJlYWRzaGVldCcsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAnY3ViZS12aWV3J1xyXG4gIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIEN1YmVTcHJlYWRzaGVldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ3ViZVZpZXdlckNvbXBvbmVudCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgQElucHV0KClcclxuICB3aWR0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgaGVpZ2h0OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBjdWJlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfY3ViZTogQ3ViZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCB4QXhpcyh2YWw6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLl94QXhpcyA9IGlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHlBeGlzPzogWUF4aXM7XHJcbiAgQElucHV0KClcclxuICBzZXQgc2VyaWVzKHZhbDogc3RyaW5nW10gfCBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHRoaXMuX3NlcmllcyA9IGlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHNldCBpbmRpY2VzKHZhbDogc3RyaW5nW10gfCBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHRoaXMuX2luZGljZXMgPSBpc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBmaWx0ZXJzPzogQXhlc01hcDtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXhwbG9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXhpc0NsaWNrRXZlbnQ+KCk7XHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbG9hZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBjdWJlLXNwcmVhZHNoZWV0LSR7Q3ViZVNwcmVhZHNoZWV0Q29tcG9uZW50Lm5leHRJZCsrfWA7XHJcbiAgc3ByZWFkc2hlZXQ6IFNwcmVhZHNoZWV0O1xyXG4gIHJvd3M6IFJvd01vZGVsW10gPSBbXTtcclxuICBjb2x1bW5zOiBDb2x1bW5Nb2RlbFtdO1xyXG4gIHJlYWRvbmx5IHNjcm9sbFNldHRpbmdzID0geyBpc0Zpbml0ZTogdHJ1ZSB9IGFzIFNjcm9sbFNldHRpbmdzTW9kZWw7XHJcbiAgcmVhZG9ubHkgbnVtYmVyU3R5bGUgPSB7IHRleHRBbGlnbjogJ3JpZ2h0JyB9IGFzIENlbGxTdHlsZU1vZGVsO1xyXG4gIHJlYWRvbmx5IGF1dG9GaWxsU2V0dGluZ3MgPSB7IHNob3dGaWxsT3B0aW9uczogZmFsc2UgfSBhcyBBdXRvRmlsbFNldHRpbmdzTW9kZWw7XHJcbiAgcHJpdmF0ZSBfeEF4aXM6IHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgX3Nlcmllcz86IHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgX2luZGljZXM/OiBzdHJpbmdbXTtcclxuICBwcml2YXRlIF9heGVzOiBDdWJlQXhpc1tdO1xyXG4gIHByaXZhdGUgX2NpbmRpY2VzOiBDdWJlSW5kZXhbXTtcclxuICBwcml2YXRlIF95cm93czogeyBrZXk6IGFueTsgdmFsdWU6IGFueSB9W10gPSBbXTtcclxuICBwcml2YXRlIF94Y29sdW1uczogeyBrZXk6IGFueTsgdmFsdWU6IGFueSB9W10gPSBbXTtcclxuICBwcml2YXRlIF9wcmVwYXJlOiBQcm9taXNlPGFueVtdPjtcclxuICBwcml2YXRlIF9udW1iZXJGb3JtYXQ6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RzOiBEYXRhc291cmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3ViZSA9IHRoaXMuY3ViZSA/IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlcy5maW5kKGMgPT4gYy5uYW1lID09PSB0aGlzLmN1YmUpIDogdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzWzBdO1xyXG4gICAgdGhpcy5fbnVtYmVyRm9ybWF0ID0gYCR7dGhpcy5fY3ViZS5jdXJyZW5jeUNvZGUgPyAnYycgOiAnbid9JHt0aGlzLl9zZXJ2aWNlLmZyYWN0aW9uRGlnaXRzfWBcclxuICAgIGlmICh0aGlzLl9zZXJpZXMpIHtcclxuICAgICAgY29uc3QgeU5hbWUgPSB0aGlzLl9zZXJpZXNbMF0sIHhOYW1lID0gdGhpcy5feEF4aXNbMF0sXHJcbiAgICAgICAgeEF4aXMgPSB0aGlzLl9jdWJlLmF4ZXMuZmluZChhID0+IGEubmFtZSA9PT0geE5hbWUpLFxyXG4gICAgICAgIHlBeGlzID0gdGhpcy5fY3ViZS5heGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IHlOYW1lKTtcclxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFt7XHJcbiAgICAgICAgd2lkdGg6IDEyMFxyXG4gICAgICB9XTtcclxuICAgICAgLy8gYWNxdWlyZSBjb2x1bW5zIHNvdXJjZVxyXG4gICAgICBsZXQgcHJvbWlzZSA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2RzLmFsbCh4QXhpcy5kYXRhVHlwZSkpLlxyXG4gICAgICAgIHRoZW4oYyA9PiB7XHJcbiAgICAgICAgICB0aGlzLl94Y29sdW1ucyA9IGM7XHJcbiAgICAgICAgICBjLmZvckVhY2goXyA9PiB0aGlzLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAgIHdpZHRoOiA5MFxyXG4gICAgICAgICAgfSBhcyBDb2x1bW5Nb2RlbFxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgICAgfSkgYXMgUHJvbWlzZTxhbnk+O1xyXG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAvLyBhY3F1aXJlIHJvd3Mgc291cmNlXHJcbiAgICAgIHByb21pc2UgPSBmaXJzdFZhbHVlRnJvbSh0aGlzLl9kcy5hbGwoeUF4aXMuZGF0YVR5cGUpKS5cclxuICAgICAgICB0aGVuKHIgPT4gdGhpcy5feXJvd3MgPSByKTtcclxuICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuXHJcbiAgICAgIHRoaXMuX3ByZXBhcmUgPSBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fYXhlcyA9IHRoaXMuX3hBeGlzLm1hcChjID0+IHRoaXMuX2N1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09IGMpKTtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5fYXhlcy5tYXAoXyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHdpZHRoOiAxMjBcclxuICAgICAgICB9IGFzIENvbHVtbk1vZGVsO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goe1xyXG4gICAgICAgIHdpZHRoOiA5MFxyXG4gICAgICB9IC8qIHZhbHVlICovKTtcclxuICAgICAgdGhpcy5faW5kaWNlcyAmJiB0aGlzLl9pbmRpY2VzLmZvckVhY2goXyA9PiB0aGlzLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgd2lkdGg6IDkwXHJcbiAgICAgIH0gYXMgQ29sdW1uTW9kZWxcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faW5kaWNlcykgdGhpcy5fY2luZGljZXMgPSB0aGlzLl9jdWJlLmluZGljZXMuZmlsdGVyKGkgPT4gdGhpcy5faW5kaWNlcy5pbmRleE9mKGkubmFtZSkgPiAtMSk7XHJcbiAgICB0aGlzLmV4ZWN1dGUoKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSAmJiAhY2hhbmdlc1snZmlsdGVycyddLmZpcnN0Q2hhbmdlKVxyXG4gICAgICB0aGlzLmV4ZWN1dGUoKTtcclxuICAgIGVsc2VcclxuICAgICAgaWYgKGNoYW5nZXNbJ2hlaWdodCddIHx8IGNoYW5nZXNbJ3dpZHRoJ10pXHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICB9XHJcbiAgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuc3ByZWFkc2hlZXQpIHtcclxuICAgICAgdGhpcy5zcHJlYWRzaGVldC5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgdGhpcy5zcHJlYWRzaGVldC53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgIHRoaXMuc3ByZWFkc2hlZXQucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZSgpIHtcclxuICAgIHRoaXMubG9hZGluZ0NoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgaWYgKHRoaXMuX3NlcmllcylcclxuICAgICAgdGhpcy5fc2VydmljZS5zZXJpZXModGhpcy5jdWJlLCB0aGlzLl94QXhpcywgeyBzZXJpZXM6IHRoaXMuX3NlcmllcywgZmlsdGVyczogdGhpcy5maWx0ZXJzLCBpbmRpY2VzOiB0aGlzLl9pbmRpY2VzIH0pLlxyXG4gICAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9kYXRhc2VyaWVzKGRhdGEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgZXJyb3I6IGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zYi5lcnJvcihlcnJSZXNvdXJjZShlKSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fc2VydmljZS50YWJsZSh0aGlzLl9jdWJlLm5hbWUsIHRoaXMuX3hBeGlzLCB7IGZpbHRlcnM6IHRoaXMuZmlsdGVycywgaW5kaWNlczogdGhpcy5faW5kaWNlcyB9KS5cclxuICAgICAgICBzdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGF0YWJsZShkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICB9LCBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NiLmVycm9yKGVyclJlc291cmNlKGUpKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0YXRhYmxlKGRhdGE6IHsgdmFsdWU6IG51bWJlcjsgfVtdKSB7XHJcbiAgICBjb25zdCBjZWxscyA9IFtdLCBzdHlsZSA9IHsgZm9udFdlaWdodDogJ2JvbGQnLCB0ZXh0QWxpZ246ICdjZW50ZXInIH0gYXMgQ2VsbFN0eWxlTW9kZWw7XHJcbiAgICB0aGlzLl9heGVzLmZvckVhY2goYyA9PiBjZWxscy5wdXNoKHtcclxuICAgICAgdmFsdWU6IGMudGl0bGUsIHN0eWxlXHJcbiAgICB9IGFzIENlbGxNb2RlbCkpO1xyXG4gICAgdGhpcy5fY2luZGljZXM/LmZvckVhY2goaSA9PiBjZWxscy5wdXNoKHsgdmFsdWU6IGkudGl0bGUsIHN0eWxlIH0gYXMgQ2VsbE1vZGVsKSk7XHJcbiAgICBjZWxscy5wdXNoKHtcclxuICAgICAgdmFsdWU6IHRoaXMueUF4aXMgPyB0aGlzLnlBeGlzLnRpdGxlIDogdGhpcy5fdHJhbnNsYXRlLmdldCgnVmFsdWUnKSxcclxuICAgICAgc3R5bGVcclxuICAgIH0gYXMgQ2VsbE1vZGVsKTtcclxuICAgIHRoaXMucm93cyA9IFt7XHJcbiAgICAgIGNlbGxzLCBoZWlnaHQ6IDI1XHJcbiAgICB9IGFzIFJvd01vZGVsXTtcclxuICAgIGRhdGEuZm9yRWFjaChkID0+IHtcclxuICAgICAgY29uc3QgY2VsbHMgPSBbXTtcclxuICAgICAgdGhpcy5feEF4aXMuZm9yRWFjaChjID0+IGNlbGxzLnB1c2goe1xyXG4gICAgICAgIHZhbHVlOiBkW2NdLFxyXG4gICAgICB9IGFzIENlbGxNb2RlbCkpO1xyXG4gICAgICB0aGlzLl9pbmRpY2VzPy5mb3JFYWNoKGkgPT4gY2VsbHMucHVzaCh7XHJcbiAgICAgICAgc3R5bGU6IHRoaXMubnVtYmVyU3R5bGUsXHJcbiAgICAgICAgZm9ybWF0OiB0aGlzLl9udW1iZXJGb3JtYXQsXHJcbiAgICAgICAgdmFsdWU6IChkW2ldIHx8IDApIGFzIGFueSxcclxuICAgICAgfSBhcyBDZWxsTW9kZWwpKTtcclxuICAgICAgY2VsbHMucHVzaCh7XHJcbiAgICAgICAgc3R5bGU6IHRoaXMubnVtYmVyU3R5bGUsXHJcbiAgICAgICAgZm9ybWF0OiB0aGlzLl9udW1iZXJGb3JtYXQsXHJcbiAgICAgICAgdmFsdWU6IChkLnZhbHVlIHx8IDApIGFzIGFueSxcclxuICAgICAgfSBhcyBDZWxsTW9kZWwpO1xyXG4gICAgICB0aGlzLnJvd3MucHVzaCh7IGNlbGxzLCBzb3VyY2U6IGQsIGhlaWdodDogMjUgfSBhcyBSb3dNb2RlbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RhdGFzZXJpZXMoZDogU2VyaWVzW10pIHtcclxuICAgIGNvbnN0IHN0eWxlID0geyBmb250V2VpZ2h0OiAnYm9sZCcsIHRleHRBbGlnbjogJ2NlbnRlcicgfSBhcyBDZWxsU3R5bGVNb2RlbDtcclxuICAgIGNvbnN0IGNlbGxzID0gW3sgdmFsdWU6ICcnIH0gYXMgQ2VsbE1vZGVsXTtcclxuICAgIHRoaXMuX3hjb2x1bW5zLmZvckVhY2goYyA9PiBjZWxscy5wdXNoKHsgdmFsdWU6IGMudmFsdWUsIHN0eWxlIH0pKTtcclxuICAgIHRoaXMucm93cyA9IFt7IGNlbGxzLCBoZWlnaHQ6IDI1IH1dO1xyXG4gICAgdGhpcy5fY2luZGljZXM/LmZvckVhY2goaSA9PiB7XHJcbiAgICAgIGNvbnN0IGNlbGxzID0gW3sgdmFsdWU6IGkudGl0bGUsIHN0eWxlIH0gYXMgQ2VsbE1vZGVsXSwgc2VyaWVzID0gZC5maW5kKHMgPT4gcy5pbmRleCA9PT0gaS5uYW1lKSwgbWFwID0ge307XHJcbiAgICAgIGlmIChzZXJpZXMpIHtcclxuICAgICAgICBzZXJpZXMucG9pbnRzLmZvckVhY2gocCA9PiBtYXBbcC54XSA9IHAueSk7XHJcbiAgICAgICAgdGhpcy5feGNvbHVtbnMuZm9yRWFjaChjID0+IGNlbGxzLnB1c2goe1xyXG4gICAgICAgICAgdmFsdWU6IChtYXBbYy5rZXldIHx8IDApIGFzIGFueSxcclxuICAgICAgICAgIGZvcm1hdDogdGhpcy5fbnVtYmVyRm9ybWF0LFxyXG4gICAgICAgICAgc3R5bGU6IHRoaXMubnVtYmVyU3R5bGVcclxuICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yb3dzLnB1c2goeyBjZWxscywgaGVpZ2h0OiAyNSB9IGFzIFJvd01vZGVsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl95cm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBjb25zdCBjZWxscyA9IFt7IHZhbHVlOiByLnZhbHVlLCBzdHlsZSB9IGFzIENlbGxNb2RlbF0sXHJcbiAgICAgICAgc2VyaWUgPSBkLmZpbmQocyA9PiBzLm5hbWUgPT09IHIua2V5KSwgbWFwID0ge307XHJcbiAgICAgIGlmIChzZXJpZSkge1xyXG4gICAgICAgIHNlcmllLnBvaW50cy5mb3JFYWNoKHAgPT4gbWFwW3AueF0gPSBwLnkpO1xyXG4gICAgICAgIHRoaXMuX3hjb2x1bW5zLmZvckVhY2goYyA9PiBjZWxscy5wdXNoKHtcclxuICAgICAgICAgIHZhbHVlOiAobWFwW2Mua2V5XSB8fCAwKSBhcyBhbnksXHJcbiAgICAgICAgICBmb3JtYXQ6IHRoaXMuX251bWJlckZvcm1hdCxcclxuICAgICAgICAgIHN0eWxlOiB0aGlzLm51bWJlclN0eWxlXHJcbiAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLl94Y29sdW1ucy5mb3JFYWNoKF8gPT4gY2VsbHMucHVzaCh7IHZhbHVlOiAwIGFzIGFueSB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIHRoaXMucm93cy5wdXNoKHsgY2VsbHMsIGhlaWdodDogMjUgfSBhcyBSb3dNb2RlbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXcoKSB7XHJcbiAgICB0aGlzLnNwcmVhZHNoZWV0ICYmIHRoaXMuc3ByZWFkc2hlZXQuZGVzdHJveSgpO1xyXG4gICAgdGhpcy5zcHJlYWRzaGVldCA9IG5ldyBTcHJlYWRzaGVldCh7XHJcbiAgICAgIHNjcm9sbFNldHRpbmdzOiB0aGlzLnNjcm9sbFNldHRpbmdzLFxyXG4gICAgICBpc1Byb3RlY3RlZDogdHJ1ZSxcclxuICAgICAgYWxsb3dFZGl0aW5nOiBmYWxzZSxcclxuICAgICAgYWxsb3dEZWxldGU6IGZhbHNlLFxyXG4gICAgICBhbGxvd0luc2VydDogZmFsc2UsXHJcbiAgICAgIHNob3dSaWJib246IGZhbHNlLFxyXG4gICAgICBhbGxvd0F1dG9GaWxsOiBmYWxzZSxcclxuICAgICAgYXV0b0ZpbGxTZXR0aW5nczogdGhpcy5hdXRvRmlsbFNldHRpbmdzLFxyXG4gICAgICBlbmFibGVDbGlwYm9hcmQ6IHRydWUsXHJcbiAgICAgIGVuYWJsZUNvbnRleHRNZW51OiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm11bGFCYXI6IGZhbHNlLFxyXG4gICAgICBzaG93U2hlZXRUYWJzOiBmYWxzZSxcclxuICAgICAgZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uOiB0cnVlLFxyXG4gICAgICBzZWxlY3Q6IHRoaXMuc2VsZWN0LmJpbmQodGhpcyksXHJcbiAgICAgIHNoZWV0czogW3tcclxuICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgICAgZnJvemVuQ29sdW1uczogdGhpcy5fc2VyaWVzICE9PSB1bmRlZmluZWQgPyAxIDogMCxcclxuICAgICAgICBmcm96ZW5Sb3dzOiAxLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucm93cyxcclxuICAgICAgfV0sXHJcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxyXG4gICAgfSwgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGV2dFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgc2VsZWN0KGV2dDogU2VsZWN0RXZlbnRBcmdzKSB7XHJcbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5zcHJlYWRzaGVldC5nZXRBZGRyZXNzSW5mbyhldnQucmFuZ2UpO1xyXG4gICAgbGV0IFt5LCB4LCB5MSwgeDFdID0gYWRkcmVzcy5pbmRpY2VzO1xyXG4gICAgaWYgKHkxIDwgeSkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHk7XHJcbiAgICAgIHkgPSB5MSwgeTEgPSByYW5nZTtcclxuICAgIH1cclxuICAgIGlmICh4MSA8IHgpIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSB4O1xyXG4gICAgICB4ID0geDEsIHgxID0gcmFuZ2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBheGVzOiB7fSA9IHt9O1xyXG4gICAgbGV0IGluZGV4OiBzdHJpbmc7XHJcbiAgICBpZiAoeSA+IHRoaXMucm93cy5sZW5ndGggLSAxIHx8IHggPiB0aGlzLnJvd3NbeV0uY2VsbHMubGVuZ3RoIC0gMSkgcmV0dXJuO1xyXG4gICAgaWYgKHkgPT09IHkxICYmIHggPT09IHgxICYmIHRoaXMucm93c1t5XS5jZWxsc1t4XS52YWx1ZSBhcyBhbnkgPT09IDApIHJldHVybjtcclxuICAgIGlmICh0aGlzLl9zZXJpZXMpIHtcclxuICAgICAgaWYgKHkgPCAxKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luZGljZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLl9maWxseCh4LCB4MSwgYXhlcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5faW5kaWNlcyAmJiB5IDw9IHRoaXMuX2luZGljZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLl9pbmRpY2VzW3kgLSAxXTtcclxuICAgICAgICB0aGlzLl9maWxseCh4LCB4MSwgYXhlcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luZGljZXMpXHJcbiAgICAgICAgICB0aGlzLl9maWxseSh5IC0gdGhpcy5faW5kaWNlcy5sZW5ndGgsIHkxIC0gdGhpcy5faW5kaWNlcy5sZW5ndGgsIGF4ZXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuX2ZpbGx5KHksIHkxLCBheGVzKTtcclxuICAgICAgICBpZiAoeCA+IDApXHJcbiAgICAgICAgICB0aGlzLl9maWxseCh4LCB4MSwgYXhlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoeSA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICBpbmRleCA9IHRoaXMuX2luZGljZXMgJiYgeCA+PSB0aGlzLl9heGVzLmxlbmd0aCAmJiB4IDwgdGhpcy5fYXhlcy5sZW5ndGggKyB0aGlzLl9jaW5kaWNlcy5sZW5ndGggPyB0aGlzLl9jaW5kaWNlc1t4IC0gdGhpcy5fYXhlcy5sZW5ndGhdLm5hbWUgOiBudWxsO1xyXG4gICAgICBsZXQgaSA9IHk7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICB0aGlzLl9heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSAodGhpcy5yb3dzW2ldIGFzIGFueSkuc291cmNlWydfJyArIGEubmFtZV07XHJcbiAgICAgICAgICBpZiAoIWF4ZXNbYS5uYW1lXSlcclxuICAgICAgICAgICAgYXhlc1thLm5hbWVdID0ga2V5O1xyXG4gICAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXhlc1thLm5hbWVdKSkge1xyXG4gICAgICAgICAgICBpZiAoYXhlc1thLm5hbWVdICE9PSBrZXkpIGF4ZXNbYS5uYW1lXSA9IFtheGVzW2EubmFtZV0sIGtleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICgoYXhlc1thLm5hbWVdIGFzIHN0cmluZ1tdKS5pbmRleE9mKGtleSkgPCAwKSAoYXhlc1thLm5hbWVdIGFzIHN0cmluZ1tdKS5wdXNoKGtleSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChpIDw9IHkxKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwbG9yZS5lbWl0KHsgYXhlcywgaW5kZXggfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpbGx5KHk6IG51bWJlciwgeTE6IG51bWJlciwgYXhlczoge30pIHtcclxuICAgIGNvbnN0IHlOYW1lID0gdGhpcy5fc2VyaWVzWzBdO1xyXG4gICAgbGV0IGkgPSB5IC0gMTtcclxuICAgIHdoaWxlIChpIDwgeTEpIHtcclxuICAgICAgbGV0IHsga2V5IH0gPSB0aGlzLl95cm93c1tpXTtcclxuICAgICAgaWYgKCFheGVzW3lOYW1lXSlcclxuICAgICAgICBheGVzW3lOYW1lXSA9IGtleTtcclxuICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXhlc1t5TmFtZV0pKVxyXG4gICAgICAgIGF4ZXNbeU5hbWVdID0gW2F4ZXNbeU5hbWVdLCBrZXldO1xyXG4gICAgICBlbHNlIGlmICgoYXhlc1t5TmFtZV0gYXMgc3RyaW5nW10pLmluZGV4T2Yoa2V5KSA8IDApXHJcbiAgICAgICAgKGF4ZXNbeU5hbWVdIGFzIHN0cmluZ1tdKS5wdXNoKGtleSk7XHJcbiAgICAgIGkrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbGx4KHg6IG51bWJlciwgeDE6IG51bWJlciwgYXhlczoge30pIHtcclxuICAgIGNvbnN0IHhOYW1lID0gdGhpcy5feEF4aXNbMF07XHJcbiAgICBsZXQgaSA9IHggLSAxO1xyXG4gICAgd2hpbGUgKGkgPCB4MSkge1xyXG4gICAgICBsZXQgeyBrZXkgfSA9IHRoaXMuX3hjb2x1bW5zW2ldO1xyXG4gICAgICBpZiAoIWF4ZXNbeE5hbWVdKVxyXG4gICAgICAgIGF4ZXNbeE5hbWVdID0ga2V5O1xyXG4gICAgICBlbHNlIGlmIChpc1N0cmluZyhheGVzW3hOYW1lXSkpXHJcbiAgICAgICAgYXhlc1t4TmFtZV0gPSBbYXhlc1t4TmFtZV0sIGtleV07XHJcbiAgICAgIGVsc2UgaWYgKChheGVzW3hOYW1lXSBhcyBzdHJpbmdbXSkuaW5kZXhPZihrZXkpIDwgMClcclxuICAgICAgICAoYXhlc1t4TmFtZV0gYXMgc3RyaW5nW10pLnB1c2goa2V5KTtcclxuICAgICAgaSsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3ByZWFkc2hlZXQuc2hlZXRzWzBdLFxyXG4gICAgICBudW1iZXJGb3JtYXQgPSB0aGlzLl9zZXJ2aWNlLm51bWJlckZvcm1hdCxcclxuICAgICAgYm9vayA9IG5ldyBXb3JrYm9vayhcclxuICAgICAgICB7XHJcbiAgICAgICAgICB3b3Jrc2hlZXRzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBlbmFibGVSdGw6IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSxcclxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTaGVldE4nLCAxKSxcclxuICAgICAgICAgICAgICBjb2x1bW5zOiByb3dzWzBdLmNlbGxzLm1hcCgoXywgaSkgPT4gKHsgaW5kZXg6IGkgKyAxLCB3aWR0aDogMTUwIH0gYXMgQ29sdW1uKSksXHJcbiAgICAgICAgICAgICAgcm93czogcm93cy5tYXAoKHIsIGkpID0+IChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxyXG4gICAgICAgICAgICAgICAgICBjZWxsczogci5jZWxscy5tYXAoKGMsIGopID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBpID09PSAwIHx8ICh0aGlzLl9zZXJpZXMgIT09IHVuZGVmaW5lZCAmJiBqID09PSAwKSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzbnVtYmVyID0gIWhlYWRlciAmJiBpc051bWJlcihjLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogaXNudW1iZXIgPyAnbnVtYmVyJyA6ICd0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBqICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoQWxpZ246IGlzbnVtYmVyID8gJ3JpZ2h0JyA6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2xkOiBoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH0gYXMgUm93KSksXHJcbiAgICAgICAgICAgIH0gYXMgV29ya3NoZWV0LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgICd4bHN4J1xyXG4gICAgICApO1xyXG4gICAgYm9vay5zYXZlKGAke3RpdGxlfS54bHN4YCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zcHJlYWRzaGVldCAmJiB0aGlzLnNwcmVhZHNoZWV0LmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuIl19