@mnaoumov/obsidian-lib 7.1.0 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/__merged.cjs +8 -6
- package/dist/lib/cjs/__merged.d.cts +1 -1
- 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 +74 -10
- package/dist/lib/cjs/components/incremental-file-index-component.d.cts +16 -1
- package/dist/lib/cjs/components/index.cjs +5 -5
- 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 +21 -18
- package/dist/lib/cjs/data-stores/local-data-store.d.cts +9 -1
- 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 +5 -5
- 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 +39 -15
- package/dist/lib/cjs/link.d.cts +49 -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 +6 -6
- 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 +18 -6
- package/dist/lib/cjs/reference.d.cts +27 -7
- 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 +1 -1
- package/dist/lib/esm/__merged.mjs +3 -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 +16 -1
- package/dist/lib/esm/components/incremental-file-index-component.mjs +69 -5
- 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/local-data-store.d.mts +9 -1
- package/dist/lib/esm/data-stores/local-data-store.mjs +16 -13
- 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/link.d.mts +49 -2
- package/dist/lib/esm/link.mjs +35 -10
- 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.mjs +1 -1
- 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 +27 -7
- package/dist/lib/esm/reference.mjs +12 -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
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -537,4 +537,4 @@ function sortAndFilterChanges(changes) {
|
|
|
537
537
|
isFrontmatterChangeWithOffsets,
|
|
538
538
|
toFrontmatterChangeWithOffsets
|
|
539
539
|
});
|
|
540
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlLWNoYW5nZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBmaWxlIGNoYW5nZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gIFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vY2FudmFzLmQudHMnO1xuXG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7XG4gIGdldE5lc3RlZFByb3BlcnR5VmFsdWUsXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMsXG4gIHNldE5lc3RlZFByb3BlcnR5VmFsdWVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdmFsdWUtcHJvdmlkZXInO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIH0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ2FudmFzRmlsZU5vZGVSZWZlcmVuY2UsXG4gIENhbnZhc1JlZmVyZW5jZSxcbiAgQ2FudmFzVGV4dE5vZGVSZWZlcmVuY2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb250ZW50QXJndW1lbnRzLFxuICBQcm9jZXNzT3B0aW9ucyxcbiAgUHJvY2Vzc1BhcmFtc1xufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlciB9IGZyb20gJy4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLFxuICB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHNcbn0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIgPSBTdHJpbmcucmF3YFxcfGA7XG4vKipcbiAqIE1hdGNoZXMgYSB3aWtpbGluayBkaXZpZGVyIHRvZ2V0aGVyIHdpdGggdGhlIGJhY2tzbGFzaCBlc2NhcGluZyBpdCwgaWYgYW55LiBBIGxvb2tiZWhpbmQgd291bGQgc2F5IFwidW5lc2NhcGVkXCJcbiAqIGRpcmVjdGx5LCBidXQgaXQgaXMgYSBzeW50YXggZXJyb3Igb24gaU9TIGJlZm9yZSAxNi40LCBiZWxvdyB0aGUgaU9TIDE1IE9ic2lkaWFuIG1vYmlsZSBzdGlsbCBzdXBwb3J0cy5cbiAqIFJlcGxhY2luZyBldmVyeSBtYXRjaCB3aXRoIGFuIGVzY2FwZWQgZGl2aWRlciBsZWF2ZXMgYW4gZXNjYXBlZCBvbmUgYXMgaXQgd2FzIGFuZCBlc2NhcGVzIGEgYmFyZSBvbmUuXG4gKi9cbmNvbnN0IE9QVElPTkFMTFlfRVNDQVBFRF9XSUtJTElOS19ESVZJREVSX1JFR0VYUCA9IC9cXFxcP1xcfC9nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhcHBseUNvbnRlbnRDaGFuZ2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBseUNvbnRlbnRDaGFuZ2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgY29udGVudCBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXSB8IG51bGwsIENvbnRlbnRBcmd1bWVudHM+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXM/OiBib29sZWFuO1xufVxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYXBwbHlGaWxlQ2hhbmdlc30uXG4gKi9cbmV4cG9ydCB0eXBlIEFwcGx5RmlsZUNoYW5nZXNPcHRpb25zID0gUHJvY2Vzc09wdGlvbnM7XG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhcHBseUZpbGVDaGFuZ2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBseUZpbGVDaGFuZ2VzUGFyYW1zIGV4dGVuZHMgQXBwbHlGaWxlQ2hhbmdlc09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZXJlIHRoZSBmaWxlIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10gfCBudWxsLCBDb250ZW50QXJndW1lbnRzPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXM/OiBib29sZWFuO1xufVxuLyoqXG4gKiBBIGZpbGUgY2hhbmdlIGluIHRoZSB2YXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIEEgbmV3IGNvbnRlbnQgdG8gcmVwbGFjZSB0aGUgb2xkIGNvbnRlbnQuXG4gICAqL1xuICBuZXdDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdGhhdCBjYXVzZWQgdGhlIGNoYW5nZS5cbiAgICovXG4gIHJlZmVyZW5jZTogUmVmZXJlbmNlO1xufVxuaW50ZXJmYWNlIEFwcGx5Q2FudmFzQ2hhbmdlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10gfCBudWxsLCBDb250ZW50QXJndW1lbnRzPjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gaWYgdGhlIGNoYW5nZXMgYXJlIGludmFsaWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlczogRmlsZUNoYW5nZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBwYXJzaW5nIHRoZSBmcm9udG1hdHRlciBmYWlsZWQuXG4gICAqL1xuICByZWFkb25seSBoYXNGcm9udG1hdHRlckVycm9yOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcGx5Q29udGVudENoYW5nZXNUb1RleHRSZXN1bHQge1xuICByZWFkb25seSBmcm9udG1hdHRlckNoYW5nZWQ6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT47XG4gIHJlYWRvbmx5IG5ld0NvbnRlbnQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJvbnRtYXR0ZXIgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZnJvbnRtYXR0ZXIga2V5cyB0byB0aGUgZnJvbnRtYXR0ZXIgY2hhbmdlcyB3aXRoIG9mZnNldHMgdG8gYXBwbHkuXG4gICAqL1xuICByZWFkb25seSBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwOiBNYXA8c3RyaW5nLCBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzW10+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ1aWxkRmluYWxDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmcm9udG1hdHRlciB0byB3cml0ZSBpbnRvIHRoZSBmaW5hbCBjb250ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGZyb250bWF0dGVyIGtleXMgdG8gdGhlIGZyb250bWF0dGVyIGNoYW5nZXMgd2l0aCBvZmZzZXRzIHRoYXQgd2VyZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJDaGFuZ2VkOiBNYXA8c3RyaW5nLCBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzW10+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgZnJvbnRtYXR0ZXIgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdDb250ZW50OiBzdHJpbmc7XG59XG5cbnR5cGUgQ2FudmFzQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8Q2FudmFzUmVmZXJlbmNlPjtcbnR5cGUgQ2FudmFzRmlsZU5vZGVDaGFuZ2UgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxDYW52YXNGaWxlTm9kZVJlZmVyZW5jZT47XG50eXBlIENhbnZhc1RleHROb2RlQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8Q2FudmFzVGV4dE5vZGVSZWZlcmVuY2U+O1xudHlwZSBDb250ZW50Q2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8UmVmZXJlbmNlQ2FjaGU+O1xudHlwZSBGcm9udG1hdHRlckNoYW5nZSA9IEZpbGVDaGFuZ2UgJiBXaXRoUmVmZXJlbmNlPEZyb250bWF0dGVyTGlua0NhY2hlPjtcblxudHlwZSBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8RnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cz47XG5cbmludGVyZmFjZSBQYXJzZUZyb250bWF0dGVyU2FmZWx5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRvIHBhcnNlIHRoZSBmcm9udG1hdHRlciBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0aGUgY29udGVudCBiZWxvbmdzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFyc2VGcm9udG1hdHRlclNhZmVseVJlc3VsdCB7XG4gIHJlYWRvbmx5IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+O1xuICByZWFkb25seSBoYXNGcm9udG1hdHRlckVycm9yOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgVmFsaWRhdGVDaGFuZ2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IGNoYW5nZXMgdG8gdmFsaWRhdGUuXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBGaWxlQ2hhbmdlW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRoZSBjaGFuZ2VzIHNob3VsZCBiZSB2YWxpZGF0ZWQgYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSB2YWxpZGF0ZWQgYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgdmFsaWRhdGVkIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXaXRoUmVmZXJlbmNlPFIgZXh0ZW5kcyBSZWZlcmVuY2U+IHtcbiAgcmVmZXJlbmNlOiBSO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgY29udGVudCBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGFwcGx5aW5nIHRoZSBjb250ZW50IGNoYW5nZXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB1cGRhdGVkIGNvbnRlbnQgb3IgdG8gYG51bGxgIGlmIHVwZGF0ZSBkaWRuJ3Qgc3VjY2VlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5Q29udGVudENoYW5nZXMocGFyYW1zOiBBcHBseUNvbnRlbnRDaGFuZ2VzUGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBjaGFuZ2VzUHJvdmlkZXIsXG4gICAgY29udGVudCxcbiAgICBwYXRoLFxuICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbiAgfSA9IHBhcmFtcztcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyLCB7IGFib3J0U2lnbmFsLCBjb250ZW50IH0pO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBpZiAoY2hhbmdlcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBmcm9udG1hdHRlciwgaGFzRnJvbnRtYXR0ZXJFcnJvciB9ID0gcGFyc2VGcm9udG1hdHRlclNhZmVseSh7IGNvbnRlbnQsIHBhdGggfSk7XG5cbiAgaWYgKCFhcmVDaGFuZ2VzVmFsaWQoeyBjaGFuZ2VzLCBjb250ZW50LCBmcm9udG1hdHRlciwgcGF0aCB9KSkge1xuICAgIHJldHVybiBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgPyBudWxsIDogY29udGVudDtcbiAgfVxuXG4gIGNoYW5nZXMgPSBzb3J0QW5kRmlsdGVyQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICBjb25zdCB7IGZyb250bWF0dGVyQ2hhbmdlZCwgbmV3Q29udGVudCB9ID0gYXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dCh7IGNoYW5nZXMsIGNvbnRlbnQsIGhhc0Zyb250bWF0dGVyRXJyb3IsIHBhdGggfSk7XG5cbiAgYXdhaXQgYXBwbHlGcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyh7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgZnJvbnRtYXR0ZXIsXG4gICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcDogZnJvbnRtYXR0ZXJDaGFuZ2VkLFxuICAgIHBhdGhcbiAgfSk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgcmV0dXJuIGJ1aWxkRmluYWxDb250ZW50KHsgZnJvbnRtYXR0ZXIsIGZyb250bWF0dGVyQ2hhbmdlZCwgbmV3Q29udGVudCB9KTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgYXBwbHlpbmcgdGhlIGZpbGUgY2hhbmdlcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RmlsZUNoYW5nZXMocGFyYW1zOiBBcHBseUZpbGVDaGFuZ2VzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgY2hhbmdlc1Byb3ZpZGVyLFxuICAgIHBhdGhPckZpbGUsXG4gICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHByb2Nlc3Mobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFByb2Nlc3NQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgYXN5bmMgbmV3Q29udGVudFByb3ZpZGVyKHsgYWJvcnRTaWduYWwsIGNvbnRlbnQgfSkge1xuICAgICAgcmV0dXJuIGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlKVxuICAgICAgICA/IChhd2FpdCBhcHBseUNhbnZhc0NoYW5nZXMoe1xuICAgICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICAgIGNoYW5nZXNQcm92aWRlcixcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIHBhdGg6IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSxcbiAgICAgICAgICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXNcbiAgICAgICAgfSkpXG4gICAgICAgIDogKGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoe1xuICAgICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICAgIGNoYW5nZXNQcm92aWRlcixcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIHBhdGg6IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSxcbiAgICAgICAgICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXNcbiAgICAgICAgfSkpO1xuICAgIH0sXG4gICAgcGF0aE9yRmlsZSxcbiAgICAuLi5vcHRpb25zXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNDaGFuZ2Uge1xuICByZXR1cm4gaXNDYW52YXNSZWZlcmVuY2UoY2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgZmlsZSBub2RlIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gY2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgZmlsZSBub2RlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzRmlsZU5vZGVDaGFuZ2UoY2hhbmdlOiBGaWxlQ2hhbmdlKTogY2hhbmdlIGlzIENhbnZhc0ZpbGVOb2RlQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzQ2hhbmdlKGNoYW5nZSkgJiYgY2hhbmdlLnJlZmVyZW5jZS50eXBlID09PSAnZmlsZSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgdGV4dCBub2RlIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gY2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgdGV4dCBub2RlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzVGV4dE5vZGVDaGFuZ2UoY2hhbmdlOiBGaWxlQ2hhbmdlKTogY2hhbmdlIGlzIENhbnZhc1RleHROb2RlQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzQ2hhbmdlKGNoYW5nZSkgJiYgY2hhbmdlLnJlZmVyZW5jZS50eXBlID09PSAndGV4dCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjb250ZW50IGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRlbnRDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgQ29udGVudENoYW5nZSB7XG4gIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckNoYW5nZShmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlKTogZmlsZUNoYW5nZSBpcyBGcm9udG1hdHRlckNoYW5nZSB7XG4gIHJldHVybiBpc0Zyb250bWF0dGVyTGlua0NhY2hlKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZSB3aXRoIG9mZnNldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyB7XG4gIHJldHVybiBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMoZmlsZUNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIHRvIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIHdpdGggb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBmaWxlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhmaWxlQ2hhbmdlOiBGcm9udG1hdHRlckNoYW5nZSk6IEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2UpXG4gICAgPyBmaWxlQ2hhbmdlXG4gICAgOiB7XG4gICAgICAuLi5maWxlQ2hhbmdlLFxuICAgICAgcmVmZXJlbmNlOiB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMoZmlsZUNoYW5nZS5yZWZlcmVuY2UpXG4gICAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlDYW52YXNDaGFuZ2VzKHBhcmFtczogQXBwbHlDYW52YXNDaGFuZ2VzUGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBjaGFuZ2VzUHJvdmlkZXIsXG4gICAgY29udGVudCxcbiAgICBwYXRoLFxuICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIsIHsgYWJvcnRTaWduYWwsIGNvbnRlbnQgfSk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGlmIChjaGFuZ2VzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjYW52YXNEYXRhID0gcGFyc2VKc29uU2FmZShjb250ZW50KSBhcyBHZW5lcmljT2JqZWN0PENhbnZhc0RhdGE+O1xuXG4gIC8vIFRoZSBjb250ZW50IGlzIG5vdCBhIHZhbGlkIGNhbnZhcyAoYSB0cmFuc2llbnQgYHt9YCBvciBwYXJ0aWFsIG9iamVjdCkuXG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIGFub3RoZXIgcGx1Z2luIGlzIHN0aWxsIGluaXRpYWxpemluZyB0aGUgZmlsZS5cbiAgLy8gU2tpcCB0aGUgcmV3cml0ZSBzbyBubyBtYWxmb3JtZWQgb2JqZWN0IGlzIHdyaXR0ZW4gYmFjayBhbmQgdGhlIHJlbmRlcmVyIG5ldmVyIGNyYXNoZXMuXG4gIC8vIE1pcnJvcnMgdGhlIGB7IGVkZ2VzOiBbXSwgbm9kZXM6IFtdIH1gIGZhbGxiYWNrIGluIGBnZXRDYW52YXNSZWZlcmVuY2VzYC5cbiAgLy8gUmV0dXJuaW5nIHRoZSBjb250ZW50IHVuY2hhbmdlZCByYXRoZXIgdGhhbiBgbnVsbGAgY29tcGxldGVzIHRoZSBvcGVyYXRpb24gd2l0aG91dCBhIHdyaXRlOiB0aGVcbiAgLy8gcmVmdXNhbCBpcyBwZXJtYW5lbnQgZm9yIHRoaXMgY29udGVudCwgYW5kIGBudWxsYCB3b3VsZCBhc2sgYHByb2Nlc3MoKWAgdG8gcmV0cnkgaXQgZm9yZXZlci5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGNhbnZhc0RhdGEubm9kZXMpIHx8ICFBcnJheS5pc0FycmF5KGNhbnZhc0RhdGEuZWRnZXMpKSB7XG4gICAgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcignRmlsZUNoYW5nZTphcHBseUNhbnZhc0NoYW5nZXMnKSgnTm90IGEgdmFsaWQgY2FudmFzOyBza2lwcGluZyByZXdyaXRlJywgeyBwYXRoIH0pO1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgY29uc3QgY2FudmFzVGV4dENoYW5nZXMgPSBuZXcgTWFwPG51bWJlciwgQ2FudmFzVGV4dE5vZGVDaGFuZ2VbXT4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKCFpc0NhbnZhc0NoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ09ubHkgY2FudmFzIGNoYW5nZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FudmFzIGZpbGVzJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXhdO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIG5vdCBmb3VuZCc7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNDYW52YXNGaWxlTm9kZUNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBpZiAobm9kZS5maWxlICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdGaWxlQ2hhbmdlOmFwcGx5Q2FudmFzQ2hhbmdlcycpKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IG5vZGUuZmlsZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBub2RlSW5kZXg6IGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdHlwZTogJ2ZpbGUnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgICAgbm9kZS5maWxlID0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIGZhbHNlIGJyYW5jaCBvZiB0aGUgZWxzZS1pZiBpcyB1bnJlYWNoYWJsZTsgb25seSAnZmlsZScgYW5kICd0ZXh0JyBjYW52YXMgbm9kZSB0eXBlcyBleGlzdC4gKi9cbiAgICB9IGVsc2UgaWYgKGlzQ2FudmFzVGV4dE5vZGVDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGxldCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUgPSBjYW52YXNUZXh0Q2hhbmdlcy5nZXQoY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXgpO1xuICAgICAgaWYgKCFjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpIHtcbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlID0gW107XG4gICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzLnNldChjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCwgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlKTtcbiAgICAgIH1cblxuICAgICAgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLnB1c2goY2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZV0gb2YgY2FudmFzVGV4dENoYW5nZXMpIHtcbiAgICBjb25zdCBub2RlID0gY2FudmFzRGF0YS5ub2Rlc1tub2RlSW5kZXhdO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBOb2RlIGV4aXN0ZW5jZSBpcyBhbHJlYWR5IHZlcmlmaWVkIGluIHRoZSBmaXJzdCBsb29wIGFib3ZlLiAqL1xuICAgIGlmICghbm9kZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIG5vdCBmb3VuZCc7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICBpZiAodHlwZW9mIG5vZGUudGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnTm9kZSB0ZXh0IGlzIG5vdCBhIHN0cmluZyc7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudENoYW5nZXMgPSBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUubWFwKChjaGFuZ2UpID0+IHtcbiAgICAgIC8vIEEgY2FudmFzIHRleHQgbm9kZSBjYW4gaG9sZCBhIG1hcmtkb3duIHRhYmxlLCB3aGVyZSBhIHNpemVkIGVtYmVkIGVzY2FwZXMgdGhlIHdpa2lsaW5rXG4gICAgICAvLyBkaXZpZGVyIHNvIHRoZSBwaXBlIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgdGFibGUgY2VsbCAoYCFbW2ltZy5wbmdcXHw1MDBdXWApLiBUaGUgcmVnZW5lcmF0ZWRcbiAgICAgIC8vIGxpbmsgdXNlcyBhbiB1bmVzY2FwZWQgZGl2aWRlciwgc28gcmVzdG9yZSB0aGUgZXNjYXBpbmcgd2hlbiB0aGUgb3JpZ2luYWwgcmVmZXJlbmNlIGhhZCBpdCxcbiAgICAgIC8vIGtlZXBpbmcgYm90aCB0aGUgdGFibGUgYW5kIHRoZSBlbWJlZCBzaXplIGludGFjdCBhY3Jvc3MgdGhlIHJld3JpdGUuXG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gY2hhbmdlLnJlZmVyZW5jZS5vcmlnaW5hbFJlZmVyZW5jZS5vcmlnaW5hbC5pbmNsdWRlcyhFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIpXG4gICAgICAgID8gY2hhbmdlLm5ld0NvbnRlbnQucmVwbGFjZUFsbChPUFRJT05BTExZX0VTQ0FQRURfV0lLSUxJTktfRElWSURFUl9SRUdFWFAsICgpID0+IEVTQ0FQRURfV0lLSUxJTktfRElWSURFUilcbiAgICAgICAgOiBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgIHJldHVybiByZWZlcmVuY2VUb0ZpbGVDaGFuZ2UoY2hhbmdlLnJlZmVyZW5jZS5vcmlnaW5hbFJlZmVyZW5jZSwgbmV3Q29udGVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3Tm9kZVRleHQgPSBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKHtcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgY2hhbmdlc1Byb3ZpZGVyOiBjb250ZW50Q2hhbmdlcyxcbiAgICAgIGNvbnRlbnQ6IG5vZGUudGV4dCxcbiAgICAgIHBhdGg6IGAke3BhdGh9Lm5vZGUke1N0cmluZyhub2RlSW5kZXgpfS5WSVJUVUFMX0ZJTEUubWRgLFxuICAgICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzXG4gICAgfSk7XG5cbiAgICAvLyBgbnVsbGAgaXMgYGFwcGx5Q29udGVudENoYW5nZXNgJ3MgcmV0cnkgc2VudGluZWwsIG5vdCBhIHZhbHVlLiBBc3NpZ25pbmcgaXQgd291bGQgc2VyaWFsaXplXG4gICAgLy8gYFwidGV4dFwiOiBudWxsYCBvdmVyIHRoZSBub2RlIGFuZCBkZXN0cm95IGl0cyBjb250ZW50LiBUaGUgbWlzbWF0Y2ggaXMgcGVybWFuZW50IGZvciB0aGlzIGNvbnRlbnQg4oCUXG4gICAgLy8gdGhlIHNhbWUgY2FsbCB0aGUgZmlsZS1ub2RlIG1pc21hdGNoIGFib3ZlIGFscmVhZHkgbWFrZXMg4oCUIHNvIHJldHVybiB0aGUgY29udGVudCB1bmNoYW5nZWQgdG9cbiAgICAvLyBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uIHdpdGhvdXQgYSB3cml0ZSwgcmF0aGVyIHRoYW4gYG51bGxgLCB3aGljaCB3b3VsZCByZXRyeSBmb3JldmVyLlxuICAgIGlmIChuZXdOb2RlVGV4dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgbm9kZS50ZXh0ID0gbmV3Tm9kZVRleHQ7XG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FudmFzRGF0YSwgbnVsbCwgJ1xcdCcpO1xufVxuXG5mdW5jdGlvbiBhcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0KHBhcmFtczogQXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dFBhcmFtcyk6IEFwcGx5Q29udGVudENoYW5nZXNUb1RleHRSZXN1bHQge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICBjb250ZW50LFxuICAgIGhhc0Zyb250bWF0dGVyRXJyb3IsXG4gICAgcGF0aFxuICB9ID0gcGFyYW1zO1xuICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGxhc3RDb250ZW50Q2hhbmdlOiBDb250ZW50Q2hhbmdlID0ge1xuICAgIG5ld0NvbnRlbnQ6ICcnLFxuICAgIG9sZENvbnRlbnQ6ICcnLFxuICAgIHJlZmVyZW5jZToge1xuICAgICAgbGluazogJycsXG4gICAgICBvcmlnaW5hbDogJycsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICBlbmQ6IHsgY29sOiAwLCBsaW5lOiAwLCBvZmZzZXQ6IDAgfSxcbiAgICAgICAgc3RhcnQ6IHsgY29sOiAwLCBsaW5lOiAwLCBvZmZzZXQ6IDAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzW10+KCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkOyB0aGUgZmFsc2UgYnJhbmNoIGxlYWRzIHRvIG90aGVyIGVsc2UtaWYgY2hlY2tzLiAqL1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGlmIChsYXN0SW5kZXggPD0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQpIHtcbiAgICAgICAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCwgY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQpO1xuICAgICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgICBsYXN0SW5kZXggPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXQ7XG4gICAgICAgIGxhc3RDb250ZW50Q2hhbmdlID0gY2hhbmdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdTdGFydE9mZnNldCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0IC0gbGFzdENvbnRlbnRDaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdFbmRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXQgLSBsYXN0Q29udGVudENoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgICAgICBjb25zdCBvdmVybGFwcGluZ0NvbnRlbnQgPSBsYXN0Q29udGVudENoYW5nZS5uZXdDb250ZW50LnNsaWNlKG92ZXJsYXBwaW5nU3RhcnRPZmZzZXQsIG92ZXJsYXBwaW5nRW5kT2Zmc2V0KTtcbiAgICAgICAgaWYgKG92ZXJsYXBwaW5nQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ092ZXJsYXBwaW5nIGNoYW5nZXMnO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgeyBjaGFuZ2UsIGxhc3RDb250ZW50Q2hhbmdlIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5zbGljZSgwLCBuZXdDb250ZW50Lmxlbmd0aCAtIGxhc3RDb250ZW50Q2hhbmdlLm5ld0NvbnRlbnQubGVuZ3RoKVxuICAgICAgICAgICsgbGFzdENvbnRlbnRDaGFuZ2UubmV3Q29udGVudC5zbGljZSgwLCBvdmVybGFwcGluZ1N0YXJ0T2Zmc2V0KVxuICAgICAgICAgICsgY2hhbmdlLm5ld0NvbnRlbnRcbiAgICAgICAgICArIGxhc3RDb250ZW50Q2hhbmdlLm5ld0NvbnRlbnQuc2xpY2Uob3ZlcmxhcHBpbmdFbmRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBjaGFuZ2UgdHlwZXMgYXJlIGhhbmRsZWQgYWJvdmU7IG5vIHVua25vd24gY2hhbmdlIHR5cGVzIGluIHByYWN0aWNlLiAqL1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFZhbGlkYXRpb24gcmVqZWN0cyBmcm9udG1hdHRlciBjaGFuZ2VzIHdoZW4gcGFyc2luZyBmYWlscywgc28gdGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUuICovXG4gICAgICBpZiAoaGFzRnJvbnRtYXR0ZXJFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgYXBwbHkgZnJvbnRtYXR0ZXIgY2hhbmdlIGluICR7cGF0aH0sIGJlY2F1c2UgZnJvbnRtYXR0ZXIgcGFyc2luZyBmYWlsZWRgLCB7IGNoYW5nZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIGxldCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyA9IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuZ2V0KGNoYW5nZS5yZWZlcmVuY2Uua2V5KTtcbiAgICAgICAgaWYgKCFmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cykge1xuICAgICAgICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzID0gW107XG4gICAgICAgICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcC5zZXQoY2hhbmdlLnJlZmVyZW5jZS5rZXksIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKTtcbiAgICAgICAgfVxuICAgICAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cy5wdXNoKHRvRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhjaGFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4KTtcblxuICByZXR1cm4geyBmcm9udG1hdHRlckNoYW5nZWQ6IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAsIG5ld0NvbnRlbnQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlGcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyhwYXJhbXM6IEFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIGZyb250bWF0dGVyLFxuICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAsXG4gICAgcGF0aFxuICB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IFtrZXksIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzXSBvZiBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwKSB7XG4gICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGtleSk7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFZhbGlkYXRpb24gZW5zdXJlcyB0aGUgcHJvcGVydHkgaXMgYSBzdHJpbmcgYmVmb3JlIHJlYWNoaW5nIHRoaXMgcG9pbnQuICovXG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4gICAgY29uc3QgY29udGVudENoYW5nZXM6IENvbnRlbnRDaGFuZ2VbXSA9IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzLm1hcCgoY2hhbmdlKSA9PiAoe1xuICAgICAgbmV3Q29udGVudDogY2hhbmdlLm5ld0NvbnRlbnQsXG4gICAgICBvbGRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgb3JpZ2luYWw6ICcnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgY29sOiBjaGFuZ2UucmVmZXJlbmNlLmVuZE9mZnNldCxcbiAgICAgICAgICAgIGxpbmU6IDAsXG4gICAgICAgICAgICBvZmZzZXQ6IGNoYW5nZS5yZWZlcmVuY2UuZW5kT2Zmc2V0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgY29sOiBjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICAgIG9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGNvbnN0IG5ld1Byb3BlcnR5VmFsdWUgPSBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKHtcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgY2hhbmdlc1Byb3ZpZGVyOiBjb250ZW50Q2hhbmdlcyxcbiAgICAgIGNvbnRlbnQ6IHByb3BlcnR5VmFsdWUsXG4gICAgICBwYXRoOiBgJHtwYXRofS5mcm9udG1hdHRlci4ke2tleX0uVklSVFVBTF9GSUxFLm1kYFxuICAgIH0pO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbm5lciBhcHBseUNvbnRlbnRDaGFuZ2VzIHVzZXMgdmFsaWRhdGVkIG9mZnNldHMsIHNvIG51bGwgaXMgbm90IGV4cGVjdGVkLiAqL1xuICAgIGlmIChuZXdQcm9wZXJ0eVZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKHtcbiAgICAgICRvYmplY3Q6IGZyb250bWF0dGVyLFxuICAgICAgcGF0aDoga2V5LFxuICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5VmFsdWVcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVDaGFuZ2VzVmFsaWQocGFyYW1zOiBWYWxpZGF0ZUNoYW5nZXNQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgY29udGVudCxcbiAgICBmcm9udG1hdHRlcixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyID0gZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcignRmlsZUNoYW5nZTp2YWxpZGF0ZUNoYW5nZXMnKTtcbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkOyB0aGUgZmFsc2UgYnJhbmNoIGxlYWRzIHRvIG90aGVyIGVsc2UtaWYgY2hlY2tzLiAqL1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXQ7XG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gY29udGVudC5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTtcbiAgICAgIGlmIChhY3R1YWxDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICB2YWxpZGF0ZUNoYW5nZXNEZWJ1Z2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGVuZE9mZnNldCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRPZmZzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBjaGFuZ2UgdHlwZXMgYXJlIGhhbmRsZWQ7IG5vIHVua25vd24gY2hhbmdlIHR5cGVzIGluIHByYWN0aWNlLiAqL1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLnJlZmVyZW5jZS5rZXkpO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB2YWxpZGF0ZUNoYW5nZXNEZWJ1Z2dlcignUHJvcGVydHkgdmFsdWUgaXMgbm90IGEgc3RyaW5nJywge1xuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UucmVmZXJlbmNlLmtleSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHByb3BlcnR5VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IHByb3BlcnR5VmFsdWUuc2xpY2UoY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldCwgY2hhbmdlLnJlZmVyZW5jZS5lbmRPZmZzZXQpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzdGFydE9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZCBhYm92ZTsgbm8gdW5rbm93biBjaGFuZ2UgdHlwZXMgaW4gcHJhY3RpY2UuICovXG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLnJlZmVyZW5jZS5rZXkpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmluYWxDb250ZW50KHBhcmFtczogQnVpbGRGaW5hbENvbnRlbnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgZnJvbnRtYXR0ZXIsXG4gICAgZnJvbnRtYXR0ZXJDaGFuZ2VkLFxuICAgIG5ld0NvbnRlbnRcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGZyb250bWF0dGVyQ2hhbmdlZC5zaXplID4gMCA/IHNldEZyb250bWF0dGVyKG5ld0NvbnRlbnQsIGZyb250bWF0dGVyKSA6IG5ld0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXJTYWZlbHkocGFyYW1zOiBQYXJzZUZyb250bWF0dGVyU2FmZWx5UGFyYW1zKTogUGFyc2VGcm9udG1hdHRlclNhZmVseVJlc3VsdCB7XG4gIGNvbnN0IHsgY29udGVudCwgcGF0aCB9ID0gcGFyYW1zO1xuICBsZXQgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj4gPSB7fTtcbiAgbGV0IGhhc0Zyb250bWF0dGVyRXJyb3IgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcihjb250ZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEVycm9yKG5ldyBFcnJvcihgRnJvbnRtYXR0ZXIgcGFyc2luZyBmYWlsZWQgaW4gJHtwYXRofWAsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICBoYXNGcm9udG1hdHRlckVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB7IGZyb250bWF0dGVyLCBoYXNGcm9udG1hdHRlckVycm9yIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlSnNvblNhZmUoY29udGVudDogc3RyaW5nKTogR2VuZXJpY09iamVjdCB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaCB7XG4gICAgcGFyc2VkID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZWQgPT09IG51bGwgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcpIHtcbiAgICBwYXJzZWQgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQgYXMgR2VuZXJpY09iamVjdDtcbn1cblxuZnVuY3Rpb24gc29ydEFuZEZpbHRlckNoYW5nZXMoY2hhbmdlczogRmlsZUNoYW5nZVtdKTogRmlsZUNoYW5nZVtdIHtcbiAgLy8gU29ydCBjaGFuZ2VzIGJ5IHR5cGUgYW5kIHBvc2l0aW9uXG4gIGNoYW5nZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoYSkgJiYgaXNDb250ZW50Q2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0IC0gYi5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoYSkgJiYgaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGIpKSB7XG4gICAgICByZXR1cm4gYS5yZWZlcmVuY2Uua2V5LmxvY2FsZUNvbXBhcmUoYi5yZWZlcmVuY2Uua2V5KSB8fCBhLnJlZmVyZW5jZS5zdGFydE9mZnNldCAtIGIucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGEpICYmIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5rZXkubG9jYWxlQ29tcGFyZShiLnJlZmVyZW5jZS5rZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NvbnRlbnRDaGFuZ2UoYSkgPyAtMSA6IDE7XG4gIH0pO1xuXG4gIC8vIEZpbHRlciBvdXQgZHVwbGljYXRlIGFuZCBuby1vcCBjaGFuZ2VzXG4gIHJldHVybiBjaGFuZ2VzLmZpbHRlcigoY2hhbmdlLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBjaGFuZ2Uub2xkQ29udGVudCAhPT0gY2hhbmdlLm5ld0NvbnRlbnQgJiYgKGluZGV4ID09PSAwIHx8ICFpc0RlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSkpO1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEsbUJBQTJCO0FBQzNCLDBCQUtPO0FBQ1AsNEJBQTZCO0FBQzdCLDZCQUdPO0FBZ0JQLG1CQUF1QztBQUN2Qyx5QkFHTztBQUNQLGlEQUdPO0FBQ1AseUJBR087QUFDUCx1QkFHTztBQUNQLG1CQUF3QjtBQUV4QixNQUFNLDJCQUEyQixPQUFPO0FBTXhDLE1BQU0sNkNBQTZDO0FBd09uRCxlQUFzQixvQkFBb0IsUUFBMkQ7QUFDbkcsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLDhCQUE4QjtBQUFBLEVBQ2hDLElBQUk7QUFDSixjQUFZLGVBQWU7QUFDM0IsTUFBSSxVQUFVLFVBQU0sb0NBQWEsaUJBQWlCLEVBQUUsYUFBYSxRQUFRLENBQUM7QUFDMUUsY0FBWSxlQUFlO0FBQzNCLE1BQUksWUFBWSxNQUFNO0FBQ3BCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxFQUFFLGFBQWEsb0JBQW9CLElBQUksdUJBQXVCLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFFckYsTUFBSSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsU0FBUyxhQUFhLEtBQUssQ0FBQyxHQUFHO0FBQzdELFdBQU8sOEJBQThCLE9BQU87QUFBQSxFQUM5QztBQUVBLFlBQVUscUJBQXFCLE9BQU87QUFFdEMsUUFBTSxFQUFFLG9CQUFvQixXQUFXLElBQUksMEJBQTBCLEVB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
|
|
540
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlLWNoYW5nZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBmaWxlIGNoYW5nZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gIFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vY2FudmFzLmQudHMnO1xuXG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7XG4gIGdldE5lc3RlZFByb3BlcnR5VmFsdWUsXG4gIGlzRGVlcEVxdWFsLFxuICBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMsXG4gIHNldE5lc3RlZFByb3BlcnR5VmFsdWVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdmFsdWUtcHJvdmlkZXInO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIH0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ2FudmFzRmlsZU5vZGVSZWZlcmVuY2UsXG4gIENhbnZhc1JlZmVyZW5jZSxcbiAgQ2FudmFzVGV4dE5vZGVSZWZlcmVuY2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb250ZW50QXJndW1lbnRzLFxuICBQcm9jZXNzT3B0aW9ucyxcbiAgUHJvY2Vzc1BhcmFtc1xufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlciB9IGZyb20gJy4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLFxuICB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHNcbn0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBFU0NBUEVEX1dJS0lMSU5LX0RJVklERVIgPSBTdHJpbmcucmF3YFxcfGA7XG4vKipcbiAqIE1hdGNoZXMgYSB3aWtpbGluayBkaXZpZGVyIHRvZ2V0aGVyIHdpdGggdGhlIGJhY2tzbGFzaCBlc2NhcGluZyBpdCwgaWYgYW55LiBBIGxvb2tiZWhpbmQgd291bGQgc2F5IFwidW5lc2NhcGVkXCJcbiAqIGRpcmVjdGx5LCBidXQgaXQgaXMgYSBzeW50YXggZXJyb3Igb24gaU9TIGJlZm9yZSAxNi40LCBiZWxvdyB0aGUgaU9TIDE1IE9ic2lkaWFuIG1vYmlsZSBzdGlsbCBzdXBwb3J0cy5cbiAqIFJlcGxhY2luZyBldmVyeSBtYXRjaCB3aXRoIGFuIGVzY2FwZWQgZGl2aWRlciBsZWF2ZXMgYW4gZXNjYXBlZCBvbmUgYXMgaXQgd2FzIGFuZCBlc2NhcGVzIGEgYmFyZSBvbmUuXG4gKi9cbmNvbnN0IE9QVElPTkFMTFlfRVNDQVBFRF9XSUtJTElOS19ESVZJREVSX1JFR0VYUCA9IC9cXFxcP1xcfC9nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhcHBseUNvbnRlbnRDaGFuZ2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBseUNvbnRlbnRDaGFuZ2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgY29udGVudCBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXSB8IG51bGwsIENvbnRlbnRBcmd1bWVudHM+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXM/OiBib29sZWFuO1xufVxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYXBwbHlGaWxlQ2hhbmdlc30uXG4gKi9cbmV4cG9ydCB0eXBlIEFwcGx5RmlsZUNoYW5nZXNPcHRpb25zID0gUHJvY2Vzc09wdGlvbnM7XG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhcHBseUZpbGVDaGFuZ2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBseUZpbGVDaGFuZ2VzUGFyYW1zIGV4dGVuZHMgQXBwbHlGaWxlQ2hhbmdlc09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZXJlIHRoZSBmaWxlIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10gfCBudWxsLCBDb250ZW50QXJndW1lbnRzPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXM/OiBib29sZWFuO1xufVxuLyoqXG4gKiBBIGZpbGUgY2hhbmdlIGluIHRoZSB2YXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIEEgbmV3IGNvbnRlbnQgdG8gcmVwbGFjZSB0aGUgb2xkIGNvbnRlbnQuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBMaW5rIHJld3JpdGluZyB1cGRhdGVzIHRoZSByZXBsYWNlbWVudCBjb250ZW50IHdoaWxlIGNvbXBvc2luZyBmaWxlIGNoYW5nZXMuXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb2xkIGNvbnRlbnQgdGhhdCB3aWxsIGJlIHJlcGxhY2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQ29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0aGF0IGNhdXNlZCB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG5pbnRlcmZhY2UgQXBwbHlDYW52YXNDaGFuZ2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXSB8IG51bGwsIENvbnRlbnRBcmd1bWVudHM+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IGNoYW5nZXMgdG8gYXBwbHkuXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBGaWxlQ2hhbmdlW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBhcnNpbmcgdGhlIGZyb250bWF0dGVyIGZhaWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc0Zyb250bWF0dGVyRXJyb3I6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dFJlc3VsdCB7XG4gIHJlYWRvbmx5IGZyb250bWF0dGVyQ2hhbmdlZDogTWFwPHN0cmluZywgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0c1tdPjtcbiAgcmVhZG9ubHkgbmV3Q29udGVudDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwbHlGcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBmcm9udG1hdHRlciB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBmcm9udG1hdHRlciBrZXlzIHRvIHRoZSBmcm9udG1hdHRlciBjaGFuZ2VzIHdpdGggb2Zmc2V0cyB0byBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXA6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQnVpbGRGaW5hbENvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHRvIHdyaXRlIGludG8gdGhlIGZpbmFsIGNvbnRlbnQuXG4gICAqL1xuICByZWFkb25seSBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZnJvbnRtYXR0ZXIga2V5cyB0byB0aGUgZnJvbnRtYXR0ZXIgY2hhbmdlcyB3aXRoIG9mZnNldHMgdGhhdCB3ZXJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBmcm9udG1hdHRlckNoYW5nZWQ6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT47XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRvIHdoaWNoIHRoZSBmcm9udG1hdHRlciBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IG5ld0NvbnRlbnQ6IHN0cmluZztcbn1cblxudHlwZSBDYW52YXNDaGFuZ2UgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxDYW52YXNSZWZlcmVuY2U+O1xudHlwZSBDYW52YXNGaWxlTm9kZUNoYW5nZSA9IEZpbGVDaGFuZ2UgJiBXaXRoUmVmZXJlbmNlPENhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlPjtcbnR5cGUgQ2FudmFzVGV4dE5vZGVDaGFuZ2UgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxDYW52YXNUZXh0Tm9kZVJlZmVyZW5jZT47XG50eXBlIENvbnRlbnRDaGFuZ2UgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxSZWZlcmVuY2VDYWNoZT47XG50eXBlIEZyb250bWF0dGVyQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8RnJvbnRtYXR0ZXJMaW5rQ2FjaGU+O1xuXG50eXBlIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzPjtcblxuaW50ZXJmYWNlIFBhcnNlRnJvbnRtYXR0ZXJTYWZlbHlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gcGFyc2UgdGhlIGZyb250bWF0dGVyIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjb250ZW50IGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQYXJzZUZyb250bWF0dGVyU2FmZWx5UmVzdWx0IHtcbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj47XG4gIHJlYWRvbmx5IGhhc0Zyb250bWF0dGVyRXJyb3I6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBWYWxpZGF0ZUNoYW5nZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgY2hhbmdlcyB0byB2YWxpZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZXM6IEZpbGVDaGFuZ2VbXTtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdGhlIGNoYW5nZXMgc2hvdWxkIGJlIHZhbGlkYXRlZCBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJvbnRtYXR0ZXIgdGhlIGNoYW5nZXMgc2hvdWxkIGJlIHZhbGlkYXRlZCBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSB2YWxpZGF0ZWQgYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdpdGhSZWZlcmVuY2U8UiBleHRlbmRzIFJlZmVyZW5jZT4ge1xuICByZWFkb25seSByZWZlcmVuY2U6IFI7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIHNlcmllcyBvZiBjb250ZW50IGNoYW5nZXMgdG8gdGhlIHNwZWNpZmllZCBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgYXBwbHlpbmcgdGhlIGNvbnRlbnQgY2hhbmdlcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudCBvciB0byBgbnVsbGAgaWYgdXBkYXRlIGRpZG4ndCBzdWNjZWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlDb250ZW50Q2hhbmdlcyhwYXJhbXM6IEFwcGx5Q29udGVudENoYW5nZXNQYXJhbXMpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIGNoYW5nZXNQcm92aWRlcixcbiAgICBjb250ZW50LFxuICAgIHBhdGgsXG4gICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZVxuICB9ID0gcGFyYW1zO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIsIHsgYWJvcnRTaWduYWwsIGNvbnRlbnQgfSk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGlmIChjaGFuZ2VzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGZyb250bWF0dGVyLCBoYXNGcm9udG1hdHRlckVycm9yIH0gPSBwYXJzZUZyb250bWF0dGVyU2FmZWx5KHsgY29udGVudCwgcGF0aCB9KTtcblxuICBpZiAoIWFyZUNoYW5nZXNWYWxpZCh7IGNoYW5nZXMsIGNvbnRlbnQsIGZyb250bWF0dGVyLCBwYXRoIH0pKSB7XG4gICAgcmV0dXJuIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA/IG51bGwgOiBjb250ZW50O1xuICB9XG5cbiAgY2hhbmdlcyA9IHNvcnRBbmRGaWx0ZXJDaGFuZ2VzKGNoYW5nZXMpO1xuXG4gIGNvbnN0IHsgZnJvbnRtYXR0ZXJDaGFuZ2VkLCBuZXdDb250ZW50IH0gPSBhcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0KHsgY2hhbmdlcywgY29udGVudCwgaGFzRnJvbnRtYXR0ZXJFcnJvciwgcGF0aCB9KTtcblxuICBhd2FpdCBhcHBseUZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBmcm9udG1hdHRlcixcbiAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwOiBmcm9udG1hdHRlckNoYW5nZWQsXG4gICAgcGF0aFxuICB9KTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICByZXR1cm4gYnVpbGRGaW5hbENvbnRlbnQoeyBmcm9udG1hdHRlciwgZnJvbnRtYXR0ZXJDaGFuZ2VkLCBuZXdDb250ZW50IH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgZmlsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBhcHBseWluZyB0aGUgZmlsZSBjaGFuZ2VzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlGaWxlQ2hhbmdlcyhwYXJhbXM6IEFwcGx5RmlsZUNoYW5nZXNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjaGFuZ2VzUHJvdmlkZXIsXG4gICAgcGF0aE9yRmlsZSxcbiAgICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgPSB0cnVlLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHBhcmFtcztcbiAgYXdhaXQgcHJvY2Vzcyhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UHJvY2Vzc1BhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBhc3luYyBuZXdDb250ZW50UHJvdmlkZXIoeyBhYm9ydFNpZ25hbCwgY29udGVudCB9KSB7XG4gICAgICByZXR1cm4gaXNDYW52YXNGaWxlKHBhdGhPckZpbGUpXG4gICAgICAgID8gKGF3YWl0IGFwcGx5Q2FudmFzQ2hhbmdlcyh7XG4gICAgICAgICAgYWJvcnRTaWduYWwsXG4gICAgICAgICAgY2hhbmdlc1Byb3ZpZGVyLFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLFxuICAgICAgICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlc1xuICAgICAgICB9KSlcbiAgICAgICAgOiAoYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyh7XG4gICAgICAgICAgYWJvcnRTaWduYWwsXG4gICAgICAgICAgY2hhbmdlc1Byb3ZpZGVyLFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLFxuICAgICAgICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlc1xuICAgICAgICB9KSk7XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlLFxuICAgIC4uLm9wdGlvbnNcbiAgfSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gY2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDYW52YXNDaGFuZ2UoY2hhbmdlOiBGaWxlQ2hhbmdlKTogY2hhbmdlIGlzIENhbnZhc0NoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc1JlZmVyZW5jZShjaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBmaWxlIG5vZGUgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBmaWxlIG5vZGUgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDYW52YXNGaWxlTm9kZUNoYW5nZShjaGFuZ2U6IEZpbGVDaGFuZ2UpOiBjaGFuZ2UgaXMgQ2FudmFzRmlsZU5vZGVDaGFuZ2Uge1xuICByZXR1cm4gaXNDYW52YXNDaGFuZ2UoY2hhbmdlKSAmJiBjaGFuZ2UucmVmZXJlbmNlLnR5cGUgPT09ICdmaWxlJztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyB0ZXh0IG5vZGUgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyB0ZXh0IG5vZGUgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDYW52YXNUZXh0Tm9kZUNoYW5nZShjaGFuZ2U6IEZpbGVDaGFuZ2UpOiBjaGFuZ2UgaXMgQ2FudmFzVGV4dE5vZGVDaGFuZ2Uge1xuICByZXR1cm4gaXNDYW52YXNDaGFuZ2UoY2hhbmdlKSAmJiBjaGFuZ2UucmVmZXJlbmNlLnR5cGUgPT09ICd0ZXh0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBjb250ZW50IGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGVudENoYW5nZShmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlKTogZmlsZUNoYW5nZSBpcyBDb250ZW50Q2hhbmdlIHtcbiAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUoZmlsZUNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlIHtcbiAgcmV0dXJuIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUoZmlsZUNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIHdpdGggb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIHdpdGggb2Zmc2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlKTogZmlsZUNoYW5nZSBpcyBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzIHtcbiAgcmV0dXJuIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmcm9udG1hdHRlciBjaGFuZ2UgdG8gYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIGZpbGUgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Gcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2U6IEZyb250bWF0dGVyQ2hhbmdlKTogRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyB7XG4gIHJldHVybiBpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoZmlsZUNoYW5nZSlcbiAgICA/IGZpbGVDaGFuZ2VcbiAgICA6IHtcbiAgICAgIC4uLmZpbGVDaGFuZ2UsXG4gICAgICByZWZlcmVuY2U6IHRvRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhmaWxlQ2hhbmdlLnJlZmVyZW5jZSlcbiAgICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNhbnZhc0NoYW5nZXMocGFyYW1zOiBBcHBseUNhbnZhc0NoYW5nZXNQYXJhbXMpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIGNoYW5nZXNQcm92aWRlcixcbiAgICBjb250ZW50LFxuICAgIHBhdGgsXG4gICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlciwgeyBhYm9ydFNpZ25hbCwgY29udGVudCB9KTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgaWYgKGNoYW5nZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNhbnZhc0RhdGEgPSBwYXJzZUpzb25TYWZlKGNvbnRlbnQpIGFzIEdlbmVyaWNPYmplY3Q8Q2FudmFzRGF0YT47XG5cbiAgLy8gVGhlIGNvbnRlbnQgaXMgbm90IGEgdmFsaWQgY2FudmFzIChhIHRyYW5zaWVudCBge31gIG9yIHBhcnRpYWwgb2JqZWN0KS5cbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gYW5vdGhlciBwbHVnaW4gaXMgc3RpbGwgaW5pdGlhbGl6aW5nIHRoZSBmaWxlLlxuICAvLyBTa2lwIHRoZSByZXdyaXRlIHNvIG5vIG1hbGZvcm1lZCBvYmplY3QgaXMgd3JpdHRlbiBiYWNrIGFuZCB0aGUgcmVuZGVyZXIgbmV2ZXIgY3Jhc2hlcy5cbiAgLy8gTWlycm9ycyB0aGUgYHsgZWRnZXM6IFtdLCBub2RlczogW10gfWAgZmFsbGJhY2sgaW4gYGdldENhbnZhc1JlZmVyZW5jZXNgLlxuICAvLyBSZXR1cm5pbmcgdGhlIGNvbnRlbnQgdW5jaGFuZ2VkIHJhdGhlciB0aGFuIGBudWxsYCBjb21wbGV0ZXMgdGhlIG9wZXJhdGlvbiB3aXRob3V0IGEgd3JpdGU6IHRoZVxuICAvLyByZWZ1c2FsIGlzIHBlcm1hbmVudCBmb3IgdGhpcyBjb250ZW50LCBhbmQgYG51bGxgIHdvdWxkIGFzayBgcHJvY2VzcygpYCB0byByZXRyeSBpdCBmb3JldmVyLlxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2FudmFzRGF0YS5ub2RlcykgfHwgIUFycmF5LmlzQXJyYXkoY2FudmFzRGF0YS5lZGdlcykpIHtcbiAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdGaWxlQ2hhbmdlOmFwcGx5Q2FudmFzQ2hhbmdlcycpKCdOb3QgYSB2YWxpZCBjYW52YXM7IHNraXBwaW5nIHJld3JpdGUnLCB7IHBhdGggfSk7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlcyA9IG5ldyBNYXA8bnVtYmVyLCBDYW52YXNUZXh0Tm9kZUNoYW5nZVtdPigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoIWlzQ2FudmFzQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnT25seSBjYW52YXMgY2hhbmdlcyBhcmUgc3VwcG9ydGVkIGZvciBjYW52YXMgZmlsZXMnO1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gY2FudmFzRGF0YS5ub2Rlc1tjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ05vZGUgbm90IGZvdW5kJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXg6IGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGVOb2RlQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGlmIChub2RlLmZpbGUgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGdldE9ic2lkaWFuTGliRGVidWdnZXIoJ0ZpbGVDaGFuZ2U6YXBwbHlDYW52YXNDaGFuZ2VzJykoJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudDogbm9kZS5maWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIG5vZGVJbmRleDogY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXgsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgICBub2RlLmZpbGUgPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgZmFsc2UgYnJhbmNoIG9mIHRoZSBlbHNlLWlmIGlzIHVucmVhY2hhYmxlOyBvbmx5ICdmaWxlJyBhbmQgJ3RleHQnIGNhbnZhcyBub2RlIHR5cGVzIGV4aXN0LiAqL1xuICAgIH0gZWxzZSBpZiAoaXNDYW52YXNUZXh0Tm9kZUNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgbGV0IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IGNhbnZhc1RleHRDaGFuZ2VzLmdldChjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCk7XG4gICAgICBpZiAoIWNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSkge1xuICAgICAgICBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUgPSBbXTtcbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXMuc2V0KGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgfVxuXG4gICAgICBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUucHVzaChjaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW25vZGVJbmRleCwgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlXSBvZiBjYW52YXNUZXh0Q2hhbmdlcykge1xuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIE5vZGUgZXhpc3RlbmNlIGlzIGFscmVhZHkgdmVyaWZpZWQgaW4gdGhlIGZpcnN0IGxvb3AgYWJvdmUuICovXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ05vZGUgbm90IGZvdW5kJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIHRleHQgaXMgbm90IGEgc3RyaW5nJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50Q2hhbmdlcyA9IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5tYXAoKGNoYW5nZSkgPT4ge1xuICAgICAgLy8gQSBjYW52YXMgdGV4dCBub2RlIGNhbiBob2xkIGEgbWFya2Rvd24gdGFibGUsIHdoZXJlIGEgc2l6ZWQgZW1iZWQgZXNjYXBlcyB0aGUgd2lraWxpbmtcbiAgICAgIC8vIGRpdmlkZXIgc28gdGhlIHBpcGUgZG9lcyBub3QgdGVybWluYXRlIHRoZSB0YWJsZSBjZWxsIChgIVtbaW1nLnBuZ1xcfDUwMF1dYCkuIFRoZSByZWdlbmVyYXRlZFxuICAgICAgLy8gbGluayB1c2VzIGFuIHVuZXNjYXBlZCBkaXZpZGVyLCBzbyByZXN0b3JlIHRoZSBlc2NhcGluZyB3aGVuIHRoZSBvcmlnaW5hbCByZWZlcmVuY2UgaGFkIGl0LFxuICAgICAgLy8ga2VlcGluZyBib3RoIHRoZSB0YWJsZSBhbmQgdGhlIGVtYmVkIHNpemUgaW50YWN0IGFjcm9zcyB0aGUgcmV3cml0ZS5cbiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjaGFuZ2UucmVmZXJlbmNlLm9yaWdpbmFsUmVmZXJlbmNlLm9yaWdpbmFsLmluY2x1ZGVzKEVTQ0FQRURfV0lLSUxJTktfRElWSURFUilcbiAgICAgICAgPyBjaGFuZ2UubmV3Q29udGVudC5yZXBsYWNlQWxsKE9QVElPTkFMTFlfRVNDQVBFRF9XSUtJTElOS19ESVZJREVSX1JFR0VYUCwgKCkgPT4gRVNDQVBFRF9XSUtJTElOS19ESVZJREVSKVxuICAgICAgICA6IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgcmV0dXJuIHJlZmVyZW5jZVRvRmlsZUNoYW5nZShjaGFuZ2UucmVmZXJlbmNlLm9yaWdpbmFsUmVmZXJlbmNlLCBuZXdDb250ZW50KTtcbiAgICB9KTtcbiAgICBjb25zdCBuZXdOb2RlVGV4dCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoe1xuICAgICAgYWJvcnRTaWduYWwsXG4gICAgICBjaGFuZ2VzUHJvdmlkZXI6IGNvbnRlbnRDaGFuZ2VzLFxuICAgICAgY29udGVudDogbm9kZS50ZXh0LFxuICAgICAgcGF0aDogYCR7cGF0aH0ubm9kZSR7U3RyaW5nKG5vZGVJbmRleCl9LlZJUlRVQUxfRklMRS5tZGAsXG4gICAgICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXNcbiAgICB9KTtcblxuICAgIC8vIGBudWxsYCBpcyBgYXBwbHlDb250ZW50Q2hhbmdlc2AncyByZXRyeSBzZW50aW5lbCwgbm90IGEgdmFsdWUuIEFzc2lnbmluZyBpdCB3b3VsZCBzZXJpYWxpemVcbiAgICAvLyBgXCJ0ZXh0XCI6IG51bGxgIG92ZXIgdGhlIG5vZGUgYW5kIGRlc3Ryb3kgaXRzIGNvbnRlbnQuIFRoZSBtaXNtYXRjaCBpcyBwZXJtYW5lbnQgZm9yIHRoaXMgY29udGVudCDigJRcbiAgICAvLyB0aGUgc2FtZSBjYWxsIHRoZSBmaWxlLW5vZGUgbWlzbWF0Y2ggYWJvdmUgYWxyZWFkeSBtYWtlcyDigJQgc28gcmV0dXJuIHRoZSBjb250ZW50IHVuY2hhbmdlZCB0b1xuICAgIC8vIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gd2l0aG91dCBhIHdyaXRlLCByYXRoZXIgdGhhbiBgbnVsbGAsIHdoaWNoIHdvdWxkIHJldHJ5IGZvcmV2ZXIuXG4gICAgaWYgKG5ld05vZGVUZXh0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBub2RlLnRleHQgPSBuZXdOb2RlVGV4dDtcbiAgfVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShjYW52YXNEYXRhLCBudWxsLCAnXFx0Jyk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5Q29udGVudENoYW5nZXNUb1RleHQocGFyYW1zOiBBcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0UGFyYW1zKTogQXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dFJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBjaGFuZ2VzLFxuICAgIGNvbnRlbnQsXG4gICAgaGFzRnJvbnRtYXR0ZXJFcnJvcixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBuZXdDb250ZW50ID0gJyc7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBsZXQgbGFzdENvbnRlbnRDaGFuZ2U6IENvbnRlbnRDaGFuZ2UgPSB7XG4gICAgbmV3Q29udGVudDogJycsXG4gICAgb2xkQ29udGVudDogJycsXG4gICAgcmVmZXJlbmNlOiB7XG4gICAgICBsaW5rOiAnJyxcbiAgICAgIG9yaWdpbmFsOiAnJyxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIGVuZDogeyBjb2w6IDAsIGxpbmU6IDAsIG9mZnNldDogMCB9LFxuICAgICAgICBzdGFydDogeyBjb2w6IDAsIGxpbmU6IDAsIG9mZnNldDogMCB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwID0gbmV3IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBjaGFuZ2UgdHlwZXMgYXJlIGhhbmRsZWQ7IHRoZSBmYWxzZSBicmFuY2ggbGVhZHMgdG8gb3RoZXIgZWxzZS1pZiBjaGVja3MuICovXG4gICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgaWYgKGxhc3RJbmRleCA8PSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCkge1xuICAgICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCk7XG4gICAgICAgIG5ld0NvbnRlbnQgKz0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uZW5kLm9mZnNldDtcbiAgICAgICAgbGFzdENvbnRlbnRDaGFuZ2UgPSBjaGFuZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvdmVybGFwcGluZ1N0YXJ0T2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQgLSBsYXN0Q29udGVudENoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgICAgICBjb25zdCBvdmVybGFwcGluZ0VuZE9mZnNldCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uZW5kLm9mZnNldCAtIGxhc3RDb250ZW50Q2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IG92ZXJsYXBwaW5nQ29udGVudCA9IGxhc3RDb250ZW50Q2hhbmdlLm5ld0NvbnRlbnQuc2xpY2Uob3ZlcmxhcHBpbmdTdGFydE9mZnNldCwgb3ZlcmxhcHBpbmdFbmRPZmZzZXQpO1xuICAgICAgICBpZiAob3ZlcmxhcHBpbmdDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnT3ZlcmxhcHBpbmcgY2hhbmdlcyc7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlLCB7IGNoYW5nZSwgbGFzdENvbnRlbnRDaGFuZ2UgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnNsaWNlKDAsIG5ld0NvbnRlbnQubGVuZ3RoIC0gbGFzdENvbnRlbnRDaGFuZ2UubmV3Q29udGVudC5sZW5ndGgpXG4gICAgICAgICAgKyBsYXN0Q29udGVudENoYW5nZS5uZXdDb250ZW50LnNsaWNlKDAsIG92ZXJsYXBwaW5nU3RhcnRPZmZzZXQpXG4gICAgICAgICAgKyBjaGFuZ2UubmV3Q29udGVudFxuICAgICAgICAgICsgbGFzdENvbnRlbnRDaGFuZ2UubmV3Q29udGVudC5zbGljZShvdmVybGFwcGluZ0VuZE9mZnNldCk7XG4gICAgICB9XG4gICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZCBhYm92ZTsgbm8gdW5rbm93biBjaGFuZ2UgdHlwZXMgaW4gcHJhY3RpY2UuICovXG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVmFsaWRhdGlvbiByZWplY3RzIGZyb250bWF0dGVyIGNoYW5nZXMgd2hlbiBwYXJzaW5nIGZhaWxzLCBzbyB0aGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZS4gKi9cbiAgICAgIGlmIChoYXNGcm9udG1hdHRlckVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBhcHBseSBmcm9udG1hdHRlciBjaGFuZ2UgaW4gJHtwYXRofSwgYmVjYXVzZSBmcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZGAsIHsgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgbGV0IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzID0gZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcC5nZXQoY2hhbmdlLnJlZmVyZW5jZS5rZXkpO1xuICAgICAgICBpZiAoIWZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKSB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMgPSBbXTtcbiAgICAgICAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLnNldChjaGFuZ2UucmVmZXJlbmNlLmtleSwgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMpO1xuICAgICAgICB9XG4gICAgICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzLnB1c2godG9Gcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGNoYW5nZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuXG4gIHJldHVybiB7IGZyb250bWF0dGVyQ2hhbmdlZDogZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcCwgbmV3Q29udGVudCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKHBhcmFtczogQXBwbHlGcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0c1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgZnJvbnRtYXR0ZXIsXG4gICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcCxcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGZvciAoY29uc3QgW2tleSwgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHNdIG9mIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXApIHtcbiAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwga2V5KTtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVmFsaWRhdGlvbiBlbnN1cmVzIHRoZSBwcm9wZXJ0eSBpcyBhIHN0cmluZyBiZWZvcmUgcmVhY2hpbmcgdGhpcyBwb2ludC4gKi9cbiAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICBjb25zdCBjb250ZW50Q2hhbmdlczogQ29udGVudENoYW5nZVtdID0gZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMubWFwKChjaGFuZ2UpID0+ICh7XG4gICAgICBuZXdDb250ZW50OiBjaGFuZ2UubmV3Q29udGVudCxcbiAgICAgIG9sZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgIGxpbms6ICcnLFxuICAgICAgICBvcmlnaW5hbDogJycsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICBjb2w6IGNoYW5nZS5yZWZlcmVuY2UuZW5kT2Zmc2V0LFxuICAgICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICAgIG9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5lbmRPZmZzZXRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBjb2w6IGNoYW5nZS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBsaW5lOiAwLFxuICAgICAgICAgICAgb2Zmc2V0OiBjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgY29uc3QgbmV3UHJvcGVydHlWYWx1ZSA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoe1xuICAgICAgYWJvcnRTaWduYWwsXG4gICAgICBjaGFuZ2VzUHJvdmlkZXI6IGNvbnRlbnRDaGFuZ2VzLFxuICAgICAgY29udGVudDogcHJvcGVydHlWYWx1ZSxcbiAgICAgIHBhdGg6IGAke3BhdGh9LmZyb250bWF0dGVyLiR7a2V5fS5WSVJUVUFMX0ZJTEUubWRgXG4gICAgfSk7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIElubmVyIGFwcGx5Q29udGVudENoYW5nZXMgdXNlcyB2YWxpZGF0ZWQgb2Zmc2V0cywgc28gbnVsbCBpcyBub3QgZXhwZWN0ZWQuICovXG4gICAgaWYgKG5ld1Byb3BlcnR5VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIHNldE5lc3RlZFByb3BlcnR5VmFsdWUoe1xuICAgICAgJG9iamVjdDogZnJvbnRtYXR0ZXIsXG4gICAgICBwYXRoOiBrZXksXG4gICAgICB2YWx1ZTogbmV3UHJvcGVydHlWYWx1ZVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUNoYW5nZXNWYWxpZChwYXJhbXM6IFZhbGlkYXRlQ2hhbmdlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICBjb250ZW50LFxuICAgIGZyb250bWF0dGVyLFxuICAgIHBhdGhcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgdmFsaWRhdGVDaGFuZ2VzRGVidWdnZXIgPSBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdGaWxlQ2hhbmdlOnZhbGlkYXRlQ2hhbmdlcycpO1xuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBjaGFuZ2UgdHlwZXMgYXJlIGhhbmRsZWQ7IHRoZSBmYWxzZSBicmFuY2ggbGVhZHMgdG8gb3RoZXIgZWxzZS1pZiBjaGVja3MuICovXG4gICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICAgIGNvbnN0IGVuZE9mZnNldCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uZW5kLm9mZnNldDtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZW5kT2Zmc2V0LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzdGFydE9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZDsgbm8gdW5rbm93biBjaGFuZ2UgdHlwZXMgaW4gcHJhY3RpY2UuICovXG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UucmVmZXJlbmNlLmtleSk7XG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyKCdQcm9wZXJ0eSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcnLCB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5yZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gcHJvcGVydHlWYWx1ZS5zbGljZShjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0LCBjaGFuZ2UucmVmZXJlbmNlLmVuZE9mZnNldCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgdmFsaWRhdGVDaGFuZ2VzRGVidWdnZXIoJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UucmVmZXJlbmNlLmtleSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkIGFib3ZlOyBubyB1bmtub3duIGNoYW5nZSB0eXBlcyBpbiBwcmFjdGljZS4gKi9cbiAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UucmVmZXJlbmNlLmtleSk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgdmFsaWRhdGVDaGFuZ2VzRGVidWdnZXIoJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UucmVmZXJlbmNlLmtleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGaW5hbENvbnRlbnQocGFyYW1zOiBCdWlsZEZpbmFsQ29udGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBmcm9udG1hdHRlcixcbiAgICBmcm9udG1hdHRlckNoYW5nZWQsXG4gICAgbmV3Q29udGVudFxuICB9ID0gcGFyYW1zO1xuICByZXR1cm4gZnJvbnRtYXR0ZXJDaGFuZ2VkLnNpemUgPiAwID8gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpIDogbmV3Q29udGVudDtcbn1cblxuZnVuY3Rpb24gcGFyc2VGcm9udG1hdHRlclNhZmVseShwYXJhbXM6IFBhcnNlRnJvbnRtYXR0ZXJTYWZlbHlQYXJhbXMpOiBQYXJzZUZyb250bWF0dGVyU2FmZWx5UmVzdWx0IHtcbiAgY29uc3QgeyBjb250ZW50LCBwYXRoIH0gPSBwYXJhbXM7XG4gIGxldCBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPiA9IHt9O1xuICBsZXQgaGFzRnJvbnRtYXR0ZXJFcnJvciA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBGcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZCBpbiAke3BhdGh9YCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgIGhhc0Zyb250bWF0dGVyRXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHsgZnJvbnRtYXR0ZXIsIGhhc0Zyb250bWF0dGVyRXJyb3IgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKc29uU2FmZShjb250ZW50OiBzdHJpbmcpOiBHZW5lcmljT2JqZWN0IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBHZW5lcmljT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBzb3J0QW5kRmlsdGVyQ2hhbmdlcyhjaGFuZ2VzOiBGaWxlQ2hhbmdlW10pOiBGaWxlQ2hhbmdlW10ge1xuICAvLyBTb3J0IGNoYW5nZXMgYnkgdHlwZSBhbmQgcG9zaXRpb25cbiAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShhKSAmJiBpc0NvbnRlbnRDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQgLSBiLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5rZXkubG9jYWxlQ29tcGFyZShiLnJlZmVyZW5jZS5rZXkpIHx8IGEucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0IC0gYi5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYSkgJiYgaXNGcm9udG1hdHRlckNoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLmtleS5sb2NhbGVDb21wYXJlKGIucmVmZXJlbmNlLmtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ29udGVudENoYW5nZShhKSA/IC0xIDogMTtcbiAgfSk7XG5cbiAgLy8gRmlsdGVyIG91dCBkdXBsaWNhdGUgYW5kIG5vLW9wIGNoYW5nZXNcbiAgcmV0dXJuIGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGNoYW5nZS5vbGRDb250ZW50ICE9PSBjaGFuZ2UubmV3Q29udGVudCAmJiAoaW5kZXggPT09IDAgfHwgIWlzRGVlcEVxdWFsKGNoYW5nZSwgY2hhbmdlc1tpbmRleCAtIDFdKSk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxtQkFBMkI7QUFDM0IsMEJBS087QUFDUCw0QkFBNkI7QUFDN0IsNkJBR087QUFnQlAsbUJBQXVDO0FBQ3ZDLHlCQUdPO0FBQ1AsaURBR087QUFDUCx5QkFHTztBQUNQLHVCQUdPO0FBQ1AsbUJBQXdCO0FBRXhCLE1BQU0sMkJBQTJCLE9BQU87QUFNeEMsTUFBTSw2Q0FBNkM7QUF5T25ELGVBQXNCLG9CQUFvQixRQUEyRDtBQUNuRyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQThCO0FBQUEsRUFDaEMsSUFBSTtBQUNKLGNBQVksZUFBZTtBQUMzQixNQUFJLFVBQVUsVUFBTSxvQ0FBYSxpQkFBaUIsRUFBRSxhQUFhLFFBQVEsQ0FBQztBQUMxRSxjQUFZLGVBQWU7QUFDM0IsTUFBSSxZQUFZLE1BQU07QUFDcEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLEVBQUUsYUFBYSxvQkFBb0Is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
|
|
@@ -76,11 +76,11 @@ export interface FileChange {
|
|
|
76
76
|
/**
|
|
77
77
|
* An old content that will be replaced.
|
|
78
78
|
*/
|
|
79
|
-
oldContent: string;
|
|
79
|
+
readonly oldContent: string;
|
|
80
80
|
/**
|
|
81
81
|
* A reference that caused the change.
|
|
82
82
|
*/
|
|
83
|
-
reference: Reference;
|
|
83
|
+
readonly reference: Reference;
|
|
84
84
|
}
|
|
85
85
|
type CanvasChange = FileChange & WithReference<CanvasReference>;
|
|
86
86
|
type CanvasFileNodeChange = FileChange & WithReference<CanvasFileNodeReference>;
|
|
@@ -89,7 +89,7 @@ type ContentChange = FileChange & WithReference<ReferenceCache>;
|
|
|
89
89
|
type FrontmatterChange = FileChange & WithReference<FrontmatterLinkCache>;
|
|
90
90
|
type FrontmatterChangeWithOffsets = FileChange & WithReference<FrontmatterLinkCacheWithOffsets>;
|
|
91
91
|
interface WithReference<R extends Reference> {
|
|
92
|
-
reference: R;
|
|
92
|
+
readonly reference: R;
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
95
|
* Applies a series of content changes to the specified content.
|
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -257,4 +257,4 @@ function toFolderNoteLocation(storageLocation) {
|
|
|
257
257
|
resolveFolderNote,
|
|
258
258
|
resolveFolderNoteConfig
|
|
259
259
|
});
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBpc0ZvbGRlcixcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbi8qKlxuICogV2hlcmUgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSBsaXZlcy5cbiAqXG4gKiBUaGUgdGhyZWUgY29uY3JldGUgbWVtYmVycyBhcmUgdGhlIHNoYXBlcyB0aGUgZm9sZGVyLW5vdGUgZWNvc3lzdGVtIGFjdHVhbGx5IHVzZXM6XG4gKiBgY2hhcmxpZS9jaGFybGllLm1kYCBhbmQgYGNoYXJsaWUvaW5kZXgubWRgIGFyZSBib3RoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyfSAodGhleVxuICogZGlmZmVyIG9ubHkgaW4gdGhlIE5BTUUsIHdoaWNoIGlzIHdoeSBuYW1pbmcgaXMgYSBjYWxsYmFjayBhbmQgbm90IGEgZm91cnRoIG1lbWJlciksIHdoaWxlXG4gKiBgY2hhcmxpZS5tZGAgYmVzaWRlIHRoZSBmb2xkZXIgaXMge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IOKAlCB3aG9zZSB3aG9sZSBwb2ludCBpcyB0aGF0XG4gKiBgW1thbHBoYS9icmF2by9jaGFybGllXV1gIGxpbmtzIHRvIGEgZm9sZGVyIHdpdGggbm8gc3BlY2lhbCBzeW50YXguXG4gKi9cbmV4cG9ydCBlbnVtIEZvbGRlck5vdGVMb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBUYWtlIHRoZSBhbnN3ZXIgZnJvbSB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbiwgZmFsbGluZyBiYWNrIHRvIGEgbm90ZSBuYW1lZCBhZnRlciBpdHNcbiAgICogZm9sZGVyLCBpbnNpZGUgaXQuIFRoZSBkZWZhdWx0LCBhbmQgcmVzb2x2ZWQgTElWRSByYXRoZXIgdGhhbiBjb3BpZWQuXG4gICAqL1xuICBBdXRvID0gJ0F1dG8nLFxuXG4gIC8qKlxuICAgKiBgYWxwaGEvYnJhdm8vY2hhcmxpZS88bmFtZT4ubWRgLlxuICAgKi9cbiAgSW5zaWRlRm9sZGVyID0gJ0luc2lkZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBoYXMgbm8gZm9sZGVyIG5vdGVzIGF0IGFsbCwgc28gZXZlcnkgZm9sZGVyIGFuc3dlcnMgYG51bGxgLiBUaGlzIGlzIGFsc28gaG93IGEgY2FsbGVyIG9wdHNcbiAgICogb3V0IG9mIGZvbGRlci1ub3RlIGJlaGF2aW9yIGVudGlyZWx5LlxuICAgKi9cbiAgTm9uZSA9ICdOb25lJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvLzxuYW1lPi5tZGAsIGJlc2lkZSB0aGUgZm9sZGVyLlxuICAgKi9cbiAgUGFyZW50Rm9sZGVyID0gJ1BhcmVudEZvbGRlcidcbn1cblxuLyoqXG4gKiBBIGZvbGRlci1ub3RlIHNldHVwIHdpdGgge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSBhbHJlYWR5IHJlc29sdmVkIHRvIGEgY29uY3JldGUgYW5zd2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlck5vdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIFdJVEhPVVQgdGhlIGxlYWRpbmcgZG90LCBpbiByZXNvbHV0aW9uIG9yZGVyIOKAlCB0aGUgZmlyc3Qgb25lXG4gICAqIHRoYXQgbmFtZXMgYW4gZXhpc3RpbmcgZmlsZSB3aW5zLlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci5cbiAgICpcbiAgICogUmVhZCByYXRoZXIgdGhhbiBhY3RlZCB1cG9uIGhlcmU6IGl0IGNoYW5nZXMgbm90aGluZyBhYm91dCBXSElDSCBmaWxlIGlzIHRoZSBmb2xkZXIgbm90ZSwgYnV0IGEgY2FsbGVyXG4gICAqIHRoYXQgcmV2ZWFscyB0aGUgbm90ZSBoYXMgdG8ga25vdyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldmVhbCBhbmQgZmFsbCBiYWNrIHRvIHJldmVhbGluZyB0aGUgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyIHwgRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfCBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgZm9sZGVyIG5vdGUgb2YgYSBmb2xkZXIsIFdJVEhPVVQgaXRzIGV4dGVuc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlciAtIFRoZSBmb2xkZXIgd2hvc2Ugbm90ZSBpcyBiZWluZyBuYW1lZC5cbiAgICogQHJldHVybnMgVGhlIG5vdGUncyBuYW1lOyBhbiBlbXB0eSAob3IgYmxhbmspIG5hbWUgbWVhbnMgdGhlIGZvbGRlciBoYXMgbm8gZm9sZGVyIG5vdGUuXG4gICAqL1xuICAvLyBBIGZ1bmN0aW9uIHByb3BlcnR5IHJhdGhlciB0aGFuIGEgbWV0aG9kLCBiZWNhdXNlIGl0IGlzIGEgc3RhbmRhbG9uZSBjYWxsYmFjaywgbmV2ZXIgYSBtZXRob2Qgb2YgdGhlXG4gIC8vIGNvbmZpZyDigJQgd2hpY2ggaXMgYWxzbyB3aGF0IGxldHMgaXQgYmUgZGVzdHJ1Y3R1cmVkIGFuZCBoYW5kZWQgb24gd2l0aG91dCB0cmlwcGluZyBgdW5ib3VuZC1tZXRob2RgLlxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcikgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJOb3RlRm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRGb2xkZXJOb3RlRm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFscmVhZHktcmVzb2x2ZWQgc2V0dXAgdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSB0aGF0IG1heSBiZSBhIGZvbGRlciBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgZG90LCBpbiByZXNvbHV0aW9uIG9yZGVyLiBJZ25vcmVkXG4gICAqIHVuZGVyIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIHRha2VzIHRoZSBpbnN0YWxsZWQgcGx1Z2luJ3MgYW5zd2VyIHdob2xlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgWydtZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuIElnbm9yZWQgdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b31cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogRm9sZGVyTm90ZUxvY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgZm9sZGVyIG5vdGUgb2YgYSBmb2xkZXIsIFdJVEhPVVQgaXRzIGV4dGVuc2lvbi4gSWdub3JlZCB1bmRlclxuICAgKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LCB3aGljaCBuYW1lcyB0aGUgbm90ZSB0aGUgd2F5IHRoZSBpbnN0YWxsZWQgcGx1Z2luIGRvZXMuXG4gICAqXG4gICAqIEEgY2FsbGJhY2sgcmF0aGVyIHRoYW4gYSBuYW1lIHRlbXBsYXRlLCBiZWNhdXNlIGEgdGVtcGxhdGUgbmVlZHMgYSB0b2tlbiB2b2NhYnVsYXJ5IGFuZCB0aGlzIGxpYnJhcnlcbiAgICogaGFzIG5vbmUgdG8gaW1wb3NlIOKAlCBhIGNhbGxlciB0aGF0IGhhcyBvbmUgKGB7e2ZvbGRlck5hbWV9fWAsIGB7e2ZvbGRlclBhdGh9fWAsIOKApikgcmVuZGVycyBpdCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZm9sZGVyIC0gVGhlIGZvbGRlciB3aG9zZSBub3RlIGlzIGJlaW5nIG5hbWVkLlxuICAgKiBAcmV0dXJucyBUaGUgbm90ZSdzIG5hbWUuXG4gICAqIEBkZWZhdWx0IGAoZm9sZGVyKSA9PiBmb2xkZXIubmFtZWBcbiAgICovXG4gIC8vIFNlZSB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5yZXNvbHZlTmFtZX0gZm9yIHdoeSB0aGlzIGlzIGEgZnVuY3Rpb24gcHJvcGVydHkuXG4gIHJlYWRvbmx5IHJlc29sdmVOYW1lPzogKGZvbGRlcjogVEZvbGRlcikgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlRm9sZGVyTm90ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYWxyZWFkeS1yZXNvbHZlZCBzZXR1cCB0byB1c2UuXG4gICAqXG4gICAqIE9taXR0ZWQgbWVhbnMge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIHNldHVwIGlzIHJlc29sdmVkIG9uIHRoZSBzcG90LCB3aGljaCBpcyB3aGF0IG1ha2VzXG4gICAqIGByZXNvbHZlRm9sZGVyTm90ZSh7IGFwcCwgZm9sZGVyIH0pYCB0aGUgb25lLWxpbmVyIGV2ZXJ5IGNhbGxlciB3YW50cy4gUGFzcyBvbmUgd2hlbiB0aGUgc2FtZSBzZXR1cCBpc1xuICAgKiB1c2VkIG1vcmUgdGhhbiBvbmNlLCBvciB3aGVuIGl0cyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgbmVlZGVkIGFsb25nc2lkZSB0aGUgbm90ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwIH0pYFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogRm9sZGVyTm90ZUNvbmZpZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBmb2xkZXIgbm90ZSBpcyB3YW50ZWQuIFJlYWQgQUZURVIgYW55IHJlbmFtZTogdGhlIG5vdGUgaXMgbmFtZWQgZnJvbSB0aGUgZm9sZGVyJ3NcbiAgICogQ1VSUkVOVCBuYW1lLCBhbmQgYSBgZm9sZGVyLW5vdGVzYCBpbnN0YWxsIHdpdGggYHN5bmNGb2xkZXJOYW1lYCBvbiB3aWxsIGhhdmUgcmVuYW1lZCBpdCBhbHJlYWR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyOiBURm9sZGVyO1xufVxuXG4vKipcbiAqIFRoZSBgZm9sZGVyLW5vdGVzYCBwbHVnaW4ncyBpZCwgYXMgaXRzIG1hbmlmZXN0IGRlY2xhcmVzIGl0LlxuICovXG5leHBvcnQgY29uc3QgRk9MREVSX05PVEVTX1BMVUdJTl9JRCA9ICdmb2xkZXItbm90ZXMnO1xuXG4vKipcbiAqIFRoZSBvbmUgdG9rZW4gYGZvbGRlci1ub3Rlc2AnIG93biBuYW1lIHRlbXBsYXRlIHVuZGVyc3RhbmRzLiBFdmVyeSBvdGhlciBjaGFyYWN0ZXIgaW4gdGhhdCB0ZW1wbGF0ZSBpc1xuICogYSBsaXRlcmFsLCBzbyB0cmFuc2xhdGluZyB0aGlzIHRva2VuIGlzIHRoZSB3aG9sZSBvZiB0aGUgdHJhbnNsYXRpb24uXG4gKi9cbmNvbnN0IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQID0gL1xce1xce2ZvbGRlcl9uYW1lXFx9XFx9L2dpO1xuXG4vKipcbiAqIGBmb2xkZXItbm90ZXNgIG9mZmVycyBgRXhjYWxpZHJhd2AgZm9sZGVyIG5vdGVzLCB3aGljaCBhcmUgTWFya2Rvd24gZmlsZXMgd2l0aCBhbiBgRXhjYWxpZHJhd2AgcGF5bG9hZCDigJQgaXRzXG4gKiBvd24gcmVzb2x2ZXIgbm9ybWFsaXplcyB0aGUgdHlwZSB0aGUgc2FtZSB3YXkgYmVmb3JlIGxvb2tpbmcgdGhlIGZpbGUgdXAuXG4gKi9cbmNvbnN0IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPSAnZXhjYWxpZHJhdyc7XG5cbi8qKlxuICogV2hhdCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGZhbGxzIGJhY2sgdG86IHRoZSBsYXlvdXQgZXZlcnkgZm9sZGVyLW5vdGUgcGx1Z2luIHN1cHBvcnRzLCBhbmRcbiAqIHRoZSBvbmUgYGZvbGRlci1ub3Rlc2AgaXRzZWxmIHNoaXBzIGFzIGl0cyBkZWZhdWx0LiBOb3RoaW5nIGhpZGVzIGEgbm90ZSB3aGVuIG5vIHBsdWdpbiBpcyB0aGVyZSB0byBoaWRlXG4gKiBpdCwgc28ge0BsaW5rIEZvbGRlck5vdGVDb25maWcuaXNIaWRkZW59IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRzogRm9sZGVyTm90ZUNvbmZpZyA9IHtcbiAgZXh0ZW5zaW9uczogW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcixcbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT4gZm9sZGVyLm5hbWVcbn07XG5cbi8qKlxuICogRmluZHMgdGhlIGZvbGRlciBhIGZpbGUgaXMgdGhlIGZvbGRlciBub3RlIG9mIOKAlCB0aGUgaW52ZXJzZSBvZiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9LlxuICpcbiAqIFRoZSBhbnN3ZXIgaXMgY2hlY2tlZCB0aHJvdWdoIHtAbGluayByZXNvbHZlRm9sZGVyTm90ZX0gaXRzZWxmLCBzbyB0aGUgdHdvIGNhbiBuZXZlciBkaXNhZ3JlZTogYSBmaWxlIGlzXG4gKiBhIGZvbGRlcidzIG5vdGUgZXhhY3RseSB3aGVuIHJlc29sdmluZyB0aGF0IGZvbGRlcidzIG5vdGUgeWllbGRzIHRoaXMgdmVyeSBmaWxlLiBBIGZpbGUgdGhhdCBkb2VzIG5vdFxuICogZXhpc3QgaW4gdGhlIHZhdWx0IChvbmUgYnVpbHQgZm9yIGEgcGF0aCB3aXRoIG5vdGhpbmcgYXQgaXQpIGlzIG5ldmVyIGEgZm9sZGVyIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWxlLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciwgb3IgYG51bGxgIHdoZW4gdGhlIGZpbGUgaXMgbm90IGEgZm9sZGVyIG5vdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJOb3RlRm9sZGVyKHBhcmFtczogR2V0Rm9sZGVyTm90ZUZvbGRlclBhcmFtcyk6IG51bGwgfCBURm9sZGVyIHtcbiAgY29uc3QgeyBhcHAsIGZpbGUgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgY29uc3QgcGFyZW50ID0gZmlsZS5wYXJlbnQ7XG4gIGlmICghcGFyZW50IHx8IGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVGb2xkZXJzOiBURm9sZGVyW107XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5JbnNpZGVGb2xkZXIpIHtcbiAgICAvLyBUaGUgdmF1bHQgcm9vdCBoYXMgbm8gZm9sZGVyIG5vdGUgdW5kZXIgdGhpcyBsYXlvdXQsIHNpbmNlIG5vdGhpbmcgbmFtZXMgaXQuXG4gICAgY2FuZGlkYXRlRm9sZGVycyA9IHBhcmVudC5pc1Jvb3QoKSA/IFtdIDogW3BhcmVudF07XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlRm9sZGVycyA9IHBhcmVudC5jaGlsZHJlbi5maWx0ZXIoaXNGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZUZvbGRlcnMuZmluZCgoZm9sZGVyKSA9PiByZXNvbHZlRm9sZGVyTm90ZSh7IGFwcCwgY29uZmlnLCBmb2xkZXIgfSkgPT09IGZpbGUpID8/IG51bGw7XG59XG5cbi8qKlxuICogRmluZHMgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSDigJQgdGhlIG9uZSBub3RlIHdob3NlIHByb3BlcnRpZXMgZGVzY3JpYmUgdGhlIGZvbGRlciBpdHNlbGYuXG4gKlxuICogKipOZXZlciBjcmVhdGVzLioqIEEgZm9sZGVyIHRoYXQgaGFzIG5vIGZvbGRlciBub3RlIGFuc3dlcnMgYG51bGxgLCBhbmQgc28gZG9lcyB0aGUgdmF1bHQgcm9vdCB1bmRlclxuICoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IChub3RoaW5nIGNhbiBzaXQgYmVzaWRlIGl0KS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZvbGRlciwgYW5kIG9wdGlvbmFsbHkgdGhlIHNldHVwIHRvIHJlc29sdmUgaXQgd2l0aC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgbm90ZSwgb3IgYG51bGxgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMpOiBudWxsIHwgVEZpbGUge1xuICBjb25zdCB7IGFwcCwgZm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbmZpZyA9IHBhcmFtcy5jb25maWcgPz8gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSk7XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJlbnRGb2xkZXJQYXRoID0gY29uZmlnLmxvY2F0aW9uID09PSBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyID8gZm9sZGVyLnBhcmVudD8ucGF0aCA6IGZvbGRlci5wYXRoO1xuICBpZiAocGFyZW50Rm9sZGVyUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub3RlTmFtZSA9IGNvbmZpZy5yZXNvbHZlTmFtZShmb2xkZXIpLnRyaW0oKTtcbiAgaWYgKCFub3RlTmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgY29uZmlnLmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobm9ybWFsaXplUGF0aChqb2luKHBhcmVudEZvbGRlclBhdGgsIGAke25vdGVOYW1lfS4ke2V4dGVuc2lvbn1gKSkpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGludG8gYSBjb25jcmV0ZSBmb2xkZXItbm90ZSBzZXR1cC5cbiAqXG4gKiBgZm9sZGVyLW5vdGVzYCcgYHZhdWx0Rm9sZGVyYCBzdG9yYWdlIChldmVyeSBmb2xkZXIgbm90ZSBwb29sZWQgaW4gb25lIGNlbnRyYWwgZm9sZGVyKSBoYXMgbm9cbiAqIGNvdW50ZXJwYXJ0IGhlcmUgYW5kIGZhbGxzIGJhY2sgcmF0aGVyIHRoYW4gZ3Vlc3Npbmc6IHdpdGggdGhlIG5vdGVzIHBvb2xlZCwgdGhlIG5vdGUgYmVsb25naW5nIHRvIGFcbiAqIGZvbGRlciBpcyBubyBsb25nZXIgZGVyaXZhYmxlIGZyb20gdGhhdCBmb2xkZXIncyBwYXRoIGFsb25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc2V0dXAsIGFuZCB0aGUgYXBwIHRvIHJlYWQgdGhlIGluc3RhbGxlZCBwbHVnaW4gZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBzZXR1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMpOiBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBleHRlbnNpb25zLFxuICAgIGlzSGlkZGVuLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlc29sdmVOYW1lXG4gIH0gPSBwYXJhbXM7XG5cbiAgcmV0dXJuIGxvY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24gIT09IEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvXG4gICAgPyB7XG4gICAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKGV4dGVuc2lvbnMgPz8gW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSksXG4gICAgICBpc0hpZGRlbjogaXNIaWRkZW4gPz8gZmFsc2UsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlc29sdmVOYW1lOiByZXNvbHZlTmFtZSA/PyBGQUxMQkFDS19GT0xERVJfTk9URV9DT05GSUcucmVzb2x2ZU5hbWVcbiAgICB9XG4gICAgOiByZWFkRm9sZGVyTm90ZXNQbHVnaW5Db25maWcoYXBwKSA/PyBGQUxMQkFDS19GT0xERVJfTk9URV9DT05GSUc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBleHRlbnNpb25zIHRoZSB3YXkgYGZvbGRlci1ub3Rlc2AgZG9lcyBiZWZvcmUgaXQgbG9va3MgYSBmaWxlIHVwOiBubyBsZWFkaW5nIGRvdCwgbG93ZXItY2FzZSxcbiAqIGBFeGNhbGlkcmF3YCB0cmVhdGVkIGFzIE1hcmtkb3duLCBibGFua3MgZHJvcHBlZCwgZHVwbGljYXRlcyBjb2xsYXBzZWQgd2hpbGUga2VlcGluZyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSdzXG4gKiBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9ucyAtIFRoZSBleHRlbnNpb25zIGFzIGNvbmZpZ3VyZWQuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBleHRlbnNpb25zLCBpbiByZXNvbHV0aW9uIG9yZGVyLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFeHRlbnNpb25zKGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBjb25zdCBub3JtYWxpemVkRXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnNcbiAgICAubWFwKChleHRlbnNpb24pID0+IGV4dGVuc2lvbi50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eXFwuLywgJycpKVxuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uID09PSBFWENBTElEUkFXX0ZJTEVfRVhURU5TSU9OID8gTUFSS0RPV05fRklMRV9FWFRFTlNJT04gOiBleHRlbnNpb24pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KG5vcm1hbGl6ZWRFeHRlbnNpb25zKV07XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4ncyBvd24gY29uZmlndXJhdGlvbiwgaWYgaXQgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIHRoZSB3YXlcbiAqIGl0IGRvY3VtZW50cy5cbiAqXG4gKiBFdmVyeSB2YWx1ZSBpcyByZWFkIGFzIGB1bmtub3duYCBhbmQgY2hlY2tlZCwgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgaW50byBhIHNoYXBlOiB0aGlzIGlzIGFub3RoZXJcbiAqIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3Mgb2JqZWN0LCBzbyBhIHZlcnNpb24gdGhhdCByZW5hbWVzIG9yIGRyb3BzIGEga2V5IG11c3QgZGVncmFkZSB0byB0aGUgZmFsbGJhY2tcbiAqIGluc3RlYWQgb2YgdGhyb3dpbmcgaW5zaWRlIGEgY2xpY2sgaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIG9yIGBudWxsYCB3aGVuIHRoZSBwbHVnaW4gaXMgYWJzZW50LCBub3QgY29uZmlndXJlZCwgb3Igc2V0IHRvIGEgc3RvcmFnZVxuICogbG9jYXRpb24gd2l0aCBubyBjb3VudGVycGFydCBoZXJlLlxuICovXG5mdW5jdGlvbiByZWFkRm9sZGVyTm90ZXNQbHVnaW5Db25maWcoYXBwOiBBcHApOiBGb2xkZXJOb3RlQ29uZmlnIHwgbnVsbCB7XG4gIGNvbnN0IGZvbGRlck5vdGVzUGx1Z2luID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEZPTERFUl9OT1RFU19QTFVHSU5fSUQpO1xuICAvLyBOYXJyb3dlZCB3aXRoIGBpbmAgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgaW50byBhIHNoYXBlOiB0aGF0IGtlZXBzIGV2ZXJ5IHZhbHVlIGJlbG93IHR5cGVkIGB1bmtub3duYCxcbiAgLy8gd2hpY2ggaXMgZXhhY3RseSB3aGF0IGEgZm9yZWlnbiBwbHVnaW4ncyBwcml2YXRlIHNldHRpbmdzIGFyZS5cbiAgaWYgKCFmb2xkZXJOb3Rlc1BsdWdpbiB8fCAhKCdzZXR0aW5ncycgaW4gZm9sZGVyTm90ZXNQbHVnaW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3Rlc1NldHRpbmdzOiB1bmtub3duID0gZm9sZGVyTm90ZXNQbHVnaW4uc2V0dGluZ3M7XG4gIGlmICh0eXBlb2YgZm9sZGVyTm90ZXNTZXR0aW5ncyAhPT0gJ29iamVjdCcgfHwgZm9sZGVyTm90ZXNTZXR0aW5ncyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbG9jYXRpb24gPSB0b0ZvbGRlck5vdGVMb2NhdGlvbignc3RvcmFnZUxvY2F0aW9uJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5zdG9yYWdlTG9jYXRpb24gOiBudWxsKTtcbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyTm90ZU5hbWUgPSAnZm9sZGVyTm90ZU5hbWUnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLmZvbGRlck5vdGVOYW1lIDogbnVsbDtcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3RlTmFtZSAhPT0gJ3N0cmluZycgfHwgIWZvbGRlck5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlVHlwZSA9ICdmb2xkZXJOb3RlVHlwZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUgOiBudWxsO1xuICBjb25zdCBzdXBwb3J0ZWRGaWxlVHlwZXMgPSAnc3VwcG9ydGVkRmlsZVR5cGVzJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5zdXBwb3J0ZWRGaWxlVHlwZXMgOiBudWxsO1xuICBjb25zdCBpc0hpZGRlbiA9ICdoaWRlRm9sZGVyTm90ZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuaGlkZUZvbGRlck5vdGUgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLy8gSXRzIG93biByZXNvbHZlciB0cmllcyB0aGUgcHJpbWFyeSB0eXBlIGZpcnN0IGFuZCBldmVyeSBvdGhlciBzdXBwb3J0ZWQgdHlwZSBhZnRlciBpdCwgd2hpY2ggaXMgdGhlXG4gICAgLy8gb3JkZXIgcmVwcm9kdWNlZCBoZXJlLiBBbiB1bnVzYWJsZSBwYWlyIGxlYXZlcyBNYXJrZG93biwgdGhlIGV4dGVuc2lvbiBpdCBjYW5ub3QgYmUgY29uZmlndXJlZFxuICAgIC8vIHdpdGhvdXQuXG4gICAgZXh0ZW5zaW9uczogbm9ybWFsaXplRXh0ZW5zaW9ucyhbXG4gICAgICB0eXBlb2YgZm9sZGVyTm90ZVR5cGUgPT09ICdzdHJpbmcnID8gZm9sZGVyTm90ZVR5cGUgOiBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTixcbiAgICAgIC4uLihBcnJheS5pc0FycmF5KHN1cHBvcnRlZEZpbGVUeXBlcykgPyBzdXBwb3J0ZWRGaWxlVHlwZXMuZmlsdGVyKCh0eXBlOiB1bmtub3duKSA9PiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIDogW10pLFxuICAgICAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbiAgICBdKSxcbiAgICBpc0hpZGRlbjogaXNIaWRkZW4gPT09IHRydWUsXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT5cbiAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAkc3RyaW5nOiBmb2xkZXJOb3RlTmFtZSxcbiAgICAgICAgLy8gQSBmdW5jdGlvbiByZXBsYWNlciwgc28gYSBmb2xkZXIgbmFtZSBjb250YWluaW5nIGAkJmAgaXMgaW5zZXJ0ZWQgbGl0ZXJhbGx5LlxuICAgICAgICByZXBsYWNlcjogKCkgPT4gZm9sZGVyLm5hbWUsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBGT0xERVJfTk9URVNfRk9MREVSX05BTUVfVE9LRU5fUkVHX0VYUFxuICAgICAgfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBNYXBzIGBmb2xkZXItbm90ZXNgJyBgc3RvcmFnZUxvY2F0aW9uYCBvbnRvIHRoaXMgbGlicmFyeSdzIG93biBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3RvcmFnZUxvY2F0aW9uIC0gVGhlIHZhbHVlIHJlYWQgb3V0IG9mIHRoYXQgcGx1Z2luJ3Mgc2V0dGluZ3MuXG4gKiBAcmV0dXJucyBUaGUgbG9jYXRpb24sIG9yIGBudWxsYCBmb3IgYHZhdWx0Rm9sZGVyYCBhbmQgZm9yIGFueXRoaW5nIHRoYXQgaXMgbm90IG9uZSBvZiBpdHMgdmFsdWVzLlxuICovXG5mdW5jdGlvbiB0b0ZvbGRlck5vdGVMb2NhdGlvbihzdG9yYWdlTG9jYXRpb246IHVua25vd24pOiBGb2xkZXJOb3RlQ29uZmlnWydsb2NhdGlvbiddIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3RvcmFnZUxvY2F0aW9uKSB7XG4gICAgY2FzZSAnaW5zaWRlRm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5JbnNpZGVGb2xkZXI7XG4gICAgfVxuICAgIGNhc2UgJ3BhcmVudEZvbGRlcic6IHtcbiAgICAgIHJldHVybiBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLGtCQUFxQjtBQUNyQixvQkFBMkI7QUFDM0Isc0JBQThCO0FBRTlCLHlCQUdPO0FBV0EsSUFBSyxxQkFBTCxrQkFBS0Esd0JBQUw7QUFLTCxFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFNZixFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFyQkwsU0FBQUE7QUFBQSxHQUFBO0FBNEpMLE1BQU0seUJBQXlCO0FBTXRDLE1BQU0seUNBQXlDO0FBTS9DLE1BQU0sNEJBQTRCO0FBT2xDLE1BQU0sOEJBQWdEO0FBQUEsRUFD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
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBpc0ZvbGRlcixcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbi8qKlxuICogV2hlcmUgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSBsaXZlcy5cbiAqXG4gKiBUaGUgdGhyZWUgY29uY3JldGUgbWVtYmVycyBhcmUgdGhlIHNoYXBlcyB0aGUgZm9sZGVyLW5vdGUgZWNvc3lzdGVtIGFjdHVhbGx5IHVzZXM6XG4gKiBgY2hhcmxpZS9jaGFybGllLm1kYCBhbmQgYGNoYXJsaWUvaW5kZXgubWRgIGFyZSBib3RoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyfSAodGhleVxuICogZGlmZmVyIG9ubHkgaW4gdGhlIE5BTUUsIHdoaWNoIGlzIHdoeSBuYW1pbmcgaXMgYSBjYWxsYmFjayBhbmQgbm90IGEgZm91cnRoIG1lbWJlciksIHdoaWxlXG4gKiBgY2hhcmxpZS5tZGAgYmVzaWRlIHRoZSBmb2xkZXIgaXMge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IOKAlCB3aG9zZSB3aG9sZSBwb2ludCBpcyB0aGF0XG4gKiBgW1thbHBoYS9icmF2by9jaGFybGllXV1gIGxpbmtzIHRvIGEgZm9sZGVyIHdpdGggbm8gc3BlY2lhbCBzeW50YXguXG4gKi9cbmV4cG9ydCBlbnVtIEZvbGRlck5vdGVMb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBUYWtlIHRoZSBhbnN3ZXIgZnJvbSB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbiwgZmFsbGluZyBiYWNrIHRvIGEgbm90ZSBuYW1lZCBhZnRlciBpdHNcbiAgICogZm9sZGVyLCBpbnNpZGUgaXQuIFRoZSBkZWZhdWx0LCBhbmQgcmVzb2x2ZWQgTElWRSByYXRoZXIgdGhhbiBjb3BpZWQuXG4gICAqL1xuICBBdXRvID0gJ0F1dG8nLFxuXG4gIC8qKlxuICAgKiBgYWxwaGEvYnJhdm8vY2hhcmxpZS88bmFtZT4ubWRgLlxuICAgKi9cbiAgSW5zaWRlRm9sZGVyID0gJ0luc2lkZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBoYXMgbm8gZm9sZGVyIG5vdGVzIGF0IGFsbCwgc28gZXZlcnkgZm9sZGVyIGFuc3dlcnMgYG51bGxgLiBUaGlzIGlzIGFsc28gaG93IGEgY2FsbGVyIG9wdHNcbiAgICogb3V0IG9mIGZvbGRlci1ub3RlIGJlaGF2aW9yIGVudGlyZWx5LlxuICAgKi9cbiAgTm9uZSA9ICdOb25lJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvLzxuYW1lPi5tZGAsIGJlc2lkZSB0aGUgZm9sZGVyLlxuICAgKi9cbiAgUGFyZW50Rm9sZGVyID0gJ1BhcmVudEZvbGRlcidcbn1cblxuLyoqXG4gKiBBIGZvbGRlci1ub3RlIHNldHVwIHdpdGgge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSBhbHJlYWR5IHJlc29sdmVkIHRvIGEgY29uY3JldGUgYW5zd2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlck5vdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIFdJVEhPVVQgdGhlIGxlYWRpbmcgZG90LCBpbiByZXNvbHV0aW9uIG9yZGVyIOKAlCB0aGUgZmlyc3Qgb25lXG4gICAqIHRoYXQgbmFtZXMgYW4gZXhpc3RpbmcgZmlsZSB3aW5zLlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci5cbiAgICpcbiAgICogUmVhZCByYXRoZXIgdGhhbiBhY3RlZCB1cG9uIGhlcmU6IGl0IGNoYW5nZXMgbm90aGluZyBhYm91dCBXSElDSCBmaWxlIGlzIHRoZSBmb2xkZXIgbm90ZSwgYnV0IGEgY2FsbGVyXG4gICAqIHRoYXQgcmV2ZWFscyB0aGUgbm90ZSBoYXMgdG8ga25vdyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldmVhbCBhbmQgZmFsbCBiYWNrIHRvIHJldmVhbGluZyB0aGUgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyIHwgRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfCBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgZm9sZGVyIG5vdGUgb2YgYSBmb2xkZXIsIFdJVEhPVVQgaXRzIGV4dGVuc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlciAtIFRoZSBmb2xkZXIgd2hvc2Ugbm90ZSBpcyBiZWluZyBuYW1lZC5cbiAgICogQHJldHVybnMgVGhlIG5vdGUncyBuYW1lOyBhbiBlbXB0eSAob3IgYmxhbmspIG5hbWUgbWVhbnMgdGhlIGZvbGRlciBoYXMgbm8gZm9sZGVyIG5vdGUuXG4gICAqL1xuICAvLyBBIGZ1bmN0aW9uIHByb3BlcnR5IHJhdGhlciB0aGFuIGEgbWV0aG9kLCBiZWNhdXNlIGl0IGlzIGEgc3RhbmRhbG9uZSBjYWxsYmFjaywgbmV2ZXIgYSBtZXRob2Qgb2YgdGhlXG4gIC8vIGNvbmZpZyDigJQgd2hpY2ggaXMgYWxzbyB3aGF0IGxldHMgaXQgYmUgZGVzdHJ1Y3R1cmVkIGFuZCBoYW5kZWQgb24gd2l0aG91dCB0cmlwcGluZyBgdW5ib3VuZC1tZXRob2RgLlxuICByZWFkb25seSByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcikgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJOb3RlRm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRGb2xkZXJOb3RlRm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFscmVhZHktcmVzb2x2ZWQgc2V0dXAgdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSB0aGF0IG1heSBiZSBhIGZvbGRlciBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgZG90LCBpbiByZXNvbHV0aW9uIG9yZGVyLiBJZ25vcmVkXG4gICAqIHVuZGVyIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIHRha2VzIHRoZSBpbnN0YWxsZWQgcGx1Z2luJ3MgYW5zd2VyIHdob2xlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgWydtZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuIElnbm9yZWQgdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b31cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogRm9sZGVyTm90ZUxvY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgZm9sZGVyIG5vdGUgb2YgYSBmb2xkZXIsIFdJVEhPVVQgaXRzIGV4dGVuc2lvbi4gSWdub3JlZCB1bmRlclxuICAgKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LCB3aGljaCBuYW1lcyB0aGUgbm90ZSB0aGUgd2F5IHRoZSBpbnN0YWxsZWQgcGx1Z2luIGRvZXMuXG4gICAqXG4gICAqIEEgY2FsbGJhY2sgcmF0aGVyIHRoYW4gYSBuYW1lIHRlbXBsYXRlLCBiZWNhdXNlIGEgdGVtcGxhdGUgbmVlZHMgYSB0b2tlbiB2b2NhYnVsYXJ5IGFuZCB0aGlzIGxpYnJhcnlcbiAgICogaGFzIG5vbmUgdG8gaW1wb3NlIOKAlCBhIGNhbGxlciB0aGF0IGhhcyBvbmUgKGB7e2ZvbGRlck5hbWV9fWAsIGB7e2ZvbGRlclBhdGh9fWAsIOKApikgcmVuZGVycyBpdCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZm9sZGVyIC0gVGhlIGZvbGRlciB3aG9zZSBub3RlIGlzIGJlaW5nIG5hbWVkLlxuICAgKiBAcmV0dXJucyBUaGUgbm90ZSdzIG5hbWUuXG4gICAqIEBkZWZhdWx0IGAoZm9sZGVyKSA9PiBmb2xkZXIubmFtZWBcbiAgICovXG4gIC8vIFNlZSB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5yZXNvbHZlTmFtZX0gZm9yIHdoeSB0aGlzIGlzIGEgZnVuY3Rpb24gcHJvcGVydHkuXG4gIHJlYWRvbmx5IHJlc29sdmVOYW1lPzogKGZvbGRlcjogVEZvbGRlcikgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlRm9sZGVyTm90ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYWxyZWFkeS1yZXNvbHZlZCBzZXR1cCB0byB1c2UuXG4gICAqXG4gICAqIE9taXR0ZWQgbWVhbnMge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIHNldHVwIGlzIHJlc29sdmVkIG9uIHRoZSBzcG90LCB3aGljaCBpcyB3aGF0IG1ha2VzXG4gICAqIGByZXNvbHZlRm9sZGVyTm90ZSh7IGFwcCwgZm9sZGVyIH0pYCB0aGUgb25lLWxpbmVyIGV2ZXJ5IGNhbGxlciB3YW50cy4gUGFzcyBvbmUgd2hlbiB0aGUgc2FtZSBzZXR1cCBpc1xuICAgKiB1c2VkIG1vcmUgdGhhbiBvbmNlLCBvciB3aGVuIGl0cyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgbmVlZGVkIGFsb25nc2lkZSB0aGUgbm90ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwIH0pYFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogRm9sZGVyTm90ZUNvbmZpZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBmb2xkZXIgbm90ZSBpcyB3YW50ZWQuIFJlYWQgQUZURVIgYW55IHJlbmFtZTogdGhlIG5vdGUgaXMgbmFtZWQgZnJvbSB0aGUgZm9sZGVyJ3NcbiAgICogQ1VSUkVOVCBuYW1lLCBhbmQgYSBgZm9sZGVyLW5vdGVzYCBpbnN0YWxsIHdpdGggYHN5bmNGb2xkZXJOYW1lYCBvbiB3aWxsIGhhdmUgcmVuYW1lZCBpdCBhbHJlYWR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyOiBURm9sZGVyO1xufVxuXG4vKipcbiAqIFRoZSBgZm9sZGVyLW5vdGVzYCBwbHVnaW4ncyBpZCwgYXMgaXRzIG1hbmlmZXN0IGRlY2xhcmVzIGl0LlxuICovXG5leHBvcnQgY29uc3QgRk9MREVSX05PVEVTX1BMVUdJTl9JRCA9ICdmb2xkZXItbm90ZXMnO1xuXG4vKipcbiAqIFRoZSBvbmUgdG9rZW4gYGZvbGRlci1ub3Rlc2AnIG93biBuYW1lIHRlbXBsYXRlIHVuZGVyc3RhbmRzLiBFdmVyeSBvdGhlciBjaGFyYWN0ZXIgaW4gdGhhdCB0ZW1wbGF0ZSBpc1xuICogYSBsaXRlcmFsLCBzbyB0cmFuc2xhdGluZyB0aGlzIHRva2VuIGlzIHRoZSB3aG9sZSBvZiB0aGUgdHJhbnNsYXRpb24uXG4gKi9cbmNvbnN0IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQID0gL1xce1xce2ZvbGRlcl9uYW1lXFx9XFx9L2dpO1xuXG4vKipcbiAqIGBmb2xkZXItbm90ZXNgIG9mZmVycyBgRXhjYWxpZHJhd2AgZm9sZGVyIG5vdGVzLCB3aGljaCBhcmUgTWFya2Rvd24gZmlsZXMgd2l0aCBhbiBgRXhjYWxpZHJhd2AgcGF5bG9hZCDigJQgaXRzXG4gKiBvd24gcmVzb2x2ZXIgbm9ybWFsaXplcyB0aGUgdHlwZSB0aGUgc2FtZSB3YXkgYmVmb3JlIGxvb2tpbmcgdGhlIGZpbGUgdXAuXG4gKi9cbmNvbnN0IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPSAnZXhjYWxpZHJhdyc7XG5cbi8qKlxuICogV2hhdCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGZhbGxzIGJhY2sgdG86IHRoZSBsYXlvdXQgZXZlcnkgZm9sZGVyLW5vdGUgcGx1Z2luIHN1cHBvcnRzLCBhbmRcbiAqIHRoZSBvbmUgYGZvbGRlci1ub3Rlc2AgaXRzZWxmIHNoaXBzIGFzIGl0cyBkZWZhdWx0LiBOb3RoaW5nIGhpZGVzIGEgbm90ZSB3aGVuIG5vIHBsdWdpbiBpcyB0aGVyZSB0byBoaWRlXG4gKiBpdCwgc28ge0BsaW5rIEZvbGRlck5vdGVDb25maWcuaXNIaWRkZW59IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRzogRm9sZGVyTm90ZUNvbmZpZyA9IHtcbiAgZXh0ZW5zaW9uczogW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcixcbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT4gZm9sZGVyLm5hbWVcbn07XG5cbi8qKlxuICogRmluZHMgdGhlIGZvbGRlciBhIGZpbGUgaXMgdGhlIGZvbGRlciBub3RlIG9mIOKAlCB0aGUgaW52ZXJzZSBvZiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9LlxuICpcbiAqIFRoZSBhbnN3ZXIgaXMgY2hlY2tlZCB0aHJvdWdoIHtAbGluayByZXNvbHZlRm9sZGVyTm90ZX0gaXRzZWxmLCBzbyB0aGUgdHdvIGNhbiBuZXZlciBkaXNhZ3JlZTogYSBmaWxlIGlzXG4gKiBhIGZvbGRlcidzIG5vdGUgZXhhY3RseSB3aGVuIHJlc29sdmluZyB0aGF0IGZvbGRlcidzIG5vdGUgeWllbGRzIHRoaXMgdmVyeSBmaWxlLiBBIGZpbGUgdGhhdCBkb2VzIG5vdFxuICogZXhpc3QgaW4gdGhlIHZhdWx0IChvbmUgYnVpbHQgZm9yIGEgcGF0aCB3aXRoIG5vdGhpbmcgYXQgaXQpIGlzIG5ldmVyIGEgZm9sZGVyIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWxlLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciwgb3IgYG51bGxgIHdoZW4gdGhlIGZpbGUgaXMgbm90IGEgZm9sZGVyIG5vdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJOb3RlRm9sZGVyKHBhcmFtczogR2V0Rm9sZGVyTm90ZUZvbGRlclBhcmFtcyk6IG51bGwgfCBURm9sZGVyIHtcbiAgY29uc3QgeyBhcHAsIGZpbGUgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgY29uc3QgcGFyZW50ID0gZmlsZS5wYXJlbnQ7XG4gIGlmICghcGFyZW50IHx8IGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVGb2xkZXJzOiBURm9sZGVyW107XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5JbnNpZGVGb2xkZXIpIHtcbiAgICAvLyBUaGUgdmF1bHQgcm9vdCBoYXMgbm8gZm9sZGVyIG5vdGUgdW5kZXIgdGhpcyBsYXlvdXQsIHNpbmNlIG5vdGhpbmcgbmFtZXMgaXQuXG4gICAgY2FuZGlkYXRlRm9sZGVycyA9IHBhcmVudC5pc1Jvb3QoKSA/IFtdIDogW3BhcmVudF07XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlRm9sZGVycyA9IHBhcmVudC5jaGlsZHJlbi5maWx0ZXIoaXNGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZUZvbGRlcnMuZmluZCgoZm9sZGVyKSA9PiByZXNvbHZlRm9sZGVyTm90ZSh7IGFwcCwgY29uZmlnLCBmb2xkZXIgfSkgPT09IGZpbGUpID8/IG51bGw7XG59XG5cbi8qKlxuICogRmluZHMgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSDigJQgdGhlIG9uZSBub3RlIHdob3NlIHByb3BlcnRpZXMgZGVzY3JpYmUgdGhlIGZvbGRlciBpdHNlbGYuXG4gKlxuICogKipOZXZlciBjcmVhdGVzLioqIEEgZm9sZGVyIHRoYXQgaGFzIG5vIGZvbGRlciBub3RlIGFuc3dlcnMgYG51bGxgLCBhbmQgc28gZG9lcyB0aGUgdmF1bHQgcm9vdCB1bmRlclxuICoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IChub3RoaW5nIGNhbiBzaXQgYmVzaWRlIGl0KS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZvbGRlciwgYW5kIG9wdGlvbmFsbHkgdGhlIHNldHVwIHRvIHJlc29sdmUgaXQgd2l0aC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgbm90ZSwgb3IgYG51bGxgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMpOiBudWxsIHwgVEZpbGUge1xuICBjb25zdCB7IGFwcCwgZm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbmZpZyA9IHBhcmFtcy5jb25maWcgPz8gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSk7XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJlbnRGb2xkZXJQYXRoID0gY29uZmlnLmxvY2F0aW9uID09PSBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyID8gZm9sZGVyLnBhcmVudD8ucGF0aCA6IGZvbGRlci5wYXRoO1xuICBpZiAocGFyZW50Rm9sZGVyUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub3RlTmFtZSA9IGNvbmZpZy5yZXNvbHZlTmFtZShmb2xkZXIpLnRyaW0oKTtcbiAgaWYgKCFub3RlTmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgY29uZmlnLmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobm9ybWFsaXplUGF0aChqb2luKHBhcmVudEZvbGRlclBhdGgsIGAke25vdGVOYW1lfS4ke2V4dGVuc2lvbn1gKSkpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGludG8gYSBjb25jcmV0ZSBmb2xkZXItbm90ZSBzZXR1cC5cbiAqXG4gKiBgZm9sZGVyLW5vdGVzYCcgYHZhdWx0Rm9sZGVyYCBzdG9yYWdlIChldmVyeSBmb2xkZXIgbm90ZSBwb29sZWQgaW4gb25lIGNlbnRyYWwgZm9sZGVyKSBoYXMgbm9cbiAqIGNvdW50ZXJwYXJ0IGhlcmUgYW5kIGZhbGxzIGJhY2sgcmF0aGVyIHRoYW4gZ3Vlc3Npbmc6IHdpdGggdGhlIG5vdGVzIHBvb2xlZCwgdGhlIG5vdGUgYmVsb25naW5nIHRvIGFcbiAqIGZvbGRlciBpcyBubyBsb25nZXIgZGVyaXZhYmxlIGZyb20gdGhhdCBmb2xkZXIncyBwYXRoIGFsb25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc2V0dXAsIGFuZCB0aGUgYXBwIHRvIHJlYWQgdGhlIGluc3RhbGxlZCBwbHVnaW4gZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBzZXR1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMpOiBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBleHRlbnNpb25zLFxuICAgIGlzSGlkZGVuLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlc29sdmVOYW1lXG4gIH0gPSBwYXJhbXM7XG5cbiAgcmV0dXJuIGxvY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24gIT09IEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvXG4gICAgPyB7XG4gICAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKGV4dGVuc2lvbnMgPz8gW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSksXG4gICAgICBpc0hpZGRlbjogaXNIaWRkZW4gPz8gZmFsc2UsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlc29sdmVOYW1lOiByZXNvbHZlTmFtZSA/PyBGQUxMQkFDS19GT0xERVJfTk9URV9DT05GSUcucmVzb2x2ZU5hbWVcbiAgICB9XG4gICAgOiByZWFkRm9sZGVyTm90ZXNQbHVnaW5Db25maWcoYXBwKSA/PyBGQUxMQkFDS19GT0xERVJfTk9URV9DT05GSUc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBleHRlbnNpb25zIHRoZSB3YXkgYGZvbGRlci1ub3Rlc2AgZG9lcyBiZWZvcmUgaXQgbG9va3MgYSBmaWxlIHVwOiBubyBsZWFkaW5nIGRvdCwgbG93ZXItY2FzZSxcbiAqIGBFeGNhbGlkcmF3YCB0cmVhdGVkIGFzIE1hcmtkb3duLCBibGFua3MgZHJvcHBlZCwgZHVwbGljYXRlcyBjb2xsYXBzZWQgd2hpbGUga2VlcGluZyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSdzXG4gKiBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9ucyAtIFRoZSBleHRlbnNpb25zIGFzIGNvbmZpZ3VyZWQuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBleHRlbnNpb25zLCBpbiByZXNvbHV0aW9uIG9yZGVyLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFeHRlbnNpb25zKGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBjb25zdCBub3JtYWxpemVkRXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnNcbiAgICAubWFwKChleHRlbnNpb24pID0+IGV4dGVuc2lvbi50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eXFwuLywgJycpKVxuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uID09PSBFWENBTElEUkFXX0ZJTEVfRVhURU5TSU9OID8gTUFSS0RPV05fRklMRV9FWFRFTlNJT04gOiBleHRlbnNpb24pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KG5vcm1hbGl6ZWRFeHRlbnNpb25zKV07XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4ncyBvd24gY29uZmlndXJhdGlvbiwgaWYgaXQgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIHRoZSB3YXlcbiAqIGl0IGRvY3VtZW50cy5cbiAqXG4gKiBFdmVyeSB2YWx1ZSBpcyByZWFkIGFzIGB1bmtub3duYCBhbmQgY2hlY2tlZCwgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgaW50byBhIHNoYXBlOiB0aGlzIGlzIGFub3RoZXJcbiAqIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3Mgb2JqZWN0LCBzbyBhIHZlcnNpb24gdGhhdCByZW5hbWVzIG9yIGRyb3BzIGEga2V5IG11c3QgZGVncmFkZSB0byB0aGUgZmFsbGJhY2tcbiAqIGluc3RlYWQgb2YgdGhyb3dpbmcgaW5zaWRlIGEgY2xpY2sgaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIG9yIGBudWxsYCB3aGVuIHRoZSBwbHVnaW4gaXMgYWJzZW50LCBub3QgY29uZmlndXJlZCwgb3Igc2V0IHRvIGEgc3RvcmFnZVxuICogbG9jYXRpb24gd2l0aCBubyBjb3VudGVycGFydCBoZXJlLlxuICovXG5mdW5jdGlvbiByZWFkRm9sZGVyTm90ZXNQbHVnaW5Db25maWcoYXBwOiBBcHApOiBGb2xkZXJOb3RlQ29uZmlnIHwgbnVsbCB7XG4gIGNvbnN0IGZvbGRlck5vdGVzUGx1Z2luID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEZPTERFUl9OT1RFU19QTFVHSU5fSUQpO1xuICAvLyBOYXJyb3dlZCB3aXRoIGBpbmAgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgaW50byBhIHNoYXBlOiB0aGF0IGtlZXBzIGV2ZXJ5IHZhbHVlIGJlbG93IHR5cGVkIGB1bmtub3duYCxcbiAgLy8gd2hpY2ggaXMgZXhhY3RseSB3aGF0IGEgZm9yZWlnbiBwbHVnaW4ncyBwcml2YXRlIHNldHRpbmdzIGFyZS5cbiAgaWYgKCFmb2xkZXJOb3Rlc1BsdWdpbiB8fCAhKCdzZXR0aW5ncycgaW4gZm9sZGVyTm90ZXNQbHVnaW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3Rlc1NldHRpbmdzOiB1bmtub3duID0gZm9sZGVyTm90ZXNQbHVnaW4uc2V0dGluZ3M7XG4gIGlmICh0eXBlb2YgZm9sZGVyTm90ZXNTZXR0aW5ncyAhPT0gJ29iamVjdCcgfHwgZm9sZGVyTm90ZXNTZXR0aW5ncyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbG9jYXRpb24gPSB0b0ZvbGRlck5vdGVMb2NhdGlvbignc3RvcmFnZUxvY2F0aW9uJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5zdG9yYWdlTG9jYXRpb24gOiBudWxsKTtcbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyTm90ZU5hbWUgPSAnZm9sZGVyTm90ZU5hbWUnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLmZvbGRlck5vdGVOYW1lIDogbnVsbDtcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3RlTmFtZSAhPT0gJ3N0cmluZycgfHwgIWZvbGRlck5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlVHlwZSA9ICdmb2xkZXJOb3RlVHlwZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUgOiBudWxsO1xuICBjb25zdCBzdXBwb3J0ZWRGaWxlVHlwZXMgPSAnc3VwcG9ydGVkRmlsZVR5cGVzJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5zdXBwb3J0ZWRGaWxlVHlwZXMgOiBudWxsO1xuICBjb25zdCBpc0hpZGRlbiA9ICdoaWRlRm9sZGVyTm90ZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuaGlkZUZvbGRlck5vdGUgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLy8gSXRzIG93biByZXNvbHZlciB0cmllcyB0aGUgcHJpbWFyeSB0eXBlIGZpcnN0IGFuZCBldmVyeSBvdGhlciBzdXBwb3J0ZWQgdHlwZSBhZnRlciBpdCwgd2hpY2ggaXMgdGhlXG4gICAgLy8gb3JkZXIgcmVwcm9kdWNlZCBoZXJlLiBBbiB1bnVzYWJsZSBwYWlyIGxlYXZlcyBNYXJrZG93biwgdGhlIGV4dGVuc2lvbiBpdCBjYW5ub3QgYmUgY29uZmlndXJlZFxuICAgIC8vIHdpdGhvdXQuXG4gICAgZXh0ZW5zaW9uczogbm9ybWFsaXplRXh0ZW5zaW9ucyhbXG4gICAgICB0eXBlb2YgZm9sZGVyTm90ZVR5cGUgPT09ICdzdHJpbmcnID8gZm9sZGVyTm90ZVR5cGUgOiBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTixcbiAgICAgIC4uLihBcnJheS5pc0FycmF5KHN1cHBvcnRlZEZpbGVUeXBlcykgPyBzdXBwb3J0ZWRGaWxlVHlwZXMuZmlsdGVyKCh0eXBlOiB1bmtub3duKSA9PiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIDogW10pLFxuICAgICAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbiAgICBdKSxcbiAgICBpc0hpZGRlbjogaXNIaWRkZW4gPT09IHRydWUsXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT5cbiAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAkc3RyaW5nOiBmb2xkZXJOb3RlTmFtZSxcbiAgICAgICAgLy8gQSBmdW5jdGlvbiByZXBsYWNlciwgc28gYSBmb2xkZXIgbmFtZSBjb250YWluaW5nIGAkJmAgaXMgaW5zZXJ0ZWQgbGl0ZXJhbGx5LlxuICAgICAgICByZXBsYWNlcjogKCkgPT4gZm9sZGVyLm5hbWUsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBGT0xERVJfTk9URVNfRk9MREVSX05BTUVfVE9LRU5fUkVHX0VYUFxuICAgICAgfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBNYXBzIGBmb2xkZXItbm90ZXNgJyBgc3RvcmFnZUxvY2F0aW9uYCBvbnRvIHRoaXMgbGlicmFyeSdzIG93biBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3RvcmFnZUxvY2F0aW9uIC0gVGhlIHZhbHVlIHJlYWQgb3V0IG9mIHRoYXQgcGx1Z2luJ3Mgc2V0dGluZ3MuXG4gKiBAcmV0dXJucyBUaGUgbG9jYXRpb24sIG9yIGBudWxsYCBmb3IgYHZhdWx0Rm9sZGVyYCBhbmQgZm9yIGFueXRoaW5nIHRoYXQgaXMgbm90IG9uZSBvZiBpdHMgdmFsdWVzLlxuICovXG5mdW5jdGlvbiB0b0ZvbGRlck5vdGVMb2NhdGlvbihzdG9yYWdlTG9jYXRpb246IHVua25vd24pOiBGb2xkZXJOb3RlQ29uZmlnWydsb2NhdGlvbiddIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3RvcmFnZUxvY2F0aW9uKSB7XG4gICAgY2FzZSAnaW5zaWRlRm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5JbnNpZGVGb2xkZXI7XG4gICAgfVxuICAgIGNhc2UgJ3BhcmVudEZvbGRlcic6IHtcbiAgICAgIHJldHVybiBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLGtCQUFxQjtBQUNyQixvQkFBMkI7QUFDM0Isc0JBQThCO0FBRTlCLHlCQUdPO0FBV0EsSUFBSyxxQkFBTCxrQkFBS0Esd0JBQUw7QUFLTCxFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFNZixFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFyQkwsU0FBQUE7QUFBQSxHQUFBO0FBNEpMLE1BQU0seUJBQXlCO0FBTXRDLE1BQU0seUNBQXlDO0FBTS9DLE1BQU0sNEJBQTRCO0FBT2xDLE1BQU0sOEJBQWdE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
|
|
@@ -73,7 +73,7 @@ export interface FolderNoteConfig {
|
|
|
73
73
|
* @param folder - The folder whose note is being named.
|
|
74
74
|
* @returns The note's name; an empty (or blank) name means the folder has no folder note.
|
|
75
75
|
*/
|
|
76
|
-
resolveName: (folder: TFolder) => string;
|
|
76
|
+
readonly resolveName: (folder: TFolder) => string;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
79
|
* Parameters for {@link getFolderNoteFolder}.
|
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -41,8 +41,8 @@ ensureBrowserProcess();
|
|
|
41
41
|
__isPatched: true
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
|
-
function extractDefault(module) {
|
|
45
|
-
return module && module.__esModule && "default" in module ? module.default : module;
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
46
|
}
|
|
47
47
|
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
48
|
"@codemirror/autocomplete",
|
|
@@ -84,9 +84,9 @@ ensureBrowserProcess();
|
|
|
84
84
|
return process;
|
|
85
85
|
}
|
|
86
86
|
} else {
|
|
87
|
-
const module = originalRequire?.(id);
|
|
88
|
-
if (module) {
|
|
89
|
-
return extractDefault(module);
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
@@ -138,4 +138,4 @@ function toFrontmatterLinkCacheWithOffsets(reference) {
|
|
|
138
138
|
isFrontmatterLinkCacheWithOffsets,
|
|
139
139
|
toFrontmatterLinkCacheWithOffsets
|
|
140
140
|
});
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB0eXBlIGZvciBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG4vKipcbiAqIFR5cGUgZm9yIGZyb250bWF0dGVyIGxpbmsgY2FjaGUgd2l0aCBvZmZzZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMgZXh0ZW5kcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gIC8qKlxuICAgKiBBbiBlbmQgb2Zmc2V0IG9mIHRoZSBsaW5rIGluIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGVuZE9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0YXJ0IG9mZnNldCBvZiB0aGUgbGluayBpbiB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBzdGFydE9mZnNldDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIHtcbiAgaWYgKCFpc0Zyb250bWF0dGVyTGlua0NhY2hlKHJlZmVyZW5jZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzID0gcmVmZXJlbmNlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cz47XG4gIHJldHVybiBmcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLnN0YXJ0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgZnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cy5lbmRPZmZzZXQgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUgdG8gYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlIHdpdGggb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMocmVmZXJlbmNlOiBGcm9udG1hdHRlckxpbmtDYWNoZSk6IEZyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKHJlZmVyZW5jZSlcbiAgICA/IHJlZmVyZW5jZVxuICAgIDoge1xuICAgICAgLi4ucmVmZXJlbmNlLFxuICAgICAgZW5kT2Zmc2V0OiByZWZlcmVuY2Uub3JpZ2luYWwubGVuZ3RoLFxuICAgICAgc3RhcnRPZmZzZXQ6IDBcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSw2QkFBdUM7QUF1QmhDLFNBQVMsa0NBQWtDLFdBQW9FO0FBQ3BILE1BQUksS0FBQywrQ0FBdUIsU0FBUyxHQUFHO0FBQ3RDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxrQ0FBa0M7QUFDeEMsU0FBTyxnQ0FBZ0MsZ0JBQWdCLFVBQWEsZ0NBQWdDLGNBQWM7QUFDcEg7QUFRTyxTQUFTLGtDQUFrQyxXQUFrRTtBQUNsSCxTQUFPLGtDQUFrQyxTQUFTLElBQzlDLFlBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxJQUNILFdBQVcsVUFBVSxTQUFTO0FBQUEsSUFDOUIsYUFBYTtBQUFBLEVBQ2Y7QUFDSjsiLCJuYW1lcyI6W119
|
|
@@ -12,11 +12,11 @@ export interface FrontmatterLinkCacheWithOffsets extends FrontmatterLinkCache {
|
|
|
12
12
|
/**
|
|
13
13
|
* An end offset of the link in the property value.
|
|
14
14
|
*/
|
|
15
|
-
endOffset: number;
|
|
15
|
+
readonly endOffset: number;
|
|
16
16
|
/**
|
|
17
17
|
* A start offset of the link in the property value.
|
|
18
18
|
*/
|
|
19
|
-
startOffset: number;
|
|
19
|
+
readonly startOffset: number;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Checks if the reference is a frontmatter link cache with offsets.
|