@mnaoumov/obsidian-lib 7.1.0 → 8.1.0

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 (355) hide show
  1. package/dist/lib/cjs/__merged.cjs +8 -6
  2. package/dist/lib/cjs/__merged.d.cts +1 -1
  3. package/dist/lib/cjs/active-file-provider.cjs +6 -6
  4. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  5. package/dist/lib/cjs/app.cjs +5 -5
  6. package/dist/lib/cjs/async-with-notice.cjs +5 -5
  7. package/dist/lib/cjs/attachment-path.cjs +6 -6
  8. package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
  9. package/dist/lib/cjs/backlink-index.cjs +13 -19
  10. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  11. package/dist/lib/cjs/backlink.cjs +5 -5
  12. package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
  13. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  14. package/dist/lib/cjs/callout.cjs +5 -5
  15. package/dist/lib/cjs/canvas.cjs +5 -5
  16. package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
  17. package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
  18. package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
  19. package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
  20. package/dist/lib/cjs/codemirror/index.cjs +5 -5
  21. package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
  22. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
  23. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
  24. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
  25. package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
  26. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
  27. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
  28. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
  29. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
  30. package/dist/lib/cjs/command-handlers/index.cjs +5 -5
  31. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
  32. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
  33. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
  34. package/dist/lib/cjs/command-registrar.cjs +6 -6
  35. package/dist/lib/cjs/command-registrar.d.cts +2 -2
  36. package/dist/lib/cjs/community-plugins.cjs +6 -6
  37. package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
  38. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  39. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  40. package/dist/lib/cjs/components/async-events-component.cjs +5 -5
  41. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
  42. package/dist/lib/cjs/components/component-ex.cjs +5 -5
  43. package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
  44. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
  45. package/dist/lib/cjs/components/disposable-component.cjs +5 -5
  46. package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
  47. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
  48. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
  49. package/dist/lib/cjs/components/incremental-file-index-component.cjs +74 -10
  50. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +16 -1
  51. package/dist/lib/cjs/components/index.cjs +5 -5
  52. package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
  53. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
  54. package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
  55. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  56. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  57. package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
  58. package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
  59. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
  60. package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
  61. package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
  62. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
  63. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
  64. package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
  65. package/dist/lib/cjs/components/registry-component.cjs +5 -5
  66. package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
  67. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
  68. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
  69. package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
  70. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  71. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
  72. package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
  73. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  74. package/dist/lib/cjs/constructors/index.cjs +5 -5
  75. package/dist/lib/cjs/css-class.cjs +5 -5
  76. package/dist/lib/cjs/data-handler.cjs +6 -6
  77. package/dist/lib/cjs/data-handler.d.cts +2 -2
  78. package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
  79. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  80. package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
  81. package/dist/lib/cjs/data-stores/index.cjs +5 -5
  82. package/dist/lib/cjs/data-stores/local-data-store.cjs +21 -18
  83. package/dist/lib/cjs/data-stores/local-data-store.d.cts +9 -1
  84. package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
  85. package/dist/lib/cjs/dataview-link.cjs +5 -5
  86. package/dist/lib/cjs/dataview.cjs +12 -12
  87. package/dist/lib/cjs/dataview.d.cts +6 -6
  88. package/dist/lib/cjs/debug.cjs +5 -5
  89. package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
  90. package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
  91. package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
  92. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
  93. package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
  94. package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
  95. package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
  96. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  97. package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
  98. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  99. package/dist/lib/cjs/editor.cjs +5 -5
  100. package/dist/lib/cjs/events.cjs +5 -5
  101. package/dist/lib/cjs/extensions-registrar.cjs +6 -6
  102. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  103. package/dist/lib/cjs/file-change.cjs +6 -6
  104. package/dist/lib/cjs/file-change.d.cts +3 -3
  105. package/dist/lib/cjs/file-explorer.cjs +5 -5
  106. package/dist/lib/cjs/file-manager.cjs +5 -5
  107. package/dist/lib/cjs/file-system.cjs +5 -5
  108. package/dist/lib/cjs/folder-note.cjs +6 -6
  109. package/dist/lib/cjs/folder-note.d.cts +1 -1
  110. package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
  111. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
  112. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
  113. package/dist/lib/cjs/frontmatter.cjs +6 -6
  114. package/dist/lib/cjs/frontmatter.d.cts +7 -7
  115. package/dist/lib/cjs/generated-during-build.cjs +7 -7
  116. package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
  117. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  118. package/dist/lib/cjs/html-element.cjs +5 -5
  119. package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
  120. package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
  121. package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
  122. package/dist/lib/cjs/i18n/i18n.cjs +5 -5
  123. package/dist/lib/cjs/i18n/index.cjs +5 -5
  124. package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
  125. package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
  126. package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
  127. package/dist/lib/cjs/index.cjs +5 -5
  128. package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
  129. package/dist/lib/cjs/library-styles.cjs +5 -5
  130. package/dist/lib/cjs/library.cjs +5 -5
  131. package/dist/lib/cjs/link-name.cjs +5 -5
  132. package/dist/lib/cjs/link-update-progress.cjs +5 -5
  133. package/dist/lib/cjs/link.cjs +39 -15
  134. package/dist/lib/cjs/link.d.cts +49 -2
  135. package/dist/lib/cjs/logger.cjs +5 -5
  136. package/dist/lib/cjs/loop.cjs +5 -5
  137. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
  138. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
  139. package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
  140. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
  141. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
  142. package/dist/lib/cjs/markdown-view.cjs +5 -5
  143. package/dist/lib/cjs/markdown.cjs +5 -5
  144. package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
  145. package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
  146. package/dist/lib/cjs/metadata-cache.cjs +6 -6
  147. package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
  148. package/dist/lib/cjs/modals/alert.cjs +5 -5
  149. package/dist/lib/cjs/modals/confirm.cjs +5 -5
  150. package/dist/lib/cjs/modals/index.cjs +5 -5
  151. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  152. package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
  153. package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
  154. package/dist/lib/cjs/modals/modal.cjs +5 -5
  155. package/dist/lib/cjs/modals/prompt.cjs +14 -14
  156. package/dist/lib/cjs/modals/select-item.cjs +5 -5
  157. package/dist/lib/cjs/modals/select-option.cjs +5 -5
  158. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
  159. package/dist/lib/cjs/note-priority.cjs +5 -5
  160. package/dist/lib/cjs/notebook-navigator.cjs +6 -6
  161. package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
  162. package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
  163. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
  164. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  165. package/dist/lib/cjs/obsidian-settings.cjs +5 -5
  166. package/dist/lib/cjs/obsidian-word-characters.cjs +6 -6
  167. package/dist/lib/cjs/parse-link.cjs +6 -6
  168. package/dist/lib/cjs/parse-link.d.cts +2 -2
  169. package/dist/lib/cjs/path-settings.cjs +6 -6
  170. package/dist/lib/cjs/pdf.cjs +5 -5
  171. package/dist/lib/cjs/plugin/index.cjs +5 -5
  172. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
  173. package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
  174. package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
  175. package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
  176. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  177. package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
  178. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
  179. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
  180. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
  181. package/dist/lib/cjs/plugin/plugin.cjs +6 -6
  182. package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
  183. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  184. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
  185. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  186. package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
  187. package/dist/lib/cjs/popovers/index.cjs +5 -5
  188. package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
  189. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  190. package/dist/lib/cjs/property-entry.cjs +5 -5
  191. package/dist/lib/cjs/queue.cjs +6 -6
  192. package/dist/lib/cjs/react/app-context.cjs +5 -5
  193. package/dist/lib/cjs/react/index.cjs +5 -5
  194. package/dist/lib/cjs/reference.cjs +18 -6
  195. package/dist/lib/cjs/reference.d.cts +27 -7
  196. package/dist/lib/cjs/resource-lock.cjs +6 -6
  197. package/dist/lib/cjs/resource-url.cjs +5 -5
  198. package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
  199. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
  200. package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
  201. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
  202. package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
  203. package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
  204. package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
  205. package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
  206. package/dist/lib/cjs/setting-components/index.cjs +5 -5
  207. package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
  208. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
  209. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
  210. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
  211. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
  212. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
  213. package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
  214. package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
  215. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
  216. package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
  217. package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
  218. package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
  219. package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
  220. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
  221. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
  222. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
  223. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
  224. package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
  225. package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
  226. package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
  227. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
  228. package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
  229. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
  230. package/dist/lib/cjs/setting-ex.cjs +5 -5
  231. package/dist/lib/cjs/setting-group-ex.cjs +5 -5
  232. package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
  233. package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
  234. package/dist/lib/cjs/templater.cjs +6 -6
  235. package/dist/lib/cjs/templater.d.cts +9 -9
  236. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
  237. package/dist/lib/cjs/transformers/index.cjs +5 -5
  238. package/dist/lib/cjs/trusted-input.cjs +5 -5
  239. package/dist/lib/cjs/validation.cjs +6 -6
  240. package/dist/lib/cjs/validation.d.cts +1 -1
  241. package/dist/lib/cjs/vault-delete.cjs +5 -5
  242. package/dist/lib/cjs/vault-transaction.cjs +6 -6
  243. package/dist/lib/cjs/vault.cjs +5 -5
  244. package/dist/lib/cjs/view-registrar.cjs +6 -6
  245. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  246. package/dist/lib/cjs/workspace.cjs +5 -5
  247. package/dist/lib/esm/__merged.d.mts +1 -1
  248. package/dist/lib/esm/__merged.mjs +3 -1
  249. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  250. package/dist/lib/esm/active-file-provider.mjs +1 -1
  251. package/dist/lib/esm/attachment-path.mjs +1 -1
  252. package/dist/lib/esm/backlink-index.d.mts +1 -1
  253. package/dist/lib/esm/backlink-index.mjs +8 -14
  254. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  255. package/dist/lib/esm/bases-view-registrar.mjs +1 -1
  256. package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
  257. package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
  258. package/dist/lib/esm/command-registrar.d.mts +2 -2
  259. package/dist/lib/esm/command-registrar.mjs +1 -1
  260. package/dist/lib/esm/community-plugins.mjs +1 -1
  261. package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
  262. package/dist/lib/esm/components/incremental-file-index-component.d.mts +16 -1
  263. package/dist/lib/esm/components/incremental-file-index-component.mjs +69 -5
  264. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
  265. package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
  266. package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
  267. package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
  268. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
  269. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  270. package/dist/lib/esm/data-handler.d.mts +2 -2
  271. package/dist/lib/esm/data-handler.mjs +1 -1
  272. package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
  273. package/dist/lib/esm/data-stores/local-data-store.d.mts +9 -1
  274. package/dist/lib/esm/data-stores/local-data-store.mjs +16 -13
  275. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  276. package/dist/lib/esm/dataview.d.mts +6 -6
  277. package/dist/lib/esm/dataview.mjs +7 -7
  278. package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
  279. package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
  280. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  281. package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
  282. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  283. package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
  284. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  285. package/dist/lib/esm/extensions-registrar.mjs +1 -1
  286. package/dist/lib/esm/file-change.d.mts +3 -3
  287. package/dist/lib/esm/file-change.mjs +1 -1
  288. package/dist/lib/esm/folder-note.d.mts +1 -1
  289. package/dist/lib/esm/folder-note.mjs +1 -1
  290. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
  291. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
  292. package/dist/lib/esm/frontmatter.d.mts +7 -7
  293. package/dist/lib/esm/frontmatter.mjs +1 -1
  294. package/dist/lib/esm/generated-during-build.mjs +2 -2
  295. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  296. package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
  297. package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
  298. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
  299. package/dist/lib/esm/link.d.mts +49 -2
  300. package/dist/lib/esm/link.mjs +35 -10
  301. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
  302. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
  303. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
  304. package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
  305. package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
  306. package/dist/lib/esm/metadata-cache.mjs +1 -1
  307. package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
  308. package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
  309. package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
  311. package/dist/lib/esm/modals/prompt.mjs +9 -9
  312. package/dist/lib/esm/notebook-navigator.d.mts +3 -3
  313. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  314. package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
  315. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  316. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
  317. package/dist/lib/esm/obsidian-word-characters.mjs +1 -1
  318. package/dist/lib/esm/parse-link.d.mts +2 -2
  319. package/dist/lib/esm/parse-link.mjs +1 -1
  320. package/dist/lib/esm/path-settings.mjs +1 -1
  321. package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
  322. package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
  323. package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
  324. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  325. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  326. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
  327. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
  328. package/dist/lib/esm/plugin/plugin.mjs +1 -1
  329. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  330. package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
  331. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  332. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
  333. package/dist/lib/esm/queue.mjs +1 -1
  334. package/dist/lib/esm/reference.d.mts +27 -7
  335. package/dist/lib/esm/reference.mjs +12 -1
  336. package/dist/lib/esm/resource-lock.mjs +1 -1
  337. package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
  338. package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
  339. package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
  340. package/dist/lib/esm/setting-components/month-component.mjs +1 -1
  341. package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
  342. package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
  343. package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
  344. package/dist/lib/esm/setting-components/week-component.mjs +1 -1
  345. package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
  346. package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
  347. package/dist/lib/esm/templater.d.mts +9 -9
  348. package/dist/lib/esm/templater.mjs +1 -1
  349. package/dist/lib/esm/validation.d.mts +1 -1
  350. package/dist/lib/esm/validation.mjs +1 -1
  351. package/dist/lib/esm/vault-transaction.mjs +1 -1
  352. package/dist/lib/esm/view-registrar.d.mts +1 -1
  353. package/dist/lib/esm/view-registrar.mjs +1 -1
  354. package/dist/styles.css +2 -2
  355. package/package.json +6 -3
