@bizdoc/core 1.16.31 → 1.16.32

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 (711) hide show
  1. package/assets/themes/brown.min.css +1 -1
  2. package/assets/themes/dark.min.css +7 -2
  3. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  4. package/assets/themes/deep-purple-teal.min.css +1 -1
  5. package/assets/themes/default.min.css +1 -1
  6. package/assets/themes/green.min.css +1 -1
  7. package/assets/themes/indigo.min.css +1 -1
  8. package/bizdoc-core.d.ts.map +1 -0
  9. package/esm2020/lib/admin/admin-dismiss.service.mjs +4 -4
  10. package/esm2020/lib/admin/admin-menu.component.mjs +4 -4
  11. package/esm2020/lib/admin/configuration-designer/cube-axes-filter.component.mjs +4 -4
  12. package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +13 -13
  13. package/esm2020/lib/admin/configuration-designer/designer-privileges.component.mjs +4 -4
  14. package/esm2020/lib/admin/configuration-designer/designer.base.mjs +10 -10
  15. package/esm2020/lib/admin/configuration-designer/designer.component.mjs +7 -6
  16. package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +4 -4
  17. package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +4 -4
  18. package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +4 -4
  19. package/esm2020/lib/admin/configuration-designer/elements/anomaly-rule.component.mjs +4 -4
  20. package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +4 -4
  21. package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +4 -4
  22. package/esm2020/lib/admin/configuration-designer/elements/cube-index-utility.component.mjs +4 -4
  23. package/esm2020/lib/admin/configuration-designer/elements/cube-view.component.mjs +4 -4
  24. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +4 -4
  25. package/esm2020/lib/admin/configuration-designer/elements/documents-report.component.mjs +4 -4
  26. package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +4 -4
  27. package/esm2020/lib/admin/configuration-designer/elements/explore-view.component.mjs +4 -4
  28. package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +4 -4
  29. package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +4 -4
  30. package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +4 -4
  31. package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +4 -4
  32. package/esm2020/lib/admin/configuration-designer/elements/node.component.mjs +4 -4
  33. package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +4 -4
  34. package/esm2020/lib/admin/configuration-designer/elements/performance-widget.component.mjs +4 -4
  35. package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +4 -4
  36. package/esm2020/lib/admin/configuration-designer/elements/policy.component.mjs +4 -4
  37. package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +4 -4
  38. package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +4 -4
  39. package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +4 -4
  40. package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +4 -4
  41. package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +4 -4
  42. package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +4 -4
  43. package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +4 -4
  44. package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +4 -4
  45. package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +4 -4
  46. package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +4 -4
  47. package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +4 -4
  48. package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +4 -4
  49. package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +4 -4
  50. package/esm2020/lib/admin/core/ace.input.mjs +4 -4
  51. package/esm2020/lib/admin/core/color-picker.input.mjs +4 -4
  52. package/esm2020/lib/admin/core/search.input.mjs +4 -4
  53. package/esm2020/lib/admin/diff/configuration-diff.component.mjs +4 -4
  54. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +5 -5
  55. package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +4 -4
  56. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +4 -4
  57. package/esm2020/lib/admin/form/designer/designer.component.mjs +4 -4
  58. package/esm2020/lib/admin/form/form.resolve.service.mjs +4 -4
  59. package/esm2020/lib/admin/form/workflow/node.component.mjs +4 -4
  60. package/esm2020/lib/admin/form/workflow/role-node.component.mjs +4 -4
  61. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +4 -4
  62. package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +4 -4
  63. package/esm2020/lib/admin/localized-string.component.mjs +4 -4
  64. package/esm2020/lib/admin/patterns/patterns.component.mjs +4 -4
  65. package/esm2020/lib/admin/permissions/permissions.component.mjs +4 -4
  66. package/esm2020/lib/admin/positions/positions-popup.component.mjs +4 -4
  67. package/esm2020/lib/admin/positions/positions.component.mjs +4 -4
  68. package/esm2020/lib/admin/profiler/outofoffice.component.mjs +4 -4
  69. package/esm2020/lib/admin/profiler/profiler.component.mjs +4 -4
  70. package/esm2020/lib/admin/system.service.mjs +8 -5
  71. package/esm2020/lib/admin/utility-wrapper.component.mjs +4 -4
  72. package/esm2020/lib/admin/utility.pane.component.mjs +4 -4
  73. package/esm2020/lib/app.component.mjs +7 -7
  74. package/esm2020/lib/bizdoc.module.mjs +5 -5
  75. package/esm2020/lib/browse/browse-items.component.mjs +4 -4
  76. package/esm2020/lib/browse/browse.mobile.component.mjs +4 -4
  77. package/esm2020/lib/browse/browse.pane.component.mjs +4 -4
  78. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +4 -4
  79. package/esm2020/lib/browse/filter/filter.component.mjs +4 -4
  80. package/esm2020/lib/browse/folders-menu.component.mjs +4 -4
  81. package/esm2020/lib/chat/chat-info.mjs +4 -4
  82. package/esm2020/lib/chat/chat.mobile.component.mjs +4 -4
  83. package/esm2020/lib/chat/chat.service.mjs +4 -4
  84. package/esm2020/lib/chat/contacts.component.mjs +7 -7
  85. package/esm2020/lib/chat/contacts.pane.component.mjs +4 -4
  86. package/esm2020/lib/chat/conversation.component.mjs +4 -4
  87. package/esm2020/lib/chat/conversation.pane.component.mjs +4 -4
  88. package/esm2020/lib/compose/action/action-picker.component.mjs +4 -4
  89. package/esm2020/lib/compose/action/action.dialog.mjs +4 -4
  90. package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +4 -4
  91. package/esm2020/lib/compose/action/assign-action.component.mjs +4 -4
  92. package/esm2020/lib/compose/action/moveto-action.component.mjs +4 -4
  93. package/esm2020/lib/compose/action/return-action.component.mjs +4 -4
  94. package/esm2020/lib/compose/attachments/attachments.component.mjs +4 -4
  95. package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +4 -4
  96. package/esm2020/lib/compose/attachments/progress-button.directive.mjs +4 -4
  97. package/esm2020/lib/compose/box/box.component.mjs +4 -4
  98. package/esm2020/lib/compose/can-deactivate-changes.service.mjs +4 -4
  99. package/esm2020/lib/compose/comments/comment.component.mjs +4 -4
  100. package/esm2020/lib/compose/comments/comments.component.mjs +4 -4
  101. package/esm2020/lib/compose/comments/comments.pane.component.mjs +4 -4
  102. package/esm2020/lib/compose/comments/edit-comment.component.mjs +4 -4
  103. package/esm2020/lib/compose/comments/edits.component.mjs +4 -4
  104. package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +4 -4
  105. package/esm2020/lib/compose/comments/votes.component.mjs +4 -4
  106. package/esm2020/lib/compose/compose-resolve.service.mjs +7 -7
  107. package/esm2020/lib/compose/compose.mobile.component.mjs +4 -4
  108. package/esm2020/lib/compose/compose.pane.component.mjs +4 -4
  109. package/esm2020/lib/compose/copy/copy.dialog.mjs +4 -4
  110. package/esm2020/lib/compose/dismiss.service.mjs +4 -4
  111. package/esm2020/lib/compose/document-resolver.service.mjs +4 -4
  112. package/esm2020/lib/compose/document.component.mjs +4 -4
  113. package/esm2020/lib/compose/document.mobile.component.mjs +4 -4
  114. package/esm2020/lib/compose/document.pane.component.mjs +4 -4
  115. package/esm2020/lib/compose/events/events.component.mjs +4 -4
  116. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +4 -4
  117. package/esm2020/lib/compose/form.component.mjs +4 -4
  118. package/esm2020/lib/compose/new-menu.component.mjs +4 -4
  119. package/esm2020/lib/compose/privilage.directive.mjs +7 -7
  120. package/esm2020/lib/compose/recipient-resolver.service.mjs +4 -4
  121. package/esm2020/lib/compose/state.component.mjs +4 -4
  122. package/esm2020/lib/compose/tag/tags.component.mjs +4 -4
  123. package/esm2020/lib/compose/trace/flow.component.mjs +4 -4
  124. package/esm2020/lib/compose/trace/people.component.mjs +4 -4
  125. package/esm2020/lib/compose/trace/trace.base.mjs +4 -4
  126. package/esm2020/lib/compose/trace/trace.component.mjs +4 -4
  127. package/esm2020/lib/compose/trace/trace.pane.component.mjs +4 -4
  128. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +4 -4
  129. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +10 -10
  130. package/esm2020/lib/compose/version-compare/version.pane.component.mjs +4 -4
  131. package/esm2020/lib/core/NgComponentOutlet.mjs +4 -4
  132. package/esm2020/lib/core/account.service.mjs +4 -4
  133. package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +4 -4
  134. package/esm2020/lib/core/avatar/avatar.component.mjs +4 -4
  135. package/esm2020/lib/core/component-factory-resolver.mjs +4 -4
  136. package/esm2020/lib/core/controls/address.input.mjs +4 -4
  137. package/esm2020/lib/core/controls/auto-complete.input.mjs +4 -4
  138. package/esm2020/lib/core/controls/combination-picker-body.mjs +4 -4
  139. package/esm2020/lib/core/controls/combination-picker.mjs +4 -4
  140. package/esm2020/lib/core/controls/combination-pool.mjs +4 -4
  141. package/esm2020/lib/core/controls/file.input.mjs +4 -4
  142. package/esm2020/lib/core/controls/select.input.mjs +4 -4
  143. package/esm2020/lib/core/controls/signature.input.mjs +4 -4
  144. package/esm2020/lib/core/controls/time-picker.mjs +4 -4
  145. package/esm2020/lib/core/controls/timespan.input.mjs +4 -4
  146. package/esm2020/lib/core/datasource.service.mjs +4 -4
  147. package/esm2020/lib/core/guide/guide.component.mjs +4 -4
  148. package/esm2020/lib/core/guide/guide.service.mjs +4 -4
  149. package/esm2020/lib/core/guide/help-tip.component.mjs +4 -4
  150. package/esm2020/lib/core/http.interceptor.mjs +4 -4
  151. package/esm2020/lib/core/hub.service.mjs +4 -4
  152. package/esm2020/lib/core/identity/identity.component.mjs +4 -4
  153. package/esm2020/lib/core/info/attachment-info.service.mjs +4 -4
  154. package/esm2020/lib/core/info/document-info.service.mjs +4 -4
  155. package/esm2020/lib/core/info/location-info.component.mjs +4 -4
  156. package/esm2020/lib/core/info/map-info.mjs +4 -4
  157. package/esm2020/lib/core/layout/autocomplete.field.mjs +4 -4
  158. package/esm2020/lib/core/layout/checkbox.field.mjs +4 -4
  159. package/esm2020/lib/core/layout/checkbox.mjs +4 -4
  160. package/esm2020/lib/core/layout/date-range.field.mjs +4 -4
  161. package/esm2020/lib/core/layout/date.field.mjs +4 -4
  162. package/esm2020/lib/core/layout/expression.field.mjs +4 -4
  163. package/esm2020/lib/core/layout/file.field.mjs +4 -4
  164. package/esm2020/lib/core/layout/html.field.mjs +4 -4
  165. package/esm2020/lib/core/layout/input.base.mjs +4 -4
  166. package/esm2020/lib/core/layout/input.field.mjs +4 -4
  167. package/esm2020/lib/core/layout/layout.component.mjs +4 -4
  168. package/esm2020/lib/core/layout/numeric.field.mjs +4 -4
  169. package/esm2020/lib/core/layout/select.field.mjs +4 -4
  170. package/esm2020/lib/core/layout/switch.field.mjs +4 -4
  171. package/esm2020/lib/core/layout/textarea.field.mjs +4 -4
  172. package/esm2020/lib/core/layout/timespan.field.mjs +4 -4
  173. package/esm2020/lib/core/lottie-animation.mjs +4 -4
  174. package/esm2020/lib/core/mailbox.service.mjs +4 -4
  175. package/esm2020/lib/core/none.component.mjs +4 -4
  176. package/esm2020/lib/core/pipes/action.pipe.mjs +4 -4
  177. package/esm2020/lib/core/pipes/calendar.pipe.mjs +4 -4
  178. package/esm2020/lib/core/pipes/date-format.pipe.mjs +4 -4
  179. package/esm2020/lib/core/pipes/daterange.pipe.mjs +7 -7
  180. package/esm2020/lib/core/pipes/difference.pipe.mjs +4 -4
  181. package/esm2020/lib/core/pipes/duration-format.pipe.mjs +4 -4
  182. package/esm2020/lib/core/pipes/duration.pipe.mjs +4 -4
  183. package/esm2020/lib/core/pipes/form.pipe.mjs +4 -4
  184. package/esm2020/lib/core/pipes/join.pipe.mjs +4 -4
  185. package/esm2020/lib/core/pipes/localized-string.pipe.mjs +4 -4
  186. package/esm2020/lib/core/pipes/role.pipe.mjs +4 -4
  187. package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +4 -4
  188. package/esm2020/lib/core/pipes/sort.pipe.mjs +7 -7
  189. package/esm2020/lib/core/pipes/state.pipe.mjs +4 -4
  190. package/esm2020/lib/core/pipes/time-ago.pipe.mjs +7 -7
  191. package/esm2020/lib/core/pipes/translate.pipe.mjs +7 -7
  192. package/esm2020/lib/core/pipes/type-value.pipe.mjs +4 -4
  193. package/esm2020/lib/core/pipes/user-name.pipe.mjs +4 -4
  194. package/esm2020/lib/core/popup/popup.component.mjs +4 -4
  195. package/esm2020/lib/core/popup/popup.service.mjs +4 -4
  196. package/esm2020/lib/core/popup/tooltip.directive.mjs +7 -7
  197. package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +4 -4
  198. package/esm2020/lib/core/prompt/mask/mask.component.mjs +4 -4
  199. package/esm2020/lib/core/prompt.service.mjs +4 -4
  200. package/esm2020/lib/core/router.mjs +7 -7
  201. package/esm2020/lib/core/save-changes.dialog.mjs +4 -4
  202. package/esm2020/lib/core/session.service.mjs +4 -4
  203. package/esm2020/lib/core/slots/router.directive.mjs +4 -4
  204. package/esm2020/lib/core/slots/router.service.mjs +4 -4
  205. package/esm2020/lib/core/slots/slots.component.mjs +4 -4
  206. package/esm2020/lib/core/tagging/documents.component.mjs +4 -4
  207. package/esm2020/lib/core/tagging/edit-input.component.mjs +4 -4
  208. package/esm2020/lib/core/tagging/emoji.component.mjs +4 -4
  209. package/esm2020/lib/core/tagging/tagging-item.directive.mjs +4 -4
  210. package/esm2020/lib/core/tagging/tagging.component-base.mjs +4 -4
  211. package/esm2020/lib/core/tagging/tagging.directive.mjs +4 -4
  212. package/esm2020/lib/core/tagging/tagging.pipe.mjs +4 -4
  213. package/esm2020/lib/core/tagging/users.component.mjs +4 -4
  214. package/esm2020/lib/core/translate.service.mjs +4 -4
  215. package/esm2020/lib/core/window-title.service.mjs +4 -4
  216. package/esm2020/lib/cube/accum/accum.component.mjs +4 -4
  217. package/esm2020/lib/cube/chart/chart.component.mjs +4 -4
  218. package/esm2020/lib/cube/cube-info.service.mjs +4 -4
  219. package/esm2020/lib/cube/cube-menu.component.mjs +4 -4
  220. package/esm2020/lib/cube/cube-view.component.mjs +4 -4
  221. package/esm2020/lib/cube/cube.service.mjs +4 -4
  222. package/esm2020/lib/cube/explore/document-item.component.mjs +4 -4
  223. package/esm2020/lib/cube/explore/explore-item.component.mjs +4 -4
  224. package/esm2020/lib/cube/explore/explore-items.component.mjs +4 -4
  225. package/esm2020/lib/cube/explore/explore.pane.component.mjs +4 -4
  226. package/esm2020/lib/cube/explore/item-resolver.service.mjs +7 -7
  227. package/esm2020/lib/cube/explore/item.pane.component.mjs +4 -4
  228. package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +4 -4
  229. package/esm2020/lib/cube/filter/filter.component.mjs +4 -4
  230. package/esm2020/lib/cube/grid/grid.component.mjs +4 -4
  231. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +4 -4
  232. package/esm2020/lib/cube/matrix/matrix.base.mjs +4 -4
  233. package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +4 -4
  234. package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +4 -4
  235. package/esm2020/lib/cube/matrix/popup.component.mjs +4 -4
  236. package/esm2020/lib/cube/matrix/table.component.mjs +4 -4
  237. package/esm2020/lib/cube/parallel/parallel.component.mjs +4 -4
  238. package/esm2020/lib/cube/pivot/pivot.component.mjs +4 -4
  239. package/esm2020/lib/cube/sum/sum.component.mjs +4 -4
  240. package/esm2020/lib/cube/view-base.mjs +4 -4
  241. package/esm2020/lib/cube/view.mobile.component.mjs +4 -4
  242. package/esm2020/lib/cube/view.pane.component.mjs +4 -4
  243. package/esm2020/lib/dashboard/actions/actions.widget.mjs +4 -4
  244. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +4 -4
  245. package/esm2020/lib/dashboard/cube/compare.widget.mjs +4 -4
  246. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +4 -4
  247. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +4 -4
  248. package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +4 -4
  249. package/esm2020/lib/dashboard/cube/documents.widget.mjs +4 -4
  250. package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +4 -4
  251. package/esm2020/lib/dashboard/dashboard.component.mjs +4 -4
  252. package/esm2020/lib/dashboard/dashboard.pane.component.mjs +4 -4
  253. package/esm2020/lib/dashboard/recents/recents.widget.mjs +4 -4
  254. package/esm2020/lib/dashboard/score/activity.widget.mjs +4 -4
  255. package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +4 -4
  256. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +4 -4
  257. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +4 -4
  258. package/esm2020/lib/dashboard/score/personal-score.widget.mjs +4 -4
  259. package/esm2020/lib/dashboard/widget-item.component.mjs +4 -4
  260. package/esm2020/lib/desktop.module.mjs +5 -5
  261. package/esm2020/lib/home/about/about.dialog.mjs +4 -4
  262. package/esm2020/lib/home/home-base.component.mjs +4 -4
  263. package/esm2020/lib/home/home.desktop.component.mjs +4 -4
  264. package/esm2020/lib/home/home.mobile.component.mjs +4 -4
  265. package/esm2020/lib/home/notifications/notifications.component.mjs +4 -4
  266. package/esm2020/lib/home/options/options.component.mjs +4 -4
  267. package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +4 -4
  268. package/esm2020/lib/home/sign/sign.component.mjs +4 -4
  269. package/esm2020/lib/home/tools.component.mjs +4 -4
  270. package/esm2020/lib/impersonate/impersonate.component.mjs +4 -4
  271. package/esm2020/lib/mobile.module.mjs +5 -5
  272. package/esm2020/lib/modules/chart.module.mjs +5 -5
  273. package/esm2020/lib/modules/circular-gauge.module.mjs +5 -5
  274. package/esm2020/lib/modules/datepicker.intl.mjs +4 -4
  275. package/esm2020/lib/modules/dayjs.module.mjs +5 -5
  276. package/esm2020/lib/modules/diagram.module.mjs +5 -5
  277. package/esm2020/lib/modules/gantt.module.mjs +5 -5
  278. package/esm2020/lib/modules/grid.module.mjs +5 -5
  279. package/esm2020/lib/modules/material.module.mjs +5 -5
  280. package/esm2020/lib/modules/paginator.intl.mjs +4 -4
  281. package/esm2020/lib/modules/pivot.module.mjs +5 -5
  282. package/esm2020/lib/modules/schedule.module.mjs +5 -5
  283. package/esm2020/lib/modules/spreadsheet.module.mjs +5 -5
  284. package/esm2020/lib/modules/stepper.intl.mjs +4 -4
  285. package/esm2020/lib/modules/texteditor.module.mjs +5 -5
  286. package/esm2020/lib/notifications/filter.component.mjs +4 -4
  287. package/esm2020/lib/notifications/notifications-table.component.mjs +4 -4
  288. package/esm2020/lib/notifications/notifications.mobile.component.mjs +4 -4
  289. package/esm2020/lib/notifications/notifications.pane.component.mjs +4 -4
  290. package/esm2020/lib/notifications/notifications.service.mjs +4 -4
  291. package/esm2020/lib/notifications/types/commented.notification.mjs +4 -4
  292. package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +4 -4
  293. package/esm2020/lib/notifications/types/escalated.notification.mjs +4 -4
  294. package/esm2020/lib/notifications/types/liked.notification.mjs +4 -4
  295. package/esm2020/lib/notifications/types/long-running-task.notification.mjs +4 -4
  296. package/esm2020/lib/notifications/types/notification-base.mjs +4 -4
  297. package/esm2020/lib/notifications/types/nudge.notification.mjs +4 -4
  298. package/esm2020/lib/notifications/types/state-changed.notification.mjs +4 -4
  299. package/esm2020/lib/notifications/types/tagged.notification.mjs +4 -4
  300. package/esm2020/lib/notifications/types/text.notification.mjs +4 -4
  301. package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +4 -4
  302. package/esm2020/lib/options/options.component.mjs +4 -4
  303. package/esm2020/lib/options/options.service.mjs +4 -4
  304. package/esm2020/lib/reports/arguments-component.mjs +4 -4
  305. package/esm2020/lib/reports/cube/documents.component.mjs +4 -4
  306. package/esm2020/lib/reports/cube/grid-documents.component.mjs +4 -4
  307. package/esm2020/lib/reports/cube/table-documents.component.mjs +4 -4
  308. package/esm2020/lib/reports/cube/usage-args.component.mjs +4 -4
  309. package/esm2020/lib/reports/cube/usage-base.mjs +4 -4
  310. package/esm2020/lib/reports/cube/usage-chart.component.mjs +4 -4
  311. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +4 -4
  312. package/esm2020/lib/reports/cube/usage.component.mjs +4 -4
  313. package/esm2020/lib/reports/report-viewer.component.mjs +4 -4
  314. package/esm2020/lib/reports/report.mobile.component.mjs +4 -4
  315. package/esm2020/lib/reports/report.pane.component.mjs +4 -4
  316. package/esm2020/lib/reports/reports-menu.component.mjs +4 -4
  317. package/esm2020/lib/reports/substitution/substitution.component.mjs +4 -4
  318. package/esm2020/lib/reports/table/table-view.component.mjs +4 -4
  319. package/esm2020/lib/reports/tasks/tasks.component.mjs +4 -4
  320. package/esm2020/lib/scheduler/schedule.component.mjs +4 -4
  321. package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +4 -4
  322. package/esm2020/lib/scheduler/scheduler.pane.component.mjs +4 -4
  323. package/esm2020/lib/search/cube.component.mjs +4 -4
  324. package/esm2020/lib/search/document.component.mjs +4 -4
  325. package/esm2020/lib/search/guide.component.mjs +4 -4
  326. package/esm2020/lib/search/path.component.mjs +4 -4
  327. package/esm2020/lib/search/search.service.mjs +4 -4
  328. package/esm2020/lib/shared.module.mjs +5 -5
  329. package/esm2020/lib/system.module.mjs +5 -5
  330. package/esm2020/lib/views/cube/chart.component.mjs +4 -4
  331. package/esm2020/lib/views/cube/cube-base.mjs +4 -4
  332. package/esm2020/lib/views/cube/explore.component.mjs +4 -4
  333. package/esm2020/lib/views/cube/matrix.component.mjs +4 -4
  334. package/esm2020/lib/views/cube/parallel.component.mjs +4 -4
  335. package/esm2020/lib/views/cube/pivot.component.mjs +4 -4
  336. package/esm2020/lib/views/cube/sum.component.mjs +4 -4
  337. package/esm2020/lib/views/cube/view.component.mjs +4 -4
  338. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +4 -4
  339. package/esm2020/lib/views/view-item.component.mjs +4 -4
  340. package/esm2020/lib/views/views.component.mjs +4 -4
  341. package/esm2020/lib/views/views.mobile.component.mjs +4 -4
  342. package/esm2020/lib/views/views.pane.component.mjs +4 -4
  343. package/fesm2015/bizdoc-core.mjs +1080 -1076
  344. package/fesm2015/bizdoc-core.mjs.map +1 -1
  345. package/fesm2020/bizdoc-core.mjs +1080 -1076
  346. package/fesm2020/bizdoc-core.mjs.map +1 -1
  347. package/lib/admin/admin-dismiss.service.d.ts.map +1 -0
  348. package/lib/admin/admin-menu.component.d.ts.map +1 -0
  349. package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts.map +1 -0
  350. package/lib/admin/configuration-designer/declarations.d.ts.map +1 -0
  351. package/lib/admin/configuration-designer/designer-element.component.d.ts.map +1 -0
  352. package/lib/admin/configuration-designer/designer-privileges.component.d.ts.map +1 -0
  353. package/lib/admin/configuration-designer/designer.base.d.ts.map +1 -0
  354. package/lib/admin/configuration-designer/designer.component.d.ts.map +1 -0
  355. package/lib/admin/configuration-designer/elements/action.component.d.ts.map +1 -0
  356. package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts.map +1 -0
  357. package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts.map +1 -0
  358. package/lib/admin/configuration-designer/elements/anomaly-rule.component.d.ts.map +1 -0
  359. package/lib/admin/configuration-designer/elements/box-form.component.d.ts.map +1 -0
  360. package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts.map +1 -0
  361. package/lib/admin/configuration-designer/elements/cube-index-utility.component.d.ts.map +1 -0
  362. package/lib/admin/configuration-designer/elements/cube-view.component.d.ts.map +1 -0
  363. package/lib/admin/configuration-designer/elements/cube.component.d.ts.map +1 -0
  364. package/lib/admin/configuration-designer/elements/documents-report.component.d.ts.map +1 -0
  365. package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts.map +1 -0
  366. package/lib/admin/configuration-designer/elements/explore-view.component.d.ts.map +1 -0
  367. package/lib/admin/configuration-designer/elements/folder.component.d.ts.map +1 -0
  368. package/lib/admin/configuration-designer/elements/form.component.d.ts.map +1 -0
  369. package/lib/admin/configuration-designer/elements/guide.component.d.ts.map +1 -0
  370. package/lib/admin/configuration-designer/elements/matrix-view.component.d.ts.map +1 -0
  371. package/lib/admin/configuration-designer/elements/node.component.d.ts.map +1 -0
  372. package/lib/admin/configuration-designer/elements/parallel-view.component.d.ts.map +1 -0
  373. package/lib/admin/configuration-designer/elements/performance-widget.component.d.ts.map +1 -0
  374. package/lib/admin/configuration-designer/elements/pivot-view.component.d.ts.map +1 -0
  375. package/lib/admin/configuration-designer/elements/policy.component.d.ts.map +1 -0
  376. package/lib/admin/configuration-designer/elements/report.component.d.ts.map +1 -0
  377. package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts.map +1 -0
  378. package/lib/admin/configuration-designer/elements/role.component.d.ts.map +1 -0
  379. package/lib/admin/configuration-designer/elements/rule.component.d.ts.map +1 -0
  380. package/lib/admin/configuration-designer/elements/state.component.d.ts.map +1 -0
  381. package/lib/admin/configuration-designer/elements/sum-view.component.d.ts.map +1 -0
  382. package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts.map +1 -0
  383. package/lib/admin/configuration-designer/elements/type.component.d.ts.map +1 -0
  384. package/lib/admin/configuration-designer/elements/usage-report.component.d.ts.map +1 -0
  385. package/lib/admin/configuration-designer/elements/utility.component.d.ts.map +1 -0
  386. package/lib/admin/configuration-designer/elements/view.component.d.ts.map +1 -0
  387. package/lib/admin/configuration-designer/elements/widget.component.d.ts.map +1 -0
  388. package/lib/admin/configuration-designer/icon-picker.component.d.ts.map +1 -0
  389. package/lib/admin/core/ace.input.d.ts.map +1 -0
  390. package/lib/admin/core/color-picker.input.d.ts.map +1 -0
  391. package/lib/admin/core/search.input.d.ts.map +1 -0
  392. package/lib/admin/diff/configuration-diff.component.d.ts.map +1 -0
  393. package/lib/admin/document-trace/document-trace.component.d.ts.map +1 -0
  394. package/lib/admin/document-trace/reassign.dialog.d.ts.map +1 -0
  395. package/lib/admin/document-trace/timeline.d.ts.map +1 -0
  396. package/lib/admin/document-trace/trace-element.component.d.ts.map +1 -0
  397. package/lib/admin/form/designer/designer.component.d.ts.map +1 -0
  398. package/lib/admin/form/form.resolve.service.d.ts.map +1 -0
  399. package/lib/admin/form/workflow/node-ref.d.ts.map +1 -0
  400. package/lib/admin/form/workflow/node.component.d.ts.map +1 -0
  401. package/lib/admin/form/workflow/role-node.component.d.ts.map +1 -0
  402. package/lib/admin/form/workflow/workflow.component.d.ts.map +1 -0
  403. package/lib/admin/indices/manage-cube-index.component.d.ts.map +1 -0
  404. package/lib/admin/localized-string.component.d.ts.map +1 -0
  405. package/lib/admin/patterns/patterns.component.d.ts.map +1 -0
  406. package/lib/admin/permissions/permissions.component.d.ts.map +1 -0
  407. package/lib/admin/positions/positions-popup.component.d.ts.map +1 -0
  408. package/lib/admin/positions/positions.component.d.ts.map +1 -0
  409. package/lib/admin/profiler/outofoffice.component.d.ts.map +1 -0
  410. package/lib/admin/profiler/profiler.component.d.ts.map +1 -0
  411. package/lib/admin/system.service.d.ts.map +1 -0
  412. package/lib/admin/utility-ref.d.ts.map +1 -0
  413. package/lib/admin/utility-wrapper.component.d.ts.map +1 -0
  414. package/lib/admin/utility.pane.component.d.ts.map +1 -0
  415. package/lib/app.component.d.ts.map +1 -0
  416. package/lib/bizdoc.module.d.ts.map +1 -0
  417. package/lib/browse/browse-items.component.d.ts.map +1 -0
  418. package/lib/browse/browse.mobile.component.d.ts.map +1 -0
  419. package/lib/browse/browse.pane.component.d.ts.map +1 -0
  420. package/lib/browse/expanded-item/expanded-item.component.d.ts.map +1 -0
  421. package/lib/browse/filter/filter.component.d.ts.map +1 -0
  422. package/lib/browse/folders-menu.component.d.ts.map +1 -0
  423. package/lib/chat/chat-info.d.ts.map +1 -0
  424. package/lib/chat/chat.mobile.component.d.ts.map +1 -0
  425. package/lib/chat/chat.service.d.ts.map +1 -0
  426. package/lib/chat/contacts.component.d.ts.map +1 -0
  427. package/lib/chat/contacts.pane.component.d.ts.map +1 -0
  428. package/lib/chat/conversation.component.d.ts.map +1 -0
  429. package/lib/chat/conversation.pane.component.d.ts.map +1 -0
  430. package/lib/compose/action/action-picker.component.d.ts.map +1 -0
  431. package/lib/compose/action/action-ref.d.ts.map +1 -0
  432. package/lib/compose/action/action.base.d.ts.map +1 -0
  433. package/lib/compose/action/action.dialog.d.ts.map +1 -0
  434. package/lib/compose/action/action.pane.dialog.exp.d.ts.map +1 -0
  435. package/lib/compose/action/assign-action.component.d.ts.map +1 -0
  436. package/lib/compose/action/moveto-action.component.d.ts.map +1 -0
  437. package/lib/compose/action/return-action.component.d.ts.map +1 -0
  438. package/lib/compose/attachments/attachments.component.d.ts.map +1 -0
  439. package/lib/compose/attachments/preview/attachment-preview.component.d.ts.map +1 -0
  440. package/lib/compose/attachments/progress-button.directive.d.ts.map +1 -0
  441. package/lib/compose/box/box.component.d.ts.map +1 -0
  442. package/lib/compose/can-deactivate-changes.service.d.ts.map +1 -0
  443. package/lib/compose/comments/comment.component.d.ts.map +1 -0
  444. package/lib/compose/comments/comments.component.d.ts.map +1 -0
  445. package/lib/compose/comments/comments.pane.component.d.ts.map +1 -0
  446. package/lib/compose/comments/edit-comment.component.d.ts.map +1 -0
  447. package/lib/compose/comments/edits.component.d.ts.map +1 -0
  448. package/lib/compose/comments/quick-comment.component.exp.d.ts.map +1 -0
  449. package/lib/compose/comments/votes.component.d.ts.map +1 -0
  450. package/lib/compose/compose-resolve.service.d.ts.map +1 -0
  451. package/lib/compose/compose.mobile.component.d.ts.map +1 -0
  452. package/lib/compose/compose.pane.component.d.ts.map +1 -0
  453. package/lib/compose/copy/copy.dialog.d.ts.map +1 -0
  454. package/lib/compose/dismiss.service.d.ts.map +1 -0
  455. package/lib/compose/document-resolver.service.d.ts.map +1 -0
  456. package/lib/compose/document.component.d.ts.map +1 -0
  457. package/lib/compose/document.mobile.component.d.ts.map +1 -0
  458. package/lib/compose/document.pane.component.d.ts.map +1 -0
  459. package/lib/compose/events/events.component.d.ts.map +1 -0
  460. package/lib/compose/form-ref.d.ts.map +1 -0
  461. package/lib/compose/form-selector/form-selector.sheet.d.ts.map +1 -0
  462. package/lib/compose/form.component.d.ts.map +1 -0
  463. package/lib/compose/new-menu.component.d.ts.map +1 -0
  464. package/lib/compose/privilage.directive.d.ts.map +1 -0
  465. package/lib/compose/recipient-resolver.service.d.ts.map +1 -0
  466. package/lib/compose/state.component.d.ts.map +1 -0
  467. package/lib/compose/tag/tags.component.d.ts.map +1 -0
  468. package/lib/compose/trace/flow.component.d.ts.map +1 -0
  469. package/lib/compose/trace/people.component.d.ts.map +1 -0
  470. package/lib/compose/trace/trace.base.d.ts.map +1 -0
  471. package/lib/compose/trace/trace.component.d.ts.map +1 -0
  472. package/lib/compose/trace/trace.pane.component.d.ts.map +1 -0
  473. package/lib/compose/version-compare/version-compare.component.d.ts.map +1 -0
  474. package/lib/compose/version-compare/version-compare.directive.d.ts.map +1 -0
  475. package/lib/compose/version-compare/version.pane.component.d.ts.map +1 -0
  476. package/lib/core/NgComponentOutlet.d.ts.map +1 -0
  477. package/lib/core/account.service.d.ts.map +1 -0
  478. package/lib/core/animated-icon/animated-icon.directive.d.ts.map +1 -0
  479. package/lib/core/animations.d.ts.map +1 -0
  480. package/lib/core/authentication.d.ts.map +1 -0
  481. package/lib/core/avatar/avatar.component.d.ts.map +1 -0
  482. package/lib/core/base.d.ts.map +1 -0
  483. package/lib/core/colors.d.ts.map +1 -0
  484. package/lib/core/component-factory-resolver.d.ts.map +1 -0
  485. package/lib/core/configuration.d.ts.map +1 -0
  486. package/lib/core/controls/address.input.d.ts.map +1 -0
  487. package/lib/core/controls/auto-complete.input.d.ts.map +1 -0
  488. package/lib/core/controls/combination-picker-body.d.ts.map +1 -0
  489. package/lib/core/controls/combination-picker.d.ts.map +1 -0
  490. package/lib/core/controls/combination-pool.d.ts.map +1 -0
  491. package/lib/core/controls/file.input.d.ts.map +1 -0
  492. package/lib/core/controls/select.input.d.ts.map +1 -0
  493. package/lib/core/controls/signature.input.d.ts.map +1 -0
  494. package/lib/core/controls/time-picker.d.ts.map +1 -0
  495. package/lib/core/controls/timespan.input.d.ts.map +1 -0
  496. package/lib/core/datasource.service.d.ts.map +1 -0
  497. package/lib/core/decorators.d.ts.map +1 -0
  498. package/lib/core/firebase.service.d.ts.map +1 -0
  499. package/lib/core/functions.d.ts.map +1 -0
  500. package/lib/core/guide/guide.component.d.ts.map +1 -0
  501. package/lib/core/guide/guide.service.d.ts.map +1 -0
  502. package/lib/core/guide/help-tip.component.d.ts.map +1 -0
  503. package/lib/core/http.interceptor.d.ts.map +1 -0
  504. package/lib/core/hub.service.d.ts.map +1 -0
  505. package/lib/core/identity/identity.component.d.ts.map +1 -0
  506. package/lib/core/info/attachment-info.service.d.ts.map +1 -0
  507. package/lib/core/info/document-info.service.d.ts.map +1 -0
  508. package/lib/core/info/location-info.component.d.ts.map +1 -0
  509. package/lib/core/info/map-info.d.ts.map +1 -0
  510. package/lib/core/layout/autocomplete.field.d.ts.map +1 -0
  511. package/lib/core/layout/checkbox.d.ts.map +1 -0
  512. package/lib/core/layout/checkbox.field.d.ts.map +1 -0
  513. package/lib/core/layout/date-range.field.d.ts.map +1 -0
  514. package/lib/core/layout/date.field.d.ts.map +1 -0
  515. package/lib/core/layout/expression.field.d.ts.map +1 -0
  516. package/lib/core/layout/file.field.d.ts.map +1 -0
  517. package/lib/core/layout/html.field.d.ts.map +1 -0
  518. package/lib/core/layout/input.base.d.ts.map +1 -0
  519. package/lib/core/layout/input.field.d.ts.map +1 -0
  520. package/lib/core/layout/layout.component.d.ts.map +1 -0
  521. package/lib/core/layout/numeric.field.d.ts.map +1 -0
  522. package/lib/core/layout/select.field.d.ts.map +1 -0
  523. package/lib/core/layout/switch.field.d.ts.map +1 -0
  524. package/lib/core/layout/textarea.field.d.ts.map +1 -0
  525. package/lib/core/layout/timespan.field.d.ts.map +1 -0
  526. package/lib/core/lottie-animation.d.ts.map +1 -0
  527. package/lib/core/mailbox.service.d.ts.map +1 -0
  528. package/lib/core/models.d.ts.map +1 -0
  529. package/lib/core/none.component.d.ts.map +1 -0
  530. package/lib/core/pipes/action.pipe.d.ts.map +1 -0
  531. package/lib/core/pipes/calendar.pipe.d.ts.map +1 -0
  532. package/lib/core/pipes/date-format.pipe.d.ts.map +1 -0
  533. package/lib/core/pipes/daterange.pipe.d.ts.map +1 -0
  534. package/lib/core/pipes/difference.pipe.d.ts.map +1 -0
  535. package/lib/core/pipes/duration-format.pipe.d.ts.map +1 -0
  536. package/lib/core/pipes/duration.pipe.d.ts.map +1 -0
  537. package/lib/core/pipes/form.pipe.d.ts.map +1 -0
  538. package/lib/core/pipes/join.pipe.d.ts.map +1 -0
  539. package/lib/core/pipes/localized-string.pipe.d.ts.map +1 -0
  540. package/lib/core/pipes/role.pipe.d.ts.map +1 -0
  541. package/lib/core/pipes/sanitize-html.pipe.d.ts.map +1 -0
  542. package/lib/core/pipes/sort.pipe.d.ts.map +1 -0
  543. package/lib/core/pipes/state.pipe.d.ts.map +1 -0
  544. package/lib/core/pipes/time-ago.pipe.d.ts.map +1 -0
  545. package/lib/core/pipes/translate.pipe.d.ts.map +1 -0
  546. package/lib/core/pipes/type-value.pipe.d.ts.map +1 -0
  547. package/lib/core/pipes/user-name.pipe.d.ts.map +1 -0
  548. package/lib/core/popup/popup-ref.d.ts.map +1 -0
  549. package/lib/core/popup/popup.component.d.ts.map +1 -0
  550. package/lib/core/popup/popup.service.d.ts.map +1 -0
  551. package/lib/core/popup/tooltip.directive.d.ts.map +1 -0
  552. package/lib/core/prompt/ask/ask.dialog.d.ts.map +1 -0
  553. package/lib/core/prompt/mask/mask.component.d.ts.map +1 -0
  554. package/lib/core/prompt.service.d.ts.map +1 -0
  555. package/lib/core/router.d.ts.map +1 -0
  556. package/lib/core/save-changes.dialog.d.ts.map +1 -0
  557. package/lib/core/session.service.d.ts.map +1 -0
  558. package/lib/core/slots/pane-ref.d.ts.map +1 -0
  559. package/lib/core/slots/router.directive.d.ts.map +1 -0
  560. package/lib/core/slots/router.service.d.ts.map +1 -0
  561. package/lib/core/slots/slots.component.d.ts.map +1 -0
  562. package/lib/core/tagging/documents.component.d.ts.map +1 -0
  563. package/lib/core/tagging/edit-input.component.d.ts.map +1 -0
  564. package/lib/core/tagging/emoji.component.d.ts.map +1 -0
  565. package/lib/core/tagging/tagging-item.directive.d.ts.map +1 -0
  566. package/lib/core/tagging/tagging.component-base.d.ts.map +1 -0
  567. package/lib/core/tagging/tagging.directive.d.ts.map +1 -0
  568. package/lib/core/tagging/tagging.pipe.d.ts.map +1 -0
  569. package/lib/core/tagging/users.component.d.ts.map +1 -0
  570. package/lib/core/translate.service.d.ts.map +1 -0
  571. package/lib/core/translations.d.ts.map +1 -0
  572. package/lib/core/window-title.service.d.ts.map +1 -0
  573. package/lib/cube/accum/accum.component.d.ts.map +1 -0
  574. package/lib/cube/chart/chart.component.d.ts.map +1 -0
  575. package/lib/cube/cube-info.service.d.ts.map +1 -0
  576. package/lib/cube/cube-menu.component.d.ts.map +1 -0
  577. package/lib/cube/cube-view.component.d.ts.map +1 -0
  578. package/lib/cube/cube.service.d.ts.map +1 -0
  579. package/lib/cube/declarations.d.ts.map +1 -0
  580. package/lib/cube/explore/document-item.component.d.ts.map +1 -0
  581. package/lib/cube/explore/explore-item.component.d.ts.map +1 -0
  582. package/lib/cube/explore/explore-items.component.d.ts.map +1 -0
  583. package/lib/cube/explore/explore.pane.component.d.ts.map +1 -0
  584. package/lib/cube/explore/item-resolver.service.d.ts.map +1 -0
  585. package/lib/cube/explore/item.pane.component.d.ts.map +1 -0
  586. package/lib/cube/filter/filter-tags.component.exp.d.ts.map +1 -0
  587. package/lib/cube/filter/filter.component.d.ts.map +1 -0
  588. package/lib/cube/grid/grid.component.d.ts.map +1 -0
  589. package/lib/cube/grid/spreadsheet.component.d.ts.map +1 -0
  590. package/lib/cube/matrix/matrix.base.d.ts.map +1 -0
  591. package/lib/cube/matrix/matrix.mobile.component.d.ts.map +1 -0
  592. package/lib/cube/matrix/matrix.pane.component.d.ts.map +1 -0
  593. package/lib/cube/matrix/popup.component.d.ts.map +1 -0
  594. package/lib/cube/matrix/table.component.d.ts.map +1 -0
  595. package/lib/cube/parallel/item.d.ts.map +1 -0
  596. package/lib/cube/parallel/parallel.component.d.ts.map +1 -0
  597. package/lib/cube/pivot/pivot.component.d.ts.map +1 -0
  598. package/lib/cube/sum/sum.component.d.ts.map +1 -0
  599. package/lib/cube/view-base.d.ts.map +1 -0
  600. package/lib/cube/view.mobile.component.d.ts.map +1 -0
  601. package/lib/cube/view.pane.component.d.ts.map +1 -0
  602. package/lib/dashboard/actions/actions.widget.d.ts.map +1 -0
  603. package/lib/dashboard/cube/accum-cube.widget.d.ts.map +1 -0
  604. package/lib/dashboard/cube/compare.widget.d.ts.map +1 -0
  605. package/lib/dashboard/cube/cube-analysis.base.d.ts.map +1 -0
  606. package/lib/dashboard/cube/cube-analysis.widget.d.ts.map +1 -0
  607. package/lib/dashboard/cube/cube-chart.widget.d.ts.map +1 -0
  608. package/lib/dashboard/cube/documents.widget.d.ts.map +1 -0
  609. package/lib/dashboard/cube/filter/filter.component.d.ts.map +1 -0
  610. package/lib/dashboard/dashboard.component.d.ts.map +1 -0
  611. package/lib/dashboard/dashboard.pane.component.d.ts.map +1 -0
  612. package/lib/dashboard/recents/recents.widget.d.ts.map +1 -0
  613. package/lib/dashboard/score/activity.widget.d.ts.map +1 -0
  614. package/lib/dashboard/score/compare-groups.widget.d.ts.map +1 -0
  615. package/lib/dashboard/score/peers-performance.widget.d.ts.map +1 -0
  616. package/lib/dashboard/score/pending-results.widget.d.ts.map +1 -0
  617. package/lib/dashboard/score/personal-score.widget.d.ts.map +1 -0
  618. package/lib/dashboard/widget-item.component.d.ts.map +1 -0
  619. package/lib/dashboard/widget-ref.d.ts.map +1 -0
  620. package/lib/desktop.module.d.ts.map +1 -0
  621. package/lib/home/about/about.dialog.d.ts.map +1 -0
  622. package/lib/home/home-base.component.d.ts.map +1 -0
  623. package/lib/home/home.desktop.component.d.ts.map +1 -0
  624. package/lib/home/home.mobile.component.d.ts.map +1 -0
  625. package/lib/home/notifications/notifications.component.d.ts.map +1 -0
  626. package/lib/home/options/options.component.d.ts.map +1 -0
  627. package/lib/home/outofoffice/outofoffice.component.d.ts.map +1 -0
  628. package/lib/home/sign/sign.component.d.ts.map +1 -0
  629. package/lib/home/tools.component.d.ts.map +1 -0
  630. package/lib/impersonate/impersonate.component.d.ts.map +1 -0
  631. package/lib/mobile.module.d.ts.map +1 -0
  632. package/lib/modules/chart.module.d.ts.map +1 -0
  633. package/lib/modules/circular-gauge.module.d.ts.map +1 -0
  634. package/lib/modules/date.adapter.d.ts.map +1 -0
  635. package/lib/modules/datepicker.intl.d.ts.map +1 -0
  636. package/lib/modules/dayjs.module.d.ts.map +1 -0
  637. package/lib/modules/diagram.module.d.ts.map +1 -0
  638. package/lib/modules/gantt.module.d.ts.map +1 -0
  639. package/lib/modules/grid.module.d.ts.map +1 -0
  640. package/lib/modules/material.module.d.ts.map +1 -0
  641. package/lib/modules/paginator.intl.d.ts.map +1 -0
  642. package/lib/modules/pivot.module.d.ts.map +1 -0
  643. package/lib/modules/schedule.module.d.ts.map +1 -0
  644. package/lib/modules/spreadsheet.module.d.ts.map +1 -0
  645. package/lib/modules/stepper.intl.d.ts.map +1 -0
  646. package/lib/modules/texteditor.module.d.ts.map +1 -0
  647. package/lib/notifications/filter.component.d.ts.map +1 -0
  648. package/lib/notifications/notifications-table.component.d.ts.map +1 -0
  649. package/lib/notifications/notifications.component-base.d.ts.map +1 -0
  650. package/lib/notifications/notifications.mobile.component.d.ts.map +1 -0
  651. package/lib/notifications/notifications.pane.component.d.ts.map +1 -0
  652. package/lib/notifications/notifications.service.d.ts.map +1 -0
  653. package/lib/notifications/types/commented.notification.d.ts.map +1 -0
  654. package/lib/notifications/types/cube-anomaly.notification.d.ts.map +1 -0
  655. package/lib/notifications/types/escalated.notification.d.ts.map +1 -0
  656. package/lib/notifications/types/liked.notification.d.ts.map +1 -0
  657. package/lib/notifications/types/long-running-task.notification.d.ts.map +1 -0
  658. package/lib/notifications/types/notification-base.d.ts.map +1 -0
  659. package/lib/notifications/types/nudge.notification.d.ts.map +1 -0
  660. package/lib/notifications/types/state-changed.notification.d.ts.map +1 -0
  661. package/lib/notifications/types/tagged.notification.d.ts.map +1 -0
  662. package/lib/notifications/types/text.notification.d.ts.map +1 -0
  663. package/lib/notifications/types/upcoming-event.notification.d.ts.map +1 -0
  664. package/lib/options/options.component.d.ts.map +1 -0
  665. package/lib/options/options.service.d.ts.map +1 -0
  666. package/lib/reports/arguments-component.d.ts.map +1 -0
  667. package/lib/reports/cube/documents.component.d.ts.map +1 -0
  668. package/lib/reports/cube/grid-documents.component.d.ts.map +1 -0
  669. package/lib/reports/cube/table-documents.component.d.ts.map +1 -0
  670. package/lib/reports/cube/usage-args.component.d.ts.map +1 -0
  671. package/lib/reports/cube/usage-base.d.ts.map +1 -0
  672. package/lib/reports/cube/usage-chart.component.d.ts.map +1 -0
  673. package/lib/reports/cube/usage-pivot.component.d.ts.map +1 -0
  674. package/lib/reports/cube/usage.component.d.ts.map +1 -0
  675. package/lib/reports/report-ref.d.ts.map +1 -0
  676. package/lib/reports/report-viewer.component.d.ts.map +1 -0
  677. package/lib/reports/report.mobile.component.d.ts.map +1 -0
  678. package/lib/reports/report.pane.component.d.ts.map +1 -0
  679. package/lib/reports/reports-menu.component.d.ts.map +1 -0
  680. package/lib/reports/substitution/substitution.component.d.ts.map +1 -0
  681. package/lib/reports/table/table-view.component.d.ts.map +1 -0
  682. package/lib/reports/tasks/tasks.component.d.ts.map +1 -0
  683. package/lib/routes.desktop.d.ts.map +1 -0
  684. package/lib/routes.mobile.d.ts.map +1 -0
  685. package/lib/scheduler/schedule.component.d.ts.map +1 -0
  686. package/lib/scheduler/scheduler.mobile.component.d.ts.map +1 -0
  687. package/lib/scheduler/scheduler.pane.component.d.ts.map +1 -0
  688. package/lib/search/cube.component.d.ts.map +1 -0
  689. package/lib/search/declarations.d.ts.map +1 -0
  690. package/lib/search/document.component.d.ts.map +1 -0
  691. package/lib/search/guide.component.d.ts.map +1 -0
  692. package/lib/search/path.component.d.ts.map +1 -0
  693. package/lib/search/search.service.d.ts.map +1 -0
  694. package/lib/shared.module.d.ts.map +1 -0
  695. package/lib/system.module.d.ts.map +1 -0
  696. package/lib/views/cube/chart.component.d.ts.map +1 -0
  697. package/lib/views/cube/cube-base.d.ts.map +1 -0
  698. package/lib/views/cube/explore.component.d.ts.map +1 -0
  699. package/lib/views/cube/matrix.component.d.ts.map +1 -0
  700. package/lib/views/cube/parallel.component.d.ts.map +1 -0
  701. package/lib/views/cube/pivot.component.d.ts.map +1 -0
  702. package/lib/views/cube/sum.component.d.ts.map +1 -0
  703. package/lib/views/cube/view.component.d.ts.map +1 -0
  704. package/lib/views/document-view-ref.d.ts.map +1 -0
  705. package/lib/views/timeline/timeline.component.exp.d.ts.map +1 -0
  706. package/lib/views/view-item.component.d.ts.map +1 -0
  707. package/lib/views/views.component.d.ts.map +1 -0
  708. package/lib/views/views.mobile.component.d.ts.map +1 -0
  709. package/lib/views/views.pane.component.d.ts.map +1 -0
  710. package/package.json +1 -1
  711. package/public-api.d.ts.map +1 -0
