@mnaoumov/obsidian-lib 7.0.0 → 8.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 (361) hide show
  1. package/components/incremental-file-index-component/package.json +6 -0
  2. package/dist/lib/cjs/__merged.cjs +20 -6
  3. package/dist/lib/cjs/__merged.d.cts +2 -0
  4. package/dist/lib/cjs/active-file-provider.cjs +6 -6
  5. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  6. package/dist/lib/cjs/app.cjs +5 -5
  7. package/dist/lib/cjs/async-with-notice.cjs +5 -5
  8. package/dist/lib/cjs/attachment-path.cjs +6 -6
  9. package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
  10. package/dist/lib/cjs/backlink-index.cjs +13 -19
  11. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  12. package/dist/lib/cjs/backlink.cjs +5 -5
  13. package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
  14. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  15. package/dist/lib/cjs/callout.cjs +5 -5
  16. package/dist/lib/cjs/canvas.cjs +5 -5
  17. package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
  18. package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
  19. package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
  20. package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
  21. package/dist/lib/cjs/codemirror/index.cjs +5 -5
  22. package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
  23. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
  24. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
  25. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
  26. package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
  27. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
  28. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
  29. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
  30. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
  31. package/dist/lib/cjs/command-handlers/index.cjs +5 -5
  32. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
  33. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
  34. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
  35. package/dist/lib/cjs/command-registrar.cjs +6 -6
  36. package/dist/lib/cjs/command-registrar.d.cts +2 -2
  37. package/dist/lib/cjs/community-plugins.cjs +6 -6
  38. package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
  39. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  40. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  41. package/dist/lib/cjs/components/async-events-component.cjs +5 -5
  42. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
  43. package/dist/lib/cjs/components/component-ex.cjs +5 -5
  44. package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
  45. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
  46. package/dist/lib/cjs/components/disposable-component.cjs +5 -5
  47. package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
  48. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
  49. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
  50. package/dist/lib/cjs/components/incremental-file-index-component.cjs +340 -0
  51. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +152 -0
  52. package/dist/lib/cjs/components/index.cjs +9 -6
  53. package/dist/lib/cjs/components/index.d.cts +1 -0
  54. package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
  55. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
  56. package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
  57. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  58. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  59. package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
  60. package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
  61. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
  62. package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
  63. package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
  64. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
  65. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
  66. package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
  67. package/dist/lib/cjs/components/registry-component.cjs +5 -5
  68. package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
  69. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
  70. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
  71. package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
  72. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  73. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
  74. package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
  75. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  76. package/dist/lib/cjs/constructors/index.cjs +5 -5
  77. package/dist/lib/cjs/css-class.cjs +5 -5
  78. package/dist/lib/cjs/data-handler.cjs +6 -6
  79. package/dist/lib/cjs/data-handler.d.cts +2 -2
  80. package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
  81. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  82. package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
  83. package/dist/lib/cjs/data-stores/index.cjs +5 -5
  84. package/dist/lib/cjs/data-stores/local-data-store.cjs +5 -5
  85. package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
  86. package/dist/lib/cjs/dataview-link.cjs +5 -5
  87. package/dist/lib/cjs/dataview.cjs +12 -12
  88. package/dist/lib/cjs/dataview.d.cts +6 -6
  89. package/dist/lib/cjs/debug.cjs +5 -5
  90. package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
  91. package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
  92. package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
  93. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
  94. package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
  95. package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
  96. package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
  97. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  98. package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
  99. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  100. package/dist/lib/cjs/editor.cjs +5 -5
  101. package/dist/lib/cjs/events.cjs +5 -5
  102. package/dist/lib/cjs/extensions-registrar.cjs +6 -6
  103. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  104. package/dist/lib/cjs/file-change.cjs +6 -6
  105. package/dist/lib/cjs/file-change.d.cts +3 -3
  106. package/dist/lib/cjs/file-explorer.cjs +5 -5
  107. package/dist/lib/cjs/file-manager.cjs +5 -5
  108. package/dist/lib/cjs/file-system.cjs +5 -5
  109. package/dist/lib/cjs/folder-note.cjs +6 -6
  110. package/dist/lib/cjs/folder-note.d.cts +1 -1
  111. package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
  112. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
  113. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
  114. package/dist/lib/cjs/frontmatter.cjs +6 -6
  115. package/dist/lib/cjs/frontmatter.d.cts +7 -7
  116. package/dist/lib/cjs/generated-during-build.cjs +7 -7
  117. package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
  118. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  119. package/dist/lib/cjs/html-element.cjs +5 -5
  120. package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
  121. package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
  122. package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
  123. package/dist/lib/cjs/i18n/i18n.cjs +5 -5
  124. package/dist/lib/cjs/i18n/index.cjs +5 -5
  125. package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
  126. package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
  127. package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
  128. package/dist/lib/cjs/index.cjs +9 -6
  129. package/dist/lib/cjs/index.d.cts +1 -0
  130. package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
  131. package/dist/lib/cjs/library-styles.cjs +5 -5
  132. package/dist/lib/cjs/library.cjs +5 -5
  133. package/dist/lib/cjs/link-name.cjs +5 -5
  134. package/dist/lib/cjs/link-update-progress.cjs +5 -5
  135. package/dist/lib/cjs/link.cjs +7 -7
  136. package/dist/lib/cjs/link.d.cts +2 -2
  137. package/dist/lib/cjs/logger.cjs +5 -5
  138. package/dist/lib/cjs/loop.cjs +5 -5
  139. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
  140. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
  141. package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
  142. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
  143. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
  144. package/dist/lib/cjs/markdown-view.cjs +5 -5
  145. package/dist/lib/cjs/markdown.cjs +5 -5
  146. package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
  147. package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
  148. package/dist/lib/cjs/metadata-cache.cjs +6 -6
  149. package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
  150. package/dist/lib/cjs/modals/alert.cjs +5 -5
  151. package/dist/lib/cjs/modals/confirm.cjs +5 -5
  152. package/dist/lib/cjs/modals/index.cjs +5 -5
  153. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  154. package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
  155. package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
  156. package/dist/lib/cjs/modals/modal.cjs +5 -5
  157. package/dist/lib/cjs/modals/prompt.cjs +14 -14
  158. package/dist/lib/cjs/modals/select-item.cjs +5 -5
  159. package/dist/lib/cjs/modals/select-option.cjs +5 -5
  160. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
  161. package/dist/lib/cjs/note-priority.cjs +5 -5
  162. package/dist/lib/cjs/notebook-navigator.cjs +6 -6
  163. package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
  164. package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
  165. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
  166. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  167. package/dist/lib/cjs/obsidian-settings.cjs +5 -5
  168. package/dist/lib/cjs/obsidian-word-characters.cjs +231 -0
  169. package/dist/lib/cjs/obsidian-word-characters.d.cts +59 -0
  170. package/dist/lib/cjs/parse-link.cjs +6 -6
  171. package/dist/lib/cjs/parse-link.d.cts +2 -2
  172. package/dist/lib/cjs/path-settings.cjs +6 -6
  173. package/dist/lib/cjs/pdf.cjs +5 -5
  174. package/dist/lib/cjs/plugin/index.cjs +5 -5
  175. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
  176. package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
  177. package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
  178. package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
  179. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  180. package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
  181. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
  182. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
  183. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
  184. package/dist/lib/cjs/plugin/plugin.cjs +6 -6
  185. package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
  186. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  187. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
  188. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  189. package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
  190. package/dist/lib/cjs/popovers/index.cjs +5 -5
  191. package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
  192. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  193. package/dist/lib/cjs/property-entry.cjs +5 -5
  194. package/dist/lib/cjs/queue.cjs +6 -6
  195. package/dist/lib/cjs/react/app-context.cjs +5 -5
  196. package/dist/lib/cjs/react/index.cjs +5 -5
  197. package/dist/lib/cjs/reference.cjs +6 -6
  198. package/dist/lib/cjs/reference.d.cts +6 -6
  199. package/dist/lib/cjs/resource-lock.cjs +6 -6
  200. package/dist/lib/cjs/resource-url.cjs +5 -5
  201. package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
  202. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
  203. package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
  204. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
  205. package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
  206. package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
  207. package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
  208. package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
  209. package/dist/lib/cjs/setting-components/index.cjs +5 -5
  210. package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
  211. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
  212. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
  213. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
  214. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
  215. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
  216. package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
  217. package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
  218. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
  219. package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
  220. package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
  221. package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
  222. package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
  223. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
  224. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
  225. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
  226. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
  227. package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
  228. package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
  229. package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
  230. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
  231. package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
  232. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
  233. package/dist/lib/cjs/setting-ex.cjs +5 -5
  234. package/dist/lib/cjs/setting-group-ex.cjs +5 -5
  235. package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
  236. package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
  237. package/dist/lib/cjs/templater.cjs +6 -6
  238. package/dist/lib/cjs/templater.d.cts +9 -9
  239. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
  240. package/dist/lib/cjs/transformers/index.cjs +5 -5
  241. package/dist/lib/cjs/trusted-input.cjs +5 -5
  242. package/dist/lib/cjs/validation.cjs +6 -6
  243. package/dist/lib/cjs/validation.d.cts +1 -1
  244. package/dist/lib/cjs/vault-delete.cjs +5 -5
  245. package/dist/lib/cjs/vault-transaction.cjs +6 -6
  246. package/dist/lib/cjs/vault.cjs +5 -5
  247. package/dist/lib/cjs/view-registrar.cjs +6 -6
  248. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  249. package/dist/lib/cjs/workspace.cjs +5 -5
  250. package/dist/lib/esm/__merged.d.mts +2 -0
  251. package/dist/lib/esm/__merged.mjs +15 -1
  252. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  253. package/dist/lib/esm/active-file-provider.mjs +1 -1
  254. package/dist/lib/esm/attachment-path.mjs +1 -1
  255. package/dist/lib/esm/backlink-index.d.mts +1 -1
  256. package/dist/lib/esm/backlink-index.mjs +8 -14
  257. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  258. package/dist/lib/esm/bases-view-registrar.mjs +1 -1
  259. package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
  260. package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
  261. package/dist/lib/esm/command-registrar.d.mts +2 -2
  262. package/dist/lib/esm/command-registrar.mjs +1 -1
  263. package/dist/lib/esm/community-plugins.mjs +1 -1
  264. package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
  265. package/dist/lib/esm/components/incremental-file-index-component.d.mts +152 -0
  266. package/dist/lib/esm/components/incremental-file-index-component.mjs +260 -0
  267. package/dist/lib/esm/components/index.d.mts +1 -0
  268. package/dist/lib/esm/components/index.mjs +3 -1
  269. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
  270. package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
  271. package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
  272. package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
  273. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
  274. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  275. package/dist/lib/esm/data-handler.d.mts +2 -2
  276. package/dist/lib/esm/data-handler.mjs +1 -1
  277. package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
  278. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  279. package/dist/lib/esm/dataview.d.mts +6 -6
  280. package/dist/lib/esm/dataview.mjs +7 -7
  281. package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
  282. package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
  283. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  284. package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
  285. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  286. package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
  287. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  288. package/dist/lib/esm/extensions-registrar.mjs +1 -1
  289. package/dist/lib/esm/file-change.d.mts +3 -3
  290. package/dist/lib/esm/file-change.mjs +1 -1
  291. package/dist/lib/esm/folder-note.d.mts +1 -1
  292. package/dist/lib/esm/folder-note.mjs +1 -1
  293. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
  294. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
  295. package/dist/lib/esm/frontmatter.d.mts +7 -7
  296. package/dist/lib/esm/frontmatter.mjs +1 -1
  297. package/dist/lib/esm/generated-during-build.mjs +2 -2
  298. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  299. package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
  300. package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
  301. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
  302. package/dist/lib/esm/index.d.mts +1 -0
  303. package/dist/lib/esm/index.mjs +3 -1
  304. package/dist/lib/esm/link.d.mts +2 -2
  305. package/dist/lib/esm/link.mjs +2 -2
  306. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
  307. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
  308. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
  309. package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
  310. package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
  311. package/dist/lib/esm/metadata-cache.mjs +1 -1
  312. package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
  313. package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
  314. package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
  315. package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
  316. package/dist/lib/esm/modals/prompt.mjs +9 -9
  317. package/dist/lib/esm/notebook-navigator.d.mts +3 -3
  318. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  319. package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
  320. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  321. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
  322. package/dist/lib/esm/obsidian-word-characters.d.mts +59 -0
  323. package/dist/lib/esm/obsidian-word-characters.mjs +139 -0
  324. package/dist/lib/esm/parse-link.d.mts +2 -2
  325. package/dist/lib/esm/parse-link.mjs +1 -1
  326. package/dist/lib/esm/path-settings.mjs +1 -1
  327. package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
  328. package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
  329. package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
  330. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  331. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  332. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
  333. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
  334. package/dist/lib/esm/plugin/plugin.mjs +1 -1
  335. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  336. package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
  337. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  338. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
  339. package/dist/lib/esm/queue.mjs +1 -1
  340. package/dist/lib/esm/reference.d.mts +6 -6
  341. package/dist/lib/esm/reference.mjs +1 -1
  342. package/dist/lib/esm/resource-lock.mjs +1 -1
  343. package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
  344. package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
  345. package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
  346. package/dist/lib/esm/setting-components/month-component.mjs +1 -1
  347. package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
  348. package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
  349. package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
  350. package/dist/lib/esm/setting-components/week-component.mjs +1 -1
  351. package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
  352. package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
  353. package/dist/lib/esm/templater.d.mts +9 -9
  354. package/dist/lib/esm/templater.mjs +1 -1
  355. package/dist/lib/esm/validation.d.mts +1 -1
  356. package/dist/lib/esm/validation.mjs +1 -1
  357. package/dist/lib/esm/vault-transaction.mjs +1 -1
  358. package/dist/lib/esm/view-registrar.d.mts +1 -1
  359. package/dist/lib/esm/view-registrar.mjs +1 -1
  360. package/dist/styles.css +2 -2
  361. package/package.json +6 -3
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -169,4 +169,4 @@ function initPluginContext(pluginId) {
169
169
  initDebugController,
170
170
  initPluginContext
171
171
  });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gY29udGV4dCBhbmQgc2V0cyB1cCB0aGUgcGx1Z2luIElELlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVidWdDb250cm9sbGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnLWNvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFNoYXJlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hYm9ydC1jb250cm9sbGVyJztcbmltcG9ydCB7IGdldERlYnVnQ29udHJvbGxlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zyc7XG5pbXBvcnQgeyBMaWJyYXJ5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2xpYnJhcnknO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBzaG93SW5pdGlhbERlYnVnTWVzc2FnZSB9IGZyb20gJy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIExJQlJBUllfU1RZTEVTLFxuICBMSUJSQVJZX1ZFUlNJT05cbn0gZnJvbSAnLi4vZ2VuZXJhdGVkLWR1cmluZy1idWlsZC50cyc7XG5pbXBvcnQgeyBpbmplY3RMaWJyYXJ5U3R5bGVzIH0gZnJvbSAnLi4vbGlicmFyeS1zdHlsZXMudHMnO1xuaW1wb3J0IHtcbiAgT0JTSURJQU5fTElCUkFSWV9OQU1FLFxuICBPYnNpZGlhbkxpYnJhcnlcbn0gZnJvbSAnLi4vbGlicmFyeS50cyc7XG5cbmludGVyZmFjZSBQbHVnaW5Db250ZXh0V2luZG93IHtcbiAgREVCVUc6IERlYnVnQ29udHJvbGxlciB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgREVCVUdfR1VJREVfVVJMID0gJ2h0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWxpYi9ndWlkZXMvZGVidWdnaW5nLyc7XG5cbi8qKlxuICogU2V0cyB0aGUgQ1NTIGNsYXNzIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBzZXQgdGhlIENTUyBjbGFzcyBvZi5cbiAqIEBwYXJhbSBjc3NDbGFzc2VzIC0gVGhlIENTUyBjbGFzc2VzIHRvIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFBsdWdpbkNzc0NsYXNzZXMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNzc0NsYXNzZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBleHRyYUNzc0NsYXNzZXMgPSB0eXBlb2YgY3NzQ2xhc3NlcyA9PT0gJ3N0cmluZycgPyBbY3NzQ2xhc3Nlc10gOiBjc3NDbGFzc2VzID8/IFtdO1xuICBlbGVtZW50LmFkZENsYXNzKFxuICAgIENzc0NsYXNzLkxpYnJhcnlOYW1lLFxuICAgIC8vIFRoZSBzY29wZSBpcyBlbXB0eSB1bnRpbCB0aGUgcGx1Z2luIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQ7IHNraXAgaXQgc28gd2UgbmV2ZXIgYWRkIGFuIGVtcHR5IGNsYXNzLlxuICAgIC4uLihPYnNpZGlhbkxpYnJhcnkuY3NzQ2xhc3NTY29wZSA/IFtPYnNpZGlhbkxpYnJhcnkuY3NzQ2xhc3NTY29wZV0gOiBbXSksXG4gICAgLi4uZXh0cmFDc3NDbGFzc2VzXG4gICk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHdpbiAtIFRoZSB3aW5kb3cgdG8gaW5pdGlhbGl6ZSB0aGUgZGVidWcgY29udHJvbGxlciBmb3IuXG4gKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byByZWdpc3RlciBjbGVhbnVwIG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdERlYnVnQ29udHJvbGxlcih3aW46IFdpbmRvdywgY29tcG9uZW50OiBDb21wb25lbnQpOiB2b2lkIHtcbiAgY29uc3QgcGx1Z2luQ29udGV4dFdpbmRvdyA9IHdpbiBhcyBQYXJ0aWFsPFBsdWdpbkNvbnRleHRXaW5kb3c+O1xuICBjb25zdCBvbGREZWJ1ZyA9IHBsdWdpbkNvbnRleHRXaW5kb3cuREVCVUc7XG4gIGNvbnN0IG5ld0RlYnVnID0gZ2V0RGVidWdDb250cm9sbGVyKCk7XG4gIHBsdWdpbkNvbnRleHRXaW5kb3cuREVCVUcgPSBuZXdEZWJ1ZztcblxuICBjb21wb25lbnQucmVnaXN0ZXIoKCkgPT4ge1xuICAgIGlmIChwbHVnaW5Db250ZXh0V2luZG93LkRFQlVHID09PSBuZXdEZWJ1Zykge1xuICAgICAgcGx1Z2luQ29udGV4dFdpbmRvdy5ERUJVRyA9IG9sZERlYnVnO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0UGx1Z2luQ29udGV4dChwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gIE9ic2lkaWFuTGlicmFyeS5pbml0KHsgY3NzQ2xhc3NTY29wZTogcGx1Z2luSWQgfSk7XG4gIExpYnJhcnkuaW5pdCh7XG4gICAgZGVidWdHdWlkZVVybDogREVCVUdfR1VJREVfVVJMLFxuICAgIGRlYnVnTmFtZXNwYWNlOiBPQlNJRElBTl9MSUJSQVJZX05BTUUsXG4gICAgZGVidWdQcmVmaXhOYW1lc3BhY2U6IGAke3BsdWdpbklkfTpgLFxuICAgIHNob3VsZFByaW50U3RhY2tUcmFjZTogdHJ1ZVxuICB9KTtcbiAgc2hvd0luaXRpYWxEZWJ1Z01lc3NhZ2UocGx1Z2luSWQpO1xuXG4gIC8vIE5vdGhpbmcgZWxzZSBpbiB0aGUgbGlicmFyeSByZWFjaGVzIGZvciB0aGUgc2hhcmVkIGFib3J0IGNvbnRyb2xsZXIgLS0gb25seSBjb25zdW1lciBwbHVnaW5zIGRvLiBDcmVhdGVcbiAgLy8gaXQgaGVyZSBzbyB0aGUgZGV2dG9vbHMgY29uc29sZSByZWNpcGUgaW4gdGhlIGRlYnVnZ2luZyBndWlkZSBhbHdheXMgcmVzb2x2ZXMsIGluc3RlYWQgb2YgdGhyb3dpbmcgdW50aWwgc29tZVxuICAvLyBwbHVnaW4gaGFwcGVucyB0byBzdGFydCBhbiBhYm9ydGFibGUgb3BlcmF0aW9uLlxuICBnZXRTaGFyZWRBYm9ydENvbnRyb2xsZXIoKTtcblxuICBpbmplY3RMaWJyYXJ5U3R5bGVzKHtcbiAgICBkb2M6IGRvY3VtZW50LFxuICAgIGxpYnJhcnlTdHlsZXM6IExJQlJBUllfU1RZTEVTLFxuICAgIGxpYnJhcnlWZXJzaW9uOiBMSUJSQVJZX1ZFUlNJT05cbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsOEJBQXlDO0FBQ3pDLG1CQUFtQztBQUNuQyxxQkFBd0I7QUFFeEIsdUJBQXlCO0FBQ3pCLElBQUFBLGdCQUF3QztBQUN4QyxvQ0FHTztBQUNQLDRCQUFvQztBQUNwQyxJQUFBQyxrQkFHTztBQU1QLE1BQU0sa0JBQWtCO0FBUWpCLFNBQVMsb0JBQW9CLFNBQXNCLFlBQXNDO0FBQzlGLFFBQU0sa0JBQWtCLE9BQU8sZUFBZSxXQUFXLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQztBQUN2RixVQUFRO0FBQUEsSUFDTiwwQkFBUztBQUFBLElBRVQsR0FBSSxnQ0FBZ0IsZ0JBQWdCLENBQUMsZ0NBQWdCLGFBQWEsSUFBSSxDQUFDO0FBQUEsSUFDdkUsR0FBRztBQUFBLEVBQ0w7QUFDRjtBQVFPLFNBQVMsb0JBQW9CLEtBQWEsV0FBNEI7QUFDM0UsUUFBTSxzQkFBc0I7QUFDNUIsUUFBTSxXQUFXLG9CQUFvQjtBQUNyQyxRQUFNLGVBQVcsaUNBQW1CO0FBQ3BDLHNCQUFvQixRQUFRO0FBRTVCLFlBQVUsU0FBUyxNQUFNO0FBQ3ZCLFFBQUksb0JBQW9CLFVBQVUsVUFBVTtBQUMxQywwQkFBb0IsUUFBUTtBQUFBLElBQzlCO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFPTyxTQUFTLGtCQUFrQixVQUF3QjtBQUN4RCxrQ0FBZ0IsS0FBSyxFQUFFLGVBQWUsU0FBUyxDQUFDO0FBQ2hELHlCQUFRLEtBQUs7QUFBQSxJQUNYLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLHNCQUFzQixHQUFHLFFBQVE7QUFBQSxJQUNqQyx1QkFBdUI7QUFBQSxFQUN6QixDQUFDO0FBQ0QsNkNBQXdCLFFBQVE7QUFLaEMsd0RBQXlCO0FBRXpCLGlEQUFvQjtBQUFBLElBQ2xCLEtBQUs7QUFBQSxJQUNMLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLEVBQ2xCLENBQUM7QUFDSDsiLCJuYW1lcyI6WyJpbXBvcnRfZGVidWciLCJpbXBvcnRfbGlicmFyeSJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gY29udGV4dCBhbmQgc2V0cyB1cCB0aGUgcGx1Z2luIElELlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVidWdDb250cm9sbGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnLWNvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFNoYXJlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hYm9ydC1jb250cm9sbGVyJztcbmltcG9ydCB7IGdldERlYnVnQ29udHJvbGxlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zyc7XG5pbXBvcnQgeyBMaWJyYXJ5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2xpYnJhcnknO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBzaG93SW5pdGlhbERlYnVnTWVzc2FnZSB9IGZyb20gJy4uL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIExJQlJBUllfU1RZTEVTLFxuICBMSUJSQVJZX1ZFUlNJT05cbn0gZnJvbSAnLi4vZ2VuZXJhdGVkLWR1cmluZy1idWlsZC50cyc7XG5pbXBvcnQgeyBpbmplY3RMaWJyYXJ5U3R5bGVzIH0gZnJvbSAnLi4vbGlicmFyeS1zdHlsZXMudHMnO1xuaW1wb3J0IHtcbiAgT0JTSURJQU5fTElCUkFSWV9OQU1FLFxuICBPYnNpZGlhbkxpYnJhcnlcbn0gZnJvbSAnLi4vbGlicmFyeS50cyc7XG5cbmludGVyZmFjZSBQbHVnaW5Db250ZXh0V2luZG93IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gUGx1Z2luIGNvbnRleHQgc2V0dXAgaW5zdGFsbHMgb3IgcmVwbGFjZXMgdGhlIGRlYnVnIGNvbnRyb2xsZXIuXG4gIERFQlVHOiBEZWJ1Z0NvbnRyb2xsZXIgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IERFQlVHX0dVSURFX1VSTCA9ICdodHRwczovL21uYW91bW92LmRldi9vYnNpZGlhbi1saWIvZ3VpZGVzL2RlYnVnZ2luZy8nO1xuXG4vKipcbiAqIFNldHMgdGhlIENTUyBjbGFzcyBvZiBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBDU1MgY2xhc3Mgb2YuXG4gKiBAcGFyYW0gY3NzQ2xhc3NlcyAtIFRoZSBDU1MgY2xhc3NlcyB0byBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRQbHVnaW5Dc3NDbGFzc2VzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjc3NDbGFzc2VzPzogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgZXh0cmFDc3NDbGFzc2VzID0gdHlwZW9mIGNzc0NsYXNzZXMgPT09ICdzdHJpbmcnID8gW2Nzc0NsYXNzZXNdIDogY3NzQ2xhc3NlcyA/PyBbXTtcbiAgZWxlbWVudC5hZGRDbGFzcyhcbiAgICBDc3NDbGFzcy5MaWJyYXJ5TmFtZSxcbiAgICAvLyBUaGUgc2NvcGUgaXMgZW1wdHkgdW50aWwgdGhlIHBsdWdpbiBjb250ZXh0IGlzIGluaXRpYWxpemVkOyBza2lwIGl0IHNvIHdlIG5ldmVyIGFkZCBhbiBlbXB0eSBjbGFzcy5cbiAgICAuLi4oT2JzaWRpYW5MaWJyYXJ5LmNzc0NsYXNzU2NvcGUgPyBbT2JzaWRpYW5MaWJyYXJ5LmNzc0NsYXNzU2NvcGVdIDogW10pLFxuICAgIC4uLmV4dHJhQ3NzQ2xhc3Nlc1xuICApO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBkZWJ1ZyBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB3aW4gLSBUaGUgd2luZG93IHRvIGluaXRpYWxpemUgdGhlIGRlYnVnIGNvbnRyb2xsZXIgZm9yLlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdG8gcmVnaXN0ZXIgY2xlYW51cCBvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXREZWJ1Z0NvbnRyb2xsZXIod2luOiBXaW5kb3csIGNvbXBvbmVudDogQ29tcG9uZW50KTogdm9pZCB7XG4gIGNvbnN0IHBsdWdpbkNvbnRleHRXaW5kb3cgPSB3aW4gYXMgUGFydGlhbDxQbHVnaW5Db250ZXh0V2luZG93PjtcbiAgY29uc3Qgb2xkRGVidWcgPSBwbHVnaW5Db250ZXh0V2luZG93LkRFQlVHO1xuICBjb25zdCBuZXdEZWJ1ZyA9IGdldERlYnVnQ29udHJvbGxlcigpO1xuICBwbHVnaW5Db250ZXh0V2luZG93LkRFQlVHID0gbmV3RGVidWc7XG5cbiAgY29tcG9uZW50LnJlZ2lzdGVyKCgpID0+IHtcbiAgICBpZiAocGx1Z2luQ29udGV4dFdpbmRvdy5ERUJVRyA9PT0gbmV3RGVidWcpIHtcbiAgICAgIHBsdWdpbkNvbnRleHRXaW5kb3cuREVCVUcgPSBvbGREZWJ1ZztcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgcGx1Z2luIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdFBsdWdpbkNvbnRleHQocGx1Z2luSWQ6IHN0cmluZyk6IHZvaWQge1xuICBPYnNpZGlhbkxpYnJhcnkuaW5pdCh7IGNzc0NsYXNzU2NvcGU6IHBsdWdpbklkIH0pO1xuICBMaWJyYXJ5LmluaXQoe1xuICAgIGRlYnVnR3VpZGVVcmw6IERFQlVHX0dVSURFX1VSTCxcbiAgICBkZWJ1Z05hbWVzcGFjZTogT0JTSURJQU5fTElCUkFSWV9OQU1FLFxuICAgIGRlYnVnUHJlZml4TmFtZXNwYWNlOiBgJHtwbHVnaW5JZH06YCxcbiAgICBzaG91bGRQcmludFN0YWNrVHJhY2U6IHRydWVcbiAgfSk7XG4gIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkKTtcblxuICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGxpYnJhcnkgcmVhY2hlcyBmb3IgdGhlIHNoYXJlZCBhYm9ydCBjb250cm9sbGVyIC0tIG9ubHkgY29uc3VtZXIgcGx1Z2lucyBkby4gQ3JlYXRlXG4gIC8vIGl0IGhlcmUgc28gdGhlIGRldnRvb2xzIGNvbnNvbGUgcmVjaXBlIGluIHRoZSBkZWJ1Z2dpbmcgZ3VpZGUgYWx3YXlzIHJlc29sdmVzLCBpbnN0ZWFkIG9mIHRocm93aW5nIHVudGlsIHNvbWVcbiAgLy8gcGx1Z2luIGhhcHBlbnMgdG8gc3RhcnQgYW4gYWJvcnRhYmxlIG9wZXJhdGlvbi5cbiAgZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgaW5qZWN0TGlicmFyeVN0eWxlcyh7XG4gICAgZG9jOiBkb2N1bWVudCxcbiAgICBsaWJyYXJ5U3R5bGVzOiBMSUJSQVJZX1NUWUxFUyxcbiAgICBsaWJyYXJ5VmVyc2lvbjogTElCUkFSWV9WRVJTSU9OXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLDhCQUF5QztBQUN6QyxtQkFBbUM7QUFDbkMscUJBQXdCO0FBRXhCLHVCQUF5QjtBQUN6QixJQUFBQSxnQkFBd0M7QUFDeEMsb0NBR087QUFDUCw0QkFBb0M7QUFDcEMsSUFBQUMsa0JBR087QUFPUCxNQUFNLGtCQUFrQjtBQVFqQixTQUFTLG9CQUFvQixTQUFzQixZQUFzQztBQUM5RixRQUFNLGtCQUFrQixPQUFPLGVBQWUsV0FBVyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUM7QUFDdkYsVUFBUTtBQUFBLElBQ04sMEJBQVM7QUFBQSxJQUVULEdBQUksZ0NBQWdCLGdCQUFnQixDQUFDLGdDQUFnQixhQUFhLElBQUksQ0FBQztBQUFBLElBQ3ZFLEdBQUc7QUFBQSxFQUNMO0FBQ0Y7QUFRTyxTQUFTLG9CQUFvQixLQUFhLFdBQTRCO0FBQzNFLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sV0FBVyxvQkFBb0I7QUFDckMsUUFBTSxlQUFXLGlDQUFtQjtBQUNwQyxzQkFBb0IsUUFBUTtBQUU1QixZQUFVLFNBQVMsTUFBTTtBQUN2QixRQUFJLG9CQUFvQixVQUFVLFVBQVU7QUFDMUMsMEJBQW9CLFFBQVE7QUFBQSxJQUM5QjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBT08sU0FBUyxrQkFBa0IsVUFBd0I7QUFDeEQsa0NBQWdCLEtBQUssRUFBRSxlQUFlLFNBQVMsQ0FBQztBQUNoRCx5QkFBUSxLQUFLO0FBQUEsSUFDWCxlQUFlO0FBQUEsSUFDZixnQkFBZ0I7QUFBQSxJQUNoQixzQkFBc0IsR0FBRyxRQUFRO0FBQUEsSUFDakMsdUJBQXVCO0FBQUEsRUFDekIsQ0FBQztBQUNELDZDQUF3QixRQUFRO0FBS2hDLHdEQUF5QjtBQUV6QixpREFBb0I7QUFBQSxJQUNsQixLQUFLO0FBQUEsSUFDTCxlQUFlO0FBQUEsSUFDZixnQkFBZ0I7QUFBQSxFQUNsQixDQUFDO0FBQ0g7IiwibmFtZXMiOlsiaW1wb3J0X2RlYnVnIiwiaW1wb3J0X2xpYnJhcnkiXX0=
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -178,4 +178,4 @@ class PluginEventSourceImpl {
178
178
  0 && (module.exports = {
179
179
  PluginEventSourceImpl
180
180
  });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwbHVnaW4gZXZlbnQgc291cmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXN5bmNFdmVudFJlZixcbiAgQXN5bmNFdmVudFNvdXJjZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMtZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luQmFzZSB9IGZyb20gJy4vcGx1Z2luLnRzJztcblxuLyoqXG4gKiBFdmVudCBtYXAgZm9yIHBsdWdpbiBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRXZlbnRNYXAge1xuICAvKipcbiAgRmlyZWQgd2hlbiBwbHVnaW4gc2V0dGluZ3MgYXJlIGNoYW5nZWQgZXh0ZXJuYWxseSAoZS5nLiBzeW5jLCBtYW51YWwgZmlsZSBlZGl0KS5cbiAgICovXG4gIGV4dGVybmFsU2V0dGluZ3NDaGFuZ2U6IFtdO1xufVxuXG4vKipcbiAqIEV2ZW50IHNvdXJjZSBmb3IgcGx1Z2luIGV2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luRXZlbnRTb3VyY2UgPSBBc3luY0V2ZW50U291cmNlPFBsdWdpbkV2ZW50TWFwPjtcblxuLyoqXG4gKiBQbHVnaW4gZXZlbnQgc291cmNlIGltcGxlbWVudGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luRXZlbnRTb3VyY2VJbXBsIGltcGxlbWVudHMgUGx1Z2luRXZlbnRTb3VyY2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gZXZlbnQgc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBjcmVhdGUgdGhlIGV2ZW50IHNvdXJjZSBmb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luQmFzZSkge31cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHR5cGVQYXJhbSBBcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byByZW1vdmUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy5vZmYoJ215LWV2ZW50JywgbXlMaXN0ZW5lcik7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvZmY8RXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5FdmVudE1hcD4sIEFyZ3VtZW50cyBleHRlbmRzIEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luRXZlbnRNYXA+ID8gUGx1Z2luRXZlbnRNYXBbRXZlbnROYW1lXSA6IHVua25vd25bXT4oXG4gICAgbmFtZTogRXZlbnROYW1lLFxuICAgIGNhbGxiYWNrOiAoLi4uJGFyZ3VtZW50czogQXJndW1lbnRzKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4gICk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luLm9mZihuYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIHJlZmVyZW5jZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgb2ZmcmVmKGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW4ub2ZmcmVmKGV2ZW50UmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAdHlwZVBhcmFtIEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgKiBAcGFyYW0gdGhpc0FyZ3VtZW50IC0gVGhlIGNvbnRleHQgcGFzc2VkIGFzIGB0aGlzYCB0byB0aGUgYGNhbGxiYWNrYC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIHtAbGluayBvYnNpZGlhbiNFdmVudHMjb259IChvciBvbmNlLCBjb3JyZXNwb25kaW5nbHkpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub24oJ215LWV2ZW50JywgYXN5bmMgKGFyZzEsIGFyZzIpID0+IHtcbiAgICogICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAqICAgICBjb25zb2xlLmxvZyhhcmcxLCBhcmcyKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvbjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpbkV2ZW50TWFwPiwgQXJndW1lbnRzIGV4dGVuZHMgRXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5FdmVudE1hcD4gPyBQbHVnaW5FdmVudE1hcFtFdmVudE5hbWVdIDogdW5rbm93bltdPihcbiAgICBuYW1lOiBFdmVudE5hbWUsXG4gICAgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZ3VtZW50PzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW4ub24obmFtZSwgY2FsbGJhY2ssIHRoaXNBcmd1bWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgb25seSBvbmNlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHR5cGVQYXJhbSBBcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHRoaXNBcmd1bWVudCAtIFRoZSBjb250ZXh0IHBhc3NlZCBhcyBgdGhpc2AgdG8gdGhlIGBjYWxsYmFja2AuXG4gICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHJlbWFya3MgTm90IHJlZmFjdG9yZWQgdG8gcGFyYW1ldGVyLW9iamVjdCBwYXR0ZXJuLCB0byBrZWVwIHRoZSBwYXJpdHkgd2l0aCB7QGxpbmsgb2JzaWRpYW4jRXZlbnRzI29ufSAob3Igb25jZSwgY29ycmVzcG9uZGluZ2x5KS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogZXZlbnRzLm9uY2UoJ215LWV2ZW50JywgYXN5bmMgKGFyZzEsIGFyZzIpID0+IHtcbiAgICogICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAqICAgICBjb25zb2xlLmxvZyhhcmcxLCBhcmcyKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvbmNlPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luRXZlbnRNYXA+LCBBcmd1bWVudHMgZXh0ZW5kcyBFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpbkV2ZW50TWFwPiA/IFBsdWdpbkV2ZW50TWFwW0V2ZW50TmFtZV0gOiB1bmtub3duW10+KFxuICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICBjYWxsYmFjazogKC4uLiRhcmd1bWVudHM6IEFyZ3VtZW50cykgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJndW1lbnQ/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWYge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5vbmNlKG5hbWUsIGNhbGxiYWNrLCB0aGlzQXJndW1lbnQpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ08sTUFBTSxzQkFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNdkQsWUFBK0IsUUFBb0I7QUFBcEI7QUFBQSxFQUFxQjtBQUFBLEVBQXJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZ0IvQixJQUNMLE1BQ0EsVUFDTTtBQUNOLFNBQUssT0FBTyxJQUFJLE1BQU0sUUFBUTtBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sT0FBTyxVQUErQjtBQUMzQyxTQUFLLE9BQU8sT0FBTyxRQUFRO0FBQUEsRUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXVCTyxHQUNMLE1BQ0EsVUFDQSxjQUNlO0FBQ2YsV0FBTyxLQUFLLE9BQU8sR0FBRyxNQUFNLFVBQVUsWUFBWTtBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF1Qk8sS0FDTCxNQUNBLFVBQ0EsY0FDZTtBQUNmLFdBQU8sS0FBSyxPQUFPLEtBQUssTUFBTSxVQUFVLFlBQVk7QUFBQSxFQUN0RDtBQUNGOyIsIm5hbWVzIjpbXX0=
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwbHVnaW4gZXZlbnQgc291cmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXN5bmNFdmVudFJlZixcbiAgQXN5bmNFdmVudFNvdXJjZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMtZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luQmFzZSB9IGZyb20gJy4vcGx1Z2luLnRzJztcblxuLyoqXG4gKiBFdmVudCBtYXAgZm9yIHBsdWdpbiBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRXZlbnRNYXAge1xuICAvKipcbiAgRmlyZWQgd2hlbiBwbHVnaW4gc2V0dGluZ3MgYXJlIGNoYW5nZWQgZXh0ZXJuYWxseSAoZS5nLiBzeW5jLCBtYW51YWwgZmlsZSBlZGl0KS5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsU2V0dGluZ3NDaGFuZ2U6IFtdO1xufVxuXG4vKipcbiAqIEV2ZW50IHNvdXJjZSBmb3IgcGx1Z2luIGV2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luRXZlbnRTb3VyY2UgPSBBc3luY0V2ZW50U291cmNlPFBsdWdpbkV2ZW50TWFwPjtcblxuLyoqXG4gKiBQbHVnaW4gZXZlbnQgc291cmNlIGltcGxlbWVudGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luRXZlbnRTb3VyY2VJbXBsIGltcGxlbWVudHMgUGx1Z2luRXZlbnRTb3VyY2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwbHVnaW4gZXZlbnQgc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBjcmVhdGUgdGhlIGV2ZW50IHNvdXJjZSBmb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luQmFzZSkge31cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHR5cGVQYXJhbSBBcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byByZW1vdmUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGV2ZW50cy5vZmYoJ215LWV2ZW50JywgbXlMaXN0ZW5lcik7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvZmY8RXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5FdmVudE1hcD4sIEFyZ3VtZW50cyBleHRlbmRzIEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luRXZlbnRNYXA+ID8gUGx1Z2luRXZlbnRNYXBbRXZlbnROYW1lXSA6IHVua25vd25bXT4oXG4gICAgbmFtZTogRXZlbnROYW1lLFxuICAgIGNhbGxiYWNrOiAoLi4uJGFyZ3VtZW50czogQXJndW1lbnRzKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4gICk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luLm9mZihuYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50UmVmIC0gVGhlIHJlZmVyZW5jZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgb2ZmcmVmKGV2ZW50UmVmOiBBc3luY0V2ZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW4ub2ZmcmVmKGV2ZW50UmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gRXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAdHlwZVBhcmFtIEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgKiBAcGFyYW0gdGhpc0FyZ3VtZW50IC0gVGhlIGNvbnRleHQgcGFzc2VkIGFzIGB0aGlzYCB0byB0aGUgYGNhbGxiYWNrYC5cbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIHtAbGluayBvYnNpZGlhbiNFdmVudHMjb259IChvciBvbmNlLCBjb3JyZXNwb25kaW5nbHkpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBldmVudHMub24oJ215LWV2ZW50JywgYXN5bmMgKGFyZzEsIGFyZzIpID0+IHtcbiAgICogICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAqICAgICBjb25zb2xlLmxvZyhhcmcxLCBhcmcyKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvbjxFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpbkV2ZW50TWFwPiwgQXJndW1lbnRzIGV4dGVuZHMgRXZlbnROYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5FdmVudE1hcD4gPyBQbHVnaW5FdmVudE1hcFtFdmVudE5hbWVdIDogdW5rbm93bltdPihcbiAgICBuYW1lOiBFdmVudE5hbWUsXG4gICAgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFByb21pc2FibGU8dm9pZD4sXG4gICAgdGhpc0FyZ3VtZW50PzogdW5rbm93blxuICApOiBBc3luY0V2ZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW4ub24obmFtZSwgY2FsbGJhY2ssIHRoaXNBcmd1bWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgb25seSBvbmNlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIEV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAgICogQHR5cGVQYXJhbSBBcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHRoaXNBcmd1bWVudCAtIFRoZSBjb250ZXh0IHBhc3NlZCBhcyBgdGhpc2AgdG8gdGhlIGBjYWxsYmFja2AuXG4gICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHJlbWFya3MgTm90IHJlZmFjdG9yZWQgdG8gcGFyYW1ldGVyLW9iamVjdCBwYXR0ZXJuLCB0byBrZWVwIHRoZSBwYXJpdHkgd2l0aCB7QGxpbmsgb2JzaWRpYW4jRXZlbnRzI29ufSAob3Igb25jZSwgY29ycmVzcG9uZGluZ2x5KS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogZXZlbnRzLm9uY2UoJ215LWV2ZW50JywgYXN5bmMgKGFyZzEsIGFyZzIpID0+IHtcbiAgICogICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAqICAgICBjb25zb2xlLmxvZyhhcmcxLCBhcmcyKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGR1bW15IHBhcmFtZXRlciB0byBnZXQgdHlwZSBpbmZlcmVuY2UuXG4gIHB1YmxpYyBvbmNlPEV2ZW50TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luRXZlbnRNYXA+LCBBcmd1bWVudHMgZXh0ZW5kcyBFdmVudE5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpbkV2ZW50TWFwPiA/IFBsdWdpbkV2ZW50TWFwW0V2ZW50TmFtZV0gOiB1bmtub3duW10+KFxuICAgIG5hbWU6IEV2ZW50TmFtZSxcbiAgICBjYWxsYmFjazogKC4uLiRhcmd1bWVudHM6IEFyZ3VtZW50cykgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgICB0aGlzQXJndW1lbnQ/OiB1bmtub3duXG4gICk6IEFzeW5jRXZlbnRSZWYge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5vbmNlKG5hbWUsIGNhbGxiYWNrLCB0aGlzQXJndW1lbnQpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ08sTUFBTSxzQkFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNdkQsWUFBK0IsUUFBb0I7QUFBcEI7QUFBQSxFQUFxQjtBQUFBLEVBQXJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZ0IvQixJQUNMLE1BQ0EsVUFDTTtBQUNOLFNBQUssT0FBTyxJQUFJLE1BQU0sUUFBUTtBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sT0FBTyxVQUErQjtBQUMzQyxTQUFLLE9BQU8sT0FBTyxRQUFRO0FBQUEsRUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXVCTyxHQUNMLE1BQ0EsVUFDQSxjQUNlO0FBQ2YsV0FBTyxLQUFLLE9BQU8sR0FBRyxNQUFNLFVBQVUsWUFBWTtBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF1Qk8sS0FDTCxNQUNBLFVBQ0EsY0FDZTtBQUNmLFdBQU8sS0FBSyxPQUFPLEtBQUssTUFBTSxVQUFVLFlBQVk7QUFBQSxFQUN0RDtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -15,7 +15,7 @@ export interface PluginEventMap {
15
15
  /**
16
16
  Fired when plugin settings are changed externally (e.g. sync, manual file edit).
17
17
  */
18
- externalSettingsChange: [];
18
+ readonly externalSettingsChange: [];
19
19
  }
20
20
  /**
21
21
  * Event source for plugin events.
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -590,4 +590,4 @@ class PluginSettingsTabBase extends (0, import_async_events.mixinAsyncEvents)()(
590
590
  PluginSettingsTabBase,
591
591
  SAVE_TO_FILE_CONTEXT
592
592
  });
593
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVib3VuY2VyLFxuICBQbHVnaW4sXG4gIFNldHRpbmcsXG4gIFNldHRpbmdEZWZpbml0aW9uR3JvdXAsXG4gIFNldHRpbmdEZWZpbml0aW9uSXRlbSxcbiAgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIsXG4gIFNldHRpbmdHcm91cFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIENvbmRpdGlvbmFsS2V5cyxcbiAgRXhjZXB0LFxuICBQcm9taXNhYmxlLFxuICBSZWFkb25seURlZXBcbn0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgbWl4aW5Bc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgUGx1Z2luU2V0dGluZ1RhYixcbiAgc2V0VG9vbHRpcFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGVcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsdWUtY29tcG9uZW50LXdpdGgtY2hhbmdlLXRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0V4IH0gZnJvbSAnLi4vc2V0dGluZy1leC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi50cyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGVuc3VyZVdyYXBwZWQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnQtd3JhcHBlci50cyc7XG5pbXBvcnQgeyBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSB9IGZyb20gJy4uL3NldHRpbmctY29tcG9uZW50cy90ZXh0LWJhc2VkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsaWRhdG9yLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBhZG9wdFNldHRpbmdFeCB9IGZyb20gJy4uL3NldHRpbmctZXgudHMnO1xuaW1wb3J0IHsgaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB9IGZyb20gJy4uL3ZhbGlkYXRpb24udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIEEgY29udGV4dCBwYXNzZWQgdG8gdGhlIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uuc2F2ZVRvRmlsZX0gbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgU0FWRV9UT19GSUxFX0NPTlRFWFQgPSAnUGx1Z2luU2V0dGluZ3NUYWInO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2VkPzogKG5ld1ZhbHVlOiBSZWFkb25seURlZXA8VD4sIG9sZFZhbHVlOiBSZWFkb25seURlZXA8VD4pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHNldHRpbmcgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGVtcHR5LlxuICAgKiBBcHBsaWNhYmxlIG9ubHkgdG8gdGV4dC1iYXNlZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBwbGFjZWhvbGRlciBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gICAqIEFwcGxpY2FibGUgb25seSB0byB0ZXh0LWJhc2VkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgb3B0aW9ucyBmb3IgYFBsdWdpblNldHRpbmdzVGFiQmFzZS5iaW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZSBiZWluZyBib3VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uc0V4dGVuZGVkPFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgVUlWYWx1ZSxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdIHwgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPikgPT4gVUlWYWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0gd2l0aCB2YWx1ZSBjb252ZXJ0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lIGJlaW5nIGJvdW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZUJpbmRFeHRlbmRlZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLmJpbmR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudFxuPiBleHRlbmRzIEJpbmRPcHRpb25zPFVJVmFsdWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IENvbmRpdGlvbmFsS2V5czxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT47XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gYmluZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpbnN0YW5jZSAobmVlZGVkIGJ5IE9ic2lkaWFuJ3MgUGx1Z2luU2V0dGluZ1RhYikuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nRXh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlYXJjaCB0ZXJtcyBmb3IgdGhlIHNldHRpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2V0dGluZy4gVXNlZCBmb3IgcmVuZGVyaW5nOyB0aGUgdGV4dCBjb250ZW50IG9mIGEgZnJhZ21lbnQgaXMgdXNlZCBmb3Igc2VhcmNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzYz86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNldHRpbmcgcm93IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGZvcm0gaXMgcmUtZXZhbHVhdGVkIG9uIGV2ZXJ5IHJlbmRlciBBTkQgb24gZXZlcnkge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZWZyZXNoRG9tU3RhdGV9XG4gICAqIGNhbGwsIHNvIGl0IGNhbiByZWZsZWN0IHJ1bnRpbWUgc3RhdGUuIE9ic2lkaWFuIGFwcGxpZXMgaXQgd2l0aCBgU2V0dGluZy5zZXREaXNhYmxlZGAsIHdoaWNoIGRpc2FibGVzIHRoZVxuICAgKiByb3cgYW5kIGV2ZXJ5IGNvbXBvbmVudCByZWdpc3RlcmVkIG9uIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzZXR0aW5nLiBVc2VkIGZvciByZW5kZXJpbmcgYW5kIHNlYXJjaC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc2V0dGluZyByb3cgaW1wZXJhdGl2ZWx5LCB0eXBpY2FsbHkgdmlhIHRoZSB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gICAqXG4gICAqIFRoZSBzZXR0aW5nIE9ic2lkaWFuIGNyZWF0ZXMgZm9yIHRoZSByb3cgaXMgYWRvcHRlZCBpbnRvIGEge0BsaW5rIFNldHRpbmdFeH0gYmVmb3JlIGl0IGlzIGhhbmRlZCBvdmVyLCBzb1xuICAgKiBhbiBpbXBlcmF0aXZlIHJvdyBib2R5IGNhcnJpZXMgb3ZlciB1bmNoYW5nZWQuIE1heSByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLCBpbnZva2VkIGJlZm9yZSB0aGUgcm93IGlzXG4gICAqIHRvcm4gZG93biBvciByZS1yZW5kZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIGdyb3VwIC0gVGhlIGdyb3VwIHRoZSBzZXR0aW5nIGJlbG9uZ3MgdG8uXG4gICAqIEByZXR1cm5zIEFuIG9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcmVhZG9ubHkgcmVuZGVyOiAoc2V0dGluZzogU2V0dGluZ0V4LCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIGlzIGluY2x1ZGVkIGluIHRoZSBzZXR0aW5ncyBzZWFyY2guIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaGFibGU/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIHJvdyBpcyByZW5kZXJlZC4gQSBmdW5jdGlvbiBmb3JtIGlzIHJlLWV2YWx1YXRlZCBvbiBldmVyeSByZW5kZXIgYW5kIG9uXG4gICAqIGV2ZXJ5IHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UucmVmcmVzaERvbVN0YXRlfSBjYWxsLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2Uuc2V0dGluZ0dyb3VwRXh9LlxuICpcbiAqIEV2ZXJ5IG1lbWJlciBvZiB7QGxpbmsgU2V0dGluZ0RlZmluaXRpb25Hcm91cH0gZXhjZXB0IGl0cyBkaXNjcmltaW5hdG9yLCB3aGljaFxuICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nR3JvdXBFeH0gc2V0cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMgPSBFeGNlcHQ8U2V0dGluZ0RlZmluaXRpb25Hcm91cCwgJ3R5cGUnPjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSBVSSBjb21wb25lbnQncyB2YWx1ZS5cbiAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUgYmVpbmcgYm91bmQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+O1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXAge1xuICB2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQ6IFtwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZ107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5vblNhdmVTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZW5kZXJTZXR0aW5nRXh9LlxuICovXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlUmVuZGVyU2V0dGluZ0V4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBncm91cCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBncm91cDogU2V0dGluZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZyBPYnNpZGlhbiBjcmVhdGVkIGZvciB0aGUgcm93LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZztcblxuICAvKipcbiAgICogVGhlIHBhcmFtcyB0aGUgcm93IHdhcyBkZWNsYXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ0V4UGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBvbkxvYWRTZXR0aW5nczogKGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBpc0luaXRpYWxMb2FkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2F2ZVNldHRpbmdzOiAoXG4gICAgbmV3U3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncz47XG59XG5cbi8qKlxuICogT3ducyB0aGUgdGFiJ3Mgc3Vic2NyaXB0aW9ucyB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50LlxuICpcbiAqIFRoZSBzdWJzY3JpcHRpb25zIGxpdmUgaW4ge0BsaW5rIG9ubG9hZH0gcmF0aGVyIHRoYW4gYXQgZWFjaCByZW5kZXIsIHNvIHRoYXQgYSBsb2FkL3VubG9hZCBwYWlyIHJlZ2lzdGVyc1xuICogdGhlbSBleGFjdGx5IG9uY2UuIFJlZ2lzdGVyaW5nIHRoZW0gcGVyIHJlbmRlciBpbnN0ZWFkIHdvdWxkIGFjY3VtdWxhdGUgYSBmcmVzaCBwYWlyIG9uIGV2ZXJ5IHJlbmRlciBjeWNsZSxcbiAqIGJlY2F1c2Uge0BsaW5rIENvbXBvbmVudEV4LmxvYWR9IGVhcmx5LXJldHVybnMgb25jZSB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgbm90aGluZyByZXNldHMgaW4gYmV0d2Vlbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5jbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCdzIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgeyBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudCB9ID0gdGhpcy5wYXJhbXM7XG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMsIHBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpID0+IHRoaXMucGFyYW1zLm9uTG9hZFNldHRpbmdzKGxvYWRlZFN0YXRlLCBpc0luaXRpYWxMb2FkKSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5wYXJhbXMub25TYXZlU2V0dGluZ3MobmV3U3RhdGUsIG9sZFN0YXRlLCBjb250ZXh0KSkpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmdzIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBQcm92aWRlcyBhIG1ldGhvZCBmb3IgYmluZGluZyB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxpbmcgY2hhbmdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NUYWJCYXNlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8UGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXA+KCkoUGx1Z2luU2V0dGluZ1RhYikge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYiBpcyBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGlzIG9wZW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBtYW5hZ2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBBIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2F2ZVNldHRpbmdzRGVib3VuY2VUaW1lb3V0SW5NaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBERUZBVUxUID0gMjAwMDtcbiAgICByZXR1cm4gREVGQVVMVDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIGN1cnJlbnRSZW5kZXJDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZVNldHRpbmdzRGVib3VuY2VkOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuXG4gIHByaXZhdGUgZ2V0IHBsdWdpblNldHRpbmdzKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3M8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLmlucHV0VmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyRWwsIENzc0NsYXNzLlBsdWdpblNldHRpbmdzVGFiKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCA9IGRlYm91bmNlKFxuICAgICAgY29udmVydEFzeW5jVG9TeW5jKCgpID0+IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCkpLFxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICk7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+KHtcbiAgICAgIG9uTG9hZFNldHRpbmdzOiAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25Mb2FkU2V0dGluZ3MobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpLFxuICAgICAgb25TYXZlU2V0dGluZ3M6IChuZXdTdGF0ZSwgb2xkU3RhdGUsIGNvbnRleHQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25TYXZlU2V0dGluZ3MoeyBjb250ZXh0LCBuZXdTdGF0ZSwgb2xkU3RhdGUgfSksXG4gICAgICBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudFxuICA+KFxuICAgIHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kRXh0ZW5kZWRQYXJhbXM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudCwgUHJvcGVydHlOYW1lPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50LCBQcm9wZXJ0eU5hbWU+IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIGJpbmQgb3ZlcmxvYWQgc2hhcmVzIHRoZSBCaW5kKiBwYXJhbSBmYW1pbHkuXG4gICk6IFRWYWx1ZUNvbXBvbmVudCB7XG4gICAgY29uc3Qge1xuICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgdmFsdWVDb21wb25lbnQsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHBhcmFtcztcbiAgICB0eXBlIFByb3BlcnR5VHlwZSA9IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV07XG4gICAgY29uc3QgREVGQVVMVF9PUFRJT05TOiBSZXF1aXJlZDxCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+PiA9IHtcbiAgICAgIGNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcjogKHZhbHVlOiBVSVZhbHVlKTogUHJvcGVydHlUeXBlID0+IHZhbHVlIGFzIFByb3BlcnR5VHlwZSxcbiAgICAgIG9uQ2hhbmdlZDogbm9vcCxcbiAgICAgIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHZhbHVlOiBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPik6IFVJVmFsdWUgPT4gdmFsdWUgYXMgVUlWYWx1ZSxcbiAgICAgIHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5OiB0cnVlLFxuICAgICAgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlczogdHJ1ZSxcbiAgICAgIHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zRXh0ZW5zaW9uOiBSZXF1aXJlZDxCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+PiA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG5cbiAgICBjb25zdCB2YWxpZGF0b3JFbCA9IGdldFZhbGlkYXRvckNvbXBvbmVudCh2YWx1ZUNvbXBvbmVudCk/LnZhbGlkYXRvckVsO1xuXG4gICAgY29uc3QgdGV4dEJhc2VkQ29tcG9uZW50ID0gZ2V0VGV4dEJhc2VkQ29tcG9uZW50VmFsdWUodmFsdWVDb21wb25lbnQpO1xuXG4gICAgY29uc3QgcmVhZG9ubHlWYWx1ZSA9IHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGVmYXVsdHNbcHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBkZWZhdWx0Q29tcG9uZW50VmFsdWUgPSBvcHRpb25zRXh0ZW5zaW9uLnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcihkZWZhdWx0VmFsdWUgYXMgUmVhZG9ubHlEZWVwPFByb3BlcnR5VHlwZT4pO1xuICAgIHRleHRCYXNlZENvbXBvbmVudD8uc2V0UGxhY2Vob2xkZXJWYWx1ZShkZWZhdWx0Q29tcG9uZW50VmFsdWUpO1xuXG4gICAgbGV0IHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgdG9vbHRpcENvbnRlbnRFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodmFsaWRhdG9yRWwpIHtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBlbnN1cmVXcmFwcGVkKHZhbGlkYXRvckVsKTtcbiAgICAgIHRvb2x0aXBFbCA9IHdyYXBwZXIuY3JlYXRlRGl2KCk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRvb2x0aXBFbCwgW0Nzc0NsYXNzLlRvb2x0aXAsIENzc0NsYXNzLlRvb2x0aXBWYWxpZGF0b3JdKTtcbiAgICAgIHRvb2x0aXBDb250ZW50RWwgPSB0b29sdGlwRWwuY3JlYXRlU3BhbigpO1xuICAgICAgY29uc3QgdG9vbHRpcEFycm93RWwgPSB0b29sdGlwRWwuY3JlYXRlRGl2KCk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRvb2x0aXBBcnJvd0VsLCBDc3NDbGFzcy5Ub29sdGlwQXJyb3cpO1xuICAgICAgdG9vbHRpcEVsLmhpZGUoKTtcbiAgICAgIHdyYXBwZXIuYXBwZW5kKHRvb2x0aXBFbCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KFxuICAgICAgdGhpcy5nZXRSZW5kZXJDb21wb25lbnQoKSxcbiAgICAgIHRoaXMub24oJ3ZhbGlkYXRpb25NZXNzYWdlQ2hhbmdlZCcsIChhbm90aGVyUHJvcGVydHlOYW1lLCBhbm90aGVyVmFsaWRhdGlvbk1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gYW5vdGhlclByb3BlcnR5TmFtZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYW5vdGhlclZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBsZXQgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcbiAgICBsZXQgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSBmYWxzZTtcblxuICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzICYmIGlzRGVlcEVxdWFsKHJlYWRvbmx5VmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHRleHRCYXNlZENvbXBvbmVudC5lbXB0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZUNvbXBvbmVudC5zZXRWYWx1ZShvcHRpb25zRXh0ZW5zaW9uLnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcihyZWFkb25seVZhbHVlKSk7XG4gICAgfVxuXG4gICAgbGV0IHNob3VsZFNraXBPbkNoYW5nZSA9IGZhbHNlO1xuICAgIGNvbnN0IFVQREFURV9WQUxJREFUT1JfRUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDA7XG4gICAgY29uc3QgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB1cGRhdGVWYWxpZGF0b3JFbCgpO1xuICAgICAgfSk7XG4gICAgfSwgVVBEQVRFX1ZBTElEQVRPUl9FTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICB2YWx1ZUNvbXBvbmVudC5vbkNoYW5nZShjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKHVpVmFsdWUpID0+IHtcbiAgICAgIGlmIChzaG91bGRTa2lwT25DaGFuZ2UpIHtcbiAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmdldFBsdWdpblNldHRpbmdzUHJvcGVydHkocHJvcGVydHlOYW1lKTtcbiAgICAgIGxldCBuZXdWYWx1ZTogUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNob3VsZFNldFByb3BlcnR5ID0gdHJ1ZTtcbiAgICAgIHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyID0gISF0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSAmJiBvcHRpb25zRXh0ZW5zaW9uLnNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5O1xuICAgICAgaWYgKHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBvcHRpb25zRXh0ZW5zaW9uLmNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcih1aVZhbHVlKTtcbiAgICAgICAgaWYgKGlzVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIoY29udmVydGVkVmFsdWUpKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBjb252ZXJ0ZWRWYWx1ZS52YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgICBzaG91bGRTZXRQcm9wZXJ0eSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1ZhbHVlID0gY29udmVydGVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFNldFByb3BlcnR5KSB7XG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlIGFzIFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0pO1xuICAgICAgICBpZiAodGV4dEJhc2VkQ29tcG9uZW50ICYmIG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcyAmJiAhdGV4dEJhc2VkQ29tcG9uZW50LmlzRW1wdHkoKSAmJiBpc0RlZXBFcXVhbChuZXdWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIHNob3VsZEVtcHR5T25CbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgICBpZiAoc2hvdWxkU2V0UHJvcGVydHkpIHtcbiAgICAgICAgYXdhaXQgb3B0aW9uc0V4dGVuc2lvbi5vbkNoYW5nZWQobmV3VmFsdWUgYXMgUmVhZG9ubHlEZWVwPFByb3BlcnR5VHlwZT4sIG9sZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkKCk7XG4gICAgfSkpO1xuXG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuICAgIH0pO1xuICAgIHZhbGlkYXRvckVsPy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuICAgIH0pO1xuICAgIHZhbGlkYXRvckVsPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlcyA9IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2V0dGluZ3NTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID8/ICcnO1xuICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcblxuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudDtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbGlkYXRvckVsKCk6IHZvaWQge1xuICAgICAgaWYgKCF2YWxpZGF0b3JFbD8uaXNBY3RpdmVFbGVtZW50KCkpIHtcbiAgICAgICAgaWYgKHNob3VsZEVtcHR5T25CbHVyKSB7XG4gICAgICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICghdGV4dEJhc2VkQ29tcG9uZW50Py5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHNob3VsZFNraXBPbkNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICB0ZXh0QmFzZWRDb21wb25lbnQ/LmVtcHR5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyKSB7XG4gICAgICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKGRlZmF1bHRDb21wb25lbnRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdG9yRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnROb25OdWxsYWJsZSh0b29sdGlwQ29udGVudEVsKTtcblxuICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlID09PSAnJykge1xuICAgICAgICB2YWxpZGF0b3JFbC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgICAgIHZhbGlkYXRvckVsLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0b3JFbC52YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgdmFsaWRhdG9yRWwuc2V0Q3VzdG9tVmFsaWRpdHkodmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgaWYgKG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHRvb2x0aXBDb250ZW50RWwudGV4dENvbnRlbnQgPSB2YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgdG9vbHRpcEVsPy50b2dnbGUoISF2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHNldFRvb2x0aXAodmFsaWRhdG9yRWwsIHZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNwbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUxlZ2FjeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExlZ2FjeSB3YXkgdG8gcmVuZGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGltcGVyYXRpdmVseS5cbiAgICpcbiAgICogVGhlIHByZS1kZWNsYXJhdGl2ZSBmYWxsYmFjazogT2JzaWRpYW4gb25seSBjYWxscyBpdCB3aGVuIHtAbGluayBnZXRTZXR0aW5nRGVmaW5pdGlvbnN9IHJldHVybnMgYW4gZW1wdHlcbiAgICogYXJyYXksIGkuZS4gd2hlbiB0aGUgY29uc3VtZXIgaGFzIG5vdCBvdmVycmlkZGVuIHtAbGluayBnZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zfS4gU3VjaCBhIGNvbnN1bWVyXG4gICAqIG92ZXJyaWRlcyB0aGlzIG1ldGhvZCBhbmQgYnVpbGRzIHRoZSBVSSB3aXRoIHtAbGluayBTZXR0aW5nRXh9IGFuZCB7QGxpbmsgYmluZH0uXG4gICAqL1xuICBwdWJsaWMgZGlzcGxheUxlZ2FjeSgpOiB2b2lkIHtcbiAgICB0aGlzLmJlZ2luUmVuZGVyQ3ljbGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlIGJhY2tpbmcgYSBuYXRpdmUgYGNvbnRyb2xgIHNldHRpbmcgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogT2JzaWRpYW4gY2FsbHMgaXQgb24gZXZlcnkgcmVuZGVyIG9mIGEgYGNvbnRyb2xgLXR5cGUgZGVmaW5pdGlvbi4gVGhlIGluaGVyaXRlZCBpbXBsZW1lbnRhdGlvbiByZWFkc1xuICAgKiBgcGx1Z2luLnNldHRpbmdzYCwgd2hpY2ggYSBwbHVnaW4gYnVpbHQgb24ge0BsaW5rIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZX0gbmV2ZXIgcG9wdWxhdGVzLCBzbyBpdCBpc1xuICAgKiByb3V0ZWQgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGdldENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmdldFBsdWdpblNldHRpbmdzUHJvcGVydHkoY2FzdFRvPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+PihrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWNsYXJhdGl2ZSBzZXR0aW5nIGRlZmluaXRpb25zIHJlbmRlcmVkIGJ5IE9ic2lkaWFuIDEuMTMrLlxuICAgKlxuICAgKiBEZWxlZ2F0ZXMgdG8ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9LiBXaGVuIGEgY29uc3VtZXIgaGFzIG5vdCBvdmVycmlkZGVuIHRoYXQgaG9vayBpdCByZXR1cm5zXG4gICAqIGFuIGVtcHR5IGFycmF5LCBhbmQgT2JzaWRpYW4gZmFsbHMgYmFjayB0byB0aGUgaW1wZXJhdGl2ZSB7QGxpbmsgZGlzcGxheUxlZ2FjeX0gcGF0aC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0U2V0dGluZ0RlZmluaXRpb25zKCk6IFNldHRpbmdEZWZpbml0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgaGlkZSgpOiB2b2lkIHtcbiAgICBzdXBlci5oaWRlKCk7XG4gICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZWQuY2FuY2VsKCk7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5lbmRSZW5kZXJDeWNsZSgpO1xuICAgIHRoaXMuY29tcG9uZW50LnVubG9hZCgpO1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuaGlkZUFzeW5jKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIHRoZSBzZXR0aW5ncyB0YWIgaXMgYmVpbmcgaGlkZGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIHRhYiBpcyBoaWRkZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGlkZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtcmVuZGVycyB0aGUgc2V0dGluZ3MgdGFiIGFmdGVyIHRoZSB1bmRlcmx5aW5nIHN0YXRlIGNoYW5nZWQuXG4gICAqXG4gICAqIFJlYnVpbGRzIHRoZSBkZWZpbml0aW9ucyBhbmQgcmUtcmVuZGVycywgd2hpY2ggY292ZXJzIGJvdGggcGF0aHM6IE9ic2lkaWFuIHJlbmRlcnMgdGhlIGRlY2xhcmF0aXZlXG4gICAqIGRlZmluaXRpb25zIHdoZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9IHByb3ZpZGVzIHRoZW0sIGFuZCBmYWxscyBiYWNrIHRvXG4gICAqIHtAbGluayBkaXNwbGF5TGVnYWN5fSB3aGVuIGl0IGRvZXMgbm90LiBOb3RoaW5nIGlzIHJlbmRlcmVkIHdoaWxlIHRoZSB0YWIgaXMgbm90IHRoZSBvbmUgb24gc2NyZWVuLlxuICAgKlxuICAgKiBVc2UgaXQgb25seSBmb3IgY2hhbmdlcyB0aGF0IGFsdGVyIHRoZSBTVFJVQ1RVUkUgb2YgdGhlIHRhYiDigJQgcm93cyBhZGRlZCBvciByZW1vdmVkLiBXaGVuIG9ubHkgYVxuICAgKiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLmRpc2FibGVkfSAvIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMudmlzaWJsZX1cbiAgICogcHJlZGljYXRlIGhhcyB0byBiZSByZS1ldmFsdWF0ZWQsIGNhbGwgdGhlIG11Y2ggY2hlYXBlciB7QGxpbmsgcmVmcmVzaERvbVN0YXRlfSBpbnN0ZWFkLCB3aGljaCB0b2dnbGVzIHRoZVxuICAgKiByZW5kZXJlZCBET00gaW4gcGxhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIHRoZSB2YWx1ZSBvZiBhIG5hdGl2ZSBgY29udHJvbGAgc2V0dGluZyBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBUaGUgY291bnRlcnBhcnQgb2Yge0BsaW5rIGdldENvbnRyb2xWYWx1ZX06IGl0IHJvdXRlcyB0aGUgd3JpdGUgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCBpbnN0ZWFkIG9mIHRoZVxuICAgKiBpbmhlcml0ZWQgYHBsdWdpbi5zYXZlRGF0YWAgcGF0aCwgc28gdmFsaWRhdGlvbiwgdHJhbnNmb3JtZXJzIGFuZCB0aGUgZGVib3VuY2VkIHNhdmUgYWxsIGFwcGx5IGFzIHRoZXkgZG9cbiAgICogZm9yIGEge0BsaW5rIGJpbmR9LWVkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcGVyc2lzdC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YWx1ZSBpcyBzZXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgc2V0Q29udHJvbFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHR5cGUgUHJvcGVydHlOYW1lID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz47XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXRQcm9wZXJ0eShjYXN0VG88UHJvcGVydHlOYW1lPihrZXkpLCBjYXN0VG88UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT4odmFsdWUpKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWNsYXJhdGl2ZSBzZXR0aW5nIGRlZmluaXRpb25zIGZvciB0aGUgdGFiIChPYnNpZGlhbiAxLjEzKykuXG4gICAqXG4gICAqIENvbnN1bWVycyBvdmVycmlkZSB0aGlzLCB0eXBpY2FsbHkgYnVpbGRpbmcgZWFjaCByb3cgd2l0aCB7QGxpbmsgc2V0dGluZ0V4fSBhbmQge0BsaW5rIGJpbmR9IGFuZCBncm91cGluZ1xuICAgKiB0aGVtIHdpdGggYHNldHRpbmdHcm91cEV4YC4gUmV0dXJuaW5nIGFuIGVtcHR5IGFycmF5IOKAlCB0aGUgZGVmYXVsdCDigJQgbWFrZXMgT2JzaWRpYW4gZmFsbCBiYWNrIHRvIHRoZVxuICAgKiBpbXBlcmF0aXZlIHtAbGluayBkaXNwbGF5TGVnYWN5fSBwYXRoLlxuICAgKlxuICAgKiBNVVNUIGJlIGEgcHVyZSBidWlsZGVyLiBPYnNpZGlhbiBjYWxscyBpdCB3aGVuIHRoZSB0YWIgaXMgcmVnaXN0ZXJlZCAoYGFkZFNldHRpbmdUYWJgKSwgbG9uZyBiZWZvcmUgdGhlXG4gICAqIHRhYiBpcyBldmVyIG9wZW5lZCwgaW4gb3JkZXIgdG8gaW5kZXggdGhlIHNldHRpbmdzIGZvciBzZWFyY2guIEFueXRoaW5nIHdpdGggYSBzaWRlIGVmZmVjdCBiZWxvbmdzIGluc2lkZVxuICAgKiBhIHJvdydzIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMucmVuZGVyfSBjYWxsYmFjaywgd2hpY2ggcnVucyBvbmx5IHdoZW4gdGhlIHJvdyBpc1xuICAgKiBhY3R1YWxseSByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtcygpOiBTZXR0aW5nRGVmaW5pdGlvbkl0ZW1bXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gc2V0dGluZ3MgYXJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIF9sb2FkZWRTdGF0ZSAtIFRoZSBsb2FkZWQgc2V0dGluZ3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBfaXNJbml0aWFsTG9hZCAtIFdoZXRoZXIgdGhlIHNldHRpbmdzIGFyZSBiZWluZyBsb2FkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2FkU2V0dGluZ3MoX2xvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBfaXNJbml0aWFsTG9hZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmFsaWRhdGVzIHRoZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgcmV2YWxpZGF0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcmV2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZXMgPSBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnJldmFsaWRhdGUoKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKHZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgc2VhcmNoLWluZGV4YWJsZSBkZWNsYXJhdGl2ZSByb3cgdGhhdCBpcyByZW5kZXJlZCBpbXBlcmF0aXZlbHkuXG4gICAqXG4gICAqIFRoZSBicmlkZ2UgYmV0d2VlbiB0aGUgZGVjbGFyYXRpdmUgQVBJIGFuZCB0aGlzIGxpYnJhcnkncyBpbXBlcmF0aXZlIGJ1aWxkaW5nIGJsb2NrczogT2JzaWRpYW4gb3ducyB0aGUgcm93IChzbyBpdFxuICAgKiBpbmRleGVzIGl0IGZvciBzZWFyY2ggYW5kIGV2YWx1YXRlcyBpdHMge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy52aXNpYmxlfSAvXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMuZGlzYWJsZWR9IHByZWRpY2F0ZXMgb24gZXZlcnlcbiAgICoge0BsaW5rIHJlZnJlc2hEb21TdGF0ZX0pLCB3aGlsZSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLnJlbmRlcn0gZmlsbHMgaXQgaW4gd2l0aFxuICAgKiB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kIHtAbGluayBiaW5kfSBleGFjdGx5IGFzIGFuIGltcGVyYXRpdmUgdGFiIHdvdWxkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJvdyBwYXJhbXMuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGRlZmluaXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0dGluZ0V4KHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zKTogU2V0dGluZ0RlZmluaXRpb25SZW5kZXIge1xuICAgIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2V0dGluZ0RlZmluaXRpb25SZW5kZXI+KHtcbiAgICAgIGFsaWFzZXM6IHBhcmFtcy5hbGlhc2VzLFxuICAgICAgZGVzYzogcGFyYW1zLmRlc2MsXG4gICAgICBkaXNhYmxlZDogcGFyYW1zLmRpc2FibGVkLFxuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICByZW5kZXI6IChzZXR0aW5nOiBTZXR0aW5nLCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiB0aGlzLnJlbmRlclNldHRpbmdFeCh7IGdyb3VwLCBzZXR0aW5nLCBzZXR0aW5nRXhQYXJhbXM6IHBhcmFtcyB9KSxcbiAgICAgIHNlYXJjaGFibGU6IHBhcmFtcy5zZWFyY2hhYmxlLFxuICAgICAgdmlzaWJsZTogcGFyYW1zLnZpc2libGVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBkZWNsYXJhdGl2ZSBoZWFkaW5nIGdyb3VwLlxuICAgKlxuICAgKiBUaGUgZGVjbGFyYXRpdmUgY291bnRlcnBhcnQgb2YgYFNldHRpbmdHcm91cEV4YDogd2hlcmUgdGhhdCBjbGFzcyBhcHBlbmRzIGEgZ3JvdXAgdG8gYSBjb250YWluZXJcbiAgICogaW1wZXJhdGl2ZWx5LCB0aGlzIHJldHVybnMgdGhlIGRlZmluaXRpb24gT2JzaWRpYW4gcmVuZGVycywgc28gYSBncm91cC1zdHJ1Y3R1cmVkIHRhYiBrZWVwcyBpdHMgc2hhcGVcbiAgICogYWZ0ZXIgdGhlIG1pZ3JhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBncm91cCBwYXJhbXMuXG4gICAqIEByZXR1cm5zIFRoZSBncm91cCBkZWZpbml0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldHRpbmdHcm91cEV4KHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMpOiBTZXR0aW5nRGVmaW5pdGlvbkdyb3VwIHtcbiAgICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNldHRpbmdEZWZpbml0aW9uR3JvdXA+KHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHR5cGU6ICdncm91cCdcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmVnaW5SZW5kZXJDeWNsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVuZFJlbmRlckN5Y2xlKCk7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gdGhpcy5jcmVhdGVSZW5kZXJDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk6IENvbXBvbmVudEV4IHtcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMuY29tcG9uZW50LmxvYWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYWRkQ2hpbGQobmV3IENvbXBvbmVudEV4KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmRSZW5kZXJDeWNsZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZW5kZXJDb21wb25lbnQgPSB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQ7XG4gICAgaWYgKCFyZW5kZXJDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPSBudWxsO1xuICAgIHRoaXMuY29tcG9uZW50LnJlbW92ZUNoaWxkKHJlbmRlckNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBsdWdpblNldHRpbmdzUHJvcGVydHk8UHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lXG4gICk6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpblNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIHJldHVybiBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVuZGVyQ29tcG9uZW50KCk6IENvbXBvbmVudEV4IHtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPz89IHRoaXMuY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25TYXZlU2V0dGluZ3MocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBvbGRTdGF0ZTogX29sZFN0YXRlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoY29udGV4dCA9PT0gU0FWRV9UT19GSUxFX0NPTlRFWFQpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmFsaWRhdGlvbnMobmV3U3RhdGUudmFsaWRhdGlvbk1lc3NhZ2VzIGFzIFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcHJpdmF0ZSByZW5kZXJTZXR0aW5nRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VSZW5kZXJTZXR0aW5nRXhQYXJhbXMpOiAoKCkgPT4gdm9pZCkgfCB2b2lkIHtcbiAgICBjb25zdCByb3dDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVJlbmRlckNvbXBvbmVudCgpO1xuICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyQ29tcG9uZW50ID0gdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50O1xuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IHJvd0NvbXBvbmVudDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gcGFyYW1zLnNldHRpbmdFeFBhcmFtcy5yZW5kZXIoYWRvcHRTZXR0aW5nRXgocGFyYW1zLnNldHRpbmcpLCBwYXJhbXMuZ3JvdXApO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnQucmVtb3ZlQ2hpbGQocm93Q29tcG9uZW50KTtcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IHByZXZpb3VzUmVuZGVyQ29tcG9uZW50O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVmFsaWRhdGlvbnModmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRpb25NZXNzYWdlXSBvZiBPYmplY3QuZW50cmllcyh2YWxpZGF0aW9uTWVzc2FnZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJywgcHJvcGVydHlOYW1lLCB2YWxpZGF0aW9uTWVzc2FnZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkEsbUJBR087QUFDUCwwQkFBaUM7QUFDakMsc0JBR087QUFDUCwwQkFJTztBQUNQLHlCQUFrQztBQUNsQyxzQkFJTztBQVdQLG9DQUFtQztBQUNuQywwQkFBNEI7QUFDNUIsdUJBQXlCO0FBQ3pCLHVDQUE4QjtBQUM5QixrQ0FBMkM7QUFDM0MsaUNBQXNDO0FBQ3RDLHdCQUErQjtBQUMvQix3QkFBMEM7QUFDMUMsNEJBQW9DO0FBSzdCLE1BQU0sdUJBQXVCO0FBNFNwQyxNQUFNLHlDQUF3RSxnQ0FBWTtBQUFBLEVBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEyRTtBQUM1RixVQUFNO0FBQ04sU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtnQixTQUFlO0FBQzdCLFVBQU0sT0FBTztBQUNiLFVBQU0sRUFBRSx3QkFBd0IsSUFBSSxLQUFL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
593
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RyaW5nS2V5cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVib3VuY2VyLFxuICBQbHVnaW4sXG4gIFNldHRpbmcsXG4gIFNldHRpbmdEZWZpbml0aW9uR3JvdXAsXG4gIFNldHRpbmdEZWZpbml0aW9uSXRlbSxcbiAgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIsXG4gIFNldHRpbmdHcm91cFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIENvbmRpdGlvbmFsS2V5cyxcbiAgRXhjZXB0LFxuICBQcm9taXNhYmxlLFxuICBSZWFkb25seURlZXBcbn0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgbWl4aW5Bc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHtcbiAgbm9vcCxcbiAgbm9vcEFzeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBjYXN0VG8sXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSxcbiAgUGx1Z2luU2V0dGluZ1RhYixcbiAgc2V0VG9vbHRpcFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzLFxuICBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGVcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tc2V0dGluZ3MtY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsdWUtY29tcG9uZW50LXdpdGgtY2hhbmdlLXRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0V4IH0gZnJvbSAnLi4vc2V0dGluZy1leC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi50cyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGVuc3VyZVdyYXBwZWQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvc2V0dGluZy1jb21wb25lbnQtd3JhcHBlci50cyc7XG5pbXBvcnQgeyBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSB9IGZyb20gJy4uL3NldHRpbmctY29tcG9uZW50cy90ZXh0LWJhc2VkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5nLWNvbXBvbmVudHMvdmFsaWRhdG9yLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBhZG9wdFNldHRpbmdFeCB9IGZyb20gJy4uL3NldHRpbmctZXgudHMnO1xuaW1wb3J0IHsgaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlciB9IGZyb20gJy4uL3ZhbGlkYXRpb24udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIEEgY29udGV4dCBwYXNzZWQgdG8gdGhlIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uuc2F2ZVRvRmlsZX0gbWV0aG9kLlxuICovXG5leHBvcnQgY29uc3QgU0FWRV9UT19GSUxFX0NPTlRFWFQgPSAnUGx1Z2luU2V0dGluZ3NUYWInO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHNldHRpbmdzIHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgb25DaGFuZ2VkPzogKG5ld1ZhbHVlOiBSZWFkb25seURlZXA8VD4sIG9sZFZhbHVlOiBSZWFkb25seURlZXA8VD4pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHNldHRpbmcgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGVtcHR5LlxuICAgKiBBcHBsaWNhYmxlIG9ubHkgdG8gdGV4dC1iYXNlZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBwbGFjZWhvbGRlciBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gICAqIEFwcGxpY2FibGUgb25seSB0byB0ZXh0LWJhc2VkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgb3B0aW9ucyBmb3IgYFBsdWdpblNldHRpbmdzVGFiQmFzZS5iaW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgc2V0dGluZ3MgcHJvcGVydHkgbmFtZSBiZWluZyBib3VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uc0V4dGVuZGVkPFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgVUlWYWx1ZSxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdIHwgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPikgPT4gVUlWYWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0gd2l0aCB2YWx1ZSBjb252ZXJ0ZXJzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lIGJlaW5nIGJvdW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZUJpbmRFeHRlbmRlZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT47XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlLmJpbmR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudFxuPiBleHRlbmRzIEJpbmRPcHRpb25zPFVJVmFsdWU+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IENvbmRpdGlvbmFsS2V5czxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT47XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gYmluZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpbnN0YW5jZSAobmVlZGVkIGJ5IE9ic2lkaWFuJ3MgUGx1Z2luU2V0dGluZ1RhYikuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nRXh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNlYXJjaCB0ZXJtcyBmb3IgdGhlIHNldHRpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGlhc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2V0dGluZy4gVXNlZCBmb3IgcmVuZGVyaW5nOyB0aGUgdGV4dCBjb250ZW50IG9mIGEgZnJhZ21lbnQgaXMgdXNlZCBmb3Igc2VhcmNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzYz86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNldHRpbmcgcm93IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGZvcm0gaXMgcmUtZXZhbHVhdGVkIG9uIGV2ZXJ5IHJlbmRlciBBTkQgb24gZXZlcnkge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZWZyZXNoRG9tU3RhdGV9XG4gICAqIGNhbGwsIHNvIGl0IGNhbiByZWZsZWN0IHJ1bnRpbWUgc3RhdGUuIE9ic2lkaWFuIGFwcGxpZXMgaXQgd2l0aCBgU2V0dGluZy5zZXREaXNhYmxlZGAsIHdoaWNoIGRpc2FibGVzIHRoZVxuICAgKiByb3cgYW5kIGV2ZXJ5IGNvbXBvbmVudCByZWdpc3RlcmVkIG9uIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzZXR0aW5nLiBVc2VkIGZvciByZW5kZXJpbmcgYW5kIHNlYXJjaC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc2V0dGluZyByb3cgaW1wZXJhdGl2ZWx5LCB0eXBpY2FsbHkgdmlhIHRoZSB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gICAqXG4gICAqIFRoZSBzZXR0aW5nIE9ic2lkaWFuIGNyZWF0ZXMgZm9yIHRoZSByb3cgaXMgYWRvcHRlZCBpbnRvIGEge0BsaW5rIFNldHRpbmdFeH0gYmVmb3JlIGl0IGlzIGhhbmRlZCBvdmVyLCBzb1xuICAgKiBhbiBpbXBlcmF0aXZlIHJvdyBib2R5IGNhcnJpZXMgb3ZlciB1bmNoYW5nZWQuIE1heSByZXR1cm4gYSBjbGVhbnVwIGZ1bmN0aW9uLCBpbnZva2VkIGJlZm9yZSB0aGUgcm93IGlzXG4gICAqIHRvcm4gZG93biBvciByZS1yZW5kZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIGdyb3VwIC0gVGhlIGdyb3VwIHRoZSBzZXR0aW5nIGJlbG9uZ3MgdG8uXG4gICAqIEByZXR1cm5zIEFuIG9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcmVhZG9ubHkgcmVuZGVyOiAoc2V0dGluZzogU2V0dGluZ0V4LCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIGlzIGluY2x1ZGVkIGluIHRoZSBzZXR0aW5ncyBzZWFyY2guIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaGFibGU/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBzZXR0aW5nIHJvdyBpcyByZW5kZXJlZC4gQSBmdW5jdGlvbiBmb3JtIGlzIHJlLWV2YWx1YXRlZCBvbiBldmVyeSByZW5kZXIgYW5kIG9uXG4gICAqIGV2ZXJ5IHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UucmVmcmVzaERvbVN0YXRlfSBjYWxsLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSB2aXNpYmxlPzogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2Uuc2V0dGluZ0dyb3VwRXh9LlxuICpcbiAqIEV2ZXJ5IG1lbWJlciBvZiB7QGxpbmsgU2V0dGluZ0RlZmluaXRpb25Hcm91cH0gZXhjZXB0IGl0cyBkaXNjcmltaW5hdG9yLCB3aGljaFxuICoge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5zZXR0aW5nR3JvdXBFeH0gc2V0cy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMgPSBFeGNlcHQ8U2V0dGluZ0RlZmluaXRpb25Hcm91cCwgJ3R5cGUnPjtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBwYXJhbXMgZm9yIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2UuYmluZH0uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBwbHVnaW4gc2V0dGluZ3MgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSBVSSBjb21wb25lbnQncyB2YWx1ZS5cbiAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUgYmVpbmcgYm91bmQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFRWYWx1ZUNvbXBvbmVudCxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+O1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXAge1xuICByZWFkb25seSB2YWxpZGF0aW9uTWVzc2FnZUNoYW5nZWQ6IFtwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZ107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5vblNhdmVTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNhdmUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgc2V0dGluZ3Mgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBuZXdTdGF0ZTogUmVhZG9ubHlQbHVnaW5TZXR0aW5nc1N0YXRlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogVGhlIG9sZCBzZXR0aW5ncyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+O1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZS5yZW5kZXJTZXR0aW5nRXh9LlxuICovXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3NUYWJCYXNlUmVuZGVyU2V0dGluZ0V4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBncm91cCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBncm91cDogU2V0dGluZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZyBPYnNpZGlhbiBjcmVhdGVkIGZvciB0aGUgcm93LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZztcblxuICAvKipcbiAgICogVGhlIHBhcmFtcyB0aGUgcm93IHdhcyBkZWNsYXJlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ0V4UGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1zIGZvciB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgcGx1Z2luIHNldHRpbmdzIHR5cGUuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBvbkxvYWRTZXR0aW5nczogKGxvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBpc0luaXRpYWxMb2FkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBzYXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2F2ZVNldHRpbmdzOiAoXG4gICAgbmV3U3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgb2xkU3RhdGU6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3NTdGF0ZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgdG8gc3Vic2NyaWJlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxQbHVnaW5TZXR0aW5ncz47XG59XG5cbi8qKlxuICogT3ducyB0aGUgdGFiJ3Mgc3Vic2NyaXB0aW9ucyB0byB0aGUgc2V0dGluZ3MgY29tcG9uZW50LlxuICpcbiAqIFRoZSBzdWJzY3JpcHRpb25zIGxpdmUgaW4ge0BsaW5rIG9ubG9hZH0gcmF0aGVyIHRoYW4gYXQgZWFjaCByZW5kZXIsIHNvIHRoYXQgYSBsb2FkL3VubG9hZCBwYWlyIHJlZ2lzdGVyc1xuICogdGhlbSBleGFjdGx5IG9uY2UuIFJlZ2lzdGVyaW5nIHRoZW0gcGVyIHJlbmRlciBpbnN0ZWFkIHdvdWxkIGFjY3VtdWxhdGUgYSBmcmVzaCBwYWlyIG9uIGV2ZXJ5IHJlbmRlciBjeWNsZSxcbiAqIGJlY2F1c2Uge0BsaW5rIENvbXBvbmVudEV4LmxvYWR9IGVhcmx5LXJldHVybnMgb25jZSB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgbm90aGluZyByZXNldHMgaW4gYmV0d2Vlbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5jbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkV2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCdzIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgeyBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudCB9ID0gdGhpcy5wYXJhbXM7XG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KHRoaXMsIHBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpID0+IHRoaXMucGFyYW1zLm9uTG9hZFNldHRpbmdzKGxvYWRlZFN0YXRlLCBpc0luaXRpYWxMb2FkKSkpO1xuICAgIHJlZ2lzdGVyQXN5bmNFdmVudCh0aGlzLCBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5vbignc2F2ZVNldHRpbmdzJywgKG5ld1N0YXRlLCBvbGRTdGF0ZSwgY29udGV4dCkgPT4gdGhpcy5wYXJhbXMub25TYXZlU2V0dGluZ3MobmV3U3RhdGUsIG9sZFN0YXRlLCBjb250ZXh0KSkpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgcGx1Z2luIHNldHRpbmdzIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBQcm92aWRlcyBhIG1ldGhvZCBmb3IgYmluZGluZyB2YWx1ZSBjb21wb25lbnRzIHRvIHBsdWdpbiBzZXR0aW5ncyBhbmQgaGFuZGxpbmcgY2hhbmdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHBsdWdpbiBzZXR0aW5ncyB0eXBlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NUYWJCYXNlPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIG1peGluQXN5bmNFdmVudHM8UGx1Z2luU2V0dGluZ3NUYWJCYXNlRXZlbnRNYXA+KCkoUGx1Z2luU2V0dGluZ1RhYikge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYiBpcyBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGlzIG9wZW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBtYW5hZ2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIC8qKlxuICAgKiBBIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlYm91bmNlIHRpbWVvdXQgZm9yIHNhdmluZyBzZXR0aW5ncy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2F2ZVNldHRpbmdzRGVib3VuY2VUaW1lb3V0SW5NaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBERUZBVUxUID0gMjAwMDtcbiAgICByZXR1cm4gREVGQVVMVDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+O1xuICBwcml2YXRlIGN1cnJlbnRSZW5kZXJDb21wb25lbnQ6IENvbXBvbmVudEV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2F2ZVNldHRpbmdzRGVib3VuY2VkOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuXG4gIHByaXZhdGUgZ2V0IHBsdWdpblNldHRpbmdzKCk6IFJlYWRvbmx5UGx1Z2luU2V0dGluZ3M8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXR0aW5nc1N0YXRlLmlucHV0VmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VDb25zdHJ1Y3RvclBhcmFtczxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyRWwsIENzc0NsYXNzLlBsdWdpblNldHRpbmdzVGFiKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCA9IGRlYm91bmNlKFxuICAgICAgY29udmVydEFzeW5jVG9TeW5jKCgpID0+IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCkpLFxuICAgICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICk7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgUGx1Z2luU2V0dGluZ3NUYWJFdmVudHNDb21wb25lbnQ8UGx1Z2luU2V0dGluZ3M+KHtcbiAgICAgIG9uTG9hZFNldHRpbmdzOiAobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25Mb2FkU2V0dGluZ3MobG9hZGVkU3RhdGUsIGlzSW5pdGlhbExvYWQpLFxuICAgICAgb25TYXZlU2V0dGluZ3M6IChuZXdTdGF0ZSwgb2xkU3RhdGUsIGNvbnRleHQpOiBQcm9taXNhYmxlPHZvaWQ+ID0+IHRoaXMub25TYXZlU2V0dGluZ3MoeyBjb250ZXh0LCBuZXdTdGF0ZSwgb2xkU3RhdGUgfSksXG4gICAgICBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudFxuICA+KFxuICAgIHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlQmluZFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kRXh0ZW5kZWRQYXJhbXM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudCwgUHJvcGVydHlOYW1lPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbXMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4gID4oXG4gICAgcGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VCaW5kSW1wbFBhcmFtczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50LCBQcm9wZXJ0eU5hbWU+IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIGJpbmQgb3ZlcmxvYWQgc2hhcmVzIHRoZSBCaW5kKiBwYXJhbSBmYW1pbHkuXG4gICk6IFRWYWx1ZUNvbXBvbmVudCB7XG4gICAgY29uc3Qge1xuICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgdmFsdWVDb21wb25lbnQsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHBhcmFtcztcbiAgICB0eXBlIFByb3BlcnR5VHlwZSA9IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV07XG4gICAgY29uc3QgREVGQVVMVF9PUFRJT05TOiBSZXF1aXJlZDxCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+PiA9IHtcbiAgICAgIGNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcjogKHZhbHVlOiBVSVZhbHVlKTogUHJvcGVydHlUeXBlID0+IHZhbHVlIGFzIFByb3BlcnR5VHlwZSxcbiAgICAgIG9uQ2hhbmdlZDogbm9vcCxcbiAgICAgIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHZhbHVlOiBSZWFkb25seURlZXA8UHJvcGVydHlUeXBlPik6IFVJVmFsdWUgPT4gdmFsdWUgYXMgVUlWYWx1ZSxcbiAgICAgIHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5OiB0cnVlLFxuICAgICAgc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlczogdHJ1ZSxcbiAgICAgIHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zRXh0ZW5zaW9uOiBSZXF1aXJlZDxCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+PiA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG5cbiAgICBjb25zdCB2YWxpZGF0b3JFbCA9IGdldFZhbGlkYXRvckNvbXBvbmVudCh2YWx1ZUNvbXBvbmVudCk/LnZhbGlkYXRvckVsO1xuXG4gICAgY29uc3QgdGV4dEJhc2VkQ29tcG9uZW50ID0gZ2V0VGV4dEJhc2VkQ29tcG9uZW50VmFsdWUodmFsdWVDb21wb25lbnQpO1xuXG4gICAgY29uc3QgcmVhZG9ubHlWYWx1ZSA9IHRoaXMuZ2V0UGx1Z2luU2V0dGluZ3NQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5kZWZhdWx0U2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGVmYXVsdHNbcHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBkZWZhdWx0Q29tcG9uZW50VmFsdWUgPSBvcHRpb25zRXh0ZW5zaW9uLnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcihkZWZhdWx0VmFsdWUgYXMgUmVhZG9ubHlEZWVwPFByb3BlcnR5VHlwZT4pO1xuICAgIHRleHRCYXNlZENvbXBvbmVudD8uc2V0UGxhY2Vob2xkZXJWYWx1ZShkZWZhdWx0Q29tcG9uZW50VmFsdWUpO1xuXG4gICAgbGV0IHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgdG9vbHRpcENvbnRlbnRFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodmFsaWRhdG9yRWwpIHtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBlbnN1cmVXcmFwcGVkKHZhbGlkYXRvckVsKTtcbiAgICAgIHRvb2x0aXBFbCA9IHdyYXBwZXIuY3JlYXRlRGl2KCk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRvb2x0aXBFbCwgW0Nzc0NsYXNzLlRvb2x0aXAsIENzc0NsYXNzLlRvb2x0aXBWYWxpZGF0b3JdKTtcbiAgICAgIHRvb2x0aXBDb250ZW50RWwgPSB0b29sdGlwRWwuY3JlYXRlU3BhbigpO1xuICAgICAgY29uc3QgdG9vbHRpcEFycm93RWwgPSB0b29sdGlwRWwuY3JlYXRlRGl2KCk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRvb2x0aXBBcnJvd0VsLCBDc3NDbGFzcy5Ub29sdGlwQXJyb3cpO1xuICAgICAgdG9vbHRpcEVsLmhpZGUoKTtcbiAgICAgIHdyYXBwZXIuYXBwZW5kKHRvb2x0aXBFbCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJBc3luY0V2ZW50KFxuICAgICAgdGhpcy5nZXRSZW5kZXJDb21wb25lbnQoKSxcbiAgICAgIHRoaXMub24oJ3ZhbGlkYXRpb25NZXNzYWdlQ2hhbmdlZCcsIChhbm90aGVyUHJvcGVydHlOYW1lLCBhbm90aGVyVmFsaWRhdGlvbk1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gYW5vdGhlclByb3BlcnR5TmFtZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYW5vdGhlclZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBsZXQgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcbiAgICBsZXQgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSBmYWxzZTtcblxuICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dGVuc2lvbi5zaG91bGRTaG93UGxhY2Vob2xkZXJGb3JEZWZhdWx0VmFsdWVzICYmIGlzRGVlcEVxdWFsKHJlYWRvbmx5VmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHRleHRCYXNlZENvbXBvbmVudC5lbXB0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZUNvbXBvbmVudC5zZXRWYWx1ZShvcHRpb25zRXh0ZW5zaW9uLnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcihyZWFkb25seVZhbHVlKSk7XG4gICAgfVxuXG4gICAgbGV0IHNob3VsZFNraXBPbkNoYW5nZSA9IGZhbHNlO1xuICAgIGNvbnN0IFVQREFURV9WQUxJREFUT1JfRUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDA7XG4gICAgY29uc3QgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB1cGRhdGVWYWxpZGF0b3JFbCgpO1xuICAgICAgfSk7XG4gICAgfSwgVVBEQVRFX1ZBTElEQVRPUl9FTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICB2YWx1ZUNvbXBvbmVudC5vbkNoYW5nZShjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKHVpVmFsdWUpID0+IHtcbiAgICAgIGlmIChzaG91bGRTa2lwT25DaGFuZ2UpIHtcbiAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmdldFBsdWdpblNldHRpbmdzUHJvcGVydHkocHJvcGVydHlOYW1lKTtcbiAgICAgIGxldCBuZXdWYWx1ZTogUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHNob3VsZFNldFByb3BlcnR5ID0gdHJ1ZTtcbiAgICAgIHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyID0gISF0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSAmJiBvcHRpb25zRXh0ZW5zaW9uLnNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5O1xuICAgICAgaWYgKHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBvcHRpb25zRXh0ZW5zaW9uLmNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcih1aVZhbHVlKTtcbiAgICAgICAgaWYgKGlzVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIoY29udmVydGVkVmFsdWUpKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSBjb252ZXJ0ZWRWYWx1ZS52YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgICBzaG91bGRTZXRQcm9wZXJ0eSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1ZhbHVlID0gY29udmVydGVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFNldFByb3BlcnR5KSB7XG4gICAgICAgIHZhbGlkYXRpb25NZXNzYWdlID0gYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlIGFzIFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0pO1xuICAgICAgICBpZiAodGV4dEJhc2VkQ29tcG9uZW50ICYmIG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkU2hvd1BsYWNlaG9sZGVyRm9yRGVmYXVsdFZhbHVlcyAmJiAhdGV4dEJhc2VkQ29tcG9uZW50LmlzRW1wdHkoKSAmJiBpc0RlZXBFcXVhbChuZXdWYWx1ZSwgZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIHNob3VsZEVtcHR5T25CbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgICBpZiAoc2hvdWxkU2V0UHJvcGVydHkpIHtcbiAgICAgICAgYXdhaXQgb3B0aW9uc0V4dGVuc2lvbi5vbkNoYW5nZWQobmV3VmFsdWUgYXMgUmVhZG9ubHlEZWVwPFByb3BlcnR5VHlwZT4sIG9sZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2F2ZVNldHRpbmdzRGVib3VuY2VkKCk7XG4gICAgfSkpO1xuXG4gICAgdmFsaWRhdG9yRWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuICAgIH0pO1xuICAgIHZhbGlkYXRvckVsPy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4ge1xuICAgICAgdXBkYXRlVmFsaWRhdG9yRWxlbWVudERlYm91bmNlZCgpO1xuICAgIH0pO1xuICAgIHZhbGlkYXRvckVsPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB1cGRhdGVWYWxpZGF0b3JFbGVtZW50RGVib3VuY2VkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25NZXNzYWdlcyA9IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2V0dGluZ3NTdGF0ZS52YWxpZGF0aW9uTWVzc2FnZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB2YWxpZGF0aW9uTWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlc1twcm9wZXJ0eU5hbWVdID8/ICcnO1xuICAgIHVwZGF0ZVZhbGlkYXRvckVsZW1lbnREZWJvdW5jZWQoKTtcblxuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudDtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbGlkYXRvckVsKCk6IHZvaWQge1xuICAgICAgaWYgKCF2YWxpZGF0b3JFbD8uaXNBY3RpdmVFbGVtZW50KCkpIHtcbiAgICAgICAgaWYgKHNob3VsZEVtcHR5T25CbHVyKSB7XG4gICAgICAgICAgc2hvdWxkRW1wdHlPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICghdGV4dEJhc2VkQ29tcG9uZW50Py5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHNob3VsZFNraXBPbkNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICB0ZXh0QmFzZWRDb21wb25lbnQ/LmVtcHR5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNob3VsZFJldmVydFRvRGVmYXVsdFZhbHVlT25CbHVyKSB7XG4gICAgICAgICAgc2hvdWxkUmV2ZXJ0VG9EZWZhdWx0VmFsdWVPbkJsdXIgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgc2hvdWxkU2tpcE9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKGRlZmF1bHRDb21wb25lbnRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdG9yRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnROb25OdWxsYWJsZSh0b29sdGlwQ29udGVudEVsKTtcblxuICAgICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlID09PSAnJykge1xuICAgICAgICB2YWxpZGF0b3JFbC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgICAgIHZhbGlkYXRvckVsLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0b3JFbC52YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgdmFsaWRhdG9yRWwuc2V0Q3VzdG9tVmFsaWRpdHkodmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgaWYgKG9wdGlvbnNFeHRlbnNpb24uc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHRvb2x0aXBDb250ZW50RWwudGV4dENvbnRlbnQgPSB2YWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgdG9vbHRpcEVsPy50b2dnbGUoISF2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHNldFRvb2x0aXAodmFsaWRhdG9yRWwsIHZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcGx1Z2luIHNldHRpbmdzIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNwbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheUxlZ2FjeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExlZ2FjeSB3YXkgdG8gcmVuZGVyIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiIGltcGVyYXRpdmVseS5cbiAgICpcbiAgICogVGhlIHByZS1kZWNsYXJhdGl2ZSBmYWxsYmFjazogT2JzaWRpYW4gb25seSBjYWxscyBpdCB3aGVuIHtAbGluayBnZXRTZXR0aW5nRGVmaW5pdGlvbnN9IHJldHVybnMgYW4gZW1wdHlcbiAgICogYXJyYXksIGkuZS4gd2hlbiB0aGUgY29uc3VtZXIgaGFzIG5vdCBvdmVycmlkZGVuIHtAbGluayBnZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zfS4gU3VjaCBhIGNvbnN1bWVyXG4gICAqIG92ZXJyaWRlcyB0aGlzIG1ldGhvZCBhbmQgYnVpbGRzIHRoZSBVSSB3aXRoIHtAbGluayBTZXR0aW5nRXh9IGFuZCB7QGxpbmsgYmluZH0uXG4gICAqL1xuICBwdWJsaWMgZGlzcGxheUxlZ2FjeSgpOiB2b2lkIHtcbiAgICB0aGlzLmJlZ2luUmVuZGVyQ3ljbGUoKTtcbiAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlIGJhY2tpbmcgYSBuYXRpdmUgYGNvbnRyb2xgIHNldHRpbmcgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogT2JzaWRpYW4gY2FsbHMgaXQgb24gZXZlcnkgcmVuZGVyIG9mIGEgYGNvbnRyb2xgLXR5cGUgZGVmaW5pdGlvbi4gVGhlIGluaGVyaXRlZCBpbXBsZW1lbnRhdGlvbiByZWFkc1xuICAgKiBgcGx1Z2luLnNldHRpbmdzYCwgd2hpY2ggYSBwbHVnaW4gYnVpbHQgb24ge0BsaW5rIFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZX0gbmV2ZXIgcG9wdWxhdGVzLCBzbyBpdCBpc1xuICAgKiByb3V0ZWQgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHNldHRpbmdzIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGdldENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmdldFBsdWdpblNldHRpbmdzUHJvcGVydHkoY2FzdFRvPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+PihrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWNsYXJhdGl2ZSBzZXR0aW5nIGRlZmluaXRpb25zIHJlbmRlcmVkIGJ5IE9ic2lkaWFuIDEuMTMrLlxuICAgKlxuICAgKiBEZWxlZ2F0ZXMgdG8ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9LiBXaGVuIGEgY29uc3VtZXIgaGFzIG5vdCBvdmVycmlkZGVuIHRoYXQgaG9vayBpdCByZXR1cm5zXG4gICAqIGFuIGVtcHR5IGFycmF5LCBhbmQgT2JzaWRpYW4gZmFsbHMgYmFjayB0byB0aGUgaW1wZXJhdGl2ZSB7QGxpbmsgZGlzcGxheUxlZ2FjeX0gcGF0aC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0U2V0dGluZ0RlZmluaXRpb25zKCk6IFNldHRpbmdEZWZpbml0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nRGVmaW5pdGlvbkl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgaGlkZSgpOiB2b2lkIHtcbiAgICBzdXBlci5oaWRlKCk7XG4gICAgdGhpcy5zYXZlU2V0dGluZ3NEZWJvdW5jZWQuY2FuY2VsKCk7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5lbmRSZW5kZXJDeWNsZSgpO1xuICAgIHRoaXMuY29tcG9uZW50LnVubG9hZCgpO1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuaGlkZUFzeW5jKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIHRoZSBzZXR0aW5ncyB0YWIgaXMgYmVpbmcgaGlkZGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIHRhYiBpcyBoaWRkZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGlkZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQuc2F2ZVRvRmlsZShTQVZFX1RPX0ZJTEVfQ09OVEVYVCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtcmVuZGVycyB0aGUgc2V0dGluZ3MgdGFiIGFmdGVyIHRoZSB1bmRlcmx5aW5nIHN0YXRlIGNoYW5nZWQuXG4gICAqXG4gICAqIFJlYnVpbGRzIHRoZSBkZWZpbml0aW9ucyBhbmQgcmUtcmVuZGVycywgd2hpY2ggY292ZXJzIGJvdGggcGF0aHM6IE9ic2lkaWFuIHJlbmRlcnMgdGhlIGRlY2xhcmF0aXZlXG4gICAqIGRlZmluaXRpb25zIHdoZW4ge0BsaW5rIGdldFNldHRpbmdEZWZpbml0aW9uSXRlbXN9IHByb3ZpZGVzIHRoZW0sIGFuZCBmYWxscyBiYWNrIHRvXG4gICAqIHtAbGluayBkaXNwbGF5TGVnYWN5fSB3aGVuIGl0IGRvZXMgbm90LiBOb3RoaW5nIGlzIHJlbmRlcmVkIHdoaWxlIHRoZSB0YWIgaXMgbm90IHRoZSBvbmUgb24gc2NyZWVuLlxuICAgKlxuICAgKiBVc2UgaXQgb25seSBmb3IgY2hhbmdlcyB0aGF0IGFsdGVyIHRoZSBTVFJVQ1RVUkUgb2YgdGhlIHRhYiDigJQgcm93cyBhZGRlZCBvciByZW1vdmVkLiBXaGVuIG9ubHkgYVxuICAgKiB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLmRpc2FibGVkfSAvIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMudmlzaWJsZX1cbiAgICogcHJlZGljYXRlIGhhcyB0byBiZSByZS1ldmFsdWF0ZWQsIGNhbGwgdGhlIG11Y2ggY2hlYXBlciB7QGxpbmsgcmVmcmVzaERvbVN0YXRlfSBpbnN0ZWFkLCB3aGljaCB0b2dnbGVzIHRoZVxuICAgKiByZW5kZXJlZCBET00gaW4gcGxhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIHRoZSB2YWx1ZSBvZiBhIG5hdGl2ZSBgY29udHJvbGAgc2V0dGluZyBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBUaGUgY291bnRlcnBhcnQgb2Yge0BsaW5rIGdldENvbnRyb2xWYWx1ZX06IGl0IHJvdXRlcyB0aGUgd3JpdGUgdG8gdGhlIHNldHRpbmdzIGNvbXBvbmVudCBpbnN0ZWFkIG9mIHRoZVxuICAgKiBpbmhlcml0ZWQgYHBsdWdpbi5zYXZlRGF0YWAgcGF0aCwgc28gdmFsaWRhdGlvbiwgdHJhbnNmb3JtZXJzIGFuZCB0aGUgZGVib3VuY2VkIHNhdmUgYWxsIGFwcGx5IGFzIHRoZXkgZG9cbiAgICogZm9yIGEge0BsaW5rIGJpbmR9LWVkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBzZXR0aW5ncyBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcGVyc2lzdC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YWx1ZSBpcyBzZXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgc2V0Q29udHJvbFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHR5cGUgUHJvcGVydHlOYW1lID0gU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz47XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC5zZXRQcm9wZXJ0eShjYXN0VG88UHJvcGVydHlOYW1lPihrZXkpLCBjYXN0VG88UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT4odmFsdWUpKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc0RlYm91bmNlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWNsYXJhdGl2ZSBzZXR0aW5nIGRlZmluaXRpb25zIGZvciB0aGUgdGFiIChPYnNpZGlhbiAxLjEzKykuXG4gICAqXG4gICAqIENvbnN1bWVycyBvdmVycmlkZSB0aGlzLCB0eXBpY2FsbHkgYnVpbGRpbmcgZWFjaCByb3cgd2l0aCB7QGxpbmsgc2V0dGluZ0V4fSBhbmQge0BsaW5rIGJpbmR9IGFuZCBncm91cGluZ1xuICAgKiB0aGVtIHdpdGggYHNldHRpbmdHcm91cEV4YC4gUmV0dXJuaW5nIGFuIGVtcHR5IGFycmF5IOKAlCB0aGUgZGVmYXVsdCDigJQgbWFrZXMgT2JzaWRpYW4gZmFsbCBiYWNrIHRvIHRoZVxuICAgKiBpbXBlcmF0aXZlIHtAbGluayBkaXNwbGF5TGVnYWN5fSBwYXRoLlxuICAgKlxuICAgKiBNVVNUIGJlIGEgcHVyZSBidWlsZGVyLiBPYnNpZGlhbiBjYWxscyBpdCB3aGVuIHRoZSB0YWIgaXMgcmVnaXN0ZXJlZCAoYGFkZFNldHRpbmdUYWJgKSwgbG9uZyBiZWZvcmUgdGhlXG4gICAqIHRhYiBpcyBldmVyIG9wZW5lZCwgaW4gb3JkZXIgdG8gaW5kZXggdGhlIHNldHRpbmdzIGZvciBzZWFyY2guIEFueXRoaW5nIHdpdGggYSBzaWRlIGVmZmVjdCBiZWxvbmdzIGluc2lkZVxuICAgKiBhIHJvdydzIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMucmVuZGVyfSBjYWxsYmFjaywgd2hpY2ggcnVucyBvbmx5IHdoZW4gdGhlIHJvdyBpc1xuICAgKiBhY3R1YWxseSByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0U2V0dGluZ0RlZmluaXRpb25JdGVtcygpOiBTZXR0aW5nRGVmaW5pdGlvbkl0ZW1bXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gc2V0dGluZ3MgYXJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIF9sb2FkZWRTdGF0ZSAtIFRoZSBsb2FkZWQgc2V0dGluZ3Mgc3RhdGUuXG4gICAqIEBwYXJhbSBfaXNJbml0aWFsTG9hZCAtIFdoZXRoZXIgdGhlIHNldHRpbmdzIGFyZSBiZWluZyBsb2FkZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2FkU2V0dGluZ3MoX2xvYWRlZFN0YXRlOiBSZWFkb25seVBsdWdpblNldHRpbmdzU3RhdGU8UGx1Z2luU2V0dGluZ3M+LCBfaXNJbml0aWFsTG9hZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmFsaWRhdGVzIHRoZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgcmV2YWxpZGF0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcmV2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZXMgPSBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LnJldmFsaWRhdGUoKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKHZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgc2VhcmNoLWluZGV4YWJsZSBkZWNsYXJhdGl2ZSByb3cgdGhhdCBpcyByZW5kZXJlZCBpbXBlcmF0aXZlbHkuXG4gICAqXG4gICAqIFRoZSBicmlkZ2UgYmV0d2VlbiB0aGUgZGVjbGFyYXRpdmUgQVBJIGFuZCB0aGlzIGxpYnJhcnkncyBpbXBlcmF0aXZlIGJ1aWxkaW5nIGJsb2NrczogT2JzaWRpYW4gb3ducyB0aGUgcm93IChzbyBpdFxuICAgKiBpbmRleGVzIGl0IGZvciBzZWFyY2ggYW5kIGV2YWx1YXRlcyBpdHMge0BsaW5rIFBsdWdpblNldHRpbmdzVGFiQmFzZVNldHRpbmdFeFBhcmFtcy52aXNpYmxlfSAvXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc1RhYkJhc2VTZXR0aW5nRXhQYXJhbXMuZGlzYWJsZWR9IHByZWRpY2F0ZXMgb24gZXZlcnlcbiAgICoge0BsaW5rIHJlZnJlc2hEb21TdGF0ZX0pLCB3aGlsZSB7QGxpbmsgUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zLnJlbmRlcn0gZmlsbHMgaXQgaW4gd2l0aFxuICAgKiB7QGxpbmsgU2V0dGluZ0V4fSBhZGRlcnMgYW5kIHtAbGluayBiaW5kfSBleGFjdGx5IGFzIGFuIGltcGVyYXRpdmUgdGFiIHdvdWxkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJvdyBwYXJhbXMuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGRlZmluaXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0dGluZ0V4KHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0V4UGFyYW1zKTogU2V0dGluZ0RlZmluaXRpb25SZW5kZXIge1xuICAgIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2V0dGluZ0RlZmluaXRpb25SZW5kZXI+KHtcbiAgICAgIGFsaWFzZXM6IHBhcmFtcy5hbGlhc2VzLFxuICAgICAgZGVzYzogcGFyYW1zLmRlc2MsXG4gICAgICBkaXNhYmxlZDogcGFyYW1zLmRpc2FibGVkLFxuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICByZW5kZXI6IChzZXR0aW5nOiBTZXR0aW5nLCBncm91cDogU2V0dGluZ0dyb3VwKSA9PiB0aGlzLnJlbmRlclNldHRpbmdFeCh7IGdyb3VwLCBzZXR0aW5nLCBzZXR0aW5nRXhQYXJhbXM6IHBhcmFtcyB9KSxcbiAgICAgIHNlYXJjaGFibGU6IHBhcmFtcy5zZWFyY2hhYmxlLFxuICAgICAgdmlzaWJsZTogcGFyYW1zLnZpc2libGVcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBkZWNsYXJhdGl2ZSBoZWFkaW5nIGdyb3VwLlxuICAgKlxuICAgKiBUaGUgZGVjbGFyYXRpdmUgY291bnRlcnBhcnQgb2YgYFNldHRpbmdHcm91cEV4YDogd2hlcmUgdGhhdCBjbGFzcyBhcHBlbmRzIGEgZ3JvdXAgdG8gYSBjb250YWluZXJcbiAgICogaW1wZXJhdGl2ZWx5LCB0aGlzIHJldHVybnMgdGhlIGRlZmluaXRpb24gT2JzaWRpYW4gcmVuZGVycywgc28gYSBncm91cC1zdHJ1Y3R1cmVkIHRhYiBrZWVwcyBpdHMgc2hhcGVcbiAgICogYWZ0ZXIgdGhlIG1pZ3JhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBncm91cCBwYXJhbXMuXG4gICAqIEByZXR1cm5zIFRoZSBncm91cCBkZWZpbml0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldHRpbmdHcm91cEV4KHBhcmFtczogUGx1Z2luU2V0dGluZ3NUYWJCYXNlU2V0dGluZ0dyb3VwRXhQYXJhbXMpOiBTZXR0aW5nRGVmaW5pdGlvbkdyb3VwIHtcbiAgICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNldHRpbmdEZWZpbml0aW9uR3JvdXA+KHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHR5cGU6ICdncm91cCdcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmVnaW5SZW5kZXJDeWNsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVuZFJlbmRlckN5Y2xlKCk7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50ID0gdGhpcy5jcmVhdGVSZW5kZXJDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk6IENvbXBvbmVudEV4IHtcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMuY29tcG9uZW50LmxvYWQoKTtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYWRkQ2hpbGQobmV3IENvbXBvbmVudEV4KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmRSZW5kZXJDeWNsZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZW5kZXJDb21wb25lbnQgPSB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQ7XG4gICAgaWYgKCFyZW5kZXJDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPSBudWxsO1xuICAgIHRoaXMuY29tcG9uZW50LnJlbW92ZUNoaWxkKHJlbmRlckNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBsdWdpblNldHRpbmdzUHJvcGVydHk8UHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lXG4gICk6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpblNldHRpbmdzIGFzIFBsdWdpblNldHRpbmdzO1xuICAgIHJldHVybiBzZXR0aW5nc1twcm9wZXJ0eU5hbWVdIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVuZGVyQ29tcG9uZW50KCk6IENvbXBvbmVudEV4IHtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJDb21wb25lbnQgPz89IHRoaXMuY3JlYXRlUmVuZGVyQ29tcG9uZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25TYXZlU2V0dGluZ3MocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VPblNhdmVTZXR0aW5nc1BhcmFtczxQbHVnaW5TZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBvbGRTdGF0ZTogX29sZFN0YXRlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoY29udGV4dCA9PT0gU0FWRV9UT19GSUxFX0NPTlRFWFQpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmFsaWRhdGlvbnMobmV3U3RhdGUudmFsaWRhdGlvbk1lc3NhZ2VzIGFzIFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgc3RyaW5nPik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIE1pcnJvcnMgT2JzaWRpYW4ncyBgU2V0dGluZ0RlZmluaXRpb25SZW5kZXIucmVuZGVyYCwgd2hvc2UgY2xlYW51cCBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAgcHJpdmF0ZSByZW5kZXJTZXR0aW5nRXgocGFyYW1zOiBQbHVnaW5TZXR0aW5nc1RhYkJhc2VSZW5kZXJTZXR0aW5nRXhQYXJhbXMpOiAoKCkgPT4gdm9pZCkgfCB2b2lkIHtcbiAgICBjb25zdCByb3dDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVJlbmRlckNvbXBvbmVudCgpO1xuICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyQ29tcG9uZW50ID0gdGhpcy5jdXJyZW50UmVuZGVyQ29tcG9uZW50O1xuICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IHJvd0NvbXBvbmVudDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gcGFyYW1zLnNldHRpbmdFeFBhcmFtcy5yZW5kZXIoYWRvcHRTZXR0aW5nRXgocGFyYW1zLnNldHRpbmcpLCBwYXJhbXMuZ3JvdXApO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnQucmVtb3ZlQ2hpbGQocm93Q29tcG9uZW50KTtcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY3VycmVudFJlbmRlckNvbXBvbmVudCA9IHByZXZpb3VzUmVuZGVyQ29tcG9uZW50O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVmFsaWRhdGlvbnModmFsaWRhdGlvbk1lc3NhZ2VzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbGlkYXRpb25NZXNzYWdlXSBvZiBPYmplY3QuZW50cmllcyh2YWxpZGF0aW9uTWVzc2FnZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygndmFsaWRhdGlvbk1lc3NhZ2VDaGFuZ2VkJywgcHJvcGVydHlOYW1lLCB2YWxpZGF0aW9uTWVzc2FnZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkEsbUJBR087QUFDUCwwQkFBaUM7QUFDakMsc0JBR087QUFDUCwwQkFJTztBQUNQLHlCQUFrQztBQUNsQyxzQkFJTztBQVdQLG9DQUFtQztBQUNuQywwQkFBNEI7QUFDNUIsdUJBQXlCO0FBQ3pCLHVDQUE4QjtBQUM5QixrQ0FBMkM7QUFDM0MsaUNBQXNDO0FBQ3RDLHdCQUErQjtBQUMvQix3QkFBMEM7QUFDMUMsNEJBQW9DO0FBSzdCLE1BQU0sdUJBQXVCO0FBNFNwQyxNQUFNLHlDQUF3RSxnQ0FBWTtBQUFBLEVBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEyRTtBQUM1RixVQUFNO0FBQ04sU0FBSyxTQUFTO0FBQUEsRUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtnQixTQUFlO0FBQzdCLFVBQU0sT0FBTztBQUNi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
@@ -63,14 +63,14 @@ export interface BindOptionsExtended<PluginSettings extends object, UIValue, Pro
63
63
  * @param uiValue - The value of the UI component.
64
64
  * @returns The value to set on the plugin settings.
65
65
  */
66
- componentToPluginSettingsValueConverter: (uiValue: UIValue) => PluginSettings[PropertyName] | ValidationMessageHolder;
66
+ readonly componentToPluginSettingsValueConverter: (uiValue: UIValue) => PluginSettings[PropertyName] | ValidationMessageHolder;
67
67
  /**
68
68
  * Converts the plugin settings value to the value used by the UI component.
69
69
  *
70
70
  * @param pluginSettingsValue - The value of the property in the plugin settings.
71
71
  * @returns The value to set on the UI component.
72
72
  */
73
- pluginSettingsToComponentValueConverter: (pluginSettingsValue: ReadonlyDeep<PluginSettings[PropertyName]>) => UIValue;
73
+ readonly pluginSettingsToComponentValueConverter: (pluginSettingsValue: ReadonlyDeep<PluginSettings[PropertyName]>) => UIValue;
74
74
  }
75
75
  /**
76
76
  * Extended params for {@link PluginSettingsTabBase.bind} with value converters.
@@ -177,7 +177,7 @@ export interface PluginSettingsTabBaseSettingExParams {
177
177
  */
178
178
  export type PluginSettingsTabBaseSettingGroupExParams = Except<SettingDefinitionGroup, 'type'>;
179
179
  interface PluginSettingsTabBaseEventMap {
180
- validationMessageChanged: [propertyName: string, validationMessage: string];
180
+ readonly validationMessageChanged: [propertyName: string, validationMessage: string];
181
181
  }
182
182
  declare const PluginSettingsTabBase_base: import("type-fest", { with: { 'resolution-mode': 'import' } }).AbstractConstructor<import("@mnaoumov/typescript-lib/async-events", { with: { 'resolution-mode': 'import' } }).AsyncEventSource<PluginSettingsTabBaseEventMap> & import("@mnaoumov/typescript-lib/async-events", { with: { 'resolution-mode': 'import' } }).AsyncEventTrigger<PluginSettingsTabBaseEventMap>> & typeof PluginSettingTab;
183
183
  /**