@@ -336,4 +336,4 @@ function suppressWhilePeekLocked($event) {
336
336
  export {
337
337
  MinimizableModal
338
338
  };
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvbWluaW1pemFibGUtbW9kYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgd3JhcHBlciB0aGF0IG1ha2VzIGFueSBPYnNpZGlhbiB7QGxpbmsgTW9kYWx9IG1pbmltaXphYmxlIHRvIGEgZmxvYXRpbmcgYmFyIOKAlCB3aXRob3V0IGJyZWFraW5nIHRoZVxuICogbW9kYWwncyBibG9ja2luZyBjb250cmFjdC5cbiAqXG4gKiBPYnNpZGlhbidzIHtAbGluayBNb2RhbH0gaXMgYmxvY2tpbmc6IHdoaWxlIGl0IGlzIG9wZW4gdGhlIHJlc3Qgb2YgdGhlIGFwcCBpcyBtZWFudCB0byBiZSBpbmVydCB1bnRpbFxuICogdGhlIG1vZGFsIGlzIGRpc21pc3NlZC4ge0BsaW5rIE1pbmltaXphYmxlTW9kYWx9IHdyYXBzIGFueSBtb2RhbCBpbnN0YW5jZSAocGxhaW4gYE1vZGFsYCxcbiAqIGBGdXp6eVN1Z2dlc3RNb2RhbGAsIHRoZSBsaWJyYXJ5J3MgYE1vZGFsQmFzZWAsIHlvdXIgb3duIHN1YmNsYXNzLCDigKYg4oCUIGluY2x1ZGluZyBtb2RhbHMgeW91IGRvIG5vdFxuICogb3duKSBhbmQgYWRkcyBhIG1pbmltaXplIGJ1dHRvbi4gTWluaW1pemluZyBoaWRlcyB0aGUgbW9kYWwgYW5kIGl0cyBibG9ja2luZyBiYWNrZHJvcCBhbmQgc2hvd3MgYVxuICogc21hbGwgZmxvYXRpbmcgYmFyIHdpdGggYSByZXN0b3JlIGJ1dHRvbiAoYW5kLCBieSBkZWZhdWx0LCBhIENhbmNlbCBidXR0b24gdGhhdCBjbG9zZXMgdGhlIHdyYXBwZWRcbiAqIG1vZGFsIOKAlCBwYXNzIGB7IHNob3VsZFNob3dDYW5jZWxCdXR0b246IGZhbHNlIH1gIHRvIGhpZGUgaXQpLCBzbyB0aGUgdXNlciBjYW4gcGVlayBhdCB0aGVcbiAqIG5vdGVzL2ZvbGRlcnMgdGhlIG9wZXJhdGlvbiBpbnZvbHZlcyDigJQgYnV0IHRoZSBtb2RhbCBpcyBOT1QgZGlzbWlzc2VkLCBzbyBpdHMgYmxvY2tpbmcgY29udHJhY3QgbXVzdCBiZSBwcmVzZXJ2ZWQuXG4gKlxuICogVG8ga2VlcCB0aGF0IGNvbnRyYWN0IHdoaWxlIG1pbmltaXplZCwgdGhlIHdyYXBwZXIgcHV0cyB0aGUgYXBwIGludG8gYSAqKnBlZWstb25seSBsb2NrKio6IHRoZSB1c2VyXG4gKiBtYXkgbW91c2UtY2xpY2sgYW5kIHNjcm9sbCB0byBpbnNwZWN0IGNvbnRlbnQsIGJ1dCBjYW5ub3Qgc3RhcnQgYW55dGhpbmcgbmV3LiBXaGlsZSBhbnkgbW9kYWwgaXNcbiAqIG1pbmltaXplZCB0aGUgd3JhcHBlcjpcbiAqIC0gYmxvY2tzIHRoZSBrZXlib2FyZCAodHlwaW5nLCBob3RrZXlzLCB0aGUgY29tbWFuZC1wYWxldHRlIHNob3J0Y3V0KSxcbiAqIC0gYmxvY2tzIHRoZSByaWdodC1jbGljayBjb250ZXh0IG1lbnUsIGFuZFxuICogLSBibG9ja3Mgb3BlbmluZyBhbnkgb3RoZXIgbW9kYWwgKGEgcmUtZmlyZWQgY29tbWFuZCwgdGhlIGNvbW1hbmQgcGFsZXR0ZSwgc2V0dGluZ3MsIOKApikuXG4gKlxuICogQSBibG9ja2VkIGF0dGVtcHQgZmxhc2hlcyB0aGUgZmxvYXRpbmcgYmFyIGFuZCBiZWVwcyBzbyB0aGUgdXNlciBzZWVzIChhbmQgaGVhcnMpIHdoeSBub3RoaW5nXG4gKiBoYXBwZW5lZC4gUmVzdG9yaW5nIChvciB0aGUgbW9kYWwgY2xvc2luZykgbGlmdHMgdGhlIGxvY2suIFRoaXMgcHJldmVudHMsIGZvciBleGFtcGxlLCBtaW5pbWl6aW5nIGFcbiAqIFwibWVyZ2UgZm9sZGVyXCIgcGlja2VyIGFuZCB0aGVuIGZpcmluZyB0aGUgc2FtZSBjb21tYW5kIGFnYWluIHRvIHN0YWNrIHNldmVyYWwgY29uY3VycmVudCBtZXJnZXMuXG4gKlxuICogVGhlIHdyYXBwZXIgcmV1c2VzIHRoZSBtb2RhbCdzIG93biB0aXRsZSAoYHRpdGxlRWxgKSBhcyB0aGUgbWluaW1pemVkIGJhciBsYWJlbCwgc28gc2V0IHRoZSB0aXRsZVxuICogdGhlIHVzdWFsIHdheSAoYG1vZGFsLnNldFRpdGxlKC4uLilgKS4gUmVuZGVyIGFyYml0cmFyeSBjb250ZW50IGludG8ge0BsaW5rIE1vZGFsLmNvbnRlbnRFbH0sXG4gKiBpbmNsdWRpbmcgY2xpY2thYmxlIG5vdGUgbGlua3MgcHJvZHVjZWQgYnkgYHJlbmRlckludGVybmFsTGlua2AgZnJvbVxuICogYEBtbmFvdW1vdi9vYnNpZGlhbi1saWIvbWFya2Rvd25gOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBtb2RhbCA9IG5ldyBNeU1vZGFsKGFwcCk7XG4gKiBtb2RhbC5zZXRUaXRsZSgnTWVyZ2luZyBub3RlcycpO1xuICogbW9kYWwuY29udGVudEVsLmFwcGVuZENoaWxkKGF3YWl0IHJlbmRlckludGVybmFsTGluayh7IGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlOiBmaWxlIH0pKTtcbiAqXG4gKiBjb25zdCBtaW5pbWl6YWJsZSA9IG5ldyBNaW5pbWl6YWJsZU1vZGFsKG1vZGFsKTtcbiAqIG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKTtcbiAqIG1pbmltaXphYmxlLm1pbmltaXplKCk7IC8vIGEgZmxvYXRpbmcgYmFyIG9mZmVycyBcInJlc3RvcmVcIjsgdGhlIGFwcCBpcyBwZWVrLW9ubHkgdW50aWwgcmVzdG9yZWRcbiAqIGBgYFxuICpcbiAqIFRoZSB3cmFwcGVkIG1vZGFsIGNhbiBzdGlsbCBiZSBjbG9zZWQgbm9ybWFsbHk7IHRoZSBmbG9hdGluZyBiYXIgaXMgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHdoZW5cbiAqIHRoZSBtb2RhbCBjbG9zZXMgKGV2ZW4gaWYgaXQgaXMgY2xvc2VkIHdoaWxlIG1pbmltaXplZCkuXG4gKlxuICogQ2xpY2tpbmcgdGhlIGRpbW1lZCBiYWNrZ3JvdW5kIGJlaGluZCB0aGUgbW9kYWwgKiptaW5pbWl6ZXMqKiBpdCByYXRoZXIgdGhhbiBjbG9zaW5nIGl0LCBzbyBhIHN0cmF5XG4gKiBjbGljayBwYXN0IHRoZSBkaWFsb2cgbm8gbG9uZ2VyIGNhbmNlbHMgdGhlIG9wZXJhdGlvbiB0aGUgbW9kYWwgaXMgcnVubmluZyDigJQgcGFzc1xuICogYHsgc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZTogZmFsc2UgfWAgdG8ga2VlcCBPYnNpZGlhbidzIG5hdGl2ZSBjbG9zZS1vbi1iYWNrZ3JvdW5kLWNsaWNrLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBCZWVwZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYmVlcGVyJztcbmltcG9ydCB7XG4gIE1vZGFsLFxuICBzZXRJY29uLFxuICBzZXRUb29sdGlwXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgTUlOSU1JWkVfSUNPTl9JRCA9ICdtaW51cyc7XG5jb25zdCBSRVNUT1JFX0lDT05fSUQgPSAnbWF4aW1pemUtMic7XG5jb25zdCBDQU5DRUxfSUNPTl9JRCA9ICd4JztcblxuLy8gTmF2aWdhdGlvbiBrZXlzIHBhc3MgdGhyb3VnaCB3aGlsZSBtaW5pbWl6ZWQgc28gdGhlIHVzZXIgY2FuIG1vdmUgdGhlIGN1cnNvciBhbmQgc2Nyb2xsIHRvIHJlYWQuXG4vLyBOb25lIG9mIHRoZW0gbXV0YXRlIHRoZSBkb2N1bWVudCDigJQgdGV4dCBjaGFuZ2VzIGFyZSBjYXVnaHQgc2VwYXJhdGVseSBieSB0aGUgYGJlZm9yZWlucHV0YCBndWFyZC5cbi8vIFNoaWZ0K25hdmlnYXRpb24gaXMgYmxvY2tlZCwgdGhvdWdoLCBzaW5jZSBpdCBleHRlbmRzIHRoZSBzZWxlY3Rpb24gdGhhdCBpbnNwZWN0aW9uIGRvZXMgbm90IG5lZWQuXG5jb25zdCBOQVZJR0FUSU9OX0tFWVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnQXJyb3dEb3duJyxcbiAgJ0Fycm93TGVmdCcsXG4gICdBcnJvd1JpZ2h0JyxcbiAgJ0Fycm93VXAnLFxuICAnRW5kJyxcbiAgJ0hvbWUnLFxuICAnUGFnZURvd24nLFxuICAnUGFnZVVwJ1xuXSk7XG5cbi8vIEEgYmFyZSBtb2RpZmllciBwcmVzcyBkb2VzIG5vdGhpbmcgb24gaXRzIG93biwgc28gaXQgcGFzc2VzIHRocm91Z2ggdGhlIGxvY2suXG4vLyBUaGlzIGF2b2lkcyBhIHNwdXJpb3VzIGZsYXNoL2JlZXAgd2hpbGUgY29tcG9zaW5nIGEgc2hvcnRjdXQ7IHRoZSBzaG9ydGN1dCdzIGNvbW1hbmQga2V5IGlzIGJsb2NrZWQuXG5jb25zdCBNT0RJRklFUl9LRVlTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgJ0FsdCcsXG4gICdDb250cm9sJyxcbiAgJ01ldGEnLFxuICAnU2hpZnQnXG5dKTtcblxuLyoqXG4gKiBBIHJlZ2lzdGVyZWQgZW50cnkgZm9yIGEgY3VycmVudGx5LW1pbmltaXplZCBtb2RhbC4gVGhlIHNoYXJlZCBwZWVrLW9ubHkgbG9jayB1c2VzIGl0IHRvIGtub3cgYVxuICogbW9kYWwgaXMgbWluaW1pemVkLCB0byBsZWF2ZSB0aGF0IG1vZGFsJ3Mgb3duIHJlLW9wZW5zIGFsb25lLCBhbmQgdG8gZmxhc2ggaXRzIGJhciBvbiBhIGJsb2NrZWRcbiAqIGF0dGVtcHQuXG4gKi9cbmludGVyZmFjZSBQZWVrTG9ja0VudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZyBiYXIgZWxlbWVudC4gVXNlZCB0byBkZXRlY3QgYSBzdGFsZSBlbnRyeSAoaXRzIGJhciBoYXMgbGVmdCB0aGUgRE9NKSBzbyBpdCBjYW4gYmVcbiAgICogcHJ1bmVkIGFuZCBuZXZlciBrZWVwIHRoZSBhcHAgbG9ja2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBGbGFzaGVzIHRoZSBmbG9hdGluZyBiYXIgdG8gc2lnbmFsIGEgYmxvY2tlZCBhdHRlbXB0LlxuICAgKi9cbiAgZmxhc2g6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB3cmFwcGVkIG1vZGFsIGluc3RhbmNlLCBzbyBpdHMgb3duIGBvcGVuKClgIGlzIG5ldmVyIGJsb2NrZWQgYnkgdGhlIGxvY2suXG4gICAqL1xuICByZWFkb25seSBpbm5lck1vZGFsOiBNb2RhbDtcbn1cblxuY29uc3QgcGVla0xvY2tFbnRyaWVzID0gbmV3IFNldDxQZWVrTG9ja0VudHJ5PigpO1xuY29uc3QgYmVlcGVyID0gbmV3IEJlZXBlcigpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBNaW5pbWl6YWJsZU1vZGFsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5pbWl6YWJsZU1vZGFsQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgdGhlIGRpbW1lZCBiYWNrZ3JvdW5kIGJlaGluZCB0aGUgbW9kYWwgbWluaW1pemVzIGl0IGluc3RlYWQgb2YgY2xvc2luZyBpdC5cbiAgICogT2JzaWRpYW4ncyBuYXRpdmUgYmVoYXZpb3IgaXMgdG8gY2xvc2UsIHdoaWNoIGNhbmNlbHMgd2hhdGV2ZXIgb3BlcmF0aW9uIHRoZSBtb2RhbCBpcyBydW5uaW5nO1xuICAgKiBtaW5pbWl6aW5nIGtlZXBzIHRoYXQgb3BlcmF0aW9uIGFsaXZlIHNvIHRoZSB1c2VyIGNhbiBwZWVrIGF0IHRoZSBpbnZvbHZlZCBub3RlcyBhbmQgY29tZSBiYWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZE1pbmltaXplT25DbGlja091dHNpZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtaW5pbWl6ZWQgYmFyIHNob3dzIGEgQ2FuY2VsIGJ1dHRvbiB0aGF0IGNsb3NlcyB0aGUgd3JhcHBlZCBtb2RhbC4gQ2xvc2luZyBsZXRzIHRoZVxuICAgKiB3cmFwcGVkIG1vZGFsJ3Mgb3duIGBvbkNsb3NlYCBkZWZpbmUgd2hhdCBcImNhbmNlbFwiIG1lYW5zIChlLmcuIHJlbGVhc2luZyBhIGhlbGQgbG9jaykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0NhbmNlbEJ1dHRvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIHBlZWstb25seSBsb2NrJ3MgYG9wZW5gIHBhdGNoZXMgd2hpbGUgYXQgbGVhc3Qgb25lIG1vZGFsIGlzIG1pbmltaXplZC4gQmVpbmcgYVxuICoge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudH0sIGJvdGggcGF0Y2hlcyBhcmUgdG9ybiBkb3duIGF1dG9tYXRpY2FsbHkgb24gYHVubG9hZGAsIHNvIHRoZXkgZXhpc3RcbiAqIG9ubHkgd2hpbGUgdGhlIGxvY2sgaXMgYWN0aXZlLiBBIG1pbmltaXplZCBtb2RhbCdzIG93biByZS1vcGVuIGlzIGFsd2F5cyBhbGxvd2VkIChzZWVcbiAqIHtAbGluayBzaG91bGRCbG9ja09wZW59KTsgZXZlcnkgb3RoZXIgbW9kYWwgb3BlbiBpcyBibG9ja2VkIGFuZCBzaWduYWxzIGEgZmxhc2ggKyBiZWVwLlxuICovXG5jbGFzcyBQZWVrTG9ja0NvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCB3aG9zZSBzZXR0aW5ncyBtb2RhbCBpcyBndWFyZGVkIGFuZCB3aG9zZSB3aW5kb3dzIHN1cHByZXNzIGlucHV0IHdoaWxlIGxvY2tlZC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGBvcGVuYCBwYXRjaGVzIGFuZCB0aGUgaW5wdXQgc3VwcHJlc3NvcnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgLy8gQmxvY2sgb3BlbmluZyBhbnkgT1RIRVIgbW9kYWwgd2hpbGUgYSBtb2RhbCBpcyBtaW5pbWl6ZWQgKHRoZSBjb21tYW5kIHBhbGV0dGUsIGEgcmUtZmlyZWRcbiAgICAvLyBjb21tYW5kLCBhbm90aGVyIHBsdWdpbiBtb2RhbCwg4oCmKS5cbiAgICB0aGlzLnJlZ2lzdGVyTWV0aG9kUGF0Y2g8TW9kYWwsICdvcGVuJz4oe1xuICAgICAgJG9iamVjdDogTW9kYWwucHJvdG90eXBlLFxuICAgICAgbWV0aG9kTmFtZTogJ29wZW4nLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pOiB2b2lkID0+IHtcbiAgICAgICAgYmxvY2tPckZhbGxiYWNrKG9yaWdpbmFsVGhpcywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gT2JzaWRpYW4ncyBTZXR0aW5ncyBpcyBhICpwb3BvdXQqIG1vZGFsOiBvbiBkZXNrdG9wIGl0cyBvd24gYG9wZW4oKWAgZmlyc3QgY3JlYXRlcyBhIHNlcGFyYXRlIE9TXG4gICAgLy8gd2luZG93ICh2aWEgYHNob3VsZFVzZVBvcG91dCgpYC9gZ2V0UG9wb3V0T3B0aW9ucygpYCkgYW5kIG9ubHkgVEhFTiBkZWxlZ2F0ZXMgdG9cbiAgICAvLyBgTW9kYWwucHJvdG90eXBlLm9wZW5gIHRvIHJlbmRlciB0aGUgYWN0aXZlIHRhYiBpbnRvIGl0LiBHdWFyZGluZyBvbmx5IGBNb2RhbC5wcm90b3R5cGUub3BlbmBcbiAgICAvLyB0aGVyZWZvcmUgYmxvY2tzIHRoZSByZW5kZXIgYnV0IGxlYXZlcyBhbiBlbXB0eSBzZXR0aW5ncyB3aW5kb3cgYmVoaW5kIOKAlCB0aGUgcmVwb3J0ZWQgYmFkIFVYLlxuICAgIC8vIEd1YXJkaW5nIHRoZSBzZXR0aW5ncyBtb2RhbCdzIG93biBgb3BlbigpYCBibG9ja3MgaXQgKmJlZm9yZSogdGhlIHdpbmRvdyBpcyBjcmVhdGVkLlxuICAgIHRoaXMucmVnaXN0ZXJNZXRob2RQYXRjaDxBcHBbJ3NldHRpbmcnXSwgJ29wZW4nPih7XG4gICAgICAkb2JqZWN0OiB0aGlzLmFwcC5zZXR0aW5nLFxuICAgICAgbWV0aG9kTmFtZTogJ29wZW4nLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pOiB2b2lkID0+IHtcbiAgICAgICAgYmxvY2tPckZhbGxiYWNrKG9yaWdpbmFsVGhpcywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3VwcHJlc3MgdGhlIGtleWJvYXJkLCBlZGl0b3IgbXV0YXRpb24sIGFuZCB0aGUgY29udGV4dCBtZW51IGFjcm9zcyBBTEwgd2luZG93cyDigJQgdGhlIG1haW4gd2luZG93XG4gICAgLy8gYW5kIGV2ZXJ5IGV4aXN0aW5nL2Z1dHVyZSBwb3BvdXQg4oCUIHNvIHRoZSBsb2NrIGhvbGRzIHdoZXJldmVyIHRoZSB1c2VyJ3MgZm9jdXMgaXMsIG5vdCBvbmx5IGluXG4gICAgLy8gdGhlIHdpbmRvdyB0aGF0IG93bnMgdGhlIG1pbmltaXplZCBtb2RhbC4gQ2FwdHVyZS1waGFzZSBsaXN0ZW5lcnMgcnVuIGJlZm9yZSBPYnNpZGlhbidzIG93blxuICAgIC8vIGRvY3VtZW50L2VsZW1lbnQgaGFuZGxlcnMgKGluY2x1ZGluZyBDb2RlTWlycm9yJ3MpLCBzbyBgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClgIGluIHRoZVxuICAgIC8vIHN1cHByZXNzb3JzIGtlZXBzIGEgYmxvY2tlZCBldmVudCBmcm9tIGV2ZXIgcmVhY2hpbmcgdGhlbS4gYGtleWRvd25gIGxldHMgbmF2aWdhdGlvbiBrZXlzIHRocm91Z2hcbiAgICAvLyAoc2VlIGBpc1BlZWtBbGxvd2VkS2V5YCkgYnV0IGJsb2NrcyBjb21tYW5kIGhvdGtleXM7IGBiZWZvcmVpbnB1dGAgYmxvY2tzIGFsbCBlZGl0b3IgbXV0YXRpb247XG4gICAgLy8gYGNvbnRleHRtZW51YCBibG9ja3MgdGhlIHJpZ2h0LWNsaWNrIG1lbnUuXG4gICAgY29uc3QgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50KHRoaXMuYXBwKSk7XG4gICAgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsV2luZG93c0RvbUV2ZW50KHtcbiAgICAgIGNhbGxiYWNrOiBzdXBwcmVzc0tleWRvd25XaGlsZVBlZWtMb2NrZWQsXG4gICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgIHR5cGU6ICdrZXlkb3duJ1xuICAgIH0pO1xuICAgIGFsbFdpbmRvd3NFdmVudENvbXBvbmVudC5yZWdpc3RlckFsbFdpbmRvd3NEb21FdmVudCh7XG4gICAgICBjYWxsYmFjazogc3VwcHJlc3NXaGlsZVBlZWtMb2NrZWQsXG4gICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgIHR5cGU6ICdiZWZvcmVpbnB1dCdcbiAgICB9KTtcbiAgICBhbGxXaW5kb3dzRXZlbnRDb21wb25lbnQucmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnQoe1xuICAgICAgY2FsbGJhY2s6IHN1cHByZXNzV2hpbGVQZWVrTG9ja2VkLFxuICAgICAgb3B0aW9uczogeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICB0eXBlOiAnY29udGV4dG1lbnUnXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIHtAbGluayBNb2RhbH0gaW5zdGFuY2UgdG8gbWFrZSBpdCBtaW5pbWl6YWJsZSB0byBhIHNtYWxsIGZsb2F0aW5nIGJhciBhbmQgcmVzdG9yYWJsZS4gV2hpbGVcbiAqIG1pbmltaXplZCB0aGUgYXBwIGlzIHB1dCBpbnRvIGEgcGVlay1vbmx5IGxvY2sgKGtleWJvYXJkLCBjb250ZXh0IG1lbnUsIGFuZCBvcGVuaW5nIG90aGVyIG1vZGFscyBhcmVcbiAqIGJsb2NrZWQpIHNvIHRoZSBtb2RhbCdzIGJsb2NraW5nIGNvbnRyYWN0IGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNb2RhbCAtIFRoZSB0eXBlIG9mIHRoZSB3cmFwcGVkIG1vZGFsLlxuICovXG5leHBvcnQgY2xhc3MgTWluaW1pemFibGVNb2RhbDxUTW9kYWwgZXh0ZW5kcyBNb2RhbD4ge1xuICAvKipcbiAgICogVGhlIHdyYXBwZWQgbW9kYWwuIE9wZW4sIGNsb3NlLCBhbmQgcG9wdWxhdGUgaXQgYXMgdXN1YWwgKGUuZy4gYG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKWApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsOiBUTW9kYWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1vZGFsIGlzIGN1cnJlbnRseSBtaW5pbWl6ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbW9kYWwgaXMgY3VycmVudGx5IG1pbmltaXplZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTWluaW1pemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTWluaW1pemVkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgd3JhcHBlZCBtb2RhbCdzIGBvbkNsb3NlYCB0byBydW4gY2xlYW51cC4gUGVyc2lzdHMgZm9yIHRoZSB3cmFwcGVyJ3Mgd2hvbGUgbGlmZSAoYVxuICAgKiBtb2RhbCBjYW4gYmUgcmVvcGVuZWQsIHNvIHRoZSBwYXRjaCBtdXN0IHN1cnZpdmUgZWFjaCBjbG9zZSksIGhlbmNlIGEgZGVkaWNhdGVkIGNvbXBvbmVudCB0aGF0IGlzXG4gICAqIG5ldmVyIHVubG9hZGVkIOKAlCBkaXN0aW5jdCBmcm9tIGBwZWVrTG9ja0NvbXBvbmVudGAsIHdob3NlIHBhdGNoZXMgbGl2ZSBvbmx5IHdoaWxlIG1pbmltaXplZC5cbiAgICogRXhwb3NlZCB0byBzdWJjbGFzc2VzIHNvIHRoZXkgY2FuIHJlZ2lzdGVyIGFkZGl0aW9uYWwgbGlmZXRpbWUtc2NvcGVkIHBhdGNoZXMgb24gdGhlIHdyYXBwZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xvc2VQYXRjaENvbXBvbmVudCA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcblxuICBwcml2YXRlIGlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbWl6ZUJ1dHRvbkVsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBtaW5pbWl6ZWRCYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0NvbXBvbmVudDogbnVsbCB8IFBlZWtMb2NrQ29tcG9uZW50ID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0VudHJ5OiBudWxsIHwgUGVla0xvY2tFbnRyeSA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRTaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXcmFwcyB0aGUgZ2l2ZW4gbW9kYWwsIGFkZGluZyBhIG1pbmltaXplIGJ1dHRvbiBhbmQgd2lyaW5nIHVwIGNsZWFudXAgb24gY2xvc2UuXG4gICAqXG4gICAqIEBwYXJhbSBtb2RhbCAtIFRoZSBtb2RhbCBpbnN0YW5jZSB0byBtYWtlIG1pbmltaXphYmxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG1pbmltaXplZCBiYXIuIFNlZSB7QGxpbmsgTWluaW1pemFibGVNb2RhbENvbnN0cnVjdG9yT3B0aW9uc30uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobW9kYWw6IFRNb2RhbCwgb3B0aW9uczogTWluaW1pemFibGVNb2RhbENvbnN0cnVjdG9yT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5tb2RhbCA9IG1vZGFsO1xuICAgIHRoaXMuc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZSA9IG9wdGlvbnMuc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZSA/PyB0cnVlO1xuICAgIHRoaXMuc2hvdWxkU2hvd0NhbmNlbEJ1dHRvbiA9IG9wdGlvbnMuc2hvdWxkU2hvd0NhbmNlbEJ1dHRvbiA/PyB0cnVlO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobW9kYWwuY29udGFpbmVyRWwsIFtDc3NDbGFzcy5NaW5pbWl6YWJsZU1vZGFsXSk7XG4gICAgdGhpcy5taW5pbWl6ZUJ1dHRvbkVsID0gdGhpcy5jcmVhdGVNaW5pbWl6ZUJ1dHRvbigpO1xuICAgIGlmICh0aGlzLnNob3VsZE1pbmltaXplT25DbGlja091dHNpZGUpIHtcbiAgICAgIC8vIE9ic2lkaWFuIGRpc21pc3NlcyBhIG1vZGFsIGZyb20gYSBsaXN0ZW5lciBpdCByZWdpc3RlcnMgb24gYGJnRWxgIElOIFRIRSBgTW9kYWxgIENPTlNUUlVDVE9SIOKAlFxuICAgICAgLy8gb24gbWFjT1MgZGVza3RvcCB0aGF0IGxpc3RlbmVyIGNhbGxzIGBjbG9zZSgpYCBkaXJlY3RseSAobm8gb3ZlcnJpZGFibGUgbWV0aG9kLCBub1xuICAgICAgLy8gYGRlZmF1bHRQcmV2ZW50ZWRgIGd1YXJkKSwgc28gbmVpdGhlciBvdmVycmlkaW5nIGBvbkNsaWNrT3V0c2lkZWAgbm9yIGBwcmV2ZW50RGVmYXVsdCgpYCBhbG9uZSBjYW5cbiAgICAgIC8vIHN0b3AgaXQuIEF0IHRoZSB0YXJnZXQgcGhhc2UgdGhlIERPTSBpbnZva2VzIGxpc3RlbmVycyBpbiByZWdpc3RyYXRpb24gb3JkZXIgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAgIC8vIGNhcHR1cmUgZmxhZywgYW5kIE9ic2lkaWFuIHJlZ2lzdGVyZWQgZmlyc3QsIHNvIHRoZSBvbmx5IHdheSB0byBydW4gZWFybGllciBpcyB0byBjYXB0dXJlIG9uIHRoZVxuICAgICAgLy8gUEFSRU5UIGVsZW1lbnQuIEhlbmNlOiBjYXB0dXJlLXBoYXNlIGBjbGlja2Agb24gYGNvbnRhaW5lckVsYC5cbiAgICAgIG1vZGFsLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrKCRldmVudCk7XG4gICAgICB9LCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2VQYXRjaENvbXBvbmVudC5sb2FkKCk7XG4gICAgdGhpcy5wYXRjaE9uQ2xvc2UobW9kYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbmltaXplcyB0aGUgbW9kYWw6IGhpZGVzIHRoZSBtb2RhbCBhbmQgaXRzIGJhY2tkcm9wLCBzaG93cyBhIGZsb2F0aW5nIGJhciB3aXRoIGEgcmVzdG9yZSBidXR0b24sXG4gICAqIGFuZCBwdXRzIHRoZSBhcHAgaW50byB0aGUgcGVlay1vbmx5IGxvY2suIEEgbm8tb3AgaWYgdGhlIG1vZGFsIGlzIGFscmVhZHkgbWluaW1pemVkLlxuICAgKi9cbiAgcHVibGljIG1pbmltaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTWluaW1pemVkVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTWluaW1pemVkVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMubWluaW1pemVCdXR0b25FbC5oaWRlKCk7XG4gICAgdGhpcy5tb2RhbC5jb250YWluZXJFbC5oaWRlKCk7XG4gICAgLy8gVGhlIG1vZGFsIHN0YXlzIG9wZW4gd2hpbGUgbWluaW1pemVkLCBzbyBpdHMga2V5bWFwIHNjb3BlIGlzIHBvcHBlZCB0byByZWxlYXNlIHRoZSBmb2N1cyB0cmFwLlxuICAgIC8vIFJlc3RvcmluZyByZS1wdXNoZXMgaXQuIEFuIGFjdGl2ZSB0cmFwIHdvdWxkIHN0ZWFsIGZvY3VzIGJhY2sgdG8gdGhlIGhpZGRlbiBtb2RhbCwgYmxvY2tpbmcgdGhlXG4gICAgLy8gbW91c2UtZHJpdmVuIGluc3BlY3Rpb24gKGNsaWNraW5nIG5vdGVzLCBzY3JvbGxpbmcpIHRoYXQgbWluaW1pemUgZXhpc3RzIHRvIGFsbG93LlxuICAgIC8vIEtleWJvYXJkIGlucHV0IHJlbWFpbnMgYmxvY2tlZCBieSB0aGUgcGVlay1vbmx5IGxvY2ssIHNvIHJlbGVhc2luZyB0aGUgdHJhcCBrZWVwcyB0aGUgYXBwIGluZXJ0LlxuICAgIHRoaXMubW9kYWwuYXBwLmtleW1hcC5wb3BTY29wZSh0aGlzLm1vZGFsLnNjb3BlKTtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsID0gdGhpcy5jcmVhdGVNaW5pbWl6ZWRCYXIoKTtcbiAgICB0aGlzLmVuYWJsZVBlZWtMb2NrKHRoaXMubWluaW1pemVkQmFyRWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIHRoZSBtb2RhbCBmcm9tIHRoZSBtaW5pbWl6ZWQgc3RhdGUsIHJlbW92aW5nIHRoZSBmbG9hdGluZyBiYXIgYW5kIGxpZnRpbmcgdGhlIHBlZWstb25seVxuICAgKiBsb2NrLiBBIG5vLW9wIGlmIHRoZSBtb2RhbCBpcyBub3QgbWluaW1pemVkLlxuICAgKi9cbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTWluaW1pemVkVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVQZWVrTG9jaygpO1xuICAgIHRoaXMucmVtb3ZlTWluaW1pemVkQmFyKCk7XG4gICAgLy8gUmUtcHVzaCB0aGUgc2NvcGUgcG9wcGVkIGluIG1pbmltaXplKCkgc28gdGhlIHJlc3RvcmVkIG1vZGFsIGJsb2NrcyB0aGUgYXBwIGFnYWluIChmb2N1cyB0cmFwXG4gICAgLy8gKyBFc2NhcGUgY2FwdHVyZSkuXG4gICAgdGhpcy5tb2RhbC5hcHAua2V5bWFwLnB1c2hTY29wZSh0aGlzLm1vZGFsLnNjb3BlKTtcbiAgICB0aGlzLm1vZGFsLmNvbnRhaW5lckVsLnNob3coKTtcbiAgICB0aGlzLm1pbmltaXplQnV0dG9uRWwuc2hvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNaW5pbWl6ZUJ1dHRvbigpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uRWwgPSB0aGlzLm1vZGFsLm1vZGFsRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgY2xzOiBDc3NDbGFzcy5NaW5pbWl6ZUJ1dHRvbiB9KTtcbiAgICBzZXRJY29uKGJ1dHRvbkVsLCBNSU5JTUlaRV9JQ09OX0lEKTtcbiAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMubWluaW1pemUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnV0dG9uRWw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1pbmltaXplZEJhcigpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYmFyRWwgPSB0aGlzLm1vZGFsLmNvbnRhaW5lckVsLm93bmVyRG9jdW1lbnQuYm9keS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJhckVsLCBbQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJdKTtcbiAgICBiYXJFbC5jcmVhdGVTcGFuKHtcbiAgICAgIGNsczogQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJUaXRsZSxcbiAgICAgIHRleHQ6IHRoaXMubW9kYWwudGl0bGVFbC50ZXh0Q29udGVudFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3RvcmVCdXR0b25FbCA9IGJhckVsLmNyZWF0ZUVsKCdidXR0b24nLCB7IGNsczogQ3NzQ2xhc3MuUmVzdG9yZUJ1dHRvbiB9KTtcbiAgICBzZXRJY29uKHJlc3RvcmVCdXR0b25FbCwgUkVTVE9SRV9JQ09OX0lEKTtcbiAgICBpZiAodGhpcy5zaG91bGRTaG93Q2FuY2VsQnV0dG9uKSB7XG4gICAgICBjb25zdCBjYW5jZWxCdXR0b25FbCA9IGJhckVsLmNyZWF0ZUVsKCdidXR0b24nLCB7IGNsczogQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uIH0pO1xuICAgICAgc2V0SWNvbihjYW5jZWxCdXR0b25FbCwgQ0FOQ0VMX0lDT05fSUQpO1xuICAgICAgc2V0VG9vbHRpcChjYW5jZWxCdXR0b25FbCwgJ0NhbmNlbCcpO1xuICAgICAgY2FuY2VsQnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFRoZSB3aG9sZSBiYXIgcmVzdG9yZXMgb24gY2xpY2s7IHN0b3AgcHJvcGFnYXRpb24gc28gQ2FuY2VsIGNsb3NlcyB0aGUgbW9kYWwgaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXN0b3JpbmcgaXQuIENsb3NpbmcgcnVucyB0aGUgd3JhcHBlZCBtb2RhbCdzIG9uQ2xvc2UgKHBlZWsgbG9jayBsaWZ0ZWQsIGJhciByZW1vdmVkKSwgc29cbiAgICAgICAgLy8gdGhlIGNvbnN1bWVyJ3Mgb25DbG9zZSBkZWNpZGVzIHdoYXQgXCJjYW5jZWxcIiBtZWFucyAoZS5nLiByZWxlYXNpbmcgYSBoZWxkIGxvY2spLlxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kYWwuY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBUaGUgd2hvbGUgYmFyIHJlc3RvcmVzIG9uIGNsaWNrLCBub3QganVzdCB0aGUgcmVzdG9yZSBidXR0b24g4oCUIGEgbGFyZ2VyLCBlYXNpZXIgY2xpY2sgdGFyZ2V0LlxuICAgIC8vIGByZXN0b3JlKClgIGd1YXJkcyBhZ2FpbnN0IGEgZG91YmxlIGludm9jYXRpb24sIHNvIHRoZSByZXN0b3JlIGJ1dHRvbidzIG93biBjbGljayBidWJibGluZyB1cFxuICAgIC8vIGhlcmUgaXMgYSBuby1vcC4gVGhlIHJlc3RvcmUgYnV0dG9uIHN0YXlzIHB1cmVseSBhcyBhIHZpc3VhbCBhZmZvcmRhbmNlIGZvciB0aGUgY2xpY2sgdGFyZ2V0LlxuICAgIGJhckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSk7XG4gICAgLy8gRHJvcCB0aGUgb25lLXNob3QgYXR0ZW50aW9uIGZsYXNoIG9uY2UgaXQgZmluaXNoZXMgc28gdGhlIGJhciByZXR1cm5zIHRvIGl0cyBnZW50bGUgaWRsZSBwdWxzZS5cbiAgICAvLyBUaGUgaWRsZSBwdWxzZSBpcyBhbiBpbmZpbml0ZSBhbmltYXRpb24sIHdoaWNoIG5ldmVyIGZpcmVzIGBhbmltYXRpb25lbmRgLlxuICAgIGJhckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsICgpID0+IHtcbiAgICAgIGJhckVsLnJlbW92ZUNsYXNzKENzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYmFyRWw7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVQZWVrTG9jaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVla0xvY2tFbnRyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBlZWtMb2NrRW50cmllcy5kZWxldGUodGhpcy5wZWVrTG9ja0VudHJ5KTtcbiAgICB0aGlzLnBlZWtMb2NrRW50cnkgPSBudWxsO1xuICAgIC8vIFRlYXIgdGhlIGBvcGVuYCBwYXRjaGVzIGRvd24gd2l0aCB0aGUgY29tcG9uZW50LCBzbyB0aGV5IGV4aXN0IG9ubHkgd2hpbGUgdGhpcyBtb2RhbCBpcyBtaW5pbWl6ZWQuXG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudD8udW5sb2FkKCk7XG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVBlZWtMb2NrKGJhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMucGVla0xvY2tFbnRyeSA9IHtcbiAgICAgIGJhckVsLFxuICAgICAgZmxhc2g6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5mbGFzaEJhcihiYXJFbCk7XG4gICAgICB9LFxuICAgICAgaW5uZXJNb2RhbDogdGhpcy5tb2RhbFxuICAgIH07XG4gICAgcGVla0xvY2tFbnRyaWVzLmFkZCh0aGlzLnBlZWtMb2NrRW50cnkpO1xuICAgIC8vIEluc3RhbGwgdGhlIGBvcGVuYCBwYXRjaGVzIGFuZCBpbnB1dCBzdXBwcmVzc29ycyBmb3IgYXMgbG9uZyBhcyB0aGlzIG1vZGFsIGlzIG1pbmltaXplZC4gVGhlXG4gICAgLy8gYmxvY2sgTE9HSUMgaXRzZWxmIGtleXMgb2ZmIHRoZSBzaGFyZWQgYHBlZWtMb2NrRW50cmllc2AgKHNlZSBgc2hvdWxkQmxvY2tPcGVuYCksIHNvIHdpdGggc2V2ZXJhbFxuICAgIC8vIG1vZGFscyBtaW5pbWl6ZWQgZXZlcnkgb25lJ3MgcGF0Y2ggcmVhY2hlcyB0aGUgc2FtZSB2ZXJkaWN0OyB0aGUgbG9jayBsaWZ0cyBvbmx5IG9uY2UgdGhlIGxhc3RcbiAgICAvLyBtb2RhbCByZXN0b3Jlcy9jbG9zZXMuXG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudCA9IG5ldyBQZWVrTG9ja0NvbXBvbmVudCh0aGlzLm1vZGFsLmFwcCk7XG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudC5sb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGZsYXNoQmFyKGJhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGJhckVsLnJlbW92ZUNsYXNzKENzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uKTtcbiAgICAvLyBGb3JjZSBhIHJlZmxvdyBzbyByZS1hZGRpbmcgdGhlIGNsYXNzIHJlc3RhcnRzIHRoZSBvbmUtc2hvdCBmbGFzaCBvbiByYXBpZCByZXBlYXRlZCBibG9ja3MuXG4gICAgYmFyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgYmFyRWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJBdHRlbnRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVQZWVrTG9jaygpO1xuICAgIHRoaXMucmVtb3ZlTWluaW1pemVkQmFyKCk7XG4gICAgdGhpcy5pc01pbmltaXplZFZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRhaW5lckNsaWNrKCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIC8vIFdoaWxlIG1pbmltaXplZCB0aGUgY29udGFpbmVyIGlzIGhpZGRlbiwgc28gbm8gY2xpY2sgY2FuIHJlYWNoIGl0IOKAlCBidXQgYSBzeW50aGV0aWMgb25lIHN0aWxsIGNhbixcbiAgICAgIC8vIGFuZCBtaW5pbWl6aW5nIGFuIGFscmVhZHktbWluaW1pemVkIG1vZGFsIGlzIG1lYW5pbmdsZXNzLlxuICAgICAgdGhpcy5pc01pbmltaXplZFZhbHVlXG4gICAgICAvLyBBIGNsaWNrIHRoYXQgcGFzc2VkIHRocm91Z2ggdGhlIG1vZGFsIGl0c2VsZiBpcyBvcmRpbmFyeSBpbnRlcmFjdGlvbiB3aXRoIGl0cyBjb250ZW50LlxuICAgICAgLy8gYGNvbXBvc2VkUGF0aCgpYCAocmF0aGVyIHRoYW4gYG1vZGFsRWwuY29udGFpbnMoJGV2ZW50LnRhcmdldClgKSBuZWVkcyBubyBjYXN0IGFuZCBzdGF5cyBjb3JyZWN0XG4gICAgICAvLyBhY3Jvc3Mgd2luZG93cywgd2hlcmUgYW4gYGluc3RhbmNlb2YgSFRNTEVsZW1lbnRgIGNoZWNrIGFnYWluc3QgYW5vdGhlciByZWFsbSdzIGVsZW1lbnQgd291bGQgbm90LlxuICAgICAgfHwgJGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKHRoaXMubW9kYWwubW9kYWxFbClcbiAgICAgIC8vIEEgdGV4dCBzZWxlY3Rpb24gZHJhZ2dlZCBmcm9tIGluc2lkZSB0aGUgbW9kYWwgb3V0IG9udG8gdGhlIGJhY2tncm91bmQgbWFrZXMgdGhlIHJlc3VsdGluZ1xuICAgICAgLy8gYGNsaWNrYCBmaXJlIG9uIHRoZWlyIGNvbW1vbiBhbmNlc3RvciDigJQgYGNvbnRhaW5lckVsYC4gT2JzaWRpYW4gZG9lcyBub3QgZGlzbWlzcyBvbiB0aGF0IGdlc3R1cmUgKGl0c1xuICAgICAgLy8gb3duIGxpc3RlbmVyIHNpdHMgb24gYGJnRWxgLCB3aGljaCBpcyBuZXZlciB0aGUgdGFyZ2V0IGhlcmUpLCBzbyBuZWl0aGVyIGRvZXMgdGhpcy5cbiAgICAgIHx8ICRldmVudC50YXJnZXQgPT09IHRoaXMubW9kYWwuY29udGFpbmVyRWxcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXaGF0IGlzIGxlZnQgaXMgYSBjbGljayBvbiB0aGUgZGltbWVkIGJhY2tncm91bmQgaXRzZWxmLiBgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClgIGlzIHdoYXRcbiAgICAvLyBhY3R1YWxseSBrZWVwcyBpdCBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3MgYGJnRWxgIGxpc3RlbmVyIG9uIEJPVEggcGxhdGZvcm0gYnJhbmNoZXM7XG4gICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGFkZGl0aW9uYWxseSBzYXRpc2ZpZXMgdGhlIGBkZWZhdWx0UHJldmVudGVkYCBndWFyZCBpbiBgb25DbGlja091dHNpZGVgLlxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1pbmltaXplKCk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoT25DbG9zZShtb2RhbDogTW9kYWwpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlUGF0Y2hDb21wb25lbnQucmVnaXN0ZXJNZXRob2RQYXRjaDxNb2RhbCwgJ29uQ2xvc2UnPih7XG4gICAgICAkb2JqZWN0OiBtb2RhbCxcbiAgICAgIG1ldGhvZE5hbWU6ICdvbkNsb3NlJyxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSk6IHZvaWQgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1pbmltaXplZEJhcigpOiB2b2lkIHtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsPy5yZW1vdmUoKTtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBibG9ja0V2ZW50KCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgc2lnbmFsQmxvY2tlZEF0dGVtcHQoKTtcbn1cblxuZnVuY3Rpb24gYmxvY2tPckZhbGxiYWNrKG1vZGFsOiBNb2RhbCwgZmFsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgaWYgKHNob3VsZEJsb2NrT3Blbihtb2RhbCkpIHtcbiAgICBzaWduYWxCbG9ja2VkQXR0ZW1wdCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZhbGxiYWNrKCk7XG59XG5cbmZ1bmN0aW9uIGZsYXNoTWluaW1pemVkQmFycygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBlbnRyeS5mbGFzaCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWluaW1pemVkSW5uZXJNb2RhbChtb2RhbDogTW9kYWwpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuaW5uZXJNb2RhbCA9PT0gbW9kYWwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQZWVrQWxsb3dlZEtleSgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gTmF2aWdhdGlvbiBtb3ZlcyB0aGUgY3Vyc29yL3Njcm9sbHMgKGFsbG93ZWQpLCBidXQgU2hpZnQrbmF2aWdhdGlvbiBleHRlbmRzIHRoZSBzZWxlY3Rpb24gKG5vdFxuICAvLyBuZWVkZWQgZm9yIGluc3BlY3Rpb24pLCBzbyBpdCBpcyBibG9ja2VkLiBCYXJlIG1vZGlmaWVyIHByZXNzZXMgcGFzcyB0aHJvdWdoIG9uIHRoZWlyIG93bi5cbiAgcmV0dXJuIE5BVklHQVRJT05fS0VZUy5oYXMoJGV2ZW50LmtleSkgPyAhJGV2ZW50LnNoaWZ0S2V5IDogTU9ESUZJRVJfS0VZUy5oYXMoJGV2ZW50LmtleSk7XG59XG5cbmZ1bmN0aW9uIGlzUGVla0xvY2tlZCgpOiBib29sZWFuIHtcbiAgLy8gRHJvcCBlbnRyaWVzIHdob3NlIGJhciBoYXMgbGVmdCB0aGUgRE9NIHdpdGhvdXQgYSByZXN0b3JlKCkgb3IgY2xvc2UoKS5cbiAgLy8gQSB0ZXN0IHRlYXJkb3duIHRoYXQgZW1wdGllcyB0aGUgYm9keSBpcyB0aGUgdHlwaWNhbCBjYXVzZTsgdGhpcyBrZWVwcyBhIHN0YWxlIGVudHJ5IGZyb20gbG9ja2luZy5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBpZiAoIWVudHJ5LmJhckVsLmlzQ29ubmVjdGVkKSB7XG4gICAgICBwZWVrTG9ja0VudHJpZXMuZGVsZXRlKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGVla0xvY2tFbnRyaWVzLnNpemUgPiAwO1xufVxuXG5mdW5jdGlvbiBzaG91bGRCbG9ja09wZW4obW9kYWw6IE1vZGFsKTogYm9vbGVhbiB7XG4gIC8vIEEgbW9kYWwncyBvd24gcmUtb3BlbiBpcyBuZXZlciBibG9ja2VkIOKAlCBvdGhlcndpc2UgYSBtaW5pbWl6ZWQgbW9kYWwgY291bGQgbm90IHJlc3RvcmUvcmUtb3BlblxuICAvLyBpdHNlbGYuIEV2ZXJ5IE9USEVSIG1vZGFsIG9wZW4gaXMgYmxvY2tlZCB3aGlsZSBhbnkgbW9kYWwgaXMgbWluaW1pemVkICh0aGUgcGVlay1vbmx5IGxvY2spLlxuICByZXR1cm4gaXNQZWVrTG9ja2VkKCkgJiYgIWlzTWluaW1pemVkSW5uZXJNb2RhbChtb2RhbCk7XG59XG5cbmZ1bmN0aW9uIHNpZ25hbEJsb2NrZWRBdHRlbXB0KCk6IHZvaWQge1xuICBmbGFzaE1pbmltaXplZEJhcnMoKTtcbiAgYmVlcGVyLmJlZXAoKTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NLZXlkb3duV2hpbGVQZWVrTG9ja2VkKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICBpZiAoIWlzUGVla0xvY2tlZCgpIHx8IGlzUGVla0FsbG93ZWRLZXkoJGV2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGJsb2NrRXZlbnQoJGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NXaGlsZVBlZWtMb2NrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICBpZiAoIWlzUGVla0xvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYmxvY2tFdmVudCgkZXZlbnQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtEQSxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUywyQkFBMkI7QUFFcEMsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxrQkFBa0Isb0JBQUks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
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvbWluaW1pemFibGUtbW9kYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgd3JhcHBlciB0aGF0IG1ha2VzIGFueSBPYnNpZGlhbiB7QGxpbmsgTW9kYWx9IG1pbmltaXphYmxlIHRvIGEgZmxvYXRpbmcgYmFyIOKAlCB3aXRob3V0IGJyZWFraW5nIHRoZVxuICogbW9kYWwncyBibG9ja2luZyBjb250cmFjdC5cbiAqXG4gKiBPYnNpZGlhbidzIHtAbGluayBNb2RhbH0gaXMgYmxvY2tpbmc6IHdoaWxlIGl0IGlzIG9wZW4gdGhlIHJlc3Qgb2YgdGhlIGFwcCBpcyBtZWFudCB0byBiZSBpbmVydCB1bnRpbFxuICogdGhlIG1vZGFsIGlzIGRpc21pc3NlZC4ge0BsaW5rIE1pbmltaXphYmxlTW9kYWx9IHdyYXBzIGFueSBtb2RhbCBpbnN0YW5jZSAocGxhaW4gYE1vZGFsYCxcbiAqIGBGdXp6eVN1Z2dlc3RNb2RhbGAsIHRoZSBsaWJyYXJ5J3MgYE1vZGFsQmFzZWAsIHlvdXIgb3duIHN1YmNsYXNzLCDigKYg4oCUIGluY2x1ZGluZyBtb2RhbHMgeW91IGRvIG5vdFxuICogb3duKSBhbmQgYWRkcyBhIG1pbmltaXplIGJ1dHRvbi4gTWluaW1pemluZyBoaWRlcyB0aGUgbW9kYWwgYW5kIGl0cyBibG9ja2luZyBiYWNrZHJvcCBhbmQgc2hvd3MgYVxuICogc21hbGwgZmxvYXRpbmcgYmFyIHdpdGggYSByZXN0b3JlIGJ1dHRvbiAoYW5kLCBieSBkZWZhdWx0LCBhIENhbmNlbCBidXR0b24gdGhhdCBjbG9zZXMgdGhlIHdyYXBwZWRcbiAqIG1vZGFsIOKAlCBwYXNzIGB7IHNob3VsZFNob3dDYW5jZWxCdXR0b246IGZhbHNlIH1gIHRvIGhpZGUgaXQpLCBzbyB0aGUgdXNlciBjYW4gcGVlayBhdCB0aGVcbiAqIG5vdGVzL2ZvbGRlcnMgdGhlIG9wZXJhdGlvbiBpbnZvbHZlcyDigJQgYnV0IHRoZSBtb2RhbCBpcyBOT1QgZGlzbWlzc2VkLCBzbyBpdHMgYmxvY2tpbmcgY29udHJhY3QgbXVzdCBiZSBwcmVzZXJ2ZWQuXG4gKlxuICogVG8ga2VlcCB0aGF0IGNvbnRyYWN0IHdoaWxlIG1pbmltaXplZCwgdGhlIHdyYXBwZXIgcHV0cyB0aGUgYXBwIGludG8gYSAqKnBlZWstb25seSBsb2NrKio6IHRoZSB1c2VyXG4gKiBtYXkgbW91c2UtY2xpY2sgYW5kIHNjcm9sbCB0byBpbnNwZWN0IGNvbnRlbnQsIGJ1dCBjYW5ub3Qgc3RhcnQgYW55dGhpbmcgbmV3LiBXaGlsZSBhbnkgbW9kYWwgaXNcbiAqIG1pbmltaXplZCB0aGUgd3JhcHBlcjpcbiAqIC0gYmxvY2tzIHRoZSBrZXlib2FyZCAodHlwaW5nLCBob3RrZXlzLCB0aGUgY29tbWFuZC1wYWxldHRlIHNob3J0Y3V0KSxcbiAqIC0gYmxvY2tzIHRoZSByaWdodC1jbGljayBjb250ZXh0IG1lbnUsIGFuZFxuICogLSBibG9ja3Mgb3BlbmluZyBhbnkgb3RoZXIgbW9kYWwgKGEgcmUtZmlyZWQgY29tbWFuZCwgdGhlIGNvbW1hbmQgcGFsZXR0ZSwgc2V0dGluZ3MsIOKApikuXG4gKlxuICogQSBibG9ja2VkIGF0dGVtcHQgZmxhc2hlcyB0aGUgZmxvYXRpbmcgYmFyIGFuZCBiZWVwcyBzbyB0aGUgdXNlciBzZWVzIChhbmQgaGVhcnMpIHdoeSBub3RoaW5nXG4gKiBoYXBwZW5lZC4gUmVzdG9yaW5nIChvciB0aGUgbW9kYWwgY2xvc2luZykgbGlmdHMgdGhlIGxvY2suIFRoaXMgcHJldmVudHMsIGZvciBleGFtcGxlLCBtaW5pbWl6aW5nIGFcbiAqIFwibWVyZ2UgZm9sZGVyXCIgcGlja2VyIGFuZCB0aGVuIGZpcmluZyB0aGUgc2FtZSBjb21tYW5kIGFnYWluIHRvIHN0YWNrIHNldmVyYWwgY29uY3VycmVudCBtZXJnZXMuXG4gKlxuICogVGhlIHdyYXBwZXIgcmV1c2VzIHRoZSBtb2RhbCdzIG93biB0aXRsZSAoYHRpdGxlRWxgKSBhcyB0aGUgbWluaW1pemVkIGJhciBsYWJlbCwgc28gc2V0IHRoZSB0aXRsZVxuICogdGhlIHVzdWFsIHdheSAoYG1vZGFsLnNldFRpdGxlKC4uLilgKS4gUmVuZGVyIGFyYml0cmFyeSBjb250ZW50IGludG8ge0BsaW5rIE1vZGFsLmNvbnRlbnRFbH0sXG4gKiBpbmNsdWRpbmcgY2xpY2thYmxlIG5vdGUgbGlua3MgcHJvZHVjZWQgYnkgYHJlbmRlckludGVybmFsTGlua2AgZnJvbVxuICogYEBtbmFvdW1vdi9vYnNpZGlhbi1saWIvbWFya2Rvd25gOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBtb2RhbCA9IG5ldyBNeU1vZGFsKGFwcCk7XG4gKiBtb2RhbC5zZXRUaXRsZSgnTWVyZ2luZyBub3RlcycpO1xuICogbW9kYWwuY29udGVudEVsLmFwcGVuZENoaWxkKGF3YWl0IHJlbmRlckludGVybmFsTGluayh7IGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlOiBmaWxlIH0pKTtcbiAqXG4gKiBjb25zdCBtaW5pbWl6YWJsZSA9IG5ldyBNaW5pbWl6YWJsZU1vZGFsKG1vZGFsKTtcbiAqIG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKTtcbiAqIG1pbmltaXphYmxlLm1pbmltaXplKCk7IC8vIGEgZmxvYXRpbmcgYmFyIG9mZmVycyBcInJlc3RvcmVcIjsgdGhlIGFwcCBpcyBwZWVrLW9ubHkgdW50aWwgcmVzdG9yZWRcbiAqIGBgYFxuICpcbiAqIFRoZSB3cmFwcGVkIG1vZGFsIGNhbiBzdGlsbCBiZSBjbG9zZWQgbm9ybWFsbHk7IHRoZSBmbG9hdGluZyBiYXIgaXMgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHdoZW5cbiAqIHRoZSBtb2RhbCBjbG9zZXMgKGV2ZW4gaWYgaXQgaXMgY2xvc2VkIHdoaWxlIG1pbmltaXplZCkuXG4gKlxuICogQ2xpY2tpbmcgdGhlIGRpbW1lZCBiYWNrZ3JvdW5kIGJlaGluZCB0aGUgbW9kYWwgKiptaW5pbWl6ZXMqKiBpdCByYXRoZXIgdGhhbiBjbG9zaW5nIGl0LCBzbyBhIHN0cmF5XG4gKiBjbGljayBwYXN0IHRoZSBkaWFsb2cgbm8gbG9uZ2VyIGNhbmNlbHMgdGhlIG9wZXJhdGlvbiB0aGUgbW9kYWwgaXMgcnVubmluZyDigJQgcGFzc1xuICogYHsgc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZTogZmFsc2UgfWAgdG8ga2VlcCBPYnNpZGlhbidzIG5hdGl2ZSBjbG9zZS1vbi1iYWNrZ3JvdW5kLWNsaWNrLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBCZWVwZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYmVlcGVyJztcbmltcG9ydCB7XG4gIE1vZGFsLFxuICBzZXRJY29uLFxuICBzZXRUb29sdGlwXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hbGwtd2luZG93cy1ldmVudC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb25rZXktYXJvdW5kLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgTUlOSU1JWkVfSUNPTl9JRCA9ICdtaW51cyc7XG5jb25zdCBSRVNUT1JFX0lDT05fSUQgPSAnbWF4aW1pemUtMic7XG5jb25zdCBDQU5DRUxfSUNPTl9JRCA9ICd4JztcblxuLy8gTmF2aWdhdGlvbiBrZXlzIHBhc3MgdGhyb3VnaCB3aGlsZSBtaW5pbWl6ZWQgc28gdGhlIHVzZXIgY2FuIG1vdmUgdGhlIGN1cnNvciBhbmQgc2Nyb2xsIHRvIHJlYWQuXG4vLyBOb25lIG9mIHRoZW0gbXV0YXRlIHRoZSBkb2N1bWVudCDigJQgdGV4dCBjaGFuZ2VzIGFyZSBjYXVnaHQgc2VwYXJhdGVseSBieSB0aGUgYGJlZm9yZWlucHV0YCBndWFyZC5cbi8vIFNoaWZ0K25hdmlnYXRpb24gaXMgYmxvY2tlZCwgdGhvdWdoLCBzaW5jZSBpdCBleHRlbmRzIHRoZSBzZWxlY3Rpb24gdGhhdCBpbnNwZWN0aW9uIGRvZXMgbm90IG5lZWQuXG5jb25zdCBOQVZJR0FUSU9OX0tFWVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnQXJyb3dEb3duJyxcbiAgJ0Fycm93TGVmdCcsXG4gICdBcnJvd1JpZ2h0JyxcbiAgJ0Fycm93VXAnLFxuICAnRW5kJyxcbiAgJ0hvbWUnLFxuICAnUGFnZURvd24nLFxuICAnUGFnZVVwJ1xuXSk7XG5cbi8vIEEgYmFyZSBtb2RpZmllciBwcmVzcyBkb2VzIG5vdGhpbmcgb24gaXRzIG93biwgc28gaXQgcGFzc2VzIHRocm91Z2ggdGhlIGxvY2suXG4vLyBUaGlzIGF2b2lkcyBhIHNwdXJpb3VzIGZsYXNoL2JlZXAgd2hpbGUgY29tcG9zaW5nIGEgc2hvcnRjdXQ7IHRoZSBzaG9ydGN1dCdzIGNvbW1hbmQga2V5IGlzIGJsb2NrZWQuXG5jb25zdCBNT0RJRklFUl9LRVlTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgJ0FsdCcsXG4gICdDb250cm9sJyxcbiAgJ01ldGEnLFxuICAnU2hpZnQnXG5dKTtcblxuLyoqXG4gKiBBIHJlZ2lzdGVyZWQgZW50cnkgZm9yIGEgY3VycmVudGx5LW1pbmltaXplZCBtb2RhbC4gVGhlIHNoYXJlZCBwZWVrLW9ubHkgbG9jayB1c2VzIGl0IHRvIGtub3cgYVxuICogbW9kYWwgaXMgbWluaW1pemVkLCB0byBsZWF2ZSB0aGF0IG1vZGFsJ3Mgb3duIHJlLW9wZW5zIGFsb25lLCBhbmQgdG8gZmxhc2ggaXRzIGJhciBvbiBhIGJsb2NrZWRcbiAqIGF0dGVtcHQuXG4gKi9cbmludGVyZmFjZSBQZWVrTG9ja0VudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZyBiYXIgZWxlbWVudC4gVXNlZCB0byBkZXRlY3QgYSBzdGFsZSBlbnRyeSAoaXRzIGJhciBoYXMgbGVmdCB0aGUgRE9NKSBzbyBpdCBjYW4gYmVcbiAgICogcHJ1bmVkIGFuZCBuZXZlciBrZWVwIHRoZSBhcHAgbG9ja2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBGbGFzaGVzIHRoZSBmbG9hdGluZyBiYXIgdG8gc2lnbmFsIGEgYmxvY2tlZCBhdHRlbXB0LlxuICAgKi9cbiAgcmVhZG9ubHkgZmxhc2g6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB3cmFwcGVkIG1vZGFsIGluc3RhbmNlLCBzbyBpdHMgb3duIGBvcGVuKClgIGlzIG5ldmVyIGJsb2NrZWQgYnkgdGhlIGxvY2suXG4gICAqL1xuICByZWFkb25seSBpbm5lck1vZGFsOiBNb2RhbDtcbn1cblxuY29uc3QgcGVla0xvY2tFbnRyaWVzID0gbmV3IFNldDxQZWVrTG9ja0VudHJ5PigpO1xuY29uc3QgYmVlcGVyID0gbmV3IEJlZXBlcigpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBNaW5pbWl6YWJsZU1vZGFsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5pbWl6YWJsZU1vZGFsQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgdGhlIGRpbW1lZCBiYWNrZ3JvdW5kIGJlaGluZCB0aGUgbW9kYWwgbWluaW1pemVzIGl0IGluc3RlYWQgb2YgY2xvc2luZyBpdC5cbiAgICogT2JzaWRpYW4ncyBuYXRpdmUgYmVoYXZpb3IgaXMgdG8gY2xvc2UsIHdoaWNoIGNhbmNlbHMgd2hhdGV2ZXIgb3BlcmF0aW9uIHRoZSBtb2RhbCBpcyBydW5uaW5nO1xuICAgKiBtaW5pbWl6aW5nIGtlZXBzIHRoYXQgb3BlcmF0aW9uIGFsaXZlIHNvIHRoZSB1c2VyIGNhbiBwZWVrIGF0IHRoZSBpbnZvbHZlZCBub3RlcyBhbmQgY29tZSBiYWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZE1pbmltaXplT25DbGlja091dHNpZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtaW5pbWl6ZWQgYmFyIHNob3dzIGEgQ2FuY2VsIGJ1dHRvbiB0aGF0IGNsb3NlcyB0aGUgd3JhcHBlZCBtb2RhbC4gQ2xvc2luZyBsZXRzIHRoZVxuICAgKiB3cmFwcGVkIG1vZGFsJ3Mgb3duIGBvbkNsb3NlYCBkZWZpbmUgd2hhdCBcImNhbmNlbFwiIG1lYW5zIChlLmcuIHJlbGVhc2luZyBhIGhlbGQgbG9jaykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0NhbmNlbEJ1dHRvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIHBlZWstb25seSBsb2NrJ3MgYG9wZW5gIHBhdGNoZXMgd2hpbGUgYXQgbGVhc3Qgb25lIG1vZGFsIGlzIG1pbmltaXplZC4gQmVpbmcgYVxuICoge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudH0sIGJvdGggcGF0Y2hlcyBhcmUgdG9ybiBkb3duIGF1dG9tYXRpY2FsbHkgb24gYHVubG9hZGAsIHNvIHRoZXkgZXhpc3RcbiAqIG9ubHkgd2hpbGUgdGhlIGxvY2sgaXMgYWN0aXZlLiBBIG1pbmltaXplZCBtb2RhbCdzIG93biByZS1vcGVuIGlzIGFsd2F5cyBhbGxvd2VkIChzZWVcbiAqIHtAbGluayBzaG91bGRCbG9ja09wZW59KTsgZXZlcnkgb3RoZXIgbW9kYWwgb3BlbiBpcyBibG9ja2VkIGFuZCBzaWduYWxzIGEgZmxhc2ggKyBiZWVwLlxuICovXG5jbGFzcyBQZWVrTG9ja0NvbXBvbmVudCBleHRlbmRzIE1vbmtleUFyb3VuZENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCB3aG9zZSBzZXR0aW5ncyBtb2RhbCBpcyBndWFyZGVkIGFuZCB3aG9zZSB3aW5kb3dzIHN1cHByZXNzIGlucHV0IHdoaWxlIGxvY2tlZC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGBvcGVuYCBwYXRjaGVzIGFuZCB0aGUgaW5wdXQgc3VwcHJlc3NvcnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgLy8gQmxvY2sgb3BlbmluZyBhbnkgT1RIRVIgbW9kYWwgd2hpbGUgYSBtb2RhbCBpcyBtaW5pbWl6ZWQgKHRoZSBjb21tYW5kIHBhbGV0dGUsIGEgcmUtZmlyZWRcbiAgICAvLyBjb21tYW5kLCBhbm90aGVyIHBsdWdpbiBtb2RhbCwg4oCmKS5cbiAgICB0aGlzLnJlZ2lzdGVyTWV0aG9kUGF0Y2g8TW9kYWwsICdvcGVuJz4oe1xuICAgICAgJG9iamVjdDogTW9kYWwucHJvdG90eXBlLFxuICAgICAgbWV0aG9kTmFtZTogJ29wZW4nLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pOiB2b2lkID0+IHtcbiAgICAgICAgYmxvY2tPckZhbGxiYWNrKG9yaWdpbmFsVGhpcywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gT2JzaWRpYW4ncyBTZXR0aW5ncyBpcyBhICpwb3BvdXQqIG1vZGFsOiBvbiBkZXNrdG9wIGl0cyBvd24gYG9wZW4oKWAgZmlyc3QgY3JlYXRlcyBhIHNlcGFyYXRlIE9TXG4gICAgLy8gd2luZG93ICh2aWEgYHNob3VsZFVzZVBvcG91dCgpYC9gZ2V0UG9wb3V0T3B0aW9ucygpYCkgYW5kIG9ubHkgVEhFTiBkZWxlZ2F0ZXMgdG9cbiAgICAvLyBgTW9kYWwucHJvdG90eXBlLm9wZW5gIHRvIHJlbmRlciB0aGUgYWN0aXZlIHRhYiBpbnRvIGl0LiBHdWFyZGluZyBvbmx5IGBNb2RhbC5wcm90b3R5cGUub3BlbmBcbiAgICAvLyB0aGVyZWZvcmUgYmxvY2tzIHRoZSByZW5kZXIgYnV0IGxlYXZlcyBhbiBlbXB0eSBzZXR0aW5ncyB3aW5kb3cgYmVoaW5kIOKAlCB0aGUgcmVwb3J0ZWQgYmFkIFVYLlxuICAgIC8vIEd1YXJkaW5nIHRoZSBzZXR0aW5ncyBtb2RhbCdzIG93biBgb3BlbigpYCBibG9ja3MgaXQgKmJlZm9yZSogdGhlIHdpbmRvdyBpcyBjcmVhdGVkLlxuICAgIHRoaXMucmVnaXN0ZXJNZXRob2RQYXRjaDxBcHBbJ3NldHRpbmcnXSwgJ29wZW4nPih7XG4gICAgICAkb2JqZWN0OiB0aGlzLmFwcC5zZXR0aW5nLFxuICAgICAgbWV0aG9kTmFtZTogJ29wZW4nLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pOiB2b2lkID0+IHtcbiAgICAgICAgYmxvY2tPckZhbGxiYWNrKG9yaWdpbmFsVGhpcywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3VwcHJlc3MgdGhlIGtleWJvYXJkLCBlZGl0b3IgbXV0YXRpb24sIGFuZCB0aGUgY29udGV4dCBtZW51IGFjcm9zcyBBTEwgd2luZG93cyDigJQgdGhlIG1haW4gd2luZG93XG4gICAgLy8gYW5kIGV2ZXJ5IGV4aXN0aW5nL2Z1dHVyZSBwb3BvdXQg4oCUIHNvIHRoZSBsb2NrIGhvbGRzIHdoZXJldmVyIHRoZSB1c2VyJ3MgZm9jdXMgaXMsIG5vdCBvbmx5IGluXG4gICAgLy8gdGhlIHdpbmRvdyB0aGF0IG93bnMgdGhlIG1pbmltaXplZCBtb2RhbC4gQ2FwdHVyZS1waGFzZSBsaXN0ZW5lcnMgcnVuIGJlZm9yZSBPYnNpZGlhbidzIG93blxuICAgIC8vIGRvY3VtZW50L2VsZW1lbnQgaGFuZGxlcnMgKGluY2x1ZGluZyBDb2RlTWlycm9yJ3MpLCBzbyBgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClgIGluIHRoZVxuICAgIC8vIHN1cHByZXNzb3JzIGtlZXBzIGEgYmxvY2tlZCBldmVudCBmcm9tIGV2ZXIgcmVhY2hpbmcgdGhlbS4gYGtleWRvd25gIGxldHMgbmF2aWdhdGlvbiBrZXlzIHRocm91Z2hcbiAgICAvLyAoc2VlIGBpc1BlZWtBbGxvd2VkS2V5YCkgYnV0IGJsb2NrcyBjb21tYW5kIGhvdGtleXM7IGBiZWZvcmVpbnB1dGAgYmxvY2tzIGFsbCBlZGl0b3IgbXV0YXRpb247XG4gICAgLy8gYGNvbnRleHRtZW51YCBibG9ja3MgdGhlIHJpZ2h0LWNsaWNrIG1lbnUuXG4gICAgY29uc3QgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50KHRoaXMuYXBwKSk7XG4gICAgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsV2luZG93c0RvbUV2ZW50KHtcbiAgICAgIGNhbGxiYWNrOiBzdXBwcmVzc0tleWRvd25XaGlsZVBlZWtMb2NrZWQsXG4gICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgIHR5cGU6ICdrZXlkb3duJ1xuICAgIH0pO1xuICAgIGFsbFdpbmRvd3NFdmVudENvbXBvbmVudC5yZWdpc3RlckFsbFdpbmRvd3NEb21FdmVudCh7XG4gICAgICBjYWxsYmFjazogc3VwcHJlc3NXaGlsZVBlZWtMb2NrZWQsXG4gICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgIHR5cGU6ICdiZWZvcmVpbnB1dCdcbiAgICB9KTtcbiAgICBhbGxXaW5kb3dzRXZlbnRDb21wb25lbnQucmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnQoe1xuICAgICAgY2FsbGJhY2s6IHN1cHByZXNzV2hpbGVQZWVrTG9ja2VkLFxuICAgICAgb3B0aW9uczogeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICB0eXBlOiAnY29udGV4dG1lbnUnXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIHtAbGluayBNb2RhbH0gaW5zdGFuY2UgdG8gbWFrZSBpdCBtaW5pbWl6YWJsZSB0byBhIHNtYWxsIGZsb2F0aW5nIGJhciBhbmQgcmVzdG9yYWJsZS4gV2hpbGVcbiAqIG1pbmltaXplZCB0aGUgYXBwIGlzIHB1dCBpbnRvIGEgcGVlay1vbmx5IGxvY2sgKGtleWJvYXJkLCBjb250ZXh0IG1lbnUsIGFuZCBvcGVuaW5nIG90aGVyIG1vZGFscyBhcmVcbiAqIGJsb2NrZWQpIHNvIHRoZSBtb2RhbCdzIGJsb2NraW5nIGNvbnRyYWN0IGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNb2RhbCAtIFRoZSB0eXBlIG9mIHRoZSB3cmFwcGVkIG1vZGFsLlxuICovXG5leHBvcnQgY2xhc3MgTWluaW1pemFibGVNb2RhbDxUTW9kYWwgZXh0ZW5kcyBNb2RhbD4ge1xuICAvKipcbiAgICogVGhlIHdyYXBwZWQgbW9kYWwuIE9wZW4sIGNsb3NlLCBhbmQgcG9wdWxhdGUgaXQgYXMgdXN1YWwgKGUuZy4gYG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKWApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsOiBUTW9kYWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1vZGFsIGlzIGN1cnJlbnRseSBtaW5pbWl6ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbW9kYWwgaXMgY3VycmVudGx5IG1pbmltaXplZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTWluaW1pemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTWluaW1pemVkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgd3JhcHBlZCBtb2RhbCdzIGBvbkNsb3NlYCB0byBydW4gY2xlYW51cC4gUGVyc2lzdHMgZm9yIHRoZSB3cmFwcGVyJ3Mgd2hvbGUgbGlmZSAoYVxuICAgKiBtb2RhbCBjYW4gYmUgcmVvcGVuZWQsIHNvIHRoZSBwYXRjaCBtdXN0IHN1cnZpdmUgZWFjaCBjbG9zZSksIGhlbmNlIGEgZGVkaWNhdGVkIGNvbXBvbmVudCB0aGF0IGlzXG4gICAqIG5ldmVyIHVubG9hZGVkIOKAlCBkaXN0aW5jdCBmcm9tIGBwZWVrTG9ja0NvbXBvbmVudGAsIHdob3NlIHBhdGNoZXMgbGl2ZSBvbmx5IHdoaWxlIG1pbmltaXplZC5cbiAgICogRXhwb3NlZCB0byBzdWJjbGFzc2VzIHNvIHRoZXkgY2FuIHJlZ2lzdGVyIGFkZGl0aW9uYWwgbGlmZXRpbWUtc2NvcGVkIHBhdGNoZXMgb24gdGhlIHdyYXBwZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xvc2VQYXRjaENvbXBvbmVudCA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcblxuICBwcml2YXRlIGlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbWl6ZUJ1dHRvbkVsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBtaW5pbWl6ZWRCYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0NvbXBvbmVudDogbnVsbCB8IFBlZWtMb2NrQ29tcG9uZW50ID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0VudHJ5OiBudWxsIHwgUGVla0xvY2tFbnRyeSA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzaG91bGRTaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXcmFwcyB0aGUgZ2l2ZW4gbW9kYWwsIGFkZGluZyBhIG1pbmltaXplIGJ1dHRvbiBhbmQgd2lyaW5nIHVwIGNsZWFudXAgb24gY2xvc2UuXG4gICAqXG4gICAqIEBwYXJhbSBtb2RhbCAtIFRoZSBtb2RhbCBpbnN0YW5jZSB0byBtYWtlIG1pbmltaXphYmxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG1pbmltaXplZCBiYXIuIFNlZSB7QGxpbmsgTWluaW1pemFibGVNb2RhbENvbnN0cnVjdG9yT3B0aW9uc30uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobW9kYWw6IFRNb2RhbCwgb3B0aW9uczogTWluaW1pemFibGVNb2RhbENvbnN0cnVjdG9yT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5tb2RhbCA9IG1vZGFsO1xuICAgIHRoaXMuc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZSA9IG9wdGlvbnMuc2hvdWxkTWluaW1pemVPbkNsaWNrT3V0c2lkZSA/PyB0cnVlO1xuICAgIHRoaXMuc2hvdWxkU2hvd0NhbmNlbEJ1dHRvbiA9IG9wdGlvbnMuc2hvdWxkU2hvd0NhbmNlbEJ1dHRvbiA/PyB0cnVlO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobW9kYWwuY29udGFpbmVyRWwsIFtDc3NDbGFzcy5NaW5pbWl6YWJsZU1vZGFsXSk7XG4gICAgdGhpcy5taW5pbWl6ZUJ1dHRvbkVsID0gdGhpcy5jcmVhdGVNaW5pbWl6ZUJ1dHRvbigpO1xuICAgIGlmICh0aGlzLnNob3VsZE1pbmltaXplT25DbGlja091dHNpZGUpIHtcbiAgICAgIC8vIE9ic2lkaWFuIGRpc21pc3NlcyBhIG1vZGFsIGZyb20gYSBsaXN0ZW5lciBpdCByZWdpc3RlcnMgb24gYGJnRWxgIElOIFRIRSBgTW9kYWxgIENPTlNUUlVDVE9SIOKAlFxuICAgICAgLy8gb24gbWFjT1MgZGVza3RvcCB0aGF0IGxpc3RlbmVyIGNhbGxzIGBjbG9zZSgpYCBkaXJlY3RseSAobm8gb3ZlcnJpZGFibGUgbWV0aG9kLCBub1xuICAgICAgLy8gYGRlZmF1bHRQcmV2ZW50ZWRgIGd1YXJkKSwgc28gbmVpdGhlciBvdmVycmlkaW5nIGBvbkNsaWNrT3V0c2lkZWAgbm9yIGBwcmV2ZW50RGVmYXVsdCgpYCBhbG9uZSBjYW5cbiAgICAgIC8vIHN0b3AgaXQuIEF0IHRoZSB0YXJnZXQgcGhhc2UgdGhlIERPTSBpbnZva2VzIGxpc3RlbmVycyBpbiByZWdpc3RyYXRpb24gb3JkZXIgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAgIC8vIGNhcHR1cmUgZmxhZywgYW5kIE9ic2lkaWFuIHJlZ2lzdGVyZWQgZmlyc3QsIHNvIHRoZSBvbmx5IHdheSB0byBydW4gZWFybGllciBpcyB0byBjYXB0dXJlIG9uIHRoZVxuICAgICAgLy8gUEFSRU5UIGVsZW1lbnQuIEhlbmNlOiBjYXB0dXJlLXBoYXNlIGBjbGlja2Agb24gYGNvbnRhaW5lckVsYC5cbiAgICAgIG1vZGFsLmNvbnRhaW5lckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrKCRldmVudCk7XG4gICAgICB9LCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2VQYXRjaENvbXBvbmVudC5sb2FkKCk7XG4gICAgdGhpcy5wYXRjaE9uQ2xvc2UobW9kYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbmltaXplcyB0aGUgbW9kYWw6IGhpZGVzIHRoZSBtb2RhbCBhbmQgaXRzIGJhY2tkcm9wLCBzaG93cyBhIGZsb2F0aW5nIGJhciB3aXRoIGEgcmVzdG9yZSBidXR0b24sXG4gICAqIGFuZCBwdXRzIHRoZSBhcHAgaW50byB0aGUgcGVlay1vbmx5IGxvY2suIEEgbm8tb3AgaWYgdGhlIG1vZGFsIGlzIGFscmVhZHkgbWluaW1pemVkLlxuICAgKi9cbiAgcHVibGljIG1pbmltaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTWluaW1pemVkVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTWluaW1pemVkVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMubWluaW1pemVCdXR0b25FbC5oaWRlKCk7XG4gICAgdGhpcy5tb2RhbC5jb250YWluZXJFbC5oaWRlKCk7XG4gICAgLy8gVGhlIG1vZGFsIHN0YXlzIG9wZW4gd2hpbGUgbWluaW1pemVkLCBzbyBpdHMga2V5bWFwIHNjb3BlIGlzIHBvcHBlZCB0byByZWxlYXNlIHRoZSBmb2N1cyB0cmFwLlxuICAgIC8vIFJlc3RvcmluZyByZS1wdXNoZXMgaXQuIEFuIGFjdGl2ZSB0cmFwIHdvdWxkIHN0ZWFsIGZvY3VzIGJhY2sgdG8gdGhlIGhpZGRlbiBtb2RhbCwgYmxvY2tpbmcgdGhlXG4gICAgLy8gbW91c2UtZHJpdmVuIGluc3BlY3Rpb24gKGNsaWNraW5nIG5vdGVzLCBzY3JvbGxpbmcpIHRoYXQgbWluaW1pemUgZXhpc3RzIHRvIGFsbG93LlxuICAgIC8vIEtleWJvYXJkIGlucHV0IHJlbWFpbnMgYmxvY2tlZCBieSB0aGUgcGVlay1vbmx5IGxvY2ssIHNvIHJlbGVhc2luZyB0aGUgdHJhcCBrZWVwcyB0aGUgYXBwIGluZXJ0LlxuICAgIHRoaXMubW9kYWwuYXBwLmtleW1hcC5wb3BTY29wZSh0aGlzLm1vZGFsLnNjb3BlKTtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsID0gdGhpcy5jcmVhdGVNaW5pbWl6ZWRCYXIoKTtcbiAgICB0aGlzLmVuYWJsZVBlZWtMb2NrKHRoaXMubWluaW1pemVkQmFyRWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIHRoZSBtb2RhbCBmcm9tIHRoZSBtaW5pbWl6ZWQgc3RhdGUsIHJlbW92aW5nIHRoZSBmbG9hdGluZyBiYXIgYW5kIGxpZnRpbmcgdGhlIHBlZWstb25seVxuICAgKiBsb2NrLiBBIG5vLW9wIGlmIHRoZSBtb2RhbCBpcyBub3QgbWluaW1pemVkLlxuICAgKi9cbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTWluaW1pemVkVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVQZWVrTG9jaygpO1xuICAgIHRoaXMucmVtb3ZlTWluaW1pemVkQmFyKCk7XG4gICAgLy8gUmUtcHVzaCB0aGUgc2NvcGUgcG9wcGVkIGluIG1pbmltaXplKCkgc28gdGhlIHJlc3RvcmVkIG1vZGFsIGJsb2NrcyB0aGUgYXBwIGFnYWluIChmb2N1cyB0cmFwXG4gICAgLy8gKyBFc2NhcGUgY2FwdHVyZSkuXG4gICAgdGhpcy5tb2RhbC5hcHAua2V5bWFwLnB1c2hTY29wZSh0aGlzLm1vZGFsLnNjb3BlKTtcbiAgICB0aGlzLm1vZGFsLmNvbnRhaW5lckVsLnNob3coKTtcbiAgICB0aGlzLm1pbmltaXplQnV0dG9uRWwuc2hvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNaW5pbWl6ZUJ1dHRvbigpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uRWwgPSB0aGlzLm1vZGFsLm1vZGFsRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgY2xzOiBDc3NDbGFzcy5NaW5pbWl6ZUJ1dHRvbiB9KTtcbiAgICBzZXRJY29uKGJ1dHRvbkVsLCBNSU5JTUlaRV9JQ09OX0lEKTtcbiAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMubWluaW1pemUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnV0dG9uRWw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1pbmltaXplZEJhcigpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYmFyRWwgPSB0aGlzLm1vZGFsLmNvbnRhaW5lckVsLm93bmVyRG9jdW1lbnQuYm9keS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJhckVsLCBbQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJdKTtcbiAgICBiYXJFbC5jcmVhdGVTcGFuKHtcbiAgICAgIGNsczogQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJUaXRsZSxcbiAgICAgIHRleHQ6IHRoaXMubW9kYWwudGl0bGVFbC50ZXh0Q29udGVudFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3RvcmVCdXR0b25FbCA9IGJhckVsLmNyZWF0ZUVsKCdidXR0b24nLCB7IGNsczogQ3NzQ2xhc3MuUmVzdG9yZUJ1dHRvbiB9KTtcbiAgICBzZXRJY29uKHJlc3RvcmVCdXR0b25FbCwgUkVTVE9SRV9JQ09OX0lEKTtcbiAgICBpZiAodGhpcy5zaG91bGRTaG93Q2FuY2VsQnV0dG9uKSB7XG4gICAgICBjb25zdCBjYW5jZWxCdXR0b25FbCA9IGJhckVsLmNyZWF0ZUVsKCdidXR0b24nLCB7IGNsczogQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uIH0pO1xuICAgICAgc2V0SWNvbihjYW5jZWxCdXR0b25FbCwgQ0FOQ0VMX0lDT05fSUQpO1xuICAgICAgc2V0VG9vbHRpcChjYW5jZWxCdXR0b25FbCwgJ0NhbmNlbCcpO1xuICAgICAgY2FuY2VsQnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFRoZSB3aG9sZSBiYXIgcmVzdG9yZXMgb24gY2xpY2s7IHN0b3AgcHJvcGFnYXRpb24gc28gQ2FuY2VsIGNsb3NlcyB0aGUgbW9kYWwgaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXN0b3JpbmcgaXQuIENsb3NpbmcgcnVucyB0aGUgd3JhcHBlZCBtb2RhbCdzIG9uQ2xvc2UgKHBlZWsgbG9jayBsaWZ0ZWQsIGJhciByZW1vdmVkKSwgc29cbiAgICAgICAgLy8gdGhlIGNvbnN1bWVyJ3Mgb25DbG9zZSBkZWNpZGVzIHdoYXQgXCJjYW5jZWxcIiBtZWFucyAoZS5nLiByZWxlYXNpbmcgYSBoZWxkIGxvY2spLlxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kYWwuY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBUaGUgd2hvbGUgYmFyIHJlc3RvcmVzIG9uIGNsaWNrLCBub3QganVzdCB0aGUgcmVzdG9yZSBidXR0b24g4oCUIGEgbGFyZ2VyLCBlYXNpZXIgY2xpY2sgdGFyZ2V0LlxuICAgIC8vIGByZXN0b3JlKClgIGd1YXJkcyBhZ2FpbnN0IGEgZG91YmxlIGludm9jYXRpb24sIHNvIHRoZSByZXN0b3JlIGJ1dHRvbidzIG93biBjbGljayBidWJibGluZyB1cFxuICAgIC8vIGhlcmUgaXMgYSBuby1vcC4gVGhlIHJlc3RvcmUgYnV0dG9uIHN0YXlzIHB1cmVseSBhcyBhIHZpc3VhbCBhZmZvcmRhbmNlIGZvciB0aGUgY2xpY2sgdGFyZ2V0LlxuICAgIGJhckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSk7XG4gICAgLy8gRHJvcCB0aGUgb25lLXNob3QgYXR0ZW50aW9uIGZsYXNoIG9uY2UgaXQgZmluaXNoZXMgc28gdGhlIGJhciByZXR1cm5zIHRvIGl0cyBnZW50bGUgaWRsZSBwdWxzZS5cbiAgICAvLyBUaGUgaWRsZSBwdWxzZSBpcyBhbiBpbmZpbml0ZSBhbmltYXRpb24sIHdoaWNoIG5ldmVyIGZpcmVzIGBhbmltYXRpb25lbmRgLlxuICAgIGJhckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsICgpID0+IHtcbiAgICAgIGJhckVsLnJlbW92ZUNsYXNzKENzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYmFyRWw7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVQZWVrTG9jaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVla0xvY2tFbnRyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBlZWtMb2NrRW50cmllcy5kZWxldGUodGhpcy5wZWVrTG9ja0VudHJ5KTtcbiAgICB0aGlzLnBlZWtMb2NrRW50cnkgPSBudWxsO1xuICAgIC8vIFRlYXIgdGhlIGBvcGVuYCBwYXRjaGVzIGRvd24gd2l0aCB0aGUgY29tcG9uZW50LCBzbyB0aGV5IGV4aXN0IG9ubHkgd2hpbGUgdGhpcyBtb2RhbCBpcyBtaW5pbWl6ZWQuXG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudD8udW5sb2FkKCk7XG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVBlZWtMb2NrKGJhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMucGVla0xvY2tFbnRyeSA9IHtcbiAgICAgIGJhckVsLFxuICAgICAgZmxhc2g6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5mbGFzaEJhcihiYXJFbCk7XG4gICAgICB9LFxuICAgICAgaW5uZXJNb2RhbDogdGhpcy5tb2RhbFxuICAgIH07XG4gICAgcGVla0xvY2tFbnRyaWVzLmFkZCh0aGlzLnBlZWtMb2NrRW50cnkpO1xuICAgIC8vIEluc3RhbGwgdGhlIGBvcGVuYCBwYXRjaGVzIGFuZCBpbnB1dCBzdXBwcmVzc29ycyBmb3IgYXMgbG9uZyBhcyB0aGlzIG1vZGFsIGlzIG1pbmltaXplZC4gVGhlXG4gICAgLy8gYmxvY2sgTE9HSUMgaXRzZWxmIGtleXMgb2ZmIHRoZSBzaGFyZWQgYHBlZWtMb2NrRW50cmllc2AgKHNlZSBgc2hvdWxkQmxvY2tPcGVuYCksIHNvIHdpdGggc2V2ZXJhbFxuICAgIC8vIG1vZGFscyBtaW5pbWl6ZWQgZXZlcnkgb25lJ3MgcGF0Y2ggcmVhY2hlcyB0aGUgc2FtZSB2ZXJkaWN0OyB0aGUgbG9jayBsaWZ0cyBvbmx5IG9uY2UgdGhlIGxhc3RcbiAgICAvLyBtb2RhbCByZXN0b3Jlcy9jbG9zZXMuXG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudCA9IG5ldyBQZWVrTG9ja0NvbXBvbmVudCh0aGlzLm1vZGFsLmFwcCk7XG4gICAgdGhpcy5wZWVrTG9ja0NvbXBvbmVudC5sb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGZsYXNoQmFyKGJhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGJhckVsLnJlbW92ZUNsYXNzKENzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uKTtcbiAgICAvLyBGb3JjZSBhIHJlZmxvdyBzbyByZS1hZGRpbmcgdGhlIGNsYXNzIHJlc3RhcnRzIHRoZSBvbmUtc2hvdCBmbGFzaCBvbiByYXBpZCByZXBlYXRlZCBibG9ja3MuXG4gICAgYmFyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgYmFyRWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJBdHRlbnRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVQZWVrTG9jaygpO1xuICAgIHRoaXMucmVtb3ZlTWluaW1pemVkQmFyKCk7XG4gICAgdGhpcy5pc01pbmltaXplZFZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRhaW5lckNsaWNrKCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIC8vIFdoaWxlIG1pbmltaXplZCB0aGUgY29udGFpbmVyIGlzIGhpZGRlbiwgc28gbm8gY2xpY2sgY2FuIHJlYWNoIGl0IOKAlCBidXQgYSBzeW50aGV0aWMgb25lIHN0aWxsIGNhbixcbiAgICAgIC8vIGFuZCBtaW5pbWl6aW5nIGFuIGFscmVhZHktbWluaW1pemVkIG1vZGFsIGlzIG1lYW5pbmdsZXNzLlxuICAgICAgdGhpcy5pc01pbmltaXplZFZhbHVlXG4gICAgICAvLyBBIGNsaWNrIHRoYXQgcGFzc2VkIHRocm91Z2ggdGhlIG1vZGFsIGl0c2VsZiBpcyBvcmRpbmFyeSBpbnRlcmFjdGlvbiB3aXRoIGl0cyBjb250ZW50LlxuICAgICAgLy8gYGNvbXBvc2VkUGF0aCgpYCAocmF0aGVyIHRoYW4gYG1vZGFsRWwuY29udGFpbnMoJGV2ZW50LnRhcmdldClgKSBuZWVkcyBubyBjYXN0IGFuZCBzdGF5cyBjb3JyZWN0XG4gICAgICAvLyBhY3Jvc3Mgd2luZG93cywgd2hlcmUgYW4gYGluc3RhbmNlb2YgSFRNTEVsZW1lbnRgIGNoZWNrIGFnYWluc3QgYW5vdGhlciByZWFsbSdzIGVsZW1lbnQgd291bGQgbm90LlxuICAgICAgfHwgJGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKHRoaXMubW9kYWwubW9kYWxFbClcbiAgICAgIC8vIEEgdGV4dCBzZWxlY3Rpb24gZHJhZ2dlZCBmcm9tIGluc2lkZSB0aGUgbW9kYWwgb3V0IG9udG8gdGhlIGJhY2tncm91bmQgbWFrZXMgdGhlIHJlc3VsdGluZ1xuICAgICAgLy8gYGNsaWNrYCBmaXJlIG9uIHRoZWlyIGNvbW1vbiBhbmNlc3RvciDigJQgYGNvbnRhaW5lckVsYC4gT2JzaWRpYW4gZG9lcyBub3QgZGlzbWlzcyBvbiB0aGF0IGdlc3R1cmUgKGl0c1xuICAgICAgLy8gb3duIGxpc3RlbmVyIHNpdHMgb24gYGJnRWxgLCB3aGljaCBpcyBuZXZlciB0aGUgdGFyZ2V0IGhlcmUpLCBzbyBuZWl0aGVyIGRvZXMgdGhpcy5cbiAgICAgIHx8ICRldmVudC50YXJnZXQgPT09IHRoaXMubW9kYWwuY29udGFpbmVyRWxcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXaGF0IGlzIGxlZnQgaXMgYSBjbGljayBvbiB0aGUgZGltbWVkIGJhY2tncm91bmQgaXRzZWxmLiBgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClgIGlzIHdoYXRcbiAgICAvLyBhY3R1YWxseSBrZWVwcyBpdCBmcm9tIHJlYWNoaW5nIE9ic2lkaWFuJ3MgYGJnRWxgIGxpc3RlbmVyIG9uIEJPVEggcGxhdGZvcm0gYnJhbmNoZXM7XG4gICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGFkZGl0aW9uYWxseSBzYXRpc2ZpZXMgdGhlIGBkZWZhdWx0UHJldmVudGVkYCBndWFyZCBpbiBgb25DbGlja091dHNpZGVgLlxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1pbmltaXplKCk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoT25DbG9zZShtb2RhbDogTW9kYWwpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlUGF0Y2hDb21wb25lbnQucmVnaXN0ZXJNZXRob2RQYXRjaDxNb2RhbCwgJ29uQ2xvc2UnPih7XG4gICAgICAkb2JqZWN0OiBtb2RhbCxcbiAgICAgIG1ldGhvZE5hbWU6ICdvbkNsb3NlJyxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSk6IHZvaWQgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1pbmltaXplZEJhcigpOiB2b2lkIHtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsPy5yZW1vdmUoKTtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBibG9ja0V2ZW50KCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgc2lnbmFsQmxvY2tlZEF0dGVtcHQoKTtcbn1cblxuZnVuY3Rpb24gYmxvY2tPckZhbGxiYWNrKG1vZGFsOiBNb2RhbCwgZmFsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgaWYgKHNob3VsZEJsb2NrT3Blbihtb2RhbCkpIHtcbiAgICBzaWduYWxCbG9ja2VkQXR0ZW1wdCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZhbGxiYWNrKCk7XG59XG5cbmZ1bmN0aW9uIGZsYXNoTWluaW1pemVkQmFycygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBlbnRyeS5mbGFzaCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWluaW1pemVkSW5uZXJNb2RhbChtb2RhbDogTW9kYWwpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuaW5uZXJNb2RhbCA9PT0gbW9kYWwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQZWVrQWxsb3dlZEtleSgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gTmF2aWdhdGlvbiBtb3ZlcyB0aGUgY3Vyc29yL3Njcm9sbHMgKGFsbG93ZWQpLCBidXQgU2hpZnQrbmF2aWdhdGlvbiBleHRlbmRzIHRoZSBzZWxlY3Rpb24gKG5vdFxuICAvLyBuZWVkZWQgZm9yIGluc3BlY3Rpb24pLCBzbyBpdCBpcyBibG9ja2VkLiBCYXJlIG1vZGlmaWVyIHByZXNzZXMgcGFzcyB0aHJvdWdoIG9uIHRoZWlyIG93bi5cbiAgcmV0dXJuIE5BVklHQVRJT05fS0VZUy5oYXMoJGV2ZW50LmtleSkgPyAhJGV2ZW50LnNoaWZ0S2V5IDogTU9ESUZJRVJfS0VZUy5oYXMoJGV2ZW50LmtleSk7XG59XG5cbmZ1bmN0aW9uIGlzUGVla0xvY2tlZCgpOiBib29sZWFuIHtcbiAgLy8gRHJvcCBlbnRyaWVzIHdob3NlIGJhciBoYXMgbGVmdCB0aGUgRE9NIHdpdGhvdXQgYSByZXN0b3JlKCkgb3IgY2xvc2UoKS5cbiAgLy8gQSB0ZXN0IHRlYXJkb3duIHRoYXQgZW1wdGllcyB0aGUgYm9keSBpcyB0aGUgdHlwaWNhbCBjYXVzZTsgdGhpcyBrZWVwcyBhIHN0YWxlIGVudHJ5IGZyb20gbG9ja2luZy5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBpZiAoIWVudHJ5LmJhckVsLmlzQ29ubmVjdGVkKSB7XG4gICAgICBwZWVrTG9ja0VudHJpZXMuZGVsZXRlKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGVla0xvY2tFbnRyaWVzLnNpemUgPiAwO1xufVxuXG5mdW5jdGlvbiBzaG91bGRCbG9ja09wZW4obW9kYWw6IE1vZGFsKTogYm9vbGVhbiB7XG4gIC8vIEEgbW9kYWwncyBvd24gcmUtb3BlbiBpcyBuZXZlciBibG9ja2VkIOKAlCBvdGhlcndpc2UgYSBtaW5pbWl6ZWQgbW9kYWwgY291bGQgbm90IHJlc3RvcmUvcmUtb3BlblxuICAvLyBpdHNlbGYuIEV2ZXJ5IE9USEVSIG1vZGFsIG9wZW4gaXMgYmxvY2tlZCB3aGlsZSBhbnkgbW9kYWwgaXMgbWluaW1pemVkICh0aGUgcGVlay1vbmx5IGxvY2spLlxuICByZXR1cm4gaXNQZWVrTG9ja2VkKCkgJiYgIWlzTWluaW1pemVkSW5uZXJNb2RhbChtb2RhbCk7XG59XG5cbmZ1bmN0aW9uIHNpZ25hbEJsb2NrZWRBdHRlbXB0KCk6IHZvaWQge1xuICBmbGFzaE1pbmltaXplZEJhcnMoKTtcbiAgYmVlcGVyLmJlZXAoKTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NLZXlkb3duV2hpbGVQZWVrTG9ja2VkKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICBpZiAoIWlzUGVla0xvY2tlZCgpIHx8IGlzUGVla0FsbG93ZWRLZXkoJGV2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGJsb2NrRXZlbnQoJGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NXaGlsZVBlZWtMb2NrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICBpZiAoIWlzUGVla0xvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYmxvY2tFdmVudCgkZXZlbnQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtEQSxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUywyQkFBMkI7QUFFcEMsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxrQkFB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
@@ -65,7 +65,7 @@ export interface CheckboxCommand extends CommandBase {
65
65
  *
66
66
  * @param isChecked - The new checked state.
67
67
  */
68
- onChange: (isChecked: boolean) => void;
68
+ readonly onChange: (isChecked: boolean) => void;
69
69
  /**
70
70
  * Called once with the created checkbox element, to initialize its state.
71
71
  *
@@ -74,7 +74,7 @@ export interface CheckboxCommand extends CommandBase {
74
74
  *
75
75
  * @param checkboxEl - The created checkbox element.
76
76
  */
77
- onInit: (checkboxEl: HTMLInputElement) => void;
77
+ readonly onInit: (checkboxEl: HTMLInputElement) => void;
78
78
  }
79
79
  /**
80
80
  * The members every command shares.
@@ -90,19 +90,19 @@ export interface CommandBase {
90
90
  *
91
91
  * @returns Whether the control can be used right now.
92
92
  */
93
- checkIsAvailable?: () => boolean;
93
+ readonly checkIsAvailable?: () => boolean;
94
94
  /**
95
95
  * The key that activates the command.
96
96
  */
97
- key: string;
97
+ readonly key: string;
98
98
  /**
99
99
  * The modifiers combined with {@link CommandBase.key}. When omitted, no modifiers are required.
100
100
  */
101
- modifiers?: Modifier[];
101
+ readonly modifiers?: Modifier[];
102
102
  /**
103
103
  * The human-readable description shown next to the control.
104
104
  */
105
- purpose: string;
105
+ readonly purpose: string;
106
106
  }
