@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
@@ -0,0 +1,368 @@
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
+ (function patchObsidianRequire() {
33
+ const originalRequire = require;
34
+ if (!originalRequire || originalRequire.__isPatched) {
35
+ return;
36
+ }
37
+ require = Object.assign(
38
+ (id) => requirePatched(id),
39
+ originalRequire,
40
+ {
41
+ __isPatched: true
42
+ }
43
+ );
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
+ }
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
+ "@codemirror/autocomplete",
49
+ "@codemirror/collab",
50
+ "@codemirror/commands",
51
+ "@codemirror/language",
52
+ "@codemirror/lint",
53
+ "@codemirror/search",
54
+ "@codemirror/state",
55
+ "@codemirror/text",
56
+ "@codemirror/view",
57
+ "@lezer/common",
58
+ "@lezer/highlight",
59
+ "@lezer/lr",
60
+ "obsidian"
61
+ ]);
62
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
63
+ "@codemirror/closebrackets",
64
+ "@codemirror/comment",
65
+ "@codemirror/fold",
66
+ "@codemirror/gutter",
67
+ "@codemirror/highlight",
68
+ "@codemirror/history",
69
+ "@codemirror/matchbrackets",
70
+ "@codemirror/panel",
71
+ "@codemirror/rangeset",
72
+ "@codemirror/rectangular-selection",
73
+ "@codemirror/stream-parser",
74
+ "@codemirror/tooltip"
75
+ ]);
76
+ function requirePatched(id) {
77
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
+ return originalRequire?.(id);
79
+ }
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
82
+ if (id === "process" || id === "node:process") {
83
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
84
+ return process;
85
+ }
86
+ } else {
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
+ }
91
+ }
92
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
93
+ return {};
94
+ }
95
+ })();
96
+
97
+ "use strict";
98
+ var __defProp = Object.defineProperty;
99
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
100
+ var __getOwnPropNames = Object.getOwnPropertyNames;
101
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
102
+ var __export = (target, all) => {
103
+ for (var name in all)
104
+ __defProp(target, name, { get: all[name], enumerable: true });
105
+ };
106
+ var __copyProps = (to, from, except, desc) => {
107
+ if (from && typeof from === "object" || typeof from === "function") {
108
+ for (let key of __getOwnPropNames(from))
109
+ if (!__hasOwnProp.call(to, key) && key !== except)
110
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
111
+ }
112
+ return to;
113
+ };
114
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
115
+ var path_compatibility_exports = {};
116
+ __export(path_compatibility_exports, {
117
+ PATH_COMPATIBILITY_PLATFORMS: () => PATH_COMPATIBILITY_PLATFORMS,
118
+ PATH_COMPATIBILITY_PLATFORM_LABELS: () => PATH_COMPATIBILITY_PLATFORM_LABELS,
119
+ PathCompatibilityPlatform: () => PathCompatibilityPlatform,
120
+ PathCompatibilityViolationType: () => PathCompatibilityViolationType,
121
+ findPathCompatibilityViolations: () => findPathCompatibilityViolations,
122
+ getCurrentPathCompatibilityPlatform: () => getCurrentPathCompatibilityPlatform,
123
+ getForbiddenCharacterReplacementValidationMessage: () => getForbiddenCharacterReplacementValidationMessage,
124
+ isUnicodeNormalized: () => isUnicodeNormalized,
125
+ measure: () => measure,
126
+ repairName: () => repairName
127
+ });
128
+ module.exports = __toCommonJS(path_compatibility_exports);
129
+ var import_obsidian = require("obsidian");
130
+ var import_validation = require("./validation.cjs");
131
+ var PathCompatibilityPlatform = /* @__PURE__ */ ((PathCompatibilityPlatform2) => {
132
+ PathCompatibilityPlatform2["Android"] = "Android";
133
+ PathCompatibilityPlatform2["Ios"] = "Ios";
134
+ PathCompatibilityPlatform2["Linux"] = "Linux";
135
+ PathCompatibilityPlatform2["MacOs"] = "MacOs";
136
+ PathCompatibilityPlatform2["Windows"] = "Windows";
137
+ return PathCompatibilityPlatform2;
138
+ })(PathCompatibilityPlatform || {});
139
+ var PathCompatibilityViolationType = /* @__PURE__ */ ((PathCompatibilityViolationType2) => {
140
+ PathCompatibilityViolationType2["ForbiddenCharacter"] = "ForbiddenCharacter";
141
+ PathCompatibilityViolationType2["NameTooLong"] = "NameTooLong";
142
+ PathCompatibilityViolationType2["ObsidianForbiddenCharacter"] = "ObsidianForbiddenCharacter";
143
+ PathCompatibilityViolationType2["PathTooLong"] = "PathTooLong";
144
+ PathCompatibilityViolationType2["ReservedName"] = "ReservedName";
145
+ PathCompatibilityViolationType2["TrailingCharacter"] = "TrailingCharacter";
146
+ PathCompatibilityViolationType2["UnicodeNotNormalized"] = "UnicodeNotNormalized";
147
+ return PathCompatibilityViolationType2;
148
+ })(PathCompatibilityViolationType || {});
149
+ const PATH_COMPATIBILITY_PLATFORMS = [
150
+ "Windows" /* Windows */,
151
+ "Android" /* Android */,
152
+ "Linux" /* Linux */,
153
+ "MacOs" /* MacOs */,
154
+ "Ios" /* Ios */
155
+ ];
156
+ const PATH_COMPATIBILITY_PLATFORM_LABELS = {
157
+ ["Android" /* Android */]: "Android",
158
+ ["Ios" /* Ios */]: "iOS",
159
+ ["Linux" /* Linux */]: "Linux",
160
+ ["MacOs" /* MacOs */]: "macOS",
161
+ ["Windows" /* Windows */]: "Windows"
162
+ };
163
+ const WINDOWS_MAX_FILE_PATH_LENGTH = 259;
164
+ const WINDOWS_MAX_FOLDER_PATH_LENGTH = 247;
165
+ const WINDOWS_MAX_NAME_LENGTH = 255;
166
+ const UNIX_MAX_NAME_BYTES = 255;
167
+ const LINUX_MAX_PATH_BYTES = 4096;
168
+ const DARWIN_MAX_PATH_BYTES = 1024;
169
+ const CONTROL_CHARS_REG_EXP = /[\u{0}-\u{1F}]/gu;
170
+ const PATH_COMPATIBILITY_PROFILES = {
171
+ ["Android" /* Android */]: {
172
+ hasWindowsNamingRules: false,
173
+ maxFilePathLength: LINUX_MAX_PATH_BYTES,
174
+ maxFolderPathLength: LINUX_MAX_PATH_BYTES,
175
+ maxNameLength: UNIX_MAX_NAME_BYTES,
176
+ platform: "Android" /* Android */,
177
+ shouldMeasureInBytes: true
178
+ },
179
+ ["Ios" /* Ios */]: {
180
+ hasWindowsNamingRules: false,
181
+ maxFilePathLength: DARWIN_MAX_PATH_BYTES,
182
+ maxFolderPathLength: DARWIN_MAX_PATH_BYTES,
183
+ maxNameLength: UNIX_MAX_NAME_BYTES,
184
+ platform: "Ios" /* Ios */,
185
+ shouldMeasureInBytes: true
186
+ },
187
+ ["Linux" /* Linux */]: {
188
+ hasWindowsNamingRules: false,
189
+ maxFilePathLength: LINUX_MAX_PATH_BYTES,
190
+ maxFolderPathLength: LINUX_MAX_PATH_BYTES,
191
+ maxNameLength: UNIX_MAX_NAME_BYTES,
192
+ platform: "Linux" /* Linux */,
193
+ shouldMeasureInBytes: true
194
+ },
195
+ ["MacOs" /* MacOs */]: {
196
+ hasWindowsNamingRules: false,
197
+ maxFilePathLength: DARWIN_MAX_PATH_BYTES,
198
+ maxFolderPathLength: DARWIN_MAX_PATH_BYTES,
199
+ maxNameLength: UNIX_MAX_NAME_BYTES,
200
+ platform: "MacOs" /* MacOs */,
201
+ shouldMeasureInBytes: true
202
+ },
203
+ ["Windows" /* Windows */]: {
204
+ hasWindowsNamingRules: true,
205
+ maxFilePathLength: WINDOWS_MAX_FILE_PATH_LENGTH,
206
+ maxFolderPathLength: WINDOWS_MAX_FOLDER_PATH_LENGTH,
207
+ maxNameLength: WINDOWS_MAX_NAME_LENGTH,
208
+ platform: "Windows" /* Windows */,
209
+ shouldMeasureInBytes: false
210
+ }
211
+ };
212
+ function findPathCompatibilityViolations(params) {
213
+ const violations = [];
214
+ const name = getName(params.path);
215
+ const profiles = getProfiles(params.platforms);
216
+ const obsidianForbiddenCharacters = findCharacters(name, import_validation.OBSIDIAN_UNSAFE_FILENAME_CHARS);
217
+ if (profiles.length > 0 && obsidianForbiddenCharacters.length > 0) {
218
+ violations.push({ characters: obsidianForbiddenCharacters, platform: null, type: "ObsidianForbiddenCharacter" /* ObsidianForbiddenCharacter */ });
219
+ }
220
+ for (const profile of profiles) {
221
+ const maxPathLength = params.isFolder ? profile.maxFolderPathLength : profile.maxFilePathLength;
222
+ const fullPathLength = params.maxVaultRootPathLength + 1 + measure(params.path, profile.shouldMeasureInBytes);
223
+ if (fullPathLength > maxPathLength) {
224
+ violations.push({
225
+ measurement: {
226
+ isInBytes: profile.shouldMeasureInBytes,
227
+ length: fullPathLength,
228
+ limit: maxPathLength,
229
+ vaultRootLength: params.maxVaultRootPathLength
230
+ },
231
+ platform: profile.platform,
232
+ type: "PathTooLong" /* PathTooLong */
233
+ });
234
+ }
235
+ const nameLength = measure(name, profile.shouldMeasureInBytes);
236
+ if (nameLength > profile.maxNameLength) {
237
+ violations.push({
238
+ measurement: { isInBytes: profile.shouldMeasureInBytes, length: nameLength, limit: profile.maxNameLength, vaultRootLength: null },
239
+ platform: profile.platform,
240
+ type: "NameTooLong" /* NameTooLong */
241
+ });
242
+ }
243
+ const platformForbiddenCharacters = findCharacters(name, getPlatformForbiddenCharactersRegExp(profile));
244
+ if (platformForbiddenCharacters.length > 0) {
245
+ violations.push({ characters: platformForbiddenCharacters, platform: profile.platform, type: "ForbiddenCharacter" /* ForbiddenCharacter */ });
246
+ }
247
+ if (!profile.hasWindowsNamingRules) {
248
+ continue;
249
+ }
250
+ if ((0, import_validation.isWindowsReservedName)(name)) {
251
+ violations.push({ platform: profile.platform, type: "ReservedName" /* ReservedName */ });
252
+ }
253
+ if ((0, import_validation.hasWindowsTrailingChars)(name)) {
254
+ violations.push({ platform: profile.platform, type: "TrailingCharacter" /* TrailingCharacter */ });
255
+ }
256
+ }
257
+ return violations;
258
+ }
259
+ function getCurrentPathCompatibilityPlatform() {
260
+ if (import_obsidian.Platform.isWin) {
261
+ return "Windows" /* Windows */;
262
+ }
263
+ if (import_obsidian.Platform.isAndroidApp) {
264
+ return "Android" /* Android */;
265
+ }
266
+ if (import_obsidian.Platform.isIosApp) {
267
+ return "Ios" /* Ios */;
268
+ }
269
+ if (import_obsidian.Platform.isMacOS) {
270
+ return "MacOs" /* MacOs */;
271
+ }
272
+ return import_obsidian.Platform.isLinux ? "Linux" /* Linux */ : null;
273
+ }
274
+ function getForbiddenCharacterReplacementValidationMessage(replacement) {
275
+ const regExps = [
276
+ (0, import_validation.getOsUnsafePathCharsRegExp)(true, false),
277
+ (0, import_validation.getOsUnsafePathCharsRegExp)(false, true),
278
+ (0, import_validation.getOsUnsafePathCharsRegExp)(false, false),
279
+ import_validation.OBSIDIAN_UNSAFE_FILENAME_CHARS,
280
+ CONTROL_CHARS_REG_EXP
281
+ ];
282
+ for (const char of replacement) {
283
+ if (regExps.some((regExp) => char.replace(regExp, "") !== char)) {
284
+ return `The replacement must not contain "${char}": a file name cannot hold it on every platform.`;
285
+ }
286
+ }
287
+ return "";
288
+ }
289
+ function isUnicodeNormalized(name) {
290
+ return name === name.normalize("NFC");
291
+ }
292
+ function measure($string, shouldMeasureInBytes) {
293
+ return shouldMeasureInBytes ? new Blob([$string]).size : $string.length;
294
+ }
295
+ function repairName(params) {
296
+ const profiles = getProfiles(params.platforms);
297
+ if (profiles.length === 0) {
298
+ return buildName(params.basename, params.extension);
299
+ }
300
+ let basename = params.basename;
301
+ let extension = params.extension;
302
+ for (const profile of profiles) {
303
+ basename = replaceForbiddenCharacters(basename, profile, params.forbiddenCharacterReplacement);
304
+ extension = replaceForbiddenCharacters(extension, profile, params.forbiddenCharacterReplacement);
305
+ }
306
+ extension = trimTrailingDotsAndSpaces(extension, profiles);
307
+ basename = trimTrailingDotsAndSpaces(basename, profiles);
308
+ if (profiles.some((profile) => profile.hasWindowsNamingRules) && (0, import_validation.isWindowsReservedName)(buildName(basename, extension))) {
309
+ basename += "_";
310
+ }
311
+ const codePoints = [...basename];
312
+ while (codePoints.length > 0) {
313
+ const candidate = trimTrailingDotsAndSpaces(codePoints.join(""), profiles);
314
+ if (candidate === "") {
315
+ return null;
316
+ }
317
+ if (doesFitEveryProfile(candidate, extension, profiles, params)) {
318
+ return buildName(candidate, extension);
319
+ }
320
+ codePoints.pop();
321
+ }
322
+ return null;
323
+ }
324
+ function buildName(basename, extension) {
325
+ return extension === "" ? basename : `${basename}.${extension}`;
326
+ }
327
+ function doesFitEveryProfile(basename, extension, profiles, params) {
328
+ const name = buildName(basename, extension);
329
+ const path = params.parentPath === "" ? name : `${params.parentPath}/${name}`;
330
+ return profiles.every((profile) => {
331
+ const maxPathLength = params.isFolder ? profile.maxFolderPathLength : profile.maxFilePathLength;
332
+ const fullPathLength = params.maxVaultRootPathLength + 1 + measure(path, profile.shouldMeasureInBytes);
333
+ return measure(name, profile.shouldMeasureInBytes) <= profile.maxNameLength && fullPathLength <= maxPathLength;
334
+ });
335
+ }
336
+ function findCharacters(name, regExp) {
337
+ return [...new Set(name.match(regExp))];
338
+ }
339
+ function getName(path) {
340
+ const slashIndex = path.lastIndexOf("/");
341
+ return slashIndex === -1 ? path : path.slice(slashIndex + 1);
342
+ }
343
+ function getPlatformForbiddenCharactersRegExp(profile) {
344
+ return (0, import_validation.getOsUnsafePathCharsRegExp)(profile.hasWindowsNamingRules, profile.platform === "Android" /* Android */);
345
+ }
346
+ function getProfiles(platforms) {
347
+ return platforms.map((platform) => PATH_COMPATIBILITY_PROFILES[platform]);
348
+ }
349
+ function replaceForbiddenCharacters($string, profile, replacement) {
350
+ return $string.replace(getPlatformForbiddenCharactersRegExp(profile), () => replacement).replace(import_validation.OBSIDIAN_UNSAFE_FILENAME_CHARS, () => replacement);
351
+ }
352
+ function trimTrailingDotsAndSpaces($string, profiles) {
353
+ return profiles.some((profile) => profile.hasWindowsNamingRules) ? (0, import_validation.trimWindowsTrailingChars)($string) : $string;
354
+ }
355
+ // Annotate the CommonJS export names for ESM import in node:
356
+ 0 && (module.exports = {
357
+ PATH_COMPATIBILITY_PLATFORMS,
358
+ PATH_COMPATIBILITY_PLATFORM_LABELS,
359
+ PathCompatibilityPlatform,
360
+ PathCompatibilityViolationType,
361
+ findPathCompatibilityViolations,
362
+ getCurrentPathCompatibilityPlatform,
363
+ getForbiddenCharacterReplacementValidationMessage,
364
+ isUnicodeNormalized,
365
+ measure,
366
+ repairName
367
+ });
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXRoLWNvbXBhdGliaWxpdHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFdoaWNoIG5hbWluZyBjb25zdHJhaW50cyBlYWNoIHBsYXRmb3JtIGltcG9zZXMsIHdoaWNoIG9mIHRoZW0gYSBnaXZlbiBwYXRoIHZpb2xhdGVzLCBhbmQgaG93IHRvIHJlcGFpciBhXG4gKiBuYW1lIHNvIGl0IHNhdGlzZmllcyBldmVyeSBlbmFibGVkIHBsYXRmb3JtIGF0IG9uY2UuXG4gKlxuICogUHVyZSBieSBkZXNpZ24g4oCUIG5vIGBBcHBgLCBubyB2YXVsdCwgbm8gSS9PIOKAlCBzbyB0aGUgd2hvbGUgY29ycmVjdG5lc3Mgc3VyZmFjZSAoYnl0ZSBjb3VudGluZywgZXh0ZW5zaW9uXG4gKiBwcmVzZXJ2YXRpb24sIHRydW5jYXRpb24gb3JkZXIsIHByb2ZpbGUgY29tcG9zaXRpb24pIGlzIHVuaXQtdGVzdGFibGUgd2l0aG91dCBhbiBPYnNpZGlhbiBpbnN0YW5jZS4gVGhlXG4gKiB2YXVsdCBwYXNzIHRoYXQgY29uc3VtZXMgaXQgbGl2ZXMgaW4gZWFjaCBwbHVnaW4gdGhhdCByZXBvcnRzIG9yIHJlcGFpcnMgcGF0aCBwcm9ibGVtcy5cbiAqXG4gKiBBIHZhdWx0IGlzIHN5bmNlZCwgc28gdGhlIHBsYXRmb3JtIHRoYXQgbWF0dGVycyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIG9uZSBydW5uaW5nOiBlbmFibGluZyBzZXZlcmFsXG4gKiBwbGF0Zm9ybXMgY29tcG9zZXMgdGhlaXIgY29uc3RyYWludHMgYnkgaW50ZXJzZWN0aW9uLCBhbmQgYSBuYW1lIGhhcyB0byBzYXRpc2Z5IGFsbCBvZiB0aGVtLlxuICovXG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBnZXRPc1Vuc2FmZVBhdGhDaGFyc1JlZ0V4cCxcbiAgaGFzV2luZG93c1RyYWlsaW5nQ2hhcnMsXG4gIGlzV2luZG93c1Jlc2VydmVkTmFtZSxcbiAgT0JTSURJQU5fVU5TQUZFX0ZJTEVOQU1FX0NIQVJTLFxuICB0cmltV2luZG93c1RyYWlsaW5nQ2hhcnNcbn0gZnJvbSAnLi92YWxpZGF0aW9uLnRzJztcblxuLyoqXG4gKiBBIHBsYXRmb3JtIGEgdmF1bHQgbWF5IGJlIHN5bmNlZCB0bywgYW5kIHdob3NlIG5hbWluZyBydWxlcyBjYW4gdGhlcmVmb3JlIGJlIGVuZm9yY2VkLlxuICovXG5leHBvcnQgZW51bSBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtIHtcbiAgQW5kcm9pZCA9ICdBbmRyb2lkJyxcbiAgSW9zID0gJ0lvcycsXG4gIExpbnV4ID0gJ0xpbnV4JyxcbiAgTWFjT3MgPSAnTWFjT3MnLFxuICBXaW5kb3dzID0gJ1dpbmRvd3MnXG59XG5cbi8qKlxuICogV2hhdCBhIHNpbmdsZSBwYXRoIG9yIG5hbWUgaXMgd3JvbmcgYWJvdXQsIG9uIG9uZSBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGVudW0gUGF0aENvbXBhdGliaWxpdHlWaW9sYXRpb25UeXBlIHtcbiAgRm9yYmlkZGVuQ2hhcmFjdGVyID0gJ0ZvcmJpZGRlbkNoYXJhY3RlcicsXG4gIE5hbWVUb29Mb25nID0gJ05hbWVUb29Mb25nJyxcblxuICAvKipcbiAgICogVGhlIG5hbWUgaG9sZHMgYSBjaGFyYWN0ZXIgT2JzaWRpYW4gbGlua3MgZG8gbm90IHdvcmsgd2l0aCAoYCNgLCBgXmAsIGBbYCwgYF1gLCBgfGApLiBPYnNpZGlhbidzIHJ1bGUsIG5vdFxuICAgKiBhIHBsYXRmb3JtJ3M6IHRoZSBmaWxlc3lzdGVtIHN0b3JlcyBzdWNoIGEgbmFtZSBmaW5lLCBzbyBuYW1pbmcgYSBwbGF0Zm9ybSBmb3IgaXQgd291bGQgYmUgZmFsc2UuXG4gICAqL1xuICBPYnNpZGlhbkZvcmJpZGRlbkNoYXJhY3RlciA9ICdPYnNpZGlhbkZvcmJpZGRlbkNoYXJhY3RlcicsXG4gIFBhdGhUb29Mb25nID0gJ1BhdGhUb29Mb25nJyxcbiAgUmVzZXJ2ZWROYW1lID0gJ1Jlc2VydmVkTmFtZScsXG4gIFRyYWlsaW5nQ2hhcmFjdGVyID0gJ1RyYWlsaW5nQ2hhcmFjdGVyJyxcblxuICAvKipcbiAgICogVGhlIG5hbWUgaXMgc3RvcmVkIG9uIGRpc2sgaW4gYSBmb3JtIG90aGVyIHRoYW4gVW5pY29kZSBORkMsIGUuZy4gYNC5YCBhcyBg0LhgIGZvbGxvd2VkIGJ5IGEgY29tYmluaW5nXG4gICAqIGJyZXZlLiBOb3QgYSBwbGF0Zm9ybSdzIHJ1bGUgYnV0IGEgc3luYyBoYXphcmQ6IHRvb2xzIG91dHNpZGUgT2JzaWRpYW4gc2VlIHRoZSB0d28gZm9ybXMgYXMgdHdvIG5hbWVzLlxuICAgKi9cbiAgVW5pY29kZU5vdE5vcm1hbGl6ZWQgPSAnVW5pY29kZU5vdE5vcm1hbGl6ZWQnXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvbnNQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGF0aCBuYW1lcyBhIGZvbGRlciwgd2hpY2ggaGFzIGl0cyBvd24gcGF0aCBidWRnZXQuXG4gICAqL1xuICByZWFkb25seSBpc0ZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCB2YXVsdCByb290IHBhdGggdGhlIHZhdWx0IGlzIGV4cGVjdGVkIHRvIGxpdmUgdW5kZXIsIGluIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIFRoZSB2YXVsdCByb290IG9mIGEgcGxhdGZvcm0gdGhlIGNoZWNrIGlzIG5vdCBydW5uaW5nIG9uIGlzIHVua25vd2FibGUsIHNvIGl0IGlzIHN0YXRlZCByYXRoZXIgdGhhblxuICAgKiBndWVzc2VkIOKAlCBzZWUgdGhlIGBtYXhWYXVsdFJvb3RQYXRoTGVuZ3RoYCBzZXR0aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VmF1bHRSb290UGF0aExlbmd0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsYXRmb3JtcyB3aG9zZSBydWxlcyB0byBlbmZvcmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm1zOiByZWFkb25seSBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtW107XG59XG5cbi8qKlxuICogQSBsZW5ndGggYSBwYXRoIG9yIG5hbWUgd2FzIG1lYXN1cmVkIGF0LCBhbmQgdGhlIGxpbWl0IGl0IGV4Y2VlZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aENvbXBhdGliaWxpdHlNZWFzdXJlbWVudCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGJvdGggbnVtYmVycyBjb3VudCBVVEYtOCBieXRlcyByYXRoZXIgdGhhbiBVVEYtMTYgdW5pdHMuXG4gICAqL1xuICByZWFkb25seSBpc0luQnl0ZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtZWFzdXJlZCBsZW5ndGguXG4gICAqL1xuICByZWFkb25seSBsZW5ndGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxhcmdlc3QgbGVuZ3RoIHRoZSBwbGF0Zm9ybSBhY2NlcHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0IHJvb3QgbGVuZ3RoIGNvdW50ZWQgaW50byB7QGxpbmsgUGF0aENvbXBhdGliaWxpdHlNZWFzdXJlbWVudC5sZW5ndGh9LCBiZWZvcmUgdGhlIHNlcGFyYXRvclxuICAgKiBhZnRlciBpdC4gYG51bGxgIGZvciBhIG5hbWUsIHdoaWNoIGNhcnJpZXMgbm8gcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Um9vdExlbmd0aDogbnVsbCB8IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgbmFtaW5nIHJ1bGVzIG9mIG9uZSBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXRoQ29tcGF0aWJpbGl0eVByb2ZpbGUge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIHBsYXRmb3JtIGFwcGxpZXMgV2luZG93cycgbmFtaW5nIHJ1bGVzOiBpdHMgZm9yYmlkZGVuIGNoYXJhY3RlcnMsIGl0cyByZXNlcnZlZCBkZXZpY2VcbiAgICogbmFtZXMsIGFuZCBpdHMgcmVqZWN0aW9uIG9mIHRyYWlsaW5nIGRvdHMgYW5kIHNwYWNlcy5cbiAgICpcbiAgICogT25lIGZsYWcgZm9yIHRocmVlIHJ1bGVzIGJlY2F1c2UgdGhleSBhcmUgb25lIGZpbGVzeXN0ZW0ncyBydWxlcywgYW5kIG5vIHBsYXRmb3JtIGFkb3B0cyBhIHN1YnNldC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1dpbmRvd3NOYW1pbmdSdWxlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxvbmdlc3QgYWJzb2x1dGUgcGF0aCBhIGZpbGUgbWF5IGhhdmUsIGluIHRoaXMgcHJvZmlsZSdzIHVuaXQuXG4gICAqL1xuICByZWFkb25seSBtYXhGaWxlUGF0aExlbmd0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9uZ2VzdCBhYnNvbHV0ZSBwYXRoIGEgZm9sZGVyIG1heSBoYXZlLCBpbiB0aGlzIHByb2ZpbGUncyB1bml0LlxuICAgKlxuICAgKiBCZWxvdyB7QGxpbmsgUGF0aENvbXBhdGliaWxpdHlQcm9maWxlLm1heEZpbGVQYXRoTGVuZ3RofSBvbiBXaW5kb3dzLCB3aGVyZSB0aGUgc2hvcnRlciBidWRnZXQgbGVhdmVzXG4gICAqIHJvb20gZm9yIGFuIGA4LjNgIG5hbWUgaW5zaWRlIHRoZSBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBtYXhGb2xkZXJQYXRoTGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb25nZXN0IHNpbmdsZSBuYW1lIOKAlCBvbmUgcGF0aCBzZWdtZW50IOKAlCBpbiB0aGlzIHByb2ZpbGUncyB1bml0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TmFtZUxlbmd0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm0gdGhpcyBwcm9maWxlIGRlc2NyaWJlcy5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGxlbmd0aHMgY291bnQgVVRGLTggYnl0ZXMgKGV4dDQsIEFQRlMpIHJhdGhlciB0aGFuIFVURi0xNiB1bml0cyAoTlRGUykuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIHdob2xlIHJlYXNvbiB0aGUgMjU1IGxpbWl0IGlzIG5vdCBhIGNoYXJhY3RlciBjb3VudDogYSBuYW1lIG9mIDEyOCBDSksgY2hhcmFjdGVycyBpcyAzODRcbiAgICogYnl0ZXMgYW5kIGlzIHJlamVjdGVkIGJ5IGV4dDQgd2hpbGUgYmVpbmcgbm93aGVyZSBuZWFyIGFueSBsaW1pdCBXaW5kb3dzIGhhcy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZE1lYXN1cmVJbkJ5dGVzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9uZSB0aGluZyB3cm9uZyB3aXRoIG9uZSBwYXRoLCBhbmQgdGhlIHBsYXRmb3JtIHRoYXQgb2JqZWN0cyB0byBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMsIGVhY2ggb25jZSwgaW4gdGhlIG9yZGVyIHRoZXkgZmlyc3QgYXBwZWFyIGluIHRoZSBuYW1lLlxuICAgKlxuICAgKiBTZXQgZm9yIHtAbGluayBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvblR5cGUuRm9yYmlkZGVuQ2hhcmFjdGVyfSBhbmRcbiAgICoge0BsaW5rIFBhdGhDb21wYXRpYmlsaXR5VmlvbGF0aW9uVHlwZS5PYnNpZGlhbkZvcmJpZGRlbkNoYXJhY3Rlcn0sIHNvIHRoZSByZXBvcnQgY2FuIG5hbWUgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYXJhY3RlcnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hhdCB3YXMgbWVhc3VyZWQgYW5kIHRoZSBsaW1pdCBpdCB3YXMgbWVhc3VyZWQgYWdhaW5zdC5cbiAgICpcbiAgICogU2V0IGZvciB7QGxpbmsgUGF0aENvbXBhdGliaWxpdHlWaW9sYXRpb25UeXBlLk5hbWVUb29Mb25nfSBhbmRcbiAgICoge0BsaW5rIFBhdGhDb21wYXRpYmlsaXR5VmlvbGF0aW9uVHlwZS5QYXRoVG9vTG9uZ30sIHNvIGEgcmVhZGVyIG9mIHRoZSByZXBvcnQgY2FuIHZlcmlmeSB0aGUgdmVyZGljdC5cbiAgICovXG4gIHJlYWRvbmx5IG1lYXN1cmVtZW50PzogUGF0aENvbXBhdGliaWxpdHlNZWFzdXJlbWVudDtcblxuICAvKipcbiAgICogVGhlIHBsYXRmb3JtIHdob3NlIHJ1bGVzIHRoZSBwYXRoIGJyZWFrcy4gQW5vdGhlciBlbmFibGVkIHBsYXRmb3JtIG1heSBhY2NlcHQgdGhlIHZlcnkgc2FtZSBwYXRoLlxuICAgKlxuICAgKiBgbnVsbGAgZm9yIGEgdmlvbGF0aW9uIG5vIHNpbmdsZSBwbGF0Zm9ybSBvd25zLCB3aGljaCBpc1xuICAgKiB7QGxpbmsgUGF0aENvbXBhdGliaWxpdHlWaW9sYXRpb25UeXBlLk9ic2lkaWFuRm9yYmlkZGVuQ2hhcmFjdGVyfSBhbmRcbiAgICoge0BsaW5rIFBhdGhDb21wYXRpYmlsaXR5VmlvbGF0aW9uVHlwZS5Vbmljb2RlTm90Tm9ybWFsaXplZH0uXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogbnVsbCB8IFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm07XG5cbiAgLyoqXG4gICAqIFdoYXQgaXMgd3JvbmcuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvblR5cGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlcGFpck5hbWV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGFpck5hbWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLiBGb3IgYSBmb2xkZXIsIHRoZSB3aG9sZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZW5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUncyBleHRlbnNpb24sIHdpdGhvdXQgdGhlIGxlYWRpbmcgZG90LiBFbXB0eSBmb3IgYSBmb2xkZXIgb3IgYW4gZXh0ZW5zaW9uLWxlc3MgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IGVhY2ggZm9yYmlkZGVuIGNoYXJhY3RlciBpcyByZXBsYWNlZCB3aXRoLiBFbXB0eSBkZWxldGVzIGl0LiBNdXN0IHBhc3NcbiAgICoge0BsaW5rIGdldEZvcmJpZGRlbkNoYXJhY3RlclJlcGxhY2VtZW50VmFsaWRhdGlvbk1lc3NhZ2V9LCBvciB0aGUgcmVwYWlyIHdvdWxkIHB1dCBiYWNrIHdoYXQgaXQgcmVtb3ZlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcmJpZGRlbkNoYXJhY3RlclJlcGxhY2VtZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5hbWUgYmVsb25ncyB0byBhIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzRm9sZGVyOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IHZhdWx0IHJvb3QgcGF0aCB0aGUgdmF1bHQgaXMgZXhwZWN0ZWQgdG8gbGl2ZSB1bmRlciwgaW4gY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IG1heFZhdWx0Um9vdFBhdGhMZW5ndGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggb2YgdGhlIHBhcmVudCBmb2xkZXIuIEVtcHR5IGF0IHRoZSB2YXVsdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm1zIHdob3NlIHJ1bGVzIHRoZSByZXBhaXJlZCBuYW1lIG11c3Qgc2F0aXNmeS5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtczogcmVhZG9ubHkgUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybVtdO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHBsYXRmb3JtLCBpbiB0aGUgb3JkZXIgdGhlIHNldHRpbmdzIHRhYiBhbmQgdGhlIGNvbnNpc3RlbmN5IHJlcG9ydCBsaXN0IHRoZW06IHRoZSBvbmVzIHdob3NlIGxpbWl0c1xuICogYWN0dWFsbHkgYmluZCBpbiBwcmFjdGljZSBmaXJzdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFBBVEhfQ09NUEFUSUJJTElUWV9QTEFURk9STVM6IHJlYWRvbmx5IFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm1bXSA9IFtcbiAgUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5XaW5kb3dzLFxuICBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtLkFuZHJvaWQsXG4gIFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uTGludXgsXG4gIFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uTWFjT3MsXG4gIFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uSW9zXG5dO1xuXG4vKipcbiAqIEhvdyBlYWNoIHBsYXRmb3JtIGlzIG5hbWVkIGluIHRoZSBzZXR0aW5ncyB0YWIgYW5kIHRoZSBjb25zaXN0ZW5jeSByZXBvcnQuXG4gKlxuICogTm90IHRyYW5zbGF0ZWQ6IHRoZXNlIGFyZSBwcm9kdWN0IG5hbWVzLCBhbmQgYG1hY09TYCBpcyBzcGVsbGVkIGBtYWNPU2AgaW4gZXZlcnkgbGFuZ3VhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBQQVRIX0NPTVBBVElCSUxJVFlfUExBVEZPUk1fTEFCRUxTOiBSZWNvcmQ8UGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybSwgc3RyaW5nPiA9IHtcbiAgW1BhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uQW5kcm9pZF06ICdBbmRyb2lkJyxcbiAgW1BhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uSW9zXTogJ2lPUycsXG4gIFtQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtLkxpbnV4XTogJ0xpbnV4JyxcbiAgW1BhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uTWFjT3NdOiAnbWFjT1MnLFxuICBbUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5XaW5kb3dzXTogJ1dpbmRvd3MnXG59O1xuXG4vKipcbiAqIGBNQVhfUEFUSGAgaXMgMjYwIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMLCBzbyAyNTkgdXNhYmxlIGNoYXJhY3RlcnMgZm9yIGEgZmlsZS5cbiAqL1xuY29uc3QgV0lORE9XU19NQVhfRklMRV9QQVRIX0xFTkdUSCA9IDI1OTtcblxuLyoqXG4gKiBBIGZvbGRlciBnZXRzIDEyIGZld2VyLCBsZWF2aW5nIHJvb20gZm9yIGEgYFxcYCBhbmQgYW4gOC4zIG5hbWUgaW5zaWRlIGl0LlxuICovXG5jb25zdCBXSU5ET1dTX01BWF9GT0xERVJfUEFUSF9MRU5HVEggPSAyNDc7XG5cbi8qKlxuICogTlRGUydzIHBlci1uYW1lIGNhcCwgaW4gVVRGLTE2IHVuaXRzLiBOZXZlciB0aGUgYmluZGluZyBjb25zdHJhaW50OiBhIHBhdGggdGhhdCBmaXRzIGluXG4gKiB7QGxpbmsgV0lORE9XU19NQVhfRklMRV9QQVRIX0xFTkdUSH0gY2hhcmFjdGVycyBjb250YWlucyBubyBsb25nZXIgbmFtZS5cbiAqL1xuY29uc3QgV0lORE9XU19NQVhfTkFNRV9MRU5HVEggPSAyNTU7XG5cbi8qKlxuICogRXh0NCAvIGYyZnMgLyBBUEZTIGFsbCBjYXAgYSBzaW5nbGUgbmFtZSBhdCAyNTUgQllURVMuIFRoaXMgaXMgdGhlIGxpbWl0IGEgY2hhcmFjdGVyIGNvdW50IGdldHMgd3JvbmcuXG4gKi9cbmNvbnN0IFVOSVhfTUFYX05BTUVfQllURVMgPSAyNTU7XG5cbi8qKlxuICogYFBBVEhfTUFYYCBvbiBMaW51eCBhbmQgQW5kcm9pZC4gU28gZmFyIGFib3ZlIGFueXRoaW5nIGEgdmF1bHQgcHJvZHVjZXMgdGhhdCBvbmx5IHRoZSBuYW1lIGxpbWl0IGJpbmRzLlxuICovXG5jb25zdCBMSU5VWF9NQVhfUEFUSF9CWVRFUyA9IDQwOTY7XG5cbi8qKlxuICogYFBBVEhfTUFYYCBvbiBtYWNPUyBhbmQgaU9TLlxuICovXG5jb25zdCBEQVJXSU5fTUFYX1BBVEhfQllURVMgPSAxMDI0O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBDb250cm9sIGNoYXJhY3RlcnMgYXJlIGV4YWN0bHkgd2hhdCB0aGlzIG1hdGNoZXMuXG5jb25zdCBDT05UUk9MX0NIQVJTX1JFR19FWFAgPSAvW1xcdXswfS1cXHV7MUZ9XS9ndTtcblxuY29uc3QgUEFUSF9DT01QQVRJQklMSVRZX1BST0ZJTEVTOiBSZWNvcmQ8UGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybSwgUGF0aENvbXBhdGliaWxpdHlQcm9maWxlPiA9IHtcbiAgW1BhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uQW5kcm9pZF06IHtcbiAgICBoYXNXaW5kb3dzTmFtaW5nUnVsZXM6IGZhbHNlLFxuICAgIG1heEZpbGVQYXRoTGVuZ3RoOiBMSU5VWF9NQVhfUEFUSF9CWVRFUyxcbiAgICBtYXhGb2xkZXJQYXRoTGVuZ3RoOiBMSU5VWF9NQVhfUEFUSF9CWVRFUyxcbiAgICBtYXhOYW1lTGVuZ3RoOiBVTklYX01BWF9OQU1FX0JZVEVTLFxuICAgIHBsYXRmb3JtOiBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtLkFuZHJvaWQsXG4gICAgc2hvdWxkTWVhc3VyZUluQnl0ZXM6IHRydWVcbiAgfSxcblxuICBbUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5Jb3NdOiB7XG4gICAgaGFzV2luZG93c05hbWluZ1J1bGVzOiBmYWxzZSxcbiAgICBtYXhGaWxlUGF0aExlbmd0aDogREFSV0lOX01BWF9QQVRIX0JZVEVTLFxuICAgIG1heEZvbGRlclBhdGhMZW5ndGg6IERBUldJTl9NQVhfUEFUSF9CWVRFUyxcbiAgICBtYXhOYW1lTGVuZ3RoOiBVTklYX01BWF9OQU1FX0JZVEVTLFxuICAgIHBsYXRmb3JtOiBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtLklvcyxcbiAgICBzaG91bGRNZWFzdXJlSW5CeXRlczogdHJ1ZVxuICB9LFxuXG4gIFtQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtLkxpbnV4XToge1xuICAgIGhhc1dpbmRvd3NOYW1pbmdSdWxlczogZmFsc2UsXG4gICAgbWF4RmlsZVBhdGhMZW5ndGg6IExJTlVYX01BWF9QQVRIX0JZVEVTLFxuICAgIG1heEZvbGRlclBhdGhMZW5ndGg6IExJTlVYX01BWF9QQVRIX0JZVEVTLFxuICAgIG1heE5hbWVMZW5ndGg6IFVOSVhfTUFYX05BTUVfQllURVMsXG4gICAgcGxhdGZvcm06IFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uTGludXgsXG4gICAgc2hvdWxkTWVhc3VyZUluQnl0ZXM6IHRydWVcbiAgfSxcblxuICBbUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5NYWNPc106IHtcbiAgICBoYXNXaW5kb3dzTmFtaW5nUnVsZXM6IGZhbHNlLFxuICAgIG1heEZpbGVQYXRoTGVuZ3RoOiBEQVJXSU5fTUFYX1BBVEhfQllURVMsXG4gICAgbWF4Rm9sZGVyUGF0aExlbmd0aDogREFSV0lOX01BWF9QQVRIX0JZVEVTLFxuICAgIG1heE5hbWVMZW5ndGg6IFVOSVhfTUFYX05BTUVfQllURVMsXG4gICAgcGxhdGZvcm06IFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uTWFjT3MsXG4gICAgc2hvdWxkTWVhc3VyZUluQnl0ZXM6IHRydWVcbiAgfSxcblxuICBbUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5XaW5kb3dzXToge1xuICAgIGhhc1dpbmRvd3NOYW1pbmdSdWxlczogdHJ1ZSxcbiAgICBtYXhGaWxlUGF0aExlbmd0aDogV0lORE9XU19NQVhfRklMRV9QQVRIX0xFTkdUSCxcbiAgICBtYXhGb2xkZXJQYXRoTGVuZ3RoOiBXSU5ET1dTX01BWF9GT0xERVJfUEFUSF9MRU5HVEgsXG4gICAgbWF4TmFtZUxlbmd0aDogV0lORE9XU19NQVhfTkFNRV9MRU5HVEgsXG4gICAgcGxhdGZvcm06IFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uV2luZG93cyxcbiAgICBzaG91bGRNZWFzdXJlSW5CeXRlczogZmFsc2VcbiAgfVxufTtcblxuLyoqXG4gKiBGaW5kcyBldmVyeXRoaW5nIHdyb25nIHdpdGggYSBwYXRoLCBhY3Jvc3MgZXZlcnkgZW5hYmxlZCBwbGF0Zm9ybS5cbiAqXG4gKiBSZWFkLW9ubHk6IHRoaXMgaXMgd2hhdCB0aGUgY29uc2lzdGVuY3kgcmVwb3J0IHJlbmRlcnMsIGFuZCBpdCBuZXZlciBwcm9wb3NlcyBhIHJlcGFpci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhdGggYW5kIHRoZSBwbGF0Zm9ybXMgdG8gY2hlY2sgaXQgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRoZSB2aW9sYXRpb25zLCBlbXB0eSB3aGVuIHRoZSBwYXRoIGlzIHZhbGlkIGV2ZXJ5d2hlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGF0aENvbXBhdGliaWxpdHlWaW9sYXRpb25zKHBhcmFtczogRmluZFBhdGhDb21wYXRpYmlsaXR5VmlvbGF0aW9uc1BhcmFtcyk6IFBhdGhDb21wYXRpYmlsaXR5VmlvbGF0aW9uW10ge1xuICBjb25zdCB2aW9sYXRpb25zOiBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvbltdID0gW107XG4gIGNvbnN0IG5hbWUgPSBnZXROYW1lKHBhcmFtcy5wYXRoKTtcbiAgY29uc3QgcHJvZmlsZXMgPSBnZXRQcm9maWxlcyhwYXJhbXMucGxhdGZvcm1zKTtcblxuICAvKlxuICAgKiBPbmNlLCB3aXRoIG5vIHBsYXRmb3JtOiBldmVyeSBwbGF0Zm9ybSBzdG9yZXMgc3VjaCBhIG5hbWUsIGFuZCBvbmx5IE9ic2lkaWFuJ3MgbGlua3MgcmVmdXNlIGl0LiBTdGlsbFxuICAgKiBnYXRlZCBvbiBhIHBsYXRmb3JtIGJlaW5nIGVuYWJsZWQsIGJlY2F1c2UgdGhhdCBpcyB3aGF0IHN3aXRjaGVzIHRoZSB3aG9sZSBjaGVjayBvbiwgYW5kIHRoZSByZXBhaXIgb25seVxuICAgKiByZXBsYWNlcyB0aGVzZSBjaGFyYWN0ZXJzIHVuZGVyIGEgcHJvZmlsZS5cbiAgICovXG4gIGNvbnN0IG9ic2lkaWFuRm9yYmlkZGVuQ2hhcmFjdGVycyA9IGZpbmRDaGFyYWN0ZXJzKG5hbWUsIE9CU0lESUFOX1VOU0FGRV9GSUxFTkFNRV9DSEFSUyk7XG5cbiAgaWYgKHByb2ZpbGVzLmxlbmd0aCA+IDAgJiYgb2JzaWRpYW5Gb3JiaWRkZW5DaGFyYWN0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2aW9sYXRpb25zLnB1c2goeyBjaGFyYWN0ZXJzOiBvYnNpZGlhbkZvcmJpZGRlbkNoYXJhY3RlcnMsIHBsYXRmb3JtOiBudWxsLCB0eXBlOiBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvblR5cGUuT2JzaWRpYW5Gb3JiaWRkZW5DaGFyYWN0ZXIgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgcHJvZmlsZXMpIHtcbiAgICBjb25zdCBtYXhQYXRoTGVuZ3RoID0gcGFyYW1zLmlzRm9sZGVyID8gcHJvZmlsZS5tYXhGb2xkZXJQYXRoTGVuZ3RoIDogcHJvZmlsZS5tYXhGaWxlUGF0aExlbmd0aDtcbiAgICBjb25zdCBmdWxsUGF0aExlbmd0aCA9IHBhcmFtcy5tYXhWYXVsdFJvb3RQYXRoTGVuZ3RoICsgMSArIG1lYXN1cmUocGFyYW1zLnBhdGgsIHByb2ZpbGUuc2hvdWxkTWVhc3VyZUluQnl0ZXMpO1xuXG4gICAgaWYgKGZ1bGxQYXRoTGVuZ3RoID4gbWF4UGF0aExlbmd0aCkge1xuICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgbWVhc3VyZW1lbnQ6IHtcbiAgICAgICAgICBpc0luQnl0ZXM6IHByb2ZpbGUuc2hvdWxkTWVhc3VyZUluQnl0ZXMsXG4gICAgICAgICAgbGVuZ3RoOiBmdWxsUGF0aExlbmd0aCxcbiAgICAgICAgICBsaW1pdDogbWF4UGF0aExlbmd0aCxcbiAgICAgICAgICB2YXVsdFJvb3RMZW5ndGg6IHBhcmFtcy5tYXhWYXVsdFJvb3RQYXRoTGVuZ3RoXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXRmb3JtOiBwcm9maWxlLnBsYXRmb3JtLFxuICAgICAgICB0eXBlOiBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvblR5cGUuUGF0aFRvb0xvbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVMZW5ndGggPSBtZWFzdXJlKG5hbWUsIHByb2ZpbGUuc2hvdWxkTWVhc3VyZUluQnl0ZXMpO1xuXG4gICAgaWYgKG5hbWVMZW5ndGggPiBwcm9maWxlLm1heE5hbWVMZW5ndGgpIHtcbiAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgIG1lYXN1cmVtZW50OiB7IGlzSW5CeXRlczogcHJvZmlsZS5zaG91bGRNZWFzdXJlSW5CeXRlcywgbGVuZ3RoOiBuYW1lTGVuZ3RoLCBsaW1pdDogcHJvZmlsZS5tYXhOYW1lTGVuZ3RoLCB2YXVsdFJvb3RMZW5ndGg6IG51bGwgfSxcbiAgICAgICAgcGxhdGZvcm06IHByb2ZpbGUucGxhdGZvcm0sXG4gICAgICAgIHR5cGU6IFBhdGhDb21wYXRpYmlsaXR5VmlvbGF0aW9uVHlwZS5OYW1lVG9vTG9uZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGxhdGZvcm1Gb3JiaWRkZW5DaGFyYWN0ZXJzID0gZmluZENoYXJhY3RlcnMobmFtZSwgZ2V0UGxhdGZvcm1Gb3JiaWRkZW5DaGFyYWN0ZXJzUmVnRXhwKHByb2ZpbGUpKTtcblxuICAgIGlmIChwbGF0Zm9ybUZvcmJpZGRlbkNoYXJhY3RlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmlvbGF0aW9ucy5wdXNoKHsgY2hhcmFjdGVyczogcGxhdGZvcm1Gb3JiaWRkZW5DaGFyYWN0ZXJzLCBwbGF0Zm9ybTogcHJvZmlsZS5wbGF0Zm9ybSwgdHlwZTogUGF0aENvbXBhdGliaWxpdHlWaW9sYXRpb25UeXBlLkZvcmJpZGRlbkNoYXJhY3RlciB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2ZpbGUuaGFzV2luZG93c05hbWluZ1J1bGVzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNXaW5kb3dzUmVzZXJ2ZWROYW1lKG5hbWUpKSB7XG4gICAgICB2aW9sYXRpb25zLnB1c2goeyBwbGF0Zm9ybTogcHJvZmlsZS5wbGF0Zm9ybSwgdHlwZTogUGF0aENvbXBhdGliaWxpdHlWaW9sYXRpb25UeXBlLlJlc2VydmVkTmFtZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoaGFzV2luZG93c1RyYWlsaW5nQ2hhcnMobmFtZSkpIHtcbiAgICAgIHZpb2xhdGlvbnMucHVzaCh7IHBsYXRmb3JtOiBwcm9maWxlLnBsYXRmb3JtLCB0eXBlOiBQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvblR5cGUuVHJhaWxpbmdDaGFyYWN0ZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZpb2xhdGlvbnM7XG59XG5cbi8qKlxuICogVGhlIHBsYXRmb3JtIHRoZSBwbHVnaW4gaXMgcnVubmluZyBvbiwgb3IgYG51bGxgIG9uIGEgcGxhdGZvcm0gd2l0aCBubyBwcm9maWxlLlxuICpcbiAqIFVzZWQgb25seSB0byBzZWVkIHRoZSBzZXR0aW5ncyBkZWZhdWx0cywgc28gdGhhdCBhIGZyZXNoIGluc3RhbGwgcmVwb3J0cyBvbiB0aGUgdmF1bHQgaW4gZnJvbnQgb2YgaXRcbiAqIHdpdGhvdXQgdGhlIHVzZXIgY29uZmlndXJpbmcgYW55dGhpbmcgZmlyc3QuXG4gKlxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgcGxhdGZvcm0sIG9yIGBudWxsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtKCk6IG51bGwgfCBQYXRoQ29tcGF0aWJpbGl0eVBsYXRmb3JtIHtcbiAgaWYgKFBsYXRmb3JtLmlzV2luKSB7XG4gICAgcmV0dXJuIFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uV2luZG93cztcbiAgfVxuXG4gIGlmIChQbGF0Zm9ybS5pc0FuZHJvaWRBcHApIHtcbiAgICByZXR1cm4gUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5BbmRyb2lkO1xuICB9XG5cbiAgaWYgKFBsYXRmb3JtLmlzSW9zQXBwKSB7XG4gICAgcmV0dXJuIFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uSW9zO1xuICB9XG5cbiAgaWYgKFBsYXRmb3JtLmlzTWFjT1MpIHtcbiAgICByZXR1cm4gUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5NYWNPcztcbiAgfVxuXG4gIHJldHVybiBQbGF0Zm9ybS5pc0xpbnV4ID8gUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybS5MaW51eCA6IG51bGw7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSB0ZXh0IGEgZm9yYmlkZGVuIGNoYXJhY3RlciBpcyByZXBsYWNlZCB3aXRoLlxuICpcbiAqIEV2ZXJ5IHBsYXRmb3JtJ3Mgc2V0IGlzIGNoZWNrZWQsIG5vdCBvbmx5IHRoZSBlbmFibGVkIG9uZXM6IHRoZSB0b2dnbGVzIGNhbiBjaGFuZ2UgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50XG4gKiBpcyBjaG9zZW4sIGFuZCBhIHJlcGxhY2VtZW50IG9uZSBwbGF0Zm9ybSByZWZ1c2VzIHdvdWxkIG1ha2UgdGhlIHJlcGFpciBvZiB0aGF0IHBsYXRmb3JtIHByb2R1Y2UgYSBuYW1lXG4gKiB0aGF0IGlzIHN0aWxsIGludmFsaWQgdGhlcmUuXG4gKlxuICogQHBhcmFtIHJlcGxhY2VtZW50IC0gVGhlIHJlcGxhY2VtZW50IHRleHQuIEVtcHR5IGlzIHZhbGlkIGFuZCBkZWxldGVzIHRoZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBBIG1lc3NhZ2UgbmFtaW5nIHRoZSBmaXJzdCByZWZ1c2VkIGNoYXJhY3Rlciwgb3IgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlIHJlcGxhY2VtZW50IGlzIHZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9yYmlkZGVuQ2hhcmFjdGVyUmVwbGFjZW1lbnRWYWxpZGF0aW9uTWVzc2FnZShyZXBsYWNlbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnRXhwcyA9IFtcbiAgICBnZXRPc1Vuc2FmZVBhdGhDaGFyc1JlZ0V4cCh0cnVlLCBmYWxzZSksXG4gICAgZ2V0T3NVbnNhZmVQYXRoQ2hhcnNSZWdFeHAoZmFsc2UsIHRydWUpLFxuICAgIGdldE9zVW5zYWZlUGF0aENoYXJzUmVnRXhwKGZhbHNlLCBmYWxzZSksXG4gICAgT0JTSURJQU5fVU5TQUZFX0ZJTEVOQU1FX0NIQVJTLFxuICAgIENPTlRST0xfQ0hBUlNfUkVHX0VYUFxuICBdO1xuXG4gIC8vIEEgc3RyaW5nIGl0ZXJhdGVzIGJ5IGNvZGUgcG9pbnQsIHNvIGEgc3Vycm9nYXRlIHBhaXIgaXMgbmFtZWQgd2hvbGUsIGFzIHRoZSB1c2VyIHR5cGVkIGl0LlxuICBmb3IgKGNvbnN0IGNoYXIgb2YgcmVwbGFjZW1lbnQpIHtcbiAgICAvLyBgcmVwbGFjZWAgcmF0aGVyIHRoYW4gYHRlc3RgLCBmb3IgdGhlIHJlYXNvbiBnaXZlbiBhdCBgcmVwbGFjZUZvcmJpZGRlbkNoYXJhY3RlcnNgLlxuICAgIGlmIChyZWdFeHBzLnNvbWUoKHJlZ0V4cCkgPT4gY2hhci5yZXBsYWNlKHJlZ0V4cCwgJycpICE9PSBjaGFyKSkge1xuICAgICAgcmV0dXJuIGBUaGUgcmVwbGFjZW1lbnQgbXVzdCBub3QgY29udGFpbiBcIiR7Y2hhcn1cIjogYSBmaWxlIG5hbWUgY2Fubm90IGhvbGQgaXQgb24gZXZlcnkgcGxhdGZvcm0uYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogV2hldGhlciBhIG5hbWUgaXMgaW4gVW5pY29kZSBORkMsIHRoZSBmb3JtIE9ic2lkaWFuIGdpdmVzIGV2ZXJ5IG5hbWUgaXQgY3JlYXRlcy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIGFzIGl0IGlzIHN0b3JlZCBvbiBkaXNrLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcyBORkMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1VuaWNvZGVOb3JtYWxpemVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbmFtZSA9PT0gbmFtZS5ub3JtYWxpemUoJ05GQycpO1xufVxuXG4vKipcbiAqIE1lYXN1cmVzIGEgc3RyaW5nIHRoZSB3YXkgYSBmaWxlc3lzdGVtIGRvZXMuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIG1lYXN1cmUuXG4gKiBAcGFyYW0gc2hvdWxkTWVhc3VyZUluQnl0ZXMgLSBXaGV0aGVyIHRvIGNvdW50IFVURi04IGJ5dGVzIHJhdGhlciB0aGFuIFVURi0xNiB1bml0cy5cbiAqIEByZXR1cm5zIFRoZSBsZW5ndGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlKCRzdHJpbmc6IHN0cmluZywgc2hvdWxkTWVhc3VyZUluQnl0ZXM6IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gc2hvdWxkTWVhc3VyZUluQnl0ZXMgPyBuZXcgQmxvYihbJHN0cmluZ10pLnNpemUgOiAkc3RyaW5nLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXBhaXJzIGEgbmFtZSBzbyB0aGF0IGl0IHNhdGlzZmllcyBldmVyeSBlbmFibGVkIHBsYXRmb3JtLlxuICpcbiAqIFRoZSBvcmRlciBpcyBkZWxpYmVyYXRlOiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBhbmQgYSByZXNlcnZlZCBuYW1lIGRlLXJlc2VydmVkIEJFRk9SRSBhbnl0aGluZyBpc1xuICogdHJ1bmNhdGVkLCBiZWNhdXNlIGJvdGggY2FuIGNoYW5nZSB0aGUgbGVuZ3RoLCBhbmQgdHJhaWxpbmcgZG90cyBhbmQgc3BhY2VzIGFyZSB0cmltbWVkIEFGVEVSIGV2ZXJ5IGN1dCxcbiAqIGJlY2F1c2UgYSBjdXQgY2FuIGV4cG9zZSBuZXcgb25lcy5cbiAqXG4gKiBUcnVuY2F0aW9uIG9ubHkgZXZlciBzaG9ydGVucyB0aGUgYmFzZW5hbWUg4oCUIGFuIGV4dGVuc2lvbiBpcyB3aGF0IHRlbGxzIE9ic2lkaWFuIGFuZCB0aGUgT1Mgd2hhdCB0aGUgZmlsZVxuICogaXMsIHNvIGEgdHJ1bmNhdGVkIG9uZSB0dXJucyBhIHdvcmtpbmcgYC5wbmdgIGludG8gYSBicm9rZW4gYC5wbmAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBuYW1lIGFuZCB0aGUgcGxhdGZvcm1zIGl0IG11c3Qgc2F0aXNmeS5cbiAqIEByZXR1cm5zIFRoZSByZXBhaXJlZCBuYW1lLCB1bmNoYW5nZWQgd2hlbiBpdCB3YXMgYWxyZWFkeSB2YWxpZCwgb3IgYG51bGxgIHdoZW4gbm8gbmFtZSBzdXJ2aXZlcyB0aGVcbiAqIHJlcGFpciDigJQgd2hpY2ggaXMgd2hhdCB0aGUgcmVwb3J0IGNhbGxzIG91dCByYXRoZXIgdGhhbiBmYWlsaW5nIHNpbGVudGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwYWlyTmFtZShwYXJhbXM6IFJlcGFpck5hbWVQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgcHJvZmlsZXMgPSBnZXRQcm9maWxlcyhwYXJhbXMucGxhdGZvcm1zKTtcblxuICBpZiAocHJvZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJ1aWxkTmFtZShwYXJhbXMuYmFzZW5hbWUsIHBhcmFtcy5leHRlbnNpb24pO1xuICB9XG5cbiAgbGV0IGJhc2VuYW1lID0gcGFyYW1zLmJhc2VuYW1lO1xuICBsZXQgZXh0ZW5zaW9uID0gcGFyYW1zLmV4dGVuc2lvbjtcblxuICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgcHJvZmlsZXMpIHtcbiAgICBiYXNlbmFtZSA9IHJlcGxhY2VGb3JiaWRkZW5DaGFyYWN0ZXJzKGJhc2VuYW1lLCBwcm9maWxlLCBwYXJhbXMuZm9yYmlkZGVuQ2hhcmFjdGVyUmVwbGFjZW1lbnQpO1xuICAgIGV4dGVuc2lvbiA9IHJlcGxhY2VGb3JiaWRkZW5DaGFyYWN0ZXJzKGV4dGVuc2lvbiwgcHJvZmlsZSwgcGFyYW1zLmZvcmJpZGRlbkNoYXJhY3RlclJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIC8vIGBub3RlLm1kIGAgcGFyc2VzIGFzIGJhc2VuYW1lIGBub3RlYCArIGV4dGVuc2lvbiBgbWQgYCwgc28gdHJpbW1pbmcgb25seSB0aGUgYmFzZW5hbWUgd291bGQgbGVhdmUgdGhlXG4gIC8vIHRyYWlsaW5nIHNwYWNlIGV4YWN0bHkgd2hlcmUgV2luZG93cyByZWplY3RzIGl0IOKAlCBhdCB0aGUgZW5kIG9mIHRoZSBuYW1lLlxuICBleHRlbnNpb24gPSB0cmltVHJhaWxpbmdEb3RzQW5kU3BhY2VzKGV4dGVuc2lvbiwgcHJvZmlsZXMpO1xuXG4gIC8qXG4gICAqIFRyaW0gQkVGT1JFIHRoZSBkZS1yZXNlcnZpbmcgYmVsb3csIG5ldmVyIGFmdGVyLiBgaXNXaW5kb3dzUmVzZXJ2ZWROYW1lYCB0cmltcyBmb3IgaXRzIG93biBhbnN3ZXIsIHNvXG4gICAqIGBDT04gYCBpcyByZXBvcnRlZCByZXNlcnZlZCBlaXRoZXIgd2F5IOKAlCBidXQgdGhlIHVuZGVyc2NvcmUgaXMgYXBwZW5kZWQgdG8gd2hhdGV2ZXIgaXMgaGVyZSwgYW5kIGFuXG4gICAqIHVudHJpbW1lZCBgQ09OIGAgd291bGQgZGUtcmVzZXJ2ZSB0byBgQ09OIF9gIGluc3RlYWQgb2YgYENPTl9gLlxuICAgKi9cbiAgYmFzZW5hbWUgPSB0cmltVHJhaWxpbmdEb3RzQW5kU3BhY2VzKGJhc2VuYW1lLCBwcm9maWxlcyk7XG5cbiAgLypcbiAgICogVGhlIFJFQlVJTFQgbmFtZSwgbmV2ZXIgdGhlIGJhcmUgYmFzZW5hbWU6IGBwYXJhbXMuYmFzZW5hbWVgIGhhcyBhbHJlYWR5IGhhZCBpdHMgZXh0ZW5zaW9uIHNwbGl0IG9mZixcbiAgICogYW5kIHRoZSBsaWJyYXJ5IGRyb3BzIG9uZSBleHRlbnNpb24gb2YgaXRzIG93biwgc28gcGFzc2luZyB0aGUgYmFzZW5hbWUgd291bGQgc3RyaXAgYSBzZWNvbmQgc2VnbWVudFxuICAgKiBhbmQgY2FsbCBgQ09OLnhgICsgYG1kYCByZXNlcnZlZCDigJQgd2hpY2ggaXMgbm90IHdoYXQgdGhlIHJlcG9ydCBzYXlzIGFib3V0IGBDT04ueC5tZGAuXG4gICAqL1xuICBpZiAocHJvZmlsZXMuc29tZSgocHJvZmlsZSkgPT4gcHJvZmlsZS5oYXNXaW5kb3dzTmFtaW5nUnVsZXMpICYmIGlzV2luZG93c1Jlc2VydmVkTmFtZShidWlsZE5hbWUoYmFzZW5hbWUsIGV4dGVuc2lvbikpKSB7XG4gICAgLy8gQSB0cmFpbGluZyB1bmRlcnNjb3JlIHJhdGhlciB0aGFuIGEgcHJlZml4OiBpdCBrZWVwcyB0aGUgbmFtZSBzb3J0aW5nIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMgaXQuXG4gICAgYmFzZW5hbWUgKz0gJ18nO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXNwcmVhZCAtLSBDb2RlIHBvaW50cyBhcmUgZXhhY3RseSB0aGUgdW5pdCB3YW50ZWQ6IGN1dHRpbmcgYnkgVVRGLTE2IHVuaXQgd291bGQgc3BsaXQgYSBzdXJyb2dhdGUgcGFpciBhbmQgbGVhdmUgaGFsZiBhbiBlbW9qaS5cbiAgY29uc3QgY29kZVBvaW50cyA9IFsuLi5iYXNlbmFtZV07XG5cbiAgd2hpbGUgKGNvZGVQb2ludHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRyaW1UcmFpbGluZ0RvdHNBbmRTcGFjZXMoY29kZVBvaW50cy5qb2luKCcnKSwgcHJvZmlsZXMpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkb2VzRml0RXZlcnlQcm9maWxlKGNhbmRpZGF0ZSwgZXh0ZW5zaW9uLCBwcm9maWxlcywgcGFyYW1zKSkge1xuICAgICAgcmV0dXJuIGJ1aWxkTmFtZShjYW5kaWRhdGUsIGV4dGVuc2lvbik7XG4gICAgfVxuXG4gICAgY29kZVBvaW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBidWlsZE5hbWUoYmFzZW5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0ZW5zaW9uID09PSAnJyA/IGJhc2VuYW1lIDogYCR7YmFzZW5hbWV9LiR7ZXh0ZW5zaW9ufWA7XG59XG5cbmZ1bmN0aW9uIGRvZXNGaXRFdmVyeVByb2ZpbGUoYmFzZW5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcsIHByb2ZpbGVzOiBQYXRoQ29tcGF0aWJpbGl0eVByb2ZpbGVbXSwgcGFyYW1zOiBSZXBhaXJOYW1lUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5hbWUgPSBidWlsZE5hbWUoYmFzZW5hbWUsIGV4dGVuc2lvbik7XG4gIGNvbnN0IHBhdGggPSBwYXJhbXMucGFyZW50UGF0aCA9PT0gJycgPyBuYW1lIDogYCR7cGFyYW1zLnBhcmVudFBhdGh9LyR7bmFtZX1gO1xuXG4gIHJldHVybiBwcm9maWxlcy5ldmVyeSgocHJvZmlsZSkgPT4ge1xuICAgIGNvbnN0IG1heFBhdGhMZW5ndGggPSBwYXJhbXMuaXNGb2xkZXIgPyBwcm9maWxlLm1heEZvbGRlclBhdGhMZW5ndGggOiBwcm9maWxlLm1heEZpbGVQYXRoTGVuZ3RoO1xuICAgIGNvbnN0IGZ1bGxQYXRoTGVuZ3RoID0gcGFyYW1zLm1heFZhdWx0Um9vdFBhdGhMZW5ndGggKyAxICsgbWVhc3VyZShwYXRoLCBwcm9maWxlLnNob3VsZE1lYXN1cmVJbkJ5dGVzKTtcblxuICAgIHJldHVybiBtZWFzdXJlKG5hbWUsIHByb2ZpbGUuc2hvdWxkTWVhc3VyZUluQnl0ZXMpIDw9IHByb2ZpbGUubWF4TmFtZUxlbmd0aCAmJiBmdWxsUGF0aExlbmd0aCA8PSBtYXhQYXRoTGVuZ3RoO1xuICB9KTtcbn1cblxuLypcbiAqIEVhY2ggY2hhcmFjdGVyIG9uY2UsIGluIG9yZGVyIG9mIGZpcnN0IGFwcGVhcmFuY2UuIGBtYXRjaGAgb24gYSBgZ2AtZmxhZ2dlZCByZWdleHAgcmV0dXJucyBldmVyeSBtYXRjaCBhbmRcbiAqIGlnbm9yZXMgYGxhc3RJbmRleGAsIHNvIHRoZSBzaGFyZWQgY29uc3RhbnRzIGFyZSBzYWZlIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRDaGFyYWN0ZXJzKG5hbWU6IHN0cmluZywgcmVnRXhwOiBSZWdFeHApOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4ubmV3IFNldChuYW1lLm1hdGNoKHJlZ0V4cCkpXTtcbn1cblxuZnVuY3Rpb24gZ2V0TmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbGFzaEluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLycpO1xuICByZXR1cm4gc2xhc2hJbmRleCA9PT0gLTEgPyBwYXRoIDogcGF0aC5zbGljZShzbGFzaEluZGV4ICsgMSk7XG59XG5cbi8qXG4gKiBCb3RoIGZsYWdzIGV4cGxpY2l0bHk6IHRoZSBsaWJyYXJ5IGRlZmF1bHRzIGFuIG9taXR0ZWQgb25lIHRvIHRoZSBwbGF0Zm9ybSBSVU5OSU5HIHRoZSBjaGVjaywgd2hpY2ggd291bGQgbWFrZVxuICogdGhlIEFuZHJvaWQgcHJvZmlsZSdzIHZlcmRpY3QgZGVwZW5kIG9uIHdoZXJlIHRoZSBjaGVjayBydW5zIHJhdGhlciB0aGFuIG9uIHRoZSBwcm9maWxlLiBBbmRyb2lkJ3Mgc2hhcmVkXG4gKiBzdG9yYWdlIHJlZnVzZXMgYCogPyA8ID4gXCJgIHRvbzogT2JzaWRpYW4gU3luYyBpdHNlbGYgc2tpcHMgc3VjaCBhIHJlbW90ZSBuYW1lIG9uIEFuZHJvaWQuXG4gKi9cbmZ1bmN0aW9uIGdldFBsYXRmb3JtRm9yYmlkZGVuQ2hhcmFjdGVyc1JlZ0V4cChwcm9maWxlOiBQYXRoQ29tcGF0aWJpbGl0eVByb2ZpbGUpOiBSZWdFeHAge1xuICByZXR1cm4gZ2V0T3NVbnNhZmVQYXRoQ2hhcnNSZWdFeHAocHJvZmlsZS5oYXNXaW5kb3dzTmFtaW5nUnVsZXMsIHByb2ZpbGUucGxhdGZvcm0gPT09IFBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0uQW5kcm9pZCk7XG59XG5cbmZ1bmN0aW9uIGdldFByb2ZpbGVzKHBsYXRmb3JtczogcmVhZG9ubHkgUGF0aENvbXBhdGliaWxpdHlQbGF0Zm9ybVtdKTogUGF0aENvbXBhdGliaWxpdHlQcm9maWxlW10ge1xuICByZXR1cm4gcGxhdGZvcm1zLm1hcCgocGxhdGZvcm0pID0+IFBBVEhfQ09NUEFUSUJJTElUWV9QUk9GSUxFU1twbGF0Zm9ybV0pO1xufVxuXG4vKlxuICogYHJlcGxhY2VgIHJhdGhlciB0aGFuIGB0ZXN0YDogdGhlIGxpYnJhcnkncyByZWdleHBzIGNhcnJ5IHRoZSBgZ2AgZmxhZywgYW5kIGB0ZXN0YCBvbiBhIGBnYC1mbGFnZ2VkIHJlZ2V4cFxuICogYWR2YW5jZXMgYGxhc3RJbmRleGAsIHNvIGNvbnNlY3V0aXZlIGNhbGxzIG9uIHRoZSBzYW1lIGNvbnN0YW50IGFuc3dlciBkaWZmZXJlbnRseS5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUZvcmJpZGRlbkNoYXJhY3RlcnMoJHN0cmluZzogc3RyaW5nLCBwcm9maWxlOiBQYXRoQ29tcGF0aWJpbGl0eVByb2ZpbGUsIHJlcGxhY2VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvKlxuICAgKiBPbmUgcmVwbGFjZW1lbnQgcGVyIGZvcmJpZGRlbiBjaGFyYWN0ZXIgcmF0aGVyIHRoYW4gb25lIHBlciBydW46IGl0IGtlZXBzIHRoZSBuYW1lJ3MgdmlzdWFsIHN0cnVjdHVyZSxcbiAgICogd2hpY2ggaXMgd2hhdCBtYWtlcyB0aGUgcmVwYWlyZWQgbmFtZSBzdGlsbCByZWNvZ25pemFibGUgdG8gd2hvZXZlciB3cm90ZSBpdC4gTm90aGluZyBpcyBsb3N0IGVpdGhlciB3YXkg4oCUXG4gICAqIHRoZSBvcmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZCBpbiB0aGUgbm90ZSdzIGZyb250bWF0dGVyLiBBIHJlcGxhY2VyIEZVTkNUSU9OLCBzbyBhIGAkJmAgaW4gdGhlXG4gICAqIHJlcGxhY2VtZW50IGlzIG5vdCBleHBhbmRlZCBhcyBhIGJhY2tyZWZlcmVuY2UuXG4gICAqL1xuICByZXR1cm4gJHN0cmluZ1xuICAgIC5yZXBsYWNlKGdldFBsYXRmb3JtRm9yYmlkZGVuQ2hhcmFjdGVyc1JlZ0V4cChwcm9maWxlKSwgKCkgPT4gcmVwbGFjZW1lbnQpXG4gICAgLnJlcGxhY2UoT0JTSURJQU5fVU5TQUZFX0ZJTEVOQU1FX0NIQVJTLCAoKSA9PiByZXBsYWNlbWVudCk7XG59XG5cbi8qXG4gKiBUaGUgcHJvZmlsZSBndWFyZCBpcyB0aGUgcGx1Z2luJ3MsIG5vdCB0aGUgbGlicmFyeSdzOiB0aGUgbGlicmFyeSBhbnN3ZXJzIGZvciBXaW5kb3dzIHVuY29uZGl0aW9uYWxseSwgYW5kXG4gKiB0aGlzIGRlY2lkZXMgd2hldGhlciBXaW5kb3dzIGlzIG9uZSBvZiB0aGUgcGxhdGZvcm1zIHRoZSB2YXVsdCBoYXMgdG8gc2F0aXNmeS5cbiAqL1xuZnVuY3Rpb24gdHJpbVRyYWlsaW5nRG90c0FuZFNwYWNlcygkc3RyaW5nOiBzdHJpbmcsIHByb2ZpbGVzOiBQYXRoQ29tcGF0aWJpbGl0eVByb2ZpbGVbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwcm9maWxlcy5zb21lKChwcm9maWxlKSA9PiBwcm9maWxlLmhhc1dpbmRvd3NOYW1pbmdSdWxlcykgPyB0cmltV2luZG93c1RyYWlsaW5nQ2hhcnMoJHN0cmluZykgOiAkc3RyaW5nO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0Esc0JBQXlCO0FBRXpCLHdC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Q0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDeEM7QUFFQSxTQUFTLFFBQVEsTUFBc0I7QUFDckMsUUFBTSxhQUFhLEtBQUssWUFBWSxHQUFHO0FBQ3ZDLFNBQU8sZUFBZSxLQUFLLE9BQU8sS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUM3RDtBQU9BLFNBQVMscUNBQXFDLFNBQTJDO0FBQ3ZGLGFBQU8sOENBQTJCLFFBQVEsdUJBQXVCLFFBQVEsYUFBYSx1QkFBaUM7QUFDekg7QUFFQSxTQUFTLFlBQVksV0FBNkU7QUFDaEcsU0FBTyxVQUFVLElBQUksQ0FBQyxhQUFhLDRCQUE0QixRQUFRLENBQUM7QUFDMUU7QUFNQSxTQUFTLDJCQUEyQixTQUFpQixTQUFtQyxhQUE2QjtBQU9uSCxTQUFPLFFBQ0osUUFBUSxxQ0FBcUMsT0FBTyxHQUFHLE1BQU0sV0FBVyxFQUN4RSxRQUFRLGtEQUFnQyxNQUFNLFdBQVc7QUFDOUQ7QUFNQSxTQUFTLDBCQUEwQixTQUFpQixVQUE4QztBQUNoRyxTQUFPLFNBQVMsS0FBSyxDQUFDLFlBQVksUUFBUSxxQkFBcUIsUUFBSSw0Q0FBeUIsT0FBTyxJQUFJO0FBQ3pHOyIsIm5hbWVzIjpbIlBhdGhDb21wYXRpYmlsaXR5UGxhdGZvcm0iLCJQYXRoQ29tcGF0aWJpbGl0eVZpb2xhdGlvblR5cGUiXX0=