@@ -215,9 +215,9 @@ export class CubeDesignComponent extends DesignerTypeElementComponent {
215
215
  }
216
216
  datatype(name) { return this.types.find(t => t.name == name)?.title; }
217
217
  }
218
- CubeDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CubeDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: i3.PromptService }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component });
219
- CubeDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CubeDesignComponent, selector: "ng-component", viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" (continue)=\"complete()\">\r\n <!-- widget -->\r\n <ng-template bizdocContent>\r\n <dl *ngIf=\"jobInfo\">\r\n <ng-container *ngIf=\"jobInfo.lastExecution\">\r\n <dt>{{'LastExecution'|translate}}</dt>\r\n <dd>{{jobInfo.lastExecution|amTimeAgo}}</dd>\r\n </ng-container>\r\n <ng-container *ngIf=\"jobInfo.nextExecution\">\r\n <dt>{{'NextExecution'|translate}}</dt>\r\n <dd>{{jobInfo.nextExecution|amTimeAgo}}</dd>\r\n </ng-container>\r\n <ng-container *ngIf=\"jobInfo.lastJobState\">\r\n <dt>{{'LastJobState'|translate}}</dt>\r\n <dd>\r\n <mat-icon *ngIf=\"jobInfo.error\" [bizdocTooltip]=\"jobInfo.error\">report</mat-icon>\r\n <span class=\"job-state\">{{jobInfo.lastJobState| translate}}</span>\r\n </dd>\r\n </ng-container>\r\n </dl>\r\n <div class=\"row\" fxLayoutAlign=\"start center\">\r\n <button mat-stroked-button (click)=\"sync()\" [disabled]=\"model.draft || syncing\">\r\n <span> {{'Synchronize'|translate}}</span>\r\n </button>\r\n &nbsp;\r\n <mat-spinner *ngIf=\"syncing\" diameter=\"22\"></mat-spinner>\r\n </div>\r\n <div class=\"row\">\r\n <div *ngIf=\"model.axes?.length\">\r\n <h2 class=\"mat-title\">{{'Axes'|translate}}</h2>\r\n <table class=\"mat-table\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of model.axes\">\r\n <td class=\"mat-cell\">{{a.title}}</td>\r\n <td class=\"mat-cell\">{{datatype(a.dataType)}}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n <!--<div *ngIf=\"model.indices?.length\">\r\n <h2 class=\"mat-title\">{{'Indices'|translate}}</h2>\r\n <table class=\"mat-table\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of model.indices\">\r\n <td class=\"mat-cell\">{{a.title}}</td>\r\n </tr>\r\n </table>\r\n </div>-->\r\n </div>\r\n </ng-template>\r\n <!-- edit -->\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-label>{{'SecurityLevel'|translate}}</mat-label>\r\n <mat-radio-group formControlName=\"scope\">\r\n <mat-radio-button color=\"warn\">{{'Global'|translate}}</mat-radio-button>\r\n <br />\r\n <p>{{'SecurityGlobalHelp'|translate}}</p>\r\n <mat-radio-button value=\"Positions\">{{'Positions'|translate}}</mat-radio-button>\r\n <p>{{'SecurityPositionsHelp'|translate}}</p>\r\n <mat-radio-button value=\"Patterns\">{{'Patterns'|translate}}</mat-radio-button>\r\n <p>{{'SecurityPatternsHelp'|translate}}</p>\r\n </mat-radio-group>\r\n <ng-container formGroupName=\"yAxis\">\r\n <mat-form-field fxFlex>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"Currency\">{{'Currency'|translate}}</mat-option>\r\n <mat-option value=\"Number\">{{'Numeric'|translate}}</mat-option>\r\n <mat-option value=\"Count\">{{'Accumulative'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <!--Axes-->\r\n <h2 class=\"mat-title row\">\r\n {{'Axes'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(axes, newAxis(), 'Axis', axisform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"axes\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, axes)\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of axes.controls; index as index\" [formGroup]=\"a\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{a.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(a, 'Axis', axisform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"axes.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--Indices-->\r\n <h2 class=\"mat-title row\">\r\n {{'Indices'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(indices, newIndex(), 'Index', indexform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"indices\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, indices)\">\r\n <tr class=\"mat-row\" *ngFor=\"let i of indices.controls; index as index\" [formGroup]=\"i\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{i.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(i, 'Index', indexform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"indices.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <mat-form-field *ngIf=\"indices.controls.length\">\r\n <mat-label>{{'AnomalyNotification'|translate}}</mat-label>\r\n <mat-select formControlName=\"anomaly\">\r\n <mat-option value=\"None\">{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Positions\">{{'Positions'|translate}}</mat-option>\r\n <mat-option value=\"Recipients\">{{'Everyone'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--Patterns-->\r\n <h2 class=\"mat-title row\">\r\n {{'Patterns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(patterns, newPattern(), 'Pattern', patternform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"indices\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, patterns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let p of patterns.controls; index as index\" [formGroup]=\"p\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{p.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(p, 'Pattern', patternform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"patterns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--Views-->\r\n <h2 class=\"row mat-title\">\r\n {{'Views'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(views, newView(), 'View', viewform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"views\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, views)\">\r\n <tr class=\"mat-row\" *ngFor=\"let v of views.controls; index as index\" [formGroup]=\"v\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{v.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(v, 'View', viewform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"views.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <mat-form-field>\r\n <mat-label>{{'Schedule'|translate}}</mat-label>\r\n <bizdoc-timespan-input formControlName=\"schedule\"></bizdoc-timespan-input>\r\n <mat-icon matSuffix>timer</mat-icon>\r\n <mat-hint></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<!---->\r\n<ng-template #indexform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<!-- pattern-->\r\n<ng-template #patternform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-designer-cube-filter [cube]=\"model\" [form]=\"form.get('axes')\"></bizdoc-designer-cube-filter>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </form>\r\n</ng-template>\r\n<!-- view -->\r\n<ng-template #viewform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"Chart\">{{'Chart'|translate}}</mat-option>\r\n <mat-option value=\"Pivot\">{{'Pivot'|translate}}</mat-option>\r\n <mat-option value=\"Grid\">{{'Grid'|translate}}</mat-option>\r\n <mat-option value=\"Spreadsheet\">{{'Spreadsheet'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'XAxis'|translate}}</mat-label>\r\n <mat-select formControlName=\"xAxis\" required multiple [sortComparator]=\"sortComparator\">\r\n <mat-option *ngFor=\"let a of axes.controls\" [value]=\"a.get('name').value\">{{a.get('title').value || a.get('name').value}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.get('xAxis').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('XAxis'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Series'|translate}}</mat-label>\r\n <mat-select formControlName=\"series\" multiple [sortComparator]=\"sortComparator\">\r\n <ng-container *ngFor=\"let a of axes.controls\">\r\n <mat-option [value]=\"a.get('name').value\" *ngIf=\"form.get('xAxis').value?.indexOf(a.get('name').value)<0\">{{a.get('title').value|| a.get('name').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Indices'|translate}}</mat-label>\r\n <mat-select formControlName=\"indices\" multiple>\r\n <ng-container *ngFor=\"let i of indices.controls\">\r\n <mat-option [value]=\"i.get('name').value\">{{i.get('title').value|| i.get('name').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'ChartType'|translate}}</mat-label>\r\n <mat-select formControlName=\"chartType\">\r\n <ng-container [ngSwitch]=\"form.get('type').value\">\r\n <ng-container *ngSwitchCase=\"'Chart'\">\r\n <ng-container *ngIf=\"accumulative\">\r\n <mat-option value=\"Pie\">{{'Pie'|translate}}</mat-option>\r\n <mat-option value=\"Doughnut\">{{'Doughnut'|translate}}</mat-option>\r\n <mat-option value=\"HalfDoughnut\">{{'HalfDoughnut'|translate}}</mat-option>\r\n <mat-option value=\"Funnel\">{{'Funnel'|translate}}</mat-option>\r\n <mat-option value=\"Pyramid\">{{'Pyramid'|translate}}</mat-option>\r\n </ng-container>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Pivot'\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n </ng-container>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'IndicesChartType'|translate}}</mat-label>\r\n <mat-select formControlName=\"indicesChartType\">\r\n <ng-container [ngSwitch]=\"form.get('type').value\">\r\n <ng-container *ngSwitchCase=\"'Chart'\">\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Pivot'\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n </ng-container>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <bizdoc-designer-cube-filter *ngIf=\"cube\" [cube]=\"cube\" [form]=\"form.get('filters')\"></bizdoc-designer-cube-filter>\r\n </form>\r\n</ng-template>\r\n<!-- Axis -->\r\n<ng-template #axisform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <ng-container *ngFor=\"let t of types\">\r\n <mat-option *ngIf=\"t.name\" [value]=\"t.name\">\r\n <span *ngIf=\"t.family\">{{t.family}} -&nbsp;</span>\r\n {{t.title}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('DataType'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <div><mat-checkbox formControlName=\"combination\">{{'Combination'}}</mat-checkbox></div>\r\n <div><mat-checkbox formControlName=\"sensitive\">{{'Sensitive'}}</mat-checkbox></div>\r\n <mat-form-field>\r\n <mat-label>{{'SelectionMode'|translate}}</mat-label>\r\n <mat-select formControlName=\"selectionMode\">\r\n <mat-option value=\"None\">{{'None'|translate}}</mat-option>\r\n <mat-option>{{'Single'|translate}}</mat-option>\r\n <mat-option value=\"Multiple\">{{'Multiple'|translate}}</mat-option>\r\n <mat-option value=\"Search\">{{'Search'|translate}}</mat-option>\r\n <mat-option value=\"Pattern\">{{'Pattern'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'DescendentOf'|translate}}</mat-label>\r\n <mat-select formControlName=\"descendentOf\">\r\n <ng-container *ngFor=\"let a of axes.controls\">\r\n <mat-option [value]=\"a.get('name').value\" *ngIf=\"a!=form\">{{a.get('title').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <div><mat-checkbox formControlName=\"indexable\">{{'Indexable'}}</mat-checkbox></div>\r\n </form>\r\n</ng-template>\r\n", styles: [":host ::ng-deep form{min-width:350px}:host ::ng-deep .mat-radio-group p{margin-inline-start:8px}.mat-table{width:100%}.mat-table .mat-cell:last-child{width:80px}.flex{flex:1}table tr td:first-child{width:26px}dl{width:100%;overflow:hidden;padding:0;margin:0}dt{float:left;width:35%;padding:0;margin:0;clear:both}dd{float:left;width:65%;padding:0;margin:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i17.TimespanInput, selector: "bizdoc-timespan-input", inputs: ["placeholder", "required", "disabled", "value"] }, { kind: "component", type: i18.DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "directive", type: i19.EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "directive", type: i19.WidgetContentDirective, selector: "[bizdocContent]" }, { kind: "component", type: i20.DesignerCubeFilterComponent, selector: "bizdoc-designer-cube-filter", inputs: ["cube", "form"] }, { kind: "component", type: i19.DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form"], outputs: ["continue", "save"] }, { kind: "pipe", type: i21.TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }] });
220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CubeDesignComponent, decorators: [{
218
+ CubeDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CubeDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: i3.PromptService }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component });
219
+ CubeDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: CubeDesignComponent, selector: "ng-component", viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" (continue)=\"complete()\">\r\n <!-- widget -->\r\n <ng-template bizdocContent>\r\n <dl *ngIf=\"jobInfo\">\r\n <ng-container *ngIf=\"jobInfo.lastExecution\">\r\n <dt>{{'LastExecution'|translate}}</dt>\r\n <dd>{{jobInfo.lastExecution|amTimeAgo}}</dd>\r\n </ng-container>\r\n <ng-container *ngIf=\"jobInfo.nextExecution\">\r\n <dt>{{'NextExecution'|translate}}</dt>\r\n <dd>{{jobInfo.nextExecution|amTimeAgo}}</dd>\r\n </ng-container>\r\n <ng-container *ngIf=\"jobInfo.lastJobState\">\r\n <dt>{{'LastJobState'|translate}}</dt>\r\n <dd>\r\n <mat-icon *ngIf=\"jobInfo.error\" [bizdocTooltip]=\"jobInfo.error\">report</mat-icon>\r\n <span class=\"job-state\">{{jobInfo.lastJobState| translate}}</span>\r\n </dd>\r\n </ng-container>\r\n </dl>\r\n <div class=\"row\" fxLayoutAlign=\"start center\">\r\n <button mat-stroked-button (click)=\"sync()\" [disabled]=\"model.draft || syncing\">\r\n <span> {{'Synchronize'|translate}}</span>\r\n </button>\r\n &nbsp;\r\n <mat-spinner *ngIf=\"syncing\" diameter=\"22\"></mat-spinner>\r\n </div>\r\n <div class=\"row\">\r\n <div *ngIf=\"model.axes?.length\">\r\n <h2 class=\"mat-title\">{{'Axes'|translate}}</h2>\r\n <table class=\"mat-table\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of model.axes\">\r\n <td class=\"mat-cell\">{{a.title}}</td>\r\n <td class=\"mat-cell\">{{datatype(a.dataType)}}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n <!--<div *ngIf=\"model.indices?.length\">\r\n <h2 class=\"mat-title\">{{'Indices'|translate}}</h2>\r\n <table class=\"mat-table\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of model.indices\">\r\n <td class=\"mat-cell\">{{a.title}}</td>\r\n </tr>\r\n </table>\r\n </div>-->\r\n </div>\r\n </ng-template>\r\n <!-- edit -->\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-label>{{'SecurityLevel'|translate}}</mat-label>\r\n <mat-radio-group formControlName=\"scope\">\r\n <mat-radio-button color=\"warn\">{{'Global'|translate}}</mat-radio-button>\r\n <br />\r\n <p>{{'SecurityGlobalHelp'|translate}}</p>\r\n <mat-radio-button value=\"Positions\">{{'Positions'|translate}}</mat-radio-button>\r\n <p>{{'SecurityPositionsHelp'|translate}}</p>\r\n <mat-radio-button value=\"Patterns\">{{'Patterns'|translate}}</mat-radio-button>\r\n <p>{{'SecurityPatternsHelp'|translate}}</p>\r\n </mat-radio-group>\r\n <ng-container formGroupName=\"yAxis\">\r\n <mat-form-field fxFlex>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"Currency\">{{'Currency'|translate}}</mat-option>\r\n <mat-option value=\"Number\">{{'Numeric'|translate}}</mat-option>\r\n <mat-option value=\"Count\">{{'Accumulative'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <!--Axes-->\r\n <h2 class=\"mat-title row\">\r\n {{'Axes'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(axes, newAxis(), 'Axis', axisform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"axes\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, axes)\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of axes.controls; index as index\" [formGroup]=\"a\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{a.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(a, 'Axis', axisform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"axes.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--Indices-->\r\n <h2 class=\"mat-title row\">\r\n {{'Indices'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(indices, newIndex(), 'Index', indexform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"indices\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, indices)\">\r\n <tr class=\"mat-row\" *ngFor=\"let i of indices.controls; index as index\" [formGroup]=\"i\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{i.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(i, 'Index', indexform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"indices.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <mat-form-field *ngIf=\"indices.controls.length\">\r\n <mat-label>{{'AnomalyNotification'|translate}}</mat-label>\r\n <mat-select formControlName=\"anomaly\">\r\n <mat-option value=\"None\">{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Positions\">{{'Positions'|translate}}</mat-option>\r\n <mat-option value=\"Recipients\">{{'Everyone'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--Patterns-->\r\n <h2 class=\"mat-title row\">\r\n {{'Patterns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(patterns, newPattern(), 'Pattern', patternform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"indices\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, patterns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let p of patterns.controls; index as index\" [formGroup]=\"p\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{p.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(p, 'Pattern', patternform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"patterns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--Views-->\r\n <h2 class=\"row mat-title\">\r\n {{'Views'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(views, newView(), 'View', viewform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"views\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, views)\">\r\n <tr class=\"mat-row\" *ngFor=\"let v of views.controls; index as index\" [formGroup]=\"v\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{v.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(v, 'View', viewform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"views.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <mat-form-field>\r\n <mat-label>{{'Schedule'|translate}}</mat-label>\r\n <bizdoc-timespan-input formControlName=\"schedule\"></bizdoc-timespan-input>\r\n <mat-icon matSuffix>timer</mat-icon>\r\n <mat-hint></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<!---->\r\n<ng-template #indexform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<!-- pattern-->\r\n<ng-template #patternform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-designer-cube-filter [cube]=\"model\" [form]=\"form.get('axes')\"></bizdoc-designer-cube-filter>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </form>\r\n</ng-template>\r\n<!-- view -->\r\n<ng-template #viewform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"Chart\">{{'Chart'|translate}}</mat-option>\r\n <mat-option value=\"Pivot\">{{'Pivot'|translate}}</mat-option>\r\n <mat-option value=\"Grid\">{{'Grid'|translate}}</mat-option>\r\n <mat-option value=\"Spreadsheet\">{{'Spreadsheet'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'XAxis'|translate}}</mat-label>\r\n <mat-select formControlName=\"xAxis\" required multiple [sortComparator]=\"sortComparator\">\r\n <mat-option *ngFor=\"let a of axes.controls\" [value]=\"a.get('name').value\">{{a.get('title').value || a.get('name').value}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.get('xAxis').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('XAxis'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Series'|translate}}</mat-label>\r\n <mat-select formControlName=\"series\" multiple [sortComparator]=\"sortComparator\">\r\n <ng-container *ngFor=\"let a of axes.controls\">\r\n <mat-option [value]=\"a.get('name').value\" *ngIf=\"form.get('xAxis').value?.indexOf(a.get('name').value)<0\">{{a.get('title').value|| a.get('name').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Indices'|translate}}</mat-label>\r\n <mat-select formControlName=\"indices\" multiple>\r\n <ng-container *ngFor=\"let i of indices.controls\">\r\n <mat-option [value]=\"i.get('name').value\">{{i.get('title').value|| i.get('name').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'ChartType'|translate}}</mat-label>\r\n <mat-select formControlName=\"chartType\">\r\n <ng-container [ngSwitch]=\"form.get('type').value\">\r\n <ng-container *ngSwitchCase=\"'Chart'\">\r\n <ng-container *ngIf=\"accumulative\">\r\n <mat-option value=\"Pie\">{{'Pie'|translate}}</mat-option>\r\n <mat-option value=\"Doughnut\">{{'Doughnut'|translate}}</mat-option>\r\n <mat-option value=\"HalfDoughnut\">{{'HalfDoughnut'|translate}}</mat-option>\r\n <mat-option value=\"Funnel\">{{'Funnel'|translate}}</mat-option>\r\n <mat-option value=\"Pyramid\">{{'Pyramid'|translate}}</mat-option>\r\n </ng-container>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Pivot'\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n </ng-container>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'IndicesChartType'|translate}}</mat-label>\r\n <mat-select formControlName=\"indicesChartType\">\r\n <ng-container [ngSwitch]=\"form.get('type').value\">\r\n <ng-container *ngSwitchCase=\"'Chart'\">\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Pivot'\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n </ng-container>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <bizdoc-designer-cube-filter *ngIf=\"cube\" [cube]=\"cube\" [form]=\"form.get('filters')\"></bizdoc-designer-cube-filter>\r\n </form>\r\n</ng-template>\r\n<!-- Axis -->\r\n<ng-template #axisform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <ng-container *ngFor=\"let t of types\">\r\n <mat-option *ngIf=\"t.name\" [value]=\"t.name\">\r\n <span *ngIf=\"t.family\">{{t.family}} -&nbsp;</span>\r\n {{t.title}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('DataType'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <div><mat-checkbox formControlName=\"combination\">{{'Combination'}}</mat-checkbox></div>\r\n <div><mat-checkbox formControlName=\"sensitive\">{{'Sensitive'}}</mat-checkbox></div>\r\n <mat-form-field>\r\n <mat-label>{{'SelectionMode'|translate}}</mat-label>\r\n <mat-select formControlName=\"selectionMode\">\r\n <mat-option value=\"None\">{{'None'|translate}}</mat-option>\r\n <mat-option>{{'Single'|translate}}</mat-option>\r\n <mat-option value=\"Multiple\">{{'Multiple'|translate}}</mat-option>\r\n <mat-option value=\"Search\">{{'Search'|translate}}</mat-option>\r\n <mat-option value=\"Pattern\">{{'Pattern'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'DescendentOf'|translate}}</mat-label>\r\n <mat-select formControlName=\"descendentOf\">\r\n <ng-container *ngFor=\"let a of axes.controls\">\r\n <mat-option [value]=\"a.get('name').value\" *ngIf=\"a!=form\">{{a.get('title').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <div><mat-checkbox formControlName=\"indexable\">{{'Indexable'}}</mat-checkbox></div>\r\n </form>\r\n</ng-template>\r\n", styles: [":host ::ng-deep form{min-width:350px}:host ::ng-deep .mat-radio-group p{margin-inline-start:8px}.mat-table{width:100%}.mat-table .mat-cell:last-child{width:80px}.flex{flex:1}table tr td:first-child{width:26px}dl{width:100%;overflow:hidden;padding:0;margin:0}dt{float:left;width:35%;padding:0;margin:0;clear:both}dd{float:left;width:65%;padding:0;margin:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i17.TimespanInput, selector: "bizdoc-timespan-input", inputs: ["placeholder", "required", "disabled", "value"] }, { kind: "component", type: i18.DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "directive", type: i19.EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "directive", type: i19.WidgetContentDirective, selector: "[bizdocContent]" }, { kind: "component", type: i20.DesignerCubeFilterComponent, selector: "bizdoc-designer-cube-filter", inputs: ["cube", "form"] }, { kind: "component", type: i19.DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form"], outputs: ["continue", "save"] }, { kind: "pipe", type: i21.TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }] });
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CubeDesignComponent, decorators: [{
221
221
  type: Component,
222
222
  args: [{ template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" (continue)=\"complete()\">\r\n <!-- widget -->\r\n <ng-template bizdocContent>\r\n <dl *ngIf=\"jobInfo\">\r\n <ng-container *ngIf=\"jobInfo.lastExecution\">\r\n <dt>{{'LastExecution'|translate}}</dt>\r\n <dd>{{jobInfo.lastExecution|amTimeAgo}}</dd>\r\n </ng-container>\r\n <ng-container *ngIf=\"jobInfo.nextExecution\">\r\n <dt>{{'NextExecution'|translate}}</dt>\r\n <dd>{{jobInfo.nextExecution|amTimeAgo}}</dd>\r\n </ng-container>\r\n <ng-container *ngIf=\"jobInfo.lastJobState\">\r\n <dt>{{'LastJobState'|translate}}</dt>\r\n <dd>\r\n <mat-icon *ngIf=\"jobInfo.error\" [bizdocTooltip]=\"jobInfo.error\">report</mat-icon>\r\n <span class=\"job-state\">{{jobInfo.lastJobState| translate}}</span>\r\n </dd>\r\n </ng-container>\r\n </dl>\r\n <div class=\"row\" fxLayoutAlign=\"start center\">\r\n <button mat-stroked-button (click)=\"sync()\" [disabled]=\"model.draft || syncing\">\r\n <span> {{'Synchronize'|translate}}</span>\r\n </button>\r\n &nbsp;\r\n <mat-spinner *ngIf=\"syncing\" diameter=\"22\"></mat-spinner>\r\n </div>\r\n <div class=\"row\">\r\n <div *ngIf=\"model.axes?.length\">\r\n <h2 class=\"mat-title\">{{'Axes'|translate}}</h2>\r\n <table class=\"mat-table\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of model.axes\">\r\n <td class=\"mat-cell\">{{a.title}}</td>\r\n <td class=\"mat-cell\">{{datatype(a.dataType)}}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n <!--<div *ngIf=\"model.indices?.length\">\r\n <h2 class=\"mat-title\">{{'Indices'|translate}}</h2>\r\n <table class=\"mat-table\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of model.indices\">\r\n <td class=\"mat-cell\">{{a.title}}</td>\r\n </tr>\r\n </table>\r\n </div>-->\r\n </div>\r\n </ng-template>\r\n <!-- edit -->\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-label>{{'SecurityLevel'|translate}}</mat-label>\r\n <mat-radio-group formControlName=\"scope\">\r\n <mat-radio-button color=\"warn\">{{'Global'|translate}}</mat-radio-button>\r\n <br />\r\n <p>{{'SecurityGlobalHelp'|translate}}</p>\r\n <mat-radio-button value=\"Positions\">{{'Positions'|translate}}</mat-radio-button>\r\n <p>{{'SecurityPositionsHelp'|translate}}</p>\r\n <mat-radio-button value=\"Patterns\">{{'Patterns'|translate}}</mat-radio-button>\r\n <p>{{'SecurityPatternsHelp'|translate}}</p>\r\n </mat-radio-group>\r\n <ng-container formGroupName=\"yAxis\">\r\n <mat-form-field fxFlex>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"Currency\">{{'Currency'|translate}}</mat-option>\r\n <mat-option value=\"Number\">{{'Numeric'|translate}}</mat-option>\r\n <mat-option value=\"Count\">{{'Accumulative'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <!--Axes-->\r\n <h2 class=\"mat-title row\">\r\n {{'Axes'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(axes, newAxis(), 'Axis', axisform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"axes\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, axes)\">\r\n <tr class=\"mat-row\" *ngFor=\"let a of axes.controls; index as index\" [formGroup]=\"a\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{a.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(a, 'Axis', axisform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"axes.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--Indices-->\r\n <h2 class=\"mat-title row\">\r\n {{'Indices'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(indices, newIndex(), 'Index', indexform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"indices\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, indices)\">\r\n <tr class=\"mat-row\" *ngFor=\"let i of indices.controls; index as index\" [formGroup]=\"i\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{i.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(i, 'Index', indexform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"indices.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <mat-form-field *ngIf=\"indices.controls.length\">\r\n <mat-label>{{'AnomalyNotification'|translate}}</mat-label>\r\n <mat-select formControlName=\"anomaly\">\r\n <mat-option value=\"None\">{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Positions\">{{'Positions'|translate}}</mat-option>\r\n <mat-option value=\"Recipients\">{{'Everyone'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--Patterns-->\r\n <h2 class=\"mat-title row\">\r\n {{'Patterns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(patterns, newPattern(), 'Pattern', patternform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"indices\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, patterns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let p of patterns.controls; index as index\" [formGroup]=\"p\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{p.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(p, 'Pattern', patternform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"patterns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <!--Views-->\r\n <h2 class=\"row mat-title\">\r\n {{'Views'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(views, newView(), 'View', viewform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"views\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, views)\">\r\n <tr class=\"mat-row\" *ngFor=\"let v of views.controls; index as index\" [formGroup]=\"v\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\">\r\n {{v.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\">\r\n <button mat-icon-button (click)=\"edit(v, 'View', viewform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"views.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n <mat-form-field>\r\n <mat-label>{{'Schedule'|translate}}</mat-label>\r\n <bizdoc-timespan-input formControlName=\"schedule\"></bizdoc-timespan-input>\r\n <mat-icon matSuffix>timer</mat-icon>\r\n <mat-hint></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<!---->\r\n<ng-template #indexform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n<!-- pattern-->\r\n<ng-template #patternform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-designer-cube-filter [cube]=\"model\" [form]=\"form.get('axes')\"></bizdoc-designer-cube-filter>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </form>\r\n</ng-template>\r\n<!-- view -->\r\n<ng-template #viewform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"Chart\">{{'Chart'|translate}}</mat-option>\r\n <mat-option value=\"Pivot\">{{'Pivot'|translate}}</mat-option>\r\n <mat-option value=\"Grid\">{{'Grid'|translate}}</mat-option>\r\n <mat-option value=\"Spreadsheet\">{{'Spreadsheet'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'XAxis'|translate}}</mat-label>\r\n <mat-select formControlName=\"xAxis\" required multiple [sortComparator]=\"sortComparator\">\r\n <mat-option *ngFor=\"let a of axes.controls\" [value]=\"a.get('name').value\">{{a.get('title').value || a.get('name').value}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.get('xAxis').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('XAxis'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Series'|translate}}</mat-label>\r\n <mat-select formControlName=\"series\" multiple [sortComparator]=\"sortComparator\">\r\n <ng-container *ngFor=\"let a of axes.controls\">\r\n <mat-option [value]=\"a.get('name').value\" *ngIf=\"form.get('xAxis').value?.indexOf(a.get('name').value)<0\">{{a.get('title').value|| a.get('name').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Indices'|translate}}</mat-label>\r\n <mat-select formControlName=\"indices\" multiple>\r\n <ng-container *ngFor=\"let i of indices.controls\">\r\n <mat-option [value]=\"i.get('name').value\">{{i.get('title').value|| i.get('name').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'ChartType'|translate}}</mat-label>\r\n <mat-select formControlName=\"chartType\">\r\n <ng-container [ngSwitch]=\"form.get('type').value\">\r\n <ng-container *ngSwitchCase=\"'Chart'\">\r\n <ng-container *ngIf=\"accumulative\">\r\n <mat-option value=\"Pie\">{{'Pie'|translate}}</mat-option>\r\n <mat-option value=\"Doughnut\">{{'Doughnut'|translate}}</mat-option>\r\n <mat-option value=\"HalfDoughnut\">{{'HalfDoughnut'|translate}}</mat-option>\r\n <mat-option value=\"Funnel\">{{'Funnel'|translate}}</mat-option>\r\n <mat-option value=\"Pyramid\">{{'Pyramid'|translate}}</mat-option>\r\n </ng-container>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Pivot'\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n </ng-container>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'IndicesChartType'|translate}}</mat-label>\r\n <mat-select formControlName=\"indicesChartType\">\r\n <ng-container [ngSwitch]=\"form.get('type').value\">\r\n <ng-container *ngSwitchCase=\"'Chart'\">\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'Pivot'\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option value=\"Column\">{{'Column'|translate}}</mat-option>\r\n <mat-option value=\"Bar\">{{'Bar'|translate}}</mat-option>\r\n <mat-option value=\"Bubble\">{{'Bubble'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar\">{{'StackingBar'|translate}}</mat-option>\r\n <mat-option value=\"StackingBar100\">{{'StackingBar100'|translate}}</mat-option>\r\n <mat-option value=\"Line\">{{'Line'|translate}}</mat-option>\r\n <mat-option value=\"Spline\">{{'Spline'|translate}}</mat-option>\r\n <mat-option value=\"SplineArea\">{{'SplineArea'|translate}}</mat-option>\r\n <mat-option value=\"Area\">{{'Area'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea\">{{'StackingArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingArea100\">{{'StackingArea100'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn\">{{'StackingColumn'|translate}}</mat-option>\r\n <mat-option value=\"StackingColumn100\">{{'StackingColumn100'|translate}}</mat-option>\r\n <mat-option value=\"Scatter\">{{'Scatter'|translate}}</mat-option>\r\n <mat-option value=\"Polar\">{{'Polar'|translate}}</mat-option>\r\n <mat-option value=\"Radar\">{{'Radar'|translate}}</mat-option>\r\n <mat-option value=\"StepLine\">{{'StepLine'|translate}}</mat-option>\r\n <mat-option value=\"StepArea\">{{'StepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingStepArea\">{{'StackingStepArea'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine\">{{'StackingLine'|translate}}</mat-option>\r\n <mat-option value=\"StackingLine100\">{{'StackingLine100'|translate}}</mat-option>\r\n </ng-container>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <bizdoc-designer-cube-filter *ngIf=\"cube\" [cube]=\"cube\" [form]=\"form.get('filters')\"></bizdoc-designer-cube-filter>\r\n </form>\r\n</ng-template>\r\n<!-- Axis -->\r\n<ng-template #axisform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <ng-container *ngFor=\"let t of types\">\r\n <mat-option *ngIf=\"t.name\" [value]=\"t.name\">\r\n <span *ngIf=\"t.family\">{{t.family}} -&nbsp;</span>\r\n {{t.title}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('DataType'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <div><mat-checkbox formControlName=\"combination\">{{'Combination'}}</mat-checkbox></div>\r\n <div><mat-checkbox formControlName=\"sensitive\">{{'Sensitive'}}</mat-checkbox></div>\r\n <mat-form-field>\r\n <mat-label>{{'SelectionMode'|translate}}</mat-label>\r\n <mat-select formControlName=\"selectionMode\">\r\n <mat-option value=\"None\">{{'None'|translate}}</mat-option>\r\n <mat-option>{{'Single'|translate}}</mat-option>\r\n <mat-option value=\"Multiple\">{{'Multiple'|translate}}</mat-option>\r\n <mat-option value=\"Search\">{{'Search'|translate}}</mat-option>\r\n <mat-option value=\"Pattern\">{{'Pattern'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'DescendentOf'|translate}}</mat-label>\r\n <mat-select formControlName=\"descendentOf\">\r\n <ng-container *ngFor=\"let a of axes.controls\">\r\n <mat-option [value]=\"a.get('name').value\" *ngIf=\"a!=form\">{{a.get('title').value}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <div><mat-checkbox formControlName=\"indexable\">{{'Indexable'}}</mat-checkbox></div>\r\n </form>\r\n</ng-template>\r\n", styles: [":host ::ng-deep form{min-width:350px}:host ::ng-deep .mat-radio-group p{margin-inline-start:8px}.mat-table{width:100%}.mat-table .mat-cell:last-child{width:80px}.flex{flex:1}table tr td:first-child{width:26px}dl{width:100%;overflow:hidden;padding:0;margin:0}dt{float:left;width:35%;padding:0;margin:0;clear:both}dd{float:left;width:65%;padding:0;margin:0}\n"] }]
