@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.
- package/components/incremental-file-index-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +20 -6
- package/dist/lib/cjs/__merged.d.cts +2 -0
- package/dist/lib/cjs/active-file-provider.cjs +6 -6
- package/dist/lib/cjs/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/app.cjs +5 -5
- package/dist/lib/cjs/async-with-notice.cjs +5 -5
- package/dist/lib/cjs/attachment-path.cjs +6 -6
- package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
- package/dist/lib/cjs/backlink-index.cjs +13 -19
- package/dist/lib/cjs/backlink-index.d.cts +1 -1
- package/dist/lib/cjs/backlink.cjs +5 -5
- package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
- package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
- package/dist/lib/cjs/callout.cjs +5 -5
- package/dist/lib/cjs/canvas.cjs +5 -5
- package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
- package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
- package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
- package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
- package/dist/lib/cjs/codemirror/index.cjs +5 -5
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
- package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
- package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/index.cjs +5 -5
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
- package/dist/lib/cjs/command-registrar.cjs +6 -6
- package/dist/lib/cjs/command-registrar.d.cts +2 -2
- package/dist/lib/cjs/community-plugins.cjs +6 -6
- package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +5 -5
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
- package/dist/lib/cjs/components/component-ex.cjs +5 -5
- package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
- package/dist/lib/cjs/components/disposable-component.cjs +5 -5
- package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +340 -0
- package/dist/lib/cjs/components/incremental-file-index-component.d.cts +152 -0
- package/dist/lib/cjs/components/index.cjs +9 -6
- package/dist/lib/cjs/components/index.d.cts +1 -0
- package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
- package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
- package/dist/lib/cjs/components/registry-component.cjs +5 -5
- package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
- package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +5 -5
- package/dist/lib/cjs/css-class.cjs +5 -5
- package/dist/lib/cjs/data-handler.cjs +6 -6
- package/dist/lib/cjs/data-handler.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
- package/dist/lib/cjs/data-stores/index.cjs +5 -5
- package/dist/lib/cjs/data-stores/local-data-store.cjs +5 -5
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
- package/dist/lib/cjs/dataview-link.cjs +5 -5
- package/dist/lib/cjs/dataview.cjs +12 -12
- package/dist/lib/cjs/dataview.d.cts +6 -6
- package/dist/lib/cjs/debug.cjs +5 -5
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
- package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
- package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
- package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
- package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
- package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
- package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
- package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
- package/dist/lib/cjs/editor.cjs +5 -5
- package/dist/lib/cjs/events.cjs +5 -5
- package/dist/lib/cjs/extensions-registrar.cjs +6 -6
- package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
- package/dist/lib/cjs/file-change.cjs +6 -6
- package/dist/lib/cjs/file-change.d.cts +3 -3
- package/dist/lib/cjs/file-explorer.cjs +5 -5
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +5 -5
- package/dist/lib/cjs/folder-note.cjs +6 -6
- package/dist/lib/cjs/folder-note.d.cts +1 -1
- package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
- package/dist/lib/cjs/frontmatter.cjs +6 -6
- package/dist/lib/cjs/frontmatter.d.cts +7 -7
- package/dist/lib/cjs/generated-during-build.cjs +7 -7
- package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
- package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
- package/dist/lib/cjs/html-element.cjs +5 -5
- package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
- package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
- package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
- package/dist/lib/cjs/i18n/i18n.cjs +5 -5
- package/dist/lib/cjs/i18n/index.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
- package/dist/lib/cjs/index.cjs +9 -6
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
- package/dist/lib/cjs/library-styles.cjs +5 -5
- package/dist/lib/cjs/library.cjs +5 -5
- package/dist/lib/cjs/link-name.cjs +5 -5
- package/dist/lib/cjs/link-update-progress.cjs +5 -5
- package/dist/lib/cjs/link.cjs +7 -7
- package/dist/lib/cjs/link.d.cts +2 -2
- package/dist/lib/cjs/logger.cjs +5 -5
- package/dist/lib/cjs/loop.cjs +5 -5
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
- package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/markdown-view.cjs +5 -5
- package/dist/lib/cjs/markdown.cjs +5 -5
- package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
- package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
- package/dist/lib/cjs/metadata-cache.cjs +6 -6
- package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
- package/dist/lib/cjs/modals/alert.cjs +5 -5
- package/dist/lib/cjs/modals/confirm.cjs +5 -5
- package/dist/lib/cjs/modals/index.cjs +5 -5
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
- package/dist/lib/cjs/modals/modal.cjs +5 -5
- package/dist/lib/cjs/modals/prompt.cjs +14 -14
- package/dist/lib/cjs/modals/select-item.cjs +5 -5
- package/dist/lib/cjs/modals/select-option.cjs +5 -5
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
- package/dist/lib/cjs/note-priority.cjs +5 -5
- package/dist/lib/cjs/notebook-navigator.cjs +6 -6
- package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
- package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +5 -5
- package/dist/lib/cjs/obsidian-word-characters.cjs +231 -0
- package/dist/lib/cjs/obsidian-word-characters.d.cts +59 -0
- package/dist/lib/cjs/parse-link.cjs +6 -6
- package/dist/lib/cjs/parse-link.d.cts +2 -2
- package/dist/lib/cjs/path-settings.cjs +6 -6
- package/dist/lib/cjs/pdf.cjs +5 -5
- package/dist/lib/cjs/plugin/index.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
- package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
- package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
- package/dist/lib/cjs/plugin/plugin.cjs +6 -6
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
- package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
- package/dist/lib/cjs/popovers/index.cjs +5 -5
- package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/property-entry.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +6 -6
- package/dist/lib/cjs/react/app-context.cjs +5 -5
- package/dist/lib/cjs/react/index.cjs +5 -5
- package/dist/lib/cjs/reference.cjs +6 -6
- package/dist/lib/cjs/reference.d.cts +6 -6
- package/dist/lib/cjs/resource-lock.cjs +6 -6
- package/dist/lib/cjs/resource-url.cjs +5 -5
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
- package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
- package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
- package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
- package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
- package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
- package/dist/lib/cjs/setting-ex.cjs +5 -5
- package/dist/lib/cjs/setting-group-ex.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
- package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
- package/dist/lib/cjs/templater.cjs +6 -6
- package/dist/lib/cjs/templater.d.cts +9 -9
- package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
- package/dist/lib/cjs/transformers/index.cjs +5 -5
- package/dist/lib/cjs/trusted-input.cjs +5 -5
- package/dist/lib/cjs/validation.cjs +6 -6
- package/dist/lib/cjs/validation.d.cts +1 -1
- package/dist/lib/cjs/vault-delete.cjs +5 -5
- package/dist/lib/cjs/vault-transaction.cjs +6 -6
- package/dist/lib/cjs/vault.cjs +5 -5
- package/dist/lib/cjs/view-registrar.cjs +6 -6
- package/dist/lib/cjs/view-registrar.d.cts +1 -1
- package/dist/lib/cjs/workspace.cjs +5 -5
- package/dist/lib/esm/__merged.d.mts +2 -0
- package/dist/lib/esm/__merged.mjs +15 -1
- package/dist/lib/esm/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/active-file-provider.mjs +1 -1
- package/dist/lib/esm/attachment-path.mjs +1 -1
- package/dist/lib/esm/backlink-index.d.mts +1 -1
- package/dist/lib/esm/backlink-index.mjs +8 -14
- package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
- package/dist/lib/esm/bases-view-registrar.mjs +1 -1
- package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
- package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
- package/dist/lib/esm/command-registrar.d.mts +2 -2
- package/dist/lib/esm/command-registrar.mjs +1 -1
- package/dist/lib/esm/community-plugins.mjs +1 -1
- package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
- package/dist/lib/esm/components/incremental-file-index-component.d.mts +152 -0
- package/dist/lib/esm/components/incremental-file-index-component.mjs +260 -0
- package/dist/lib/esm/components/index.d.mts +1 -0
- package/dist/lib/esm/components/index.mjs +3 -1
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
- package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
- package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
- package/dist/lib/esm/data-handler.d.mts +2 -2
- package/dist/lib/esm/data-handler.mjs +1 -1
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
- package/dist/lib/esm/dataview.d.mts +6 -6
- package/dist/lib/esm/dataview.mjs +7 -7
- package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
- package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
- package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
- package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
- package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
- package/dist/lib/esm/extensions-registrar.d.mts +1 -1
- package/dist/lib/esm/extensions-registrar.mjs +1 -1
- package/dist/lib/esm/file-change.d.mts +3 -3
- package/dist/lib/esm/file-change.mjs +1 -1
- package/dist/lib/esm/folder-note.d.mts +1 -1
- package/dist/lib/esm/folder-note.mjs +1 -1
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
- package/dist/lib/esm/frontmatter.d.mts +7 -7
- package/dist/lib/esm/frontmatter.mjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
- package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
- package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
- package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/link.d.mts +2 -2
- package/dist/lib/esm/link.mjs +2 -2
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
- package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
- package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
- package/dist/lib/esm/metadata-cache.mjs +1 -1
- package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
- package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
- package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
- package/dist/lib/esm/modals/prompt.mjs +9 -9
- package/dist/lib/esm/notebook-navigator.d.mts +3 -3
- package/dist/lib/esm/notebook-navigator.mjs +1 -1
- package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian-word-characters.d.mts +59 -0
- package/dist/lib/esm/obsidian-word-characters.mjs +139 -0
- package/dist/lib/esm/parse-link.d.mts +2 -2
- package/dist/lib/esm/parse-link.mjs +1 -1
- package/dist/lib/esm/path-settings.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
- package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
- package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
- package/dist/lib/esm/queue.mjs +1 -1
- package/dist/lib/esm/reference.d.mts +6 -6
- package/dist/lib/esm/reference.mjs +1 -1
- package/dist/lib/esm/resource-lock.mjs +1 -1
- package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
- package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
- package/dist/lib/esm/setting-components/month-component.mjs +1 -1
- package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
- package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
- package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
- package/dist/lib/esm/setting-components/week-component.mjs +1 -1
- package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
- package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
- package/dist/lib/esm/templater.d.mts +9 -9
- package/dist/lib/esm/templater.mjs +1 -1
- package/dist/lib/esm/validation.d.mts +1 -1
- package/dist/lib/esm/validation.mjs +1 -1
- package/dist/lib/esm/vault-transaction.mjs +1 -1
- package/dist/lib/esm/view-registrar.d.mts +1 -1
- package/dist/lib/esm/view-registrar.mjs +1 -1
- package/dist/styles.css +2 -2
- package/package.json +6 -3
|
@@ -242,4 +242,4 @@ export {
|
|
|
242
242
|
uninstallCommunityPlugin,
|
|
243
243
|
updateCommunityPlugin
|
|
244
244
|
};
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tdW5pdHktcGx1Z2lucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSDigJQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VwZGF0ZS91bmluc3RhbGwvZW5hYmxlL2Rpc2FibGUgYW4gYXJiaXRyYXJ5IGNvbW11bml0eSBwbHVnaW4g4oCUIHNlbGVjdGVkXG4gKiBieSBlaXRoZXIgaXRzIGBpZGAgb3IgaXRzIGRpc3BsYXkgYG5hbWVgIOKAlCB2aWEgT2JzaWRpYW4ncyBvd24gc3RvcmUgcGF0aCAoYGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW5gXG4gKiArIGBlbmFibGVQbHVnaW5BbmRTYXZlYCksIHNvIGFueSBkZXYvZGVwbG95IG9yIHRvb2xpbmcgZmxvdyBjYW4gcmV1c2UgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29tcGFyZSBhcyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCB7IHJlcXVlc3RVcmwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gZWl0aGVyIGJ5IGl0cyBpZCAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5SWRSZWZ9KSBvciBieSBpdHMgZGlzcGxheSBuYW1lXG4gKiAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZn0pLlxuICovXG5leHBvcnQgdHlwZSBDb21tdW5pdHlQbHVnaW5SZWYgPSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHwgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmO1xuXG4vKipcbiAqIEEgc2luZ2xlIHJlc3VsdCBvZiB7QGxpbmsgc2VhcmNoQ29tbXVuaXR5UGx1Z2luc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGBcbiAqIG9yIGBwbHVnaW5OYW1lYDsgYHNldHRpbmdzYCBpcyBvcHRpb25hbCAob21pdCBmb3IgYSBwbHVnaW4gdGhhdCBuZWVkcyBubyBjb25maWd1cmF0aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBQYXJ0aWFsPENvbW11bml0eVBsdWdpblNldHRpbmdzPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVFbmFibGVTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVwZGF0ZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvciBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGlkLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgZGlzcGxheSBuYW1lIChhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcmVnaXN0cnkpLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudHJ5IGluIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luRW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBhdXRob3IuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkZXNjcmlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlIGEgY29tbXVuaXR5LXBsdWdpbiBvcGVyYXRpb24gcnVucyBhZ2FpbnN0LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIG1lcmdlIGludG8gYSBjb21tdW5pdHkgcGx1Z2luJ3MgYGRhdGEuanNvbmAuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3Mgb2JqZWN0IHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIHBsdWdpbidzIGV4aXN0aW5nIGBkYXRhLmpzb25gICh0aGUgZmlsZSBpcyBjcmVhdGVkIGlmXG4gICAqIGFic2VudCkuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZTogYHRydWVgIGVuYWJsZXMgdGhlIHBsdWdpbiwgYGZhbHNlYCBkaXNhYmxlcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGU6IGB0cnVlYCBpbnN0YWxscyB0aGUgcGx1Z2luLCBgZmFsc2VgIHVuaW5zdGFsbHMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0luc3RhbGxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgb25lIG1ldGhvZCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSBuZWVkcyBmcm9tIGEgcGx1Z2luJ3Mgc2V0dGluZ3MgY29tcG9uZW50IHRvIGNvbmZpZ3VyZVxuICogaXQgbGl2ZS4gRGVjbGFyZWQgc3RydWN0dXJhbGx5IHJhdGhlciB0aGFuIGltcG9ydGluZyBgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRgLCBzbyBhIHBsdWdpbiBidWlsdCBvblxuICogYW55IHZlcnNpb24gb2YgaXQgLS0gb3Igb24gaXRzIG93biBlcXVpdmFsZW50IC0tIGlzIGNvbmZpZ3VyYWJsZSB3aXRob3V0IGEgc2hhcmVkIG5vbWluYWwgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIEVkaXRhYmxlU2V0dGluZ3NDb21wb25lbnQge1xuICBlZGl0QW5kU2F2ZTogKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IG9iamVjdCkgPT4gdm9pZCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVkgPSAnY29tbXVuaXR5UGx1Z2luRW50cmllc1Byb21pc2UnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL0hFQUQvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBjb25maWd1cmVDb21tdW5pdHlQbHVnaW59LlxuICovXG5leHBvcnQgZW51bSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYXBwbGllZCB0aHJvdWdoIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIGJvdGggdXBkYXRlZFxuICAgKiB0aGVtIGluIG1lbW9yeSBhbmQgcGVyc2lzdGVkIHRoZW0uIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSB1c2luZyB0aGVtLCBzbyBpdCBtdXN0IE5PVCBiZSByZWxvYWRlZC5cbiAgICovXG4gIEFwcGxpZWRMaXZlID0gJ2FwcGxpZWRMaXZlJyxcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc28gbm90aGluZyB3YXMgd3JpdHRlbi5cbiAgICovXG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIG1lcmdlZCBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgd2hpY2ggd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgdXBkYXRlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuZXhwb3J0IGVudW0gVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgY29weSBpcyBhbHJlYWR5IGF0IChvciBwYXN0KSB0aGUgbGF0ZXN0IHJlbGVhc2UsIHNvIG5vdGhpbmcgd2FzIGRvd25sb2FkZWQuXG4gICAqL1xuICBBbHJlYWR5VXBUb0RhdGUgPSAnYWxyZWFkeVVwVG9EYXRlJyxcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCByZWxlYXNlIHdhcyBpbnN0YWxsZWQgb3ZlciB0aGUgb2xkIGNvcHksIHdoaWNoIE9ic2lkaWFuIHJlbG9hZGVkIGlmIGl0IHdhcyBydW5uaW5nLlxuICAgKi9cbiAgVXBkYXRlZCA9ICd1cGRhdGVkJ1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYSBjb21tdW5pdHkgcGx1Z2luLCBwcmVmZXJyaW5nIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQgb3ZlciBpdHNcbiAqIGBkYXRhLmpzb25gLlxuICpcbiAqIFdoZW4gdGhlIHBsdWdpbiBpcyBsb2FkZWQgQU5EIGV4cG9zZXMgYSBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnRgIHdpdGggYW4gYGVkaXRBbmRTYXZlYCBtZXRob2QsIHRoZVxuICogc2V0dGluZ3MgYXJlIHNoYWxsb3ctbWVyZ2VkIHRocm91Z2ggaXQ6IHRoZXkgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkgYW5kIGFyZSBwZXJzaXN0ZWQsIHNvIHRoZSBwbHVnaW5cbiAqIG5lZWRzIG5vIHJlbG9hZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaXMgcmV0dXJuZWQuIFRoaXMgaXMgd2hhdCBsZXRzIGFcbiAqIHBsdWdpbidzIG93biBzY3JpcHQgcmVjb25maWd1cmUgaXQgd2l0aG91dCB0aGUgZGlzYWJsZS9lbmFibGUgY3ljbGUgdGhhdCB3b3VsZCB0ZWFyIGRvd24gdGhlIHZlcnkgY29kZVxuICogZG9pbmcgdGhlIHJlY29uZmlndXJpbmcuIE5vdGUgdGhhdCB0aGlzIHBhdGggcnVucyB0aGUgcGx1Z2luJ3Mgc2V0dGluZyB2YWxpZGF0b3JzLCBzbyBhbiBpbnZhbGlkIHZhbHVlXG4gKiBpcyByZXBsYWNlZCBieSBpdHMgZGVmYXVsdCByYXRoZXIgdGhhbiB3cml0dGVuIHRocm91Z2ggdmVyYmF0aW0uXG4gKlxuICogT3RoZXJ3aXNlIHRoZSBzZXR0aW5ncyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc2hhbGxvdy1tZXJnZWQgb3ZlciBhbnkgZXhpc3RpbmdcbiAqIHNldHRpbmdzIChjcmVhdGluZyB0aGUgZmlsZSBpZiBhYnNlbnQpLiBXcml0aW5nIHNldHRpbmdzIEJFRk9SRSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgbWFrZXMgaXQgbG9hZFxuICogYWxyZWFkeSBjb25maWd1cmVkLCB3aXRoIG5vIHJlbG9hZC4gQSBuby1vcCB3cml0ZSBpcyBza2lwcGVkOiB3aGVuIHRoZSBtZXJnZSBjaGFuZ2VzIG5vdGhpbmcsIHRoZSBmaWxlXG4gKiBpcyBsZWZ0IHVudG91Y2hlZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpcyByZXR1cm5lZCwgc28gYSBjYWxsZXIgY2FuIGF2b2lkXG4gKiByZWxvYWRpbmcgYW4gYWxyZWFkeS1jb3JyZWN0bHktY29uZmlndXJlZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8ge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaWYgdGhlXG4gKiBydW5uaW5nIHBsdWdpbiBhcHBsaWVkIHRoZW0gaXRzZWxmIChubyByZWxvYWQgbmVlZGVkKSwge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzfSBpZlxuICogdGhlIGBkYXRhLmpzb25gIGNvbnRlbnQgY2hhbmdlZCAoYW5kIHdhcyB3cml0dGVuKSwgb3Ige0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpZlxuICogdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IChub3RoaW5nIHdyaXR0ZW4pLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8Q29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0PiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuXG4gIGNvbnN0IHNldHRpbmdzQ29tcG9uZW50ID0gZ2V0U2V0dGluZ3NDb21wb25lbnQoYXBwLnBsdWdpbnMucGx1Z2luc1twbHVnaW5JZF0pO1xuICBpZiAoY2hlY2tIYXNFZGl0QW5kU2F2ZShzZXR0aW5nc0NvbXBvbmVudCkpIHtcbiAgICBhd2FpdCBzZXR0aW5nc0NvbXBvbmVudC5lZGl0QW5kU2F2ZSgocGx1Z2luU2V0dGluZ3MpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luU2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LkFwcGxpZWRMaXZlO1xuICB9XG5cbiAgY29uc3QgZGF0YVBhdGggPSBgJHthcHAudmF1bHQuY29uZmlnRGlyfS9wbHVnaW5zLyR7cGx1Z2luSWR9L2RhdGEuanNvbmA7XG5cbiAgbGV0IGRhdGE6IG9iamVjdCA9IHt9O1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRhdGFQYXRoKSkge1xuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChkYXRhUGF0aCkpO1xuICAgIGlmIChwYXJzZWQgIT09IG51bGwgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZEJlZm9yZSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICBPYmplY3QuYXNzaWduKGRhdGEsIHNldHRpbmdzKTtcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSBzZXJpYWxpemVkQmVmb3JlKSB7XG4gICAgcmV0dXJuIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyhKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGRhdGFQYXRoLCBgJHtzZXJpYWxpemVkfVxcbmApO1xuICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3M7XG59XG5cbi8qKlxuICogRGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIGN1cnJlbnRseSBlbmFibGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkaXNhYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgbm90IGFscmVhZHkgZW5hYmxlZC4gSWRlbXBvdGVudCDigJQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBvZiBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSBPYnNpZGlhbidzIHB1YmxpY1xuICogYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSByZWdpc3RyeSBpcyBmZXRjaGVkIG9uY2UgYW5kIGNhY2hlZCBvbiB0aGUgc2hhcmVkIHBsdWdpbiBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxsczsgYSBmYWlsZWRcbiAqIGZldGNoIGlzIG5vdCBjYWNoZWQsIHNvIGEgbGF0ZXIgY2FsbCByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQgdG8gbG9vayB1cC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIHJlcG9zaXRvcnksIG9yIGBudWxsYCBpZiB0aGVcbiAqIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIHRoZSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHBsdWdpbklkKTtcbiAgcmV0dXJuIGVudHJ5Py5yZXBvID8/IG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gKHRoZSByZWxlYXNlIGB0YWdfbmFtZWAsIGEgYmFyZSB2ZXJzaW9uIHN1Y2ggYXMgYDEuMi4zYCkgb2YgYVxuICogR2l0SHViIHJlcG9zaXRvcnkuXG4gKlxuICogQHBhcmFtIHJlcG8gLSBUaGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vcmVsZWFzZXMvbGF0ZXN0YCk7XG4gIGNvbnN0IHJlbGVhc2UgPSByZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gIHJldHVybiByZWxlYXNlLnRhZ19uYW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBzdG9yZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuIElkZW1wb3RlbnQg4oCUIGFcbiAqIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGluc3RhbGxlZC4gUmVzb2x2ZXMgdGhlIHBsdWdpbidzIHJlcG9zaXRvcnkgZnJvbSBPYnNpZGlhbidzXG4gKiBjb21tdW5pdHkgcmVnaXN0cnksIHJlYWRzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uIGFuZCBpdHMgbWFuaWZlc3QsIGFuZCBpbnN0YWxscyBpdCB0aHJvdWdoXG4gKiBPYnNpZGlhbidzIG93biBgaW5zdGFsbFBsdWdpbmAgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlcG8gPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkKTtcbiAgaWYgKCFyZXBvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gJyR7cGx1Z2luSWR9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luLCB3cml0ZXMgaXRzIHNldHRpbmdzLCBUSEVOIGVuYWJsZXMgaXQg4oCUIGluIHRoYXQgb3JkZXIg4oCUIHNvIHRoZSBwbHVnaW5cbiAqIGxvYWRzIGFscmVhZHkgY29uZmlndXJlZCAoYSBwbHVnaW4gZW5hYmxlZCBiZWZvcmUgaXQgaXMgY29uZmlndXJlZCBydW5zIGl0cyBgb25sb2FkYCB3aXRoIGRlZmF1bHRcbiAqIHNldHRpbmdzIGFuZCBkb2VzIG5vdGhpbmcgdXNlZnVsKS4gSWYgdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQgYW5kIHRoZSBzZXR0aW5ncyBjaGFuZ2VkLCBpdCBpc1xuICogZGlzYWJsZWQgYW5kIHJlLWVuYWJsZWQgc28gdGhlIG5ldyBzZXR0aW5ncyB0YWtlIGVmZmVjdC4gYHNldHRpbmdzYCBpcyBvcHRpb25hbDogb21pdCBpdCBmb3IgYSBwbHVnaW5cbiAqIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbi4gQ29tcG9zZXMge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSxcbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IGFuZCB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgY29uc3QgZGlkU2V0dGluZ3NDaGFuZ2UgPSBzZXR0aW5ncyA/IGF3YWl0IGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbih7IC4uLnBhcmFtcywgc2V0dGluZ3MgfSkgPT09IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzIDogZmFsc2U7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKGRpZFNldHRpbmdzQ2hhbmdlKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgT2JzaWRpYW4ncyBwdWJsaWMgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnksIHJldHVybmluZyB0aGUgaWQgYW5kIGRpc3BsYXkgbmFtZSBvZiBldmVyeVxuICogcGx1Z2luIHdob3NlIGlkLCBuYW1lLCBhdXRob3Igb3IgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHF1ZXJ5IChjYXNlLWluc2Vuc2l0aXZlKS4gQW4gZW1wdHkgcXVlcnlcbiAqIG1hdGNoZXMgZXZlcnkgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG1hdGNoaW5nIHBsdWdpbnMnIHtAbGluayBDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHR9cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbW11bml0eVBsdWdpbnMocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChlbnRyeSkgPT5cbiAgICAgIGVudHJ5LmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmF1dGhvci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgIClcbiAgICAubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWVcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0VuYWJsZWQpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyBvciB1bmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBpbnN0YWxsaW5nIGFuZCB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBpZiBpdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpc1xuICogbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgdW5pbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW4gaW5zdGFsbGVkIGNvbW11bml0eSBwbHVnaW4gdG8gaXRzIGxhdGVzdCByZWxlYXNlLCB0aGUgd2F5IHRoZSBjb21tdW5pdHkgcGx1Z2luIGJyb3dzZXIncyBvd25cbiAqIGBVcGRhdGVgIGJ1dHRvbiBkb2VzLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGluc3RhbGxQbHVnaW5gIHdyaXRlcyB0aGUgcmVsZWFzZSdzIGZpbGVzIG92ZXIgdGhlIGluc3RhbGxlZCBjb3B5IGFuZCwgd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBydW5uaW5nLCBkaXNhYmxlcyBhbmQgcmUtZW5hYmxlcyBpdCBzbyB0aGUgbmV3IGNvZGUgbG9hZHMg4oCUIHJlYWQgZnJvbSB0aGUgc2hpcHBlZCBidW5kbGUgKGAxLjE0LjRgKSwgbm90XG4gKiBhc3N1bWVkLiBJdCByZXBvcnRzIGl0cyBvd24gZmFpbHVyZXMgKGEgZmFpbGVkIGRvd25sb2FkLCBhIG1hbmlmZXN0IHdob3NlIGlkIGRvZXMgbm90IG1hdGNoKSBhcyBhIG5vdGljZVxuICogYW5kIFJFVFVSTlMgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNvIHRoZSBpbnN0YWxsZWQgbWFuaWZlc3QgaXMgcmUtcmVhZCBhZnRlcndhcmRzIGFuZCBhIHZlcnNpb24gdGhhdCBkaWRcbiAqIG5vdCBtb3ZlIHRvIHRoZSByZWxlYXNlIGlzIHRocm93biBhcyBhIGZhaWx1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlVwZGF0ZWR9IG9uY2UgdGhlIGxhdGVzdCByZWxlYXNlXG4gKiBpcyBpbnN0YWxsZWQsIG9yIHtAbGluayBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlfSB3aGVuIHRoZSBpbnN0YWxsZWQgY29weSBpcyBub3Qgb2xkZXJcbiAqIHRoYW4gaXQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGluc3RhbGxlZCwgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCBvciB0aGVcbiAqIGluc3RhbGwgZGlkIG5vdCBsZWF2ZSB0aGUgbGF0ZXN0IHJlbGVhc2UgaW4gcGxhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVcGRhdGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPFVwZGF0ZUNvbW11bml0eVBsdWdpblJlc3VsdD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBjb25zdCBpbnN0YWxsZWRNYW5pZmVzdCA9IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF07XG4gIGlmICghaW5zdGFsbGVkTWFuaWZlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIGlzIG5vdCBpbnN0YWxsZWQsIHNvIGl0IGNhbm5vdCBiZSB1cGRhdGVkLmApO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBpZiAoaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRNYW5pZmVzdC52ZXJzaW9uLCB2ZXJzaW9uKSkge1xuICAgIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG5cbiAgY29uc3QgdXBkYXRlZFZlcnNpb24gPSBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uO1xuICBpZiAodXBkYXRlZFZlcnNpb24gIT09IG1hbmlmZXN0LnZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVXBkYXRpbmcgcGx1Z2luICcke3BsdWdpbklkfScgdG8gJHttYW5pZmVzdC52ZXJzaW9ufSBsZWZ0IHZlcnNpb24gJHt1cGRhdGVkVmVyc2lvbiA/PyAnKG5vbmUpJ30gaW5zdGFsbGVkLiBPYnNpZGlhbiByZXBvcnRzIHRoZSBjYXVzZSBhcyBhIG5vdGljZS5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuVXBkYXRlZDtcbn1cblxuLy8gV2hldGhlciBhIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAgY2FuIGNvbmZpZ3VyZSBpdHNlbGYgaW4gcGxhY2UuIFN0cnVjdHVyYWwgcmF0aGVyIHRoYW4gYW5cbi8vIGBpbnN0YW5jZW9mYDogdGhlIHBsdWdpbiB3YXMgbG9hZGVkIGZyb20gaXRzIG93biBidW5kbGUsIHNvIGV2ZW4gYSBwbHVnaW4gYnVpbHQgb24gdGhpcyB2ZXJ5IGxpYnJhcnlcbi8vIGNhcnJpZXMgaXRzIG93biBjb3B5IG9mIHRoZSBjbGFzcyBhbmQgd291bGQgZmFpbCBhbiBpZGVudGl0eSBjaGVjay5cbmZ1bmN0aW9uIGNoZWNrSGFzRWRpdEFuZFNhdmUoc2V0dGluZ3NDb21wb25lbnQ6IHVua25vd24pOiBzZXR0aW5nc0NvbXBvbmVudCBpcyBFZGl0YWJsZVNldHRpbmdzQ29tcG9uZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBzZXR0aW5nc0NvbXBvbmVudCA9PT0gJ29iamVjdCdcbiAgICAmJiBzZXR0aW5nc0NvbXBvbmVudCAhPT0gbnVsbFxuICAgICYmICdlZGl0QW5kU2F2ZScgaW4gc2V0dGluZ3NDb21wb25lbnRcbiAgICAmJiB0eXBlb2Ygc2V0dGluZ3NDb21wb25lbnQuZWRpdEFuZFNhdmUgPT09ICdmdW5jdGlvbic7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1VSTCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIENvbW11bml0eVBsdWdpbkVudHJ5W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbi8vIFJlYWRzIGEgbG9hZGVkIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAsIG9yIGBudWxsYCB3aGVuIGl0IGhhcyBub25lLiBUYWtlcyBgdW5rbm93bmAgYmVjYXVzZVxuLy8gQSBwbHVnaW4gaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBleHBvc2Ugb25lLCBzbyB0aGVyZSBpcyBubyB0eXBlIHRvIG5hcnJvdyBmcm9tLlxuZnVuY3Rpb24gZ2V0U2V0dGluZ3NDb21wb25lbnQocGx1Z2luOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiB0eXBlb2YgcGx1Z2luICE9PSAnb2JqZWN0JyB8fCBwbHVnaW4gPT09IG51bGwgfHwgISgncGx1Z2luU2V0dGluZ3NDb21wb25lbnQnIGluIHBsdWdpbikgPyBudWxsIDogcGx1Z2luLnBsdWdpblNldHRpbmdzQ29tcG9uZW50O1xufVxuXG4vLyBBIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIHJlYWRzIGFzIG9sZGVyLCBzbyBhbiB1cGRhdGUgaXMgYXR0ZW1wdGVkIHJhdGhlciB0aGFuIHNraXBwZWQ6IHRoZSBpbnN0YWxsJ3Ncbi8vIG93biB2ZXJzaW9uIGNoZWNrIGFmdGVyd2FyZHMgc3RpbGwgY2F0Y2hlcyBhIHJlbGVhc2UgdGhhdCBkb2VzIG5vdCBtb3ZlIGl0LlxuZnVuY3Rpb24gaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRWZXJzaW9uOiBzdHJpbmcsIGxhdGVzdFZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbiwgJz49Jyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmZXJlbmNlOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZmVyZW5jZS5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZmVyZW5jZS5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxTQUFTLFdBQVcsdUJBQXVCO0FBQzNDLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMsMkJBQTJCO0FBMExwQyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLHdCQUF3QjtBQUM5QixNQUFN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TSxJQUFJO0FBQUEsTUFDUixvQkFBb0IsUUFBUSxRQUFRLFNBQVMsT0FBTyxpQkFBaUIsa0JBQWtCLFFBQVE7QUFBQSxJQUNqRztBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFLQSxTQUFTLG9CQUFvQixtQkFBNEU7QUFDdkcsU0FBTyxPQUFPLHNCQUFzQixZQUMvQixzQkFBc0IsUUFDdEIsaUJBQWlCLHFCQUNqQixPQUFPLGtCQUFrQixnQkFBZ0I7QUFDaEQ7QUFFQSxlQUFlLDhCQUErRDtBQUM1RSxRQUFNLFdBQVcsTUFBTSxXQUFXLHFCQUFxQjtBQUN2RCxTQUFPLFNBQVM7QUFDbEI7QUFFQSxlQUFlLDRCQUE2RDtBQUMxRSxRQUFNLFFBQVEsb0JBQTRELDZCQUE2QixJQUFJO0FBQzNHLFFBQU0sVUFBVSw0QkFBNEI7QUFFNUMsTUFBSTtBQUNGLFdBQU8sTUFBTSxNQUFNO0FBQUEsRUFDckIsU0FBUyxPQUFPO0FBQ2QsVUFBTSxRQUFRO0FBQ2QsVUFBTTtBQUFBLEVBQ1I7QUFDRjtBQUVBLGVBQWUsa0JBQWtCLE1BQWMsU0FBMEM7QUFDdkYsUUFBTSxXQUFXLE1BQU0sV0FBVyxzQkFBc0IsSUFBSSxzQkFBc0IsT0FBTyxnQkFBZ0I7QUFDekcsU0FBTyxTQUFTO0FBQ2xCO0FBSUEsU0FBUyxxQkFBcUIsUUFBMEI7QUFDdEQsU0FBTyxPQUFPLFdBQVcsWUFBWSxXQUFXLFFBQVEsRUFBRSw2QkFBNkIsVUFBVSxPQUFPLE9BQU87QUFDakg7QUFJQSxTQUFTLGlCQUFpQixrQkFBMEIsZUFBZ0M7QUFDbEYsTUFBSTtBQUNGLFdBQU8sZ0JBQWdCLGtCQUFrQixlQUFlLElBQUk7QUFBQSxFQUM5RCxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVBLGVBQWUseUJBQXlCLFdBQWdEO0FBQ3RGLE1BQUksY0FBYyxXQUFXO0FBQzNCLFdBQU8sVUFBVTtBQUFBLEVBQ25CO0FBRUEsUUFBTSxVQUFVLE1BQU0sMEJBQTBCO0FBQ2hELFFBQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxjQUFjLFVBQVUsU0FBUyxVQUFVLFVBQVU7QUFDakYsTUFBSSxDQUFDLE9BQU87QUFDVixVQUFNLElBQUksTUFBTSxpQkFBaUIsVUFBVSxVQUFVLDZEQUE2RDtBQUFBLEVBQ3BIO0FBQ0EsU0FBTyxNQUFNO0FBQ2Y7IiwibmFtZXMiOlsiQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IiwiVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0Il19
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tdW5pdHktcGx1Z2lucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSDigJQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VwZGF0ZS91bmluc3RhbGwvZW5hYmxlL2Rpc2FibGUgYW4gYXJiaXRyYXJ5IGNvbW11bml0eSBwbHVnaW4g4oCUIHNlbGVjdGVkXG4gKiBieSBlaXRoZXIgaXRzIGBpZGAgb3IgaXRzIGRpc3BsYXkgYG5hbWVgIOKAlCB2aWEgT2JzaWRpYW4ncyBvd24gc3RvcmUgcGF0aCAoYGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW5gXG4gKiArIGBlbmFibGVQbHVnaW5BbmRTYXZlYCksIHNvIGFueSBkZXYvZGVwbG95IG9yIHRvb2xpbmcgZmxvdyBjYW4gcmV1c2UgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29tcGFyZSBhcyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCB7IHJlcXVlc3RVcmwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gZWl0aGVyIGJ5IGl0cyBpZCAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5SWRSZWZ9KSBvciBieSBpdHMgZGlzcGxheSBuYW1lXG4gKiAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZn0pLlxuICovXG5leHBvcnQgdHlwZSBDb21tdW5pdHlQbHVnaW5SZWYgPSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHwgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmO1xuXG4vKipcbiAqIEEgc2luZ2xlIHJlc3VsdCBvZiB7QGxpbmsgc2VhcmNoQ29tbXVuaXR5UGx1Z2luc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGBcbiAqIG9yIGBwbHVnaW5OYW1lYDsgYHNldHRpbmdzYCBpcyBvcHRpb25hbCAob21pdCBmb3IgYSBwbHVnaW4gdGhhdCBuZWVkcyBubyBjb25maWd1cmF0aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBQYXJ0aWFsPENvbW11bml0eVBsdWdpblNldHRpbmdzPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVFbmFibGVTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVwZGF0ZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvciBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGlkLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgZGlzcGxheSBuYW1lIChhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcmVnaXN0cnkpLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudHJ5IGluIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luRW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBhdXRob3IuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkZXNjcmlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlIGEgY29tbXVuaXR5LXBsdWdpbiBvcGVyYXRpb24gcnVucyBhZ2FpbnN0LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIG1lcmdlIGludG8gYSBjb21tdW5pdHkgcGx1Z2luJ3MgYGRhdGEuanNvbmAuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3Mgb2JqZWN0IHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIHBsdWdpbidzIGV4aXN0aW5nIGBkYXRhLmpzb25gICh0aGUgZmlsZSBpcyBjcmVhdGVkIGlmXG4gICAqIGFic2VudCkuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZTogYHRydWVgIGVuYWJsZXMgdGhlIHBsdWdpbiwgYGZhbHNlYCBkaXNhYmxlcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGU6IGB0cnVlYCBpbnN0YWxscyB0aGUgcGx1Z2luLCBgZmFsc2VgIHVuaW5zdGFsbHMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0luc3RhbGxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgb25lIG1ldGhvZCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSBuZWVkcyBmcm9tIGEgcGx1Z2luJ3Mgc2V0dGluZ3MgY29tcG9uZW50IHRvIGNvbmZpZ3VyZVxuICogaXQgbGl2ZS4gRGVjbGFyZWQgc3RydWN0dXJhbGx5IHJhdGhlciB0aGFuIGltcG9ydGluZyBgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRgLCBzbyBhIHBsdWdpbiBidWlsdCBvblxuICogYW55IHZlcnNpb24gb2YgaXQgLS0gb3Igb24gaXRzIG93biBlcXVpdmFsZW50IC0tIGlzIGNvbmZpZ3VyYWJsZSB3aXRob3V0IGEgc2hhcmVkIG5vbWluYWwgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIEVkaXRhYmxlU2V0dGluZ3NDb21wb25lbnQge1xuICByZWFkb25seSBlZGl0QW5kU2F2ZTogKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IG9iamVjdCkgPT4gdm9pZCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVkgPSAnY29tbXVuaXR5UGx1Z2luRW50cmllc1Byb21pc2UnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL0hFQUQvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBjb25maWd1cmVDb21tdW5pdHlQbHVnaW59LlxuICovXG5leHBvcnQgZW51bSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYXBwbGllZCB0aHJvdWdoIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIGJvdGggdXBkYXRlZFxuICAgKiB0aGVtIGluIG1lbW9yeSBhbmQgcGVyc2lzdGVkIHRoZW0uIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSB1c2luZyB0aGVtLCBzbyBpdCBtdXN0IE5PVCBiZSByZWxvYWRlZC5cbiAgICovXG4gIEFwcGxpZWRMaXZlID0gJ2FwcGxpZWRMaXZlJyxcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc28gbm90aGluZyB3YXMgd3JpdHRlbi5cbiAgICovXG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIG1lcmdlZCBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgd2hpY2ggd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgdXBkYXRlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuZXhwb3J0IGVudW0gVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgY29weSBpcyBhbHJlYWR5IGF0IChvciBwYXN0KSB0aGUgbGF0ZXN0IHJlbGVhc2UsIHNvIG5vdGhpbmcgd2FzIGRvd25sb2FkZWQuXG4gICAqL1xuICBBbHJlYWR5VXBUb0RhdGUgPSAnYWxyZWFkeVVwVG9EYXRlJyxcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCByZWxlYXNlIHdhcyBpbnN0YWxsZWQgb3ZlciB0aGUgb2xkIGNvcHksIHdoaWNoIE9ic2lkaWFuIHJlbG9hZGVkIGlmIGl0IHdhcyBydW5uaW5nLlxuICAgKi9cbiAgVXBkYXRlZCA9ICd1cGRhdGVkJ1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYSBjb21tdW5pdHkgcGx1Z2luLCBwcmVmZXJyaW5nIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQgb3ZlciBpdHNcbiAqIGBkYXRhLmpzb25gLlxuICpcbiAqIFdoZW4gdGhlIHBsdWdpbiBpcyBsb2FkZWQgQU5EIGV4cG9zZXMgYSBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnRgIHdpdGggYW4gYGVkaXRBbmRTYXZlYCBtZXRob2QsIHRoZVxuICogc2V0dGluZ3MgYXJlIHNoYWxsb3ctbWVyZ2VkIHRocm91Z2ggaXQ6IHRoZXkgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkgYW5kIGFyZSBwZXJzaXN0ZWQsIHNvIHRoZSBwbHVnaW5cbiAqIG5lZWRzIG5vIHJlbG9hZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaXMgcmV0dXJuZWQuIFRoaXMgaXMgd2hhdCBsZXRzIGFcbiAqIHBsdWdpbidzIG93biBzY3JpcHQgcmVjb25maWd1cmUgaXQgd2l0aG91dCB0aGUgZGlzYWJsZS9lbmFibGUgY3ljbGUgdGhhdCB3b3VsZCB0ZWFyIGRvd24gdGhlIHZlcnkgY29kZVxuICogZG9pbmcgdGhlIHJlY29uZmlndXJpbmcuIE5vdGUgdGhhdCB0aGlzIHBhdGggcnVucyB0aGUgcGx1Z2luJ3Mgc2V0dGluZyB2YWxpZGF0b3JzLCBzbyBhbiBpbnZhbGlkIHZhbHVlXG4gKiBpcyByZXBsYWNlZCBieSBpdHMgZGVmYXVsdCByYXRoZXIgdGhhbiB3cml0dGVuIHRocm91Z2ggdmVyYmF0aW0uXG4gKlxuICogT3RoZXJ3aXNlIHRoZSBzZXR0aW5ncyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc2hhbGxvdy1tZXJnZWQgb3ZlciBhbnkgZXhpc3RpbmdcbiAqIHNldHRpbmdzIChjcmVhdGluZyB0aGUgZmlsZSBpZiBhYnNlbnQpLiBXcml0aW5nIHNldHRpbmdzIEJFRk9SRSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgbWFrZXMgaXQgbG9hZFxuICogYWxyZWFkeSBjb25maWd1cmVkLCB3aXRoIG5vIHJlbG9hZC4gQSBuby1vcCB3cml0ZSBpcyBza2lwcGVkOiB3aGVuIHRoZSBtZXJnZSBjaGFuZ2VzIG5vdGhpbmcsIHRoZSBmaWxlXG4gKiBpcyBsZWZ0IHVudG91Y2hlZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpcyByZXR1cm5lZCwgc28gYSBjYWxsZXIgY2FuIGF2b2lkXG4gKiByZWxvYWRpbmcgYW4gYWxyZWFkeS1jb3JyZWN0bHktY29uZmlndXJlZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8ge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaWYgdGhlXG4gKiBydW5uaW5nIHBsdWdpbiBhcHBsaWVkIHRoZW0gaXRzZWxmIChubyByZWxvYWQgbmVlZGVkKSwge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzfSBpZlxuICogdGhlIGBkYXRhLmpzb25gIGNvbnRlbnQgY2hhbmdlZCAoYW5kIHdhcyB3cml0dGVuKSwgb3Ige0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpZlxuICogdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IChub3RoaW5nIHdyaXR0ZW4pLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8Q29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0PiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuXG4gIGNvbnN0IHNldHRpbmdzQ29tcG9uZW50ID0gZ2V0U2V0dGluZ3NDb21wb25lbnQoYXBwLnBsdWdpbnMucGx1Z2luc1twbHVnaW5JZF0pO1xuICBpZiAoY2hlY2tIYXNFZGl0QW5kU2F2ZShzZXR0aW5nc0NvbXBvbmVudCkpIHtcbiAgICBhd2FpdCBzZXR0aW5nc0NvbXBvbmVudC5lZGl0QW5kU2F2ZSgocGx1Z2luU2V0dGluZ3MpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luU2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LkFwcGxpZWRMaXZlO1xuICB9XG5cbiAgY29uc3QgZGF0YVBhdGggPSBgJHthcHAudmF1bHQuY29uZmlnRGlyfS9wbHVnaW5zLyR7cGx1Z2luSWR9L2RhdGEuanNvbmA7XG5cbiAgbGV0IGRhdGE6IG9iamVjdCA9IHt9O1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRhdGFQYXRoKSkge1xuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChkYXRhUGF0aCkpO1xuICAgIGlmIChwYXJzZWQgIT09IG51bGwgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZEJlZm9yZSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICBPYmplY3QuYXNzaWduKGRhdGEsIHNldHRpbmdzKTtcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSBzZXJpYWxpemVkQmVmb3JlKSB7XG4gICAgcmV0dXJuIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyhKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGRhdGFQYXRoLCBgJHtzZXJpYWxpemVkfVxcbmApO1xuICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3M7XG59XG5cbi8qKlxuICogRGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIGN1cnJlbnRseSBlbmFibGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkaXNhYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgbm90IGFscmVhZHkgZW5hYmxlZC4gSWRlbXBvdGVudCDigJQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBvZiBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSBPYnNpZGlhbidzIHB1YmxpY1xuICogYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSByZWdpc3RyeSBpcyBmZXRjaGVkIG9uY2UgYW5kIGNhY2hlZCBvbiB0aGUgc2hhcmVkIHBsdWdpbiBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxsczsgYSBmYWlsZWRcbiAqIGZldGNoIGlzIG5vdCBjYWNoZWQsIHNvIGEgbGF0ZXIgY2FsbCByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQgdG8gbG9vayB1cC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIHJlcG9zaXRvcnksIG9yIGBudWxsYCBpZiB0aGVcbiAqIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIHRoZSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHBsdWdpbklkKTtcbiAgcmV0dXJuIGVudHJ5Py5yZXBvID8/IG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gKHRoZSByZWxlYXNlIGB0YWdfbmFtZWAsIGEgYmFyZSB2ZXJzaW9uIHN1Y2ggYXMgYDEuMi4zYCkgb2YgYVxuICogR2l0SHViIHJlcG9zaXRvcnkuXG4gKlxuICogQHBhcmFtIHJlcG8gLSBUaGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vcmVsZWFzZXMvbGF0ZXN0YCk7XG4gIGNvbnN0IHJlbGVhc2UgPSByZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gIHJldHVybiByZWxlYXNlLnRhZ19uYW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBzdG9yZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuIElkZW1wb3RlbnQg4oCUIGFcbiAqIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGluc3RhbGxlZC4gUmVzb2x2ZXMgdGhlIHBsdWdpbidzIHJlcG9zaXRvcnkgZnJvbSBPYnNpZGlhbidzXG4gKiBjb21tdW5pdHkgcmVnaXN0cnksIHJlYWRzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uIGFuZCBpdHMgbWFuaWZlc3QsIGFuZCBpbnN0YWxscyBpdCB0aHJvdWdoXG4gKiBPYnNpZGlhbidzIG93biBgaW5zdGFsbFBsdWdpbmAgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlcG8gPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkKTtcbiAgaWYgKCFyZXBvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gJyR7cGx1Z2luSWR9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luLCB3cml0ZXMgaXRzIHNldHRpbmdzLCBUSEVOIGVuYWJsZXMgaXQg4oCUIGluIHRoYXQgb3JkZXIg4oCUIHNvIHRoZSBwbHVnaW5cbiAqIGxvYWRzIGFscmVhZHkgY29uZmlndXJlZCAoYSBwbHVnaW4gZW5hYmxlZCBiZWZvcmUgaXQgaXMgY29uZmlndXJlZCBydW5zIGl0cyBgb25sb2FkYCB3aXRoIGRlZmF1bHRcbiAqIHNldHRpbmdzIGFuZCBkb2VzIG5vdGhpbmcgdXNlZnVsKS4gSWYgdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQgYW5kIHRoZSBzZXR0aW5ncyBjaGFuZ2VkLCBpdCBpc1xuICogZGlzYWJsZWQgYW5kIHJlLWVuYWJsZWQgc28gdGhlIG5ldyBzZXR0aW5ncyB0YWtlIGVmZmVjdC4gYHNldHRpbmdzYCBpcyBvcHRpb25hbDogb21pdCBpdCBmb3IgYSBwbHVnaW5cbiAqIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbi4gQ29tcG9zZXMge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSxcbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IGFuZCB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgY29uc3QgZGlkU2V0dGluZ3NDaGFuZ2UgPSBzZXR0aW5ncyA/IGF3YWl0IGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbih7IC4uLnBhcmFtcywgc2V0dGluZ3MgfSkgPT09IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzIDogZmFsc2U7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKGRpZFNldHRpbmdzQ2hhbmdlKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgT2JzaWRpYW4ncyBwdWJsaWMgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnksIHJldHVybmluZyB0aGUgaWQgYW5kIGRpc3BsYXkgbmFtZSBvZiBldmVyeVxuICogcGx1Z2luIHdob3NlIGlkLCBuYW1lLCBhdXRob3Igb3IgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHF1ZXJ5IChjYXNlLWluc2Vuc2l0aXZlKS4gQW4gZW1wdHkgcXVlcnlcbiAqIG1hdGNoZXMgZXZlcnkgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG1hdGNoaW5nIHBsdWdpbnMnIHtAbGluayBDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHR9cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbW11bml0eVBsdWdpbnMocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChlbnRyeSkgPT5cbiAgICAgIGVudHJ5LmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmF1dGhvci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgIClcbiAgICAubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWVcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0VuYWJsZWQpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyBvciB1bmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBpbnN0YWxsaW5nIGFuZCB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBpZiBpdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpc1xuICogbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgdW5pbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW4gaW5zdGFsbGVkIGNvbW11bml0eSBwbHVnaW4gdG8gaXRzIGxhdGVzdCByZWxlYXNlLCB0aGUgd2F5IHRoZSBjb21tdW5pdHkgcGx1Z2luIGJyb3dzZXIncyBvd25cbiAqIGBVcGRhdGVgIGJ1dHRvbiBkb2VzLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGluc3RhbGxQbHVnaW5gIHdyaXRlcyB0aGUgcmVsZWFzZSdzIGZpbGVzIG92ZXIgdGhlIGluc3RhbGxlZCBjb3B5IGFuZCwgd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBydW5uaW5nLCBkaXNhYmxlcyBhbmQgcmUtZW5hYmxlcyBpdCBzbyB0aGUgbmV3IGNvZGUgbG9hZHMg4oCUIHJlYWQgZnJvbSB0aGUgc2hpcHBlZCBidW5kbGUgKGAxLjE0LjRgKSwgbm90XG4gKiBhc3N1bWVkLiBJdCByZXBvcnRzIGl0cyBvd24gZmFpbHVyZXMgKGEgZmFpbGVkIGRvd25sb2FkLCBhIG1hbmlmZXN0IHdob3NlIGlkIGRvZXMgbm90IG1hdGNoKSBhcyBhIG5vdGljZVxuICogYW5kIFJFVFVSTlMgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNvIHRoZSBpbnN0YWxsZWQgbWFuaWZlc3QgaXMgcmUtcmVhZCBhZnRlcndhcmRzIGFuZCBhIHZlcnNpb24gdGhhdCBkaWRcbiAqIG5vdCBtb3ZlIHRvIHRoZSByZWxlYXNlIGlzIHRocm93biBhcyBhIGZhaWx1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlVwZGF0ZWR9IG9uY2UgdGhlIGxhdGVzdCByZWxlYXNlXG4gKiBpcyBpbnN0YWxsZWQsIG9yIHtAbGluayBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlfSB3aGVuIHRoZSBpbnN0YWxsZWQgY29weSBpcyBub3Qgb2xkZXJcbiAqIHRoYW4gaXQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGluc3RhbGxlZCwgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCBvciB0aGVcbiAqIGluc3RhbGwgZGlkIG5vdCBsZWF2ZSB0aGUgbGF0ZXN0IHJlbGVhc2UgaW4gcGxhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVcGRhdGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPFVwZGF0ZUNvbW11bml0eVBsdWdpblJlc3VsdD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBjb25zdCBpbnN0YWxsZWRNYW5pZmVzdCA9IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF07XG4gIGlmICghaW5zdGFsbGVkTWFuaWZlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIGlzIG5vdCBpbnN0YWxsZWQsIHNvIGl0IGNhbm5vdCBiZSB1cGRhdGVkLmApO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBpZiAoaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRNYW5pZmVzdC52ZXJzaW9uLCB2ZXJzaW9uKSkge1xuICAgIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG5cbiAgY29uc3QgdXBkYXRlZFZlcnNpb24gPSBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uO1xuICBpZiAodXBkYXRlZFZlcnNpb24gIT09IG1hbmlmZXN0LnZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVXBkYXRpbmcgcGx1Z2luICcke3BsdWdpbklkfScgdG8gJHttYW5pZmVzdC52ZXJzaW9ufSBsZWZ0IHZlcnNpb24gJHt1cGRhdGVkVmVyc2lvbiA/PyAnKG5vbmUpJ30gaW5zdGFsbGVkLiBPYnNpZGlhbiByZXBvcnRzIHRoZSBjYXVzZSBhcyBhIG5vdGljZS5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuVXBkYXRlZDtcbn1cblxuLy8gV2hldGhlciBhIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAgY2FuIGNvbmZpZ3VyZSBpdHNlbGYgaW4gcGxhY2UuIFN0cnVjdHVyYWwgcmF0aGVyIHRoYW4gYW5cbi8vIGBpbnN0YW5jZW9mYDogdGhlIHBsdWdpbiB3YXMgbG9hZGVkIGZyb20gaXRzIG93biBidW5kbGUsIHNvIGV2ZW4gYSBwbHVnaW4gYnVpbHQgb24gdGhpcyB2ZXJ5IGxpYnJhcnlcbi8vIGNhcnJpZXMgaXRzIG93biBjb3B5IG9mIHRoZSBjbGFzcyBhbmQgd291bGQgZmFpbCBhbiBpZGVudGl0eSBjaGVjay5cbmZ1bmN0aW9uIGNoZWNrSGFzRWRpdEFuZFNhdmUoc2V0dGluZ3NDb21wb25lbnQ6IHVua25vd24pOiBzZXR0aW5nc0NvbXBvbmVudCBpcyBFZGl0YWJsZVNldHRpbmdzQ29tcG9uZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBzZXR0aW5nc0NvbXBvbmVudCA9PT0gJ29iamVjdCdcbiAgICAmJiBzZXR0aW5nc0NvbXBvbmVudCAhPT0gbnVsbFxuICAgICYmICdlZGl0QW5kU2F2ZScgaW4gc2V0dGluZ3NDb21wb25lbnRcbiAgICAmJiB0eXBlb2Ygc2V0dGluZ3NDb21wb25lbnQuZWRpdEFuZFNhdmUgPT09ICdmdW5jdGlvbic7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1VSTCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIENvbW11bml0eVBsdWdpbkVudHJ5W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbi8vIFJlYWRzIGEgbG9hZGVkIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAsIG9yIGBudWxsYCB3aGVuIGl0IGhhcyBub25lLiBUYWtlcyBgdW5rbm93bmAgYmVjYXVzZVxuLy8gQSBwbHVnaW4gaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBleHBvc2Ugb25lLCBzbyB0aGVyZSBpcyBubyB0eXBlIHRvIG5hcnJvdyBmcm9tLlxuZnVuY3Rpb24gZ2V0U2V0dGluZ3NDb21wb25lbnQocGx1Z2luOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiB0eXBlb2YgcGx1Z2luICE9PSAnb2JqZWN0JyB8fCBwbHVnaW4gPT09IG51bGwgfHwgISgncGx1Z2luU2V0dGluZ3NDb21wb25lbnQnIGluIHBsdWdpbikgPyBudWxsIDogcGx1Z2luLnBsdWdpblNldHRpbmdzQ29tcG9uZW50O1xufVxuXG4vLyBBIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIHJlYWRzIGFzIG9sZGVyLCBzbyBhbiB1cGRhdGUgaXMgYXR0ZW1wdGVkIHJhdGhlciB0aGFuIHNraXBwZWQ6IHRoZSBpbnN0YWxsJ3Ncbi8vIG93biB2ZXJzaW9uIGNoZWNrIGFmdGVyd2FyZHMgc3RpbGwgY2F0Y2hlcyBhIHJlbGVhc2UgdGhhdCBkb2VzIG5vdCBtb3ZlIGl0LlxuZnVuY3Rpb24gaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRWZXJzaW9uOiBzdHJpbmcsIGxhdGVzdFZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbiwgJz49Jyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmZXJlbmNlOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZmVyZW5jZS5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZmVyZW5jZS5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxTQUFTLFdBQVcsdUJBQXVCO0FBQzNDLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMsMkJBQTJCO0FBMExwQyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLHdCQUF3QjtB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QUFDdkMsVUFBTSxJQUFJO0FBQUEsTUFDUixvQkFBb0IsUUFBUSxRQUFRLFNBQVMsT0FBTyxpQkFBaUIsa0JBQWtCLFFBQVE7QUFBQSxJQUNqRztBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFLQSxTQUFTLG9CQUFvQixtQkFBNEU7QUFDdkcsU0FBTyxPQUFPLHNCQUFzQixZQUMvQixzQkFBc0IsUUFDdEIsaUJBQWlCLHFCQUNqQixPQUFPLGtCQUFrQixnQkFBZ0I7QUFDaEQ7QUFFQSxlQUFlLDhCQUErRDtBQUM1RSxRQUFNLFdBQVcsTUFBTSxXQUFXLHFCQUFxQjtBQUN2RCxTQUFPLFNBQVM7QUFDbEI7QUFFQSxlQUFlLDRCQUE2RDtBQUMxRSxRQUFNLFFBQVEsb0JBQTRELDZCQUE2QixJQUFJO0FBQzNHLFFBQU0sVUFBVSw0QkFBNEI7QUFFNUMsTUFBSTtBQUNGLFdBQU8sTUFBTSxNQUFNO0FBQUEsRUFDckIsU0FBUyxPQUFPO0FBQ2QsVUFBTSxRQUFRO0FBQ2QsVUFBTTtBQUFBLEVBQ1I7QUFDRjtBQUVBLGVBQWUsa0JBQWtCLE1BQWMsU0FBMEM7QUFDdkYsUUFBTSxXQUFXLE1BQU0sV0FBVyxzQkFBc0IsSUFBSSxzQkFBc0IsT0FBTyxnQkFBZ0I7QUFDekcsU0FBTyxTQUFTO0FBQ2xCO0FBSUEsU0FBUyxxQkFBcUIsUUFBMEI7QUFDdEQsU0FBTyxPQUFPLFdBQVcsWUFBWSxXQUFXLFFBQVEsRUFBRSw2QkFBNkIsVUFBVSxPQUFPLE9BQU87QUFDakg7QUFJQSxTQUFTLGlCQUFpQixrQkFBMEIsZUFBZ0M7QUFDbEYsTUFBSTtBQUNGLFdBQU8sZ0JBQWdCLGtCQUFrQixlQUFlLElBQUk7QUFBQSxFQUM5RCxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVBLGVBQWUseUJBQXlCLFdBQWdEO0FBQ3RGLE1BQUksY0FBYyxXQUFXO0FBQzNCLFdBQU8sVUFBVTtBQUFBLEVBQ25CO0FBRUEsUUFBTSxVQUFVLE1BQU0sMEJBQTBCO0FBQ2hELFFBQU0sUUFBUSxRQUFRLEtBQUssQ0FBQyxjQUFjLFVBQVUsU0FBUyxVQUFVLFVBQVU7QUFDakYsTUFBSSxDQUFDLE9BQU87QUFDVixVQUFNLElBQUksTUFBTSxpQkFBaUIsVUFBVSxVQUFVLDZEQUE2RDtBQUFBLEVBQ3BIO0FBQ0EsU0FBTyxNQUFNO0FBQ2Y7IiwibmFtZXMiOlsiQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IiwiVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0Il19
|
|
@@ -53,7 +53,7 @@ const ROOT_UNSAFE_ITEM_TITLE_KEYS = [
|
|
|
53
53
|
"plugins.file-explorer.menu-opt-rename",
|
|
54
54
|
"plugins.search.menu-opt-search-in-folder"
|
|
55
55
|
];
|
|
56
|
-
const SHARED_STATE_KEY = "
|
|
56
|
+
const SHARED_STATE_KEY = "fileExplorerRootMenuV1";
|
|
57
57
|
var FileExplorerRootMenuSpot = /* @__PURE__ */ ((FileExplorerRootMenuSpot2) => {
|
|
58
58
|
FileExplorerRootMenuSpot2["EmptyArea"] = "empty-area";
|
|
59
59
|
FileExplorerRootMenuSpot2["VaultName"] = "vault-name";
|
|
@@ -88,7 +88,7 @@ class FileExplorerRootMenuComponent extends ComponentEx {
|
|
|
88
88
|
*/
|
|
89
89
|
onload() {
|
|
90
90
|
super.onload();
|
|
91
|
-
const state = getSharedState(
|
|
91
|
+
const state = getSharedState();
|
|
92
92
|
const subscription = {
|
|
93
93
|
handler: this.handler,
|
|
94
94
|
install: () => installRootMenu(this.app, state),
|
|
@@ -131,14 +131,11 @@ function dispatchBeforeShow(state, params) {
|
|
|
131
131
|
function getFileExplorerLeaf(app) {
|
|
132
132
|
return app.workspace.getLeavesOfType(ViewType.FileExplorer)[0] ?? null;
|
|
133
133
|
}
|
|
134
|
-
function getSharedState(
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
statesByApp.set(app, state);
|
|
140
|
-
}
|
|
141
|
-
return state;
|
|
134
|
+
function getSharedState() {
|
|
135
|
+
return getObsidianLibState(SHARED_STATE_KEY, {
|
|
136
|
+
installation: null,
|
|
137
|
+
subscriptions: []
|
|
138
|
+
}).value;
|
|
142
139
|
}
|
|
143
140
|
function installRootMenu(app, state) {
|
|
144
141
|
let isUninstalled = false;
|
|
@@ -254,4 +251,4 @@ export {
|
|
|
254
251
|
FileExplorerRootMenuSpot,
|
|
255
252
|
VAULT_NAME_SELECTORS
|
|
256
253
|
};
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogT3BlbnMgYW5kIGV4dGVuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIGNvbnRleHQgbWVudSBmb3IgdGhlIHZhdWx0IHJvb3QsIGF0IHRoZSB0d28gc3BvdHMgdGhhdCBzdGFuZCBmb3IgaXQ6IHRoZVxuICogdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGFuZCB0aGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICpcbiAqIE9ic2lkaWFuIGFscmVhZHkgb3BlbnMgYSBtZW51IGZvciB0aGUgZW1wdHkgYXJlYTogdGhlIHZpZXcncyBvd24gYGNvbnRleHRtZW51YCBsaXN0ZW5lciBvbiBpdHMgZmlsZXMgY29udGFpbmVyIGNhbGxzXG4gKiBgb25GaWxlQ29udGV4dE1lbnUoZXZ0LCB2YXVsdC5nZXRSb290KCkpYCwgd2hpY2ggYnVpbGRzIGEge0BsaW5rIE1lbnV9LCB0cmlnZ2VycyBgZmlsZS1tZW51YCB3aXRoIHRoZSByb290IGZvbGRlciBhbmRcbiAqIHRoZSBzb3VyY2UgYGZpbGUtZXhwbG9yZXItY29udGV4dC1tZW51YCwgYW5kIHNob3dzIGl0LiBUaGUgdmF1bHQgbmFtZSAoYC53b3Jrc3BhY2UtZHJhd2VyLXZhdWx0LXN3aXRjaGVyYCBvbiBkZXNrdG9wLFxuICogYC53b3Jrc3BhY2UtZHJhd2VyLWhlYWRlci1uYW1lYCBvbiBtb2JpbGUsIHdoZXJlIE9ic2lkaWFuIGJ1aWxkcyBubyBzd2l0Y2hlcikgb3BlbnMgYSBkaWZmZXJlbnQgbWVudTogb24gZGVza3RvcFxuICogT2JzaWRpYW4gYWRkcyBgU2hvdyBpbiBzeXN0ZW0gZXhwbG9yZXJgIGFuZCBgQ29weSBwYXRoYCB0byB0aGUgcGVyLWV2ZW50IG1lbnUgYE1lbnUuZm9yRXZlbnRgIGhhbmRzIG91dC4gVGhlIGhhbmRsZXJzXG4gKiBnZXQgdGhhdCBtZW51LCBzbyBhIHJpZ2h0LWNsaWNrIHRoZXJlIG5ldmVyIG9wZW5zIGEgc2Vjb25kIG9uZS4gQSBzdWJzY3JpYmVyIHRoYXQgcHJlc2VudHMgdGhlIHJvb3QgYXMgYSBmb2xkZXJcbiAqIHJlcGxhY2VzIGl0IHdpdGggdGhlIHJvb3QncyBmb2xkZXIgbWVudSBpbnN0ZWFkLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYW5kIHNldmVyYWwgb2YgdGhlbSBtYXkgd2FudCB0aGlzIG1lbnUuIFR3byBjb3BpZXMgcGF0Y2hpbmcgdGhlXG4gKiBzYW1lIHByb3RvdHlwZSBhbmQgbGlzdGVuaW5nIG9uIHRoZSBzYW1lIGVsZW1lbnQgd291bGQgb3BlbiBpdCB0d2ljZSwgc28gdGhlcmUgaXMgT05FIGluc3RhbGxhdGlvbiBwZXIge0BsaW5rIEFwcH0sXG4gKiBrZXB0IGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSBhbmQgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGUgb3RoZXJzXG4gKiByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgaXQgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXQgYmV0d2VlblxuICogY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIHJlYWQgc3RydWN0dXJhbGx5LCBhbmQgYSBjaGFuZ2UgdG8gd2hhdCBhIGZpZWxkXG4gKiBtZWFucyBtb3ZlcyB0byBhIG5ldyBrZXkgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRpbmcgdGhlIG9sZCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGaWxlRXhwbG9yZXJWaWV3IH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldFByb3RvdHlwZU9mIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVJdGVtLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50cyB0aGF0IHN0YW5kIGZvciB0aGUgdmF1bHQgcm9vdCBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGluIHByaW9yaXR5IG9yZGVyLiBPYnNpZGlhbiBidWlsZHNcbiAqIGAud29ya3NwYWNlLWRyYXdlci12YXVsdC1zd2l0Y2hlcmAgb25seSBvbiBkZXNrdG9wOyBvbiBtb2JpbGUgdGhlIHZhdWx0IG5hbWUgaXMgdGhlIGRyYXdlciBoZWFkZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX05BTUVfU0VMRUNUT1JTID0gW1xuICAnLndvcmtzcGFjZS1kcmF3ZXItdmF1bHQtc3dpdGNoZXInLFxuICAnLndvcmtzcGFjZS1kcmF3ZXItaGVhZGVyLW5hbWUnXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRoZSBgc291cmNlYCBPYnNpZGlhbiBwYXNzZXMgd2l0aCBgZmlsZS1tZW51YCB3aGVuIHRoZSBGaWxlIEV4cGxvcmVyIG9wZW5zIGEgbWVudS5cbiAqL1xuY29uc3QgRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSA9ICdmaWxlLWV4cGxvcmVyLWNvbnRleHQtbWVudSc7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbXMgdGhhdCBtdXN0IG5vdCBhY3Qgb24gdGhlIHZhdWx0IHJvb3QsIGJ5IHRoZSBsb2NhbGl6YXRpb24ga2V5IG9mIHRoZWlyIHRpdGxlLiBUaGV5IGFwcGVhciBvbmx5IHdoZW5cbiAqIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIsIGZyb20gT2JzaWRpYW4gaXRzZWxmIG9yIGZyb20gYW5vdGhlciBwbHVnaW4ncyBgZmlsZS1tZW51YCBoYW5kbGVyLlxuICovXG5jb25zdCBST09UX1VOU0FGRV9JVEVNX1RJVExFX0tFWVMgPSBbXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIuYWN0aW9uLW1vdmUtZm9sZGVyJyxcbiAgJ3BsdWdpbnMuZmlsZS1leHBsb3Jlci5tZW51LW9wdC1kZWxldGUnLFxuICAncGx1Z2lucy5maWxlLWV4cGxvcmVyLm1lbnUtb3B0LW1ha2UtY29weScsXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIubWVudS1vcHQtcmVuYW1lJyxcbiAgJ3BsdWdpbnMuc2VhcmNoLm1lbnUtb3B0LXNlYXJjaC1pbi1mb2xkZXInXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ2ZpbGVFeHBsb3JlclJvb3RNZW51QnlBcHBWMSc7XG5cbi8qKlxuICogV2hpY2ggc3BvdCBvZiB0aGUgRmlsZSBFeHBsb3JlciB0aGUgdmF1bHQtcm9vdCBtZW51IHdhcyBvcGVuZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90IHtcbiAgLyoqXG4gICAqIFRoZSBlbXB0eSBhcmVhIGJlbG93IHRoZSBmaWxlIGxpc3QuXG4gICAqL1xuICBFbXB0eUFyZWEgPSAnZW1wdHktYXJlYScsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBuYW1lIGF0IHRoZSB0b3Agb2YgdGhlIGxlZnQgc2lkZWJhci5cbiAgICovXG4gIFZhdWx0TmFtZSA9ICd2YXVsdC1uYW1lJ1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBGaWxlRXhwbG9yZXJSb290TWVudUNvbXBvbmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBlYWNoIHRpbWUgdGhlIHZhdWx0LXJvb3QgbWVudSBpcyBhYm91dCB0byBiZSBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcm9vdCBpcyBwcmVzZW50ZWQgYXMgYW4gb3JkaW5hcnkgZm9sZGVyIHdoaWxlIGl0cyBtZW51IGlzIGJ1aWx0LCBzbyB0aGF0IE9ic2lkaWFuIGFuZCBvdGhlciBwbHVnaW5zIGFkZFxuICAgKiB0aGUgaXRlbXMgdGhleSBhZGQgdG8gYW55IGZvbGRlci4gVGhlIGl0ZW1zIHRoYXQgbXVzdCBub3QgYWN0IG9uIHRoZSByb290IChyZW5hbWUsIGRlbGV0ZSwgbW92ZSwgbWFrZSBhIGNvcHkgYW5kXG4gICAqIHNlYXJjaCBpbiBmb2xkZXIpIGFyZSByZW1vdmVkIGFnYWluIGJlZm9yZSB0aGUgbWVudSBpcyBzaG93bi4gT24gdGhlIHZhdWx0IG5hbWUsIHRoZSByb290J3MgZm9sZGVyIG1lbnUgdGhlbiByZXBsYWNlc1xuICAgKiBPYnNpZGlhbidzIHZhdWx0IG1lbnUuIEl0IGhvbGRzIHdoaWxlIGFueSBzdWJzY3JpYmVyIGFza3MgZm9yIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgb2YgdGhlIHZhdWx0LXJvb3QgbWVudS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlciA9IChwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcykgPT4gdm9pZDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhIHtAbGluayBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJ9LlxuICpcbiAqIFRoZSBzaGFwZSBpcyBwYXJ0IG9mIHRoZSB3aXJlIGZvcm1hdCBiZXR3ZWVuIGNvcGllcyBvZiB0aGlzIGxpYnJhcnk6IGZpZWxkcyBhcmUgb25seSBldmVyIGFkZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWVudSwgYWJvdXQgdG8gYmUgc2hvd246IHRoZSByb290J3MgZm9sZGVyIG1lbnUsIGFmdGVyIGV2ZXJ5IGBmaWxlLW1lbnVgIGhhbmRsZXIgaGFzIHJ1biwgb3Igb24gdGhlIHZhdWx0IG5hbWUgdGhlXG4gICAqIHZhdWx0IG1lbnUgT2JzaWRpYW4gYnVpbGRzIHRoZXJlLiBBIG1lbnUgc3RpbGwgZW1wdHkgYWZ0ZXIgZXZlcnkgaGFuZGxlciBpcyBub3Qgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgcmlnaHQtY2xpY2sgb3IgbG9uZy1wcmVzcyB0aGF0IG9wZW5lZCB0aGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogVEZvbGRlcjtcblxuICAvKipcbiAgICogV2hpY2ggc3BvdCB0aGUgbWVudSB3YXMgb3BlbmVkIGZyb20uXG4gICAqL1xuICByZWFkb25seSBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3Q7XG59XG5cbmludGVyZmFjZSBGaWxlRXhwbG9yZXJSb290TWVudUluc3RhbGxhdGlvbiB7XG4gIHJlYWRvbmx5IG93bmVyOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbjtcbiAgdW5pbnN0YWxsOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIGluc3RhbGxhdGlvbjogRmlsZUV4cGxvcmVyUm9vdE1lbnVJbnN0YWxsYXRpb24gfCBudWxsO1xuICByZWFkb25seSBzdWJzY3JpcHRpb25zOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbltdO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb24ge1xuICBoYW5kbGVyOiAocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG4gIGluc3RhbGw6ICgpID0+ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHNob3VsZFByZXNlbnRSb290QXNGb2xkZXI6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51IGV4dGVuZHMgRmlsZUV4cGxvcmVyVmlldyB7XG4gIG9uRmlsZUNvbnRleHRNZW51OiAobW91c2VFdmVudDogTW91c2VFdmVudCwgZmlsZTogVEFic3RyYWN0RmlsZSkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIE9wZW5Sb290TWVudVBhcmFtcyB7XG4gIHJlYWRvbmx5IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIHJlYWRvbmx5IG9wZW5OYXRpdmU6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IFRGb2xkZXI7XG4gIHJlYWRvbmx5IHNwb3Q6IEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdDtcbn1cblxuLyoqXG4gKiBIYW5kcyB0aGUgY29yZSBGaWxlIEV4cGxvcmVyJ3MgdmF1bHQtcm9vdCBtZW51IHRvIGEgaGFuZGxlciwgYW5kIG9wZW5zIHRoYXQgbWVudSBmcm9tIHRoZSB2YXVsdCBuYW1lIHRvby5cbiAqXG4gKiBBbnkgbnVtYmVyIG9mIHRoZXNlLCBpbiBhbnkgbnVtYmVyIG9mIHBsdWdpbnMsIHNoYXJlIG9uZSBpbnN0YWxsYXRpb24gcGVyIHtAbGluayBBcHB9LlxuICovXG5leHBvcnQgY2xhc3MgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgZWFjaCB0aW1lIHRoZSB2YXVsdC1yb290IG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFuZGxlcjogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIgd2hpbGUgaXRzIG1lbnUgaXMgYnVpbHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIGV4cGxvcmVyIHJvb3QgbWVudSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLmhhbmRsZXIgPSBwYXJhbXMuaGFuZGxlcjtcbiAgICB0aGlzLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIgPSBwYXJhbXMuc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIHRoZSBzaGFyZWQgaW5zdGFsbGF0aW9uLCBpbnN0YWxsaW5nIGl0IHdoZW4gbm9ib2R5IGhhcyB5ZXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTaGFyZWRTdGF0ZSh0aGlzLmFwcCk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbiA9IHtcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlcixcbiAgICAgIGluc3RhbGw6ICgpID0+IGluc3RhbGxSb290TWVudSh0aGlzLmFwcCwgc3RhdGUpLFxuICAgICAgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcjogdGhpcy5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyXG4gICAgfTtcbiAgICBzdGF0ZS5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPz89IHsgb3duZXI6IHN1YnNjcmlwdGlvbiwgdW5pbnN0YWxsOiBzdWJzY3JpcHRpb24uaW5zdGFsbCgpIH07XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMuc3BsaWNlKHN0YXRlLnN1YnNjcmlwdGlvbnMuaW5kZXhPZihzdWJzY3JpcHRpb24pLCAxKTtcbiAgICAgIGlmIChzdGF0ZS5pbnN0YWxsYXRpb24/Lm93bmVyICE9PSBzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24udW5pbnN0YWxsKCk7XG4gICAgICBjb25zdCBuZXh0T3duZXIgPSBzdGF0ZS5zdWJzY3JpcHRpb25zWzBdO1xuICAgICAgc3RhdGUuaW5zdGFsbGF0aW9uID0gbmV4dE93bmVyID8geyBvd25lcjogbmV4dE93bmVyLCB1bmluc3RhbGw6IG5leHRPd25lci5pbnN0YWxsKCkgfSA6IG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2goc3RhdGU6IEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGUsIHBhcmFtczogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyUGFyYW1zKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5zdWJzY3JpcHRpb25zLnNvbWUoKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIpKSB7XG4gICAgcmVtb3ZlUm9vdFVuc2FmZUl0ZW1zKHBhcmFtcy5tZW51KTtcbiAgfVxuXG4gIC8vIEEgc25hcHNob3Q6IGEgaGFuZGxlciBtYXkgdW5sb2FkIGl0cyBvd24gY29tcG9uZW50LCBvciBhbm90aGVyIG9uZSwgd2hpbGUgdGhlIG1lbnUgaXMgZGlzcGF0Y2hlZC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy1zcHJlYWQgLS0gVGhlIGNvcHkgaXMgdGhlIHBvaW50OiB0aGUgbGlzdCBtYXkgY2hhbmdlIGR1cmluZyB0aGUgbG9vcC5cbiAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgWy4uLnN0YXRlLnN1YnNjcmlwdGlvbnNdKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmlwdGlvbi5oYW5kbGVyKHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSBleHBsb3JlciByb290IG1lbnUgaGFuZGxlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlU2hvdyhzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSwgcGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgdW5pbnN0YWxsU2hvd1BhdGNoID0gYXJvdW5kKHBhcmFtcy5tZW51LCB7XG4gICAgc2hvd0F0TW91c2VFdmVudDogKG5leHQpID0+XG4gICAgICBmdW5jdGlvbiBwYXRjaGVkU2hvd0F0TW91c2VFdmVudCh0aGlzOiBNZW51LCBzaG93TW91c2VFdmVudDogTW91c2VFdmVudCk6IE1lbnUge1xuICAgICAgICB1bmluc3RhbGxTaG93UGF0Y2goKTtcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUsIHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBwYXJhbXMubWVudS5pdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzIDogbmV4dC5jYWxsKHRoaXMsIHNob3dNb3VzZUV2ZW50KTtcbiAgICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVFeHBsb3JlckxlYWYoYXBwOiBBcHApOiBudWxsIHwgV29ya3NwYWNlTGVhZiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5GaWxlRXhwbG9yZXIpWzBdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFN0YXRlKGFwcDogQXBwKTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlc0J5QXBwID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZShTSEFSRURfU1RBVEVfS0VZLCBuZXcgV2Vha01hcDxBcHAsIEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGU+KCkpLnZhbHVlO1xuICBsZXQgc3RhdGUgPSBzdGF0ZXNCeUFwcC5nZXQoYXBwKTtcbiAgaWYgKCFzdGF0ZSkge1xuICAgIHN0YXRlID0geyBpbnN0YWxsYXRpb246IG51bGwsIHN1YnNjcmlwdGlvbnM6IFtdIH07XG4gICAgc3RhdGVzQnlBcHAuc2V0KGFwcCwgc3RhdGUpO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbFJvb3RNZW51KGFwcDogQXBwLCBzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSk6ICgpID0+IHZvaWQge1xuICBsZXQgaXNVbmluc3RhbGxlZCA9IGZhbHNlO1xuICBsZXQgcGVuZGluZ1Nwb3Q6IEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCB8IG51bGwgPSBudWxsO1xuICBsZXQgdW5pbnN0YWxsUGF0Y2g6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyeVBhdGNoKCk6IHZvaWQge1xuICAgIGlmIChpc1VuaW5zdGFsbGVkIHx8IHVuaW5zdGFsbFBhdGNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlldyA9IGdldEZpbGVFeHBsb3JlckxlYWYoYXBwKT8udmlldztcbiAgICBpZiAoIWlzRmlsZUV4cGxvcmVyVmlldyh2aWV3KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVuaW5zdGFsbFBhdGNoID0gYXJvdW5kKGdldFByb3RvdHlwZU9mKHZpZXcpLCB7XG4gICAgICBvbkZpbGVDb250ZXh0TWVudTogKG5leHQpID0+XG4gICAgICAgIGZ1bmN0aW9uIHBhdGNoZWRPbkZpbGVDb250ZXh0TWVudSh0aGlzOiBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51LCBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHx8ICFmaWxlLmlzUm9vdCgpKSB7XG4gICAgICAgICAgICBuZXh0LmNhbGwodGhpcywgbW91c2VFdmVudCwgZmlsZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3BlblJvb3RNZW51KHtcbiAgICAgICAgICAgIG1vdXNlRXZlbnQsXG4gICAgICAgICAgICBvcGVuTmF0aXZlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCBtb3VzZUV2ZW50LCBmaWxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb290Rm9sZGVyOiBmaWxlLFxuICAgICAgICAgICAgc3BvdDogcGVuZGluZ1Nwb3QgPz8gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LkVtcHR5QXJlYVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUm9vdE1lbnUocGFyYW1zOiBPcGVuUm9vdE1lbnVQYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG1vdXNlRXZlbnQsIG9wZW5OYXRpdmUsIHJvb3RGb2xkZXIsIHNwb3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBldmVudFJlZiA9IGFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtbWVudScsIChtZW51LCBmaWxlLCBzb3VyY2UpID0+IHtcbiAgICAgIGlmIChmaWxlICE9PSByb290Rm9sZGVyIHx8IHNvdXJjZSAhPT0gRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICAgIGRpc3BhdGNoQmVmb3JlU2hvdyhzdGF0ZSwgeyBtZW51LCBtb3VzZUV2ZW50LCByb290Rm9sZGVyLCBzcG90IH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdG9yZUlzUm9vdCA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24uc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcilcbiAgICAgID8gcHJlc2VudEFzRm9sZGVyKHJvb3RGb2xkZXIpXG4gICAgICA6IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb3Blbk5hdGl2ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZXN0b3JlSXNSb290Py4oKTtcbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuRnJvbVZhdWx0TmFtZShtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNPblZhdWx0TmFtZSA9IG1vdXNlRXZlbnQuY29tcG9zZWRQYXRoKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBWQVVMVF9OQU1FX1NFTEVDVE9SUy5zb21lKChzZWxlY3RvcikgPT4gdGFyZ2V0Lm1hdGNoZXMoc2VsZWN0b3IpKSk7XG4gICAgaWYgKCFpc09uVmF1bHROYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYE1lbnUuZm9yRXZlbnRgIGhhbmRzIGV2ZXJ5IGxpc3RlbmVyIG9mIG9uZSBldmVudCB0aGUgc2FtZSBtZW51IGFuZCBzaG93cyBpdCBvbiB0aGUgbmV4dCB0YXNrLiBPYnNpZGlhbidzIG93blxuICAgIC8vIGxpc3RlbmVyIG9uIHRoZSB2YXVsdCBuYW1lIGFkZHMgaXRzIHZhdWx0IGl0ZW1zIHRvIGl0IGFmdGVyIHRoaXMgY2FwdHVyZS1waGFzZSBvbmUgaGFzIHJ1bi5cbiAgICBjb25zdCB2YXVsdE1lbnUgPSBNZW51LmZvckV2ZW50KG1vdXNlRXZlbnQpO1xuICAgIGNvbnN0IHJvb3RGb2xkZXIgPSBhcHAudmF1bHQuZ2V0Um9vdCgpO1xuICAgIGNvbnN0IGxlYWYgPSBnZXRGaWxlRXhwbG9yZXJMZWFmKGFwcCk7XG4gICAgaWYgKCFsZWFmIHx8IHN0YXRlLnN1YnNjcmlwdGlvbnMuZXZlcnkoKHN1YnNjcmlwdGlvbikgPT4gIXN1YnNjcmlwdGlvbi5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyKSkge1xuICAgICAgZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlLCB7IG1lbnU6IHZhdWx0TWVudSwgbW91c2VFdmVudCwgcm9vdEZvbGRlciwgc3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LlZhdWx0TmFtZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVzZW50ZWQgYXMgYSBmb2xkZXIsIHRoZSByb290J3MgZm9sZGVyIG1lbnUgcmVwbGFjZXMgdGhlIHZhdWx0IG1lbnUgcmF0aGVyIHRoYW4gb3BlbmluZyBvbiB0b3Agb2YgaXQuXG4gICAgZnVuY3Rpb24gc3VwcHJlc3NWYXVsdE1lbnVTaG93KCk6IE1lbnUge1xuICAgICAgdW5pbnN0YWxsVmF1bHRNZW51U2hvd1BhdGNoKCk7XG4gICAgICByZXR1cm4gdmF1bHRNZW51O1xuICAgIH1cbiAgICBjb25zdCB1bmluc3RhbGxWYXVsdE1lbnVTaG93UGF0Y2ggPSBhcm91bmQodmF1bHRNZW51LCB7IHNob3dBdE1vdXNlRXZlbnQ6ICgpID0+IHN1cHByZXNzVmF1bHRNZW51U2hvdyB9KTtcbiAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBsZWFmLmxvYWRJZkRlZmVycmVkKCk7XG4gICAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgIWlzRmlsZUV4cGxvcmVyVmlldyh2aWV3KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeVBhdGNoKCk7XG4gICAgICB2aWV3LnRyZWUuY2xlYXJTZWxlY3RlZERvbXMoKTtcbiAgICAgIHBlbmRpbmdTcG90ID0gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LlZhdWx0TmFtZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZpZXcub25GaWxlQ29udGV4dE1lbnUobW91c2VFdmVudCwgcm9vdEZvbGRlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBwZW5kaW5nU3BvdCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0cnlQYXRjaCgpO1xuICBjb25zdCBsYXlvdXRDaGFuZ2VFdmVudFJlZiA9IGFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCB0cnlQYXRjaCk7XG4gIGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSh0cnlQYXRjaCk7XG4gIGNvbnN0IGRvYyA9IGFwcC53b3Jrc3BhY2UuY29udGFpbmVyRWwuZG9jO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvcGVuRnJvbVZhdWx0TmFtZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNVbmluc3RhbGxlZCA9IHRydWU7XG4gICAgdW5pbnN0YWxsUGF0Y2g/LigpO1xuICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGxheW91dENoYW5nZUV2ZW50UmVmKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvcGVuRnJvbVZhdWx0TmFtZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0ZpbGVFeHBsb3JlclZpZXcodmlldzogdW5rbm93bik6IHZpZXcgaXMgRmlsZUV4cGxvcmVyVmlld1dpdGhDb250ZXh0TWVudSB7XG4gIHJldHVybiB0eXBlb2YgKHZpZXcgYXMgUGFydGlhbDxGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51PiB8IHVuZGVmaW5lZCk/Lm9uRmlsZUNvbnRleHRNZW51ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBwcmVzZW50QXNGb2xkZXIocm9vdEZvbGRlcjogVEZvbGRlcik6ICgpID0+IHZvaWQge1xuICBjb25zdCBvd25Jc1Jvb3REZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyb290Rm9sZGVyLCAnaXNSb290Jyk7XG4gIHJvb3RGb2xkZXIuaXNSb290ID0gKCk6IGJvb2xlYW4gPT4gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG93bklzUm9vdERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyb290Rm9sZGVyLCAnaXNSb290Jywgb3duSXNSb290RGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSAocm9vdEZvbGRlciBhcyBQYXJ0aWFsPFRGb2xkZXI+KS5pc1Jvb3Q7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVSb290VW5zYWZlSXRlbXMobWVudTogTWVudSk6IHZvaWQge1xuICBjb25zdCB1bnNhZmVUaXRsZXMgPSBuZXcgU2V0PG51bGwgfCBzdHJpbmc+KFJPT1RfVU5TQUZFX0lURU1fVElUTEVfS0VZUy5tYXAoKGtleSkgPT4gYWN0aXZlV2luZG93LmkxOG5leHQudChrZXkpKSk7XG4gIG1lbnUuaXRlbXMgPSBtZW51Lml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIShpdGVtIGluc3RhbmNlb2YgTWVudUl0ZW0pIHx8ICF1bnNhZmVUaXRsZXMuaGFzKGl0ZW0udGl0bGVFbC50ZXh0Q29udGVudCkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGdCQUFnQjtBQUN6QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGNBQWM7QUFNaEIsTUFBTSx1QkFBdUI7QUFBQSxFQUNsQztBQUFBLEVBQ0E7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
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogT3BlbnMgYW5kIGV4dGVuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIGNvbnRleHQgbWVudSBmb3IgdGhlIHZhdWx0IHJvb3QsIGF0IHRoZSB0d28gc3BvdHMgdGhhdCBzdGFuZCBmb3IgaXQ6IHRoZVxuICogdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGFuZCB0aGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICpcbiAqIE9ic2lkaWFuIGFscmVhZHkgb3BlbnMgYSBtZW51IGZvciB0aGUgZW1wdHkgYXJlYTogdGhlIHZpZXcncyBvd24gYGNvbnRleHRtZW51YCBsaXN0ZW5lciBvbiBpdHMgZmlsZXMgY29udGFpbmVyIGNhbGxzXG4gKiBgb25GaWxlQ29udGV4dE1lbnUoZXZ0LCB2YXVsdC5nZXRSb290KCkpYCwgd2hpY2ggYnVpbGRzIGEge0BsaW5rIE1lbnV9LCB0cmlnZ2VycyBgZmlsZS1tZW51YCB3aXRoIHRoZSByb290IGZvbGRlciBhbmRcbiAqIHRoZSBzb3VyY2UgYGZpbGUtZXhwbG9yZXItY29udGV4dC1tZW51YCwgYW5kIHNob3dzIGl0LiBUaGUgdmF1bHQgbmFtZSAoYC53b3Jrc3BhY2UtZHJhd2VyLXZhdWx0LXN3aXRjaGVyYCBvbiBkZXNrdG9wLFxuICogYC53b3Jrc3BhY2UtZHJhd2VyLWhlYWRlci1uYW1lYCBvbiBtb2JpbGUsIHdoZXJlIE9ic2lkaWFuIGJ1aWxkcyBubyBzd2l0Y2hlcikgb3BlbnMgYSBkaWZmZXJlbnQgbWVudTogb24gZGVza3RvcFxuICogT2JzaWRpYW4gYWRkcyBgU2hvdyBpbiBzeXN0ZW0gZXhwbG9yZXJgIGFuZCBgQ29weSBwYXRoYCB0byB0aGUgcGVyLWV2ZW50IG1lbnUgYE1lbnUuZm9yRXZlbnRgIGhhbmRzIG91dC4gVGhlIGhhbmRsZXJzXG4gKiBnZXQgdGhhdCBtZW51LCBzbyBhIHJpZ2h0LWNsaWNrIHRoZXJlIG5ldmVyIG9wZW5zIGEgc2Vjb25kIG9uZS4gQSBzdWJzY3JpYmVyIHRoYXQgcHJlc2VudHMgdGhlIHJvb3QgYXMgYSBmb2xkZXJcbiAqIHJlcGxhY2VzIGl0IHdpdGggdGhlIHJvb3QncyBmb2xkZXIgbWVudSBpbnN0ZWFkLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYW5kIHNldmVyYWwgb2YgdGhlbSBtYXkgd2FudCB0aGlzIG1lbnUuIFR3byBjb3BpZXMgcGF0Y2hpbmcgdGhlXG4gKiBzYW1lIHByb3RvdHlwZSBhbmQgbGlzdGVuaW5nIG9uIHRoZSBzYW1lIGVsZW1lbnQgd291bGQgb3BlbiBpdCB0d2ljZSwgc28gdGhlcmUgaXMgT05FIGluc3RhbGxhdGlvbiBwZXIge0BsaW5rIEFwcH0sXG4gKiBrZXB0IGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSBhbmQgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGUgb3RoZXJzXG4gKiByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgaXQgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXQgYmV0d2VlblxuICogY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIHJlYWQgc3RydWN0dXJhbGx5LCBhbmQgYSBjaGFuZ2UgdG8gd2hhdCBhIGZpZWxkXG4gKiBtZWFucyBtb3ZlcyB0byBhIG5ldyBrZXkgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRpbmcgdGhlIG9sZCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGaWxlRXhwbG9yZXJWaWV3IH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldFByb3RvdHlwZU9mIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVJdGVtLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50cyB0aGF0IHN0YW5kIGZvciB0aGUgdmF1bHQgcm9vdCBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGluIHByaW9yaXR5IG9yZGVyLiBPYnNpZGlhbiBidWlsZHNcbiAqIGAud29ya3NwYWNlLWRyYXdlci12YXVsdC1zd2l0Y2hlcmAgb25seSBvbiBkZXNrdG9wOyBvbiBtb2JpbGUgdGhlIHZhdWx0IG5hbWUgaXMgdGhlIGRyYXdlciBoZWFkZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX05BTUVfU0VMRUNUT1JTID0gW1xuICAnLndvcmtzcGFjZS1kcmF3ZXItdmF1bHQtc3dpdGNoZXInLFxuICAnLndvcmtzcGFjZS1kcmF3ZXItaGVhZGVyLW5hbWUnXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRoZSBgc291cmNlYCBPYnNpZGlhbiBwYXNzZXMgd2l0aCBgZmlsZS1tZW51YCB3aGVuIHRoZSBGaWxlIEV4cGxvcmVyIG9wZW5zIGEgbWVudS5cbiAqL1xuY29uc3QgRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSA9ICdmaWxlLWV4cGxvcmVyLWNvbnRleHQtbWVudSc7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbXMgdGhhdCBtdXN0IG5vdCBhY3Qgb24gdGhlIHZhdWx0IHJvb3QsIGJ5IHRoZSBsb2NhbGl6YXRpb24ga2V5IG9mIHRoZWlyIHRpdGxlLiBUaGV5IGFwcGVhciBvbmx5IHdoZW5cbiAqIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIsIGZyb20gT2JzaWRpYW4gaXRzZWxmIG9yIGZyb20gYW5vdGhlciBwbHVnaW4ncyBgZmlsZS1tZW51YCBoYW5kbGVyLlxuICovXG5jb25zdCBST09UX1VOU0FGRV9JVEVNX1RJVExFX0tFWVMgPSBbXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIuYWN0aW9uLW1vdmUtZm9sZGVyJyxcbiAgJ3BsdWdpbnMuZmlsZS1leHBsb3Jlci5tZW51LW9wdC1kZWxldGUnLFxuICAncGx1Z2lucy5maWxlLWV4cGxvcmVyLm1lbnUtb3B0LW1ha2UtY29weScsXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIubWVudS1vcHQtcmVuYW1lJyxcbiAgJ3BsdWdpbnMuc2VhcmNoLm1lbnUtb3B0LXNlYXJjaC1pbi1mb2xkZXInXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ2ZpbGVFeHBsb3JlclJvb3RNZW51VjEnO1xuXG4vKipcbiAqIFdoaWNoIHNwb3Qgb2YgdGhlIEZpbGUgRXhwbG9yZXIgdGhlIHZhdWx0LXJvb3QgbWVudSB3YXMgb3BlbmVkIGZyb20uXG4gKi9cbmV4cG9ydCBlbnVtIEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCB7XG4gIC8qKlxuICAgKiBUaGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICAgKi9cbiAgRW1wdHlBcmVhID0gJ2VtcHR5LWFyZWEnLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIuXG4gICAqL1xuICBWYXVsdE5hbWUgPSAndmF1bHQtbmFtZSdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgZWFjaCB0aW1lIHRoZSB2YXVsdC1yb290IG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVyOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJvb3QgaXMgcHJlc2VudGVkIGFzIGFuIG9yZGluYXJ5IGZvbGRlciB3aGlsZSBpdHMgbWVudSBpcyBidWlsdCwgc28gdGhhdCBPYnNpZGlhbiBhbmQgb3RoZXIgcGx1Z2lucyBhZGRcbiAgICogdGhlIGl0ZW1zIHRoZXkgYWRkIHRvIGFueSBmb2xkZXIuIFRoZSBpdGVtcyB0aGF0IG11c3Qgbm90IGFjdCBvbiB0aGUgcm9vdCAocmVuYW1lLCBkZWxldGUsIG1vdmUsIG1ha2UgYSBjb3B5IGFuZFxuICAgKiBzZWFyY2ggaW4gZm9sZGVyKSBhcmUgcmVtb3ZlZCBhZ2FpbiBiZWZvcmUgdGhlIG1lbnUgaXMgc2hvd24uIE9uIHRoZSB2YXVsdCBuYW1lLCB0aGUgcm9vdCdzIGZvbGRlciBtZW51IHRoZW4gcmVwbGFjZXNcbiAgICogT2JzaWRpYW4ncyB2YXVsdCBtZW51LiBJdCBob2xkcyB3aGlsZSBhbnkgc3Vic2NyaWJlciBhc2tzIGZvciBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIG9mIHRoZSB2YXVsdC1yb290IG1lbnUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgdHlwZSBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXIgPSAocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSB7QGxpbmsgRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyfS5cbiAqXG4gKiBUaGUgc2hhcGUgaXMgcGFydCBvZiB0aGUgd2lyZSBmb3JtYXQgYmV0d2VlbiBjb3BpZXMgb2YgdGhpcyBsaWJyYXJ5OiBmaWVsZHMgYXJlIG9ubHkgZXZlciBhZGRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbnUsIGFib3V0IHRvIGJlIHNob3duOiB0aGUgcm9vdCdzIGZvbGRlciBtZW51LCBhZnRlciBldmVyeSBgZmlsZS1tZW51YCBoYW5kbGVyIGhhcyBydW4sIG9yIG9uIHRoZSB2YXVsdCBuYW1lIHRoZVxuICAgKiB2YXVsdCBtZW51IE9ic2lkaWFuIGJ1aWxkcyB0aGVyZS4gQSBtZW51IHN0aWxsIGVtcHR5IGFmdGVyIGV2ZXJ5IGhhbmRsZXIgaXMgbm90IHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVudTogTWVudTtcblxuICAvKipcbiAgICogVGhlIHJpZ2h0LWNsaWNrIG9yIGxvbmctcHJlc3MgdGhhdCBvcGVuZWQgdGhlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFdoaWNoIHNwb3QgdGhlIG1lbnUgd2FzIG9wZW5lZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90O1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVJbnN0YWxsYXRpb24ge1xuICByZWFkb25seSBvd25lcjogRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb247XG4gIHJlYWRvbmx5IHVuaW5zdGFsbDogKCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBTdWJzY3JpYmVyIGNoYW5nZXMgcmVwbGFjZSBvciBjbGVhciB0aGUgc2hhcmVkIG1lbnUgaW5zdGFsbGF0aW9uLlxuICBpbnN0YWxsYXRpb246IEZpbGVFeHBsb3JlclJvb3RNZW51SW5zdGFsbGF0aW9uIHwgbnVsbDtcbiAgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb25bXTtcbn1cblxuaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51U3Vic2NyaXB0aW9uIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogKHBhcmFtczogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyUGFyYW1zKSA9PiB2b2lkO1xuICByZWFkb25seSBpbnN0YWxsOiAoKSA9PiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyVmlld1dpdGhDb250ZXh0TWVudSBleHRlbmRzIEZpbGVFeHBsb3JlclZpZXcge1xuICByZWFkb25seSBvbkZpbGVDb250ZXh0TWVudTogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGZpbGU6IFRBYnN0cmFjdEZpbGUpID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBPcGVuUm9vdE1lbnVQYXJhbXMge1xuICByZWFkb25seSBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xuICByZWFkb25seSBvcGVuTmF0aXZlOiAoKSA9PiB2b2lkO1xuICByZWFkb25seSByb290Rm9sZGVyOiBURm9sZGVyO1xuICByZWFkb25seSBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3Q7XG59XG5cbi8qKlxuICogSGFuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIHZhdWx0LXJvb3QgbWVudSB0byBhIGhhbmRsZXIsIGFuZCBvcGVucyB0aGF0IG1lbnUgZnJvbSB0aGUgdmF1bHQgbmFtZSB0b28uXG4gKlxuICogQW55IG51bWJlciBvZiB0aGVzZSwgaW4gYW55IG51bWJlciBvZiBwbHVnaW5zLCBzaGFyZSBvbmUgaW5zdGFsbGF0aW9uIHBlciB7QGxpbmsgQXBwfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQ2FsbGVkIGVhY2ggdGltZSB0aGUgdmF1bHQtcm9vdCBtZW51IGlzIGFib3V0IHRvIGJlIHNob3duLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhbmRsZXI6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcm9vdCBpcyBwcmVzZW50ZWQgYXMgYW4gb3JkaW5hcnkgZm9sZGVyIHdoaWxlIGl0cyBtZW51IGlzIGJ1aWx0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3VsZFByZXNlbnRSb290QXNGb2xkZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBleHBsb3JlciByb290IG1lbnUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5oYW5kbGVyID0gcGFyYW1zLmhhbmRsZXI7XG4gICAgdGhpcy5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyID0gcGFyYW1zLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbiwgaW5zdGFsbGluZyBpdCB3aGVuIG5vYm9keSBoYXMgeWV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U2hhcmVkU3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb246IEZpbGVFeHBsb3JlclJvb3RNZW51U3Vic2NyaXB0aW9uID0ge1xuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgICAgaW5zdGFsbDogKCkgPT4gaW5zdGFsbFJvb3RNZW51KHRoaXMuYXBwLCBzdGF0ZSksXG4gICAgICBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyOiB0aGlzLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXJcbiAgICB9O1xuICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIHN0YXRlLmluc3RhbGxhdGlvbiA/Pz0geyBvd25lcjogc3Vic2NyaXB0aW9uLCB1bmluc3RhbGw6IHN1YnNjcmlwdGlvbi5pbnN0YWxsKCkgfTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3RhdGUuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbiksIDEpO1xuICAgICAgaWYgKHN0YXRlLmluc3RhbGxhdGlvbj8ub3duZXIgIT09IHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmluc3RhbGxhdGlvbi51bmluc3RhbGwoKTtcbiAgICAgIGNvbnN0IG5leHRPd25lciA9IHN0YXRlLnN1YnNjcmlwdGlvbnNbMF07XG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPSBuZXh0T3duZXIgPyB7IG93bmVyOiBuZXh0T3duZXIsIHVuaW5zdGFsbDogbmV4dE93bmVyLmluc3RhbGwoKSB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaChzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSwgcGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLnN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24uc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcikpIHtcbiAgICByZW1vdmVSb290VW5zYWZlSXRlbXMocGFyYW1zLm1lbnUpO1xuICB9XG5cbiAgLy8gQSBzbmFwc2hvdDogYSBoYW5kbGVyIG1heSB1bmxvYWQgaXRzIG93biBjb21wb25lbnQsIG9yIGFub3RoZXIgb25lLCB3aGlsZSB0aGUgbWVudSBpcyBkaXNwYXRjaGVkLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXNwcmVhZCAtLSBUaGUgY29weSBpcyB0aGUgcG9pbnQ6IHRoZSBsaXN0IG1heSBjaGFuZ2UgZHVyaW5nIHRoZSBsb29wLlxuICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBbLi4uc3RhdGUuc3Vic2NyaXB0aW9uc10pIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaXB0aW9uLmhhbmRsZXIocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIGV4cGxvcmVyIHJvb3QgbWVudSBoYW5kbGVyIGZhaWxlZCcsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlOiBGaWxlRXhwbG9yZXJSb290TWVudVNoYXJlZFN0YXRlLCBwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB1bmluc3RhbGxTaG93UGF0Y2ggPSBhcm91bmQocGFyYW1zLm1lbnUsIHtcbiAgICBzaG93QXRNb3VzZUV2ZW50OiAobmV4dCkgPT5cbiAgICAgIGZ1bmN0aW9uIHBhdGNoZWRTaG93QXRNb3VzZUV2ZW50KHRoaXM6IE1lbnUsIHNob3dNb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogTWVudSB7XG4gICAgICAgIHVuaW5zdGFsbFNob3dQYXRjaCgpO1xuICAgICAgICBkaXNwYXRjaChzdGF0ZSwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tZW51Lml0ZW1zLmxlbmd0aCA9PT0gMCA/IHRoaXMgOiBuZXh0LmNhbGwodGhpcywgc2hvd01vdXNlRXZlbnQpO1xuICAgICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyTGVhZihhcHA6IEFwcCk6IG51bGwgfCBXb3Jrc3BhY2VMZWFmIHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFZpZXdUeXBlLkZpbGVFeHBsb3JlcilbMF0gPz8gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkU3RhdGUoKTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkxpYlN0YXRlPEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGU+KFNIQVJFRF9TVEFURV9LRVksIHtcbiAgICBpbnN0YWxsYXRpb246IG51bGwsXG4gICAgc3Vic2NyaXB0aW9uczogW11cbiAgfSkudmFsdWU7XG59XG5mdW5jdGlvbiBpbnN0YWxsUm9vdE1lbnUoYXBwOiBBcHAsIHN0YXRlOiBGaWxlRXhwbG9yZXJSb290TWVudVNoYXJlZFN0YXRlKTogKCkgPT4gdm9pZCB7XG4gIGxldCBpc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGxldCBwZW5kaW5nU3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90IHwgbnVsbCA9IG51bGw7XG4gIGxldCB1bmluc3RhbGxQYXRjaDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJ5UGF0Y2goKTogdm9pZCB7XG4gICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgdW5pbnN0YWxsUGF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3ID0gZ2V0RmlsZUV4cGxvcmVyTGVhZihhcHApPy52aWV3O1xuICAgIGlmICghaXNGaWxlRXhwbG9yZXJWaWV3KHZpZXcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdW5pbnN0YWxsUGF0Y2ggPSBhcm91bmQoZ2V0UHJvdG90eXBlT2YodmlldyksIHtcbiAgICAgIG9uRmlsZUNvbnRleHRNZW51OiAobmV4dCkgPT5cbiAgICAgICAgZnVuY3Rpb24gcGF0Y2hlZE9uRmlsZUNvbnRleHRNZW51KHRoaXM6IEZpbGVFeHBsb3JlclZpZXdXaXRoQ29udGV4dE1lbnUsIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikgfHwgIWZpbGUuaXNSb290KCkpIHtcbiAgICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCBtb3VzZUV2ZW50LCBmaWxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcGVuUm9vdE1lbnUoe1xuICAgICAgICAgICAgbW91c2VFdmVudCxcbiAgICAgICAgICAgIG9wZW5OYXRpdmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIG1vdXNlRXZlbnQsIGZpbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvb3RGb2xkZXI6IGZpbGUsXG4gICAgICAgICAgICBzcG90OiBwZW5kaW5nU3BvdCA/PyBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuRW1wdHlBcmVhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Sb290TWVudShwYXJhbXM6IE9wZW5Sb290TWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbW91c2VFdmVudCwgb3Blbk5hdGl2ZSwgcm9vdEZvbGRlciwgc3BvdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gYXBwLndvcmtzcGFjZS5vbignZmlsZS1tZW51JywgKG1lbnUsIGZpbGUsIHNvdXJjZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgIT09IHJvb3RGb2xkZXIgfHwgc291cmNlICE9PSBGSUxFX0VYUExPUkVSX01FTlVfU09VUkNFKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBwLndvcmtzcGFjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlLCB7IG1lbnUsIG1vdXNlRXZlbnQsIHJvb3RGb2xkZXIsIHNwb3QgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN0b3JlSXNSb290ID0gc3RhdGUuc3Vic2NyaXB0aW9ucy5zb21lKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyKVxuICAgICAgPyBwcmVzZW50QXNGb2xkZXIocm9vdEZvbGRlcilcbiAgICAgIDogbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBvcGVuTmF0aXZlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc3RvcmVJc1Jvb3Q/LigpO1xuICAgICAgYXBwLndvcmtzcGFjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Gcm9tVmF1bHROYW1lKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc09uVmF1bHROYW1lID0gbW91c2VFdmVudC5jb21wb3NlZFBhdGgoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIFZBVUxUX05BTUVfU0VMRUNUT1JTLnNvbWUoKHNlbGVjdG9yKSA9PiB0YXJnZXQubWF0Y2hlcyhzZWxlY3RvcikpKTtcbiAgICBpZiAoIWlzT25WYXVsdE5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBgTWVudS5mb3JFdmVudGAgaGFuZHMgZXZlcnkgbGlzdGVuZXIgb2Ygb25lIGV2ZW50IHRoZSBzYW1lIG1lbnUgYW5kIHNob3dzIGl0IG9uIHRoZSBuZXh0IHRhc2suIE9ic2lkaWFuJ3Mgb3duXG4gICAgLy8gbGlzdGVuZXIgb24gdGhlIHZhdWx0IG5hbWUgYWRkcyBpdHMgdmF1bHQgaXRlbXMgdG8gaXQgYWZ0ZXIgdGhpcyBjYXB0dXJlLXBoYXNlIG9uZSBoYXMgcnVuLlxuICAgIGNvbnN0IHZhdWx0TWVudSA9IE1lbnUuZm9yRXZlbnQobW91c2VFdmVudCk7XG4gICAgY29uc3Qgcm9vdEZvbGRlciA9IGFwcC52YXVsdC5nZXRSb290KCk7XG4gICAgY29uc3QgbGVhZiA9IGdldEZpbGVFeHBsb3JlckxlYWYoYXBwKTtcbiAgICBpZiAoIWxlYWYgfHwgc3RhdGUuc3Vic2NyaXB0aW9ucy5ldmVyeSgoc3Vic2NyaXB0aW9uKSA9PiAhc3Vic2NyaXB0aW9uLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIpKSB7XG4gICAgICBkaXNwYXRjaEJlZm9yZVNob3coc3RhdGUsIHsgbWVudTogdmF1bHRNZW51LCBtb3VzZUV2ZW50LCByb290Rm9sZGVyLCBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuVmF1bHROYW1lIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXNlbnRlZCBhcyBhIGZvbGRlciwgdGhlIHJvb3QncyBmb2xkZXIgbWVudSByZXBsYWNlcyB0aGUgdmF1bHQgbWVudSByYXRoZXIgdGhhbiBvcGVuaW5nIG9uIHRvcCBvZiBpdC5cbiAgICBmdW5jdGlvbiBzdXBwcmVzc1ZhdWx0TWVudVNob3coKTogTWVudSB7XG4gICAgICB1bmluc3RhbGxWYXVsdE1lbnVTaG93UGF0Y2goKTtcbiAgICAgIHJldHVybiB2YXVsdE1lbnU7XG4gICAgfVxuICAgIGNvbnN0IHVuaW5zdGFsbFZhdWx0TWVudVNob3dQYXRjaCA9IGFyb3VuZCh2YXVsdE1lbnUsIHsgc2hvd0F0TW91c2VFdmVudDogKCkgPT4gc3VwcHJlc3NWYXVsdE1lbnVTaG93IH0pO1xuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGxlYWYubG9hZElmRGVmZXJyZWQoKTtcbiAgICAgIGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG4gICAgICBpZiAoaXNVbmluc3RhbGxlZCB8fCAhaXNGaWxlRXhwbG9yZXJWaWV3KHZpZXcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5UGF0Y2goKTtcbiAgICAgIHZpZXcudHJlZS5jbGVhclNlbGVjdGVkRG9tcygpO1xuICAgICAgcGVuZGluZ1Nwb3QgPSBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuVmF1bHROYW1lO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmlldy5vbkZpbGVDb250ZXh0TWVudShtb3VzZUV2ZW50LCByb290Rm9sZGVyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHBlbmRpbmdTcG90ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyeVBhdGNoKCk7XG4gIGNvbnN0IGxheW91dENoYW5nZUV2ZW50UmVmID0gYXBwLndvcmtzcGFjZS5vbignbGF5b3V0LWNoYW5nZScsIHRyeVBhdGNoKTtcbiAgYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHRyeVBhdGNoKTtcbiAgY29uc3QgZG9jID0gYXBwLndvcmtzcGFjZS5jb250YWluZXJFbC5kb2M7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIG9wZW5Gcm9tVmF1bHROYW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpc1VuaW5zdGFsbGVkID0gdHJ1ZTtcbiAgICB1bmluc3RhbGxQYXRjaD8uKCk7XG4gICAgYXBwLndvcmtzcGFjZS5vZmZyZWYobGF5b3V0Q2hhbmdlRXZlbnRSZWYpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIG9wZW5Gcm9tVmF1bHROYW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRmlsZUV4cGxvcmVyVmlldyh2aWV3OiB1bmtub3duKTogdmlldyBpcyBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51IHtcbiAgcmV0dXJuIHR5cGVvZiAodmlldyBhcyBQYXJ0aWFsPEZpbGVFeHBsb3JlclZpZXdXaXRoQ29udGV4dE1lbnU+IHwgdW5kZWZpbmVkKT8ub25GaWxlQ29udGV4dE1lbnUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIHByZXNlbnRBc0ZvbGRlcihyb290Rm9sZGVyOiBURm9sZGVyKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IG93bklzUm9vdERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJvb3RGb2xkZXIsICdpc1Jvb3QnKTtcbiAgcm9vdEZvbGRlci5pc1Jvb3QgPSAoKTogYm9vbGVhbiA9PiBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAob3duSXNSb290RGVzY3JpcHRvcikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvb3RGb2xkZXIsICdpc1Jvb3QnLCBvd25Jc1Jvb3REZXNjcmlwdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIChyb290Rm9sZGVyIGFzIFBhcnRpYWw8VEZvbGRlcj4pLmlzUm9vdDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJvb3RVbnNhZmVJdGVtcyhtZW51OiBNZW51KTogdm9pZCB7XG4gIGNvbnN0IHVuc2FmZVRpdGxlcyA9IG5ldyBTZXQ8bnVsbCB8IHN0cmluZz4oUk9PVF9VTlNBRkVfSVRFTV9USVRMRV9LRVlTLm1hcCgoa2V5KSA9PiBhY3RpdmVXaW5kb3cuaTE4bmV4dC50KGtleSkpKTtcbiAgbWVudS5pdGVtcyA9IG1lbnUuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhKGl0ZW0gaW5zdGFuY2VvZiBNZW51SXRlbSkgfHwgIXVuc2FmZVRpdGxlcy5oYXMoaXRlbS50aXRsZUVsLnRleHRDb250ZW50KSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsY0FBYztBQU1oQixNQUFNLHVCQUF1QjtB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
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Incremental per-file projections with stat-based restoration and injected persistence.
|
|
6
|
+
*/
|
|
7
|
+
import type { App } from 'obsidian';
|
|
8
|
+
import { TFile } from 'obsidian';
|
|
9
|
+
import { ComponentEx } from './component-ex.mjs';
|
|
10
|
+
/**
|
|
11
|
+
* Dependencies of an incremental index. Persistence must validate its own schema.
|
|
12
|
+
*
|
|
13
|
+
* @typeParam T - The immutable per-file projection.
|
|
14
|
+
*/
|
|
15
|
+
export interface IncrementalFileIndexComponentConstructorParams<T> {
|
|
16
|
+
/**
|
|
17
|
+
* Files accepted by this index, for example Markdown files only.
|
|
18
|
+
*/
|
|
19
|
+
readonly accepts: (file: TFile) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* The application owning the vault.
|
|
22
|
+
*/
|
|
23
|
+
readonly app: App;
|
|
24
|
+
/**
|
|
25
|
+
* Builds an immutable record synchronously; text is never retained by this component.
|
|
26
|
+
*/
|
|
27
|
+
readonly indexFile: (params: IndexFileParams) => T;
|
|
28
|
+
/**
|
|
29
|
+
* Reads validated records, or an empty map for a missing/incompatible cache.
|
|
30
|
+
*/
|
|
31
|
+
readonly load: () => Promise<ReadonlyMap<string, IndexedFileRecord<T>>>;
|
|
32
|
+
/**
|
|
33
|
+
* Removes a record from a consumer's secondary index. Called for known records only.
|
|
34
|
+
*/
|
|
35
|
+
readonly onRemove: (path: string) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Updates a consumer's secondary index, including restored records.
|
|
38
|
+
*/
|
|
39
|
+
readonly onSet: (path: string, record: T) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Persists a snapshot; writes are serialized and retried by the next flush after failure.
|
|
42
|
+
*/
|
|
43
|
+
readonly save: (records: ReadonlyMap<string, IndexedFileRecord<T>>) => Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A projection and the file stats observed before reading its text.
|
|
47
|
+
*
|
|
48
|
+
* @typeParam T - The immutable per-file projection.
|
|
49
|
+
*/
|
|
50
|
+
export interface IndexedFileRecord<T> {
|
|
51
|
+
/**
|
|
52
|
+
* Last modification time, in milliseconds.
|
|
53
|
+
*/
|
|
54
|
+
readonly mtime: number;
|
|
55
|
+
/**
|
|
56
|
+
* The consumer's immutable projection.
|
|
57
|
+
*/
|
|
58
|
+
readonly record: T;
|
|
59
|
+
/**
|
|
60
|
+
* File size in bytes.
|
|
61
|
+
*/
|
|
62
|
+
readonly size: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Inputs to a per-file projection.
|
|
66
|
+
*/
|
|
67
|
+
export interface IndexFileParams {
|
|
68
|
+
/**
|
|
69
|
+
* Text read from the vault, or supplied by a metadata-cache event.
|
|
70
|
+
*/
|
|
71
|
+
readonly content: string;
|
|
72
|
+
/**
|
|
73
|
+
* The file being indexed.
|
|
74
|
+
*/
|
|
75
|
+
readonly file: TFile;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Keeps per-file projections current while loaded. Call loadWithPromises after metadata readiness if the
|
|
79
|
+
* projection needs cached metadata. Listeners are installed before restoration, and events win over older reads.
|
|
80
|
+
* Reads are sequential, bounding memory and I/O; consumers own schema, storage location and secondary indexes.
|
|
81
|
+
* Unchanged records are reused by mtime and size, which cannot detect a same-stat external rewrite.
|
|
82
|
+
*
|
|
83
|
+
* @typeParam T - The immutable per-file projection.
|
|
84
|
+
*/
|
|
85
|
+
export declare class IncrementalFileIndexComponent<T> extends ComponentEx {
|
|
86
|
+
/**
|
|
87
|
+
* Whether startup reconciliation has completed.
|
|
88
|
+
*
|
|
89
|
+
* @returns Whether the index completed its first reconciliation.
|
|
90
|
+
*/
|
|
91
|
+
get isBuilt(): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Projection, notifications and persistence supplied by the consumer.
|
|
94
|
+
*/
|
|
95
|
+
protected readonly options: IncrementalFileIndexComponentConstructorParams<T>;
|
|
96
|
+
private isBuiltValue;
|
|
97
|
+
private readTail;
|
|
98
|
+
private readonly records;
|
|
99
|
+
private readonly requestSave;
|
|
100
|
+
private revision;
|
|
101
|
+
private readonly revisions;
|
|
102
|
+
private savedRevision;
|
|
103
|
+
private savePromise;
|
|
104
|
+
/**
|
|
105
|
+
* Creates an index with consumer-owned projection and persistence.
|
|
106
|
+
*
|
|
107
|
+
* @param params - The index dependencies.
|
|
108
|
+
*/
|
|
109
|
+
constructor(params: IncrementalFileIndexComponentConstructorParams<T>);
|
|
110
|
+
/**
|
|
111
|
+
* Saves a snapshot after previous writes finish, including changes arriving during a write.
|
|
112
|
+
*
|
|
113
|
+
* @returns Completion of the serialized writes; rejects on persistence failure without marking it saved.
|
|
114
|
+
*/
|
|
115
|
+
flush(): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Returns a shallow snapshot; consumers must treat records as immutable.
|
|
118
|
+
*
|
|
119
|
+
* @returns Current records by vault-relative path.
|
|
120
|
+
*/
|
|
121
|
+
getRecords(): ReadonlyMap<string, IndexedFileRecord<T>>;
|
|
122
|
+
/**
|
|
123
|
+
* Registers changes before startup restoration.
|
|
124
|
+
*/
|
|
125
|
+
onload(): void;
|
|
126
|
+
/**
|
|
127
|
+
* Reuses unchanged saved records and reads other files one at a time.
|
|
128
|
+
*
|
|
129
|
+
* @returns Completion of startup reconciliation.
|
|
130
|
+
*/
|
|
131
|
+
onloadAsync(): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* Cancels the debounce and flushes completed indexes before disposing event listeners.
|
|
134
|
+
*/
|
|
135
|
+
onunload(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Rebuilds projections for every accepted file, for example after a consumer learns new names to find in text.
|
|
138
|
+
* Events arriving during the scan supersede its older reads. Consumers coordinate any domain scan markers.
|
|
139
|
+
*
|
|
140
|
+
* @returns Completion of the bounded full scan.
|
|
141
|
+
*/
|
|
142
|
+
rescan(): Promise<void>;
|
|
143
|
+
private markDirty;
|
|
144
|
+
private queueScan;
|
|
145
|
+
private removeRecord;
|
|
146
|
+
private removeTree;
|
|
147
|
+
private rename;
|
|
148
|
+
private saveChanges;
|
|
149
|
+
private scanFile;
|
|
150
|
+
private setRecord;
|
|
151
|
+
private setText;
|
|
152
|
+
}
|