@mnaoumov/obsidian-lib 10.12.0 → 11.0.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 (399) hide show
  1. package/components/worker-component/package.json +6 -0
  2. package/components/worker-pool-component/package.json +6 -0
  3. package/dist/lib/cjs/__merged.cjs +409 -292
  4. package/dist/lib/cjs/__merged.d.cts +17 -8
  5. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  6. package/dist/lib/cjs/app.cjs +2 -2
  7. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  8. package/dist/lib/cjs/attachment-path.cjs +9 -9
  9. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  10. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  11. package/dist/lib/cjs/backlink-index.cjs +5 -5
  12. package/dist/lib/cjs/backlink.cjs +7 -7
  13. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  14. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  15. package/dist/lib/cjs/bug-report.cjs +3 -3
  16. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  17. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  18. package/dist/lib/cjs/callout.cjs +6 -6
  19. package/dist/lib/cjs/canvas.cjs +11 -9
  20. package/dist/lib/cjs/canvas.d.cts +13 -0
  21. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  22. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  23. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  24. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  25. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  26. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  27. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  28. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  29. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  30. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  31. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  32. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  33. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  34. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  35. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  36. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  37. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  38. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  39. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +6 -6
  40. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  41. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  42. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  43. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  44. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  46. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  47. package/dist/lib/cjs/community-plugins.cjs +3 -3
  48. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  49. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  50. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +3 -3
  51. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  52. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  53. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  54. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  55. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  56. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  57. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  58. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  59. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  60. package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -1
  61. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +8 -8
  62. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  63. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  64. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  65. package/dist/lib/cjs/components/index.cjs +46 -40
  66. package/dist/lib/cjs/components/index.d.cts +2 -0
  67. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  68. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  69. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  70. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  71. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  72. package/dist/lib/cjs/components/plugin-gate-component.cjs +68 -28
  73. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  74. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  75. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  76. package/dist/lib/cjs/components/plugin-settings-component.cjs +113 -17
  77. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  78. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  79. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  80. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  81. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  82. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  83. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  84. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  85. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  86. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  87. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  88. package/dist/lib/cjs/components/shared-component-pool-component.cjs +6 -6
  89. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  90. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  91. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  92. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  93. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  94. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  95. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  96. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +7 -7
  97. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  98. package/dist/lib/cjs/constructors/index.cjs +1 -1
  99. package/dist/lib/cjs/data-handler.cjs +111 -4
  100. package/dist/lib/cjs/data-handler.d.cts +92 -1
  101. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  102. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  103. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  104. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  105. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  106. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  107. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  108. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  109. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  110. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  111. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  112. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  113. package/dist/lib/cjs/dataview-link.cjs +2 -2
  114. package/dist/lib/cjs/dataview.cjs +27 -7
  115. package/dist/lib/cjs/dataview.d.cts +14 -0
  116. package/dist/lib/cjs/debug.cjs +3 -3
  117. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  118. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  119. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  120. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  121. package/dist/lib/cjs/desktop-git-runner.cjs +2 -2
  122. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  123. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  124. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  125. package/dist/lib/cjs/disposable.cjs +150 -0
  126. package/dist/lib/cjs/disposable.d.cts +39 -0
  127. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  128. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  129. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  130. package/dist/lib/cjs/editor.cjs +6 -6
  131. package/dist/lib/cjs/events.cjs +2 -2
  132. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  133. package/dist/lib/cjs/feature-request.cjs +1 -1
  134. package/dist/lib/cjs/file-change.cjs +10 -10
  135. package/dist/lib/cjs/file-explorer.cjs +2 -2
  136. package/dist/lib/cjs/file-manager.cjs +5 -5
  137. package/dist/lib/cjs/file-system.cjs +10 -10
  138. package/dist/lib/cjs/folder-note.cjs +4 -4
  139. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  140. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  141. package/dist/lib/cjs/frontmatter.cjs +5 -5
  142. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  143. package/dist/lib/cjs/hotkey.cjs +1 -1
  144. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  145. package/dist/lib/cjs/html-element.cjs +2 -2
  146. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  147. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  148. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  149. package/dist/lib/cjs/i18n/index.cjs +4 -4
  150. package/dist/lib/cjs/i18n/locales/en.cjs +5 -1
  151. package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
  152. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  153. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  154. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
  155. package/dist/lib/cjs/index.cjs +145 -127
  156. package/dist/lib/cjs/index.d.cts +6 -0
  157. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  158. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  159. package/dist/lib/cjs/library-styles.cjs +3 -3
  160. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  161. package/dist/lib/cjs/link.cjs +76 -56
  162. package/dist/lib/cjs/link.d.cts +20 -14
  163. package/dist/lib/cjs/logger.cjs +4 -4
  164. package/dist/lib/cjs/loop.cjs +10 -16
  165. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  166. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  167. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  168. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  169. package/dist/lib/cjs/markdown-view.cjs +3 -3
  170. package/dist/lib/cjs/markdown.cjs +12 -12
  171. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  172. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  173. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  174. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  175. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  176. package/dist/lib/cjs/modals/alert.cjs +4 -4
  177. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  178. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  179. package/dist/lib/cjs/modals/copy-text-manually.cjs +4 -4
  180. package/dist/lib/cjs/modals/index.cjs +12 -12
  181. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  182. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  183. package/dist/lib/cjs/modals/modal.cjs +3 -3
  184. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  185. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  186. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +5 -5
  187. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  188. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  189. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  190. package/dist/lib/cjs/note-priority.cjs +2 -2
  191. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  192. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  193. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  194. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  195. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  196. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  197. package/dist/lib/cjs/parse-link.cjs +14 -14
  198. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  199. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  200. package/dist/lib/cjs/path-settings.cjs +3 -3
  201. package/dist/lib/cjs/pdf.cjs +2 -2
  202. package/dist/lib/cjs/plugin/index.cjs +16 -13
  203. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  204. package/dist/lib/cjs/plugin/plugin-api.cjs +8 -8
  205. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  206. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  207. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  208. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  209. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  210. package/dist/lib/cjs/plugin/plugin-install-state.cjs +4 -4
  211. package/dist/lib/cjs/plugin/plugin-instance.cjs +14 -12
  212. package/dist/lib/cjs/plugin/plugin-instance.d.cts +7 -0
  213. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  214. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  215. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  216. package/dist/lib/cjs/plugin/plugin.cjs +118 -34
  217. package/dist/lib/cjs/plugin/plugin.d.cts +28 -5
  218. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  219. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  220. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  221. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  222. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  223. package/dist/lib/cjs/popovers/index.cjs +3 -3
  224. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  225. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  226. package/dist/lib/cjs/queue.cjs +8 -8
  227. package/dist/lib/cjs/react/app-context.cjs +3 -3
  228. package/dist/lib/cjs/react/index.cjs +1 -1
  229. package/dist/lib/cjs/reference-definition.cjs +1 -1
  230. package/dist/lib/cjs/reference.cjs +3 -3
  231. package/dist/lib/cjs/release-asset.cjs +5 -5
  232. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  233. package/dist/lib/cjs/request-url.cjs +4 -4
  234. package/dist/lib/cjs/resource-lock.cjs +46 -42
  235. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  236. package/dist/lib/cjs/resource-url.cjs +3 -3
  237. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  238. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  239. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  240. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  241. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  242. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  243. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  244. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  245. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  246. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  247. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  248. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  249. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  250. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  251. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  252. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  253. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  254. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  255. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  256. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  257. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  258. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  259. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  260. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  261. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  262. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  264. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  265. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  266. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  268. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  269. package/dist/lib/cjs/setting-ex.cjs +26 -26
  270. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  271. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  272. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  273. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  274. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  275. package/dist/lib/cjs/templater.cjs +14 -4
  276. package/dist/lib/cjs/templater.d.cts +6 -0
  277. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  278. package/dist/lib/cjs/transformers/index.cjs +1 -1
  279. package/dist/lib/cjs/trusted-input.cjs +1 -1
  280. package/dist/lib/cjs/validation.cjs +4 -4
  281. package/dist/lib/cjs/vault-delete.cjs +6 -6
  282. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  283. package/dist/lib/cjs/vault.cjs +12 -12
  284. package/dist/lib/cjs/view-registrar.cjs +1 -1
  285. package/dist/lib/cjs/virtual-file.cjs +16 -14
  286. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  287. package/dist/lib/cjs/wasm.cjs +119 -0
  288. package/dist/lib/cjs/wasm.d.cts +54 -0
  289. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  290. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  291. package/dist/lib/cjs/workspace.cjs +1 -1
  292. package/dist/lib/esm/__merged.d.mts +17 -8
  293. package/dist/lib/esm/__merged.mjs +133 -3
  294. package/dist/lib/esm/app.mjs +2 -2
  295. package/dist/lib/esm/attachment-path.d.mts +3 -3
  296. package/dist/lib/esm/attachment-path.mjs +2 -2
  297. package/dist/lib/esm/backlink-index.mjs +2 -2
  298. package/dist/lib/esm/canvas.d.mts +13 -0
  299. package/dist/lib/esm/canvas.mjs +6 -5
  300. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  301. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  302. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  303. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  304. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  305. package/dist/lib/esm/components/component-ex.mjs +19 -6
  306. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  307. package/dist/lib/esm/components/index.d.mts +2 -0
  308. package/dist/lib/esm/components/index.mjs +5 -1
  309. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  310. package/dist/lib/esm/components/plugin-gate-component.mjs +57 -14
  311. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  312. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  313. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  314. package/dist/lib/esm/components/plugin-settings-component.mjs +99 -3
  315. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  316. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  317. package/dist/lib/esm/components/worker-component.mjs +279 -0
  318. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  319. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  320. package/dist/lib/esm/components/workspace-layout-state-component.mjs +1 -1
  321. package/dist/lib/esm/data-handler.d.mts +92 -1
  322. package/dist/lib/esm/data-handler.mjs +112 -3
  323. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  324. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  325. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  326. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  327. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  328. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  329. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  330. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  331. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  332. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  333. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  334. package/dist/lib/esm/dataview.d.mts +14 -0
  335. package/dist/lib/esm/dataview.mjs +19 -1
  336. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  337. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  338. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  339. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  340. package/dist/lib/esm/disposable.d.mts +39 -0
  341. package/dist/lib/esm/disposable.mjs +64 -0
  342. package/dist/lib/esm/file-system.mjs +2 -2
  343. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  344. package/dist/lib/esm/generated-during-build.mjs +1 -1
  345. package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
  346. package/dist/lib/esm/i18n/locales/en.mjs +5 -1
  347. package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
  348. package/dist/lib/esm/index.d.mts +6 -0
  349. package/dist/lib/esm/index.mjs +13 -1
  350. package/dist/lib/esm/link.d.mts +20 -14
  351. package/dist/lib/esm/link.mjs +57 -38
  352. package/dist/lib/esm/loop.mjs +2 -8
  353. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  354. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  355. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  356. package/dist/lib/esm/metadata-cache.mjs +6 -6
  357. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  358. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  359. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  360. package/dist/lib/esm/modals/prompt.mjs +1 -1
  361. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  362. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  363. package/dist/lib/esm/parse-link.mjs +4 -4
  364. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  365. package/dist/lib/esm/path-compatibility.mjs +277 -0
  366. package/dist/lib/esm/plugin/index.d.mts +1 -0
  367. package/dist/lib/esm/plugin/index.mjs +4 -2
  368. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  369. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  370. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  371. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  372. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  373. package/dist/lib/esm/plugin/plugin-instance.d.mts +7 -0
  374. package/dist/lib/esm/plugin/plugin-instance.mjs +2 -1
  375. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  376. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  377. package/dist/lib/esm/plugin/plugin.d.mts +28 -5
  378. package/dist/lib/esm/plugin/plugin.mjs +103 -9
  379. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  380. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  381. package/dist/lib/esm/release-asset.mjs +1 -1
  382. package/dist/lib/esm/resource-lock.d.mts +8 -7
  383. package/dist/lib/esm/resource-lock.mjs +31 -26
  384. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  385. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  386. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  387. package/dist/lib/esm/settings-recovery.mjs +125 -0
  388. package/dist/lib/esm/settings-tabs.mjs +2 -2
  389. package/dist/lib/esm/templater.d.mts +6 -0
  390. package/dist/lib/esm/templater.mjs +11 -2
  391. package/dist/lib/esm/vault.mjs +1 -1
  392. package/dist/lib/esm/virtual-file.d.mts +2 -1
  393. package/dist/lib/esm/virtual-file.mjs +7 -5
  394. package/dist/lib/esm/wasm.d.mts +54 -0
  395. package/dist/lib/esm/wasm.mjs +30 -0
  396. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  397. package/dist/lib/esm/worker-protocol.mjs +113 -0
  398. package/package.json +9 -8
  399. package/plugin/third-party-plugin/package.json +6 -0
@@ -50,6 +50,8 @@ const CODE_SCRIPT_TOOLKIT_SETTINGS = {
50
50
  shouldHandleProtocolUrls: true,
51
51
  startupScriptPath: "startup.ts"
52
52
  };
53
+ const CODE_SCRIPT_TOOLKIT_TRUSTED_STARTUP_SCRIPTS_KEY = "codescript-toolkit-trusted-startup-scripts";
54
+ const CODE_SCRIPT_TOOLKIT_TRUSTED_INVOCABLE_SCRIPTS_FOLDER_KEY = "codescript-toolkit-trusted-invocable-scripts-folder";
53
55
  const FOLDER_NOTES_PLUGIN_ID = "folder-notes";
54
56
  const FOLDER_NOTES_SETTINGS = {
55
57
  folderNoteName: "README",
@@ -72,6 +74,7 @@ async function bootstrapDemoVault(params) {
72
74
  settings: CODE_SCRIPT_TOOLKIT_SETTINGS
73
75
  });
74
76
  await ensureInvocableScriptsFolder(app);
77
+ trustCodeScriptToolkitScripts(app);
75
78
  await enableOrReloadPlugin(app, CODE_SCRIPT_TOOLKIT_PLUGIN_ID, result === ConfigureCommunityPluginResult.Success);
76
79
  await installCommunityPlugin({ app, pluginId: FOLDER_NOTES_PLUGIN_ID });
