@mnaoumov/typescript-dev-toolkit 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/build.cjs +2 -24
- package/dist/lib/cjs/build.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +2 -24
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +1 -56
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +4 -25
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +6 -61
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +129 -27
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +4 -2
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +3 -25
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
- package/dist/lib/cjs/bundlers/index.cjs +2 -57
- package/dist/lib/cjs/bundlers/index.d.cts +1 -1
- package/dist/lib/cjs/check-project-types.cjs +3 -25
- package/dist/lib/cjs/check-project-types.d.cts +1 -1
- package/dist/lib/cjs/cli-utils.cjs +3 -25
- package/dist/lib/cjs/cli-utils.d.cts +1 -1
- package/dist/lib/cjs/code-generator.cjs +1 -56
- package/dist/lib/cjs/code-generator.d.cts +1 -1
- package/dist/lib/cjs/commitlint-config.cjs +2 -24
- package/dist/lib/cjs/commitlint-config.d.cts +1 -1
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +1 -56
- package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +1 -56
- package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
- package/dist/lib/cjs/env-toggle.cjs +3 -25
- package/dist/lib/cjs/env-toggle.d.cts +1 -1
- package/dist/lib/cjs/exec.cjs +3 -25
- package/dist/lib/cjs/exec.d.cts +2 -1
- package/dist/lib/cjs/forbidden-patterns.cjs +3 -25
- package/dist/lib/cjs/forbidden-patterns.d.cts +1 -1
- package/dist/lib/cjs/formatters/dprint.cjs +2 -24
- package/dist/lib/cjs/formatters/dprint.d.cts +1 -1
- package/dist/lib/cjs/formatters/index.cjs +2 -57
- package/dist/lib/cjs/formatters/index.d.cts +1 -1
- package/dist/lib/cjs/fs.cjs +2 -24
- package/dist/lib/cjs/fs.d.cts +2 -1
- package/dist/lib/cjs/gate.cjs +1 -56
- package/dist/lib/cjs/gate.d.cts +1 -1
- package/dist/lib/cjs/git.cjs +1 -56
- package/dist/lib/cjs/git.d.cts +1 -1
- package/dist/lib/cjs/index.cjs +31 -86
- package/dist/lib/cjs/json.cjs +2 -24
- package/dist/lib/cjs/json.d.cts +1 -1
- package/dist/lib/cjs/library-build.cjs +101 -35
- package/dist/lib/cjs/library-build.d.cts +12 -2
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/linters/cspell-content.cjs +2 -24
- package/dist/lib/cjs/linters/cspell-content.d.cts +1 -1
- package/dist/lib/cjs/linters/cspell.cjs +1 -56
- package/dist/lib/cjs/linters/cspell.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-config.cjs +8 -30
- package/dist/lib/cjs/linters/eslint-config.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +13 -68
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +1 -1
- package/dist/lib/cjs/linters/eslint.cjs +78 -26
- package/dist/lib/cjs/linters/eslint.d.cts +40 -1
- package/dist/lib/cjs/linters/index.cjs +15 -70
- package/dist/lib/cjs/linters/index.d.cts +1 -1
- package/dist/lib/cjs/linters/lint-ignores.cjs +2 -24
- package/dist/lib/cjs/linters/lint-ignores.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +3 -25
- package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-content.cjs +2 -24
- package/dist/lib/cjs/linters/markdownlint-content.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-ignores.cjs +1 -56
- package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +2 -57
- package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +1 -56
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +1 -1
- package/dist/lib/cjs/linters/markdownlint.cjs +2 -24
- package/dist/lib/cjs/linters/markdownlint.d.cts +1 -1
- package/dist/lib/cjs/linters/over-exposure.cjs +2 -24
- package/dist/lib/cjs/linters/over-exposure.d.cts +1 -1
- package/dist/lib/cjs/nano-staged-config.cjs +2 -57
- package/dist/lib/cjs/nano-staged-config.d.cts +1 -1
- package/dist/lib/cjs/npm-publish.cjs +1 -56
- package/dist/lib/cjs/npm-publish.d.cts +1 -1
- package/dist/lib/cjs/npm-run.cjs +2 -24
- package/dist/lib/cjs/npm-run.d.cts +1 -1
- package/dist/lib/cjs/npm.cjs +2 -24
- package/dist/lib/cjs/npm.d.cts +1 -1
- package/dist/lib/cjs/package-lock-integrity.cjs +1 -56
- package/dist/lib/cjs/package-lock-integrity.d.cts +1 -1
- package/dist/lib/cjs/package-manager.cjs +3 -25
- package/dist/lib/cjs/package-manager.d.cts +1 -1
- package/dist/lib/cjs/released-issues.cjs +2 -24
- package/dist/lib/cjs/released-issues.d.cts +1 -1
- package/dist/lib/cjs/repo-paths.cjs +1 -56
- package/dist/lib/cjs/repo-paths.d.cts +1 -1
- package/dist/lib/cjs/root.cjs +2 -24
- package/dist/lib/cjs/root.d.cts +1 -1
- package/dist/lib/cjs/test-runners/index.cjs +3 -58
- package/dist/lib/cjs/test-runners/index.d.cts +1 -1
- package/dist/lib/cjs/test-runners/vitest-config.cjs +1 -56
- package/dist/lib/cjs/test-runners/vitest-config.d.cts +1 -1
- package/dist/lib/cjs/test-runners/vitest.cjs +1 -56
- package/dist/lib/cjs/test-runners/vitest.d.cts +1 -1
- package/dist/lib/cjs/validate-declarations.cjs +2 -24
- package/dist/lib/cjs/validate-declarations.d.cts +1 -1
- package/dist/lib/cjs/version.cjs +2 -24
- package/dist/lib/cjs/version.d.cts +2 -1
- package/dist/lib/esm/build.d.mts +1 -1
- package/dist/lib/esm/build.mjs +2 -11
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +2 -11
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +1 -43
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +4 -12
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -43
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +4 -2
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +154 -14
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +2 -11
- package/dist/lib/esm/bundlers/index.d.mts +1 -1
- package/dist/lib/esm/bundlers/index.mjs +1 -43
- package/dist/lib/esm/check-project-types.d.mts +1 -1
- package/dist/lib/esm/check-project-types.mjs +2 -11
- package/dist/lib/esm/cli-utils.d.mts +1 -1
- package/dist/lib/esm/cli-utils.mjs +2 -11
- package/dist/lib/esm/code-generator.d.mts +1 -1
- package/dist/lib/esm/code-generator.mjs +1 -43
- package/dist/lib/esm/commitlint-config.d.mts +1 -1
- package/dist/lib/esm/commitlint-config.mjs +2 -11
- package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +1 -43
- package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +1 -43
- package/dist/lib/esm/env-toggle.d.mts +1 -1
- package/dist/lib/esm/env-toggle.mjs +2 -11
- package/dist/lib/esm/exec.d.mts +2 -1
- package/dist/lib/esm/exec.mjs +2 -11
- package/dist/lib/esm/forbidden-patterns.d.mts +1 -1
- package/dist/lib/esm/forbidden-patterns.mjs +2 -11
- package/dist/lib/esm/formatters/dprint.d.mts +1 -1
- package/dist/lib/esm/formatters/dprint.mjs +2 -11
- package/dist/lib/esm/formatters/index.d.mts +1 -1
- package/dist/lib/esm/formatters/index.mjs +1 -43
- package/dist/lib/esm/fs.d.mts +2 -1
- package/dist/lib/esm/fs.mjs +2 -11
- package/dist/lib/esm/gate.d.mts +1 -1
- package/dist/lib/esm/gate.mjs +1 -43
- package/dist/lib/esm/git.d.mts +1 -1
- package/dist/lib/esm/git.mjs +1 -43
- package/dist/lib/esm/index.mjs +1 -43
- package/dist/lib/esm/json.d.mts +1 -1
- package/dist/lib/esm/json.mjs +2 -11
- package/dist/lib/esm/library-build.d.mts +12 -2
- package/dist/lib/esm/library-build.mjs +110 -22
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/linters/cspell-content.d.mts +1 -1
- package/dist/lib/esm/linters/cspell-content.mjs +2 -11
- package/dist/lib/esm/linters/cspell.d.mts +1 -1
- package/dist/lib/esm/linters/cspell.mjs +1 -43
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -43
- package/dist/lib/esm/linters/eslint-config.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-config.mjs +2 -11
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/index.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +2 -11
- package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +1 -1
- package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +1 -1
- package/dist/lib/esm/linters/eslint.d.mts +40 -1
- package/dist/lib/esm/linters/eslint.mjs +75 -13
- package/dist/lib/esm/linters/index.d.mts +1 -1
- package/dist/lib/esm/linters/index.mjs +1 -43
- package/dist/lib/esm/linters/lint-ignores.d.mts +1 -1
- package/dist/lib/esm/linters/lint-ignores.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-content.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-content.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-ignores.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-ignores.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint.d.mts +1 -1
- package/dist/lib/esm/linters/markdownlint.mjs +2 -11
- package/dist/lib/esm/linters/over-exposure.d.mts +1 -1
- package/dist/lib/esm/linters/over-exposure.mjs +2 -11
- package/dist/lib/esm/nano-staged-config.d.mts +1 -1
- package/dist/lib/esm/nano-staged-config.mjs +1 -43
- package/dist/lib/esm/npm-publish.d.mts +1 -1
- package/dist/lib/esm/npm-publish.mjs +1 -43
- package/dist/lib/esm/npm-run.d.mts +1 -1
- package/dist/lib/esm/npm-run.mjs +2 -11
- package/dist/lib/esm/npm.d.mts +1 -1
- package/dist/lib/esm/npm.mjs +2 -11
- package/dist/lib/esm/package-lock-integrity.d.mts +1 -1
- package/dist/lib/esm/package-lock-integrity.mjs +1 -43
- package/dist/lib/esm/package-manager.d.mts +1 -1
- package/dist/lib/esm/package-manager.mjs +2 -11
- package/dist/lib/esm/released-issues.d.mts +1 -1
- package/dist/lib/esm/released-issues.mjs +2 -11
- package/dist/lib/esm/repo-paths.d.mts +1 -1
- package/dist/lib/esm/repo-paths.mjs +1 -43
- package/dist/lib/esm/root.d.mts +1 -1
- package/dist/lib/esm/root.mjs +2 -11
- package/dist/lib/esm/test-runners/index.d.mts +1 -1
- package/dist/lib/esm/test-runners/index.mjs +1 -43
- package/dist/lib/esm/test-runners/vitest-config.d.mts +1 -1
- package/dist/lib/esm/test-runners/vitest-config.mjs +1 -43
- package/dist/lib/esm/test-runners/vitest.d.mts +1 -1
- package/dist/lib/esm/test-runners/vitest.mjs +1 -43
- package/dist/lib/esm/validate-declarations.d.mts +1 -1
- package/dist/lib/esm/validate-declarations.mjs +2 -11
- package/dist/lib/esm/version.d.mts +2 -1
- package/dist/lib/esm/version.mjs +2 -11
- package/package.json +1 -1
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,10 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
(
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
46
37
|
})();
|
|
47
38
|
|
|
48
39
|
import {
|
|
@@ -53,7 +44,39 @@ import {
|
|
|
53
44
|
makeValidVariableName,
|
|
54
45
|
replaceAll
|
|
55
46
|
} from "@mnaoumov/typescript-lib/string";
|
|
47
|
+
import { Buffer } from "node:buffer";
|
|
56
48
|
import { readFile } from "node:fs/promises";
|
|
49
|
+
import {
|
|
50
|
+
createSourceFile,
|
|
51
|
+
forEachChild,
|
|
52
|
+
isBindingElement,
|
|
53
|
+
isCallExpression,
|
|
54
|
+
isClassDeclaration,
|
|
55
|
+
isExportDeclaration,
|
|
56
|
+
isFunctionDeclaration,
|
|
57
|
+
isGetAccessorDeclaration,
|
|
58
|
+
isIdentifier,
|
|
59
|
+
isImportClause,
|
|
60
|
+
isImportDeclaration,
|
|
61
|
+
isImportSpecifier,
|
|
62
|
+
isMethodDeclaration,
|
|
63
|
+
isNamespaceImport,
|
|
64
|
+
isParameter,
|
|
65
|
+
isPropertyAccessExpression,
|
|
66
|
+
isPropertyAssignment,
|
|
67
|
+
isPropertyDeclaration,
|
|
68
|
+
isSetAccessorDeclaration,
|
|
69
|
+
isStringLiteral,
|
|
70
|
+
isVariableDeclaration,
|
|
71
|
+
ScriptKind,
|
|
72
|
+
ScriptTarget,
|
|
73
|
+
SyntaxKind
|
|
74
|
+
} from "typescript";
|
|
75
|
+
const DISPOSE_SYMBOL_NAMES = /* @__PURE__ */ new Set(["asyncDispose", "dispose"]);
|
|
76
|
+
const INLINE_SOURCE_MAP_PREFIX = "//# sourceMappingURL=data:application/json;base64,";
|
|
77
|
+
const JS_OUTPUT_REG_EXP = /\.[cm]?js$/;
|
|
78
|
+
const KNOWN_SYMBOL_HELPER_NAME = "__knownSymbol";
|
|
79
|
+
const NON_BARE_SPECIFIER_REG_EXP = /^(?:\.|\/|node:)/;
|
|
57
80
|
function ensureBrowserProcess() {
|
|
58
81
|
const browserProcess = {
|
|
59
82
|
browser: true,
|
|
@@ -114,9 +137,16 @@ function preprocessPlugin(options = {}) {
|
|
|
114
137
|
for (const key of Object.keys(replacements)) {
|
|
115
138
|
build.initialOptions.define[key] = `__${makeValidVariableName(key)}`;
|
|
116
139
|
}
|
|
117
|
-
build.initialOptions.
|
|
118
|
-
|
|
119
|
-
|
|
140
|
+
if (build.initialOptions.bundle === false) {
|
|
141
|
+
const leadingBanner = build.initialOptions.banner?.["js"] ?? "";
|
|
142
|
+
build.onEnd((result) => {
|
|
143
|
+
addModulePreambles({ additionalBannerInitFunctions, leadingBanner, outputFiles: result.outputFiles ?? [] });
|
|
144
|
+
});
|
|
145
|
+
} else {
|
|
146
|
+
build.initialOptions.banner ??= {};
|
|
147
|
+
build.initialOptions.banner["js"] ??= "";
|
|
148
|
+
build.initialOptions.banner["js"] += makePreprocessBanner({ additionalBannerInitFunctions, isEsm });
|
|
149
|
+
}
|
|
120
150
|
build.onLoad({ filter: /\.(?:js|ts|cjs|mjs|cts|mts)$/ }, async ($arguments) => {
|
|
121
151
|
let contents = await readFile($arguments.path, "utf-8");
|
|
122
152
|
for (const [key, value] of Object.entries(replacements)) {
|
|
@@ -142,6 +172,20 @@ ${contents}`;
|
|
|
142
172
|
}
|
|
143
173
|
};
|
|
144
174
|
}
|
|
175
|
+
function addModulePreambles(params) {
|
|
176
|
+
const { additionalBannerInitFunctions, leadingBanner, outputFiles } = params;
|
|
177
|
+
for (const outputFile of outputFiles) {
|
|
178
|
+
if (!JS_OUTPUT_REG_EXP.test(outputFile.path)) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const code = outputFile.text;
|
|
182
|
+
const preamble = makeModulePreamble(getModuleShimNeeds(code), additionalBannerInitFunctions);
|
|
183
|
+
if (preamble === "") {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
outputFile.contents = new TextEncoder().encode(insertPreamble({ code, leadingBanner, preamble }));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
145
189
|
function getCjsImportMetaUrl() {
|
|
146
190
|
if (typeof __filename === "string") {
|
|
147
191
|
const localRequire = require;
|
|
@@ -152,6 +196,63 @@ function getCjsImportMetaUrl() {
|
|
|
152
196
|
}
|
|
153
197
|
return globalThis.location?.href ?? "";
|
|
154
198
|
}
|
|
199
|
+
function getIdentifierUsage(node) {
|
|
200
|
+
const { parent } = node;
|
|
201
|
+
if ((isPropertyAccessExpression(parent) || isPropertyAssignment(parent) || isMethodDeclaration(parent) || isPropertyDeclaration(parent) || isGetAccessorDeclaration(parent) || isSetAccessorDeclaration(parent)) && parent.name === node) {
|
|
202
|
+
return "member" /* Member */;
|
|
203
|
+
}
|
|
204
|
+
return (isVariableDeclaration(parent) || isFunctionDeclaration(parent) || isClassDeclaration(parent) || isParameter(parent) || isBindingElement(parent) || isImportClause(parent) || isImportSpecifier(parent) || isNamespaceImport(parent)) && parent.name === node ? "binding" /* Binding */ : "read" /* Read */;
|
|
205
|
+
}
|
|
206
|
+
function getModuleShimNeeds(code) {
|
|
207
|
+
const sourceFile = createSourceFile("module.js", code, ScriptTarget.Latest, true, ScriptKind.JS);
|
|
208
|
+
const boundNames = /* @__PURE__ */ new Set();
|
|
209
|
+
const readNames = /* @__PURE__ */ new Set();
|
|
210
|
+
let isBareImportFound = false;
|
|
211
|
+
let isDisposeSymbolFound = false;
|
|
212
|
+
function visit(node) {
|
|
213
|
+
const specifier = getModuleSpecifier(node);
|
|
214
|
+
if (specifier !== void 0 && !NON_BARE_SPECIFIER_REG_EXP.test(specifier)) {
|
|
215
|
+
isBareImportFound = true;
|
|
216
|
+
}
|
|
217
|
+
if (isPropertyAccessExpression(node) && isIdentifier(node.expression) && node.expression.text === "Symbol" && DISPOSE_SYMBOL_NAMES.has(node.name.text)) {
|
|
218
|
+
isDisposeSymbolFound = true;
|
|
219
|
+
}
|
|
220
|
+
if (isIdentifier(node)) {
|
|
221
|
+
if (node.text === KNOWN_SYMBOL_HELPER_NAME) {
|
|
222
|
+
isDisposeSymbolFound = true;
|
|
223
|
+
}
|
|
224
|
+
const usage = getIdentifierUsage(node);
|
|
225
|
+
if (usage === "binding" /* Binding */) {
|
|
226
|
+
boundNames.add(node.text);
|
|
227
|
+
} else if (usage === "read" /* Read */) {
|
|
228
|
+
readNames.add(node.text);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
forEachChild(node, visit);
|
|
232
|
+
}
|
|
233
|
+
visit(sourceFile);
|
|
234
|
+
function isFreeRead(name) {
|
|
235
|
+
return readNames.has(name) && !boundNames.has(name);
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
isBrowserProcessNeeded: isFreeRead("process") || isBareImportFound,
|
|
239
|
+
isDisposeSymbolsNeeded: isDisposeSymbolFound,
|
|
240
|
+
isNameNeeded: isFreeRead("__name")
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function getModuleSpecifier(node) {
|
|
244
|
+
if ((isImportDeclaration(node) || isExportDeclaration(node)) && node.moduleSpecifier !== void 0 && isStringLiteral(node.moduleSpecifier)) {
|
|
245
|
+
return node.moduleSpecifier.text;
|
|
246
|
+
}
|
|
247
|
+
if (isCallExpression(node)) {
|
|
248
|
+
const [firstArgument] = node.arguments;
|
|
249
|
+
const isLoader = node.expression.kind === SyntaxKind.ImportKeyword || isIdentifier(node.expression) && node.expression.text === "require";
|
|
250
|
+
if (isLoader && firstArgument !== void 0 && isStringLiteral(firstArgument)) {
|
|
251
|
+
return firstArgument.text;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return void 0;
|
|
255
|
+
}
|
|
155
256
|
function initCjs() {
|
|
156
257
|
const globalThisRecord = globalThis;
|
|
157
258
|
ensureDisposeSymbols();
|
|
@@ -166,6 +267,45 @@ function initEsm() {
|
|
|
166
267
|
ensureDisposeSymbols();
|
|
167
268
|
ensureBrowserProcess();
|
|
168
269
|
}
|
|
270
|
+
function insertPreamble(params) {
|
|
271
|
+
const { code, leadingBanner, preamble } = params;
|
|
272
|
+
const insertAt = leadingBanner.endsWith("\n") && code.startsWith(leadingBanner) ? leadingBanner.length : 0;
|
|
273
|
+
const addedLineCount = preamble.split("\n").length - 1;
|
|
274
|
+
let shiftedCode = code;
|
|
275
|
+
const sourceMapStart = code.lastIndexOf(INLINE_SOURCE_MAP_PREFIX);
|
|
276
|
+
if (sourceMapStart !== -1) {
|
|
277
|
+
const dataStart = sourceMapStart + INLINE_SOURCE_MAP_PREFIX.length;
|
|
278
|
+
const data = code.slice(dataStart).trimEnd();
|
|
279
|
+
const sourceMap = JSON.parse(Buffer.from(data, "base64").toString("utf-8"));
|
|
280
|
+
sourceMap.mappings = ";".repeat(addedLineCount) + sourceMap.mappings;
|
|
281
|
+
shiftedCode = code.slice(0, dataStart) + Buffer.from(JSON.stringify(sourceMap), "utf-8").toString("base64") + code.slice(dataStart + data.length);
|
|
282
|
+
}
|
|
283
|
+
return shiftedCode.slice(0, insertAt) + preamble + shiftedCode.slice(insertAt);
|
|
284
|
+
}
|
|
285
|
+
function makeModulePreamble(needs, additionalBannerInitFunctions) {
|
|
286
|
+
const shims = [];
|
|
287
|
+
const calls = [];
|
|
288
|
+
if (needs.isDisposeSymbolsNeeded) {
|
|
289
|
+
shims.push(ensureDisposeSymbols);
|
|
290
|
+
calls.push("ensureDisposeSymbols();");
|
|
291
|
+
}
|
|
292
|
+
if (needs.isBrowserProcessNeeded) {
|
|
293
|
+
shims.push(ensureBrowserProcess);
|
|
294
|
+
calls.push("ensureBrowserProcess();");
|
|
295
|
+
}
|
|
296
|
+
if (needs.isNameNeeded) {
|
|
297
|
+
shims.push(keepName);
|
|
298
|
+
calls.push("globalThis['__name'] ??= keepName;");
|
|
299
|
+
}
|
|
300
|
+
const sharedScope = shims.length === 0 ? "" : `(function () {
|
|
301
|
+
${shims.map(String).join("\n\n")}
|
|
302
|
+
|
|
303
|
+
${calls.join("\n")}
|
|
304
|
+
})();
|
|
305
|
+
`;
|
|
306
|
+
return sharedScope + additionalBannerInitFunctions.map((function_) => `(${String(function_)})();
|
|
307
|
+
`).join("");
|
|
308
|
+
}
|
|
169
309
|
export {
|
|
170
310
|
ensureBrowserProcess,
|
|
171
311
|
ensureDisposeSymbols,
|
|
@@ -173,4 +313,4 @@ export {
|
|
|
173
313
|
makePreprocessBanner,
|
|
174
314
|
preprocessPlugin
|
|
175
315
|
};
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9wcmVwcm9jZXNzLXBsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBUaGF0IGlzXG4gKiB3aHkgdGhleSBhbGwgbGl2ZSBpbiB0aGlzIG1vZHVsZTogZXNidWlsZCBjb21waWxlcyBhIGNyb3NzLW1vZHVsZSBjYWxsIHRvIGAoMCwgaW1wb3J0X21vZHVsZS5mbikoXHUyMDI2KWAsXG4gKiB3aGljaCB3b3VsZCBuYW1lIGEgYmluZGluZyB0aGUgZW1pdHRlZCBidW5kbGUgZG9lcyBub3QgaGF2ZS4gU2FtZS1tb2R1bGUgcmVmZXJlbmNlcyBzdGF5IGJhcmUsIGFuZFxuICoge0BsaW5rIG1ha2VQcmVwcm9jZXNzQmFubmVyfSBzZXJpYWxpemVzIHRoZSBzaGltcyBhbG9uZ3NpZGUgdGhlIGBpbml0YCBmdW5jdGlvbiBzbyB0aGV5IGFyZSBpbiBzY29wZSB0aGVyZS4gQSBzaGltXG4gKiB0aGF0IGlzIG5vdCBzZXJpYWxpemVkIHNpbGVudGx5IGRlZ3JhZGVzIHRvIHdoYXRldmVyIHRoZSBjb25zdW1lcidzIGdsb2JhbCBzY29wZSBob2xkcyB1bmRlciB0aGF0IG5hbWUgXHUyMDE0IHdoaWNoXG4gKiBpcyBob3cgYF9fbmFtZWAgdXNlZCB0byBlbmQgdXAgaG9sZGluZyBgd2luZG93Lm5hbWVgLlxuICpcbiAqIEEgY2FsbGVyIHRoYXQgbmVlZHMgbW9yZSBpbiB0aGUgYmFubmVyICh0aGUgT2JzaWRpYW4gcGx1Z2luIGJ1aWxkZXIgcGF0Y2hlcyBgcmVxdWlyZWApIGhhbmRzIGluXG4gKiB7QGxpbmsgUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMuYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnN9LiBFYWNoIG9uZSBpcyBzZXJpYWxpemVkIGFzIGl0cyBPV04gaW1tZWRpYXRlbHlcbiAqIGludm9rZWQgZnVuY3Rpb24gYWZ0ZXIgdGhlIHNoYXJlZCBzY29wZSwgc28gaXQgbXVzdCBiZSBzZWxmLWNvbnRhaW5lZDogaXQgY2Fubm90IHNlZSB0aGUgc2hpbXMsIGFuZCBjYWxsaW5nIG9uZVxuICogZnJvbSBhbm90aGVyIG1vZHVsZSB3b3VsZCBoaXQgZXhhY3RseSB0aGUgY3Jvc3MtbW9kdWxlIHRyYXAgYWJvdmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBicm93c2VyLWZsYXZvcmVkIHN0YW5kLWluIGZvciBOb2RlJ3MgYHByb2Nlc3NgIGdsb2JhbC5cbiAqL1xuaW50ZXJmYWNlIEJyb3dzZXJQcm9jZXNzIGV4dGVuZHMgUGFydGlhbDxOb2RlSlMuUHJvY2Vzcz4ge1xuICAvKipcbiAgICogTWFya3MgdGhlIHByb2Nlc3MgYXMgYSBicm93c2VyIG9uZS4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHNlbGVjdHMgaXRzIGJyb3dzZXIgZW50cnkgcG9pbnQgb24gaXQuXG4gICAqL1xuICBicm93c2VyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgYFN5bWJvbGAgY29uc3RydWN0b3Ige0BsaW5rIGVuc3VyZURpc3Bvc2VTeW1ib2xzfSByZWFkcyBhbmQgd3JpdGVzLCB3aXRoIHRoZSB0d28gZGlzcG9zZVxuICogc3ltYm9scyBvcHRpb25hbCBiZWNhdXNlIGFuIGVuZ2luZSB3aXRob3V0IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgZG9lcyBub3QgaGF2ZSB0aGVtLlxuICovXG5pbnRlcmZhY2UgRGlzcG9zZVN5bWJvbEhvc3Qge1xuICBhc3luY0Rpc3Bvc2U/OiBzeW1ib2w7XG4gIGRpc3Bvc2U/OiBzeW1ib2w7XG4gIGZvcjogKGtleTogc3RyaW5nKSA9PiBzeW1ib2w7XG59XG5cbmludGVyZmFjZSBFc21Nb2R1bGUge1xuICBfX2VzTW9kdWxlOiBib29sZWFuO1xuICBkZWZhdWx0OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhIGJyb3dzZXIgZ2xvYmFsIHtAbGluayBnZXRDanNJbXBvcnRNZXRhVXJsfSByZWFkcywgb3B0aW9uYWwgYmVjYXVzZSBhIG5vbi1icm93c2VyIGhvc3QgaGFzIG5vbmUuXG4gKi9cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVybE1vZHVsZSB7XG4gIHBhdGhUb0ZpbGVVUkw6IHR5cGVvZiBwYXRoVG9GaWxlVVJMO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGJ1bmRsZSBydW5zIGFnYWluc3QgYSBgcHJvY2Vzc2AgZ2xvYmFsIHRoYXQgYnJvd3Nlci10YXJnZXRpbmcgcGFja2FnZXMgcmVjb2duaXplLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCBzbyBpdCBuZXZlciBydW5zIGluIHRoZSBidWlsZGVyIHByb2Nlc3MgXHUyMDE0IGJ1dCBpdCBpcyBhbiBvcmRpbmFyeVxuICogZnVuY3Rpb24gaGVyZSwgc28gaXQgaXMgdW5pdC10ZXN0ZWQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gYnkgZXZhbHVhdGluZyB0aGUgYmFubmVyIHRleHQuXG4gKlxuICogRmlsbHMgaW4gdGhlIGtleXMgTUlTU0lORyBmcm9tIGEgaG9zdC1wcm92aWRlZCBgcHJvY2Vzc2AgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIG9yIHNraXBwaW5nIGl0LiBPYnNpZGlhblxuICogTW9iaWxlIGV4cG9zZXMgYSBwYXJ0aWFsIGBwcm9jZXNzYCwgYW5kIHRoZSB3aG9sZS1vYmplY3QgZ3VhcmRzIHRoaXMgcmVwbGFjZWQgKGBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzKSB7XG4gKiByZXR1cm47IH1gIC8gYGdsb2JhbFRoaXNSZWNvcmRbJ3Byb2Nlc3MnXSA/Pz0gXHUyMDI2YCkgdG9vayB0aGF0IGFzIFwiYWxyZWFkeSBzaGltbWVkXCIsIHNvIGBicm93c2VyYCBuZXZlclxuICogbGFuZGVkLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2UgdGhlbiBzZWxlY3RlZCBpdHMgTm9kZSBlbnRyeSBwb2ludCwgd2hpY2ggY2FsbHNcbiAqIGByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlKClgIGF0IG1vZHVsZSB0b3AgbGV2ZWwsIGFuZCBvbiBtb2JpbGUgdGhlIHBhdGNoZWQgYHJlcXVpcmVgIHJldHVybnMgYHt9YCBcdTIwMTQgc29cbiAqIHRoZSBwbHVnaW4gdGhyZXcgYmVmb3JlIGl0cyBgb25sb2FkYCByYW4uXG4gKlxuICogQSByZWFsIE5vZGUgb3IgRWxlY3Ryb24gYHByb2Nlc3NgIGlzIGxlZnQgY29tcGxldGVseSB1bnRvdWNoZWQuIGBwcm9jZXNzLnZlcnNpb25zLm5vZGVgIGlzIHRoZSBzaWduYWwgZm9yXG4gKiBpdCwgYW5kIGl0IGlzIHNlbGYtY29udGFpbmVkLCBzbyBpdCBhbHNvIGhvbGRzIGluIHRoZSBOb2RlIENMSSBidW5kbGVzIHRoaXMgYmFubmVyIGlzIGVtaXR0ZWQgaW50by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk6IHZvaWQge1xuICBjb25zdCBicm93c2VyUHJvY2VzczogR2VuZXJpY09iamVjdDxCcm93c2VyUHJvY2Vzcz4gPSB7XG4gICAgYnJvd3NlcjogdHJ1ZSxcbiAgICBjd2QoKSB7XG4gICAgICByZXR1cm4gJy8nO1xuICAgIH0sXG4gICAgZW52OiB7fSxcbiAgICBwbGF0Zm9ybTogJ2FuZHJvaWQnXG4gIH07XG5cbiAgY29uc3QgZXhpc3RpbmdQcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzIGFzIFBhcnRpYWw8Tm9kZUpTLlByb2Nlc3M+IHwgdW5kZWZpbmVkO1xuXG4gIGlmICghZXhpc3RpbmdQcm9jZXNzKSB7XG4gICAgZ2xvYmFsVGhpcy5wcm9jZXNzID0gYnJvd3NlclByb2Nlc3MgYXMgTm9kZUpTLlByb2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nUHJvY2Vzcy52ZXJzaW9ucz8ubm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2Vzc1JlY29yZCA9IGV4aXN0aW5nUHJvY2VzcyBhcyBHZW5lcmljT2JqZWN0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGJyb3dzZXJQcm9jZXNzKSkge1xuICAgIGV4aXN0aW5nUHJvY2Vzc1JlY29yZFtrZXldID8/PSB2YWx1ZTtcbiAgfVxuXG4gIGV4aXN0aW5nUHJvY2Vzc1JlY29yZFsnYnJvd3NlciddID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBNYWtlcyBgU3ltYm9sLmRpc3Bvc2VgIGFuZCBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgZXhpc3QsIGZhbGxpbmcgYmFjayB0byB0aGUgcmVnaXN0cnkgc3ltYm9scyBlc2J1aWxkJ3NcbiAqIGB1c2luZ2AgaGVscGVycyBsb29rIHVwLlxuICpcbiAqIEBwYXJhbSBzeW1ib2xDb25zdHJ1Y3RvciAtIFRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB0byBwYXRjaC4gRGVmYXVsdHMgdG8gdGhlIGFtYmllbnQgb25lOyB0aGUgcGFyYW1ldGVyXG4gKiBleGlzdHMgc28gYSB0ZXN0IGNhbiBoYW5kIGluIGFuIGVuZ2luZSB0aGF0IGxhY2tzIHRoZSB3ZWxsLWtub3duIHN5bWJvbHMuXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIuIEEgZGlzcG9zYWJsZSBkZWNsYXJlcyBpdHMgbWV0aG9kIHVuZGVyIHRoZSBMSVRFUkFMIGtleVxuICogYFtTeW1ib2wuZGlzcG9zZV1gLCB3aGlsZSBlc2J1aWxkIGxvd2VycyBldmVyeSBgdXNpbmdgIHRvIGEgbG9va3VwIHRocm91Z2ggYF9fa25vd25TeW1ib2woJ2Rpc3Bvc2UnKWAsXG4gKiB3aGljaCBmYWxscyBiYWNrIHRvIGBTeW1ib2wuZm9yKCdTeW1ib2wuZGlzcG9zZScpYCB3aGVuIHRoZSBlbmdpbmUgaGFzIG5vIHdlbGwta25vd24gc3ltYm9sLiBPbiBzdWNoIGFuXG4gKiBlbmdpbmUgdGhlIGxpdGVyYWwga2V5IGV2YWx1YXRlcyB0byBgdW5kZWZpbmVkYCwgdGhlIG1ldGhvZCBsYW5kcyB1bmRlciB0aGUgc3RyaW5nIGBcInVuZGVmaW5lZFwiYCwgYW5kXG4gKiBldmVyeSBgdXNpbmdgIG9mIGl0IHRocm93cyBgT2JqZWN0IG5vdCBkaXNwb3NhYmxlYC4gRmlsbGluZyB0aGUgd2VsbC1rbm93biBzbG90IHdpdGggdGhhdCBzYW1lIHJlZ2lzdHJ5XG4gKiBzeW1ib2wgbWFrZXMgYm90aCBzaWRlcyBuYW1lIG9uZSBrZXkgb24gZXZlcnkgZW5naW5lLiBBIGhvc3QgdGhhdCBhbHJlYWR5IGhhcyB0aGUgc3ltYm9sIGlzIGxlZnRcbiAqIHVudG91Y2hlZDogYD8/PWAgbmV2ZXIgcmVhY2hlcyB0aGUgYXNzaWdubWVudCwgd2hpY2ggdGhlIGhvc3QncyBub24td3JpdGFibGUgcHJvcGVydHkgd291bGQgcmVmdXNlLlxuICpcbiAqIFRoZSBkZWZhdWx0IG5hbWVzIGBTeW1ib2xgIGJhcmUgb24gcHVycG9zZTogaXQgZXhpc3RzIG9uIGV2ZXJ5IGVuZ2luZSB0aGlzIHJ1bnMgb24sIGFuZCBhIGJhcmUgcmVmZXJlbmNlXG4gKiByZXNvbHZlcyBhZ2FpbnN0IHdoYXRldmVyIHNjb3BlIHRoZSBiYW5uZXIgaXMgZXZhbHVhdGVkIGluLCBleGFjdGx5IGFzIHRoZSBidW5kbGUncyBvd25cbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCBrZXlzIGRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRGlzcG9zZVN5bWJvbHMoc3ltYm9sQ29uc3RydWN0b3I6IERpc3Bvc2VTeW1ib2xIb3N0ID0gU3ltYm9sKTogdm9pZCB7XG4gIHN5bWJvbENvbnN0cnVjdG9yLmFzeW5jRGlzcG9zZSA/Pz0gc3ltYm9sQ29uc3RydWN0b3IuZm9yKCdTeW1ib2wuYXN5bmNEaXNwb3NlJyk7XG4gIHN5bWJvbENvbnN0cnVjdG9yLmRpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmRpc3Bvc2UnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGl0cyBhcmd1bWVudCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gVGhlIHZhbHVlIHRvIHJldHVybi5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBwYXNzZWQgaW4uXG4gKlxuICogQHJlbWFya3NcbiAqIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBiYW5uZXIsIHdoZXJlIGl0IHN0YW5kcyBpbiBmb3IgZXNidWlsZCdzIGBfX25hbWVgIGhlbHBlciBcdTIwMTQgd2hpY2ggbmFtZXMgYVxuICogZnVuY3Rpb24gYW5kIHJldHVybnMgaXQgXHUyMDE0IGZvciBidW5kbGVzIHRoYXQgcmVmZXJlbmNlIHRoZSBoZWxwZXIgd2l0aG91dCBlbWl0dGluZyB0aGVpciBvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWVwTmFtZSgkdW5rbm93bjogdW5rbm93bik6IHVua25vd24ge1xuICByZXR1cm4gJHVua25vd247XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBiYW5uZXIgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiBldmVyeSBlbWl0dGVkIGJ1bmRsZS5cbiAqXG4gKiBgU3RyaW5nKGZuKWAgY2FwdHVyZXMgb25seSB0aGUgZnVuY3Rpb24ncyBvd24gYm9keSwgc28gZXZlcnkgc2hpbSB0aGUgYGluaXRgIGZ1bmN0aW9uIGNhbGxzIGhhcyB0byBiZVxuICogc2VyaWFsaXplZCBuZXh0IHRvIGl0IGFuZCB3cmFwcGVkIGluIG9uZSBzaGFyZWQgc2NvcGU7IG90aGVyd2lzZSB0aGUgY2FsbCBpdCBtYWtlcyByZXNvbHZlcyBhZ2FpbnN0IHRoZVxuICogY29uc3VtZXIncyBnbG9iYWwgc2NvcGUgYXQgcnVudGltZS4gU2VlIHRoaXMgZmlsZSdzIGBAZmlsZWAgcmVtYXJrcy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBiYW5uZXIgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBiYW5uZXIgc291cmNlIHRvIHByZXBlbmQgdG8gdGhlIGVtaXR0ZWQgYnVuZGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVByZXByb2Nlc3NCYW5uZXIob3B0aW9uczogTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICBjb25zdCB7IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zID0gW10sIGlzRXNtID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNoaW1zID0gaXNFc20gPyBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzXSA6IFtlbnN1cmVEaXNwb3NlU3ltYm9scywgZW5zdXJlQnJvd3NlclByb2Nlc3MsIGtlZXBOYW1lXTtcbiAgY29uc3QgaW5pdCA9IGlzRXNtID8gaW5pdEVzbSA6IGluaXRDanM7XG4gIGNvbnN0IGFkZGl0aW9uYWxJbml0cyA9IGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zLm1hcCgoZnVuY3Rpb25fKSA9PiBgKCR7U3RyaW5nKGZ1bmN0aW9uXyl9KSgpO1xcbmApLmpvaW4oJycpO1xuICByZXR1cm4gYFxcbihmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4oJHtTdHJpbmcoaW5pdCl9KSgpO1xcbn0pKCk7XFxuJHthZGRpdGlvbmFsSW5pdHN9YDtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIHRvIHRoZSBtYXRjaGluZyBgc3RvcGAgZWl0aGVyIG5lZWRzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQgb3IgaXMgc2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciBhbmQgc28gcnVucyBpbnNpZGUgdGhlIGJ1aWx0IGJ1bmRsZSwgbmV2ZXIgaW4gdGhpcyBwcm9jZXNzLiBUaGUgc2hpbXMgYWJvdmUgYXJlIGRlbGliZXJhdGVseSBOT1QgaWdub3JlZDogdGhleSBhcmUgb3JkaW5hcnkgZnVuY3Rpb25zIGhlcmUgYW5kIGFyZSB1bml0LXRlc3RlZCBkaXJlY3RseS4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyID8/PSB7fTtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lclsnanMnXSA/Pz0gJyc7XG4gICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXRDanMoKTogdm9pZCB7XG4gIGNvbnN0IGdsb2JhbFRoaXNSZWNvcmQgPSBnbG9iYWxUaGlzIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBrZWVwTmFtZTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19leHRyYWN0RGVmYXVsdCddID8/PSBleHRyYWN0RGVmYXVsdDtcblxuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBTZXJpYWxpemVkIHdpdGggaW5pdENqcyBpbnRvIHRoZSBiYW5uZXI7IGF0IG1vZHVsZSBzY29wZSBpdCB3b3VsZCBiZSBsZWZ0IG91dCBvZiBpdC5cbiAgZnVuY3Rpb24gZXh0cmFjdERlZmF1bHQobW9kdWxlOiBQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICByZXR1cm4gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiBtb2R1bGUgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBlbnN1cmVEaXNwb3NlU3ltYm9scygpO1xuICBlbnN1cmVCcm93c2VyUHJvY2VzcygpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFB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
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjdXN0b20gZXNidWlsZCBwbHVnaW4gdGhhdCBwcmVwcm9jZXNzZXMgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcyBmb3IgYW55IGJ1aWxkIHRhcmdldC5cbiAqXG4gKiBAcmVtYXJrc1xuICogV2UgY2Fubm90IHVzZSBgLmAgaW5zdGVhZCBvZiBgKGRvdClgIGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBiZWNhdXNlIHRoZSBmaWxlIGl0c2VsZiBpcyBwcmVwcm9jZXNzZWQgd2l0aCB0aGUgc2FtZSBydWxlLlxuICpcbiAqIGBpbml0Q2pzYCwgYGluaXRFc21gIGFuZCB0aGUgc2hpbXMgdGhleSBjYWxsIGFyZSBzdHJpbmdpZmllZCB3aXRoIGBTdHJpbmcoZm4pYCBhbmQgaW5qZWN0ZWQgaW50byBldmVyeVxuICogYnVpbHQgYnVuZGxlIGFzIGFuIGVzYnVpbGQgYmFubmVyLCBzbyB0aGV5IG11c3QgYmUgcmVhY2hhYmxlIGZyb20gb25lIGFub3RoZXIgYnkgQkFSRSBpZGVudGlmaWVyLiBBbiB1bmJ1bmRsZWRcbiAqIGJ1aWxkIChgYnVuZGxlOiBmYWxzZWAsIG9uZSBvdXRwdXQgcGVyIHNvdXJjZSkgZ2V0cyBubyBiYW5uZXI6IGVhY2ggZW1pdHRlZCBtb2R1bGUgZ2V0cyBhIHByZWFtYmxlIGhvbGRpbmcgb25seSB0aGVcbiAqIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgYW5kIGEgbW9kdWxlIHRoYXQgbmVlZHMgbm9uZSBnZXRzIG5vdGhpbmcuIFRoYXQgaXNcbiAqIHdoeSB0aGV5IGFsbCBsaXZlIGluIHRoaXMgbW9kdWxlOiBlc2J1aWxkIGNvbXBpbGVzIGEgY3Jvc3MtbW9kdWxlIGNhbGwgdG8gYCgwLCBpbXBvcnRfbW9kdWxlLmZuKSjigKYpYCxcbiAqIHdoaWNoIHdvdWxkIG5hbWUgYSBiaW5kaW5nIHRoZSBlbWl0dGVkIGJ1bmRsZSBkb2VzIG5vdCBoYXZlLiBTYW1lLW1vZHVsZSByZWZlcmVuY2VzIHN0YXkgYmFyZSwgYW5kXG4gKiB7QGxpbmsgbWFrZVByZXByb2Nlc3NCYW5uZXJ9IHNlcmlhbGl6ZXMgdGhlIHNoaW1zIGFsb25nc2lkZSB0aGUgYGluaXRgIGZ1bmN0aW9uIHNvIHRoZXkgYXJlIGluIHNjb3BlIHRoZXJlLiBBIHNoaW1cbiAqIHRoYXQgaXMgbm90IHNlcmlhbGl6ZWQgc2lsZW50bHkgZGVncmFkZXMgdG8gd2hhdGV2ZXIgdGhlIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGhvbGRzIHVuZGVyIHRoYXQgbmFtZSDigJQgd2hpY2hcbiAqIGlzIGhvdyBgX19uYW1lYCB1c2VkIHRvIGVuZCB1cCBob2xkaW5nIGB3aW5kb3cubmFtZWAuXG4gKlxuICogQSBjYWxsZXIgdGhhdCBuZWVkcyBtb3JlIGluIHRoZSBiYW5uZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gYnVpbGRlciBwYXRjaGVzIGByZXF1aXJlYCkgaGFuZHMgaW5cbiAqIHtAbGluayBQcmVwcm9jZXNzUGx1Z2luT3B0aW9ucy5hZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uc30uIEVhY2ggb25lIGlzIHNlcmlhbGl6ZWQgYXMgaXRzIE9XTiBpbW1lZGlhdGVseVxuICogaW52b2tlZCBmdW5jdGlvbiBhZnRlciB0aGUgc2hhcmVkIHNjb3BlLCBzbyBpdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkOiBpdCBjYW5ub3Qgc2VlIHRoZSBzaGltcywgYW5kIGNhbGxpbmcgb25lXG4gKiBmcm9tIGFub3RoZXIgbW9kdWxlIHdvdWxkIGhpdCBleGFjdGx5IHRoZSBjcm9zcy1tb2R1bGUgdHJhcCBhYm92ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHR5cGUge1xuICBPdXRwdXRGaWxlLFxuICBQbHVnaW5cbn0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7XG4gIElkZW50aWZpZXIsXG4gIE5vZGVcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIEZ1bmN0aW9uSGFuZGxpbmdNb2RlLFxuICB0b0pzb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBtYWtlVmFsaWRWYXJpYWJsZU5hbWUsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU291cmNlRmlsZSxcbiAgZm9yRWFjaENoaWxkLFxuICBpc0JpbmRpbmdFbGVtZW50LFxuICBpc0NhbGxFeHByZXNzaW9uLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRXhwb3J0RGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW1wb3J0Q2xhdXNlLFxuICBpc0ltcG9ydERlY2xhcmF0aW9uLFxuICBpc0ltcG9ydFNwZWNpZmllcixcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNOYW1lc3BhY2VJbXBvcnQsXG4gIGlzUGFyYW1ldGVyLFxuICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbixcbiAgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIGlzVmFyaWFibGVEZWNsYXJhdGlvbixcbiAgU2NyaXB0S2luZCxcbiAgU2NyaXB0VGFyZ2V0LFxuICBTeW50YXhLaW5kXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCBESVNQT1NFX1NZTUJPTF9OQU1FUyA9IG5ldyBTZXQoWydhc3luY0Rpc3Bvc2UnLCAnZGlzcG9zZSddKTtcbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX1BSRUZJWCA9ICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5jb25zdCBKU19PVVRQVVRfUkVHX0VYUCA9IC9cXC5bY21dP2pzJC87XG4vLyBFc2J1aWxkJ3MgaGVscGVyIGJlaGluZCBhIGxvd2VyZWQgYHVzaW5nYCwgd2hpY2ggbG9va3MgdXAgYFN5bWJvbC5kaXNwb3NlYCBieSBuYW1lLlxuY29uc3QgS05PV05fU1lNQk9MX0hFTFBFUl9OQU1FID0gJ19fa25vd25TeW1ib2wnO1xuLy8gQSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBvciBhIGBub2RlOmAgYnVpbHQtaW46IGFueXRoaW5nIGVsc2UgbmFtZXMgYSBwYWNrYWdlLlxuY29uc3QgTk9OX0JBUkVfU1BFQ0lGSUVSX1JFR19FWFAgPSAvXig/OlxcLnxcXC98bm9kZTopLztcblxuZW51bSBJZGVudGlmaWVyVXNhZ2Uge1xuICBCaW5kaW5nID0gJ2JpbmRpbmcnLFxuICBNZW1iZXIgPSAnbWVtYmVyJyxcbiAgUmVhZCA9ICdyZWFkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUHJlcHJvY2Vzc0Jhbm5lcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVByZXByb2Nlc3NCYW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGFmdGVyIHRoZSBzaGFyZWQgc2hpbXMsIGVhY2ggaW52b2tlZCBvbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnM/OiByZWFkb25seSAoKCkgPT4gdm9pZClbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByZXByb2Nlc3NQbHVnaW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXByb2Nlc3NQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNlbGYtY29udGFpbmVkIGZ1bmN0aW9ucyBzZXJpYWxpemVkIGludG8gdGhlIGJhbm5lciBhZnRlciB0aGUgc2hhcmVkIHNoaW1zLCBlYWNoIGludm9rZWQgb25jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRWFjaCBmdW5jdGlvbiBpcyBlbWl0dGVkIGFzIGAoJHtTdHJpbmcoZm4pfSkoKTtgLCBzbyBpdCBtYXkgcmVmZXJlbmNlIG9ubHkgZ2xvYmFscyBhbmQgd2hhdCBpdCBkZWNsYXJlcyBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucz86IHJlYWRvbmx5ICgoKSA9PiB2b2lkKVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IHJlcGxhY2VzIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgaW4gYSBDb21tb25KUyBidWlsZC4gU2VyaWFsaXplZCBpbnRvXG4gICAqIGV2ZXJ5IGZpbGUgdGhhdCByZWFkcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGZpbGUgVVJMIG9mIGBfX2ZpbGVuYW1lYCwgb3IgYGxvY2F0aW9uLmhyZWZgIHdoZXJlIHRoZXJlIGlzIG5vIGBfX2ZpbGVuYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGNqc0ltcG9ydE1ldGFVcmxQcm92aWRlcj86ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnVpbGQgaXMgZm9yIGFuIEVTTSBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBpc0VzbT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBZGRNb2R1bGVQcmVhbWJsZXNQYXJhbXMge1xuICByZWFkb25seSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9uczogcmVhZG9ubHkgKCgpID0+IHZvaWQpW107XG4gIHJlYWRvbmx5IGxlYWRpbmdCYW5uZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZXM6IHJlYWRvbmx5IE91dHB1dEZpbGVbXTtcbn1cblxuLyoqXG4gKiBBIGJyb3dzZXItZmxhdm9yZWQgc3RhbmQtaW4gZm9yIE5vZGUncyBgcHJvY2Vzc2AgZ2xvYmFsLlxuICovXG5pbnRlcmZhY2UgQnJvd3NlclByb2Nlc3MgZXh0ZW5kcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgcHJvY2VzcyBhcyBhIGJyb3dzZXIgb25lLiBUaGUgYnVuZGxlZCBgZGVidWdgIHBhY2thZ2Ugc2VsZWN0cyBpdHMgYnJvd3NlciBlbnRyeSBwb2ludCBvbiBpdC5cbiAgICovXG4gIGJyb3dzZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIHRoZSBgU3ltYm9sYCBjb25zdHJ1Y3RvciB7QGxpbmsgZW5zdXJlRGlzcG9zZVN5bWJvbHN9IHJlYWRzIGFuZCB3cml0ZXMsIHdpdGggdGhlIHR3byBkaXNwb3NlXG4gKiBzeW1ib2xzIG9wdGlvbmFsIGJlY2F1c2UgYW4gZW5naW5lIHdpdGhvdXQgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBkb2VzIG5vdCBoYXZlIHRoZW0uXG4gKi9cbmludGVyZmFjZSBEaXNwb3NlU3ltYm9sSG9zdCB7XG4gIGFzeW5jRGlzcG9zZT86IHN5bWJvbDtcbiAgZGlzcG9zZT86IHN5bWJvbDtcbiAgZm9yOiAoa2V5OiBzdHJpbmcpID0+IHN5bWJvbDtcbn1cblxuaW50ZXJmYWNlIEVzbU1vZHVsZSB7XG4gIF9fZXNNb2R1bGU6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHNsaWNlIG9mIGEgYnJvd3NlciBnbG9iYWwge0BsaW5rIGdldENqc0ltcG9ydE1ldGFVcmx9IHJlYWRzLCBvcHRpb25hbCBiZWNhdXNlIGEgbm9uLWJyb3dzZXIgaG9zdCBoYXMgbm9uZS5cbiAqL1xuaW50ZXJmYWNlIEluc2VydFByZWFtYmxlUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBsZWFkaW5nQmFubmVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWFtYmxlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMb2NhdGlvbkhvc3Qge1xuICBsb2NhdGlvbj86IFBhZ2VMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZVNoaW1OZWVkcyB7XG4gIHJlYWRvbmx5IGlzQnJvd3NlclByb2Nlc3NOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRGlzcG9zZVN5bWJvbHNOZWVkZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzTmFtZU5lZWRlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBhZ2VMb2NhdGlvbiB7XG4gIGhyZWY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvdXJjZU1hcFdpdGhNYXBwaW5ncyB7XG4gIG1hcHBpbmdzOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVcmxNb2R1bGUge1xuICBwYXRoVG9GaWxlVVJMOiB0eXBlb2YgcGF0aFRvRmlsZVVSTDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBidW5kbGUgcnVucyBhZ2FpbnN0IGEgYHByb2Nlc3NgIGdsb2JhbCB0aGF0IGJyb3dzZXItdGFyZ2V0aW5nIHBhY2thZ2VzIHJlY29nbml6ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc28gaXQgbmV2ZXIgcnVucyBpbiB0aGUgYnVpbGRlciBwcm9jZXNzIOKAlCBidXQgaXQgaXMgYW4gb3JkaW5hcnlcbiAqIGZ1bmN0aW9uIGhlcmUsIHNvIGl0IGlzIHVuaXQtdGVzdGVkIGRpcmVjdGx5IHJhdGhlciB0aGFuIGJ5IGV2YWx1YXRpbmcgdGhlIGJhbm5lciB0ZXh0LlxuICpcbiAqIEZpbGxzIGluIHRoZSBrZXlzIE1JU1NJTkcgZnJvbSBhIGhvc3QtcHJvdmlkZWQgYHByb2Nlc3NgIHJhdGhlciB0aGFuIHJlcGxhY2luZyBvciBza2lwcGluZyBpdC4gT2JzaWRpYW5cbiAqIE1vYmlsZSBleHBvc2VzIGEgcGFydGlhbCBgcHJvY2Vzc2AsIGFuZCB0aGUgd2hvbGUtb2JqZWN0IGd1YXJkcyB0aGlzIHJlcGxhY2VkIChgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcykge1xuICogcmV0dXJuOyB9YCAvIGBnbG9iYWxUaGlzUmVjb3JkWydwcm9jZXNzJ10gPz89IOKApmApIHRvb2sgdGhhdCBhcyBcImFscmVhZHkgc2hpbW1lZFwiLCBzbyBgYnJvd3NlcmAgbmV2ZXJcbiAqIGxhbmRlZC4gVGhlIGJ1bmRsZWQgYGRlYnVnYCBwYWNrYWdlIHRoZW4gc2VsZWN0ZWQgaXRzIE5vZGUgZW50cnkgcG9pbnQsIHdoaWNoIGNhbGxzXG4gKiBgcmVxdWlyZSgndXRpbCcpLmRlcHJlY2F0ZSgpYCBhdCBtb2R1bGUgdG9wIGxldmVsLCBhbmQgb24gbW9iaWxlIHRoZSBwYXRjaGVkIGByZXF1aXJlYCByZXR1cm5zIGB7fWAg4oCUIHNvXG4gKiB0aGUgcGx1Z2luIHRocmV3IGJlZm9yZSBpdHMgYG9ubG9hZGAgcmFuLlxuICpcbiAqIEEgcmVhbCBOb2RlIG9yIEVsZWN0cm9uIGBwcm9jZXNzYCBpcyBsZWZ0IGNvbXBsZXRlbHkgdW50b3VjaGVkLiBgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlYCBpcyB0aGUgc2lnbmFsIGZvclxuICogaXQsIGFuZCBpdCBpcyBzZWxmLWNvbnRhaW5lZCwgc28gaXQgYWxzbyBob2xkcyBpbiB0aGUgTm9kZSBDTEkgYnVuZGxlcyB0aGlzIGJhbm5lciBpcyBlbWl0dGVkIGludG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVCcm93c2VyUHJvY2VzcygpOiB2b2lkIHtcbiAgY29uc3QgYnJvd3NlclByb2Nlc3M6IEdlbmVyaWNPYmplY3Q8QnJvd3NlclByb2Nlc3M+ID0ge1xuICAgIGJyb3dzZXI6IHRydWUsXG4gICAgY3dkKCkge1xuICAgICAgcmV0dXJuICcvJztcbiAgICB9LFxuICAgIGVudjoge30sXG4gICAgcGxhdGZvcm06ICdhbmRyb2lkJ1xuICB9O1xuXG4gIGNvbnN0IGV4aXN0aW5nUHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcyBhcyBQYXJ0aWFsPE5vZGVKUy5Qcm9jZXNzPiB8IHVuZGVmaW5lZDtcblxuICBpZiAoIWV4aXN0aW5nUHJvY2Vzcykge1xuICAgIGdsb2JhbFRoaXMucHJvY2VzcyA9IGJyb3dzZXJQcm9jZXNzIGFzIE5vZGVKUy5Qcm9jZXNzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1Byb2Nlc3MudmVyc2lvbnM/Lm5vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleGlzdGluZ1Byb2Nlc3NSZWNvcmQgPSBleGlzdGluZ1Byb2Nlc3MgYXMgR2VuZXJpY09iamVjdDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhicm93c2VyUHJvY2VzcykpIHtcbiAgICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRba2V5XSA/Pz0gdmFsdWU7XG4gIH1cblxuICBleGlzdGluZ1Byb2Nlc3NSZWNvcmRbJ2Jyb3dzZXInXSA9IHRydWU7XG59XG5cbi8qKlxuICogTWFrZXMgYFN5bWJvbC5kaXNwb3NlYCBhbmQgYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIGV4aXN0LCBmYWxsaW5nIGJhY2sgdG8gdGhlIHJlZ2lzdHJ5IHN5bWJvbHMgZXNidWlsZCdzXG4gKiBgdXNpbmdgIGhlbHBlcnMgbG9vayB1cC5cbiAqXG4gKiBAcGFyYW0gc3ltYm9sQ29uc3RydWN0b3IgLSBUaGUgYFN5bWJvbGAgY29uc3RydWN0b3IgdG8gcGF0Y2guIERlZmF1bHRzIHRvIHRoZSBhbWJpZW50IG9uZTsgdGhlIHBhcmFtZXRlclxuICogZXhpc3RzIHNvIGEgdGVzdCBjYW4gaGFuZCBpbiBhbiBlbmdpbmUgdGhhdCBsYWNrcyB0aGUgd2VsbC1rbm93biBzeW1ib2xzLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLiBBIGRpc3Bvc2FibGUgZGVjbGFyZXMgaXRzIG1ldGhvZCB1bmRlciB0aGUgTElURVJBTCBrZXlcbiAqIGBbU3ltYm9sLmRpc3Bvc2VdYCwgd2hpbGUgZXNidWlsZCBsb3dlcnMgZXZlcnkgYHVzaW5nYCB0byBhIGxvb2t1cCB0aHJvdWdoIGBfX2tub3duU3ltYm9sKCdkaXNwb3NlJylgLFxuICogd2hpY2ggZmFsbHMgYmFjayB0byBgU3ltYm9sLmZvcignU3ltYm9sLmRpc3Bvc2UnKWAgd2hlbiB0aGUgZW5naW5lIGhhcyBubyB3ZWxsLWtub3duIHN5bWJvbC4gT24gc3VjaCBhblxuICogZW5naW5lIHRoZSBsaXRlcmFsIGtleSBldmFsdWF0ZXMgdG8gYHVuZGVmaW5lZGAsIHRoZSBtZXRob2QgbGFuZHMgdW5kZXIgdGhlIHN0cmluZyBgXCJ1bmRlZmluZWRcImAsIGFuZFxuICogZXZlcnkgYHVzaW5nYCBvZiBpdCB0aHJvd3MgYE9iamVjdCBub3QgZGlzcG9zYWJsZWAuIEZpbGxpbmcgdGhlIHdlbGwta25vd24gc2xvdCB3aXRoIHRoYXQgc2FtZSByZWdpc3RyeVxuICogc3ltYm9sIG1ha2VzIGJvdGggc2lkZXMgbmFtZSBvbmUga2V5IG9uIGV2ZXJ5IGVuZ2luZS4gQSBob3N0IHRoYXQgYWxyZWFkeSBoYXMgdGhlIHN5bWJvbCBpcyBsZWZ0XG4gKiB1bnRvdWNoZWQ6IGA/Pz1gIG5ldmVyIHJlYWNoZXMgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIHRoZSBob3N0J3Mgbm9uLXdyaXRhYmxlIHByb3BlcnR5IHdvdWxkIHJlZnVzZS5cbiAqXG4gKiBUaGUgZGVmYXVsdCBuYW1lcyBgU3ltYm9sYCBiYXJlIG9uIHB1cnBvc2U6IGl0IGV4aXN0cyBvbiBldmVyeSBlbmdpbmUgdGhpcyBydW5zIG9uLCBhbmQgYSBiYXJlIHJlZmVyZW5jZVxuICogcmVzb2x2ZXMgYWdhaW5zdCB3aGF0ZXZlciBzY29wZSB0aGUgYmFubmVyIGlzIGV2YWx1YXRlZCBpbiwgZXhhY3RseSBhcyB0aGUgYnVuZGxlJ3Mgb3duXG4gKiBgW1N5bWJvbC5kaXNwb3NlXWAga2V5cyBkby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURpc3Bvc2VTeW1ib2xzKHN5bWJvbENvbnN0cnVjdG9yOiBEaXNwb3NlU3ltYm9sSG9zdCA9IFN5bWJvbCk6IHZvaWQge1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5hc3luY0Rpc3Bvc2UgPz89IHN5bWJvbENvbnN0cnVjdG9yLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuICBzeW1ib2xDb25zdHJ1Y3Rvci5kaXNwb3NlID8/PSBzeW1ib2xDb25zdHJ1Y3Rvci5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBpdHMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIFRoZSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgcGFzc2VkIGluLlxuICpcbiAqIEByZW1hcmtzXG4gKiBTZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyLCB3aGVyZSBpdCBzdGFuZHMgaW4gZm9yIGVzYnVpbGQncyBgX19uYW1lYCBoZWxwZXIg4oCUIHdoaWNoIG5hbWVzIGFcbiAqIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGl0IOKAlCBmb3IgYnVuZGxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgaGVscGVyIHdpdGhvdXQgZW1pdHRpbmcgdGhlaXIgb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcE5hbWUoJHVua25vd246IHVua25vd24pOiB1bmtub3duIHtcbiAgcmV0dXJuICR1bmtub3duO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYmFubmVyIGluamVjdGVkIGF0IHRoZSB0b3Agb2YgZXZlcnkgZW1pdHRlZCBidW5kbGUuXG4gKlxuICogYFN0cmluZyhmbilgIGNhcHR1cmVzIG9ubHkgdGhlIGZ1bmN0aW9uJ3Mgb3duIGJvZHksIHNvIGV2ZXJ5IHNoaW0gdGhlIGBpbml0YCBmdW5jdGlvbiBjYWxscyBoYXMgdG8gYmVcbiAqIHNlcmlhbGl6ZWQgbmV4dCB0byBpdCBhbmQgd3JhcHBlZCBpbiBvbmUgc2hhcmVkIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNhbGwgaXQgbWFrZXMgcmVzb2x2ZXMgYWdhaW5zdCB0aGVcbiAqIGNvbnN1bWVyJ3MgZ2xvYmFsIHNjb3BlIGF0IHJ1bnRpbWUuIFNlZSB0aGlzIGZpbGUncyBgQGZpbGVgIHJlbWFya3MuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYmFubmVyIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYmFubmVyIHNvdXJjZSB0byBwcmVwZW5kIHRvIHRoZSBlbWl0dGVkIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQcmVwcm9jZXNzQmFubmVyKG9wdGlvbnM6IE1ha2VQcmVwcm9jZXNzQmFubmVyT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucyA9IFtdLCBpc0VzbSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBzaGltcyA9IGlzRXNtID8gW2Vuc3VyZURpc3Bvc2VTeW1ib2xzLCBlbnN1cmVCcm93c2VyUHJvY2Vzc10gOiBbZW5zdXJlRGlzcG9zZVN5bWJvbHMsIGVuc3VyZUJyb3dzZXJQcm9jZXNzLCBrZWVwTmFtZV07XG4gIGNvbnN0IGluaXQgPSBpc0VzbSA/IGluaXRFc20gOiBpbml0Q2pzO1xuICBjb25zdCBhZGRpdGlvbmFsSW5pdHMgPSBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucy5tYXAoKGZ1bmN0aW9uXykgPT4gYCgke1N0cmluZyhmdW5jdGlvbl8pfSkoKTtcXG5gKS5qb2luKCcnKTtcbiAgcmV0dXJuIGBcXG4oZnVuY3Rpb24gKCkge1xcbiR7c2hpbXMubWFwKFN0cmluZykuam9pbignXFxuXFxuJyl9XFxuXFxuKCR7U3RyaW5nKGluaXQpfSkoKTtcXG59KSgpO1xcbiR7YWRkaXRpb25hbEluaXRzfWA7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGx1Z2luJ3Mgc2V0dXAgbmVlZHMgYSBsaXZlIGVzYnVpbGQgY29udGV4dCwgYW5kIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxhdGVyIGlnbm9yZWQgcmFuZ2VzIGFyZSBzZXJpYWxpemVkIGludG8gdGhlIGVtaXR0ZWQgYmFubmVyIGFuZCBzbyBydW4gaW5zaWRlIHRoZSBidWlsdCBidW5kbGUsIG5ldmVyIGluIHRoaXMgcHJvY2Vzcy4gVGhlIHNoaW1zIGFib3ZlIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGlnbm9yZWQ6IHRoZXkgYXJlIG9yZGluYXJ5IGZ1bmN0aW9ucyBoZXJlIGFuZCBhcmUgdW5pdC10ZXN0ZWQgZGlyZWN0bHksIGFuZCBuZWl0aGVyIGFyZSB0aGUgdW5idW5kbGVkLWJ1aWxkIGhlbHBlcnMsIHdoaWNoIHRoZSB0ZXN0cyBkcml2ZSB0aHJvdWdoIGEgc3R1YiBidWlsZC4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogVGhpcyBwbHVnaW4gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczpcbiAqIC0gUmVwbGFjZXMgaW5zdGFuY2VzIG9mIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgd2l0aCBhIENvbW1vbkpTLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgc28gYSB0ZW1wbGF0ZSBsaXRlcmFsIGVuZGluZyBhIGZpbGUgZG9lcyBub3Qgc3dhbGxvdyBpdC5cbiAqIC0gQWRkcyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgdG8gdGhlIGdsb2JhbCBzY29wZSBpZiBgcHJvY2Vzc2AgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuXG4gKiAtIEZpbGxzIGluIGBTeW1ib2wuZGlzcG9zZWAgLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgb24gZW5naW5lcyB0aGF0IGxhY2sgdGhlbSwgc28gYHVzaW5nYCB3b3JrcyB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwbHVnaW4gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcHJlcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3NQbHVnaW4ob3B0aW9uczogUHJlcHJvY2Vzc1BsdWdpbk9wdGlvbnMgPSB7fSk6IFBsdWdpbiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgPSBbXSwgY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyID0gZ2V0Q2pzSW1wb3J0TWV0YVVybCwgaXNFc20gPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gaXNFc21cbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICBbXG4gICAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAgICRzdHJpbmc6ICdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsXG4gICAgICAgICAgcmVwbGFjZXI6ICcuJyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogJyhkb3QpJ1xuICAgICAgICB9KVxuICAgICAgXTogY2pzSW1wb3J0TWV0YVVybFByb3ZpZGVyXG4gICAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdwcmVwcm9jZXNzJyxcbiAgICBzZXR1cChidWlsZCk6IHZvaWQge1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lID8/PSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKSkge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmVba2V5XSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1aWxkLmluaXRpYWxPcHRpb25zLmJ1bmRsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gT25lIG91dHB1dCBwZXIgc291cmNlOiBlYWNoIG1vZHVsZSBnZXRzIG9ubHkgdGhlIHNoaW1zIGl0cyBvd24gY29kZSBuZWVkcywgc28gYSBwYWdlIGltcG9ydGluZyBhIHB1cmVcbiAgICAgICAgLy8gbW9kdWxlIG9mIGEgbGlicmFyeSBpcyBsZWZ0IHdpdGggaXRzIGdsb2JhbHMgdW50b3VjaGVkLlxuICAgICAgICBjb25zdCBsZWFkaW5nQmFubmVyID0gYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyPy5bJ2pzJ10gPz8gJyc7XG4gICAgICAgIGJ1aWxkLm9uRW5kKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBhZGRNb2R1bGVQcmVhbWJsZXMoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgbGVhZGluZ0Jhbm5lciwgb3V0cHV0RmlsZXM6IHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXIgPz89IHt9O1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gPz89ICcnO1xuICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gKz0gbWFrZVByZXByb2Nlc3NCYW5uZXIoeyBhZGRpdGlvbmFsQmFubmVySW5pdEZ1bmN0aW9ucywgaXNFc20gfSk7XG4gICAgICB9XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZSgkYXJndW1lbnRzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkgfHwgY29udGVudHMuaW5jbHVkZXMoYHZhciAke3ZhcmlhYmxlfWApKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyBgKCR7U3RyaW5nKHZhbHVlKX0pKClgIDogdG9Kc29uKHZhbHVlLCB7IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsIH0pO1xuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJpbmd9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbCh7XG4gICAgICAgICAgJHN0cmluZzogY29udGVudHMsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAtLSBJdCBpcyBpbnRlbnRpb25hbCwgdGhlIHN0cmluZyBsb29rcyBsaWtlIGEgdGVtcGxhdGUgbGl0ZXJhbCwgYnV0IGl0IGlzIG5vdC5cbiAgICAgICAgICByZXBsYWNlcjogJ2BcXG4vLyMke1xcJ1xcJ30gc291cmNlTWFwcGluZ1VSTCcsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IC9gXFxyP1xcblxcL1xcLyMgc291cmNlTWFwcGluZ1VSTC9nXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgbG9hZGVyOiAndHMnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogUHJlcGVuZHMgdG8gZWFjaCBlbWl0dGVkIG1vZHVsZSB0aGUgcHJlYW1ibGUgaXRzIG93biBjb2RlIG5lZWRzLCBhbmQgbm90aGluZyB3aGVuIGl0IG5lZWRzIG5vbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbWl0dGVkIG1vZHVsZXMsIHRoZSBiYW5uZXIgdGhlIGNhbGxlciBhbHJlYWR5IHB1dCBmaXJzdCwgYW5kIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqL1xuZnVuY3Rpb24gYWRkTW9kdWxlUHJlYW1ibGVzKHBhcmFtczogQWRkTW9kdWxlUHJlYW1ibGVzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMsIGxlYWRpbmdCYW5uZXIsIG91dHB1dEZpbGVzIH0gPSBwYXJhbXM7XG4gIGZvciAoY29uc3Qgb3V0cHV0RmlsZSBvZiBvdXRwdXRGaWxlcykge1xuICAgIGlmICghSlNfT1VUUFVUX1JFR19FWFAudGVzdChvdXRwdXRGaWxlLnBhdGgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlID0gb3V0cHV0RmlsZS50ZXh0O1xuICAgIGNvbnN0IHByZWFtYmxlID0gbWFrZU1vZHVsZVByZWFtYmxlKGdldE1vZHVsZVNoaW1OZWVkcyhjb2RlKSwgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMpO1xuICAgIGlmIChwcmVhbWJsZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG91dHB1dEZpbGUuY29udGVudHMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaW5zZXJ0UHJlYW1ibGUoeyBjb2RlLCBsZWFkaW5nQmFubmVyLCBwcmVhbWJsZSB9KSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFNlcmlhbGl6ZWQgaW50byB0aGUgZW1pdHRlZCBtb2R1bGUsIHNlZSBhYm92ZS4gKi9cbmZ1bmN0aW9uIGdldENqc0ltcG9ydE1ldGFVcmwoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIFVybE1vZHVsZTtcbiAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB0aGUgcGFnZSBVUkwsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgZW52aXJvbm1lbnQgaXMgdW5rbm93bi5cbiAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIExvY2F0aW9uSG9zdCkubG9jYXRpb24/LmhyZWYgPz8gJyc7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG5mdW5jdGlvbiBnZXRJZGVudGlmaWVyVXNhZ2Uobm9kZTogSWRlbnRpZmllcik6IElkZW50aWZpZXJVc2FnZSB7XG4gIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuICBpZiAoXG4gICAgKGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eUFzc2lnbm1lbnQocGFyZW50KSB8fCBpc01ldGhvZERlY2xhcmF0aW9uKHBhcmVudCkgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKHBhcmVudClcbiAgICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihwYXJlbnQpKVxuICAgICYmIHBhcmVudC5uYW1lID09PSBub2RlXG4gICkge1xuICAgIHJldHVybiBJZGVudGlmaWVyVXNhZ2UuTWVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIChpc1ZhcmlhYmxlRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc0NsYXNzRGVjbGFyYXRpb24ocGFyZW50KSB8fCBpc1BhcmFtZXRlcihwYXJlbnQpIHx8IGlzQmluZGluZ0VsZW1lbnQocGFyZW50KVxuICAgICAgfHwgaXNJbXBvcnRDbGF1c2UocGFyZW50KSB8fCBpc0ltcG9ydFNwZWNpZmllcihwYXJlbnQpIHx8IGlzTmFtZXNwYWNlSW1wb3J0KHBhcmVudCkpXG4gICAgICAmJiBwYXJlbnQubmFtZSA9PT0gbm9kZVxuICAgID8gSWRlbnRpZmllclVzYWdlLkJpbmRpbmdcbiAgICA6IElkZW50aWZpZXJVc2FnZS5SZWFkO1xufVxuXG4vKipcbiAqIFJlYWRzIHdoaWNoIHNoaW1zIGFuIGVtaXR0ZWQgbW9kdWxlIG5lZWRzIGZyb20gaXRzIGNvZGUuXG4gKlxuICogLSBgZW5zdXJlQnJvd3NlclByb2Nlc3NgOiBpdCByZWFkcyBhIGBwcm9jZXNzYCBpdCBkb2VzIG5vdCBiaW5kIGl0c2VsZiwgb3IgaXQgbG9hZHMgYSBiYXJlIHBhY2thZ2UgdGhhdCBpcyBub3QgYVxuICogICBgbm9kZTpgIGJ1aWx0LWluLiBUaGUgc2Vjb25kIGNhc2UgaXMgdGhlcmUgYmVjYXVzZSBzdWNoIGEgcGFja2FnZSAoYHBhdGgtYnJvd3NlcmlmeWAgcmVhZHMgYHByb2Nlc3MuY3dkKClgKSBjYW5ub3RcbiAqICAgY2FycnkgYSBzaGltIG9mIGl0cyBvd24sIGFuZCBpbiBhbiB1bmJ1bmRsZWQgYnVpbGQgaXRzIGltcG9ydGVyIGlzIHRoZSBvbmx5IG1vZHVsZSB0aGF0IGNhbi5cbiAqIC0gYGVuc3VyZURpc3Bvc2VTeW1ib2xzYDogaXQgbmFtZXMgYFN5bWJvbC5kaXNwb3NlYCBvciBgU3ltYm9sLmFzeW5jRGlzcG9zZWAsIG9yIGhvbGRzIGVzYnVpbGQncyBgX19rbm93blN5bWJvbGBcbiAqICAgaGVscGVyLCB3aGljaCBhIGxvd2VyZWQgYHVzaW5nYCBlbWl0cy5cbiAqIC0gYF9fbmFtZWA6IGl0IHJlYWRzIGEgYF9fbmFtZWAgaXQgZG9lcyBub3QgZGVjbGFyZS5cbiAqXG4gKiBAcGFyYW0gY29kZSAtIFRoZSBlbWl0dGVkIG1vZHVsZS5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIG1vZHVsZSBuZWVkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlU2hpbU5lZWRzKGNvZGU6IHN0cmluZyk6IE1vZHVsZVNoaW1OZWVkcyB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBjcmVhdGVTb3VyY2VGaWxlKCdtb2R1bGUuanMnLCBjb2RlLCBTY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlLCBTY3JpcHRLaW5kLkpTKTtcbiAgY29uc3QgYm91bmROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZWFkTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IGlzQmFyZUltcG9ydEZvdW5kID0gZmFsc2U7XG4gIGxldCBpc0Rpc3Bvc2VTeW1ib2xGb3VuZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBzcGVjaWZpZXIgPSBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZSk7XG4gICAgaWYgKHNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmICFOT05fQkFSRV9TUEVDSUZJRVJfUkVHX0VYUC50ZXN0KHNwZWNpZmllcikpIHtcbiAgICAgIGlzQmFyZUltcG9ydEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKSAmJiBpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ1N5bWJvbCdcbiAgICAgICYmIERJU1BPU0VfU1lNQk9MX05BTUVTLmhhcyhub2RlLm5hbWUudGV4dClcbiAgICApIHtcbiAgICAgIGlzRGlzcG9zZVN5bWJvbEZvdW5kID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICBpZiAobm9kZS50ZXh0ID09PSBLTk9XTl9TWU1CT0xfSEVMUEVSX05BTUUpIHtcbiAgICAgICAgaXNEaXNwb3NlU3ltYm9sRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2FnZSA9IGdldElkZW50aWZpZXJVc2FnZShub2RlKTtcbiAgICAgIGlmICh1c2FnZSA9PT0gSWRlbnRpZmllclVzYWdlLkJpbmRpbmcpIHtcbiAgICAgICAgYm91bmROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAodXNhZ2UgPT09IElkZW50aWZpZXJVc2FnZS5SZWFkKSB7XG4gICAgICAgIHJlYWROYW1lcy5hZGQobm9kZS50ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICB9XG4gIHZpc2l0KHNvdXJjZUZpbGUpO1xuXG4gIGZ1bmN0aW9uIGlzRnJlZVJlYWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWROYW1lcy5oYXMobmFtZSkgJiYgIWJvdW5kTmFtZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc0Jyb3dzZXJQcm9jZXNzTmVlZGVkOiBpc0ZyZWVSZWFkKCdwcm9jZXNzJykgfHwgaXNCYXJlSW1wb3J0Rm91bmQsXG4gICAgaXNEaXNwb3NlU3ltYm9sc05lZWRlZDogaXNEaXNwb3NlU3ltYm9sRm91bmQsXG4gICAgaXNOYW1lTmVlZGVkOiBpc0ZyZWVSZWFkKCdfX25hbWUnKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIobm9kZTogTm9kZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgoaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fCBpc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSAmJiBub2RlLm1vZHVsZVNwZWNpZmllciAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikpIHtcbiAgICByZXR1cm4gbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dDtcbiAgfVxuXG4gIGlmIChpc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgY29uc3QgW2ZpcnN0QXJndW1lbnRdID0gbm9kZS5hcmd1bWVudHM7XG4gICAgY29uc3QgaXNMb2FkZXIgPSBub2RlLmV4cHJlc3Npb24ua2luZCA9PT0gU3ludGF4S2luZC5JbXBvcnRLZXl3b3JkIHx8IChpc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJiBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gJ3JlcXVpcmUnKTtcbiAgICBpZiAoaXNMb2FkZXIgJiYgZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkICYmIGlzU3RyaW5nTGl0ZXJhbChmaXJzdEFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIGZpcnN0QXJndW1lbnQudGV4dDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gU2VyaWFsaXplZCBpbnRvIHRoZSBlbWl0dGVkIGJhbm5lciwgc2VlIGFib3ZlLiAqL1xuZnVuY3Rpb24gaW5pdENqcygpOiB2b2lkIHtcbiAgY29uc3QgZ2xvYmFsVGhpc1JlY29yZCA9IGdsb2JhbFRoaXMgYXMgR2VuZXJpY09iamVjdDtcbiAgZW5zdXJlRGlzcG9zZVN5bWJvbHMoKTtcbiAgZ2xvYmFsVGhpc1JlY29yZFsnX19uYW1lJ10gPz89IGtlZXBOYW1lO1xuICBnbG9iYWxUaGlzUmVjb3JkWydfX2V4dHJhY3REZWZhdWx0J10gPz89IGV4dHJhY3REZWZhdWx0O1xuXG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIFNlcmlhbGl6ZWQgd2l0aCBpbml0Q2pzIGludG8gdGhlIGJhbm5lcjsgYXQgbW9kdWxlIHNjb3BlIGl0IHdvdWxkIGJlIGxlZnQgb3V0IG9mIGl0LlxuICBmdW5jdGlvbiBleHRyYWN0RGVmYXVsdChtb2R1bGU6IFBhcnRpYWw8RXNtTW9kdWxlPiB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIG1vZHVsZSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRFc20oKTogdm9pZCB7XG4gIGVuc3VyZURpc3Bvc2VTeW1ib2xzKCk7XG4gIGVuc3VyZUJyb3dzZXJQcm9jZXNzKCk7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4vKipcbiAqIEluc2VydHMgdGhlIHByZWFtYmxlIGFmdGVyIHRoZSBjYWxsZXIncyBsZWFkaW5nIGJhbm5lciwgYW5kIHNoaWZ0cyBhbiBpbmxpbmUgc291cmNlIG1hcCBkb3duIGJ5IHRoZSBsaW5lcyBpdCBhZGRzLFxuICogc28gdGhlIG1vZHVsZSdzIG93biBsaW5lcyBrZWVwIG1hcHBpbmcgb250byB0aGVpciBzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbW9kdWxlLCBpdHMgbGVhZGluZyBiYW5uZXIgYW5kIHRoZSBwcmVhbWJsZS5cbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUgd2l0aCB0aGUgcHJlYW1ibGUgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFByZWFtYmxlKHBhcmFtczogSW5zZXJ0UHJlYW1ibGVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGNvZGUsIGxlYWRpbmdCYW5uZXIsIHByZWFtYmxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGluc2VydEF0ID0gbGVhZGluZ0Jhbm5lci5lbmRzV2l0aCgnXFxuJykgJiYgY29kZS5zdGFydHNXaXRoKGxlYWRpbmdCYW5uZXIpID8gbGVhZGluZ0Jhbm5lci5sZW5ndGggOiAwO1xuICBjb25zdCBhZGRlZExpbmVDb3VudCA9IHByZWFtYmxlLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuICBsZXQgc2hpZnRlZENvZGUgPSBjb2RlO1xuICBjb25zdCBzb3VyY2VNYXBTdGFydCA9IGNvZGUubGFzdEluZGV4T2YoSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYKTtcbiAgaWYgKHNvdXJjZU1hcFN0YXJ0ICE9PSAtMSkge1xuICAgIGNvbnN0IGRhdGFTdGFydCA9IHNvdXJjZU1hcFN0YXJ0ICsgSU5MSU5FX1NPVVJDRV9NQVBfUFJFRklYLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhID0gY29kZS5zbGljZShkYXRhU3RhcnQpLnRyaW1FbmQoKTtcbiAgICBjb25zdCBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGRhdGEsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKSkgYXMgU291cmNlTWFwV2l0aE1hcHBpbmdzO1xuICAgIHNvdXJjZU1hcC5tYXBwaW5ncyA9ICc7Jy5yZXBlYXQoYWRkZWRMaW5lQ291bnQpICsgc291cmNlTWFwLm1hcHBpbmdzO1xuICAgIHNoaWZ0ZWRDb2RlID0gY29kZS5zbGljZSgwLCBkYXRhU3RhcnQpICsgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpICsgY29kZS5zbGljZShkYXRhU3RhcnQgKyBkYXRhLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHNoaWZ0ZWRDb2RlLnNsaWNlKDAsIGluc2VydEF0KSArIHByZWFtYmxlICsgc2hpZnRlZENvZGUuc2xpY2UoaW5zZXJ0QXQpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJlYW1ibGUgb2Ygb25lIHVuYnVuZGxlZCBtb2R1bGU6IHRoZSBzaGltcyBpdCBuZWVkcyBpbiBvbmUgc2hhcmVkIHNjb3BlLCB0aGVuIHRoZSBjYWxsZXIncyBleHRyYSBpbml0cy5cbiAqXG4gKiBAcGFyYW0gbmVlZHMgLSBXaGF0IHRoZSBtb2R1bGUgbmVlZHMuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMgLSBUaGUgY2FsbGVyJ3MgZXh0cmEgaW5pdHMsIHdoaWNoIGV2ZXJ5IG1vZHVsZSBnZXRzLlxuICogQHJldHVybnMgVGhlIHByZWFtYmxlLCBlbXB0eSB3aGVuIHRoZSBtb2R1bGUgbmVlZHMgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gbWFrZU1vZHVsZVByZWFtYmxlKG5lZWRzOiBNb2R1bGVTaGltTmVlZHMsIGFkZGl0aW9uYWxCYW5uZXJJbml0RnVuY3Rpb25zOiByZWFkb25seSAoKCkgPT4gdm9pZClbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNoaW1zOiAoKC4uLmFyZ3VtZW50c186IG5ldmVyW10pID0+IHVua25vd24pW10gPSBbXTtcbiAgY29uc3QgY2FsbHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5lZWRzLmlzRGlzcG9zZVN5bWJvbHNOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZURpc3Bvc2VTeW1ib2xzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVEaXNwb3NlU3ltYm9scygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzQnJvd3NlclByb2Nlc3NOZWVkZWQpIHtcbiAgICBzaGltcy5wdXNoKGVuc3VyZUJyb3dzZXJQcm9jZXNzKTtcbiAgICBjYWxscy5wdXNoKCdlbnN1cmVCcm93c2VyUHJvY2VzcygpOycpO1xuICB9XG5cbiAgaWYgKG5lZWRzLmlzTmFtZU5lZWRlZCkge1xuICAgIHNoaW1zLnB1c2goa2VlcE5hbWUpO1xuICAgIGNhbGxzLnB1c2goJ2dsb2JhbFRoaXNbXFwnX19uYW1lXFwnXSA/Pz0ga2VlcE5hbWU7Jyk7XG4gIH1cblxuICBjb25zdCBzaGFyZWRTY29wZSA9IHNoaW1zLmxlbmd0aCA9PT0gMCA/ICcnIDogYChmdW5jdGlvbiAoKSB7XFxuJHtzaGltcy5tYXAoU3RyaW5nKS5qb2luKCdcXG5cXG4nKX1cXG5cXG4ke2NhbGxzLmpvaW4oJ1xcbicpfVxcbn0pKCk7XFxuYDtcbiAgcmV0dXJuIHNoYXJlZFNjb3BlICsgYWRkaXRpb25hbEJhbm5lckluaXRGdW5jdGlvbnMubWFwKChmdW5jdGlvbl8pID0+IGAoJHtTdHJpbmcoZnVuY3Rpb25fKX0pKCk7XFxuYCkuam9pbignJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkIsU0FBUyxnQkFBZ0I7QUFDekI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVB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
|
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,10 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
(
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
46
37
|
})();
|
|
47
38
|
|
|
48
39
|
import { extractDefaultExportInterop } from "@mnaoumov/typescript-lib/object-utils";
|
|
@@ -79,4 +70,4 @@ function svelteWrapperPlugin(isProductionBuild) {
|
|
|
79
70
|
export {
|
|
80
71
|
svelteWrapperPlugin
|
|
81
72
|
};
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvc3ZlbHRlLXdyYXBwZXItcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdmVsdGUgd3JhcHBlciBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gZXNidWlsZCBwbHVnaW4gd3JhcHBpbmcgZXNidWlsZC1zdmVsdGUgd2l0aCBzdmVsdGUtcHJlcHJvY2VzczsgcmVxdWlyZXMgYSBsaXZlIGVzYnVpbGQgY29udGV4dC4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuaW1wb3J0IHsgZXh0cmFjdERlZmF1bHRFeHBvcnRJbnRlcm9wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgZXNidWlsZFN2ZWx0ZV8gZnJvbSAnZXNidWlsZC1zdmVsdGUnO1xuaW1wb3J0IHsgc3ZlbHRlUHJlcHJvY2VzcyB9IGZyb20gJ3N2ZWx0ZS1wcmVwcm9jZXNzJztcblxuaW1wb3J0IHsgcmVhZFBhY2thZ2VKc29uIH0gZnJvbSAnLi4vLi4vbnBtLnRzJztcblxuY29uc3QgZXNidWlsZFN2ZWx0ZSA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChlc2J1aWxkU3ZlbHRlXyk7XG5cbi8qKlxuICogV3JhcHMgdGhlIGVzYnVpbGQtc3ZlbHRlIHBsdWdpbiB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmb3JtYXQgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uQnVpbGQgLSBXaGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAcmV0dXJucyBUaGUgZXNidWlsZCBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdmVsdGVXcmFwcGVyUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuKTogUGx1Z2luIHtcbiAgY29uc3QgZXNidWlsZFN2ZWx0ZVBsdWdpbiA9IGVzYnVpbGRTdmVsdGUoe1xuICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgY3NzOiAnaW5qZWN0ZWQnLFxuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIG1vZHVsZUNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgZGV2OiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICB9LFxuICAgIHByZXByb2Nlc3M6IHN2ZWx0ZVByZXByb2Nlc3MoKVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzdmVsdGUtd3JhcHBlcicsXG4gICAgYXN5bmMgc2V0dXAoYnVpbGQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gICAgICBjb25zdCBmb3JtYXQgPSBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJyA/ICdlc20nIDogJ2Nqcyc7XG4gICAgICBhd2FpdCBlc2J1aWxkU3ZlbHRlUGx1Z2luLnNldHVwKHtcbiAgICAgICAgLi4uYnVpbGQsXG4gICAgICAgIGluaXRpYWxPcHRpb25zOiB7XG4gICAgICAgICAgLi4uYnVpbGQuaW5pdGlhbE9wdGlvbnMsXG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSxTQUFTLG1DQUFtQztBQUM1QyxPQUFPLG9CQUFvQjtBQUMzQixTQUFTLHdCQUF3QjtBQUVqQyxTQUFTLHVCQUF1QjtBQUVoQyxNQUFNLGdCQUFnQiw0QkFBNEIsY0FBYztBQVF6RCxTQUFTLG9CQUFvQixtQkFBb0M7QUFDdEUsUUFBTSxzQkFBc0IsY0FBYztBQUFBLElBQ3hDLGlCQUFpQjtBQUFBLE1BQ2YsS0FBSztBQUFBLE1BQ0wsS0FBSyxDQUFDO0FBQUEsSUFDUjtBQUFBLElBQ0EsdUJBQXVCO0FBQUEsTUFDckIsS0FBSyxDQUFDO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBWSxpQkFBaUI7QUFBQSxFQUMvQixDQUFDO0FBRUQsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxNQUFNLE9BQXNCO0FBQ2hDLFlBQU0sY0FBYyxNQUFNLGdCQUFnQjtBQUMxQyxZQUFNLFNBQVMsWUFBWSxTQUFTLFdBQVcsUUFBUTtBQUN2RCxZQUFNLG9CQUFvQixNQUFNO0FBQUEsUUFDOUIsR0FBRztBQUFBLFFBQ0gsZ0JBQWdCO0FBQUEsVUFDZCxHQUFHLE1BQU07QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/// <reference path="../
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
2
|
export * as 'esbuild-impl' from './esbuild-impl/index.mjs';
|
|
@@ -3,50 +3,8 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function ensureBrowserProcess() {
|
|
13
|
-
const browserProcess = {
|
|
14
|
-
browser: true,
|
|
15
|
-
cwd() {
|
|
16
|
-
return '/';
|
|
17
|
-
},
|
|
18
|
-
env: {},
|
|
19
|
-
platform: 'android'
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const existingProcess = globalThis.process;
|
|
23
|
-
|
|
24
|
-
if (!existingProcess) {
|
|
25
|
-
globalThis.process = browserProcess;
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (existingProcess.versions?.node) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const existingProcessRecord = existingProcess;
|
|
34
|
-
|
|
35
|
-
for (const [key, value] of Object.entries(browserProcess)) {
|
|
36
|
-
existingProcessRecord[key] ??= value;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
existingProcessRecord['browser'] = true;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
(function initEsm() {
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
46
|
-
})();
|
|
47
|
-
|
|
48
6
|
import * as esbuild_impl from "./esbuild-impl/index.mjs";
|
|
49
7
|
export {
|
|
50
8
|
esbuild_impl as "esbuild-impl"
|
|
51
9
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2VzYnVpbGQtaW1wbCcgZnJvbSAnLi9lc2J1aWxkLWltcGwvaW5kZXgudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZQSxrQkFBb0I7IiwKICAibmFtZXMiOiBbImVzYnVpbGQtaW1wbCJdCn0K
|
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,10 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
(
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
46
37
|
})();
|
|
47
38
|
|
|
48
39
|
import process from "node:process";
|
|
@@ -120,4 +111,4 @@ export {
|
|
|
120
111
|
parseTsConfig,
|
|
121
112
|
toCanonical
|
|
122
113
|
};
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NoZWNrLXByb2plY3QtdHlwZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlLWNoZWNrcyBhIHNldCBvZiBUeXBlU2NyaXB0IGZpbGVzIHdpdGggYHNraXBMaWJDaGVja2AgZGlzYWJsZWQsIGJ1dCByZXBvcnRzIG9ubHkgdGhlXG4gKiBkaWFnbm9zdGljcyB3aG9zZSBzb3VyY2UgZmlsZSB3ZSBvd24uIFRoaXMgbGV0cyB0aGUgZ2VuZXJhbCBidWlsZCBydW4gd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYFxuICogKHNvIGl0IGRvZXMgbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wsIHN1Y2ggYXMgYSBnaXZlblxuICogdmVyc2lvbidzIGBvYnNpZGlhbi5kLnRzYCkgd2hpbGUgc3RpbGwgZnVsbHkgdmFsaWRhdGluZyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvci5cbiAqXG4gKiBXaGVuIHVwc3RyZWFtIHR5cGVzIGFyZSBmaXhlZCwgdGhlIGBJZ25vcmVkIE4gZGlhZ25vc3RpYyhzKWAgY291bnQgZHJvcHMgdG8gYDBgLCBzaWduYWxsaW5nIHRoZVxuICogd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgZG9pbmcgYW55dGhpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxlck9wdGlvbnMsXG4gIERpYWdub3N0aWMsXG4gIEZvcm1hdERpYWdub3N0aWNzSG9zdCxcbiAgUGFyc2VDb25maWdGaWxlSG9zdFxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIERpYWdub3N0aWNDYXRlZ29yeSxcbiAgZm9ybWF0RGlhZ25vc3RpYyxcbiAgZm9ybWF0RGlhZ25vc3RpY3MsXG4gIGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dCxcbiAgZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUsXG4gIGdldFByZUVtaXREaWFnbm9zdGljcyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja1Byb2plY3RUeXBlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tQcm9qZWN0VHlwZXNQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBpZ25vcmVkIGRpYWdub3N0aWNzICh0aG9zZSBkcm9wcGVkIGJ5IHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX1cbiAgICogb3Ige0BsaW5rIENoZWNrUHJvamVjdFR5cGVzUGFyYW1zLnNob3VsZEtlZXBEaWFnbm9zdGljfSkgYXJlIHByaW50ZWQgaW4gZnVsbCBhZnRlciB0aGUgaWdub3JlZFxuICAgKiBjb3VudCwgc28gdGhleSBjYW4gYmUgaW5zcGVjdGVkLiBXaGVuIG9taXR0ZWQgb3IgYGZhbHNlYCwgb25seSB0aGUgY291bnQgaXMgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNWZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgQ29tcGlsZXIgb3B0aW9ucyBmb3IgdGhlIHByb2dyYW0uIGBza2lwTGliQ2hlY2tgIGlzIGFsd2F5cyBmb3JjZWQgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgVGhlIHJvb3QgZmlsZXMgdG8gdHlwZS1jaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBhIGRpYWdub3N0aWMgc2hvdWxkIGJlIHJlcG9ydGVkLCBiYXNlZCBvbiB0aGUgZGlhZ25vc3RpYyBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzXG4gICAqIHNvdXJjZSBmaWxlLiBSdW5zIGluIGFkZGl0aW9uIHRvIHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX0gXHUyMDE0IGEgZGlhZ25vc3RpYyBpc1xuICAgKiByZXBvcnRlZCBvbmx5IHdoZW4gYm90aCBwcmVkaWNhdGVzIGtlZXAgaXQuIFVzZSB0aGlzIHRvIGRyb3AgZGlhZ25vc3RpY3MgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gYVxuICAgKiBmaWxlIHdlIG93biBidXQgYXJlIGNhdXNlZCBieSBzb21ldGhpbmcgd2UgZG8gbm90IGNvbnRyb2wgKGUuZy4gYSBjcm9zcy1tb2R1bGUtZm9ybWF0IGludGVyb3BcbiAgICogY29tcGxhaW50IGFib3V0IGEgdGhpcmQtcGFydHkgaW1wb3J0KS4gV2hlbiBvbWl0dGVkLCBubyBkaWFnbm9zdGljIGlzIGRyb3BwZWQgb24gdGhpcyBiYXNpcy5cbiAgICpcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgLSBUaGUgZGlhZ25vc3RpYyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRGlhZ25vc3RpYz86IChkaWFnbm9zdGljOiBEaWFnbm9zdGljKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUgaXMgb25lIHdlIGNhcmUgYWJvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUsIGFscmVhZHkgcGFzc2VkIHRocm91Z2gge0BsaW5rIHRvQ2Fub25pY2FsfS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc29sdmVkIHJlc3VsdCBvZiB7QGxpbmsgcGFyc2VUc0NvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVHNDb25maWcge1xuICAvKipcbiAgVGhlIHJlc29sdmVkIGxpc3Qgb2YgZmlsZXMgdGhlIGNvbmZpZyBpbmNsdWRlcyAoYWJzb2x1dGUgcGF0aHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGNvbXBpbGVyIG9wdGlvbnMgKHdpdGggYGV4dGVuZHNgIGFwcGxpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xufVxuXG5jb25zdCBGT1JNQVRfSE9TVDogRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcbiAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gc3lzLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgZ2V0TmV3TGluZTogKCkgPT4gc3lzLm5ld0xpbmVcbn07XG5cbi8qKlxuICogVHlwZS1jaGVja3MgYSBzZXQgb2YgZmlsZXMgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIGJ1dCByZXBvcnRzIG9ubHkgdGhlIGRpYWdub3N0aWNzIHdob3NlXG4gKiBzb3VyY2UgZmlsZSBwYXNzZXMgYHNob3VsZEtlZXBGaWxlYC4gRGlhZ25vc3RpY3MgZnJvbSBmaWxlcyB3ZSBkbyBub3QgY29udHJvbCAoZS5nLiBicm9rZW5cbiAqIHRoaXJkLXBhcnR5IGAuZC50c2AgcHVsbGVkIGluIHRyYW5zaXRpdmVseSkgYXJlIGRyb3BwZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGNvdW50ZWQgZm9yXG4gKiB2aXNpYmlsaXR5LiBXaGVuIGBpc1ZlcmJvc2VgIGlzIHNldCwgdGhlIGRyb3BwZWQgZGlhZ25vc3RpY3MgYXJlIGFsc28gcHJpbnRlZCBpbiBmdWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvZ3JhbSBpbnB1dHMgYW5kIHRoZSBrZWVwIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vIHJlcG9ydGVkIGRpYWdub3N0aWMgaXMgYW4gZXJyb3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9qZWN0VHlwZXMocGFyYW1zOiBDaGVja1Byb2plY3RUeXBlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zOiBDb21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgc2tpcExpYkNoZWNrOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogWy4uLnBhcmFtcy5yb290TmFtZXNdXG4gIH0pO1xuXG4gIGNvbnN0IGFsbERpYWdub3N0aWNzID0gZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBjb25zdCBrZXB0RGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+IHNob3VsZEtlZXBEaWFnbm9zdGljQnlGaWxlKGRpYWdub3N0aWMsIHBhcmFtcy5zaG91bGRLZWVwRmlsZSkgJiYgKHBhcmFtcy5zaG91bGRLZWVwRGlhZ25vc3RpYz8uKGRpYWdub3N0aWMpID8/IHRydWUpKTtcbiAgY29uc3QgaWdub3JlZENvdW50ID0gYWxsRGlhZ25vc3RpY3MubGVuZ3RoIC0ga2VwdERpYWdub3N0aWNzLmxlbmd0aDtcblxuICBpZiAoa2VwdERpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoa2VwdERpYWdub3N0aWNzLCBGT1JNQVRfSE9TVCkpO1xuICB9XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYElnbm9yZWQgJHtTdHJpbmcoaWdub3JlZENvdW50KX0gZGlhZ25vc3RpYyhzKSBvdXRzaWRlIHRoZSB2YWxpZGF0ZWQgc2V0LlxcbmApO1xuXG4gIGlmIChwYXJhbXMuaXNWZXJib3NlICYmIGlnbm9yZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBpZ25vcmVkRGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+ICFrZXB0RGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYykpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChpZ25vcmVkRGlhZ25vc3RpY3MsIEZPUk1BVF9IT1NUKSk7XG4gIH1cblxuICByZXR1cm4ga2VwdERpYWdub3N0aWNzLmV2ZXJ5KChkaWFnbm9zdGljKSA9PiBkaWFnbm9zdGljLmNhdGVnb3J5ICE9PSBEaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGB0c2NvbmZpZy5qc29uYCAocmVzb2x2aW5nIGBleHRlbmRzYCwgYGluY2x1ZGVgLCBgZXhjbHVkZWApIGludG8gdGhlIHJlc29sdmVkIGZpbGUgbGlzdFxuICogYW5kIGNvbXBpbGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHRzQ29uZmlnUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGZpbGUgbmFtZXMgYW5kIG9wdGlvbnMuXG4gKiBAdGhyb3dzIElmIHRoZSBjb25maWcgY2Fubm90IGJlIHBhcnNlZCBvciBjb250YWlucyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRzQ29uZmlnKHRzQ29uZmlnUGF0aDogc3RyaW5nKTogUGFyc2VkVHNDb25maWcge1xuICBjb25zdCBob3N0OiBQYXJzZUNvbmZpZ0ZpbGVIb3N0ID0ge1xuICAgIGZpbGVFeGlzdHM6IChwYXRoKSA9PiBzeXMuZmlsZUV4aXN0cyhwYXRoKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBzeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIG9uVW5SZWNvdmVyYWJsZUNvbmZpZ0ZpbGVEaWFnbm9zdGljOiAoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWMoZGlhZ25vc3RpYywgRk9STUFUX0hPU1QpKTtcbiAgICB9LFxuICAgIHJlYWREaXJlY3Rvcnk6IChyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSA9PiBzeXMucmVhZERpcmVjdG9yeShyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKHBhdGgpID0+IHN5cy5yZWFkRmlsZShwYXRoKSxcbiAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBzeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlZCA9IGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlKHRzQ29uZmlnUGF0aCwgdW5kZWZpbmVkLCBob3N0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFR5cGVTY3JpcHQgY29uZmlnOiAke3RzQ29uZmlnUGF0aH1gKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyB3aGlsZSBwYXJzaW5nIFR5cGVTY3JpcHQgY29uZmlnICR7dHNDb25maWdQYXRofTpcXG4ke2Zvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMsIEZPUk1BVF9IT1NUKX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnM6IHBhcnNlZC5vcHRpb25zXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGUgcGF0aCBmb3IgY29tcGFyaXNvbjogZm9yd2FyZCBzbGFzaGVzIGV2ZXJ5d2hlcmUsIGxvd2VyLWNhc2VkIG9uIGFcbiAqIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW5vbmljYWwoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWxlTmFtZS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgcmV0dXJuIHN5cy51c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzID8gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkS2VlcERpYWdub3N0aWNCeUZpbGUoZGlhZ25vc3RpYzogRGlhZ25vc3RpYywgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZGlhZ25vc3RpYy5maWxlIHx8IHNob3VsZEtlZXBGaWxlKHRvQ2Fub25pY2FsKGRpYWdub3N0aWMuZmlsZS5maWxlTmFtZSkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkEsT0FBTyxhQUFhO0FBQ3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFD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
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jaGVjay1wcm9qZWN0LXR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlLWNoZWNrcyBhIHNldCBvZiBUeXBlU2NyaXB0IGZpbGVzIHdpdGggYHNraXBMaWJDaGVja2AgZGlzYWJsZWQsIGJ1dCByZXBvcnRzIG9ubHkgdGhlXG4gKiBkaWFnbm9zdGljcyB3aG9zZSBzb3VyY2UgZmlsZSB3ZSBvd24uIFRoaXMgbGV0cyB0aGUgZ2VuZXJhbCBidWlsZCBydW4gd2l0aCBgc2tpcExpYkNoZWNrOiB0cnVlYFxuICogKHNvIGl0IGRvZXMgbm90IGZhaWwgb24gYnJva2VuIHVwc3RyZWFtIGAuZC50c2AgZmlsZXMgd2UgZG8gbm90IGNvbnRyb2wsIHN1Y2ggYXMgYSBnaXZlblxuICogdmVyc2lvbidzIGBvYnNpZGlhbi5kLnRzYCkgd2hpbGUgc3RpbGwgZnVsbHkgdmFsaWRhdGluZyB0aGUgZGVjbGFyYXRpb25zIHdlIGF1dGhvci5cbiAqXG4gKiBXaGVuIHVwc3RyZWFtIHR5cGVzIGFyZSBmaXhlZCwgdGhlIGBJZ25vcmVkIE4gZGlhZ25vc3RpYyhzKWAgY291bnQgZHJvcHMgdG8gYDBgLCBzaWduYWxsaW5nIHRoZVxuICogd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgZG9pbmcgYW55dGhpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21waWxlck9wdGlvbnMsXG4gIERpYWdub3N0aWMsXG4gIEZvcm1hdERpYWdub3N0aWNzSG9zdCxcbiAgUGFyc2VDb25maWdGaWxlSG9zdFxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIERpYWdub3N0aWNDYXRlZ29yeSxcbiAgZm9ybWF0RGlhZ25vc3RpYyxcbiAgZm9ybWF0RGlhZ25vc3RpY3MsXG4gIGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dCxcbiAgZ2V0UGFyc2VkQ29tbWFuZExpbmVPZkNvbmZpZ0ZpbGUsXG4gIGdldFByZUVtaXREaWFnbm9zdGljcyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja1Byb2plY3RUeXBlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tQcm9qZWN0VHlwZXNQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBpZ25vcmVkIGRpYWdub3N0aWNzICh0aG9zZSBkcm9wcGVkIGJ5IHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX1cbiAgICogb3Ige0BsaW5rIENoZWNrUHJvamVjdFR5cGVzUGFyYW1zLnNob3VsZEtlZXBEaWFnbm9zdGljfSkgYXJlIHByaW50ZWQgaW4gZnVsbCBhZnRlciB0aGUgaWdub3JlZFxuICAgKiBjb3VudCwgc28gdGhleSBjYW4gYmUgaW5zcGVjdGVkLiBXaGVuIG9taXR0ZWQgb3IgYGZhbHNlYCwgb25seSB0aGUgY291bnQgaXMgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNWZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgQ29tcGlsZXIgb3B0aW9ucyBmb3IgdGhlIHByb2dyYW0uIGBza2lwTGliQ2hlY2tgIGlzIGFsd2F5cyBmb3JjZWQgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucztcblxuICAvKipcbiAgVGhlIHJvb3QgZmlsZXMgdG8gdHlwZS1jaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciBhIGRpYWdub3N0aWMgc2hvdWxkIGJlIHJlcG9ydGVkLCBiYXNlZCBvbiB0aGUgZGlhZ25vc3RpYyBpdHNlbGYgcmF0aGVyIHRoYW4gaXRzXG4gICAqIHNvdXJjZSBmaWxlLiBSdW5zIGluIGFkZGl0aW9uIHRvIHtAbGluayBDaGVja1Byb2plY3RUeXBlc1BhcmFtcy5zaG91bGRLZWVwRmlsZX0g4oCUIGEgZGlhZ25vc3RpYyBpc1xuICAgKiByZXBvcnRlZCBvbmx5IHdoZW4gYm90aCBwcmVkaWNhdGVzIGtlZXAgaXQuIFVzZSB0aGlzIHRvIGRyb3AgZGlhZ25vc3RpY3MgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gYVxuICAgKiBmaWxlIHdlIG93biBidXQgYXJlIGNhdXNlZCBieSBzb21ldGhpbmcgd2UgZG8gbm90IGNvbnRyb2wgKGUuZy4gYSBjcm9zcy1tb2R1bGUtZm9ybWF0IGludGVyb3BcbiAgICogY29tcGxhaW50IGFib3V0IGEgdGhpcmQtcGFydHkgaW1wb3J0KS4gV2hlbiBvbWl0dGVkLCBubyBkaWFnbm9zdGljIGlzIGRyb3BwZWQgb24gdGhpcyBiYXNpcy5cbiAgICpcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgLSBUaGUgZGlhZ25vc3RpYyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRGlhZ25vc3RpYz86IChkaWFnbm9zdGljOiBEaWFnbm9zdGljKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUgaXMgb25lIHdlIGNhcmUgYWJvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBkaWFnbm9zdGljJ3Mgc291cmNlIGZpbGUsIGFscmVhZHkgcGFzc2VkIHRocm91Z2gge0BsaW5rIHRvQ2Fub25pY2FsfS5cbiAgICogQHJldHVybnMgYHRydWVgIHRvIHJlcG9ydCB0aGUgZGlhZ25vc3RpYywgYGZhbHNlYCB0byBpZ25vcmUgaXQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRLZWVwRmlsZTogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlc29sdmVkIHJlc3VsdCBvZiB7QGxpbmsgcGFyc2VUc0NvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVHNDb25maWcge1xuICAvKipcbiAgVGhlIHJlc29sdmVkIGxpc3Qgb2YgZmlsZXMgdGhlIGNvbmZpZyBpbmNsdWRlcyAoYWJzb2x1dGUgcGF0aHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIGNvbXBpbGVyIG9wdGlvbnMgKHdpdGggYGV4dGVuZHNgIGFwcGxpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xufVxuXG5jb25zdCBGT1JNQVRfSE9TVDogRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcbiAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gc3lzLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgZ2V0TmV3TGluZTogKCkgPT4gc3lzLm5ld0xpbmVcbn07XG5cbi8qKlxuICogVHlwZS1jaGVja3MgYSBzZXQgb2YgZmlsZXMgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAsIGJ1dCByZXBvcnRzIG9ubHkgdGhlIGRpYWdub3N0aWNzIHdob3NlXG4gKiBzb3VyY2UgZmlsZSBwYXNzZXMgYHNob3VsZEtlZXBGaWxlYC4gRGlhZ25vc3RpY3MgZnJvbSBmaWxlcyB3ZSBkbyBub3QgY29udHJvbCAoZS5nLiBicm9rZW5cbiAqIHRoaXJkLXBhcnR5IGAuZC50c2AgcHVsbGVkIGluIHRyYW5zaXRpdmVseSkgYXJlIGRyb3BwZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGNvdW50ZWQgZm9yXG4gKiB2aXNpYmlsaXR5LiBXaGVuIGBpc1ZlcmJvc2VgIGlzIHNldCwgdGhlIGRyb3BwZWQgZGlhZ25vc3RpY3MgYXJlIGFsc28gcHJpbnRlZCBpbiBmdWxsLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvZ3JhbSBpbnB1dHMgYW5kIHRoZSBrZWVwIHByZWRpY2F0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vIHJlcG9ydGVkIGRpYWdub3N0aWMgaXMgYW4gZXJyb3IsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9qZWN0VHlwZXMocGFyYW1zOiBDaGVja1Byb2plY3RUeXBlc1BhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBvcHRpb25zOiBDb21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgc2tpcExpYkNoZWNrOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zLFxuICAgIHJvb3ROYW1lczogWy4uLnBhcmFtcy5yb290TmFtZXNdXG4gIH0pO1xuXG4gIGNvbnN0IGFsbERpYWdub3N0aWNzID0gZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBjb25zdCBrZXB0RGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+IHNob3VsZEtlZXBEaWFnbm9zdGljQnlGaWxlKGRpYWdub3N0aWMsIHBhcmFtcy5zaG91bGRLZWVwRmlsZSkgJiYgKHBhcmFtcy5zaG91bGRLZWVwRGlhZ25vc3RpYz8uKGRpYWdub3N0aWMpID8/IHRydWUpKTtcbiAgY29uc3QgaWdub3JlZENvdW50ID0gYWxsRGlhZ25vc3RpY3MubGVuZ3RoIC0ga2VwdERpYWdub3N0aWNzLmxlbmd0aDtcblxuICBpZiAoa2VwdERpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoa2VwdERpYWdub3N0aWNzLCBGT1JNQVRfSE9TVCkpO1xuICB9XG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYElnbm9yZWQgJHtTdHJpbmcoaWdub3JlZENvdW50KX0gZGlhZ25vc3RpYyhzKSBvdXRzaWRlIHRoZSB2YWxpZGF0ZWQgc2V0LlxcbmApO1xuXG4gIGlmIChwYXJhbXMuaXNWZXJib3NlICYmIGlnbm9yZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBpZ25vcmVkRGlhZ25vc3RpY3MgPSBhbGxEaWFnbm9zdGljcy5maWx0ZXIoKGRpYWdub3N0aWMpID0+ICFrZXB0RGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYykpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChpZ25vcmVkRGlhZ25vc3RpY3MsIEZPUk1BVF9IT1NUKSk7XG4gIH1cblxuICByZXR1cm4ga2VwdERpYWdub3N0aWNzLmV2ZXJ5KChkaWFnbm9zdGljKSA9PiBkaWFnbm9zdGljLmNhdGVnb3J5ICE9PSBEaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGB0c2NvbmZpZy5qc29uYCAocmVzb2x2aW5nIGBleHRlbmRzYCwgYGluY2x1ZGVgLCBgZXhjbHVkZWApIGludG8gdGhlIHJlc29sdmVkIGZpbGUgbGlzdFxuICogYW5kIGNvbXBpbGVyIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHRzQ29uZmlnUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGZpbGUgbmFtZXMgYW5kIG9wdGlvbnMuXG4gKiBAdGhyb3dzIElmIHRoZSBjb25maWcgY2Fubm90IGJlIHBhcnNlZCBvciBjb250YWlucyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRzQ29uZmlnKHRzQ29uZmlnUGF0aDogc3RyaW5nKTogUGFyc2VkVHNDb25maWcge1xuICBjb25zdCBob3N0OiBQYXJzZUNvbmZpZ0ZpbGVIb3N0ID0ge1xuICAgIGZpbGVFeGlzdHM6IChwYXRoKSA9PiBzeXMuZmlsZUV4aXN0cyhwYXRoKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBzeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgIG9uVW5SZWNvdmVyYWJsZUNvbmZpZ0ZpbGVEaWFnbm9zdGljOiAoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWMoZGlhZ25vc3RpYywgRk9STUFUX0hPU1QpKTtcbiAgICB9LFxuICAgIHJlYWREaXJlY3Rvcnk6IChyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSA9PiBzeXMucmVhZERpcmVjdG9yeShyb290RGlyZWN0b3J5LCBleHRlbnNpb25zLCBleGNsdWRlcywgaW5jbHVkZXMsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKHBhdGgpID0+IHN5cy5yZWFkRmlsZShwYXRoKSxcbiAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBzeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlZCA9IGdldFBhcnNlZENvbW1hbmRMaW5lT2ZDb25maWdGaWxlKHRzQ29uZmlnUGF0aCwgdW5kZWZpbmVkLCBob3N0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFR5cGVTY3JpcHQgY29uZmlnOiAke3RzQ29uZmlnUGF0aH1gKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyB3aGlsZSBwYXJzaW5nIFR5cGVTY3JpcHQgY29uZmlnICR7dHNDb25maWdQYXRofTpcXG4ke2Zvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMsIEZPUk1BVF9IT1NUKX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnM6IHBhcnNlZC5vcHRpb25zXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGZpbGUgcGF0aCBmb3IgY29tcGFyaXNvbjogZm9yd2FyZCBzbGFzaGVzIGV2ZXJ5d2hlcmUsIGxvd2VyLWNhc2VkIG9uIGFcbiAqIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIGNhbm9uaWNhbCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW5vbmljYWwoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWxlTmFtZS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgcmV0dXJuIHN5cy51c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzID8gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkS2VlcERpYWdub3N0aWNCeUZpbGUoZGlhZ25vc3RpYzogRGlhZ25vc3RpYywgc2hvdWxkS2VlcEZpbGU6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZGlhZ25vc3RpYy5maWxlIHx8IHNob3VsZEtlZXBGaWxlKHRvQ2Fub25pY2FsKGRpYWdub3N0aWMuZmlsZS5maWxlTmFtZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxPQUFPLGFBQWE7QUFDcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUE2RFAs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
|