@mnaoumov/typescript-dev-toolkit 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/build.cjs +2 -24
- package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +2 -24
- package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +1 -56
- package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +4 -25
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +6 -61
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +129 -27
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +3 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +3 -25
- package/dist/lib/cjs/bundlers/index.cjs +2 -57
- package/dist/lib/cjs/check-project-types.cjs +3 -25
- package/dist/lib/cjs/cli-utils.cjs +5 -33
- package/dist/lib/cjs/cli-utils.d.cts +1 -1
- package/dist/lib/cjs/code-generator.cjs +1 -56
- package/dist/lib/cjs/commitlint-config.cjs +2 -24
- package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +1 -56
- package/dist/lib/cjs/commitlint-spellcheck-header.cjs +1 -56
- package/dist/lib/cjs/env-toggle.cjs +14 -25
- package/dist/lib/cjs/env-toggle.d.cts +7 -0
- package/dist/lib/cjs/exec.cjs +3 -25
- package/dist/lib/cjs/exec.d.cts +1 -0
- package/dist/lib/cjs/forbidden-patterns.cjs +3 -25
- package/dist/lib/cjs/formatters/dprint.cjs +2 -24
- package/dist/lib/cjs/formatters/index.cjs +2 -57
- package/dist/lib/cjs/fs.cjs +2 -24
- package/dist/lib/cjs/fs.d.cts +1 -0
- package/dist/lib/cjs/gate.cjs +1 -56
- package/dist/lib/cjs/git.cjs +42 -58
- package/dist/lib/cjs/git.d.cts +29 -0
- package/dist/lib/cjs/index.cjs +31 -86
- package/dist/lib/cjs/json.cjs +2 -24
- package/dist/lib/cjs/library-build.cjs +92 -34
- package/dist/lib/cjs/library-build.d.cts +10 -4
- package/dist/lib/cjs/library-references.d.cts +0 -3
- package/dist/lib/cjs/linters/cspell-content.cjs +2 -24
- package/dist/lib/cjs/linters/cspell.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-config.cjs +8 -30
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +13 -68
- package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +2 -24
- package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +1 -56
- package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +2 -24
- package/dist/lib/cjs/linters/eslint.cjs +2 -24
- package/dist/lib/cjs/linters/index.cjs +15 -70
- package/dist/lib/cjs/linters/lint-ignores.cjs +2 -24
- package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +3 -25
- package/dist/lib/cjs/linters/markdownlint-content.cjs +2 -24
- package/dist/lib/cjs/linters/markdownlint-ignores.cjs +1 -56
- package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +2 -57
- package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +1 -56
- package/dist/lib/cjs/linters/markdownlint.cjs +5 -26
- package/dist/lib/cjs/linters/markdownlint.d.cts +11 -0
- package/dist/lib/cjs/linters/over-exposure.cjs +2 -24
- package/dist/lib/cjs/nano-staged-config.cjs +2 -57
- package/dist/lib/cjs/npm-publish.cjs +1 -56
- package/dist/lib/cjs/npm-run.cjs +2 -24
- package/dist/lib/cjs/npm.cjs +2 -24
- package/dist/lib/cjs/package-lock-integrity.cjs +1 -56
- package/dist/lib/cjs/package-manager.cjs +3 -25
- package/dist/lib/cjs/released-issues.cjs +2 -24
- package/dist/lib/cjs/repo-paths.cjs +1 -56
- package/dist/lib/cjs/root.cjs +2 -24
- package/dist/lib/cjs/test-runners/index.cjs +3 -58
- package/dist/lib/cjs/test-runners/vitest-config.cjs +1 -56
- package/dist/lib/cjs/test-runners/vitest.cjs +1 -56
- package/dist/lib/cjs/validate-declarations.cjs +2 -24
- package/dist/lib/cjs/version.cjs +2 -24
- package/dist/lib/cjs/version.d.cts +1 -0
- package/dist/lib/esm/build.mjs +2 -11
- package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +2 -11
- package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +1 -43
- package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +4 -12
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -43
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +3 -1
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +154 -14
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +2 -11
- package/dist/lib/esm/bundlers/index.mjs +1 -43
- package/dist/lib/esm/check-project-types.mjs +2 -11
- package/dist/lib/esm/cli-utils.d.mts +1 -1
- package/dist/lib/esm/cli-utils.mjs +5 -20
- package/dist/lib/esm/code-generator.mjs +1 -43
- package/dist/lib/esm/commitlint-config.mjs +2 -11
- package/dist/lib/esm/commitlint-forbidden-patterns.mjs +1 -43
- package/dist/lib/esm/commitlint-spellcheck-header.mjs +1 -43
- package/dist/lib/esm/env-toggle.d.mts +7 -0
- package/dist/lib/esm/env-toggle.mjs +12 -11
- package/dist/lib/esm/exec.d.mts +1 -0
- package/dist/lib/esm/exec.mjs +2 -11
- package/dist/lib/esm/forbidden-patterns.mjs +2 -11
- package/dist/lib/esm/formatters/dprint.mjs +2 -11
- package/dist/lib/esm/formatters/index.mjs +1 -43
- package/dist/lib/esm/fs.d.mts +1 -0
- package/dist/lib/esm/fs.mjs +2 -11
- package/dist/lib/esm/gate.mjs +1 -43
- package/dist/lib/esm/git.d.mts +29 -0
- package/dist/lib/esm/git.mjs +40 -44
- package/dist/lib/esm/index.mjs +1 -43
- package/dist/lib/esm/json.mjs +2 -11
- package/dist/lib/esm/library-build.d.mts +10 -4
- package/dist/lib/esm/library-build.mjs +101 -21
- package/dist/lib/esm/library-references.d.mts +0 -3
- package/dist/lib/esm/linters/cspell-content.mjs +2 -11
- package/dist/lib/esm/linters/cspell.mjs +1 -43
- package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -43
- package/dist/lib/esm/linters/eslint-config.mjs +2 -11
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/index.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +2 -11
- package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +1 -43
- package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +2 -11
- package/dist/lib/esm/linters/eslint.mjs +2 -11
- package/dist/lib/esm/linters/index.mjs +1 -43
- package/dist/lib/esm/linters/lint-ignores.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-content.mjs +2 -11
- package/dist/lib/esm/linters/markdownlint-ignores.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-rules/index.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +1 -43
- package/dist/lib/esm/linters/markdownlint.d.mts +11 -0
- package/dist/lib/esm/linters/markdownlint.mjs +9 -14
- package/dist/lib/esm/linters/over-exposure.mjs +2 -11
- package/dist/lib/esm/nano-staged-config.mjs +1 -43
- package/dist/lib/esm/npm-publish.mjs +1 -43
- package/dist/lib/esm/npm-run.mjs +2 -11
- package/dist/lib/esm/npm.mjs +2 -11
- package/dist/lib/esm/package-lock-integrity.mjs +1 -43
- package/dist/lib/esm/package-manager.mjs +2 -11
- package/dist/lib/esm/released-issues.mjs +2 -11
- package/dist/lib/esm/repo-paths.mjs +1 -43
- package/dist/lib/esm/root.mjs +2 -11
- package/dist/lib/esm/test-runners/index.mjs +1 -43
- package/dist/lib/esm/test-runners/vitest-config.mjs +1 -43
- package/dist/lib/esm/test-runners/vitest.mjs +1 -43
- package/dist/lib/esm/validate-declarations.mjs +2 -11
- package/dist/lib/esm/version.d.mts +1 -0
- package/dist/lib/esm/version.mjs +2 -11
- package/package.json +2 -2
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,10 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
(
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
46
37
|
})();
|
|
47
38
|
|
|
48
39
|
import { asyncMap } from "@mnaoumov/typescript-lib/async";
|
|
@@ -56,6 +47,7 @@ import {
|
|
|
56
47
|
relative
|
|
57
48
|
} from "@mnaoumov/typescript-lib/path";
|
|
58
49
|
import { replaceAll } from "@mnaoumov/typescript-lib/string";
|
|
50
|
+
import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
|
|
59
51
|
import { context } from "esbuild";
|
|
60
52
|
import {
|
|
61
53
|
existsSync,
|
|
@@ -67,8 +59,18 @@ import {
|
|
|
67
59
|
rm,
|
|
68
60
|
writeFile
|
|
69
61
|
} from "node:fs/promises";
|
|
70
|
-
import {
|
|
62
|
+
import {
|
|
63
|
+
relative as relativeNative,
|
|
64
|
+
resolve as resolveNative
|
|
65
|
+
} from "node:path";
|
|
71
66
|
import process from "node:process";
|
|
67
|
+
import {
|
|
68
|
+
createProgram,
|
|
69
|
+
forEachChild,
|
|
70
|
+
isIdentifier,
|
|
71
|
+
isStringLiteral,
|
|
72
|
+
SymbolFlags
|
|
73
|
+
} from "typescript";
|
|
72
74
|
import { buildClean } from "./build.mjs";
|
|
73
75
|
import { changeExtensionPlugin } from "./bundlers/esbuild-impl/change-extension-plugin.mjs";
|
|
74
76
|
import { fixEsmPlugin } from "./bundlers/esbuild-impl/fix-esm-plugin.mjs";
|
|
@@ -98,6 +100,9 @@ const LIBRARY_BUILD_STEPS = [
|
|
|
98
100
|
];
|
|
99
101
|
const SOURCE_CONDITION = "@mnaoumov/source";
|
|
100
102
|
const DECLARATION_REFERENCE_TYPES = /* @__PURE__ */ new Set(["node"]);
|
|
103
|
+
const ENVIRONMENT_LIB_PREFIXES = ["dom", "scripthost", "webworker"];
|
|
104
|
+
const NODE_TYPES_PATH_SEGMENT = "/node_modules/@types/node/";
|
|
105
|
+
const LIB_REPLACEMENT_REG_EXP = /\/node_modules\/@typescript\/lib-(?<Lib>[^/]+)\/(?<SubLib>.+)\.d\.ts$/;
|
|
101
106
|
const LIBRARY_REFERENCES_FILE_NAME = "library-references";
|
|
102
107
|
const REFERENCE_LIB_DIRECTIVE = ["<reference", "lib="].join(" ");
|
|
103
108
|
const REFERENCE_LIB_REG_EXP = /\/\/\/ <reference lib="(?<Lib>[^"]+)" \/>/gm;
|
|
@@ -137,14 +142,15 @@ async function buildLibraryTypes() {
|
|
|
137
142
|
const allLibs = await collectAllLibs();
|
|
138
143
|
const allTypes = collectAllTypes();
|
|
139
144
|
const directives = buildAllReferenceLibDirectives(allLibs) + buildAllReferenceTypesDirectives(allTypes);
|
|
145
|
+
const sharedDirectives = buildAllReferenceLibDirectives(allLibs.filter((lib) => !isEnvironmentLib(lib)));
|
|
140
146
|
await mkdir(join(RepoPaths.DistLib, RepoPaths.Cjs), { recursive: true });
|
|
141
147
|
await mkdir(join(RepoPaths.DistLib, RepoPaths.Esm), { recursive: true });
|
|
142
|
-
await writeFile(join(RepoPaths.DistLib, RepoPaths.Cjs, LIBRARY_REFERENCES_FILE_NAME + RepoPaths.DctsExtension),
|
|
143
|
-
await writeFile(join(RepoPaths.DistLib, RepoPaths.Esm, LIBRARY_REFERENCES_FILE_NAME + RepoPaths.DmtsExtension),
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
await writeFile(join(RepoPaths.DistLib, RepoPaths.Cjs, LIBRARY_REFERENCES_FILE_NAME + RepoPaths.DctsExtension), sharedDirectives);
|
|
149
|
+
await writeFile(join(RepoPaths.DistLib, RepoPaths.Esm, LIBRARY_REFERENCES_FILE_NAME + RepoPaths.DmtsExtension), sharedDirectives);
|
|
150
|
+
const srcFiles = await readdirPosix(RepoPaths.Src, { recursive: true });
|
|
151
|
+
const declarationFiles = srcFiles.filter((file) => file.endsWith(RepoPaths.DtsExtension) && !file.startsWith(RepoPaths.TestHelpers));
|
|
152
|
+
const environmentDirectives = collectEnvironmentDirectives({ availableTypes: allTypes, declarationFiles });
|
|
153
|
+
for (const file of declarationFiles) {
|
|
148
154
|
const folder = dirname(file);
|
|
149
155
|
const name = basename(file, RepoPaths.DtsExtension);
|
|
150
156
|
const content = await readFile(join(RepoPaths.Src, file), "utf-8");
|
|
@@ -158,8 +164,9 @@ async function buildLibraryTypes() {
|
|
|
158
164
|
ctsContent = directives + ctsContent;
|
|
159
165
|
mtsContent = directives + mtsContent;
|
|
160
166
|
} else {
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
const fileDirectives = environmentDirectives.get(file) ?? "";
|
|
168
|
+
ctsContent = buildReferencePathDirective({ declarationFilePath: ctsPath, extension: RepoPaths.DctsExtension, moduleDirectory: RepoPaths.Cjs }) + fileDirectives + ctsContent;
|
|
169
|
+
mtsContent = buildReferencePathDirective({ declarationFilePath: mtsPath, extension: RepoPaths.DmtsExtension, moduleDirectory: RepoPaths.Esm }) + fileDirectives + mtsContent;
|
|
163
170
|
}
|
|
164
171
|
await writeFile(ctsPath, ctsContent);
|
|
165
172
|
await writeFile(mtsPath, mtsContent);
|
|
@@ -202,6 +209,30 @@ async function runBuildSteps(steps = LIBRARY_BUILD_STEPS) {
|
|
|
202
209
|
await npmRunOptional(step);
|
|
203
210
|
}
|
|
204
211
|
}
|
|
212
|
+
function addEnvironmentGlobals(params) {
|
|
213
|
+
const { libs, program, symbol, types } = params;
|
|
214
|
+
const environmentLibs = [];
|
|
215
|
+
let isNode = false;
|
|
216
|
+
for (const declaration of symbol.declarations ?? []) {
|
|
217
|
+
const sourceFile = declaration.getSourceFile();
|
|
218
|
+
if (program.isSourceFileDefaultLibrary(sourceFile)) {
|
|
219
|
+
const lib = toLibName(sourceFile.fileName);
|
|
220
|
+
if (!isEnvironmentLib(lib)) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
environmentLibs.push(lib);
|
|
224
|
+
} else if (sourceFile.fileName.includes(NODE_TYPES_PATH_SEGMENT)) {
|
|
225
|
+
isNode = true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
if (environmentLibs.length > 0) {
|
|
229
|
+
for (const lib of environmentLibs) {
|
|
230
|
+
libs.add(lib);
|
|
231
|
+
}
|
|
232
|
+
} else if (isNode) {
|
|
233
|
+
types.add("node");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
205
236
|
function buildAllReferenceLibDirectives(libs) {
|
|
206
237
|
return `${libs.map((lib) => `/// ${REFERENCE_LIB_DIRECTIVE}"${lib}" />`).join("\n")}
|
|
207
238
|
`;
|
|
@@ -255,7 +286,7 @@ function buildReferencePathDirective(params) {
|
|
|
255
286
|
}
|
|
256
287
|
async function collectAllLibs() {
|
|
257
288
|
const { options } = parseTsConfig(RepoPaths.TsConfigJson);
|
|
258
|
-
const libs = new Set((options.lib ?? []).map((lib) =>
|
|
289
|
+
const libs = new Set((options.lib ?? []).map((lib) => toLibName(lib)));
|
|
259
290
|
for (const file of await readdirPosix(RepoPaths.Src, { recursive: true })) {
|
|
260
291
|
if (!file.endsWith(".ts")) {
|
|
261
292
|
continue;
|
|
@@ -271,6 +302,40 @@ function collectAllTypes() {
|
|
|
271
302
|
const { options } = parseTsConfig(RepoPaths.TsConfigJson);
|
|
272
303
|
return (options.types ?? []).filter((type) => DECLARATION_REFERENCE_TYPES.has(type)).sort();
|
|
273
304
|
}
|
|
305
|
+
function collectEnvironmentDirectives(params) {
|
|
306
|
+
const { availableTypes, declarationFiles } = params;
|
|
307
|
+
const { options } = parseTsConfig(RepoPaths.TsConfigJson);
|
|
308
|
+
const program = createProgram({
|
|
309
|
+
options: { ...options, noEmit: true },
|
|
310
|
+
rootNames: declarationFiles.map((file) => resolveNative(RepoPaths.Src, file))
|
|
311
|
+
});
|
|
312
|
+
const checker = program.getTypeChecker();
|
|
313
|
+
const directivesByFile = /* @__PURE__ */ new Map();
|
|
314
|
+
for (const file of declarationFiles) {
|
|
315
|
+
let visit2 = function(node) {
|
|
316
|
+
if (isIdentifier(node) || isStringLiteral(node)) {
|
|
317
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
318
|
+
if (symbol !== void 0) {
|
|
319
|
+
addEnvironmentGlobals({ libs, program, symbol: resolveAlias(checker, symbol), types });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
forEachChild(node, visit2);
|
|
323
|
+
};
|
|
324
|
+
var visit = visit2;
|
|
325
|
+
const sourceFile = ensureNonNullable(program.getSourceFile(resolveNative(RepoPaths.Src, file)));
|
|
326
|
+
const libs = /* @__PURE__ */ new Set();
|
|
327
|
+
const types = /* @__PURE__ */ new Set();
|
|
328
|
+
visit2(sourceFile);
|
|
329
|
+
const neededTypes = [...types].filter((type) => availableTypes.includes(type));
|
|
330
|
+
if (libs.size > 0 || neededTypes.length > 0) {
|
|
331
|
+
directivesByFile.set(
|
|
332
|
+
file,
|
|
333
|
+
(libs.size > 0 ? buildAllReferenceLibDirectives([...libs].sort()) : "") + buildAllReferenceTypesDirectives(neededTypes.sort())
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return directivesByFile;
|
|
338
|
+
}
|
|
274
339
|
async function generateIndex(folder) {
|
|
275
340
|
const dirents = await readdirPosix(folder, { withFileTypes: true });
|
|
276
341
|
const maybeLines = await asyncMap(dirents, (dirent) => handleIndexDirent(folder, dirent));
|
|
@@ -308,6 +373,9 @@ async function handleIndexDirent(folder, dirent) {
|
|
|
308
373
|
}
|
|
309
374
|
return `export * as '${name}' from '${sourceFile}';`;
|
|
310
375
|
}
|
|
376
|
+
function isEnvironmentLib(lib) {
|
|
377
|
+
return ENVIRONMENT_LIB_PREFIXES.some((prefix) => lib.startsWith(prefix));
|
|
378
|
+
}
|
|
311
379
|
function isExcludedFileName(name) {
|
|
312
380
|
return !name.endsWith(RepoPaths.TsExtension) || name.endsWith(".test.ts") || name === "setup.ts" || name.endsWith("-setup.ts");
|
|
313
381
|
}
|
|
@@ -316,6 +384,9 @@ function isExcludedFromIndex(folder, dirent) {
|
|
|
316
384
|
const isExcludedEntry = excludedNames.includes(dirent.name) || dirent.name.endsWith(RepoPaths.DtsExtension) || folder.split("/").includes(RepoPaths.Types);
|
|
317
385
|
return isExcludedEntry || dirent.isFile() && isExcludedFileName(dirent.name);
|
|
318
386
|
}
|
|
387
|
+
function resolveAlias(checker, symbol) {
|
|
388
|
+
return (symbol.flags & SymbolFlags.Alias) === 0 ? symbol : checker.getAliasedSymbol(symbol);
|
|
389
|
+
}
|
|
319
390
|
async function setExport(params) {
|
|
320
391
|
const { exportConditions, isWildcard, sourceCondition, srcFolder } = params;
|
|
321
392
|
const importPath = replaceAll({
|
|
@@ -413,6 +484,15 @@ function toCtsContent(content) {
|
|
|
413
484
|
function toDistPath(params) {
|
|
414
485
|
return normalizeIfRelative(join(RepoPaths.DistLib, params.format, params.importPath, params.name));
|
|
415
486
|
}
|
|
487
|
+
function toLibName(libFilePath) {
|
|
488
|
+
const replacementMatch = LIB_REPLACEMENT_REG_EXP.exec(libFilePath);
|
|
489
|
+
if (replacementMatch?.groups !== void 0) {
|
|
490
|
+
const lib = String(replacementMatch.groups["Lib"]);
|
|
491
|
+
const subLib = String(replacementMatch.groups["SubLib"]);
|
|
492
|
+
return (subLib === "index" ? lib : `${lib}.${subLib.replaceAll("/", ".")}`).toLowerCase();
|
|
493
|
+
}
|
|
494
|
+
return basename(libFilePath).toLowerCase().replace(/^lib\./, "").replace(/\.d\.ts$/, "");
|
|
495
|
+
}
|
|
416
496
|
function toMtsContent(content) {
|
|
417
497
|
const mtsContent = replaceAll({
|
|
418
498
|
$string: content,
|
|
@@ -440,4 +520,4 @@ export {
|
|
|
440
520
|
generateLibraryIndex,
|
|
441
521
|
runBuildSteps
|
|
442
522
|
};
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYnJhcnktYnVpbGQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJy4vbnBtLnRzJztcblxuaW1wb3J0IHsgYnVpbGRDbGVhbiB9IGZyb20gJy4vYnVpbGQudHMnO1xuaW1wb3J0IHsgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvY2hhbmdlLWV4dGVuc2lvbi1wbHVnaW4udHMnO1xuaW1wb3J0IHsgZml4RXNtUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvZml4LWVzbS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcHJlcHJvY2Vzc1BsdWdpbiB9IGZyb20gJy4vYnVuZGxlcnMvZXNidWlsZC1pbXBsL3ByZXByb2Nlc3MtcGx1Z2luLnRzJztcbmltcG9ydCB7IHBhcnNlVHNDb25maWcgfSBmcm9tICcuL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuL2NvZGUtZ2VuZXJhdG9yLnRzJztcbmltcG9ydCB7IHJlYWRkaXJQb3NpeCB9IGZyb20gJy4vZnMudHMnO1xuaW1wb3J0IHsgd3JpdGVKc29uIH0gZnJvbSAnLi9qc29uLnRzJztcbmltcG9ydCB7IG5wbVJ1bk9wdGlvbmFsIH0gZnJvbSAnLi9ucG0tcnVuLnRzJztcbmltcG9ydCB7IGVkaXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vbnBtLnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIFRoZSBiYW5uZXIgZXZlcnkgZW1pdHRlZCBsaWJyYXJ5IG1vZHVsZSBvcGVucyB3aXRoLlxuICovXG5leHBvcnQgY29uc3QgTElCUkFSWV9CQU5ORVIgPSBgLypcblRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEVTQlVJTERcbmlmIHlvdSB3YW50IHRvIHZpZXcgdGhlIHNvdXJjZSwgcGxlYXNlIHZpc2l0IHRoZSBnaXRodWIgcmVwb3NpdG9yeSBvZiB0aGlzIHBsdWdpblxuKi9cbmA7XG5cbi8qKlxuICogVGhlIHN0ZXBzIG9mIGEgbGlicmFyeSBidWlsZCwgaW4gdGhlIG9yZGVyIHtAbGluayBydW5CdWlsZFN0ZXBzfSBydW5zIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JVSUxEX1NURVBTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ2J1aWxkOmNsZWFuJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWluZGV4JyxcbiAgJ2J1aWxkOmNvbXBpbGUnLFxuICAnYnVpbGQ6dHlwZXMnLFxuICAnYnVpbGQ6dmFsaWRhdGUtZGVjbGFyYXRpb25zJyxcbiAgJ2J1aWxkOmxpYicsXG4gICdidWlsZDpnZW5lcmF0ZS1leHBvcnRzJ1xuXTtcblxuLyoqXG4gKiBUaGUgZXhwb3J0IGNvbmRpdGlvbiB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2Agd29ya3NwYWNlIG1hcHMgZXZlcnkgc3VicGF0aCBvbnRvIGl0cyBUeXBlU2NyaXB0IHNvdXJjZSB3aXRoLCBzbyBhXG4gKiBwYWNrYWdlIHRoZXJlIGNhbiBpbXBvcnQgYSBzaWJsaW5nIHBhY2thZ2UncyBzb3VyY2UgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LiBQYXNzIGl0IHRvXG4gKiB7QGxpbmsgZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0c30gdGhyb3VnaCB7QGxpbmsgR2VuZXJhdGVMaWJyYXJ5RXhwb3J0c09wdGlvbnMuc291cmNlQ29uZGl0aW9ufS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT05ESVRJT04gPSAnQG1uYW91bW92L3NvdXJjZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGJ1aWxkTGlicmFyeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRMaWJyYXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcmVwcm9jZXNzIHBsdWdpbiBmb3Igb25lIG91dHB1dCBmb3JtYXQuIERlZmF1bHRzIHRvIHRoZSBnZW5lcmljIG9uZSwgd2hpY2ggY2FycmllcyBub1xuICAgKiBlbnZpcm9ubWVudC1zcGVjaWZpYyBgcmVxdWlyZWAgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeT86IChpc0VzbTogYm9vbGVhbikgPT4gUGx1Z2luO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBleHBvcnQgY29uZGl0aW9uIHRvIHB1dCBmaXJzdCBpbiBldmVyeSBlbnRyeSwgbWFwcGluZyB0aGUgc3VicGF0aCBvbnRvIGl0cyBUeXBlU2NyaXB0IHNvdXJjZS4gT25seSBhXG4gICAqIHJlcG9zaXRvcnkgaG9sZGluZyBzZXZlcmFsIHBhY2thZ2VzIHRoYXQgaW1wb3J0IGVhY2ggb3RoZXIgbmVlZHMgb25lOyBub3RoaW5nIG91dHNpZGUgaXQgc2V0cyB0aGUgY29uZGl0aW9uLCBhbmRcbiAgICogdGhlIHNvdXJjZXMgaXQgcG9pbnRzIGF0IGRvIG5vdCBzaGlwLCBzbyB0aGUgcHVibGlzaCBoYXMgdG8gc3RyaXAgaXQgYWdhaW4uIE9taXR0ZWQsIHRoZSBtYXAgaGFzIG5vbmUuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VDb25kaXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTW9kdWxlRm9ybWF0ID0gJ2NqcycgfCAnZXNtJztcblxuY29uc3QgREVDTEFSQVRJT05fUkVGRVJFTkNFX1RZUEVTID0gbmV3IFNldChbJ25vZGUnXSk7XG5cbi8vIFRoZSBkZWNsYXJhdGlvbiB0aGF0IGNhcnJpZXMgb25seSB0aGUgYGxpYmAgYW5kIGB0eXBlc2AgcmVmZXJlbmNlcy4gRXZlcnkgZGVjbGFyYXRpb24gYnV0IHRoZSByb290IG9uZSByZWZlcmVuY2VzXG4vLyBpdCwgcmF0aGVyIHRoYW4gdGhlIHJvb3QgYmFycmVsLCB3aGljaCB3b3VsZCBsb2FkIGV2ZXJ5IG1vZHVsZSBvZiB0aGUgcGFja2FnZSwgb3B0aW9uYWwgcGVlcnMnIHR5cGVzIGluY2x1ZGVkLlxuY29uc3QgTElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRSA9ICdsaWJyYXJ5LXJlZmVyZW5jZXMnO1xuLy8gU3BlbGxlZCBhcGFydCBvbiBwdXJwb3NlOiB7QGxpbmsgY29sbGVjdEFsbExpYnN9IHNjYW5zIGV2ZXJ5IHNvdXJjZSBmaWxlIG9mIHRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGZvciB0aGVcbi8vIGRpcmVjdGl2ZSwgdGhpcyBvbmUgaW5jbHVkZWQsIHNvIGEgbGl0ZXJhbCBvbmUgaGVyZSB3b3VsZCBiZSByZWFkIGFzIGEgbGliIHRoaXMgcGFja2FnZSBuZWVkcy5cbmNvbnN0IFJFRkVSRU5DRV9MSUJfRElSRUNUSVZFID0gWyc8cmVmZXJlbmNlJywgJ2xpYj0nXS5qb2luKCcgJyk7XG5jb25zdCBSRUZFUkVOQ0VfTElCX1JFR19FWFAgPSAvXFwvXFwvXFwvIDxyZWZlcmVuY2UgbGliPVwiKD88TGliPlteXCJdKylcIiBcXC8+L2dtO1xuXG4vLyBBIGJhcmUtc3BlY2lmaWVyIChub24tcmVsYXRpdmUpIHR5cGUtb25seSBpbXBvcnQsIGUuZy4gYGltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7YC5cbmNvbnN0IEJBUkVfVFlQRV9JTVBPUlRfUkVHX0VYUCA9IC9eaW1wb3J0IHR5cGUgKD88Q2xhdXNlPi4rPykgZnJvbSAnKD88U3BlY2lmaWVyPlteLiddW14nXSopJzskL2dtO1xuXG4vLyBBIGJhcmUtc3BlY2lmaWVyIChub24tcmVsYXRpdmUpIGlubGluZSBpbXBvcnQgdHlwZSBub2RlLCBlLmcuIGBpbXBvcnQoXCJ0eXBlLWZlc3RcIikuUHJvbWlzYWJsZWAuXG5jb25zdCBCQVJFX0lOTElORV9JTVBPUlRfVFlQRV9SRUdfRVhQID0gL2ltcG9ydFxcKFwiKD88U3BlY2lmaWVyPlteLlwiXVteXCJdKilcIlxcKS9nO1xuXG5jb25zdCBTVEFUSUNfSU1QT1JUX1JFR19FWFAgPSAvZnJvbSAnKD88SW1wb3J0UGF0aD4uKz8pXFwudHMnOy9nbTtcblxuLy8gSW5saW5lIGltcG9ydC10eXBlIG5vZGVzIChgdHlwZW9mIGltcG9ydCgnLi9mb28udHMnKWApIHByZXNlcnZlIHRoZSBzb3VyY2UgcXVvdGUgc3R5bGUuXG4vLyBIYW5kLWF1dGhvcmVkIGAuZC50c2AgZmlsZXMgZW1pdCBzaW5nbGUgcXVvdGVzOyB0c2MtZ2VuZXJhdGVkIGRlY2xhcmF0aW9ucyBlbWl0IGRvdWJsZSBxdW90ZXMuXG4vLyBDYXB0dXJlIHRoZSBxdW90ZSBhbmQgcmV1c2UgaXQgaW4gdGhlIHJlcGxhY2VtZW50IHNvIGJvdGggc3R5bGVzIGFyZSByZXdyaXR0ZW4uXG5jb25zdCBEWU5BTUlDX0lNUE9SVF9SRUdfRVhQID0gL2ltcG9ydFxcKCg/PFF1b3RlPlsnXCJdKSg/PEltcG9ydFBhdGg+Lis/KVxcLnRzXFxrPFF1b3RlPlxcKS9nbTtcblxuZW51bSBHZW5lcmF0ZUluZGV4UmVzdWx0IHtcbiAgU2tpcHBlZCA9ICdza2lwcGVkJyxcbiAgU3VjY2VzcyA9ICdzdWNjZXNzJ1xufVxuXG5pbnRlcmZhY2UgQnVpbGRMaWJyYXJ5Rm9ybWF0UGFyYW1zIHtcbiAgcmVhZG9ubHkgZm9ybWF0OiBNb2R1bGVGb3JtYXQ7XG4gIHJlYWRvbmx5IGxpYkZpbGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlcHJvY2Vzc1BsdWdpbkZhY3Rvcnk6IChpc0VzbTogYm9vbGVhbikgPT4gUGx1Z2luO1xufVxuXG5pbnRlcmZhY2UgQnVpbGRSZWZlcmVuY2VQYXRoRGlyZWN0aXZlUGFyYW1zIHtcbiAgcmVhZG9ubHkgZGVjbGFyYXRpb25GaWxlUGF0aDogc3RyaW5nO1xuICByZWFkb25seSBleHRlbnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kdWxlRGlyZWN0b3J5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTZXRFeHBvcnRQYXJhbXMge1xuICByZWFkb25seSBleHBvcnRDb25kaXRpb25zOiBQYWNrYWdlSnNvbi5FeHBvcnRDb25kaXRpb25zO1xuICByZWFkb25seSBpc1dpbGRjYXJkOiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VDb25kaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc3JjRm9sZGVyOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUb0Rpc3RQYXRoUGFyYW1zIHtcbiAgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGltcG9ydFBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBhbiBlYXJsaWVyIGJ1aWxkIGxlZnQ6IGBkaXN0L2AsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCB0aGUgYC5kLnRzYCBmaWxlcyBgdHNjYCB3cm90ZVxuICogYmVzaWRlIHRoZSBzb3VyY2VzIChoYW5kLWF1dGhvcmVkIG9uZXMgdW5kZXIgYEB0eXBlc2Agc3RheSksIGFuZCB0aGUgcGVyLXN1YnBhdGggYHBhY2thZ2UuanNvbmAgc3R1YnMuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2xlYW5MaWJyYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBidWlsZENsZWFuKCk7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoYmFzZW5hbWUoZmlsZSkgPT09IFJlcG9QYXRocy5JbmRleFRzIGFzIHN0cmluZykge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgJiYgIWZpbGUuc3BsaXQoJy8nKS5pbmNsdWRlcyhSZXBvUGF0aHMuVHlwZXMpKSB7XG4gICAgICBhd2FpdCBybShqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5DdXJyZW50Rm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICgoYmFzZW5hbWUoZmlsZSkgIT09IFJlcG9QYXRocy5QYWNrYWdlSnNvbiBhcyBzdHJpbmcpIHx8IChmaWxlID09PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCBmaWxlLnN0YXJ0c1dpdGgoUmVwb1BhdGhzLk5vZGVNb2R1bGVzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgcm0oZmlsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgZXZlcnkgc291cmNlIG1vZHVsZSwgdW5idW5kbGVkLCBpbnRvIGBkaXN0L2xpYi9janNgIChgLmNqc2ApIGFuZCBgZGlzdC9saWIvZXNtYCAoYC5tanNgKS5cbiAqXG4gKiBUaGUgb3V0cHV0IGZvbGRlcnMgbXVzdCBhbHJlYWR5IGV4aXN0OyB7QGxpbmsgYnVpbGRMaWJyYXJ5VHlwZXN9IGNyZWF0ZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGJvdGggZm9ybWF0cyBoYXZlIGJlZW4gYnVpbHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZExpYnJhcnkob3B0aW9uczogQnVpbGRMaWJyYXJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgPSAoaXNFc206IGJvb2xlYW4pOiBQbHVnaW4gPT4gcHJlcHJvY2Vzc1BsdWdpbih7IGlzRXNtIH0pIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaWJGaWxlcyA9IGF3YWl0IGdldExpYkZpbGVzKCk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2NqcycsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbiAgYXdhaXQgYnVpbGRMaWJyYXJ5Rm9ybWF0KHsgZm9ybWF0OiAnZXNtJywgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0pO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZWNsYXJhdGlvbnMgd2l0aCBgdHNjIC0tcHJvamVjdCAuL3RzY29uZmlnLnR5cGVzLmpzb25gLCB0aGVuIGNvcGllcyBlYWNoIG9uZSBpbnRvIGBkaXN0L2xpYmAgdHdpY2U6IGFzIGFcbiAqIGAuZC5jdHNgIHdob3NlIHJlbGF0aXZlIGltcG9ydHMgbmFtZSBgLmNqc2AgZmlsZXMgYW5kIHdob3NlIGJhcmUgdHlwZSBpbXBvcnRzIGNhcnJ5IGByZXNvbHV0aW9uLW1vZGU6IGltcG9ydGAsIGFuZFxuICogYXMgYSBgLmQubXRzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5tanNgIGZpbGVzLlxuICpcbiAqIFRoZSBsaWJyYXJ5J3Mgcm9vdCBkZWNsYXJhdGlvbiAoYGxpYnJhcnkudHNgIHdoZXJlIHRoZSBwYWNrYWdlIGhhcyBvbmUsIG90aGVyd2lzZSB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2ApIGNhcnJpZXNcbiAqIGV2ZXJ5IGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZSB0aGUgcGFja2FnZSBuZWVkcywgYW5kIHNvIGRvZXMgYSBgbGlicmFyeS1yZWZlcmVuY2VzYCBkZWNsYXJhdGlvbiBiZXNpZGUgaXQgdGhhdFxuICogY2FycmllcyBub3RoaW5nIGVsc2UuIEV2ZXJ5IG90aGVyIGRlY2xhcmF0aW9uIHJlZmVyZW5jZXMgdGhhdCBvbmUgYnkgcGF0aCwgbmV2ZXIgdGhlIHJvb3Q6IHRoZSByb290IGJhcnJlbFxuICogcmUtZXhwb3J0cyBldmVyeSBtb2R1bGUsIHNvIHJlZmVyZW5jaW5nIGl0IG1hZGUgZWFjaCBzdWJwYXRoIGxvYWQgdGhlIHdob2xlIHBhY2thZ2UsIGFuZCBhIGNvbnN1bWVyIHR5cGUtY2hlY2tpbmdcbiAqIHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgIHRoZW4gbmVlZGVkIGV2ZXJ5IG9wdGlvbmFsIHBlZXIgaW5zdGFsbGVkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiB3cml0dGVuLlxuICogQHRocm93cyBJZiBhIHNvdXJjZSBtb2R1bGUgaXMgbmFtZWQgYGxpYnJhcnktcmVmZXJlbmNlc2AsIHdoaWNoIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgZ2VuZXJhdGVkIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5VHlwZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChleGlzdHNTeW5jKGpvaW4oUmVwb1BhdGhzLlNyYywgYCR7TElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRX0ke1JlcG9QYXRocy5Uc0V4dGVuc2lvbn1gKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNyYy8ke0xJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUV9JHtSZXBvUGF0aHMuVHNFeHRlbnNpb259IGNvbGxpZGVzIHdpdGggdGhlIGdlbmVyYXRlZCBkZWNsYXJhdGlvbiBvZiB0aGUgc2FtZSBuYW1lLmApO1xuICB9XG5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAndHNjJyB9KSwgJy0tcHJvamVjdCcsICcuL3RzY29uZmlnLnR5cGVzLmpzb24nXSk7XG5cbiAgY29uc3QgbGlicmFyeUZpbGVOYW1lID0gZXhpc3RzU3luYyhqb2luKFJlcG9QYXRocy5TcmMsICdsaWJyYXJ5LnRzJykpID8gJ2xpYnJhcnknIDogJ2luZGV4JztcbiAgY29uc3QgYWxsTGlicyA9IGF3YWl0IGNvbGxlY3RBbGxMaWJzKCk7XG4gIGNvbnN0IGFsbFR5cGVzID0gY29sbGVjdEFsbFR5cGVzKCk7XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoYWxsTGlicykgKyBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyhhbGxUeXBlcyk7XG5cbiAgYXdhaXQgbWtkaXIoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcyksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBta2Rpcihqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuQ2pzLCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24pLCBkaXJlY3RpdmVzKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5Fc20sIExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgKyBSZXBvUGF0aHMuRG10c0V4dGVuc2lvbiksIGRpcmVjdGl2ZXMpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoIWZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgfHwgZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5UZXN0SGVscGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGRpcm5hbWUoZmlsZSk7XG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKGZpbGUsIFJlcG9QYXRocy5EdHNFeHRlbnNpb24pO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpLCAndXRmLTgnKTtcblxuICAgIGNvbnN0IGN0c1BhdGggPSBqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuQ2pzLCBmb2xkZXIsIG5hbWUgKyBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgbXRzUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5Fc20sIGZvbGRlciwgbmFtZSArIFJlcG9QYXRocy5EbXRzRXh0ZW5zaW9uKTtcblxuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoY3RzUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobXRzUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgbGV0IGN0c0NvbnRlbnQgPSB0b0N0c0NvbnRlbnQoY29udGVudCk7XG4gICAgbGV0IG10c0NvbnRlbnQgPSB0b010c0NvbnRlbnQoY29udGVudCk7XG5cbiAgICBpZiAobmFtZSA9PT0gbGlicmFyeUZpbGVOYW1lICYmIGZvbGRlciA9PT0gJy4nKSB7XG4gICAgICBjdHNDb250ZW50ID0gZGlyZWN0aXZlcyArIGN0c0NvbnRlbnQ7XG4gICAgICBtdHNDb250ZW50ID0gZGlyZWN0aXZlcyArIG10c0NvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0c0NvbnRlbnQgPSBidWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmUoeyBkZWNsYXJhdGlvbkZpbGVQYXRoOiBjdHNQYXRoLCBleHRlbnNpb246IFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3Rvcnk6IFJlcG9QYXRocy5DanMgfSlcbiAgICAgICAgKyBjdHNDb250ZW50O1xuICAgICAgbXRzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IG10c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeTogUmVwb1BhdGhzLkVzbSB9KVxuICAgICAgICArIG10c0NvbnRlbnQ7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGN0c1BhdGgsIGN0c0NvbnRlbnQpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShtdHNQYXRoLCBtdHNDb250ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2VuZXJhdGVzIHRoZSBgZXhwb3J0c2AgbWFwIG9mIHRoZSBwYWNrYWdlJ3MgYHBhY2thZ2UuanNvbmAgZnJvbSBpdHMgc291cmNlIGZvbGRlcnMsIGFuZCB3cml0ZXMgYSBgcGFja2FnZS5qc29uYFxuICogc3R1YiBwZXIgc3VicGF0aCBmb3IgcmVzb2x2ZXJzIHRoYXQgZG8gbm90IHJlYWQgYGV4cG9ydHNgLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1hcCBpcyBjdXJyZW50LlxuICogQHRocm93cyBJZiB0aGUgbWFwIGNoYW5nZWQsIHNvIHRoZSBjaGFuZ2UgZ2V0cyByZXZpZXdlZCBhbmQgY29tbWl0dGVkIHJhdGhlciB0aGFuIHNoaXBwZWQgdW5zZWVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0cyhvcHRpb25zOiBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc291cmNlQ29uZGl0aW9uIH0gPSBvcHRpb25zO1xuICBjb25zdCBzcmNGb2xkZXJzOiBzdHJpbmdbXSA9IFtSZXBvUGF0aHMuU3JjXTtcblxuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gam9pbihkaXJlbnQucGFyZW50UGF0aCwgZGlyZW50Lm5hbWUpO1xuXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoUmVwb1BhdGhzLlN0eWxlcykgfHwgcGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuVGVzdEhlbHBlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzcmNGb2xkZXJzLnB1c2gocGF0aCk7XG4gIH1cblxuICBzcmNGb2xkZXJzLnNvcnQoKTtcblxuICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgYXdhaXQgZWRpdFBhY2thZ2VKc29uKGFzeW5jIChwYWNrYWdlSnNvbikgPT4ge1xuICAgIGNvbnN0IG9sZEV4cG9ydHMgPSBwYWNrYWdlSnNvbi5leHBvcnRzO1xuICAgIGNvbnN0IGV4cG9ydENvbmRpdGlvbnM6IFBhY2thZ2VKc29uLkV4cG9ydENvbmRpdGlvbnMgPSB7fTtcbiAgICBwYWNrYWdlSnNvbi5leHBvcnRzID0gZXhwb3J0Q29uZGl0aW9ucztcbiAgICBmb3IgKGNvbnN0IHNyY0ZvbGRlciBvZiBzcmNGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiBmYWxzZSwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSk7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiB0cnVlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICB9XG5cbiAgICBpc0NoYW5nZWQgPSAhaXNEZWVwRXF1YWwob2xkRXhwb3J0cywgcGFja2FnZUpzb24uZXhwb3J0cyk7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IGNoYW5nZWQgaW4gdGhlIGBlZGl0UGFja2FnZUpzb25gLCBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgZXhwb3J0cyBoYXZlIGNoYW5nZWQuIFBsZWFzZSByZXZpZXcgdGhlIGNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLicpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGBpbmRleC50c2AgYmFycmVsIGluIGV2ZXJ5IHNvdXJjZSBmb2xkZXIgdGhhdCBoYXMgc29tZXRoaW5nIHRvIGV4cG9ydCwgcmUtZXhwb3J0aW5nIGVhY2ggbW9kdWxlIGFuZFxuICogZWFjaCBzdWItYmFycmVsIHVuZGVyIGl0cyBvd24gbmFtZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJhcnJlbHMgaGF2ZSBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlJbmRleCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2VuZXJhdGVJbmRleChSZXBvUGF0aHMuU3JjKTtcbn1cblxuLyoqXG4gKiBSdW5zIGVhY2ggbmFtZWQgbnBtIHNjcmlwdCB0aGUgcGFja2FnZSBkZWZpbmVzLCBpbiBvcmRlciwgc2tpcHBpbmcgdGhlIG9uZXMgaXQgZG9lcyBub3QgZGVmaW5lLlxuICpcbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBucG0gc2NyaXB0IG5hbWVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHN0ZXAgaGFzIHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHMoc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gTElCUkFSWV9CVUlMRF9TVEVQUyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICBhd2FpdCBucG1SdW5PcHRpb25hbChzdGVwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMobGliczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7XG4gICAgbGlic1xuICAgICAgLm1hcCgobGliKSA9PiBgLy8vICR7UkVGRVJFTkNFX0xJQl9ESVJFQ1RJVkV9XCIke2xpYn1cIiAvPmApXG4gICAgICAuam9pbignXFxuJylcbiAgfVxcbmA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsUmVmZXJlbmNlVHlwZXNEaXJlY3RpdmVzKHR5cGVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlcy5sZW5ndGggPT09IDBcbiAgICA/ICcnXG4gICAgOiBgJHtcbiAgICAgIHR5cGVzXG4gICAgICAgIC5tYXAoKHR5cGUpID0+IGAvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIiR7dHlwZX1cIiAvPmApXG4gICAgICAgIC5qb2luKCdcXG4nKVxuICAgIH1cXG5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZExpYnJhcnlGb3JtYXQocGFyYW1zOiBCdWlsZExpYnJhcnlGb3JtYXRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBmb3JtYXQsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9ID0gcGFyYW1zO1xuICBjb25zdCBleHRlbnNpb24gPSBmb3JtYXQgPT09ICdjanMnID8gUmVwb1BhdGhzLkNqc0V4dGVuc2lvbiA6IFJlcG9QYXRocy5NanNFeHRlbnNpb247XG4gIGNvbnN0IGJ1aWxkT3B0aW9uczogQnVpbGRPcHRpb25zID0ge1xuICAgIC8vIEV4cGxpY2l0LCBiZWNhdXNlIGVzYnVpbGQgb3RoZXJ3aXNlIHRha2VzIHRoZSBmb2xkZXIgaXRzIHNlcnZpY2UgcHJvY2VzcyBzdGFydGVkIGluLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGVzYnVpbGQncyBvd24gb3B0aW9uIG5hbWUuXG4gICAgYWJzV29ya2luZ0RpcjogcHJvY2Vzcy5jd2QoKSxcbiAgICBiYW5uZXI6IHtcbiAgICAgIGpzOiBMSUJSQVJZX0JBTk5FUlxuICAgIH0sXG4gICAgYnVuZGxlOiBmYWxzZSxcbiAgICBlbnRyeVBvaW50czogbGliRmlsZXMsXG4gICAgZm9ybWF0LFxuICAgIGxvZ0xldmVsOiAnaW5mbycsXG4gICAgb3V0ZGlyOiBqb2luKFJlcG9QYXRocy5EaXN0TGliLCBmb3JtYXQpLFxuICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgcGx1Z2luczogW1xuICAgICAgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkoZm9ybWF0ID09PSAnZXNtJyksXG4gICAgICBmaXhFc21QbHVnaW4oKSxcbiAgICAgIGNoYW5nZUV4dGVuc2lvblBsdWdpbihleHRlbnNpb24pXG4gICAgXSxcbiAgICBzb3VyY2VtYXA6ICdpbmxpbmUnLFxuICAgIHRhcmdldDogJ0VTMjAyMicsXG4gICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgd3JpdGU6IGZhbHNlXG4gIH07XG5cbiAgY29uc3QgYnVpbGRDb250ZXh0ID0gYXdhaXQgY29udGV4dChidWlsZE9wdGlvbnMpO1xuICB0cnkge1xuICAgIGF3YWl0IGJ1aWxkQ29udGV4dC5yZWJ1aWxkKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgYnVpbGRDb250ZXh0LmRpc3Bvc2UoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmUocGFyYW1zOiBCdWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IGRlY2xhcmF0aW9uRmlsZVBhdGgsIGV4dGVuc2lvbiwgbW9kdWxlRGlyZWN0b3J5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGxpYnJhcnlGaWxlUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIG1vZHVsZURpcmVjdG9yeSwgTElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRSArIGV4dGVuc2lvbik7XG4gIGxldCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZU5hdGl2ZShkaXJuYW1lKGRlY2xhcmF0aW9uRmlsZVBhdGgpLCBsaWJyYXJ5RmlsZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICByZWxhdGl2ZVBhdGggPSBgLi8ke3JlbGF0aXZlUGF0aH1gO1xuICB9XG4gIHJldHVybiBgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIiR7cmVsYXRpdmVQYXRofVwiIC8+XFxuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29sbGVjdEFsbExpYnMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAvLyBUaGUgUkVTT0xWRUQgb3B0aW9ucywgYmVjYXVzZSBhIHBhY2thZ2UncyBgdHNjb25maWcuanNvbmAgaW5oZXJpdHMgYGxpYmAgZnJvbSB0aGUgc2hhcmVkIGJhc2UuIFRoZSByZXNvbHZlZFxuICAvLyBuYW1lcyBhcmUgZmlsZSBuYW1lcyAoYGxpYi5kb20uaXRlcmFibGUuZC50c2ApLCBzbyB0aGV5IGFyZSBtYXBwZWQgYmFjayBvbnRvIHRoZSBuYW1lcyBhIGRpcmVjdGl2ZSB0YWtlcy5cbiAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24pO1xuICBjb25zdCBsaWJzID0gbmV3IFNldCgob3B0aW9ucy5saWIgPz8gW10pLm1hcCgobGliKSA9PiBsaWIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ebGliXFwuLywgJycpLnJlcGxhY2UoL1xcLmRcXC50cyQvLCAnJykpKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKCcudHMnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29udGVudCA9IHJlYWRGaWxlU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpLCAndXRmLTgnKTtcbiAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGFsd2F5cyBjYXB0dXJlcyBpdHMgb25lIGdyb3VwLCBzbyBubyBmYWxsYmFjayBmb3IgYSBtaXNzaW5nIG9uZSBpcyBuZWVkZWQuXG4gICAgZm9yIChjb25zdCBbLCBsaWJdIG9mIHNvdXJjZUNvbnRlbnQubWF0Y2hBbGwoUkVGRVJFTkNFX0xJQl9SRUdfRVhQKSkge1xuICAgICAgbGlicy5hZGQoU3RyaW5nKGxpYikudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5saWJzXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RBbGxUeXBlcygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgb3B0aW9ucyB9ID0gcGFyc2VUc0NvbmZpZyhSZXBvUGF0aHMuVHNDb25maWdKc29uKTtcbiAgcmV0dXJuIChvcHRpb25zLnR5cGVzID8/IFtdKVxuICAgIC5maWx0ZXIoKHR5cGUpID0+IERFQ0xBUkFUSU9OX1JFRkVSRU5DRV9UWVBFUy5oYXModHlwZSkpXG4gICAgLnNvcnQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVJbmRleChmb2xkZXI6IHN0cmluZyk6IFByb21pc2U8R2VuZXJhdGVJbmRleFJlc3VsdD4ge1xuICBjb25zdCBkaXJlbnRzID0gYXdhaXQgcmVhZGRpclBvc2l4KGZvbGRlciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICBjb25zdCBtYXliZUxpbmVzID0gYXdhaXQgYXN5bmNNYXAoZGlyZW50cywgKGRpcmVudCkgPT4gaGFuZGxlSW5kZXhEaXJlbnQoZm9sZGVyLCBkaXJlbnQpKTtcbiAgY29uc3QgbGluZXMgPSBtYXliZUxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZSAhPT0gdW5kZWZpbmVkKTtcblxuICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEdlbmVyYXRlSW5kZXhSZXN1bHQuU2tpcHBlZDtcbiAgfVxuXG4gIGF3YWl0IGdlbmVyYXRlKGpvaW4oZm9sZGVyLCBSZXBvUGF0aHMuSW5kZXhUcyksIGxpbmVzKTtcbiAgcmV0dXJuIEdlbmVyYXRlSW5kZXhSZXN1bHQuU3VjY2Vzcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGliRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBsZXQgZmlsZXMgPSBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpKTtcbiAgcmV0dXJuIGZpbGVzLmZpbHRlcigoZmlsZSkgPT5cbiAgICBmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5Uc0V4dGVuc2lvbikgJiYgIWZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgJiYgIWZpbGUuZW5kc1dpdGgoJy50ZXN0LnRzJylcbiAgICAmJiAhZmlsZS5pbmNsdWRlcyhgLyR7UmVwb1BhdGhzLlRlc3RIZWxwZXJzfS9gKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVJbmRleERpcmVudChmb2xkZXI6IHN0cmluZywgZGlyZW50OiBEaXJlbnQpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoaXNFeGNsdWRlZEZyb21JbmRleChmb2xkZXIsIGRpcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc291cmNlRmlsZTogc3RyaW5nO1xuICBsZXQgbmFtZTogc3RyaW5nO1xuICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUluZGV4KGpvaW4oZm9sZGVyLCBkaXJlbnQubmFtZSkpO1xuICAgIGlmIChyZXN1bHQgIT09IEdlbmVyYXRlSW5kZXhSZXN1bHQuU3VjY2Vzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShqb2luKGRpcmVudC5uYW1lLCBSZXBvUGF0aHMuSW5kZXhUcykpO1xuICAgIG5hbWUgPSBkaXJlbnQubmFtZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBleHRuYW1lKGRpcmVudC5uYW1lKTtcbiAgICBuYW1lID0gYmFzZW5hbWUoZGlyZW50Lm5hbWUsIGV4dGVuc2lvbik7XG4gICAgc291cmNlRmlsZSA9IG5vcm1hbGl6ZUlmUmVsYXRpdmUoZGlyZW50Lm5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGBleHBvcnQgKiBhcyAnJHtuYW1lfScgZnJvbSAnJHtzb3VyY2VGaWxlfSc7YDtcbn1cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSB8fCBuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpIHx8IG5hbWUgPT09ICdzZXR1cC50cycgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyOiBzdHJpbmcsIGRpcmVudDogRGlyZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JlcG9QYXRocy5JbmRleFRzLCBSZXBvUGF0aHMuVHlwZXMsIFJlcG9QYXRocy5TdHlsZXMsIFJlcG9QYXRocy5UZXN0SGVscGVyc107XG4gIGNvbnN0IGlzRXhjbHVkZWRFbnRyeSA9IGV4Y2x1ZGVkTmFtZXMuaW5jbHVkZXMoZGlyZW50Lm5hbWUpIHx8IGRpcmVudC5uYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pIHx8IGZvbGRlci5zcGxpdCgnLycpLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIHJldHVybiBpc0V4Y2x1ZGVkRW50cnkgfHwgKGRpcmVudC5pc0ZpbGUoKSAmJiBpc0V4Y2x1ZGVkRmlsZU5hbWUoZGlyZW50Lm5hbWUpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0RXhwb3J0KHBhcmFtczogU2V0RXhwb3J0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZXhwb3J0Q29uZGl0aW9ucywgaXNXaWxkY2FyZCwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgaW1wb3J0UGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHNyY0ZvbGRlcixcbiAgICByZXBsYWNlcjogUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIsXG4gICAgc2VhcmNoVmFsdWU6IFJlcG9QYXRocy5TcmNcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblBhdGggPSBpc1dpbGRjYXJkID8gYCR7aW1wb3J0UGF0aH0vJHtSZXBvUGF0aHMuQW55fWAgOiBpbXBvcnRQYXRoO1xuICBjb25zdCBkbXRzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5Fc20sIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RG10cyA6IFJlcG9QYXRocy5JbmRleERtdHMgfSk7XG4gIGNvbnN0IGRjdHNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkNqcywgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlEY3RzIDogUmVwb1BhdGhzLkluZGV4RGN0cyB9KTtcbiAgY29uc3QgZG10c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRtdHNQYXRoKTtcbiAgY29uc3QgZGN0c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRjdHNQYXRoKTtcblxuICBpZiAoIWlzV2lsZGNhcmQgJiYgIWV4aXN0c1N5bmMoZGN0c1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNUeXBlc09ubHkgPSBpbXBvcnRQYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIGNvbnN0IG1qc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueU1qcyA6IFJlcG9QYXRocy5JbmRleE1qcyB9KTtcbiAgY29uc3QgY2pzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55Q2pzIDogUmVwb1BhdGhzLkluZGV4Q2pzIH0pO1xuXG4gIGlmIChpc1R5cGVzT25seSkge1xuICAgIGV4cG9ydENvbmRpdGlvbnNbY29uZGl0aW9uUGF0aF0gPSB7XG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGhcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgaW1wb3J0UGF0aCwgaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlUcyA6IFJlcG9QYXRocy5JbmRleFRzKSk7XG5cbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgICAvLyBGaXJzdCwgc28gaXQgd2lucyB3aGVyZXZlciBpdCBpcyBzZXQ6IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LlxuICAgICAgLi4uKHNvdXJjZUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgW3NvdXJjZUNvbmRpdGlvbl06IHNvdXJjZVBhdGggfSksXG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBtanNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGgsXG4gICAgICAgIGRlZmF1bHQ6IGNqc1BhdGhcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbXBvcnRQYXRoID09PSBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV2lsZGNhcmQpIHtcbiAgICBhd2FpdCB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihcbiAgICAgIGltcG9ydFBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzOiByZWxhdGl2ZShpbXBvcnRQYXRoLCBkY3RzUGF0aCkgfVxuICAgICAgICA6IHsgbWFpbjogcmVsYXRpdmUoaW1wb3J0UGF0aCwgY2pzUGF0aCksIG1vZHVsZTogcmVsYXRpdmUoaW1wb3J0UGF0aCwgbWpzUGF0aCksIHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGN0c0ZvbGRlclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgcGFja2FnZUpzb25Gb2xkZXJQYXRoID0gam9pbihpbXBvcnRQYXRoLCBuYW1lKTtcbiAgICBjb25zdCB0eXBlcyA9IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSk7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBwYWNrYWdlSnNvbkZvbGRlclBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgbWFpbjogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRjdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLkNqc0V4dGVuc2lvbikpLFxuICAgICAgICAgIG1vZHVsZTogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRtdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLk1qc0V4dGVuc2lvbikpLFxuICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgIHR5cGVzXG4gICAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ3RzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdmcm9tIFxcJyQ8SW1wb3J0UGF0aD4uY2pzXFwnOycsXG4gICAgc2VhcmNoVmFsdWU6IFNUQVRJQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPEltcG9ydFBhdGg+LmNqcyQ8UXVvdGU+KScsXG4gICAgc2VhcmNoVmFsdWU6IERZTkFNSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG5cbiAgLy8gQSBgLmQuY3RzYCBmaWxlIGlzIGEgQ29tbW9uSlMgbW9kdWxlLiBUeXBlLW9ubHkgaW1wb3J0cyBvZiBhIGJhcmUgc3BlY2lmaWVyIHJlc29sdmluZyB0byBhblxuICAvLyBFU00tb25seSBwYWNrYWdlIG5lZWQgYSBgcmVzb2x1dGlvbi1tb2RlYCBhdHRyaWJ1dGUsIGVsc2UgYHRzY2AgcmVwb3J0cyBUUzE1NDEgLyBUUzE1NDIuXG4gIC8vIFBhc3NpbmcgYCdpbXBvcnQnYCBpcyB2YWxpZCBmb3IgQ29tbW9uSlMgdGFyZ2V0cyB0b28sIHNvIGV2ZXJ5IGJhcmUgc3BlY2lmaWVyIHJlY2VpdmVzIGl0LlxuICAvLyBUaGUgRVNNIGAuZC5tdHNgIG5lZWRzIG5vIHN1Y2ggYXR0cmlidXRlLCBzbyB0aGlzIHRyYW5zZm9ybSBydW5zIG9uIENvbW1vbkpTIGNvbnRlbnQgb25seS5cbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQgdHlwZSAkPENsYXVzZT4gZnJvbSBcXCckPFNwZWNpZmllcj5cXCcgd2l0aCB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH07JyxcbiAgICBzZWFyY2hWYWx1ZTogQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY3RzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydChcIiQ8U3BlY2lmaWVyPlwiLCB7IHdpdGg6IHsgXFwncmVzb2x1dGlvbi1tb2RlXFwnOiBcXCdpbXBvcnRcXCcgfSB9KScsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGlzdFBhdGgocGFyYW1zOiBUb0Rpc3RQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLmltcG9ydFBhdGgsIHBhcmFtcy5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRvTXRzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtdHNDb250ZW50ID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY29udGVudCxcbiAgICByZXBsYWNlcjogJ2Zyb20gXFwnJDxJbXBvcnRQYXRoPi5tanNcXCc7JyxcbiAgICBzZWFyY2hWYWx1ZTogU1RBVElDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogbXRzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydCgkPFF1b3RlPiQ8SW1wb3J0UGF0aD4ubWpzJDxRdW90ZT4pJyxcbiAgICBzZWFyY2hWYWx1ZTogRFlOQU1JQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oZm9sZGVyOiBzdHJpbmcsIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBta2Rpcihmb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUpzb24oam9pbihmb2xkZXIsIFJlcG9QYXRocy5QYWNrYWdlSnNvbiksIHBhY2thZ2VKc29uKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsbUJBQW1CO0FBQzVCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsZUFBZTtBQUN4QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVksc0JBQXNCO0FBQzNDLE9BQU8sYUFBYTtBQUlwQixTQUFTLGtCQUFrQjtBQUMzQixTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLHdCQUF3QjtBQUNq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
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5LWJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFN5bWJvbCBhcyBUc1N5bWJvbCxcbiAgVHlwZUNoZWNrZXJcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUsXG4gIHJlc29sdmUgYXMgcmVzb2x2ZU5hdGl2ZVxufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIGZvckVhY2hDaGlsZCxcbiAgaXNJZGVudGlmaWVyLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIFN5bWJvbEZsYWdzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuXG5pbXBvcnQgeyBidWlsZENsZWFuIH0gZnJvbSAnLi9idWlsZC50cyc7XG5pbXBvcnQgeyBjaGFuZ2VFeHRlbnNpb25QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9maXgtZXNtLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcGFyc2VUc0NvbmZpZyB9IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnLi9mcy50cyc7XG5pbXBvcnQgeyB3cml0ZUpzb24gfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgbnBtUnVuT3B0aW9uYWwgfSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgZWRpdFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogVGhlIGJhbm5lciBldmVyeSBlbWl0dGVkIGxpYnJhcnkgbW9kdWxlIG9wZW5zIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JBTk5FUiA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBUaGUgc3RlcHMgb2YgYSBsaWJyYXJ5IGJ1aWxkLCBpbiB0aGUgb3JkZXIge0BsaW5rIHJ1bkJ1aWxkU3RlcHN9IHJ1bnMgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IExJQlJBUllfQlVJTERfU1RFUFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnYnVpbGQ6Y2xlYW4nLFxuICAnYnVpbGQ6Z2VuZXJhdGUtaW5kZXgnLFxuICAnYnVpbGQ6Y29tcGlsZScsXG4gICdidWlsZDp0eXBlcycsXG4gICdidWlsZDp2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnLFxuICAnYnVpbGQ6bGliJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWV4cG9ydHMnXG5dO1xuXG4vKipcbiAqIFRoZSBleHBvcnQgY29uZGl0aW9uIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCB3b3Jrc3BhY2UgbWFwcyBldmVyeSBzdWJwYXRoIG9udG8gaXRzIFR5cGVTY3JpcHQgc291cmNlIHdpdGgsIHNvIGFcbiAqIHBhY2thZ2UgdGhlcmUgY2FuIGltcG9ydCBhIHNpYmxpbmcgcGFja2FnZSdzIHNvdXJjZSBiZWZvcmUgYW55dGhpbmcgaXMgYnVpbHQuIFBhc3MgaXQgdG9cbiAqIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfSB0aHJvdWdoIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucy5zb3VyY2VDb25kaXRpb259LlxuICovXG5leHBvcnQgY29uc3QgU09VUkNFX0NPTkRJVElPTiA9ICdAbW5hb3Vtb3Yvc291cmNlJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYnVpbGRMaWJyYXJ5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHByZXByb2Nlc3MgcGx1Z2luIGZvciBvbmUgb3V0cHV0IGZvcm1hdC4gRGVmYXVsdHMgdG8gdGhlIGdlbmVyaWMgb25lLCB3aGljaCBjYXJyaWVzIG5vXG4gICAqIGVudmlyb25tZW50LXNwZWNpZmljIGByZXF1aXJlYCBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5PzogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlTGlicmFyeUV4cG9ydHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIGV4cG9ydCBjb25kaXRpb24gdG8gcHV0IGZpcnN0IGluIGV2ZXJ5IGVudHJ5LCBtYXBwaW5nIHRoZSBzdWJwYXRoIG9udG8gaXRzIFR5cGVTY3JpcHQgc291cmNlLiBPbmx5IGFcbiAgICogcmVwb3NpdG9yeSBob2xkaW5nIHNldmVyYWwgcGFja2FnZXMgdGhhdCBpbXBvcnQgZWFjaCBvdGhlciBuZWVkcyBvbmU7IG5vdGhpbmcgb3V0c2lkZSBpdCBzZXRzIHRoZSBjb25kaXRpb24sIGFuZFxuICAgKiB0aGUgc291cmNlcyBpdCBwb2ludHMgYXQgZG8gbm90IHNoaXAsIHNvIHRoZSBwdWJsaXNoIGhhcyB0byBzdHJpcCBpdCBhZ2Fpbi4gT21pdHRlZCwgdGhlIG1hcCBoYXMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUNvbmRpdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBNb2R1bGVGb3JtYXQgPSAnY2pzJyB8ICdlc20nO1xuXG5jb25zdCBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMgPSBuZXcgU2V0KFsnbm9kZSddKTtcblxuLy8gVGhlIGxpYnMgdGhhdCBkZXNjcmliZSBhIGhvc3QncyBnbG9iYWxzIHJhdGhlciB0aGFuIHRoZSBsYW5ndWFnZSwgd2hpY2ggY29uc3VtZXJzIGNvbmZsaWN0IG92ZXIuIEVhY2ggZGVjbGFyYXRpb25cbi8vIGdldHMgdGhlIG9uZXMgaXQgdXNlczsgZXZlcnkgb3RoZXIgbGliIGlzIHNoYXJlZCB0aHJvdWdoIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLlxuY29uc3QgRU5WSVJPTk1FTlRfTElCX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnZG9tJywgJ3NjcmlwdGhvc3QnLCAnd2Vid29ya2VyJ107XG5jb25zdCBOT0RFX1RZUEVTX1BBVEhfU0VHTUVOVCA9ICcvbm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlLyc7XG5jb25zdCBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUCA9IC9cXC9ub2RlX21vZHVsZXNcXC9AdHlwZXNjcmlwdFxcL2xpYi0oPzxMaWI+W14vXSspXFwvKD88U3ViTGliPi4rKVxcLmRcXC50cyQvO1xuXG4vLyBUaGUgZGVjbGFyYXRpb24gdGhhdCBjYXJyaWVzIG9ubHkgdGhlIGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZXMuIEV2ZXJ5IGRlY2xhcmF0aW9uIGJ1dCB0aGUgcm9vdCBvbmUgcmVmZXJlbmNlc1xuLy8gaXQsIHJhdGhlciB0aGFuIHRoZSByb290IGJhcnJlbCwgd2hpY2ggd291bGQgbG9hZCBldmVyeSBtb2R1bGUgb2YgdGhlIHBhY2thZ2UsIG9wdGlvbmFsIHBlZXJzJyB0eXBlcyBpbmNsdWRlZC5cbmNvbnN0IExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgPSAnbGlicmFyeS1yZWZlcmVuY2VzJztcbi8vIFNwZWxsZWQgYXBhcnQgb24gcHVycG9zZToge0BsaW5rIGNvbGxlY3RBbGxMaWJzfSBzY2FucyBldmVyeSBzb3VyY2UgZmlsZSBvZiB0aGUgcGFja2FnZSBiZWluZyBidWlsdCBmb3IgdGhlXG4vLyBkaXJlY3RpdmUsIHRoaXMgb25lIGluY2x1ZGVkLCBzbyBhIGxpdGVyYWwgb25lIGhlcmUgd291bGQgYmUgcmVhZCBhcyBhIGxpYiB0aGlzIHBhY2thZ2UgbmVlZHMuXG5jb25zdCBSRUZFUkVOQ0VfTElCX0RJUkVDVElWRSA9IFsnPHJlZmVyZW5jZScsICdsaWI9J10uam9pbignICcpO1xuY29uc3QgUkVGRVJFTkNFX0xJQl9SRUdfRVhQID0gL1xcL1xcL1xcLyA8cmVmZXJlbmNlIGxpYj1cIig/PExpYj5bXlwiXSspXCIgXFwvPi9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSB0eXBlLW9ubHkgaW1wb3J0LCBlLmcuIGBpbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO2AuXG5jb25zdCBCQVJFX1RZUEVfSU1QT1JUX1JFR19FWFAgPSAvXmltcG9ydCB0eXBlICg/PENsYXVzZT4uKz8pIGZyb20gJyg/PFNwZWNpZmllcj5bXi4nXVteJ10qKSc7JC9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSBpbmxpbmUgaW1wb3J0IHR5cGUgbm9kZSwgZS5nLiBgaW1wb3J0KFwidHlwZS1mZXN0XCIpLlByb21pc2FibGVgLlxuY29uc3QgQkFSRV9JTkxJTkVfSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9pbXBvcnRcXChcIig/PFNwZWNpZmllcj5bXi5cIl1bXlwiXSopXCJcXCkvZztcblxuY29uc3QgU1RBVElDX0lNUE9SVF9SRUdfRVhQID0gL2Zyb20gJyg/PEltcG9ydFBhdGg+Lis/KVxcLnRzJzsvZ207XG5cbi8vIElubGluZSBpbXBvcnQtdHlwZSBub2RlcyAoYHR5cGVvZiBpbXBvcnQoJy4vZm9vLnRzJylgKSBwcmVzZXJ2ZSB0aGUgc291cmNlIHF1b3RlIHN0eWxlLlxuLy8gSGFuZC1hdXRob3JlZCBgLmQudHNgIGZpbGVzIGVtaXQgc2luZ2xlIHF1b3RlczsgdHNjLWdlbmVyYXRlZCBkZWNsYXJhdGlvbnMgZW1pdCBkb3VibGUgcXVvdGVzLlxuLy8gQ2FwdHVyZSB0aGUgcXVvdGUgYW5kIHJldXNlIGl0IGluIHRoZSByZXBsYWNlbWVudCBzbyBib3RoIHN0eWxlcyBhcmUgcmV3cml0dGVuLlxuY29uc3QgRFlOQU1JQ19JTVBPUlRfUkVHX0VYUCA9IC9pbXBvcnRcXCgoPzxRdW90ZT5bJ1wiXSkoPzxJbXBvcnRQYXRoPi4rPylcXC50c1xcazxRdW90ZT5cXCkvZ207XG5cbmVudW0gR2VuZXJhdGVJbmRleFJlc3VsdCB7XG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG4gIFN1Y2Nlc3MgPSAnc3VjY2Vzcydcbn1cblxuaW50ZXJmYWNlIEFkZEVudmlyb25tZW50R2xvYmFsc1BhcmFtcyB7XG4gIHJlYWRvbmx5IGxpYnM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBwcm9ncmFtOiBQcm9ncmFtO1xuICByZWFkb25seSBzeW1ib2w6IFRzU3ltYm9sO1xuICByZWFkb25seSB0eXBlczogU2V0PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBCdWlsZExpYnJhcnlGb3JtYXRQYXJhbXMge1xuICByZWFkb25seSBmb3JtYXQ6IE1vZHVsZUZvcm1hdDtcbiAgcmVhZG9ubHkgbGliRmlsZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeTogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbmludGVyZmFjZSBCdWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmVQYXJhbXMge1xuICByZWFkb25seSBkZWNsYXJhdGlvbkZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXNQYXJhbXMge1xuICByZWFkb25seSBhdmFpbGFibGVUeXBlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU2V0RXhwb3J0UGFyYW1zIHtcbiAgcmVhZG9ubHkgZXhwb3J0Q29uZGl0aW9uczogUGFja2FnZUpzb24uRXhwb3J0Q29uZGl0aW9ucztcbiAgcmVhZG9ubHkgaXNXaWxkY2FyZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlQ29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNyY0ZvbGRlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVG9EaXN0UGF0aFBhcmFtcyB7XG4gIHJlYWRvbmx5IGZvcm1hdDogc3RyaW5nO1xuICByZWFkb25seSBpbXBvcnRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgYW4gZWFybGllciBidWlsZCBsZWZ0OiBgZGlzdC9gLCB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2AgYmFycmVscywgdGhlIGAuZC50c2AgZmlsZXMgYHRzY2Agd3JvdGVcbiAqIGJlc2lkZSB0aGUgc291cmNlcyAoaGFuZC1hdXRob3JlZCBvbmVzIHVuZGVyIGBAdHlwZXNgIHN0YXkpLCBhbmQgdGhlIHBlci1zdWJwYXRoIGBwYWNrYWdlLmpzb25gIHN0dWJzLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBldmVyeXRoaW5nIGhhcyBiZWVuIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsZWFuTGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRDbGVhbigpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKGJhc2VuYW1lKGZpbGUpID09PSBSZXBvUGF0aHMuSW5kZXhUcyBhcyBzdHJpbmcpIHtcbiAgICAgIGF3YWl0IHJtKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pICYmICFmaWxlLnNwbGl0KCcvJykuaW5jbHVkZXMoUmVwb1BhdGhzLlR5cGVzKSkge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuQ3VycmVudEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoKGJhc2VuYW1lKGZpbGUpICE9PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCAoZmlsZSA9PT0gUmVwb1BhdGhzLlBhY2thZ2VKc29uIGFzIHN0cmluZykgfHwgZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5Ob2RlTW9kdWxlcykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHJtKGZpbGUpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGV2ZXJ5IHNvdXJjZSBtb2R1bGUsIHVuYnVuZGxlZCwgaW50byBgZGlzdC9saWIvY2pzYCAoYC5janNgKSBhbmQgYGRpc3QvbGliL2VzbWAgKGAubWpzYCkuXG4gKlxuICogVGhlIG91dHB1dCBmb2xkZXJzIG11c3QgYWxyZWFkeSBleGlzdDsge0BsaW5rIGJ1aWxkTGlicmFyeVR5cGVzfSBjcmVhdGVzIHRoZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYnVpbGQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBib3RoIGZvcm1hdHMgaGF2ZSBiZWVuIGJ1aWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5KG9wdGlvbnM6IEJ1aWxkTGlicmFyeU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5ID0gKGlzRXNtOiBib29sZWFuKTogUGx1Z2luID0+IHByZXByb2Nlc3NQbHVnaW4oeyBpc0VzbSB9KSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbGliRmlsZXMgPSBhd2FpdCBnZXRMaWJGaWxlcygpO1xuICBhd2FpdCBidWlsZExpYnJhcnlGb3JtYXQoeyBmb3JtYXQ6ICdjanMnLCBsaWJGaWxlcywgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgfSk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2VzbScsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZGVjbGFyYXRpb25zIHdpdGggYHRzYyAtLXByb2plY3QgLi90c2NvbmZpZy50eXBlcy5qc29uYCwgdGhlbiBjb3BpZXMgZWFjaCBvbmUgaW50byBgZGlzdC9saWJgIHR3aWNlOiBhcyBhXG4gKiBgLmQuY3RzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5janNgIGZpbGVzIGFuZCB3aG9zZSBiYXJlIHR5cGUgaW1wb3J0cyBjYXJyeSBgcmVzb2x1dGlvbi1tb2RlOiBpbXBvcnRgLCBhbmRcbiAqIGFzIGEgYC5kLm10c2Agd2hvc2UgcmVsYXRpdmUgaW1wb3J0cyBuYW1lIGAubWpzYCBmaWxlcy5cbiAqXG4gKiBUaGUgbGlicmFyeSdzIHJvb3QgZGVjbGFyYXRpb24gKGBsaWJyYXJ5LnRzYCB3aGVyZSB0aGUgcGFja2FnZSBoYXMgb25lLCBvdGhlcndpc2UgdGhlIGdlbmVyYXRlZCBgaW5kZXgudHNgKSBjYXJyaWVzXG4gKiBldmVyeSBgbGliYCBhbmQgYHR5cGVzYCByZWZlcmVuY2UgdGhlIHBhY2thZ2UgbmVlZHMuIEV2ZXJ5IG90aGVyIGRlY2xhcmF0aW9uIHJlZmVyZW5jZXMgYSBgbGlicmFyeS1yZWZlcmVuY2VzYFxuICogZGVjbGFyYXRpb24gYmVzaWRlIGl0IGJ5IHBhdGgsIG5ldmVyIHRoZSByb290OiB0aGUgcm9vdCBiYXJyZWwgcmUtZXhwb3J0cyBldmVyeSBtb2R1bGUsIHNvIHJlZmVyZW5jaW5nIGl0IG1hZGUgZWFjaFxuICogc3VicGF0aCBsb2FkIHRoZSB3aG9sZSBwYWNrYWdlLCBhbmQgYSBjb25zdW1lciB0eXBlLWNoZWNraW5nIHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgIHRoZW4gbmVlZGVkIGV2ZXJ5IG9wdGlvbmFsXG4gKiBwZWVyIGluc3RhbGxlZC5cbiAqXG4gKiBgbGlicmFyeS1yZWZlcmVuY2VzYCBjYXJyaWVzIG9ubHkgdGhlIGxpYnMgdGhhdCBkZXNjcmliZSB0aGUgbGFuZ3VhZ2UgKGBlczIwMjJgLCBgZXNuZXh0LmRpc3Bvc2FibGVgKSwgd2hpY2ggbm9cbiAqIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgb25lcyB0aGF0IGRlc2NyaWJlIGEgaG9zdCAoYGRvbWAsIGBkb20uaXRlcmFibGVgLCBgd2Vid29ya2VyYCkgYW5kIGB0eXBlcz1cIm5vZGVcImAgZ29cbiAqIG9ubHkgaW50byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgbmFtZSBvbmUgb2YgdGhlaXIgZ2xvYmFscywgZm91bmQgYnkgcmVzb2x2aW5nIGV2ZXJ5IG5hbWUgaW4gdGhlIGVtaXR0ZWRcbiAqIGRlY2xhcmF0aW9ucyB3aXRoIHRoZSB0eXBlIGNoZWNrZXIuIE90aGVyd2lzZSBhIGJyb3dzZXIgY29uc3VtZXIgb2YgYSBwdXJlIHN1YnBhdGggZ290IGFsbCBvZiBgQHR5cGVzL25vZGVgLCBhbmQgaXRzXG4gKiBgc2V0VGltZW91dGAgcmV0dXJuZWQgYE5vZGVKUy5UaW1lb3V0YC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gd3JpdHRlbi5cbiAqIEB0aHJvd3MgSWYgYSBzb3VyY2UgbW9kdWxlIGlzIG5hbWVkIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLCB3aGljaCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGdlbmVyYXRlZCBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeVR5cGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoZXhpc3RzU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGAke0xJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUV9JHtSZXBvUGF0aHMuVHNFeHRlbnNpb259YCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzcmMvJHtMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FfSR7UmVwb1BhdGhzLlRzRXh0ZW5zaW9ufSBjb2xsaWRlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgZGVjbGFyYXRpb24gb2YgdGhlIHNhbWUgbmFtZS5gKTtcbiAgfVxuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ3RzYycgfSksICctLXByb2plY3QnLCAnLi90c2NvbmZpZy50eXBlcy5qc29uJ10pO1xuXG4gIGNvbnN0IGxpYnJhcnlGaWxlTmFtZSA9IGV4aXN0c1N5bmMoam9pbihSZXBvUGF0aHMuU3JjLCAnbGlicmFyeS50cycpKSA/ICdsaWJyYXJ5JyA6ICdpbmRleCc7XG4gIGNvbnN0IGFsbExpYnMgPSBhd2FpdCBjb2xsZWN0QWxsTGlicygpO1xuICBjb25zdCBhbGxUeXBlcyA9IGNvbGxlY3RBbGxUeXBlcygpO1xuICBjb25zdCBkaXJlY3RpdmVzID0gYnVpbGRBbGxSZWZlcmVuY2VMaWJEaXJlY3RpdmVzKGFsbExpYnMpICsgYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXMoYWxsVHlwZXMpO1xuICAvLyBPbmx5IHRoZSBsaWJzIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgZW52aXJvbm1lbnQgZ2xvYmFscyBnbyB0byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgdXNlIHRoZW0uXG4gIGNvbnN0IHNoYXJlZERpcmVjdGl2ZXMgPSBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoYWxsTGlicy5maWx0ZXIoKGxpYikgPT4gIWlzRW52aXJvbm1lbnRMaWIobGliKSkpO1xuXG4gIGF3YWl0IG1rZGlyKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcywgTElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSwgc2hhcmVkRGlyZWN0aXZlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtLCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pLCBzaGFyZWREaXJlY3RpdmVzKTtcblxuICBjb25zdCBzcmNGaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGVjbGFyYXRpb25GaWxlcyA9IHNyY0ZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5UZXN0SGVscGVycykpO1xuICBjb25zdCBlbnZpcm9ubWVudERpcmVjdGl2ZXMgPSBjb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzKHsgYXZhaWxhYmxlVHlwZXM6IGFsbFR5cGVzLCBkZWNsYXJhdGlvbkZpbGVzIH0pO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBkZWNsYXJhdGlvbkZpbGVzKSB7XG4gICAgY29uc3QgZm9sZGVyID0gZGlybmFtZShmaWxlKTtcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZmlsZSwgUmVwb1BhdGhzLkR0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSksICd1dGYtOCcpO1xuXG4gICAgY29uc3QgY3RzUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMsIGZvbGRlciwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKTtcbiAgICBjb25zdCBtdHNQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSwgZm9sZGVyLCBuYW1lICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pO1xuXG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShjdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShtdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBsZXQgY3RzQ29udGVudCA9IHRvQ3RzQ29udGVudChjb250ZW50KTtcbiAgICBsZXQgbXRzQ29udGVudCA9IHRvTXRzQ29udGVudChjb250ZW50KTtcblxuICAgIGlmIChuYW1lID09PSBsaWJyYXJ5RmlsZU5hbWUgJiYgZm9sZGVyID09PSAnLicpIHtcbiAgICAgIGN0c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgbXRzQ29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZURpcmVjdGl2ZXMgPSBlbnZpcm9ubWVudERpcmVjdGl2ZXMuZ2V0KGZpbGUpID8/ICcnO1xuICAgICAgY3RzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IGN0c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeTogUmVwb1BhdGhzLkNqcyB9KVxuICAgICAgICArIGZpbGVEaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBidWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmUoeyBkZWNsYXJhdGlvbkZpbGVQYXRoOiBtdHNQYXRoLCBleHRlbnNpb246IFJlcG9QYXRocy5EbXRzRXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3Rvcnk6IFJlcG9QYXRocy5Fc20gfSlcbiAgICAgICAgKyBmaWxlRGlyZWN0aXZlcyArIG10c0NvbnRlbnQ7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGN0c1BhdGgsIGN0c0NvbnRlbnQpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShtdHNQYXRoLCBtdHNDb250ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2VuZXJhdGVzIHRoZSBgZXhwb3J0c2AgbWFwIG9mIHRoZSBwYWNrYWdlJ3MgYHBhY2thZ2UuanNvbmAgZnJvbSBpdHMgc291cmNlIGZvbGRlcnMsIGFuZCB3cml0ZXMgYSBgcGFja2FnZS5qc29uYFxuICogc3R1YiBwZXIgc3VicGF0aCBmb3IgcmVzb2x2ZXJzIHRoYXQgZG8gbm90IHJlYWQgYGV4cG9ydHNgLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1hcCBpcyBjdXJyZW50LlxuICogQHRocm93cyBJZiB0aGUgbWFwIGNoYW5nZWQsIHNvIHRoZSBjaGFuZ2UgZ2V0cyByZXZpZXdlZCBhbmQgY29tbWl0dGVkIHJhdGhlciB0aGFuIHNoaXBwZWQgdW5zZWVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0cyhvcHRpb25zOiBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc291cmNlQ29uZGl0aW9uIH0gPSBvcHRpb25zO1xuICBjb25zdCBzcmNGb2xkZXJzOiBzdHJpbmdbXSA9IFtSZXBvUGF0aHMuU3JjXTtcblxuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gam9pbihkaXJlbnQucGFyZW50UGF0aCwgZGlyZW50Lm5hbWUpO1xuXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoUmVwb1BhdGhzLlN0eWxlcykgfHwgcGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuVGVzdEhlbHBlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzcmNGb2xkZXJzLnB1c2gocGF0aCk7XG4gIH1cblxuICBzcmNGb2xkZXJzLnNvcnQoKTtcblxuICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgYXdhaXQgZWRpdFBhY2thZ2VKc29uKGFzeW5jIChwYWNrYWdlSnNvbikgPT4ge1xuICAgIGNvbnN0IG9sZEV4cG9ydHMgPSBwYWNrYWdlSnNvbi5leHBvcnRzO1xuICAgIGNvbnN0IGV4cG9ydENvbmRpdGlvbnM6IFBhY2thZ2VKc29uLkV4cG9ydENvbmRpdGlvbnMgPSB7fTtcbiAgICBwYWNrYWdlSnNvbi5leHBvcnRzID0gZXhwb3J0Q29uZGl0aW9ucztcbiAgICBmb3IgKGNvbnN0IHNyY0ZvbGRlciBvZiBzcmNGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiBmYWxzZSwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSk7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiB0cnVlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICB9XG5cbiAgICBpc0NoYW5nZWQgPSAhaXNEZWVwRXF1YWwob2xkRXhwb3J0cywgcGFja2FnZUpzb24uZXhwb3J0cyk7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IGNoYW5nZWQgaW4gdGhlIGBlZGl0UGFja2FnZUpzb25gLCBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgZXhwb3J0cyBoYXZlIGNoYW5nZWQuIFBsZWFzZSByZXZpZXcgdGhlIGNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLicpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGBpbmRleC50c2AgYmFycmVsIGluIGV2ZXJ5IHNvdXJjZSBmb2xkZXIgdGhhdCBoYXMgc29tZXRoaW5nIHRvIGV4cG9ydCwgcmUtZXhwb3J0aW5nIGVhY2ggbW9kdWxlIGFuZFxuICogZWFjaCBzdWItYmFycmVsIHVuZGVyIGl0cyBvd24gbmFtZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJhcnJlbHMgaGF2ZSBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlJbmRleCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2VuZXJhdGVJbmRleChSZXBvUGF0aHMuU3JjKTtcbn1cblxuLyoqXG4gKiBSdW5zIGVhY2ggbmFtZWQgbnBtIHNjcmlwdCB0aGUgcGFja2FnZSBkZWZpbmVzLCBpbiBvcmRlciwgc2tpcHBpbmcgdGhlIG9uZXMgaXQgZG9lcyBub3QgZGVmaW5lLlxuICpcbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBucG0gc2NyaXB0IG5hbWVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHN0ZXAgaGFzIHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHMoc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gTElCUkFSWV9CVUlMRF9TVEVQUyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICBhd2FpdCBucG1SdW5PcHRpb25hbChzdGVwKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgd2hhdCBhIGNvbnN1bWVyIG5lZWRzIGxvYWRlZCBmb3Igb25lIHN5bWJvbCBhIGRlY2xhcmF0aW9uIG5hbWVzLiBBIHN5bWJvbCBhbnkgRVMgbGliIGRlY2xhcmVzIG5lZWRzIG5vdGhpbmcsXG4gKiBiZWNhdXNlIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoIHRob3NlIGxpYnMuIE90aGVyd2lzZSBlYWNoIGVudmlyb25tZW50IGxpYiB0aGF0IGRlY2xhcmVzIGl0IGFkZHMgaXRzZWxmLCBhbmRcbiAqIGZhaWxpbmcgdGhhdCBgQHR5cGVzL25vZGVgIGFkZHMgYG5vZGVgLiBBIHN5bWJvbCBkZWNsYXJlZCBpbiB0aGUgcGFja2FnZSdzIG93biBmaWxlcyBhZGRzIG5vdGhpbmc6IHRoZSBkZWNsYXJhdGlvblxuICogdGhhdCBob2xkcyBpdCBjYXJyaWVzIGl0cyBvd24gZGlyZWN0aXZlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN5bWJvbCwgdGhlIHByb2dyYW0gaXQgd2FzIHJlc29sdmVkIGluLCBhbmQgdGhlIHNldHMgdG8gYWRkIHRvLlxuICovXG5mdW5jdGlvbiBhZGRFbnZpcm9ubWVudEdsb2JhbHMocGFyYW1zOiBBZGRFbnZpcm9ubWVudEdsb2JhbHNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBsaWJzLCBwcm9ncmFtLCBzeW1ib2wsIHR5cGVzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVudmlyb25tZW50TGliczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGlzTm9kZSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygc3ltYm9sLmRlY2xhcmF0aW9ucyA/PyBbXSkge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCk7XG4gICAgaWYgKHByb2dyYW0uaXNTb3VyY2VGaWxlRGVmYXVsdExpYnJhcnkoc291cmNlRmlsZSkpIHtcbiAgICAgIGNvbnN0IGxpYiA9IHRvTGliTmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGlmICghaXNFbnZpcm9ubWVudExpYihsaWIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVudmlyb25tZW50TGlicy5wdXNoKGxpYik7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VGaWxlLmZpbGVOYW1lLmluY2x1ZGVzKE5PREVfVFlQRVNfUEFUSF9TRUdNRU5UKSkge1xuICAgICAgaXNOb2RlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnRMaWJzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IGxpYiBvZiBlbnZpcm9ubWVudExpYnMpIHtcbiAgICAgIGxpYnMuYWRkKGxpYik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTm9kZSkge1xuICAgIHR5cGVzLmFkZCgnbm9kZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhsaWJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICBsaWJzXG4gICAgICAubWFwKChsaWIpID0+IGAvLy8gJHtSRUZFUkVOQ0VfTElCX0RJUkVDVElWRX1cIiR7bGlifVwiIC8+YClcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XFxuYDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXModHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVzLmxlbmd0aCA9PT0gMFxuICAgID8gJydcbiAgICA6IGAke1xuICAgICAgdHlwZXNcbiAgICAgICAgLm1hcCgodHlwZSkgPT4gYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiJHt0eXBlfVwiIC8+YClcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfVxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeUZvcm1hdChwYXJhbXM6IEJ1aWxkTGlicmFyeUZvcm1hdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGZvcm1hdCwgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGZvcm1hdCA9PT0gJ2NqcycgPyBSZXBvUGF0aHMuQ2pzRXh0ZW5zaW9uIDogUmVwb1BhdGhzLk1qc0V4dGVuc2lvbjtcbiAgY29uc3QgYnVpbGRPcHRpb25zOiBCdWlsZE9wdGlvbnMgPSB7XG4gICAgLy8gRXhwbGljaXQsIGJlY2F1c2UgZXNidWlsZCBvdGhlcndpc2UgdGFrZXMgdGhlIGZvbGRlciBpdHMgc2VydmljZSBwcm9jZXNzIHN0YXJ0ZWQgaW4uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gZXNidWlsZCdzIG93biBvcHRpb24gbmFtZS5cbiAgICBhYnNXb3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGJhbm5lcjoge1xuICAgICAganM6IExJQlJBUllfQkFOTkVSXG4gICAgfSxcbiAgICBidW5kbGU6IGZhbHNlLFxuICAgIGVudHJ5UG9pbnRzOiBsaWJGaWxlcyxcbiAgICBmb3JtYXQsXG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBvdXRkaXI6IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIGZvcm1hdCksXG4gICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICBwbHVnaW5zOiBbXG4gICAgICBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeShmb3JtYXQgPT09ICdlc20nKSxcbiAgICAgIGZpeEVzbVBsdWdpbigpLFxuICAgICAgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbilcbiAgICBdLFxuICAgIHNvdXJjZW1hcDogJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICB3cml0ZTogZmFsc2VcbiAgfTtcblxuICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBjb250ZXh0KGJ1aWxkT3B0aW9ucyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYnVpbGRDb250ZXh0LnJlYnVpbGQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZShwYXJhbXM6IEJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZGVjbGFyYXRpb25GaWxlUGF0aCwgZXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3RvcnkgfSA9IHBhcmFtcztcbiAgY29uc3QgbGlicmFyeUZpbGVQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgbW9kdWxlRGlyZWN0b3J5LCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgZXh0ZW5zaW9uKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlTmF0aXZlKGRpcm5hbWUoZGVjbGFyYXRpb25GaWxlUGF0aCksIGxpYnJhcnlGaWxlUGF0aCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cbiAgcmV0dXJuIGAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiJHtyZWxhdGl2ZVBhdGh9XCIgLz5cXG5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QWxsTGlicygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIC8vIFRoZSBSRVNPTFZFRCBvcHRpb25zLCBiZWNhdXNlIGEgcGFja2FnZSdzIGB0c2NvbmZpZy5qc29uYCBpbmhlcml0cyBgbGliYCBmcm9tIHRoZSBzaGFyZWQgYmFzZS4gVGhlIHJlc29sdmVkXG4gIC8vIG5hbWVzIGFyZSBmaWxlIG5hbWVzIChgbGliLmRvbS5pdGVyYWJsZS5kLnRzYCksIHNvIHRoZXkgYXJlIG1hcHBlZCBiYWNrIG9udG8gdGhlIG5hbWVzIGEgZGlyZWN0aXZlIHRha2VzLlxuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIGNvbnN0IGxpYnMgPSBuZXcgU2V0KChvcHRpb25zLmxpYiA/PyBbXSkubWFwKChsaWIpID0+IHRvTGliTmFtZShsaWIpKSk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSwgJ3V0Zi04Jyk7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgaXRzIG9uZSBncm91cCwgc28gbm8gZmFsbGJhY2sgZm9yIGEgbWlzc2luZyBvbmUgaXMgbmVlZGVkLlxuICAgIGZvciAoY29uc3QgWywgbGliXSBvZiBzb3VyY2VDb250ZW50Lm1hdGNoQWxsKFJFRkVSRU5DRV9MSUJfUkVHX0VYUCkpIHtcbiAgICAgIGxpYnMuYWRkKFN0cmluZyhsaWIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4ubGlic10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0QWxsVHlwZXMoKTogc3RyaW5nW10ge1xuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIHJldHVybiAob3B0aW9ucy50eXBlcyA/PyBbXSlcbiAgICAuZmlsdGVyKCh0eXBlKSA9PiBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMuaGFzKHR5cGUpKVxuICAgIC5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXMocGFyYW1zOiBDb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzUGFyYW1zKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHsgYXZhaWxhYmxlVHlwZXMsIGRlY2xhcmF0aW9uRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24pO1xuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7XG4gICAgb3B0aW9uczogeyAuLi5vcHRpb25zLCBub0VtaXQ6IHRydWUgfSxcbiAgICByb290TmFtZXM6IGRlY2xhcmF0aW9uRmlsZXMubWFwKChmaWxlKSA9PiByZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKVxuICB9KTtcbiAgY29uc3QgY2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgZGlyZWN0aXZlc0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGRlY2xhcmF0aW9uRmlsZXMpIHtcbiAgICAvLyBUaGUgcHJvZ3JhbSB3YXMgaGFuZGVkIGV2ZXJ5IG9uZSBvZiB0aGVzZSBhcyBhIHJvb3QgbmFtZSwgc28gZWFjaCBvbmUgaXMgaW4gaXQuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHByb2dyYW0uZ2V0U291cmNlRmlsZShyZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKSk7XG4gICAgY29uc3QgbGlicyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpIHx8IGlzU3RyaW5nTGl0ZXJhbChub2RlKSkge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG4gICAgICAgIGlmIChzeW1ib2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZEVudmlyb25tZW50R2xvYmFscyh7IGxpYnMsIHByb2dyYW0sIHN5bWJvbDogcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCksIHR5cGVzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICAgIH1cbiAgICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICAgIGNvbnN0IG5lZWRlZFR5cGVzID0gWy4uLnR5cGVzXS5maWx0ZXIoKHR5cGUpID0+IGF2YWlsYWJsZVR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBpZiAobGlicy5zaXplID4gMCB8fCBuZWVkZWRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkaXJlY3RpdmVzQnlGaWxlLnNldChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKGxpYnMuc2l6ZSA+IDAgPyBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoWy4uLmxpYnNdLnNvcnQoKSkgOiAnJykgKyBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyhuZWVkZWRUeXBlcy5zb3J0KCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXJlY3RpdmVzQnlGaWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4KGZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxHZW5lcmF0ZUluZGV4UmVzdWx0PiB7XG4gIGNvbnN0IGRpcmVudHMgPSBhd2FpdCByZWFkZGlyUG9zaXgoZm9sZGVyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IG1heWJlTGluZXMgPSBhd2FpdCBhc3luY01hcChkaXJlbnRzLCAoZGlyZW50KSA9PiBoYW5kbGVJbmRleERpcmVudChmb2xkZXIsIGRpcmVudCkpO1xuICBjb25zdCBsaW5lcyA9IG1heWJlTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGUoam9pbihmb2xkZXIsIFJlcG9QYXRocy5JbmRleFRzKSwgbGluZXMpO1xuICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRMaWJGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgZmlsZXMgPSBmaWxlcy5tYXAoKGZpbGUpID0+IG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSkpO1xuICByZXR1cm4gZmlsZXMuZmlsdGVyKChmaWxlKSA9PlxuICAgIGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aCgnLnRlc3QudHMnKVxuICAgICYmICFmaWxlLmluY2x1ZGVzKGAvJHtSZXBvUGF0aHMuVGVzdEhlbHBlcnN9L2ApXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUluZGV4RGlyZW50KGZvbGRlcjogc3RyaW5nLCBkaXJlbnQ6IERpcmVudCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChpc0V4Y2x1ZGVkRnJvbUluZGV4KGZvbGRlciwgZGlyZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzb3VyY2VGaWxlOiBzdHJpbmc7XG4gIGxldCBuYW1lOiBzdHJpbmc7XG4gIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlSW5kZXgoam9pbihmb2xkZXIsIGRpcmVudC5uYW1lKSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUZpbGUgPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oZGlyZW50Lm5hbWUsIFJlcG9QYXRocy5JbmRleFRzKSk7XG4gICAgbmFtZSA9IGRpcmVudC5uYW1lO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZGlyZW50Lm5hbWUpO1xuICAgIG5hbWUgPSBiYXNlbmFtZShkaXJlbnQubmFtZSwgZXh0ZW5zaW9uKTtcbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShkaXJlbnQubmFtZSk7XG4gIH1cblxuICByZXR1cm4gYGV4cG9ydCAqIGFzICcke25hbWV9JyBmcm9tICcke3NvdXJjZUZpbGV9JztgO1xufVxuXG5mdW5jdGlvbiBpc0Vudmlyb25tZW50TGliKGxpYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTlZJUk9OTUVOVF9MSUJfUFJFRklYRVMuc29tZSgocHJlZml4KSA9PiBsaWIuc3RhcnRzV2l0aChwcmVmaXgpKTtcbn1cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSB8fCBuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpIHx8IG5hbWUgPT09ICdzZXR1cC50cycgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyOiBzdHJpbmcsIGRpcmVudDogRGlyZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JlcG9QYXRocy5JbmRleFRzLCBSZXBvUGF0aHMuVHlwZXMsIFJlcG9QYXRocy5TdHlsZXMsIFJlcG9QYXRocy5UZXN0SGVscGVyc107XG4gIGNvbnN0IGlzRXhjbHVkZWRFbnRyeSA9IGV4Y2x1ZGVkTmFtZXMuaW5jbHVkZXMoZGlyZW50Lm5hbWUpIHx8IGRpcmVudC5uYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pIHx8IGZvbGRlci5zcGxpdCgnLycpLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIHJldHVybiBpc0V4Y2x1ZGVkRW50cnkgfHwgKGRpcmVudC5pc0ZpbGUoKSAmJiBpc0V4Y2x1ZGVkRmlsZU5hbWUoZGlyZW50Lm5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBgU3ltYm9sRmxhZ3NgIGlzIGEgYml0IHNldC5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0RXhwb3J0KHBhcmFtczogU2V0RXhwb3J0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZXhwb3J0Q29uZGl0aW9ucywgaXNXaWxkY2FyZCwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgaW1wb3J0UGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHNyY0ZvbGRlcixcbiAgICByZXBsYWNlcjogUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIsXG4gICAgc2VhcmNoVmFsdWU6IFJlcG9QYXRocy5TcmNcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblBhdGggPSBpc1dpbGRjYXJkID8gYCR7aW1wb3J0UGF0aH0vJHtSZXBvUGF0aHMuQW55fWAgOiBpbXBvcnRQYXRoO1xuICBjb25zdCBkbXRzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5Fc20sIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RG10cyA6IFJlcG9QYXRocy5JbmRleERtdHMgfSk7XG4gIGNvbnN0IGRjdHNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkNqcywgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlEY3RzIDogUmVwb1BhdGhzLkluZGV4RGN0cyB9KTtcbiAgY29uc3QgZG10c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRtdHNQYXRoKTtcbiAgY29uc3QgZGN0c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRjdHNQYXRoKTtcblxuICBpZiAoIWlzV2lsZGNhcmQgJiYgIWV4aXN0c1N5bmMoZGN0c1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNUeXBlc09ubHkgPSBpbXBvcnRQYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIGNvbnN0IG1qc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueU1qcyA6IFJlcG9QYXRocy5JbmRleE1qcyB9KTtcbiAgY29uc3QgY2pzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55Q2pzIDogUmVwb1BhdGhzLkluZGV4Q2pzIH0pO1xuXG4gIGlmIChpc1R5cGVzT25seSkge1xuICAgIGV4cG9ydENvbmRpdGlvbnNbY29uZGl0aW9uUGF0aF0gPSB7XG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGhcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgaW1wb3J0UGF0aCwgaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlUcyA6IFJlcG9QYXRocy5JbmRleFRzKSk7XG5cbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgICAvLyBGaXJzdCwgc28gaXQgd2lucyB3aGVyZXZlciBpdCBpcyBzZXQ6IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LlxuICAgICAgLi4uKHNvdXJjZUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgW3NvdXJjZUNvbmRpdGlvbl06IHNvdXJjZVBhdGggfSksXG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBtanNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGgsXG4gICAgICAgIGRlZmF1bHQ6IGNqc1BhdGhcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbXBvcnRQYXRoID09PSBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV2lsZGNhcmQpIHtcbiAgICBhd2FpdCB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihcbiAgICAgIGltcG9ydFBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzOiByZWxhdGl2ZShpbXBvcnRQYXRoLCBkY3RzUGF0aCkgfVxuICAgICAgICA6IHsgbWFpbjogcmVsYXRpdmUoaW1wb3J0UGF0aCwgY2pzUGF0aCksIG1vZHVsZTogcmVsYXRpdmUoaW1wb3J0UGF0aCwgbWpzUGF0aCksIHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGN0c0ZvbGRlclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgcGFja2FnZUpzb25Gb2xkZXJQYXRoID0gam9pbihpbXBvcnRQYXRoLCBuYW1lKTtcbiAgICBjb25zdCB0eXBlcyA9IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSk7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBwYWNrYWdlSnNvbkZvbGRlclBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgbWFpbjogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRjdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLkNqc0V4dGVuc2lvbikpLFxuICAgICAgICAgIG1vZHVsZTogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRtdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLk1qc0V4dGVuc2lvbikpLFxuICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgIHR5cGVzXG4gICAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ3RzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdmcm9tIFxcJyQ8SW1wb3J0UGF0aD4uY2pzXFwnOycsXG4gICAgc2VhcmNoVmFsdWU6IFNUQVRJQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPEltcG9ydFBhdGg+LmNqcyQ8UXVvdGU+KScsXG4gICAgc2VhcmNoVmFsdWU6IERZTkFNSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG5cbiAgLy8gQSBgLmQuY3RzYCBmaWxlIGlzIGEgQ29tbW9uSlMgbW9kdWxlLiBUeXBlLW9ubHkgaW1wb3J0cyBvZiBhIGJhcmUgc3BlY2lmaWVyIHJlc29sdmluZyB0byBhblxuICAvLyBFU00tb25seSBwYWNrYWdlIG5lZWQgYSBgcmVzb2x1dGlvbi1tb2RlYCBhdHRyaWJ1dGUsIGVsc2UgYHRzY2AgcmVwb3J0cyBUUzE1NDEgLyBUUzE1NDIuXG4gIC8vIFBhc3NpbmcgYCdpbXBvcnQnYCBpcyB2YWxpZCBmb3IgQ29tbW9uSlMgdGFyZ2V0cyB0b28sIHNvIGV2ZXJ5IGJhcmUgc3BlY2lmaWVyIHJlY2VpdmVzIGl0LlxuICAvLyBUaGUgRVNNIGAuZC5tdHNgIG5lZWRzIG5vIHN1Y2ggYXR0cmlidXRlLCBzbyB0aGlzIHRyYW5zZm9ybSBydW5zIG9uIENvbW1vbkpTIGNvbnRlbnQgb25seS5cbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQgdHlwZSAkPENsYXVzZT4gZnJvbSBcXCckPFNwZWNpZmllcj5cXCcgd2l0aCB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH07JyxcbiAgICBzZWFyY2hWYWx1ZTogQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY3RzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydChcIiQ8U3BlY2lmaWVyPlwiLCB7IHdpdGg6IHsgXFwncmVzb2x1dGlvbi1tb2RlXFwnOiBcXCdpbXBvcnRcXCcgfSB9KScsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGlzdFBhdGgocGFyYW1zOiBUb0Rpc3RQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLmltcG9ydFBhdGgsIHBhcmFtcy5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRvTGliTmFtZShsaWJGaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQSBsaWIgYSBwYWNrYWdlIHJlcGxhY2VkIChgQHR5cGVzY3JpcHQvbGliLWRvbWAsIGBAdHlwZXNjcmlwdC9saWItZG9tL2l0ZXJhYmxlLmQudHNgKSBpcyBuYW1lZCBieSBpdHMgcGF0aCwgbm90IGJ5XG4gIC8vIGl0cyBmaWxlIG5hbWUsIHdoaWNoIGlzIGBpbmRleC5kLnRzYCBmb3IgdGhlIGxpYidzIHJvb3QuXG4gIGNvbnN0IHJlcGxhY2VtZW50TWF0Y2ggPSBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUC5leGVjKGxpYkZpbGVQYXRoKTtcbiAgaWYgKHJlcGxhY2VtZW50TWF0Y2g/Lmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgYm90aCBncm91cHMuXG4gICAgY29uc3QgbGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydMaWInXSk7XG4gICAgY29uc3Qgc3ViTGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydTdWJMaWInXSk7XG4gICAgcmV0dXJuIChzdWJMaWIgPT09ICdpbmRleCcgPyBsaWIgOiBgJHtsaWJ9LiR7c3ViTGliLnJlcGxhY2VBbGwoJy8nLCAnLicpfWApLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VuYW1lKGxpYkZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15saWJcXC4vLCAnJykucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTtcbn1cblxuZnVuY3Rpb24gdG9NdHNDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG10c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjb250ZW50LFxuICAgIHJlcGxhY2VyOiAnZnJvbSBcXCckPEltcG9ydFBhdGg+Lm1qc1xcJzsnLFxuICAgIHNlYXJjaFZhbHVlOiBTVEFUSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBtdHNDb250ZW50LFxuICAgIHJlcGxhY2VyOiAnaW1wb3J0KCQ8UXVvdGU+JDxJbXBvcnRQYXRoPi5tanMkPFF1b3RlPiknLFxuICAgIHNlYXJjaFZhbHVlOiBEWU5BTUlDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihmb2xkZXI6IHN0cmluZywgcGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKGZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlSnNvbihqb2luKGZvbGRlciwgUmVwb1BhdGhzLlBhY2thZ2VKc29uKSwgcGFja2FnZUpzb24pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLG1CQUFtQjtBQUM1QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLGVBQWU7QUFDeEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFBQSxPQUNOO0FBQ1AsT0FBTyxhQUFhO0FBQ3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxvQkFBb0I7QUFLdEIsTUFBTSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVN2QixNQUFNLHNCQUF5QztBQUFBLEVBQ3BEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFPTyxNQUFNLG1CQUFtQjtBQTJCaEMsTUFBTSw4QkFBOEIsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUlwRCxNQUFNLDJCQUE4QyxDQUFDLE9BQU8sY0FBYyxXQUFXO0FBQ3JGLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sMEJBQTBCO0FBSWhDLE1BQU0sK0JBQStCO0FBR3JDLE1BQU0sMEJBQTBCLENBQUMsY0FBYyxNQUFNLEVBQUUsS0FBSyxHQUFHO0FBQy9ELE1BQU0sd0JBQXdCO0FBRzlCLE1BQU0sMkJBQTJCO0FBR2pDLE1BQU0sa0NBQWtDO0FBRXhDLE1BQU0sd0JBQXdCO0FBSzlCLE1BQU0seUJBQXlCO0FBa0QvQixlQUFzQixvQkFBbUM7QUFDdkQsUUFBTSxXQUFXO0FBQ2pCLGFBQVcsUUFBUSxNQUFNLGFBQWEsVUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUN6RSxRQUFJLFNBQVMsSUFBSSxNQUFNLFVBQVUsU0FBbUI7QUFDbEQsWUFBTSxHQUFHLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ3BDO0FBRUEsUUFBSSxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLE1BQU0sR0FBRyxFQUFFLFNBQVMsVUFBVSxLQUFLLEdBQUc7QUFDdkYsWUFBTSxHQUFHLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUVBLGFBQVcsUUFBUSxNQUFNLGFBQWEsVUFBVSxlQUFlLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUNuRixRQUFLLFNBQVMsSUFBSSxNQUFNLFVBQVUsZUFBMkIsU0FBUyxVQUFVLGVBQTBCLEtBQUssV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNoSjtBQUFBLElBQ0Y7QUFFQSxVQUFNLEdBQUcsSUFBSTtBQUFBLEVBQ2Y7QUFDRjtBQVVBLGVBQXNCLGFBQWEsVUFBK0IsQ0FBQyxHQUFrQjtBQUNuRixRQUFNLEVBQUUsMEJBQTBCLENBQUMsVUFBMkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSTtBQUM5RixRQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ25DLFFBQU0sbUJBQW1CLEVBQUUsUUFBUSxPQUFPLFVBQVUsd0JBQXdCLENBQUM7QUFDN0UsUUFBTSxtQkFBbUIsRUFBRSxRQUFRLE9BQU8sVUFBVSx3QkFBd0IsQ0FBQztBQUMvRTtBQXNCQSxlQUFzQixvQkFBbUM7QUFDdkQsTUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLEdBQUcsNEJBQTRCLEdBQUcsVUFBVSxXQUFXLEVBQUUsQ0FBQyxHQUFHO0FBQzlGLFVBQU0sSUFBSSxNQUFNLE9BQU8sNEJBQTRCLEdBQUcsVUFBVSxXQUFXLDREQUE0RDtBQUFBLEVBQ3pJO0FBRUEsUUFBTSxhQUFhLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQyxHQUFHLGFBQWEsdUJBQXVCLENBQUM7QUFFakcsUUFBTSxrQkFBa0IsV0FBVyxLQUFLLFVBQVUsS0FBSyxZQUFZLENBQUMsSUFBSSxZQUFZO0FBQ3BGLFFBQU0sVUFBVSxNQUFNLGVBQWU7QUFDckMsUUFBTSxXQUFXLGdCQUFnQjtBQUNqQyxRQUFNLGFBQWEsK0JBQStCLE9BQU8sSUFBSSxpQ0FBaUMsUUFBUTtBQUV0RyxRQUFNLG1CQUFtQiwrQkFBK0IsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUV2RyxRQUFNLE1BQU0sS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN2RSxRQUFNLE1BQU0sS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN2RSxRQUFNLFVBQVUsS0FBSyxVQUFVLFNBQVMsVUFBVSxLQUFLLCtCQUErQixVQUFVLGFBQWEsR0FBRyxnQkFBZ0I7QUFDaEksUUFBTSxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSywrQkFBK0IsVUFBVSxhQUFhLEdBQUcsZ0JBQWdCO0FBRWhJLFFBQU0sV0FBVyxNQUFNLGFBQWEsVUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDdEUsUUFBTSxtQkFBbUIsU0FBUyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLFdBQVcsVUFBVSxXQUFXLENBQUM7QUFDbkksUUFBTSx3QkFBd0IsNkJBQTZCLEVBQUUsZ0JBQWdCLFVBQVUsaUJBQWlCLENBQUM7QUFFekcsYUFBVyxRQUFRLGtCQUFrQjtBQUNuQyxVQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLFVBQU0sT0FBTyxTQUFTLE1BQU0sVUFBVSxZQUFZO0FBQ2xELFVBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHLE9BQU87QUFFakUsVUFBTSxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSyxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQzdGLFVBQU0sVUFBVSxLQUFLLFVBQVUsU0FBUyxVQUFVLEtBQUssUUFBUSxPQUFPLFVBQVUsYUFBYTtBQUU3RixVQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxVQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUVqRCxRQUFJLGFBQWEsYUFBYSxPQUFPO0FBQ3JDLFFBQUksYUFBYSxhQUFhLE9BQU87QUFFckMsUUFBSSxTQUFTLG1CQUFtQixXQUFXLEtBQUs7QUFDOUMsbUJBQWEsYUFBYTtBQUMxQixtQkFBYSxhQUFhO0FBQUEsSUFDNUIsT0FBTztBQUNMLFlBQU0saUJBQWlCLHNCQUFzQixJQUFJLElBQUksS0FBSztBQUMxRCxtQkFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsU0FBUyxXQUFXLFVBQVUsZUFBZSxpQkFBaUIsVUFBVSxJQUFJLENBQUMsSUFDekksaUJBQWlCO0FBQ3JCLG1CQUFhLDRCQUE0QixFQUFFLHFCQUFxQixTQUFTLFdBQVcsVUFBVSxlQUFlLGlCQUFpQixVQUFVLElBQUksQ0FBQyxJQUN6SSxpQkFBaUI7QUFBQSxJQUN2QjtBQUVBLFVBQU0sVUFBVSxTQUFTLFVBQVU7QUFDbkMsVUFBTSxVQUFVLFNBQVMsVUFBVTtBQUFBLEVBQ3JDO0FBQ0Y7QUFVQSxlQUFzQix1QkFBdUIsVUFBeUMsQ0FBQyxHQUFrQjtBQUN2RyxRQUFNLEVBQUUsZ0JBQWdCLElBQUk7QUFDNUIsUUFBTSxhQUF1QixDQUFDLFVBQVUsR0FBRztBQUUzQyxhQUFXLFVBQVUsTUFBTSxhQUFhLFVBQVUsS0FBSyxFQUFFLFdBQVcsTUFBTSxlQUFlLEtBQUssQ0FBQyxHQUFHO0FBQ2hHLFFBQUksQ0FBQyxPQUFPLFlBQVksR0FBRztBQUN6QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8sS0FBSyxPQUFPLFlBQVksT0FBTyxJQUFJO0FBRWhELFFBQUksS0FBSyxTQUFTLFVBQVUsTUFBTSxLQUFLLEtBQUssU0FBUyxVQUFVLFdBQVcsR0FBRztBQUMzRTtBQUFBLElBQ0Y7QUFFQSxlQUFXLEtBQUssSUFBSTtBQUFBLEVBQ3RCO0FBRUEsYUFBVyxLQUFLO0FBRWhCLE1BQUksWUFBWTtBQUVoQixRQUFNLGdCQUFnQixPQUFPLGdCQUFnQjtBQUMzQyxVQUFNLGFBQWEsWUFBWTtBQUMvQixVQUFNLG1CQUFpRCxDQUFDO0FBQ3hELGdCQUFZLFVBQVU7QUFDdEIsZUFBVyxhQUFhLFlBQVk7QUFDbEMsWUFBTSxVQUFVLEVBQUUsa0JBQWtCLFlBQVksT0FBTyxpQkFBaUIsVUFBVSxDQUFDO0FBQ25GLFlBQU0sVUFBVSxFQUFFLGtCQUFrQixZQUFZLE1BQU0saUJBQWlCLFVBQVUsQ0FBQztBQUFBLElBQ3BGO0FBRUEsZ0JBQVksQ0FBQyxZQUFZLFlBQVksWUFBWSxPQUFPO0FBQUEsRUFDMUQsQ0FBQztBQUdELE1BQUksV0FBVztBQUNiLFVBQU0sSUFBSSxNQUFNLDBFQUEwRTtBQUFBLEVBQzVGO0FBQ0Y7QUFRQSxlQUFzQix1QkFBc0M7QUFDMUQsUUFBTSxjQUFjLFVBQVUsR0FBRztBQUNuQztBQVFBLGVBQXNCLGNBQWMsUUFBMkIscUJBQW9DO0FBQ2pHLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sZUFBZSxJQUFJO0FBQUEsRUFDM0I7QUFDRjtBQVVBLFNBQVMsc0JBQXNCLFFBQTJDO0FBQ3hFLFFBQU0sRUFBRSxNQUFNLFNBQVMsUUFBUSxNQUFNLElBQUk7QUFDekMsUUFBTSxrQkFBNEIsQ0FBQztBQUNuQyxNQUFJLFNBQVM7QUFFYixhQUFXLGVBQWUsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ25ELFVBQU0sYUFBYSxZQUFZLGNBQWM7QUFDN0MsUUFBSSxRQUFRLDJCQUEyQixVQUFVLEdBQUc7QUFDbEQsWUFBTSxNQUFNLFVBQVUsV0FBVyxRQUFRO0FBQ3pDLFVBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHO0FBQzFCO0FBQUEsTUFDRjtBQUNBLHNCQUFnQixLQUFLLEdBQUc7QUFBQSxJQUMxQixXQUFXLFdBQVcsU0FBUyxTQUFTLHVCQUF1QixHQUFHO0FBQ2hFLGVBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFNBQVMsR0FBRztBQUM5QixlQUFXLE9BQU8saUJBQWlCO0FBQ2pDLFdBQUssSUFBSSxHQUFHO0FBQUEsSUFDZDtBQUFBLEVBQ0YsV0FBVyxRQUFRO0FBQ2pCLFVBQU0sSUFBSSxNQUFNO0FBQUEsRUFDbEI7QUFDRjtBQUVBLFNBQVMsK0JBQStCLE1BQXdCO0FBQzlELFNBQU8sR0FDTCxLQUNHLElBQUksQ0FBQyxRQUFRLE9BQU8sdUJBQXVCLElBQUksR0FBRyxNQUFNLEVBQ3hELEtBQUssSUFBSSxDQUNkO0FBQUE7QUFDRjtBQUVBLFNBQVMsaUNBQWlDLE9BQXlCO0FBQ2pFLFNBQU8sTUFBTSxXQUFXLElBQ3BCLEtBQ0EsR0FDQSxNQUNHLElBQUksQ0FBQyxTQUFTLHlCQUF5QixJQUFJLE1BQU0sRUFDakQsS0FBSyxJQUFJLENBQ2Q7QUFBQTtBQUNKO0FBRUEsZUFBZSxtQkFBbUIsUUFBaUQ7QUFDakYsUUFBTSxFQUFFLFFBQVEsVUFBVSx3QkFBd0IsSUFBSTtBQUN0RCxRQUFNLFlBQVksV0FBVyxRQUFRLFVBQVUsZUFBZSxVQUFVO0FBQ3hFLFFBQU0sZUFBNkI7QUFBQTtBQUFBO0FBQUEsSUFHakMsZUFBZSxRQUFRLElBQUk7QUFBQSxJQUMzQixRQUFRO0FBQUEsTUFDTixJQUFJO0FBQUEsSUFDTjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFFBQVEsS0FBSyxVQUFVLFNBQVMsTUFBTTtBQUFBLElBQ3RDLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxNQUNQLHdCQUF3QixXQUFXLEtBQUs7QUFBQSxNQUN4QyxhQUFhO0FBQUEsTUFDYixzQkFBc0IsU0FBUztBQUFBLElBQ2pDO0FBQUEsSUFDQSxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSxNQUFNLFFBQVEsWUFBWTtBQUMvQyxNQUFJO0FBQ0YsVUFBTSxhQUFhLFFBQVE7QUFBQSxFQUM3QixVQUFFO0FBQ0EsVUFBTSxhQUFhLFFBQVE7QUFBQSxFQUM3QjtBQUNGO0FBRUEsU0FBUyw0QkFBNEIsUUFBbUQ7QUFDdEYsUUFBTSxFQUFFLHFCQUFxQixXQUFXLGdCQUFnQixJQUFJO0FBQzVELFFBQU0sa0JBQWtCLEtBQUssVUFBVSxTQUFTLGlCQUFpQiwrQkFBK0IsU0FBUztBQUN6RyxNQUFJLGVBQWUsZUFBZSxRQUFRLG1CQUFtQixHQUFHLGVBQWUsRUFBRSxXQUFXLE1BQU0sR0FBRztBQUNyRyxNQUFJLENBQUMsYUFBYSxXQUFXLEdBQUcsR0FBRztBQUNqQyxtQkFBZSxLQUFLLFlBQVk7QUFBQSxFQUNsQztBQUNBLFNBQU8sd0JBQXdCLFlBQVk7QUFBQTtBQUM3QztBQUVBLGVBQWUsaUJBQW9DO0FBR2pELFFBQU0sRUFBRSxRQUFRLElBQUksY0FBYyxVQUFVLFlBQVk7QUFDeEQsUUFBTSxPQUFPLElBQUksS0FBSyxRQUFRLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckUsYUFBVyxRQUFRLE1BQU0sYUFBYSxVQUFVLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxHQUFHO0FBQ3pFLFFBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZ0JBQWdCLGFBQWEsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHLE9BQU87QUFFckUsZUFBVyxDQUFDLEVBQUUsR0FBRyxLQUFLLGNBQWMsU0FBUyxxQkFBcUIsR0FBRztBQUNuRSxXQUFLLElBQUksT0FBTyxHQUFHLEVBQUUsWUFBWSxDQUFDO0FBQUEsSUFDcEM7QUFBQSxFQUNGO0FBRUEsU0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUs7QUFDeEI7QUFFQSxTQUFTLGtCQUE0QjtBQUNuQyxRQUFNLEVBQUUsUUFBUSxJQUFJLGNBQWMsVUFBVSxZQUFZO0FBQ3hELFVBQVEsUUFBUSxTQUFTLENBQUMsR0FDdkIsT0FBTyxDQUFDLFNBQVMsNEJBQTRCLElBQUksSUFBSSxDQUFDLEVBQ3RELEtBQUs7QUFDVjtBQUVBLFNBQVMsNkJBQTZCLFFBQWlFO0FBQ3JHLFFBQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUFDN0MsUUFBTSxFQUFFLFFBQVEsSUFBSSxjQUFjLFVBQVUsWUFBWTtBQUN4RCxRQUFNLFVBQVUsY0FBYztBQUFBLElBQzVCLFNBQVMsRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLO0FBQUEsSUFDcEMsV0FBVyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsY0FBYyxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQUEsRUFDOUUsQ0FBQztBQUNELFFBQU0sVUFBVSxRQUFRLGVBQWU7QUFDdkMsUUFBTSxtQkFBbUIsb0JBQUksSUFBb0I7QUFFakQsYUFBVyxRQUFRLGtCQUFrQjtBQU1uQyxRQUFTQSxTQUFULFNBQWUsTUFBa0I7QUFDL0IsVUFBSSxhQUFhLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxHQUFHO0FBQy9DLGNBQU0sU0FBUyxRQUFRLG9CQUFvQixJQUFJO0FBQy9DLFlBQUksV0FBVyxRQUFXO0FBQ3hCLGdDQUFzQixFQUFFLE1BQU0sU0FBUyxRQUFRLGFBQWEsU0FBUyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDdkY7QUFBQSxNQUNGO0FBQ0EsbUJBQWEsTUFBTUEsTUFBSztBQUFBLElBQzFCO0FBUlMsZ0JBQUFBO0FBSlQsVUFBTSxhQUFhLGtCQUFrQixRQUFRLGNBQWMsY0FBYyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDOUYsVUFBTSxPQUFPLG9CQUFJLElBQVk7QUFDN0IsVUFBTSxRQUFRLG9CQUFJLElBQVk7QUFXOUIsSUFBQUEsT0FBTSxVQUFVO0FBRWhCLFVBQU0sY0FBYyxDQUFDLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLGVBQWUsU0FBUyxJQUFJLENBQUM7QUFDN0UsUUFBSSxLQUFLLE9BQU8sS0FBSyxZQUFZLFNBQVMsR0FBRztBQUMzQyx1QkFBaUI7QUFBQSxRQUNmO0FBQUEsU0FDQyxLQUFLLE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLGlDQUFpQyxZQUFZLEtBQUssQ0FBQztBQUFBLE1BQy9IO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLGNBQWMsUUFBOEM7QUFDekUsUUFBTSxVQUFVLE1BQU0sYUFBYSxRQUFRLEVBQUUsZUFBZSxLQUFLLENBQUM7QUFDbEUsUUFBTSxhQUFhLE1BQU0sU0FBUyxTQUFTLENBQUMsV0FBVyxrQkFBa0IsUUFBUSxNQUFNLENBQUM7QUFDeEYsUUFBTSxRQUFRLFdBQVcsT0FBTyxDQUFDLFNBQVMsU0FBUyxNQUFTO0FBRTVELE1BQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsS0FBSyxRQUFRLFVBQVUsT0FBTyxHQUFHLEtBQUs7QUFDckQsU0FBTztBQUNUO0FBRUEsZUFBZSxjQUFpQztBQUM5QyxNQUFJLFFBQVEsTUFBTSxhQUFhLFVBQVUsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ2pFLFVBQVEsTUFBTSxJQUFJLENBQUMsU0FBUyxvQkFBb0IsS0FBSyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDMUUsU0FBTyxNQUFNO0FBQUEsSUFBTyxDQUFDLFNBQ25CLEtBQUssU0FBUyxVQUFVLFdBQVcsS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLFlBQVksS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLEtBQ3hHLENBQUMsS0FBSyxTQUFTLElBQUksVUFBVSxXQUFXLEdBQUc7QUFBQSxFQUNoRDtBQUNGO0FBRUEsZUFBZSxrQkFBa0IsUUFBZ0IsUUFBNkM7QUFDNUYsTUFBSSxvQkFBb0IsUUFBUSxNQUFNLEdBQUc7QUFDdkM7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJLE9BQU8sWUFBWSxHQUFHO0FBQ3hCLFVBQU0sU0FBUyxNQUFNLGNBQWMsS0FBSyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQzVELFFBQUksV0FBVyx5QkFBNkI7QUFDMUM7QUFBQSxJQUNGO0FBQ0EsaUJBQWEsb0JBQW9CLEtBQUssT0FBTyxNQUFNLFVBQVUsT0FBTyxDQUFDO0FBQ3JFLFdBQU8sT0FBTztBQUFBLEVBQ2hCLE9BQU87QUFDTCxVQUFNLFlBQVksUUFBUSxPQUFPLElBQUk7QUFDckMsV0FBTyxTQUFTLE9BQU8sTUFBTSxTQUFTO0FBQ3RDLGlCQUFhLG9CQUFvQixPQUFPLElBQUk7QUFBQSxFQUM5QztBQUVBLFNBQU8sZ0JBQWdCLElBQUksV0FBVyxVQUFVO0FBQ2xEO0FBRUEsU0FBUyxpQkFBaUIsS0FBc0I7QUFDOUMsU0FBTyx5QkFBeUIsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLE1BQU0sQ0FBQztBQUN6RTtBQUVBLFNBQVMsbUJBQW1CLE1BQXVCO0FBQ2pELFNBQU8sQ0FBQyxLQUFLLFNBQVMsVUFBVSxXQUFXLEtBQUssS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLGNBQWMsS0FBSyxTQUFTLFdBQVc7QUFDL0g7QUFFQSxTQUFTLG9CQUFvQixRQUFnQixRQUF5QjtBQUNwRSxRQUFNLGdCQUFtQyxDQUFDLFVBQVUsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsV0FBVztBQUNySCxRQUFNLGtCQUFrQixjQUFjLFNBQVMsT0FBTyxJQUFJLEtBQUssT0FBTyxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssT0FBTyxNQUFNLEdBQUcsRUFBRSxTQUFTLFVBQVUsS0FBSztBQUN6SixTQUFPLG1CQUFvQixPQUFPLE9BQU8sS0FBSyxtQkFBbUIsT0FBTyxJQUFJO0FBQzlFO0FBRUEsU0FBUyxhQUFhLFNBQXNCLFFBQTRCO0FBRXRFLFVBQVEsT0FBTyxRQUFRLFlBQVksV0FBVyxJQUFJLFNBQVMsUUFBUSxpQkFBaUIsTUFBTTtBQUM1RjtBQUVBLGVBQWUsVUFBVSxRQUF3QztBQUMvRCxRQUFNLEVBQUUsa0JBQWtCLFlBQVksaUJBQWlCLFVBQVUsSUFBSTtBQUNyRSxRQUFNLGFBQWEsV0FBVztBQUFBLElBQzVCLFNBQVM7QUFBQSxJQUNULFVBQVUsVUFBVTtBQUFBLElBQ3BCLGFBQWEsVUFBVTtBQUFBLEVBQ3pCLENBQUM7QUFDRCxRQUFNLGdCQUFnQixhQUFhLEdBQUcsVUFBVSxJQUFJLFVBQVUsR0FBRyxLQUFLO0FBQ3RFLFFBQU0sV0FBVyxXQUFXLEVBQUUsUUFBUSxVQUFVLEtBQUssWUFBWSxNQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxDQUFDO0FBQzdILFFBQU0sV0FBVyxXQUFXLEVBQUUsUUFBUSxVQUFVLEtBQUssWUFBWSxNQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxDQUFDO0FBQzdILFFBQU0saUJBQWlCLFFBQVEsUUFBUTtBQUN2QyxRQUFNLGlCQUFpQixRQUFRLFFBQVE7QUFFdkMsTUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN4QztBQUFBLEVBQ0Y7QUFFQSxRQUFNLGNBQWMsV0FBVyxTQUFTLFVBQVUsS0FBSztBQUN2RCxRQUFNLFVBQVUsV0FBVyxFQUFFLFFBQVEsVUFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLFVBQVUsU0FBUyxVQUFVLFNBQVMsQ0FBQztBQUMxSCxRQUFNLFVBQVUsV0FBVyxFQUFFLFFBQVEsVUFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLFVBQVUsU0FBUyxVQUFVLFNBQVMsQ0FBQztBQUUxSCxNQUFJLGFBQWE7QUFDZixxQkFBaUIsYUFBYSxJQUFJO0FBQUEsTUFDaEMsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0YsT0FBTztBQUNMLFVBQU0sYUFBYSxvQkFBb0IsS0FBSyxVQUFVLEtBQUssWUFBWSxhQUFhLFVBQVUsUUFBUSxVQUFVLE9BQU8sQ0FBQztBQUV4SCxxQkFBaUIsYUFBYSxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BR2hDLEdBQUksb0JBQW9CLFVBQWEsRUFBRSxDQUFDLGVBQWUsR0FBRyxXQUFXO0FBQUEsTUFDckUsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLE1BQ1g7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYO0FBQUE7QUFBQSxJQUVGO0FBQUEsRUFDRjtBQUVBLE1BQUksZUFBZSxVQUFVLGVBQXlCO0FBQ3BEO0FBQUEsRUFDRjtBQUVBLE1BQUksQ0FBQyxZQUFZO0FBQ2YsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLGNBQ0ksRUFBRSxNQUFNLFVBQVUsT0FBTyxTQUFTLFlBQVksUUFBUSxFQUFFLElBQ3hELEVBQUUsTUFBTSxTQUFTLFlBQVksT0FBTyxHQUFHLFFBQVEsU0FBUyxZQUFZLE9BQU8sR0FBRyxNQUFNLFVBQVUsT0FBTyxTQUFTLFlBQVksUUFBUSxFQUFFO0FBQUEsSUFDMUk7QUFDQTtBQUFBLEVBQ0Y7QUFFQSxhQUFXLFFBQVEsTUFBTSxhQUFhLGNBQWMsR0FBRztBQUNyRCxRQUFJLENBQUMsS0FBSyxTQUFTLFVBQVUsYUFBYSxHQUFHO0FBQzNDO0FBQUEsSUFDRjtBQUNBLFVBQU0sT0FBTyxTQUFTLE1BQU0sVUFBVSxhQUFhO0FBQ25ELFVBQU0sd0JBQXdCLEtBQUssWUFBWSxJQUFJO0FBQ25ELFVBQU0sUUFBUSxTQUFTLHVCQUF1QixLQUFLLGdCQUFnQixPQUFPLFVBQVUsYUFBYSxDQUFDO0FBQ2xHLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxjQUNJLEVBQUUsTUFBTSxVQUFVLE1BQU0sSUFDeEI7QUFBQSxRQUNBLE1BQU0sU0FBUyx1QkFBdUIsS0FBSyxnQkFBZ0IsT0FBTyxVQUFVLFlBQVksQ0FBQztBQUFBLFFBQ3pGLFFBQVEsU0FBUyx1QkFBdUIsS0FBSyxnQkFBZ0IsT0FBTyxVQUFVLFlBQVksQ0FBQztBQUFBLFFBQzNGLE1BQU07QUFBQSxRQUNOO0FBQUEsTUFDRjtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGFBQWEsU0FBeUI7QUFDN0MsTUFBSSxhQUFhLFdBQVc7QUFBQSxJQUMxQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsZUFBYSxXQUFXO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQU1ELGVBQWEsV0FBVztBQUFBLElBQ3RCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxTQUFTLFdBQVcsUUFBa0M7QUFDcEQsU0FBTyxvQkFBb0IsS0FBSyxVQUFVLFNBQVMsT0FBTyxRQUFRLE9BQU8sWUFBWSxPQUFPLElBQUksQ0FBQztBQUNuRztBQUVBLFNBQVMsVUFBVSxhQUE2QjtBQUc5QyxRQUFNLG1CQUFtQix3QkFBd0IsS0FBSyxXQUFXO0FBQ2pFLE1BQUksa0JBQWtCLFdBQVcsUUFBVztBQUUxQyxVQUFNLE1BQU0sT0FBTyxpQkFBaUIsT0FBTyxLQUFLLENBQUM7QUFDakQsVUFBTSxTQUFTLE9BQU8saUJBQWlCLE9BQU8sUUFBUSxDQUFDO0FBQ3ZELFlBQVEsV0FBVyxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxXQUFXLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWTtBQUFBLEVBQzFGO0FBQ0EsU0FBTyxTQUFTLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxVQUFVLEVBQUUsRUFBRSxRQUFRLFlBQVksRUFBRTtBQUN6RjtBQUVBLFNBQVMsYUFBYSxTQUF5QjtBQUM3QyxRQUFNLGFBQWEsV0FBVztBQUFBLElBQzVCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxlQUFlLHdCQUF3QixRQUFnQixhQUF5QztBQUM5RixRQUFNLE1BQU0sUUFBUSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3ZDLFFBQU0sVUFBVSxLQUFLLFFBQVEsVUFBVSxXQUFXLEdBQUcsV0FBVztBQUNsRTsiLCJuYW1lcyI6WyJ2aXNpdCJdfQ==
|
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
function ensureBrowserProcess() {
|
|
13
7
|
const browserProcess = {
|
|
14
8
|
browser: true,
|
|
@@ -39,10 +33,7 @@ function ensureBrowserProcess() {
|
|
|
39
33
|
existingProcessRecord['browser'] = true;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
(
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
36
|
+
ensureBrowserProcess();
|
|
46
37
|
})();
|
|
47
38
|
|
|
48
39
|
import { getLibDebugger } from "@mnaoumov/typescript-lib/debug";
|
|
@@ -84,4 +75,4 @@ ${result.stderr}`);
|
|
|
84
75
|
export {
|
|
85
76
|
spellcheckContent
|
|
86
77
|
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2NzcGVsbC1jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTcGVsbGNoZWNrcyBtYXJrZG93biB0aGF0IGlzIHN0aWxsIGluIG1lbW9yeSwgd2l0aCB0aGUgcmVwb3NpdG9yeSdzIG93biBgc3BlbGxjaGVja2AgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGUgc2libGluZyBvZiBgbWFya2Rvd25saW50LWNvbnRlbnQudHNgLCBmb3IgdGhlIG90aGVyIGhhbGYgb2YgdGhlIHNhbWUgZ2FwOiBgc3BlbGxjaGVja2AgY2FuIG9ubHkgYW5zd2VyXG4gKiBmb3Igd2hhdCBpcyBhbHJlYWR5IG9uIGRpc2ssIHNvIGEgZG9jdW1lbnQgY29tcG9zZWQgZHVyaW5nIGEgcnVuIOKAlCB0aGUgcmVsZWFzZSdzIGNoYW5nZWxvZyBiZWluZyB0aGUgb25lXG4gKiB0aGF0IGNvc3RzIGEgcmVkIGBtYWluYCDigJQgaXMgY2hlY2tlZCBieSBub3RoaW5nIHVudGlsIHRoZSBuZXh0IGdhdGUuIEEgY29pbmVkIHdvcmQgaW4gYSByZWxlYXNlIG5vdGUgbGFuZHNcbiAqIG9uIHRoZSBkZWZhdWx0IGJyYW5jaCBpbnNpZGUgdGhlIHJlbGVhc2UgY29tbWl0LCBhbmQgdGhlIE5FWFQgcmVsZWFzZSBhYm9ydHMgaW4gaXRzIHNlY29uZCBwcmVmbGlnaHQgc3RlcCxcbiAqIGluIGEgcmVwb3NpdG9yeSBub2JvZHkgd2FzIHdvcmtpbmcgb24uXG4gKlxuICogSXQgU0hFTExTIE9VVCB3aGVyZSB0aGUgbWFya2Rvd25saW50IGhhbGYgY2FsbHMgYSBsaWJyYXJ5LCBhbmQgdGhlIGRpZmZlcmVuY2UgaGFzIGEgcmVhc29uIHJhdGhlciB0aGFuXG4gKiBiZWluZyBhbiBvdmVyc2lnaHQuIGBjc3BlbGxgIGRvZXMgZXhwb3J0IGEgQ0xJLWxheWVyIGBsaW50KGZpbGVHbG9icywgb3B0aW9ucywgcmVwb3J0ZXIpYCB0aGF0IHdvdWxkIGJlIHRoZVxuICogZXhhY3QgYW5hbG9ndWUgb2YgYG1hcmtkb3dubGludC1jbGkyYCdzIGBtYWluYCwgYnV0IHRoZSBvbmx5IHdheSB0byBoYW5kIGl0IGNvbnRlbnQgdGhhdCBpcyBub3Qgb24gZGlzayBpc1xuICogYSBgc3RkaW46Ly9gIGdsb2IsIGFuZCBpdHMgcmVhZGVyIGlzIGBzdHJlYW1Db25zdW1lcnMudGV4dChwcm9jZXNzLnN0ZGluKWAg4oCUIHRoZSBIT1NUIHByb2Nlc3MncyBvd24gc3RkaW4sXG4gKiB3aGljaCB0aGUgcmVsZWFzZSdzIGludGVyYWN0aXZlIHJldmlldyBhbHNvIHVzZXMuIFJlYWNoaW5nIGZvciBpdCBpbi1wcm9jZXNzIHdvdWxkIG1lYW4gbW9ua2V5LXBhdGNoaW5nXG4gKiBgcHJvY2Vzcy5zdGRpbmAgZm9yIHRoZSB3aG9sZSBwcm9jZXNzLCBzbyB0aGUgY29udGVudCBnb2VzIHRvIGEgY2hpbGQncyBzdGRpbiBpbnN0ZWFkLlxuICpcbiAqIFRoZSBgc3RkaW46Ly88cGF0aD5gIGZvcm0gaXMgd2hhdCBtYWtlcyB0aGUgY2hlY2sgdGhlIHJlcG9zaXRvcnkncyBvd24gcmF0aGVyIHRoYW4gYSBnZW5lcmljIG9uZTogdGhlXG4gKiB2aXJ0dWFsIGRvY3VtZW50IGlzIGF0dHJpYnV0ZWQgdG8gYSBSRUFMIHBhdGgsIHNvIGBjc3BlbGwuanNvbmAgYmVzaWRlIGl0IOKAlCBpdHMgYHdvcmRzYCwgaXRzIGRpY3Rpb25hcmllcyxcbiAqIGl0cyBgaWdub3JlUGF0aHNgIOKAlCByZXNvbHZlcyBleGFjdGx5IGFzIGl0IHdvdWxkIGZvciB0aGUgd3JpdHRlbiBmaWxlLiBBIHRlbXAgZmlsZSBvdXRzaWRlIHRoZSByZXBvc2l0b3J5XG4gKiB3b3VsZCBsb3NlIGFsbCBvZiB0aGF0LCB3aGljaCBpcyB3aHkgaXQgaXMgbm90IHVzZWQuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgdG9Qb3NpeFBhdGggfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5cbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuLi9yb290LnRzJztcblxuLyoqXG4gKiBUaGUgZXhpdCBjb2RlIGBjc3BlbGxgIHJldHVybnMgd2hlbiBpdCByZXBvcnRlZCBub3RoaW5nLlxuICovXG5jb25zdCBTVUNDRVNTX0VYSVRfQ09ERSA9IDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwZWxsY2hlY2tDb250ZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVsbGNoZWNrQ29udGVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byBzcGVsbGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0aGUgY29udGVudCBpcyBjaGVja2VkIEFTIOKAlCBub3JtYWxseSB0aGUgcGF0aCBpdCBpcyBhYm91dCB0byBiZSB3cml0dGVuIHRvLiBJdCBkZWNpZGVzIHdoaWNoXG4gICAqIGBjc3BlbGxgIGNvbmZpZ3VyYXRpb24gYXBwbGllcywgYW5kIGl0IGlzIHdoYXQgZXZlcnkgcmVwb3J0ZWQgZmluZGluZyBpcyBuYW1lZCBhZnRlci5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3BlbGxjaGVja3MgY29udGVudCB0aGF0IGlzIG5vdCBvbiBkaXNrLCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGBzcGVsbGNoZWNrYCB3b3VsZCBoYXZlIHVzZWQgZm9yIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFNwZWxsY2hlY2tDb250ZW50UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbmRpbmdzLCBlYWNoIG9uZSB0aGUgbGluZSB0aGUgYHNwZWxsY2hlY2tgIG91dHB1dCB3b3VsZFxuICogaGF2ZSBjYXJyaWVkIOKAlCBgPHBhdGg+OjxsaW5lPjo8Y29sdW1uPiAtIFVua25vd24gd29yZCAoPHdvcmQ+KWAg4oCUIG9yIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlcmUgYXJlIG5vbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGVsbGNoZWNrQ29udGVudChwYXJhbXM6IFNwZWxsY2hlY2tDb250ZW50UGFyYW1zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IGNvbnRlbnQsIGZpbGVQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbnRlbnREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdjc3BlbGw6c3BlbGxjaGVja0NvbnRlbnQnKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgIC4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdjc3BlbGwnIH0pLFxuICAgICdsaW50JyxcbiAgICAnLS1uby1wcm9ncmVzcycsXG4gICAgJy0tbm8tbXVzdC1maW5kLWZpbGVzJyxcbiAgICAvLyBUaGUgYENTcGVsbDogRmlsZXMgY2hlY2tlZDog4oCmYCBzdW1tYXJ5IGFuZCB0aGUgY29sb3IgY29kZXMgYXJlIGJvdGggbm9pc2UgaW4gYSBmaW5kaW5nIHRoYXQgZW5kcyB1cFxuICAgIC8vIHF1b3RlZCBpbiBhbiBlcnJvciBtZXNzYWdlLCBhbmQgYm90aCBhcmUgcHJpbnRlZCBieSBkZWZhdWx0IHdoZW4gdGhleSBhcmUgbm90IGFza2VkIGF3YXkuXG4gICAgJy0tbm8tc3VtbWFyeScsXG4gICAgJy0tbm8tY29sb3InLFxuICAgIC8vIEEgUE9TSVggcGF0aCwgYmVjYXVzZSB0aGlzIGlzIHBhcnNlZCBhcyBhIFVSTDogYSBXaW5kb3dzIHBhdGgncyBiYWNrc2xhc2hlcyBkbyBub3Qgc3Vydml2ZSB0aGF0LlxuICAgIGBzdGRpbjovLyR7dG9Qb3NpeFBhdGgoZmlsZVBhdGgpfWBcbiAgXSwge1xuICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgc2hvdWxkSWdub3JlRXhpdENvZGU6IHRydWUsXG4gICAgc2hvdWxkSW5jbHVkZURldGFpbHM6IHRydWUsXG4gICAgc3RkaW46IGNvbnRlbnRcbiAgfSk7XG5cbiAgY29udGVudERlYnVnZ2VyKHJlc3VsdC5zdGRlcnIpO1xuXG4gIGlmIChyZXN1bHQuZXhpdENvZGUgPT09IFNVQ0NFU1NfRVhJVF9DT0RFKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZmluZGluZ3MgPSByZXN1bHQuc3Rkb3V0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgLy8gQSBub24temVybyBleGl0IHdpdGggbm90aGluZyByZXBvcnRlZCBpcyBgY3NwZWxsYCBpdHNlbGYgZmFpbGluZyDigJQgYW4gdW5yZWFkYWJsZSBjb25maWd1cmF0aW9uLCBhIG1pc3NpbmdcbiAgLy8gZGljdGlvbmFyeSwgYSBiaW5hcnkgdGhhdCB3b3VsZCBub3Qgc3RhcnQuIFJldHVybmluZyBgW11gIHRoZXJlIHdvdWxkIHJlYWQgYXMgYSBjbGVhbiBkb2N1bWVudCBhbmQgbGV0IHRoZVxuICAvLyB2ZXJ5IHRoaW5nIHRoaXMgbW9kdWxlIGV4aXN0cyB0byBjYXRjaCB0aHJvdWdoLCBzbyBpdCBmYWlscyBsb3VkbHkgYW5kIGhhbmRzIG92ZXIgd2hhdCB0aGUgdG9vbCBzYWlkLlxuICBpZiAoZmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGBjc3BlbGxcXGAgZXhpdGVkIHdpdGggJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0gd2l0aG91dCByZXBvcnRpbmcgYW55dGhpbmc6XFxuJHtyZXN1bHQuc3RkZXJyfWApO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRpbmdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLG1CQUFtQjtBQUU1QixTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLG9CQUFvQjtBQUs3QixNQUFNLG9CQUFvQjtBQXlCMUIsZUFBc0Isa0JBQWtCLFFBQW9EO0FBQzFGLFFBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSTtBQUM5QixRQUFNLGtCQUFrQixlQUFlLDBCQUEwQjtBQUVqRSxRQUFNLFNBQVMsTUFBTSxhQUFhO0FBQUEsSUFDaEMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUFBLElBQ3hDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQTtBQUFBO0FBQUEsSUFHQTtBQUFBLElBQ0E7QUFBQTtBQUFBLElBRUEsV0FBVyxZQUFZLFFBQVEsQ0FBQztBQUFBLEVBQ2xDLEdBQUc7QUFBQSxJQUNELFNBQVM7QUFBQSxJQUNULHNCQUFzQjtBQUFBLElBQ3RCLHNCQUFzQjtBQUFBLElBQ3RCLE9BQU87QUFBQSxFQUNULENBQUM7QUFFRCxrQkFBZ0IsT0FBTyxNQUFNO0FBRTdCLE1BQUksT0FBTyxhQUFhLG1CQUFtQjtBQUN6QyxXQUFPLENBQUM7QUFBQSxFQUNWO0FBRUEsUUFBTSxXQUFXLE9BQU8sT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLE9BQU8sT0FBTztBQUtwRixNQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLFVBQU0sSUFBSSxNQUFNLDBCQUEwQixPQUFPLE9BQU8sUUFBUSxDQUFDO0FBQUEsRUFBaUMsT0FBTyxNQUFNLEVBQUU7QUFBQSxFQUNuSDtBQUVBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
|
|
@@ -3,48 +3,6 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
(function () {
|
|
7
|
-
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function ensureBrowserProcess() {
|
|
13
|
-
const browserProcess = {
|
|
14
|
-
browser: true,
|
|
15
|
-
cwd() {
|
|
16
|
-
return '/';
|
|
17
|
-
},
|
|
18
|
-
env: {},
|
|
19
|
-
platform: 'android'
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const existingProcess = globalThis.process;
|
|
23
|
-
|
|
24
|
-
if (!existingProcess) {
|
|
25
|
-
globalThis.process = browserProcess;
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (existingProcess.versions?.node) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const existingProcessRecord = existingProcess;
|
|
34
|
-
|
|
35
|
-
for (const [key, value] of Object.entries(browserProcess)) {
|
|
36
|
-
existingProcessRecord[key] ??= value;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
existingProcessRecord['browser'] = true;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
(function initEsm() {
|
|
43
|
-
ensureDisposeSymbols();
|
|
44
|
-
ensureBrowserProcess();
|
|
45
|
-
})();
|
|
46
|
-
})();
|
|
47
|
-
|
|
48
6
|
import { resolveToolCommand } from "../package-manager.mjs";
|
|
49
7
|
import {
|
|
50
8
|
execFromRoot,
|
|
@@ -66,4 +24,4 @@ async function spellcheck(options) {
|
|
|
66
24
|
export {
|
|
67
25
|
spellcheck
|
|
68
26
|
};
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvY3NwZWxsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgcnVubmluZyBhIHNwZWxsY2hlY2sgb24gdGhlIGNvZGViYXNlIHVzaW5nIHRoZSBgY3NwZWxsYCBsaWJyYXJ5LlxuICogSXQgcmVwb3J0cyBhbnkgc3BlbGxpbmcgaXNzdWVzIGZvdW5kIGluIHRoZSBjb2RlIGFuZCByZXR1cm5zIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IGluZGljYXRpbmcgd2hldGhlciB0aGUgc3BlbGxjaGVjayB3YXMgc3VjY2Vzc2Z1bC5cbiAqL1xuXG5pbXBvcnQgeyByZXNvbHZlVG9vbENvbW1hbmQgfSBmcm9tICcuLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgc3BlbGxjaGVja30gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BlbGxjaGVja09wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBjaGVjay4gSWYgb21pdHRlZCwgY2hlY2tzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVucyBhIHNwZWxsY2hlY2sgb24gdGhlIGVudGlyZSBjb2RlYmFzZSB1c2luZyBgY3NwZWxsYC5cbiAqXG4gKiBDaGVja3MgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGZvbGRlciBhbmQgaXRzIHN1YmZvbGRlcnMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogVXNlcyBgLS1uby1tdXN0LWZpbmQtZmlsZXNgIHNvIHRoYXQgY3NwZWxsIGRvZXMgbm90IGZhaWwgd2hlbiBhbGwgcHJvdmlkZWQgcGF0aHNcbiAqIGFyZSBleGNsdWRlZCBieSBidWlsdC1pbiBpZ25vcmUgcnVsZXMgKGUuZy4sIGBwYWNrYWdlLWxvY2suanNvbmApLlxuICpcbiAqIFVzZXMgYC0tZ2l0aWdub3JlYCBzbyBhIHBhdGggZ2l0IGlnbm9yZXMgaXMgYSBwYXRoIGNzcGVsbCBza2lwcyBcdTIwMTQgZ2VuZXJhdGVkIG91dHB1dCwgYnVpbGQgZm9sZGVycyBhbmRcbiAqIGV2ZXJ5IGBub2RlX21vZHVsZXNgIGFyZSBjb3ZlcmVkIHdpdGhvdXQgYSBoYW5kLW1haW50YWluZWQgYGlnbm9yZVBhdGhzYCBsaXN0IHRoYXQgZHJpZnRzIGZyb21cbiAqIGAuZ2l0aWdub3JlYC4gSXQgaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgcmF0aGVyIHRoYW4gc2V0IGluIGBjc3BlbGwuanNvbmAgc28gdGhhdCBldmVyeSBwcm9qZWN0XG4gKiBjb25zdW1pbmcgdGhpcyBmdW5jdGlvbiBpbmhlcml0cyBpdCwgcmF0aGVyIHRoYW4gZWFjaCBoYXZpbmcgdG8gZWRpdCBpdHMgb3duIGNvbmZpZy4gYC0tZ2l0aWdub3JlLXJvb3RgXG4gKiBzdG9wcyB0aGUgc2VhcmNoIGF0IHRoZSBwcm9qZWN0IHJvb3QsIHNvIGEgYC5naXRpZ25vcmVgIGluIHNvbWUgcGFyZW50IGZvbGRlciBvdXRzaWRlIHRoZSBwcm9qZWN0IGNhbm5vdFxuICogc2lsZW50bHkgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGNoZWNrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBTcGVsbGNoZWNrT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9LCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHNwZWxsY2hlY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGVsbGNoZWNrKG9wdGlvbnM/OiBTcGVsbGNoZWNrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBhdGhzIH0gPSBvcHRpb25zID8/
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvY3NwZWxsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgcnVubmluZyBhIHNwZWxsY2hlY2sgb24gdGhlIGNvZGViYXNlIHVzaW5nIHRoZSBgY3NwZWxsYCBsaWJyYXJ5LlxuICogSXQgcmVwb3J0cyBhbnkgc3BlbGxpbmcgaXNzdWVzIGZvdW5kIGluIHRoZSBjb2RlIGFuZCByZXR1cm5zIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IGluZGljYXRpbmcgd2hldGhlciB0aGUgc3BlbGxjaGVjayB3YXMgc3VjY2Vzc2Z1bC5cbiAqL1xuXG5pbXBvcnQgeyByZXNvbHZlVG9vbENvbW1hbmQgfSBmcm9tICcuLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgc3BlbGxjaGVja30gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BlbGxjaGVja09wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBjaGVjay4gSWYgb21pdHRlZCwgY2hlY2tzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVucyBhIHNwZWxsY2hlY2sgb24gdGhlIGVudGlyZSBjb2RlYmFzZSB1c2luZyBgY3NwZWxsYC5cbiAqXG4gKiBDaGVja3MgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGZvbGRlciBhbmQgaXRzIHN1YmZvbGRlcnMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogVXNlcyBgLS1uby1tdXN0LWZpbmQtZmlsZXNgIHNvIHRoYXQgY3NwZWxsIGRvZXMgbm90IGZhaWwgd2hlbiBhbGwgcHJvdmlkZWQgcGF0aHNcbiAqIGFyZSBleGNsdWRlZCBieSBidWlsdC1pbiBpZ25vcmUgcnVsZXMgKGUuZy4sIGBwYWNrYWdlLWxvY2suanNvbmApLlxuICpcbiAqIFVzZXMgYC0tZ2l0aWdub3JlYCBzbyBhIHBhdGggZ2l0IGlnbm9yZXMgaXMgYSBwYXRoIGNzcGVsbCBza2lwcyBcdTIwMTQgZ2VuZXJhdGVkIG91dHB1dCwgYnVpbGQgZm9sZGVycyBhbmRcbiAqIGV2ZXJ5IGBub2RlX21vZHVsZXNgIGFyZSBjb3ZlcmVkIHdpdGhvdXQgYSBoYW5kLW1haW50YWluZWQgYGlnbm9yZVBhdGhzYCBsaXN0IHRoYXQgZHJpZnRzIGZyb21cbiAqIGAuZ2l0aWdub3JlYC4gSXQgaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgcmF0aGVyIHRoYW4gc2V0IGluIGBjc3BlbGwuanNvbmAgc28gdGhhdCBldmVyeSBwcm9qZWN0XG4gKiBjb25zdW1pbmcgdGhpcyBmdW5jdGlvbiBpbmhlcml0cyBpdCwgcmF0aGVyIHRoYW4gZWFjaCBoYXZpbmcgdG8gZWRpdCBpdHMgb3duIGNvbmZpZy4gYC0tZ2l0aWdub3JlLXJvb3RgXG4gKiBzdG9wcyB0aGUgc2VhcmNoIGF0IHRoZSBwcm9qZWN0IHJvb3QsIHNvIGEgYC5naXRpZ25vcmVgIGluIHNvbWUgcGFyZW50IGZvbGRlciBvdXRzaWRlIHRoZSBwcm9qZWN0IGNhbm5vdFxuICogc2lsZW50bHkgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGNoZWNrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBTcGVsbGNoZWNrT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9LCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHNwZWxsY2hlY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGVsbGNoZWNrKG9wdGlvbnM/OiBTcGVsbGNoZWNrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBhdGhzIH0gPSBvcHRpb25zID8/IHt9O1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJy4nXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3Qgcm9vdEZvbGRlciA9IGdldFJvb3RGb2xkZXIoKTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnY3NwZWxsJyB9KSxcbiAgICAnLS1uby1wcm9ncmVzcycsXG4gICAgJy0tbm8tbXVzdC1maW5kLWZpbGVzJyxcbiAgICAnLS1naXRpZ25vcmUnLFxuICAgIC4uLnJvb3RGb2xkZXIgPT09IG51bGwgPyBbXSA6IFsnLS1naXRpZ25vcmUtcm9vdCcsIHJvb3RGb2xkZXJdLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XG4gIF0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFPQSxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQStCUCxlQUFzQixXQUFXLFNBQTRDO0FBQzNFLFFBQU0sRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDO0FBRTlCLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLEdBQUc7QUFFNUMsUUFBTSxhQUFhLGNBQWM7QUFDakMsUUFBTSxhQUFhO0FBQUEsSUFDakIsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUFBLElBQ3hDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUcsZUFBZSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixVQUFVO0FBQUEsSUFDN0QsRUFBRSxrQkFBa0IsUUFBUTtBQUFBLEVBQzlCLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
|