107
107
  /**
108
108
  * A dropdown command shown in a modal's control strip and bound to a modifier+key shortcut that cycles
@@ -116,13 +116,13 @@ export interface DropDownCommand extends CommandBase {
116
116
  *
117
117
  * @param value - The newly selected value.
118
118
  */
119
- onChange: (value: string) => void;
119
+ readonly onChange: (value: string) => void;
120
120
  /**
121
121
  * Called once with the created dropdown component, to initialize its options and state.
122
122
  *
123
123
  * @param dropdownComponent - The created dropdown component.
124
124
  */
125
- onInit: (dropdownComponent: DropdownComponent) => void;
125
+ readonly onInit: (dropdownComponent: DropdownComponent) => void;
126
126
  }
127
127
  /**
128
128
  * A keyboard command shown in a modal's control strip and optionally bound to a modifier+key handler.
@@ -137,7 +137,7 @@ export interface KeyboardCommand extends CommandBase {
137
137
  *
138
138
  * @returns Whether the command reads as ON.
139
139
  */
140
- checkIsOn?: () => boolean;
140
+ readonly checkIsOn?: () => boolean;
141
141
  /**
142
142
  * The pointer route into the same handler the shortcut runs. Required for the command to render a
143
143
  * button in {@link ModalCommandsRenderMode.Buttons} mode — on a phone there is no modifier key to
@@ -145,7 +145,7 @@ export interface KeyboardCommand extends CommandBase {
145
145
  *
146
146
  * @param $event - The click event, so a command that picks something has one to hand on.
147
147
  */