223
223
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SystemService }, { type: i3.PromptService }, { type: i0.ElementRef }, { type: i23.DesignerRef, decorators: [{
@@ -227,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
227
227
  type: ViewChild,
228
228
  args: ['element']
229
229
  }] } });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZWxlbWVudHMvY3ViZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZWxlbWVudHMvY3ViZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFnQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBNkQsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQzdJLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU0xQixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsNEJBQTRCO0lBMEJuRSxZQUFZLEVBQWUsRUFDakIsUUFBdUIsRUFDdkIsR0FBa0IsRUFDMUIsT0FBd0IsRUFDSCxHQUFnQjtRQUNyQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUpoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUEzQm5CLFVBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxF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RSxLQUFLLENBQUM7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFFBQVEsQ0FBQyxJQUFZLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7Z0hBdk1uRSxtQkFBbUIsaUlBOEJwQixXQUFXO29HQTlCVixtQkFBbUIsK0tDZGhDLHF4d0JBZ2FBOzJGRGxaYSxtQkFBbUI7a0JBSi9CLFNBQVM7OzswQkFrQ0wsTUFBTTsyQkFBQyxXQUFXOzRDQVBDLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQmFja2dyb3VuZEpvYkluZm8sIEN1YmVJbmZvLCBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGVzaWduZXIuYmFzZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgcHJvZ3JhbU5hbWUsIEVsZW1lbnRJbmZvLCBDdWJlQXhpc01vZGVsLCBDdWJlVmlld01vZGVsLCBDdWJlSW5kZXhNb2RlbCwgYXJyYXlPZiwgUGF0dGVybk1vZGVsIH0gZnJvbSBcIi4uL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICdjdWJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnY3ViZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdWJlRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgdmlld3MgPSB0aGlzLl9mYi5hcnJheShbXSk7XHJcbiAgcmVhZG9ubHkgYXhlcyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBpbmRpY2VzID0gdGhpcy5fZmIuYXJyYXkoW10pO1xyXG4gIHJlYWRvbmx5IHBhdHRlcm5zID0gdGhpcy5fZmIuYXJyYXkoW10pO1xyXG4gIHNvcnRDb21wYXJhdG9yID0gKGEsIGIpID0+IDA7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHNjaGVkdWxlOiBudWxsLFxyXG4gICAgcGF0dGVybnM6IHRoaXMucGF0dGVybnMsXHJcbiAgICB2aWV3czogdGhpcy52aWV3cyxcclxuICAgIGF4ZXM6IHRoaXMuYXhlcyxcclxuICAgIGluZGljZXM6IHRoaXMuaW5kaWNlcyxcclxuICAgIHNjb3BlOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgeUF4aXM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgdHlwZTogbnVsbCxcclxuICAgICAgdGl0bGU6IG51bGwsXHJcbiAgICAgIHJlc291cmNlOiBudWxsLFxyXG4gICAgfSksXHJcbiAgICBhbm9tYWx5OiB0aGlzLl9mYi5jb250cm9sKCdQb3NpdGlvbnMnKSxcclxuICB9LCB7IC8qdmFsaWRhdG9yczogdGhpcy5fY3ViZUF4ZXNWYWxpZGF0b3IqLyB9KTtcclxuICB1c2FnZTogQ3ViZUluZm87XHJcbiAgam9iSW5mbzogQmFja2dyb3VuZEpvYkluZm87XHJcbiAgc3luY2luZyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2VsZW1lbnQnKSBlbGVtZW50OiBFbGVtZW50UmVmPGFueT47XHJcbiAgcmVhZG9ubHkgdHlwZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgYWNjdW11bGF0aXZlOiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PixcclxuICAgIEBJbmplY3QoRGVzaWduZXJSZWYpIHJlZjogRGVzaWduZXJSZWYpIHtcclxuICAgIHN1cGVyKGZiLCBlbGVtZW50LCByZWYpO1xyXG4gICAgdGhpcy50eXBlcyA9IHJlZi5kZXNpZ25lci50eXBlcy5maWx0ZXIodCA9PiAhdC5kaXNhYmxlZCkuXHJcbiAgICAgIHNvcnQoKGEsIGIpID0+IGEudGl0bGUgPCBiLnRpdGxlID8gLTEgOiAxKTtcclxuICB9XHJcbiAgc3luYygpIHtcclxuICAgIHRoaXMuc3luY2luZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnN5bmNocmluaXplKHRoaXMubW9kZWwubmFtZSkuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICB0aGlzLmpvYkluZm8gPSBlO1xyXG4gICAgICB0aGlzLl9zY2hlZHVsZShlLm5leHRFeGVjdXRpb24pO1xyXG4gICAgICB0aGlzLnN5bmNpbmcgPSBmYWxzZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgdGhpcy5zeW5jaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlICd3aWRnZXQnOlxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY3ViZSh0aGlzLm1vZGVsLm5hbWUpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgIHRoaXMuam9iSW5mbyA9IHIuam9iSW5mbztcclxuICAgICAgICAgIHIuam9iSW5mbyAmJiByLmpvYkluZm8ubmV4dEV4ZWN1dGlvbiAmJiB0aGlzLl9zY2hlZHVsZShyLmpvYkluZm8ubmV4dEV4ZWN1dGlvbik7XHJcbiAgICAgICAgICB0aGlzLnVzYWdlID0gcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgICAgdGhpcy5fYnVpbGRGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zY2hlZHVsZShkYXRlOiBEYXRlKSB7XHJcbiAgICBpZiAoIWRhdGUpIHJldHVybjtcclxuICAgIGNvbnN0IG1zID0gZGF5anMoZGF0ZSkuZGlmZigpLnZhbHVlT2YoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgIH0sIG1zICsgNjAwMDAwKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5tb2RlbC5heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgIHRoaXMuYXhlcy5wdXNoKHRoaXMubmV3QXhpcyhhKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1vZGVsLmluZGljZXM/LmZvckVhY2goaSA9PlxyXG4gICAgICB0aGlzLmluZGljZXMucHVzaCh0aGlzLm5ld0luZGV4KGkpLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLm1vZGVsLnBhdHRlcm5zPy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5wYXR0ZXJucy5wdXNoKHRoaXMubmV3UGF0dGVybihwKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5tb2RlbC52aWV3cz8uZm9yRWFjaCh2ID0+IHtcclxuICAgICAgdGhpcy52aWV3cy5wdXNoKHRoaXMubmV3Vmlldyh2KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXBsZXRlKCkge1xyXG4gICAgdGhpcy5fYnVpbGRGb3JtKCk7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwucHJpdmlsZWdlcykgdGhpcy5tb2RlbC5wcml2aWxlZ2VzID0ge307XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxuICBuYW1lT2YoYXhpczogc3RyaW5nIHwgc3RyaW5nW10pIHsgcmV0dXJuIHRoaXMubW9kZWwuYXhlcy5maWx0ZXIoYSA9PiBpc0FycmF5KGF4aXMpID8gYXhpcy5pbmRleE9mKGEubmFtZSkgPiAtMSA6IGEubmFtZSA9PT0gYXhpcykuam9pbignLCAnKSB9XHJcbiAgcHJpdmF0ZSBuZXdWaWV3KG1vZGVsPzogQ3ViZVZpZXdNb2RlbCk6IGFueSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8ubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIHRpdGxlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8udGl0bGUsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB4QXhpcyA9IHRoaXMuX2ZiLmNvbnRyb2wobW9kZWw/LnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgY2hhcnRUeXBlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8uY2hhcnRUeXBlIHx8IG51bGwpLFxyXG4gICAgICBpbmRpY2VzQ2hhcnRUeXBlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8uaW5kaWNlc0NoYXJ0VHlwZSB8fCBudWxsKSxcclxuICAgICAgc2VyaWVzID0gdGhpcy5fZmIuY29udHJvbChhcnJheU9mKG1vZGVsPy5zZXJpZXMpKSxcclxuICAgICAgaW5kaWNlcyA9IHRoaXMuX2ZiLmNvbnRyb2woYXJyYXlPZihtb2RlbD8uaW5kaWNlcykpLFxyXG4gICAgICB0eXBlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8udHlwZSB8fCAnQ2hhcnQnKTtcclxuICAgIGlmICghbW9kZWwgfHwgdGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLlxyXG4gICAgICBzdWJzY3JpYmUodCA9PiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKSk7XHJcbiAgICB4QXhpcy52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgobW9kZWw/LnhBeGlzKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodiAmJiB2Lmxlbmd0aCkge1xyXG4gICAgICAgIHNlcmllcy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIGlmIChzZXJpZXMudmFsdWUpXHJcbiAgICAgICAgICBzZXJpZXMuc2V0VmFsdWUoKHRoaXMuYXhlcy52YWx1ZSBhcyBDdWJlQXhpc01vZGVsW10pLlxyXG4gICAgICAgICAgICBmaWx0ZXIoYSA9PiB2LmluZGV4T2YoYS5uYW1lKSA8IDAgJiYgc2VyaWVzLnZhbHVlLmluZGV4T2YoYS5uYW1lKSA+IC0xKS5cclxuICAgICAgICAgICAgbWFwKGEgPT4gYS5uYW1lKVxyXG4gICAgICAgICAgICAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgc2VyaWVzLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgICBzZXJpZXMudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG1vZGVsPy5zZXJpZXMpKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIHRoaXMuYWNjdW11bGF0aXZlID0gIXYgfHwgdi5sZW5ndGggPT09IDA7XHJcbiAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGl2ZSB8fCAhdGhpcy5pbmRpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgIGluZGljZXMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgaW5kaWNlc0NoYXJ0VHlwZS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpbmRpY2VzLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgaW5kaWNlc0NoYXJ0VHlwZS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGluZGljZXMudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG1vZGVsPy5pbmRpY2VzKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodiAmJiB2Lmxlbmd0aClcclxuICAgICAgICBpbmRpY2VzQ2hhcnRUeXBlLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpbmRpY2VzQ2hhcnRUeXBlLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgaWNvbjogbW9kZWw/Lmljb24gfHwgJ2luc2lnaHRzJyxcclxuICAgICAgeEF4aXMsXHJcbiAgICAgIHNlcmllcyxcclxuICAgICAgaW5kaWNlcyxcclxuICAgICAgdHlwZSxcclxuICAgICAgY2hhcnRUeXBlLFxyXG4gICAgICBpbmRpY2VzQ2hhcnRUeXBlLFxyXG4gICAgICBmaWx0ZXJzOiB0aGlzLl9mYi5ncm91cCh7fSksXHJcbiAgICAgIHByaXZpbGVnZXM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgICBydWxlOiBudWxsLFxyXG4gICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgdHlwZS52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgobW9kZWw/LnR5cGUpKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgIGNhc2UgJ1NwcmVhZHNoZWV0JzpcclxuICAgICAgICBjYXNlICdHcmlkJzpcclxuICAgICAgICAgIHNlcmllcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgY2hhcnRUeXBlLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHNlcmllcy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgIGNoYXJ0VHlwZS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIG5ld0F4aXMobW9kZWw/OiBDdWJlQXhpc01vZGVsKTogYW55IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy5uYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy50aXRsZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICBpZiAoIW1vZGVsIHx8IHRoaXMubW9kZWwuZHJhZnQpIHRpdGxlLnZhbHVlQ2hhbmdlcy5cclxuICAgICAgc3Vic2NyaWJlKHQgPT4gbmFtZS5zZXRWYWx1ZShwcm9ncmFtTmFtZSh0KSkpO1xyXG4gICAgZWxzZSBuYW1lLmRpc2FibGUoKTtcclxuICAgIHJldHVybiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHRpdGxlLFxyXG4gICAgICBkZXNjZW5kZW50T2Y6IG1vZGVsPy5kZXNjZW5kZW50T2YsXHJcbiAgICAgIHNlbGVjdGlvbk1vZGU6IG1vZGVsPy5zZWxlY3Rpb25Nb2RlLFxyXG4gICAgICBjb21iaW5hdGlvbjogbW9kZWw/LmNvbWJpbmF0aW9uLFxyXG4gICAgICBzZW5zaXRpdmU6IG1vZGVsPy5zZW5zaXRpdmUsXHJcbiAgICAgIGluZGV4YWJsZTogbW9kZWw/LmluZGV4YWJsZSAhPT0gZmFsc2UsXHJcbiAgICAgIGRhdGFUeXBlOiB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy5kYXRhVHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZXdJbmRleChtb2RlbD86IEN1YmVJbmRleE1vZGVsKTogYW55IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy5uYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy50aXRsZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICBpZiAoIW1vZGVsIHx8IHRoaXMubW9kZWwuZHJhZnQpIHRpdGxlLnZhbHVlQ2hhbmdlcy5cclxuICAgICAgc3Vic2NyaWJlKHQgPT4gbmFtZS5zZXRWYWx1ZShwcm9ncmFtTmFtZSh0KSkpO1xyXG4gICAgZWxzZSBuYW1lLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgbmFtZSxcclxuICAgICAgdGl0bGUsXHJcbiAgICAgIGFjY3VtdWxhdGU6IG1vZGVsPy5hY2N1bXVsYXRlLFxyXG4gICAgICBoaWRkZW46IG1vZGVsPy5oaWRkZW4sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmV3UGF0dGVybihtb2RlbD86IFBhdHRlcm5Nb2RlbCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBheGVzOiB0aGlzLl9mYi5ncm91cChtb2RlbD8uYXhlcyB8fCB7fSksXHJcbiAgICAgIHRpdGxlOiB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy50aXRsZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIGhpZGRlbjogbW9kZWw/LmhpZGRlbixcclxuICAgICAgcnVsZTogbW9kZWw/LnJ1bGUsXHJcbiAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihtb2RlbD8ucm9sZXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGRhdGF0eXBlKG5hbWU6IHN0cmluZykgeyByZXR1cm4gdGhpcy50eXBlcy5maW5kKHQgPT4gdC5uYW1lID09IG5hbWUpPy50aXRsZTsgfVxyXG59XHJcbiIsIjxiaXpkb2MtZGVzaWduZXItZWxlbWVudCBbZm9ybV09XCJmb3JtXCIgW3ByaXZpbGVnZXNdPVwidHJ1ZVwiIChjb250aW51ZSk9XCJjb21wbGV0ZSgpXCI+XHJcbiAgPCEtLSB3aWRnZXQgLS0+XHJcbiAgPG5nLXRlbXBsYXRlIGJpemRvY0NvbnRlbnQ+XHJcbiAgICA8ZGwgKm5nSWY9XCJqb2JJbmZvXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJqb2JJbmZvLmxhc3RFeGVjdXRpb25cIj5cclxuICAgICAgICA8ZHQ+e3snTGFzdEV4ZWN1dGlvbid8dHJhbnNsYXRlfX08L2R0PlxyXG4gICAgICAgIDxkZD57e2pvYkluZm8ubGFzdEV4ZWN1dGlvbnxhbVRpbWVBZ299fTwvZGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiam9iSW5mby5uZXh0RXhlY3V0aW9uXCI+XHJcbiAgICAgICAgPGR0Pnt7J05leHRFeGVjdXRpb24nfHRyYW5zbGF0ZX19PC9kdD5cclxuICAgICAgICA8ZGQ+e3tqb2JJbmZvLm5leHRFeGVjdXRpb258YW1UaW1lQWdvfX08L2RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImpvYkluZm8ubGFzdEpvYlN0YXRlXCI+XHJcbiAgICAgICAgPGR0Pnt7J0xhc3RKb2JTdGF0ZSd8dHJhbnNsYXRlfX08L2R0PlxyXG4gICAgICAgIDxkZD5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImpvYkluZm8uZXJyb3JcIiBbYml6ZG9jVG9vbHRpcF09XCJqb2JJbmZvLmVycm9yXCI+cmVwb3J0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiam9iLXN0YXRlXCI+e3tqb2JJbmZvLmxhc3RKb2JTdGF0ZXwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgPC9kZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2RsPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInN5bmMoKVwiIFtkaXNhYmxlZF09XCJtb2RlbC5kcmFmdCB8fCBzeW5jaW5nXCI+XHJcbiAgICAgICAgPHNwYW4+IHt7J1N5bmNocm9uaXplJ3x0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgICZuYnNwO1xyXG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJzeW5jaW5nXCIgZGlhbWV0ZXI9XCIyMlwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIm1vZGVsLmF4ZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J0F4ZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJtYXQtdGFibGVcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgYSBvZiBtb2RlbC5heGVzXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCI+e3thLnRpdGxlfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPnt7ZGF0YXR5cGUoYS5kYXRhVHlwZSl9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tPGRpdiAqbmdJZj1cIm1vZGVsLmluZGljZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J0luZGljZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJtYXQtdGFibGVcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgYSBvZiBtb2RlbC5pbmRpY2VzXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCI+e3thLnRpdGxlfX08L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj4tLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPCEtLSBlZGl0IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSBiaXpkb2NFZGl0Q29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3OyBlbHNlIG1haW5cIj5cclxuICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3tjb250ZXh0LnRpdGxlfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgPGRpdiAoZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUpPVwiY2xvc2VWaWV3KCRldmVudClcIiAjZWxlbWVudCBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWV3OyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFjdGlvbnNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlVmlldygpXCIgdHlwZT1cImJ1dHRvblwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+a2V5Ym9hcmRfcmV0dXJuPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2JpemRvYy1kZXNpZ25lci1lbGVtZW50PlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbWFpbj5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPG1hdC1sYWJlbD57eydTZWN1cml0eUxldmVsJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJzY29wZVwiPlxyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cIndhcm5cIj57eydHbG9iYWwnfHRyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8YnIgLz5cclxuICAgICAgPHA+e3snU2VjdXJpdHlHbG9iYWxIZWxwJ3x0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJQb3NpdGlvbnNcIj57eydQb3NpdGlvbnMnfHRyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8cD57eydTZWN1cml0eVBvc2l0aW9uc0hlbHAnfHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cIlBhdHRlcm5zXCI+e3snUGF0dGVybnMnfHRyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8cD57eydTZWN1cml0eVBhdHRlcm5zSGVscCd8dHJhbnNsYXRlfX08L3A+XHJcbiAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cInlBeGlzXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydUeXBlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQ3VycmVuY3lcIj57eydDdXJyZW5jeSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIk51bWJlclwiPnt7J051bWVyaWMnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJDb3VudFwiPnt7J0FjY3VtdWxhdGl2ZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tQXhlcy0tPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlIHJvd1wiPlxyXG4gICAgICB7eydBeGVzJ3x0cmFuc2xhdGV9fVxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGQoYXhlcywgbmV3QXhpcygpLCAnQXhpcycsIGF4aXNmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImF4ZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIGF4ZXMpXCI+XHJcbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgYSBvZiBheGVzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwiYVwiIGNka0RyYWc+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIGZsZXhcIj5cclxuICAgICAgICAgIHt7YS5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KGEsICdBeGlzJywgYXhpc2Zvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0VkaXQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYXhlcy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8IS0tSW5kaWNlcy0tPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlIHJvd1wiPlxyXG4gICAgICB7eydJbmRpY2VzJ3x0cmFuc2xhdGV9fVxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGQoaW5kaWNlcywgbmV3SW5kZXgoKSwgJ0luZGV4JywgaW5kZXhmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImluZGljZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIGluZGljZXMpXCI+XHJcbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgaSBvZiBpbmRpY2VzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwiaVwiIGNka0RyYWc+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIGZsZXhcIj5cclxuICAgICAgICAgIHt7aS5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KGksICdJbmRleCcsIGluZGV4Zm9ybSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRWRpdCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJpbmRpY2VzLnJlbW92ZUF0KGluZGV4KVwiIFtiaXpkb2NUb29sdGlwXT1cIidSZW1vdmUnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImluZGljZXMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snQW5vbWFseU5vdGlmaWNhdGlvbid8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiYW5vbWFseVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTm9uZVwiPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUG9zaXRpb25zXCI+e3snUG9zaXRpb25zJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJlY2lwaWVudHNcIj57eydFdmVyeW9uZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8IS0tUGF0dGVybnMtLT5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZSByb3dcIj5cclxuICAgICAge3snUGF0dGVybnMnfHRyYW5zbGF0ZX19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZChwYXR0ZXJucywgbmV3UGF0dGVybigpLCAnUGF0dGVybicsIHBhdHRlcm5mb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImluZGljZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIHBhdHRlcm5zKVwiPlxyXG4gICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm5nRm9yPVwibGV0IHAgb2YgcGF0dGVybnMuY29udHJvbHM7IGluZGV4IGFzIGluZGV4XCIgW2Zvcm1Hcm91cF09XCJwXCIgY2RrRHJhZz5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgZmxleFwiPlxyXG4gICAgICAgICAge3twLmdldCgndGl0bGUnKS52YWx1ZX19XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImVkaXQocCwgJ1BhdHRlcm4nLCBwYXR0ZXJuZm9ybSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRWRpdCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJwYXR0ZXJucy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8IS0tVmlld3MtLT5cclxuICAgIDxoMiBjbGFzcz1cInJvdyBtYXQtdGl0bGVcIj5cclxuICAgICAge3snVmlld3MnfHRyYW5zbGF0ZX19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZCh2aWV3cywgbmV3VmlldygpLCAnVmlldycsIHZpZXdmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cInZpZXdzXCIgY2xhc3M9XCJtYXQtdGFibGVcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCB2aWV3cylcIj5cclxuICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICpuZ0Zvcj1cImxldCB2IG9mIHZpZXdzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwidlwiIGNka0RyYWc+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIGZsZXhcIj5cclxuICAgICAgICAgIHt7di5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KHYsICdWaWV3Jywgdmlld2Zvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0VkaXQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidmlld3MucmVtb3ZlQXQoaW5kZXgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlbW92ZSd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1NjaGVkdWxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8Yml6ZG9jLXRpbWVzcGFuLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInNjaGVkdWxlXCI+PC9iaXpkb2MtdGltZXNwYW4taW5wdXQ+XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+dGltZXI8L21hdC1pY29uPlxyXG4gICAgICA8bWF0LWhpbnQ+PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW5kZXhmb3JtIGxldC1mb3JtPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdUaXRsZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICZuYnNwO1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cclxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCduYW1lJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOignTmFtZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gcGF0dGVybi0tPlxyXG48bmctdGVtcGxhdGUgI3BhdHRlcm5mb3JtIGxldC1mb3JtPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdUaXRsZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxiaXpkb2MtZGVzaWduZXItY3ViZS1maWx0ZXIgW2N1YmVdPVwibW9kZWxcIiBbZm9ybV09XCJmb3JtLmdldCgnYXhlcycpXCI+PC9iaXpkb2MtZGVzaWduZXItY3ViZS1maWx0ZXI+XHJcbiAgICA8Yml6ZG9jLWRlc2lnbmVyLXByaXZpbGVnZXMgW2Zvcm1dPVwiZm9ybVwiPjwvYml6ZG9jLWRlc2lnbmVyLXByaXZpbGVnZXM+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIHZpZXcgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdmlld2Zvcm0gbGV0LWZvcm0+XHJcbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgPG1hdC1sYWJlbD57eydUaXRsZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCd0aXRsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTooJ1RpdGxlJ3x0cmFuc2xhdGUpXCI+PC9tYXQtZXJyb3I+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1R5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkNoYXJ0XCI+e3snQ2hhcnQnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUGl2b3RcIj57eydQaXZvdCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJHcmlkXCI+e3snR3JpZCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTcHJlYWRzaGVldFwiPnt7J1NwcmVhZHNoZWV0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydYQXhpcyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwieEF4aXNcIiByZXF1aXJlZCBtdWx0aXBsZSBbc29ydENvbXBhcmF0b3JdPVwic29ydENvbXBhcmF0b3JcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYSBvZiBheGVzLmNvbnRyb2xzXCIgW3ZhbHVlXT1cImEuZ2V0KCduYW1lJykudmFsdWVcIj57e2EuZ2V0KCd0aXRsZScpLnZhbHVlIHx8IGEuZ2V0KCduYW1lJykudmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5nZXQoJ3hBeGlzJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOignWEF4aXMnfHRyYW5zbGF0ZSlcIj48L21hdC1lcnJvcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU2VyaWVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZXJpZXNcIiBtdWx0aXBsZSBbc29ydENvbXBhcmF0b3JdPVwic29ydENvbXBhcmF0b3JcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhIG9mIGF4ZXMuY29udHJvbHNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJhLmdldCgnbmFtZScpLnZhbHVlXCIgKm5nSWY9XCJmb3JtLmdldCgneEF4aXMnKS52YWx1ZT8uaW5kZXhPZihhLmdldCgnbmFtZScpLnZhbHVlKTwwXCI+e3thLmdldCgndGl0bGUnKS52YWx1ZXx8IGEuZ2V0KCduYW1lJykudmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydJbmRpY2VzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJpbmRpY2VzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaSBvZiBpbmRpY2VzLmNvbnRyb2xzXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaS5nZXQoJ25hbWUnKS52YWx1ZVwiPnt7aS5nZXQoJ3RpdGxlJykudmFsdWV8fCBpLmdldCgnbmFtZScpLnZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snQ2hhcnRUeXBlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjaGFydFR5cGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmb3JtLmdldCgndHlwZScpLnZhbHVlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ2hhcnQnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY2N1bXVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlBpZVwiPnt7J1BpZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEb3VnaG51dFwiPnt7J0RvdWdobnV0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkhhbGZEb3VnaG51dFwiPnt7J0hhbGZEb3VnaG51dCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJGdW5uZWxcIj57eydGdW5uZWwnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUHlyYW1pZFwiPnt7J1B5cmFtaWQnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJDb2x1bW5cIj57eydDb2x1bW4nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQ29sdW1uXCI+e3snU3RhY2tpbmdDb2x1bW4nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQ29sdW1uMTAwXCI+e3snU3RhY2tpbmdDb2x1bW4xMDAnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJhclwiPnt7J0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQnViYmxlXCI+e3snQnViYmxlJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhclwiPnt7J1N0YWNraW5nQmFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhcjEwMFwiPnt7J1N0YWNraW5nQmFyMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJMaW5lXCI+e3snTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdMaW5lXCI+e3snU3RhY2tpbmdMaW5lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0xpbmUxMDBcIj57eydTdGFja2luZ0xpbmUxMDAnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNwbGluZVwiPnt7J1NwbGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3BsaW5lQXJlYVwiPnt7J1NwbGluZUFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFyZWFcIj57eydBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0FyZWFcIj57eydTdGFja2luZ0FyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQXJlYTEwMFwiPnt7J1N0YWNraW5nQXJlYTEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU2NhdHRlclwiPnt7J1NjYXR0ZXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlBvbGFyXCI+e3snUG9sYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJhZGFyXCI+e3snUmFkYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBMaW5lXCI+e3snU3RlcExpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBBcmVhXCI+e3snU3RlcEFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nU3RlcEFyZWFcIj57eydTdGFja2luZ1N0ZXBBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1Bpdm90J1wiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbj57eydOb25lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJDb2x1bW5cIj57eydDb2x1bW4nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJhclwiPnt7J0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQnViYmxlXCI+e3snQnViYmxlJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhclwiPnt7J1N0YWNraW5nQmFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhcjEwMFwiPnt7J1N0YWNraW5nQmFyMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJMaW5lXCI+e3snTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3BsaW5lXCI+e3snU3BsaW5lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTcGxpbmVBcmVhXCI+e3snU3BsaW5lQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQXJlYVwiPnt7J0FyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQXJlYVwiPnt7J1N0YWNraW5nQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdBcmVhMTAwXCI+e3snU3RhY2tpbmdBcmVhMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtblwiPnt7J1N0YWNraW5nQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtbjEwMFwiPnt7J1N0YWNraW5nQ29sdW1uMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTY2F0dGVyXCI+e3snU2NhdHRlcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUG9sYXJcIj57eydQb2xhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUmFkYXJcIj57eydSYWRhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RlcExpbmVcIj57eydTdGVwTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RlcEFyZWFcIj57eydTdGVwQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdTdGVwQXJlYVwiPnt7J1N0YWNraW5nU3RlcEFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nTGluZVwiPnt7J1N0YWNraW5nTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdMaW5lMTAwXCI+e3snU3RhY2tpbmdMaW5lMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J0luZGljZXNDaGFydFR5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImluZGljZXNDaGFydFR5cGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmb3JtLmdldCgndHlwZScpLnZhbHVlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ2hhcnQnXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQ29sdW1uXCI+e3snQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtblwiPnt7J1N0YWNraW5nQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtbjEwMFwiPnt7J1N0YWNraW5nQ29sdW1uMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCYXJcIj57eydCYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJ1YmJsZVwiPnt7J0J1YmJsZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXJcIj57eydTdGFja2luZ0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXIxMDBcIj57eydTdGFja2luZ0JhcjEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTGluZVwiPnt7J0xpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nTGluZVwiPnt7J1N0YWNraW5nTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdMaW5lMTAwXCI+e3snU3RhY2tpbmdMaW5lMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTcGxpbmVcIj57eydTcGxpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNwbGluZUFyZWFcIj57eydTcGxpbmVBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJBcmVhXCI+e3snQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdBcmVhXCI+e3snU3RhY2tpbmdBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0FyZWExMDBcIj57eydTdGFja2luZ0FyZWExMDAnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNjYXR0ZXJcIj57eydTY2F0dGVyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJQb2xhclwiPnt7J1BvbGFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJSYWRhclwiPnt7J1JhZGFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGVwTGluZVwiPnt7J1N0ZXBMaW5lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGVwQXJlYVwiPnt7J1N0ZXBBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ1N0ZXBBcmVhXCI+e3snU3RhY2tpbmdTdGVwQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidQaXZvdCdcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24+e3snTm9uZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQ29sdW1uXCI+e3snQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCYXJcIj57eydCYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJ1YmJsZVwiPnt7J0J1YmJsZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXJcIj57eydTdGFja2luZ0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXIxMDBcIj57eydTdGFja2luZ0JhcjEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTGluZVwiPnt7J0xpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNwbGluZVwiPnt7J1NwbGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3BsaW5lQXJlYVwiPnt7J1NwbGluZUFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFyZWFcIj57eydBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0FyZWFcIj57eydTdGFja2luZ0FyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQXJlYTEwMFwiPnt7J1N0YWNraW5nQXJlYTEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdDb2x1bW5cIj57eydTdGFja2luZ0NvbHVtbid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdDb2x1bW4xMDBcIj57eydTdGFja2luZ0NvbHVtbjEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU2NhdHRlclwiPnt7J1NjYXR0ZXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlBvbGFyXCI+e3snUG9sYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJhZGFyXCI+e3snUmFkYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBMaW5lXCI+e3snU3RlcExpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBBcmVhXCI+e3snU3RlcEFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nU3RlcEFyZWFcIj57eydTdGFja2luZ1N0ZXBBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0xpbmVcIj57eydTdGFja2luZ0xpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nTGluZTEwMFwiPnt7J1N0YWNraW5nTGluZTEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxiaXpkb2MtZGVzaWduZXItY3ViZS1maWx0ZXIgKm5nSWY9XCJjdWJlXCIgW2N1YmVdPVwiY3ViZVwiIFtmb3JtXT1cImZvcm0uZ2V0KCdmaWx0ZXJzJylcIj48L2JpemRvYy1kZXNpZ25lci1jdWJlLWZpbHRlcj5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gQXhpcyAtLT5cclxuPG5nLXRlbXBsYXRlICNheGlzZm9ybSBsZXQtZm9ybT5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydUaXRsZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdUaXRsZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCduYW1lJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOignTmFtZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snRGF0YVR5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRhdGFUeXBlXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdCBvZiB0eXBlc1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJ0Lm5hbWVcIiBbdmFsdWVdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidC5mYW1pbHlcIj57e3QuZmFtaWx5fX0gLSZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgIHt7dC50aXRsZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdEYXRhVHlwZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxkaXY+PG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJjb21iaW5hdGlvblwiPnt7J0NvbWJpbmF0aW9uJ319PC9tYXQtY2hlY2tib3g+PC9kaXY+XHJcbiAgICA8ZGl2PjxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwic2Vuc2l0aXZlXCI+e3snU2Vuc2l0aXZlJ319PC9tYXQtY2hlY2tib3g+PC9kaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU2VsZWN0aW9uTW9kZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0aW9uTW9kZVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTm9uZVwiPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uPnt7J1NpbmdsZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJNdWx0aXBsZVwiPnt7J011bHRpcGxlJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNlYXJjaFwiPnt7J1NlYXJjaCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJQYXR0ZXJuXCI+e3snUGF0dGVybid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snRGVzY2VuZGVudE9mJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjZW5kZW50T2ZcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhIG9mIGF4ZXMuY29udHJvbHNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJhLmdldCgnbmFtZScpLnZhbHVlXCIgKm5nSWY9XCJhIT1mb3JtXCI+e3thLmdldCgndGl0bGUnKS52YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPGRpdj48bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT1cImluZGV4YWJsZVwiPnt7J0luZGV4YWJsZSd9fTwvbWF0LWNoZWNrYm94PjwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZWxlbWVudHMvY3ViZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZWxlbWVudHMvY3ViZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFnQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdsRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBNkQsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQzdJLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU0xQixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsNEJBQTRCO0lBMEJuRSxZQUFZLEVBQWUsRUFDakIsUUFBdUIsRUFDdkIsR0FBa0IsRUFDMUIsT0FBd0IsRUFDSCxHQUFnQjtRQUNyQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUpoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUEzQm5CLFVBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxF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RSxLQUFLLENBQUM7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFFBQVEsQ0FBQyxJQUFZLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7aUhBdk1uRSxtQkFBbUIsaUlBOEJwQixXQUFXO3FHQTlCVixtQkFBbUIsK0tDZGhDLHF4d0JBZ2FBOzRGRGxaYSxtQkFBbUI7a0JBSi9CLFNBQVM7OzswQkFrQ0wsTUFBTTsyQkFBQyxXQUFXOzRDQVBDLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQmFja2dyb3VuZEpvYkluZm8sIEN1YmVJbmZvLCBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGVzaWduZXIuYmFzZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgcHJvZ3JhbU5hbWUsIEVsZW1lbnRJbmZvLCBDdWJlQXhpc01vZGVsLCBDdWJlVmlld01vZGVsLCBDdWJlSW5kZXhNb2RlbCwgYXJyYXlPZiwgUGF0dGVybk1vZGVsIH0gZnJvbSBcIi4uL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICdjdWJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnY3ViZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdWJlRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgdmlld3MgPSB0aGlzLl9mYi5hcnJheShbXSk7XHJcbiAgcmVhZG9ubHkgYXhlcyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBpbmRpY2VzID0gdGhpcy5fZmIuYXJyYXkoW10pO1xyXG4gIHJlYWRvbmx5IHBhdHRlcm5zID0gdGhpcy5fZmIuYXJyYXkoW10pO1xyXG4gIHNvcnRDb21wYXJhdG9yID0gKGEsIGIpID0+IDA7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHNjaGVkdWxlOiBudWxsLFxyXG4gICAgcGF0dGVybnM6IHRoaXMucGF0dGVybnMsXHJcbiAgICB2aWV3czogdGhpcy52aWV3cyxcclxuICAgIGF4ZXM6IHRoaXMuYXhlcyxcclxuICAgIGluZGljZXM6IHRoaXMuaW5kaWNlcyxcclxuICAgIHNjb3BlOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgeUF4aXM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgdHlwZTogbnVsbCxcclxuICAgICAgdGl0bGU6IG51bGwsXHJcbiAgICAgIHJlc291cmNlOiBudWxsLFxyXG4gICAgfSksXHJcbiAgICBhbm9tYWx5OiB0aGlzLl9mYi5jb250cm9sKCdQb3NpdGlvbnMnKSxcclxuICB9LCB7IC8qdmFsaWRhdG9yczogdGhpcy5fY3ViZUF4ZXNWYWxpZGF0b3IqLyB9KTtcclxuICB1c2FnZTogQ3ViZUluZm87XHJcbiAgam9iSW5mbzogQmFja2dyb3VuZEpvYkluZm87XHJcbiAgc3luY2luZyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2VsZW1lbnQnKSBlbGVtZW50OiBFbGVtZW50UmVmPGFueT47XHJcbiAgcmVhZG9ubHkgdHlwZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgYWNjdW11bGF0aXZlOiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PixcclxuICAgIEBJbmplY3QoRGVzaWduZXJSZWYpIHJlZjogRGVzaWduZXJSZWYpIHtcclxuICAgIHN1cGVyKGZiLCBlbGVtZW50LCByZWYpO1xyXG4gICAgdGhpcy50eXBlcyA9IHJlZi5kZXNpZ25lci50eXBlcy5maWx0ZXIodCA9PiAhdC5kaXNhYmxlZCkuXHJcbiAgICAgIHNvcnQoKGEsIGIpID0+IGEudGl0bGUgPCBiLnRpdGxlID8gLTEgOiAxKTtcclxuICB9XHJcbiAgc3luYygpIHtcclxuICAgIHRoaXMuc3luY2luZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnN5bmNocmluaXplKHRoaXMubW9kZWwubmFtZSkuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICB0aGlzLmpvYkluZm8gPSBlO1xyXG4gICAgICB0aGlzLl9zY2hlZHVsZShlLm5leHRFeGVjdXRpb24pO1xyXG4gICAgICB0aGlzLnN5bmNpbmcgPSBmYWxzZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgdGhpcy5zeW5jaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlICd3aWRnZXQnOlxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY3ViZSh0aGlzLm1vZGVsLm5hbWUpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgIHRoaXMuam9iSW5mbyA9IHIuam9iSW5mbztcclxuICAgICAgICAgIHIuam9iSW5mbyAmJiByLmpvYkluZm8ubmV4dEV4ZWN1dGlvbiAmJiB0aGlzLl9zY2hlZHVsZShyLmpvYkluZm8ubmV4dEV4ZWN1dGlvbik7XHJcbiAgICAgICAgICB0aGlzLnVzYWdlID0gcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgICAgdGhpcy5fYnVpbGRGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zY2hlZHVsZShkYXRlOiBEYXRlKSB7XHJcbiAgICBpZiAoIWRhdGUpIHJldHVybjtcclxuICAgIGNvbnN0IG1zID0gZGF5anMoZGF0ZSkuZGlmZigpLnZhbHVlT2YoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgIH0sIG1zICsgNjAwMDAwKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5tb2RlbC5heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgIHRoaXMuYXhlcy5wdXNoKHRoaXMubmV3QXhpcyhhKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1vZGVsLmluZGljZXM/LmZvckVhY2goaSA9PlxyXG4gICAgICB0aGlzLmluZGljZXMucHVzaCh0aGlzLm5ld0luZGV4KGkpLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLm1vZGVsLnBhdHRlcm5zPy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5wYXR0ZXJucy5wdXNoKHRoaXMubmV3UGF0dGVybihwKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5tb2RlbC52aWV3cz8uZm9yRWFjaCh2ID0+IHtcclxuICAgICAgdGhpcy52aWV3cy5wdXNoKHRoaXMubmV3Vmlldyh2KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXBsZXRlKCkge1xyXG4gICAgdGhpcy5fYnVpbGRGb3JtKCk7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwucHJpdmlsZWdlcykgdGhpcy5tb2RlbC5wcml2aWxlZ2VzID0ge307XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxuICBuYW1lT2YoYXhpczogc3RyaW5nIHwgc3RyaW5nW10pIHsgcmV0dXJuIHRoaXMubW9kZWwuYXhlcy5maWx0ZXIoYSA9PiBpc0FycmF5KGF4aXMpID8gYXhpcy5pbmRleE9mKGEubmFtZSkgPiAtMSA6IGEubmFtZSA9PT0gYXhpcykuam9pbignLCAnKSB9XHJcbiAgcHJpdmF0ZSBuZXdWaWV3KG1vZGVsPzogQ3ViZVZpZXdNb2RlbCk6IGFueSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8ubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIHRpdGxlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8udGl0bGUsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB4QXhpcyA9IHRoaXMuX2ZiLmNvbnRyb2wobW9kZWw/LnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgY2hhcnRUeXBlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8uY2hhcnRUeXBlIHx8IG51bGwpLFxyXG4gICAgICBpbmRpY2VzQ2hhcnRUeXBlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8uaW5kaWNlc0NoYXJ0VHlwZSB8fCBudWxsKSxcclxuICAgICAgc2VyaWVzID0gdGhpcy5fZmIuY29udHJvbChhcnJheU9mKG1vZGVsPy5zZXJpZXMpKSxcclxuICAgICAgaW5kaWNlcyA9IHRoaXMuX2ZiLmNvbnRyb2woYXJyYXlPZihtb2RlbD8uaW5kaWNlcykpLFxyXG4gICAgICB0eXBlID0gdGhpcy5fZmIuY29udHJvbChtb2RlbD8udHlwZSB8fCAnQ2hhcnQnKTtcclxuICAgIGlmICghbW9kZWwgfHwgdGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLlxyXG4gICAgICBzdWJzY3JpYmUodCA9PiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKSk7XHJcbiAgICB4QXhpcy52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgobW9kZWw/LnhBeGlzKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodiAmJiB2Lmxlbmd0aCkge1xyXG4gICAgICAgIHNlcmllcy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIGlmIChzZXJpZXMudmFsdWUpXHJcbiAgICAgICAgICBzZXJpZXMuc2V0VmFsdWUoKHRoaXMuYXhlcy52YWx1ZSBhcyBDdWJlQXhpc01vZGVsW10pLlxyXG4gICAgICAgICAgICBmaWx0ZXIoYSA9PiB2LmluZGV4T2YoYS5uYW1lKSA8IDAgJiYgc2VyaWVzLnZhbHVlLmluZGV4T2YoYS5uYW1lKSA+IC0xKS5cclxuICAgICAgICAgICAgbWFwKGEgPT4gYS5uYW1lKVxyXG4gICAgICAgICAgICAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgc2VyaWVzLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgICBzZXJpZXMudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG1vZGVsPy5zZXJpZXMpKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIHRoaXMuYWNjdW11bGF0aXZlID0gIXYgfHwgdi5sZW5ndGggPT09IDA7XHJcbiAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGl2ZSB8fCAhdGhpcy5pbmRpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgIGluZGljZXMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgaW5kaWNlc0NoYXJ0VHlwZS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpbmRpY2VzLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgaW5kaWNlc0NoYXJ0VHlwZS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGluZGljZXMudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG1vZGVsPy5pbmRpY2VzKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodiAmJiB2Lmxlbmd0aClcclxuICAgICAgICBpbmRpY2VzQ2hhcnRUeXBlLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpbmRpY2VzQ2hhcnRUeXBlLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgaWNvbjogbW9kZWw/Lmljb24gfHwgJ2luc2lnaHRzJyxcclxuICAgICAgeEF4aXMsXHJcbiAgICAgIHNlcmllcyxcclxuICAgICAgaW5kaWNlcyxcclxuICAgICAgdHlwZSxcclxuICAgICAgY2hhcnRUeXBlLFxyXG4gICAgICBpbmRpY2VzQ2hhcnRUeXBlLFxyXG4gICAgICBmaWx0ZXJzOiB0aGlzLl9mYi5ncm91cCh7fSksXHJcbiAgICAgIHByaXZpbGVnZXM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgICBydWxlOiBudWxsLFxyXG4gICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgdHlwZS52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgobW9kZWw/LnR5cGUpKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgIGNhc2UgJ1NwcmVhZHNoZWV0JzpcclxuICAgICAgICBjYXNlICdHcmlkJzpcclxuICAgICAgICAgIHNlcmllcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgY2hhcnRUeXBlLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHNlcmllcy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgIGNoYXJ0VHlwZS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIG5ld0F4aXMobW9kZWw/OiBDdWJlQXhpc01vZGVsKTogYW55IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy5uYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy50aXRsZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICBpZiAoIW1vZGVsIHx8IHRoaXMubW9kZWwuZHJhZnQpIHRpdGxlLnZhbHVlQ2hhbmdlcy5cclxuICAgICAgc3Vic2NyaWJlKHQgPT4gbmFtZS5zZXRWYWx1ZShwcm9ncmFtTmFtZSh0KSkpO1xyXG4gICAgZWxzZSBuYW1lLmRpc2FibGUoKTtcclxuICAgIHJldHVybiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHRpdGxlLFxyXG4gICAgICBkZXNjZW5kZW50T2Y6IG1vZGVsPy5kZXNjZW5kZW50T2YsXHJcbiAgICAgIHNlbGVjdGlvbk1vZGU6IG1vZGVsPy5zZWxlY3Rpb25Nb2RlLFxyXG4gICAgICBjb21iaW5hdGlvbjogbW9kZWw/LmNvbWJpbmF0aW9uLFxyXG4gICAgICBzZW5zaXRpdmU6IG1vZGVsPy5zZW5zaXRpdmUsXHJcbiAgICAgIGluZGV4YWJsZTogbW9kZWw/LmluZGV4YWJsZSAhPT0gZmFsc2UsXHJcbiAgICAgIGRhdGFUeXBlOiB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy5kYXRhVHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZXdJbmRleChtb2RlbD86IEN1YmVJbmRleE1vZGVsKTogYW55IHtcclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy5uYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy50aXRsZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICBpZiAoIW1vZGVsIHx8IHRoaXMubW9kZWwuZHJhZnQpIHRpdGxlLnZhbHVlQ2hhbmdlcy5cclxuICAgICAgc3Vic2NyaWJlKHQgPT4gbmFtZS5zZXRWYWx1ZShwcm9ncmFtTmFtZSh0KSkpO1xyXG4gICAgZWxzZSBuYW1lLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgbmFtZSxcclxuICAgICAgdGl0bGUsXHJcbiAgICAgIGFjY3VtdWxhdGU6IG1vZGVsPy5hY2N1bXVsYXRlLFxyXG4gICAgICBoaWRkZW46IG1vZGVsPy5oaWRkZW4sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmV3UGF0dGVybihtb2RlbD86IFBhdHRlcm5Nb2RlbCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBheGVzOiB0aGlzLl9mYi5ncm91cChtb2RlbD8uYXhlcyB8fCB7fSksXHJcbiAgICAgIHRpdGxlOiB0aGlzLl9mYi5jb250cm9sKG1vZGVsPy50aXRsZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIGhpZGRlbjogbW9kZWw/LmhpZGRlbixcclxuICAgICAgcnVsZTogbW9kZWw/LnJ1bGUsXHJcbiAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihtb2RlbD8ucm9sZXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGRhdGF0eXBlKG5hbWU6IHN0cmluZykgeyByZXR1cm4gdGhpcy50eXBlcy5maW5kKHQgPT4gdC5uYW1lID09IG5hbWUpPy50aXRsZTsgfVxyXG59XHJcbiIsIjxiaXpkb2MtZGVzaWduZXItZWxlbWVudCBbZm9ybV09XCJmb3JtXCIgW3ByaXZpbGVnZXNdPVwidHJ1ZVwiIChjb250aW51ZSk9XCJjb21wbGV0ZSgpXCI+XHJcbiAgPCEtLSB3aWRnZXQgLS0+XHJcbiAgPG5nLXRlbXBsYXRlIGJpemRvY0NvbnRlbnQ+XHJcbiAgICA8ZGwgKm5nSWY9XCJqb2JJbmZvXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJqb2JJbmZvLmxhc3RFeGVjdXRpb25cIj5cclxuICAgICAgICA8ZHQ+e3snTGFzdEV4ZWN1dGlvbid8dHJhbnNsYXRlfX08L2R0PlxyXG4gICAgICAgIDxkZD57e2pvYkluZm8ubGFzdEV4ZWN1dGlvbnxhbVRpbWVBZ299fTwvZGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiam9iSW5mby5uZXh0RXhlY3V0aW9uXCI+XHJcbiAgICAgICAgPGR0Pnt7J05leHRFeGVjdXRpb24nfHRyYW5zbGF0ZX19PC9kdD5cclxuICAgICAgICA8ZGQ+e3tqb2JJbmZvLm5leHRFeGVjdXRpb258YW1UaW1lQWdvfX08L2RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImpvYkluZm8ubGFzdEpvYlN0YXRlXCI+XHJcbiAgICAgICAgPGR0Pnt7J0xhc3RKb2JTdGF0ZSd8dHJhbnNsYXRlfX08L2R0PlxyXG4gICAgICAgIDxkZD5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImpvYkluZm8uZXJyb3JcIiBbYml6ZG9jVG9vbHRpcF09XCJqb2JJbmZvLmVycm9yXCI+cmVwb3J0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiam9iLXN0YXRlXCI+e3tqb2JJbmZvLmxhc3RKb2JTdGF0ZXwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgPC9kZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2RsPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInN5bmMoKVwiIFtkaXNhYmxlZF09XCJtb2RlbC5kcmFmdCB8fCBzeW5jaW5nXCI+XHJcbiAgICAgICAgPHNwYW4+IHt7J1N5bmNocm9uaXplJ3x0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgICZuYnNwO1xyXG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJzeW5jaW5nXCIgZGlhbWV0ZXI9XCIyMlwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIm1vZGVsLmF4ZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J0F4ZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJtYXQtdGFibGVcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgYSBvZiBtb2RlbC5heGVzXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCI+e3thLnRpdGxlfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPnt7ZGF0YXR5cGUoYS5kYXRhVHlwZSl9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tPGRpdiAqbmdJZj1cIm1vZGVsLmluZGljZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J0luZGljZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJtYXQtdGFibGVcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgYSBvZiBtb2RlbC5pbmRpY2VzXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCI+e3thLnRpdGxlfX08L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj4tLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPCEtLSBlZGl0IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSBiaXpkb2NFZGl0Q29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3OyBlbHNlIG1haW5cIj5cclxuICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3tjb250ZXh0LnRpdGxlfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgPGRpdiAoZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUpPVwiY2xvc2VWaWV3KCRldmVudClcIiAjZWxlbWVudCBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWV3OyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFjdGlvbnNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlVmlldygpXCIgdHlwZT1cImJ1dHRvblwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+a2V5Ym9hcmRfcmV0dXJuPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2JpemRvYy1kZXNpZ25lci1lbGVtZW50PlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbWFpbj5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPG1hdC1sYWJlbD57eydTZWN1cml0eUxldmVsJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJzY29wZVwiPlxyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cIndhcm5cIj57eydHbG9iYWwnfHRyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8YnIgLz5cclxuICAgICAgPHA+e3snU2VjdXJpdHlHbG9iYWxIZWxwJ3x0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJQb3NpdGlvbnNcIj57eydQb3NpdGlvbnMnfHRyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8cD57eydTZWN1cml0eVBvc2l0aW9uc0hlbHAnfHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cIlBhdHRlcm5zXCI+e3snUGF0dGVybnMnfHRyYW5zbGF0ZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8cD57eydTZWN1cml0eVBhdHRlcm5zSGVscCd8dHJhbnNsYXRlfX08L3A+XHJcbiAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cInlBeGlzXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydUeXBlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQ3VycmVuY3lcIj57eydDdXJyZW5jeSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIk51bWJlclwiPnt7J051bWVyaWMnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJDb3VudFwiPnt7J0FjY3VtdWxhdGl2ZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tQXhlcy0tPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlIHJvd1wiPlxyXG4gICAgICB7eydBeGVzJ3x0cmFuc2xhdGV9fVxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGQoYXhlcywgbmV3QXhpcygpLCAnQXhpcycsIGF4aXNmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImF4ZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIGF4ZXMpXCI+XHJcbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgYSBvZiBheGVzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwiYVwiIGNka0RyYWc+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIGZsZXhcIj5cclxuICAgICAgICAgIHt7YS5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KGEsICdBeGlzJywgYXhpc2Zvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0VkaXQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYXhlcy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8IS0tSW5kaWNlcy0tPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlIHJvd1wiPlxyXG4gICAgICB7eydJbmRpY2VzJ3x0cmFuc2xhdGV9fVxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGQoaW5kaWNlcywgbmV3SW5kZXgoKSwgJ0luZGV4JywgaW5kZXhmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImluZGljZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIGluZGljZXMpXCI+XHJcbiAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbmdGb3I9XCJsZXQgaSBvZiBpbmRpY2VzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwiaVwiIGNka0RyYWc+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIGZsZXhcIj5cclxuICAgICAgICAgIHt7aS5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KGksICdJbmRleCcsIGluZGV4Zm9ybSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRWRpdCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJpbmRpY2VzLnJlbW92ZUF0KGluZGV4KVwiIFtiaXpkb2NUb29sdGlwXT1cIidSZW1vdmUnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImluZGljZXMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snQW5vbWFseU5vdGlmaWNhdGlvbid8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiYW5vbWFseVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTm9uZVwiPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUG9zaXRpb25zXCI+e3snUG9zaXRpb25zJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJlY2lwaWVudHNcIj57eydFdmVyeW9uZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8IS0tUGF0dGVybnMtLT5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZSByb3dcIj5cclxuICAgICAge3snUGF0dGVybnMnfHRyYW5zbGF0ZX19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZChwYXR0ZXJucywgbmV3UGF0dGVybigpLCAnUGF0dGVybicsIHBhdHRlcm5mb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImluZGljZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIHBhdHRlcm5zKVwiPlxyXG4gICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm5nRm9yPVwibGV0IHAgb2YgcGF0dGVybnMuY29udHJvbHM7IGluZGV4IGFzIGluZGV4XCIgW2Zvcm1Hcm91cF09XCJwXCIgY2RrRHJhZz5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgZmxleFwiPlxyXG4gICAgICAgICAge3twLmdldCgndGl0bGUnKS52YWx1ZX19XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImVkaXQocCwgJ1BhdHRlcm4nLCBwYXR0ZXJuZm9ybSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRWRpdCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJwYXR0ZXJucy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICA8IS0tVmlld3MtLT5cclxuICAgIDxoMiBjbGFzcz1cInJvdyBtYXQtdGl0bGVcIj5cclxuICAgICAge3snVmlld3MnfHRyYW5zbGF0ZX19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZCh2aWV3cywgbmV3VmlldygpLCAnVmlldycsIHZpZXdmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDI+XHJcbiAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cInZpZXdzXCIgY2xhc3M9XCJtYXQtdGFibGVcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCB2aWV3cylcIj5cclxuICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICpuZ0Zvcj1cImxldCB2IG9mIHZpZXdzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwidlwiIGNka0RyYWc+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIGZsZXhcIj5cclxuICAgICAgICAgIHt7di5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KHYsICdWaWV3Jywgdmlld2Zvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0VkaXQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidmlld3MucmVtb3ZlQXQoaW5kZXgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlbW92ZSd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1NjaGVkdWxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8Yml6ZG9jLXRpbWVzcGFuLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInNjaGVkdWxlXCI+PC9iaXpkb2MtdGltZXNwYW4taW5wdXQ+XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+dGltZXI8L21hdC1pY29uPlxyXG4gICAgICA8bWF0LWhpbnQ+PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaW5kZXhmb3JtIGxldC1mb3JtPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdUaXRsZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICZuYnNwO1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cclxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCduYW1lJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOignTmFtZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gcGF0dGVybi0tPlxyXG48bmctdGVtcGxhdGUgI3BhdHRlcm5mb3JtIGxldC1mb3JtPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdUaXRsZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxiaXpkb2MtZGVzaWduZXItY3ViZS1maWx0ZXIgW2N1YmVdPVwibW9kZWxcIiBbZm9ybV09XCJmb3JtLmdldCgnYXhlcycpXCI+PC9iaXpkb2MtZGVzaWduZXItY3ViZS1maWx0ZXI+XHJcbiAgICA8Yml6ZG9jLWRlc2lnbmVyLXByaXZpbGVnZXMgW2Zvcm1dPVwiZm9ybVwiPjwvYml6ZG9jLWRlc2lnbmVyLXByaXZpbGVnZXM+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIHZpZXcgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdmlld2Zvcm0gbGV0LWZvcm0+XHJcbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgPG1hdC1sYWJlbD57eydUaXRsZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCd0aXRsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTooJ1RpdGxlJ3x0cmFuc2xhdGUpXCI+PC9tYXQtZXJyb3I+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1R5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkNoYXJ0XCI+e3snQ2hhcnQnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUGl2b3RcIj57eydQaXZvdCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJHcmlkXCI+e3snR3JpZCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTcHJlYWRzaGVldFwiPnt7J1NwcmVhZHNoZWV0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydYQXhpcyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwieEF4aXNcIiByZXF1aXJlZCBtdWx0aXBsZSBbc29ydENvbXBhcmF0b3JdPVwic29ydENvbXBhcmF0b3JcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYSBvZiBheGVzLmNvbnRyb2xzXCIgW3ZhbHVlXT1cImEuZ2V0KCduYW1lJykudmFsdWVcIj57e2EuZ2V0KCd0aXRsZScpLnZhbHVlIHx8IGEuZ2V0KCduYW1lJykudmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5nZXQoJ3hBeGlzJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOignWEF4aXMnfHRyYW5zbGF0ZSlcIj48L21hdC1lcnJvcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU2VyaWVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZXJpZXNcIiBtdWx0aXBsZSBbc29ydENvbXBhcmF0b3JdPVwic29ydENvbXBhcmF0b3JcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhIG9mIGF4ZXMuY29udHJvbHNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJhLmdldCgnbmFtZScpLnZhbHVlXCIgKm5nSWY9XCJmb3JtLmdldCgneEF4aXMnKS52YWx1ZT8uaW5kZXhPZihhLmdldCgnbmFtZScpLnZhbHVlKTwwXCI+e3thLmdldCgndGl0bGUnKS52YWx1ZXx8IGEuZ2V0KCduYW1lJykudmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydJbmRpY2VzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJpbmRpY2VzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaSBvZiBpbmRpY2VzLmNvbnRyb2xzXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaS5nZXQoJ25hbWUnKS52YWx1ZVwiPnt7aS5nZXQoJ3RpdGxlJykudmFsdWV8fCBpLmdldCgnbmFtZScpLnZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snQ2hhcnRUeXBlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjaGFydFR5cGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmb3JtLmdldCgndHlwZScpLnZhbHVlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ2hhcnQnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY2N1bXVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlBpZVwiPnt7J1BpZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEb3VnaG51dFwiPnt7J0RvdWdobnV0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkhhbGZEb3VnaG51dFwiPnt7J0hhbGZEb3VnaG51dCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJGdW5uZWxcIj57eydGdW5uZWwnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUHlyYW1pZFwiPnt7J1B5cmFtaWQnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJDb2x1bW5cIj57eydDb2x1bW4nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQ29sdW1uXCI+e3snU3RhY2tpbmdDb2x1bW4nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQ29sdW1uMTAwXCI+e3snU3RhY2tpbmdDb2x1bW4xMDAnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJhclwiPnt7J0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQnViYmxlXCI+e3snQnViYmxlJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhclwiPnt7J1N0YWNraW5nQmFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhcjEwMFwiPnt7J1N0YWNraW5nQmFyMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJMaW5lXCI+e3snTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdMaW5lXCI+e3snU3RhY2tpbmdMaW5lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0xpbmUxMDBcIj57eydTdGFja2luZ0xpbmUxMDAnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNwbGluZVwiPnt7J1NwbGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3BsaW5lQXJlYVwiPnt7J1NwbGluZUFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFyZWFcIj57eydBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0FyZWFcIj57eydTdGFja2luZ0FyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQXJlYTEwMFwiPnt7J1N0YWNraW5nQXJlYTEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU2NhdHRlclwiPnt7J1NjYXR0ZXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlBvbGFyXCI+e3snUG9sYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJhZGFyXCI+e3snUmFkYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBMaW5lXCI+e3snU3RlcExpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBBcmVhXCI+e3snU3RlcEFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nU3RlcEFyZWFcIj57eydTdGFja2luZ1N0ZXBBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1Bpdm90J1wiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbj57eydOb25lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJDb2x1bW5cIj57eydDb2x1bW4nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJhclwiPnt7J0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQnViYmxlXCI+e3snQnViYmxlJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhclwiPnt7J1N0YWNraW5nQmFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0JhcjEwMFwiPnt7J1N0YWNraW5nQmFyMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJMaW5lXCI+e3snTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3BsaW5lXCI+e3snU3BsaW5lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTcGxpbmVBcmVhXCI+e3snU3BsaW5lQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQXJlYVwiPnt7J0FyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQXJlYVwiPnt7J1N0YWNraW5nQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdBcmVhMTAwXCI+e3snU3RhY2tpbmdBcmVhMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtblwiPnt7J1N0YWNraW5nQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtbjEwMFwiPnt7J1N0YWNraW5nQ29sdW1uMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTY2F0dGVyXCI+e3snU2NhdHRlcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUG9sYXJcIj57eydQb2xhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUmFkYXJcIj57eydSYWRhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RlcExpbmVcIj57eydTdGVwTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RlcEFyZWFcIj57eydTdGVwQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdTdGVwQXJlYVwiPnt7J1N0YWNraW5nU3RlcEFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nTGluZVwiPnt7J1N0YWNraW5nTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdMaW5lMTAwXCI+e3snU3RhY2tpbmdMaW5lMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J0luZGljZXNDaGFydFR5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImluZGljZXNDaGFydFR5cGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmb3JtLmdldCgndHlwZScpLnZhbHVlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ2hhcnQnXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQ29sdW1uXCI+e3snQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtblwiPnt7J1N0YWNraW5nQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0NvbHVtbjEwMFwiPnt7J1N0YWNraW5nQ29sdW1uMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCYXJcIj57eydCYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJ1YmJsZVwiPnt7J0J1YmJsZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXJcIj57eydTdGFja2luZ0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXIxMDBcIj57eydTdGFja2luZ0JhcjEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTGluZVwiPnt7J0xpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nTGluZVwiPnt7J1N0YWNraW5nTGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdMaW5lMTAwXCI+e3snU3RhY2tpbmdMaW5lMTAwJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTcGxpbmVcIj57eydTcGxpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNwbGluZUFyZWFcIj57eydTcGxpbmVBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJBcmVhXCI+e3snQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdBcmVhXCI+e3snU3RhY2tpbmdBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0FyZWExMDBcIj57eydTdGFja2luZ0FyZWExMDAnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNjYXR0ZXJcIj57eydTY2F0dGVyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJQb2xhclwiPnt7J1BvbGFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJSYWRhclwiPnt7J1JhZGFyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGVwTGluZVwiPnt7J1N0ZXBMaW5lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGVwQXJlYVwiPnt7J1N0ZXBBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ1N0ZXBBcmVhXCI+e3snU3RhY2tpbmdTdGVwQXJlYSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidQaXZvdCdcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24+e3snTm9uZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQ29sdW1uXCI+e3snQ29sdW1uJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCYXJcIj57eydCYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJ1YmJsZVwiPnt7J0J1YmJsZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXJcIj57eydTdGFja2luZ0Jhcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdCYXIxMDBcIj57eydTdGFja2luZ0JhcjEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTGluZVwiPnt7J0xpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNwbGluZVwiPnt7J1NwbGluZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3BsaW5lQXJlYVwiPnt7J1NwbGluZUFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFyZWFcIj57eydBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0FyZWFcIj57eydTdGFja2luZ0FyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nQXJlYTEwMFwiPnt7J1N0YWNraW5nQXJlYTEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdDb2x1bW5cIj57eydTdGFja2luZ0NvbHVtbid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RhY2tpbmdDb2x1bW4xMDBcIj57eydTdGFja2luZ0NvbHVtbjEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU2NhdHRlclwiPnt7J1NjYXR0ZXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlBvbGFyXCI+e3snUG9sYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJhZGFyXCI+e3snUmFkYXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBMaW5lXCI+e3snU3RlcExpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0ZXBBcmVhXCI+e3snU3RlcEFyZWEnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nU3RlcEFyZWFcIj57eydTdGFja2luZ1N0ZXBBcmVhJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdGFja2luZ0xpbmVcIj57eydTdGFja2luZ0xpbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlN0YWNraW5nTGluZTEwMFwiPnt7J1N0YWNraW5nTGluZTEwMCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxiaXpkb2MtZGVzaWduZXItY3ViZS1maWx0ZXIgKm5nSWY9XCJjdWJlXCIgW2N1YmVdPVwiY3ViZVwiIFtmb3JtXT1cImZvcm0uZ2V0KCdmaWx0ZXJzJylcIj48L2JpemRvYy1kZXNpZ25lci1jdWJlLWZpbHRlcj5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gQXhpcyAtLT5cclxuPG5nLXRlbXBsYXRlICNheGlzZm9ybSBsZXQtZm9ybT5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydUaXRsZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdUaXRsZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCduYW1lJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOignTmFtZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snRGF0YVR5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRhdGFUeXBlXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdCBvZiB0eXBlc1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJ0Lm5hbWVcIiBbdmFsdWVdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidC5mYW1pbHlcIj57e3QuZmFtaWx5fX0gLSZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgIHt7dC50aXRsZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmdldCgndGl0bGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdEYXRhVHlwZSd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxkaXY+PG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJjb21iaW5hdGlvblwiPnt7J0NvbWJpbmF0aW9uJ319PC9tYXQtY2hlY2tib3g+PC9kaXY+XHJcbiAgICA8ZGl2PjxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwic2Vuc2l0aXZlXCI+e3snU2Vuc2l0aXZlJ319PC9tYXQtY2hlY2tib3g+PC9kaXY+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU2VsZWN0aW9uTW9kZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0aW9uTW9kZVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiTm9uZVwiPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uPnt7J1NpbmdsZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJNdWx0aXBsZVwiPnt7J011bHRpcGxlJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlNlYXJjaFwiPnt7J1NlYXJjaCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJQYXR0ZXJuXCI+e3snUGF0dGVybid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snRGVzY2VuZGVudE9mJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjZW5kZW50T2ZcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhIG9mIGF4ZXMuY29udHJvbHNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJhLmdldCgnbmFtZScpLnZhbHVlXCIgKm5nSWY9XCJhIT1mb3JtXCI+e3thLmdldCgndGl0bGUnKS52YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPGRpdj48bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT1cImluZGV4YWJsZVwiPnt7J0luZGV4YWJsZSd9fTwvbWF0LWNoZWNrYm94PjwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19