obsidian-dev-utils 78.1.0 → 80.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/dev/main.js +4 -11
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +3 -7
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +2 -4
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +1 -2
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +0 -2
- package/dist/lib/cjs/script-utils/build.cjs +9 -7
- package/dist/lib/cjs/script-utils/build.d.cts +9 -4
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +2 -2
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +2 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +2 -2
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +2 -6
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +20 -1
- package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +5 -1
- package/dist/lib/cjs/script-utils/nano-staged-config.cjs +34 -6
- package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +15 -0
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +3 -3
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +4 -4
- package/dist/lib/cjs/script-utils/version.cjs +30 -22
- package/dist/lib/cjs/script-utils/version.d.cts +37 -24
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +4 -8
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +6 -5
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +0 -2
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +1 -2
- package/dist/lib/esm/script-utils/build.d.mts +9 -4
- package/dist/lib/esm/script-utils/build.mjs +8 -6
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +2 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +2 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint.mjs +2 -2
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +2 -6
- package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +5 -1
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +22 -1
- package/dist/lib/esm/script-utils/nano-staged-config.d.mts +15 -0
- package/dist/lib/esm/script-utils/nano-staged-config.mjs +23 -6
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +4 -4
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +3 -3
- package/dist/lib/esm/script-utils/version.d.mts +37 -24
- package/dist/lib/esm/script-utils/version.mjs +30 -22
- package/dist/templates/scripts/build/build-templates.ts +4 -0
- package/dist/templates/scripts/commitlint-config.ts +3 -0
- package/dist/templates/scripts/eslint-config.ts +10 -0
- package/dist/{scripts → templates/scripts}/linters/over-exposure/find-overexposed-fix.ts +5 -1
- package/dist/{scripts → templates/scripts}/linters/over-exposure/find-overexposed.ts +5 -1
- package/dist/templates/scripts/markdownlint-cli2-config.ts +3 -0
- package/dist/templates/scripts/nano-staged-config.ts +3 -0
- package/dist/templates/scripts/vitest-config.ts +89 -0
- package/package.json +4 -2
- package/dist/scripts/build/build-static.ts +0 -4
- /package/dist/{.markdownlint-cli2.mjs → templates/.markdownlint-cli2.mjs} +0 -0
- /package/dist/{.nano-staged.mjs → templates/.nano-staged.mjs} +0 -0
- /package/dist/{commitlint.config.ts → templates/commitlint.config.ts} +0 -0
- /package/dist/{dprint.json → templates/dprint.json} +0 -0
- /package/dist/{eslint.config.mts → templates/eslint.config.mts} +0 -0
- /package/dist/{scripts → templates/scripts}/build/build-clean.ts +0 -0
- /package/dist/{scripts → templates/scripts}/build/build-compile-svelte.ts +0 -0
- /package/dist/{scripts → templates/scripts}/build/build-compile-typescript.ts +0 -0
- /package/dist/{scripts → templates/scripts}/build/build-compile.ts +0 -0
- /package/dist/{scripts → templates/scripts}/bundlers/esbuild/build.ts +0 -0
- /package/dist/{scripts → templates/scripts}/bundlers/esbuild/dev.ts +0 -0
- /package/dist/{scripts → templates/scripts}/formatters/dprint/format-check.ts +0 -0
- /package/dist/{scripts → templates/scripts}/formatters/dprint/format.ts +0 -0
- /package/dist/{scripts → templates/scripts}/linters/cspell/spellcheck.ts +0 -0
- /package/dist/{scripts → templates/scripts}/linters/eslint/lint-fix.ts +0 -0
- /package/dist/{scripts → templates/scripts}/linters/eslint/lint.ts +0 -0
- /package/dist/{scripts → templates/scripts}/linters/markdownlint/lint-md-fix.ts +0 -0
- /package/dist/{scripts → templates/scripts}/linters/markdownlint/lint-md.ts +0 -0
- /package/dist/{scripts → templates/scripts}/test-runners/vitest/test-coverage.ts +0 -0
- /package/dist/{scripts → templates/scripts}/test-runners/vitest/test-watch.ts +0 -0
- /package/dist/{scripts → templates/scripts}/test-runners/vitest/test.ts +0 -0
- /package/dist/{scripts → templates/scripts}/version/version.ts +0 -0
- /package/dist/{vitest.config.ts → templates/vitest.config.ts} +0 -0
|
@@ -174,13 +174,9 @@ async function lint(options) {
|
|
|
174
174
|
const packageFolder = (0, import_root.getRootFolder)((0, import_path.getFolderName)(__import_meta_url));
|
|
175
175
|
(0, import_type_guards.assertNonNullable)(packageFolder, "Package folder not found");
|
|
176
176
|
await (0, import_promises.cp)(
|
|
177
|
-
(0, import_path.join)(packageFolder, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.
|
|
177
|
+
(0, import_path.join)(packageFolder, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.DistTemplates, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.MarkdownlintCli2ConfigMjs),
|
|
178
178
|
(0, import_root.resolvePathFromRootSafe)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.MarkdownlintCli2ConfigMjs)
|
|
179
179
|
);
|
|
180
|
-
await (0, import_promises.cp)(
|
|
181
|
-
(0, import_path.join)(packageFolder, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.Dist, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.MarkdownlintCli2ConfigMts),
|
|
182
|
-
(0, import_root.resolvePathFromRootSafe)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.MarkdownlintCli2ConfigMts)
|
|
183
|
-
);
|
|
184
180
|
}
|
|
185
181
|
const targets = paths?.length ? paths : [import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.CurrentFolder];
|
|
186
182
|
await (0, import_root.execFromRoot)(["npx", "markdownlint-cli2", ...shouldFix ? ["--fix"] : [], { batchedArgs: targets }]);
|
|
@@ -212,4 +208,4 @@ async function lint(options) {
|
|
|
212
208
|
0 && (module.exports = {
|
|
213
209
|
lint
|
|
214
210
|
});
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG9jYWxSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgICAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSkoKTtcbi8qKlxuICogQGZpbGVcbiAqXG4gKiBMaW50IG1hcmtkb3duIGRvY3VtZW50YXRpb24gdXNpbmcgYG1hcmtkb3dubGludC1jbGkyYCBhbmQgYGxpbmtpbmF0b3JgLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBnbG9iXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi8uLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luXG59IGZyb20gJy4uLy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIGxpbnR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG9jYWxSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgICAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSkoKTtcbi8qKlxuICogQGZpbGVcbiAqXG4gKiBMaW50IG1hcmtkb3duIGRvY3VtZW50YXRpb24gdXNpbmcgYG1hcmtkb3dubGludC1jbGkyYCBhbmQgYGxpbmtpbmF0b3JgLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBnbG9iXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi4vLi4vYXN5bmMudHMnO1xuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi8uLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBnZXRGb2xkZXJOYW1lLFxuICBqb2luXG59IGZyb20gJy4uLy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIGxpbnR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gbGludC4gSWYgb21pdHRlZCwgbGludHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmaXggbGludGluZyBpc3N1ZXMgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdKc29uYyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnWWFtbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbmMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdZYW1sLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1ltbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnTWpzXG4gIF07XG5cbiAgY29uc3QgY29uZmlnRmlsZUV4aXN0ID0gY29uZmlnRmlsZXMuc29tZSgoY29uZmlnRmlsZSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoY29uZmlnRmlsZSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWNvbmZpZ0ZpbGVFeGlzdCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludCcpKCdtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHBhY2thZ2VGb2xkZXIsICdQYWNrYWdlIGZvbGRlciBub3QgZm91bmQnKTtcbiAgICBhd2FpdCBjcChcbiAgICAgIGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMpLFxuICAgICAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcylcbiAgICApO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2hlcyBhcmUgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCB0YXJnZXRzID0gcGF0aHM/Lmxlbmd0aCA/IHBhdGhzIDogW09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXJdO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWyducHgnLCAnbWFya2Rvd25saW50LWNsaTInLCAuLi4oc2hvdWxkRml4ID8gWyctLWZpeCddIDogW10pLCB7IGJhdGNoZWRBcmdzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZSgvXFxcXC9nLCAnLycpIHx8IHApXG4gICAgOiBhd2FpdCB0b0FycmF5KGdsb2IoWycqKi8qLm1kJ10sIHtcbiAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgJy5naXQvKionLFxuICAgICAgICAnZGlzdC8qKicsXG4gICAgICAgICdub2RlX21vZHVsZXMvKionXG4gICAgICBdXG4gICAgfSkpO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgICducHgnLFxuICAgICdsaW5raW5hdG9yJyxcbiAgICAnLS1yZXRyeScsXG4gICAgJy0tcmV0cnktZXJyb3JzJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtY291bnQnLFxuICAgICczJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtaml0dGVyJyxcbiAgICAnNScsXG4gICAgJy0tdXJsLXJld3JpdGUtc2VhcmNoJyxcbiAgICAnaHR0cHM6Ly93d3dcXFxcLm5wbWpzXFxcXC5jb20vcGFja2FnZS8nLFxuICAgICctLXVybC1yZXdyaXRlLXJlcGxhY2UnLFxuICAgICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nLFxuICAgIHsgYmF0Y2hlZEFyZ3M6IG1kRmlsZXMgfVxuICBdKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -148,6 +148,8 @@ const LIFECYCLE_ALLOWLIST = /* @__PURE__ */ new Set([
|
|
|
148
148
|
"onunload",
|
|
149
149
|
"onunloadImpl"
|
|
150
150
|
]);
|
|
151
|
+
const JSDOC_SECOND_ASTERISK_OFFSET = 2;
|
|
152
|
+
const JSDOC_FOURTH_CHARACTER_OFFSET = 3;
|
|
151
153
|
const MEMBER_EXPOSURE_ORDER = ["private", "protected", "public"];
|
|
152
154
|
const SCOPE_DESCRIPTION = {
|
|
153
155
|
"file-local": "within its own file",
|
|
@@ -225,6 +227,9 @@ function analyzeExport(node, context) {
|
|
|
225
227
|
if (!declaration) {
|
|
226
228
|
return;
|
|
227
229
|
}
|
|
230
|
+
if (hasTsDocComment(declaration)) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
228
233
|
const declFilePath = (0, import_check_project_types.toCanonical)(sourceFile.fileName);
|
|
229
234
|
const nameNodes = getExportedNameNodes(declaration);
|
|
230
235
|
const candidates = [];
|
|
@@ -262,10 +267,16 @@ function analyzeMember(node, context) {
|
|
|
262
267
|
}
|
|
263
268
|
const nameNode = member.name;
|
|
264
269
|
const declaringClass = node.parent;
|
|
270
|
+
if ((0, import_typescript.isPrivateIdentifier)(nameNode)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
265
273
|
const modifierKinds = getModifierKinds(member);
|
|
266
274
|
if (modifierKinds.has(import_typescript.SyntaxKind.StaticKeyword) || modifierKinds.has(import_typescript.SyntaxKind.OverrideKeyword) || LIFECYCLE_ALLOWLIST.has(nameNode.getText())) {
|
|
267
275
|
return;
|
|
268
276
|
}
|
|
277
|
+
if (hasTsDocComment(member)) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
269
280
|
const currentExposure = getCurrentMemberExposure(modifierKinds);
|
|
270
281
|
if (currentExposure === "private") {
|
|
271
282
|
return;
|
|
@@ -542,6 +553,14 @@ function getModifierKinds(node) {
|
|
|
542
553
|
}
|
|
543
554
|
return kinds;
|
|
544
555
|
}
|
|
556
|
+
function hasTsDocComment(node) {
|
|
557
|
+
const sourceFile = node.getSourceFile();
|
|
558
|
+
const fullText = sourceFile.getFullText();
|
|
559
|
+
const commentRanges = (0, import_typescript.getLeadingCommentRanges)(fullText, node.getFullStart()) ?? [];
|
|
560
|
+
return commentRanges.some(
|
|
561
|
+
(range) => range.kind === import_typescript.SyntaxKind.MultiLineCommentTrivia && fullText.charAt(range.pos + JSDOC_SECOND_ASTERISK_OFFSET) === "*" && fullText.charAt(range.pos + JSDOC_FOURTH_CHARACTER_OFFSET) !== "/"
|
|
562
|
+
);
|
|
563
|
+
}
|
|
545
564
|
function isDeclarationItself(reference, nameNode) {
|
|
546
565
|
return (0, import_check_project_types.toCanonical)(reference.fileName) === (0, import_check_project_types.toCanonical)(nameNode.getSourceFile().fileName) && reference.start === nameNode.getStart();
|
|
547
566
|
}
|
|
@@ -628,4 +647,4 @@ function toDisplayPath(filePath, baseFolder) {
|
|
|
628
647
|
findOverExposure,
|
|
629
648
|
formatOverExposureFindings
|
|
630
649
|
});
|
|
631
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL292ZXItZXhwb3N1cmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPdmVyLWV4cG9zdXJlIGFuYWx5emVyLlxuICpcbiAqIEZpbmRzIGRlY2xhcmF0aW9ucyBleHBvc2VkIG1vcmUgYnJvYWRseSB0aGFuIHRoZWlyIHJlZmVyZW5jZXMgcmVxdWlyZSwgc28gdGhlIGV4cG9zdXJlIGNhbiBiZVxuICogdGlnaHRlbmVkOlxuICpcbiAqIC0gYGV4cG9ydGBlZCBzeW1ib2xzIHJlZmVyZW5jZWQgb25seSB3aXRoaW4gdGhlaXIgb3duIGZpbGUgXHUyMDE0IHRoZSBgZXhwb3J0YCBjYW4gYmUgZHJvcHBlZC5cbiAqIC0gYHB1YmxpY2AgY2xhc3MgbWVtYmVycyByZWZlcmVuY2VkIG9ubHkgaW5zaWRlIHRoZWlyIG93biBjbGFzcyBcdTIwMTQgdGhleSBjYW4gYmUgYHByaXZhdGVgLlxuICogLSBgcHVibGljYCBjbGFzcyBtZW1iZXJzIHJlZmVyZW5jZWQgb25seSBpbnNpZGUgdGhlaXIgb3duIGNsYXNzIGFuZCBpdHMgc3ViY2xhc3NlcyBcdTIwMTQgdGhleSBjYW4gYmVcbiAqICAgYHByb3RlY3RlZGAuXG4gKiAtIGBwcm90ZWN0ZWRgIGNsYXNzIG1lbWJlcnMgcmVmZXJlbmNlZCBvbmx5IGluc2lkZSB0aGVpciBvd24gY2xhc3MgXHUyMDE0IHRoZXkgY2FuIGJlIGBwcml2YXRlYC5cbiAqXG4gKiBUaGUgYW5hbHlzaXMgaXMgd2hvbGUtcHJvZ3JhbSBhbmQgdHlwZS1hd2FyZTogaXQgdXNlcyB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZSBzZXJ2aWNlJ3NcbiAqIGZpbmQtYWxsLXJlZmVyZW5jZXMgdG8gbG9jYXRlIGV2ZXJ5IHVzZSBvZiBlYWNoIGRlY2xhcmF0aW9uLCB0aGVuIGNsYXNzaWZpZXMgdGhlIHRpZ2h0ZXN0XG4gKiBleHBvc3VyZSB0aGF0IHN0aWxsIGNvdmVycyBhbGwgcmVmZXJlbmNlcy4gTWVtYmVycyBpbnZva2VkIGJ5IHRoZSBmcmFtZXdvcmsgdmlhIHJlZ2lzdHJhdGlvblxuICogcmF0aGVyIHRoYW4gYnkgdmlzaWJsZSByZWZlcmVuY2VzIChPYnNpZGlhbiBsaWZlY3ljbGUgaG9va3MsIHNldHRpbmdzLXRhYiBgZGlzcGxheWAsIGV0Yy4pIGFyZVxuICogZXhjbHVkZWQgdmlhIHtAbGluayBMSUZFQ1lDTEVfQUxMT1dMSVNUfSwgYXMgYXJlIGBvdmVycmlkZWAgYW5kIGBzdGF0aWNgIG1lbWJlcnMgd2hvc2UgZXhwb3N1cmUgaXNcbiAqIGNvbnN0cmFpbmVkIGJ5IGEgYmFzZSBkZWNsYXJhdGlvbi5cbiAqXG4gKiBBIG1lbWJlciByZWZlcmVuY2VkIG9ubHkgZnJvbSB0ZXN0IGZpbGVzIGlzIHJlcG9ydGVkIHdpdGgge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuaXNGb3JjZWRCeVRlc3RPbmx5fVxuICogc2V0LCBzdXJmYWNpbmcgbWVtYmVycyB3aWRlbmVkIHB1cmVseSBmb3IgdGVzdGFiaWxpdHkgXHUyMDE0IHRoZSBjYW5vbmljYWwgY2FzZSBmb3IgZXh0cmFjdGluZyBsb2dpY1xuICogaW50byBhbiBpbmRlcGVuZGVudGx5IHRlc3RhYmxlIGNvbXBvbmVudCBpbnN0ZWFkLlxuICpcbiAqIEJleW9uZCByZXBvcnRpbmcsIHBhc3NpbmcgYHNob3VsZEZpeGAgdG8ge0BsaW5rIGZpbmRPdmVyRXhwb3N1cmV9IC8ge0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9XG4gKiByZXdyaXRlcyB0aGUgc291cmNlIGluIHBsYWNlOiBkcm9wcGluZyB0aGUgYGV4cG9ydGAga2V5d29yZCwgb3IgcmVwbGFjaW5nL2luc2VydGluZyBhIGBwcml2YXRlYFxuICogb3IgYHByb3RlY3RlZGAgbW9kaWZpZXIuIEVhY2ggZmluZGluZyB0aGVuIGNhcnJpZXMge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcud2FzRml4ZWR9IC9cbiAqIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLnNraXBSZWFzb259LiBDaGFuZ2VzIHRoYXQgY2Fubm90IGJlIHNhZmVseSBhdXRvbWF0ZWQgXHUyMDE0IHRob3NlIGZvcmNlZFxuICogb25seSBieSB0ZXN0IHJlZmVyZW5jZXMsIGRlY29yYXRlZCBtZW1iZXJzLCBvciBhbiBgZXhwb3J0YCBzaGFyZWQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkIHNpYmxpbmcgXHUyMDE0XG4gKiBhcmUgcmVwb3J0ZWQgYXMgc2tpcHBlZCBhbmQgbGVmdCB1bnRvdWNoZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDbGFzc0RlY2xhcmF0aW9uLFxuICBDbGFzc0xpa2VEZWNsYXJhdGlvbixcbiAgQ29tcGlsZXJPcHRpb25zLFxuICBFbnVtRGVjbGFyYXRpb24sXG4gIEZ1bmN0aW9uRGVjbGFyYXRpb24sXG4gIEdldEFjY2Vzc29yRGVjbGFyYXRpb24sXG4gIEludGVyZmFjZURlY2xhcmF0aW9uLFxuICBJU2NyaXB0U25hcHNob3QsXG4gIExhbmd1YWdlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlSG9zdCxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFJlZmVyZW5jZWRTeW1ib2wsXG4gIFNldEFjY2Vzc29yRGVjbGFyYXRpb24sXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVTdGF0ZW1lbnRcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7XG4gIGNhbkhhdmVNb2RpZmllcnMsXG4gIGNyZWF0ZURvY3VtZW50UmVnaXN0cnksXG4gIGNyZWF0ZUxhbmd1YWdlU2VydmljZSxcbiAgZ2V0RGVjb3JhdG9ycyxcbiAgZ2V0RGVmYXVsdExpYkZpbGVQYXRoLFxuICBnZXRNb2RpZmllcnMsXG4gIGlzQ2xhc3NEZWNsYXJhdGlvbixcbiAgaXNDbGFzc0xpa2UsXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc01ldGhvZERlY2xhcmF0aW9uLFxuICBpc1Byb3BlcnR5RGVjbGFyYXRpb24sXG4gIGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNTb3VyY2VGaWxlLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlU3RhdGVtZW50LFxuICBTY3JpcHRTbmFwc2hvdCxcbiAgU3ludGF4S2luZCxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlVHNDb25maWcsXG4gIHRvQ2Fub25pY2FsXG59IGZyb20gJy4uL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zIHtcbiAgLyoqIFRoZSBsYW5ndWFnZSBzZXJ2aWNlIHRvIHF1ZXJ5IGZvciByZWZlcmVuY2VzIGFuZCB0eXBlcy4gKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgb25jZSBwZXIgYW5hbHl6ZWQgc291cmNlIGZpbGUsIGJlZm9yZSB0aGF0IGZpbGUgaXMgcHJvY2Vzc2VkLiBUaGVcbiAgICogd2hvbGUtcHJvZ3JhbSByZWZlcmVuY2UgYW5hbHlzaXMgaXMgc2xvdywgc28gdGhpcyBsZXRzIGNhbGxlcnMgcmVwb3J0IGxpdmUgcHJvZ3Jlc3MgaW5zdGVhZCBvZlxuICAgKiBhcHBlYXJpbmcgdG8gaGFuZy5cbiAgICovXG4gIG9uUHJvZ3Jlc3M/KHRoaXM6IHZvaWQsIHByb2dyZXNzOiBPdmVyRXhwb3N1cmVQcm9ncmVzcyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBlYWNoIGZpeGFibGUgZmluZGluZyBpcyB0aWdodGVuZWQgaW4gcGxhY2UgdmlhIHtAbGluayB3cml0ZUZpbGV9ICh3aGljaCBtdXN0IHRoZW5cbiAgICogYmUgcHJvdmlkZWQpLCBhbmQgdGhlIHJldHVybmVkIGZpbmRpbmdzIGNhcnJ5IHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLndhc0ZpeGVkfSAvXG4gICAqIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLnNraXBSZWFzb259LiBXaGVuIGBmYWxzZWAgb3Igb21pdHRlZCwgdGhlIGFuYWx5c2lzIG9ubHkgcmVwb3J0cy5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggb2YgdGhlIHByb2plY3QncyBgc3JjYCBmb2xkZXIuIE9ubHkgZGVjbGFyYXRpb25zIGluIG5vbi10ZXN0IGZpbGVzXG4gICAqIHVuZGVyIHRoaXMgZm9sZGVyIGFyZSBhbmFseXplZDsgZGVjbGFyYXRpb25zIGVsc2V3aGVyZSAodGVzdCBmaWxlcywgZGVwZW5kZW5jaWVzKSBhcmUgaWdub3JlZFxuICAgKiBidXQgc3RpbGwgY291bnRlZCBhcyByZWZlcmVuY2Ugc2l0ZXMuXG4gICAqL1xuICByZWFkb25seSBzcmNGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogV3JpdGVzIHRoZSB0aWdodGVuZWQgY29udGVudHMgb2YgYSBjaGFuZ2VkIGZpbGUgYmFjayB0byBkaXNrLiBSZXF1aXJlZCB3aGVuIHtAbGluayBzaG91bGRGaXh9XG4gICAqIGlzIGB0cnVlYDsgaWdub3JlZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gQWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSB0byB3cml0ZSAob3JpZ2luYWwgY2FzaW5nLCBhcyBzdG9yZWQgaW4gdGhlIHByb2dyYW0pLlxuICAgKiBAcGFyYW0gY29udGVudCAtIFRoZSBmdWxsIG5ldyBmaWxlIGNvbnRlbnRzLlxuICAgKi9cbiAgd3JpdGVGaWxlPyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3RQYXJhbXMge1xuICAvKiogVGhlIGNvbXBpbGVyIG9wdGlvbnMuICovXG4gIHJlYWRvbmx5IGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zO1xuXG4gIC8qKiBUaGUgZmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgcHJvZ3JhbS4gKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogVGhlIGZpbGUtc3lzdGVtIG9wZXJhdGlvbnMgdXNlZCB0byByZWFkIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGZpbGVTeXN0ZW06IE92ZXJFeHBvc3VyZUZpbGVTeXN0ZW07XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2VQYXJhbXMge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYC4gKi9cbiAgcmVhZG9ubHkgdHNDb25maWdQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGV4cG9zdXJlIGxldmVsIGEgZGVjbGFyYXRpb24gY3VycmVudGx5IGhhcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ3VycmVudEV4cG9zdXJlID0gJ2V4cG9ydCcgfCAncHJvdGVjdGVkJyB8ICdwdWJsaWMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kT3ZlckV4cG9zdXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kT3ZlckV4cG9zdXJlUGFyYW1zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgb25jZSBwZXIgYW5hbHl6ZWQgc291cmNlIGZpbGUsIGZvciBsaXZlIHByb2dyZXNzIHJlcG9ydGluZy4gRm9yd2FyZGVkXG4gICAqIHRvIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfS5cbiAgICovXG4gIG9uUHJvZ3Jlc3M/KHRoaXM6IHZvaWQsIHByb2dyZXNzOiBPdmVyRXhwb3N1cmVQcm9ncmVzcyk6IHZvaWQ7XG5cbiAgLyoqIEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdCAodGhlIGZvbGRlciBjb250YWluaW5nIGB0c2NvbmZpZy5qc29uYCBhbmQgYHNyY2ApLiAqL1xuICByZWFkb25seSBwcm9qZWN0Rm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBmaXhhYmxlIGZpbmRpbmdzIGFyZSB0aWdodGVuZWQgaW4gcGxhY2Ugb24gZGlzayAodGhlIGBleHBvcnRgIGtleXdvcmQgaXMgZHJvcHBlZCxcbiAgICogb3IgYSBgcHJpdmF0ZWAgLyBgcHJvdGVjdGVkYCBtb2RpZmllciBpcyBpbnNlcnRlZC9yZXBsYWNlZCkuIFdoZW4gYGZhbHNlYCBvciBvbWl0dGVkLCB0aGVcbiAgICogcHJvamVjdCBpcyBvbmx5IGFuYWx5emVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE92ZXJFeHBvc3VyZUZpbmRpbmdzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHNldCwgZmlsZSBwYXRocyBpbiB0aGUgcmVwb3J0IGFyZSByZW5kZXJlZCByZWxhdGl2ZSB0byB0aGlzIGZvbGRlciAodHlwaWNhbGx5IHRoZSBjdXJyZW50XG4gICAqIHdvcmtpbmcgZGlyZWN0b3J5KSBpbnN0ZWFkIG9mIGFzIGFic29sdXRlIHBhdGhzLiBQYXRocyBvdXRzaWRlIHRoZSBmb2xkZXIgc3RheSBhYnNvbHV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VGb2xkZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBmaWxlLXN5c3RlbSBvcGVyYXRpb25zIHRoZSBsYW5ndWFnZS1zZXJ2aWNlIGhvc3QgbmVlZHMuIEluamVjdGluZyB0aGlzIChyYXRoZXIgdGhhblxuICogYWx3YXlzIHVzaW5nIGB0eXBlc2NyaXB0YCdzIGBzeXNgKSBsZXRzIHRlc3RzIGRyaXZlIHRoZSBhbmFseXplciBhZ2FpbnN0IGluLW1lbW9yeSBzb3VyY2VzIHdpdGggbm9cbiAqIHJlYWwgZmlsZS1zeXN0ZW0gYWNjZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJFeHBvc3VyZUZpbGVTeXN0ZW0ge1xuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGRpcmVjdG9yeSBleGlzdHMuXG4gICAqL1xuICBkaXJlY3RvcnlFeGlzdHModGhpczogdm9pZCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBmaWxlIGV4aXN0cy5cbiAgICovXG4gIGZpbGVFeGlzdHModGhpczogdm9pZCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBnZXRDdXJyZW50RGlyZWN0b3J5KHRoaXM6IHZvaWQpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIC0gRGlyZWN0b3J5IHBhdGguXG4gICAqIEByZXR1cm5zIFRoZSBpbW1lZGlhdGUgc3ViZGlyZWN0b3J5IG5hbWVzLlxuICAgKi9cbiAgZ2V0RGlyZWN0b3JpZXModGhpczogdm9pZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIC0gUm9vdCBkaXJlY3RvcnkuXG4gICAqIEBwYXJhbSBleHRlbnNpb25zIC0gRXh0ZW5zaW9ucyB0byBpbmNsdWRlLlxuICAgKiBAcGFyYW0gZXhjbHVkZSAtIFBhdHRlcm5zIHRvIGV4Y2x1ZGUuXG4gICAqIEBwYXJhbSBpbmNsdWRlIC0gUGF0dGVybnMgdG8gaW5jbHVkZS5cbiAgICogQHBhcmFtIGRlcHRoIC0gTWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBmaWxlIHBhdGhzLlxuICAgKi9cbiAgcmVhZERpcmVjdG9yeSh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcsIGV4dGVuc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXSwgZXhjbHVkZT86IHJlYWRvbmx5IHN0cmluZ1tdLCBpbmNsdWRlPzogcmVhZG9ubHkgc3RyaW5nW10sIGRlcHRoPzogbnVtYmVyKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyBUaGUgZmlsZSBjb250ZW50cywgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuXG4gICAqL1xuICByZWFkRmlsZSh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJFeHBvc3VyZUZpbmRpbmcge1xuICAvKiogMS1iYXNlZCBjb2x1bW4gb2YgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZS4gKi9cbiAgcmVhZG9ubHkgY29sdW1uOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBjdXJyZW50IGV4cG9zdXJlIGxldmVsLiAqL1xuICByZWFkb25seSBjdXJyZW50RXhwb3N1cmU6IEN1cnJlbnRFeHBvc3VyZTtcblxuICAvKiogQWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZSBkZWNsYXJpbmcgdGhlIHN5bWJvbC4gKi9cbiAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICAvKiogYHRydWVgIHdoZW4gdGhlIGRlY2xhcmF0aW9uIGhhcyBubyByZWZlcmVuY2VzIGF0IGFsbCAoYmVzaWRlcyBpdHNlbGYpLiAqL1xuICByZWFkb25seSBoYXNOb1JlZmVyZW5jZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGB0cnVlYCB3aGVuIHRoZSBkZWNsYXJhdGlvbiB3b3VsZCBxdWFsaWZ5IGZvciBhIHRpZ2h0ZXIgZXhwb3N1cmUgaWYgbm90IGZvciByZWZlcmVuY2VzIGNvbWluZ1xuICAgKiBleGNsdXNpdmVseSBmcm9tIHRlc3QgZmlsZXMgXHUyMDE0IGkuZS4gaXQgaXMgZXhwb3NlZCBwdXJlbHkgZm9yIHRlc3RhYmlsaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNGb3JjZWRCeVRlc3RPbmx5OiBib29sZWFuO1xuXG4gIC8qKiBgdHJ1ZWAgZm9yIGEgY2xhc3MgbWVtYmVyLCBgZmFsc2VgIGZvciBhIHRvcC1sZXZlbCBleHBvcnQuICovXG4gIHJlYWRvbmx5IGlzTWVtYmVyOiBib29sZWFuO1xuXG4gIC8qKiAxLWJhc2VkIGxpbmUgb2YgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZS4gKi9cbiAgcmVhZG9ubHkgbGluZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgZGVjbGFyZWQgbmFtZS4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbiBhIGZpeCBydW4sIHdoeSB0aGlzIGZpbmRpbmcgd2FzIGxlZnQgdW50b3VjaGVkIGluc3RlYWQgb2YgdGlnaHRlbmVkOyBgbnVsbGAgd2hlbiBpdCB3YXNcbiAgICogZml4ZWQgb3Igd2hlbiB0aGUgYW5hbHlzaXMgb25seSByZXBvcnRlZCAoYHNob3VsZEZpeGAgb2ZmKS5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBSZWFzb246IG51bGwgfCBPdmVyRXhwb3N1cmVTa2lwUmVhc29uO1xuXG4gIC8qKiBUaGUgZXhwb3N1cmUgdGhlIGRlY2xhcmF0aW9uIGNvdWxkIGJlIHRpZ2h0ZW5lZCB0by4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGVkRXhwb3N1cmU6IFN1Z2dlc3RlZEV4cG9zdXJlO1xuXG4gIC8qKiBgdHJ1ZWAgd2hlbiBhIGZpeCBydW4gdGlnaHRlbmVkIHRoaXMgZGVjbGFyYXRpb24gaW4gcGxhY2UuIEFsd2F5cyBgZmFsc2VgIGluIGEgcmVwb3J0IHJ1bi4gKi9cbiAgcmVhZG9ubHkgd2FzRml4ZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvZ3Jlc3MgcmVwb3J0ZWQgd2hpbGUgYW5hbHl6aW5nIGEgcHJvamVjdCwgb25lIGV2ZW50IHBlciBhbmFseXplZCBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVyRXhwb3N1cmVQcm9ncmVzcyB7XG4gIC8qKiBOdW1iZXIgb2Ygc291cmNlIGZpbGVzIGZ1bGx5IGFuYWx5emVkIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgKDAtYmFzZWQpLiAqL1xuICByZWFkb25seSBhbmFseXplZEZpbGVDb3VudDogbnVtYmVyO1xuXG4gIC8qKiBBYnNvbHV0ZSAoY2Fub25pY2FsKSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZSBhYm91dCB0byBiZSBhbmFseXplZC4gKi9cbiAgcmVhZG9ubHkgY3VycmVudEZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRvdGFsIG51bWJlciBvZiBzb3VyY2UgZmlsZXMgdGhhdCB3aWxsIGJlIGFuYWx5emVkLiAqL1xuICByZWFkb25seSB0b3RhbEZpbGVDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdoeSBhIGZpeCBydW4gbGVmdCBhIGZpbmRpbmcgdW50b3VjaGVkOlxuICpcbiAqIC0gYGRlY29yYXRlZGAgXHUyMDE0IHRoZSBtZW1iZXIgY2FycmllcyBhIGRlY29yYXRvciwgc28gdGhlIG1vZGlmaWVyIGluc2VydGlvbiBwb2ludCBpcyBhbWJpZ3VvdXMuXG4gKiAtIGBzaGFyZWQtZXhwb3J0YCBcdTIwMTQgdGhlIGBleHBvcnRgIGtleXdvcmQgaXMgc2hhcmVkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nIGRlY2xhcmF0b3IuXG4gKiAtIGB0ZXN0LW9ubHlgIFx1MjAxNCB0aGUgZGVjbGFyYXRpb24gaXMgZXhwb3NlZCBwdXJlbHkgZm9yIHRlc3RzLCBzbyB0aWdodGVuaW5nIHdvdWxkIGJyZWFrIHRoZSB0ZXN0LlxuICovXG5leHBvcnQgdHlwZSBPdmVyRXhwb3N1cmVTa2lwUmVhc29uID0gJ2RlY29yYXRlZCcgfCAnc2hhcmVkLWV4cG9ydCcgfCAndGVzdC1vbmx5JztcblxuLyoqXG4gKiBUaGUgKHRpZ2h0ZXIpIGV4cG9zdXJlIGxldmVsIGEgZGVjbGFyYXRpb24gY291bGQgYmUgcmVkdWNlZCB0by5cbiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdGVkRXhwb3N1cmUgPSAnZmlsZS1sb2NhbCcgfCAncHJpdmF0ZScgfCAncHJvdGVjdGVkJztcblxuLyoqXG4gKiBMaWZlY3ljbGUgYW5kIGZyYW1ld29yayBtZW1iZXJzIGludm9rZWQgYnkgT2JzaWRpYW4gb3IgYSBiYXNlIGNsYXNzIHZpYSByZWdpc3RyYXRpb24gcmF0aGVyIHRoYW5cbiAqIGJ5IHJlZmVyZW5jZXMgdGhlIGxhbmd1YWdlIHNlcnZpY2UgY2FuIHNlZS4gVGlnaHRlbmluZyB0aGVzZSB3b3VsZCBicmVhayB0aGUgZnJhbWV3b3JrIGNvbnRyYWN0LFxuICogc28gdGhleSBhcmUgbmV2ZXIgcmVwb3J0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBMSUZFQ1lDTEVfQUxMT1dMSVNUOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgJ2Rpc3BsYXknLFxuICAnaGlkZScsXG4gICdvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UnLFxuICAnb25MYXlvdXRSZWFkeScsXG4gICdvbmxvYWQnLFxuICAnb25sb2FkSW1wbCcsXG4gICdvbkxvYWRTZXR0aW5ncycsXG4gICdvblNhdmVTZXR0aW5ncycsXG4gICdvbnVubG9hZCcsXG4gICdvbnVubG9hZEltcGwnXG5dKTtcblxuaW50ZXJmYWNlIEFuYWx5c2lzQ29udGV4dCB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBlZGl0czogKG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdClbXTtcbiAgcmVhZG9ubHkgZmluZGluZ3M6IE92ZXJFeHBvc3VyZUZpbmRpbmdbXTtcbiAgcmVhZG9ubHkgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2U7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbmludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIHJlYWRvbmx5IGVkaXRzOiByZWFkb25seSAobnVsbCB8IE92ZXJFeHBvc3VyZVRleHRFZGl0KVtdO1xuICByZWFkb25seSBmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdO1xufVxuXG50eXBlIENsYXNzTWVtYmVyRGVjbGFyYXRpb24gPSBHZXRBY2Nlc3NvckRlY2xhcmF0aW9uIHwgTWV0aG9kRGVjbGFyYXRpb24gfCBQcm9wZXJ0eURlY2xhcmF0aW9uIHwgU2V0QWNjZXNzb3JEZWNsYXJhdGlvbjtcblxudHlwZSBFeHBvcnRhYmxlRGVjbGFyYXRpb24gPSBDbGFzc0RlY2xhcmF0aW9uIHwgRW51bURlY2xhcmF0aW9uIHwgRnVuY3Rpb25EZWNsYXJhdGlvbiB8IEludGVyZmFjZURlY2xhcmF0aW9uIHwgVHlwZUFsaWFzRGVjbGFyYXRpb24gfCBWYXJpYWJsZVN0YXRlbWVudDtcblxuaW50ZXJmYWNlIEV4cG9ydEZpbmRpbmdDYW5kaWRhdGUge1xuICByZWFkb25seSBmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nO1xuICByZWFkb25seSBpc1BsYWluRmlsZUxvY2FsOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmluZGluZ0ZsYWdzIHtcbiAgcmVhZG9ubHkgaGFzTm9SZWZlcmVuY2VzOiBib29sZWFuO1xuICByZWFkb25seSBpc0ZvcmNlZEJ5VGVzdE9ubHk6IGJvb2xlYW47XG59XG5cbnR5cGUgTWVtYmVyRXhwb3N1cmUgPSAncHJpdmF0ZScgfCAncHJvdGVjdGVkJyB8ICdwdWJsaWMnO1xuXG4vKipcbiAqIEEgc2luZ2xlIGluLXBsYWNlIHRleHQgcmVwbGFjZW1lbnQgdGhhdCB0aWdodGVucyBhIGRlY2xhcmF0aW9uJ3MgZXhwb3N1cmUuIEEgemVyby1sZW5ndGggZWRpdCBpc1xuICogYW4gaW5zZXJ0aW9uIChlLmcuIGFkZGluZyBhbiBleHBsaWNpdCBgcHJpdmF0ZWAgbW9kaWZpZXIgdG8gYW4gaW1wbGljaXRseS1gcHVibGljYCBtZW1iZXIpLlxuICovXG5pbnRlcmZhY2UgT3ZlckV4cG9zdXJlVGV4dEVkaXQge1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBsZW5ndGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgbmV3VGV4dDogc3RyaW5nO1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVmZXJlbmNlTG9jYXRpb24ge1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgU291cmNlRmlsZVRleHQge1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbmNvbnN0IE1FTUJFUl9FWFBPU1VSRV9PUkRFUjogcmVhZG9ubHkgTWVtYmVyRXhwb3N1cmVbXSA9IFsncHJpdmF0ZScsICdwcm90ZWN0ZWQnLCAncHVibGljJ107XG5jb25zdCBTQ09QRV9ERVNDUklQVElPTjogUmVjb3JkPFN1Z2dlc3RlZEV4cG9zdXJlLCBzdHJpbmc+ID0ge1xuICAnZmlsZS1sb2NhbCc6ICd3aXRoaW4gaXRzIG93biBmaWxlJyxcbiAgJ3ByaXZhdGUnOiAnaW5zaWRlIGl0cyBvd24gY2xhc3MnLFxuICAncHJvdGVjdGVkJzogJ2luc2lkZSBpdHMgY2xhc3MgKyBzdWJjbGFzc2VzJ1xufTtcbmNvbnN0IFNLSVBfUkVBU09OX0RFU0NSSVBUSU9OOiBSZWNvcmQ8T3ZlckV4cG9zdXJlU2tpcFJlYXNvbiwgc3RyaW5nPiA9IHtcbiAgJ2RlY29yYXRlZCc6ICdkZWNvcmF0ZWQgbWVtYmVyJyxcbiAgJ3NoYXJlZC1leHBvcnQnOiAnZXhwb3J0IHNoYXJlZCB3aXRoIGEgc3RpbGwtZXhwb3J0ZWQgc2libGluZycsXG4gICd0ZXN0LW9ubHknOiAnZXhwb3NlZCBvbmx5IGZvciB0ZXN0cydcbn07XG5jb25zdCBWSVNJQklMSVRZX01PRElGSUVSX0tJTkRTOiBSZWFkb25seVNldDxTeW50YXhLaW5kPiA9IG5ldyBTZXQ8U3ludGF4S2luZD4oW1N5bnRheEtpbmQuUHJpdmF0ZUtleXdvcmQsIFN5bnRheEtpbmQuUHJvdGVjdGVkS2V5d29yZCwgU3ludGF4S2luZC5QdWJsaWNLZXl3b3JkXSk7XG5jb25zdCBXSElURVNQQUNFX1BBVFRFUk4gPSAvXFxzLztcblxuLyoqXG4gKiBBbmFseXplcyBhIHByb2plY3QgKGFscmVhZHkgbG9hZGVkIGludG8gYSBsYW5ndWFnZSBzZXJ2aWNlKSBmb3Igb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucywgYW5kIFx1MjAxNFxuICogd2hlbiB7QGxpbmsgQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcy5zaG91bGRGaXh9IGlzIHNldCBcdTIwMTQgdGlnaHRlbnMgZXZlcnkgZml4YWJsZSBmaW5kaW5nIGluIHBsYWNlXG4gKiB2aWEge0BsaW5rIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMud3JpdGVGaWxlfS4gRmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgc2FmZWx5IGF1dG9tYXRlZCAoZXhwb3NlZFxuICogb25seSBmb3IgdGVzdHMsIGRlY29yYXRlZCwgb3Igc2hhcmluZyBhbiBgZXhwb3J0YCBrZXl3b3JkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nKSBjYXJyeSBhXG4gKiB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufSBhbmQgYXJlIGxlZnQgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIG92ZXItZXhwb3NlZCBkZWNsYXJhdGlvbnMsIGluIGRpc2NvdmVyeSBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5emVPdmVyRXhwb3N1cmUocGFyYW1zOiBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zKTogT3ZlckV4cG9zdXJlRmluZGluZ1tdIHtcbiAgY29uc3QgcmVzdWx0ID0gcnVuT3ZlckV4cG9zdXJlQW5hbHlzaXMocGFyYW1zKTtcbiAgaWYgKCFwYXJhbXMuc2hvdWxkRml4KSB7XG4gICAgcmV0dXJuIFsuLi5yZXN1bHQuZmluZGluZ3NdO1xuICB9XG5cbiAgY29uc3QgeyB3cml0ZUZpbGUgfSA9IHBhcmFtcztcbiAgYXNzZXJ0Tm9uTnVsbGFibGUod3JpdGVGaWxlLCAnd3JpdGVGaWxlIGlzIHJlcXVpcmVkIHdoZW4gc2hvdWxkRml4IGlzIHRydWUuJyk7XG4gIHJldHVybiBhcHBseU92ZXJFeHBvc3VyZUZpeGVzKHJlc3VsdCwgcGFyYW1zLmxhbmd1YWdlU2VydmljZS5nZXRQcm9ncmFtKCksIHdyaXRlRmlsZSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGEge0BsaW5rIExhbmd1YWdlU2VydmljZUhvc3R9IGJhY2tlZCBieSBhbiBleHBsaWNpdCBmaWxlIGxpc3QgYW5kIGZpbGUgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3RQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGxhbmd1YWdlLXNlcnZpY2UgaG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3QocGFyYW1zOiBDcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0UGFyYW1zKTogTGFuZ3VhZ2VTZXJ2aWNlSG9zdCB7XG4gIGNvbnN0IHsgY29tcGlsZXJPcHRpb25zLCBmaWxlTmFtZXMsIGZpbGVTeXN0ZW0gfSA9IHBhcmFtcztcbiAgcmV0dXJuIHtcbiAgICBkaXJlY3RvcnlFeGlzdHM6IChkaXJlY3RvcnkpID0+IGZpbGVTeXN0ZW0uZGlyZWN0b3J5RXhpc3RzKGRpcmVjdG9yeSksXG4gICAgZmlsZUV4aXN0czogKGZpbGUpID0+IGZpbGVTeXN0ZW0uZmlsZUV4aXN0cyhmaWxlKSxcbiAgICBnZXRDb21waWxhdGlvblNldHRpbmdzOiAoKSA9PiBjb21waWxlck9wdGlvbnMsXG4gICAgZ2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gZmlsZVN5c3RlbS5nZXRDdXJyZW50RGlyZWN0b3J5KCksXG4gICAgZ2V0RGVmYXVsdExpYkZpbGVOYW1lOiAobGliT3B0aW9ucykgPT4gZ2V0RGVmYXVsdExpYkZpbGVQYXRoKGxpYk9wdGlvbnMpLFxuICAgIGdldERpcmVjdG9yaWVzOiAoZGlyZWN0b3J5KSA9PiBmaWxlU3lzdGVtLmdldERpcmVjdG9yaWVzKGRpcmVjdG9yeSksXG4gICAgZ2V0U2NyaXB0RmlsZU5hbWVzOiAoKSA9PiBbLi4uZmlsZU5hbWVzXSxcbiAgICBnZXRTY3JpcHRTbmFwc2hvdDogKGZpbGVOYW1lKTogSVNjcmlwdFNuYXBzaG90IHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBmaWxlU3lzdGVtLnJlYWRGaWxlKGZpbGVOYW1lKTtcbiAgICAgIHJldHVybiB0ZXh0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBTY3JpcHRTbmFwc2hvdC5mcm9tU3RyaW5nKHRleHQpO1xuICAgIH0sXG4gICAgZ2V0U2NyaXB0VmVyc2lvbjogKCkgPT4gJzAnLFxuICAgIHJlYWREaXJlY3Rvcnk6IChwYXRoLCBleHRlbnNpb25zLCBleGNsdWRlLCBpbmNsdWRlLCBkZXB0aCkgPT4gZmlsZVN5c3RlbS5yZWFkRGlyZWN0b3J5KHBhdGgsIGV4dGVuc2lvbnMsIGV4Y2x1ZGUsIGluY2x1ZGUsIGRlcHRoKSxcbiAgICByZWFkRmlsZTogKGZpbGUpID0+IGZpbGVTeXN0ZW0ucmVhZEZpbGUoZmlsZSlcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBsYW5ndWFnZSBzZXJ2aWNlIG92ZXIgZXZlcnkgZmlsZSBpbiBhIHByb2plY3QncyBgdHNjb25maWcuanNvbmAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZVBhcmFtc30uXG4gKiBAcmV0dXJucyBBIGxhbmd1YWdlIHNlcnZpY2UgcmVhZHkgZm9yIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2UocGFyYW1zOiBDcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlUGFyYW1zKTogTGFuZ3VhZ2VTZXJ2aWNlIHtcbiAgY29uc3QgeyBmaWxlTmFtZXMsIG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcocGFyYW1zLnRzQ29uZmlnUGF0aCk7XG4gIHJldHVybiBjcmVhdGVMYW5ndWFnZVNlcnZpY2UoY3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdCh7IGNvbXBpbGVyT3B0aW9uczogb3B0aW9ucywgZmlsZU5hbWVzLCBmaWxlU3lzdGVtOiBzeXMgfSksIGNyZWF0ZURvY3VtZW50UmVnaXN0cnkoKSk7XG59XG5cbi8qKlxuICogRmluZHMgb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucyBpbiBhIHByb2plY3Qgb24gZGlzay4gV2hlblxuICoge0BsaW5rIEZpbmRPdmVyRXhwb3N1cmVQYXJhbXMuc2hvdWxkRml4fSBpcyBzZXQsIGVhY2ggZml4YWJsZSBmaW5kaW5nIGlzIGFsc28gdGlnaHRlbmVkIGluIHBsYWNlXG4gKiAocmV3cml0aW5nIHRoZSBhZmZlY3RlZCBzb3VyY2UgZmlsZXMgdmlhIGB0eXBlc2NyaXB0YCdzIGBzeXMud3JpdGVGaWxlYCkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgRmluZE92ZXJFeHBvc3VyZVBhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPdmVyRXhwb3N1cmUocGFyYW1zOiBGaW5kT3ZlckV4cG9zdXJlUGFyYW1zKTogT3ZlckV4cG9zdXJlRmluZGluZ1tdIHtcbiAgY29uc3QgcHJvamVjdEZvbGRlciA9IHRvQ2Fub25pY2FsKHBhcmFtcy5wcm9qZWN0Rm9sZGVyKTtcbiAgY29uc3QgbGFuZ3VhZ2VTZXJ2aWNlID0gY3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZSh7IHRzQ29uZmlnUGF0aDogYCR7cHJvamVjdEZvbGRlcn0vdHNjb25maWcuanNvbmAgfSk7XG4gIHJldHVybiBhbmFseXplT3ZlckV4cG9zdXJlKHtcbiAgICBsYW5ndWFnZVNlcnZpY2UsXG4gICAgc2hvdWxkRml4OiBwYXJhbXMuc2hvdWxkRml4LFxuICAgIHNyY0ZvbGRlcjogYCR7cHJvamVjdEZvbGRlcn0vc3JjYCxcbiAgICB3cml0ZUZpbGU6IChwYXRoLCBjb250ZW50KSA9PiB7XG4gICAgICBzeXMud3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpO1xuICAgIH0sXG4gICAgLi4ucGFyYW1zLm9uUHJvZ3Jlc3MgPyB7IG9uUHJvZ3Jlc3M6IHBhcmFtcy5vblByb2dyZXNzIH0gOiB7fVxuICB9KTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIG92ZXItZXhwb3N1cmUgZmluZGluZ3MgYXMgYSBodW1hbi1yZWFkYWJsZSByZXBvcnQsIHVzaW5nIHRoZSBncm91cGVkIGxheW91dCBvZiBFU0xpbnQnc1xuICogYHN0eWxpc2hgIGZvcm1hdHRlci4gRmluZGluZ3MgYXJlIGdyb3VwZWQgYnkgZmlsZSBhbmQgc29ydGVkIGJ5IGxpbmU6IGVhY2ggZmlsZSBpcyByZW5kZXJlZCBhcyBhXG4gKiBgcGF0aGAgaGVhZGVyIGxpbmUsIGZvbGxvd2VkIGJ5IG9uZSBpbmRlbnRlZCBgICBsaW5lOmNvbHVtbiAgY2hhbmdlIC0tIHJlYXNvbmAgcm93IHBlciBmaW5kaW5nICh0aGVcbiAqIGBsaW5lOmNvbHVtbmAgaXMgcmlnaHQtcGFkZGVkIHNvIHRoZSByb3dzIGFsaWduIHdpdGhpbiBhIGZpbGUpLiBUZXJtaW5hbHMgc3VjaCBhcyBWUyBDb2RlIHJlbmRlclxuICogZWFjaCBpbmRlbnRlZCBgbGluZTpjb2x1bW5gIGFzIGEgY2xpY2thYmxlIGxpbmsgXHUyMDE0IHJlc29sdmVkIGFnYWluc3QgdGhlIGZpbGUgaGVhZGVyIGFib3ZlIGl0IFx1MjAxNCB0aGF0XG4gKiBqdW1wcyBzdHJhaWdodCB0byB0aGUgZGVjbGFyYXRpb24uIEZpbGUgZ3JvdXBzIGFyZSBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lLiBJbiBhIGZpeCBydW4gKGZpbmRpbmdzXG4gKiBjYXJyeWluZyB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy53YXNGaXhlZH0gLyB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufSkgZWFjaCBjaGFuZ2VcbiAqIHJvdyBpcyBzdWZmaXhlZCB3aXRoIGBbZml4ZWRdYCBvciBgW3NraXBwZWQ6IFx1MjAyNl1gLCBhbmQgdGhlIHRyYWlsaW5nIHN1bW1hcnkgYXBwZW5kcyB0aGUgZml4ZWQvc2tpcHBlZFxuICogY291bnRzLlxuICpcbiAqIEBwYXJhbSBmaW5kaW5ncyAtIFRoZSBmaW5kaW5ncyB0byBmb3JtYXQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3NPcHRpb25zfS5cbiAqIEByZXR1cm5zIFRoZSByZXBvcnQgdGV4dC4gRW1wdHktZmluZGluZyBpbnB1dCB5aWVsZHMgYSBzaW5nbGUgXCJubyBmaW5kaW5nc1wiIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRPdmVyRXhwb3N1cmVGaW5kaW5ncyhmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdLCBvcHRpb25zPzogRm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3NPcHRpb25zKTogc3RyaW5nIHtcbiAgaWYgKGZpbmRpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnTm8gb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucyBmb3VuZC5cXG4nO1xuICB9XG5cbiAgY29uc3QgYmFzZUZvbGRlciA9IG9wdGlvbnM/LmJhc2VGb2xkZXIgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvQ2Fub25pY2FsKG9wdGlvbnMuYmFzZUZvbGRlcik7XG4gIGNvbnN0IGxpbmVzID0gZm9ybWF0RmluZGluZ0Jsb2NrcyhmaW5kaW5ncywgYmFzZUZvbGRlcik7XG4gIGxpbmVzLnB1c2goZm9ybWF0U3VtbWFyeShmaW5kaW5ncykpO1xuICByZXR1cm4gYCR7bGluZXMuam9pbignXFxuJyl9XFxuYDtcbn1cblxuZnVuY3Rpb24gYW5hbHl6ZUV4cG9ydChub2RlOiBOb2RlLCBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQpOiB2b2lkIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICBpZiAobm9kZS5wYXJlbnQgIT09IHNvdXJjZUZpbGUgfHwgIWdldE1vZGlmaWVyS2luZHMobm9kZSkuaGFzKFN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IGFzRXhwb3J0YWJsZURlY2xhcmF0aW9uKG5vZGUpO1xuICBpZiAoIWRlY2xhcmF0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVjbEZpbGVQYXRoID0gdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IG5hbWVOb2RlcyA9IGdldEV4cG9ydGVkTmFtZU5vZGVzKGRlY2xhcmF0aW9uKTtcbiAgY29uc3QgY2FuZGlkYXRlczogRXhwb3J0RmluZGluZ0NhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbmFtZU5vZGUgb2YgbmFtZU5vZGVzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IGNvbGxlY3RSZWZlcmVuY2VzKGNvbnRleHQubGFuZ3VhZ2VTZXJ2aWNlLmZpbmRSZWZlcmVuY2VzKHNvdXJjZUZpbGUuZmlsZU5hbWUsIG5hbWVOb2RlLmdldFN0YXJ0KCkpKVxuICAgICAgLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhaXNEZWNsYXJhdGlvbkl0c2VsZihyZWZlcmVuY2UsIG5hbWVOb2RlKSk7XG4gICAgY29uc3Qgb3RoZXJGaWxlUmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+IHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkgIT09IGRlY2xGaWxlUGF0aCk7XG5cbiAgICBpZiAob3RoZXJGaWxlUmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgIGZpbmRpbmc6IGJ1aWxkRmluZGluZyhkZWNsYXJhdGlvbiwgbmFtZU5vZGUsICdleHBvcnQnLCAnZmlsZS1sb2NhbCcsIHsgaGFzTm9SZWZlcmVuY2VzOiByZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCwgaXNGb3JjZWRCeVRlc3RPbmx5OiBmYWxzZSB9KSxcbiAgICAgICAgaXNQbGFpbkZpbGVMb2NhbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBub25UZXN0UmVmZXJlbmNlcyA9IG90aGVyRmlsZVJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc1Rlc3RGaWxlKHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkpKTtcbiAgICBpZiAobm9uVGVzdFJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICBmaW5kaW5nOiBidWlsZEZpbmRpbmcoZGVjbGFyYXRpb24sIG5hbWVOb2RlLCAnZXhwb3J0JywgJ2ZpbGUtbG9jYWwnLCB7IGhhc05vUmVmZXJlbmNlczogZmFsc2UsIGlzRm9yY2VkQnlUZXN0T25seTogdHJ1ZSB9KSxcbiAgICAgICAgaXNQbGFpbkZpbGVMb2NhbDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNhbkRyb3BFeHBvcnQgPSBjYW5kaWRhdGVzLmxlbmd0aCA9PT0gbmFtZU5vZGVzLmxlbmd0aCAmJiBjYW5kaWRhdGVzLmV2ZXJ5KChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pc1BsYWluRmlsZUxvY2FsKTtcbiAgY29uc3QgZXhwb3J0RWRpdCA9IGNhbkRyb3BFeHBvcnQgPyBjb21wdXRlRXhwb3J0UmVtb3ZhbEVkaXQoZGVjbGFyYXRpb24pIDogbnVsbDtcbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgIHJlY29yZChjb250ZXh0LCBjYW5kaWRhdGUuZmluZGluZywgZXhwb3J0RWRpdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYW5hbHl6ZU1lbWJlcihub2RlOiBOb2RlLCBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQpOiB2b2lkIHtcbiAgY29uc3QgbWVtYmVyID0gYXNDbGFzc01lbWJlcihub2RlKTtcbiAgaWYgKCFtZW1iZXIgfHwgIWlzQ2xhc3NMaWtlKG5vZGUucGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lTm9kZSA9IG1lbWJlci5uYW1lO1xuICBjb25zdCBkZWNsYXJpbmdDbGFzcyA9IG5vZGUucGFyZW50O1xuXG4gIGNvbnN0IG1vZGlmaWVyS2luZHMgPSBnZXRNb2RpZmllcktpbmRzKG1lbWJlcik7XG4gIGlmIChtb2RpZmllcktpbmRzLmhhcyhTeW50YXhLaW5kLlN0YXRpY0tleXdvcmQpIHx8IG1vZGlmaWVyS2luZHMuaGFzKFN5bnRheEtpbmQuT3ZlcnJpZGVLZXl3b3JkKSB8fCBMSUZFQ1lDTEVfQUxMT1dMSVNULmhhcyhuYW1lTm9kZS5nZXRUZXh0KCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY3VycmVudEV4cG9zdXJlID0gZ2V0Q3VycmVudE1lbWJlckV4cG9zdXJlKG1vZGlmaWVyS2luZHMpO1xuICBpZiAoY3VycmVudEV4cG9zdXJlID09PSAncHJpdmF0ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzb3VyY2VGaWxlID0gbWVtYmVyLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IGNvbGxlY3RSZWZlcmVuY2VzKGNvbnRleHQubGFuZ3VhZ2VTZXJ2aWNlLmZpbmRSZWZlcmVuY2VzKHNvdXJjZUZpbGUuZmlsZU5hbWUsIG5hbWVOb2RlLmdldFN0YXJ0KCkpKVxuICAgIC5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gIWlzRGVjbGFyYXRpb25JdHNlbGYocmVmZXJlbmNlLCBuYW1lTm9kZSkpO1xuICBjb25zdCBub25UZXN0UmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc1Rlc3RGaWxlKHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkpKTtcblxuICBjb25zdCBuZWVkZWRGb3JTcmMgPSBjb21wdXRlTmVlZGVkRXhwb3N1cmUobm9uVGVzdFJlZmVyZW5jZXMsIGRlY2xhcmluZ0NsYXNzLCBjb250ZXh0KTtcbiAgY29uc3QgbmVlZGVkV2l0aFRlc3RzID0gY29tcHV0ZU5lZWRlZEV4cG9zdXJlKHJlZmVyZW5jZXMsIGRlY2xhcmluZ0NsYXNzLCBjb250ZXh0KTtcblxuICBpZiAobmVlZGVkRm9yU3JjID09PSAncHVibGljJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyYW5rRXhwb3N1cmUobmVlZGVkRm9yU3JjKSA+PSByYW5rRXhwb3N1cmUoY3VycmVudEV4cG9zdXJlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbmRpbmcgPSBidWlsZEZpbmRpbmcobWVtYmVyLCBuYW1lTm9kZSwgY3VycmVudEV4cG9zdXJlLCBuZWVkZWRGb3JTcmMsIHtcbiAgICBoYXNOb1JlZmVyZW5jZXM6IHJlZmVyZW5jZXMubGVuZ3RoID09PSAwLFxuICAgIGlzRm9yY2VkQnlUZXN0T25seTogcmFua0V4cG9zdXJlKG5lZWRlZFdpdGhUZXN0cykgPiByYW5rRXhwb3N1cmUobmVlZGVkRm9yU3JjKVxuICB9KTtcbiAgcmVjb3JkKGNvbnRleHQsIGZpbmRpbmcsIGNvbXB1dGVNZW1iZXJFeHBvc3VyZUVkaXQobWVtYmVyLCBuZWVkZWRGb3JTcmMpKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlFZGl0cyh0ZXh0OiBzdHJpbmcsIGVkaXRzOiByZWFkb25seSBPdmVyRXhwb3N1cmVUZXh0RWRpdFtdKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB1bmlxdWVFZGl0cyA9IGVkaXRzXG4gICAgLmZpbHRlcigoZWRpdCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7U3RyaW5nKGVkaXQuc3RhcnQpfToke1N0cmluZyhlZGl0Lmxlbmd0aCl9OiR7ZWRpdC5uZXdUZXh0fWA7XG4gICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zdGFydCAtIGEuc3RhcnQpO1xuXG4gIGxldCByZXN1bHQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IGVkaXQgb2YgdW5pcXVlRWRpdHMpIHtcbiAgICByZXN1bHQgPSBgJHtyZXN1bHQuc2xpY2UoMCwgZWRpdC5zdGFydCl9JHtlZGl0Lm5ld1RleHR9JHtyZXN1bHQuc2xpY2UoZWRpdC5zdGFydCArIGVkaXQubGVuZ3RoKX1gO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFwcGx5T3ZlckV4cG9zdXJlRml4ZXMoXG4gIHJlc3VsdDogQW5hbHlzaXNSZXN1bHQsXG4gIHByb2dyYW06IFByb2dyYW0gfCB1bmRlZmluZWQsXG4gIHdyaXRlRmlsZTogKHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4pOiBPdmVyRXhwb3N1cmVGaW5kaW5nW10ge1xuICBjb25zdCBlZGl0c0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBPdmVyRXhwb3N1cmVUZXh0RWRpdFtdPigpO1xuICBjb25zdCBmaW5kaW5ncyA9IHJlc3VsdC5maW5kaW5ncy5tYXAoKGZpbmRpbmcsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZWRpdCA9IHJlc3VsdC5lZGl0c1tpbmRleF0gPz8gbnVsbDtcbiAgICBjb25zdCBza2lwUmVhc29uID0gZGV0ZXJtaW5lU2tpcFJlYXNvbihmaW5kaW5nLCBlZGl0KTtcbiAgICBpZiAoc2tpcFJlYXNvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZmluZGluZywgc2tpcFJlYXNvbiwgd2FzRml4ZWQ6IGZhbHNlIH07XG4gICAgfVxuICAgIGFzc2VydE5vbk51bGxhYmxlKGVkaXQsICdBIGZpeGFibGUgZmluZGluZyBtdXN0IGNhcnJ5IGEgdGV4dCBlZGl0LicpO1xuICAgIGNvbnN0IGZpbGVFZGl0cyA9IGVkaXRzQnlGaWxlLmdldChlZGl0LmZpbGVOYW1lKSA/PyBbXTtcbiAgICBmaWxlRWRpdHMucHVzaChlZGl0KTtcbiAgICBlZGl0c0J5RmlsZS5zZXQoZWRpdC5maWxlTmFtZSwgZmlsZUVkaXRzKTtcbiAgICByZXR1cm4geyAuLi5maW5kaW5nLCBza2lwUmVhc29uOiBudWxsLCB3YXNGaXhlZDogdHJ1ZSB9O1xuICB9KTtcblxuICBpZiAoZWRpdHNCeUZpbGUuc2l6ZSA+IDApIHtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwcm9ncmFtLCAnQSBwcm9ncmFtIGlzIGV4cGVjdGVkIHdoZW4gdGhlcmUgYXJlIGVkaXRzIHRvIGFwcGx5LicpO1xuICAgIGNvbnN0IHNvdXJjZVRleHRCeUZpbGUgPSBuZXcgTWFwPHN0cmluZywgU291cmNlRmlsZVRleHQ+KCk7XG4gICAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKSkge1xuICAgICAgc291cmNlVGV4dEJ5RmlsZS5zZXQodG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSksIHsgZmlsZU5hbWU6IHNvdXJjZUZpbGUuZmlsZU5hbWUsIHRleHQ6IHNvdXJjZUZpbGUudGV4dCB9KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbY2Fub25pY2FsRmlsZU5hbWUsIGZpbGVFZGl0c10gb2YgZWRpdHNCeUZpbGUpIHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZVRleHRCeUZpbGUuZ2V0KGNhbm9uaWNhbEZpbGVOYW1lKTtcbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKHNvdXJjZSwgYFNvdXJjZSBmaWxlIG5vdCBmb3VuZCBpbiBwcm9ncmFtOiAke2Nhbm9uaWNhbEZpbGVOYW1lfWApO1xuICAgICAgd3JpdGVGaWxlKHNvdXJjZS5maWxlTmFtZSwgYXBwbHlFZGl0cyhzb3VyY2UudGV4dCwgZmlsZUVkaXRzKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmRpbmdzO1xufVxuXG5mdW5jdGlvbiBhc0NsYXNzTWVtYmVyKG5vZGU6IE5vZGUpOiBDbGFzc01lbWJlckRlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKSB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhc0V4cG9ydGFibGVEZWNsYXJhdGlvbihub2RlOiBOb2RlKTogRXhwb3J0YWJsZURlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKFxuICAgIGlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNFbnVtRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1ZhcmlhYmxlU3RhdGVtZW50KG5vZGUpXG4gICkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmluZGluZyhcbiAgbm9kZTogTm9kZSxcbiAgbmFtZU5vZGU6IE5vZGUsXG4gIGN1cnJlbnRFeHBvc3VyZTogQ3VycmVudEV4cG9zdXJlLFxuICBzdWdnZXN0ZWRFeHBvc3VyZTogU3VnZ2VzdGVkRXhwb3N1cmUsXG4gIGZsYWdzOiBGaW5kaW5nRmxhZ3Ncbik6IE92ZXJFeHBvc3VyZUZpbmRpbmcge1xuICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IHsgY2hhcmFjdGVyLCBsaW5lIH0gPSBzb3VyY2VGaWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKG5hbWVOb2RlLmdldFN0YXJ0KCkpO1xuICByZXR1cm4ge1xuICAgIGNvbHVtbjogY2hhcmFjdGVyICsgMSxcbiAgICBjdXJyZW50RXhwb3N1cmUsXG4gICAgZmlsZVBhdGg6IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpLFxuICAgIGhhc05vUmVmZXJlbmNlczogZmxhZ3MuaGFzTm9SZWZlcmVuY2VzLFxuICAgIGlzRm9yY2VkQnlUZXN0T25seTogZmxhZ3MuaXNGb3JjZWRCeVRlc3RPbmx5LFxuICAgIGlzTWVtYmVyOiBjdXJyZW50RXhwb3N1cmUgIT09ICdleHBvcnQnLFxuICAgIGxpbmU6IGxpbmUgKyAxLFxuICAgIG5hbWU6IG5hbWVOb2RlLmdldFRleHQoKSxcbiAgICBza2lwUmVhc29uOiBudWxsLFxuICAgIHN1Z2dlc3RlZEV4cG9zdXJlLFxuICAgIHdhc0ZpeGVkOiBmYWxzZVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0UmVmZXJlbmNlcyhyZWZlcmVuY2VkU3ltYm9sczogUmVmZXJlbmNlZFN5bWJvbFtdIHwgdW5kZWZpbmVkKTogUmVmZXJlbmNlTG9jYXRpb25bXSB7XG4gIGNvbnN0IHJlZmVyZW5jZXM6IFJlZmVyZW5jZUxvY2F0aW9uW10gPSBbXTtcbiAgZm9yIChjb25zdCByZWZlcmVuY2VkU3ltYm9sIG9mIHJlZmVyZW5jZWRTeW1ib2xzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgcmVmZXJlbmNlZFN5bWJvbC5yZWZlcmVuY2VzKSB7XG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBmaWxlTmFtZTogcmVmZXJlbmNlLmZpbGVOYW1lLCBzdGFydDogcmVmZXJlbmNlLnRleHRTcGFuLnN0YXJ0IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVmZXJlbmNlcztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cG9ydFJlbW92YWxFZGl0KGRlY2xhcmF0aW9uOiBFeHBvcnRhYmxlRGVjbGFyYXRpb24pOiBPdmVyRXhwb3N1cmVUZXh0RWRpdCB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IG1vZGlmaWVycyA9IGdldE1vZGlmaWVycyhkZWNsYXJhdGlvbik7XG4gIGFzc2VydE5vbk51bGxhYmxlKG1vZGlmaWVycywgJ01vZGlmaWVycyBleHBlY3RlZCBvbiBhbiBleHBvcnRlZCBkZWNsYXJhdGlvbi4nKTtcbiAgY29uc3QgZXhwb3J0TW9kaWZpZXIgPSBtb2RpZmllcnMuZmluZCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLmtpbmQgPT09IFN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCk7XG4gIGFzc2VydE5vbk51bGxhYmxlKGV4cG9ydE1vZGlmaWVyLCAnRXhwb3J0IG1vZGlmaWVyIGV4cGVjdGVkIG9uIGFuIGV4cG9ydGVkIGRlY2xhcmF0aW9uLicpO1xuICBjb25zdCB7IHRleHQgfSA9IHNvdXJjZUZpbGU7XG4gIGxldCBlbmQgPSBleHBvcnRNb2RpZmllci5nZXRFbmQoKTtcbiAgd2hpbGUgKGVuZCA8IHRleHQubGVuZ3RoICYmIFdISVRFU1BBQ0VfUEFUVEVSTi50ZXN0KHRleHQuY2hhckF0KGVuZCkpKSB7XG4gICAgZW5kKys7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBmaWxlTmFtZTogdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSksXG4gICAgbGVuZ3RoOiBlbmQgLSBleHBvcnRNb2RpZmllci5nZXRTdGFydCgpLFxuICAgIG5ld1RleHQ6ICcnLFxuICAgIHN0YXJ0OiBleHBvcnRNb2RpZmllci5nZXRTdGFydCgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVNZW1iZXJFeHBvc3VyZUVkaXQobWVtYmVyOiBDbGFzc01lbWJlckRlY2xhcmF0aW9uLCBzdWdnZXN0ZWRFeHBvc3VyZTogJ3ByaXZhdGUnIHwgJ3Byb3RlY3RlZCcpOiBudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQge1xuICBpZiAoKGdldERlY29yYXRvcnMobWVtYmVyKSA/PyBbXSkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IG1lbWJlci5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IGZpbGVOYW1lID0gdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IG1vZGlmaWVycyA9IGdldE1vZGlmaWVycyhtZW1iZXIpID8/IFtdO1xuICBjb25zdCB2aXNpYmlsaXR5TW9kaWZpZXIgPSBtb2RpZmllcnMuZmluZCgobW9kaWZpZXIpID0+IFZJU0lCSUxJVFlfTU9ESUZJRVJfS0lORFMuaGFzKG1vZGlmaWVyLmtpbmQpKTtcbiAgaWYgKHZpc2liaWxpdHlNb2RpZmllcikge1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGxlbmd0aDogdmlzaWJpbGl0eU1vZGlmaWVyLmdldEVuZCgpIC0gdmlzaWJpbGl0eU1vZGlmaWVyLmdldFN0YXJ0KCksXG4gICAgICBuZXdUZXh0OiBzdWdnZXN0ZWRFeHBvc3VyZSxcbiAgICAgIHN0YXJ0OiB2aXNpYmlsaXR5TW9kaWZpZXIuZ2V0U3RhcnQoKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBmaXJzdE1vZGlmaWVyID0gbW9kaWZpZXJzWzBdO1xuICBjb25zdCBpbnNlcnRTdGFydCA9IGZpcnN0TW9kaWZpZXIgPyBmaXJzdE1vZGlmaWVyLmdldFN0YXJ0KCkgOiBtZW1iZXIuZ2V0U3RhcnQoKTtcbiAgcmV0dXJuIHtcbiAgICBmaWxlTmFtZSxcbiAgICBsZW5ndGg6IDAsXG4gICAgbmV3VGV4dDogYCR7c3VnZ2VzdGVkRXhwb3N1cmV9IGAsXG4gICAgc3RhcnQ6IGluc2VydFN0YXJ0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVOZWVkZWRFeHBvc3VyZShcbiAgcmVmZXJlbmNlczogcmVhZG9ubHkgUmVmZXJlbmNlTG9jYXRpb25bXSxcbiAgZGVjbGFyaW5nQ2xhc3M6IENsYXNzTGlrZURlY2xhcmF0aW9uLFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHRcbik6IE1lbWJlckV4cG9zdXJlIHtcbiAgaWYgKHJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdwcml2YXRlJztcbiAgfVxuXG4gIGxldCBuZWVkZWQ6IE1lbWJlckV4cG9zdXJlID0gJ3ByaXZhdGUnO1xuICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiByZWZlcmVuY2VzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlQ2xhc3MgPSBnZXRDbGFzc0F0UG9zaXRpb24oY29udGV4dC5wcm9ncmFtLCByZWZlcmVuY2UuZmlsZU5hbWUsIHJlZmVyZW5jZS5zdGFydCk7XG4gICAgaWYgKHJlZmVyZW5jZUNsYXNzID09PSBkZWNsYXJpbmdDbGFzcykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZWZlcmVuY2VDbGFzcyAmJiBpc0Rlcml2ZWRGcm9tKHJlZmVyZW5jZUNsYXNzLCBkZWNsYXJpbmdDbGFzcywgY29udGV4dC5jaGVja2VyKSkge1xuICAgICAgbmVlZGVkID0gJ3Byb3RlY3RlZCc7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuICdwdWJsaWMnO1xuICB9XG4gIHJldHVybiBuZWVkZWQ7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRml4U3RhdHVzKGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmcpOiBzdHJpbmcge1xuICBpZiAoZmluZGluZy53YXNGaXhlZCkge1xuICAgIHJldHVybiAnIFtmaXhlZF0nO1xuICB9XG4gIGlmIChmaW5kaW5nLnNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCBbc2tpcHBlZDogJHtTS0lQX1JFQVNPTl9ERVNDUklQVElPTltmaW5kaW5nLnNraXBSZWFzb25dfV1gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVSZWFzb24oZmluZGluZzogT3ZlckV4cG9zdXJlRmluZGluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBgcmVmZXJlbmNlZCBvbmx5ICR7U0NPUEVfREVTQ1JJUFRJT05bZmluZGluZy5zdWdnZXN0ZWRFeHBvc3VyZV19YDtcbiAgaWYgKGZpbmRpbmcuaXNGb3JjZWRCeVRlc3RPbmx5KSB7XG4gICAgcmV0dXJuIGAke2Jhc2V9IChleHBvc2VkIG9ubHkgZm9yIHRlc3RzKWA7XG4gIH1cbiAgaWYgKGZpbmRpbmcuaGFzTm9SZWZlcmVuY2VzKSB7XG4gICAgcmV0dXJuIGAke2Jhc2V9IChubyByZWZlcmVuY2VzIGF0IGFsbClgO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTa2lwUmVhc29uKGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmcsIGVkaXQ6IG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdCk6IG51bGwgfCBPdmVyRXhwb3N1cmVTa2lwUmVhc29uIHtcbiAgaWYgKGZpbmRpbmcuaXNGb3JjZWRCeVRlc3RPbmx5KSB7XG4gICAgcmV0dXJuICd0ZXN0LW9ubHknO1xuICB9XG4gIGlmICghZWRpdCkge1xuICAgIHJldHVybiBmaW5kaW5nLmlzTWVtYmVyID8gJ2RlY29yYXRlZCcgOiAnc2hhcmVkLWV4cG9ydCc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmROb2RlQXRQb3NpdGlvbihub2RlOiBOb2RlLCBwb3NpdGlvbjogbnVtYmVyKTogTm9kZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChwb3NpdGlvbiA8IG5vZGUuZ2V0U3RhcnQoKSB8fCBwb3NpdGlvbiA+PSBub2RlLmdldEVuZCgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgcmVzdWx0OiBOb2RlID0gbm9kZTtcbiAgbm9kZS5mb3JFYWNoQ2hpbGQoKGNoaWxkKSA9PiB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTm9kZUF0UG9zaXRpb24oY2hpbGQsIHBvc2l0aW9uKTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHJlc3VsdCA9IGZvdW5kO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbmRpbmdCbG9ja3MoZmluZGluZ3M6IHJlYWRvbmx5IE92ZXJFeHBvc3VyZUZpbmRpbmdbXSwgYmFzZUZvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBjb25zdCBieUZpbGUgPSBuZXcgTWFwPHN0cmluZywgT3ZlckV4cG9zdXJlRmluZGluZ1tdPigpO1xuICBmb3IgKGNvbnN0IGZpbmRpbmcgb2YgZmluZGluZ3MpIHtcbiAgICBjb25zdCBsaXN0ID0gYnlGaWxlLmdldChmaW5kaW5nLmZpbGVQYXRoKSA/PyBbXTtcbiAgICBsaXN0LnB1c2goZmluZGluZyk7XG4gICAgYnlGaWxlLnNldChmaW5kaW5nLmZpbGVQYXRoLCBsaXN0KTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgbGlzdF0gb2YgYnlGaWxlKSB7XG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmxpc3RdLnNvcnQoKGEsIGIpID0+IGEubGluZSAtIGIubGluZSk7XG4gICAgY29uc3QgbG9jYXRpb25XaWR0aCA9IE1hdGgubWF4KC4uLnNvcnRlZC5tYXAoKGZpbmRpbmcpID0+IGAke1N0cmluZyhmaW5kaW5nLmxpbmUpfToke1N0cmluZyhmaW5kaW5nLmNvbHVtbil9YC5sZW5ndGgpKTtcbiAgICBsaW5lcy5wdXNoKHRvRGlzcGxheVBhdGgoZmlsZVBhdGgsIGJhc2VGb2xkZXIpKTtcbiAgICBmb3IgKGNvbnN0IGZpbmRpbmcgb2Ygc29ydGVkKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGAke1N0cmluZyhmaW5kaW5nLmxpbmUpfToke1N0cmluZyhmaW5kaW5nLmNvbHVtbil9YC5wYWRFbmQobG9jYXRpb25XaWR0aCk7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBgJHtmaW5kaW5nLmN1cnJlbnRFeHBvc3VyZX0gJHtmaW5kaW5nLm5hbWV9IC0+ICR7ZmluZGluZy5zdWdnZXN0ZWRFeHBvc3VyZX1gO1xuICAgICAgbGluZXMucHVzaChgICAke2xvY2F0aW9ufSAgJHtjaGFuZ2V9IC0tICR7ZGVzY3JpYmVSZWFzb24oZmluZGluZyl9JHtkZXNjcmliZUZpeFN0YXR1cyhmaW5kaW5nKX1gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTdW1tYXJ5KGZpbmRpbmdzOiByZWFkb25seSBPdmVyRXhwb3N1cmVGaW5kaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBzdW1tYXJ5ID0gYCR7U3RyaW5nKGZpbmRpbmdzLmxlbmd0aCl9IGZpbmRpbmcocykuYDtcbiAgY29uc3QgZml4ZWRDb3VudCA9IGZpbmRpbmdzLmZpbHRlcigoZmluZGluZykgPT4gZmluZGluZy53YXNGaXhlZCkubGVuZ3RoO1xuICBjb25zdCBza2lwcGVkQ291bnQgPSBmaW5kaW5ncy5maWx0ZXIoKGZpbmRpbmcpID0+IGZpbmRpbmcuc2tpcFJlYXNvbiAhPT0gbnVsbCkubGVuZ3RoO1xuICBpZiAoZml4ZWRDb3VudCA9PT0gMCAmJiBza2lwcGVkQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gc3VtbWFyeTtcbiAgfVxuICByZXR1cm4gYCR7c3VtbWFyeX0gJHtTdHJpbmcoZml4ZWRDb3VudCl9IGZpeGVkLCAke1N0cmluZyhza2lwcGVkQ291bnQpfSBza2lwcGVkLmA7XG59XG5cbmZ1bmN0aW9uIGdldENsYXNzQXRQb3NpdGlvbihwcm9ncmFtOiBQcm9ncmFtLCBmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogQ2xhc3NMaWtlRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKGZpbGVOYW1lKTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUoc291cmNlRmlsZSwgYFNvdXJjZSBmaWxlIG5vdCBmb3VuZCBpbiBwcm9ncmFtOiAke2ZpbGVOYW1lfWApO1xuICBjb25zdCBub2RlID0gZmluZE5vZGVBdFBvc2l0aW9uKHNvdXJjZUZpbGUsIHBvc2l0aW9uKTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUobm9kZSwgYE5vIG5vZGUgZm91bmQgYXQgcG9zaXRpb24gJHtTdHJpbmcocG9zaXRpb24pfSBpbiAke2ZpbGVOYW1lfWApO1xuICByZXR1cm4gZ2V0RW5jbG9zaW5nQ2xhc3Mobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRNZW1iZXJFeHBvc3VyZShtb2RpZmllcktpbmRzOiBSZWFkb25seVNldDxTeW50YXhLaW5kPik6IE1lbWJlckV4cG9zdXJlIHtcbiAgaWYgKG1vZGlmaWVyS2luZHMuaGFzKFN5bnRheEtpbmQuUHJpdmF0ZUtleXdvcmQpKSB7XG4gICAgcmV0dXJuICdwcml2YXRlJztcbiAgfVxuICBpZiAobW9kaWZpZXJLaW5kcy5oYXMoU3ludGF4S2luZC5Qcm90ZWN0ZWRLZXl3b3JkKSkge1xuICAgIHJldHVybiAncHJvdGVjdGVkJztcbiAgfVxuICByZXR1cm4gJ3B1YmxpYyc7XG59XG5cbmZ1bmN0aW9uIGdldEVuY2xvc2luZ0NsYXNzKG5vZGU6IE5vZGUpOiBDbGFzc0xpa2VEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBOb2RlID0gbm9kZTtcbiAgd2hpbGUgKCFpc1NvdXJjZUZpbGUoY3VycmVudCkpIHtcbiAgICBpZiAoaXNDbGFzc0xpa2UoY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RXhwb3J0ZWROYW1lTm9kZXMoZGVjbGFyYXRpb246IEV4cG9ydGFibGVEZWNsYXJhdGlvbik6IE5vZGVbXSB7XG4gIGlmIChpc1ZhcmlhYmxlU3RhdGVtZW50KGRlY2xhcmF0aW9uKSkge1xuICAgIHJldHVybiBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbkxpc3QuZGVjbGFyYXRpb25zLm1hcCgodmFyaWFibGVEZWNsYXJhdGlvbikgPT4gdmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKS5maWx0ZXIoaXNJZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gZGVjbGFyYXRpb24ubmFtZSA/IFtkZWNsYXJhdGlvbi5uYW1lXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmllcktpbmRzKG5vZGU6IE5vZGUpOiBSZWFkb25seVNldDxTeW50YXhLaW5kPiB7XG4gIGNvbnN0IGtpbmRzID0gbmV3IFNldDxTeW50YXhLaW5kPigpO1xuICBpZiAoY2FuSGF2ZU1vZGlmaWVycyhub2RlKSkge1xuICAgIGZvciAoY29uc3QgbW9kaWZpZXIgb2YgZ2V0TW9kaWZpZXJzKG5vZGUpID8/IFtdKSB7XG4gICAgICBraW5kcy5hZGQobW9kaWZpZXIua2luZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBraW5kcztcbn1cblxuZnVuY3Rpb24gaXNEZWNsYXJhdGlvbkl0c2VsZihyZWZlcmVuY2U6IFJlZmVyZW5jZUxvY2F0aW9uLCBuYW1lTm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9DYW5vbmljYWwocmVmZXJlbmNlLmZpbGVOYW1lKSA9PT0gdG9DYW5vbmljYWwobmFtZU5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lKSAmJiByZWZlcmVuY2Uuc3RhcnQgPT09IG5hbWVOb2RlLmdldFN0YXJ0KCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVyaXZlZEZyb20oZGVyaXZlZDogQ2xhc3NMaWtlRGVjbGFyYXRpb24sIGJhc2U6IENsYXNzTGlrZURlY2xhcmF0aW9uLCBjaGVja2VyOiBUeXBlQ2hlY2tlcik6IGJvb2xlYW4ge1xuICBjb25zdCBiYXNlU3ltYm9sID0gYmFzZS5uYW1lID8gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKGJhc2UubmFtZSkgOiB1bmRlZmluZWQ7XG4gIGlmICghYmFzZVN5bWJvbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xhdXNlIG9mIGRlcml2ZWQuaGVyaXRhZ2VDbGF1c2VzID8/IFtdKSB7XG4gICAgaWYgKGNsYXVzZS50b2tlbiAhPT0gU3ludGF4S2luZC5FeHRlbmRzS2V5d29yZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdHlwZUV4cHJlc3Npb24gb2YgY2xhdXNlLnR5cGVzKSB7XG4gICAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHR5cGVFeHByZXNzaW9uLmV4cHJlc3Npb24pLmdldFN5bWJvbCgpO1xuICAgICAgaWYgKHN5bWJvbCA9PT0gYmFzZVN5bWJvbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygc3ltYm9sPy5kZWNsYXJhdGlvbnMgPz8gW10pIHtcbiAgICAgICAgaWYgKGlzQ2xhc3NMaWtlKGRlY2xhcmF0aW9uKSAmJiBpc0Rlcml2ZWRGcm9tKGRlY2xhcmF0aW9uLCBiYXNlLCBjaGVja2VyKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNPd25Tb3VyY2VGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIHNyY0ZvbGRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWxlUGF0aC5zdGFydHNXaXRoKGAke3NyY0ZvbGRlcn0vYCkgJiYgZmlsZVBhdGguZW5kc1dpdGgoJy50cycpICYmICFmaWxlUGF0aC5lbmRzV2l0aCgnLmQudHMnKTtcbn1cblxuZnVuY3Rpb24gaXNUZXN0RmlsZShmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWxlUGF0aC5pbmNsdWRlcygnLnRlc3QuJykgfHwgZmlsZVBhdGguaW5jbHVkZXMoJy5pbnRlZ3JhdGlvbi4nKTtcbn1cblxuZnVuY3Rpb24gcmFua0V4cG9zdXJlKGV4cG9zdXJlOiBNZW1iZXJFeHBvc3VyZSk6IG51bWJlciB7XG4gIHJldHVybiBNRU1CRVJfRVhQT1NVUkVfT1JERVIuaW5kZXhPZihleHBvc3VyZSk7XG59XG5cbmZ1bmN0aW9uIHJlY29yZChjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsIGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmcsIGVkaXQ6IG51bGwgfCBPdmVyRXhwb3N1cmVUZXh0RWRpdCk6IHZvaWQge1xuICBjb250ZXh0LmZpbmRpbmdzLnB1c2goZmluZGluZyk7XG4gIGNvbnRleHQuZWRpdHMucHVzaChlZGl0KTtcbn1cblxuZnVuY3Rpb24gcnVuT3ZlckV4cG9zdXJlQW5hbHlzaXMocGFyYW1zOiBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCB7IGxhbmd1YWdlU2VydmljZSwgb25Qcm9ncmVzcywgc3JjRm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHByb2dyYW0gPSBsYW5ndWFnZVNlcnZpY2UuZ2V0UHJvZ3JhbSgpO1xuICBpZiAoIXByb2dyYW0pIHtcbiAgICByZXR1cm4geyBlZGl0czogW10sIGZpbmRpbmdzOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgY29udGV4dDogQW5hbHlzaXNDb250ZXh0ID0ge1xuICAgIGNoZWNrZXI6IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKSxcbiAgICBlZGl0czogW10sXG4gICAgZmluZGluZ3M6IFtdLFxuICAgIGxhbmd1YWdlU2VydmljZSxcbiAgICBwcm9ncmFtXG4gIH07XG5cbiAgY29uc3Qgc291cmNlRmlsZXNUb0FuYWx5emUgPSBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZmlsdGVyKChzb3VyY2VGaWxlKSA9PiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICByZXR1cm4gaXNPd25Tb3VyY2VGaWxlKGZpbGVQYXRoLCBzcmNGb2xkZXIpICYmICFpc1Rlc3RGaWxlKGZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBbYW5hbHl6ZWRGaWxlQ291bnQsIHNvdXJjZUZpbGVdIG9mIHNvdXJjZUZpbGVzVG9BbmFseXplLmVudHJpZXMoKSkge1xuICAgIG9uUHJvZ3Jlc3M/Lih7XG4gICAgICBhbmFseXplZEZpbGVDb3VudCxcbiAgICAgIGN1cnJlbnRGaWxlUGF0aDogdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSksXG4gICAgICB0b3RhbEZpbGVDb3VudDogc291cmNlRmlsZXNUb0FuYWx5emUubGVuZ3RoXG4gICAgfSk7XG4gICAgdmlzaXQoc291cmNlRmlsZSk7XG4gIH1cbiAgcmV0dXJuIHsgZWRpdHM6IGNvbnRleHQuZWRpdHMsIGZpbmRpbmdzOiBjb250ZXh0LmZpbmRpbmdzIH07XG5cbiAgZnVuY3Rpb24gdmlzaXQobm9kZTogTm9kZSk6IHZvaWQge1xuICAgIGFuYWx5emVNZW1iZXIobm9kZSwgY29udGV4dCk7XG4gICAgYW5hbHl6ZUV4cG9ydChub2RlLCBjb250ZXh0KTtcbiAgICBub2RlLmZvckVhY2hDaGlsZCh2aXNpdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9EaXNwbGF5UGF0aChmaWxlUGF0aDogc3RyaW5nLCBiYXNlRm9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoYmFzZUZvbGRlciAhPT0gdW5kZWZpbmVkICYmIGZpbGVQYXRoLnN0YXJ0c1dpdGgoYCR7YmFzZUZvbGRlcn0vYCkpIHtcbiAgICByZXR1cm4gZmlsZVBhdGguc2xpY2UoYmFzZUZvbGRlci5sZW5ndGggKyAxKTtcbiAgfVxuICByZXR1cm4gZmlsZVBhdGg7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdURBLHdCQXVCTztBQUVQLHlCQUFrQztBQUNsQyxpQ0FHTztBQThOQSxNQUFNLHNCQUEyQyxvQkFBSSxJQUFZO0FBQUEsRUFD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
|
|
650
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL292ZXItZXhwb3N1cmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPdmVyLWV4cG9zdXJlIGFuYWx5emVyLlxuICpcbiAqIEZpbmRzIGRlY2xhcmF0aW9ucyBleHBvc2VkIG1vcmUgYnJvYWRseSB0aGFuIHRoZWlyIHJlZmVyZW5jZXMgcmVxdWlyZSwgc28gdGhlIGV4cG9zdXJlIGNhbiBiZVxuICogdGlnaHRlbmVkOlxuICpcbiAqIC0gYGV4cG9ydGBlZCBzeW1ib2xzIHJlZmVyZW5jZWQgb25seSB3aXRoaW4gdGhlaXIgb3duIGZpbGUgXHUyMDE0IHRoZSBgZXhwb3J0YCBjYW4gYmUgZHJvcHBlZC5cbiAqIC0gYHB1YmxpY2AgY2xhc3MgbWVtYmVycyByZWZlcmVuY2VkIG9ubHkgaW5zaWRlIHRoZWlyIG93biBjbGFzcyBcdTIwMTQgdGhleSBjYW4gYmUgYHByaXZhdGVgLlxuICogLSBgcHVibGljYCBjbGFzcyBtZW1iZXJzIHJlZmVyZW5jZWQgb25seSBpbnNpZGUgdGhlaXIgb3duIGNsYXNzIGFuZCBpdHMgc3ViY2xhc3NlcyBcdTIwMTQgdGhleSBjYW4gYmVcbiAqICAgYHByb3RlY3RlZGAuXG4gKiAtIGBwcm90ZWN0ZWRgIGNsYXNzIG1lbWJlcnMgcmVmZXJlbmNlZCBvbmx5IGluc2lkZSB0aGVpciBvd24gY2xhc3MgXHUyMDE0IHRoZXkgY2FuIGJlIGBwcml2YXRlYC5cbiAqXG4gKiBUaGUgYW5hbHlzaXMgaXMgd2hvbGUtcHJvZ3JhbSBhbmQgdHlwZS1hd2FyZTogaXQgdXNlcyB0aGUgVHlwZVNjcmlwdCBsYW5ndWFnZSBzZXJ2aWNlJ3NcbiAqIGZpbmQtYWxsLXJlZmVyZW5jZXMgdG8gbG9jYXRlIGV2ZXJ5IHVzZSBvZiBlYWNoIGRlY2xhcmF0aW9uLCB0aGVuIGNsYXNzaWZpZXMgdGhlIHRpZ2h0ZXN0XG4gKiBleHBvc3VyZSB0aGF0IHN0aWxsIGNvdmVycyBhbGwgcmVmZXJlbmNlcy4gTWVtYmVycyBpbnZva2VkIGJ5IHRoZSBmcmFtZXdvcmsgdmlhIHJlZ2lzdHJhdGlvblxuICogcmF0aGVyIHRoYW4gYnkgdmlzaWJsZSByZWZlcmVuY2VzIChPYnNpZGlhbiBsaWZlY3ljbGUgaG9va3MsIHNldHRpbmdzLXRhYiBgZGlzcGxheWAsIGV0Yy4pIGFyZVxuICogZXhjbHVkZWQgdmlhIHtAbGluayBMSUZFQ1lDTEVfQUxMT1dMSVNUfSwgYXMgYXJlIGBvdmVycmlkZWAgYW5kIGBzdGF0aWNgIG1lbWJlcnMgd2hvc2UgZXhwb3N1cmUgaXNcbiAqIGNvbnN0cmFpbmVkIGJ5IGEgYmFzZSBkZWNsYXJhdGlvbi4gRUNNQVNjcmlwdCBoYXJkLXByaXZhdGUgbWVtYmVycyAoYCNuYW1lYCkgYXJlIGFsc28gZXhjbHVkZWQgXHUyMDE0XG4gKiB0aGV5IGFyZSBhbHJlYWR5IG1heGltYWxseSBwcml2YXRlIGFuZCBjYW5ub3QgY2FycnkgYSB2aXNpYmlsaXR5IG1vZGlmaWVyLiBBIGRlY2xhcmF0aW9uIGNhcnJ5aW5nXG4gKiBhIFRTRG9jIChgLyoqIFx1MjAyNiAqXFwvYCkgZG9jdW1lbnRhdGlvbiBjb21tZW50IGlzIGxpa2V3aXNlIGV4Y2x1ZGVkIFx1MjAxNCB3aGV0aGVyIGEgdG9wLWxldmVsIGBleHBvcnRgIG9yXG4gKiBhIGNsYXNzIG1lbWJlciwgZG9jdW1lbnRpbmcgaXQgaXMgYSBkZWxpYmVyYXRlIHNpZ25hbCB0aGF0IGl0IGlzIHBhcnQgb2YgdGhlIGludGVuZGVkIHB1YmxpYyBBUEksXG4gKiByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGN1cnJlbnRseSBoYXBwZW5zIHRvIGJlIHJlZmVyZW5jZWQuXG4gKlxuICogQSBtZW1iZXIgcmVmZXJlbmNlZCBvbmx5IGZyb20gdGVzdCBmaWxlcyBpcyByZXBvcnRlZCB3aXRoIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLmlzRm9yY2VkQnlUZXN0T25seX1cbiAqIHNldCwgc3VyZmFjaW5nIG1lbWJlcnMgd2lkZW5lZCBwdXJlbHkgZm9yIHRlc3RhYmlsaXR5IFx1MjAxNCB0aGUgY2Fub25pY2FsIGNhc2UgZm9yIGV4dHJhY3RpbmcgbG9naWNcbiAqIGludG8gYW4gaW5kZXBlbmRlbnRseSB0ZXN0YWJsZSBjb21wb25lbnQgaW5zdGVhZC5cbiAqXG4gKiBCZXlvbmQgcmVwb3J0aW5nLCBwYXNzaW5nIGBzaG91bGRGaXhgIHRvIHtAbGluayBmaW5kT3ZlckV4cG9zdXJlfSAvIHtAbGluayBhbmFseXplT3ZlckV4cG9zdXJlfVxuICogcmV3cml0ZXMgdGhlIHNvdXJjZSBpbiBwbGFjZTogZHJvcHBpbmcgdGhlIGBleHBvcnRgIGtleXdvcmQsIG9yIHJlcGxhY2luZy9pbnNlcnRpbmcgYSBgcHJpdmF0ZWBcbiAqIG9yIGBwcm90ZWN0ZWRgIG1vZGlmaWVyLiBFYWNoIGZpbmRpbmcgdGhlbiBjYXJyaWVzIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLndhc0ZpeGVkfSAvXG4gKiB7QGxpbmsgT3ZlckV4cG9zdXJlRmluZGluZy5za2lwUmVhc29ufS4gQ2hhbmdlcyB0aGF0IGNhbm5vdCBiZSBzYWZlbHkgYXV0b21hdGVkIFx1MjAxNCB0aG9zZSBmb3JjZWRcbiAqIG9ubHkgYnkgdGVzdCByZWZlcmVuY2VzLCBkZWNvcmF0ZWQgbWVtYmVycywgb3IgYW4gYGV4cG9ydGAgc2hhcmVkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nIFx1MjAxNFxuICogYXJlIHJlcG9ydGVkIGFzIHNraXBwZWQgYW5kIGxlZnQgdW50b3VjaGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2xhc3NEZWNsYXJhdGlvbixcbiAgQ2xhc3NMaWtlRGVjbGFyYXRpb24sXG4gIENvbXBpbGVyT3B0aW9ucyxcbiAgRW51bURlY2xhcmF0aW9uLFxuICBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBJbnRlcmZhY2VEZWNsYXJhdGlvbixcbiAgSVNjcmlwdFNuYXBzaG90LFxuICBMYW5ndWFnZVNlcnZpY2UsXG4gIExhbmd1YWdlU2VydmljZUhvc3QsXG4gIE1ldGhvZERlY2xhcmF0aW9uLFxuICBOb2RlLFxuICBQcm9ncmFtLFxuICBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICBSZWZlcmVuY2VkU3ltYm9sLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBUeXBlQWxpYXNEZWNsYXJhdGlvbixcbiAgVHlwZUNoZWNrZXIsXG4gIFZhcmlhYmxlU3RhdGVtZW50XG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1xuICBjYW5IYXZlTW9kaWZpZXJzLFxuICBjcmVhdGVEb2N1bWVudFJlZ2lzdHJ5LFxuICBjcmVhdGVMYW5ndWFnZVNlcnZpY2UsXG4gIGdldERlY29yYXRvcnMsXG4gIGdldERlZmF1bHRMaWJGaWxlUGF0aCxcbiAgZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMsXG4gIGdldE1vZGlmaWVycyxcbiAgaXNDbGFzc0RlY2xhcmF0aW9uLFxuICBpc0NsYXNzTGlrZSxcbiAgaXNFbnVtRGVjbGFyYXRpb24sXG4gIGlzRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc0lkZW50aWZpZXIsXG4gIGlzSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIGlzTWV0aG9kRGVjbGFyYXRpb24sXG4gIGlzUHJpdmF0ZUlkZW50aWZpZXIsXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1NvdXJjZUZpbGUsXG4gIGlzVHlwZUFsaWFzRGVjbGFyYXRpb24sXG4gIGlzVmFyaWFibGVTdGF0ZW1lbnQsXG4gIFNjcmlwdFNuYXBzaG90LFxuICBTeW50YXhLaW5kLFxuICBzeXNcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VUc0NvbmZpZyxcbiAgdG9DYW5vbmljYWxcbn0gZnJvbSAnLi4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMge1xuICAvKiogVGhlIGxhbmd1YWdlIHNlcnZpY2UgdG8gcXVlcnkgZm9yIHJlZmVyZW5jZXMgYW5kIHR5cGVzLiAqL1xuICByZWFkb25seSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbmNlIHBlciBhbmFseXplZCBzb3VyY2UgZmlsZSwgYmVmb3JlIHRoYXQgZmlsZSBpcyBwcm9jZXNzZWQuIFRoZVxuICAgKiB3aG9sZS1wcm9ncmFtIHJlZmVyZW5jZSBhbmFseXNpcyBpcyBzbG93LCBzbyB0aGlzIGxldHMgY2FsbGVycyByZXBvcnQgbGl2ZSBwcm9ncmVzcyBpbnN0ZWFkIG9mXG4gICAqIGFwcGVhcmluZyB0byBoYW5nLlxuICAgKi9cbiAgb25Qcm9ncmVzcz8odGhpczogdm9pZCwgcHJvZ3Jlc3M6IE92ZXJFeHBvc3VyZVByb2dyZXNzKTogdm9pZDtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGVhY2ggZml4YWJsZSBmaW5kaW5nIGlzIHRpZ2h0ZW5lZCBpbiBwbGFjZSB2aWEge0BsaW5rIHdyaXRlRmlsZX0gKHdoaWNoIG11c3QgdGhlblxuICAgKiBiZSBwcm92aWRlZCksIGFuZCB0aGUgcmV0dXJuZWQgZmluZGluZ3MgY2Fycnkge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcud2FzRml4ZWR9IC9cbiAgICoge0BsaW5rIE92ZXJFeHBvc3VyZUZpbmRpbmcuc2tpcFJlYXNvbn0uIFdoZW4gYGZhbHNlYCBvciBvbWl0dGVkLCB0aGUgYW5hbHlzaXMgb25seSByZXBvcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRml4PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQWJzb2x1dGUgKGNhbm9uaWNhbCkgcGF0aCBvZiB0aGUgcHJvamVjdCdzIGBzcmNgIGZvbGRlci4gT25seSBkZWNsYXJhdGlvbnMgaW4gbm9uLXRlc3QgZmlsZXNcbiAgICogdW5kZXIgdGhpcyBmb2xkZXIgYXJlIGFuYWx5emVkOyBkZWNsYXJhdGlvbnMgZWxzZXdoZXJlICh0ZXN0IGZpbGVzLCBkZXBlbmRlbmNpZXMpIGFyZSBpZ25vcmVkXG4gICAqIGJ1dCBzdGlsbCBjb3VudGVkIGFzIHJlZmVyZW5jZSBzaXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNyY0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXcml0ZXMgdGhlIHRpZ2h0ZW5lZCBjb250ZW50cyBvZiBhIGNoYW5nZWQgZmlsZSBiYWNrIHRvIGRpc2suIFJlcXVpcmVkIHdoZW4ge0BsaW5rIHNob3VsZEZpeH1cbiAgICogaXMgYHRydWVgOyBpZ25vcmVkIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIHdyaXRlIChvcmlnaW5hbCBjYXNpbmcsIGFzIHN0b3JlZCBpbiB0aGUgcHJvZ3JhbSkuXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGZ1bGwgbmV3IGZpbGUgY29udGVudHMuXG4gICAqL1xuICB3cml0ZUZpbGU/KHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdFBhcmFtcyB7XG4gIC8qKiBUaGUgY29tcGlsZXIgb3B0aW9ucy4gKi9cbiAgcmVhZG9ubHkgY29tcGlsZXJPcHRpb25zOiBDb21waWxlck9wdGlvbnM7XG5cbiAgLyoqIFRoZSBmaWxlcyB0byBpbmNsdWRlIGluIHRoZSBwcm9ncmFtLiAqL1xuICByZWFkb25seSBmaWxlTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBUaGUgZmlsZS1zeXN0ZW0gb3BlcmF0aW9ucyB1c2VkIHRvIHJlYWQgc291cmNlcy4gKi9cbiAgcmVhZG9ubHkgZmlsZVN5c3RlbTogT3ZlckV4cG9zdXJlRmlsZVN5c3RlbTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZVBhcmFtcyB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0J3MgYHRzY29uZmlnLmpzb25gLiAqL1xuICByZWFkb25seSB0c0NvbmZpZ1BhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgZXhwb3N1cmUgbGV2ZWwgYSBkZWNsYXJhdGlvbiBjdXJyZW50bHkgaGFzLlxuICovXG5leHBvcnQgdHlwZSBDdXJyZW50RXhwb3N1cmUgPSAnZXhwb3J0JyB8ICdwcm90ZWN0ZWQnIHwgJ3B1YmxpYyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRPdmVyRXhwb3N1cmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRPdmVyRXhwb3N1cmVQYXJhbXMge1xuICAvKipcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbmNlIHBlciBhbmFseXplZCBzb3VyY2UgZmlsZSwgZm9yIGxpdmUgcHJvZ3Jlc3MgcmVwb3J0aW5nLiBGb3J3YXJkZWRcbiAgICogdG8ge0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9LlxuICAgKi9cbiAgb25Qcm9ncmVzcz8odGhpczogdm9pZCwgcHJvZ3Jlc3M6IE92ZXJFeHBvc3VyZVByb2dyZXNzKTogdm9pZDtcblxuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290ICh0aGUgZm9sZGVyIGNvbnRhaW5pbmcgYHRzY29uZmlnLmpzb25gIGFuZCBgc3JjYCkuICovXG4gIHJlYWRvbmx5IHByb2plY3RGb2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGZpeGFibGUgZmluZGluZ3MgYXJlIHRpZ2h0ZW5lZCBpbiBwbGFjZSBvbiBkaXNrICh0aGUgYGV4cG9ydGAga2V5d29yZCBpcyBkcm9wcGVkLFxuICAgKiBvciBhIGBwcml2YXRlYCAvIGBwcm90ZWN0ZWRgIG1vZGlmaWVyIGlzIGluc2VydGVkL3JlcGxhY2VkKS4gV2hlbiBgZmFsc2VgIG9yIG9taXR0ZWQsIHRoZVxuICAgKiBwcm9qZWN0IGlzIG9ubHkgYW5hbHl6ZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBmb3JtYXRPdmVyRXhwb3N1cmVGaW5kaW5nc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0T3ZlckV4cG9zdXJlRmluZGluZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBmaWxlIHBhdGhzIGluIHRoZSByZXBvcnQgYXJlIHJlbmRlcmVkIHJlbGF0aXZlIHRvIHRoaXMgZm9sZGVyICh0eXBpY2FsbHkgdGhlIGN1cnJlbnRcbiAgICogd29ya2luZyBkaXJlY3RvcnkpIGluc3RlYWQgb2YgYXMgYWJzb2x1dGUgcGF0aHMuIFBhdGhzIG91dHNpZGUgdGhlIGZvbGRlciBzdGF5IGFic29sdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUZvbGRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGZpbGUtc3lzdGVtIG9wZXJhdGlvbnMgdGhlIGxhbmd1YWdlLXNlcnZpY2UgaG9zdCBuZWVkcy4gSW5qZWN0aW5nIHRoaXMgKHJhdGhlciB0aGFuXG4gKiBhbHdheXMgdXNpbmcgYHR5cGVzY3JpcHRgJ3MgYHN5c2ApIGxldHMgdGVzdHMgZHJpdmUgdGhlIGFuYWx5emVyIGFnYWluc3QgaW4tbWVtb3J5IHNvdXJjZXMgd2l0aCBub1xuICogcmVhbCBmaWxlLXN5c3RlbSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlckV4cG9zdXJlRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCAtIERpcmVjdG9yeSBwYXRoLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZGlyZWN0b3J5IGV4aXN0cy5cbiAgICovXG4gIGRpcmVjdG9yeUV4aXN0cyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGZpbGUgZXhpc3RzLlxuICAgKi9cbiAgZmlsZUV4aXN0cyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIGdldEN1cnJlbnREaXJlY3RvcnkodGhpczogdm9pZCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHJldHVybnMgVGhlIGltbWVkaWF0ZSBzdWJkaXJlY3RvcnkgbmFtZXMuXG4gICAqL1xuICBnZXREaXJlY3Rvcmllcyh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBSb290IGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIGV4dGVuc2lvbnMgLSBFeHRlbnNpb25zIHRvIGluY2x1ZGUuXG4gICAqIEBwYXJhbSBleGNsdWRlIC0gUGF0dGVybnMgdG8gZXhjbHVkZS5cbiAgICogQHBhcmFtIGluY2x1ZGUgLSBQYXR0ZXJucyB0byBpbmNsdWRlLlxuICAgKiBAcGFyYW0gZGVwdGggLSBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAgICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGZpbGUgcGF0aHMuXG4gICAqL1xuICByZWFkRGlyZWN0b3J5KHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZywgZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdLCBleGNsdWRlPzogcmVhZG9ubHkgc3RyaW5nW10sIGluY2x1ZGU/OiByZWFkb25seSBzdHJpbmdbXSwgZGVwdGg/OiBudW1iZXIpOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIFRoZSBmaWxlIGNvbnRlbnRzLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRGaWxlKHRoaXM6IHZvaWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlckV4cG9zdXJlRmluZGluZyB7XG4gIC8qKiAxLWJhc2VkIGNvbHVtbiBvZiB0aGUgZGVjbGFyYXRpb24ncyBuYW1lLiAqL1xuICByZWFkb25seSBjb2x1bW46IG51bWJlcjtcblxuICAvKiogVGhlIGN1cnJlbnQgZXhwb3N1cmUgbGV2ZWwuICovXG4gIHJlYWRvbmx5IGN1cnJlbnRFeHBvc3VyZTogQ3VycmVudEV4cG9zdXJlO1xuXG4gIC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlIGRlY2xhcmluZyB0aGUgc3ltYm9sLiAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gIC8qKiBgdHJ1ZWAgd2hlbiB0aGUgZGVjbGFyYXRpb24gaGFzIG5vIHJlZmVyZW5jZXMgYXQgYWxsIChiZXNpZGVzIGl0c2VsZikuICovXG4gIHJlYWRvbmx5IGhhc05vUmVmZXJlbmNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogYHRydWVgIHdoZW4gdGhlIGRlY2xhcmF0aW9uIHdvdWxkIHF1YWxpZnkgZm9yIGEgdGlnaHRlciBleHBvc3VyZSBpZiBub3QgZm9yIHJlZmVyZW5jZXMgY29taW5nXG4gICAqIGV4Y2x1c2l2ZWx5IGZyb20gdGVzdCBmaWxlcyBcdTIwMTQgaS5lLiBpdCBpcyBleHBvc2VkIHB1cmVseSBmb3IgdGVzdGFiaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBpc0ZvcmNlZEJ5VGVzdE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqIGB0cnVlYCBmb3IgYSBjbGFzcyBtZW1iZXIsIGBmYWxzZWAgZm9yIGEgdG9wLWxldmVsIGV4cG9ydC4gKi9cbiAgcmVhZG9ubHkgaXNNZW1iZXI6IGJvb2xlYW47XG5cbiAgLyoqIDEtYmFzZWQgbGluZSBvZiB0aGUgZGVjbGFyYXRpb24ncyBuYW1lLiAqL1xuICByZWFkb25seSBsaW5lOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBkZWNsYXJlZCBuYW1lLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluIGEgZml4IHJ1biwgd2h5IHRoaXMgZmluZGluZyB3YXMgbGVmdCB1bnRvdWNoZWQgaW5zdGVhZCBvZiB0aWdodGVuZWQ7IGBudWxsYCB3aGVuIGl0IHdhc1xuICAgKiBmaXhlZCBvciB3aGVuIHRoZSBhbmFseXNpcyBvbmx5IHJlcG9ydGVkIChgc2hvdWxkRml4YCBvZmYpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFJlYXNvbjogbnVsbCB8IE92ZXJFeHBvc3VyZVNraXBSZWFzb247XG5cbiAgLyoqIFRoZSBleHBvc3VyZSB0aGUgZGVjbGFyYXRpb24gY291bGQgYmUgdGlnaHRlbmVkIHRvLiAqL1xuICByZWFkb25seSBzdWdnZXN0ZWRFeHBvc3VyZTogU3VnZ2VzdGVkRXhwb3N1cmU7XG5cbiAgLyoqIGB0cnVlYCB3aGVuIGEgZml4IHJ1biB0aWdodGVuZWQgdGhpcyBkZWNsYXJhdGlvbiBpbiBwbGFjZS4gQWx3YXlzIGBmYWxzZWAgaW4gYSByZXBvcnQgcnVuLiAqL1xuICByZWFkb25seSB3YXNGaXhlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9ncmVzcyByZXBvcnRlZCB3aGlsZSBhbmFseXppbmcgYSBwcm9qZWN0LCBvbmUgZXZlbnQgcGVyIGFuYWx5emVkIHNvdXJjZSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJFeHBvc3VyZVByb2dyZXNzIHtcbiAgLyoqIE51bWJlciBvZiBzb3VyY2UgZmlsZXMgZnVsbHkgYW5hbHl6ZWQgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSAoMC1iYXNlZCkuICovXG4gIHJlYWRvbmx5IGFuYWx5emVkRmlsZUNvdW50OiBudW1iZXI7XG5cbiAgLyoqIEFic29sdXRlIChjYW5vbmljYWwpIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlIGFib3V0IHRvIGJlIGFuYWx5emVkLiAqL1xuICByZWFkb25seSBjdXJyZW50RmlsZVBhdGg6IHN0cmluZztcblxuICAvKiogVG90YWwgbnVtYmVyIG9mIHNvdXJjZSBmaWxlcyB0aGF0IHdpbGwgYmUgYW5hbHl6ZWQuICovXG4gIHJlYWRvbmx5IHRvdGFsRmlsZUNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2h5IGEgZml4IHJ1biBsZWZ0IGEgZmluZGluZyB1bnRvdWNoZWQ6XG4gKlxuICogLSBgZGVjb3JhdGVkYCBcdTIwMTQgdGhlIG1lbWJlciBjYXJyaWVzIGEgZGVjb3JhdG9yLCBzbyB0aGUgbW9kaWZpZXIgaW5zZXJ0aW9uIHBvaW50IGlzIGFtYmlndW91cy5cbiAqIC0gYHNoYXJlZC1leHBvcnRgIFx1MjAxNCB0aGUgYGV4cG9ydGAga2V5d29yZCBpcyBzaGFyZWQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkIHNpYmxpbmcgZGVjbGFyYXRvci5cbiAqIC0gYHRlc3Qtb25seWAgXHUyMDE0IHRoZSBkZWNsYXJhdGlvbiBpcyBleHBvc2VkIHB1cmVseSBmb3IgdGVzdHMsIHNvIHRpZ2h0ZW5pbmcgd291bGQgYnJlYWsgdGhlIHRlc3QuXG4gKi9cbmV4cG9ydCB0eXBlIE92ZXJFeHBvc3VyZVNraXBSZWFzb24gPSAnZGVjb3JhdGVkJyB8ICdzaGFyZWQtZXhwb3J0JyB8ICd0ZXN0LW9ubHknO1xuXG4vKipcbiAqIFRoZSAodGlnaHRlcikgZXhwb3N1cmUgbGV2ZWwgYSBkZWNsYXJhdGlvbiBjb3VsZCBiZSByZWR1Y2VkIHRvLlxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRFeHBvc3VyZSA9ICdmaWxlLWxvY2FsJyB8ICdwcml2YXRlJyB8ICdwcm90ZWN0ZWQnO1xuXG4vKipcbiAqIExpZmVjeWNsZSBhbmQgZnJhbWV3b3JrIG1lbWJlcnMgaW52b2tlZCBieSBPYnNpZGlhbiBvciBhIGJhc2UgY2xhc3MgdmlhIHJlZ2lzdHJhdGlvbiByYXRoZXIgdGhhblxuICogYnkgcmVmZXJlbmNlcyB0aGUgbGFuZ3VhZ2Ugc2VydmljZSBjYW4gc2VlLiBUaWdodGVuaW5nIHRoZXNlIHdvdWxkIGJyZWFrIHRoZSBmcmFtZXdvcmsgY29udHJhY3QsXG4gKiBzbyB0aGV5IGFyZSBuZXZlciByZXBvcnRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IExJRkVDWUNMRV9BTExPV0xJU1Q6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnZGlzcGxheScsXG4gICdoaWRlJyxcbiAgJ29uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScsXG4gICdvbkxheW91dFJlYWR5JyxcbiAgJ29ubG9hZCcsXG4gICdvbmxvYWRJbXBsJyxcbiAgJ29uTG9hZFNldHRpbmdzJyxcbiAgJ29uU2F2ZVNldHRpbmdzJyxcbiAgJ29udW5sb2FkJyxcbiAgJ29udW5sb2FkSW1wbCdcbl0pO1xuXG5pbnRlcmZhY2UgQW5hbHlzaXNDb250ZXh0IHtcbiAgcmVhZG9ubHkgY2hlY2tlcjogVHlwZUNoZWNrZXI7XG4gIHJlYWRvbmx5IGVkaXRzOiAobnVsbCB8IE92ZXJFeHBvc3VyZVRleHRFZGl0KVtdO1xuICByZWFkb25seSBmaW5kaW5nczogT3ZlckV4cG9zdXJlRmluZGluZ1tdO1xuICByZWFkb25seSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZTtcbiAgcmVhZG9ubHkgcHJvZ3JhbTogUHJvZ3JhbTtcbn1cblxuaW50ZXJmYWNlIEFuYWx5c2lzUmVzdWx0IHtcbiAgcmVhZG9ubHkgZWRpdHM6IHJlYWRvbmx5IChudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQpW107XG4gIHJlYWRvbmx5IGZpbmRpbmdzOiByZWFkb25seSBPdmVyRXhwb3N1cmVGaW5kaW5nW107XG59XG5cbnR5cGUgQ2xhc3NNZW1iZXJEZWNsYXJhdGlvbiA9IEdldEFjY2Vzc29yRGVjbGFyYXRpb24gfCBNZXRob2REZWNsYXJhdGlvbiB8IFByb3BlcnR5RGVjbGFyYXRpb24gfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uO1xuXG50eXBlIEV4cG9ydGFibGVEZWNsYXJhdGlvbiA9IENsYXNzRGVjbGFyYXRpb24gfCBFbnVtRGVjbGFyYXRpb24gfCBGdW5jdGlvbkRlY2xhcmF0aW9uIHwgSW50ZXJmYWNlRGVjbGFyYXRpb24gfCBUeXBlQWxpYXNEZWNsYXJhdGlvbiB8IFZhcmlhYmxlU3RhdGVtZW50O1xuXG5pbnRlcmZhY2UgRXhwb3J0RmluZGluZ0NhbmRpZGF0ZSB7XG4gIHJlYWRvbmx5IGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmc7XG4gIHJlYWRvbmx5IGlzUGxhaW5GaWxlTG9jYWw6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaW5kaW5nRmxhZ3Mge1xuICByZWFkb25seSBoYXNOb1JlZmVyZW5jZXM6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzRm9yY2VkQnlUZXN0T25seTogYm9vbGVhbjtcbn1cblxudHlwZSBNZW1iZXJFeHBvc3VyZSA9ICdwcml2YXRlJyB8ICdwcm90ZWN0ZWQnIHwgJ3B1YmxpYyc7XG5cbi8qKlxuICogQSBzaW5nbGUgaW4tcGxhY2UgdGV4dCByZXBsYWNlbWVudCB0aGF0IHRpZ2h0ZW5zIGEgZGVjbGFyYXRpb24ncyBleHBvc3VyZS4gQSB6ZXJvLWxlbmd0aCBlZGl0IGlzXG4gKiBhbiBpbnNlcnRpb24gKGUuZy4gYWRkaW5nIGFuIGV4cGxpY2l0IGBwcml2YXRlYCBtb2RpZmllciB0byBhbiBpbXBsaWNpdGx5LWBwdWJsaWNgIG1lbWJlcikuXG4gKi9cbmludGVyZmFjZSBPdmVyRXhwb3N1cmVUZXh0RWRpdCB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxlbmd0aDogbnVtYmVyO1xuICByZWFkb25seSBuZXdUZXh0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSZWZlcmVuY2VMb2NhdGlvbiB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTb3VyY2VGaWxlVGV4dCB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLy8gQSBKU0RvYy9UU0RvYyBjb21tZW50IG9wZW5zIHdpdGggYC8qKmA6IHRoZSBjaGFyYWN0ZXIgYXQgb2Zmc2V0IDIgaXMgdGhlIHNlY29uZCBgKmAsIGFuZCB0byBleGNsdWRlIHRoZSBlbXB0eSBgLyoqL2AgY29tbWVudCB0aGUgY2hhcmFjdGVyIGF0IG9mZnNldCAzIG11c3Qgbm90IGJlIHRoZSBjbG9zaW5nIGAvYC5cbmNvbnN0IEpTRE9DX1NFQ09ORF9BU1RFUklTS19PRkZTRVQgPSAyO1xuY29uc3QgSlNET0NfRk9VUlRIX0NIQVJBQ1RFUl9PRkZTRVQgPSAzO1xuY29uc3QgTUVNQkVSX0VYUE9TVVJFX09SREVSOiByZWFkb25seSBNZW1iZXJFeHBvc3VyZVtdID0gWydwcml2YXRlJywgJ3Byb3RlY3RlZCcsICdwdWJsaWMnXTtcbmNvbnN0IFNDT1BFX0RFU0NSSVBUSU9OOiBSZWNvcmQ8U3VnZ2VzdGVkRXhwb3N1cmUsIHN0cmluZz4gPSB7XG4gICdmaWxlLWxvY2FsJzogJ3dpdGhpbiBpdHMgb3duIGZpbGUnLFxuICAncHJpdmF0ZSc6ICdpbnNpZGUgaXRzIG93biBjbGFzcycsXG4gICdwcm90ZWN0ZWQnOiAnaW5zaWRlIGl0cyBjbGFzcyArIHN1YmNsYXNzZXMnXG59O1xuY29uc3QgU0tJUF9SRUFTT05fREVTQ1JJUFRJT046IFJlY29yZDxPdmVyRXhwb3N1cmVTa2lwUmVhc29uLCBzdHJpbmc+ID0ge1xuICAnZGVjb3JhdGVkJzogJ2RlY29yYXRlZCBtZW1iZXInLFxuICAnc2hhcmVkLWV4cG9ydCc6ICdleHBvcnQgc2hhcmVkIHdpdGggYSBzdGlsbC1leHBvcnRlZCBzaWJsaW5nJyxcbiAgJ3Rlc3Qtb25seSc6ICdleHBvc2VkIG9ubHkgZm9yIHRlc3RzJ1xufTtcbmNvbnN0IFZJU0lCSUxJVFlfTU9ESUZJRVJfS0lORFM6IFJlYWRvbmx5U2V0PFN5bnRheEtpbmQ+ID0gbmV3IFNldDxTeW50YXhLaW5kPihbU3ludGF4S2luZC5Qcml2YXRlS2V5d29yZCwgU3ludGF4S2luZC5Qcm90ZWN0ZWRLZXl3b3JkLCBTeW50YXhLaW5kLlB1YmxpY0tleXdvcmRdKTtcbmNvbnN0IFdISVRFU1BBQ0VfUEFUVEVSTiA9IC9cXHMvO1xuXG4vKipcbiAqIEFuYWx5emVzIGEgcHJvamVjdCAoYWxyZWFkeSBsb2FkZWQgaW50byBhIGxhbmd1YWdlIHNlcnZpY2UpIGZvciBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zLCBhbmQgXHUyMDE0XG4gKiB3aGVuIHtAbGluayBBbmFseXplT3ZlckV4cG9zdXJlUGFyYW1zLnNob3VsZEZpeH0gaXMgc2V0IFx1MjAxNCB0aWdodGVucyBldmVyeSBmaXhhYmxlIGZpbmRpbmcgaW4gcGxhY2VcbiAqIHZpYSB7QGxpbmsgQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcy53cml0ZUZpbGV9LiBGaW5kaW5ncyB0aGF0IGNhbm5vdCBiZSBzYWZlbHkgYXV0b21hdGVkIChleHBvc2VkXG4gKiBvbmx5IGZvciB0ZXN0cywgZGVjb3JhdGVkLCBvciBzaGFyaW5nIGFuIGBleHBvcnRgIGtleXdvcmQgd2l0aCBhIHN0aWxsLWV4cG9ydGVkIHNpYmxpbmcpIGNhcnJ5IGFcbiAqIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLnNraXBSZWFzb259IGFuZCBhcmUgbGVmdCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgb3Zlci1leHBvc2VkIGRlY2xhcmF0aW9ucywgaW4gZGlzY292ZXJ5IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZU92ZXJFeHBvc3VyZShwYXJhbXM6IEFuYWx5emVPdmVyRXhwb3N1cmVQYXJhbXMpOiBPdmVyRXhwb3N1cmVGaW5kaW5nW10ge1xuICBjb25zdCByZXN1bHQgPSBydW5PdmVyRXhwb3N1cmVBbmFseXNpcyhwYXJhbXMpO1xuICBpZiAoIXBhcmFtcy5zaG91bGRGaXgpIHtcbiAgICByZXR1cm4gWy4uLnJlc3VsdC5maW5kaW5nc107XG4gIH1cblxuICBjb25zdCB7IHdyaXRlRmlsZSB9ID0gcGFyYW1zO1xuICBhc3NlcnROb25OdWxsYWJsZSh3cml0ZUZpbGUsICd3cml0ZUZpbGUgaXMgcmVxdWlyZWQgd2hlbiBzaG91bGRGaXggaXMgdHJ1ZS4nKTtcbiAgcmV0dXJuIGFwcGx5T3ZlckV4cG9zdXJlRml4ZXMocmVzdWx0LCBwYXJhbXMubGFuZ3VhZ2VTZXJ2aWNlLmdldFByb2dyYW0oKSwgd3JpdGVGaWxlKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB7QGxpbmsgTGFuZ3VhZ2VTZXJ2aWNlSG9zdH0gYmFja2VkIGJ5IGFuIGV4cGxpY2l0IGZpbGUgbGlzdCBhbmQgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdFBhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgbGFuZ3VhZ2Utc2VydmljZSBob3N0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlSG9zdChwYXJhbXM6IENyZWF0ZUxhbmd1YWdlU2VydmljZUhvc3RQYXJhbXMpOiBMYW5ndWFnZVNlcnZpY2VIb3N0IHtcbiAgY29uc3QgeyBjb21waWxlck9wdGlvbnMsIGZpbGVOYW1lcywgZmlsZVN5c3RlbSB9ID0gcGFyYW1zO1xuICByZXR1cm4ge1xuICAgIGRpcmVjdG9yeUV4aXN0czogKGRpcmVjdG9yeSkgPT4gZmlsZVN5c3RlbS5kaXJlY3RvcnlFeGlzdHMoZGlyZWN0b3J5KSxcbiAgICBmaWxlRXhpc3RzOiAoZmlsZSkgPT4gZmlsZVN5c3RlbS5maWxlRXhpc3RzKGZpbGUpLFxuICAgIGdldENvbXBpbGF0aW9uU2V0dGluZ3M6ICgpID0+IGNvbXBpbGVyT3B0aW9ucyxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiBmaWxlU3lzdGVtLmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgICBnZXREZWZhdWx0TGliRmlsZU5hbWU6IChsaWJPcHRpb25zKSA9PiBnZXREZWZhdWx0TGliRmlsZVBhdGgobGliT3B0aW9ucyksXG4gICAgZ2V0RGlyZWN0b3JpZXM6IChkaXJlY3RvcnkpID0+IGZpbGVTeXN0ZW0uZ2V0RGlyZWN0b3JpZXMoZGlyZWN0b3J5KSxcbiAgICBnZXRTY3JpcHRGaWxlTmFtZXM6ICgpID0+IFsuLi5maWxlTmFtZXNdLFxuICAgIGdldFNjcmlwdFNuYXBzaG90OiAoZmlsZU5hbWUpOiBJU2NyaXB0U25hcHNob3QgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGZpbGVTeXN0ZW0ucmVhZEZpbGUoZmlsZU5hbWUpO1xuICAgICAgcmV0dXJuIHRleHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFNjcmlwdFNuYXBzaG90LmZyb21TdHJpbmcodGV4dCk7XG4gICAgfSxcbiAgICBnZXRTY3JpcHRWZXJzaW9uOiAoKSA9PiAnMCcsXG4gICAgcmVhZERpcmVjdG9yeTogKHBhdGgsIGV4dGVuc2lvbnMsIGV4Y2x1ZGUsIGluY2x1ZGUsIGRlcHRoKSA9PiBmaWxlU3lzdGVtLnJlYWREaXJlY3RvcnkocGF0aCwgZXh0ZW5zaW9ucywgZXhjbHVkZSwgaW5jbHVkZSwgZGVwdGgpLFxuICAgIHJlYWRGaWxlOiAoZmlsZSkgPT4gZmlsZVN5c3RlbS5yZWFkRmlsZShmaWxlKVxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGxhbmd1YWdlIHNlcnZpY2Ugb3ZlciBldmVyeSBmaWxlIGluIGEgcHJvamVjdCdzIGB0c2NvbmZpZy5qc29uYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEgbGFuZ3VhZ2Ugc2VydmljZSByZWFkeSBmb3Ige0BsaW5rIGFuYWx5emVPdmVyRXhwb3N1cmV9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdExhbmd1YWdlU2VydmljZShwYXJhbXM6IENyZWF0ZVByb2plY3RMYW5ndWFnZVNlcnZpY2VQYXJhbXMpOiBMYW5ndWFnZVNlcnZpY2Uge1xuICBjb25zdCB7IGZpbGVOYW1lcywgb3B0aW9ucyB9ID0gcGFyc2VUc0NvbmZpZyhwYXJhbXMudHNDb25maWdQYXRoKTtcbiAgcmV0dXJuIGNyZWF0ZUxhbmd1YWdlU2VydmljZShjcmVhdGVMYW5ndWFnZVNlcnZpY2VIb3N0KHsgY29tcGlsZXJPcHRpb25zOiBvcHRpb25zLCBmaWxlTmFtZXMsIGZpbGVTeXN0ZW06IHN5cyB9KSwgY3JlYXRlRG9jdW1lbnRSZWdpc3RyeSgpKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zIGluIGEgcHJvamVjdCBvbiBkaXNrLiBXaGVuXG4gKiB7QGxpbmsgRmluZE92ZXJFeHBvc3VyZVBhcmFtcy5zaG91bGRGaXh9IGlzIHNldCwgZWFjaCBmaXhhYmxlIGZpbmRpbmcgaXMgYWxzbyB0aWdodGVuZWQgaW4gcGxhY2VcbiAqIChyZXdyaXRpbmcgdGhlIGFmZmVjdGVkIHNvdXJjZSBmaWxlcyB2aWEgYHR5cGVzY3JpcHRgJ3MgYHN5cy53cml0ZUZpbGVgKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBGaW5kT3ZlckV4cG9zdXJlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE92ZXJFeHBvc3VyZShwYXJhbXM6IEZpbmRPdmVyRXhwb3N1cmVQYXJhbXMpOiBPdmVyRXhwb3N1cmVGaW5kaW5nW10ge1xuICBjb25zdCBwcm9qZWN0Rm9sZGVyID0gdG9DYW5vbmljYWwocGFyYW1zLnByb2plY3RGb2xkZXIpO1xuICBjb25zdCBsYW5ndWFnZVNlcnZpY2UgPSBjcmVhdGVQcm9qZWN0TGFuZ3VhZ2VTZXJ2aWNlKHsgdHNDb25maWdQYXRoOiBgJHtwcm9qZWN0Rm9sZGVyfS90c2NvbmZpZy5qc29uYCB9KTtcbiAgcmV0dXJuIGFuYWx5emVPdmVyRXhwb3N1cmUoe1xuICAgIGxhbmd1YWdlU2VydmljZSxcbiAgICBzaG91bGRGaXg6IHBhcmFtcy5zaG91bGRGaXgsXG4gICAgc3JjRm9sZGVyOiBgJHtwcm9qZWN0Rm9sZGVyfS9zcmNgLFxuICAgIHdyaXRlRmlsZTogKHBhdGgsIGNvbnRlbnQpID0+IHtcbiAgICAgIHN5cy53cml0ZUZpbGUocGF0aCwgY29udGVudCk7XG4gICAgfSxcbiAgICAuLi5wYXJhbXMub25Qcm9ncmVzcyA/IHsgb25Qcm9ncmVzczogcGFyYW1zLm9uUHJvZ3Jlc3MgfSA6IHt9XG4gIH0pO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgb3Zlci1leHBvc3VyZSBmaW5kaW5ncyBhcyBhIGh1bWFuLXJlYWRhYmxlIHJlcG9ydCwgdXNpbmcgdGhlIGdyb3VwZWQgbGF5b3V0IG9mIEVTTGludCdzXG4gKiBgc3R5bGlzaGAgZm9ybWF0dGVyLiBGaW5kaW5ncyBhcmUgZ3JvdXBlZCBieSBmaWxlIGFuZCBzb3J0ZWQgYnkgbGluZTogZWFjaCBmaWxlIGlzIHJlbmRlcmVkIGFzIGFcbiAqIGBwYXRoYCBoZWFkZXIgbGluZSwgZm9sbG93ZWQgYnkgb25lIGluZGVudGVkIGAgIGxpbmU6Y29sdW1uICBjaGFuZ2UgLS0gcmVhc29uYCByb3cgcGVyIGZpbmRpbmcgKHRoZVxuICogYGxpbmU6Y29sdW1uYCBpcyByaWdodC1wYWRkZWQgc28gdGhlIHJvd3MgYWxpZ24gd2l0aGluIGEgZmlsZSkuIFRlcm1pbmFscyBzdWNoIGFzIFZTIENvZGUgcmVuZGVyXG4gKiBlYWNoIGluZGVudGVkIGBsaW5lOmNvbHVtbmAgYXMgYSBjbGlja2FibGUgbGluayBcdTIwMTQgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgZmlsZSBoZWFkZXIgYWJvdmUgaXQgXHUyMDE0IHRoYXRcbiAqIGp1bXBzIHN0cmFpZ2h0IHRvIHRoZSBkZWNsYXJhdGlvbi4gRmlsZSBncm91cHMgYXJlIHNlcGFyYXRlZCBieSBhIGJsYW5rIGxpbmUuIEluIGEgZml4IHJ1biAoZmluZGluZ3NcbiAqIGNhcnJ5aW5nIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLndhc0ZpeGVkfSAvIHtAbGluayBPdmVyRXhwb3N1cmVGaW5kaW5nLnNraXBSZWFzb259KSBlYWNoIGNoYW5nZVxuICogcm93IGlzIHN1ZmZpeGVkIHdpdGggYFtmaXhlZF1gIG9yIGBbc2tpcHBlZDogXHUyMDI2XWAsIGFuZCB0aGUgdHJhaWxpbmcgc3VtbWFyeSBhcHBlbmRzIHRoZSBmaXhlZC9za2lwcGVkXG4gKiBjb3VudHMuXG4gKlxuICogQHBhcmFtIGZpbmRpbmdzIC0gVGhlIGZpbmRpbmdzIHRvIGZvcm1hdC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBGb3JtYXRPdmVyRXhwb3N1cmVGaW5kaW5nc09wdGlvbnN9LlxuICogQHJldHVybnMgVGhlIHJlcG9ydCB0ZXh0LiBFbXB0eS1maW5kaW5nIGlucHV0IHlpZWxkcyBhIHNpbmdsZSBcIm5vIGZpbmRpbmdzXCIgbGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE92ZXJFeHBvc3VyZUZpbmRpbmdzKGZpbmRpbmdzOiByZWFkb25seSBPdmVyRXhwb3N1cmVGaW5kaW5nW10sIG9wdGlvbnM/OiBGb3JtYXRPdmVyRXhwb3N1cmVGaW5kaW5nc09wdGlvbnMpOiBzdHJpbmcge1xuICBpZiAoZmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdObyBvdmVyLWV4cG9zZWQgZGVjbGFyYXRpb25zIGZvdW5kLlxcbic7XG4gIH1cblxuICBjb25zdCBiYXNlRm9sZGVyID0gb3B0aW9ucz8uYmFzZUZvbGRlciA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9DYW5vbmljYWwob3B0aW9ucy5iYXNlRm9sZGVyKTtcbiAgY29uc3QgbGluZXMgPSBmb3JtYXRGaW5kaW5nQmxvY2tzKGZpbmRpbmdzLCBiYXNlRm9sZGVyKTtcbiAgbGluZXMucHVzaChmb3JtYXRTdW1tYXJ5KGZpbmRpbmdzKSk7XG4gIHJldHVybiBgJHtsaW5lcy5qb2luKCdcXG4nKX1cXG5gO1xufVxuXG5mdW5jdGlvbiBhbmFseXplRXhwb3J0KG5vZGU6IE5vZGUsIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCk6IHZvaWQge1xuICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gIGlmIChub2RlLnBhcmVudCAhPT0gc291cmNlRmlsZSB8fCAhZ2V0TW9kaWZpZXJLaW5kcyhub2RlKS5oYXMoU3ludGF4S2luZC5FeHBvcnRLZXl3b3JkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gYXNFeHBvcnRhYmxlRGVjbGFyYXRpb24obm9kZSk7XG4gIGlmICghZGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGFzVHNEb2NDb21tZW50KGRlY2xhcmF0aW9uKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRlY2xGaWxlUGF0aCA9IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICBjb25zdCBuYW1lTm9kZXMgPSBnZXRFeHBvcnRlZE5hbWVOb2RlcyhkZWNsYXJhdGlvbik7XG4gIGNvbnN0IGNhbmRpZGF0ZXM6IEV4cG9ydEZpbmRpbmdDYW5kaWRhdGVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbWVOb2RlIG9mIG5hbWVOb2Rlcykge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBjb2xsZWN0UmVmZXJlbmNlcyhjb250ZXh0Lmxhbmd1YWdlU2VydmljZS5maW5kUmVmZXJlbmNlcyhzb3VyY2VGaWxlLmZpbGVOYW1lLCBuYW1lTm9kZS5nZXRTdGFydCgpKSlcbiAgICAgIC5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gIWlzRGVjbGFyYXRpb25JdHNlbGYocmVmZXJlbmNlLCBuYW1lTm9kZSkpO1xuICAgIGNvbnN0IG90aGVyRmlsZVJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiB0b0Nhbm9uaWNhbChyZWZlcmVuY2UuZmlsZU5hbWUpICE9PSBkZWNsRmlsZVBhdGgpO1xuXG4gICAgaWYgKG90aGVyRmlsZVJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICBmaW5kaW5nOiBidWlsZEZpbmRpbmcoZGVjbGFyYXRpb24sIG5hbWVOb2RlLCAnZXhwb3J0JywgJ2ZpbGUtbG9jYWwnLCB7IGhhc05vUmVmZXJlbmNlczogcmVmZXJlbmNlcy5sZW5ndGggPT09IDAsIGlzRm9yY2VkQnlUZXN0T25seTogZmFsc2UgfSksXG4gICAgICAgIGlzUGxhaW5GaWxlTG9jYWw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9uVGVzdFJlZmVyZW5jZXMgPSBvdGhlckZpbGVSZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhaXNUZXN0RmlsZSh0b0Nhbm9uaWNhbChyZWZlcmVuY2UuZmlsZU5hbWUpKSk7XG4gICAgaWYgKG5vblRlc3RSZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgZmluZGluZzogYnVpbGRGaW5kaW5nKGRlY2xhcmF0aW9uLCBuYW1lTm9kZSwgJ2V4cG9ydCcsICdmaWxlLWxvY2FsJywgeyBoYXNOb1JlZmVyZW5jZXM6IGZhbHNlLCBpc0ZvcmNlZEJ5VGVzdE9ubHk6IHRydWUgfSksXG4gICAgICAgIGlzUGxhaW5GaWxlTG9jYWw6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjYW5Ecm9wRXhwb3J0ID0gY2FuZGlkYXRlcy5sZW5ndGggPT09IG5hbWVOb2Rlcy5sZW5ndGggJiYgY2FuZGlkYXRlcy5ldmVyeSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaXNQbGFpbkZpbGVMb2NhbCk7XG4gIGNvbnN0IGV4cG9ydEVkaXQgPSBjYW5Ecm9wRXhwb3J0ID8gY29tcHV0ZUV4cG9ydFJlbW92YWxFZGl0KGRlY2xhcmF0aW9uKSA6IG51bGw7XG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICByZWNvcmQoY29udGV4dCwgY2FuZGlkYXRlLmZpbmRpbmcsIGV4cG9ydEVkaXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFuYWx5emVNZW1iZXIobm9kZTogTm9kZSwgY29udGV4dDogQW5hbHlzaXNDb250ZXh0KTogdm9pZCB7XG4gIGNvbnN0IG1lbWJlciA9IGFzQ2xhc3NNZW1iZXIobm9kZSk7XG4gIGlmICghbWVtYmVyIHx8ICFpc0NsYXNzTGlrZShub2RlLnBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZU5vZGUgPSBtZW1iZXIubmFtZTtcbiAgY29uc3QgZGVjbGFyaW5nQ2xhc3MgPSBub2RlLnBhcmVudDtcblxuICBpZiAoaXNQcml2YXRlSWRlbnRpZmllcihuYW1lTm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RpZmllcktpbmRzID0gZ2V0TW9kaWZpZXJLaW5kcyhtZW1iZXIpO1xuICBpZiAobW9kaWZpZXJLaW5kcy5oYXMoU3ludGF4S2luZC5TdGF0aWNLZXl3b3JkKSB8fCBtb2RpZmllcktpbmRzLmhhcyhTeW50YXhLaW5kLk92ZXJyaWRlS2V5d29yZCkgfHwgTElGRUNZQ0xFX0FMTE9XTElTVC5oYXMobmFtZU5vZGUuZ2V0VGV4dCgpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoYXNUc0RvY0NvbW1lbnQobWVtYmVyKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRFeHBvc3VyZSA9IGdldEN1cnJlbnRNZW1iZXJFeHBvc3VyZShtb2RpZmllcktpbmRzKTtcbiAgaWYgKGN1cnJlbnRFeHBvc3VyZSA9PT0gJ3ByaXZhdGUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IG1lbWJlci5nZXRTb3VyY2VGaWxlKCk7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjb2xsZWN0UmVmZXJlbmNlcyhjb250ZXh0Lmxhbmd1YWdlU2VydmljZS5maW5kUmVmZXJlbmNlcyhzb3VyY2VGaWxlLmZpbGVOYW1lLCBuYW1lTm9kZS5nZXRTdGFydCgpKSlcbiAgICAuZmlsdGVyKChyZWZlcmVuY2UpID0+ICFpc0RlY2xhcmF0aW9uSXRzZWxmKHJlZmVyZW5jZSwgbmFtZU5vZGUpKTtcbiAgY29uc3Qgbm9uVGVzdFJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiAhaXNUZXN0RmlsZSh0b0Nhbm9uaWNhbChyZWZlcmVuY2UuZmlsZU5hbWUpKSk7XG5cbiAgY29uc3QgbmVlZGVkRm9yU3JjID0gY29tcHV0ZU5lZWRlZEV4cG9zdXJlKG5vblRlc3RSZWZlcmVuY2VzLCBkZWNsYXJpbmdDbGFzcywgY29udGV4dCk7XG4gIGNvbnN0IG5lZWRlZFdpdGhUZXN0cyA9IGNvbXB1dGVOZWVkZWRFeHBvc3VyZShyZWZlcmVuY2VzLCBkZWNsYXJpbmdDbGFzcywgY29udGV4dCk7XG5cbiAgaWYgKG5lZWRlZEZvclNyYyA9PT0gJ3B1YmxpYycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmFua0V4cG9zdXJlKG5lZWRlZEZvclNyYykgPj0gcmFua0V4cG9zdXJlKGN1cnJlbnRFeHBvc3VyZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmaW5kaW5nID0gYnVpbGRGaW5kaW5nKG1lbWJlciwgbmFtZU5vZGUsIGN1cnJlbnRFeHBvc3VyZSwgbmVlZGVkRm9yU3JjLCB7XG4gICAgaGFzTm9SZWZlcmVuY2VzOiByZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCxcbiAgICBpc0ZvcmNlZEJ5VGVzdE9ubHk6IHJhbmtFeHBvc3VyZShuZWVkZWRXaXRoVGVzdHMpID4gcmFua0V4cG9zdXJlKG5lZWRlZEZvclNyYylcbiAgfSk7XG4gIHJlY29yZChjb250ZXh0LCBmaW5kaW5nLCBjb21wdXRlTWVtYmVyRXhwb3N1cmVFZGl0KG1lbWJlciwgbmVlZGVkRm9yU3JjKSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RWRpdHModGV4dDogc3RyaW5nLCBlZGl0czogcmVhZG9ubHkgT3ZlckV4cG9zdXJlVGV4dEVkaXRbXSk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdW5pcXVlRWRpdHMgPSBlZGl0c1xuICAgIC5maWx0ZXIoKGVkaXQpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke1N0cmluZyhlZGl0LnN0YXJ0KX06JHtTdHJpbmcoZWRpdC5sZW5ndGgpfToke2VkaXQubmV3VGV4dH1gO1xuICAgICAgaWYgKHNlZW4uaGFzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc3RhcnQgLSBhLnN0YXJ0KTtcblxuICBsZXQgcmVzdWx0ID0gdGV4dDtcbiAgZm9yIChjb25zdCBlZGl0IG9mIHVuaXF1ZUVkaXRzKSB7XG4gICAgcmVzdWx0ID0gYCR7cmVzdWx0LnNsaWNlKDAsIGVkaXQuc3RhcnQpfSR7ZWRpdC5uZXdUZXh0fSR7cmVzdWx0LnNsaWNlKGVkaXQuc3RhcnQgKyBlZGl0Lmxlbmd0aCl9YDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhcHBseU92ZXJFeHBvc3VyZUZpeGVzKFxuICByZXN1bHQ6IEFuYWx5c2lzUmVzdWx0LFxuICBwcm9ncmFtOiBQcm9ncmFtIHwgdW5kZWZpbmVkLFxuICB3cml0ZUZpbGU6ICh0aGlzOiB2b2lkLCBwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuKTogT3ZlckV4cG9zdXJlRmluZGluZ1tdIHtcbiAgY29uc3QgZWRpdHNCeUZpbGUgPSBuZXcgTWFwPHN0cmluZywgT3ZlckV4cG9zdXJlVGV4dEVkaXRbXT4oKTtcbiAgY29uc3QgZmluZGluZ3MgPSByZXN1bHQuZmluZGluZ3MubWFwKChmaW5kaW5nLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVkaXQgPSByZXN1bHQuZWRpdHNbaW5kZXhdID8/IG51bGw7XG4gICAgY29uc3Qgc2tpcFJlYXNvbiA9IGRldGVybWluZVNraXBSZWFzb24oZmluZGluZywgZWRpdCk7XG4gICAgaWYgKHNraXBSZWFzb24gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IC4uLmZpbmRpbmcsIHNraXBSZWFzb24sIHdhc0ZpeGVkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBhc3NlcnROb25OdWxsYWJsZShlZGl0LCAnQSBmaXhhYmxlIGZpbmRpbmcgbXVzdCBjYXJyeSBhIHRleHQgZWRpdC4nKTtcbiAgICBjb25zdCBmaWxlRWRpdHMgPSBlZGl0c0J5RmlsZS5nZXQoZWRpdC5maWxlTmFtZSkgPz8gW107XG4gICAgZmlsZUVkaXRzLnB1c2goZWRpdCk7XG4gICAgZWRpdHNCeUZpbGUuc2V0KGVkaXQuZmlsZU5hbWUsIGZpbGVFZGl0cyk7XG4gICAgcmV0dXJuIHsgLi4uZmluZGluZywgc2tpcFJlYXNvbjogbnVsbCwgd2FzRml4ZWQ6IHRydWUgfTtcbiAgfSk7XG5cbiAgaWYgKGVkaXRzQnlGaWxlLnNpemUgPiAwKSB7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocHJvZ3JhbSwgJ0EgcHJvZ3JhbSBpcyBleHBlY3RlZCB3aGVuIHRoZXJlIGFyZSBlZGl0cyB0byBhcHBseS4nKTtcbiAgICBjb25zdCBzb3VyY2VUZXh0QnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVUZXh0PigpO1xuICAgIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgIHNvdXJjZVRleHRCeUZpbGUuc2V0KHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpLCB7IGZpbGVOYW1lOiBzb3VyY2VGaWxlLmZpbGVOYW1lLCB0ZXh0OiBzb3VyY2VGaWxlLnRleHQgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2Nhbm9uaWNhbEZpbGVOYW1lLCBmaWxlRWRpdHNdIG9mIGVkaXRzQnlGaWxlKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VUZXh0QnlGaWxlLmdldChjYW5vbmljYWxGaWxlTmFtZSk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShzb3VyY2UsIGBTb3VyY2UgZmlsZSBub3QgZm91bmQgaW4gcHJvZ3JhbTogJHtjYW5vbmljYWxGaWxlTmFtZX1gKTtcbiAgICAgIHdyaXRlRmlsZShzb3VyY2UuZmlsZU5hbWUsIGFwcGx5RWRpdHMoc291cmNlLnRleHQsIGZpbGVFZGl0cykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5kaW5ncztcbn1cblxuZnVuY3Rpb24gYXNDbGFzc01lbWJlcihub2RlOiBOb2RlKTogQ2xhc3NNZW1iZXJEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKSB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSkgfHwgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNFeHBvcnRhYmxlRGVjbGFyYXRpb24obm9kZTogTm9kZSk6IEV4cG9ydGFibGVEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChcbiAgICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0NsYXNzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNUeXBlQWxpYXNEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzRW51bURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZVN0YXRlbWVudChub2RlKVxuICApIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZEZpbmRpbmcoXG4gIG5vZGU6IE5vZGUsXG4gIG5hbWVOb2RlOiBOb2RlLFxuICBjdXJyZW50RXhwb3N1cmU6IEN1cnJlbnRFeHBvc3VyZSxcbiAgc3VnZ2VzdGVkRXhwb3N1cmU6IFN1Z2dlc3RlZEV4cG9zdXJlLFxuICBmbGFnczogRmluZGluZ0ZsYWdzXG4pOiBPdmVyRXhwb3N1cmVGaW5kaW5nIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICBjb25zdCB7IGNoYXJhY3RlciwgbGluZSB9ID0gc291cmNlRmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihuYW1lTm9kZS5nZXRTdGFydCgpKTtcbiAgcmV0dXJuIHtcbiAgICBjb2x1bW46IGNoYXJhY3RlciArIDEsXG4gICAgY3VycmVudEV4cG9zdXJlLFxuICAgIGZpbGVQYXRoOiB0b0Nhbm9uaWNhbChzb3VyY2VGaWxlLmZpbGVOYW1lKSxcbiAgICBoYXNOb1JlZmVyZW5jZXM6IGZsYWdzLmhhc05vUmVmZXJlbmNlcyxcbiAgICBpc0ZvcmNlZEJ5VGVzdE9ubHk6IGZsYWdzLmlzRm9yY2VkQnlUZXN0T25seSxcbiAgICBpc01lbWJlcjogY3VycmVudEV4cG9zdXJlICE9PSAnZXhwb3J0JyxcbiAgICBsaW5lOiBsaW5lICsgMSxcbiAgICBuYW1lOiBuYW1lTm9kZS5nZXRUZXh0KCksXG4gICAgc2tpcFJlYXNvbjogbnVsbCxcbiAgICBzdWdnZXN0ZWRFeHBvc3VyZSxcbiAgICB3YXNGaXhlZDogZmFsc2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZXMocmVmZXJlbmNlZFN5bWJvbHM6IFJlZmVyZW5jZWRTeW1ib2xbXSB8IHVuZGVmaW5lZCk6IFJlZmVyZW5jZUxvY2F0aW9uW10ge1xuICBjb25zdCByZWZlcmVuY2VzOiBSZWZlcmVuY2VMb2NhdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlZFN5bWJvbCBvZiByZWZlcmVuY2VkU3ltYm9scyA/PyBbXSkge1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZWRTeW1ib2wucmVmZXJlbmNlcykge1xuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgZmlsZU5hbWU6IHJlZmVyZW5jZS5maWxlTmFtZSwgc3RhcnQ6IHJlZmVyZW5jZS50ZXh0U3Bhbi5zdGFydCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBvcnRSZW1vdmFsRWRpdChkZWNsYXJhdGlvbjogRXhwb3J0YWJsZURlY2xhcmF0aW9uKTogT3ZlckV4cG9zdXJlVGV4dEVkaXQge1xuICBjb25zdCBzb3VyY2VGaWxlID0gZGVjbGFyYXRpb24uZ2V0U291cmNlRmlsZSgpO1xuICBjb25zdCBtb2RpZmllcnMgPSBnZXRNb2RpZmllcnMoZGVjbGFyYXRpb24pO1xuICBhc3NlcnROb25OdWxsYWJsZShtb2RpZmllcnMsICdNb2RpZmllcnMgZXhwZWN0ZWQgb24gYW4gZXhwb3J0ZWQgZGVjbGFyYXRpb24uJyk7XG4gIGNvbnN0IGV4cG9ydE1vZGlmaWVyID0gbW9kaWZpZXJzLmZpbmQoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5raW5kID09PSBTeW50YXhLaW5kLkV4cG9ydEtleXdvcmQpO1xuICBhc3NlcnROb25OdWxsYWJsZShleHBvcnRNb2RpZmllciwgJ0V4cG9ydCBtb2RpZmllciBleHBlY3RlZCBvbiBhbiBleHBvcnRlZCBkZWNsYXJhdGlvbi4nKTtcbiAgY29uc3QgeyB0ZXh0IH0gPSBzb3VyY2VGaWxlO1xuICBsZXQgZW5kID0gZXhwb3J0TW9kaWZpZXIuZ2V0RW5kKCk7XG4gIHdoaWxlIChlbmQgPCB0ZXh0Lmxlbmd0aCAmJiBXSElURVNQQUNFX1BBVFRFUk4udGVzdCh0ZXh0LmNoYXJBdChlbmQpKSkge1xuICAgIGVuZCsrO1xuICB9XG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWU6IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpLFxuICAgIGxlbmd0aDogZW5kIC0gZXhwb3J0TW9kaWZpZXIuZ2V0U3RhcnQoKSxcbiAgICBuZXdUZXh0OiAnJyxcbiAgICBzdGFydDogZXhwb3J0TW9kaWZpZXIuZ2V0U3RhcnQoKVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlTWVtYmVyRXhwb3N1cmVFZGl0KG1lbWJlcjogQ2xhc3NNZW1iZXJEZWNsYXJhdGlvbiwgc3VnZ2VzdGVkRXhwb3N1cmU6ICdwcml2YXRlJyB8ICdwcm90ZWN0ZWQnKTogbnVsbCB8IE92ZXJFeHBvc3VyZVRleHRFZGl0IHtcbiAgaWYgKChnZXREZWNvcmF0b3JzKG1lbWJlcikgPz8gW10pLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBtZW1iZXIuZ2V0U291cmNlRmlsZSgpO1xuICBjb25zdCBmaWxlTmFtZSA9IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICBjb25zdCBtb2RpZmllcnMgPSBnZXRNb2RpZmllcnMobWVtYmVyKSA/PyBbXTtcbiAgY29uc3QgdmlzaWJpbGl0eU1vZGlmaWVyID0gbW9kaWZpZXJzLmZpbmQoKG1vZGlmaWVyKSA9PiBWSVNJQklMSVRZX01PRElGSUVSX0tJTkRTLmhhcyhtb2RpZmllci5raW5kKSk7XG4gIGlmICh2aXNpYmlsaXR5TW9kaWZpZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZU5hbWUsXG4gICAgICBsZW5ndGg6IHZpc2liaWxpdHlNb2RpZmllci5nZXRFbmQoKSAtIHZpc2liaWxpdHlNb2RpZmllci5nZXRTdGFydCgpLFxuICAgICAgbmV3VGV4dDogc3VnZ2VzdGVkRXhwb3N1cmUsXG4gICAgICBzdGFydDogdmlzaWJpbGl0eU1vZGlmaWVyLmdldFN0YXJ0KClcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZmlyc3RNb2RpZmllciA9IG1vZGlmaWVyc1swXTtcbiAgY29uc3QgaW5zZXJ0U3RhcnQgPSBmaXJzdE1vZGlmaWVyID8gZmlyc3RNb2RpZmllci5nZXRTdGFydCgpIDogbWVtYmVyLmdldFN0YXJ0KCk7XG4gIHJldHVybiB7XG4gICAgZmlsZU5hbWUsXG4gICAgbGVuZ3RoOiAwLFxuICAgIG5ld1RleHQ6IGAke3N1Z2dlc3RlZEV4cG9zdXJlfSBgLFxuICAgIHN0YXJ0OiBpbnNlcnRTdGFydFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlTmVlZGVkRXhwb3N1cmUoXG4gIHJlZmVyZW5jZXM6IHJlYWRvbmx5IFJlZmVyZW5jZUxvY2F0aW9uW10sXG4gIGRlY2xhcmluZ0NsYXNzOiBDbGFzc0xpa2VEZWNsYXJhdGlvbixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0XG4pOiBNZW1iZXJFeHBvc3VyZSB7XG4gIGlmIChyZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAncHJpdmF0ZSc7XG4gIH1cblxuICBsZXQgbmVlZGVkOiBNZW1iZXJFeHBvc3VyZSA9ICdwcml2YXRlJztcbiAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgcmVmZXJlbmNlcykge1xuICAgIGNvbnN0IHJlZmVyZW5jZUNsYXNzID0gZ2V0Q2xhc3NBdFBvc2l0aW9uKGNvbnRleHQucHJvZ3JhbSwgcmVmZXJlbmNlLmZpbGVOYW1lLCByZWZlcmVuY2Uuc3RhcnQpO1xuICAgIGlmIChyZWZlcmVuY2VDbGFzcyA9PT0gZGVjbGFyaW5nQ2xhc3MpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVmZXJlbmNlQ2xhc3MgJiYgaXNEZXJpdmVkRnJvbShyZWZlcmVuY2VDbGFzcywgZGVjbGFyaW5nQ2xhc3MsIGNvbnRleHQuY2hlY2tlcikpIHtcbiAgICAgIG5lZWRlZCA9ICdwcm90ZWN0ZWQnO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiAncHVibGljJztcbiAgfVxuICByZXR1cm4gbmVlZGVkO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUZpeFN0YXR1cyhmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nKTogc3RyaW5nIHtcbiAgaWYgKGZpbmRpbmcud2FzRml4ZWQpIHtcbiAgICByZXR1cm4gJyBbZml4ZWRdJztcbiAgfVxuICBpZiAoZmluZGluZy5za2lwUmVhc29uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGAgW3NraXBwZWQ6ICR7U0tJUF9SRUFTT05fREVTQ1JJUFRJT05bZmluZGluZy5za2lwUmVhc29uXX1dYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUmVhc29uKGZpbmRpbmc6IE92ZXJFeHBvc3VyZUZpbmRpbmcpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gYHJlZmVyZW5jZWQgb25seSAke1NDT1BFX0RFU0NSSVBUSU9OW2ZpbmRpbmcuc3VnZ2VzdGVkRXhwb3N1cmVdfWA7XG4gIGlmIChmaW5kaW5nLmlzRm9yY2VkQnlUZXN0T25seSkge1xuICAgIHJldHVybiBgJHtiYXNlfSAoZXhwb3NlZCBvbmx5IGZvciB0ZXN0cylgO1xuICB9XG4gIGlmIChmaW5kaW5nLmhhc05vUmVmZXJlbmNlcykge1xuICAgIHJldHVybiBgJHtiYXNlfSAobm8gcmVmZXJlbmNlcyBhdCBhbGwpYDtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lU2tpcFJlYXNvbihmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nLCBlZGl0OiBudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQpOiBudWxsIHwgT3ZlckV4cG9zdXJlU2tpcFJlYXNvbiB7XG4gIGlmIChmaW5kaW5nLmlzRm9yY2VkQnlUZXN0T25seSkge1xuICAgIHJldHVybiAndGVzdC1vbmx5JztcbiAgfVxuICBpZiAoIWVkaXQpIHtcbiAgICByZXR1cm4gZmluZGluZy5pc01lbWJlciA/ICdkZWNvcmF0ZWQnIDogJ3NoYXJlZC1leHBvcnQnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5kTm9kZUF0UG9zaXRpb24obm9kZTogTm9kZSwgcG9zaXRpb246IG51bWJlcik6IE5vZGUgfCB1bmRlZmluZWQge1xuICBpZiAocG9zaXRpb24gPCBub2RlLmdldFN0YXJ0KCkgfHwgcG9zaXRpb24gPj0gbm9kZS5nZXRFbmQoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHJlc3VsdDogTm9kZSA9IG5vZGU7XG4gIG5vZGUuZm9yRWFjaENoaWxkKChjaGlsZCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kID0gZmluZE5vZGVBdFBvc2l0aW9uKGNoaWxkLCBwb3NpdGlvbik7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXN1bHQgPSBmb3VuZDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaW5kaW5nQmxvY2tzKGZpbmRpbmdzOiByZWFkb25seSBPdmVyRXhwb3N1cmVGaW5kaW5nW10sIGJhc2VGb2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgYnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIE92ZXJFeHBvc3VyZUZpbmRpbmdbXT4oKTtcbiAgZm9yIChjb25zdCBmaW5kaW5nIG9mIGZpbmRpbmdzKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5RmlsZS5nZXQoZmluZGluZy5maWxlUGF0aCkgPz8gW107XG4gICAgbGlzdC5wdXNoKGZpbmRpbmcpO1xuICAgIGJ5RmlsZS5zZXQoZmluZGluZy5maWxlUGF0aCwgbGlzdCk7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGxpc3RdIG9mIGJ5RmlsZSkge1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5saXN0XS5zb3J0KChhLCBiKSA9PiBhLmxpbmUgLSBiLmxpbmUpO1xuICAgIGNvbnN0IGxvY2F0aW9uV2lkdGggPSBNYXRoLm1heCguLi5zb3J0ZWQubWFwKChmaW5kaW5nKSA9PiBgJHtTdHJpbmcoZmluZGluZy5saW5lKX06JHtTdHJpbmcoZmluZGluZy5jb2x1bW4pfWAubGVuZ3RoKSk7XG4gICAgbGluZXMucHVzaCh0b0Rpc3BsYXlQYXRoKGZpbGVQYXRoLCBiYXNlRm9sZGVyKSk7XG4gICAgZm9yIChjb25zdCBmaW5kaW5nIG9mIHNvcnRlZCkge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBgJHtTdHJpbmcoZmluZGluZy5saW5lKX06JHtTdHJpbmcoZmluZGluZy5jb2x1bW4pfWAucGFkRW5kKGxvY2F0aW9uV2lkdGgpO1xuICAgICAgY29uc3QgY2hhbmdlID0gYCR7ZmluZGluZy5jdXJyZW50RXhwb3N1cmV9ICR7ZmluZGluZy5uYW1lfSAtPiAke2ZpbmRpbmcuc3VnZ2VzdGVkRXhwb3N1cmV9YDtcbiAgICAgIGxpbmVzLnB1c2goYCAgJHtsb2NhdGlvbn0gICR7Y2hhbmdlfSAtLSAke2Rlc2NyaWJlUmVhc29uKGZpbmRpbmcpfSR7ZGVzY3JpYmVGaXhTdGF0dXMoZmluZGluZyl9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gZm9ybWF0U3VtbWFyeShmaW5kaW5nczogcmVhZG9ubHkgT3ZlckV4cG9zdXJlRmluZGluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3VtbWFyeSA9IGAke1N0cmluZyhmaW5kaW5ncy5sZW5ndGgpfSBmaW5kaW5nKHMpLmA7XG4gIGNvbnN0IGZpeGVkQ291bnQgPSBmaW5kaW5ncy5maWx0ZXIoKGZpbmRpbmcpID0+IGZpbmRpbmcud2FzRml4ZWQpLmxlbmd0aDtcbiAgY29uc3Qgc2tpcHBlZENvdW50ID0gZmluZGluZ3MuZmlsdGVyKChmaW5kaW5nKSA9PiBmaW5kaW5nLnNraXBSZWFzb24gIT09IG51bGwpLmxlbmd0aDtcbiAgaWYgKGZpeGVkQ291bnQgPT09IDAgJiYgc2tpcHBlZENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIHN1bW1hcnk7XG4gIH1cbiAgcmV0dXJuIGAke3N1bW1hcnl9ICR7U3RyaW5nKGZpeGVkQ291bnQpfSBmaXhlZCwgJHtTdHJpbmcoc2tpcHBlZENvdW50KX0gc2tpcHBlZC5gO1xufVxuXG5mdW5jdGlvbiBnZXRDbGFzc0F0UG9zaXRpb24ocHJvZ3JhbTogUHJvZ3JhbSwgZmlsZU5hbWU6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IENsYXNzTGlrZURlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShmaWxlTmFtZSk7XG4gIGFzc2VydE5vbk51bGxhYmxlKHNvdXJjZUZpbGUsIGBTb3VyY2UgZmlsZSBub3QgZm91bmQgaW4gcHJvZ3JhbTogJHtmaWxlTmFtZX1gKTtcbiAgY29uc3Qgbm9kZSA9IGZpbmROb2RlQXRQb3NpdGlvbihzb3VyY2VGaWxlLCBwb3NpdGlvbik7XG4gIGFzc2VydE5vbk51bGxhYmxlKG5vZGUsIGBObyBub2RlIGZvdW5kIGF0IHBvc2l0aW9uICR7U3RyaW5nKHBvc2l0aW9uKX0gaW4gJHtmaWxlTmFtZX1gKTtcbiAgcmV0dXJuIGdldEVuY2xvc2luZ0NsYXNzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50TWVtYmVyRXhwb3N1cmUobW9kaWZpZXJLaW5kczogUmVhZG9ubHlTZXQ8U3ludGF4S2luZD4pOiBNZW1iZXJFeHBvc3VyZSB7XG4gIGlmIChtb2RpZmllcktpbmRzLmhhcyhTeW50YXhLaW5kLlByaXZhdGVLZXl3b3JkKSkge1xuICAgIHJldHVybiAncHJpdmF0ZSc7XG4gIH1cbiAgaWYgKG1vZGlmaWVyS2luZHMuaGFzKFN5bnRheEtpbmQuUHJvdGVjdGVkS2V5d29yZCkpIHtcbiAgICByZXR1cm4gJ3Byb3RlY3RlZCc7XG4gIH1cbiAgcmV0dXJuICdwdWJsaWMnO1xufVxuXG5mdW5jdGlvbiBnZXRFbmNsb3NpbmdDbGFzcyhub2RlOiBOb2RlKTogQ2xhc3NMaWtlRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICBsZXQgY3VycmVudDogTm9kZSA9IG5vZGU7XG4gIHdoaWxlICghaXNTb3VyY2VGaWxlKGN1cnJlbnQpKSB7XG4gICAgaWYgKGlzQ2xhc3NMaWtlKGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEV4cG9ydGVkTmFtZU5vZGVzKGRlY2xhcmF0aW9uOiBFeHBvcnRhYmxlRGVjbGFyYXRpb24pOiBOb2RlW10ge1xuICBpZiAoaXNWYXJpYWJsZVN0YXRlbWVudChkZWNsYXJhdGlvbikpIHtcbiAgICByZXR1cm4gZGVjbGFyYXRpb24uZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9ucy5tYXAoKHZhcmlhYmxlRGVjbGFyYXRpb24pID0+IHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSkuZmlsdGVyKGlzSWRlbnRpZmllcik7XG4gIH1cbiAgcmV0dXJuIGRlY2xhcmF0aW9uLm5hbWUgPyBbZGVjbGFyYXRpb24ubmFtZV0gOiBbXTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kaWZpZXJLaW5kcyhub2RlOiBOb2RlKTogUmVhZG9ubHlTZXQ8U3ludGF4S2luZD4ge1xuICBjb25zdCBraW5kcyA9IG5ldyBTZXQ8U3ludGF4S2luZD4oKTtcbiAgaWYgKGNhbkhhdmVNb2RpZmllcnMobm9kZSkpIHtcbiAgICBmb3IgKGNvbnN0IG1vZGlmaWVyIG9mIGdldE1vZGlmaWVycyhub2RlKSA/PyBbXSkge1xuICAgICAga2luZHMuYWRkKG1vZGlmaWVyLmtpbmQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2luZHM7XG59XG5cbmZ1bmN0aW9uIGhhc1RzRG9jQ29tbWVudChub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgY29uc3QgZnVsbFRleHQgPSBzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCk7XG4gIGNvbnN0IGNvbW1lbnRSYW5nZXMgPSBnZXRMZWFkaW5nQ29tbWVudFJhbmdlcyhmdWxsVGV4dCwgbm9kZS5nZXRGdWxsU3RhcnQoKSkgPz8gW107XG4gIHJldHVybiBjb21tZW50UmFuZ2VzLnNvbWUoKHJhbmdlKSA9PlxuICAgIHJhbmdlLmtpbmQgPT09IFN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYVxuICAgICYmIGZ1bGxUZXh0LmNoYXJBdChyYW5nZS5wb3MgKyBKU0RPQ19TRUNPTkRfQVNURVJJU0tfT0ZGU0VUKSA9PT0gJyonXG4gICAgJiYgZnVsbFRleHQuY2hhckF0KHJhbmdlLnBvcyArIEpTRE9DX0ZPVVJUSF9DSEFSQUNURVJfT0ZGU0VUKSAhPT0gJy8nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRGVjbGFyYXRpb25JdHNlbGYocmVmZXJlbmNlOiBSZWZlcmVuY2VMb2NhdGlvbiwgbmFtZU5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRvQ2Fub25pY2FsKHJlZmVyZW5jZS5maWxlTmFtZSkgPT09IHRvQ2Fub25pY2FsKG5hbWVOb2RlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZSkgJiYgcmVmZXJlbmNlLnN0YXJ0ID09PSBuYW1lTm9kZS5nZXRTdGFydCgpO1xufVxuXG5mdW5jdGlvbiBpc0Rlcml2ZWRGcm9tKGRlcml2ZWQ6IENsYXNzTGlrZURlY2xhcmF0aW9uLCBiYXNlOiBDbGFzc0xpa2VEZWNsYXJhdGlvbiwgY2hlY2tlcjogVHlwZUNoZWNrZXIpOiBib29sZWFuIHtcbiAgY29uc3QgYmFzZVN5bWJvbCA9IGJhc2UubmFtZSA/IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihiYXNlLm5hbWUpIDogdW5kZWZpbmVkO1xuICBpZiAoIWJhc2VTeW1ib2wpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBkZXJpdmVkLmhlcml0YWdlQ2xhdXNlcyA/PyBbXSkge1xuICAgIGlmIChjbGF1c2UudG9rZW4gIT09IFN5bnRheEtpbmQuRXh0ZW5kc0tleXdvcmQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHR5cGVFeHByZXNzaW9uIG9mIGNsYXVzZS50eXBlcykge1xuICAgICAgY29uc3Qgc3ltYm9sID0gY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbih0eXBlRXhwcmVzc2lvbi5leHByZXNzaW9uKS5nZXRTeW1ib2woKTtcbiAgICAgIGlmIChzeW1ib2wgPT09IGJhc2VTeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHN5bWJvbD8uZGVjbGFyYXRpb25zID8/IFtdKSB7XG4gICAgICAgIGlmIChpc0NsYXNzTGlrZShkZWNsYXJhdGlvbikgJiYgaXNEZXJpdmVkRnJvbShkZWNsYXJhdGlvbiwgYmFzZSwgY2hlY2tlcikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzT3duU291cmNlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBzcmNGb2xkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZVBhdGguc3RhcnRzV2l0aChgJHtzcmNGb2xkZXJ9L2ApICYmIGZpbGVQYXRoLmVuZHNXaXRoKCcudHMnKSAmJiAhZmlsZVBhdGguZW5kc1dpdGgoJy5kLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzVGVzdEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZVBhdGguaW5jbHVkZXMoJy50ZXN0LicpIHx8IGZpbGVQYXRoLmluY2x1ZGVzKCcuaW50ZWdyYXRpb24uJyk7XG59XG5cbmZ1bmN0aW9uIHJhbmtFeHBvc3VyZShleHBvc3VyZTogTWVtYmVyRXhwb3N1cmUpOiBudW1iZXIge1xuICByZXR1cm4gTUVNQkVSX0VYUE9TVVJFX09SREVSLmluZGV4T2YoZXhwb3N1cmUpO1xufVxuXG5mdW5jdGlvbiByZWNvcmQoY29udGV4dDogQW5hbHlzaXNDb250ZXh0LCBmaW5kaW5nOiBPdmVyRXhwb3N1cmVGaW5kaW5nLCBlZGl0OiBudWxsIHwgT3ZlckV4cG9zdXJlVGV4dEVkaXQpOiB2b2lkIHtcbiAgY29udGV4dC5maW5kaW5ncy5wdXNoKGZpbmRpbmcpO1xuICBjb250ZXh0LmVkaXRzLnB1c2goZWRpdCk7XG59XG5cbmZ1bmN0aW9uIHJ1bk92ZXJFeHBvc3VyZUFuYWx5c2lzKHBhcmFtczogQW5hbHl6ZU92ZXJFeHBvc3VyZVBhcmFtcyk6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3QgeyBsYW5ndWFnZVNlcnZpY2UsIG9uUHJvZ3Jlc3MsIHNyY0ZvbGRlciB9ID0gcGFyYW1zO1xuICBjb25zdCBwcm9ncmFtID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFByb2dyYW0oKTtcbiAgaWYgKCFwcm9ncmFtKSB7XG4gICAgcmV0dXJuIHsgZWRpdHM6IFtdLCBmaW5kaW5nczogW10gfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCA9IHtcbiAgICBjaGVja2VyOiBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCksXG4gICAgZWRpdHM6IFtdLFxuICAgIGZpbmRpbmdzOiBbXSxcbiAgICBsYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJvZ3JhbVxuICB9O1xuXG4gIGNvbnN0IHNvdXJjZUZpbGVzVG9BbmFseXplID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLmZpbHRlcigoc291cmNlRmlsZSkgPT4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdG9DYW5vbmljYWwoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgcmV0dXJuIGlzT3duU291cmNlRmlsZShmaWxlUGF0aCwgc3JjRm9sZGVyKSAmJiAhaXNUZXN0RmlsZShmaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgW2FuYWx5emVkRmlsZUNvdW50LCBzb3VyY2VGaWxlXSBvZiBzb3VyY2VGaWxlc1RvQW5hbHl6ZS5lbnRyaWVzKCkpIHtcbiAgICBvblByb2dyZXNzPy4oe1xuICAgICAgYW5hbHl6ZWRGaWxlQ291bnQsXG4gICAgICBjdXJyZW50RmlsZVBhdGg6IHRvQ2Fub25pY2FsKHNvdXJjZUZpbGUuZmlsZU5hbWUpLFxuICAgICAgdG90YWxGaWxlQ291bnQ6IHNvdXJjZUZpbGVzVG9BbmFseXplLmxlbmd0aFxuICAgIH0pO1xuICAgIHZpc2l0KHNvdXJjZUZpbGUpO1xuICB9XG4gIHJldHVybiB7IGVkaXRzOiBjb250ZXh0LmVkaXRzLCBmaW5kaW5nczogY29udGV4dC5maW5kaW5ncyB9O1xuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBhbmFseXplTWVtYmVyKG5vZGUsIGNvbnRleHQpO1xuICAgIGFuYWx5emVFeHBvcnQobm9kZSwgY29udGV4dCk7XG4gICAgbm9kZS5mb3JFYWNoQ2hpbGQodmlzaXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRGlzcGxheVBhdGgoZmlsZVBhdGg6IHN0cmluZywgYmFzZUZvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgaWYgKGJhc2VGb2xkZXIgIT09IHVuZGVmaW5lZCAmJiBmaWxlUGF0aC5zdGFydHNXaXRoKGAke2Jhc2VGb2xkZXJ9L2ApKSB7XG4gICAgcmV0dXJuIGZpbGVQYXRoLnNsaWNlKGJhc2VGb2xkZXIubGVuZ3RoICsgMSk7XG4gIH1cbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJEQSx3QkF5Qk87QUFFUCx5QkFBa0M7QUFDbEMsaUNBR087QUE4TkEsTUFBTSxzQkFBMkMsb0JBQUksSUFBWTtBQUFBLEVBQ3RFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQztBQXFERCxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLHdCQUFtRCxDQUFDLFdBQVcsYUFBYSxRQUFRO0FBQzFGLE1BQU0sb0JBQXVEO0FBQUEsRUFDM0QsY0FBYztBQUFBLEVBQ2QsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUNmO0FBQ0EsTUFBTSwwQkFBa0U7QUFBQSxFQUN0RSxhQUFhO0FBQUEsRUFDYixpQkFBaUI7QUFBQSxFQUNqQixhQUFhO0FBQ2Y7QUFDQSxNQUFNLDRCQUFxRCxvQkFBSSxJQUFnQixDQUFDLDZCQUFXLGdCQUFnQiw2QkFBVyxrQkFBa0IsNkJB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
|
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
* exposure that still covers all references. Members invoked by the framework via registration
|
|
19
19
|
* rather than by visible references (Obsidian lifecycle hooks, settings-tab `display`, etc.) are
|
|
20
20
|
* excluded via {@link LIFECYCLE_ALLOWLIST}, as are `override` and `static` members whose exposure is
|
|
21
|
-
* constrained by a base declaration.
|
|
21
|
+
* constrained by a base declaration. ECMAScript hard-private members (`#name`) are also excluded —
|
|
22
|
+
* they are already maximally private and cannot carry a visibility modifier. A declaration carrying
|
|
23
|
+
* a TSDoc (`/** … *\/`) documentation comment is likewise excluded — whether a top-level `export` or
|
|
24
|
+
* a class member, documenting it is a deliberate signal that it is part of the intended public API,
|
|
25
|
+
* regardless of where it currently happens to be referenced.
|
|
22
26
|
*
|
|
23
27
|
* A member referenced only from test files is reported with {@link OverExposureFinding.isForcedByTestOnly}
|
|
24
28
|
* set, surfacing members widened purely for testability — the canonical case for extracting logic
|
|
@@ -106,9 +106,11 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
106
106
|
})();
|
|
107
107
|
|
|
108
108
|
"use strict";
|
|
109
|
+
var __create = Object.create;
|
|
109
110
|
var __defProp = Object.defineProperty;
|
|
110
111
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
111
112
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
113
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
112
114
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
113
115
|
var __export = (target, all) => {
|
|
114
116
|
for (var name in all)
|
|
@@ -122,20 +124,31 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
122
124
|
}
|
|
123
125
|
return to;
|
|
124
126
|
};
|
|
127
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
128
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
129
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
130
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
131
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
132
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
133
|
+
mod
|
|
134
|
+
));
|
|
125
135
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
136
|
var nano_staged_config_exports = {};
|
|
127
137
|
__export(nano_staged_config_exports, {
|
|
138
|
+
getNanoStagedConfig: () => getNanoStagedConfig,
|
|
128
139
|
obsidianDevUtilsConfig: () => obsidianDevUtilsConfig
|
|
129
140
|
});
|
|
130
141
|
module.exports = __toCommonJS(nano_staged_config_exports);
|
|
142
|
+
var import_node_fs = require('node:fs');
|
|
143
|
+
var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
|
|
131
144
|
const obsidianDevUtilsConfig = {
|
|
132
145
|
/*
|
|
133
|
-
* Lint everything except the `
|
|
134
|
-
* ship their own consumer-facing
|
|
135
|
-
* explicit path
|
|
136
|
-
* `
|
|
146
|
+
* Lint everything except the `templates/` consumer templates: ESLint globally ignores them, and
|
|
147
|
+
* they ship their own consumer-facing config/scripts that cannot resolve in-repo, so passing one
|
|
148
|
+
* by explicit path errors out. The `!(templates)` negation drops any path that begins with
|
|
149
|
+
* `templates`. Formatting and spellchecking still cover `templates/` via the entries above and below.
|
|
137
150
|
*/
|
|
138
|
-
"!(
|
|
151
|
+
"!(templates)*.{ts,tsx,mts}": [
|
|
139
152
|
"npm run lint:fix --"
|
|
140
153
|
],
|
|
141
154
|
"*": [
|
|
@@ -148,8 +161,23 @@ const obsidianDevUtilsConfig = {
|
|
|
148
161
|
"npm run lint:md:fix --"
|
|
149
162
|
]
|
|
150
163
|
};
|
|
164
|
+
const NANO_STAGED_OFF_VALUES = /* @__PURE__ */ new Set(["0", "false", "no", "off"]);
|
|
165
|
+
function getNanoStagedConfig() {
|
|
166
|
+
if ((0, import_node_fs.existsSync)(".env")) {
|
|
167
|
+
import_node_process.default.loadEnvFile(".env");
|
|
168
|
+
}
|
|
169
|
+
if (isNanoStagedDisabled(import_node_process.default.env["NANO_STAGED"])) {
|
|
170
|
+
import_node_process.default.stdout.write("nano-staged: skipped (NANO_STAGED is off).\n");
|
|
171
|
+
import_node_process.default.exit(0);
|
|
172
|
+
}
|
|
173
|
+
return obsidianDevUtilsConfig;
|
|
174
|
+
}
|
|
175
|
+
function isNanoStagedDisabled(value) {
|
|
176
|
+
return NANO_STAGED_OFF_VALUES.has((value ?? "").trim().toLowerCase());
|
|
177
|
+
}
|
|
151
178
|
// Annotate the CommonJS export names for ESM import in node:
|
|
152
179
|
0 && (module.exports = {
|
|
180
|
+
getNanoStagedConfig,
|
|
153
181
|
obsidianDevUtilsConfig
|
|
154
182
|
});
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9uYW5vLXN0YWdlZC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBmb3IgcHJlLWNvbW1pdCBob29rcy5cbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG4vKipcbiAqIE5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gdGhhdCBydW5zIGZpbGUtYmFzZWQgbGludCwgZm9ybWF0LCBhbmQgc3BlbGxjaGVjayBvbiBzdGFnZWQgZmlsZXMuXG4gKlxuICogT25seSBpbmNsdWRlcyB0b29scyB0aGF0IGNhbiBvcGVyYXRlIG9uIGluZGl2aWR1YWwgZmlsZXMuIFdob2xlLXByb2plY3QgY2hlY2tzXG4gKiAoVHlwZVNjcmlwdCBjb21waWxhdGlvbiwgdW5pdCB0ZXN0cykgYXJlIGxlZnQgdG8gQ0kuXG4gKlxuICogQ29tbWFuZHMgdXNlIGBucG0gcnVuIC4uLiAtLWAgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gIC8qXG4gICAqIExpbnQgZXZlcnl0aGluZyBleGNlcHQgdGhlIGB0ZW1wbGF0ZXMvYCBjb25zdW1lciB0ZW1wbGF0ZXM6IEVTTGludCBnbG9iYWxseSBpZ25vcmVzIHRoZW0sIGFuZFxuICAgKiB0aGV5IHNoaXAgdGhlaXIgb3duIGNvbnN1bWVyLWZhY2luZyBjb25maWcvc2NyaXB0cyB0aGF0IGNhbm5vdCByZXNvbHZlIGluLXJlcG8sIHNvIHBhc3Npbmcgb25lXG4gICAqIGJ5IGV4cGxpY2l0IHBhdGggZXJyb3JzIG91dC4gVGhlIGAhKHRlbXBsYXRlcylgIG5lZ2F0aW9uIGRyb3BzIGFueSBwYXRoIHRoYXQgYmVnaW5zIHdpdGhcbiAgICogYHRlbXBsYXRlc2AuIEZvcm1hdHRpbmcgYW5kIHNwZWxsY2hlY2tpbmcgc3RpbGwgY292ZXIgYHRlbXBsYXRlcy9gIHZpYSB0aGUgZW50cmllcyBhYm92ZSBhbmQgYmVsb3cuXG4gICAqL1xuICAnISh0ZW1wbGF0ZXMpKi57dHMsdHN4LG10c30nOiBbXG4gICAgJ25wbSBydW4gbGludDpmaXggLS0nXG4gIF0sXG4gICcqJzogW1xuICAgICducG0gcnVuIHNwZWxsY2hlY2sgLS0nXG4gIF0sXG4gICcqLnt0cyx0c3gsbXRzfSc6IFtcbiAgICAnbnBtIHJ1biBmb3JtYXQgLS0nXG4gIF0sXG4gICcqLm1kJzogW1xuICAgICducG0gcnVuIGxpbnQ6bWQ6Zml4IC0tJ1xuICBdXG59O1xuXG5jb25zdCBOQU5PX1NUQUdFRF9PRkZfVkFMVUVTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbJzAnLCAnZmFsc2UnLCAnbm8nLCAnb2ZmJ10pO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIHRvIHVzZSwgaG9ub3JpbmcgYSBwZXItZGV2ZWxvcGVyIG9wdC1vdXQuXG4gKlxuICogTG9hZHMgYSBnaXRpZ25vcmVkIGAuZW52YCBpZiBwcmVzZW50ICh2aWEgTm9kZSdzIG93biBgcHJvY2Vzcy5sb2FkRW52RmlsZWAsIHNvIGl0IGJlaGF2ZXMgdGhlIHNhbWVcbiAqIG9uIGV2ZXJ5IHBsYXRmb3JtIGFuZCBzaGVsbCksIHRoZW4gXHUyMDE0IHdoZW4gYE5BTk9fU1RBR0VEYCBpcyBzZXQgdG8gYW4gb2ZmIHZhbHVlIChgMGAsIGBmYWxzZWAsIGBvZmZgLFxuICogb3IgYG5vYCkgXHUyMDE0IHByaW50cyBhIG5vdGljZSBhbmQgZXhpdHMgdGhlIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5IHNvIHRoZSBwcmUtY29tbWl0IGNoZWNrcyBhcmUgc2tpcHBlZC5cbiAqIFRoaXMgbWlycm9ycyBodXNreSdzIG93biBgSFVTS1k9MGAgc3dpdGNoLCBidXQgc2NvcGVkIHRvIHRoZSBuYW5vLXN0YWdlZCBzdGVwIChzbyB0aGUgY29tbWl0LW1zZ1xuICogaG9vayBzdGlsbCBydW5zKS4gT3RoZXJ3aXNlIGl0IHJldHVybnMge0BsaW5rIG9ic2lkaWFuRGV2VXRpbHNDb25maWd9LlxuICpcbiAqIFRoaXMgaXMgYSBmdW5jdGlvbiByYXRoZXIgdGhhbiBtb2R1bGUtbGV2ZWwgY29kZSBzbyBpbXBvcnRpbmcgdGhlIHBhY2thZ2UgYmFycmVsIG5ldmVyIHRyaWdnZXJzIHRoZVxuICogYC5lbnZgIHJlYWQgb3IgdGhlIHByb2Nlc3MgZXhpdDsgY2FsbCBpdCBmcm9tIHRoZSB0aGluIGBzY3JpcHRzL25hbm8tc3RhZ2VkLWNvbmZpZy50c2AgZW50cnkuXG4gKlxuICogQHJldHVybnMgVGhlIG5hbm8tc3RhZ2VkIHRhc2sgY29uZmlndXJhdGlvbi4gRG9lcyBub3QgcmV0dXJuIHdoZW4gdGhlIG9wdC1vdXQgaXMgYWN0aXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFub1N0YWdlZENvbmZpZygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBpZiAoZXhpc3RzU3luYygnLmVudicpKSB7XG4gICAgcHJvY2Vzcy5sb2FkRW52RmlsZSgnLmVudicpO1xuICB9XG5cbiAgaWYgKGlzTmFub1N0YWdlZERpc2FibGVkKHByb2Nlc3MuZW52WydOQU5PX1NUQUdFRCddKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCduYW5vLXN0YWdlZDogc2tpcHBlZCAoTkFOT19TVEFHRUQgaXMgb2ZmKS5cXG4nKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH1cblxuICByZXR1cm4gb2JzaWRpYW5EZXZVdGlsc0NvbmZpZztcbn1cblxuZnVuY3Rpb24gaXNOYW5vU3RhZ2VkRGlzYWJsZWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gTkFOT19TVEFHRURfT0ZGX1ZBTFVFUy5oYXMoKHZhbHVlID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFBMkI7QUFDM0IsMEJBQW9CO0FBVWIsTUFBTSx5QkFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU85RCw4QkFBOEI7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLEtBQUs7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUFBLEVBQ0Esa0JBQWtCO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLE1BQU0seUJBQThDLG9CQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsTUFBTSxLQUFLLENBQUM7QUFnQmhGLFNBQVMsc0JBQWdEO0FBQzlELFVBQUksMkJBQVcsTUFBTSxHQUFHO0FBQ3RCLHdCQUFBQSxRQUFRLFlBQVksTUFBTTtBQUFBLEVBQzVCO0FBRUEsTUFBSSxxQkFBcUIsb0JBQUFBLFFBQVEsSUFBSSxhQUFhLENBQUMsR0FBRztBQUNwRCx3QkFBQUEsUUFBUSxPQUFPLE1BQU0sOENBQThDO0FBQ25FLHdCQUFBQSxRQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxxQkFBcUIsT0FBb0M7QUFDaEUsU0FBTyx1QkFBdUIsS0FBSyxTQUFTLElBQUksS0FBSyxFQUFFLFlBQVksQ0FBQztBQUN0RTsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
@@ -13,3 +13,18 @@
|
|
|
13
13
|
* Commands use `npm run ... --` so nano-staged file paths are forwarded as CLI arguments.
|
|
14
14
|
*/
|
|
15
15
|
export declare const obsidianDevUtilsConfig: Record<string, string[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Resolves the nano-staged configuration to use, honoring a per-developer opt-out.
|
|
18
|
+
*
|
|
19
|
+
* Loads a gitignored `.env` if present (via Node's own `process.loadEnvFile`, so it behaves the same
|
|
20
|
+
* on every platform and shell), then — when `NANO_STAGED` is set to an off value (`0`, `false`, `off`,
|
|
21
|
+
* or `no`) — prints a notice and exits the process successfully so the pre-commit checks are skipped.
|
|
22
|
+
* This mirrors husky's own `HUSKY=0` switch, but scoped to the nano-staged step (so the commit-msg
|
|
23
|
+
* hook still runs). Otherwise it returns {@link obsidianDevUtilsConfig}.
|
|
24
|
+
*
|
|
25
|
+
* This is a function rather than module-level code so importing the package barrel never triggers the
|
|
26
|
+
* `.env` read or the process exit; call it from the thin `scripts/nano-staged-config.ts` entry.
|
|
27
|
+
*
|
|
28
|
+
* @returns The nano-staged task configuration. Does not return when the opt-out is active.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getNanoStagedConfig(): Record<string, string[]>;
|
|
@@ -144,6 +144,7 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
|
|
|
144
144
|
ObsidianDevUtilsRepoPaths2["DctsExtension"] = ".d.cts";
|
|
145
145
|
ObsidianDevUtilsRepoPaths2["Dist"] = "dist";
|
|
146
146
|
ObsidianDevUtilsRepoPaths2["DistLib"] = "dist/lib";
|
|
147
|
+
ObsidianDevUtilsRepoPaths2["DistTemplates"] = "dist/templates";
|
|
147
148
|
ObsidianDevUtilsRepoPaths2["DjsExtension"] = ".d.js";
|
|
148
149
|
ObsidianDevUtilsRepoPaths2["DmtsExtension"] = ".d.mts";
|
|
149
150
|
ObsidianDevUtilsRepoPaths2["DprintJson"] = "dprint.json";
|
|
@@ -159,7 +160,6 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
|
|
|
159
160
|
ObsidianDevUtilsRepoPaths2["LibraryCjs"] = "library.cjs";
|
|
160
161
|
ObsidianDevUtilsRepoPaths2["LibraryMjs"] = "library.mjs";
|
|
161
162
|
ObsidianDevUtilsRepoPaths2["MarkdownlintCli2ConfigMjs"] = ".markdownlint-cli2.mjs";
|
|
162
|
-
ObsidianDevUtilsRepoPaths2["MarkdownlintCli2ConfigMts"] = ".markdownlint-cli2.mts";
|
|
163
163
|
ObsidianDevUtilsRepoPaths2["MarkdownlintTypesMarkdownlintCli2ConfigSchemaDts"] = "src/script-utils/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.ts";
|
|
164
164
|
ObsidianDevUtilsRepoPaths2["MjsExtension"] = ".mjs";
|
|
165
165
|
ObsidianDevUtilsRepoPaths2["NodeModules"] = "node_modules";
|
|
@@ -168,9 +168,9 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
|
|
|
168
168
|
ObsidianDevUtilsRepoPaths2["Scripts"] = "scripts";
|
|
169
169
|
ObsidianDevUtilsRepoPaths2["ScriptUtils"] = "script-utils";
|
|
170
170
|
ObsidianDevUtilsRepoPaths2["Src"] = "src";
|
|
171
|
-
ObsidianDevUtilsRepoPaths2["Static"] = "static";
|
|
172
171
|
ObsidianDevUtilsRepoPaths2["Styles"] = "styles";
|
|
173
172
|
ObsidianDevUtilsRepoPaths2["StylesCss"] = "styles.css";
|
|
173
|
+
ObsidianDevUtilsRepoPaths2["Templates"] = "templates";
|
|
174
174
|
ObsidianDevUtilsRepoPaths2["TestHelpers"] = "test-helpers";
|
|
175
175
|
ObsidianDevUtilsRepoPaths2["TsConfigJson"] = "tsconfig.json";
|
|
176
176
|
ObsidianDevUtilsRepoPaths2["TsConfigValidateDeclarationsCjsJson"] = "tsconfig.validate-declarations-cjs.json";
|
|
@@ -183,4 +183,4 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
|
|
|
183
183
|
0 && (module.exports = {
|
|
184
184
|
ObsidianDevUtilsRepoPaths
|
|
185
185
|
});
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICogVGhlc2UgcGF0aHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgb3RoZXIgdXRpbGl0aWVzLCBlbnN1cmluZyBjb25zaXN0ZW5jeSBhbmQgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2RcbiAqIG9mIGVycm9ycyBkdWUgdG8gaGFyZGNvZGVkIHN0cmluZ3MuXG4gKi9cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBjb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdXNlZCBpbiB0aGUgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBlbnVtIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMge1xuICAvKiogQW55IGZpbGUgb3IgZm9sZGVyLiAqL1xuICBBbnkgPSAnKicsXG5cbiAgLyoqIENvbW1vbkpTIGZpbGUuICovXG4gIEFueUNqcyA9ICcqLmNqcycsXG5cbiAgLyoqIENvbW1vbkpTIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS4gKi9cbiAgQW55RGN0cyA9ICcqLmQuY3RzJyxcblxuICAvKiogRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS4gKi9cbiAgQW55RG10cyA9ICcqLmQubXRzJyxcblxuICAvKiogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLiAqL1xuICBBbnlEdHMgPSAnKi5kLnRzJyxcblxuICAvKiogRVNNIEphdmFTY3JpcHQgZmlsZS4gKi9cbiAgQW55TWpzID0gJyoubWpzJyxcblxuICAvKiogQW55IHBhdGggcmVjdXJzaXZlbHkuICovXG4gIEFueVBhdGggPSAnKionLFxuXG4gIC8qKiBBbnkgVHlwZVNjcmlwdCBmaWxlLiAqL1xuICBBbnlUcyA9ICcqLnRzJyxcblxuICAvKiogQ29tbW9uSlMgZm9sZGVyLiAqL1xuICBDanMgPSAnY2pzJyxcblxuICAvKiogQ29tbW9uSlMgZmlsZSBleHRlbnNpb24uICovXG4gIENqc0V4dGVuc2lvbiA9ICcuY2pzJyxcblxuICAvKiogQ3VycmVudCBmb2xkZXIuICovXG4gIEN1cnJlbnRGb2xkZXIgPSAnLicsXG5cbiAgLyoqIERhdGF2aWV3IHR5cGVzLiAqL1xuICBEYXRhdmlld1R5cGVzID0gJ3NyYy9vYnNpZGlhbi9AdHlwZXMvZGF0YXZpZXcvKionLFxuXG4gIC8qKiBDb21tb25KUyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBEY3RzRXh0ZW5zaW9uID0gJy5kLmN0cycsXG5cbiAgLyoqIERpc3RyaWJ1dGlvbiBmb2xkZXIuICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci4gKi9cbiAgRGlzdExpYiA9ICdkaXN0L2xpYicsXG5cbiAgLyoqIEEgcGF0aCB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlciwgaG9sZGluZyB0aGUgY29uc3VtZXItZmFjaW5nIHRlbXBsYXRlcy4gKi9cbiAgRGlzdFRlbXBsYXRlcyA9ICdkaXN0L3RlbXBsYXRlcycsXG5cbiAgLyoqIFRyYW5zcGlsZWQgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgRGpzRXh0ZW5zaW9uID0gJy5kLmpzJyxcblxuICAvKiogRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uICovXG4gIERtdHNFeHRlbnNpb24gPSAnLmQubXRzJyxcblxuICAvKiogRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS4gKi9cbiAgRHByaW50SnNvbiA9ICdkcHJpbnQuanNvbicsXG5cbiAgLyoqIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uICovXG4gIER0c0V4dGVuc2lvbiA9ICcuZC50cycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IEVTTGludCBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqIEVTTSBKYXZhU2NyaXB0IGZvbGRlci4gKi9cbiAgRXNtID0gJ2VzbScsXG5cbiAgLyoqIENvbW1vbkpTIEphdmFTY3JpcHQgaW5kZXggZmlsZS4gKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKiogQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuICovXG4gIEluZGV4RGN0cyA9ICdpbmRleC5kLmN0cycsXG5cbiAgLyoqIEVTTSBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgaW5kZXggZmlsZS4gKi9cbiAgSW5kZXhEbXRzID0gJ2luZGV4LmQubXRzJyxcblxuICAvKiogRVNNIEphdmFTY3JpcHQgaW5kZXggZmlsZS4gKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKiogVHlwZVNjcmlwdCBpbmRleCBmaWxlLiAqL1xuICBJbmRleFRzID0gJ2luZGV4LnRzJyxcblxuICAvKiogSmF2YVNjcmlwdCBmaWxlIGV4dGVuc2lvbi4gKi9cbiAgSnNFeHRlbnNpb24gPSAnLmpzJyxcblxuICAvKiogTGlicmFyeSBDb21tb25KUyBmaWxlLiAqL1xuICBMaWJyYXJ5Q2pzID0gJ2xpYnJhcnkuY2pzJyxcblxuICAvKiogTGlicmFyeSBFU00gSmF2YVNjcmlwdCBmaWxlLiAqL1xuICBMaWJyYXJ5TWpzID0gJ2xpYnJhcnkubWpzJyxcblxuICAvKiogRVNNIE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS4gKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyA9ICcubWFya2Rvd25saW50LWNsaTIubWpzJyxcblxuICAvKiogTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBzY2hlbWEgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLiAqL1xuICBNYXJrZG93bmxpbnRUeXBlc01hcmtkb3dubGludENsaTJDb25maWdTY2hlbWFEdHMgPSAnc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC10eXBlcy9AdHlwZXMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLXNjaGVtYS5kLnRzJyxcblxuICAvKiogRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uICovXG4gIE1qc0V4dGVuc2lvbiA9ICcubWpzJyxcblxuICAvKiogTm9kZSBtb2R1bGVzIGZvbGRlci4gKi9cbiAgTm9kZU1vZHVsZXMgPSAnbm9kZV9tb2R1bGVzJyxcblxuICAvKiogUGFja2FnZSBKU09OIGZpbGUuICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqIFJvb3QgZm9sZGVyLiAqL1xuICBSb290Rm9sZGVyID0gJy8nLFxuXG4gIC8qKiBTY3JpcHRzIGZvbGRlci4gKi9cbiAgU2NyaXB0cyA9ICdzY3JpcHRzJyxcblxuICAvKiogU2NyaXB0VXRpbHMgZm9sZGVyLiAqL1xuICBTY3JpcHRVdGlscyA9ICdzY3JpcHQtdXRpbHMnLFxuXG4gIC8qKiBTb3VyY2UgZm9sZGVyLiAqL1xuICBTcmMgPSAnc3JjJyxcblxuICAvKiogU3R5bGVzIGZvbGRlci4gKi9cbiAgU3R5bGVzID0gJ3N0eWxlcycsXG5cbiAgLyoqIFN0eWxlcyBDU1MgZmlsZS4gKi9cbiAgU3R5bGVzQ3NzID0gJ3N0eWxlcy5jc3MnLFxuXG4gIC8qKiBUZW1wbGF0ZXMgZm9sZGVyLiAqL1xuICBUZW1wbGF0ZXMgPSAndGVtcGxhdGVzJyxcblxuICAvKiogVGVzdCBoZWxwZXJzIGZvbGRlci4gKi9cbiAgVGVzdEhlbHBlcnMgPSAndGVzdC1oZWxwZXJzJyxcblxuICAvKiogVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuICovXG4gIFRzQ29uZmlnSnNvbiA9ICd0c2NvbmZpZy5qc29uJyxcblxuICAvKiogVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB2YWxpZGF0ZXMgdGhlIGdlbmVyYXRlZCBDb21tb25KUyBkZWNsYXJhdGlvbnMuICovXG4gIFRzQ29uZmlnVmFsaWRhdGVEZWNsYXJhdGlvbnNDanNKc29uID0gJ3RzY29uZmlnLnZhbGlkYXRlLWRlY2xhcmF0aW9ucy1janMuanNvbicsXG5cbiAgLyoqIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdmFsaWRhdGVzIHRoZSBnZW5lcmF0ZWQgRVNNIGRlY2xhcmF0aW9ucy4gKi9cbiAgVHNDb25maWdWYWxpZGF0ZURlY2xhcmF0aW9uc0pzb24gPSAndHNjb25maWcudmFsaWRhdGUtZGVjbGFyYXRpb25zLmpzb24nLFxuXG4gIC8qKiBUeXBlU2NyaXB0IGZpbGUgZXh0ZW5zaW9uLiAqL1xuICBUc0V4dGVuc2lvbiA9ICcudHMnLFxuXG4gIC8qKiBUeXBlcyBmb2xkZXIuICovXG4gIFR5cGVzID0gJ0B0eXBlcydcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdPLElBQUssNEJBQUwsa0JBQUtBLCtCQUFMO0FBRUwsRUFBQUEsMkJBQUEsU0FBTTtBQUdOLEVBQUFBLDJCQUFBLFlBQVM7QUFHVCxFQUFBQSwyQkFBQSxhQUFVO0FBR1YsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLFlBQVM7QUFHVCxFQUFBQSwyQkFBQSxZQUFTO0FBR1QsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLFdBQVE7QUFHUixFQUFBQSwyQkFBQSxTQUFNO0FBR04sRUFBQUEsMkJBQUEsa0JBQWU7QUFHZixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFHaEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBR2hCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxVQUFPO0FBR1AsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxrQkFBZTtBQUdmLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUdoQixFQUFBQSwyQkFBQSxnQkFBYTtBQUdiLEVBQUFBLDJCQUFBLGtCQUFlO0FBR2YsRUFBQUEsMkJBQUEscUJBQWtCO0FBR2xCLEVBQUFBLDJCQUFBLFNBQU07QUFHTixFQUFBQSwyQkFBQSxjQUFXO0FBR1gsRUFBQUEsMkJBQUEsZUFBWTtBQUdaLEVBQUFBLDJCQUFBLGVBQVk7QUFHWixFQUFBQSwyQkFBQSxjQUFXO0FBR1gsRUFBQUEsMkJBQUEsYUFBVTtBQUdWLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsZ0JBQWE7QUFHYixFQUFBQSwyQkFBQSxnQkFBYTtBQUdiLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUc1QixFQUFBQSwyQkFBQSxzREFBbUQ7QUFHbkQsRUFBQUEsMkJBQUEsa0JBQWU7QUFHZixFQUFBQSwyQkFBQSxpQkFBYztBQUdkLEVBQUFBLDJCQUFBLGlCQUFjO0FBR2QsRUFBQUEsMkJBQUEsZ0JBQWE7QUFHYixFQUFBQSwyQkFBQSxhQUFVO0FBR1YsRUFBQUEsMkJBQUEsaUJBQWM7QUFHZCxFQUFBQSwyQkFBQSxTQUFNO0FBR04sRUFBQUEsMkJBQUEsWUFBUztBQUdULEVBQUFBLDJCQUFBLGVBQVk7QUFHWixFQUFBQSwyQkFBQSxlQUFZO0FBR1osRUFBQUEsMkJBQUEsaUJBQWM7QUFHZCxFQUFBQSwyQkFBQSxrQkFBZTtBQUdmLEVBQUFBLDJCQUFBLHlDQUFzQztBQUd0QyxFQUFBQSwyQkFBQSxzQ0FBbUM7QUFHbkMsRUFBQUEsMkJBQUEsaUJBQWM7QUFHZCxFQUFBQSwyQkFBQSxXQUFRO0FBL0lFLFNBQUFBO0FBQUEsR0FBQTsiLAogICJuYW1lcyI6IFsiT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyJdCn0K
|