148
- onActivate?: ($event: MouseEvent) => void;
148
+ readonly onActivate?: ($event: MouseEvent) => void;
149
149
  /**
150
150
  * The handler invoked when the shortcut is pressed. When omitted, the command is a hint only and no
151
151
  * scope handler is registered.
@@ -154,7 +154,7 @@ export interface KeyboardCommand extends CommandBase {
154
154
  * @param context - The keymap context.
155
155
  * @returns `false` to prevent Obsidian's default handling, or `void`/`true` otherwise.
156
156
  */
157
- onKey?: ($event: KeyboardEvent, context: KeymapContext) => boolean;
157
+ readonly onKey?: ($event: KeyboardEvent, context: KeymapContext) => boolean;
158
158
  }
159
159
  /**
160
160
  * Options for {@link ModalCommandBuilder.build}.
@@ -186,7 +186,7 @@ export interface ModalCommands {
186
186
  * The strip is built once and only re-stated afterwards, because rebuilding it would replace an element
187
187
  * the pointer may be about to click.
188
188
  */
189
- refresh: () => void;
189
+ readonly refresh: () => void;
190
190
  }
191
191
  /**
192
192
  * A bare host for a control strip: the element to render into, plus the scope to register shortcuts with.
@@ -351,4 +351,4 @@ export {
351
351
  ModalCommandBuilder,
352
352
  ModalCommandsRenderMode
353
353
  };
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvbW9kYWwtY29tbWFuZC1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGJ1aWxkZXIgZm9yIGEgbW9kYWwncyBjb250cm9sIHN0cmlwLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfSBhc3NlbWJsZXMgdGhlIHN0cmlwIG9mIGNvbnRyb2xzIHNob3duIGF0IHRoZSBib3R0b20gb2YgYSBtb2RhbDpcbiAqIGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZEtleWJvYXJkQ29tbWFuZH0pLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzIGJvdW5kIHRvXG4gKiBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCAoe0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleVxuICogc2hvcnRjdXQgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZERyb3BEb3dufSkuIENoYWluIHRoZSBgYWRkKmAgY2FsbHMsIHRoZW4gYXBwbHkgZXZlcnl0aGluZyB0byBhXG4gKiBtb2RhbCB3aXRoIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfTpcbiAqXG4gKiBgYGB0c1xuICogbmV3IE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBzdHJpcCBpcyBkZXNjcmliZWQgYnkgdHdvIGluZGVwZW5kZW50IGF4ZXM6XG4gKlxuICogLSAqKldoZXJlIGl0IGlzIGhvc3RlZC4qKiBBIHtAbGluayBTdWdnZXN0TW9kYWx9IGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGVcbiAqICAga2VlcHMgT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyIChgc2V0SW5zdHJ1Y3Rpb25zYCArIGBpbnN0cnVjdGlvbnNFbGApLiBFdmVyeSBvdGhlciB0YXJnZXQg4oCUIGFcbiAqICAgcGxhaW4ge0BsaW5rIE1vZGFsfSwgb3IgYSBiYXJlIHtAbGluayBNb2RhbENvbW1hbmRzSG9zdH0gb2YgYW4gZWxlbWVudCBwbHVzIGEgYFNjb3BlYCDigJQgZ2V0cyBhIHN0cmlwXG4gKiAgIGVsZW1lbnQgdGhlIGJ1aWxkZXIgY3JlYXRlcyBpdHNlbGYuXG4gKiAtICoqSG93IGVhY2ggY29udHJvbCBsb29rcy4qKiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zfSByZW5kZXJzIHRoZSBwdXJwb3NlIHRleHQgd2l0aFxuICogICBhbiBpbmxpbmUgY2hlY2tib3ggb3IgZHJvcGRvd247IHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSByZW5kZXJzIG9uZSBjbGlja2FibGUgYnV0dG9uXG4gKiAgIHBlciBjb250cm9sLCBjYXJyeWluZyBpdHMgcHJlc3NlZCBhbmQgZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogVGhlIGF4ZXMgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgYSBidXR0b24gc3RyaXAgaW5zaWRlIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0gaXMgYSByZWFsIGNvbWJpbmF0aW9uLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzLCBidXRcbiAqIG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBVSSBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RhbCxcbiAgTW9kaWZpZXIsXG4gIFNjb3BlLFxuICBTdWdnZXN0TW9kYWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgUGxhdGZvcm1cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgS0VZU19NQVAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRW50ZXInLCAn4oa1J10sXG4gIFsnVXBEb3duJywgJ+KGkeKGkyddXG5dKTtcblxuLyoqXG4gKiBUaGUgd2F5IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSByZW5kZXJzIGVhY2ggY29udHJvbC5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxDb21tYW5kc1JlbmRlck1vZGUge1xuICAvKipcbiAgICogT25lIGNsaWNrYWJsZSBidXR0b24gcGVyIGNvbnRyb2wsIGNhcnJ5aW5nIGl0cyBwcmVzc2VkIChgYXJpYS1wcmVzc2VkYCkgYW5kIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiBPbmx5IGNvbnRyb2xzIHJlYWNoYWJsZSBieSBwb2ludGVyIGFyZSByZW5kZXJlZCDigJQgY2hlY2tib3hlcywgYW5kIGtleWJvYXJkIGNvbW1hbmRzIHRoYXQgc3VwcGx5XG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25BY3RpdmF0ZX0uIEEgaGludC1vbmx5IG9yIGtleWJvYXJkLW9ubHkgY29tbWFuZCBzdGlsbCByZWdpc3RlcnMgaXRzIGhhbmRsZXJcbiAgICogYnV0IHJlbmRlcnMgbm8gYnV0dG9uLCBiZWNhdXNlIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXMgd29yc2UgdGhhbiBubyBidXR0b24uIEEgZHJvcGRvd24gdGhyb3dzOlxuICAgKiBhIGNvbnRyb2wgdGhhdCBDWUNMRVMgaGFzIG5vIGJ1dHRvbiBmb3JtLlxuICAgKi9cbiAgQnV0dG9ucyA9ICdidXR0b25zJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBpbnN0cnVjdGlvbi1iYXIgbG9vazogdGhlIHNob3J0Y3V0LCB0aGVuIHRoZSBwdXJwb3NlIHRleHQgd2l0aCBhbiBpbmxpbmUgY2hlY2tib3ggb3JcbiAgICogZHJvcGRvd24uXG4gICAqL1xuICBJbnN0cnVjdGlvbnMgPSAnaW5zdHJ1Y3Rpb25zJ1xufVxuXG4vKipcbiAqIEEgY2hlY2tib3ggY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzXG4gKiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzQ2hlY2tlZCAtIFRoZSBuZXcgY2hlY2tlZCBzdGF0ZS5cbiAgICovXG4gIG9uQ2hhbmdlOiAoaXNDaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSB3aXRoIHRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQsIHRvIGluaXRpYWxpemUgaXRzIHN0YXRlLlxuICAgKlxuICAgKiBJbiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuQnV0dG9uc30gbW9kZSB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGJ1dCBuZXZlciBhcHBlbmRlZCDigJQgdGhlXG4gICAqIGJ1dHRvbiBpcyBhIHZpZXcgb2YgaXQg4oCUIHNvIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGNvZGUgc2VydmVzIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hlY2tib3hFbCAtIFRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQuXG4gICAqL1xuICBvbkluaXQ6IChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBtZW1iZXJzIGV2ZXJ5IGNvbW1hbmQgc2hhcmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRyb2wgY2FuIGJlIHVzZWQgcmlnaHQgbm93LiBXaGVuIGl0IHJldHVybnMgYGZhbHNlYCB0aGUgY29udHJvbCBpcyByZW5kZXJlZFxuICAgKiAqKmRpc2FibGVkIHJhdGhlciB0aGFuIHJlbW92ZWQqKiwgc28gdGhlIHN0cmlwIGRvZXMgbm90IHJlZmxvdyB1bmRlciB0aGUgcG9pbnRlciBhcyBtb2RlcyBjaGFuZ2Ug4oCUXG4gICAqIHdoaWNoIG9uIGEgcGhvbmUgbWVhbnMgYSBtaXMtdGFwLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LiBXaGVuIG9taXR0ZWQsIHRoZSBidWlsZGVyIG5ldmVyIHRvdWNoZXMgdGhlIGNvbnRyb2wnc1xuICAgKiBkaXNhYmxlZCBzdGF0ZSwgbGVhdmluZyB3aGF0ZXZlciB7QGxpbmsgQ2hlY2tib3hDb21tYW5kLm9uSW5pdH0gLyB7QGxpbmsgRHJvcERvd25Db21tYW5kLm9uSW5pdH0gc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb250cm9sIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdy5cbiAgICovXG4gIGNoZWNrSXNBdmFpbGFibGU/OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRoYXQgYWN0aXZhdGVzIHRoZSBjb21tYW5kLlxuICAgKi9cbiAga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllcnMgY29tYmluZWQgd2l0aCB7QGxpbmsgQ29tbWFuZEJhc2Uua2V5fS4gV2hlbiBvbWl0dGVkLCBubyBtb2RpZmllcnMgYXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogVGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHNob3duIG5leHQgdG8gdGhlIGNvbnRyb2wuXG4gICAqL1xuICBwdXJwb3NlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBjb21tYW5kIHNob3duIGluIGEgbW9kYWwncyBjb250cm9sIHN0cmlwIGFuZCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlc1xuICogdGhyb3VnaCBpdHMgb3B0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgaW4ge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc30gbW9kZSBvbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BEb3duQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBkcm9wZG93biB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3bHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LCB0byBpbml0aWFsaXplIGl0cyBvcHRpb25zIGFuZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRyb3Bkb3duQ29tcG9uZW50IC0gVGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgb25Jbml0OiAoZHJvcGRvd25Db21wb25lbnQ6IERyb3Bkb3duQ29tcG9uZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEga2V5Ym9hcmQgY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgb3B0aW9uYWxseSBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleWJvYXJkQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbW1hbmQgcmVhZHMgYXMgT04uIFN1cHBseSBpdCBmb3IgYSB0b2dnbGUgd2hvc2Ugc3RhdGUgbGl2ZXMgb3V0c2lkZSB0aGUgc3RyaXA7IG9taXQgaXRcbiAgICogZm9yIGFuIGFjdGlvbiwgd2hpY2ggZG9lcyBzb21ldGhpbmcgYW5kIGlzIGRvbmUuIEEge0BsaW5rIENoZWNrYm94Q29tbWFuZH0gbmVlZHMgbm8gZXF1aXZhbGVudCDigJQgaXRzXG4gICAqIGNoZWNrYm94IGVsZW1lbnQgaXMgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIHJlYWRzIGFzIE9OLlxuICAgKi9cbiAgY2hlY2tJc09uPzogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgcm91dGUgaW50byB0aGUgc2FtZSBoYW5kbGVyIHRoZSBzaG9ydGN1dCBydW5zLiBSZXF1aXJlZCBmb3IgdGhlIGNvbW1hbmQgdG8gcmVuZGVyIGFcbiAgICogYnV0dG9uIGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSBtb2RlIOKAlCBvbiBhIHBob25lIHRoZXJlIGlzIG5vIG1vZGlmaWVyIGtleSB0b1xuICAgKiBwcmVzcywgc28gdGhpcyBpcyB0aGUgb25seSB3YXkgaW4uXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgY2xpY2sgZXZlbnQsIHNvIGEgY29tbWFuZCB0aGF0IHBpY2tzIHNvbWV0aGluZyBoYXMgb25lIHRvIGhhbmQgb24uXG4gICAqL1xuICBvbkFjdGl2YXRlPzogKCRldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGhhbmRsZXIgaW52b2tlZCB3aGVuIHRoZSBzaG9ydGN1dCBpcyBwcmVzc2VkLiBXaGVuIG9taXR0ZWQsIHRoZSBjb21tYW5kIGlzIGEgaGludCBvbmx5IGFuZCBub1xuICAgKiBzY29wZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUga2V5Ym9hcmQgZXZlbnQuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGtleW1hcCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIHRvIHByZXZlbnQgT2JzaWRpYW4ncyBkZWZhdWx0IGhhbmRsaW5nLCBvciBgdm9pZGAvYHRydWVgIG90aGVyd2lzZS5cbiAgICovXG4gIG9uS2V5PzogKCRldmVudDogS2V5Ym9hcmRFdmVudCwgY29udGV4dDogS2V5bWFwQ29udGV4dCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd2F5IGVhY2ggY29udHJvbCBpcyByZW5kZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbnRyb2wgc3RyaXAgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gY29udHJvbCBVSSBpcyBzaG93biBhbmQgdGhlIG9wdGlvbi10b2dnbGVcbiAgICogc2hvcnRjdXRzIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24ga2V5IGhhbmRsZXJzIHJlbWFpbiBhY3RpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0luc3RydWN0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGhhbmRsZSByZXR1cm5lZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBCcmluZ3MgZXZlcnkgcmVuZGVyZWQgY29udHJvbCdzIGRpc2FibGVkIGFuZCBwcmVzc2VkIHN0YXRlIHVwIHRvIGRhdGUsIGJ5IHJlLXJlYWRpbmdcbiAgICoge0BsaW5rIENvbW1hbmRCYXNlLmNoZWNrSXNBdmFpbGFibGV9IGFuZCB7QGxpbmsgS2V5Ym9hcmRDb21tYW5kLmNoZWNrSXNPbn0uXG4gICAqXG4gICAqIFRoZSBzdHJpcCBpcyBidWlsdCBvbmNlIGFuZCBvbmx5IHJlLXN0YXRlZCBhZnRlcndhcmRzLCBiZWNhdXNlIHJlYnVpbGRpbmcgaXQgd291bGQgcmVwbGFjZSBhbiBlbGVtZW50XG4gICAqIHRoZSBwb2ludGVyIG1heSBiZSBhYm91dCB0byBjbGljay5cbiAgICovXG4gIHJlZnJlc2g6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBiYXJlIGhvc3QgZm9yIGEgY29udHJvbCBzdHJpcDogdGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8sIHBsdXMgdGhlIHNjb3BlIHRvIHJlZ2lzdGVyIHNob3J0Y3V0cyB3aXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29tbWFuZHNIb3N0IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoZSBjb250cm9sIHN0cmlwIGlzIGFwcGVuZGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdGhlIHNob3J0Y3V0cyBhcmUgcmVnaXN0ZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IFNjb3BlO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHRhcmdldCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0gYWNjZXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxDb21tYW5kc1RhcmdldCA9IE1vZGFsIHwgTW9kYWxDb21tYW5kc0hvc3QgfCBTdWdnZXN0TW9kYWw8dW5rbm93bj47XG5cbi8qKlxuICogT25lIGFjY3VtdWxhdGVkIGNvbW1hbmQsIHJlZHVjZWQgdG8gdGhlIGhhbmRmdWwgb2YgdGhpbmdzIGJvdGggcmVuZGVyZXJzIG5lZWQuXG4gKlxuICogT3B0aW9uYWwgY29sbGFib3JhdG9ycyBhcmUgYG51bGwgfCBYYCByZXF1aXJlZCBmaWVsZHMgcmF0aGVyIHRoYW4gYD9gLCBzbyBldmVyeSBjb25zdHJ1Y3Rpb24gc2l0ZSBoYXMgdG9cbiAqIHNheSB3aGljaCBvbmVzIGl0IGhhcy5cbiAqL1xuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBhcyBhIEJVVFRPTi5cbiAqXG4gKiBJdCByZXBvcnRzIGl0cyBvd24gcHJlc3NlZCBzdGF0ZSwgYmVjYXVzZSBvbmx5IHRoZSBidXR0b24gcmVuZGVyZXIgaGFzIGFueXdoZXJlIHRvIHNob3cgb25lLlxuICovXG5pbnRlcmZhY2UgQnV0dG9uQ29udHJvbCB7XG4gIGNoZWNrSXNPbjogKCkgPT4gYm9vbGVhbjtcbiAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEVudHJ5IHtcbiAgcmVhZG9ubHkgY2hlY2tJc0F2YWlsYWJsZTogKCgpID0+IGJvb2xlYW4pIHwgbnVsbDtcbiAgcmVhZG9ubHkgY29tbWFuZFRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5pdEJ1dHRvbjogKChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gQnV0dG9uQ29udHJvbCkgfCBudWxsO1xuICByZWFkb25seSBpbml0SW5zdHJ1Y3Rpb246ICgocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gSW5zdHJ1Y3Rpb25Db250cm9sKSB8IG51bGw7XG4gIHJlYWRvbmx5IGlzRHJvcERvd246IGJvb2xlYW47XG4gIHJlYWRvbmx5IHB1cnBvc2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaXN0ZXJTY29wZTogKChzY29wZTogU2NvcGUpID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBpbnRvIGFuIElOU1RSVUNUSU9OIGJhci5cbiAqXG4gKiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gcHJlc3NlZCBzdGF0ZSBoZXJlOiB0aGUgY29udHJvbCDigJQgYSBjaGVja2JveCwgYSBkcm9wZG93biDigJQgc2hvd3MgaXRzIG93bixcbiAqIHNvIGEgc2Vjb25kIGNvcHkgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN5bmMuXG4gKi9cbmludGVyZmFjZSBJbnN0cnVjdGlvbkNvbnRyb2wge1xuICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBJbnN0cnVjdGlvbkV4IGV4dGVuZHMgSW5zdHJ1Y3Rpb24ge1xuICByZWFkb25seSBlbnRyeTogQ29tbWFuZEVudHJ5O1xufVxuXG4vKipcbiAqIFJlLXN0YXRlcyBvbmUgcmVuZGVyZWQgY29udHJvbCwgYWxyZWFkeSBib3VuZCB0byBpdHMgb3duIGVsZW1lbnRzLlxuICovXG50eXBlIFJlZnJlc2hDb250cm9sID0gKCkgPT4gdm9pZDtcblxuY29uc3QgTk9PUF9NT0RBTF9DT01NQU5EUzogTW9kYWxDb21tYW5kcyA9IHtcbiAgcmVmcmVzaDogKCk6IHZvaWQgPT4ge1xuICAgIC8vIE5vdGhpbmcgd2FzIHJlbmRlcmVkLCBzbyB0aGVyZSBpcyBubyBzdGF0ZSB0byByZS1zdGF0ZS5cbiAgfVxufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBtb2RhbCdzIGNvbnRyb2wgc3RyaXAgZnJvbSBrZXlib2FyZCBjb21tYW5kcywgaW50ZXJhY3RpdmUgY2hlY2tib3hlcywgYW5kIGRyb3Bkb3ducywgdGhlblxuICogYXBwbGllcyB0aGVtIHRvIGEgbW9kYWwgdmlhIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsQ29tbWFuZEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IENvbW1hbmRFbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW50ZXJhY3RpdmUgY2hlY2tib3ggdG8gdGhlIGNvbnRyb2wgc3RyaXAsIGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5IHNob3J0Y3V0IHRoYXQgdG9nZ2xlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY2hlY2tib3ggY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGVja2JveChjb21tYW5kOiBDaGVja2JveENvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50LCBzY29wZTogU2NvcGUpOiBCdXR0b25Db250cm9sID0+IHtcbiAgICAgICAgLy8gQ3JlYXRlZCBidXQgbmV2ZXIgYXBwZW5kZWQ6IHRoZSBjaGVja2JveCBob2xkcyB0aGUgc3RhdGUgYW5kIHRoZSBidXR0b24gaXMgYSB2aWV3IG9mIGl0LCBzb1xuICAgICAgICAvLyBgb25Jbml0YCAvIGBvbkNoYW5nZWAgbWVhbiBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGluIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgICAgICBjb25zdCBjaGVja2JveEVsID0gY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICBpbml0Q2hlY2tib3goY2hlY2tib3hFbCwgc2NvcGUpO1xuICAgICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICB0b2dnbGVDaGVja2JveChjaGVja2JveEVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2tJc09uOiAoKTogYm9vbGVhbiA9PiBjaGVja2JveEVsLmNoZWNrZWQsXG4gICAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjaGVja2JveEVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICAgIGJ1dHRvbkVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICAvLyBUaGUgZ2FwIGdvZXMgb24gdGhlIGNvbnRyb2wsIG5vdCBvbiB0aGUgc3RyaXAsIHNvIGl0IGxhbmRzIG9uIEJPVEggcmVuZGVyIHBhdGhzOiBhXG4gICAgICAgIC8vIGBTdWdnZXN0TW9kYWxgJ3MgbmF0aXZlIGJhciBob3N0cyB0aGUgc2FtZSBjaGVja2JveCwgYW5kIHRoaXMgbGlicmFyeSBuZXZlciB0b3VjaGVzIHRoYXQgYmFyJ3MgZWxlbWVudC5cbiAgICAgICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhjaGVja2JveEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIGluaXRDaGVja2JveChjaGVja2JveEVsLCBzY29wZSk7XG4gICAgICB9LFxuICAgICAgaXNEcm9wRG93bjogZmFsc2UsXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgICBmdW5jdGlvbiBpbml0Q2hlY2tib3goY2hlY2tib3hFbDogSFRNTElucHV0RWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sIHtcbiAgICAgIGNvbW1hbmQub25Jbml0KGNoZWNrYm94RWwpO1xuICAgICAgY2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbW1hbmQub25DaGFuZ2UoY2hlY2tib3hFbC5jaGVja2VkKTtcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksICgpID0+IHtcbiAgICAgICAgdG9nZ2xlQ2hlY2tib3goY2hlY2tib3hFbCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgY2hlY2tib3hFbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkcm9wZG93biB0byB0aGUgY29udHJvbCBzdHJpcCwgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCBjeWNsZXMgdGhyb3VnaCBpdHNcbiAgICogb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgZHJvcGRvd24gY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGREcm9wRG93bihjb21tYW5kOiBEcm9wRG93bkNvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiBudWxsLFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duQ29tcG9uZW50ID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KHB1cnBvc2VFbCk7XG4gICAgICAgIC8vIFRoZSBzYW1lIGdhcCB0aGUgY2hlY2tib3ggZ2V0cywgc28gdGhlIHR3byBjb250cm9scyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbGFiZWwgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IOKAlCBhIHJlYWwgcnVsZSByYXRoZXIgdGhhbiB0aGUgbGl0ZXJhbCBzcGFjZSB0aGlzIHVzZWQgdG8gYXBwZW5kLlxuICAgICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGRyb3Bkb3duQ29tcG9uZW50LnNlbGVjdEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgY29tbWFuZC5vbkluaXQoZHJvcGRvd25Db21wb25lbnQpO1xuICAgICAgICBkcm9wZG93bkNvbXBvbmVudC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb21tYW5kLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGRlZmVuc2l2ZSA/PyBvbiBvcHRpb25hbCBtb2RpZmllcnMuICovXG4gICAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgaWYgKGRyb3Bkb3duQ29tcG9uZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNlbGVjdEVsID0gZHJvcGRvd25Db21wb25lbnQuc2VsZWN0RWw7XG4gICAgICAgICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IChzZWxlY3RFbC5zZWxlY3RlZEluZGV4ICsgMSkgJSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICBzZWxlY3RFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duQ29tcG9uZW50LnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0Ryb3BEb3duOiB0cnVlLFxuICAgICAgcHVycG9zZTogY29tbWFuZC5wdXJwb3NlLFxuICAgICAgcmVnaXN0ZXJTY29wZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBrZXlib2FyZCBjb21tYW5kIHRvIHRoZSBjb250cm9sIHN0cmlwLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIGNvbnN0IGNoZWNrSXNPbiA9IGNvbW1hbmQuY2hlY2tJc09uID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSk7XG4gICAgY29uc3Qgb25BY3RpdmF0ZSA9IGNvbW1hbmQub25BY3RpdmF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IG9uS2V5ID0gY29tbWFuZC5vbktleT8uYmluZChjb21tYW5kKSA/PyBudWxsO1xuXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgY2hlY2tJc0F2YWlsYWJsZTogY29tbWFuZC5jaGVja0lzQXZhaWxhYmxlID8/IG51bGwsXG4gICAgICBjb21tYW5kVGV4dDogdGhpcy5idWlsZENvbW1hbmRUZXh0KGNvbW1hbmQpLFxuICAgICAgaW5pdEJ1dHRvbjogb25BY3RpdmF0ZVxuICAgICAgICAvLyBObyBkaXNhYmxlZCBndWFyZCBvbiB0aGUgbGlzdGVuZXI6IGEgZGlzYWJsZWQgYnV0dG9uIGZpcmVzIG5vIGNsaWNrIGF0IGFsbCwgc28gYHNldERpc2FibGVkYFxuICAgICAgICAvLyBiZWxvdyBpcyB0aGUgd2hvbGUgZ2F0ZS5cbiAgICAgICAgPyAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50KTogQnV0dG9uQ29udHJvbCA9PiB7XG4gICAgICAgICAgYnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBvbkFjdGl2YXRlKCRldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoZWNrSXNPbixcbiAgICAgICAgICAgIHNldERpc2FibGVkOiAoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBidXR0b25FbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IG51bGwsXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG9uS2V5XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBkZWZlbnNpdmUgPz8gb24gb3B0aW9uYWwgbW9kaWZpZXJzLiAqL1xuICAgICAgICA/IChzY29wZTogU2NvcGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIG9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyB0byBhIG1vZGFsLiBBbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5XG4gICAqIGhhbmRsZXJzOyBvbmx5IHJlbmRlcnMgdGhlIGNvbnRyb2wgc3RyaXAgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgbW9kYWwsIG9yIHRoZSBiYXJlIGVsZW1lbnQgKyBzY29wZSwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB3aG9zZSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofSByZS1zdGF0ZXMgZXZlcnkgcmVuZGVyZWQgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBidWlsZCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIG9wdGlvbnM6IE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMgPSB7fSk6IE1vZGFsQ29tbWFuZHMge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlbmRlck1vZGUgPSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnMsXG4gICAgICBzaG91bGRTaG93SW5zdHJ1Y3Rpb25zID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0YXJnZXQuc2NvcGU7XG5cbiAgICAvLyBFc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzIG11c3Qgc3RheSBhY3RpdmUgZXZlbiB3aGVuIHRoZSBjb250cm9sIHN0cmlwIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZW50cnkucmVnaXN0ZXJTY29wZT8uKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFNob3dJbnN0cnVjdGlvbnMpIHtcbiAgICAgIHJldHVybiBOT09QX01PREFMX0NPTU1BTkRTO1xuICAgIH1cblxuICAgIC8vIEVhY2ggcmVuZGVyZXIgaGFuZHMgYmFjayBvbmUgY2xvc3VyZSBwZXIgY29udHJvbCBpdCBhY3R1YWxseSBkcmV3LCBhbHJlYWR5IGJvdW5kIHRvIHRoYXQgY29udHJvbCdzXG4gICAgLy8gZWxlbWVudHMg4oCUIHNvIGByZWZyZXNoYCBuZXZlciBoYXMgdG8ga25vdyB3aGljaCBvZiB0aGUgdHdvIHNoYXBlcyBpdCBpcyByZS1zdGF0aW5nLlxuICAgIGNvbnN0IHJlZnJlc2hlcnMgPSByZW5kZXJNb2RlID09PSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9ucyh0YXJnZXQsIHNjb3BlKVxuICAgICAgOiB0aGlzLnJlbmRlckluc3RydWN0aW9ucyh0YXJnZXQsIHNjb3BlKTtcblxuICAgIGNvbnN0IG1vZGFsQ29tbWFuZHM6IE1vZGFsQ29tbWFuZHMgPSB7XG4gICAgICByZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmcmVzaENvbnRyb2wgb2YgcmVmcmVzaGVycykge1xuICAgICAgICAgIHJlZnJlc2hDb250cm9sKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG1vZGFsQ29tbWFuZHMucmVmcmVzaCgpO1xuICAgIHJldHVybiBtb2RhbENvbW1hbmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1hbmRUZXh0KGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogc3RyaW5nIHtcbiAgICBsZXQgY29tbWFuZFRleHQgPSBLRVlTX01BUC5nZXQoY29tbWFuZC5rZXkpID8/IGNvbW1hbmQua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBjb21tYW5kLm1vZGlmaWVycyA/PyBbXSkge1xuICAgICAgY29tbWFuZFRleHQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kVGV4dH1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kVGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kaWZpZXJTdHJpbmcobW9kaWZpZXI6IE1vZGlmaWVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ3dpbic7XG4gICAgICB9XG4gICAgICBjYXNlICdNb2QnOiB7XG4gICAgICAgIHJldHVybiBQbGF0Zm9ybS5pc01hY09TID8gJ2NtZCcgOiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdTaGlmdCc6IHtcbiAgICAgICAgcmV0dXJuICdzaGlmdCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBtb2RpZmllcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVsZW1lbnQgYSBzZWxmLWNyZWF0ZWQgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEEge0BsaW5rIE1vZGFsfSBjYXJyaWVzIGJvdGggYG1vZGFsRWxgIGFuZCBhIGBjb250YWluZXJFbGAgdGhhdCBpcyB0aGUgT1VURVIgYC5tb2RhbC1jb250YWluZXJgLCBzb1xuICAgKiBgbW9kYWxFbGAgaGFzIHRvIHdpbiDigJQgb3RoZXJ3aXNlIHRoZSBzdHJpcCBsYW5kcyBvdXRzaWRlIHRoZSBtb2RhbCBmcmFtZS4gRGlzY3JpbWluYXRlZCB3aXRoIGBpbmBcbiAgICogcmF0aGVyIHRoYW4gYSBwcm9wZXJ0eSByZWFkLCBiZWNhdXNlIHRlc3RzIGhhbmQgYGJ1aWxkYCBhIGBzdHJpY3RQcm94eWAgbW9jayB3aG9zZSBgZ2V0YCB0cmFwIHRocm93c1xuICAgKiBvbiB1bm1vY2tlZCBtZW1iZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGJ1aWxkIHRhcmdldC5cbiAgICogQHJldHVybnMgVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBzdHJpcCB0by5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RyaXBDb250YWluZXJFbCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuICdtb2RhbEVsJyBpbiB0YXJnZXQgPyB0YXJnZXQubW9kYWxFbCA6IHRhcmdldC5jb250YWluZXJFbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnV0dG9ucyh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIHNjb3BlOiBTY29wZSk6IFJlZnJlc2hDb250cm9sW10ge1xuICAgIGNvbnN0IHN0cmlwRWwgPSB0aGlzLmdldFN0cmlwQ29udGFpbmVyRWwodGFyZ2V0KS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHN0cmlwRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZHMpO1xuXG4gICAgY29uc3QgcmVmcmVzaGVyczogUmVmcmVzaENvbnRyb2xbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyeS5pc0Ryb3BEb3duKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlbmRlciBkcm9wZG93biBjb21tYW5kIFwiJHtlbnRyeS5wdXJwb3NlfVwiIGFzIGEgYnV0dG9uOiBhIGNvbnRyb2wgdGhhdCBjeWNsZXMgaGFzIG5vIGJ1dHRvbiBmb3JtLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVudHJ5LmluaXRCdXR0b24pIHtcbiAgICAgICAgLy8gSGludC1vbmx5IGFuZCBrZXlib2FyZC1vbmx5IGNvbW1hbmRzIGhhdmUgbm8gcG9pbnRlciByb3V0ZSwgYW5kIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXNcbiAgICAgICAgLy8gd29yc2UgdGhhbiBubyBidXR0b24uIFRoZWlyIHNjb3BlIGhhbmRsZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25FbCA9IHN0cmlwRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicgfSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJ1dHRvbkVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmQpO1xuICAgICAgYnV0dG9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGVudHJ5LnB1cnBvc2UgfSk7XG5cbiAgICAgIC8vIFRoZSBob3RrZXkgaXMgc2hvd24gb25seSB3aGVyZSBvbmUgY2FuIGJlIHByZXNzZWQuIE9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvIG9mZmVyLFxuICAgICAgLy8gYW5kIHRoZSBidXR0b24gSVMgdGhlIG9ubHkgd2F5IGluIOKAlCB3aGljaCBpcyB3aHkgdGhlIHN0cmlwIGV4aXN0cy5cbiAgICAgIGlmICghUGxhdGZvcm0uaXNNb2JpbGUpIHtcbiAgICAgICAgY29uc3QgaG90a2V5RWwgPSBidXR0b25FbC5jcmVhdGVTcGFuKHsgdGV4dDogZW50cnkuY29tbWFuZFRleHQgfSk7XG4gICAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoaG90a2V5RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZEhvdGtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBpbnB1dCBrZWVwcyBmb2N1czogYSBtb2RhbCB0aGF0IGZpbHRlcnMgYXMgeW91IHR5cGUgd291bGQgZW5kIGl0cyBzZWFyY2ggbWlkLXdvcmQgaWYgYSBjbGlja1xuICAgICAgLy8gc3RvbGUgZm9jdXMuXG4gICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbkNvbnRyb2wgPSBlbnRyeS5pbml0QnV0dG9uKGJ1dHRvbkVsLCBzY29wZSk7XG4gICAgICBjb25zdCBjaGVja0lzQXZhaWxhYmxlID0gZW50cnkuY2hlY2tJc0F2YWlsYWJsZTtcbiAgICAgIHJlZnJlc2hlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0lzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09uID0gYnV0dG9uQ29udHJvbC5jaGVja0lzT24oKTtcbiAgICAgICAgYnV0dG9uRWwudG9nZ2xlQ2xhc3MoQ3NzQ2xhc3MuSXNBY3RpdmUsIGlzT24pO1xuICAgICAgICBidXR0b25FbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIFN0cmluZyhpc09uKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmcmVzaGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVySW5zdHJ1Y3Rpb25zKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgc2NvcGU6IFNjb3BlKTogUmVmcmVzaENvbnRyb2xbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSB0aGlzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGNvbW1hbmQ6IGVudHJ5LmNvbW1hbmRUZXh0LFxuICAgICAgZW50cnksXG4gICAgICBwdXJwb3NlOiBlbnRyeS5wdXJwb3NlXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHVycG9zZUVscyA9ICdzZXRJbnN0cnVjdGlvbnMnIGluIHRhcmdldFxuICAgICAgPyB0aGlzLnJlbmRlck5hdGl2ZUluc3RydWN0aW9ucyh0YXJnZXQsIGluc3RydWN0aW9ucylcbiAgICAgIDogdGhpcy5yZW5kZXJPd25JbnN0cnVjdGlvbnModGhpcy5nZXRTdHJpcENvbnRhaW5lckVsKHRhcmdldCksIGluc3RydWN0aW9ucyk7XG5cbiAgICBjb25zdCByZWZyZXNoZXJzOiBSZWZyZXNoQ29udHJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGluc3RydWN0aW9uXSBvZiBpbnN0cnVjdGlvbnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwdXJwb3NlRWwgPSBwdXJwb3NlRWxzW2luZGV4XTtcbiAgICAgIC8vIEEgaG9zdCBtYXkgcmVuZGVyIGZld2VyIHB1cnBvc2UgZWxlbWVudHMgdGhhbiB0aGVyZSBhcmUgaW5zdHJ1Y3Rpb25zOyBza2lwIHJhdGhlciB0aGFuIHRocm93LlxuICAgICAgaWYgKCFwdXJwb3NlRWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluc3RydWN0aW9uQ29udHJvbCA9IGluc3RydWN0aW9uLmVudHJ5LmluaXRJbnN0cnVjdGlvbj8uKHB1cnBvc2VFbCwgc2NvcGUpO1xuICAgICAgY29uc3QgY2hlY2tJc0F2YWlsYWJsZSA9IGluc3RydWN0aW9uLmVudHJ5LmNoZWNrSXNBdmFpbGFibGU7XG4gICAgICAvLyBBIGNvbnRyb2wgc2hvd3MgaXRzIG93biBwcmVzc2VkIHN0YXRlIGhlcmUsIHNvIGF2YWlsYWJpbGl0eSBpcyB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHJlLXN0YXRlIOKAlFxuICAgICAgLy8gYW5kIGEgY29tbWFuZCB0aGF0IGRlY2xhcmVzIG5vbmUgbmVlZHMgbm8gcmVmcmVzaGVyIGF0IGFsbC5cbiAgICAgIGlmIChpbnN0cnVjdGlvbkNvbnRyb2wgJiYgY2hlY2tJc0F2YWlsYWJsZSkge1xuICAgICAgICByZWZyZXNoZXJzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGluc3RydWN0aW9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZnJlc2hlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGluc3RydWN0aW9uIGJhciwgdGhlIHdheSBldmVyeSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSBjb25zdW1lciBoYXMgYWx3YXlzXG4gICAqIGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIHN1Z2dlc3QgbW9kYWwuXG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHB1cnBvc2UgZWxlbWVudCBvZiBlYWNoIHJlbmRlcmVkIGluc3RydWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOYXRpdmVJbnN0cnVjdGlvbnMobW9kYWw6IFN1Z2dlc3RNb2RhbDx1bmtub3duPiwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgbW9kYWwuc2V0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgcmV0dXJuIFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhbiBpbnN0cnVjdGlvbiBiYXIgb2YgdGhlIGJ1aWxkZXIncyBvd24sIGZvciBhIGhvc3QgdGhhdCBoYXMgbm9uZS5cbiAgICpcbiAgICogVGhlIG1hcmt1cCBtaXJyb3JzIHdoYXQgYHNldEluc3RydWN0aW9uc2AgcHJvZHVjZXMg4oCUIGluY2x1ZGluZ1xuICAgKiB7QGxpbmsgQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25Db21tYW5kfSBvbiB0aGUga2V5IGhpbnQsIHdoaWNoIGlzIG5vdCBkZWNvcmF0aW9uOiBPYnNpZGlhbidzIHJ1bGVcbiAgICogZm9yIHRoYXQgY2xhc3MgaXMgd2hhdCBzdXBwbGllcyB0aGUgaGludCdzIGJvbGQgd2VpZ2h0IGFuZCB0aGUgYG1hcmdpbi1pbmxpbmUtZW5kYCBzZXBhcmF0aW5nIGl0XG4gICAqIGZyb20gdGhlIHB1cnBvc2UgdGV4dC4gRXZlcnkgY2xhc3MgaGVyZSBpcyB1bnNjb3BlZCBpbiB0aGUgYXBwJ3Mgc3R5bGVzaGVldCwgc28gYWxsIG9mIGl0IHJlYWNoZXMgYVxuICAgKiBwbGFpbiB7QGxpbmsgTW9kYWx9IGFzIHJlYWRpbHkgYXMgaXQgcmVhY2hlcyB0aGUgcXVpY2sgc3dpdGNoZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIGFwcGVuZCB0aGUgYmFyIHRvLlxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byByZW5kZXIuXG4gICAqIEByZXR1cm5zIFRoZSBwdXJwb3NlIGVsZW1lbnQgb2YgZWFjaCByZW5kZXJlZCBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3duSW5zdHJ1Y3Rpb25zKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25zKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGluc3RydWN0aW9uc0VsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRzKTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25FbCA9IGluc3RydWN0aW9uc0VsLmNyZWF0ZURpdihDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbik7XG4gICAgICBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyBjbHM6IENzc0NsYXNzLlByb21wdEluc3RydWN0aW9uQ29tbWFuZCwgdGV4dDogaW5zdHJ1Y3Rpb24uY29tbWFuZCB9KTtcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiBpbnN0cnVjdGlvbi5wdXJwb3NlIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRmxpcHMgYSBjaGVja2JveCBhbmQgYW5ub3VuY2VzIGl0LCB1bmxlc3MgaXQgaXMgZGlzYWJsZWQuXG4gKlxuICogU2hhcmVkIGJ5IHRoZSBzaG9ydGN1dCBhbmQgdGhlIGJ1dHRvbiBzbyB0aGUgdHdvIHJvdXRlcyBjYW5ub3QgZHJpZnQg4oCUIGluY2x1ZGluZyB0aGUgZGlzYWJsZWQgZ3VhcmQsXG4gKiB3aGljaCBpcyB0aGUgaGFsZiBtb3N0IGVhc2lseSBmb3Jnb3R0ZW4gb24gb25lIG9mIHRoZW0uXG4gKlxuICogQHBhcmFtIGNoZWNrYm94RWwgLSBUaGUgY2hlY2tib3ggdG8gdG9nZ2xlLlxuICovXG5mdW5jdGlvbiB0b2dnbGVDaGVja2JveChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gIGlmIChjaGVja2JveEVsLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNoZWNrYm94RWwuY2hlY2tlZCA9ICFjaGVja2JveEVsLmNoZWNrZWQ7XG4gIGNoZWNrYm94RWwudHJpZ2dlcignY2hhbmdlJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNENBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUywyQkFBMkI7QUFFcEMsTUFBTSxXQUFXLG9CQUFJ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QUFBQSxJQUNIO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVRLG1CQUFtQixRQUE2QixPQUFnQztBQUN0RixVQUFNLGVBQWdDLEtBQUssUUFBUSxJQUFJLENBQUMsV0FBVztBQUFBLE1BQ2pFLFNBQVMsTUFBTTtBQUFBLE1BQ2Y7QUFBQSxNQUNBLFNBQVMsTUFBTTtBQUFBLElBQ2pCLEVBQUU7QUFFRixVQUFNLGFBQWEscUJBQXFCLFNBQ3BDLEtBQUsseUJBQXlCLFFBQVEsWUFBWSxJQUNsRCxLQUFLLHNCQUFzQixLQUFLLG9CQUFvQixNQUFNLEdBQUcsWUFBWTtBQUU3RSxVQUFNLGFBQStCLENBQUM7QUFDdEMsZUFBVyxDQUFDLE9BQU8sV0FBVyxLQUFLLGFBQWEsUUFBUSxHQUFHO0FBQ3pELFlBQU0sWUFBWSxXQUFXLEtBQUs7QUFFbEMsVUFBSSxDQUFDLFdBQVc7QUFDZDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLHFCQUFxQixZQUFZLE1BQU0sa0JBQWtCLFdBQVcsS0FBSztBQUMvRSxZQUFNLG1CQUFtQixZQUFZLE1BQU07QUFHM0MsVUFBSSxzQkFBc0Isa0JBQWtCO0FBQzFDLG1CQUFXLEtBQUssTUFBTTtBQUNwQiw2QkFBbUIsWUFBWSxDQUFDLGlCQUFpQixDQUFDO0FBQUEsUUFDcEQsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVUSx5QkFBeUIsT0FBOEIsY0FBa0Q7QUFDL0csVUFBTSxnQkFBZ0IsWUFBWTtBQUNsQyxXQUFPLENBQUMsR0FBRyxNQUFNLGVBQWUsUUFBUSx5Q0FBeUMsQ0FBQztBQUFBLEVBQ3BGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWVRLHNCQUFzQixhQUEwQixjQUFrRDtBQUN4RyxVQUFNLGlCQUFpQixZQUFZLFVBQVUsU0FBUyxrQkFBa0I7QUFDeEUsd0JBQW9CLGdCQUFnQixTQUFTLGFBQWE7QUFFMUQsV0FBTyxhQUFhLElBQUksQ0FBQyxnQkFBZ0I7QUFDdkMsWUFBTSxnQkFBZ0IsZUFBZSxVQUFVLFNBQVMsaUJBQWlCO0FBQ3pFLG9CQUFjLFdBQVcsRUFBRSxLQUFLLFNBQVMsMEJBQTBCLE1BQU0sWUFBWSxRQUFRLENBQUM7QUFDOUYsYUFBTyxjQUFjLFdBQVcsRUFBRSxNQUFNLFlBQVksUUFBUSxDQUFDO0FBQUEsSUFDL0QsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQVVBLFNBQVMsZUFBZSxZQUFvQztBQUMxRCxNQUFJLFdBQVcsVUFBVTtBQUN2QjtBQUFBLEVBQ0Y7QUFDQSxhQUFXLFVBQVUsQ0FBQyxXQUFXO0FBQ2pDLGFBQVcsUUFBUSxRQUFRO0FBQzdCOyIsIm5hbWVzIjpbIk1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvbW9kYWwtY29tbWFuZC1idWlsZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGJ1aWxkZXIgZm9yIGEgbW9kYWwncyBjb250cm9sIHN0cmlwLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfSBhc3NlbWJsZXMgdGhlIHN0cmlwIG9mIGNvbnRyb2xzIHNob3duIGF0IHRoZSBib3R0b20gb2YgYSBtb2RhbDpcbiAqIGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZEtleWJvYXJkQ29tbWFuZH0pLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzIGJvdW5kIHRvXG4gKiBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCAoe0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleVxuICogc2hvcnRjdXQgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZERyb3BEb3dufSkuIENoYWluIHRoZSBgYWRkKmAgY2FsbHMsIHRoZW4gYXBwbHkgZXZlcnl0aGluZyB0byBhXG4gKiBtb2RhbCB3aXRoIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfTpcbiAqXG4gKiBgYGB0c1xuICogbmV3IE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBzdHJpcCBpcyBkZXNjcmliZWQgYnkgdHdvIGluZGVwZW5kZW50IGF4ZXM6XG4gKlxuICogLSAqKldoZXJlIGl0IGlzIGhvc3RlZC4qKiBBIHtAbGluayBTdWdnZXN0TW9kYWx9IGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGVcbiAqICAga2VlcHMgT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyIChgc2V0SW5zdHJ1Y3Rpb25zYCArIGBpbnN0cnVjdGlvbnNFbGApLiBFdmVyeSBvdGhlciB0YXJnZXQg4oCUIGFcbiAqICAgcGxhaW4ge0BsaW5rIE1vZGFsfSwgb3IgYSBiYXJlIHtAbGluayBNb2RhbENvbW1hbmRzSG9zdH0gb2YgYW4gZWxlbWVudCBwbHVzIGEgYFNjb3BlYCDigJQgZ2V0cyBhIHN0cmlwXG4gKiAgIGVsZW1lbnQgdGhlIGJ1aWxkZXIgY3JlYXRlcyBpdHNlbGYuXG4gKiAtICoqSG93IGVhY2ggY29udHJvbCBsb29rcy4qKiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zfSByZW5kZXJzIHRoZSBwdXJwb3NlIHRleHQgd2l0aFxuICogICBhbiBpbmxpbmUgY2hlY2tib3ggb3IgZHJvcGRvd247IHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSByZW5kZXJzIG9uZSBjbGlja2FibGUgYnV0dG9uXG4gKiAgIHBlciBjb250cm9sLCBjYXJyeWluZyBpdHMgcHJlc3NlZCBhbmQgZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogVGhlIGF4ZXMgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgYSBidXR0b24gc3RyaXAgaW5zaWRlIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0gaXMgYSByZWFsIGNvbWJpbmF0aW9uLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzLCBidXRcbiAqIG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBVSSBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RhbCxcbiAgTW9kaWZpZXIsXG4gIFNjb3BlLFxuICBTdWdnZXN0TW9kYWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgUGxhdGZvcm1cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgS0VZU19NQVAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRW50ZXInLCAn4oa1J10sXG4gIFsnVXBEb3duJywgJ+KGkeKGkyddXG5dKTtcblxuLyoqXG4gKiBUaGUgd2F5IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSByZW5kZXJzIGVhY2ggY29udHJvbC5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxDb21tYW5kc1JlbmRlck1vZGUge1xuICAvKipcbiAgICogT25lIGNsaWNrYWJsZSBidXR0b24gcGVyIGNvbnRyb2wsIGNhcnJ5aW5nIGl0cyBwcmVzc2VkIChgYXJpYS1wcmVzc2VkYCkgYW5kIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiBPbmx5IGNvbnRyb2xzIHJlYWNoYWJsZSBieSBwb2ludGVyIGFyZSByZW5kZXJlZCDigJQgY2hlY2tib3hlcywgYW5kIGtleWJvYXJkIGNvbW1hbmRzIHRoYXQgc3VwcGx5XG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25BY3RpdmF0ZX0uIEEgaGludC1vbmx5IG9yIGtleWJvYXJkLW9ubHkgY29tbWFuZCBzdGlsbCByZWdpc3RlcnMgaXRzIGhhbmRsZXJcbiAgICogYnV0IHJlbmRlcnMgbm8gYnV0dG9uLCBiZWNhdXNlIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXMgd29yc2UgdGhhbiBubyBidXR0b24uIEEgZHJvcGRvd24gdGhyb3dzOlxuICAgKiBhIGNvbnRyb2wgdGhhdCBDWUNMRVMgaGFzIG5vIGJ1dHRvbiBmb3JtLlxuICAgKi9cbiAgQnV0dG9ucyA9ICdidXR0b25zJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBpbnN0cnVjdGlvbi1iYXIgbG9vazogdGhlIHNob3J0Y3V0LCB0aGVuIHRoZSBwdXJwb3NlIHRleHQgd2l0aCBhbiBpbmxpbmUgY2hlY2tib3ggb3JcbiAgICogZHJvcGRvd24uXG4gICAqL1xuICBJbnN0cnVjdGlvbnMgPSAnaW5zdHJ1Y3Rpb25zJ1xufVxuXG4vKipcbiAqIEEgY2hlY2tib3ggY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzXG4gKiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzQ2hlY2tlZCAtIFRoZSBuZXcgY2hlY2tlZCBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiAoaXNDaGVja2VkOiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSB3aXRoIHRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQsIHRvIGluaXRpYWxpemUgaXRzIHN0YXRlLlxuICAgKlxuICAgKiBJbiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuQnV0dG9uc30gbW9kZSB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGJ1dCBuZXZlciBhcHBlbmRlZCDigJQgdGhlXG4gICAqIGJ1dHRvbiBpcyBhIHZpZXcgb2YgaXQg4oCUIHNvIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uIGNvZGUgc2VydmVzIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hlY2tib3hFbCAtIFRoZSBjcmVhdGVkIGNoZWNrYm94IGVsZW1lbnQuXG4gICAqL1xuICByZWFkb25seSBvbkluaXQ6IChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBtZW1iZXJzIGV2ZXJ5IGNvbW1hbmQgc2hhcmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRyb2wgY2FuIGJlIHVzZWQgcmlnaHQgbm93LiBXaGVuIGl0IHJldHVybnMgYGZhbHNlYCB0aGUgY29udHJvbCBpcyByZW5kZXJlZFxuICAgKiAqKmRpc2FibGVkIHJhdGhlciB0aGFuIHJlbW92ZWQqKiwgc28gdGhlIHN0cmlwIGRvZXMgbm90IHJlZmxvdyB1bmRlciB0aGUgcG9pbnRlciBhcyBtb2RlcyBjaGFuZ2Ug4oCUXG4gICAqIHdoaWNoIG9uIGEgcGhvbmUgbWVhbnMgYSBtaXMtdGFwLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LiBXaGVuIG9taXR0ZWQsIHRoZSBidWlsZGVyIG5ldmVyIHRvdWNoZXMgdGhlIGNvbnRyb2wnc1xuICAgKiBkaXNhYmxlZCBzdGF0ZSwgbGVhdmluZyB3aGF0ZXZlciB7QGxpbmsgQ2hlY2tib3hDb21tYW5kLm9uSW5pdH0gLyB7QGxpbmsgRHJvcERvd25Db21tYW5kLm9uSW5pdH0gc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb250cm9sIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdy5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrSXNBdmFpbGFibGU/OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRoYXQgYWN0aXZhdGVzIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllcnMgY29tYmluZWQgd2l0aCB7QGxpbmsgQ29tbWFuZEJhc2Uua2V5fS4gV2hlbiBvbWl0dGVkLCBubyBtb2RpZmllcnMgYXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogVGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHNob3duIG5leHQgdG8gdGhlIGNvbnRyb2wuXG4gICAqL1xuICByZWFkb25seSBwdXJwb3NlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBjb21tYW5kIHNob3duIGluIGEgbW9kYWwncyBjb250cm9sIHN0cmlwIGFuZCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlc1xuICogdGhyb3VnaCBpdHMgb3B0aW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgaW4ge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc30gbW9kZSBvbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BEb3duQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBkcm9wZG93biB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3bHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LCB0byBpbml0aWFsaXplIGl0cyBvcHRpb25zIGFuZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRyb3Bkb3duQ29tcG9uZW50IC0gVGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb25Jbml0OiAoZHJvcGRvd25Db21wb25lbnQ6IERyb3Bkb3duQ29tcG9uZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEga2V5Ym9hcmQgY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgb3B0aW9uYWxseSBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleWJvYXJkQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbW1hbmQgcmVhZHMgYXMgT04uIFN1cHBseSBpdCBmb3IgYSB0b2dnbGUgd2hvc2Ugc3RhdGUgbGl2ZXMgb3V0c2lkZSB0aGUgc3RyaXA7IG9taXQgaXRcbiAgICogZm9yIGFuIGFjdGlvbiwgd2hpY2ggZG9lcyBzb21ldGhpbmcgYW5kIGlzIGRvbmUuIEEge0BsaW5rIENoZWNrYm94Q29tbWFuZH0gbmVlZHMgbm8gZXF1aXZhbGVudCDigJQgaXRzXG4gICAqIGNoZWNrYm94IGVsZW1lbnQgaXMgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBSZS1yZWFkIGJ5IHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIHJlYWRzIGFzIE9OLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJc09uPzogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgcm91dGUgaW50byB0aGUgc2FtZSBoYW5kbGVyIHRoZSBzaG9ydGN1dCBydW5zLiBSZXF1aXJlZCBmb3IgdGhlIGNvbW1hbmQgdG8gcmVuZGVyIGFcbiAgICogYnV0dG9uIGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSBtb2RlIOKAlCBvbiBhIHBob25lIHRoZXJlIGlzIG5vIG1vZGlmaWVyIGtleSB0b1xuICAgKiBwcmVzcywgc28gdGhpcyBpcyB0aGUgb25seSB3YXkgaW4uXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgY2xpY2sgZXZlbnQsIHNvIGEgY29tbWFuZCB0aGF0IHBpY2tzIHNvbWV0aGluZyBoYXMgb25lIHRvIGhhbmQgb24uXG4gICAqL1xuICByZWFkb25seSBvbkFjdGl2YXRlPzogKCRldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGhhbmRsZXIgaW52b2tlZCB3aGVuIHRoZSBzaG9ydGN1dCBpcyBwcmVzc2VkLiBXaGVuIG9taXR0ZWQsIHRoZSBjb21tYW5kIGlzIGEgaGludCBvbmx5IGFuZCBub1xuICAgKiBzY29wZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUga2V5Ym9hcmQgZXZlbnQuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGtleW1hcCBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIHRvIHByZXZlbnQgT2JzaWRpYW4ncyBkZWZhdWx0IGhhbmRsaW5nLCBvciBgdm9pZGAvYHRydWVgIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IG9uS2V5PzogKCRldmVudDogS2V5Ym9hcmRFdmVudCwgY29udGV4dDogS2V5bWFwQ29udGV4dCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd2F5IGVhY2ggY29udHJvbCBpcyByZW5kZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbnRyb2wgc3RyaXAgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gY29udHJvbCBVSSBpcyBzaG93biBhbmQgdGhlIG9wdGlvbi10b2dnbGVcbiAgICogc2hvcnRjdXRzIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24ga2V5IGhhbmRsZXJzIHJlbWFpbiBhY3RpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0luc3RydWN0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGhhbmRsZSByZXR1cm5lZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBCcmluZ3MgZXZlcnkgcmVuZGVyZWQgY29udHJvbCdzIGRpc2FibGVkIGFuZCBwcmVzc2VkIHN0YXRlIHVwIHRvIGRhdGUsIGJ5IHJlLXJlYWRpbmdcbiAgICoge0BsaW5rIENvbW1hbmRCYXNlLmNoZWNrSXNBdmFpbGFibGV9IGFuZCB7QGxpbmsgS2V5Ym9hcmRDb21tYW5kLmNoZWNrSXNPbn0uXG4gICAqXG4gICAqIFRoZSBzdHJpcCBpcyBidWlsdCBvbmNlIGFuZCBvbmx5IHJlLXN0YXRlZCBhZnRlcndhcmRzLCBiZWNhdXNlIHJlYnVpbGRpbmcgaXQgd291bGQgcmVwbGFjZSBhbiBlbGVtZW50XG4gICAqIHRoZSBwb2ludGVyIG1heSBiZSBhYm91dCB0byBjbGljay5cbiAgICovXG4gIHJlYWRvbmx5IHJlZnJlc2g6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBiYXJlIGhvc3QgZm9yIGEgY29udHJvbCBzdHJpcDogdGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8sIHBsdXMgdGhlIHNjb3BlIHRvIHJlZ2lzdGVyIHNob3J0Y3V0cyB3aXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29tbWFuZHNIb3N0IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoZSBjb250cm9sIHN0cmlwIGlzIGFwcGVuZGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdGhlIHNob3J0Y3V0cyBhcmUgcmVnaXN0ZXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IFNjb3BlO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHRhcmdldCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0gYWNjZXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgTW9kYWxDb21tYW5kc1RhcmdldCA9IE1vZGFsIHwgTW9kYWxDb21tYW5kc0hvc3QgfCBTdWdnZXN0TW9kYWw8dW5rbm93bj47XG5cbi8qKlxuICogT25lIGFjY3VtdWxhdGVkIGNvbW1hbmQsIHJlZHVjZWQgdG8gdGhlIGhhbmRmdWwgb2YgdGhpbmdzIGJvdGggcmVuZGVyZXJzIG5lZWQuXG4gKlxuICogT3B0aW9uYWwgY29sbGFib3JhdG9ycyBhcmUgYG51bGwgfCBYYCByZXF1aXJlZCBmaWVsZHMgcmF0aGVyIHRoYW4gYD9gLCBzbyBldmVyeSBjb25zdHJ1Y3Rpb24gc2l0ZSBoYXMgdG9cbiAqIHNheSB3aGljaCBvbmVzIGl0IGhhcy5cbiAqL1xuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBhcyBhIEJVVFRPTi5cbiAqXG4gKiBJdCByZXBvcnRzIGl0cyBvd24gcHJlc3NlZCBzdGF0ZSwgYmVjYXVzZSBvbmx5IHRoZSBidXR0b24gcmVuZGVyZXIgaGFzIGFueXdoZXJlIHRvIHNob3cgb25lLlxuICovXG5pbnRlcmZhY2UgQnV0dG9uQ29udHJvbCB7XG4gIHJlYWRvbmx5IGNoZWNrSXNPbjogKCkgPT4gYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEVudHJ5IHtcbiAgcmVhZG9ubHkgY2hlY2tJc0F2YWlsYWJsZTogKCgpID0+IGJvb2xlYW4pIHwgbnVsbDtcbiAgcmVhZG9ubHkgY29tbWFuZFRleHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5pdEJ1dHRvbjogKChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gQnV0dG9uQ29udHJvbCkgfCBudWxsO1xuICByZWFkb25seSBpbml0SW5zdHJ1Y3Rpb246ICgocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSkgPT4gSW5zdHJ1Y3Rpb25Db250cm9sKSB8IG51bGw7XG4gIHJlYWRvbmx5IGlzRHJvcERvd246IGJvb2xlYW47XG4gIHJlYWRvbmx5IHB1cnBvc2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaXN0ZXJTY29wZTogKChzY29wZTogU2NvcGUpID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBPbmUgY29udHJvbCByZW5kZXJlZCBpbnRvIGFuIElOU1RSVUNUSU9OIGJhci5cbiAqXG4gKiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gcHJlc3NlZCBzdGF0ZSBoZXJlOiB0aGUgY29udHJvbCDigJQgYSBjaGVja2JveCwgYSBkcm9wZG93biDigJQgc2hvd3MgaXRzIG93bixcbiAqIHNvIGEgc2Vjb25kIGNvcHkgd291bGQgb25seSBiZSBhIHNlY29uZCB0aGluZyB0byBrZWVwIGluIHN5bmMuXG4gKi9cbmludGVyZmFjZSBJbnN0cnVjdGlvbkNvbnRyb2wge1xuICByZWFkb25seSBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBJbnN0cnVjdGlvbkV4IGV4dGVuZHMgSW5zdHJ1Y3Rpb24ge1xuICByZWFkb25seSBlbnRyeTogQ29tbWFuZEVudHJ5O1xufVxuXG4vKipcbiAqIFJlLXN0YXRlcyBvbmUgcmVuZGVyZWQgY29udHJvbCwgYWxyZWFkeSBib3VuZCB0byBpdHMgb3duIGVsZW1lbnRzLlxuICovXG50eXBlIFJlZnJlc2hDb250cm9sID0gKCkgPT4gdm9pZDtcblxuY29uc3QgTk9PUF9NT0RBTF9DT01NQU5EUzogTW9kYWxDb21tYW5kcyA9IHtcbiAgcmVmcmVzaDogKCk6IHZvaWQgPT4ge1xuICAgIC8vIE5vdGhpbmcgd2FzIHJlbmRlcmVkLCBzbyB0aGVyZSBpcyBubyBzdGF0ZSB0byByZS1zdGF0ZS5cbiAgfVxufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBtb2RhbCdzIGNvbnRyb2wgc3RyaXAgZnJvbSBrZXlib2FyZCBjb21tYW5kcywgaW50ZXJhY3RpdmUgY2hlY2tib3hlcywgYW5kIGRyb3Bkb3ducywgdGhlblxuICogYXBwbGllcyB0aGVtIHRvIGEgbW9kYWwgdmlhIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsQ29tbWFuZEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IENvbW1hbmRFbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW50ZXJhY3RpdmUgY2hlY2tib3ggdG8gdGhlIGNvbnRyb2wgc3RyaXAsIGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5IHNob3J0Y3V0IHRoYXQgdG9nZ2xlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY2hlY2tib3ggY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGVja2JveChjb21tYW5kOiBDaGVja2JveENvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50LCBzY29wZTogU2NvcGUpOiBCdXR0b25Db250cm9sID0+IHtcbiAgICAgICAgLy8gQ3JlYXRlZCBidXQgbmV2ZXIgYXBwZW5kZWQ6IHRoZSBjaGVja2JveCBob2xkcyB0aGUgc3RhdGUgYW5kIHRoZSBidXR0b24gaXMgYSB2aWV3IG9mIGl0LCBzb1xuICAgICAgICAvLyBgb25Jbml0YCAvIGBvbkNoYW5nZWAgbWVhbiBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGluIGJvdGggcmVuZGVyIG1vZGVzLlxuICAgICAgICBjb25zdCBjaGVja2JveEVsID0gY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICBpbml0Q2hlY2tib3goY2hlY2tib3hFbCwgc2NvcGUpO1xuICAgICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICB0b2dnbGVDaGVja2JveChjaGVja2JveEVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2tJc09uOiAoKTogYm9vbGVhbiA9PiBjaGVja2JveEVsLmNoZWNrZWQsXG4gICAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjaGVja2JveEVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICAgIGJ1dHRvbkVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICAvLyBUaGUgZ2FwIGdvZXMgb24gdGhlIGNvbnRyb2wsIG5vdCBvbiB0aGUgc3RyaXAsIHNvIGl0IGxhbmRzIG9uIEJPVEggcmVuZGVyIHBhdGhzOiBhXG4gICAgICAgIC8vIGBTdWdnZXN0TW9kYWxgJ3MgbmF0aXZlIGJhciBob3N0cyB0aGUgc2FtZSBjaGVja2JveCwgYW5kIHRoaXMgbGlicmFyeSBuZXZlciB0b3VjaGVzIHRoYXQgYmFyJ3MgZWxlbWVudC5cbiAgICAgICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhjaGVja2JveEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIGluaXRDaGVja2JveChjaGVja2JveEVsLCBzY29wZSk7XG4gICAgICB9LFxuICAgICAgaXNEcm9wRG93bjogZmFsc2UsXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgICBmdW5jdGlvbiBpbml0Q2hlY2tib3goY2hlY2tib3hFbDogSFRNTElucHV0RWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sIHtcbiAgICAgIGNvbW1hbmQub25Jbml0KGNoZWNrYm94RWwpO1xuICAgICAgY2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbW1hbmQub25DaGFuZ2UoY2hlY2tib3hFbC5jaGVja2VkKTtcbiAgICAgIH0pO1xuXG4gICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksICgpID0+IHtcbiAgICAgICAgdG9nZ2xlQ2hlY2tib3goY2hlY2tib3hFbCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgY2hlY2tib3hFbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkcm9wZG93biB0byB0aGUgY29udHJvbCBzdHJpcCwgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCBjeWNsZXMgdGhyb3VnaCBpdHNcbiAgICogb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgZHJvcGRvd24gY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGREcm9wRG93bihjb21tYW5kOiBEcm9wRG93bkNvbW1hbmQpOiB0aGlzIHtcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiBudWxsLFxuICAgICAgaW5pdEluc3RydWN0aW9uOiAocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEluc3RydWN0aW9uQ29udHJvbCA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duQ29tcG9uZW50ID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KHB1cnBvc2VFbCk7XG4gICAgICAgIC8vIFRoZSBzYW1lIGdhcCB0aGUgY2hlY2tib3ggZ2V0cywgc28gdGhlIHR3byBjb250cm9scyBhcmUgc2VwYXJhdGVkIGZyb20gdGhlaXIgbGFiZWwgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IOKAlCBhIHJlYWwgcnVsZSByYXRoZXIgdGhhbiB0aGUgbGl0ZXJhbCBzcGFjZSB0aGlzIHVzZWQgdG8gYXBwZW5kLlxuICAgICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGRyb3Bkb3duQ29tcG9uZW50LnNlbGVjdEVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRDb250cm9sKTtcbiAgICAgICAgY29tbWFuZC5vbkluaXQoZHJvcGRvd25Db21wb25lbnQpO1xuICAgICAgICBkcm9wZG93bkNvbXBvbmVudC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb21tYW5kLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGRlZmVuc2l2ZSA/PyBvbiBvcHRpb25hbCBtb2RpZmllcnMuICovXG4gICAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgaWYgKGRyb3Bkb3duQ29tcG9uZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNlbGVjdEVsID0gZHJvcGRvd25Db21wb25lbnQuc2VsZWN0RWw7XG4gICAgICAgICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IChzZWxlY3RFbC5zZWxlY3RlZEluZGV4ICsgMSkgJSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICBzZWxlY3RFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duQ29tcG9uZW50LnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0Ryb3BEb3duOiB0cnVlLFxuICAgICAgcHVycG9zZTogY29tbWFuZC5wdXJwb3NlLFxuICAgICAgcmVnaXN0ZXJTY29wZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBrZXlib2FyZCBjb21tYW5kIHRvIHRoZSBjb250cm9sIHN0cmlwLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIGNvbnN0IGNoZWNrSXNPbiA9IGNvbW1hbmQuY2hlY2tJc09uID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSk7XG4gICAgY29uc3Qgb25BY3RpdmF0ZSA9IGNvbW1hbmQub25BY3RpdmF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IG9uS2V5ID0gY29tbWFuZC5vbktleT8uYmluZChjb21tYW5kKSA/PyBudWxsO1xuXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgY2hlY2tJc0F2YWlsYWJsZTogY29tbWFuZC5jaGVja0lzQXZhaWxhYmxlID8/IG51bGwsXG4gICAgICBjb21tYW5kVGV4dDogdGhpcy5idWlsZENvbW1hbmRUZXh0KGNvbW1hbmQpLFxuICAgICAgaW5pdEJ1dHRvbjogb25BY3RpdmF0ZVxuICAgICAgICAvLyBObyBkaXNhYmxlZCBndWFyZCBvbiB0aGUgbGlzdGVuZXI6IGEgZGlzYWJsZWQgYnV0dG9uIGZpcmVzIG5vIGNsaWNrIGF0IGFsbCwgc28gYHNldERpc2FibGVkYFxuICAgICAgICAvLyBiZWxvdyBpcyB0aGUgd2hvbGUgZ2F0ZS5cbiAgICAgICAgPyAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50KTogQnV0dG9uQ29udHJvbCA9PiB7XG4gICAgICAgICAgYnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBvbkFjdGl2YXRlKCRldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoZWNrSXNPbixcbiAgICAgICAgICAgIHNldERpc2FibGVkOiAoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBidXR0b25FbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IG51bGwsXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG9uS2V5XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBkZWZlbnNpdmUgPz8gb24gb3B0aW9uYWwgbW9kaWZpZXJzLiAqL1xuICAgICAgICA/IChzY29wZTogU2NvcGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIG9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyB0byBhIG1vZGFsLiBBbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5XG4gICAqIGhhbmRsZXJzOyBvbmx5IHJlbmRlcnMgdGhlIGNvbnRyb2wgc3RyaXAgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgbW9kYWwsIG9yIHRoZSBiYXJlIGVsZW1lbnQgKyBzY29wZSwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB3aG9zZSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofSByZS1zdGF0ZXMgZXZlcnkgcmVuZGVyZWQgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBidWlsZCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIG9wdGlvbnM6IE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMgPSB7fSk6IE1vZGFsQ29tbWFuZHMge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlbmRlck1vZGUgPSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnMsXG4gICAgICBzaG91bGRTaG93SW5zdHJ1Y3Rpb25zID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0YXJnZXQuc2NvcGU7XG5cbiAgICAvLyBFc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzIG11c3Qgc3RheSBhY3RpdmUgZXZlbiB3aGVuIHRoZSBjb250cm9sIHN0cmlwIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZW50cnkucmVnaXN0ZXJTY29wZT8uKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFNob3dJbnN0cnVjdGlvbnMpIHtcbiAgICAgIHJldHVybiBOT09QX01PREFMX0NPTU1BTkRTO1xuICAgIH1cblxuICAgIC8vIEVhY2ggcmVuZGVyZXIgaGFuZHMgYmFjayBvbmUgY2xvc3VyZSBwZXIgY29udHJvbCBpdCBhY3R1YWxseSBkcmV3LCBhbHJlYWR5IGJvdW5kIHRvIHRoYXQgY29udHJvbCdzXG4gICAgLy8gZWxlbWVudHMg4oCUIHNvIGByZWZyZXNoYCBuZXZlciBoYXMgdG8ga25vdyB3aGljaCBvZiB0aGUgdHdvIHNoYXBlcyBpdCBpcyByZS1zdGF0aW5nLlxuICAgIGNvbnN0IHJlZnJlc2hlcnMgPSByZW5kZXJNb2RlID09PSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9ucyh0YXJnZXQsIHNjb3BlKVxuICAgICAgOiB0aGlzLnJlbmRlckluc3RydWN0aW9ucyh0YXJnZXQsIHNjb3BlKTtcblxuICAgIGNvbnN0IG1vZGFsQ29tbWFuZHM6IE1vZGFsQ29tbWFuZHMgPSB7XG4gICAgICByZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmcmVzaENvbnRyb2wgb2YgcmVmcmVzaGVycykge1xuICAgICAgICAgIHJlZnJlc2hDb250cm9sKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG1vZGFsQ29tbWFuZHMucmVmcmVzaCgpO1xuICAgIHJldHVybiBtb2RhbENvbW1hbmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1hbmRUZXh0KGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogc3RyaW5nIHtcbiAgICBsZXQgY29tbWFuZFRleHQgPSBLRVlTX01BUC5nZXQoY29tbWFuZC5rZXkpID8/IGNvbW1hbmQua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBjb21tYW5kLm1vZGlmaWVycyA/PyBbXSkge1xuICAgICAgY29tbWFuZFRleHQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kVGV4dH1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kVGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kaWZpZXJTdHJpbmcobW9kaWZpZXI6IE1vZGlmaWVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ3dpbic7XG4gICAgICB9XG4gICAgICBjYXNlICdNb2QnOiB7XG4gICAgICAgIHJldHVybiBQbGF0Zm9ybS5pc01hY09TID8gJ2NtZCcgOiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdTaGlmdCc6IHtcbiAgICAgICAgcmV0dXJuICdzaGlmdCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBtb2RpZmllcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVsZW1lbnQgYSBzZWxmLWNyZWF0ZWQgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEEge0BsaW5rIE1vZGFsfSBjYXJyaWVzIGJvdGggYG1vZGFsRWxgIGFuZCBhIGBjb250YWluZXJFbGAgdGhhdCBpcyB0aGUgT1VURVIgYC5tb2RhbC1jb250YWluZXJgLCBzb1xuICAgKiBgbW9kYWxFbGAgaGFzIHRvIHdpbiDigJQgb3RoZXJ3aXNlIHRoZSBzdHJpcCBsYW5kcyBvdXRzaWRlIHRoZSBtb2RhbCBmcmFtZS4gRGlzY3JpbWluYXRlZCB3aXRoIGBpbmBcbiAgICogcmF0aGVyIHRoYW4gYSBwcm9wZXJ0eSByZWFkLCBiZWNhdXNlIHRlc3RzIGhhbmQgYGJ1aWxkYCBhIGBzdHJpY3RQcm94eWAgbW9jayB3aG9zZSBgZ2V0YCB0cmFwIHRocm93c1xuICAgKiBvbiB1bm1vY2tlZCBtZW1iZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGJ1aWxkIHRhcmdldC5cbiAgICogQHJldHVybnMgVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBzdHJpcCB0by5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RyaXBDb250YWluZXJFbCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuICdtb2RhbEVsJyBpbiB0YXJnZXQgPyB0YXJnZXQubW9kYWxFbCA6IHRhcmdldC5jb250YWluZXJFbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnV0dG9ucyh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIHNjb3BlOiBTY29wZSk6IFJlZnJlc2hDb250cm9sW10ge1xuICAgIGNvbnN0IHN0cmlwRWwgPSB0aGlzLmdldFN0cmlwQ29udGFpbmVyRWwodGFyZ2V0KS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHN0cmlwRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZHMpO1xuXG4gICAgY29uc3QgcmVmcmVzaGVyczogUmVmcmVzaENvbnRyb2xbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyeS5pc0Ryb3BEb3duKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlbmRlciBkcm9wZG93biBjb21tYW5kIFwiJHtlbnRyeS5wdXJwb3NlfVwiIGFzIGEgYnV0dG9uOiBhIGNvbnRyb2wgdGhhdCBjeWNsZXMgaGFzIG5vIGJ1dHRvbiBmb3JtLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVudHJ5LmluaXRCdXR0b24pIHtcbiAgICAgICAgLy8gSGludC1vbmx5IGFuZCBrZXlib2FyZC1vbmx5IGNvbW1hbmRzIGhhdmUgbm8gcG9pbnRlciByb3V0ZSwgYW5kIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXNcbiAgICAgICAgLy8gd29yc2UgdGhhbiBubyBidXR0b24uIFRoZWlyIHNjb3BlIGhhbmRsZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25FbCA9IHN0cmlwRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicgfSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJ1dHRvbkVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmQpO1xuICAgICAgYnV0dG9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGVudHJ5LnB1cnBvc2UgfSk7XG5cbiAgICAgIC8vIFRoZSBob3RrZXkgaXMgc2hvd24gb25seSB3aGVyZSBvbmUgY2FuIGJlIHByZXNzZWQuIE9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvIG9mZmVyLFxuICAgICAgLy8gYW5kIHRoZSBidXR0b24gSVMgdGhlIG9ubHkgd2F5IGluIOKAlCB3aGljaCBpcyB3aHkgdGhlIHN0cmlwIGV4aXN0cy5cbiAgICAgIGlmICghUGxhdGZvcm0uaXNNb2JpbGUpIHtcbiAgICAgICAgY29uc3QgaG90a2V5RWwgPSBidXR0b25FbC5jcmVhdGVTcGFuKHsgdGV4dDogZW50cnkuY29tbWFuZFRleHQgfSk7XG4gICAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoaG90a2V5RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZEhvdGtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBpbnB1dCBrZWVwcyBmb2N1czogYSBtb2RhbCB0aGF0IGZpbHRlcnMgYXMgeW91IHR5cGUgd291bGQgZW5kIGl0cyBzZWFyY2ggbWlkLXdvcmQgaWYgYSBjbGlja1xuICAgICAgLy8gc3RvbGUgZm9jdXMuXG4gICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbkNvbnRyb2wgPSBlbnRyeS5pbml0QnV0dG9uKGJ1dHRvbkVsLCBzY29wZSk7XG4gICAgICBjb25zdCBjaGVja0lzQXZhaWxhYmxlID0gZW50cnkuY2hlY2tJc0F2YWlsYWJsZTtcbiAgICAgIHJlZnJlc2hlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0lzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09uID0gYnV0dG9uQ29udHJvbC5jaGVja0lzT24oKTtcbiAgICAgICAgYnV0dG9uRWwudG9nZ2xlQ2xhc3MoQ3NzQ2xhc3MuSXNBY3RpdmUsIGlzT24pO1xuICAgICAgICBidXR0b25FbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIFN0cmluZyhpc09uKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmcmVzaGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVySW5zdHJ1Y3Rpb25zKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgc2NvcGU6IFNjb3BlKTogUmVmcmVzaENvbnRyb2xbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSB0aGlzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGNvbW1hbmQ6IGVudHJ5LmNvbW1hbmRUZXh0LFxuICAgICAgZW50cnksXG4gICAgICBwdXJwb3NlOiBlbnRyeS5wdXJwb3NlXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHVycG9zZUVscyA9ICdzZXRJbnN0cnVjdGlvbnMnIGluIHRhcmdldFxuICAgICAgPyB0aGlzLnJlbmRlck5hdGl2ZUluc3RydWN0aW9ucyh0YXJnZXQsIGluc3RydWN0aW9ucylcbiAgICAgIDogdGhpcy5yZW5kZXJPd25JbnN0cnVjdGlvbnModGhpcy5nZXRTdHJpcENvbnRhaW5lckVsKHRhcmdldCksIGluc3RydWN0aW9ucyk7XG5cbiAgICBjb25zdCByZWZyZXNoZXJzOiBSZWZyZXNoQ29udHJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGluc3RydWN0aW9uXSBvZiBpbnN0cnVjdGlvbnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwdXJwb3NlRWwgPSBwdXJwb3NlRWxzW2luZGV4XTtcbiAgICAgIC8vIEEgaG9zdCBtYXkgcmVuZGVyIGZld2VyIHB1cnBvc2UgZWxlbWVudHMgdGhhbiB0aGVyZSBhcmUgaW5zdHJ1Y3Rpb25zOyBza2lwIHJhdGhlciB0aGFuIHRocm93LlxuICAgICAgaWYgKCFwdXJwb3NlRWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluc3RydWN0aW9uQ29udHJvbCA9IGluc3RydWN0aW9uLmVudHJ5LmluaXRJbnN0cnVjdGlvbj8uKHB1cnBvc2VFbCwgc2NvcGUpO1xuICAgICAgY29uc3QgY2hlY2tJc0F2YWlsYWJsZSA9IGluc3RydWN0aW9uLmVudHJ5LmNoZWNrSXNBdmFpbGFibGU7XG4gICAgICAvLyBBIGNvbnRyb2wgc2hvd3MgaXRzIG93biBwcmVzc2VkIHN0YXRlIGhlcmUsIHNvIGF2YWlsYWJpbGl0eSBpcyB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHJlLXN0YXRlIOKAlFxuICAgICAgLy8gYW5kIGEgY29tbWFuZCB0aGF0IGRlY2xhcmVzIG5vbmUgbmVlZHMgbm8gcmVmcmVzaGVyIGF0IGFsbC5cbiAgICAgIGlmIChpbnN0cnVjdGlvbkNvbnRyb2wgJiYgY2hlY2tJc0F2YWlsYWJsZSkge1xuICAgICAgICByZWZyZXNoZXJzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGluc3RydWN0aW9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZnJlc2hlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGluc3RydWN0aW9uIGJhciwgdGhlIHdheSBldmVyeSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSBjb25zdW1lciBoYXMgYWx3YXlzXG4gICAqIGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIHN1Z2dlc3QgbW9kYWwuXG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHB1cnBvc2UgZWxlbWVudCBvZiBlYWNoIHJlbmRlcmVkIGluc3RydWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOYXRpdmVJbnN0cnVjdGlvbnMobW9kYWw6IFN1Z2dlc3RNb2RhbDx1bmtub3duPiwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgbW9kYWwuc2V0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgcmV0dXJuIFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhbiBpbnN0cnVjdGlvbiBiYXIgb2YgdGhlIGJ1aWxkZXIncyBvd24sIGZvciBhIGhvc3QgdGhhdCBoYXMgbm9uZS5cbiAgICpcbiAgICogVGhlIG1hcmt1cCBtaXJyb3JzIHdoYXQgYHNldEluc3RydWN0aW9uc2AgcHJvZHVjZXMg4oCUIGluY2x1ZGluZ1xuICAgKiB7QGxpbmsgQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25Db21tYW5kfSBvbiB0aGUga2V5IGhpbnQsIHdoaWNoIGlzIG5vdCBkZWNvcmF0aW9uOiBPYnNpZGlhbidzIHJ1bGVcbiAgICogZm9yIHRoYXQgY2xhc3MgaXMgd2hhdCBzdXBwbGllcyB0aGUgaGludCdzIGJvbGQgd2VpZ2h0IGFuZCB0aGUgYG1hcmdpbi1pbmxpbmUtZW5kYCBzZXBhcmF0aW5nIGl0XG4gICAqIGZyb20gdGhlIHB1cnBvc2UgdGV4dC4gRXZlcnkgY2xhc3MgaGVyZSBpcyB1bnNjb3BlZCBpbiB0aGUgYXBwJ3Mgc3R5bGVzaGVldCwgc28gYWxsIG9mIGl0IHJlYWNoZXMgYVxuICAgKiBwbGFpbiB7QGxpbmsgTW9kYWx9IGFzIHJlYWRpbHkgYXMgaXQgcmVhY2hlcyB0aGUgcXVpY2sgc3dpdGNoZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIGFwcGVuZCB0aGUgYmFyIHRvLlxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byByZW5kZXIuXG4gICAqIEByZXR1cm5zIFRoZSBwdXJwb3NlIGVsZW1lbnQgb2YgZWFjaCByZW5kZXJlZCBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3duSW5zdHJ1Y3Rpb25zKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25zKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGluc3RydWN0aW9uc0VsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRzKTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25FbCA9IGluc3RydWN0aW9uc0VsLmNyZWF0ZURpdihDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbik7XG4gICAgICBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyBjbHM6IENzc0NsYXNzLlByb21wdEluc3RydWN0aW9uQ29tbWFuZCwgdGV4dDogaW5zdHJ1Y3Rpb24uY29tbWFuZCB9KTtcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiBpbnN0cnVjdGlvbi5wdXJwb3NlIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRmxpcHMgYSBjaGVja2JveCBhbmQgYW5ub3VuY2VzIGl0LCB1bmxlc3MgaXQgaXMgZGlzYWJsZWQuXG4gKlxuICogU2hhcmVkIGJ5IHRoZSBzaG9ydGN1dCBhbmQgdGhlIGJ1dHRvbiBzbyB0aGUgdHdvIHJvdXRlcyBjYW5ub3QgZHJpZnQg4oCUIGluY2x1ZGluZyB0aGUgZGlzYWJsZWQgZ3VhcmQsXG4gKiB3aGljaCBpcyB0aGUgaGFsZiBtb3N0IGVhc2lseSBmb3Jnb3R0ZW4gb24gb25lIG9mIHRoZW0uXG4gKlxuICogQHBhcmFtIGNoZWNrYm94RWwgLSBUaGUgY2hlY2tib3ggdG8gdG9nZ2xlLlxuICovXG5mdW5jdGlvbiB0b2dnbGVDaGVja2JveChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gIGlmIChjaGVja2JveEVsLmRpc2FibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNoZWNrYm94RWwuY2hlY2tlZCA9ICFjaGVja2JveEVsLmNoZWNrZWQ7XG4gIGNoZWNrYm94RWwudHJpZ2dlcignY2hhbmdlJyk7XG59XG4iXSwi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
@@ -107,10 +107,10 @@ class PromptModal extends ModalBase {
107
107
  textComponent.onChange((newValue) => {
108
108
  this.value = newValue;
109
109
  });
110
- inputEl.addEventListener("keydown", (event) => {
111
- if (event.key === "Enter") {
112
- this.handleOk(event, textComponent);
113
- } else if (event.key === "Escape") {
110
+ inputEl.addEventListener("keydown", ($event) => {
111
+ if ($event.key === "Enter") {
112
+ this.handleOk($event, textComponent);
113
+ } else if ($event.key === "Escape") {
114
114
  this.close();
115
115
  }
116
116
  });
@@ -120,8 +120,8 @@ class PromptModal extends ModalBase {
120
120
  const okButton = new ButtonComponent(this.contentEl);
121
121
  okButton.setButtonText(this.okButtonText);
122
122
  okButton.setCta();
123
- okButton.onClick((event) => {
124
- this.handleOk(event, textComponent);
123
+ okButton.onClick(($event) => {
124
+ this.handleOk($event, textComponent);
125
125
  });
126
126
  okButton.setClass(CssClass.OkButton);
127
127
  const cancelButton = new ButtonComponent(this.contentEl);
@@ -130,8 +130,8 @@ class PromptModal extends ModalBase {
130
130
  cancelButton.setClass(CssClass.CancelButton);
131
131
  this.commandBuilder?.build(this, normalizeOptionalProperties({ renderMode: this.commandsRenderMode }));
132
132
  }
133
- handleOk(event, textComponent) {
134
- event.preventDefault();
133
+ handleOk($event, textComponent) {
134
+ $event.preventDefault();
135
135
  if (!textComponent.inputEl.checkValidity()) {
136
136
  this.markTouched(textComponent.inputEl);
137
137
  textComponent.inputEl.reportValidity();
@@ -156,4 +156,4 @@ async function prompt(params) {
156
156
  export {
157
157
  prompt
158
158
  };
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvcHJvbXB0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBpbnB1dC4gVGhlIG1vZGFsIGluY2x1ZGVzIFwiT0tcIiBhbmQgXCJDYW5jZWxcIiBidXR0b25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZSc7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjb252ZXJ0QXN5bmNUb1N5bmMsXG4gIGludm9rZUFzeW5jU2FmZWx5XG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBUZXh0Q29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUge1xuICBNb2RhbENvbW1hbmRCdWlsZGVyLFxuICBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zLFxuICBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZVxufSBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zLFxuICBNb2RhbFBhcmFtc0Jhc2Vcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFwcGx5U3BlbGxjaGVja01vZGUgfSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBTcGVsbGNoZWNrTW9kZSB9IGZyb20gJy4uL29ic2lkaWFuLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIE1vZGFsQmFzZSxcbiAgc2hvd01vZGFsXG59IGZyb20gJy4vbW9kYWwudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwcm9tcHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdFBhcmFtcyBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGNvbnRyb2xzIOKAlCBjaGVja2JveGVzLCBkcm9wZG93bnMgYW5kIGtleWJvYXJkIHNob3J0Y3V0cyDigJQgcmVuZGVyZWQgYXMgYSBzdHJpcCBhbG9uZyB0aGUgYm90dG9tXG4gICAqIG9mIHRoZSBtb2RhbCwgc28gYSBjYWxsZXIgZ2V0cyBhIHRleHQgaW5wdXQgcGx1cyBvcHRpb25zIHdpdGggbm8gYmVzcG9rZSBtb2RhbCBvZiBpdHMgb3duLlxuICAgKlxuICAgKiBIYW5kIGl0IGEgY29uZmlndXJlZCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlcn07IHRoZSBtb2RhbCBidWlsZHMgaXQuIFRoZSBzdHJpcCBpcyByZW5kZXJlZCBhZnRlclxuICAgKiB0aGUgYnV0dG9ucywgc28gaXQgc2l0cyBhbG9uZyB0aGUgYm90dG9tIGVkZ2Ugd2hlcmUgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhciBzaXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZEJ1aWxkZXI/OiBNb2RhbENvbW1hbmRCdWlsZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2F5IHtAbGluayBQcm9tcHRQYXJhbXMuY29tbWFuZEJ1aWxkZXJ9J3MgY29udHJvbHMgYXJlIHJlbmRlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlPzogTW9kYWxDb21tYW5kc1JlbmRlck1vZGU7XG5cbiAgLyoqXG4gICAqIEEgZGVmYXVsdCB2YWx1ZSB0byBwcmUtZmlsbCB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSB0ZXh0IGZvciB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBkZWNpZGluZyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBzcGVsbC1jaGVja2VkLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB3aGF0IHRoaXMgbW9kYWwgaGFzIGFsd2F5cyBkb25lLCBzbyBwYXNzaW5nIG5vdGhpbmcgY2hhbmdlcyBub3RoaW5nOiB0aGUgaW5wdXQgZm9sbG93c1xuICAgKiBgRWRpdG9yID4gU3BlbGxjaGVja2AsIGxpa2UgT2JzaWRpYW4ncyBvd24gbmFtZS1lbnRyeSBzdXJmYWNlcy4gUGFzcyB7QGxpbmsgU3BlbGxjaGVja01vZGUuT2ZmfSBmb3IgYVxuICAgKiBib3ggdGhhdCBpcyByZWFsbHkgYSBzZWFyY2ggZmllbGQsIG9yIHtAbGluayBTcGVsbGNoZWNrTW9kZS5BbHdheXNPbn0gdG8gc3BlbGwtY2hlY2sgaXQgd2hhdGV2ZXIgdGhlXG4gICAqIHZhdWx0IHNldHRpbmcgc2F5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFNwZWxsY2hlY2tNb2RlLkZvbGxvd09ic2lkaWFuU2V0dGluZ2BcbiAgICovXG4gIHJlYWRvbmx5IHNwZWxsY2hlY2tNb2RlPzogU3BlbGxjaGVja01vZGU7XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIG9yIGBudWxsYCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZVZhbGlkYXRvcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPHN0cmluZz4+O1xufVxuXG50eXBlIFByb21wdE1vZGFsQ29uc3RydWN0b3JQYXJhbXMgPSBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtczxudWxsIHwgc3RyaW5nPiAmIFByb21wdFBhcmFtcztcblxuY2xhc3MgUHJvbXB0TW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8bnVsbCB8IHN0cmluZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kQnVpbGRlcjogTW9kYWxDb21tYW5kQnVpbGRlciB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlOiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc09rQ2xpY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzVG91Y2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG9rQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3BlbGxjaGVja01vZGU6IFNwZWxsY2hlY2tNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICBwcml2YXRlIHZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdWVWYWxpZGF0b3I6ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPHN0cmluZz4+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFByb21wdE1vZGFsQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuYWRkQ3NzQ2xhc3NlcyhDc3NDbGFzcy5Qcm9tcHRNb2RhbCk7XG4gICAgdGhpcy5jYW5jZWxCdXR0b25UZXh0ID0gcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLmNhbmNlbCk7XG4gICAgdGhpcy5jb21tYW5kQnVpbGRlciA9IHBhcmFtcy5jb21tYW5kQnVpbGRlciA/PyBudWxsO1xuICAgIHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlID0gcGFyYW1zLmNvbW1hbmRzUmVuZGVyTW9kZTtcbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9IHBhcmFtcy5va0J1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLm9rKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGFyYW1zLnBsYWNlaG9sZGVyID8/ICcnO1xuICAgIHRoaXMuc3BlbGxjaGVja01vZGUgPSBwYXJhbXMuc3BlbGxjaGVja01vZGUgPz8gU3BlbGxjaGVja01vZGUuRm9sbG93T2JzaWRpYW5TZXR0aW5nO1xuICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGUgPz8gJyc7XG4gICAgdGhpcy52YWx1ZVZhbGlkYXRvciA9IHBhcmFtcy52YWx1ZVZhbGlkYXRvciA/PyBub29wO1xuICAgIHRoaXMudmFsdWUgPSBwYXJhbXMuZGVmYXVsdFZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmlzT2tDbGlja2VkID8gdGhpcy52YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlRWwuc2V0VGV4dCh0aGlzLnRpdGxlKTtcbiAgICBjb25zdCB0ZXh0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNvbnN0IGlucHV0RWwgPSB0ZXh0Q29tcG9uZW50LmlucHV0RWw7XG4gICAgLy8gYEFic3RyYWN0VGV4dENvbXBvbmVudGAgZm9yY2VzIGBzcGVsbGNoZWNrPVwiZmFsc2VcImAgb24gZXZlcnkgdGV4dCBjb21wb25lbnQsIHNvIHRoZSBtb2RlIGhhcyB0byBiZSBhcHBsaWVkIGhlcmUuXG4gICAgLy8gT2JzaWRpYW4ncyBvd24gZmlsZSBleHBsb3JlciByZWFkcyB0aGUgc2FtZSBjb25maWcgd2hlbiBpdCBzdGFydHMgYW4gaW5saW5lIHJlbmFtZS5cbiAgICBhcHBseVNwZWxsY2hlY2tNb2RlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBlbGVtZW50OiBpbnB1dEVsLFxuICAgICAgc3BlbGxjaGVja01vZGU6IHRoaXMuc3BlbGxjaGVja01vZGVcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gYXN5bmMgKHNob3VsZFJlcG9ydDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy52YWx1ZVZhbGlkYXRvcihpbnB1dEVsLnZhbHVlKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpbnB1dEVsLnNldEN1c3RvbVZhbGlkaXR5KGVycm9yTWVzc2FnZSA/PyAnJyk7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0KSB7XG4gICAgICAgIGlucHV0RWwucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKGlucHV0RWwpO1xuICAgICAgYXdhaXQgdmFsaWRhdGUodHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgdmFsaWRhdGUodGhpcy5pc1RvdWNoZWQpO1xuICAgIH07XG5cbiAgICB0ZXh0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5zZWxlY3QoKTtcbiAgICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIGlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVGV4dEJveCk7XG4gICAgLy8gVGhlIG1vZGFsIG9wZW5zIGludmFsaWQgYnkgZGVzaWduIChzZWUgYmVsb3cpLCBzbyB0aGUgaW52YWxpZCBzdHlsaW5nIGlzIGRlZmVycmVkIHVudGlsIHRvdWNoZWQuXG4gICAgaW5wdXRFbC5hZGRDbGFzcyhDc3NDbGFzcy5VbnRvdWNoZWQpO1xuICAgIHRleHRDb21wb25lbnQub25DaGFuZ2UoKG5ld1ZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlT2soZXZlbnQsIHRleHRDb21wb25lbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgY29udmVydEFzeW5jVG9TeW5jKGhhbmRsZUlucHV0KSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGNvbnZlcnRBc3luY1RvU3luYyhoYW5kbGVGb2N1cykpO1xuICAgIC8vIFRoZSBtb2RhbCBtdXN0IHN0YXJ0IG91dCBpbnZhbGlkIHNvIE9LIHJlZnVzZXMsIGJ1dCB0aGUgdmFsaWRpdHkgaXMgbm90IHJlcG9ydGVkIHVudGlsIHRoZSB1c2VyIHR5cGVzIG9yIHN1Ym1pdHMuXG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdmFsaWRhdGUoZmFsc2UpKTtcbiAgICBjb25zdCBva0J1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIG9rQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5va0J1dHRvblRleHQpO1xuICAgIG9rQnV0dG9uLnNldEN0YSgpO1xuICAgIG9rQnV0dG9uLm9uQ2xpY2soKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZU9rKGV2ZW50LCB0ZXh0Q29tcG9uZW50KTtcbiAgICB9KTtcbiAgICBva0J1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5Pa0J1dHRvbik7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jYW5jZWxCdXR0b25UZXh0KTtcbiAgICBjYW5jZWxCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuXG4gICAgLy8gQnVpbHQgbGFzdCBzbyB0aGUgc3RyaXAgbGFuZHMgYWxvbmcgdGhlIG1vZGFsJ3MgYm90dG9tIGVkZ2UsIHdoZXJlIGEgYFN1Z2dlc3RNb2RhbGAncyBpbnN0cnVjdGlvblxuICAgIC8vIGJhciBzaXRzLlxuICAgIHRoaXMuY29tbWFuZEJ1aWxkZXI/LmJ1aWxkKHRoaXMsIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zPih7IHJlbmRlck1vZGU6IHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2soZXZlbnQ6IEV2ZW50LCB0ZXh0Q29tcG9uZW50OiBUZXh0Q29tcG9uZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRleHRDb21wb25lbnQuaW5wdXRFbC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgIHRoaXMubWFya1RvdWNoZWQodGV4dENvbXBvbmVudC5pbnB1dEVsKTtcbiAgICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNPa0NsaWNrZWQgPSB0cnVlO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya1RvdWNoZWQoaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICBpbnB1dEVsLnJlbW92ZUNsYXNzKENzc0NsYXNzLlVudG91Y2hlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIHByb21wdCBtb2RhbCBpbiBPYnNpZGlhbiB0byBnZXQgdXNlciBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9tcHQgbW9kYWwuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHVzZXIgaW5wdXQgb3IgYG51bGxgIGlmIHRoZSBwcm9tcHQgd2FzIGNhbmNlbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21wdChwYXJhbXM6IFByb21wdFBhcmFtcyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgc2hvd01vZGFsPG51bGwgfCBzdHJpbmc+KChwcm9taXNlUmVzb2x2ZSkgPT5cbiAgICBuZXcgUHJvbXB0TW9kYWwoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgcHJvbWlzZVJlc29sdmVcbiAgICB9KVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsbUNBQW1DO0FBQzVDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBWVAsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsc0JBQXNCO0FBQy9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBNEVQLE1BQU0sb0JBQW9CLFVBQXlCO0FBQUEsRUFDaEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ1QsY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ0g7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNUO0FBQUEsRUFDUztB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
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvcHJvbXB0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBpbnB1dC4gVGhlIG1vZGFsIGluY2x1ZGVzIFwiT0tcIiBhbmQgXCJDYW5jZWxcIiBidXR0b25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZSc7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjb252ZXJ0QXN5bmNUb1N5bmMsXG4gIGludm9rZUFzeW5jU2FmZWx5XG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBUZXh0Q29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUge1xuICBNb2RhbENvbW1hbmRCdWlsZGVyLFxuICBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zLFxuICBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZVxufSBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zLFxuICBNb2RhbFBhcmFtc0Jhc2Vcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFwcGx5U3BlbGxjaGVja01vZGUgfSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBTcGVsbGNoZWNrTW9kZSB9IGZyb20gJy4uL29ic2lkaWFuLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIE1vZGFsQmFzZSxcbiAgc2hvd01vZGFsXG59IGZyb20gJy4vbW9kYWwudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwcm9tcHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdFBhcmFtcyBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGNvbnRyb2xzIOKAlCBjaGVja2JveGVzLCBkcm9wZG93bnMgYW5kIGtleWJvYXJkIHNob3J0Y3V0cyDigJQgcmVuZGVyZWQgYXMgYSBzdHJpcCBhbG9uZyB0aGUgYm90dG9tXG4gICAqIG9mIHRoZSBtb2RhbCwgc28gYSBjYWxsZXIgZ2V0cyBhIHRleHQgaW5wdXQgcGx1cyBvcHRpb25zIHdpdGggbm8gYmVzcG9rZSBtb2RhbCBvZiBpdHMgb3duLlxuICAgKlxuICAgKiBIYW5kIGl0IGEgY29uZmlndXJlZCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlcn07IHRoZSBtb2RhbCBidWlsZHMgaXQuIFRoZSBzdHJpcCBpcyByZW5kZXJlZCBhZnRlclxuICAgKiB0aGUgYnV0dG9ucywgc28gaXQgc2l0cyBhbG9uZyB0aGUgYm90dG9tIGVkZ2Ugd2hlcmUgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhciBzaXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZEJ1aWxkZXI/OiBNb2RhbENvbW1hbmRCdWlsZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2F5IHtAbGluayBQcm9tcHRQYXJhbXMuY29tbWFuZEJ1aWxkZXJ9J3MgY29udHJvbHMgYXJlIHJlbmRlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlPzogTW9kYWxDb21tYW5kc1JlbmRlck1vZGU7XG5cbiAgLyoqXG4gICAqIEEgZGVmYXVsdCB2YWx1ZSB0byBwcmUtZmlsbCB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSB0ZXh0IGZvciB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBkZWNpZGluZyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBzcGVsbC1jaGVja2VkLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB3aGF0IHRoaXMgbW9kYWwgaGFzIGFsd2F5cyBkb25lLCBzbyBwYXNzaW5nIG5vdGhpbmcgY2hhbmdlcyBub3RoaW5nOiB0aGUgaW5wdXQgZm9sbG93c1xuICAgKiBgRWRpdG9yID4gU3BlbGxjaGVja2AsIGxpa2UgT2JzaWRpYW4ncyBvd24gbmFtZS1lbnRyeSBzdXJmYWNlcy4gUGFzcyB7QGxpbmsgU3BlbGxjaGVja01vZGUuT2ZmfSBmb3IgYVxuICAgKiBib3ggdGhhdCBpcyByZWFsbHkgYSBzZWFyY2ggZmllbGQsIG9yIHtAbGluayBTcGVsbGNoZWNrTW9kZS5BbHdheXNPbn0gdG8gc3BlbGwtY2hlY2sgaXQgd2hhdGV2ZXIgdGhlXG4gICAqIHZhdWx0IHNldHRpbmcgc2F5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFNwZWxsY2hlY2tNb2RlLkZvbGxvd09ic2lkaWFuU2V0dGluZ2BcbiAgICovXG4gIHJlYWRvbmx5IHNwZWxsY2hlY2tNb2RlPzogU3BlbGxjaGVja01vZGU7XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIG9yIGBudWxsYCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZVZhbGlkYXRvcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPHN0cmluZz4+O1xufVxuXG50eXBlIFByb21wdE1vZGFsQ29uc3RydWN0b3JQYXJhbXMgPSBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtczxudWxsIHwgc3RyaW5nPiAmIFByb21wdFBhcmFtcztcblxuY2xhc3MgUHJvbXB0TW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8bnVsbCB8IHN0cmluZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kQnVpbGRlcjogTW9kYWxDb21tYW5kQnVpbGRlciB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlOiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc09rQ2xpY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzVG91Y2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG9rQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3BlbGxjaGVja01vZGU6IFNwZWxsY2hlY2tNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICBwcml2YXRlIHZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdWVWYWxpZGF0b3I6ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPHN0cmluZz4+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFByb21wdE1vZGFsQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuYWRkQ3NzQ2xhc3NlcyhDc3NDbGFzcy5Qcm9tcHRNb2RhbCk7XG4gICAgdGhpcy5jYW5jZWxCdXR0b25UZXh0ID0gcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLmNhbmNlbCk7XG4gICAgdGhpcy5jb21tYW5kQnVpbGRlciA9IHBhcmFtcy5jb21tYW5kQnVpbGRlciA/PyBudWxsO1xuICAgIHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlID0gcGFyYW1zLmNvbW1hbmRzUmVuZGVyTW9kZTtcbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9IHBhcmFtcy5va0J1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLm9rKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGFyYW1zLnBsYWNlaG9sZGVyID8/ICcnO1xuICAgIHRoaXMuc3BlbGxjaGVja01vZGUgPSBwYXJhbXMuc3BlbGxjaGVja01vZGUgPz8gU3BlbGxjaGVja01vZGUuRm9sbG93T2JzaWRpYW5TZXR0aW5nO1xuICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGUgPz8gJyc7XG4gICAgdGhpcy52YWx1ZVZhbGlkYXRvciA9IHBhcmFtcy52YWx1ZVZhbGlkYXRvciA/PyBub29wO1xuICAgIHRoaXMudmFsdWUgPSBwYXJhbXMuZGVmYXVsdFZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmlzT2tDbGlja2VkID8gdGhpcy52YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlRWwuc2V0VGV4dCh0aGlzLnRpdGxlKTtcbiAgICBjb25zdCB0ZXh0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNvbnN0IGlucHV0RWwgPSB0ZXh0Q29tcG9uZW50LmlucHV0RWw7XG4gICAgLy8gYEFic3RyYWN0VGV4dENvbXBvbmVudGAgZm9yY2VzIGBzcGVsbGNoZWNrPVwiZmFsc2VcImAgb24gZXZlcnkgdGV4dCBjb21wb25lbnQsIHNvIHRoZSBtb2RlIGhhcyB0byBiZSBhcHBsaWVkIGhlcmUuXG4gICAgLy8gT2JzaWRpYW4ncyBvd24gZmlsZSBleHBsb3JlciByZWFkcyB0aGUgc2FtZSBjb25maWcgd2hlbiBpdCBzdGFydHMgYW4gaW5saW5lIHJlbmFtZS5cbiAgICBhcHBseVNwZWxsY2hlY2tNb2RlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBlbGVtZW50OiBpbnB1dEVsLFxuICAgICAgc3BlbGxjaGVja01vZGU6IHRoaXMuc3BlbGxjaGVja01vZGVcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gYXN5bmMgKHNob3VsZFJlcG9ydDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy52YWx1ZVZhbGlkYXRvcihpbnB1dEVsLnZhbHVlKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpbnB1dEVsLnNldEN1c3RvbVZhbGlkaXR5KGVycm9yTWVzc2FnZSA/PyAnJyk7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0KSB7XG4gICAgICAgIGlucHV0RWwucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKGlucHV0RWwpO1xuICAgICAgYXdhaXQgdmFsaWRhdGUodHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgdmFsaWRhdGUodGhpcy5pc1RvdWNoZWQpO1xuICAgIH07XG5cbiAgICB0ZXh0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5zZWxlY3QoKTtcbiAgICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIGlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVGV4dEJveCk7XG4gICAgLy8gVGhlIG1vZGFsIG9wZW5zIGludmFsaWQgYnkgZGVzaWduIChzZWUgYmVsb3cpLCBzbyB0aGUgaW52YWxpZCBzdHlsaW5nIGlzIGRlZmVycmVkIHVudGlsIHRvdWNoZWQuXG4gICAgaW5wdXRFbC5hZGRDbGFzcyhDc3NDbGFzcy5VbnRvdWNoZWQpO1xuICAgIHRleHRDb21wb25lbnQub25DaGFuZ2UoKG5ld1ZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKCRldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPaygkZXZlbnQsIHRleHRDb21wb25lbnQpO1xuICAgICAgfSBlbHNlIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGNvbnZlcnRBc3luY1RvU3luYyhoYW5kbGVJbnB1dCkpO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBjb252ZXJ0QXN5bmNUb1N5bmMoaGFuZGxlRm9jdXMpKTtcbiAgICAvLyBUaGUgbW9kYWwgbXVzdCBzdGFydCBvdXQgaW52YWxpZCBzbyBPSyByZWZ1c2VzLCBidXQgdGhlIHZhbGlkaXR5IGlzIG5vdCByZXBvcnRlZCB1bnRpbCB0aGUgdXNlciB0eXBlcyBvciBzdWJtaXRzLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHZhbGlkYXRlKGZhbHNlKSk7XG4gICAgY29uc3Qgb2tCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICBva0J1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub2tCdXR0b25UZXh0KTtcbiAgICBva0J1dHRvbi5zZXRDdGEoKTtcbiAgICBva0J1dHRvbi5vbkNsaWNrKCgkZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlT2soJGV2ZW50LCB0ZXh0Q29tcG9uZW50KTtcbiAgICB9KTtcbiAgICBva0J1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5Pa0J1dHRvbik7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jYW5jZWxCdXR0b25UZXh0KTtcbiAgICBjYW5jZWxCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuXG4gICAgLy8gQnVpbHQgbGFzdCBzbyB0aGUgc3RyaXAgbGFuZHMgYWxvbmcgdGhlIG1vZGFsJ3MgYm90dG9tIGVkZ2UsIHdoZXJlIGEgYFN1Z2dlc3RNb2RhbGAncyBpbnN0cnVjdGlvblxuICAgIC8vIGJhciBzaXRzLlxuICAgIHRoaXMuY29tbWFuZEJ1aWxkZXI/LmJ1aWxkKHRoaXMsIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zPih7IHJlbmRlck1vZGU6IHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2soJGV2ZW50OiBFdmVudCwgdGV4dENvbXBvbmVudDogVGV4dENvbXBvbmVudCk6IHZvaWQge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGV4dENvbXBvbmVudC5pbnB1dEVsLmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgdGhpcy5tYXJrVG91Y2hlZCh0ZXh0Q29tcG9uZW50LmlucHV0RWwpO1xuICAgICAgdGV4dENvbXBvbmVudC5pbnB1dEVsLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc09rQ2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrVG91Y2hlZChpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIGlucHV0RWwucmVtb3ZlQ2xhc3MoQ3NzQ2xhc3MuVW50b3VjaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuIHRvIGdldCB1c2VyIGlucHV0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdXNlciBpbnB1dCBvciBgbnVsbGAgaWYgdGhlIHByb21wdCB3YXMgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHBhcmFtczogUHJvbXB0UGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBzaG93TW9kYWw8bnVsbCB8IHN0cmluZz4oKHByb21pc2VSZXNvbHZlKSA9PlxuICAgIG5ldyBQcm9tcHRNb2RhbCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBwcm9taXNlUmVzb2x2ZVxuICAgIH0pXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFZUCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLFNBQVM7QUFDbEIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUE0RVAsTUFBTSxvQkFBb0IsVUFBeUI7QUFBQSxFQUNoQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDVCxjQUFjO0FBQUEsRUFDZCxZQUFZO0FBQUEsRUFDSDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ1Q7QUFB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
@@ -82,7 +82,7 @@ export interface NotebookNavigatorMenuContext {
82
82
  *
83
83
  * @param callback - Receives the created item, to be configured in place.
84
84
  */
