obsidian-dev-utils 84.6.1 → 85.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/CHANGELOG.md +16 -0
- package/dist/dev/main.js +32702 -0
- package/dist/dev/manifest.json +9 -0
- package/dist/lib/cjs/async-events.cjs +4 -1
- package/dist/lib/cjs/async-events.d.cts +4 -1
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/active-file-provider.cjs +1 -1
- package/dist/lib/cjs/obsidian/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/obsidian/bases-view-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/bases-view-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +1 -1
- package/dist/lib/cjs/obsidian/case-insensitive-file-index.d.cts +1 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +16 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +20 -5
- package/dist/lib/cjs/obsidian/command-handlers/index.cjs +6 -3
- package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +7 -1
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +8 -2
- package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs +183 -0
- package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.d.cts +54 -0
- package/dist/lib/cjs/obsidian/command-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/command-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/abort-signal-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.d.cts +9 -2
- package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/embed-extensions-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +4 -1
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.d.cts +4 -1
- package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +8 -2
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +13 -4
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +12 -3
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +8 -2
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +29 -8
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +34 -7
- package/dist/lib/cjs/obsidian/data-handler.cjs +1 -1
- package/dist/lib/cjs/obsidian/data-handler.d.cts +1 -1
- package/dist/lib/cjs/obsidian/editor-extension-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/editor-extension-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/editor-suggest-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/editor-suggest-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/extensions-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/extensions-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/hover-link-source-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/hover-link-source-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/link.cjs +93 -244
- package/dist/lib/cjs/obsidian/link.d.cts +98 -148
- package/dist/lib/cjs/obsidian/loop.cjs +2 -2
- package/dist/lib/cjs/obsidian/loop.d.cts +17 -3
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.cjs +4 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +4 -1
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +141 -43
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +171 -9
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +7 -4
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +8 -1
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.cjs +4 -1
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.d.cts +4 -1
- package/dist/lib/cjs/obsidian/parse-link.cjs +476 -0
- package/dist/lib/cjs/obsidian/parse-link.d.cts +268 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +1 -1
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +1 -1
- package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/resource-lock.cjs +155 -20
- package/dist/lib/cjs/obsidian/resource-lock.d.cts +93 -22
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +28 -16
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +17 -5
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +4 -1
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +5 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +11 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +12 -3
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +8 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +9 -3
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +8 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +9 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/vault-transaction.cjs +4 -1
- package/dist/lib/cjs/obsidian/vault-transaction.d.cts +4 -1
- package/dist/lib/cjs/obsidian/vault.cjs +2 -2
- package/dist/lib/cjs/obsidian/view-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/view-registrar.d.cts +1 -1
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +4 -2
- package/dist/lib/cjs/transformers/group-transformer.cjs +1 -1
- package/dist/lib/cjs/transformers/group-transformer.d.cts +1 -1
- package/dist/lib/cjs/url.cjs +14 -3
- package/dist/lib/cjs/url.d.cts +15 -0
- package/dist/lib/esm/async-events.d.mts +4 -1
- package/dist/lib/esm/async-events.mjs +4 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/obsidian/active-file-provider.mjs +1 -1
- package/dist/lib/esm/obsidian/bases-view-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/bases-view-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/case-insensitive-file-index.d.mts +1 -1
- package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +20 -5
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +16 -1
- package/dist/lib/esm/obsidian/command-handlers/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/index.mjs +4 -2
- package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.d.mts +8 -2
- package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.mjs +7 -1
- package/dist/lib/esm/obsidian/command-handlers/unlock-active-note-command-handler.d.mts +54 -0
- package/dist/lib/esm/obsidian/command-handlers/unlock-active-note-command-handler.mjs +75 -0
- package/dist/lib/esm/obsidian/command-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/command-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/components/abort-signal-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/async-error-handler-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/case-insensitive-file-index-component.d.mts +9 -2
- package/dist/lib/esm/obsidian/components/case-insensitive-file-index-component.mjs +7 -1
- package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/console-debug-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/embed-extensions-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/embed-extensions-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/generate-markdown-link-default-params-component.d.mts +4 -1
- package/dist/lib/esm/obsidian/components/generate-markdown-link-default-params-component.mjs +4 -1
- package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/plugin-context-component.d.mts +8 -2
- package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +7 -1
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +12 -3
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +13 -4
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.d.mts +8 -2
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +7 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +34 -7
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +30 -9
- package/dist/lib/esm/obsidian/data-handler.d.mts +1 -1
- package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/editor-extension-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/editor-extension-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/editor-suggest-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/editor-suggest-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/extensions-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/extensions-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/hover-link-source-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/hover-link-source-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.mjs +3 -1
- package/dist/lib/esm/obsidian/link.d.mts +98 -148
- package/dist/lib/esm/obsidian/link.mjs +90 -222
- package/dist/lib/esm/obsidian/loop.d.mts +17 -3
- package/dist/lib/esm/obsidian/loop.mjs +2 -2
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +4 -1
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +4 -1
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +171 -9
- package/dist/lib/esm/obsidian/metadata-cache.mjs +142 -42
- package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +8 -1
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +7 -4
- package/dist/lib/esm/obsidian/obsidian-protocol-handler-registrar.d.mts +4 -1
- package/dist/lib/esm/obsidian/obsidian-protocol-handler-registrar.mjs +4 -1
- package/dist/lib/esm/obsidian/parse-link.d.mts +268 -0
- package/dist/lib/esm/obsidian/parse-link.mjs +353 -0
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +1 -1
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin-cli-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/plugin-cli-handler-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/resource-lock.d.mts +93 -22
- package/dist/lib/esm/obsidian/resource-lock.mjs +155 -20
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +17 -5
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +28 -16
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +5 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +4 -1
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +12 -3
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +11 -2
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +9 -3
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +8 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +9 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/vault-transaction.d.mts +4 -1
- package/dist/lib/esm/obsidian/vault-transaction.mjs +4 -1
- package/dist/lib/esm/obsidian/vault.mjs +2 -2
- package/dist/lib/esm/obsidian/view-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +4 -2
- package/dist/lib/esm/transformers/group-transformer.d.mts +1 -1
- package/dist/lib/esm/transformers/group-transformer.mjs +1 -1
- package/dist/lib/esm/url.d.mts +15 -0
- package/dist/lib/esm/url.mjs +11 -2
- package/obsidian/command-handlers/unlock-active-note-command-handler/package.json +6 -0
- package/obsidian/parse-link/package.json +6 -0
- package/package.json +7 -7
|
@@ -35,6 +35,9 @@ import {
|
|
|
35
35
|
} from "./vault.mjs";
|
|
36
36
|
const DEFAULT_STAGING_FOLDER_PATH = ".obsidian-dev-utils-temp";
|
|
37
37
|
class VaultTransaction {
|
|
38
|
+
/**
|
|
39
|
+
* The Obsidian application instance the transaction mutates.
|
|
40
|
+
*/
|
|
38
41
|
app;
|
|
39
42
|
hasStagingFolder = false;
|
|
40
43
|
mutationBypass = null;
|
|
@@ -270,4 +273,4 @@ class VaultTransaction {
|
|
|
270
273
|
export {
|
|
271
274
|
VaultTransaction
|
|
272
275
|
};
|
|
273
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHN5bmNPcGVuRWRpdG9yQnVmZmVyc0ZvclBhdGggfSBmcm9tICcuL2VkaXRvci50cyc7XG5pbXBvcnQge1xuICBnZXRBYnN0cmFjdEZpbGVPck51bGwsXG4gIGdldFBhdGhcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBjcmVhdGVGb2xkZXJTYWZlLFxuICBwcm9jZXNzLFxuICByZWFkU2FmZSxcbiAgcmVuYW1lU2FmZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuY29uc3QgREVGQVVMVF9TVEFHSU5HX0ZPTERFUl9QQVRIID0gJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBWYXVsdFRyYW5zYWN0aW9ufSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXVsdFRyYW5zYWN0aW9uQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuIGFtYmllbnQgbXV0YXRpb24tYnlwYXNzIHNjb3BlIGNvdmVyaW5nIHRoZSBwYXRocyB0aGlzIHRyYW5zYWN0aW9uIHRvdWNoZXMsIHNvIHRoZVxuICAgKiB0cmFuc2FjdGlvbidzIG93biB3cml0ZXMgcGFzcyBhIGBzaG91bGRCbG9ja011dGF0aW9uc2AgbG9jayB0aGF0IHRoZSBvd25pbmcgb3BlcmF0aW9uIGhvbGRzLiBJdCBpc1xuICAgKiBjYWxsZWQgb25jZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBjb25zdHJ1Y3RlZCwgYW5kIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWRcbiAgICogd2hlbiB0aGUgdHJhbnNhY3Rpb24gc2V0dGxlcyAob24gYGNvbW1pdGAsIGByb2xsYmFja2AsIG9yIGBhd2FpdCB1c2luZ2AgZGlzcG9zYWwpIFx1MjAxNCBzbyB0aGUgYnlwYXNzXG4gICAqIHN0YXlzIGFjdGl2ZSB0aHJvdWdoIHJvbGxiYWNrLCBpbmNsdWRpbmcgYXV0by1yb2xsYmFjaywgd2hpY2ggYSBjYWxsZXIgbWFuYWdpbmcgdGhlIHNjb3BlIGl0c2VsZlxuICAgKiBjb3VsZCBlYXNpbHkgZ2V0IHdyb25nLiBUeXBpY2FsbHlcbiAgICogYCgpID0+IHJlc291cmNlTG9ja0NvbXBvbmVudC5ieXBhc3NCbG9ja2VkTXV0YXRpb25zKGxvY2tlZFBhdGhzT3JGaWxlcylgLiBPbWl0IGl0IGZvciB0aGUgY29tbW9uXG4gICAqIHN0YW5kYWxvbmUgY2FzZSB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb3BlcmF0ZXMgb24gdW5sb2NrZWQgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgZW5kcyB0aGUgYnlwYXNzIHNjb3BlLlxuICAgKi9cbiAgb3Blbk11dGF0aW9uQnlwYXNzPyh0aGlzOiB2b2lkKTogRGlzcG9zYWJsZTtcblxuICAvKipcbiAgICogVGhlIGRvdC1wcmVmaXhlZCBmb2xkZXIgdGhhdCBzb2Z0LWRlbGV0ZWQgcmVzb3VyY2VzIGFyZSBtb3ZlZCBpbnRvIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBpc1xuICAgKiBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suIEl0IG11c3Qgc3RheSBgLmAtcHJlZml4ZWQgc28gT2JzaWRpYW4gbGVhdmVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzXG4gICAqIHVudHJhY2tlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcub2JzaWRpYW4tZGV2LXV0aWxzLXRlbXAnYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2luZ0ZvbGRlclBhdGg/OiBzdHJpbmc7XG59XG5cbnR5cGUgVHJhbnNhY3Rpb25TdGF0ZSA9ICdjb21taXR0ZWQnIHwgJ29wZW4nIHwgJ3JvbGxlZEJhY2snO1xuXG5pbnRlcmZhY2UgVW5kb1N0ZXAge1xuICB1bmRvKHRoaXM6IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgcmV2ZXJzaWJsZSBsb2cgb2YgdmF1bHQgbXV0YXRpb25zLiBQZXJmb3JtIG11dGF0aW9ucyB0aHJvdWdoIGl0cyBtZXRob2RzLCB0aGVuIGNhbGxcbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gb24gc3VjY2VzcyBvciB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gb24gZmFpbHVyZS4gSXQgaXNcbiAqIGBhd2FpdCB1c2luZ2AtZnJpZW5kbHk6IGlmIG5laXRoZXIgaXMgY2FsbGVkLCBkaXNwb3NhbCByb2xscyBiYWNrLlxuICovXG5leHBvcnQgY2xhc3MgVmF1bHRUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgaGFzU3RhZ2luZ0ZvbGRlciA9IGZhbHNlO1xuICBwcml2YXRlIG11dGF0aW9uQnlwYXNzOiBEaXNwb3NhYmxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2VkVHJhc2hQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHN0YXRlOiBUcmFuc2FjdGlvblN0YXRlID0gJ29wZW4nO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuZG9TdGVwczogVW5kb1N0ZXBbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHZhdWx0IHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBWYXVsdFRyYW5zYWN0aW9uQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5zdGFnaW5nRm9sZGVyUGF0aCA9IHBhcmFtcy5zdGFnaW5nRm9sZGVyUGF0aCA/PyBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEg7XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IHBhcmFtcy5vcGVuTXV0YXRpb25CeXBhc3M/LigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyB0aGUgdHJhbnNhY3Rpb246IGZpbmFsaXplcyBzb2Z0LWRlbGV0ZXMgYnkgdHJhc2hpbmcgdGhlIHN0YWdlZCByZXNvdXJjZXMgZm9yIHJlYWwgYW5kXG4gICAqIHJlbW92ZXMgdGhlIHN0YWdpbmcgZm9sZGVyLiBBZnRlciB0aGlzIHRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIG11dGF0ZWQgb3Igcm9sbGVkIGJhY2suXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tbWl0IGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21taXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjb21taXR0ZWQnO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLmFwcC52YXVsdC5hZGFwdGVyO1xuICAgIGZvciAoY29uc3Qgc3RhZ2VkUGF0aCBvZiB0aGlzLnN0YWdlZFRyYXNoUGF0aHMpIHtcbiAgICAgIGNvbnN0IHdhc1RyYXNoZWRUb1N5c3RlbSA9IGF3YWl0IGFkYXB0ZXIudHJhc2hTeXN0ZW0oc3RhZ2VkUGF0aCk7XG4gICAgICBpZiAoIXdhc1RyYXNoZWRUb1N5c3RlbSkge1xuICAgICAgICBhd2FpdCBhZGFwdGVyLnRyYXNoTG9jYWwoc3RhZ2VkUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudCwgcmVjb3JkaW5nIGl0cyByZW1vdmFsIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHtAbGluayBURmlsZX0uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGUocGF0aCwgZGF0YSk7XG4gICAgY29uc3QgY3JlYXRlZFBhdGggPSBmaWxlLnBhdGg7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUoY3JlYXRlZFBhdGgpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb2xkZXIgKGluY2x1ZGluZyBtaXNzaW5nIGFuY2VzdG9ycyksIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS4gQSBuby1vcCBpZlxuICAgKiB0aGUgZm9sZGVyIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlRm9sZGVyKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IHdhc0NyZWF0ZWQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAod2FzQ3JlYXRlZCkge1xuICAgICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFyZERlbGV0ZShwYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0gbmV3Q29udGVudCAtIFRoZSBuZXcgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIG1vZGlmaWVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vZGlmeShwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucHJvY2VzcyhwYXRoT3JGaWxlLCAoKSA9PiBuZXdDb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBjb250ZW50IG9mIGEgZmlsZSwgY2FwdHVyaW5nIHRoZSBvbGQgY29udGVudCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBwcm9jZXNzLlxuICAgKiBAcGFyYW0gbmV3Q29udGVudFByb3ZpZGVyIC0gTWFwcyB0aGUgY3VycmVudCBjb250ZW50IHRvIHRoZSBuZXcgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIHByb2Nlc3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcm9jZXNzKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSwgbmV3Q29udGVudFByb3ZpZGVyOiAoY29udGVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gICAgY29uc3Qgb2xkQ29udGVudCA9IGF3YWl0IHJlYWRTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBuZXdDb250ZW50UHJvdmlkZXI6ICh7IGNvbnRlbnQgfSkgPT4gbmV3Q29udGVudFByb3ZpZGVyKGNvbnRlbnQpLFxuICAgICAgcGF0aE9yRmlsZTogcGF0aCxcbiAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgIH0pO1xuICAgIC8vIFJlYWNoaW5nIHRoaXMgbGluZSBtZWFucyBgcHJvY2Vzc2Agc3VjY2VlZGVkLiBBIG1pc3NpbmcgZmlsZSB3b3VsZCBoYXZlIHRocm93biBhYm92ZSAoaXRzXG4gICAgLy8gYHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlYCBkZWZhdWx0KSwgc28gdGhlIHByZS1pbWFnZSB3YXMgY2FwdHVyZWQgYW5kIGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICBhc3NlcnROb25OdWxsYWJsZShvbGRDb250ZW50KTtcbiAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHByb2Nlc3Moe1xuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBuZXdDb250ZW50UHJvdmlkZXI6IG9sZENvbnRlbnQsXG4gICAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gVW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxvQ0FBb0M7QUFDN0M7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSw4QkFBOEI7QUE4QzdCLE1BQU0saUJB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
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHN5bmNPcGVuRWRpdG9yQnVmZmVyc0ZvclBhdGggfSBmcm9tICcuL2VkaXRvci50cyc7XG5pbXBvcnQge1xuICBnZXRBYnN0cmFjdEZpbGVPck51bGwsXG4gIGdldFBhdGhcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBjcmVhdGVGb2xkZXJTYWZlLFxuICBwcm9jZXNzLFxuICByZWFkU2FmZSxcbiAgcmVuYW1lU2FmZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuY29uc3QgREVGQVVMVF9TVEFHSU5HX0ZPTERFUl9QQVRIID0gJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBWYXVsdFRyYW5zYWN0aW9ufSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXVsdFRyYW5zYWN0aW9uQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuIGFtYmllbnQgbXV0YXRpb24tYnlwYXNzIHNjb3BlIGNvdmVyaW5nIHRoZSBwYXRocyB0aGlzIHRyYW5zYWN0aW9uIHRvdWNoZXMsIHNvIHRoZVxuICAgKiB0cmFuc2FjdGlvbidzIG93biB3cml0ZXMgcGFzcyBhIGBzaG91bGRCbG9ja011dGF0aW9uc2AgbG9jayB0aGF0IHRoZSBvd25pbmcgb3BlcmF0aW9uIGhvbGRzLiBJdCBpc1xuICAgKiBjYWxsZWQgb25jZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBjb25zdHJ1Y3RlZCwgYW5kIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWRcbiAgICogd2hlbiB0aGUgdHJhbnNhY3Rpb24gc2V0dGxlcyAob24gYGNvbW1pdGAsIGByb2xsYmFja2AsIG9yIGBhd2FpdCB1c2luZ2AgZGlzcG9zYWwpIFx1MjAxNCBzbyB0aGUgYnlwYXNzXG4gICAqIHN0YXlzIGFjdGl2ZSB0aHJvdWdoIHJvbGxiYWNrLCBpbmNsdWRpbmcgYXV0by1yb2xsYmFjaywgd2hpY2ggYSBjYWxsZXIgbWFuYWdpbmcgdGhlIHNjb3BlIGl0c2VsZlxuICAgKiBjb3VsZCBlYXNpbHkgZ2V0IHdyb25nLiBUeXBpY2FsbHlcbiAgICogYCgpID0+IHJlc291cmNlTG9ja0NvbXBvbmVudC5ieXBhc3NCbG9ja2VkTXV0YXRpb25zKGxvY2tlZFBhdGhzT3JGaWxlcylgLiBPbWl0IGl0IGZvciB0aGUgY29tbW9uXG4gICAqIHN0YW5kYWxvbmUgY2FzZSB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb3BlcmF0ZXMgb24gdW5sb2NrZWQgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgZW5kcyB0aGUgYnlwYXNzIHNjb3BlLlxuICAgKi9cbiAgb3Blbk11dGF0aW9uQnlwYXNzPyh0aGlzOiB2b2lkKTogRGlzcG9zYWJsZTtcblxuICAvKipcbiAgICogVGhlIGRvdC1wcmVmaXhlZCBmb2xkZXIgdGhhdCBzb2Z0LWRlbGV0ZWQgcmVzb3VyY2VzIGFyZSBtb3ZlZCBpbnRvIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBpc1xuICAgKiBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suIEl0IG11c3Qgc3RheSBgLmAtcHJlZml4ZWQgc28gT2JzaWRpYW4gbGVhdmVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzXG4gICAqIHVudHJhY2tlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcub2JzaWRpYW4tZGV2LXV0aWxzLXRlbXAnYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2luZ0ZvbGRlclBhdGg/OiBzdHJpbmc7XG59XG5cbnR5cGUgVHJhbnNhY3Rpb25TdGF0ZSA9ICdjb21taXR0ZWQnIHwgJ29wZW4nIHwgJ3JvbGxlZEJhY2snO1xuXG5pbnRlcmZhY2UgVW5kb1N0ZXAge1xuICB1bmRvKHRoaXM6IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgcmV2ZXJzaWJsZSBsb2cgb2YgdmF1bHQgbXV0YXRpb25zLiBQZXJmb3JtIG11dGF0aW9ucyB0aHJvdWdoIGl0cyBtZXRob2RzLCB0aGVuIGNhbGxcbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gb24gc3VjY2VzcyBvciB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gb24gZmFpbHVyZS4gSXQgaXNcbiAqIGBhd2FpdCB1c2luZ2AtZnJpZW5kbHk6IGlmIG5laXRoZXIgaXMgY2FsbGVkLCBkaXNwb3NhbCByb2xscyBiYWNrLlxuICovXG5leHBvcnQgY2xhc3MgVmF1bHRUcmFuc2FjdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UgdGhlIHRyYW5zYWN0aW9uIG11dGF0ZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgaGFzU3RhZ2luZ0ZvbGRlciA9IGZhbHNlO1xuICBwcml2YXRlIG11dGF0aW9uQnlwYXNzOiBEaXNwb3NhYmxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2VkVHJhc2hQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHN0YXRlOiBUcmFuc2FjdGlvblN0YXRlID0gJ29wZW4nO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuZG9TdGVwczogVW5kb1N0ZXBbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHZhdWx0IHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBWYXVsdFRyYW5zYWN0aW9uQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5zdGFnaW5nRm9sZGVyUGF0aCA9IHBhcmFtcy5zdGFnaW5nRm9sZGVyUGF0aCA/PyBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEg7XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IHBhcmFtcy5vcGVuTXV0YXRpb25CeXBhc3M/LigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyB0aGUgdHJhbnNhY3Rpb246IGZpbmFsaXplcyBzb2Z0LWRlbGV0ZXMgYnkgdHJhc2hpbmcgdGhlIHN0YWdlZCByZXNvdXJjZXMgZm9yIHJlYWwgYW5kXG4gICAqIHJlbW92ZXMgdGhlIHN0YWdpbmcgZm9sZGVyLiBBZnRlciB0aGlzIHRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIG11dGF0ZWQgb3Igcm9sbGVkIGJhY2suXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tbWl0IGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21taXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjb21taXR0ZWQnO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLmFwcC52YXVsdC5hZGFwdGVyO1xuICAgIGZvciAoY29uc3Qgc3RhZ2VkUGF0aCBvZiB0aGlzLnN0YWdlZFRyYXNoUGF0aHMpIHtcbiAgICAgIGNvbnN0IHdhc1RyYXNoZWRUb1N5c3RlbSA9IGF3YWl0IGFkYXB0ZXIudHJhc2hTeXN0ZW0oc3RhZ2VkUGF0aCk7XG4gICAgICBpZiAoIXdhc1RyYXNoZWRUb1N5c3RlbSkge1xuICAgICAgICBhd2FpdCBhZGFwdGVyLnRyYXNoTG9jYWwoc3RhZ2VkUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudCwgcmVjb3JkaW5nIGl0cyByZW1vdmFsIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHtAbGluayBURmlsZX0uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGUocGF0aCwgZGF0YSk7XG4gICAgY29uc3QgY3JlYXRlZFBhdGggPSBmaWxlLnBhdGg7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUoY3JlYXRlZFBhdGgpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb2xkZXIgKGluY2x1ZGluZyBtaXNzaW5nIGFuY2VzdG9ycyksIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS4gQSBuby1vcCBpZlxuICAgKiB0aGUgZm9sZGVyIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlRm9sZGVyKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IHdhc0NyZWF0ZWQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAod2FzQ3JlYXRlZCkge1xuICAgICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFyZERlbGV0ZShwYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0gbmV3Q29udGVudCAtIFRoZSBuZXcgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIG1vZGlmaWVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vZGlmeShwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucHJvY2VzcyhwYXRoT3JGaWxlLCAoKSA9PiBuZXdDb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBjb250ZW50IG9mIGEgZmlsZSwgY2FwdHVyaW5nIHRoZSBvbGQgY29udGVudCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBwcm9jZXNzLlxuICAgKiBAcGFyYW0gbmV3Q29udGVudFByb3ZpZGVyIC0gTWFwcyB0aGUgY3VycmVudCBjb250ZW50IHRvIHRoZSBuZXcgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIHByb2Nlc3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcm9jZXNzKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSwgbmV3Q29udGVudFByb3ZpZGVyOiAoY29udGVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gICAgY29uc3Qgb2xkQ29udGVudCA9IGF3YWl0IHJlYWRTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBuZXdDb250ZW50UHJvdmlkZXI6ICh7IGNvbnRlbnQgfSkgPT4gbmV3Q29udGVudFByb3ZpZGVyKGNvbnRlbnQpLFxuICAgICAgcGF0aE9yRmlsZTogcGF0aCxcbiAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgIH0pO1xuICAgIC8vIFJlYWNoaW5nIHRoaXMgbGluZSBtZWFucyBgcHJvY2Vzc2Agc3VjY2VlZGVkLiBBIG1pc3NpbmcgZmlsZSB3b3VsZCBoYXZlIHRocm93biBhYm92ZSAoaXRzXG4gICAgLy8gYHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlYCBkZWZhdWx0KSwgc28gdGhlIHByZS1pbWFnZSB3YXMgY2FwdHVyZWQgYW5kIGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICBhc3NlcnROb25OdWxsYWJsZShvbGRDb250ZW50KTtcbiAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHByb2Nlc3Moe1xuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBuZXdDb250ZW50UHJvdmlkZXI6IG9sZENvbnRlbnQsXG4gICAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gVW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxvQ0FBb0M7QUFDN0M7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtB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
|
|
@@ -355,7 +355,7 @@ async function process(params) {
|
|
|
355
355
|
const abortController = new AbortController();
|
|
356
356
|
fullOptions.abortSignal = abortSignalAny(fullOptions.abortSignal, abortController.signal);
|
|
357
357
|
const path = getPath(app, pathOrFile);
|
|
358
|
-
const _lock = __using(_stack, resourceLockComponent?.lockForPath(pathOrFile));
|
|
358
|
+
const _lock = __using(_stack, resourceLockComponent?.lockForPath({ operationName: "Process note", pathOrFile }));
|
|
359
359
|
await retryWithTimeoutNotice({
|
|
360
360
|
async operationFn(abortSignal) {
|
|
361
361
|
abortSignal.throwIfAborted();
|
|
@@ -525,4 +525,4 @@ export {
|
|
|
525
525
|
saveNote,
|
|
526
526
|
trashSafe
|
|
527
527
|
};
|
|
528
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIExpc3RlZEZpbGVzXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aCxcbiAgVmlld1R5cGVcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIFBhdGhPckZpbGUsXG4gIFBhdGhPckZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxBbnkgfSBmcm9tICcuLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBzdHJpY3RQcm94eSB9IGZyb20gJy4uL3N0cmljdC1wcm94eS50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXROb3RpY2UgfSBmcm9tICcuL2FzeW5jLXdpdGgtbm90aWNlLnRzJztcbmltcG9ydCB7XG4gIGFzRmlsZSxcbiAgYXNGb2xkZXIsXG4gIEZpbGVTeXN0ZW1UeXBlLFxuICBnZXRBYnN0cmFjdEZpbGUsXG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZVN5c3RlbVR5cGUsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlLFxuICBpc05vdGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRBcmdzIHtcbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3B5U2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb3IgZmlsZSB0byBjb3B5LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRTYWZlUmVuYW1lUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2FmZVJlbmFtZVBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGFic3RyYWN0IGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJlbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckFic3RyYWN0RmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnZva2VXaXRoRmlsZVN5c3RlbUxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVdpdGhGaWxlU3lzdGVtTG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqL1xuICBmbih0aGlzOiB2b2lkLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGZpbGUgc3lzdGVtIGxvY2sgb2YuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0NoaWxkT3JTZWxmfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0NoaWxkT3JTZWxmUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjaGlsZCBvciBzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIHBhcmVudCBvciBzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50UGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0NoaWxkfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0NoaWxkUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjaGlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoaWxkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBwYXJlbnQuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIHJlc291cmNlLWxvY2sgY29tcG9uZW50IHVzZWQgdG8gbG9jayB0aGUgZmlsZSdzIGVkaXRvciByZWFkLW9ubHkgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiBwcm9jZXNzaW5nLiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgb3BlcmF0aW9uLWxldmVsIGxvY2tcbiAgICogb24gdGhlIHNhbWUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbCB8IFJlc291cmNlTG9ja0NvbXBvbmVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmYWlsIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1BhcmFtcyBleHRlbmRzIFByb2Nlc3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSwgdHlwaWNhbGx5IHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSB2YWx1ZSBwcm92aWRlciB0aGF0IHJldHVybnMgdGhlIG5ldyBjb250ZW50IGJhc2VkIG9uIHRoZSBvbGQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb2xkIGNvbnRlbnQgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyBjb250ZW50LlxuICAgKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8bnVsbCB8IHN0cmluZywgQ29udGVudEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVuYW1lU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIHJlbmFtZSB0aGUgZmlsZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gcmVuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbmludGVyZmFjZSBJbnZva2VGaWxlQWN0aW9uU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBwZXJmb3JtIG9uIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhY3Rpb24gaXMgY29tcGxldGUuXG4gICAqL1xuICBmaWxlQWN0aW9uKHRoaXM6IHZvaWQsIGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIENvcGllcyBhIGZpbGUgc2FmZWx5IGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNvcHlpbmcgdGhlIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgcGF0aCBvZiB0aGUgY29waWVkIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5U2FmZShwYXJhbXM6IENvcHlTYWZlUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBuZXdQYXRoLFxuICAgIG9sZFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGU6IG9sZFBhdGhPckZpbGUgfSk7XG5cbiAgaWYgKGZpbGUucGF0aCA9PT0gbmV3UGF0aCkge1xuICAgIHJldHVybiBuZXdQYXRoO1xuICB9XG5cbiAgY29uc3QgbmV3Rm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgobmV3UGF0aCk7XG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBuZXdGb2xkZXJQYXRoKTtcblxuICBjb25zdCBuZXdBdmFpbGFibGVQYXRoID0gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIG5ld1BhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNvcHkoZmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMobmV3QXZhaWxhYmxlUGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZvbGRlciBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgd2FzIGNyZWF0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSB2YXVsdCB3aXRoIHBhcmVudCBmb2xkZXJzIGlmIG5lZWRlZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcEZpbGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIG5vb3BBc3luYztcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICAgIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmaWxlKTtcbiAgICB9XG4gICAgYXdhaXQgZm9sZGVyQ2xlYW51cCgpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZm9sZGVyIGluIHRoZSB2YXVsdCB3aXRoIHBhcmVudCBmb2xkZXJzIGlmIG5lZWRlZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZm9sZGVyIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXI6IHBhdGggfSk7XG4gIGlmIChmb2xkZXIpIHtcbiAgICByZXR1cm4gbm9vcEFzeW5jO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuXG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBwYXRoKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGZvbGRlciA9IGdldEZvbGRlcih7IGFwcCwgcGF0aE9yRm9sZGVyOiBwYXRoIH0pO1xuICAgIGlmICghZm9sZGVyLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IHRyYXNoU2FmZShhcHAsIGZvbGRlcik7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWxldGVzIGFuIGVtcHR5IGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBmb2xkZXIgdG8gZGVsZXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmb2xkZXIgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXIgfSk7XG4gIGlmICghZm9sZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgdHJhc2hTYWZlKGFwcCwgZm9sZGVyKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGVtcHR5IGZvbGRlciBoaWVyYXJjaHkgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIGZvbGRlciB0byBzdGFydCByZW1vdmluZyBlbXB0eSBoaWVyYXJjaHkgZnJvbS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZW1wdHkgaGllcmFyY2h5IGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoeyBhcHAsIHBhdGhPckZvbGRlciB9KTtcblxuICB3aGlsZSAoZm9sZGVyKSB7XG4gICAgaWYgKCFhd2FpdCBpc0VtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBmb2xkZXIucGFyZW50O1xuICAgIGF3YWl0IGRlbGV0ZUVtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKTtcbiAgICBmb2xkZXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSBwYXRoIGZvciBhIGZpbGUgb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZ2V0dGluZyBhIHNhZmUgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHBhcmFtczogR2V0QWJzdHJhY3RGaWxlUGF0aFNhZmVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHBhdGgsXG4gICAgdHlwZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG5cbiAgaWYgKGFic3RyYWN0RmlsZSAmJiBnZXRGaWxlU3lzdGVtVHlwZShhYnN0cmFjdEZpbGUpID09PSB0eXBlKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICByZXR1cm4gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIHBhdGgpO1xufVxuXG4vKipcbiAqIEdldHMgYW4gYXZhaWxhYmxlIHBhdGggZm9yIGEgZmlsZSBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBhdmFpbGFibGUgcGF0aCBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBleHQgPSBleHRuYW1lKHBhdGgpO1xuICByZXR1cm4gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihkaXJuYW1lKHBhdGgpLCBiYXNlbmFtZShwYXRoLCBleHQpKSwgZXh0LnNsaWNlKDEpKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSBmaWxlIHBhdGggZm9yIGEgZmlsZSBvciBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgb3IgZm9sZGVyIHRvIGdldCBhIHNhZmUgcGF0aCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgc2FmZSBwYXRoIGZvciB0aGUgZmlsZSBvciBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGF0aFNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRmlsZSB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSBmb2xkZXIgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlclBhdGhTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZvbGRlciB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRNYXJrZG93bkZpbGVzKCkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIGFsbCBub3RlIGZpbGVzIGZyb20gdGhlIGFwcCdzIHZhdWx0IGFuZCBzb3J0cyB0aGVtIGFscGhhYmV0aWNhbGx5IGJ5IHRoZWlyIGZpbGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBub3RlIGZpbGVzIGluIHRoZSB2YXVsdCBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90ZUZpbGVzU29ydGVkKGFwcDogQXBwKTogVEZpbGVbXSB7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QWxsTG9hZGVkRmlsZXMoKS5maWx0ZXIoKGZpbGUpID0+IGlzRmlsZShmaWxlKSAmJiBpc05vdGUoZmlsZSkpLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpIGFzIFRGaWxlW107XG59XG5cbi8qKlxuICogR2V0cyBvciBjcmVhdGVzIGFuIGFic3RyYWN0IGZpbGUgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZ2V0dGluZyBvciBjcmVhdGluZyB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGFic3RyYWN0IGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUocGFyYW1zOiBHZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmVQYXJhbXMpOiBQcm9taXNlPFRBYnN0cmFjdEZpbGU+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICB0eXBlXG4gIH0gPSBwYXJhbXM7XG4gIGxldCB7IHBhdGggfSA9IHBhcmFtcztcbiAgcGF0aCA9IGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHsgYXBwLCBwYXRoLCB0eXBlIH0pO1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChhYnN0cmFjdEZpbGUpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBGaWxlU3lzdGVtVHlwZS5GaWxlOlxuICAgICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICAgIGNhc2UgRmlsZVN5c3RlbVR5cGUuRm9sZGVyOlxuICAgICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIocGF0aCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBvciBjcmVhdGVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUZpbGVTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlPiB7XG4gIHJldHVybiBhc0ZpbGUoYXdhaXQgZ2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5GaWxlIH0pKTtcbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYSBmb2xkZXIgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBJZiB0aGUgZm9sZGVyIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGdldCBvciBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUZvbGRlclNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8VEZvbGRlcj4ge1xuICByZXR1cm4gYXNGb2xkZXIoYXdhaXQgZ2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5Gb2xkZXIgfSkpO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIHJlbmFtZSBwYXRoIGZvciBhIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBnZXR0aW5nIGEgc2FmZSByZW5hbWUgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHJlbmFtZSBwYXRoIGZvciB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNhZmVSZW5hbWVQYXRoKHBhcmFtczogR2V0U2FmZVJlbmFtZVBhdGhQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGFwcCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlIH0gPSBwYXJhbXM7XG4gIGxldCB7IG5ld1BhdGggfSA9IHBhcmFtcztcbiAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgoYXBwLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUpO1xuXG4gIGlmIChnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmUpIHtcbiAgICBsZXQgZm9sZGVyUGF0aCA9IGRpcm5hbWUobmV3UGF0aCk7XG4gICAgbGV0IG5vbkV4aXN0aW5nUGF0aCA9IGJhc2VuYW1lKG5ld1BhdGgpO1xuICAgIGxldCBmb2xkZXI6IG51bGwgfCBURm9sZGVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIFRoZXJlIGlzIG5vIGVsZWdhbnQgd2F5IHRvIHBlcmZvcm0gaW5maW5pdGUgbG9vcHMuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgaXNDYXNlSW5zZW5zaXRpdmU6IHRydWUsIHBhdGhPckZvbGRlcjogZm9sZGVyUGF0aCB9KTtcbiAgICAgIGlmIChmb2xkZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBub25FeGlzdGluZ1BhdGggPSBqb2luKGJhc2VuYW1lKGZvbGRlclBhdGgpLCBub25FeGlzdGluZ1BhdGgpO1xuICAgICAgZm9sZGVyUGF0aCA9IGRpcm5hbWUoZm9sZGVyUGF0aCk7XG4gICAgfVxuICAgIG5ld1BhdGggPSBqb2luKGZvbGRlci5nZXRQYXJlbnRQcmVmaXgoKSwgbm9uRXhpc3RpbmdQYXRoKTtcbiAgfVxuXG4gIGlmIChvbGRQYXRoLnRvTG93ZXJDYXNlKCkgPT09IG5ld1BhdGgudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBuZXdQYXRoO1xuICB9XG5cbiAgcmV0dXJuIGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGludm9raW5nIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBmaWxlIHN5c3RlbSBsb2NrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrKHBhcmFtczogSW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZm4sXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICBmbihjb250ZW50KTtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb2YgYW5vdGhlciBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGlsZChwYXJhbXM6IElzQ2hpbGRQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjaGlsZFBhdGhPckZpbGUsXG4gICAgcGFyZW50UGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGlsZFBhdGggPSBnZXRQYXRoKGFwcCwgY2hpbGRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcGFyZW50UGF0aCA9IGdldFBhdGgoYXBwLCBwYXJlbnRQYXRoT3JGaWxlKTtcblxuICBpZiAoY2hpbGRQYXRoID09PSBwYXJlbnRQYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHBhcmVudFBhdGggPT09ICcvJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkUGF0aC5zdGFydHNXaXRoKGAke3BhcmVudFBhdGh9L2ApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9yIHNlbGYgb2YgYW5vdGhlciBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvciBzZWxmIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb3Igc2VsZiBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hpbGRPclNlbGYocGFyYW1zOiBJc0NoaWxkT3JTZWxmUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgY2hpbGRQYXRoT3JGaWxlLFxuICAgIHBhcmVudFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgY2hpbGRQYXRoID0gZ2V0UGF0aChhcHAsIGNoaWxkUGF0aE9yRmlsZSk7XG4gIGNvbnN0IHBhcmVudFBhdGggPSBnZXRQYXRoKGFwcCwgcGFyZW50UGF0aE9yRmlsZSk7XG4gIHJldHVybiBjaGlsZFBhdGggPT09IHBhcmVudFBhdGggfHwgaXNDaGlsZCh7IGFwcCwgY2hpbGRQYXRoT3JGaWxlLCBwYXJlbnRQYXRoT3JGaWxlIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZvbGRlciBpcyBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9sZGVyIGlzIGVtcHR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgbGlzdGVkRmlsZXMgPSBhd2FpdCBsaXN0U2FmZShhcHAsIGdldFBhdGgoYXBwLCBwYXRoT3JGb2xkZXIpKTtcbiAgcmV0dXJuIGxpc3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMCAmJiBsaXN0ZWRGaWxlcy5mb2xkZXJzLmxlbmd0aCA9PT0gMDtcbn1cblxuLyoqXG4gKiBTYWZlbHkgbGlzdHMgdGhlIGZpbGVzIGFuZCBmb2xkZXJzIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gbGlzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgTGlzdGVkRmlsZXN9IG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2FmZShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRm9sZGVyKTtcbiAgY29uc3QgRU1QVFkgPSB7IGZpbGVzOiBbXSwgZm9sZGVyczogW10gfTtcblxuICBpZiAoKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCkpPy50eXBlICE9PSAnZm9sZGVyJykge1xuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmxpc3QocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJvY2Vzc2luZyB0aGUgZmlsZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHByb2Nlc3MgaXMgY29tcGxldGUuXG4gKlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwcm9jZXNzIGZhaWxzIGFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldHJpZXMgb3IgdGltZW91dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3MocGFyYW1zOiBQcm9jZXNzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3Q29udGVudFByb3ZpZGVyLFxuICAgIHBhdGhPckZpbGUsXG4gICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZTogdHJ1ZSxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogdHJ1ZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBEZWZhdWx0IHZhbHVlLlxuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNTAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcyB9O1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsID0gYWJvcnRTaWduYWxBbnkoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwsIGFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIC8vIFJlZmVyZW5jZS1jb3VudGVkIGxvY2s7IGNvbXBvc2VzIHdpdGggYW55IG91dGVyIGxvY2suIFJlbGVhc2VkIGF0IGZ1bmN0aW9uIHNjb3BlIGV4aXQuXG4gIHVzaW5nIF9sb2NrID0gcmVzb3VyY2VMb2NrQ29tcG9uZW50Py5sb2NrRm9yUGF0aChwYXRoT3JGaWxlKTtcblxuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0Tm90aWNlKHtcbiAgICBhc3luYyBvcGVyYXRpb25GbihhYm9ydFNpZ25hbCkge1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgY29uc3Qgb2xkQ29udGVudCA9IGF3YWl0IHJlYWRTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBpZiAob2xkQ29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlTWlzc2luZ0ZpbGUoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIHsgYWJvcnRTaWduYWwsIGNvbnRlbnQ6IG9sZENvbnRlbnQgfSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBpZiAobmV3Q29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc1N1Y2Nlc3MgPSB0cnVlO1xuICAgICAgY29uc3QgZG9lc0ZpbGVFeGlzdCA9IGF3YWl0IGludm9rZUZpbGVBY3Rpb25TYWZlKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBhc3luYyBmaWxlQWN0aW9uKGZpbGUpIHtcbiAgICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgIGF3YWl0IGFwcC52YXVsdC5wcm9jZXNzKGZpbGUsIChjb250ZW50KSA9PiB7XG4gICAgICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQgIT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgZ2V0TGliRGVidWdnZXIoJ1ZhdWx0OnByb2Nlc3MnKSgnQ29udGVudCBoYXMgY2hhbmdlZCBzaW5jZSBpdCB3YXMgcmVhZC4gUmV0cnlpbmcuLi4nLCB7XG4gICAgICAgICAgICAgICAgYWN0dWFsQ29udGVudDogY29udGVudCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IG9sZENvbnRlbnQsXG4gICAgICAgICAgICAgICAgcGF0aDogZmlsZS5wYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aE9yRmlsZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZG9lc0ZpbGVFeGlzdCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlTWlzc2luZ0ZpbGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzU3VjY2VzcztcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlTWlzc2luZ0ZpbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChmdWxsT3B0aW9ucy5zaG91bGRGYWlsT25NaXNzaW5nRmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAnJHtwYXRofScgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMudmF1bHQucHJvY2Vzc0ZpbGUsIHsgZmlsZVBhdGg6IHBhdGggfSksXG4gICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBzdHJpY3RQcm94eTxQbHVnaW5Ob3RpY2VDb21wb25lbnQ+KHt9KSxcbiAgICByZXRyeU9wdGlvbnM6IGZ1bGxPcHRpb25zLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiBmdWxsT3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEl0IGNvdmVycyB0aGUgY2FzZSB3aGVuIHRoZSBmaWxlIHdhcyByZW1vdmVkIGR1cmluZyB0aGUgcmVhZGluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHJlYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIG9yIGBudWxsYCBpZiB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBsZXQgY29udGVudDogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIGF3YWl0IGludm9rZUZpbGVBY3Rpb25TYWZlKHtcbiAgICBhcHAsXG4gICAgYXN5bmMgZmlsZUFjdGlvbihmaWxlKSB7XG4gICAgICBhd2FpdCBzYXZlTm90ZShhcHAsIGZpbGUpO1xuICAgICAgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgIH0sXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogUmVuYW1lcyBhIGZpbGUgc2FmZWx5IGluIHRoZSB2YXVsdC5cbiAqIElmIHRoZSBuZXcgcGF0aCBhbHJlYWR5IGV4aXN0cywgdGhlIGZpbGUgd2lsbCBiZSByZW5hbWVkIHRvIGFuIGF2YWlsYWJsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmVuYW1pbmcgdGhlIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgcGF0aCBvZiB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZVNhZmUocGFyYW1zOiBSZW5hbWVTYWZlUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBuZXdQYXRoLFxuICAgIG9sZFBhdGhPckFic3RyYWN0RmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBvbGRBYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGUoeyBhcHAsIHBhdGhPckZpbGU6IG9sZFBhdGhPckFic3RyYWN0RmlsZSB9KTtcblxuICBjb25zdCBuZXdBdmFpbGFibGVQYXRoID0gZ2V0U2FmZVJlbmFtZVBhdGgoeyBhcHAsIG5ld1BhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZSB9KTtcblxuICBpZiAob2xkQWJzdHJhY3RGaWxlLnBhdGgudG9Mb3dlckNhc2UoKSA9PT0gbmV3QXZhaWxhYmxlUGF0aC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgaWYgKG9sZEFic3RyYWN0RmlsZS5wYXRoICE9PSBuZXdQYXRoKSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShvbGRBYnN0cmFjdEZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld0F2YWlsYWJsZVBhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIucmVuYW1lRmlsZShvbGRBYnN0cmFjdEZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpIHx8IGF3YWl0IGFwcC52YXVsdC5leGlzdHMob2xkQWJzdHJhY3RGaWxlLnBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIFNhdmVzIHRoZSBzcGVjaWZpZWQgbm90ZSBpbiB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgbm90ZSB0byBiZSBzYXZlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbm90ZSBpcyBzYXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVOb3RlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICBpZiAobGVhZi52aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIGxlYWYudmlldy5maWxlPy5wYXRoID09PSBwYXRoICYmIGxlYWYudmlldy5kaXJ0eSkge1xuICAgICAgYXdhaXQgbGVhZi52aWV3LnNhdmUoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFzaGVzIGFuIGFic3RyYWN0IGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gdHJhc2guXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaXMgdHJhc2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYXNoU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmaWxlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChhd2FpdCBhcHAudmF1bHQuZXhpc3RzKGZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgZ2V0TGliRGVidWdnZXIoJ1ZhdWx0OnRyYXNoU2FmZScpKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cmFzaGluZyAke2ZpbGUucGF0aH0sIGJ1dCB0aGUgZmlsZSBubyBsb25nZXIgZXhpc3RzLmAsIHsgZXJyb3I6IGUsIHBhdGg6IGZpbGUucGF0aCB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnZva2VGaWxlQWN0aW9uU2FmZShwYXJhbXM6IEludm9rZUZpbGVBY3Rpb25TYWZlUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZmlsZUFjdGlvbixcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGZpbGVBY3Rpb24oZmlsZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7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
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIExpc3RlZEZpbGVzXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aCxcbiAgVmlld1R5cGVcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIFBhdGhPckZpbGUsXG4gIFBhdGhPckZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuaW1wb3J0IHsgYWJvcnRTaWduYWxBbnkgfSBmcm9tICcuLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBzdHJpY3RQcm94eSB9IGZyb20gJy4uL3N0cmljdC1wcm94eS50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXROb3RpY2UgfSBmcm9tICcuL2FzeW5jLXdpdGgtbm90aWNlLnRzJztcbmltcG9ydCB7XG4gIGFzRmlsZSxcbiAgYXNGb2xkZXIsXG4gIEZpbGVTeXN0ZW1UeXBlLFxuICBnZXRBYnN0cmFjdEZpbGUsXG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZVN5c3RlbVR5cGUsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlLFxuICBpc05vdGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRBcmdzIHtcbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3B5U2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV3UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHBhdGggb3IgZmlsZSB0byBjb3B5LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRTYWZlUmVuYW1lUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2FmZVJlbmFtZVBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGFic3RyYWN0IGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJlbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckFic3RyYWN0RmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnZva2VXaXRoRmlsZVN5c3RlbUxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVdpdGhGaWxlU3lzdGVtTG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqL1xuICBmbih0aGlzOiB2b2lkLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGZpbGUgc3lzdGVtIGxvY2sgb2YuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0NoaWxkT3JTZWxmfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0NoaWxkT3JTZWxmUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjaGlsZCBvciBzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIHBhcmVudCBvciBzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50UGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpc0NoaWxkfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0NoaWxkUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBjaGlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoaWxkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBwYXJlbnQuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByb2Nlc3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIHJlc291cmNlLWxvY2sgY29tcG9uZW50IHVzZWQgdG8gbG9jayB0aGUgZmlsZSdzIGVkaXRvciByZWFkLW9ubHkgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiBwcm9jZXNzaW5nLiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgb3BlcmF0aW9uLWxldmVsIGxvY2tcbiAgICogb24gdGhlIHNhbWUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbCB8IFJlc291cmNlTG9ja0NvbXBvbmVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmYWlsIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1BhcmFtcyBleHRlbmRzIFByb2Nlc3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSwgdHlwaWNhbGx5IHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSB2YWx1ZSBwcm92aWRlciB0aGF0IHJldHVybnMgdGhlIG5ldyBjb250ZW50IGJhc2VkIG9uIHRoZSBvbGQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb2xkIGNvbnRlbnQgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyBjb250ZW50LlxuICAgKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8bnVsbCB8IHN0cmluZywgQ29udGVudEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVuYW1lU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIHJlbmFtZSB0aGUgZmlsZSB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gcmVuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbmludGVyZmFjZSBJbnZva2VGaWxlQWN0aW9uU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBwZXJmb3JtIG9uIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhY3Rpb24gaXMgY29tcGxldGUuXG4gICAqL1xuICBmaWxlQWN0aW9uKHRoaXM6IHZvaWQsIGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIENvcGllcyBhIGZpbGUgc2FmZWx5IGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNvcHlpbmcgdGhlIGZpbGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgcGF0aCBvZiB0aGUgY29waWVkIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5U2FmZShwYXJhbXM6IENvcHlTYWZlUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBuZXdQYXRoLFxuICAgIG9sZFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGU6IG9sZFBhdGhPckZpbGUgfSk7XG5cbiAgaWYgKGZpbGUucGF0aCA9PT0gbmV3UGF0aCkge1xuICAgIHJldHVybiBuZXdQYXRoO1xuICB9XG5cbiAgY29uc3QgbmV3Rm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgobmV3UGF0aCk7XG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBuZXdGb2xkZXJQYXRoKTtcblxuICBjb25zdCBuZXdBdmFpbGFibGVQYXRoID0gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIG5ld1BhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNvcHkoZmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMobmV3QXZhaWxhYmxlUGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZvbGRlciBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgd2FzIGNyZWF0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSB2YXVsdCB3aXRoIHBhcmVudCBmb2xkZXJzIGlmIG5lZWRlZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcEZpbGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIG5vb3BBc3luYztcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICAgIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmaWxlKTtcbiAgICB9XG4gICAgYXdhaXQgZm9sZGVyQ2xlYW51cCgpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZm9sZGVyIGluIHRoZSB2YXVsdCB3aXRoIHBhcmVudCBmb2xkZXJzIGlmIG5lZWRlZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZm9sZGVyIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXI6IHBhdGggfSk7XG4gIGlmIChmb2xkZXIpIHtcbiAgICByZXR1cm4gbm9vcEFzeW5jO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuXG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBwYXRoKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGZvbGRlciA9IGdldEZvbGRlcih7IGFwcCwgcGF0aE9yRm9sZGVyOiBwYXRoIH0pO1xuICAgIGlmICghZm9sZGVyLmRlbGV0ZWQpIHtcbiAgICAgIGF3YWl0IHRyYXNoU2FmZShhcHAsIGZvbGRlcik7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWxldGVzIGFuIGVtcHR5IGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBmb2xkZXIgdG8gZGVsZXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmb2xkZXIgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXIgfSk7XG4gIGlmICghZm9sZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgdHJhc2hTYWZlKGFwcCwgZm9sZGVyKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGVtcHR5IGZvbGRlciBoaWVyYXJjaHkgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIGZvbGRlciB0byBzdGFydCByZW1vdmluZyBlbXB0eSBoaWVyYXJjaHkgZnJvbS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZW1wdHkgaGllcmFyY2h5IGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoeyBhcHAsIHBhdGhPckZvbGRlciB9KTtcblxuICB3aGlsZSAoZm9sZGVyKSB7XG4gICAgaWYgKCFhd2FpdCBpc0VtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBmb2xkZXIucGFyZW50O1xuICAgIGF3YWl0IGRlbGV0ZUVtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKTtcbiAgICBmb2xkZXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSBwYXRoIGZvciBhIGZpbGUgb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZ2V0dGluZyBhIHNhZmUgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHBhcmFtczogR2V0QWJzdHJhY3RGaWxlUGF0aFNhZmVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHBhdGgsXG4gICAgdHlwZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG5cbiAgaWYgKGFic3RyYWN0RmlsZSAmJiBnZXRGaWxlU3lzdGVtVHlwZShhYnN0cmFjdEZpbGUpID09PSB0eXBlKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICByZXR1cm4gZ2V0QXZhaWxhYmxlUGF0aChhcHAsIHBhdGgpO1xufVxuXG4vKipcbiAqIEdldHMgYW4gYXZhaWxhYmxlIHBhdGggZm9yIGEgZmlsZSBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBhdmFpbGFibGUgcGF0aCBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBleHQgPSBleHRuYW1lKHBhdGgpO1xuICByZXR1cm4gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihkaXJuYW1lKHBhdGgpLCBiYXNlbmFtZShwYXRoLCBleHQpKSwgZXh0LnNsaWNlKDEpKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSBmaWxlIHBhdGggZm9yIGEgZmlsZSBvciBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgb3IgZm9sZGVyIHRvIGdldCBhIHNhZmUgcGF0aCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgc2FmZSBwYXRoIGZvciB0aGUgZmlsZSBvciBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGF0aFNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRmlsZSB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc2FmZSBmb2xkZXIgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlclBhdGhTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZvbGRlciB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgTWFya2Rvd24gZmlsZXMgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRNYXJrZG93bkZpbGVzKCkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIGFsbCBub3RlIGZpbGVzIGZyb20gdGhlIGFwcCdzIHZhdWx0IGFuZCBzb3J0cyB0aGVtIGFscGhhYmV0aWNhbGx5IGJ5IHRoZWlyIGZpbGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBub3RlIGZpbGVzIGluIHRoZSB2YXVsdCBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90ZUZpbGVzU29ydGVkKGFwcDogQXBwKTogVEZpbGVbXSB7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QWxsTG9hZGVkRmlsZXMoKS5maWx0ZXIoKGZpbGUpID0+IGlzRmlsZShmaWxlKSAmJiBpc05vdGUoZmlsZSkpLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpIGFzIFRGaWxlW107XG59XG5cbi8qKlxuICogR2V0cyBvciBjcmVhdGVzIGFuIGFic3RyYWN0IGZpbGUgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZ2V0dGluZyBvciBjcmVhdGluZyB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGFic3RyYWN0IGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUocGFyYW1zOiBHZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmVQYXJhbXMpOiBQcm9taXNlPFRBYnN0cmFjdEZpbGU+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICB0eXBlXG4gIH0gPSBwYXJhbXM7XG4gIGxldCB7IHBhdGggfSA9IHBhcmFtcztcbiAgcGF0aCA9IGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHsgYXBwLCBwYXRoLCB0eXBlIH0pO1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChhYnN0cmFjdEZpbGUpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBGaWxlU3lzdGVtVHlwZS5GaWxlOlxuICAgICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICAgIGNhc2UgRmlsZVN5c3RlbVR5cGUuRm9sZGVyOlxuICAgICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIocGF0aCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBvciBjcmVhdGVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUZpbGVTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlPiB7XG4gIHJldHVybiBhc0ZpbGUoYXdhaXQgZ2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5GaWxlIH0pKTtcbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYSBmb2xkZXIgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBJZiB0aGUgZm9sZGVyIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZvbGRlciBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGdldCBvciBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUZvbGRlclNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8VEZvbGRlcj4ge1xuICByZXR1cm4gYXNGb2xkZXIoYXdhaXQgZ2V0T3JDcmVhdGVBYnN0cmFjdEZpbGVTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5Gb2xkZXIgfSkpO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIHJlbmFtZSBwYXRoIGZvciBhIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBnZXR0aW5nIGEgc2FmZSByZW5hbWUgcGF0aC5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHJlbmFtZSBwYXRoIGZvciB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNhZmVSZW5hbWVQYXRoKHBhcmFtczogR2V0U2FmZVJlbmFtZVBhdGhQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGFwcCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlIH0gPSBwYXJhbXM7XG4gIGxldCB7IG5ld1BhdGggfSA9IHBhcmFtcztcbiAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgoYXBwLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUpO1xuXG4gIGlmIChnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmUpIHtcbiAgICBsZXQgZm9sZGVyUGF0aCA9IGRpcm5hbWUobmV3UGF0aCk7XG4gICAgbGV0IG5vbkV4aXN0aW5nUGF0aCA9IGJhc2VuYW1lKG5ld1BhdGgpO1xuICAgIGxldCBmb2xkZXI6IG51bGwgfCBURm9sZGVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIFRoZXJlIGlzIG5vIGVsZWdhbnQgd2F5IHRvIHBlcmZvcm0gaW5maW5pdGUgbG9vcHMuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgaXNDYXNlSW5zZW5zaXRpdmU6IHRydWUsIHBhdGhPckZvbGRlcjogZm9sZGVyUGF0aCB9KTtcbiAgICAgIGlmIChmb2xkZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBub25FeGlzdGluZ1BhdGggPSBqb2luKGJhc2VuYW1lKGZvbGRlclBhdGgpLCBub25FeGlzdGluZ1BhdGgpO1xuICAgICAgZm9sZGVyUGF0aCA9IGRpcm5hbWUoZm9sZGVyUGF0aCk7XG4gICAgfVxuICAgIG5ld1BhdGggPSBqb2luKGZvbGRlci5nZXRQYXJlbnRQcmVmaXgoKSwgbm9uRXhpc3RpbmdQYXRoKTtcbiAgfVxuXG4gIGlmIChvbGRQYXRoLnRvTG93ZXJDYXNlKCkgPT09IG5ld1BhdGgudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBuZXdQYXRoO1xuICB9XG5cbiAgcmV0dXJuIGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGludm9raW5nIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBmaWxlIHN5c3RlbSBsb2NrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrKHBhcmFtczogSW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZm4sXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICBmbihjb250ZW50KTtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb2YgYW5vdGhlciBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGlsZChwYXJhbXM6IElzQ2hpbGRQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjaGlsZFBhdGhPckZpbGUsXG4gICAgcGFyZW50UGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGlsZFBhdGggPSBnZXRQYXRoKGFwcCwgY2hpbGRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcGFyZW50UGF0aCA9IGdldFBhdGgoYXBwLCBwYXJlbnRQYXRoT3JGaWxlKTtcblxuICBpZiAoY2hpbGRQYXRoID09PSBwYXJlbnRQYXRoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHBhcmVudFBhdGggPT09ICcvJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkUGF0aC5zdGFydHNXaXRoKGAke3BhcmVudFBhdGh9L2ApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9yIHNlbGYgb2YgYW5vdGhlciBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvciBzZWxmIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb3Igc2VsZiBvZiB0aGUgcGFyZW50IHBhdGggb3IgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hpbGRPclNlbGYocGFyYW1zOiBJc0NoaWxkT3JTZWxmUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgY2hpbGRQYXRoT3JGaWxlLFxuICAgIHBhcmVudFBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgY2hpbGRQYXRoID0gZ2V0UGF0aChhcHAsIGNoaWxkUGF0aE9yRmlsZSk7XG4gIGNvbnN0IHBhcmVudFBhdGggPSBnZXRQYXRoKGFwcCwgcGFyZW50UGF0aE9yRmlsZSk7XG4gIHJldHVybiBjaGlsZFBhdGggPT09IHBhcmVudFBhdGggfHwgaXNDaGlsZCh7IGFwcCwgY2hpbGRQYXRoT3JGaWxlLCBwYXJlbnRQYXRoT3JGaWxlIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZvbGRlciBpcyBlbXB0eS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9sZGVyIGlzIGVtcHR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgbGlzdGVkRmlsZXMgPSBhd2FpdCBsaXN0U2FmZShhcHAsIGdldFBhdGgoYXBwLCBwYXRoT3JGb2xkZXIpKTtcbiAgcmV0dXJuIGxpc3RlZEZpbGVzLmZpbGVzLmxlbmd0aCA9PT0gMCAmJiBsaXN0ZWRGaWxlcy5mb2xkZXJzLmxlbmd0aCA9PT0gMDtcbn1cblxuLyoqXG4gKiBTYWZlbHkgbGlzdHMgdGhlIGZpbGVzIGFuZCBmb2xkZXJzIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBpbiB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gbGlzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgTGlzdGVkRmlsZXN9IG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2FmZShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRm9sZGVyKTtcbiAgY29uc3QgRU1QVFkgPSB7IGZpbGVzOiBbXSwgZm9sZGVyczogW10gfTtcblxuICBpZiAoKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCkpPy50eXBlICE9PSAnZm9sZGVyJykge1xuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmxpc3QocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJvY2Vzc2luZyB0aGUgZmlsZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHByb2Nlc3MgaXMgY29tcGxldGUuXG4gKlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBwcm9jZXNzIGZhaWxzIGFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldHJpZXMgb3IgdGltZW91dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3MocGFyYW1zOiBQcm9jZXNzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3Q29udGVudFByb3ZpZGVyLFxuICAgIHBhdGhPckZpbGUsXG4gICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50XG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZTogdHJ1ZSxcbiAgICBzaG91bGRTaG93VGltZW91dE5vdGljZTogdHJ1ZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBEZWZhdWx0IHZhbHVlLlxuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNTAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcyB9O1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsID0gYWJvcnRTaWduYWxBbnkoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwsIGFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIC8vIFJlZmVyZW5jZS1jb3VudGVkIGxvY2s7IGNvbXBvc2VzIHdpdGggYW55IG91dGVyIGxvY2suIFJlbGVhc2VkIGF0IGZ1bmN0aW9uIHNjb3BlIGV4aXQuXG4gIHVzaW5nIF9sb2NrID0gcmVzb3VyY2VMb2NrQ29tcG9uZW50Py5sb2NrRm9yUGF0aCh7IG9wZXJhdGlvbk5hbWU6ICdQcm9jZXNzIG5vdGUnLCBwYXRoT3JGaWxlIH0pO1xuXG4gIGF3YWl0IHJldHJ5V2l0aFRpbWVvdXROb3RpY2Uoe1xuICAgIGFzeW5jIG9wZXJhdGlvbkZuKGFib3J0U2lnbmFsKSB7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBjb25zdCBvbGRDb250ZW50ID0gYXdhaXQgcmVhZFNhZmUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGlmIChvbGRDb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVNaXNzaW5nRmlsZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKG5ld0NvbnRlbnRQcm92aWRlciwgeyBhYm9ydFNpZ25hbCwgY29udGVudDogb2xkQ29udGVudCB9KTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGlmIChuZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzU3VjY2VzcyA9IHRydWU7XG4gICAgICBjb25zdCBkb2VzRmlsZUV4aXN0ID0gYXdhaXQgaW52b2tlRmlsZUFjdGlvblNhZmUoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGFzeW5jIGZpbGVBY3Rpb24oZmlsZSkge1xuICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgICBpZiAoY29udGVudCAhPT0gb2xkQ29udGVudCkge1xuICAgICAgICAgICAgICBnZXRMaWJEZWJ1Z2dlcignVmF1bHQ6cHJvY2VzcycpKCdDb250ZW50IGhhcyBjaGFuZ2VkIHNpbmNlIGl0IHdhcyByZWFkLiBSZXRyeWluZy4uLicsIHtcbiAgICAgICAgICAgICAgICBhY3R1YWxDb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogb2xkQ29udGVudCxcbiAgICAgICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlzU3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld0NvbnRlbnQ7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICB9LFxuICAgICAgICBwYXRoT3JGaWxlXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFkb2VzRmlsZUV4aXN0KSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVNaXNzaW5nRmlsZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXNTdWNjZXNzO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVNaXNzaW5nRmlsZSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGZ1bGxPcHRpb25zLnNob3VsZEZhaWxPbk1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICcke3BhdGh9JyBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy52YXVsdC5wcm9jZXNzRmlsZSwgeyBmaWxlUGF0aDogcGF0aCB9KSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IHN0cmljdFByb3h5PFBsdWdpbk5vdGljZUNvbXBvbmVudD4oe30pLFxuICAgIHJldHJ5T3B0aW9uczogZnVsbE9wdGlvbnMsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IGZ1bGxPcHRpb25zLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjb250ZW50IG9mIGEgZmlsZSBzYWZlbHkgZnJvbSB0aGUgdmF1bHQuXG4gKlxuICogSXQgY292ZXJzIHRoZSBjYXNlIHdoZW4gdGhlIGZpbGUgd2FzIHJlbW92ZWQgZHVyaW5nIHRoZSByZWFkaW5nLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmVhZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgb3IgYG51bGxgIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTYWZlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGxldCBjb250ZW50OiBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgYXdhaXQgaW52b2tlRmlsZUFjdGlvblNhZmUoe1xuICAgIGFwcCxcbiAgICBhc3luYyBmaWxlQWN0aW9uKGZpbGUpIHtcbiAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgZmlsZSk7XG4gICAgICBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlXG4gIH0pO1xuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBSZW5hbWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICogSWYgdGhlIG5ldyBwYXRoIGFscmVhZHkgZXhpc3RzLCB0aGUgZmlsZSB3aWxsIGJlIHJlbmFtZWQgdG8gYW4gYXZhaWxhYmxlIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5hbWluZyB0aGUgZmlsZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuYW1lU2FmZShwYXJhbXM6IFJlbmFtZVNhZmVQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5ld1BhdGgsXG4gICAgb2xkUGF0aE9yQWJzdHJhY3RGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG9sZEFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogb2xkUGF0aE9yQWJzdHJhY3RGaWxlIH0pO1xuXG4gIGNvbnN0IG5ld0F2YWlsYWJsZVBhdGggPSBnZXRTYWZlUmVuYW1lUGF0aCh7IGFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlIH0pO1xuXG4gIGlmIChvbGRBYnN0cmFjdEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpID09PSBuZXdBdmFpbGFibGVQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBpZiAob2xkQWJzdHJhY3RGaWxlLnBhdGggIT09IG5ld1BhdGgpIHtcbiAgICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5yZW5hbWVGaWxlKG9sZEFic3RyYWN0RmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xuICB9XG5cbiAgY29uc3QgbmV3Rm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgobmV3QXZhaWxhYmxlUGF0aCk7XG4gIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBuZXdGb2xkZXJQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC5maWxlTWFuYWdlci5yZW5hbWVGaWxlKG9sZEFic3RyYWN0RmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMobmV3QXZhaWxhYmxlUGF0aCkgfHwgYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhvbGRBYnN0cmFjdEZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbi8qKlxuICogU2F2ZXMgdGhlIHNwZWNpZmllZCBub3RlIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBub3RlIHRvIGJlIHNhdmVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBub3RlIGlzIHNhdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZU5vdGUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFpc01hcmtkb3duRmlsZShwYXRoT3JGaWxlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgZm9yIChjb25zdCBsZWFmIG9mIGFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFZpZXdUeXBlLk1hcmtkb3duKSkge1xuICAgIGlmIChsZWFmLnZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcgJiYgbGVhZi52aWV3LmZpbGU/LnBhdGggPT09IHBhdGggJiYgbGVhZi52aWV3LmRpcnR5KSB7XG4gICAgICBhd2FpdCBsZWFmLnZpZXcuc2F2ZSgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRyYXNoZXMgYW4gYWJzdHJhY3QgZmlsZSBzYWZlbHkgZnJvbSB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byB0cmFzaC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyB0cmFzaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhc2hTYWZlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgaWYgKCFmaWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGF3YWl0IGFwcC52YXVsdC5leGlzdHMoZmlsZS5wYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBnZXRMaWJEZWJ1Z2dlcignVmF1bHQ6dHJhc2hTYWZlJykoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyYXNoaW5nICR7ZmlsZS5wYXRofSwgYnV0IHRoZSBmaWxlIG5vIGxvbmdlciBleGlzdHMuYCwgeyBlcnJvcjogZSwgcGF0aDogZmlsZS5wYXRoIH0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZUZpbGVBY3Rpb25TYWZlKHBhcmFtczogSW52b2tlRmlsZUFjdGlvblNhZmVQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBmaWxlQWN0aW9uLFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGF0aCA9IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKTtcbiAgbGV0IGZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZmlsZUFjdGlvbihmaWxlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICAgIGlmICghZmlsZSB8fCBmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZTtc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
|
|
@@ -35,7 +35,7 @@ interface ViewRegistrarRegisterViewParams {
|
|
|
35
35
|
* A registrar for views that registers views with a plugin.
|
|
36
36
|
*/
|
|
37
37
|
export declare class PluginViewRegistrar implements ViewRegistrar {
|
|
38
|
-
|
|
38
|
+
protected readonly plugin: Plugin;
|
|
39
39
|
/**
|
|
40
40
|
* Creates a new instance of the {@link PluginViewRegistrar} class.
|
|
41
41
|
*
|
|
@@ -44,4 +44,4 @@ class PluginViewRegistrar {
|
|
|
44
44
|
export {
|
|
45
45
|
PluginViewRegistrar
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZpZXctcmVnaXN0cmFyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIHtAbGluayBWaWV3UmVnaXN0cmFyfSBpbnRlcmZhY2UgYW5kIHRoZSB7QGxpbmsgUGx1Z2luVmlld1JlZ2lzdHJhcn0gY2xhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBWaWV3LFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIEEgcmVnaXN0cmFyIGZvciB2aWV3cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaWV3UmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZpZXcgdHlwZSB3aXRoIGEgdmlldyBjcmVhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB2aWV3IHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHJlZ2lzdGVyVmlldyhwYXJhbXM6IFBsdWdpblZpZXdSZWdpc3RyYXJSZWdpc3RlclZpZXdQYXJhbXMpOiB2b2lkO1xufVxuXG50eXBlIFBsdWdpblZpZXdSZWdpc3RyYXJSZWdpc3RlclZpZXdQYXJhbXMgPSBWaWV3UmVnaXN0cmFyUmVnaXN0ZXJWaWV3UGFyYW1zO1xuXG5pbnRlcmZhY2UgVmlld1JlZ2lzdHJhclJlZ2lzdGVyVmlld1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgdmlldyB0byByZWdpc3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZpZXcgY3JlYXRvciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB2aWV3IGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYgd2hlcmUgdGhlIHZpZXcgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCB2aWV3IGluc3RhbmNlLlxuICAgKi9cbiAgdmlld0NyZWF0b3IodGhpczogdm9pZCwgbGVhZjogV29ya3NwYWNlTGVhZik6IFZpZXc7XG59XG5cbi8qKlxuICogQSByZWdpc3RyYXIgZm9yIHZpZXdzIHRoYXQgcmVnaXN0ZXJzIHZpZXdzIHdpdGggYSBwbHVnaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5WaWV3UmVnaXN0cmFyIGltcGxlbWVudHMgVmlld1JlZ2lzdHJhciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSB7QGxpbmsgUGx1Z2luVmlld1JlZ2lzdHJhcn0gY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgT2JzaWRpYW4gcGx1Z2luIGluc3RhbmNlIHVzZWQgdG8gcmVnaXN0ZXIgdmlld3MuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luKSB7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdmlldyB0eXBlIHdpdGggYSB2aWV3IGNyZWF0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHZpZXcgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyVmlldyhwYXJhbXM6IFBsdWdpblZpZXdSZWdpc3RyYXJSZWdpc3RlclZpZXdQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlclZpZXcocGFyYW1zLnR5cGUsIHBhcmFtcy52aWV3Q3JlYXRvcik7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsU0FBUyxjQUFjO0FBa0NoQixNQUFNLG9CQUE2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qRCxZQUErQixRQUFnQjtBQUFoQjtBQUFBLEVBQ3RDO0FBQUEsRUFEc0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRL0IsYUFBYSxRQUFxRDtBQUN2RSxTQUFLLE9BQU8sYUFBYSxPQUFPLE1BQU0sT0FBTyxXQUFXO0FBQUEsRUFDMUQ7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -33,7 +33,9 @@ const obsidianDevUtilsConfig = {
|
|
|
33
33
|
// eslint-disable-next-line camelcase -- That's how it is defined in the schema.
|
|
34
34
|
ignored_labels: [
|
|
35
35
|
"!note",
|
|
36
|
-
"!warning"
|
|
36
|
+
"!warning",
|
|
37
|
+
// Preserve markdownlint's default ignored label so GFM task-list items (`- [x]`) are not flagged as undefined shortcut references.
|
|
38
|
+
"x"
|
|
37
39
|
],
|
|
38
40
|
// eslint-disable-next-line camelcase -- That's how it is defined in the schema.
|
|
39
41
|
shortcut_syntax: true
|
|
@@ -55,4 +57,4 @@ const obsidianDevUtilsConfig = {
|
|
|
55
57
|
export {
|
|
56
58
|
obsidianDevUtilsConfig
|
|
57
59
|
};
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmF1bHQgbWFya2Rvd25saW50LWNsaTIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9ic2lkaWFuIERldiBVdGlscy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVjbGFyYXRpdmUgbWFya2Rvd25saW50LWNsaTIgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBtYXJrZG93bmxpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcmVsYXRpdmVMaW5rc1J1bGUgZnJvbSAnbWFya2Rvd25saW50LXJ1bGUtcmVsYXRpdmUtbGlua3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3dubGludENsaTJDb25maWd1cmF0aW9uU2NoZW1hIH0gZnJvbSAnLi9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cyc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIGZvciB0aGUgT2JzaWRpYW4gRGV2IFV0aWxzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ3VyYXRpb25TY2hlbWEgPSB7XG4gIGNvbmZpZzoge1xuICAgICdNRDAxMyc6IGZhbHNlLFxuICAgICdNRDAyNCc6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBzaWJsaW5nc19vbmx5OiB0cnVlXG4gICAgfSxcbiAgICAnTUQwNTInOiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlIC0tIFRoYXQncyBob3cgaXQgaXMgZGVmaW5lZCBpbiB0aGUgc2NoZW1hLlxuICAgICAgaWdub3JlZF9sYWJlbHM6IFtcbiAgICAgICAgJyFub3RlJyxcbiAgICAgICAgJyF3YXJuaW5nJyxcbiAgICAgICAgLy8gUHJlc2VydmUgbWFya2Rvd25saW50J3MgZGVmYXVsdCBpZ25vcmVkIGxhYmVsIHNvIEdGTSB0YXNrLWxpc3QgaXRlbXMgKGAtIFt4XWApIGFyZSBub3QgZmxhZ2dlZCBhcyB1bmRlZmluZWQgc2hvcnRjdXQgcmVmZXJlbmNlcy5cbiAgICAgICAgJ3gnXG4gICAgICBdLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBUaGF0J3MgaG93IGl0IGlzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICAgIHNob3J0Y3V0X3N5bnRheDogdHJ1ZVxuICAgIH0sXG4gICAgJ3JlbGF0aXZlLWxpbmtzJzogdHJ1ZVxuICB9LFxuICBjdXN0b21SdWxlczogW1xuICAgIHJlbGF0aXZlTGlua3NSdWxlXG4gIF0sXG4gIGdsb2JzOiBbXG4gICAgJyoqLyoubWQnXG4gIF0sXG4gIGlnbm9yZXM6IFtcbiAgICAnbm9kZV9tb2R1bGVzLyoqJyxcbiAgICAnLmdpdC8qKicsXG4gICAgJ2Rpc3QvKionXG4gIF1cbn07XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sdUJBQXVCO0FBT3ZCLE1BQU0seUJBQThEO0FBQUEsRUFDekUsUUFBUTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBO0FBQUEsTUFFUCxlQUFlO0FBQUEsSUFDakI7QUFBQSxJQUNBLFNBQVM7QUFBQTtBQUFBLE1BRVAsZ0JBQWdCO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQTtBQUFBLFFBRUE7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUVBLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsSUFDQSxrQkFBa0I7QUFBQSxFQUNwQjtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1g7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -9,7 +9,7 @@ import { Transformer } from './transformer.mjs';
|
|
|
9
9
|
* A transformer that combines multiple transformers.
|
|
10
10
|
*/
|
|
11
11
|
export declare class GroupTransformer extends Transformer {
|
|
12
|
-
|
|
12
|
+
protected readonly transformers: Transformer[];
|
|
13
13
|
/**
|
|
14
14
|
* An id of the transformer.
|
|
15
15
|
*
|
|
@@ -112,4 +112,4 @@ class GroupTransformer extends Transformer {
|
|
|
112
112
|
export {
|
|
113
113
|
GroupTransformer
|
|
114
114
|
};
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zZm9ybWVycy9ncm91cC10cmFuc2Zvcm1lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgdHJhbnNmb3JtZXIgdGhhdCBjb21iaW5lcyBtdWx0aXBsZSB0cmFuc2Zvcm1lcnMuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSAnLi90cmFuc2Zvcm1lci50cyc7XG5cbi8qKlxuICogQSB0cmFuc2Zvcm1lciB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIHRyYW5zZm9ybWVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyb3VwVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7XG4gIC8qKlxuICAgKiBBbiBpZCBvZiB0aGUgdHJhbnNmb3JtZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIGBncm91cGAuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdncm91cCc7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIHRvIGNvbWJpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2Zvcm1lcnMgLSBUaGUgdHJhbnNmb3JtZXJzIHRvIGNvbWJpbmUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zZm9ybWVyczogVHJhbnNmb3JtZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgY2FuIGJlIHRyYW5zZm9ybWVkIGJ5IGFueSBvZiB0aGUgdHJhbnNmb3JtZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZhbHVlIGNhbiBiZSB0cmFuc2Zvcm1lZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBjYW5UcmFuc2Zvcm0odmFsdWU6IHVua25vd24sIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3RUcmFuc2Zvcm1lclRoYXRDYW5UcmFuc2Zvcm0odmFsdWUsIGtleSkgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHJhbnNmb3JtZXIgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2Zvcm1lcklkIC0gVGhlIGlkIG9mIHRoZSB0cmFuc2Zvcm1lciB0byBnZXQuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lciB3aXRoIHRoZSBnaXZlbiBpZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRUcmFuc2Zvcm1lcih0cmFuc2Zvcm1lcklkOiBzdHJpbmcpOiBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMudHJhbnNmb3JtZXJzLmZpbmQoKHQpID0+IHQuaWQgPT09IHRyYW5zZm9ybWVySWQpLCBgTm8gdHJhbnNmb3JtZXIgd2l0aCBpZCAke3RyYW5zZm9ybWVySWR9IGZvdW5kYCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgdmFsdWUgdXNpbmcgdGhlIGZpcnN0IHRyYW5zZm9ybWVyIHRoYXQgY2FuIHRyYW5zZm9ybSBpdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHRyYW5zZm9ybVZhbHVlKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gdGhpcy5nZXRGaXJzdFRyYW5zZm9ybWVyVGhhdENhblRyYW5zZm9ybSh2YWx1ZSwga2V5KTtcbiAgICBhc3NlcnROb25OdWxsYWJsZSh0cmFuc2Zvcm1lciwgJ05vIHRyYW5zZm9ybWVyIGNhbiB0cmFuc2Zvcm0gdGhlIHZhbHVlJyk7XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZXIudHJhbnNmb3JtVmFsdWUodmFsdWUsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaWQgb2YgdGhlIHRyYW5zZm9ybWVyIHRoYXQgY2FuIHRyYW5zZm9ybSB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBnZXQgdGhlIHRyYW5zZm9ybWVyIGlkIGZvci5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldCB0aGUgdHJhbnNmb3JtZXIgaWQgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIHRyYW5zZm9ybWVyIHRoYXQgY2FuIHRyYW5zZm9ybSB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtZXJJZCh2YWx1ZTogdW5rbm93biwga2V5OiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IHRoaXMuZ2V0Rmlyc3RUcmFuc2Zvcm1lclRoYXRDYW5UcmFuc2Zvcm0odmFsdWUsIGtleSk7XG4gICAgaWYgKHRyYW5zZm9ybWVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZXIuaWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyB0cmFuc2Zvcm1lciBkb2VzIG5vdCBzdXBwb3J0IHJlc3RvcmluZyB2YWx1ZXMuXG4gICAqXG4gICAqIEB0aHJvd3NcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZXN0b3JlVmFsdWUoKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignR3JvdXBUcmFuc2Zvcm1lciBkb2VzIG5vdCBzdXBwb3J0IHJlc3RvcmluZyB2YWx1ZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaXJzdCB0cmFuc2Zvcm1lciB0aGF0IGNhbiB0cmFuc2Zvcm0gdGhlIGdpdmVuIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZ2V0IHRoZSBmaXJzdCB0cmFuc2Zvcm1lciBmb3IuXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQgdGhlIGZpcnN0IHRyYW5zZm9ybWVyIGZvci5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IHRyYW5zZm9ybWVyIHRoYXQgY2FuIHRyYW5zZm9ybSB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIGdldEZpcnN0VHJhbnNmb3JtZXJUaGF0Q2FuVHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IG51bGwgfCBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtZXJzLmZpbmQoKHQpID0+IHQuY2FuVHJhbnNmb3JtKHZhbHVlLCBrZXkpKSA/PyBudWxsO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQkFBbUI7QUFLckIsTUFBTSx5QkFBeUIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWV6QyxZQUErQixjQUE2QjtBQUNqRSxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVR0QyxJQUFvQixLQUFhO0FBQy9CLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtCZ0IsYUFBYSxPQUFnQixLQUFzQjtBQUNqRSxXQUFPLEtBQUssb0NBQW9DLE9BQU8sR0FBRyxNQUFNO0FBQUEsRUFDbEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFnQixlQUFlLGVBQW9DO0FBQ2pFLFdBQU8sa0JBQWtCLEtBQUssYUFBYSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sYUFBYSxHQUFHLDBCQUEwQixhQUFhLFFBQVE7QUFBQSxFQUNqSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTZ0IsZUFBZSxPQUFnQixLQUFzQjtBQUNuRSxVQUFNLGNBQWMsS0FBSyxvQ0FBb0MsT0FBTyxHQUFHO0FBQ3ZFLHNCQUFrQixhQUFhLHdDQUF3QztBQUV2RSxXQUFPLFlBQVksZUFBZSxPQUFPLEdBQUc7QUFBQSxFQUM5QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTbUIsaUJBQWlCLE9BQWdCLEtBQTRCO0FBQzlFLFVBQU0sY0FBYyxLQUFLLG9DQUFvQyxPQUFPLEdBQUc7QUFDdkUsUUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sWUFBWTtBQUFBLEVBQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT21CLGVBQXNCO0FBQ3ZDLFVBQU0sSUFBSSxNQUFNLG9EQUFvRDtBQUFBLEVBQ3RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNRLG9DQUFvQyxPQUFnQixLQUFpQztBQUMzRixXQUFPLEtBQUssYUFBYSxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsT0FBTyxHQUFHLENBQUMsS0FBSztBQUFBLEVBQ3RFO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/esm/url.d.mts
CHANGED
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Contains a utility function for validating URLs.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Determines whether a given string is a `file://` URL.
|
|
9
|
+
*
|
|
10
|
+
* @param str - The string to check.
|
|
11
|
+
* @returns `true` if the string uses the `file:` scheme, otherwise `false`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isFileUrl(str: string): boolean;
|
|
7
14
|
/**
|
|
8
15
|
* Determines whether a given string is a valid URL
|
|
9
16
|
*
|
|
@@ -11,3 +18,11 @@
|
|
|
11
18
|
* @returns `true` if the string is a valid URL, otherwise `false`.
|
|
12
19
|
*/
|
|
13
20
|
export declare function isUrl(str: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Normalizes a `file://` URL to a pretty form by converting backslashes to forward slashes. The URL is
|
|
23
|
+
* expected to already be decoded. Non-`file://` URLs are returned unchanged.
|
|
24
|
+
*
|
|
25
|
+
* @param url - The URL to normalize.
|
|
26
|
+
* @returns The normalized URL.
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizeFileUrl(url: string): string;
|
package/dist/lib/esm/url.mjs
CHANGED
|
@@ -22,6 +22,10 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
24
|
const SCHEME_REG_EXP = /^[A-Za-z][A-Za-z0-9+\-.]*:\S+$/;
|
|
25
|
+
const FILE_SCHEME_REG_EXP = /^file:/i;
|
|
26
|
+
function isFileUrl(str) {
|
|
27
|
+
return FILE_SCHEME_REG_EXP.test(str);
|
|
28
|
+
}
|
|
25
29
|
function isUrl(str) {
|
|
26
30
|
if (/\s/.test(str)) {
|
|
27
31
|
return false;
|
|
@@ -36,7 +40,12 @@ function isUrl(str) {
|
|
|
36
40
|
}
|
|
37
41
|
return SCHEME_REG_EXP.test(str);
|
|
38
42
|
}
|
|
43
|
+
function normalizeFileUrl(url) {
|
|
44
|
+
return isFileUrl(url) ? url.replaceAll("\\", "/") : url;
|
|
45
|
+
}
|
|
39
46
|
export {
|
|
40
|
-
|
|
47
|
+
isFileUrl,
|
|
48
|
+
isUrl,
|
|
49
|
+
normalizeFileUrl
|
|
41
50
|
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3VybC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIGEgdXRpbGl0eSBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBVUkxzLlxuICovXG5cbmNvbnN0IFNDSEVNRV9SRUdfRVhQID0gL15bQS1aYS16XVtBLVphLXowLTkrXFwtLl0qOlxcUyskLztcblxuY29uc3QgRklMRV9TQ0hFTUVfUkVHX0VYUCA9IC9eZmlsZTovaTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBzdHJpbmcgaXMgYSBgZmlsZTovL2AgVVJMLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdHJpbmcgdXNlcyB0aGUgYGZpbGU6YCBzY2hlbWUsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxlVXJsKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBGSUxFX1NDSEVNRV9SRUdfRVhQLnRlc3Qoc3RyKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBVUkxcbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB2YWxpZGF0ZSBhcyBhIFVSTC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVVJMLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICgvXFxzLy50ZXN0KHN0cikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHN0ci5pbmNsdWRlcygnOi8vJykpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTChzdHIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFNDSEVNRV9SRUdfRVhQLnRlc3Qoc3RyKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgYGZpbGU6Ly9gIFVSTCB0byBhIHByZXR0eSBmb3JtIGJ5IGNvbnZlcnRpbmcgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzLiBUaGUgVVJMIGlzXG4gKiBleHBlY3RlZCB0byBhbHJlYWR5IGJlIGRlY29kZWQuIE5vbi1gZmlsZTovL2AgVVJMcyBhcmUgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbGVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaXNGaWxlVXJsKHVybCkgPyB1cmwucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgOiB1cmw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLE1BQU0saUJBQWlCO0FBRXZCLE1BQU0sc0JBQXNCO0FBUXJCLFNBQVMsVUFBVSxLQUFzQjtBQUM5QyxTQUFPLG9CQUFvQixLQUFLLEdBQUc7QUFDckM7QUFRTyxTQUFTLE1BQU0sS0FBc0I7QUFDMUMsTUFBSSxLQUFLLEtBQUssR0FBRyxHQUFHO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxJQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3ZCLFFBQUk7QUFDRixVQUFJLElBQUksR0FBRztBQUNYLGFBQU87QUFBQSxJQUNULFFBQVE7QUFDTixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPLGVBQWUsS0FBSyxHQUFHO0FBQ2hDO0FBU08sU0FBUyxpQkFBaUIsS0FBcUI7QUFDcEQsU0FBTyxVQUFVLEdBQUcsSUFBSSxJQUFJLFdBQVcsTUFBTSxHQUFHLElBQUk7QUFDdEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../../../dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs",
|
|
3
|
+
"module": "../../../dist/lib/esm/obsidian/command-handlers/unlock-active-note-command-handler.mjs",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "../../../dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.d.cts"
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-dev-utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "85.1.0",
|
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian"
|
|
@@ -681,10 +681,10 @@
|
|
|
681
681
|
"esbuild": "^0.28.1",
|
|
682
682
|
"esbuild-sass-plugin": "^3.7.0",
|
|
683
683
|
"esbuild-svelte": "^0.9.5",
|
|
684
|
-
"eslint": "^10.
|
|
684
|
+
"eslint": "^10.7.0",
|
|
685
685
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
686
686
|
"eslint-plugin-import-x": "^4.17.1",
|
|
687
|
-
"eslint-plugin-jsdoc": "^63.0.
|
|
687
|
+
"eslint-plugin-jsdoc": "^63.0.13",
|
|
688
688
|
"eslint-plugin-no-unsanitized": "^4.1.5",
|
|
689
689
|
"eslint-plugin-obsidianmd": "^0.4.1",
|
|
690
690
|
"eslint-plugin-perfectionist": "^5.10.0",
|
|
@@ -702,7 +702,7 @@
|
|
|
702
702
|
"obsidian": "^1.13.1",
|
|
703
703
|
"path-browserify": "^1.0.1",
|
|
704
704
|
"postcss": "^8.5.16",
|
|
705
|
-
"postcss-modules": "^9.0.
|
|
705
|
+
"postcss-modules": "^9.0.1",
|
|
706
706
|
"preact": "^10.29.7",
|
|
707
707
|
"react": "^19.2.7",
|
|
708
708
|
"remark": "^15.0.1",
|
|
@@ -710,7 +710,7 @@
|
|
|
710
710
|
"remark-wiki-link": "^2.0.1",
|
|
711
711
|
"sass": "^1.101.0",
|
|
712
712
|
"semver": "^7.8.5",
|
|
713
|
-
"shell-quote": "^1.
|
|
713
|
+
"shell-quote": "^1.10.0",
|
|
714
714
|
"svelte-check": "^4.7.2",
|
|
715
715
|
"svelte-preprocess": "^6.0.5",
|
|
716
716
|
"type-fest": "^5.8.0",
|
|
@@ -730,12 +730,12 @@
|
|
|
730
730
|
"better-typescript-lib": "^2.12.0",
|
|
731
731
|
"czg": "^1.13.1",
|
|
732
732
|
"dedent": "^1.7.2",
|
|
733
|
-
"eslint-plugin-n": "^18.2.
|
|
733
|
+
"eslint-plugin-n": "^18.2.2",
|
|
734
734
|
"husky": "^9.1.7",
|
|
735
735
|
"jsdom": "^29.1.1",
|
|
736
736
|
"moment": "^2.30.1",
|
|
737
737
|
"nano-staged": "^1.0.2",
|
|
738
|
-
"obsidian-integration-testing": "^
|
|
738
|
+
"obsidian-integration-testing": "^6.0.0",
|
|
739
739
|
"obsidian-test-mocks": "^3.6.0",
|
|
740
740
|
"ts-declaration-location": "^1.0.7",
|
|
741
741
|
"vitest": "^4.1.10",
|