77
80
  const folderNotesResult = await configureCommunityPlugin({
@@ -82,6 +85,19 @@ async function bootstrapDemoVault(params) {
82
85
  await enableOrReloadPlugin(app, FOLDER_NOTES_PLUGIN_ID, folderNotesResult === ConfigureCommunityPluginResult.Success);
83
86
  showSandboxNotice(app, demoedPluginId);
84
87
  }
88
+ function addCodeScriptToolkitTrustedPath(app, key, path) {
89
+ const stored = app.loadLocalStorage(key);
90
+ let paths = [];
91
+ if (Array.isArray(stored)) {
92
+ paths = stored.filter((storedPath) => typeof storedPath === "string" && storedPath !== EMPTY);
93
+ } else if (typeof stored === "string" && stored !== EMPTY) {
94
+ paths = [stored];
95
+ }
96
+ if (paths.includes(path)) {
97
+ return;
98
+ }
99
+ app.saveLocalStorage(key, [.../* @__PURE__ */ new Set([...paths, path])].sort());
100
+ }
85
101
  function buildSandboxNoticeFragment(pluginName) {
86
102
  return createFragment((fragment) => {
87
103
  fragment.appendText("This is a demo vault for ");
@@ -133,7 +149,19 @@ function showSandboxNotice(app, demoedPluginId) {
133
149
  app.setting.close();
134
150
  new Notice(fragment, SANDBOX_NOTICE_DURATION_IN_MILLISECONDS);
135
151
  }
152
+ function trustCodeScriptToolkitScripts(app) {
153
+ addCodeScriptToolkitTrustedPath(
154
+ app,
155
+ CODE_SCRIPT_TOOLKIT_TRUSTED_STARTUP_SCRIPTS_KEY,
156
+ join(CODE_SCRIPT_TOOLKIT_MODULES_ROOT, CODE_SCRIPT_TOOLKIT_SETTINGS.startupScriptPath)
157
+ );
158
+ addCodeScriptToolkitTrustedPath(
159
+ app,
160
+ CODE_SCRIPT_TOOLKIT_TRUSTED_INVOCABLE_SCRIPTS_FOLDER_KEY,
161
+ join(CODE_SCRIPT_TOOLKIT_MODULES_ROOT, CODE_SCRIPT_TOOLKIT_SETTINGS.invocableScriptsFolder)
162
+ );
163
+ }
136
164
  export {
137
165
  bootstrapDemoVault
138
166
  };
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZW1vLXZhdWx0LWhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBgQ29kZVNjcmlwdCBUb29sa2l0YC5cbiAqXG4gKiBBIHBsdWdpbidzIGRlbW8gdmF1bHQgc2hvd2Nhc2VzIHRoZSBwbHVnaW4gdGhyb3VnaCBub3RlcyB3aG9zZSBgY29kZS1idXR0b25gcyBydW4gVHlwZVNjcmlwdCB2aWFcbiAqIGBDb2RlU2NyaXB0IFRvb2xraXRgLiBBIGRlbW8gdmF1bHQgdGhhdCBkb2VzIG5vdCBpdHNlbGYgc2hpcCBgQ29kZVNjcmlwdCBUb29sa2l0YCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIGBDb2RlU2NyaXB0IFRvb2xraXRgIGNvbmZpZyBhbmQgbm8gbWFudWFsIHNldHVwLCBzbyBpdCBjYW4gYmUgZHJpdmVuIGZyb20gYSB0aW55XG4gKiBjb21taXR0ZWQgYm9vdHN0cmFwIHBsdWdpbiAoYGRlbW8tdmF1bHQtaGVscGVyYCkgdGhhdCBpcyBpbmplY3RlZCBpbnRvIGV2ZXJ5IGRlbW8gdmF1bHQgYXQgcmVsZWFzZVxuICogdGltZS5cbiAqXG4gKiBUaGUgcGx1Z2luIHRoZSB2YXVsdCBkZW1vbnN0cmF0ZXMgaXMgcmVhZCBmcm9tIHRoZSBoZWxwZXIncyBvd24gYGRhdGEuanNvbmAsIHdyaXR0ZW4gYnkgdGhlIHBhY2thZ2luZ1xuICogc3RlcCAoe0BsaW5rIERlbW9WYXVsdEhlbHBlclNldHRpbmdzfSk7IGEgdmF1bHQgd2l0aG91dCB0aGF0IG1hcmtlciBpcyByZWZ1c2VkIGFzIG5vdCBhIGRlbW8gdmF1bHQuXG4gKlxuICogU2V0dGluZ3MgaXMgY2xvc2VkIHJpZ2h0IGJlZm9yZSBlYWNoIHBsdWdpbiBpcyBlbmFibGVkLiBBZnRlciB0aGUgdHJ1c3QgcHJvbXB0IE9ic2lkaWFuIG9wZW5zIFNldHRpbmdzIGFzXG4gKiBhIHBvcG91dCB3aW5kb3cgd2hpbGUgdGhlIGJvb3RzdHJhcCBpcyBhbHJlYWR5IHJ1bm5pbmcsIGFuZCBhIHJlYWRpbmcgdmlldyByZS1yZW5kZXJlZCB3aGlsZSB0aGF0IHBvcG91dFxuICogaXMgdGhlIGFjdGl2ZSB3aW5kb3cgcXVldWVzIGl0cyByZW5kZXIgb24gdGhlIHBvcG91dCdzIGFuaW1hdGlvbiBmcmFtZSDigJQgd2hpY2ggbmV2ZXIgZmlyZXMgb25jZSB0aGVcbiAqIHBvcG91dCBjbG9zZXMsIGxlYXZpbmcgdGhlIHN0YXJ0IG5vdGUgYmxhbmsgdW50aWwgaXRzIHRhYiBpcyByZW9wZW5lZC5cbiAqXG4gKiBJdCB3cml0ZXMgYENvZGVTY3JpcHQgVG9vbGtpdGAncyBzZXR0aW5ncyBCRUZPUkUgZW5hYmxpbmcgaXQsIHNvIHRoZSBwbHVnaW4gbG9hZHMgYWxyZWFkeSBjb25maWd1cmVkIOKAlFxuICogbm8gcmVsb2FkLiBgQ29kZVNjcmlwdCBUb29sa2l0YCB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgICh2aWEgaXRzIGBzdGFydHVwU2NyaXB0UGF0aGBcbiAqIHNldHRpbmcpLCB3aGljaCBpcyB3aGVyZSBlYWNoIHZhdWx0IG9wZW5zIGl0cyBzdGFydCBub3RlIGFuZCBkb2VzIGFueSBwbHVnaW4tc3BlY2lmaWMgc2V0dXAuXG4gKlxuICogSXQgYWxzbyBjcmVhdGVzIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3MgaW52b2NhYmxlLXNjcmlwdHMgZm9sZGVyIGlmIGl0IGlzIG1pc3NpbmcsIHNvIGV2ZXJ5IGRlbW8gdmF1bHRcbiAqIGhhcyB0aGUgc2FtZSBsYXlvdXQgZXZlbiB3aGVuIHRoZSB2YXVsdCBzaGlwcyBubyBpbnZvY2FibGUgc2NyaXB0cyDigJQgdGhlIHZhdWx0cyB0aGVtc2VsdmVzIGNvbW1pdCBub1xuICogZW1wdHkgZm9sZGVyIGZvciBpdC5cbiAqXG4gKiBJdCB0aGVuIGluc3RhbGxzIHRoZSBgRm9sZGVyIE5vdGVzYCBwbHVnaW4sIGNvbmZpZ3VyZWQgdG8gdHJlYXQgYFJFQURNRS5tZGAgYXMgYSBmb2xkZXIncyBvd24gbm90ZS4gQVxuICogZGVtbyB2YXVsdCB0aGF0IGhhcyBvdXRncm93biBhIGZsYXQgbm90ZSBsaXN0IGdyb3VwcyBpdHMgbm90ZXMgaW50byBmb2xkZXJzLCBhbmQgYSBncm91cCBmb2xkZXIgb25seVxuICogc2F5cyB3aGF0IGl0IGlzIGZvciBpZiBpdCBoYXMgYSBub3RlIG9mIGl0cyBvd24g4oCUIGBSRUFETUUubWRgLCBiZWNhdXNlIHRoYXQgaXMgYWxzbyB0aGUgZmlsZSBHaXRIdWJcbiAqIHJlbmRlcnMgdW5kZXIgdGhlIGZpbGUgbGlzdCB3aGVuIHRoZSBzYW1lIHZhdWx0IGlzIGJyb3dzZWQgYXMgYSByZXBvc2l0b3J5LCBzbyBvbmUgZmlsZSBzZXJ2ZXMgYm90aFxuICogcmVhZGVycy5cbiAqXG4gKiBGaW5hbGx5IGl0IHJhaXNlcyB0aGUgc2FuZGJveCBub3RpY2UgZXhwbGFpbmluZyB0aGF0IHRoZSBvcGVuZWQgdmF1bHQgaXMgYSB0aHJvd2F3YXkgY29weSwgc28gYSB1c2VyXG4gKiB3aG8gd3JpdGVzIHRoZWlyIG93biBub3RlcyBpbiBpdCBpcyBuZXZlciBzdXJwcmlzZWQgYnkgdGhlbSBiZWluZyBhYnNlbnQgZnJvbSB0aGUgbmV4dCBjb3B5LiBTZXR0aW5nc1xuICogaXMgY2xvc2VkIGZpcnN0LCBzbyB0aGUgbm90aWNlIGxhbmRzIGluIHRoZSB2YXVsdCdzIG1haW4gd2luZG93IHJhdGhlciB0aGFuIGluIHRoZSBzZXR0aW5ncyBwb3BvdXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBFTVBUWSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IERlbW9WYXVsdEhlbHBlclNldHRpbmdzIH0gZnJvbSAnLi9kZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncy50cyc7XG5cbmltcG9ydCB7XG4gIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbixcbiAgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LFxuICBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBlbmFibGVDb21tdW5pdHlQbHVnaW4sXG4gIGluc3RhbGxDb21tdW5pdHlQbHVnaW5cbn0gZnJvbSAnLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBhcHBlbmRDb2RlQmxvY2sgfSBmcm9tICcuL2h0bWwtZWxlbWVudC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwRGVtb1ZhdWx0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbn1cblxuLyoqXG4gKiBgQ29kZVNjcmlwdCBUb29sa2l0YCdzIHNldHRpbmdzLCB3cml0dGVuIGludG8gaXRzIGBkYXRhLmpzb25gIGJlZm9yZSBpdCBpcyBlbmFibGVkLlxuICovXG5pbnRlcmZhY2UgQ29kZVNjcmlwdFRvb2xraXRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgWUFNTCBmcm9udG1hdHRlciBtZXJnZWQgaW50byBldmVyeSBgY29kZS1idXR0b25gIGJsb2NrJ3Mgb3duIGNvbmZpZywgdXNlZCBoZXJlIHRvIHR1cm4gdGhlXG4gICAqIHNvdXJjZSB2aWV3ZXIgb24gZm9yIGV2ZXJ5IGJ1dHRvbiBpbiBldmVyeSBkZW1vIHZhdWx0IHdpdGhvdXQgZWRpdGluZyBhIHNpbmdsZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvZGVCdXR0b25Db25maWc6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciAodW5kZXIge0BsaW5rIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3MubW9kdWxlc1Jvb3R9KSBob2xkaW5nIGludm9jYWJsZSBzY3JpcHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW52b2NhYmxlU2NyaXB0c0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgZm9sZGVyIHRoYXQgYHJlcXVpcmUoJy/igKYnKWAgcmVzb2x2ZXMgbW9kdWxlIHBhdGhzIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBtb2R1bGVzUm9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBDb2RlU2NyaXB0IFRvb2xraXRgIGhhbmRsZXMgYG9ic2lkaWFuOi8vYCBwcm90b2NvbCBVUkxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSGFuZGxlUHJvdG9jb2xVcmxzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCAodW5kZXIge0BsaW5rIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3MubW9kdWxlc1Jvb3R9KSBvZiB0aGUgc2NyaXB0IHJ1biBvbiBsb2FkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnR1cFNjcmlwdFBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBgRm9sZGVyIE5vdGVzYCcgc2V0dGluZ3MsIHdyaXR0ZW4gaW50byBpdHMgYGRhdGEuanNvbmAgYmVmb3JlIGl0IGlzIGVuYWJsZWQuXG4gKi9cbmludGVyZmFjZSBGb2xkZXJOb3Rlc1NldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGEgZm9sZGVyJ3Mgb3duIG5vdGUgaXMgbG9va2VkIGZvciB1bmRlciwgd2l0aG91dCB0aGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyTm90ZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBhIGZvbGRlcidzIG93biBub3RlIGlzIGhpZGRlbiBmcm9tIHRoZSBmaWxlIGV4cGxvcmVyLCBzbyB0aGUgZm9sZGVyIGl0c2VsZiBzdGFuZHMgZm9yIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaGlkZUZvbGRlck5vdGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIGEgZm9sZGVyJ3Mgb3duIG5vdGUgaXMga2VwdCwgcmVsYXRpdmUgdG8gdGhlIGZvbGRlciBpdCBkZXNjcmliZXMuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlTG9jYXRpb246IHN0cmluZztcbn1cblxuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQgPSAnZml4LXJlcXVpcmUtbW9kdWxlcyc7XG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCA9ICdfYXNzZXRzL0NvZGVTY3JpcHRUb29sa2l0JztcbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfU0VUVElOR1M6IENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3MgPSB7XG4gIGRlZmF1bHRDb2RlQnV0dG9uQ29uZmlnOiAnLS0tXFxuc291cmNlVmlzaWJpbGl0eTogY29sbGFwc2VkXFxuLS0tJyxcbiAgaW52b2NhYmxlU2NyaXB0c0ZvbGRlcjogJ0ludm9jYWJsZXMnLFxuICBtb2R1bGVzUm9vdDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QsXG4gIHNob3VsZEhhbmRsZVByb3RvY29sVXJsczogdHJ1ZSxcbiAgc3RhcnR1cFNjcmlwdFBhdGg6ICdzdGFydHVwLnRzJ1xufTtcblxuY29uc3QgRk9MREVSX05PVEVTX1BMVUdJTl9JRCA9ICdmb2xkZXItbm90ZXMnO1xuLy8gYFJFQURNRWAgcmF0aGVyIHRoYW4gYEZvbGRlciBOb3Rlc2AnIG93biBge3tmb2xkZXJfbmFtZX19YCBkZWZhdWx0OiB0aGUgc2FtZSBmaWxlIGhhcyB0byBiZSB0aGUgZm9sZGVyJ3Ncbi8vIG5vdGUgaW4gT2JzaWRpYW4gQU5EIHRoZSBwYWdlIEdpdEh1YiByZW5kZXJzIHdoZW4gdGhlIHZhdWx0IGlzIGJyb3dzZWQgYXMgYSByZXBvc2l0b3J5LCBhbmQgR2l0SHViXG4vLyBvbmx5IGRvZXMgdGhhdCBmb3IgYFJFQURNRS5tZGAuIGBpbnNpZGVGb2xkZXJgIGtlZXBzIGl0IHdpdGggdGhlIG5vdGVzIGl0IGRlc2NyaWJlcyByYXRoZXIgdGhhbiBiZXNpZGVcbi8vIHRoZSBmb2xkZXIsIGFuZCBoaWRpbmcgaXQgbGV0cyB0aGUgZm9sZGVyIGl0c2VsZiBzdGFuZCBmb3IgdGhlIG5vdGUgaW5zdGVhZCBvZiBsaXN0aW5nIGJvdGguXG5jb25zdCBGT0xERVJfTk9URVNfU0VUVElOR1M6IEZvbGRlck5vdGVzU2V0dGluZ3MgPSB7XG4gIGZvbGRlck5vdGVOYW1lOiAnUkVBRE1FJyxcbiAgaGlkZUZvbGRlck5vdGU6IHRydWUsXG4gIHN0b3JhZ2VMb2NhdGlvbjogJ2luc2lkZUZvbGRlcidcbn07XG5cbmNvbnN0IERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRCA9ICdkZW1vLXZhdWx0LWhlbHBlcic7XG5jb25zdCBQTFVHSU5TX0ZPTERFUl9OQU1FID0gJ3BsdWdpbnMnO1xuY29uc3QgREFUQV9KU09OX0ZJTEVfTkFNRSA9ICdkYXRhLmpzb24nO1xuY29uc3QgSU5WQUxJRF9ERU1PX1ZBVUxUX0VSUk9SX01FU1NBR0UgPSAnSW52YWxpZCBkZW1vIHZhdWx0JztcbmNvbnN0IE9QRU5fREVNT19WQVVMVF9DT01NQU5EX05BTUUgPSAnT3BlbiBkZW1vIHZhdWx0Jztcbi8vIGAwYCBhc2tzIE9ic2lkaWFuIHRvIGtlZXAgdGhlIG5vdGljZSB1cCB1bnRpbCB0aGUgdXNlciBjbGlja3MgaXQg4oCUIHRoZSBzYW1lIHRyZWF0bWVudCBPYnNpZGlhbiBnaXZlc1xuLy8gaXRzIG93biBzYW5kYm94LXZhdWx0IG5vdGljZSwgYW5kIHdoYXQgdGhlIGRlbW8tdmF1bHQgbm90aWNlIGlzIG1vZGVsbGVkIG9uLlxuY29uc3QgU0FOREJPWF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gMDtcblxuLyoqXG4gKiBCb290c3RyYXBzIGEgZGVtbyB2YXVsdCBzbyBpdHMgbm90ZXMnIGBjb2RlLWJ1dHRvbmBzIHdvcmsgd2l0aCBubyBtYW51YWwgc2V0dXAuIEl0IGluc3RhbGxzIENvZGVTY3JpcHRcbiAqIFRvb2xraXQgZnJvbSB0aGUgY29tbXVuaXR5IHN0b3JlIChpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQpLCB3cml0ZXMgaXRzIHNldHRpbmdzLCB0aGVuIGVuYWJsZXNcbiAqIGl0IOKAlCBjbG9zaW5nIFNldHRpbmdzIHJpZ2h0IGJlZm9yZSBlYWNoIGVuYWJsZSwgc28gbm8gcmVhZGluZyB2aWV3IHF1ZXVlcyBhIHJlLXJlbmRlciBvbiB0aGUgc2V0dGluZ3NcbiAqIHBvcG91dCdzIGFuaW1hdGlvbiBmcmFtZSwgYW5kIHdyaXRpbmcgdGhlIHNldHRpbmdzIEJFRk9SRSBlbmFibGluZyBzbyBhIGZyZXNoIGVuYWJsZSBsb2FkcyBpdCBhbHJlYWR5IGNvbmZpZ3VyZWQsIHdpdGggbm9cbiAqIHJlbG9hZC4gSWYgYENvZGVTY3JpcHQgVG9vbGtpdGAgaXMgYWxyZWFkeSBlbmFibGVkIGJ1dCB0aGUgc2V0dGluZ3MganVzdCBjaGFuZ2VkLCBpdCBpcyByZWxvYWRlZFxuICogKGRpc2FibGVkIHRoZW4gZW5hYmxlZCkgc28gaXQgcmUtcmVhZHMgYGRhdGEuanNvbmA7IHdoZW4gdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBpbiBwbGFjZSwgbm90aGluZyBpc1xuICogcmVsb2FkZWQgKHNvIGEgcm91dGluZSB2YXVsdCByZS1vcGVuIGRvZXMgbm90IHJlLXJ1biBgQ29kZVNjcmlwdCBUb29sa2l0YCdzIHN0YXJ0dXApLiBgQ29kZVNjcmlwdCBUb29sa2l0YFxuICogdGhlbiBydW5zIHRoZSB2YXVsdCdzIGBzdGFydHVwLnRzYC4gYEZvbGRlciBOb3Rlc2AgaXMgaW5zdGFsbGVkIG5leHQsIGNvbmZpZ3VyZWQgdG8gdHJlYXQgYFJFQURNRS5tZGAgYXNcbiAqIGEgZm9sZGVyJ3Mgb3duIG5vdGUsIHNvIGEgdmF1bHQgd2hvc2Ugbm90ZXMgYXJlIGdyb3VwZWQgaW50byBmb2xkZXJzIGRlc2NyaWJlcyBlYWNoIGdyb3VwIGluIHRoZSBmaWxlXG4gKiBleHBsb3Jlci4gRmluYWxseSBpdCBjbG9zZXMgU2V0dGluZ3MgYWdhaW4gKHNvIHRoZSBub3RpY2UgY2Fubm90IGJlIHJhaXNlZCBpbnNpZGUgdGhlIHNldHRpbmdzIHBvcG91dCkgYW5kXG4gKiByYWlzZXMgdGhlIHNhbmRib3ggbm90aWNlIGRlc2NyaWJpbmcgdGhlIG9wZW5lZCB2YXVsdCBhcyBhIHRocm93YXdheSBjb3B5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYENvZGVTY3JpcHQgVG9vbGtpdGAgaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkLCBhbmQgZW5hYmxlZFxuICogYW5kIHRoZSBzYW5kYm94IG5vdGljZSBoYXMgYmVlbiBzaG93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcERlbW9WYXVsdChwYXJhbXM6IEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICAvLyBSZXNvbHZlZCBmaXJzdCwgc28gYSB2YXVsdCB0aGF0IGlzIG5vdCBhIGRlbW8gdmF1bHQgaXMgcmVmdXNlZCBiZWZvcmUgYW55dGhpbmcgaXMgaW5zdGFsbGVkIGludG8gaXQuXG4gIGNvbnN0IGRlbW9lZFBsdWdpbklkID0gYXdhaXQgZ2V0RGVtb2VkUGx1Z2luSWQoYXBwKTtcbiAgYXdhaXQgaW5zdGFsbENvbW11bml0eVBsdWdpbih7IGFwcCwgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lEIH0pO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4oe1xuICAgIGFwcCxcbiAgICBwbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQsXG4gICAgc2V0dGluZ3M6IENPREVfU0NSSVBUX1RPT0xLSVRfU0VUVElOR1NcbiAgfSk7XG4gIGF3YWl0IGVuc3VyZUludm9jYWJsZVNjcmlwdHNGb2xkZXIoYXBwKTtcbiAgLy8gUmVsb2FkZWQgd2hlbiBhbHJlYWR5IGVuYWJsZWQgd2l0aCBzdGFsZSBzZXR0aW5ncywgc28gYENvZGVTY3JpcHQgVG9vbGtpdGAgcmUtcmVhZHMgdGhlIGZyZXNobHkgd3JpdHRlbiBkYXRhLmpzb24uXG4gIGF3YWl0IGVuYWJsZU9yUmVsb2FkUGx1Z2luKGFwcCwgQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQsIHJlc3VsdCA9PT0gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3MpO1xuXG4gIC8vIEFmdGVyIGBDb2RlU2NyaXB0IFRvb2xraXRgLCBzbyB0aGUgdmF1bHQncyBzdGFydHVwIHNjcmlwdCBoYXMgYWxyZWFkeSBvcGVuZWQgdGhlIHN0YXJ0IG5vdGUgYnkgdGhlIHRpbWVcbiAgLy8gdGhlIGZpbGUgZXhwbG9yZXIgZ2FpbnMgaXRzIGZvbGRlci1ub3RlIGJlaGF2aW9yLlxuICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZDogRk9MREVSX05PVEVTX1BMVUdJTl9JRCB9KTtcbiAgY29uc3QgZm9sZGVyTm90ZXNSZXN1bHQgPSBhd2FpdCBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4oe1xuICAgIGFwcCxcbiAgICBwbHVnaW5JZDogRk9MREVSX05PVEVTX1BMVUdJTl9JRCxcbiAgICBzZXR0aW5nczogRk9MREVSX05PVEVTX1NFVFRJTkdTXG4gIH0pO1xuICBhd2FpdCBlbmFibGVPclJlbG9hZFBsdWdpbihhcHAsIEZPTERFUl9OT1RFU19QTFVHSU5fSUQsIGZvbGRlck5vdGVzUmVzdWx0ID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2Vzcyk7XG5cbiAgc2hvd1NhbmRib3hOb3RpY2UoYXBwLCBkZW1vZWRQbHVnaW5JZCk7XG59XG5cbi8vIEJ1aWxkcyB0aGUgc2FuZGJveCBub3RpY2UgY29udGVudDogd2hhdCB0aGlzIHZhdWx0IGlzLCB3aGVyZSBpdCBsaXZlcywgaG93IGxvbmcgaXQgbGl2ZXMsIGFuZCB3aHlcbi8vIHJlLXJ1bm5pbmcgdGhlIGNvbW1hbmQgcHJvZHVjZXMgYSB2YXVsdCB3aXRob3V0IHRoZSBub3RlcyBqdXN0IHdyaXR0ZW4gaGVyZS5cbi8vXG4vLyBFdmVyeSBjbGFpbSBoYXMgdG8gc3RheSB0cnVlIG9mIHRoZSBvcGVuZXIgKGBkZXNrdG9wLWRlbW8tdmF1bHQtb3BlbmVyLnRzYCk6IGl0IGV4dHJhY3RzIGEgRlJFU0ggY29weVxuLy8gaW50byBpdHMgb3duIGZvbGRlciBvbiBldmVyeSBvcGVuLCBhbmQgZGVsZXRlcyBleHRyYWN0ZWQgZm9sZGVycyBvbGRlciB0aGFuIGEgZGF5IG9uIGVhY2ggbGF0ZXIgb3Blbi5cbi8vIFNvIHRoZSB2YXVsdCBpcyBhIHRlbXBvcmFyeSBzYW5kYm94IOKAlCBpdCBtdXN0IG5ldmVyIGJlIGRlc2NyaWJlZCBhcyBhIHBsYWNlIHdvcmsgY2FuIGJlIGxlZnQuXG5mdW5jdGlvbiBidWlsZFNhbmRib3hOb3RpY2VGcmFnbWVudChwbHVnaW5OYW1lOiBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50KChmcmFnbWVudCkgPT4ge1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ1RoaXMgaXMgYSBkZW1vIHZhdWx0IGZvciAnKTtcbiAgICBhcHBlbmRDb2RlQmxvY2soZnJhZ21lbnQsIHBsdWdpbk5hbWUpO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJy4nKTtcblxuICAgIGZyYWdtZW50LmNyZWF0ZUVsKCdicicpO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ0l0IGlzIGEgdGVtcG9yYXJ5IHNhbmRib3gsIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBhYm91dCBhIGRheSBhZnRlciB5b3UgbGFzdCB1c2UgaXQuJyk7XG5cbiAgICBmcmFnbWVudC5jcmVhdGVFbCgnYnInKTtcbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCdFeGVjdXRpbmcgJyk7XG4gICAgZnJhZ21lbnQuY3JlYXRlRWwoJ2InLCB7IHRleHQ6IGAke3BsdWdpbk5hbWV9OiAke09QRU5fREVNT19WQVVMVF9DT01NQU5EX05BTUV9YCB9KTtcbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KCcgY29tbWFuZCBhZ2FpbiBjcmVhdGVzIGEgbmV3IGNvcHkgd2l0aCB0aGUgbGF0ZXN0IHBsdWdpbiB2ZXJzaW9uLCBzbyB5b3VyIG5vdGVzIHdpbGwgbm90IGFwcGVhciBpbiBpdC4nKTtcbiAgfSk7XG59XG5cbi8vIENsb3NlcyBTZXR0aW5ncywgdGhlbiBlbmFibGVzIHRoZSBwbHVnaW4sIG9yIHJlbG9hZHMgaXQgKGRpc2FibGVzIHRoZW4gZW5hYmxlcykgd2hlbiBpdCBpcyBhbHJlYWR5IGVuYWJsZWRcbi8vIGFuZCBgc2hvdWxkUmVsb2FkSWZFbmFibGVkYCBzYXlzIGl0cyBzZXR0aW5ncyBqdXN0IGNoYW5nZWQuXG4vL1xuLy8gVGhlIGNsb3NlIGlzIGxvYWQtYmVhcmluZywgbm90IGNvc21ldGljLCBhbmQgaXQgaGFzIHRvIGNvbWUgcmlnaHQgYmVmb3JlIEVBQ0ggZW5hYmxlIHJhdGhlciB0aGFuIG9uY2UgYXRcbi8vIHRoZSBzdGFydC4gQSBmcmVzaGx5IG9wZW5lZCBkZW1vIHZhdWx0IGFza3MgdGhlIHVzZXIgdG8gdHJ1c3QgaXRzIGF1dGhvciwgYW5kIHRoZSB0cnVzdCBidXR0b24gcnVuc1xuLy8gYGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKWAgYW5kIG9ubHkgdGhlbiBgYXBwLnNldHRpbmcub3BlbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIDEuMTQuNCdzXG4vLyBgYXBwLmpzYCkuIFRoZSBoZWxwZXIgaXMgb25lIG9mIHRoZSBwbHVnaW5zIGBzZXRFbmFibGVgIGxvYWRzLCBhbmQgYG9uTGF5b3V0UmVhZHlgIGNhbGxzIGJhY2sgYXQgb25jZSBvbiBhXG4vLyByZWFkeSBsYXlvdXQsIHNvIHRoZSBib290c3RyYXAgc3RhcnRzIElOU0lERSBgc2V0RW5hYmxlYCwgYmVmb3JlIFNldHRpbmdzIGV4aXN0cy4gU2V0dGluZ3MgdGhlbiBvcGVucyBhcyBhXG4vLyBQT1BPVVQgV0lORE9XIHRoYXQgYmVjb21lcyBgYWN0aXZlV2luZG93YCwgd2hpbGUgdGhlIGJvb3RzdHJhcCBpcyBzdGlsbCBkb3dubG9hZGluZyBwbHVnaW5zLiBFbmFibGluZyBhXG4vLyBwbHVnaW4gdGhhdCByZWdpc3RlcnMgYSBtYXJrZG93biBwb3N0LXByb2Nlc3NvciAoYEZvbGRlciBOb3Rlc2ApIG1ha2VzIGV2ZXJ5IHJlYWRpbmcgdmlldyBgcmVyZW5kZXIodHJ1ZSlgOlxuLy8gaXQgZW1wdGllcyB0aGUgYm9keSBzZWN0aW9ucyBhbmQgcXVldWVzIHRoZSByZW5kZXIgdGhyb3VnaCBgYWN0aXZlV2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAuIElmIHRoYXQgaXNcbi8vIHRoZSBTZXR0aW5ncyBwb3BvdXQsIGNsb3NpbmcgaXQgbGF0ZXIgZGVzdHJveXMgdGhlIHdpbmRvdyBiZWZvcmUgdGhlIGZyYW1lIGZpcmVzLCB0aGUgcmVuZGVyZXIncyBxdWV1ZWRcbi8vIGhhbmRsZSBuZXZlciBjbGVhcnMsIGFuZCBldmVyeSBsYXRlciByZW5kZXIgcmVxdWVzdCBpcyBpZ25vcmVkLCBzbyB0aGUgc3RhcnQgbm90ZSBzdGF5cyBibGFuayB1bnRpbCBpdHNcbi8vIHRhYiBpcyBjbG9zZWQuIENsb3NpbmcgU2V0dGluZ3MgcmlnaHQgYmVmb3JlIHRoZSBlbmFibGUgYm9va3MgZXZlcnkgc3VjaCBmcmFtZSBvbiB0aGUgbWFpbiB3aW5kb3cuIENsb3Npbmdcbi8vIGFuIGFscmVhZHktY2xvc2VkIFNldHRpbmdzIGlzIGEgbm8tb3AuXG5hc3luYyBmdW5jdGlvbiBlbmFibGVPclJlbG9hZFBsdWdpbihhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZywgc2hvdWxkUmVsb2FkSWZFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGFwcC5zZXR0aW5nLmNsb3NlKCk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbih7IGFwcCwgcGx1Z2luSWQgfSk7XG4gIH0gZWxzZSBpZiAoc2hvdWxkUmVsb2FkSWZFbmFibGVkKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbih7IGFwcCwgcGx1Z2luSWQgfSk7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZCB9KTtcbiAgfVxufVxuXG4vLyBDcmVhdGVzIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3MgaW52b2NhYmxlLXNjcmlwdHMgZm9sZGVyICh1bmRlciBgbW9kdWxlc1Jvb3RgKSBpZiBpdCBpcyBtaXNzaW5nLlxuLy8gRXZlcnkgZGVtbyB2YXVsdCB0aGVuIGhhcyB0aGUgc2FtZSBgQ29kZVNjcmlwdCBUb29sa2l0YCBsYXlvdXQgZXZlbiB3aGVuIGl0IHNoaXBzIG5vIGludm9jYWJsZSBzY3JpcHRzLlxuLy8gVGhlIGNvbW1pdHRlZCB2YXVsdCB0aGVyZWZvcmUgY2FycmllcyBubyBvdGhlcndpc2UtZW1wdHkgcGxhY2Vob2xkZXIgZm9sZGVyLlxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlSW52b2NhYmxlU2NyaXB0c0ZvbGRlcihhcHA6IEFwcCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBpbnZvY2FibGVTY3JpcHRzRm9sZGVyUGF0aCA9IGpvaW4oQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QsIENPREVfU0NSSVBUX1RPT0xLSVRfU0VUVElOR1MuaW52b2NhYmxlU2NyaXB0c0ZvbGRlcik7XG4gIGlmICghYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoKSkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLm1rZGlyKGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoKTtcbiAgfVxufVxuXG4vLyBSZWFkcyB0aGUgcGx1Z2luIHRoZSB2YXVsdCBkZW1vbnN0cmF0ZXMgb3V0IG9mIHRoaXMgaGVscGVyJ3Mgb3duIGBkYXRhLmpzb25gLCB3cml0dGVuIGJ5IHRoZVxuLy8gcGFja2FnaW5nIHN0ZXAgKHNlZSBgRGVtb1ZhdWx0SGVscGVyU2V0dGluZ3NgKS4gQSB2YXVsdCB3aXRob3V0IGEgcmVhZGFibGUgbWFya2VyIHdhcyBub3QgcHJvZHVjZWQgYnlcbi8vIHRoYXQgc3RlcCDigJQgaGFuZC1hc3NlbWJsZWQsIG9yIHVucGFja2VkIGZyb20gc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgZGVtbyB2YXVsdCDigJQgc28gaXQgaXMgcmVmdXNlZFxuLy8gcmF0aGVyIHRoYW4gYm9vdHN0cmFwcGVkIGFnYWluc3QgYSBndWVzcy5cbmFzeW5jIGZ1bmN0aW9uIGdldERlbW9lZFBsdWdpbklkKGFwcDogQXBwKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2V0dGluZ3NQYXRoID0gam9pbihhcHAudmF1bHQuY29uZmlnRGlyLCBQTFVHSU5TX0ZPTERFUl9OQU1FLCBERU1PX1ZBVUxUX0hFTFBFUl9QTFVHSU5fSUQsIERBVEFfSlNPTl9GSUxFX05BTUUpO1xuICBpZiAoIWF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfREVNT19WQVVMVF9FUlJPUl9NRVNTQUdFKTtcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5yZWFkKHNldHRpbmdzUGF0aCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihJTlZBTElEX0RFTU9fVkFVTFRfRVJST1JfTUVTU0FHRSwgeyBjYXVzZTogZXJyb3IgfSk7XG4gIH1cblxuICBjb25zdCBkZW1vZWRQbHVnaW5JZCA9IChwYXJzZWQgYXMgbnVsbCB8IFBhcnRpYWw8RGVtb1ZhdWx0SGVscGVyU2V0dGluZ3M+KT8uZGVtb2VkUGx1Z2luSWQ7XG4gIGlmICh0eXBlb2YgZGVtb2VkUGx1Z2luSWQgIT09ICdzdHJpbmcnIHx8IGRlbW9lZFBsdWdpbklkID09PSBFTVBUWSkge1xuICAgIHRocm93IG5ldyBFcnJvcihJTlZBTElEX0RFTU9fVkFVTFRfRVJST1JfTUVTU0FHRSk7XG4gIH1cbiAgcmV0dXJuIGRlbW9lZFBsdWdpbklkO1xufVxuXG4vLyBUZWxscyB0aGUgdXNlciB0aGlzIHZhdWx0IGlzIGEgc2FuZGJveCwgdXNpbmcgT2JzaWRpYW4ncyBvd24gc2FuZGJveC12YXVsdCB0cmVhdG1lbnQ6IGFuIGluZmluaXRlXG4vLyBkdXJhdGlvbiwgZGlzbWlzc2VkIGJ5IGNsaWNraW5nIGl0LiBSYWlzZWQgbGFzdCwgc28gaXQgaXMgdGhlIG5ld2VzdCBub3RpY2Ugb24gc2NyZWVuIG9uY2Vcbi8vIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3Mgc3RhcnR1cCBzY3JpcHQgaGFzIGRvbmUgaXRzIG93biB3b3JrLlxuLy9cbi8vIEEgYE5vdGljZWAgaXMgYnVpbHQgaW5zaWRlIHdoYXRldmVyIHdpbmRvdyBpcyBhY3RpdmUgYXQgdGhhdCBtb21lbnQsIGFuZCBTZXR0aW5ncyBpcyBhIFBPUE9VVCBXSU5ET1dcbi8vICh2ZXJpZmllZCBvbiAxLjEzLjYpIHRoYXQgYmVjb21lcyB0aGUgYWN0aXZlIG9uZSB3aGlsZSBpdCBpcyBvcGVuIOKAlCBzbyBhIG5vdGljZSByYWlzZWQgdGhlbiB3b3VsZCBiZVxuLy8gY3JlYXRlZCBpbiB0aGUgc2V0dGluZ3Mgd2luZG93IGFuZCB2YW5pc2ggd2l0aCBpdC4gYGJvb3RzdHJhcERlbW9WYXVsdGAgYWxyZWFkeSBjbG9zZWQgU2V0dGluZ3MgYmVmb3JlXG4vLyBlYWNoIGVuYWJsZSwgYnV0IGEgcGx1Z2luIGVuYWJsZWQgc2luY2UgbWF5IGhhdmUgb3BlbmVkIGl0IGFnYWluLCBzbyBpdCBpcyBjbG9zZWQgb25jZSBtb3JlIGhlcmU6XG4vLyBPYnNpZGlhbiBoYW5kcyB0aGUgbWFpbiB3aW5kb3cgYmFjayBhcyB0aGUgcG9wb3V0IGdvZXMgYXdheSAoc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBub3RpY2UgaXMgYnVpbHQpLFxuLy8gYW5kIGEgdXNlciB3aG8gaGFzIGp1c3Qgb3BlbmVkIGEgZGVtbyB2YXVsdCB3YW50cyB0byBzZWUgdGhlIHZhdWx0IHJhdGhlciB0aGFuIGEgc2V0dGluZ3Mgd2luZG93IGFueXdheS5cbi8vIENsb3NpbmcgYW4gYWxyZWFkeS1jbG9zZWQgU2V0dGluZ3MgaXMgYSBuby1vcCwgc28gbm8gb3Blbi1zdGF0ZSBwcm9iZSBpcyBuZWVkZWQuXG5mdW5jdGlvbiBzaG93U2FuZGJveE5vdGljZShhcHA6IEFwcCwgZGVtb2VkUGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwbHVnaW5OYW1lID0gYXBwLnBsdWdpbnMubWFuaWZlc3RzW2RlbW9lZFBsdWdpbklkXT8ubmFtZSA/PyBkZW1vZWRQbHVnaW5JZDtcbiAgY29uc3QgZnJhZ21lbnQgPSBidWlsZFNhbmRib3hOb3RpY2VGcmFnbWVudChwbHVnaW5OYW1lKTtcbiAgYXBwLnNldHRpbmcuY2xvc2UoKTtcbiAgbmV3IE5vdGljZShmcmFnbWVudCwgU0FOREJPWF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5Q0EsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsYUFBYTtBQUN0QixTQUFTLGNBQWM7QUFJdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHVCQUF1QjtBQStEaEMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxtQ0FBbUM7QUFDekMsTUFBTSwrQkFBMEQ7QUFBQSxFQUM5RCx5QkFBeUI7QUFBQSxFQUN6Qix3QkFBd0I7QUFBQSxFQUN4QixhQUFhO0FBQUEsRUFDYiwwQkFBMEI7QUFBQSxFQUMxQixtQkFBbUI7QUFDckI7QUFFQSxNQUFNLHlCQUF5QjtBQUsvQixNQUFNLHdCQUE2QztBQUFBLEVBQ2pELGdCQUFnQjtBQUFBLEVBQ2hCLGdCQUFnQjtBQUFBLEVBQ2hCLGlCQUFpQjtBQUNuQjtBQUVBLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sbUNBQW1DO0FBQ3pDLE1BQU0sK0JBQStCO0FBR3JDLE1BQU0sMENBQTBDO0FBbUJoRCxlQUFzQixtQkFBbUIsUUFBaUQ7QUFDeEYsUUFBTSxFQUFFLElBQUksSUFBSTtBQUVoQixRQUFNLGlCQUFpQixNQUFNLGtCQUFrQixHQUFHO0FBQ2xELFFBQU0sdUJBQXVCLEVBQUUsS0FBSyxVQUFVLDhCQUE4QixDQUFDO0FBQzdFLFFBQU0sU0FBUyxNQUFNLHlCQUF5QjtBQUFBLElBQzVDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWixDQUFDO0FBQ0QsUUFBTSw2QkFBNkIsR0FBRztBQUV0QyxRQUFNLHFCQUFxQixLQUFLLCtCQUErQixXQUFXLCtCQUErQixPQUFPO0FBSWhILFFBQU0sdUJBQXVCLEVBQUUsS0FBSyxVQUFVLHVCQUF1QixDQUFDO0FBQ3RFLFFBQU0sb0JBQW9CLE1BQU0seUJBQXlCO0FBQUEsSUFDdkQ7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFDRCxRQUFNLHFCQUFxQixLQUFLLHdCQUF3QixzQkFBc0IsK0JBQStCLE9BQU87QUFFcEgsb0JBQWtCLEtBQUssY0FBYztBQUN2QztBQVFBLFNBQVMsMkJBQTJCLFlBQXNDO0FBQ3hFLFNBQU8sZUFBZSxDQUFDLGFBQWE7QUFDbEMsYUFBUyxXQUFXLDJCQUEyQjtBQUMvQyxvQkFBZ0IsVUFBVSxVQUFVO0FBQ3BDLGFBQVMsV0FBVyxHQUFHO0FBRXZCLGFBQVMsU0FBUyxJQUFJO0FBQ3RCLGFBQVMsV0FBVyx3RkFBd0Y7QUFFNUcsYUFBUyxTQUFTLElBQUk7QUFDdEIsYUFBUyxXQUFXLFlBQVk7QUFDaEMsYUFBUyxTQUFTLEtBQUssRUFBRSxNQUFNLEdBQUcsVUFBVSxLQUFLLDRCQUE0QixHQUFHLENBQUM7QUFDakYsYUFBUyxXQUFXLHdHQUF3RztBQUFBLEVBQzlILENBQUM7QUFDSDtBQWlCQSxlQUFlLHFCQUFxQixLQUFVLFVBQWtCLHVCQUErQztBQUM3RyxNQUFJLFFBQVEsTUFBTTtBQUNsQixNQUFJLENBQUMsSUFBSSxRQUFRLGVBQWUsSUFBSSxRQUFRLEdBQUc7QUFDN0MsVUFBTSxzQkFBc0IsRUFBRSxLQUFLLFNBQVMsQ0FBQztBQUFBLEVBQy9DLFdBQVcsdUJBQXVCO0FBQ2hDLFVBQU0sdUJBQXVCLEVBQUUsS0FBSyxTQUFTLENBQUM7QUFDOUMsVUFBTSxzQkFBc0IsRUFBRSxLQUFLLFNBQVMsQ0FBQztBQUFBLEVBQy9DO0FBQ0Y7QUFLQSxlQUFlLDZCQUE2QixLQUF5QjtBQUNuRSxRQUFNLDZCQUE2QixLQUFLLGtDQUFrQyw2QkFBNkIsc0JBQXNCO0FBQzdILE1BQUksQ0FBQyxNQUFNLElBQUksTUFBTSxRQUFRLE9BQU8sMEJBQTBCLEdBQUc7QUFDL0QsVUFBTSxJQUFJLE1BQU0sUUFBUSxNQUFNLDBCQUEwQjtBQUFBLEVBQzFEO0FBQ0Y7QUFNQSxlQUFlLGtCQUFrQixLQUEyQjtBQUMxRCxRQUFNLGVBQWUsS0FBSyxJQUFJLE1BQU0sV0FBVyxxQkFBcUIsNkJBQTZCLG1CQUFtQjtBQUNwSCxNQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sUUFBUSxPQUFPLFlBQVksR0FBRztBQUNqRCxVQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFBQSxFQUNsRDtBQUVBLE1BQUk7QUFDSixNQUFJO0FBQ0YsYUFBUyxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sUUFBUSxLQUFLLFlBQVksQ0FBQztBQUFBLEVBQ2hFLFNBQVMsT0FBTztBQUNkLFVBQU0sSUFBSSxNQUFNLGtDQUFrQyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDcEU7QUFFQSxRQUFNLGlCQUFrQixRQUFvRDtBQUM1RSxNQUFJLE9BQU8sbUJBQW1CLFlBQVksbUJBQW1CLE9BQU87QUFDbEUsVUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQUEsRUFDbEQ7QUFDQSxTQUFPO0FBQ1Q7QUFhQSxTQUFTLGtCQUFrQixLQUFVLGdCQUE4QjtBQUNqRSxRQUFNLGFBQWEsSUFBSSxRQUFRLFVBQVUsY0FBYyxHQUFHLFFBQVE7QUFDbEUsUUFBTSxXQUFXLDJCQUEyQixVQUFVO0FBQ3RELE1BQUksUUFBUSxNQUFNO0FBQ2xCLE1BQUksT0FBTyxVQUFVLHVDQUF1QztBQUM5RDsiLCJuYW1lcyI6W119
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZW1vLXZhdWx0LWhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQm9vdHN0cmFwcyBhIGRlbW8gdmF1bHQgYnkgaW5zdGFsbGluZywgY29uZmlndXJpbmcsIGFuZCBlbmFibGluZyBgQ29kZVNjcmlwdCBUb29sa2l0YC5cbiAqXG4gKiBBIHBsdWdpbidzIGRlbW8gdmF1bHQgc2hvd2Nhc2VzIHRoZSBwbHVnaW4gdGhyb3VnaCBub3RlcyB3aG9zZSBgY29kZS1idXR0b25gcyBydW4gVHlwZVNjcmlwdCB2aWFcbiAqIGBDb2RlU2NyaXB0IFRvb2xraXRgLiBBIGRlbW8gdmF1bHQgdGhhdCBkb2VzIG5vdCBpdHNlbGYgc2hpcCBgQ29kZVNjcmlwdCBUb29sa2l0YCB0aGVyZWZvcmUgbmVlZHMgaXRcbiAqIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWQgYmVmb3JlIHRob3NlIGJ1dHRvbnMgd29yay4ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdH0gZG9lcyBleGFjdGx5XG4gKiB0aGF0IHdpdGggbm8gY29tbWl0dGVkIGBDb2RlU2NyaXB0IFRvb2xraXRgIGNvbmZpZyBhbmQgbm8gbWFudWFsIHNldHVwLCBzbyBpdCBjYW4gYmUgZHJpdmVuIGZyb20gYSB0aW55XG4gKiBjb21taXR0ZWQgYm9vdHN0cmFwIHBsdWdpbiAoYGRlbW8tdmF1bHQtaGVscGVyYCkgdGhhdCBpcyBpbmplY3RlZCBpbnRvIGV2ZXJ5IGRlbW8gdmF1bHQgYXQgcmVsZWFzZVxuICogdGltZS5cbiAqXG4gKiBUaGUgcGx1Z2luIHRoZSB2YXVsdCBkZW1vbnN0cmF0ZXMgaXMgcmVhZCBmcm9tIHRoZSBoZWxwZXIncyBvd24gYGRhdGEuanNvbmAsIHdyaXR0ZW4gYnkgdGhlIHBhY2thZ2luZ1xuICogc3RlcCAoe0BsaW5rIERlbW9WYXVsdEhlbHBlclNldHRpbmdzfSk7IGEgdmF1bHQgd2l0aG91dCB0aGF0IG1hcmtlciBpcyByZWZ1c2VkIGFzIG5vdCBhIGRlbW8gdmF1bHQuXG4gKlxuICogU2V0dGluZ3MgaXMgY2xvc2VkIHJpZ2h0IGJlZm9yZSBlYWNoIHBsdWdpbiBpcyBlbmFibGVkLiBBZnRlciB0aGUgdHJ1c3QgcHJvbXB0IE9ic2lkaWFuIG9wZW5zIFNldHRpbmdzIGFzXG4gKiBhIHBvcG91dCB3aW5kb3cgd2hpbGUgdGhlIGJvb3RzdHJhcCBpcyBhbHJlYWR5IHJ1bm5pbmcsIGFuZCBhIHJlYWRpbmcgdmlldyByZS1yZW5kZXJlZCB3aGlsZSB0aGF0IHBvcG91dFxuICogaXMgdGhlIGFjdGl2ZSB3aW5kb3cgcXVldWVzIGl0cyByZW5kZXIgb24gdGhlIHBvcG91dCdzIGFuaW1hdGlvbiBmcmFtZSDigJQgd2hpY2ggbmV2ZXIgZmlyZXMgb25jZSB0aGVcbiAqIHBvcG91dCBjbG9zZXMsIGxlYXZpbmcgdGhlIHN0YXJ0IG5vdGUgYmxhbmsgdW50aWwgaXRzIHRhYiBpcyByZW9wZW5lZC5cbiAqXG4gKiBJdCB3cml0ZXMgYENvZGVTY3JpcHQgVG9vbGtpdGAncyBzZXR0aW5ncyBCRUZPUkUgZW5hYmxpbmcgaXQsIHNvIHRoZSBwbHVnaW4gbG9hZHMgYWxyZWFkeSBjb25maWd1cmVkIOKAlFxuICogbm8gcmVsb2FkLiBgQ29kZVNjcmlwdCBUb29sa2l0YCB0aGVuIHJ1bnMgdGhlIHZhdWx0J3MgYHN0YXJ0dXAudHNgICh2aWEgaXRzIGBzdGFydHVwU2NyaXB0UGF0aGBcbiAqIHNldHRpbmcpLCB3aGljaCBpcyB3aGVyZSBlYWNoIHZhdWx0IG9wZW5zIGl0cyBzdGFydCBub3RlIGFuZCBkb2VzIGFueSBwbHVnaW4tc3BlY2lmaWMgc2V0dXAuXG4gKlxuICogSXQgYWxzbyBjcmVhdGVzIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3MgaW52b2NhYmxlLXNjcmlwdHMgZm9sZGVyIGlmIGl0IGlzIG1pc3NpbmcsIHNvIGV2ZXJ5IGRlbW8gdmF1bHRcbiAqIGhhcyB0aGUgc2FtZSBsYXlvdXQgZXZlbiB3aGVuIHRoZSB2YXVsdCBzaGlwcyBubyBpbnZvY2FibGUgc2NyaXB0cyDigJQgdGhlIHZhdWx0cyB0aGVtc2VsdmVzIGNvbW1pdCBub1xuICogZW1wdHkgZm9sZGVyIGZvciBpdC5cbiAqXG4gKiBCZWZvcmUgZW5hYmxpbmcgYENvZGVTY3JpcHQgVG9vbGtpdGAgaXQgdHJ1c3RzIHRoZSB2YXVsdCdzIHN0YXJ0dXAgc2NyaXB0IGFuZCBpbnZvY2FibGUgc2NyaXB0cyBmb2xkZXIgb24gdGhpc1xuICogZGV2aWNlLCBzbyB0aGUgdmF1bHQgb3BlbnMgd2l0aCBubyB0cnVzdCBwcm9tcHQgYW5kIGl0cyBidXR0b25zIHJ1biBvbiB0aGUgZmlyc3QgY2xpY2suXG4gKlxuICogSXQgdGhlbiBpbnN0YWxscyB0aGUgYEZvbGRlciBOb3Rlc2AgcGx1Z2luLCBjb25maWd1cmVkIHRvIHRyZWF0IGBSRUFETUUubWRgIGFzIGEgZm9sZGVyJ3Mgb3duIG5vdGUuIEFcbiAqIGRlbW8gdmF1bHQgdGhhdCBoYXMgb3V0Z3Jvd24gYSBmbGF0IG5vdGUgbGlzdCBncm91cHMgaXRzIG5vdGVzIGludG8gZm9sZGVycywgYW5kIGEgZ3JvdXAgZm9sZGVyIG9ubHlcbiAqIHNheXMgd2hhdCBpdCBpcyBmb3IgaWYgaXQgaGFzIGEgbm90ZSBvZiBpdHMgb3duIOKAlCBgUkVBRE1FLm1kYCwgYmVjYXVzZSB0aGF0IGlzIGFsc28gdGhlIGZpbGUgR2l0SHViXG4gKiByZW5kZXJzIHVuZGVyIHRoZSBmaWxlIGxpc3Qgd2hlbiB0aGUgc2FtZSB2YXVsdCBpcyBicm93c2VkIGFzIGEgcmVwb3NpdG9yeSwgc28gb25lIGZpbGUgc2VydmVzIGJvdGhcbiAqIHJlYWRlcnMuXG4gKlxuICogRmluYWxseSBpdCByYWlzZXMgdGhlIHNhbmRib3ggbm90aWNlIGV4cGxhaW5pbmcgdGhhdCB0aGUgb3BlbmVkIHZhdWx0IGlzIGEgdGhyb3dhd2F5IGNvcHksIHNvIGEgdXNlclxuICogd2hvIHdyaXRlcyB0aGVpciBvd24gbm90ZXMgaW4gaXQgaXMgbmV2ZXIgc3VycHJpc2VkIGJ5IHRoZW0gYmVpbmcgYWJzZW50IGZyb20gdGhlIG5leHQgY29weS4gU2V0dGluZ3NcbiAqIGlzIGNsb3NlZCBmaXJzdCwgc28gdGhlIG5vdGljZSBsYW5kcyBpbiB0aGUgdmF1bHQncyBtYWluIHdpbmRvdyByYXRoZXIgdGhhbiBpbiB0aGUgc2V0dGluZ3MgcG9wb3V0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncyB9IGZyb20gJy4vZGVtby12YXVsdC1oZWxwZXItc2V0dGluZ3MudHMnO1xuXG5pbXBvcnQge1xuICBjb25maWd1cmVDb21tdW5pdHlQbHVnaW4sXG4gIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdCxcbiAgZGlzYWJsZUNvbW11bml0eVBsdWdpbixcbiAgZW5hYmxlQ29tbXVuaXR5UGx1Z2luLFxuICBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luXG59IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuaW1wb3J0IHsgYXBwZW5kQ29kZUJsb2NrIH0gZnJvbSAnLi9odG1sLWVsZW1lbnQudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcERlbW9WYXVsdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogYENvZGVTY3JpcHQgVG9vbGtpdGAncyBzZXR0aW5ncywgd3JpdHRlbiBpbnRvIGl0cyBgZGF0YS5qc29uYCBiZWZvcmUgaXQgaXMgZW5hYmxlZC5cbiAqL1xuaW50ZXJmYWNlIENvZGVTY3JpcHRUb29sa2l0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIFlBTUwgZnJvbnRtYXR0ZXIgbWVyZ2VkIGludG8gZXZlcnkgYGNvZGUtYnV0dG9uYCBibG9jaydzIG93biBjb25maWcsIHVzZWQgaGVyZSB0byB0dXJuIHRoZVxuICAgKiBzb3VyY2Ugdmlld2VyIG9uIGZvciBldmVyeSBidXR0b24gaW4gZXZlcnkgZGVtbyB2YXVsdCB3aXRob3V0IGVkaXRpbmcgYSBzaW5nbGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb2RlQnV0dG9uQ29uZmlnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgaG9sZGluZyBpbnZvY2FibGUgc2NyaXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IGludm9jYWJsZVNjcmlwdHNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGF0IGByZXF1aXJlKCcv4oCmJylgIHJlc29sdmVzIG1vZHVsZSBwYXRocyBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlc1Jvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBgQ29kZVNjcmlwdCBUb29sa2l0YCBoYW5kbGVzIGBvYnNpZGlhbjovL2AgcHJvdG9jb2wgVVJMcy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhhbmRsZVByb3RvY29sVXJsczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggKHVuZGVyIHtAbGluayBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzLm1vZHVsZXNSb290fSkgb2YgdGhlIHNjcmlwdCBydW4gb24gbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0dXBTY3JpcHRQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogYEZvbGRlciBOb3Rlc2AnIHNldHRpbmdzLCB3cml0dGVuIGludG8gaXRzIGBkYXRhLmpzb25gIGJlZm9yZSBpdCBpcyBlbmFibGVkLlxuICovXG5pbnRlcmZhY2UgRm9sZGVyTm90ZXNTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBhIGZvbGRlcidzIG93biBub3RlIGlzIGxvb2tlZCBmb3IgdW5kZXIsIHdpdGhvdXQgdGhlIGV4dGVuc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlck5vdGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBmb2xkZXIncyBvd24gbm90ZSBpcyBoaWRkZW4gZnJvbSB0aGUgZmlsZSBleHBsb3Jlciwgc28gdGhlIGZvbGRlciBpdHNlbGYgc3RhbmRzIGZvciBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGhpZGVGb2xkZXJOb3RlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSBhIGZvbGRlcidzIG93biBub3RlIGlzIGtlcHQsIHJlbGF0aXZlIHRvIHRoZSBmb2xkZXIgaXQgZGVzY3JpYmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lEID0gJ2ZpeC1yZXF1aXJlLW1vZHVsZXMnO1xuY29uc3QgQ09ERV9TQ1JJUFRfVE9PTEtJVF9NT0RVTEVTX1JPT1QgPSAnX2Fzc2V0cy9Db2RlU2NyaXB0VG9vbGtpdCc7XG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTOiBDb2RlU2NyaXB0VG9vbGtpdFNldHRpbmdzID0ge1xuICBkZWZhdWx0Q29kZUJ1dHRvbkNvbmZpZzogJy0tLVxcbnNvdXJjZVZpc2liaWxpdHk6IGNvbGxhcHNlZFxcbi0tLScsXG4gIGludm9jYWJsZVNjcmlwdHNGb2xkZXI6ICdJbnZvY2FibGVzJyxcbiAgbW9kdWxlc1Jvb3Q6IENPREVfU0NSSVBUX1RPT0xLSVRfTU9EVUxFU19ST09ULFxuICBzaG91bGRIYW5kbGVQcm90b2NvbFVybHM6IHRydWUsXG4gIHN0YXJ0dXBTY3JpcHRQYXRoOiAnc3RhcnR1cC50cydcbn07XG5cbi8vIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3MgcGVyLXZhdWx0LCBwZXItZGV2aWNlIGBsb2NhbFN0b3JhZ2VgIGxpc3RzIG9mIHRydXN0ZWQgc3RhcnR1cCBzY3JpcHQgcGF0aHMgYW5kIHRydXN0ZWRcbi8vIGludm9jYWJsZSBzY3JpcHRzIGZvbGRlcnMgKGl0cyBgdHJ1c3RlZC1zdGFydHVwLXNjcmlwdHMta2V5LnRzYCBhbmQgYHRydXN0ZWQtaW52b2NhYmxlLXNjcmlwdHMtZm9sZGVyLWtleS50c2ApLiBFYWNoXG4vLyBob2xkcyBwYXRocyByZXNvbHZlZCB1bmRlciBgbW9kdWxlc1Jvb3RgLiBUaGUgaW52b2NhYmxlIHNjcmlwdHMgZm9sZGVyIGtleSBvbmNlIGhlbGQgYSBzaW5nbGUgcGF0aCBzdHJpbmcsIHdoaWNoXG4vLyBgQ29kZVNjcmlwdCBUb29sa2l0YCBzdGlsbCByZWFkcyBhcyBhIG9uZS1lbnRyeSBsaXN0LCBhbmQgc28gZG9lcyB0aGlzIG1vZHVsZS5cbmNvbnN0IENPREVfU0NSSVBUX1RPT0xLSVRfVFJVU1RFRF9TVEFSVFVQX1NDUklQVFNfS0VZID0gJ2NvZGVzY3JpcHQtdG9vbGtpdC10cnVzdGVkLXN0YXJ0dXAtc2NyaXB0cyc7XG5jb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1RSVVNURURfSU5WT0NBQkxFX1NDUklQVFNfRk9MREVSX0tFWSA9ICdjb2Rlc2NyaXB0LXRvb2xraXQtdHJ1c3RlZC1pbnZvY2FibGUtc2NyaXB0cy1mb2xkZXInO1xuXG5jb25zdCBGT0xERVJfTk9URVNfUExVR0lOX0lEID0gJ2ZvbGRlci1ub3Rlcyc7XG4vLyBgUkVBRE1FYCByYXRoZXIgdGhhbiBgRm9sZGVyIE5vdGVzYCcgb3duIGB7e2ZvbGRlcl9uYW1lfX1gIGRlZmF1bHQ6IHRoZSBzYW1lIGZpbGUgaGFzIHRvIGJlIHRoZSBmb2xkZXInc1xuLy8gbm90ZSBpbiBPYnNpZGlhbiBBTkQgdGhlIHBhZ2UgR2l0SHViIHJlbmRlcnMgd2hlbiB0aGUgdmF1bHQgaXMgYnJvd3NlZCBhcyBhIHJlcG9zaXRvcnksIGFuZCBHaXRIdWJcbi8vIG9ubHkgZG9lcyB0aGF0IGZvciBgUkVBRE1FLm1kYC4gYGluc2lkZUZvbGRlcmAga2VlcHMgaXQgd2l0aCB0aGUgbm90ZXMgaXQgZGVzY3JpYmVzIHJhdGhlciB0aGFuIGJlc2lkZVxuLy8gdGhlIGZvbGRlciwgYW5kIGhpZGluZyBpdCBsZXRzIHRoZSBmb2xkZXIgaXRzZWxmIHN0YW5kIGZvciB0aGUgbm90ZSBpbnN0ZWFkIG9mIGxpc3RpbmcgYm90aC5cbmNvbnN0IEZPTERFUl9OT1RFU19TRVRUSU5HUzogRm9sZGVyTm90ZXNTZXR0aW5ncyA9IHtcbiAgZm9sZGVyTm90ZU5hbWU6ICdSRUFETUUnLFxuICBoaWRlRm9sZGVyTm90ZTogdHJ1ZSxcbiAgc3RvcmFnZUxvY2F0aW9uOiAnaW5zaWRlRm9sZGVyJ1xufTtcblxuY29uc3QgREVNT19WQVVMVF9IRUxQRVJfUExVR0lOX0lEID0gJ2RlbW8tdmF1bHQtaGVscGVyJztcbmNvbnN0IFBMVUdJTlNfRk9MREVSX05BTUUgPSAncGx1Z2lucyc7XG5jb25zdCBEQVRBX0pTT05fRklMRV9OQU1FID0gJ2RhdGEuanNvbic7XG5jb25zdCBJTlZBTElEX0RFTU9fVkFVTFRfRVJST1JfTUVTU0FHRSA9ICdJbnZhbGlkIGRlbW8gdmF1bHQnO1xuY29uc3QgT1BFTl9ERU1PX1ZBVUxUX0NPTU1BTkRfTkFNRSA9ICdPcGVuIGRlbW8gdmF1bHQnO1xuLy8gYDBgIGFza3MgT2JzaWRpYW4gdG8ga2VlcCB0aGUgbm90aWNlIHVwIHVudGlsIHRoZSB1c2VyIGNsaWNrcyBpdCDigJQgdGhlIHNhbWUgdHJlYXRtZW50IE9ic2lkaWFuIGdpdmVzXG4vLyBpdHMgb3duIHNhbmRib3gtdmF1bHQgbm90aWNlLCBhbmQgd2hhdCB0aGUgZGVtby12YXVsdCBub3RpY2UgaXMgbW9kZWxsZWQgb24uXG5jb25zdCBTQU5EQk9YX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMgPSAwO1xuXG4vKipcbiAqIEJvb3RzdHJhcHMgYSBkZW1vIHZhdWx0IHNvIGl0cyBub3RlcycgYGNvZGUtYnV0dG9uYHMgd29yayB3aXRoIG5vIG1hbnVhbCBzZXR1cC4gSXQgaW5zdGFsbHMgQ29kZVNjcmlwdFxuICogVG9vbGtpdCBmcm9tIHRoZSBjb21tdW5pdHkgc3RvcmUgKGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCksIHdyaXRlcyBpdHMgc2V0dGluZ3MsIHRoZW4gZW5hYmxlc1xuICogaXQg4oCUIGNsb3NpbmcgU2V0dGluZ3MgcmlnaHQgYmVmb3JlIGVhY2ggZW5hYmxlLCBzbyBubyByZWFkaW5nIHZpZXcgcXVldWVzIGEgcmUtcmVuZGVyIG9uIHRoZSBzZXR0aW5nc1xuICogcG9wb3V0J3MgYW5pbWF0aW9uIGZyYW1lLCBhbmQgd3JpdGluZyB0aGUgc2V0dGluZ3MgQkVGT1JFIGVuYWJsaW5nIHNvIGEgZnJlc2ggZW5hYmxlIGxvYWRzIGl0IGFscmVhZHkgY29uZmlndXJlZCwgd2l0aCBub1xuICogcmVsb2FkLiBJZiBgQ29kZVNjcmlwdCBUb29sa2l0YCBpcyBhbHJlYWR5IGVuYWJsZWQgYnV0IHRoZSBzZXR0aW5ncyBqdXN0IGNoYW5nZWQsIGl0IGlzIHJlbG9hZGVkXG4gKiAoZGlzYWJsZWQgdGhlbiBlbmFibGVkKSBzbyBpdCByZS1yZWFkcyBgZGF0YS5qc29uYDsgd2hlbiB0aGUgc2V0dGluZ3Mgd2VyZSBhbHJlYWR5IGluIHBsYWNlLCBub3RoaW5nIGlzXG4gKiByZWxvYWRlZCAoc28gYSByb3V0aW5lIHZhdWx0IHJlLW9wZW4gZG9lcyBub3QgcmUtcnVuIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3Mgc3RhcnR1cCkuIEJlZm9yZSB0aGF0IGVuYWJsZSBpdFxuICogdHJ1c3RzIHRoZSB2YXVsdCdzIHN0YXJ0dXAgc2NyaXB0IGFuZCBpbnZvY2FibGUgc2NyaXB0cyBmb2xkZXIgb24gdGhpcyBkZXZpY2UsIHNvIGBDb2RlU2NyaXB0IFRvb2xraXRgIGFza3MgYWJvdXRcbiAqIG5laXRoZXIuIGBDb2RlU2NyaXB0IFRvb2xraXRgIHRoZW4gcnVucyB0aGUgdmF1bHQncyBgc3RhcnR1cC50c2AuIGBGb2xkZXIgTm90ZXNgIGlzIGluc3RhbGxlZCBuZXh0LCBjb25maWd1cmVkIHRvIHRyZWF0IGBSRUFETUUubWRgIGFzXG4gKiBhIGZvbGRlcidzIG93biBub3RlLCBzbyBhIHZhdWx0IHdob3NlIG5vdGVzIGFyZSBncm91cGVkIGludG8gZm9sZGVycyBkZXNjcmliZXMgZWFjaCBncm91cCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIuIEZpbmFsbHkgaXQgY2xvc2VzIFNldHRpbmdzIGFnYWluIChzbyB0aGUgbm90aWNlIGNhbm5vdCBiZSByYWlzZWQgaW5zaWRlIHRoZSBzZXR0aW5ncyBwb3BvdXQpIGFuZFxuICogcmFpc2VzIHRoZSBzYW5kYm94IG5vdGljZSBkZXNjcmliaW5nIHRoZSBvcGVuZWQgdmF1bHQgYXMgYSB0aHJvd2F3YXkgY29weS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCb290c3RyYXBEZW1vVmF1bHRQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGBDb2RlU2NyaXB0IFRvb2xraXRgIGlzIGluc3RhbGxlZCwgY29uZmlndXJlZCwgYW5kIGVuYWJsZWRcbiAqIGFuZCB0aGUgc2FuZGJveCBub3RpY2UgaGFzIGJlZW4gc2hvd24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBEZW1vVmF1bHQocGFyYW1zOiBCb290c3RyYXBEZW1vVmF1bHRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgLy8gUmVzb2x2ZWQgZmlyc3QsIHNvIGEgdmF1bHQgdGhhdCBpcyBub3QgYSBkZW1vIHZhdWx0IGlzIHJlZnVzZWQgYmVmb3JlIGFueXRoaW5nIGlzIGluc3RhbGxlZCBpbnRvIGl0LlxuICBjb25zdCBkZW1vZWRQbHVnaW5JZCA9IGF3YWl0IGdldERlbW9lZFBsdWdpbklkKGFwcCk7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICBhcHAsXG4gICAgcGx1Z2luSWQ6IENPREVfU0NSSVBUX1RPT0xLSVRfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBDT0RFX1NDUklQVF9UT09MS0lUX1NFVFRJTkdTXG4gIH0pO1xuICBhd2FpdCBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcCk7XG4gIC8vIEJlZm9yZSB0aGUgZW5hYmxlOiBgQ29kZVNjcmlwdCBUb29sa2l0YCBhc2tzIGFib3V0IGFuIHVudHJ1c3RlZCBzdGFydHVwIHNjcmlwdCBhcyBzb29uIGFzIGl0IGxvYWRzIG9uIGEgcmVhZHkgbGF5b3V0LlxuICB0cnVzdENvZGVTY3JpcHRUb29sa2l0U2NyaXB0cyhhcHApO1xuICAvLyBSZWxvYWRlZCB3aGVuIGFscmVhZHkgZW5hYmxlZCB3aXRoIHN0YWxlIHNldHRpbmdzLCBzbyBgQ29kZVNjcmlwdCBUb29sa2l0YCByZS1yZWFkcyB0aGUgZnJlc2hseSB3cml0dGVuIGRhdGEuanNvbi5cbiAgYXdhaXQgZW5hYmxlT3JSZWxvYWRQbHVnaW4oYXBwLCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCwgcmVzdWx0ID09PSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQuU3VjY2Vzcyk7XG5cbiAgLy8gQWZ0ZXIgYENvZGVTY3JpcHQgVG9vbGtpdGAsIHNvIHRoZSB2YXVsdCdzIHN0YXJ0dXAgc2NyaXB0IGhhcyBhbHJlYWR5IG9wZW5lZCB0aGUgc3RhcnQgbm90ZSBieSB0aGUgdGltZVxuICAvLyB0aGUgZmlsZSBleHBsb3JlciBnYWlucyBpdHMgZm9sZGVyLW5vdGUgYmVoYXZpb3IuXG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkOiBGT0xERVJfTk9URVNfUExVR0lOX0lEIH0pO1xuICBjb25zdCBmb2xkZXJOb3Rlc1Jlc3VsdCA9IGF3YWl0IGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbih7XG4gICAgYXBwLFxuICAgIHBsdWdpbklkOiBGT0xERVJfTk9URVNfUExVR0lOX0lELFxuICAgIHNldHRpbmdzOiBGT0xERVJfTk9URVNfU0VUVElOR1NcbiAgfSk7XG4gIGF3YWl0IGVuYWJsZU9yUmVsb2FkUGx1Z2luKGFwcCwgRk9MREVSX05PVEVTX1BMVUdJTl9JRCwgZm9sZGVyTm90ZXNSZXN1bHQgPT09IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzKTtcblxuICBzaG93U2FuZGJveE5vdGljZShhcHAsIGRlbW9lZFBsdWdpbklkKTtcbn1cblxuLy8gQWRkcyBhIHBhdGggdG8gb25lIG9mIGBDb2RlU2NyaXB0IFRvb2xraXRgJ3MgdHJ1c3RlZC1wYXRoIGxpc3RzLCBrZWVwaW5nIGV2ZXJ5IHBhdGggYWxyZWFkeSB0cnVzdGVkIHRoZXJlLlxuZnVuY3Rpb24gYWRkQ29kZVNjcmlwdFRvb2xraXRUcnVzdGVkUGF0aChhcHA6IEFwcCwga2V5OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBzdG9yZWQ6IHVua25vd24gPSBhcHAubG9hZExvY2FsU3RvcmFnZShrZXkpO1xuICBsZXQgcGF0aHM6IHN0cmluZ1tdID0gW107XG4gIGlmIChBcnJheS5pc0FycmF5KHN0b3JlZCkpIHtcbiAgICBwYXRocyA9IHN0b3JlZC5maWx0ZXIoKHN0b3JlZFBhdGgpOiBzdG9yZWRQYXRoIGlzIHN0cmluZyA9PiB0eXBlb2Ygc3RvcmVkUGF0aCA9PT0gJ3N0cmluZycgJiYgc3RvcmVkUGF0aCAhPT0gRU1QVFkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzdG9yZWQgPT09ICdzdHJpbmcnICYmIHN0b3JlZCAhPT0gRU1QVFkpIHtcbiAgICBwYXRocyA9IFtzdG9yZWRdO1xuICB9XG5cbiAgaWYgKHBhdGhzLmluY2x1ZGVzKHBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXBwLnNhdmVMb2NhbFN0b3JhZ2Uoa2V5LCBbLi4ubmV3IFNldChbLi4ucGF0aHMsIHBhdGhdKV0uc29ydCgpKTtcbn1cblxuLy8gQnVpbGRzIHRoZSBzYW5kYm94IG5vdGljZSBjb250ZW50OiB3aGF0IHRoaXMgdmF1bHQgaXMsIHdoZXJlIGl0IGxpdmVzLCBob3cgbG9uZyBpdCBsaXZlcywgYW5kIHdoeVxuLy8gcmUtcnVubmluZyB0aGUgY29tbWFuZCBwcm9kdWNlcyBhIHZhdWx0IHdpdGhvdXQgdGhlIG5vdGVzIGp1c3Qgd3JpdHRlbiBoZXJlLlxuLy9cbi8vIEV2ZXJ5IGNsYWltIGhhcyB0byBzdGF5IHRydWUgb2YgdGhlIG9wZW5lciAoYGRlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHNgKTogaXQgZXh0cmFjdHMgYSBGUkVTSCBjb3B5XG4vLyBpbnRvIGl0cyBvd24gZm9sZGVyIG9uIGV2ZXJ5IG9wZW4sIGFuZCBkZWxldGVzIGV4dHJhY3RlZCBmb2xkZXJzIG9sZGVyIHRoYW4gYSBkYXkgb24gZWFjaCBsYXRlciBvcGVuLlxuLy8gU28gdGhlIHZhdWx0IGlzIGEgdGVtcG9yYXJ5IHNhbmRib3gg4oCUIGl0IG11c3QgbmV2ZXIgYmUgZGVzY3JpYmVkIGFzIGEgcGxhY2Ugd29yayBjYW4gYmUgbGVmdC5cbmZ1bmN0aW9uIGJ1aWxkU2FuZGJveE5vdGljZUZyYWdtZW50KHBsdWdpbk5hbWU6IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICByZXR1cm4gY3JlYXRlRnJhZ21lbnQoKGZyYWdtZW50KSA9PiB7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnVGhpcyBpcyBhIGRlbW8gdmF1bHQgZm9yICcpO1xuICAgIGFwcGVuZENvZGVCbG9jayhmcmFnbWVudCwgcGx1Z2luTmFtZSk7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnLicpO1xuXG4gICAgZnJhZ21lbnQuY3JlYXRlRWwoJ2JyJyk7XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnSXQgaXMgYSB0ZW1wb3Jhcnkgc2FuZGJveCwgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IGFib3V0IGEgZGF5IGFmdGVyIHlvdSBsYXN0IHVzZSBpdC4nKTtcblxuICAgIGZyYWdtZW50LmNyZWF0ZUVsKCdicicpO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJ0V4ZWN1dGluZyAnKTtcbiAgICBmcmFnbWVudC5jcmVhdGVFbCgnYicsIHsgdGV4dDogYCR7cGx1Z2luTmFtZX06ICR7T1BFTl9ERU1PX1ZBVUxUX0NPTU1BTkRfTkFNRX1gIH0pO1xuICAgIGZyYWdtZW50LmFwcGVuZFRleHQoJyBjb21tYW5kIGFnYWluIGNyZWF0ZXMgYSBuZXcgY29weSB3aXRoIHRoZSBsYXRlc3QgcGx1Z2luIHZlcnNpb24sIHNvIHlvdXIgbm90ZXMgd2lsbCBub3QgYXBwZWFyIGluIGl0LicpO1xuICB9KTtcbn1cblxuLy8gQ2xvc2VzIFNldHRpbmdzLCB0aGVuIGVuYWJsZXMgdGhlIHBsdWdpbiwgb3IgcmVsb2FkcyBpdCAoZGlzYWJsZXMgdGhlbiBlbmFibGVzKSB3aGVuIGl0IGlzIGFscmVhZHkgZW5hYmxlZFxuLy8gYW5kIGBzaG91bGRSZWxvYWRJZkVuYWJsZWRgIHNheXMgaXRzIHNldHRpbmdzIGp1c3QgY2hhbmdlZC5cbi8vXG4vLyBUaGUgY2xvc2UgaXMgbG9hZC1iZWFyaW5nLCBub3QgY29zbWV0aWMsIGFuZCBpdCBoYXMgdG8gY29tZSByaWdodCBiZWZvcmUgRUFDSCBlbmFibGUgcmF0aGVyIHRoYW4gb25jZSBhdFxuLy8gdGhlIHN0YXJ0LiBBIGZyZXNobHkgb3BlbmVkIGRlbW8gdmF1bHQgYXNrcyB0aGUgdXNlciB0byB0cnVzdCBpdHMgYXV0aG9yLCBhbmQgdGhlIHRydXN0IGJ1dHRvbiBydW5zXG4vLyBgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpYCBhbmQgb25seSB0aGVuIGBhcHAuc2V0dGluZy5vcGVuKClgIChyZWFkIGZyb20gT2JzaWRpYW4gMS4xNC40J3Ncbi8vIGBhcHAuanNgKS4gVGhlIGhlbHBlciBpcyBvbmUgb2YgdGhlIHBsdWdpbnMgYHNldEVuYWJsZWAgbG9hZHMsIGFuZCBgb25MYXlvdXRSZWFkeWAgY2FsbHMgYmFjayBhdCBvbmNlIG9uIGFcbi8vIHJlYWR5IGxheW91dCwgc28gdGhlIGJvb3RzdHJhcCBzdGFydHMgSU5TSURFIGBzZXRFbmFibGVgLCBiZWZvcmUgU2V0dGluZ3MgZXhpc3RzLiBTZXR0aW5ncyB0aGVuIG9wZW5zIGFzIGFcbi8vIFBPUE9VVCBXSU5ET1cgdGhhdCBiZWNvbWVzIGBhY3RpdmVXaW5kb3dgLCB3aGlsZSB0aGUgYm9vdHN0cmFwIGlzIHN0aWxsIGRvd25sb2FkaW5nIHBsdWdpbnMuIEVuYWJsaW5nIGFcbi8vIHBsdWdpbiB0aGF0IHJlZ2lzdGVycyBhIG1hcmtkb3duIHBvc3QtcHJvY2Vzc29yIChgRm9sZGVyIE5vdGVzYCkgbWFrZXMgZXZlcnkgcmVhZGluZyB2aWV3IGByZXJlbmRlcih0cnVlKWA6XG4vLyBpdCBlbXB0aWVzIHRoZSBib2R5IHNlY3Rpb25zIGFuZCBxdWV1ZXMgdGhlIHJlbmRlciB0aHJvdWdoIGBhY3RpdmVXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4gSWYgdGhhdCBpc1xuLy8gdGhlIFNldHRpbmdzIHBvcG91dCwgY2xvc2luZyBpdCBsYXRlciBkZXN0cm95cyB0aGUgd2luZG93IGJlZm9yZSB0aGUgZnJhbWUgZmlyZXMsIHRoZSByZW5kZXJlcidzIHF1ZXVlZFxuLy8gaGFuZGxlIG5ldmVyIGNsZWFycywgYW5kIGV2ZXJ5IGxhdGVyIHJlbmRlciByZXF1ZXN0IGlzIGlnbm9yZWQsIHNvIHRoZSBzdGFydCBub3RlIHN0YXlzIGJsYW5rIHVudGlsIGl0c1xuLy8gdGFiIGlzIGNsb3NlZC4gQ2xvc2luZyBTZXR0aW5ncyByaWdodCBiZWZvcmUgdGhlIGVuYWJsZSBib29rcyBldmVyeSBzdWNoIGZyYW1lIG9uIHRoZSBtYWluIHdpbmRvdy4gQ2xvc2luZ1xuLy8gYW4gYWxyZWFkeS1jbG9zZWQgU2V0dGluZ3MgaXMgYSBuby1vcC5cbmFzeW5jIGZ1bmN0aW9uIGVuYWJsZU9yUmVsb2FkUGx1Z2luKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nLCBzaG91bGRSZWxvYWRJZkVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXBwLnNldHRpbmcuY2xvc2UoKTtcbiAgaWYgKCFhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpKSB7XG4gICAgYXdhaXQgZW5hYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZCB9KTtcbiAgfSBlbHNlIGlmIChzaG91bGRSZWxvYWRJZkVuYWJsZWQpIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHsgYXBwLCBwbHVnaW5JZCB9KTtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4oeyBhcHAsIHBsdWdpbklkIH0pO1xuICB9XG59XG5cbi8vIENyZWF0ZXMgYENvZGVTY3JpcHQgVG9vbGtpdGAncyBpbnZvY2FibGUtc2NyaXB0cyBmb2xkZXIgKHVuZGVyIGBtb2R1bGVzUm9vdGApIGlmIGl0IGlzIG1pc3NpbmcuXG4vLyBFdmVyeSBkZW1vIHZhdWx0IHRoZW4gaGFzIHRoZSBzYW1lIGBDb2RlU2NyaXB0IFRvb2xraXRgIGxheW91dCBldmVuIHdoZW4gaXQgc2hpcHMgbm8gaW52b2NhYmxlIHNjcmlwdHMuXG4vLyBUaGUgY29tbWl0dGVkIHZhdWx0IHRoZXJlZm9yZSBjYXJyaWVzIG5vIG90aGVyd2lzZS1lbXB0eSBwbGFjZWhvbGRlciBmb2xkZXIuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVJbnZvY2FibGVTY3JpcHRzRm9sZGVyKGFwcDogQXBwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGludm9jYWJsZVNjcmlwdHNGb2xkZXJQYXRoID0gam9pbihDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCwgQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HUy5pbnZvY2FibGVTY3JpcHRzRm9sZGVyKTtcbiAgaWYgKCFhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMoaW52b2NhYmxlU2NyaXB0c0ZvbGRlclBhdGgpKSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoaW52b2NhYmxlU2NyaXB0c0ZvbGRlclBhdGgpO1xuICB9XG59XG5cbi8vIFJlYWRzIHRoZSBwbHVnaW4gdGhlIHZhdWx0IGRlbW9uc3RyYXRlcyBvdXQgb2YgdGhpcyBoZWxwZXIncyBvd24gYGRhdGEuanNvbmAsIHdyaXR0ZW4gYnkgdGhlXG4vLyBwYWNrYWdpbmcgc3RlcCAoc2VlIGBEZW1vVmF1bHRIZWxwZXJTZXR0aW5nc2ApLiBBIHZhdWx0IHdpdGhvdXQgYSByZWFkYWJsZSBtYXJrZXIgd2FzIG5vdCBwcm9kdWNlZCBieVxuLy8gdGhhdCBzdGVwIOKAlCBoYW5kLWFzc2VtYmxlZCwgb3IgdW5wYWNrZWQgZnJvbSBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBkZW1vIHZhdWx0IOKAlCBzbyBpdCBpcyByZWZ1c2VkXG4vLyByYXRoZXIgdGhhbiBib290c3RyYXBwZWQgYWdhaW5zdCBhIGd1ZXNzLlxuYXN5bmMgZnVuY3Rpb24gZ2V0RGVtb2VkUGx1Z2luSWQoYXBwOiBBcHApOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzZXR0aW5nc1BhdGggPSBqb2luKGFwcC52YXVsdC5jb25maWdEaXIsIFBMVUdJTlNfRk9MREVSX05BTUUsIERFTU9fVkFVTFRfSEVMUEVSX1BMVUdJTl9JRCwgREFUQV9KU09OX0ZJTEVfTkFNRSk7XG4gIGlmICghYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHNldHRpbmdzUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9ERU1PX1ZBVUxUX0VSUk9SX01FU1NBR0UpO1xuICB9XG5cbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnJlYWQoc2V0dGluZ3NQYXRoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfREVNT19WQVVMVF9FUlJPUl9NRVNTQUdFLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxuXG4gIGNvbnN0IGRlbW9lZFBsdWdpbklkID0gKHBhcnNlZCBhcyBudWxsIHwgUGFydGlhbDxEZW1vVmF1bHRIZWxwZXJTZXR0aW5ncz4pPy5kZW1vZWRQbHVnaW5JZDtcbiAgaWYgKHR5cGVvZiBkZW1vZWRQbHVnaW5JZCAhPT0gJ3N0cmluZycgfHwgZGVtb2VkUGx1Z2luSWQgPT09IEVNUFRZKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfREVNT19WQVVMVF9FUlJPUl9NRVNTQUdFKTtcbiAgfVxuICByZXR1cm4gZGVtb2VkUGx1Z2luSWQ7XG59XG5cbi8vIFRlbGxzIHRoZSB1c2VyIHRoaXMgdmF1bHQgaXMgYSBzYW5kYm94LCB1c2luZyBPYnNpZGlhbidzIG93biBzYW5kYm94LXZhdWx0IHRyZWF0bWVudDogYW4gaW5maW5pdGVcbi8vIGR1cmF0aW9uLCBkaXNtaXNzZWQgYnkgY2xpY2tpbmcgaXQuIFJhaXNlZCBsYXN0LCBzbyBpdCBpcyB0aGUgbmV3ZXN0IG5vdGljZSBvbiBzY3JlZW4gb25jZVxuLy8gYENvZGVTY3JpcHQgVG9vbGtpdGAncyBzdGFydHVwIHNjcmlwdCBoYXMgZG9uZSBpdHMgb3duIHdvcmsuXG4vL1xuLy8gQSBgTm90aWNlYCBpcyBidWlsdCBpbnNpZGUgd2hhdGV2ZXIgd2luZG93IGlzIGFjdGl2ZSBhdCB0aGF0IG1vbWVudCwgYW5kIFNldHRpbmdzIGlzIGEgUE9QT1VUIFdJTkRPV1xuLy8gKHZlcmlmaWVkIG9uIDEuMTMuNikgdGhhdCBiZWNvbWVzIHRoZSBhY3RpdmUgb25lIHdoaWxlIGl0IGlzIG9wZW4g4oCUIHNvIGEgbm90aWNlIHJhaXNlZCB0aGVuIHdvdWxkIGJlXG4vLyBjcmVhdGVkIGluIHRoZSBzZXR0aW5ncyB3aW5kb3cgYW5kIHZhbmlzaCB3aXRoIGl0LiBgYm9vdHN0cmFwRGVtb1ZhdWx0YCBhbHJlYWR5IGNsb3NlZCBTZXR0aW5ncyBiZWZvcmVcbi8vIGVhY2ggZW5hYmxlLCBidXQgYSBwbHVnaW4gZW5hYmxlZCBzaW5jZSBtYXkgaGF2ZSBvcGVuZWQgaXQgYWdhaW4sIHNvIGl0IGlzIGNsb3NlZCBvbmNlIG1vcmUgaGVyZTpcbi8vIE9ic2lkaWFuIGhhbmRzIHRoZSBtYWluIHdpbmRvdyBiYWNrIGFzIHRoZSBwb3BvdXQgZ29lcyBhd2F5IChzeW5jaHJvbm91c2x5LCBiZWZvcmUgdGhlIG5vdGljZSBpcyBidWlsdCksXG4vLyBhbmQgYSB1c2VyIHdobyBoYXMganVzdCBvcGVuZWQgYSBkZW1vIHZhdWx0IHdhbnRzIHRvIHNlZSB0aGUgdmF1bHQgcmF0aGVyIHRoYW4gYSBzZXR0aW5ncyB3aW5kb3cgYW55d2F5LlxuLy8gQ2xvc2luZyBhbiBhbHJlYWR5LWNsb3NlZCBTZXR0aW5ncyBpcyBhIG5vLW9wLCBzbyBubyBvcGVuLXN0YXRlIHByb2JlIGlzIG5lZWRlZC5cbmZ1bmN0aW9uIHNob3dTYW5kYm94Tm90aWNlKGFwcDogQXBwLCBkZW1vZWRQbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHBsdWdpbk5hbWUgPSBhcHAucGx1Z2lucy5tYW5pZmVzdHNbZGVtb2VkUGx1Z2luSWRdPy5uYW1lID8/IGRlbW9lZFBsdWdpbklkO1xuICBjb25zdCBmcmFnbWVudCA9IGJ1aWxkU2FuZGJveE5vdGljZUZyYWdtZW50KHBsdWdpbk5hbWUpO1xuICBhcHAuc2V0dGluZy5jbG9zZSgpO1xuICBuZXcgTm90aWNlKGZyYWdtZW50LCBTQU5EQk9YX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMpO1xufVxuXG4vLyBUcnVzdHMgdGhlIHZhdWx0J3Mgc3RhcnR1cCBzY3JpcHQgYW5kIGludm9jYWJsZSBzY3JpcHRzIGZvbGRlciBpbiBgQ29kZVNjcmlwdCBUb29sa2l0YCBvbiB0aGlzIGRldmljZSwgc28gdGhlIGRlbW9cbi8vIHZhdWx0IG9wZW5zIHdpdGggbm8gXCJUcnVzdCB0aGUgc3RhcnR1cCBzY3JpcHQ/XCIgcHJvbXB0IGFuZCBpdHMgYnV0dG9ucyBydW4gd2l0aCBubyBmaXJzdC1jbGljayBwcm9tcHQuXG4vL1xuLy8gVGhpcyBncmFudHMgbm90aGluZyBuZXcuIFRoZSBoZWxwZXIgaXMgaXRzZWxmIGEgcGx1Z2luIHRoZSB1c2VyIGVuYWJsZWQgYnkgb3BlbmluZyB0aGUgZGVtbyB2YXVsdCwgc28gaXQgY2FuIGFscmVhZHlcbi8vIHJ1biBhbnkgY29kZTsgdGhlIHRydXN0IGdhdGUgZ3VhcmRzIGEgc2NyaXB0IHRoYXQgYXJyaXZlZCBieSBzeW5jLCBub3Qgb25lIHRoZSB2YXVsdCdzIG93biBib290c3RyYXAgY29uZmlndXJlZC5cbi8vXG4vLyBJdCB3cml0ZXMgYENvZGVTY3JpcHQgVG9vbGtpdGAncyBvd24gYGxvY2FsU3RvcmFnZWAgbGlzdHMgcmF0aGVyIHRoYW4gY2FsbGluZyB0aGUgcnVubmluZyBwbHVnaW4nc1xuLy8gYHRydXN0U3RhcnR1cFNjcmlwdCgpYCwgYmVjYXVzZSB0aGVyZSBpcyBubyB3aW5kb3cgZm9yIHRoZSBjYWxsOiBlbmFibGVkIG9uIGEgcmVhZHkgbGF5b3V0LCB0aGUgcGx1Z2luIGFza3MgYWJvdXRcbi8vIGFuIHVudHJ1c3RlZCBzdGFydHVwIHNjcmlwdCBhcyBpdCBsb2Fkcywgc28gdGhlIHByb21wdCB3b3VsZCBhbHJlYWR5IGJlIHVwIGJ5IHRoZSB0aW1lIGBlbmFibGVQbHVnaW5BbmRTYXZlYFxuLy8gcmV0dXJucy4gQSBgQ29kZVNjcmlwdCBUb29sa2l0YCBidWlsZCB3aXRob3V0IHRoZSB0cnVzdCBnYXRlIGlnbm9yZXMgYm90aCBrZXlzLlxuZnVuY3Rpb24gdHJ1c3RDb2RlU2NyaXB0VG9vbGtpdFNjcmlwdHMoYXBwOiBBcHApOiB2b2lkIHtcbiAgYWRkQ29kZVNjcmlwdFRvb2xraXRUcnVzdGVkUGF0aChcbiAgICBhcHAsXG4gICAgQ09ERV9TQ1JJUFRfVE9PTEtJVF9UUlVTVEVEX1NUQVJUVVBfU0NSSVBUU19LRVksXG4gICAgam9pbihDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCwgQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HUy5zdGFydHVwU2NyaXB0UGF0aClcbiAgKTtcbiAgYWRkQ29kZVNjcmlwdFRvb2xraXRUcnVzdGVkUGF0aChcbiAgICBhcHAsXG4gICAgQ09ERV9TQ1JJUFRfVE9PTEtJVF9UUlVTVEVEX0lOVk9DQUJMRV9TQ1JJUFRTX0ZPTERFUl9LRVksXG4gICAgam9pbihDT0RFX1NDUklQVF9UT09MS0lUX01PRFVMRVNfUk9PVCwgQ09ERV9TQ1JJUFRfVE9PTEtJVF9TRVRUSU5HUy5pbnZvY2FibGVTY3JpcHRzRm9sZGVyKVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRDQSxTQUFTLFlBQVk7QUFDckIsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsY0FBYztBQUl2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsdUJBQXVCO0FBK0RoQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLG1DQUFtQztBQUN6QyxNQUFNLCtCQUEwRDtBQUFBLEVBQzlELHlCQUF5QjtBQUFBLEVBQ3pCLHdCQUF3QjtBQUFBLEVBQ3hCLGFBQWE7QUFBQSxFQUNiLDBCQUEwQjtBQUFBLEVBQzFCLG1CQUFtQjtBQUNyQjtBQU1BLE1BQU0sa0RBQWtEO0FBQ3hELE1BQU0sMkRBQTJEO0FBRWpFLE1BQU0seUJBQXlCO0FBSy9CLE1BQU0sd0JBQTZDO0FBQUEsRUFDakQsZ0JBQWdCO0FBQUEs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
@@ -211,7 +211,7 @@ function cleanupOrphanedExtractedVaults() {
211
211
  }
212
212
  }
213
213
  function extractDemoVaultArchive(archive, targetDirectory) {
214
- const originalFs = window.require('node:original-fs');
214
+ const originalFs = window.require("node:original-fs");
215
215
  extractZipArchive({
216
216
  archive,
217
217
  fileSystem: originalFs,
@@ -3,11 +3,6 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
  (function () {
6
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
7
- symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
8
- symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
9
- }
10
-
11
6
  function ensureBrowserProcess() {
12
7
  const browserProcess = {
13
8
  browser: true,
@@ -32,7 +27,6 @@ function ensureBrowserProcess() {
32
27
  existingProcessRecord["browser"] = true;
33
28
  }
34
29
 
35
- ensureDisposeSymbols();
36
30
  ensureBrowserProcess();
37
31
  })();
38
32
 
@@ -91,7 +85,7 @@ function createIncomingMessageStream(incomingMessage, abortSignal) {
91
85
  return new ReadableStream({
92
86
  cancel() {
93
87
  isSettled = true;
94
- abortListener[Symbol.dispose]();
88
+ abortListener.dispose();
95
89
  incomingMessage.destroy();
96
90
  },
97
91
  pull() {
@@ -116,11 +110,11 @@ function createIncomingMessageStream(incomingMessage, abortSignal) {
116
110
  }
117
111
  });
118
112
  incomingMessage.on("end", () => {
119
- abortListener[Symbol.dispose]();
113
+ abortListener.dispose();
120
114
  settle();
121
115
  });
122
116
  incomingMessage.on("error", (error) => {
123
- abortListener[Symbol.dispose]();
117
+ abortListener.dispose();
124
118
  settle(error);
125
119
  });
126
120
  abortListener = onAbort(abortSignal, () => {
@@ -167,4 +161,4 @@ async function sendRequest(params) {
167
161
  export {
168
162
  openDesktopRequestUrlStream
169
163
  };
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXNrdG9wLXJlcXVlc3QtdXJsLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGRlc2t0b3AgYXJtIG9mIHtAbGluayAuL3JlcXVlc3QtdXJsLnRzIHwgcmVxdWVzdFVybFN0cmVhbX06IHJlcXVlc3RzIGEgVVJMIHRocm91Z2ggYG5vZGU6aHR0cGAgL1xuICogYG5vZGU6aHR0cHNgLCBzbyB0aGUgcmVzcG9uc2UgYm9keSBzdHJlYW1zIGFzIGl0IGFycml2ZXMgYW5kIGFuIGFib3J0IHJlYWxseSBjYW5jZWxzIHRoZSByZXF1ZXN0LlxuICpcbiAqIERlc2t0b3Agb25seTogaXQgcmVhZHMgYG5vZGU6aHR0cGAgYW5kIGBub2RlOmh0dHBzYC4gUmVhY2ggaXQgdGhyb3VnaCBgcmVxdWVzdFVybFN0cmVhbWAsIHdoaWNoIGltcG9ydHMgaXRcbiAqIGR5bmFtaWNhbGx5IG9uIGRlc2t0b3AuXG4gKlxuICogVW5saWtlIENocm9taXVtJ3MgbmV0d29yayBzdGFjaywgTm9kZSBkb2VzIG5vdCByZWFkIHRoZSBzeXN0ZW0gcHJveHkgc2V0dGluZ3Mgb3IgY2VydGlmaWNhdGUgc3RvcmUsIHNvIGEgbWFjaGluZVxuICogdGhhdCByZWFjaGVzIHRoZSBpbnRlcm5ldCBvbmx5IHRocm91Z2ggYSBwcm94eSwgb3IgdGhhdCBpbnRlcmNlcHRzIFRMUyB3aXRoIGl0cyBvd24gcm9vdCBjZXJ0aWZpY2F0ZSwgbmVlZHMgdGhlXG4gKiBidWZmZXJlZCBgcmVxdWVzdFVybEV4YCBpbnN0ZWFkLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBSZWFkYWJsZVN0cmVhbSBpcyB0aGUgT2JzaWRpYW4gcmVuZGVyZXIncyBXZWIgQVBJLCBub3QgYSBOb2RlIGJ1aWx0aW4uICovXG5cbmltcG9ydCB0eXBlIHtcbiAgSW5jb21pbmdIdHRwSGVhZGVycyxcbiAgSW5jb21pbmdNZXNzYWdlXG59IGZyb20gJ25vZGU6aHR0cCc7XG5cbmltcG9ydCB7IG9uQWJvcnQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYWJvcnQtY29udHJvbGxlcic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyByZXF1ZXN0IGFzIHJlcXVlc3RIdHRwIH0gZnJvbSAnbm9kZTpodHRwJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgcmVxdWVzdEh0dHBzIH0gZnJvbSAnbm9kZTpodHRwcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgRW5jb2RlZFJlcXVlc3RVcmxSZXF1ZXN0LFxuICBSZXF1ZXN0VXJsU3RyZWFtUmVzcG9uc2Vcbn0gZnJvbSAnLi9yZXF1ZXN0LXVybC50cyc7XG5cbmNvbnN0IE1BWF9SRURJUkVDVF9DT1VOVCA9IDIwO1xuY29uc3QgSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWV9TVEFUVVMgPSAzMDE7XG5jb25zdCBIVFRQX0ZPVU5EX1NUQVRVUyA9IDMwMjtcbmNvbnN0IEhUVFBfU0VFX09USEVSX1NUQVRVUyA9IDMwMztcbmNvbnN0IEhUVFBfVEVNUE9SQVJZX1JFRElSRUNUX1NUQVRVUyA9IDMwNztcbmNvbnN0IEhUVFBfUEVSTUFORU5UX1JFRElSRUNUX1NUQVRVUyA9IDMwODtcbmNvbnN0IFJFRElSRUNUX1NUQVRVU0VTID0gbmV3IFNldChbXG4gIEhUVFBfRk9VTkRfU1RBVFVTLFxuICBIVFRQX01PVkVEX1BFUk1BTkVOVExZX1NUQVRVUyxcbiAgSFRUUF9QRVJNQU5FTlRfUkVESVJFQ1RfU1RBVFVTLFxuICBIVFRQX1NFRV9PVEhFUl9TVEFUVVMsXG4gIEhUVFBfVEVNUE9SQVJZX1JFRElSRUNUX1NUQVRVU1xuXSk7XG5jb25zdCBCT0RZX0hFQURFUlMgPSBuZXcgU2V0KFsnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJ10pO1xuXG5pbnRlcmZhY2UgU2VuZFJlcXVlc3RQYXJhbXMge1xuICByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHJlYWRvbmx5IGJvZHk6IEFycmF5QnVmZmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBoZWFkZXJzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIGEgVVJMIHRocm91Z2ggYG5vZGU6aHR0cGAgLyBgbm9kZTpodHRwc2AgYW5kIHJldHVybnMgaXRzIGJvZHkgYXMgYSBzdHJlYW0sIGZvbGxvd2luZyByZWRpcmVjdHMuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgZW5jb2RlZCByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIHJlc3BvbnNlLCB3aXRoIGEgc3RyZWFtZWQgYm9keS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5EZXNrdG9wUmVxdWVzdFVybFN0cmVhbShyZXF1ZXN0OiBFbmNvZGVkUmVxdWVzdFVybFJlcXVlc3QpOiBQcm9taXNlPFJlcXVlc3RVcmxTdHJlYW1SZXNwb25zZT4ge1xuICBsZXQgY3VycmVudFJlcXVlc3Q6IFNlbmRSZXF1ZXN0UGFyYW1zID0ge1xuICAgIGFib3J0U2lnbmFsOiByZXF1ZXN0LmFib3J0U2lnbmFsLFxuICAgIGJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMsXG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICB1cmw6IHJlcXVlc3QudXJsXG4gIH07XG5cbiAgZm9yIChsZXQgcmVkaXJlY3RDb3VudCA9IDA7OyByZWRpcmVjdENvdW50KyspIHtcbiAgICBjb25zdCBpbmNvbWluZ01lc3NhZ2UgPSBhd2FpdCBzZW5kUmVxdWVzdChjdXJyZW50UmVxdWVzdCk7XG4gICAgLy8gQSByZXNwb25zZSB0byBhIGNsaWVudCByZXF1ZXN0IGFsd2F5cyBjYXJyaWVzIGl0cyBzdGF0dXMgY29kZS5cbiAgICBjb25zdCBzdGF0dXMgPSBlbnN1cmVOb25OdWxsYWJsZShpbmNvbWluZ01lc3NhZ2Uuc3RhdHVzQ29kZSk7XG4gICAgY29uc3QgbG9jYXRpb24gPSBpbmNvbWluZ01lc3NhZ2UuaGVhZGVycy5sb2NhdGlvbjtcbiAgICBpZiAoIVJFRElSRUNUX1NUQVRVU0VTLmhhcyhzdGF0dXMpIHx8IGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHk6IGNyZWF0ZUluY29taW5nTWVzc2FnZVN0cmVhbShpbmNvbWluZ01lc3NhZ2UsIHJlcXVlc3QuYWJvcnRTaWduYWwpLFxuICAgICAgICBoZWFkZXJzOiBmbGF0dGVuSGVhZGVycyhpbmNvbWluZ01lc3NhZ2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgdXJsOiBjdXJyZW50UmVxdWVzdC51cmxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaW5jb21pbmdNZXNzYWdlLnJlc3VtZSgpO1xuICAgIGlmIChyZWRpcmVjdENvdW50ID49IE1BWF9SRURJUkVDVF9DT1VOVCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVG9vIG1hbnkgcmVkaXJlY3RzIHJlcXVlc3RpbmcgJHtyZXF1ZXN0LnVybH1gKTtcbiAgICB9XG4gICAgY29uc3QgbmV4dFVybCA9IG5ldyBVUkwobG9jYXRpb24sIGN1cnJlbnRSZXF1ZXN0LnVybCk7XG4gICAgaWYgKG5leHRVcmwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgbmV4dFVybC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHByb3RvY29sICR7bmV4dFVybC5wcm90b2NvbH0gaW4gdGhlIHJlZGlyZWN0IHRvICR7bmV4dFVybC5ocmVmfWApO1xuICAgIH1cbiAgICBjdXJyZW50UmVxdWVzdCA9IGdldFJlZGlyZWN0ZWRSZXF1ZXN0KGN1cnJlbnRSZXF1ZXN0LCBzdGF0dXMsIG5leHRVcmwuaHJlZik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5jb21pbmdNZXNzYWdlU3RyZWFtKGluY29taW5nTWVzc2FnZTogSW5jb21pbmdNZXNzYWdlLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB7XG4gIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgLy8gQXNzaWduZWQgaW4gYHN0YXJ0YCwgd2hpY2ggcnVucyBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yLCBzbyBpdCBpcyBpbiBwbGFjZSBiZWZvcmUgYGNhbmNlbGAgY2FuIHJ1bi5cbiAgbGV0IGFib3J0TGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICBhYm9ydExpc3RlbmVyW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgaW5jb21pbmdNZXNzYWdlLmRlc3Ryb3koKTtcbiAgICB9LFxuICAgIHB1bGwoKTogdm9pZCB7XG4gICAgICBpbmNvbWluZ01lc3NhZ2UucmVzdW1lKCk7XG4gICAgfSxcbiAgICBzdGFydChjb250cm9sbGVyKTogdm9pZCB7XG4gICAgICBmdW5jdGlvbiBzZXR0bGUoZXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1NldHRsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5jb21pbmdNZXNzYWdlLm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgLy8gQSBjb3B5LCBzbyB0aGUgY2h1bmsgYmVsb25ncyB0byB0aGUgcmVuZGVyZXIncyByZWFsbSB3aGF0ZXZlciBOb2RlIGRvZXMgd2l0aCBpdHMgYnVmZmVyIGFmdGVyd2FyZHMuXG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShjaHVuaykpO1xuICAgICAgICBpZiAoTnVtYmVyKGNvbnRyb2xsZXIuZGVzaXJlZFNpemUpIDw9IDApIHtcbiAgICAgICAgICBpbmNvbWluZ01lc3NhZ2UucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpbmNvbWluZ01lc3NhZ2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgYWJvcnRMaXN0ZW5lcltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgICAgc2V0dGxlKCk7XG4gICAgICB9KTtcbiAgICAgIGluY29taW5nTWVzc2FnZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgYWJvcnRMaXN0ZW5lcltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgICAgc2V0dGxlKGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgYWJvcnRMaXN0ZW5lciA9IG9uQWJvcnQoYWJvcnRTaWduYWwsICgpID0+IHtcbiAgICAgICAgc2V0dGxlKGFib3J0U2lnbmFsLnJlYXNvbik7XG4gICAgICAgIC8vIFRoZSBgZXJyb3JgIGV2ZW50IHRoaXMgcmFpc2VzIGZpbmRzIHRoZSBzdHJlYW0gc2V0dGxlZCBhbHJlYWR5LlxuICAgICAgICBpbmNvbWluZ01lc3NhZ2UuZGVzdHJveShhYm9ydFNpZ25hbC5yZWFzb24gYXMgRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5IZWFkZXJzKGhlYWRlcnM6IEluY29taW5nSHR0cEhlYWRlcnMpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgZmxhdEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gTm9kZSBqb2lucyBldmVyeSByZXBlYXRlZCBoZWFkZXIgYnV0IGBzZXQtY29va2llYCwgd2hpY2ggYXJyaXZlcyBhcyBhbiBhcnJheS5cbiAgICBmbGF0SGVhZGVyc1tuYW1lXSA9IFt2YWx1ZV0uZmxhdCgpLmpvaW4oJywgJyk7XG4gIH1cbiAgcmV0dXJuIGZsYXRIZWFkZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRSZWRpcmVjdGVkUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdFBhcmFtcywgc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogU2VuZFJlcXVlc3RQYXJhbXMge1xuICAvLyBXaGF0IGBmZXRjaGAgZG9lczogYSAzMDMsIGFuZCBhIDMwMSBvciAzMDIgYW5zd2VyaW5nIGEgUE9TVCwgYmVjb21lIGEgR0VUIHdpdGhvdXQgYSBib2R5LlxuICBjb25zdCBzaG91bGRTd2l0Y2hUb0dldCA9IHN0YXR1cyA9PT0gSFRUUF9TRUVfT1RIRVJfU1RBVFVTXG4gICAgfHwgKHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcgJiYgKHN0YXR1cyA9PT0gSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWV9TVEFUVVMgfHwgc3RhdHVzID09PSBIVFRQX0ZPVU5EX1NUQVRVUykpO1xuICBpZiAoIXNob3VsZFN3aXRjaFRvR2V0KSB7XG4gICAgcmV0dXJuIHsgLi4ucmVxdWVzdCwgdXJsIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhYm9ydFNpZ25hbDogcmVxdWVzdC5hYm9ydFNpZ25hbCxcbiAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlcXVlc3QuaGVhZGVycykuZmlsdGVyKChbbmFtZV0pID0+ICFCT0RZX0hFQURFUlMuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSkpKSxcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kUmVxdWVzdChwYXJhbXM6IFNlbmRSZXF1ZXN0UGFyYW1zKTogUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2U+IHtcbiAgY29uc3QgcmVxdWVzdCA9IHBhcmFtcy51cmwuc3RhcnRzV2l0aCgnaHR0cHM6JykgPyByZXF1ZXN0SHR0cHMgOiByZXF1ZXN0SHR0cDtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjbGllbnRSZXF1ZXN0ID0gcmVxdWVzdChwYXJhbXMudXJsLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLnBhcmFtcy5oZWFkZXJzIH0sXG4gICAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgICBzaWduYWw6IHBhcmFtcy5hYm9ydFNpZ25hbFxuICAgIH0sIHJlc29sdmUpO1xuICAgIGNsaWVudFJlcXVlc3Qub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICByZWplY3QocGFyYW1zLmFib3J0U2lnbmFsLmFib3J0ZWQgPyBwYXJhbXMuYWJvcnRTaWduYWwucmVhc29uIGFzIEVycm9yIDogZXJyb3IpO1xuICAgIH0pO1xuICAgIGNsaWVudFJlcXVlc3QuZW5kKHR5cGVvZiBwYXJhbXMuYm9keSA9PT0gJ3N0cmluZycgPyBwYXJhbXMuYm9keSA6IHBhcmFtcy5ib2R5ICYmIG5ldyBVaW50OEFycmF5KHBhcmFtcy5ib2R5KSk7XG4gIH0pO1xufVxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gUmVhZGFibGVTdHJlYW0gaXMgdGhlIE9ic2lkaWFuIHJlbmRlcmVyJ3MgV2ViIEFQSSwgbm90IGEgTm9kZSBidWlsdGluLiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7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
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXNrdG9wLXJlcXVlc3QtdXJsLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGRlc2t0b3AgYXJtIG9mIHtAbGluayAuL3JlcXVlc3QtdXJsLnRzIHwgcmVxdWVzdFVybFN0cmVhbX06IHJlcXVlc3RzIGEgVVJMIHRocm91Z2ggYG5vZGU6aHR0cGAgL1xuICogYG5vZGU6aHR0cHNgLCBzbyB0aGUgcmVzcG9uc2UgYm9keSBzdHJlYW1zIGFzIGl0IGFycml2ZXMgYW5kIGFuIGFib3J0IHJlYWxseSBjYW5jZWxzIHRoZSByZXF1ZXN0LlxuICpcbiAqIERlc2t0b3Agb25seTogaXQgcmVhZHMgYG5vZGU6aHR0cGAgYW5kIGBub2RlOmh0dHBzYC4gUmVhY2ggaXQgdGhyb3VnaCBgcmVxdWVzdFVybFN0cmVhbWAsIHdoaWNoIGltcG9ydHMgaXRcbiAqIGR5bmFtaWNhbGx5IG9uIGRlc2t0b3AuXG4gKlxuICogVW5saWtlIENocm9taXVtJ3MgbmV0d29yayBzdGFjaywgTm9kZSBkb2VzIG5vdCByZWFkIHRoZSBzeXN0ZW0gcHJveHkgc2V0dGluZ3Mgb3IgY2VydGlmaWNhdGUgc3RvcmUsIHNvIGEgbWFjaGluZVxuICogdGhhdCByZWFjaGVzIHRoZSBpbnRlcm5ldCBvbmx5IHRocm91Z2ggYSBwcm94eSwgb3IgdGhhdCBpbnRlcmNlcHRzIFRMUyB3aXRoIGl0cyBvd24gcm9vdCBjZXJ0aWZpY2F0ZSwgbmVlZHMgdGhlXG4gKiBidWZmZXJlZCBgcmVxdWVzdFVybEV4YCBpbnN0ZWFkLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBSZWFkYWJsZVN0cmVhbSBpcyB0aGUgT2JzaWRpYW4gcmVuZGVyZXIncyBXZWIgQVBJLCBub3QgYSBOb2RlIGJ1aWx0aW4uICovXG5cbmltcG9ydCB0eXBlIHsgRGlzcG9zYWJsZUV4IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHR5cGUge1xuICBJbmNvbWluZ0h0dHBIZWFkZXJzLFxuICBJbmNvbWluZ01lc3NhZ2Vcbn0gZnJvbSAnbm9kZTpodHRwJztcblxuaW1wb3J0IHsgb25BYm9ydCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hYm9ydC1jb250cm9sbGVyJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHJlcXVlc3QgYXMgcmVxdWVzdEh0dHAgfSBmcm9tICdub2RlOmh0dHAnO1xuaW1wb3J0IHsgcmVxdWVzdCBhcyByZXF1ZXN0SHR0cHMgfSBmcm9tICdub2RlOmh0dHBzJztcblxuaW1wb3J0IHR5cGUge1xuICBFbmNvZGVkUmVxdWVzdFVybFJlcXVlc3QsXG4gIFJlcXVlc3RVcmxTdHJlYW1SZXNwb25zZVxufSBmcm9tICcuL3JlcXVlc3QtdXJsLnRzJztcblxuY29uc3QgTUFYX1JFRElSRUNUX0NPVU5UID0gMjA7XG5jb25zdCBIVFRQX01PVkVEX1BFUk1BTkVOVExZX1NUQVRVUyA9IDMwMTtcbmNvbnN0IEhUVFBfRk9VTkRfU1RBVFVTID0gMzAyO1xuY29uc3QgSFRUUF9TRUVfT1RIRVJfU1RBVFVTID0gMzAzO1xuY29uc3QgSFRUUF9URU1QT1JBUllfUkVESVJFQ1RfU1RBVFVTID0gMzA3O1xuY29uc3QgSFRUUF9QRVJNQU5FTlRfUkVESVJFQ1RfU1RBVFVTID0gMzA4O1xuY29uc3QgUkVESVJFQ1RfU1RBVFVTRVMgPSBuZXcgU2V0KFtcbiAgSFRUUF9GT1VORF9TVEFUVVMsXG4gIEhUVFBfTU9WRURfUEVSTUFORU5UTFlfU1RBVFVTLFxuICBIVFRQX1BFUk1BTkVOVF9SRURJUkVDVF9TVEFUVVMsXG4gIEhUVFBfU0VFX09USEVSX1NUQVRVUyxcbiAgSFRUUF9URU1QT1JBUllfUkVESVJFQ1RfU1RBVFVTXG5dKTtcbmNvbnN0IEJPRFlfSEVBREVSUyA9IG5ldyBTZXQoWydjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnXSk7XG5cbmludGVyZmFjZSBTZW5kUmVxdWVzdFBhcmFtcyB7XG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcmVhZG9ubHkgYm9keTogQXJyYXlCdWZmZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGhlYWRlcnM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdHMgYSBVUkwgdGhyb3VnaCBgbm9kZTpodHRwYCAvIGBub2RlOmh0dHBzYCBhbmQgcmV0dXJucyBpdHMgYm9keSBhcyBhIHN0cmVhbSwgZm9sbG93aW5nIHJlZGlyZWN0cy5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdCAtIFRoZSBlbmNvZGVkIHJlcXVlc3QuXG4gKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UsIHdpdGggYSBzdHJlYW1lZCBib2R5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkRlc2t0b3BSZXF1ZXN0VXJsU3RyZWFtKHJlcXVlc3Q6IEVuY29kZWRSZXF1ZXN0VXJsUmVxdWVzdCk6IFByb21pc2U8UmVxdWVzdFVybFN0cmVhbVJlc3BvbnNlPiB7XG4gIGxldCBjdXJyZW50UmVxdWVzdDogU2VuZFJlcXVlc3RQYXJhbXMgPSB7XG4gICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycyxcbiAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgIHVybDogcmVxdWVzdC51cmxcbiAgfTtcblxuICBmb3IgKGxldCByZWRpcmVjdENvdW50ID0gMDs7IHJlZGlyZWN0Q291bnQrKykge1xuICAgIGNvbnN0IGluY29taW5nTWVzc2FnZSA9IGF3YWl0IHNlbmRSZXF1ZXN0KGN1cnJlbnRSZXF1ZXN0KTtcbiAgICAvLyBBIHJlc3BvbnNlIHRvIGEgY2xpZW50IHJlcXVlc3QgYWx3YXlzIGNhcnJpZXMgaXRzIHN0YXR1cyBjb2RlLlxuICAgIGNvbnN0IHN0YXR1cyA9IGVuc3VyZU5vbk51bGxhYmxlKGluY29taW5nTWVzc2FnZS5zdGF0dXNDb2RlKTtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGluY29taW5nTWVzc2FnZS5oZWFkZXJzLmxvY2F0aW9uO1xuICAgIGlmICghUkVESVJFQ1RfU1RBVFVTRVMuaGFzKHN0YXR1cykgfHwgbG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keTogY3JlYXRlSW5jb21pbmdNZXNzYWdlU3RyZWFtKGluY29taW5nTWVzc2FnZSwgcmVxdWVzdC5hYm9ydFNpZ25hbCksXG4gICAgICAgIGhlYWRlcnM6IGZsYXR0ZW5IZWFkZXJzKGluY29taW5nTWVzc2FnZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICB1cmw6IGN1cnJlbnRSZXF1ZXN0LnVybFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpbmNvbWluZ01lc3NhZ2UucmVzdW1lKCk7XG4gICAgaWYgKHJlZGlyZWN0Q291bnQgPj0gTUFYX1JFRElSRUNUX0NPVU5UKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUb28gbWFueSByZWRpcmVjdHMgcmVxdWVzdGluZyAke3JlcXVlc3QudXJsfWApO1xuICAgIH1cbiAgICBjb25zdCBuZXh0VXJsID0gbmV3IFVSTChsb2NhdGlvbiwgY3VycmVudFJlcXVlc3QudXJsKTtcbiAgICBpZiAobmV4dFVybC5wcm90b2NvbCAhPT0gJ2h0dHA6JyAmJiBuZXh0VXJsLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJHtuZXh0VXJsLnByb3RvY29sfSBpbiB0aGUgcmVkaXJlY3QgdG8gJHtuZXh0VXJsLmhyZWZ9YCk7XG4gICAgfVxuICAgIGN1cnJlbnRSZXF1ZXN0ID0gZ2V0UmVkaXJlY3RlZFJlcXVlc3QoY3VycmVudFJlcXVlc3QsIHN0YXR1cywgbmV4dFVybC5ocmVmKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbmNvbWluZ01lc3NhZ2VTdHJlYW0oaW5jb21pbmdNZXNzYWdlOiBJbmNvbWluZ01lc3NhZ2UsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuICAvLyBBc3NpZ25lZCBpbiBgc3RhcnRgLCB3aGljaCBydW5zIGluc2lkZSB0aGUgY29uc3RydWN0b3IsIHNvIGl0IGlzIGluIHBsYWNlIGJlZm9yZSBgY2FuY2VsYCBjYW4gcnVuLlxuICBsZXQgYWJvcnRMaXN0ZW5lcjogRGlzcG9zYWJsZUV4O1xuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KHtcbiAgICBjYW5jZWwoKTogdm9pZCB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgYWJvcnRMaXN0ZW5lci5kaXNwb3NlKCk7XG4gICAgICBpbmNvbWluZ01lc3NhZ2UuZGVzdHJveSgpO1xuICAgIH0sXG4gICAgcHVsbCgpOiB2b2lkIHtcbiAgICAgIGluY29taW5nTWVzc2FnZS5yZXN1bWUoKTtcbiAgICB9LFxuICAgIHN0YXJ0KGNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICAgIGZ1bmN0aW9uIHNldHRsZShlcnJvcj86IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzU2V0dGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbmNvbWluZ01lc3NhZ2Uub24oJ2RhdGEnLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAvLyBBIGNvcHksIHNvIHRoZSBjaHVuayBiZWxvbmdzIHRvIHRoZSByZW5kZXJlcidzIHJlYWxtIHdoYXRldmVyIE5vZGUgZG9lcyB3aXRoIGl0cyBidWZmZXIgYWZ0ZXJ3YXJkcy5cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGNodW5rKSk7XG4gICAgICAgIGlmIChOdW1iZXIoY29udHJvbGxlci5kZXNpcmVkU2l6ZSkgPD0gMCkge1xuICAgICAgICAgIGluY29taW5nTWVzc2FnZS5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGluY29taW5nTWVzc2FnZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBhYm9ydExpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgICAgICAgc2V0dGxlKCk7XG4gICAgICB9KTtcbiAgICAgIGluY29taW5nTWVzc2FnZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgYWJvcnRMaXN0ZW5lci5kaXNwb3NlKCk7XG4gICAgICAgIHNldHRsZShlcnJvcik7XG4gICAgICB9KTtcbiAgICAgIGFib3J0TGlzdGVuZXIgPSBvbkFib3J0KGFib3J0U2lnbmFsLCAoKSA9PiB7XG4gICAgICAgIHNldHRsZShhYm9ydFNpZ25hbC5yZWFzb24pO1xuICAgICAgICAvLyBUaGUgYGVycm9yYCBldmVudCB0aGlzIHJhaXNlcyBmaW5kcyB0aGUgc3RyZWFtIHNldHRsZWQgYWxyZWFkeS5cbiAgICAgICAgaW5jb21pbmdNZXNzYWdlLmRlc3Ryb3koYWJvcnRTaWduYWwucmVhc29uIGFzIEVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBmbGF0dGVuSGVhZGVycyhoZWFkZXJzOiBJbmNvbWluZ0h0dHBIZWFkZXJzKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGZsYXRIZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgIC8vIE5vZGUgam9pbnMgZXZlcnkgcmVwZWF0ZWQgaGVhZGVyIGJ1dCBgc2V0LWNvb2tpZWAsIHdoaWNoIGFycml2ZXMgYXMgYW4gYXJyYXkuXG4gICAgZmxhdEhlYWRlcnNbbmFtZV0gPSBbdmFsdWVdLmZsYXQoKS5qb2luKCcsICcpO1xuICB9XG4gIHJldHVybiBmbGF0SGVhZGVycztcbn1cblxuZnVuY3Rpb24gZ2V0UmVkaXJlY3RlZFJlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RQYXJhbXMsIHN0YXR1czogbnVtYmVyLCB1cmw6IHN0cmluZyk6IFNlbmRSZXF1ZXN0UGFyYW1zIHtcbiAgLy8gV2hhdCBgZmV0Y2hgIGRvZXM6IGEgMzAzLCBhbmQgYSAzMDEgb3IgMzAyIGFuc3dlcmluZyBhIFBPU1QsIGJlY29tZSBhIEdFVCB3aXRob3V0IGEgYm9keS5cbiAgY29uc3Qgc2hvdWxkU3dpdGNoVG9HZXQgPSBzdGF0dXMgPT09IEhUVFBfU0VFX09USEVSX1NUQVRVU1xuICAgIHx8IChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnICYmIChzdGF0dXMgPT09IEhUVFBfTU9WRURfUEVSTUFORU5UTFlfU1RBVFVTIHx8IHN0YXR1cyA9PT0gSFRUUF9GT1VORF9TVEFUVVMpKTtcbiAgaWYgKCFzaG91bGRTd2l0Y2hUb0dldCkge1xuICAgIHJldHVybiB7IC4uLnJlcXVlc3QsIHVybCB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgYWJvcnRTaWduYWw6IHJlcXVlc3QuYWJvcnRTaWduYWwsXG4gICAgYm9keTogdW5kZWZpbmVkLFxuICAgIGhlYWRlcnM6IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhyZXF1ZXN0LmhlYWRlcnMpLmZpbHRlcigoW25hbWVdKSA9PiAhQk9EWV9IRUFERVJTLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpKSksXG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICB1cmxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VuZFJlcXVlc3QocGFyYW1zOiBTZW5kUmVxdWVzdFBhcmFtcyk6IFByb21pc2U8SW5jb21pbmdNZXNzYWdlPiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBwYXJhbXMudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpID8gcmVxdWVzdEh0dHBzIDogcmVxdWVzdEh0dHA7XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2xpZW50UmVxdWVzdCA9IHJlcXVlc3QocGFyYW1zLnVybCwge1xuICAgICAgaGVhZGVyczogeyAuLi5wYXJhbXMuaGVhZGVycyB9LFxuICAgICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgICAgc2lnbmFsOiBwYXJhbXMuYWJvcnRTaWduYWxcbiAgICB9LCByZXNvbHZlKTtcbiAgICBjbGllbnRSZXF1ZXN0Lm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgcmVqZWN0KHBhcmFtcy5hYm9ydFNpZ25hbC5hYm9ydGVkID8gcGFyYW1zLmFib3J0U2lnbmFsLnJlYXNvbiBhcyBFcnJvciA6IGVycm9yKTtcbiAgICB9KTtcbiAgICBjbGllbnRSZXF1ZXN0LmVuZCh0eXBlb2YgcGFyYW1zLmJvZHkgPT09ICdzdHJpbmcnID8gcGFyYW1zLmJvZHkgOiBwYXJhbXMuYm9keSAmJiBuZXcgVWludDhBcnJheShwYXJhbXMuYm9keSkpO1xuICB9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFJlYWRhYmxlU3RyZWFtIGlzIHRoZSBPYnNpZGlhbiByZW5kZXJlcidzIFdlYiBB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
@@ -0,0 +1,39 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Ties a {@link Disposable} or an {@link AsyncDisposable} to the lifetime of any Obsidian {@link Component}, a
6
+ * {@link Plugin} included.
7
+ *
8
+ * `ComponentEx.registerDisposable` and `ComponentEx.registerAsyncDisposable` delegate here, so the free functions and
9
+ * the methods cannot diverge. They exist as free functions because no plugin base class extends `ComponentEx`.
10
+ */
11
+ import type { Component } from 'obsidian';
12
+ /**
13
+ * Registers an {@link AsyncDisposable} so its disposal starts when the component unloads, and returns it unchanged.
14
+ *
15
+ * Obsidian's unload is synchronous, so nothing awaits the disposal. When the component is a {@link Plugin}, the
16
+ * disposal is tracked under the plugin id, and the plugin's next instance (a `PluginBase` one) waits for it before it
17
+ * loads, as `PluginBase.registerAsyncCleanup` does. On any other component the disposal runs detached, and a failure
18
+ * is reported, never rethrown.
19
+ *
20
+ * @typeParam TAsyncDisposable - The type of the async disposable.
21
+ * @param component - The component whose unload starts the disposal.
22
+ * @param asyncDisposable - The async disposable to register.
23
+ * @returns The same async disposable, for chaining.
24
+ */
25
+ export declare function registerAsyncDisposable<TAsyncDisposable extends AsyncDisposable>(component: Component, asyncDisposable: TAsyncDisposable): TAsyncDisposable;
26
+ /**
27
+ * Registers a {@link Disposable} so it is disposed when the component unloads, and returns it unchanged.
28
+ *
29
+ * The recurring "tie a disposable to the component's lifecycle, then keep using it" idiom, for any component:
30
+ * `registerDisposable(plugin, await registerVirtualFile(...))`. The disposable is disposed on
31
+ * {@link Component.unload}, or earlier if the caller disposes it directly, since disposal is expected to be
32
+ * idempotent. A component that is never loaded never unloads, so its registered disposables are never disposed.
33
+ *
34
+ * @typeParam TDisposable - The type of the disposable.
35
+ * @param component - The component whose unload disposes the disposable.
36
+ * @param disposable - The disposable to register.
37
+ * @returns The same disposable, for chaining.
38
+ */
39
+ export declare function registerDisposable<TDisposable extends Disposable>(component: Component, disposable: TDisposable): TDisposable;
@@ -0,0 +1,64 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+
33
+ import { invokeAsyncSafely } from "@mnaoumov/typescript-lib/async";
34
+ import {
35
+ dispose,
36
+ disposeAsync
37
+ } from "@mnaoumov/typescript-lib/disposable";
38
+ import { Plugin } from "obsidian";
39
+ import { registerPluginAsyncCleanup } from "./plugin/plugin-async-cleanup.mjs";
40
+ function registerAsyncDisposable(component, asyncDisposable) {
41
+ if (component instanceof Plugin) {
42
+ registerPluginAsyncCleanup({
43
+ cleanup: () => disposeAsync(asyncDisposable),
44
+ component,
45
+ pluginId: component.manifest.id
46
+ });
47
+ } else {
48
+ component.register(() => {
49
+ invokeAsyncSafely(() => disposeAsync(asyncDisposable));
50
+ });
51
+ }
52
+ return asyncDisposable;
53
+ }
54
+ function registerDisposable(component, disposable) {
55
+ component.register(() => {
56
+ dispose(disposable);
57
+ });
58
+ return disposable;
59
+ }
60
+ export {
61
+ registerAsyncDisposable,
62
+ registerDisposable
63
+ };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXNwb3NhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaWVzIGEge0BsaW5rIERpc3Bvc2FibGV9IG9yIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHRvIHRoZSBsaWZldGltZSBvZiBhbnkgT2JzaWRpYW4ge0BsaW5rIENvbXBvbmVudH0sIGFcbiAqIHtAbGluayBQbHVnaW59IGluY2x1ZGVkLlxuICpcbiAqIGBDb21wb25lbnRFeC5yZWdpc3RlckRpc3Bvc2FibGVgIGFuZCBgQ29tcG9uZW50RXgucmVnaXN0ZXJBc3luY0Rpc3Bvc2FibGVgIGRlbGVnYXRlIGhlcmUsIHNvIHRoZSBmcmVlIGZ1bmN0aW9ucyBhbmRcbiAqIHRoZSBtZXRob2RzIGNhbm5vdCBkaXZlcmdlLiBUaGV5IGV4aXN0IGFzIGZyZWUgZnVuY3Rpb25zIGJlY2F1c2Ugbm8gcGx1Z2luIGJhc2UgY2xhc3MgZXh0ZW5kcyBgQ29tcG9uZW50RXhgLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBkaXNwb3NlLFxuICBkaXNwb3NlQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZWdpc3RlclBsdWdpbkFzeW5jQ2xlYW51cCB9IGZyb20gJy4vcGx1Z2luL3BsdWdpbi1hc3luYy1jbGVhbnVwLnRzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZX0gc28gaXRzIGRpc3Bvc2FsIHN0YXJ0cyB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2FkcywgYW5kIHJldHVybnMgaXQgdW5jaGFuZ2VkLlxuICpcbiAqIE9ic2lkaWFuJ3MgdW5sb2FkIGlzIHN5bmNocm9ub3VzLCBzbyBub3RoaW5nIGF3YWl0cyB0aGUgZGlzcG9zYWwuIFdoZW4gdGhlIGNvbXBvbmVudCBpcyBhIHtAbGluayBQbHVnaW59LCB0aGVcbiAqIGRpc3Bvc2FsIGlzIHRyYWNrZWQgdW5kZXIgdGhlIHBsdWdpbiBpZCwgYW5kIHRoZSBwbHVnaW4ncyBuZXh0IGluc3RhbmNlIChhIGBQbHVnaW5CYXNlYCBvbmUpIHdhaXRzIGZvciBpdCBiZWZvcmUgaXRcbiAqIGxvYWRzLCBhcyBgUGx1Z2luQmFzZS5yZWdpc3RlckFzeW5jQ2xlYW51cGAgZG9lcy4gT24gYW55IG90aGVyIGNvbXBvbmVudCB0aGUgZGlzcG9zYWwgcnVucyBkZXRhY2hlZCwgYW5kIGEgZmFpbHVyZVxuICogaXMgcmVwb3J0ZWQsIG5ldmVyIHJldGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFzeW5jRGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgd2hvc2UgdW5sb2FkIHN0YXJ0cyB0aGUgZGlzcG9zYWwuXG4gKiBAcGFyYW0gYXN5bmNEaXNwb3NhYmxlIC0gVGhlIGFzeW5jIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc2FtZSBhc3luYyBkaXNwb3NhYmxlLCBmb3IgY2hhaW5pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFzeW5jRGlzcG9zYWJsZTxUQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlPihcbiAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gIGFzeW5jRGlzcG9zYWJsZTogVEFzeW5jRGlzcG9zYWJsZVxuKTogVEFzeW5jRGlzcG9zYWJsZSB7XG4gIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBQbHVnaW4pIHtcbiAgICByZWdpc3RlclBsdWdpbkFzeW5jQ2xlYW51cCh7XG4gICAgICBjbGVhbnVwOiAoKSA9PiBkaXNwb3NlQXN5bmMoYXN5bmNEaXNwb3NhYmxlKSxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIHBsdWdpbklkOiBjb21wb25lbnQubWFuaWZlc3QuaWRcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnQucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gZGlzcG9zZUFzeW5jKGFzeW5jRGlzcG9zYWJsZSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBhc3luY0Rpc3Bvc2FibGU7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEge0BsaW5rIERpc3Bvc2FibGV9IHNvIGl0IGlzIGRpc3Bvc2VkIHdoZW4gdGhlIGNvbXBvbmVudCB1bmxvYWRzLCBhbmQgcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gKlxuICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb20sIGZvciBhbnkgY29tcG9uZW50OlxuICogYHJlZ2lzdGVyRGlzcG9zYWJsZShwbHVnaW4sIGF3YWl0IHJlZ2lzdGVyVmlydHVhbEZpbGUoLi4uKSlgLiBUaGUgZGlzcG9zYWJsZSBpcyBkaXNwb3NlZCBvblxuICoge0BsaW5rIENvbXBvbmVudC51bmxvYWR9LCBvciBlYXJsaWVyIGlmIHRoZSBjYWxsZXIgZGlzcG9zZXMgaXQgZGlyZWN0bHksIHNpbmNlIGRpc3Bvc2FsIGlzIGV4cGVjdGVkIHRvIGJlXG4gKiBpZGVtcG90ZW50LiBBIGNvbXBvbmVudCB0aGF0IGlzIG5ldmVyIGxvYWRlZCBuZXZlciB1bmxvYWRzLCBzbyBpdHMgcmVnaXN0ZXJlZCBkaXNwb3NhYmxlcyBhcmUgbmV2ZXIgZGlzcG9zZWQuXG4gKlxuICogQHR5cGVQYXJhbSBURGlzcG9zYWJsZSAtIFRoZSB0eXBlIG9mIHRoZSBkaXNwb3NhYmxlLlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgd2hvc2UgdW5sb2FkIGRpc3Bvc2VzIHRoZSBkaXNwb3NhYmxlLlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSBUaGUgZGlzcG9zYWJsZSB0byByZWdpc3Rlci5cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGlzcG9zYWJsZTxURGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGU+KGNvbXBvbmVudDogQ29tcG9uZW50LCBkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgY29tcG9uZW50LnJlZ2lzdGVyKCgpID0+IHtcbiAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICB9KTtcbiAgcmV0dXJuIGRpc3Bvc2FibGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUEsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFFdkIsU0FBUyxrQ0FBa0M7QUFlcEMsU0FBUyx3QkFDZCxXQUNBLGlCQUNrQjtBQUNsQixNQUFJLHFCQUFxQixRQUFRO0FBQy9CLCtCQUEyQjtBQUFBLE1BQ3pCLFNBQVMsTUFBTSxhQUFhLGVBQWU7QUFBQSxNQUMzQztBQUFBLE1BQ0EsVUFBVSxVQUFVLFNBQVM7QUFBQSxJQUMvQixDQUFDO0FBQUEsRUFDSCxPQUFPO0FBQ0wsY0FBVSxTQUFTLE1BQU07QUFDdkIsd0JBQWtCLE1BQU0sYUFBYSxlQUFlLENBQUM7QUFBQSxJQUN2RCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU87QUFDVDtBQWVPLFNBQVMsbUJBQW1ELFdBQXNCLFlBQXNDO0FBQzdILFlBQVUsU0FBUyxNQUFNO0FBQ3ZCLFlBQVEsVUFBVTtBQUFBLEVBQ3BCLENBQUM7QUFDRCxTQUFPO0FBQ1Q7IiwibmFtZXMiOltdfQ==