85
- addItem: (callback: (item: MenuItem) => void) => void;
85
+ readonly addItem: (callback: (item: MenuItem) => void) => void;
86
86
  }
87
87
  /**
88
88
  * Unregisters a menu extension. `Notebook Navigator` returns a bare function rather than a disposable,
@@ -102,14 +102,14 @@ export interface NotebookNavigatorMenus {
102
102
  * @param callback - Invoked while the menu is being built.
103
103
  * @returns A function that unregisters the contributor.
104
104
  */
105
- registerFileMenu: (callback: (context: NotebookNavigatorFileMenuContext) => void) => NotebookNavigatorMenuDispose;
105
+ readonly registerFileMenu: (callback: (context: NotebookNavigatorFileMenuContext) => void) => NotebookNavigatorMenuDispose;
106
106
  /**
107
107
  * Registers a contributor to the folder context menu.
108
108
  *
109
109
  * @param callback - Invoked while the menu is being built.
110
110
  * @returns A function that unregisters the contributor.
111
111
  */
112
- registerFolderMenu: (callback: (context: NotebookNavigatorFolderMenuContext) => void) => NotebookNavigatorMenuDispose;
112
+ readonly registerFolderMenu: (callback: (context: NotebookNavigatorFolderMenuContext) => void) => NotebookNavigatorMenuDispose;
113
113
  }
114
114
  /**
115
115
  * The `source` handed to the menu event handlers for a `Notebook Navigator` menu.