@nlabs/lex 1.55.1 → 1.56.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/README.md +29 -0
- package/lib/LexConfig.d.ts +7 -3
- package/lib/LexConfig.js +8 -2
- package/lib/commands/build/build.d.ts +3 -2
- package/lib/commands/build/build.js +2 -2
- package/lib/commands/dev/dev.d.ts +1 -0
- package/lib/commands/dev/dev.js +21 -8
- package/lib/commands/publish/publish.js +10 -5
- package/lib/commands/serverless/serverless.js +15 -13
- package/lib/commands/test/test.js +2 -2
- package/lib/commands/versions/versions.d.ts +1 -1
- package/lib/commands/versions/versions.js +2 -2
- package/lib/create/changelog.d.ts +11 -6
- package/lib/create/changelog.js +5 -5
- package/lib/lex.js +4 -4
- package/lib/types/modules.d.js +2 -0
- package/lib/utils/app.d.ts +4 -4
- package/lib/utils/app.js +6 -6
- package/lib/utils/postcss/postcss-for.d.ts +9 -1
- package/lib/utils/postcss/postcss-for.js +7 -6
- package/lib/utils/postcss/postcss-percentage.d.ts +3 -2
- package/lib/utils/postcss/postcss-percentage.js +1 -2
- package/lib/utils/webpack/LexSvgSpritemapPlugin.d.ts +20 -0
- package/lib/utils/webpack/LexSvgSpritemapPlugin.js +257 -0
- package/package.json +43 -45
- package/tsconfig.json +1 -0
- package/webpack.config.js +6 -13
|
@@ -161,7 +161,7 @@ export const test = async (options, args, filesOrCallback, callbackParam)=>{
|
|
|
161
161
|
} else {
|
|
162
162
|
// No Vitest config file exists in the project
|
|
163
163
|
// Check if there's a Vitest config in lex.config.cjs
|
|
164
|
-
projectVitestConfig = LexConfig.config.vitest;
|
|
164
|
+
projectVitestConfig = LexConfig.config.vitest || null;
|
|
165
165
|
const lexDir = LexConfig.getLexDir();
|
|
166
166
|
const lexVitestConfig = pathResolve(lexDir, 'vitest.config.mjs');
|
|
167
167
|
if (debug) {
|
|
@@ -426,4 +426,4 @@ Please provide:
|
|
|
426
426
|
};
|
|
427
427
|
export default test;
|
|
428
428
|
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0L3Rlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWcsIGdldFR5cGVTY3JpcHRDb25maWdQYXRofSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtyZXNvbHZlQmluYXJ5UGF0aH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi4vYWkvYWkuanMnO1xuXG5jb25zdCBkZXRlY3RFU00gPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYWlEZWJ1Zz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFpR2VuZXJhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBhaUFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBiYWlsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZFNpbmNlPzogc3RyaW5nO1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNsZWFyQ2FjaGU/OiBib29sZWFuO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xsZWN0Q292ZXJhZ2VGcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcnM/OiBib29sZWFuO1xuICByZWFkb25seSBjb25maWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVidWdUZXN0cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRldGVjdE9wZW5IYW5kbGVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudj86IHN0cmluZztcbiAgcmVhZG9ubHkgZXJyb3JPbkRlcHJlY2F0ZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBleHBhbmQ/OiBib29sZWFuO1xuICByZWFkb25seSBmb3JjZUV4aXQ/OiBib29sZWFuO1xuICByZWFkb25seSBnZW5lcmF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGpzb24/OiBib29sZWFuO1xuICByZWFkb25seSBsYXN0Q29tbWl0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbGlzdFRlc3RzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbG9nSGVhcFVzYWdlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V29ya2Vycz86IHN0cmluZztcbiAgcmVhZG9ubHkgbm9TdGFja1RyYWNlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm90aWZ5PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgb25seUNoYW5nZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBvdXRwdXRGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBwYXNzV2l0aE5vVGVzdHM/OiBib29sZWFuO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZUNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcnVuSW5CYW5kPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2V0dXA/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNob3dDb25maWc/OiBib29sZWFuO1xuICByZWFkb25seSBzaWxlbnQ/OiBib29sZWFuO1xuICByZWFkb25seSB0ZXN0TG9jYXRpb25JblJlc3VsdHM/OiBib29sZWFuO1xuICByZWFkb25seSB0ZXN0TmFtZVBhdHRlcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlc3RQYXRoUGF0dGVybj86IHN0cmluZztcbiAgcmVhZG9ubHkgdXBkYXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlU3RkZXJyPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHdhdGNoPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaEFsbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFRlc3RDYWxsYmFjayA9IHR5cGVvZiBwcm9jZXNzLmV4aXQ7XG5cbmNvbnN0IGRlZmF1bHRFeGl0ID0gKChjb2RlPzogbnVtYmVyKSA9PiB7XG4gIGlmKHByb2Nlc3MuZW52LlZJVEVTVCB8fCBwcm9jZXNzLmVudi5WSVRFU1RfV09SS0VSX0lEIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICB9XG5cbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufSkgYXMgdHlwZW9mIHByb2Nlc3MuZXhpdDtcblxuZXhwb3J0IGNvbnN0IGdldFRlc3RGaWxlUGF0dGVybnMgPSAodGVzdFBhdGhQYXR0ZXJuPzogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBkZWZhdWx0UGF0dGVybnMgPSBbJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJywgJyoqLyouaW50ZWdyYXRpb24uKiddO1xuXG4gIGlmKCF0ZXN0UGF0aFBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGVmYXVsdFBhdHRlcm5zO1xuICB9XG5cbiAgcmV0dXJuIFt0ZXN0UGF0aFBhdHRlcm5dO1xufTtcblxuY29uc3QgZmluZFVuY292ZXJlZFNvdXJjZUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc291cmNlRmlsZXMgPSBnbG9iU3luYygnc3JjLyoqLyoue3RzLHRzeCxqcyxqc3h9Jywge1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovbGliLyoqJywgJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJ11cbiAgfSk7XG5cbiAgY29uc3QgdGVzdEZpbGVzID0gZ2xvYlN5bmMoJyoqLyoue3Rlc3Qsc3BlY30ue3RzLHRzeCxqcyxqc3h9Jywge1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovbGliLyoqJ11cbiAgfSk7XG5cbiAgcmV0dXJuIHNvdXJjZUZpbGVzLmZpbHRlcigoc291cmNlRmlsZSkgPT4ge1xuICAgIGNvbnN0IGJhc2VOYW1lID0gc291cmNlRmlsZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuICAgIHJldHVybiAhdGVzdEZpbGVzLnNvbWUoKHRlc3RGaWxlKSA9PiB0ZXN0RmlsZS5pbmNsdWRlcyhiYXNlTmFtZSkpO1xuICB9KTtcbn07XG5cbmNvbnN0IHByb2Nlc3NUZXN0UmVzdWx0cyA9IChvdXRwdXRGaWxlPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYoIW91dHB1dEZpbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlc3QgPSBhc3luYyAoXG4gIG9wdGlvbnM6IFRlc3RPcHRpb25zLFxuICBhcmdzPzogc3RyaW5nW10sXG4gIGZpbGVzT3JDYWxsYmFjaz86IHN0cmluZ1tdIHwgVGVzdENhbGxiYWNrLFxuICBjYWxsYmFja1BhcmFtPzogVGVzdENhbGxiYWNrXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAvLyBCYWNrd2FyZC1jb21wYXQgYXJndW1lbnQgbm9ybWFsaXphdGlvbjogYWxsb3cgY2FsbGJhY2sgYXMgdGhpcmQgcGFyYW1cbiAgbGV0IGZpbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNhbGxiYWNrOiBUZXN0Q2FsbGJhY2sgPSBkZWZhdWx0RXhpdDtcblxuICBpZih0eXBlb2YgZmlsZXNPckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBmaWxlc09yQ2FsbGJhY2sgYXMgVGVzdENhbGxiYWNrO1xuICB9IGVsc2Uge1xuICAgIGZpbGVzID0gZmlsZXNPckNhbGxiYWNrIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2tQYXJhbSB8fCBkZWZhdWx0RXhpdDtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5hbHl6ZSA9IGZhbHNlLFxuICAgIGFpQW5hbHl6ZSA9IGZhbHNlLFxuICAgIGFpRGVidWcgPSBmYWxzZSxcbiAgICBhaUdlbmVyYXRlID0gZmFsc2UsXG4gICAgYmFpbCxcbiAgICBjaGFuZ2VkRmlsZXNXaXRoQW5jZXN0b3IsXG4gICAgY2hhbmdlZFNpbmNlLFxuICAgIGNpLFxuICAgIGNsZWFyQ2FjaGUsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGNvbGxlY3RDb3ZlcmFnZUZyb20sXG4gICAgY29sb3JzLFxuICAgIGNvbmZpZyxcbiAgICBkZWJ1ZyA9IGZhbHNlLFxuICAgIGRlYnVnVGVzdHMgPSBmYWxzZSxcbiAgICBkZXRlY3RPcGVuSGFuZGxlcyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBlbnYsXG4gICAgZXJyb3JPbkRlcHJlY2F0ZWQsXG4gICAgZXhwYW5kLFxuICAgIGZvcmNlRXhpdCxcbiAgICBnZW5lcmF0ZSA9IGZhbHNlLFxuICAgIGpzb24sXG4gICAgbGFzdENvbW1pdCxcbiAgICBsaXN0VGVzdHMsXG4gICAgbG9nSGVhcFVzYWdlLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbm9TdGFja1RyYWNlLFxuICAgIG5vdGlmeSxcbiAgICBvbmx5Q2hhbmdlZCxcbiAgICBvdXRwdXRGaWxlLFxuICAgIHBhc3NXaXRoTm9UZXN0cyxcbiAgICBxdWlldCxcbiAgICByZW1vdmVDYWNoZSxcbiAgICBydW5JbkJhbmQsXG4gICAgc2V0dXAsXG4gICAgc2hvd0NvbmZpZyxcbiAgICBzaWxlbnQsXG4gICAgdGVzdExvY2F0aW9uSW5SZXN1bHRzLFxuICAgIHRlc3ROYW1lUGF0dGVybixcbiAgICB0ZXN0UGF0aFBhdHRlcm4sXG4gICAgdXBkYXRlLFxuICAgIHVzZVN0ZGVycixcbiAgICB2ZXJib3NlLFxuICAgIHdhdGNoLFxuICAgIHdhdGNoQWxsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHVzZUdlbmVyYXRlID0gZ2VuZXJhdGUgfHwgYWlHZW5lcmF0ZTtcbiAgY29uc3QgdXNlQW5hbHl6ZSA9IGFuYWx5emUgfHwgYWlBbmFseXplO1xuICBjb25zdCB1c2VEZWJ1ZyA9IGRlYnVnVGVzdHMgfHwgYWlEZWJ1ZztcblxuICBsb2coYCR7Y2xpTmFtZX0gdGVzdGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcob3B0aW9ucyk7XG5cbiAgY29uc3Qge3VzZVR5cGVzY3JpcHR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgY29uc3QgdGVzdENvbmZpZ1BhdGggPSBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCgndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyh0ZXN0Q29uZmlnUGF0aCkpIHtcbiAgICAgIGxvZygnVXNpbmcgdHNjb25maWcudGVzdC5qc29uIGZvciB0ZXN0aW5nLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIExleENvbmZpZy5jaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgaWYodXNlR2VuZXJhdGUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgY29kZSB0byBnZW5lcmF0ZSB0ZXN0IGNhc2VzLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdW5jb3ZlcmVkRmlsZXMgPSBmaW5kVW5jb3ZlcmVkU291cmNlRmlsZXMoKTtcblxuICAgICAgaWYodW5jb3ZlcmVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0YXJnZXRGaWxlID0gdW5jb3ZlcmVkRmlsZXNbMF07XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBmaWxlOiB0YXJnZXRGaWxlLFxuICAgICAgICAgIHByb21wdDogYEdlbmVyYXRlIFZpdGVzdCB1bml0IHRlc3RzIGZvciB0aGlzIGZpbGU6ICR7dGFyZ2V0RmlsZX1cXG5cXG4ke3JlYWRGaWxlU3luYyh0YXJnZXRGaWxlLCAndXRmLTgnKX1cXG5cXG5QbGVhc2UgY3JlYXRlIGNvbXByZWhlbnNpdmUgdGVzdHMgdGhhdCBjb3ZlciB0aGUgbWFpbiBmdW5jdGlvbmFsaXR5LiBJbmNsdWRlIHRlc3QgZml4dHVyZXMgYW5kIG1vY2tzIHdoZXJlIG5lY2Vzc2FyeS5gLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHRhc2s6ICd0ZXN0J1xuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYEFJIHRlc3QgZ2VuZXJhdGlvbiBzdWdnZXN0aW9ucyBwcm92aWRlZCBmb3IgJHt0YXJnZXRGaWxlfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBbGwgc291cmNlIGZpbGVzIGFwcGVhciB0byBoYXZlIGNvcnJlc3BvbmRpbmcgdGVzdCBmaWxlcycpO1xuICAgICAgfVxuICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgdGVzdCBzdWdnZXN0aW9ucycpO1xuICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIHRlc3QgZ2VuZXJhdGlvbiBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Vml0ZXN0QmluID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy8uYmluL3ZpdGVzdCcpO1xuICBsZXQgdml0ZXN0UGF0aDogc3RyaW5nO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdFZpdGVzdEJpbikpIHtcbiAgICB2aXRlc3RQYXRoID0gcHJvamVjdFZpdGVzdEJpbjtcbiAgfSBlbHNlIHtcbiAgICB2aXRlc3RQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3ZpdGVzdCcpO1xuICB9XG5cbiAgaWYoIXZpdGVzdFBhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFZpdGVzdCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBsZXQgdml0ZXN0Q29uZmlnRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvamVjdFZpdGVzdENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuICBpZihjb25maWcpIHtcbiAgICB2aXRlc3RDb25maWdGaWxlID0gY29uZmlnO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHByb2plY3RWaXRlc3RDb25maWdQYXRocyA9IFtcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd2aXRlc3QuY29uZmlnLnRzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAndml0ZXN0LmNvbmZpZy5tdHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd2aXRlc3QuY29uZmlnLmpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAndml0ZXN0LmNvbmZpZy5tanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd2aXRlc3QuY29uZmlnLmNqcycpXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ1BhdGggPSBwcm9qZWN0Vml0ZXN0Q29uZmlnUGF0aHMuZmluZCgoY29uZmlnUGF0aCkgPT4gZXhpc3RzU3luYyhjb25maWdQYXRoKSk7XG5cbiAgICBpZihleGlzdGluZ0NvbmZpZ1BhdGgpIHtcbiAgICAgIHZpdGVzdENvbmZpZ0ZpbGUgPSBleGlzdGluZ0NvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgVml0ZXN0IGNvbmZpZyBmaWxlOiAke3ZpdGVzdENvbmZpZ0ZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIFZpdGVzdCBjb25maWcgZmlsZSBleGlzdHMgaW4gdGhlIHByb2plY3RcbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBWaXRlc3QgY29uZmlnIGluIGxleC5jb25maWcuY2pzXG4gICAgICBwcm9qZWN0Vml0ZXN0Q29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZy52aXRlc3Q7XG5cbiAgICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICAgIGNvbnN0IGxleFZpdGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3ZpdGVzdC5jb25maWcubWpzJyk7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgTG9va2luZyBmb3IgVml0ZXN0IGNvbmZpZyBhdDogJHtsZXhWaXRlc3RDb25maWd9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgRmlsZSBleGlzdHM6ICR7ZXhpc3RzU3luYyhsZXhWaXRlc3RDb25maWcpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBpZihleGlzdHNTeW5jKGxleFZpdGVzdENvbmZpZykpIHtcbiAgICAgICAgdml0ZXN0Q29uZmlnRmlsZSA9IGxleFZpdGVzdENvbmZpZztcbiAgICAgICAgaWYocHJvamVjdFZpdGVzdENvbmZpZyAmJiBPYmplY3Qua2V5cyhwcm9qZWN0Vml0ZXN0Q29uZmlnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgTGV4IFZpdGVzdCBjb25maWcgd2l0aCBwcm9qZWN0IFZpdGVzdCBjb25maWcgZnJvbSBsZXguY29uZmlnLmNqczogJHt2aXRlc3RDb25maWdGaWxlfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBVc2luZyBMZXggVml0ZXN0IGNvbmZpZyAobm8gcHJvamVjdCBWaXRlc3QgY29uZmlnIGZvdW5kKTogJHt2aXRlc3RDb25maWdGaWxlfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZygnTm8gVml0ZXN0IGNvbmZpZyBmb3VuZCBpbiBwcm9qZWN0IG9yIExleCcsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYoc2hvd0NvbmZpZykge1xuICAgIGlmKHZpdGVzdENvbmZpZ0ZpbGUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnID0gYXdhaXQgaW1wb3J0KHZpdGVzdENvbmZpZ0ZpbGUpO1xuICAgICAgbG9nKEpTT04uc3RyaW5naWZ5KHJlc29sdmVkQ29uZmlnLmRlZmF1bHQgPz8gcmVzb2x2ZWRDb25maWcsIG51bGwsIDIpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKEpTT04uc3RyaW5naWZ5KHt0ZXN0OiBwcm9qZWN0Vml0ZXN0Q29uZmlnID8/IHt9fSwgbnVsbCwgMiksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IHZpdGVzdFNldHVwRmlsZTogc3RyaW5nID0gc2V0dXAgfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3ZpdGVzdC5zZXR1cC5qcycpO1xuICBjb25zdCB2aXRlc3RBcmdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB2aXRlc3RPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCByZXBvcnRlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgd2F0Y2hNb2RlID0gQm9vbGVhbih3YXRjaCB8fCB3YXRjaEFsbCk7XG4gIGNvbnN0IGxpc3RNb2RlID0gQm9vbGVhbihsaXN0VGVzdHMpO1xuXG4gIGlmKGxpc3RNb2RlKSB7XG4gICAgdml0ZXN0QXJncy5wdXNoKCdsaXN0Jyk7XG4gIH0gZWxzZSBpZih3YXRjaE1vZGUpIHtcbiAgICB2aXRlc3RBcmdzLnB1c2goJ3dhdGNoJyk7XG4gIH0gZWxzZSB7XG4gICAgdml0ZXN0QXJncy5wdXNoKCdydW4nKTtcbiAgfVxuXG4gIGNvbnN0IGlzRVNNID0gZGV0ZWN0RVNNKHByb2Nlc3MuY3dkKCkpO1xuICBsZXQgbm9kZU9wdGlvbnMgPSBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgfHwgJyc7XG4gIGlmKGlzRVNNKSB7XG4gICAgaWYoIW5vZGVPcHRpb25zLmluY2x1ZGVzKCctLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzJykpIHtcbiAgICAgIG5vZGVPcHRpb25zID0gYCR7bm9kZU9wdGlvbnN9IC0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXNgLnRyaW0oKTtcbiAgICB9XG4gICAgbG9nKCdFU00gcHJvamVjdCBkZXRlY3RlZCwgdXNpbmcgLS1leHBlcmltZW50YWwtdm0tbW9kdWxlcyBpbiBOT0RFX09QVElPTlMnLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIGlmKHZpdGVzdENvbmZpZ0ZpbGUpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tY29uZmlnJywgdml0ZXN0Q29uZmlnRmlsZSk7XG4gIH1cblxuICBpZihiYWlsKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWJhaWwnLCAnMScpO1xuICB9XG5cbiAgaWYoY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWNoYW5nZWQnKTtcbiAgfVxuXG4gIGlmKGNoYW5nZWRTaW5jZSkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1jaGFuZ2VkJywgY2hhbmdlZFNpbmNlKTtcbiAgfVxuXG4gIGlmKGNpKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLXJ1bicpO1xuICB9XG5cbiAgaWYoY29sbGVjdENvdmVyYWdlRnJvbSkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1jb3ZlcmFnZScsICctLWNvdmVyYWdlLmluY2x1ZGUnLCBjb2xsZWN0Q292ZXJhZ2VGcm9tKTtcbiAgfVxuXG4gIGlmKGRlYnVnKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWluc3BlY3QnKTtcbiAgfVxuXG4gIGlmKGRldGVjdE9wZW5IYW5kbGVzKSB7XG4gICAgcmVwb3J0ZXJzLmFkZCgnaGFuZ2luZy1wcm9jZXNzJyk7XG4gIH1cblxuICBjb25zdCBlbnZpcm9ubWVudE5hbWUgPSBlbnZpcm9ubWVudCB8fCBlbnY7XG4gIGlmKGVudmlyb25tZW50TmFtZSkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1lbnZpcm9ubWVudCcsIGVudmlyb25tZW50TmFtZSk7XG4gIH1cblxuICBpZihlcnJvck9uRGVwcmVjYXRlZCkge1xuICAgIGxvZygnVml0ZXN0IGRvZXMgbm90IHN1cHBvcnQgLS1lcnJvck9uRGVwcmVjYXRlZDsgb3B0aW9uIGlnbm9yZWQuJywgJ3dhcm4nLCBxdWlldCk7XG4gIH1cblxuICBpZihleHBhbmQpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tZXhwYW5kU25hcHNob3REaWZmJyk7XG4gIH1cblxuICBpZihmb3JjZUV4aXQpIHtcbiAgICBsb2coJ1ZpdGVzdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9yY2VFeGl0OyBvcHRpb24gaWdub3JlZC4nLCAnd2FybicsIHF1aWV0KTtcbiAgfVxuXG4gIGlmKGxhc3RDb21taXQpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tY2hhbmdlZCcpO1xuICB9XG5cbiAgaWYobG9nSGVhcFVzYWdlKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWxvZ0hlYXBVc2FnZScpO1xuICB9XG5cbiAgaWYobWF4V29ya2Vycykge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1tYXhXb3JrZXJzJywgbWF4V29ya2Vycyk7XG4gIH1cblxuICBpZihub1N0YWNrVHJhY2UpIHtcbiAgICBsb2coJ1ZpdGVzdCBkb2VzIG5vdCBzdXBwb3J0IC0tbm9TdGFja1RyYWNlOyBvcHRpb24gaWdub3JlZC4nLCAnd2FybicsIHF1aWV0KTtcbiAgfVxuXG4gIGlmKG5vdGlmeSkge1xuICAgIGxvZygnVml0ZXN0IGRvZXMgbm90IHN1cHBvcnQgLS1ub3RpZnk7IG9wdGlvbiBpZ25vcmVkLicsICd3YXJuJywgcXVpZXQpO1xuICB9XG5cbiAgaWYob25seUNoYW5nZWQpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tY2hhbmdlZCcpO1xuICB9XG5cbiAgbGV0IHRlbXBPdXRwdXRGaWxlID0gb3V0cHV0RmlsZTtcbiAgY29uc3Qgc2hvdWxkV3JpdGVKc29uID0ganNvbiB8fCB1c2VBbmFseXplIHx8IHVzZURlYnVnIHx8IEJvb2xlYW4ob3V0cHV0RmlsZSk7XG5cbiAgaWYoc2hvdWxkV3JpdGVKc29uKSB7XG4gICAgdGVtcE91dHB1dEZpbGUgPSBvdXRwdXRGaWxlIHx8ICcubGV4LXRlc3QtcmVzdWx0cy5qc29uJztcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tb3V0cHV0RmlsZScsIHRlbXBPdXRwdXRGaWxlKTtcbiAgICByZXBvcnRlcnMuYWRkKCdqc29uJyk7XG4gIH1cblxuICBpZihwYXNzV2l0aE5vVGVzdHMpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tcGFzc1dpdGhOb1Rlc3RzJyk7XG4gIH1cblxuICBpZihydW5JbkJhbmQpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tbm8tZmlsZS1wYXJhbGxlbGlzbScsICctLW1heFdvcmtlcnMnLCAnMScpO1xuICB9XG5cbiAgaWYoc2lsZW50KSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLXNpbGVudCcpO1xuICB9XG5cbiAgaWYodGVzdExvY2F0aW9uSW5SZXN1bHRzKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWluY2x1ZGVUYXNrTG9jYXRpb24nKTtcbiAgfVxuXG4gIGlmKHRlc3ROYW1lUGF0dGVybikge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS10ZXN0TmFtZVBhdHRlcm4nLCB0ZXN0TmFtZVBhdHRlcm4pO1xuICB9XG5cbiAgaWYodGVzdFBhdGhQYXR0ZXJuKSB7XG4gICAgZmlsdGVycy5wdXNoKHRlc3RQYXRoUGF0dGVybik7XG4gIH1cblxuICBpZih1c2VTdGRlcnIpIHtcbiAgICBsb2coJ1ZpdGVzdCBkb2VzIG5vdCBzdXBwb3J0IC0tdXNlU3RkZXJyOyBvcHRpb24gaWdub3JlZC4nLCAnd2FybicsIHF1aWV0KTtcbiAgfVxuXG4gIGlmKHZlcmJvc2UpIHtcbiAgICByZXBvcnRlcnMuYWRkKCd2ZXJib3NlJyk7XG4gIH1cblxuICBpZihyZW1vdmVDYWNoZSB8fCBjbGVhckNhY2hlKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWNsZWFyQ2FjaGUnKTtcbiAgfVxuXG4gIGlmKHVwZGF0ZSkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS11cGRhdGUnKTtcbiAgfVxuXG4gIGlmKHdhdGNoKSB7XG4gICAgZmlsdGVycy5wdXNoKHdhdGNoKTtcbiAgfVxuXG4gIGlmKGFyZ3MpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goLi4uYXJncyk7XG4gIH1cblxuICBpZihmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgZmlsdGVycy5wdXNoKC4uLmZpbGVzKTtcbiAgfVxuXG4gIGlmKHJlcG9ydGVycy5zaXplID4gMCkge1xuICAgIGNvbnN0IHJlcG9ydGVyTGlzdCA9IEFycmF5LmZyb20ocmVwb3J0ZXJzKTtcbiAgICBpZihyZXBvcnRlckxpc3QuaW5jbHVkZXMoJ2pzb24nKSAmJiAhcmVwb3J0ZXJMaXN0LmluY2x1ZGVzKCd2ZXJib3NlJykpIHtcbiAgICAgIC8vIEtlZXAgY29uc29sZSBvdXRwdXQgd2hpbGUgd3JpdGluZyBKU09OIHJlc3VsdHMuXG4gICAgICByZXBvcnRlckxpc3QudW5zaGlmdCgnZGVmYXVsdCcpO1xuICAgIH1cbiAgICByZXBvcnRlckxpc3QuZm9yRWFjaCgocmVwb3J0ZXIpID0+IHZpdGVzdE9wdGlvbnMucHVzaCgnLS1yZXBvcnRlcicsIHJlcG9ydGVyKSk7XG4gIH1cblxuICBjb25zdCBmaW5hbEFyZ3MgPSBbLi4udml0ZXN0QXJncywgLi4udml0ZXN0T3B0aW9ucywgLi4uZmlsdGVyc107XG5cbiAgaWYoZGVidWcpIHtcbiAgICBsb2coYFZpdGVzdCBvcHRpb25zOiAke2ZpbmFsQXJncy5qb2luKCcgJyl9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKGBOT0RFX09QVElPTlM6ICR7bm9kZU9wdGlvbnN9YCwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgTk9ERV9PUFRJT05TOiBub2RlT3B0aW9uc1xuICAgIH07XG5cbiAgICBpZihjb2xvcnMpIHtcbiAgICAgIGVudi5GT1JDRV9DT0xPUiA9ICcxJztcbiAgICB9XG5cbiAgICBpZihjaSkge1xuICAgICAgZW52LkNJID0gJ3RydWUnO1xuICAgIH1cblxuICAgIGlmKHZpdGVzdFNldHVwRmlsZSAmJiBleGlzdHNTeW5jKHZpdGVzdFNldHVwRmlsZSkpIHtcbiAgICAgIGVudi5MRVhfVklURVNUX1NFVFVQID0gdml0ZXN0U2V0dXBGaWxlO1xuICAgIH1cblxuICAgIGF3YWl0IGV4ZWNhKHZpdGVzdFBhdGgsIGZpbmFsQXJncywge1xuICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIGVudixcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCdcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnVGVzdGluZyBjb21wbGV0ZWQhJyk7XG5cbiAgICBpZih1c2VBbmFseXplKSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGVzdCBjb3ZlcmFnZSBhbmQgc3VnZ2VzdGluZyBpbXByb3ZlbWVudHMuLi4nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdHMgPSBwcm9jZXNzVGVzdFJlc3VsdHModGVtcE91dHB1dEZpbGUpO1xuICAgICAgICBjb25zdCBmaWxlUGF0dGVybnMgPSBnZXRUZXN0RmlsZVBhdHRlcm5zKHRlc3RQYXRoUGF0dGVybik7XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBwcm9tcHQ6IGBBbmFseXplIHRoZXNlIFZpdGVzdCB0ZXN0IHJlc3VsdHMgYW5kIHN1Z2dlc3QgdGVzdCBjb3ZlcmFnZSBpbXByb3ZlbWVudHM6XG5cbiR7SlNPTi5zdHJpbmdpZnkodGVzdFJlc3VsdHMsIG51bGwsIDIpfVxuXG5UZXN0IHBhdHRlcm5zOiAke2ZpbGVQYXR0ZXJucy5qb2luKCcsICcpfVxuXG5QbGVhc2UgcHJvdmlkZTpcbjEuIEFuYWx5c2lzIG9mIGN1cnJlbnQgY292ZXJhZ2UgZ2Fwc1xuMi4gU3VnZ2VzdGlvbnMgZm9yIGltcHJvdmluZyB0ZXN0IGNhc2VzXG4zLiBSZWNvbW1lbmRhdGlvbnMgZm9yIGFkZGl0aW9uYWwgaW50ZWdyYXRpb24gdGVzdCBzY2VuYXJpb3NcbjQuIEJlc3QgcHJhY3RpY2VzIGZvciBpbmNyZWFzaW5nIHRlc3QgZWZmZWN0aXZlbmVzc2AsXG4gICAgICAgICAgcXVpZXQsXG4gICAgICAgICAgdGFzazogJ29wdGltaXplJ1xuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIHRlc3QgYW5hbHlzaXMgY29tcGxldGUnKTtcbiAgICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSB0ZXN0IGFuYWx5c2lzJyk7XG4gICAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcignQUkgYW5hbHlzaXMgZXJyb3I6JywgYWlFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2hlY2sgZm9yIHVuaXQgdGVzdCBlcnJvcnMgYW5kL29yIGNvdmVyYWdlLmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnVGVzdGluZyBmYWlsZWQhJyk7XG5cbiAgICBpZih1c2VEZWJ1Zykge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRlc3QgZmFpbHVyZXMuLi4nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdHMgPSBwcm9jZXNzVGVzdFJlc3VsdHModGVtcE91dHB1dEZpbGUpO1xuXG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgICAgcHJvbXB0OiBgRGVidWcgdGhlc2UgZmFpbGVkIFZpdGVzdCB0ZXN0cyBhbmQgc3VnZ2VzdCBmaXhlczpcblxuJHtKU09OLnN0cmluZ2lmeShlcnJvci5tZXNzYWdlLCBudWxsLCAyKX1cblxuVGVzdCByZXN1bHRzOiAke0pTT04uc3RyaW5naWZ5KHRlc3RSZXN1bHRzLCBudWxsLCAyKX1cblxuUGxlYXNlIHByb3ZpZGU6XG4xLiBBbmFseXNpcyBvZiB3aHkgdGhlIHRlc3RzIGFyZSBmYWlsaW5nXG4yLiBTcGVjaWZpYyBzdWdnZXN0aW9ucyB0byBmaXggZWFjaCBmYWlsaW5nIHRlc3RcbjMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGVzdCBmaXh0dXJlcyBvciBtb2Nrc1xuNC4gQ29kZSBleGFtcGxlcyBmb3Igc29sdXRpb25zYCxcbiAgICAgICAgICBxdWlldCxcbiAgICAgICAgICB0YXNrOiAnaGVscCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSBkZWJ1Z2dpbmcgYXNzaXN0YW5jZSBjb21wbGV0ZScpO1xuICAgICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICAgIHNwaW5uZXIuZmFpbCgnQ291bGQgbm90IGdlbmVyYXRlIEFJIGRlYnVnZ2luZyBhc3Npc3RhbmNlJyk7XG4gICAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcignQUkgZGVidWdnaW5nIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlc3Q7XG4iXSwibmFtZXMiOlsiZXhlY2EiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjcmVhdGVTcGlubmVyIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJhaUZ1bmN0aW9uIiwiZGV0ZWN0RVNNIiwiY3dkIiwicGFja2FnZUpzb25QYXRoIiwicGFja2FnZUpzb25Db250ZW50IiwicGFja2FnZUpzb24iLCJKU09OIiwicGFyc2UiLCJ0eXBlIiwiX2Vycm9yIiwiZGVmYXVsdEV4aXQiLCJjb2RlIiwicHJvY2VzcyIsImVudiIsIlZJVEVTVCIsIlZJVEVTVF9XT1JLRVJfSUQiLCJOT0RFX0VOViIsInVuZGVmaW5lZCIsImV4aXQiLCJnZXRUZXN0RmlsZVBhdHRlcm5zIiwidGVzdFBhdGhQYXR0ZXJuIiwiZGVmYXVsdFBhdHRlcm5zIiwiZmluZFVuY292ZXJlZFNvdXJjZUZpbGVzIiwic291cmNlRmlsZXMiLCJpZ25vcmUiLCJ0ZXN0RmlsZXMiLCJmaWx0ZXIiLCJzb3VyY2VGaWxlIiwiYmFzZU5hbWUiLCJyZXBsYWNlIiwic29tZSIsInRlc3RGaWxlIiwiaW5jbHVkZXMiLCJwcm9jZXNzVGVzdFJlc3VsdHMiLCJvdXRwdXRGaWxlIiwiY29udGVudCIsInRlc3QiLCJvcHRpb25zIiwiYXJncyIsImZpbGVzT3JDYWxsYmFjayIsImNhbGxiYWNrUGFyYW0iLCJmaWxlcyIsImNhbGxiYWNrIiwiYW5hbHl6ZSIsImFpQW5hbHl6ZSIsImFpRGVidWciLCJhaUdlbmVyYXRlIiwiYmFpbCIsImNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvciIsImNoYW5nZWRTaW5jZSIsImNpIiwiY2xlYXJDYWNoZSIsImNsaU5hbWUiLCJjb2xsZWN0Q292ZXJhZ2VGcm9tIiwiY29sb3JzIiwiY29uZmlnIiwiZGVidWciLCJkZWJ1Z1Rlc3RzIiwiZGV0ZWN0T3BlbkhhbmRsZXMiLCJlbnZpcm9ubWVudCIsImVycm9yT25EZXByZWNhdGVkIiwiZXhwYW5kIiwiZm9yY2VFeGl0IiwiZ2VuZXJhdGUiLCJqc29uIiwibGFzdENvbW1pdCIsImxpc3RUZXN0cyIsImxvZ0hlYXBVc2FnZSIsIm1heFdvcmtlcnMiLCJub1N0YWNrVHJhY2UiLCJub3RpZnkiLCJvbmx5Q2hhbmdlZCIsInBhc3NXaXRoTm9UZXN0cyIsInF1aWV0IiwicmVtb3ZlQ2FjaGUiLCJydW5JbkJhbmQiLCJzZXR1cCIsInNob3dDb25maWciLCJzaWxlbnQiLCJ0ZXN0TG9jYXRpb25JblJlc3VsdHMiLCJ0ZXN0TmFtZVBhdHRlcm4iLCJ1cGRhdGUiLCJ1c2VTdGRlcnIiLCJ2ZXJib3NlIiwid2F0Y2giLCJ3YXRjaEFsbCIsInVzZUdlbmVyYXRlIiwidXNlQW5hbHl6ZSIsInVzZURlYnVnIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsInRlc3RDb25maWdQYXRoIiwiY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZyIsInN0YXJ0IiwidW5jb3ZlcmVkRmlsZXMiLCJsZW5ndGgiLCJ0YXJnZXRGaWxlIiwiY29udGV4dCIsImZpbGUiLCJwcm9tcHQiLCJ0YXNrIiwic3VjY2VlZCIsImFpRXJyb3IiLCJmYWlsIiwiY29uc29sZSIsImVycm9yIiwicHJvamVjdFZpdGVzdEJpbiIsInZpdGVzdFBhdGgiLCJ2aXRlc3RDb25maWdGaWxlIiwicHJvamVjdFZpdGVzdENvbmZpZyIsInByb2plY3RWaXRlc3RDb25maWdQYXRocyIsImV4aXN0aW5nQ29uZmlnUGF0aCIsImZpbmQiLCJjb25maWdQYXRoIiwidml0ZXN0IiwibGV4RGlyIiwiZ2V0TGV4RGlyIiwibGV4Vml0ZXN0Q29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsInJlc29sdmVkQ29uZmlnIiwic3RyaW5naWZ5IiwiZGVmYXVsdCIsInZpdGVzdFNldHVwRmlsZSIsInZpdGVzdEFyZ3MiLCJ2aXRlc3RPcHRpb25zIiwicmVwb3J0ZXJzIiwiU2V0IiwiZmlsdGVycyIsIndhdGNoTW9kZSIsIkJvb2xlYW4iLCJsaXN0TW9kZSIsInB1c2giLCJpc0VTTSIsIm5vZGVPcHRpb25zIiwiTk9ERV9PUFRJT05TIiwidHJpbSIsImFkZCIsImVudmlyb25tZW50TmFtZSIsInRlbXBPdXRwdXRGaWxlIiwic2hvdWxkV3JpdGVKc29uIiwic2l6ZSIsInJlcG9ydGVyTGlzdCIsIkFycmF5IiwiZnJvbSIsInVuc2hpZnQiLCJmb3JFYWNoIiwicmVwb3J0ZXIiLCJmaW5hbEFyZ3MiLCJqb2luIiwiRk9SQ0VfQ09MT1IiLCJDSSIsIkxFWF9WSVRFU1RfU0VUVVAiLCJlbmNvZGluZyIsInN0ZGlvIiwidGVzdFJlc3VsdHMiLCJmaWxlUGF0dGVybnMiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLFdBQVdDLFdBQVcsUUFBTyxPQUFPO0FBRTVDLFNBQVFDLFNBQVMsRUFBRUMsdUJBQXVCLFFBQU8scUJBQXFCO0FBQ3RFLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFDakQsU0FBUUMsaUJBQWlCLFFBQU8sc0JBQXNCO0FBQ3RELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFDdkMsU0FBUUMsVUFBVSxRQUFPLGNBQWM7QUFFdkMsTUFBTUMsWUFBWSxDQUFDQztJQUNqQixNQUFNQyxrQkFBa0JULFlBQVlRLEtBQUs7SUFFekMsSUFBR2IsV0FBV2Msa0JBQWtCO1FBQzlCLElBQUk7WUFDRixNQUFNQyxxQkFBcUJkLGFBQWFhLGlCQUFpQjtZQUN6RCxNQUFNRSxjQUFjQyxLQUFLQyxLQUFLLENBQUNIO1lBQy9CLE9BQU9DLFlBQVlHLElBQUksS0FBSztRQUM5QixFQUFFLE9BQU1DLFFBQVE7WUFDZCxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU87QUFDVDtBQXFEQSxNQUFNQyxjQUFlLENBQUNDO0lBQ3BCLElBQUdDLFFBQVFDLEdBQUcsQ0FBQ0MsTUFBTSxJQUFJRixRQUFRQyxHQUFHLENBQUNFLGdCQUFnQixJQUFJSCxRQUFRQyxHQUFHLENBQUNHLFFBQVEsS0FBSyxRQUFRO1FBQ3hGLE9BQU9DO0lBQ1Q7SUFFQUwsUUFBUU0sSUFBSSxDQUFDUDtBQUNmO0FBRUEsT0FBTyxNQUFNUSxzQkFBc0IsQ0FBQ0M7SUFDbEMsTUFBTUMsa0JBQWtCO1FBQUM7UUFBZTtRQUFlO0tBQXFCO0lBRTVFLElBQUcs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
|
|
429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0L3Rlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWcsIGdldFR5cGVTY3JpcHRDb25maWdQYXRofSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtyZXNvbHZlQmluYXJ5UGF0aH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi4vYWkvYWkuanMnO1xuXG5jb25zdCBkZXRlY3RFU00gPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYWlEZWJ1Zz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFpR2VuZXJhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBhaUFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBiYWlsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZFNpbmNlPzogc3RyaW5nO1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNsZWFyQ2FjaGU/OiBib29sZWFuO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xsZWN0Q292ZXJhZ2VGcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcnM/OiBib29sZWFuO1xuICByZWFkb25seSBjb25maWc/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlYnVnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVidWdUZXN0cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRldGVjdE9wZW5IYW5kbGVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudj86IHN0cmluZztcbiAgcmVhZG9ubHkgZXJyb3JPbkRlcHJlY2F0ZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBleHBhbmQ/OiBib29sZWFuO1xuICByZWFkb25seSBmb3JjZUV4aXQ/OiBib29sZWFuO1xuICByZWFkb25seSBnZW5lcmF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGpzb24/OiBib29sZWFuO1xuICByZWFkb25seSBsYXN0Q29tbWl0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbGlzdFRlc3RzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbG9nSGVhcFVzYWdlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V29ya2Vycz86IHN0cmluZztcbiAgcmVhZG9ubHkgbm9TdGFja1RyYWNlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm90aWZ5PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgb25seUNoYW5nZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBvdXRwdXRGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBwYXNzV2l0aE5vVGVzdHM/OiBib29sZWFuO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZUNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcnVuSW5CYW5kPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2V0dXA/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNob3dDb25maWc/OiBib29sZWFuO1xuICByZWFkb25seSBzaWxlbnQ/OiBib29sZWFuO1xuICByZWFkb25seSB0ZXN0TG9jYXRpb25JblJlc3VsdHM/OiBib29sZWFuO1xuICByZWFkb25seSB0ZXN0TmFtZVBhdHRlcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlc3RQYXRoUGF0dGVybj86IHN0cmluZztcbiAgcmVhZG9ubHkgdXBkYXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlU3RkZXJyPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHdhdGNoPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaEFsbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFRlc3RDYWxsYmFjayA9IHR5cGVvZiBwcm9jZXNzLmV4aXQ7XG5cbmNvbnN0IGRlZmF1bHRFeGl0ID0gKChjb2RlPzogbnVtYmVyKSA9PiB7XG4gIGlmKHByb2Nlc3MuZW52LlZJVEVTVCB8fCBwcm9jZXNzLmVudi5WSVRFU1RfV09SS0VSX0lEIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyO1xuICB9XG5cbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufSkgYXMgdHlwZW9mIHByb2Nlc3MuZXhpdDtcblxuZXhwb3J0IGNvbnN0IGdldFRlc3RGaWxlUGF0dGVybnMgPSAodGVzdFBhdGhQYXR0ZXJuPzogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBkZWZhdWx0UGF0dGVybnMgPSBbJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJywgJyoqLyouaW50ZWdyYXRpb24uKiddO1xuXG4gIGlmKCF0ZXN0UGF0aFBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGVmYXVsdFBhdHRlcm5zO1xuICB9XG5cbiAgcmV0dXJuIFt0ZXN0UGF0aFBhdHRlcm5dO1xufTtcblxuY29uc3QgZmluZFVuY292ZXJlZFNvdXJjZUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc291cmNlRmlsZXMgPSBnbG9iU3luYygnc3JjLyoqLyoue3RzLHRzeCxqcyxqc3h9Jywge1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovbGliLyoqJywgJyoqLyoudGVzdC4qJywgJyoqLyouc3BlYy4qJ11cbiAgfSk7XG5cbiAgY29uc3QgdGVzdEZpbGVzID0gZ2xvYlN5bmMoJyoqLyoue3Rlc3Qsc3BlY30ue3RzLHRzeCxqcyxqc3h9Jywge1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovbGliLyoqJ11cbiAgfSk7XG5cbiAgcmV0dXJuIHNvdXJjZUZpbGVzLmZpbHRlcigoc291cmNlRmlsZSkgPT4ge1xuICAgIGNvbnN0IGJhc2VOYW1lID0gc291cmNlRmlsZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuICAgIHJldHVybiAhdGVzdEZpbGVzLnNvbWUoKHRlc3RGaWxlKSA9PiB0ZXN0RmlsZS5pbmNsdWRlcyhiYXNlTmFtZSkpO1xuICB9KTtcbn07XG5cbmNvbnN0IHByb2Nlc3NUZXN0UmVzdWx0cyA9IChvdXRwdXRGaWxlPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYoIW91dHB1dEZpbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlc3QgPSBhc3luYyAoXG4gIG9wdGlvbnM6IFRlc3RPcHRpb25zLFxuICBhcmdzPzogc3RyaW5nW10sXG4gIGZpbGVzT3JDYWxsYmFjaz86IHN0cmluZ1tdIHwgVGVzdENhbGxiYWNrLFxuICBjYWxsYmFja1BhcmFtPzogVGVzdENhbGxiYWNrXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAvLyBCYWNrd2FyZC1jb21wYXQgYXJndW1lbnQgbm9ybWFsaXphdGlvbjogYWxsb3cgY2FsbGJhY2sgYXMgdGhpcmQgcGFyYW1cbiAgbGV0IGZpbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNhbGxiYWNrOiBUZXN0Q2FsbGJhY2sgPSBkZWZhdWx0RXhpdDtcblxuICBpZih0eXBlb2YgZmlsZXNPckNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBmaWxlc09yQ2FsbGJhY2sgYXMgVGVzdENhbGxiYWNrO1xuICB9IGVsc2Uge1xuICAgIGZpbGVzID0gZmlsZXNPckNhbGxiYWNrIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2tQYXJhbSB8fCBkZWZhdWx0RXhpdDtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5hbHl6ZSA9IGZhbHNlLFxuICAgIGFpQW5hbHl6ZSA9IGZhbHNlLFxuICAgIGFpRGVidWcgPSBmYWxzZSxcbiAgICBhaUdlbmVyYXRlID0gZmFsc2UsXG4gICAgYmFpbCxcbiAgICBjaGFuZ2VkRmlsZXNXaXRoQW5jZXN0b3IsXG4gICAgY2hhbmdlZFNpbmNlLFxuICAgIGNpLFxuICAgIGNsZWFyQ2FjaGUsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGNvbGxlY3RDb3ZlcmFnZUZyb20sXG4gICAgY29sb3JzLFxuICAgIGNvbmZpZyxcbiAgICBkZWJ1ZyA9IGZhbHNlLFxuICAgIGRlYnVnVGVzdHMgPSBmYWxzZSxcbiAgICBkZXRlY3RPcGVuSGFuZGxlcyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBlbnYsXG4gICAgZXJyb3JPbkRlcHJlY2F0ZWQsXG4gICAgZXhwYW5kLFxuICAgIGZvcmNlRXhpdCxcbiAgICBnZW5lcmF0ZSA9IGZhbHNlLFxuICAgIGpzb24sXG4gICAgbGFzdENvbW1pdCxcbiAgICBsaXN0VGVzdHMsXG4gICAgbG9nSGVhcFVzYWdlLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbm9TdGFja1RyYWNlLFxuICAgIG5vdGlmeSxcbiAgICBvbmx5Q2hhbmdlZCxcbiAgICBvdXRwdXRGaWxlLFxuICAgIHBhc3NXaXRoTm9UZXN0cyxcbiAgICBxdWlldCxcbiAgICByZW1vdmVDYWNoZSxcbiAgICBydW5JbkJhbmQsXG4gICAgc2V0dXAsXG4gICAgc2hvd0NvbmZpZyxcbiAgICBzaWxlbnQsXG4gICAgdGVzdExvY2F0aW9uSW5SZXN1bHRzLFxuICAgIHRlc3ROYW1lUGF0dGVybixcbiAgICB0ZXN0UGF0aFBhdHRlcm4sXG4gICAgdXBkYXRlLFxuICAgIHVzZVN0ZGVycixcbiAgICB2ZXJib3NlLFxuICAgIHdhdGNoLFxuICAgIHdhdGNoQWxsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHVzZUdlbmVyYXRlID0gZ2VuZXJhdGUgfHwgYWlHZW5lcmF0ZTtcbiAgY29uc3QgdXNlQW5hbHl6ZSA9IGFuYWx5emUgfHwgYWlBbmFseXplO1xuICBjb25zdCB1c2VEZWJ1ZyA9IGRlYnVnVGVzdHMgfHwgYWlEZWJ1ZztcblxuICBsb2coYCR7Y2xpTmFtZX0gdGVzdGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcob3B0aW9ucyk7XG5cbiAgY29uc3Qge3VzZVR5cGVzY3JpcHR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgY29uc3QgdGVzdENvbmZpZ1BhdGggPSBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCgndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyh0ZXN0Q29uZmlnUGF0aCkpIHtcbiAgICAgIGxvZygnVXNpbmcgdHNjb25maWcudGVzdC5qc29uIGZvciB0ZXN0aW5nLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIExleENvbmZpZy5jaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgaWYodXNlR2VuZXJhdGUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgY29kZSB0byBnZW5lcmF0ZSB0ZXN0IGNhc2VzLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdW5jb3ZlcmVkRmlsZXMgPSBmaW5kVW5jb3ZlcmVkU291cmNlRmlsZXMoKTtcblxuICAgICAgaWYodW5jb3ZlcmVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB0YXJnZXRGaWxlID0gdW5jb3ZlcmVkRmlsZXNbMF07XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBmaWxlOiB0YXJnZXRGaWxlLFxuICAgICAgICAgIHByb21wdDogYEdlbmVyYXRlIFZpdGVzdCB1bml0IHRlc3RzIGZvciB0aGlzIGZpbGU6ICR7dGFyZ2V0RmlsZX1cXG5cXG4ke3JlYWRGaWxlU3luYyh0YXJnZXRGaWxlLCAndXRmLTgnKX1cXG5cXG5QbGVhc2UgY3JlYXRlIGNvbXByZWhlbnNpdmUgdGVzdHMgdGhhdCBjb3ZlciB0aGUgbWFpbiBmdW5jdGlvbmFsaXR5LiBJbmNsdWRlIHRlc3QgZml4dHVyZXMgYW5kIG1vY2tzIHdoZXJlIG5lY2Vzc2FyeS5gLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHRhc2s6ICd0ZXN0J1xuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYEFJIHRlc3QgZ2VuZXJhdGlvbiBzdWdnZXN0aW9ucyBwcm92aWRlZCBmb3IgJHt0YXJnZXRGaWxlfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBbGwgc291cmNlIGZpbGVzIGFwcGVhciB0byBoYXZlIGNvcnJlc3BvbmRpbmcgdGVzdCBmaWxlcycpO1xuICAgICAgfVxuICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgdGVzdCBzdWdnZXN0aW9ucycpO1xuICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIHRlc3QgZ2VuZXJhdGlvbiBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Vml0ZXN0QmluID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy8uYmluL3ZpdGVzdCcpO1xuICBsZXQgdml0ZXN0UGF0aDogc3RyaW5nO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdFZpdGVzdEJpbikpIHtcbiAgICB2aXRlc3RQYXRoID0gcHJvamVjdFZpdGVzdEJpbjtcbiAgfSBlbHNlIHtcbiAgICB2aXRlc3RQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3ZpdGVzdCcpO1xuICB9XG5cbiAgaWYoIXZpdGVzdFBhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFZpdGVzdCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBsZXQgdml0ZXN0Q29uZmlnRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvamVjdFZpdGVzdENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuICBpZihjb25maWcpIHtcbiAgICB2aXRlc3RDb25maWdGaWxlID0gY29uZmlnO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHByb2plY3RWaXRlc3RDb25maWdQYXRocyA9IFtcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd2aXRlc3QuY29uZmlnLnRzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAndml0ZXN0LmNvbmZpZy5tdHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd2aXRlc3QuY29uZmlnLmpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAndml0ZXN0LmNvbmZpZy5tanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd2aXRlc3QuY29uZmlnLmNqcycpXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ1BhdGggPSBwcm9qZWN0Vml0ZXN0Q29uZmlnUGF0aHMuZmluZCgoY29uZmlnUGF0aCkgPT4gZXhpc3RzU3luYyhjb25maWdQYXRoKSk7XG5cbiAgICBpZihleGlzdGluZ0NvbmZpZ1BhdGgpIHtcbiAgICAgIHZpdGVzdENvbmZpZ0ZpbGUgPSBleGlzdGluZ0NvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgVml0ZXN0IGNvbmZpZyBmaWxlOiAke3ZpdGVzdENvbmZpZ0ZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIFZpdGVzdCBjb25maWcgZmlsZSBleGlzdHMgaW4gdGhlIHByb2plY3RcbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBWaXRlc3QgY29uZmlnIGluIGxleC5jb25maWcuY2pzXG4gICAgICBwcm9qZWN0Vml0ZXN0Q29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZy52aXRlc3QgfHwgbnVsbDtcblxuICAgICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgICAgY29uc3QgbGV4Vml0ZXN0Q29uZmlnID0gcGF0aFJlc29sdmUobGV4RGlyLCAndml0ZXN0LmNvbmZpZy5tanMnKTtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBMb29raW5nIGZvciBWaXRlc3QgY29uZmlnIGF0OiAke2xleFZpdGVzdENvbmZpZ31gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBGaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKGxleFZpdGVzdENvbmZpZyl9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMobGV4Vml0ZXN0Q29uZmlnKSkge1xuICAgICAgICB2aXRlc3RDb25maWdGaWxlID0gbGV4Vml0ZXN0Q29uZmlnO1xuICAgICAgICBpZihwcm9qZWN0Vml0ZXN0Q29uZmlnICYmIE9iamVjdC5rZXlzKHByb2plY3RWaXRlc3RDb25maWcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBVc2luZyBMZXggVml0ZXN0IGNvbmZpZyB3aXRoIHByb2plY3QgVml0ZXN0IGNvbmZpZyBmcm9tIGxleC5jb25maWcuY2pzOiAke3ZpdGVzdENvbmZpZ0ZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYFVzaW5nIExleCBWaXRlc3QgY29uZmlnIChubyBwcm9qZWN0IFZpdGVzdCBjb25maWcgZm91bmQpOiAke3ZpdGVzdENvbmZpZ0ZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKCdObyBWaXRlc3QgY29uZmlnIGZvdW5kIGluIHByb2plY3Qgb3IgTGV4JywgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihzaG93Q29uZmlnKSB7XG4gICAgaWYodml0ZXN0Q29uZmlnRmlsZSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRDb25maWcgPSBhd2FpdCBpbXBvcnQodml0ZXN0Q29uZmlnRmlsZSk7XG4gICAgICBsb2coSlNPTi5zdHJpbmdpZnkocmVzb2x2ZWRDb25maWcuZGVmYXVsdCA/PyByZXNvbHZlZENvbmZpZywgbnVsbCwgMiksICdpbmZvJywgcXVpZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coSlNPTi5zdHJpbmdpZnkoe3Rlc3Q6IHByb2plY3RWaXRlc3RDb25maWcgPz8ge319LCBudWxsLCAyKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3Qgdml0ZXN0U2V0dXBGaWxlOiBzdHJpbmcgPSBzZXR1cCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAndml0ZXN0LnNldHVwLmpzJyk7XG4gIGNvbnN0IHZpdGVzdEFyZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHZpdGVzdE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHJlcG9ydGVycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB3YXRjaE1vZGUgPSBCb29sZWFuKHdhdGNoIHx8IHdhdGNoQWxsKTtcbiAgY29uc3QgbGlzdE1vZGUgPSBCb29sZWFuKGxpc3RUZXN0cyk7XG5cbiAgaWYobGlzdE1vZGUpIHtcbiAgICB2aXRlc3RBcmdzLnB1c2goJ2xpc3QnKTtcbiAgfSBlbHNlIGlmKHdhdGNoTW9kZSkge1xuICAgIHZpdGVzdEFyZ3MucHVzaCgnd2F0Y2gnKTtcbiAgfSBlbHNlIHtcbiAgICB2aXRlc3RBcmdzLnB1c2goJ3J1bicpO1xuICB9XG5cbiAgY29uc3QgaXNFU00gPSBkZXRlY3RFU00ocHJvY2Vzcy5jd2QoKSk7XG4gIGxldCBub2RlT3B0aW9ucyA9IHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyB8fCAnJztcbiAgaWYoaXNFU00pIHtcbiAgICBpZighbm9kZU9wdGlvbnMuaW5jbHVkZXMoJy0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXMnKSkge1xuICAgICAgbm9kZU9wdGlvbnMgPSBgJHtub2RlT3B0aW9uc30gLS1leHBlcmltZW50YWwtdm0tbW9kdWxlc2AudHJpbSgpO1xuICAgIH1cbiAgICBsb2coJ0VTTSBwcm9qZWN0IGRldGVjdGVkLCB1c2luZyAtLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzIGluIE5PREVfT1BUSU9OUycsICdpbmZvJywgcXVpZXQpO1xuICB9XG5cbiAgaWYodml0ZXN0Q29uZmlnRmlsZSkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1jb25maWcnLCB2aXRlc3RDb25maWdGaWxlKTtcbiAgfVxuXG4gIGlmKGJhaWwpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tYmFpbCcsICcxJyk7XG4gIH1cblxuICBpZihjaGFuZ2VkRmlsZXNXaXRoQW5jZXN0b3IpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tY2hhbmdlZCcpO1xuICB9XG5cbiAgaWYoY2hhbmdlZFNpbmNlKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWNoYW5nZWQnLCBjaGFuZ2VkU2luY2UpO1xuICB9XG5cbiAgaWYoY2kpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tcnVuJyk7XG4gIH1cblxuICBpZihjb2xsZWN0Q292ZXJhZ2VGcm9tKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWNvdmVyYWdlJywgJy0tY292ZXJhZ2UuaW5jbHVkZScsIGNvbGxlY3RDb3ZlcmFnZUZyb20pO1xuICB9XG5cbiAgaWYoZGVidWcpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0taW5zcGVjdCcpO1xuICB9XG5cbiAgaWYoZGV0ZWN0T3BlbkhhbmRsZXMpIHtcbiAgICByZXBvcnRlcnMuYWRkKCdoYW5naW5nLXByb2Nlc3MnKTtcbiAgfVxuXG4gIGNvbnN0IGVudmlyb25tZW50TmFtZSA9IGVudmlyb25tZW50IHx8IGVudjtcbiAgaWYoZW52aXJvbm1lbnROYW1lKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLWVudmlyb25tZW50JywgZW52aXJvbm1lbnROYW1lKTtcbiAgfVxuXG4gIGlmKGVycm9yT25EZXByZWNhdGVkKSB7XG4gICAgbG9nKCdWaXRlc3QgZG9lcyBub3Qgc3VwcG9ydCAtLWVycm9yT25EZXByZWNhdGVkOyBvcHRpb24gaWdub3JlZC4nLCAnd2FybicsIHF1aWV0KTtcbiAgfVxuXG4gIGlmKGV4cGFuZCkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1leHBhbmRTbmFwc2hvdERpZmYnKTtcbiAgfVxuXG4gIGlmKGZvcmNlRXhpdCkge1xuICAgIGxvZygnVml0ZXN0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JjZUV4aXQ7IG9wdGlvbiBpZ25vcmVkLicsICd3YXJuJywgcXVpZXQpO1xuICB9XG5cbiAgaWYobGFzdENvbW1pdCkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1jaGFuZ2VkJyk7XG4gIH1cblxuICBpZihsb2dIZWFwVXNhZ2UpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tbG9nSGVhcFVzYWdlJyk7XG4gIH1cblxuICBpZihtYXhXb3JrZXJzKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLW1heFdvcmtlcnMnLCBtYXhXb3JrZXJzKTtcbiAgfVxuXG4gIGlmKG5vU3RhY2tUcmFjZSkge1xuICAgIGxvZygnVml0ZXN0IGRvZXMgbm90IHN1cHBvcnQgLS1ub1N0YWNrVHJhY2U7IG9wdGlvbiBpZ25vcmVkLicsICd3YXJuJywgcXVpZXQpO1xuICB9XG5cbiAgaWYobm90aWZ5KSB7XG4gICAgbG9nKCdWaXRlc3QgZG9lcyBub3Qgc3VwcG9ydCAtLW5vdGlmeTsgb3B0aW9uIGlnbm9yZWQuJywgJ3dhcm4nLCBxdWlldCk7XG4gIH1cblxuICBpZihvbmx5Q2hhbmdlZCkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1jaGFuZ2VkJyk7XG4gIH1cblxuICBsZXQgdGVtcE91dHB1dEZpbGUgPSBvdXRwdXRGaWxlO1xuICBjb25zdCBzaG91bGRXcml0ZUpzb24gPSBqc29uIHx8IHVzZUFuYWx5emUgfHwgdXNlRGVidWcgfHwgQm9vbGVhbihvdXRwdXRGaWxlKTtcblxuICBpZihzaG91bGRXcml0ZUpzb24pIHtcbiAgICB0ZW1wT3V0cHV0RmlsZSA9IG91dHB1dEZpbGUgfHwgJy5sZXgtdGVzdC1yZXN1bHRzLmpzb24nO1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1vdXRwdXRGaWxlJywgdGVtcE91dHB1dEZpbGUpO1xuICAgIHJlcG9ydGVycy5hZGQoJ2pzb24nKTtcbiAgfVxuXG4gIGlmKHBhc3NXaXRoTm9UZXN0cykge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1wYXNzV2l0aE5vVGVzdHMnKTtcbiAgfVxuXG4gIGlmKHJ1bkluQmFuZCkge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCgnLS1uby1maWxlLXBhcmFsbGVsaXNtJywgJy0tbWF4V29ya2VycycsICcxJyk7XG4gIH1cblxuICBpZihzaWxlbnQpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tc2lsZW50Jyk7XG4gIH1cblxuICBpZih0ZXN0TG9jYXRpb25JblJlc3VsdHMpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0taW5jbHVkZVRhc2tMb2NhdGlvbicpO1xuICB9XG5cbiAgaWYodGVzdE5hbWVQYXR0ZXJuKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLXRlc3ROYW1lUGF0dGVybicsIHRlc3ROYW1lUGF0dGVybik7XG4gIH1cblxuICBpZih0ZXN0UGF0aFBhdHRlcm4pIHtcbiAgICBmaWx0ZXJzLnB1c2godGVzdFBhdGhQYXR0ZXJuKTtcbiAgfVxuXG4gIGlmKHVzZVN0ZGVycikge1xuICAgIGxvZygnVml0ZXN0IGRvZXMgbm90IHN1cHBvcnQgLS11c2VTdGRlcnI7IG9wdGlvbiBpZ25vcmVkLicsICd3YXJuJywgcXVpZXQpO1xuICB9XG5cbiAgaWYodmVyYm9zZSkge1xuICAgIHJlcG9ydGVycy5hZGQoJ3ZlcmJvc2UnKTtcbiAgfVxuXG4gIGlmKHJlbW92ZUNhY2hlIHx8IGNsZWFyQ2FjaGUpIHtcbiAgICB2aXRlc3RPcHRpb25zLnB1c2goJy0tY2xlYXJDYWNoZScpO1xuICB9XG5cbiAgaWYodXBkYXRlKSB7XG4gICAgdml0ZXN0T3B0aW9ucy5wdXNoKCctLXVwZGF0ZScpO1xuICB9XG5cbiAgaWYod2F0Y2gpIHtcbiAgICBmaWx0ZXJzLnB1c2god2F0Y2gpO1xuICB9XG5cbiAgaWYoYXJncykge1xuICAgIHZpdGVzdE9wdGlvbnMucHVzaCguLi5hcmdzKTtcbiAgfVxuXG4gIGlmKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBmaWx0ZXJzLnB1c2goLi4uZmlsZXMpO1xuICB9XG5cbiAgaWYocmVwb3J0ZXJzLnNpemUgPiAwKSB7XG4gICAgY29uc3QgcmVwb3J0ZXJMaXN0ID0gQXJyYXkuZnJvbShyZXBvcnRlcnMpO1xuICAgIGlmKHJlcG9ydGVyTGlzdC5pbmNsdWRlcygnanNvbicpICYmICFyZXBvcnRlckxpc3QuaW5jbHVkZXMoJ3ZlcmJvc2UnKSkge1xuICAgICAgLy8gS2VlcCBjb25zb2xlIG91dHB1dCB3aGlsZSB3cml0aW5nIEpTT04gcmVzdWx0cy5cbiAgICAgIHJlcG9ydGVyTGlzdC51bnNoaWZ0KCdkZWZhdWx0Jyk7XG4gICAgfVxuICAgIHJlcG9ydGVyTGlzdC5mb3JFYWNoKChyZXBvcnRlcikgPT4gdml0ZXN0T3B0aW9ucy5wdXNoKCctLXJlcG9ydGVyJywgcmVwb3J0ZXIpKTtcbiAgfVxuXG4gIGNvbnN0IGZpbmFsQXJncyA9IFsuLi52aXRlc3RBcmdzLCAuLi52aXRlc3RPcHRpb25zLCAuLi5maWx0ZXJzXTtcblxuICBpZihkZWJ1Zykge1xuICAgIGxvZyhgVml0ZXN0IG9wdGlvbnM6ICR7ZmluYWxBcmdzLmpvaW4oJyAnKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYE5PREVfT1BUSU9OUzogJHtub2RlT3B0aW9uc31gLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBOT0RFX09QVElPTlM6IG5vZGVPcHRpb25zXG4gICAgfTtcblxuICAgIGlmKGNvbG9ycykge1xuICAgICAgZW52LkZPUkNFX0NPTE9SID0gJzEnO1xuICAgIH1cblxuICAgIGlmKGNpKSB7XG4gICAgICBlbnYuQ0kgPSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgaWYodml0ZXN0U2V0dXBGaWxlICYmIGV4aXN0c1N5bmModml0ZXN0U2V0dXBGaWxlKSkge1xuICAgICAgZW52LkxFWF9WSVRFU1RfU0VUVVAgPSB2aXRlc3RTZXR1cEZpbGU7XG4gICAgfVxuXG4gICAgYXdhaXQgZXhlY2Eodml0ZXN0UGF0aCwgZmluYWxBcmdzLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgZW52LFxuICAgICAgc3RkaW86ICdpbmhlcml0J1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdUZXN0aW5nIGNvbXBsZXRlZCEnKTtcblxuICAgIGlmKHVzZUFuYWx5emUpIHtcbiAgICAgIHNwaW5uZXIuc3RhcnQoJ0FJIGlzIGFuYWx5emluZyB0ZXN0IGNvdmVyYWdlIGFuZCBzdWdnZXN0aW5nIGltcHJvdmVtZW50cy4uLicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0cyA9IHByb2Nlc3NUZXN0UmVzdWx0cyh0ZW1wT3V0cHV0RmlsZSk7XG4gICAgICAgIGNvbnN0IGZpbGVQYXR0ZXJucyA9IGdldFRlc3RGaWxlUGF0dGVybnModGVzdFBhdGhQYXR0ZXJuKTtcblxuICAgICAgICBhd2FpdCBhaUZ1bmN0aW9uKHtcbiAgICAgICAgICBjb250ZXh0OiB0cnVlLFxuICAgICAgICAgIHByb21wdDogYEFuYWx5emUgdGhlc2UgVml0ZXN0IHRlc3QgcmVzdWx0cyBhbmQgc3VnZ2VzdCB0ZXN0IGNvdmVyYWdlIGltcHJvdmVtZW50czpcblxuJHtKU09OLnN0cmluZ2lmeSh0ZXN0UmVzdWx0cywgbnVsbCwgMil9XG5cblRlc3QgcGF0dGVybnM6ICR7ZmlsZVBhdHRlcm5zLmpvaW4oJywgJyl9XG5cblBsZWFzZSBwcm92aWRlOlxuMS4gQW5hbHlzaXMgb2YgY3VycmVudCBjb3ZlcmFnZSBnYXBzXG4yLiBTdWdnZXN0aW9ucyBmb3IgaW1wcm92aW5nIHRlc3QgY2FzZXNcbjMuIFJlY29tbWVuZGF0aW9ucyBmb3IgYWRkaXRpb25hbCBpbnRlZ3JhdGlvbiB0ZXN0IHNjZW5hcmlvc1xuNC4gQmVzdCBwcmFjdGljZXMgZm9yIGluY3JlYXNpbmcgdGVzdCBlZmZlY3RpdmVuZXNzYCxcbiAgICAgICAgICBxdWlldCxcbiAgICAgICAgICB0YXNrOiAnb3B0aW1pemUnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgdGVzdCBhbmFseXNpcyBjb21wbGV0ZScpO1xuICAgICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICAgIHNwaW5uZXIuZmFpbCgnQ291bGQgbm90IGdlbmVyYXRlIEFJIHRlc3QgYW5hbHlzaXMnKTtcbiAgICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDaGVjayBmb3IgdW5pdCB0ZXN0IGVycm9ycyBhbmQvb3IgY292ZXJhZ2UuYCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgc3Bpbm5lci5mYWlsKCdUZXN0aW5nIGZhaWxlZCEnKTtcblxuICAgIGlmKHVzZURlYnVnKSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGVzdCBmYWlsdXJlcy4uLicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0cyA9IHByb2Nlc3NUZXN0UmVzdWx0cyh0ZW1wT3V0cHV0RmlsZSk7XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBwcm9tcHQ6IGBEZWJ1ZyB0aGVzZSBmYWlsZWQgVml0ZXN0IHRlc3RzIGFuZCBzdWdnZXN0IGZpeGVzOlxuXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yLm1lc3NhZ2UsIG51bGwsIDIpfVxuXG5UZXN0IHJlc3VsdHM6ICR7SlNPTi5zdHJpbmdpZnkodGVzdFJlc3VsdHMsIG51bGwsIDIpfVxuXG5QbGVhc2UgcHJvdmlkZTpcbjEuIEFuYWx5c2lzIG9mIHdoeSB0aGUgdGVzdHMgYXJlIGZhaWxpbmdcbjIuIFNwZWNpZmljIHN1Z2dlc3Rpb25zIHRvIGZpeCBlYWNoIGZhaWxpbmcgdGVzdFxuMy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0ZXN0IGZpeHR1cmVzIG9yIG1vY2tzXG40LiBDb2RlIGV4YW1wbGVzIGZvciBzb2x1dGlvbnNgLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHRhc2s6ICdoZWxwJ1xuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGRlYnVnZ2luZyBhc3Npc3RhbmNlIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgZGVidWdnaW5nIGFzc2lzdGFuY2UnKTtcbiAgICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBkZWJ1Z2dpbmcgZXJyb3I6JywgYWlFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVzdDtcbiJdLCJuYW1lcyI6WyJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCIsImNyZWF0ZVNwaW5uZXIiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImxvZyIsImFpRnVuY3Rpb24iLCJkZXRlY3RFU00iLCJjd2QiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlSnNvbkNvbnRlbnQiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInR5cGUiLCJfZXJyb3IiLCJkZWZhdWx0RXhpdCIsImNvZGUiLCJwcm9jZXNzIiwiZW52IiwiVklURVNUIiwiVklURVNUX1dPUktFUl9JRCIsIk5PREVfRU5WIiwidW5kZWZpbmVkIiwiZXhpdCIsImdldFRlc3RGaWxlUGF0dGVybnMiLCJ0ZXN0UGF0aFBhdHRlcm4iLCJkZWZhdWx0UGF0dGVybnMiLCJmaW5kVW5jb3ZlcmVkU291cmNlRmlsZXMiLCJzb3VyY2VGaWxlcyIsImlnbm9yZSIsInRlc3RGaWxlcyIsImZpbHRlciIsInNvdXJjZUZpbGUiLCJiYXNlTmFtZSIsInJlcGxhY2UiLCJzb21lIiwidGVzdEZpbGUiLCJpbmNsdWRlcyIsInByb2Nlc3NUZXN0UmVzdWx0cyIsIm91dHB1dEZpbGUiLCJjb250ZW50IiwidGVzdCIsIm9wdGlvbnMiLCJhcmdzIiwiZmlsZXNPckNhbGxiYWNrIiwiY2FsbGJhY2tQYXJhbSIsImZpbGVzIiwiY2FsbGJhY2siLCJhbmFseXplIiwiYWlBbmFseXplIiwiYWlEZWJ1ZyIsImFpR2VuZXJhdGUiLCJiYWlsIiwiY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yIiwiY2hhbmdlZFNpbmNlIiwiY2kiLCJjbGVhckNhY2hlIiwiY2xpTmFtZSIsImNvbGxlY3RDb3ZlcmFnZUZyb20iLCJjb2xvcnMiLCJjb25maWciLCJkZWJ1ZyIsImRlYnVnVGVzdHMiLCJkZXRlY3RPcGVuSGFuZGxlcyIsImVudmlyb25tZW50IiwiZXJyb3JPbkRlcHJlY2F0ZWQiLCJleHBhbmQiLCJmb3JjZUV4aXQiLCJnZW5lcmF0ZSIsImpzb24iLCJsYXN0Q29tbWl0IiwibGlzdFRlc3RzIiwibG9nSGVhcFVzYWdlIiwibWF4V29ya2VycyIsIm5vU3RhY2tUcmFjZSIsIm5vdGlmeSIsIm9ubHlDaGFuZ2VkIiwicGFzc1dpdGhOb1Rlc3RzIiwicXVpZXQiLCJyZW1vdmVDYWNoZSIsInJ1bkluQmFuZCIsInNldHVwIiwic2hvd0NvbmZpZyIsInNpbGVudCIsInRlc3RMb2NhdGlvbkluUmVzdWx0cyIsInRlc3ROYW1lUGF0dGVybiIsInVwZGF0ZSIsInVzZVN0ZGVyciIsInZlcmJvc2UiLCJ3YXRjaCIsIndhdGNoQWxsIiwidXNlR2VuZXJhdGUiLCJ1c2VBbmFseXplIiwidXNlRGVidWciLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJ1c2VUeXBlc2NyaXB0IiwidGVzdENvbmZpZ1BhdGgiLCJjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnIiwic3RhcnQiLCJ1bmNvdmVyZWRGaWxlcyIsImxlbmd0aCIsInRhcmdldEZpbGUiLCJjb250ZXh0IiwiZmlsZSIsInByb21wdCIsInRhc2siLCJzdWNjZWVkIiwiYWlFcnJvciIsImZhaWwiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9qZWN0Vml0ZXN0QmluIiwidml0ZXN0UGF0aCIsInZpdGVzdENvbmZpZ0ZpbGUiLCJwcm9qZWN0Vml0ZXN0Q29uZmlnIiwicHJvamVjdFZpdGVzdENvbmZpZ1BhdGhzIiwiZXhpc3RpbmdDb25maWdQYXRoIiwiZmluZCIsImNvbmZpZ1BhdGgiLCJ2aXRlc3QiLCJsZXhEaXIiLCJnZXRMZXhEaXIiLCJsZXhWaXRlc3RDb25maWciLCJPYmplY3QiLCJrZXlzIiwicmVzb2x2ZWRDb25maWciLCJzdHJpbmdpZnkiLCJkZWZhdWx0Iiwidml0ZXN0U2V0dXBGaWxlIiwidml0ZXN0QXJncyIsInZpdGVzdE9wdGlvbnMiLCJyZXBvcnRlcnMiLCJTZXQiLCJmaWx0ZXJzIiwid2F0Y2hNb2RlIiwiQm9vbGVhbiIsImxpc3RNb2RlIiwicHVzaCIsImlzRVNNIiwibm9kZU9wdGlvbnMiLCJOT0RFX09QVElPTlMiLCJ0cmltIiwiYWRkIiwiZW52aXJvbm1lbnROYW1lIiwidGVtcE91dHB1dEZpbGUiLCJzaG91bGRXcml0ZUpzb24iLCJzaXplIiwicmVwb3J0ZXJMaXN0IiwiQXJyYXkiLCJmcm9tIiwidW5zaGlmdCIsImZvckVhY2giLCJyZXBvcnRlciIsImZpbmFsQXJncyIsImpvaW4iLCJGT1JDRV9DT0xPUiIsIkNJIiwiTEVYX1ZJVEVTVF9TRVRVUCIsImVuY29kaW5nIiwic3RkaW8iLCJ0ZXN0UmVzdWx0cyIsImZpbGVQYXR0ZXJucyIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLFVBQVUsRUFBRUMsWUFBWSxRQUFPLEtBQUs7QUFDNUMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFNUMsU0FBUUMsU0FBUyxFQUFFQyx1QkFBdUIsUUFBTyxxQkFBcUI7QUFDdEUsU0FBUUMsYUFBYSxRQUFPLHFCQUFxQjtBQUNqRCxTQUFRQyxpQkFBaUIsUUFBTyxzQkFBc0I7QUFDdEQsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQUN2QyxTQUFRQyxVQUFVLFFBQU8sY0FBYztBQUV2QyxNQUFNQyxZQUFZLENBQUNDO0lBQ2pCLE1BQU1DLGtCQUFrQlQsWUFBWVEsS0FBSztJQUV6QyxJQUFHYixXQUFXYyxrQkFBa0I7UUFDOUIsSUFBSTtZQUNGLE1BQU1DLHFCQUFxQmQsYUFBYWEsaUJBQWlCO1lBQ3pELE1BQU1FLGNBQWNDLEtBQUtDLEtBQUssQ0FBQ0g7WUFDL0IsT0FBT0MsWUFBWUcsSUFBSSxLQUFLO1FBQzlCLEVBQUUsT0FBTUMsUUFBUTtZQUNkLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBTztBQUNUO0FBcURBLE1BQU1DLGNBQWUsQ0FBQ0M7SUFDcEIsSUFBR0MsUUFBUUMsR0FBRyxDQUFDQyxNQUFNLElBQUlGLFFBQVFDLEdBQUcsQ0FBQ0UsZ0JBQWdCLElBQUlILFFBQVFDLEdBQUcsQ0FBQ0csUUFBUSxLQUFLLFFBQVE7UUFDeEYsT0FBT0M7SUFDVDtJQUVBTCxRQUFRTSxJQUFJLENBQUNQO0FBQ2Y7QUFFQSxPQUFPLE1BQU1RLHNCQUFzQixDQUFDQztJQUNsQyxNQUFNQyxrQkFBa0I7UUFBQztRQUFlO1FBQWU7S0FBcUI7SUFF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
|
|
@@ -6,7 +6,7 @@ export declare const packages: {
|
|
|
6
6
|
vitest: string;
|
|
7
7
|
webpack: string;
|
|
8
8
|
};
|
|
9
|
-
export declare const jsonVersions: (lexPackages:
|
|
9
|
+
export declare const jsonVersions: (lexPackages: Record<string, string>) => Record<string, string>;
|
|
10
10
|
export interface VersionsCmd {
|
|
11
11
|
readonly json?: boolean;
|
|
12
12
|
}
|
|
@@ -15,7 +15,7 @@ export const packages = {
|
|
|
15
15
|
webpack: parseVersion(packageJson?.dependencies?.webpack)
|
|
16
16
|
};
|
|
17
17
|
export const jsonVersions = (lexPackages)=>Object.keys(lexPackages).reduce((list, key)=>{
|
|
18
|
-
list[key] =
|
|
18
|
+
list[key] = lexPackages[key] || 'N/A';
|
|
19
19
|
return list;
|
|
20
20
|
}, {});
|
|
21
21
|
export const versions = (cmd, callback)=>{
|
|
@@ -36,4 +36,4 @@ export const versions = (cmd, callback)=>{
|
|
|
36
36
|
return Promise.resolve(0);
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcblxuaW1wb3J0IHtnZXRMZXhQYWNrYWdlSnNvblBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmNvbnN0IHBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmVyc2lvbiA9IChwYWNrYWdlVmVyc2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHBhY2thZ2VWZXJzaW9uPy5yZXBsYWNlKC9cXF4vZywgJycpIHx8ICdOL0EnO1xuXG5leHBvcnQgY29uc3QgcGFja2FnZXMgPSB7XG4gIGxleDogcGFja2FnZUpzb24udmVyc2lvbixcbiAgc3djOiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8uWydAc3djL2NvcmUnXSksXG4gIHR5cGVzY3JpcHQ6IHBhcnNlVmVyc2lvbihwYWNrYWdlSnNvbj8uZGVwZW5kZW5jaWVzPy50eXBlc2NyaXB0KSxcbiAgdml0ZXN0OiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8udml0ZXN0KSxcbiAgd2VicGFjazogcGFyc2VWZXJzaW9uKHBhY2thZ2VKc29uPy5kZXBlbmRlbmNpZXM/
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcblxuaW1wb3J0IHtnZXRMZXhQYWNrYWdlSnNvblBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmNvbnN0IHBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmVyc2lvbiA9IChwYWNrYWdlVmVyc2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHBhY2thZ2VWZXJzaW9uPy5yZXBsYWNlKC9cXF4vZywgJycpIHx8ICdOL0EnO1xuXG5leHBvcnQgY29uc3QgcGFja2FnZXMgPSB7XG4gIGxleDogcGFja2FnZUpzb24udmVyc2lvbixcbiAgc3djOiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8uWydAc3djL2NvcmUnXSksXG4gIHR5cGVzY3JpcHQ6IHBhcnNlVmVyc2lvbihwYWNrYWdlSnNvbj8uZGVwZW5kZW5jaWVzPy50eXBlc2NyaXB0KSxcbiAgdml0ZXN0OiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8udml0ZXN0KSxcbiAgd2VicGFjazogcGFyc2VWZXJzaW9uKHBhY2thZ2VKc29uPy5kZXBlbmRlbmNpZXM/LndlYnBhY2spXG59O1xuXG5leHBvcnQgY29uc3QganNvblZlcnNpb25zID0gKGxleFBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBPYmplY3Qua2V5cyhsZXhQYWNrYWdlcykucmVkdWNlKChsaXN0LCBrZXkpID0+IHtcbiAgbGlzdFtrZXldID0gbGV4UGFja2FnZXNba2V5XSB8fCAnTi9BJztcbiAgcmV0dXJuIGxpc3Q7XG59LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uc0NtZCB7XG4gIHJlYWRvbmx5IGpzb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgdmVyc2lvbnMgPSAoY21kOiBWZXJzaW9uc0NtZCwgY2FsbGJhY2s6IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGlmKGNtZC5qc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoanNvblZlcnNpb25zKHBhY2thZ2VzKSkpO1xuICB9IGVsc2Uge1xuICAgIGxvZygnVmVyc2lvbnM6JywgJ2luZm8nLCBmYWxzZSk7XG4gICAgbG9nKGAgIExleDogJHtwYWNrYWdlcy5sZXh9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgbG9nKCcgIC0tLS0tLS0tLS0nLCAnbm90ZScsIGZhbHNlKTtcbiAgICBsb2coYCAgU1dDOiAke3BhY2thZ2VzLnN3Y31gLCAnaW5mbycsIGZhbHNlKTtcbiAgICBsb2coYCAgVml0ZXN0OiAke3BhY2thZ2VzLnZpdGVzdH1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICBsb2coYCAgVHlwZXNjcmlwdDogJHtwYWNrYWdlcy50eXBlc2NyaXB0fWAsICdpbmZvJywgZmFsc2UpO1xuICAgIGxvZyhgICBXZWJwYWNrOiAke3BhY2thZ2VzLndlYnBhY2t9YCwgJ2luZm8nLCBmYWxzZSk7XG4gIH1cblxuICBpZihjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKDApO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbn07XG4iXSwibmFtZXMiOlsicmVhZEZpbGVTeW5jIiwiZ2V0TGV4UGFja2FnZUpzb25QYXRoIiwibG9nIiwicGFja2FnZVBhdGgiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInBhcnNlVmVyc2lvbiIsInBhY2thZ2VWZXJzaW9uIiwicmVwbGFjZSIsInBhY2thZ2VzIiwibGV4IiwidmVyc2lvbiIsInN3YyIsImRlcGVuZGVuY2llcyIsInR5cGVzY3JpcHQiLCJ2aXRlc3QiLCJ3ZWJwYWNrIiwianNvblZlcnNpb25zIiwibGV4UGFja2FnZXMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwibGlzdCIsImtleSIsInZlcnNpb25zIiwiY21kIiwiY2FsbGJhY2siLCJqc29uIiwiY29uc29sZSIsInN0cmluZ2lmeSIsIlByb21pc2UiLCJyZXNvbHZlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxZQUFZLFFBQU8sS0FBSztBQUVoQyxTQUFRQyxxQkFBcUIsUUFBTyxzQkFBc0I7QUFDMUQsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQUV2QyxNQUFNQyxjQUFjRjtBQUNwQixNQUFNRyxjQUFjQyxLQUFLQyxLQUFLLENBQUNOLGFBQWFHLGFBQWE7QUFFekQsT0FBTyxNQUFNSSxlQUFlLENBQUNDLGlCQUFtQ0EsZ0JBQWdCQyxRQUFRLE9BQU8sT0FBTyxNQUFNO0FBRTVHLE9BQU8sTUFBTUMsV0FBVztJQUN0QkMsS0FBS1AsWUFBWVEsT0FBTztJQUN4QkMsS0FBS04sYUFBYUgsYUFBYVUsY0FBYyxDQUFDLFlBQVk7SUFDMURDLFlBQVlSLGFBQWFILGFBQWFVLGNBQWNDO0lBQ3BEQyxRQUFRVCxhQUFhSCxhQUFhVSxjQUFjRTtJQUNoREMsU0FBU1YsYUFBYUgsYUFBYVUsY0FBY0c7QUFDbkQsRUFBRTtBQUVGLE9BQU8sTUFBTUMsZUFBZSxDQUFDQyxjQUF3Q0MsT0FBT0MsSUFBSSxDQUFDRixhQUFhRyxNQUFNLENBQUMsQ0FBQ0MsTUFBTUM7UUFDMUdELElBQUksQ0FBQ0MsSUFBSSxHQUFHTCxXQUFXLENBQUNLLElBQUksSUFBSTtRQUNoQyxPQUFPRDtJQUNULEdBQUcsQ0FBQyxHQUE2QjtBQU1qQyxPQUFPLE1BQU1FLFdBQVcsQ0FBQ0MsS0FBa0JDO0lBQ3pDLElBQUdELElBQUlFLElBQUksRUFBRTtRQUNYQyxRQUFRM0IsR0FBRyxDQUFDRyxLQUFLeUIsU0FBUyxDQUFDWixhQUFhUjtJQUMxQyxPQUFPO1FBQ0xSLElBQUksYUFBYSxRQUFRO1FBQ3pCQSxJQUFJLENBQUMsT0FBTyxFQUFFUSxTQUFTQyxHQUFHLEVBQUUsRUFBRSxRQUFRO1FBQ3RDVCxJQUFJLGdCQUFnQixRQUFRO1FBQzVCQSxJQUFJLENBQUMsT0FBTyxFQUFFUSxTQUFTRyxHQUFHLEVBQUUsRUFBRSxRQUFRO1FBQ3RDWCxJQUFJLENBQUMsVUFBVSxFQUFFUSxTQUFTTSxNQUFNLEVBQUUsRUFBRSxRQUFRO1FBQzVDZCxJQUFJLENBQUMsY0FBYyxFQUFFUSxTQUFTSyxVQUFVLEVBQUUsRUFBRSxRQUFRO1FBQ3BEYixJQUFJLENBQUMsV0FBVyxFQUFFUSxTQUFTTyxPQUFPLEVBQUUsRUFBRSxRQUFRO0lBQ2hEO0lBRUEsSUFBR1UsVUFBVTtRQUNYQSxTQUFTO0lBQ1g7SUFFQSxPQUFPSSxRQUFRQyxPQUFPLENBQUM7QUFDekIsRUFBRSJ9
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
interface ChangelogConfig {
|
|
2
|
+
readonly gitUrl?: string;
|
|
3
|
+
}
|
|
4
|
+
interface ChangelogOptions {
|
|
5
|
+
readonly cliName?: string;
|
|
6
|
+
readonly config?: ChangelogConfig;
|
|
7
|
+
readonly outputFile?: string;
|
|
8
|
+
readonly quiet?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const createChangelog: ({ cliName, config, outputFile, quiet }: ChangelogOptions) => Promise<number>;
|
|
11
|
+
export {};
|
package/lib/create/changelog.js
CHANGED
|
@@ -10,7 +10,7 @@ import { DateTime } from 'luxon';
|
|
|
10
10
|
import { join as pathJoin } from 'path';
|
|
11
11
|
import { createSpinner } from '../utils/app.js';
|
|
12
12
|
import { log } from '../utils/log.js';
|
|
13
|
-
export const createChangelog = async ({ cliName, config, outputFile = 'changelog.tmp.md', quiet })=>{
|
|
13
|
+
export const createChangelog = async ({ cliName, config = {}, outputFile = 'changelog.tmp.md', quiet })=>{
|
|
14
14
|
const spinner = createSpinner(quiet);
|
|
15
15
|
const gitOptions = [
|
|
16
16
|
'log',
|
|
@@ -60,7 +60,7 @@ export const createChangelog = async ({ cliName, config, outputFile = 'changelog
|
|
|
60
60
|
const matches = formatLine.match(headerPattern);
|
|
61
61
|
if (matches) {
|
|
62
62
|
const itemType = capitalize(matches[1]);
|
|
63
|
-
const itemScope = matches[2];
|
|
63
|
+
const itemScope = matches[2] || 'General';
|
|
64
64
|
const itemDetails = matches[3];
|
|
65
65
|
const details = {
|
|
66
66
|
authorEmail,
|
|
@@ -110,7 +110,7 @@ export const createChangelog = async ({ cliName, config, outputFile = 'changelog
|
|
|
110
110
|
let hash = `#${hashShort}`;
|
|
111
111
|
if (!isEmpty(gitUrl)) {
|
|
112
112
|
let commitPath = 'commits';
|
|
113
|
-
if (gitUrl.includes('github.com')) {
|
|
113
|
+
if (gitUrl && gitUrl.includes('github.com')) {
|
|
114
114
|
commitPath = 'commit';
|
|
115
115
|
}
|
|
116
116
|
hash = `[#${hashShort}](${gitUrl}/${commitPath}/${hashFull})`;
|
|
@@ -132,8 +132,8 @@ export const createChangelog = async ({ cliName, config, outputFile = 'changelog
|
|
|
132
132
|
// Stop spinner
|
|
133
133
|
spinner.fail('Failed generating change log!');
|
|
134
134
|
// Kill process
|
|
135
|
-
return
|
|
135
|
+
return 1;
|
|
136
136
|
}
|
|
137
137
|
};
|
|
138
138
|
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge3dyaXRlRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ2xvZGFzaC9jYXBpdGFsaXplLmpzJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5LmpzJztcbmltcG9ydCBtZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UuanMnO1xuaW1wb3J0IHtEYXRlVGltZX0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHtqb2luIGFzIHBhdGhKb2lufSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDaGFuZ2Vsb2cgPSBhc3luYyAoe2NsaU5hbWUsIGNvbmZpZywgb3V0cHV0RmlsZSA9ICdjaGFuZ2Vsb2cudG1wLm1kJywgcXVpZXR9KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGNvbnN0IGdpdE9wdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgICdsb2cnLFxuICAgICctMycsXG4gICAgJy0tcHJldHR5PWZvcm1hdDp7XCJhdXRob3JOYW1lXCI6IFwiJWFuXCIsIFwiYXV0aG9yRW1haWxcIjogXCIlYWVcIiwgXCJoYXNoU2hvcnRcIjogXCIlaFwiLCBcImhhc2hGdWxsXCI6IFwiJUhcIiwgXCJ0YWdcIjogXCIlRFwiLCBcImRhdGVcIjogJWN0LCBcInN1YmplY3RcIjogXCIlc1wiLFwiY29tbWVudHNcIjogXCIlYlwifVtsZXhfYnJlYWtdJ1xuICBdO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ2l0ID0gYXdhaXQgZXhlY2EoJ2dpdCcsIGdpdE9wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnfSk7XG5cbiAgICBjb25zdCB7c3Rkb3V0fSA9IGdpdDtcbiAgICBjb25zdCBlbnRyaWVzOiBzdHJpbmdbXSA9IHN0ZG91dC5zcGxpdCgnW2xleF9icmVha10nKS5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSk7XG4gICAgY29uc3QgZ2l0SnNvbiA9IEpTT04ucGFyc2UoXG4gICAgICAoYFske2VudHJpZXMuam9pbignLCcpfV1gKS5yZXBsYWNlKC9cIlteXCJdKig/OlwiXCJbXlwiXSopKlwiL2csIChtYXRjaCkgPT4gbWF0Y2gucmVwbGFjZSgvXFxuL2csICdbbGV4X2JyZWFrXScpKVxuICAgICk7XG4gICAgY29uc3QgY29tbWl0Q29udGVudCA9IHt9O1xuICAgIGxldCB2ZXJzaW9uOiBzdHJpbmcgPSAnVW5yZWxlYXNlZCc7XG5cbiAgICBnaXRKc29uLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHtjb21tZW50cywgYXV0aG9yRW1haWwsIGF1dGhvck5hbWUsIGRhdGUsIGhhc2hGdWxsLCBoYXNoU2hvcnQsIHRhZ30gPSBpdGVtO1xuICAgICAgY29uc3QgZm9ybWF0RGF0ZTogc3RyaW5nID0gRGF0ZVRpbWUuZnJvbU1pbGxpcyhkYXRlKS50b0Zvcm1hdCgnREREJyk7XG5cbiAgICAgIGlmKCFpc0VtcHR5KHRhZykpIHtcbiAgICAgICAgY29uc3QgcmVmcyA9IHRhZy5zcGxpdCgnLCAnKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb246IHN0cmluZyA9IHJlZnMucmVkdWNlKChyZWY6IHN0cmluZywgdGFnSXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IHVwZGF0ZWRSZWY6IHN0cmluZyA9IHJlZjtcblxuICAgICAgICAgIGlmKHVwZGF0ZWRSZWYgPT09ICcnICYmIHRhZ0l0ZW0uaW5jbHVkZXMoJ3RhZzogdicpKSB7XG4gICAgICAgICAgICB1cGRhdGVkUmVmID0gdGFnSXRlbS5yZXBsYWNlKCd0YWc6IHYnLCAnJykudHJpbSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cGRhdGVkUmVmO1xuICAgICAgICB9LCAnJyk7XG5cbiAgICAgICAgaWYoIWlzRW1wdHkodXBkYXRlZFZlcnNpb24pKSB7XG4gICAgICAgICAgdmVyc2lvbiA9IHVwZGF0ZWRWZXJzaW9uO1xuICAgICAgICAgIGNvbW1pdENvbnRlbnRbdmVyc2lvbl0gPSB7ZGF0ZTogZm9ybWF0RGF0ZSwgdmVyc2lvbjogdXBkYXRlZFZlcnNpb259O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKCFjb21taXRDb250ZW50W3ZlcnNpb25dKSB7XG4gICAgICAgIGNvbW1pdENvbnRlbnRbdmVyc2lvbl0gPSB7bGlzdDoge319O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJqZWN0TGluZXM6IHN0cmluZ1tdID0gY29tbWVudHMuc3BsaXQoJ1tsZXhfYnJlYWtdJyk7XG4gICAgICBjb25zdCB0b3BpY3MgPSB7fTtcblxuXG4gICAgICBmb3IobGV0IGlkeDogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSBzdWJqZWN0TGluZXMubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgICAgIGNvbnN0IG5leHRMaW5lOiBzdHJpbmcgPSBzdWJqZWN0TGluZXNbaWR4XTtcbiAgICAgICAgY29uc3QgZm9ybWF0TGluZTogc3RyaW5nID0gbmV4dExpbmUudHJpbSgpO1xuICAgICAgICBjb25zdCBoZWFkZXJQYXR0ZXJuOiBSZWdFeHAgPSAvXihcXHcqKSg/OlxcKChbXFx3JC5cXC0gKl0qKVxcKSk/OiAoLiopJC87XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmb3JtYXRMaW5lLm1hdGNoKGhlYWRlclBhdHRlcm4pO1xuXG4gICAgICAgIGlmKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBpdGVtVHlwZTogc3RyaW5nID0gY2FwaXRhbGl6ZShtYXRjaGVzWzFdKTtcbiAgICAgICAgICBjb25zdCBpdGVtU2NvcGU6IHN0cmluZyA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgY29uc3QgaXRlbURldGFpbHM6IHN0cmluZyA9IG1hdGNoZXNbM107XG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IHtcbiAgICAgICAgICAgIGF1dGhvckVtYWlsLFxuICAgICAgICAgICAgYXV0aG9yTmFtZSxcbiAgICAgICAgICAgIGRldGFpbHM6IGl0ZW1EZXRhaWxzLFxuICAgICAgICAgICAgaGFzaEZ1bGwsXG4gICAgICAgICAgICBoYXNoU2hvcnQsXG4gICAgICAgICAgICB0eXBlOiBpdGVtVHlwZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZighdG9waWNzW2l0ZW1TY29wZV0pIHtcbiAgICAgICAgICAgIHRvcGljc1tpdGVtU2NvcGVdID0ge1tpdGVtVHlwZV06IFtkZXRhaWxzXX07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvcGljc1tpdGVtU2NvcGVdW2l0ZW1UeXBlXS5wdXNoKGRldGFpbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb21taXRDb250ZW50W3ZlcnNpb25dID0gbWVyZ2UoY29tbWl0Q29udGVudFt2ZXJzaW9uXSwge2xpc3Q6IHRvcGljc30pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZm9ybWF0TG9nOiBzdHJpbmcgPSBPYmplY3Qua2V5cyhjb21taXRDb250ZW50KS5yZWR1Y2UoKGNvbnRlbnQ6IHN0cmluZywgdmVyc2lvbktleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7ZGF0ZSwgbGlzdCA9IHt9LCB2ZXJzaW9ufSA9IGNvbW1pdENvbnRlbnRbdmVyc2lvbktleV07XG4gICAgICBjb25zdCBmb3JtYXRTY29wZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMobGlzdCk7XG4gICAgICBsZXQgdXBkYXRlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnQ7XG5cbiAgICAgIGNvbnN0IHZlcnNpb25MYWJlbDogc3RyaW5nID0gdmVyc2lvbiA/IHZlcnNpb24gOiAnVW5yZWxlYXNlZCc7XG4gICAgICBjb25zdCBoZWFkZXJMYWJlbHM6IHN0cmluZ1tdID0gW3ZlcnNpb25MYWJlbF07XG4gICAgICBpZihkYXRlKSB7XG4gICAgICAgIGhlYWRlckxhYmVscy5wdXNoKGAoJHtkYXRlfSlgKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlZENvbnRlbnQgKz0gYFxcbiMjICR7aGVhZGVyTGFiZWxzLmpvaW4oJyAnKX1cXG5gO1xuXG4gICAgICBmb3JtYXRTY29wZXMuZm9yRWFjaCgoc2NvcGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdXBkYXRlZENvbnRlbnQgKz0gYFxcbiMjIyAke3Njb3BlTmFtZX1cXG5cXG5gO1xuXG4gICAgICAgIC8vIEdldCB0aGUgdG9waWMgbmFtZVxuICAgICAgICBjb25zdCBpdGVtTGlzdCA9IGxpc3Rbc2NvcGVOYW1lXTtcbiAgICAgICAgY29uc3QgaXRlbU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGl0ZW1MaXN0KTtcblxuICAgICAgICBpdGVtTmFtZXMuZm9yRWFjaCgoaXRlbU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHVwZGF0ZWRDb250ZW50ICs9IGAqICR7aXRlbU5hbWV9XFxuYDtcblxuICAgICAgICAgIGl0ZW1MaXN0W2l0ZW1OYW1lXS5mb3JFYWNoKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7YXV0aG9yRW1haWwsIGF1dGhvck5hbWUsIGRldGFpbHMsIGhhc2hGdWxsLCBoYXNoU2hvcnR9ID0gY2hhbmdlcztcbiAgICAgICAgICAgIGNvbnN0IHtnaXRVcmx9ID0gY29uZmlnO1xuICAgICAgICAgICAgbGV0IGhhc2g6IHN0cmluZyA9IGAjJHtoYXNoU2hvcnR9YDtcblxuICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2l0VXJsKSkge1xuICAgICAgICAgICAgICBsZXQgY29tbWl0UGF0aDogc3RyaW5nID0gJ2NvbW1pdHMnO1xuXG4gICAgICAgICAgICAgIGlmKGdpdFVybC5pbmNsdWRlcygnZ2l0aHViLmNvbScpKSB7XG4gICAgICAgICAgICAgICAgY29tbWl0UGF0aCA9ICdjb21taXQnO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGFzaCA9IGBbIyR7aGFzaFNob3J0fV0oJHtnaXRVcmx9LyR7Y29tbWl0UGF0aH0vJHtoYXNoRnVsbH0pYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZENvbnRlbnQgKz0gYCAgKiAke2RldGFpbHN9IChbJHthdXRob3JOYW1lfV0obWFpbHRvOiR7YXV0aG9yRW1haWx9KSBpbiAke2hhc2h9KVxcbmA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB1cGRhdGVkQ29udGVudDtcbiAgICB9LCAnIyBDaGFuZ2VzXFxuJyk7XG5cbiAgICBjb25zdCBsb2dGaWxlOiBzdHJpbmcgPSBwYXRoSm9pbihwcm9jZXNzLmN3ZCgpLCBvdXRwdXRGaWxlKTtcbiAgICB3cml0ZUZpbGVTeW5jKGxvZ0ZpbGUsIGZvcm1hdExvZyk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdHaXQgY2hhbmdlIGxvZyBjb21wbGV0ZSEnKTtcblxuICAgIC8vIEtpbGwgcHJvY2Vzc1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZ2VuZXJhdGluZyBjaGFuZ2UgbG9nIScpO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgcmV0dXJuIGVycm9yLnN0YXR1cztcbiAgfVxufTsiXSwibmFtZXMiOlsiZXhlY2EiLCJ3cml0ZUZpbGVTeW5jIiwiY2FwaXRhbGl6ZSIsImlzRW1wdHkiLCJtZXJnZSIsIkRhdGVUaW1lIiwiam9pbiIsInBhdGhKb2luIiwiY3JlYXRlU3Bpbm5lciIsImxvZyIsImNyZWF0ZUNoYW5nZWxvZyIsImNsaU5hbWUiLCJjb25maWciLCJvdXRwdXRGaWxlIiwicXVpZXQiLCJzcGlubmVyIiwiZ2l0T3B0aW9ucyIsImdpdCIsImVuY29kaW5nIiwic3Rkb3V0IiwiZW50cmllcyIsInNwbGl0IiwiZmlsdGVyIiwiaXRlbSIsImdpdEpzb24iLCJKU09OIiwicGFyc2UiLCJyZXBsYWNlIiwibWF0Y2giLCJjb21taXRDb250ZW50IiwidmVyc2lvbiIsImZvckVhY2giLCJjb21tZW50cyIsImF1dGhvckVtYWlsIiwiYXV0aG9yTmFtZSIsImRhdGUiLCJoYXNoRnVsbCIsImhhc2hTaG9ydCIsInRhZyIsImZvcm1hdERhdGUiLCJmcm9tTWlsbGlzIiwidG9Gb3JtYXQiLCJyZWZzIiwidXBkYXRlZFZlcnNpb24iLCJyZWR1Y2UiLCJyZWYiLCJ0YWdJdGVtIiwidXBkYXRlZFJlZiIsImluY2x1ZGVzIiwidHJpbSIsImxpc3QiLCJzdWJqZWN0TGluZXMiLCJ0b3BpY3MiLCJpZHgiLCJsZW4iLCJsZW5ndGgiLCJuZXh0TGluZSIsImZvcm1hdExpbmUiLCJoZWFkZXJQYXR0ZXJuIiwibWF0Y2hlcyIsIml0ZW1UeXBlIiwiaXRlbVNjb3BlIiwiaXRlbURldGFpbHMiLCJkZXRhaWxzIiwidHlwZSIsInB1c2giLCJmb3JtYXRMb2ciLCJPYmplY3QiLCJrZXlzIiwiY29udGVudCIsInZlcnNpb25LZXkiLCJmb3JtYXRTY29wZXMiLCJ1cGRhdGVkQ29udGVudCIsInZlcnNpb25MYWJlbCIsImhlYWRlckxhYmVscyIsInNjb3BlTmFtZSIsIml0ZW1MaXN0IiwiaXRlbU5hbWVzIiwiaXRlbU5hbWUiLCJjaGFuZ2VzIiwiZ2l0VXJsIiwiaGFzaCIsImNvbW1pdFBhdGgiLCJsb2dGaWxlIiwicHJvY2VzcyIsImN3ZCIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJmYWlsIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxhQUFhLFFBQU8sS0FBSztBQUNqQyxPQUFPQyxnQkFBZ0IsdUJBQXVCO0FBQzlDLE9BQU9DLGFBQWEsb0JBQW9CO0FBQ3hDLE9BQU9DLFdBQVcsa0JBQWtCO0FBQ3BDLFNBQVFDLFFBQVEsUUFBTyxRQUFRO0FBQy9CLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBRXRDLFNBQVFDLGFBQWEsUUFBTyxrQkFBa0I7QUFDOUMsU0FBUUMsR0FBRyxRQUFPLGtCQUFrQjtBQUVwQyxPQUFPLE1BQU1DLGtCQUFrQixPQUFPLEVBQUNDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxhQUFhLGtCQUFrQixFQUFFQyxLQUFLLEVBQUM7SUFDN0YsTUFBTUMsVUFBVVAsY0FBY007SUFFOUIsTUFBTUUsYUFBdUI7UUFDM0I7UUFDQTtRQUNBO0tBQ0Q7SUFFRCxJQUFJO1FBQ0YsTUFBTUMsTUFBTSxNQUFNakIsTUFBTSxPQUFPZ0IsWUFBWTtZQUFDRSxVQUFVO1FBQU07UUFFNUQsTUFBTSxFQUFDQyxNQUFNLEVBQUMsR0FBR0Y7UUFDakIsTUFBTUcsVUFBb0JELE9BQU9FLEtBQUssQ0FBQyxlQUFlQyxNQUFNLENBQUMsQ0FBQ0MsT0FBUyxDQUFDLENBQUNBO1FBQ3pFLE1BQU1DLFVBQVVDLEtBQUtDLEtBQUssQ0FDeEIsQUFBQyxDQUFDLENBQUMsRUFBRU4sUUFBUWQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUVxQixPQUFPLENBQUMsd0JBQXdCLENBQUNDLFFBQVVBLE1BQU1ELE9BQU8sQ0FBQyxPQUFPO1FBRTdGLE1BQU1FLGdCQUFnQixD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
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge3dyaXRlRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ2xvZGFzaC9jYXBpdGFsaXplLmpzJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5LmpzJztcbmltcG9ydCBtZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UuanMnO1xuaW1wb3J0IHtEYXRlVGltZX0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHtqb2luIGFzIHBhdGhKb2lufSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uL3V0aWxzL2xvZy5qcyc7XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dDb25maWcge1xuICByZWFkb25seSBnaXRVcmw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZmlnPzogQ2hhbmdlbG9nQ29uZmlnO1xuICByZWFkb25seSBvdXRwdXRGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dFbnRyeSB7XG4gIHJlYWRvbmx5IGF1dGhvckVtYWlsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dGhvck5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29tbWVudHM6IHN0cmluZztcbiAgcmVhZG9ubHkgZGF0ZTogbnVtYmVyO1xuICByZWFkb25seSBoYXNoRnVsbDogc3RyaW5nO1xuICByZWFkb25seSBoYXNoU2hvcnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdGFnOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dJdGVtRGV0YWlscyB7XG4gIHJlYWRvbmx5IGF1dGhvckVtYWlsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF1dGhvck5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGV0YWlsczogc3RyaW5nO1xuICByZWFkb25seSBoYXNoRnVsbDogc3RyaW5nO1xuICByZWFkb25seSBoYXNoU2hvcnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhbmdlbG9nVmVyc2lvbkVudHJ5IHtcbiAgcmVhZG9ubHkgZGF0ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgbGlzdD86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIENoYW5nZWxvZ0l0ZW1EZXRhaWxzW10+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNoYW5nZWxvZyA9IGFzeW5jICh7Y2xpTmFtZSwgY29uZmlnID0ge30sIG91dHB1dEZpbGUgPSAnY2hhbmdlbG9nLnRtcC5tZCcsIHF1aWV0fTogQ2hhbmdlbG9nT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBjb25zdCBnaXRPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnbG9nJyxcbiAgICAnLTMnLFxuICAgICctLXByZXR0eT1mb3JtYXQ6e1wiYXV0aG9yTmFtZVwiOiBcIiVhblwiLCBcImF1dGhvckVtYWlsXCI6IFwiJWFlXCIsIFwiaGFzaFNob3J0XCI6IFwiJWhcIiwgXCJoYXNoRnVsbFwiOiBcIiVIXCIsIFwidGFnXCI6IFwiJURcIiwgXCJkYXRlXCI6ICVjdCwgXCJzdWJqZWN0XCI6IFwiJXNcIixcImNvbW1lbnRzXCI6IFwiJWJcIn1bbGV4X2JyZWFrXSdcbiAgXTtcblxuICB0cnkge1xuICAgIGNvbnN0IGdpdCA9IGF3YWl0IGV4ZWNhKCdnaXQnLCBnaXRPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuXG4gICAgY29uc3Qge3N0ZG91dH0gPSBnaXQ7XG4gICAgY29uc3QgZW50cmllczogc3RyaW5nW10gPSBzdGRvdXQuc3BsaXQoJ1tsZXhfYnJlYWtdJykuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xuICAgIGNvbnN0IGdpdEpzb24gPSBKU09OLnBhcnNlKFxuICAgICAgKGBbJHtlbnRyaWVzLmpvaW4oJywnKX1dYCkucmVwbGFjZSgvXCJbXlwiXSooPzpcIlwiW15cIl0qKSpcIi9nLCAobWF0Y2gpID0+IG1hdGNoLnJlcGxhY2UoL1xcbi9nLCAnW2xleF9icmVha10nKSlcbiAgICApIGFzIENoYW5nZWxvZ0VudHJ5W107XG4gICAgY29uc3QgY29tbWl0Q29udGVudDogUmVjb3JkPHN0cmluZywgQ2hhbmdlbG9nVmVyc2lvbkVudHJ5PiA9IHt9O1xuICAgIGxldCB2ZXJzaW9uOiBzdHJpbmcgPSAnVW5yZWxlYXNlZCc7XG5cbiAgICBnaXRKc29uLmZvckVhY2goKGl0ZW06IENoYW5nZWxvZ0VudHJ5KSA9PiB7XG4gICAgICBjb25zdCB7Y29tbWVudHMsIGF1dGhvckVtYWlsLCBhdXRob3JOYW1lLCBkYXRlLCBoYXNoRnVsbCwgaGFzaFNob3J0LCB0YWd9ID0gaXRlbTtcbiAgICAgIGNvbnN0IGZvcm1hdERhdGU6IHN0cmluZyA9IERhdGVUaW1lLmZyb21NaWxsaXMoZGF0ZSkudG9Gb3JtYXQoJ0RERCcpO1xuXG4gICAgICBpZighaXNFbXB0eSh0YWcpKSB7XG4gICAgICAgIGNvbnN0IHJlZnMgPSB0YWcuc3BsaXQoJywgJyk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9uOiBzdHJpbmcgPSByZWZzLnJlZHVjZSgocmVmOiBzdHJpbmcsIHRhZ0l0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgIGxldCB1cGRhdGVkUmVmOiBzdHJpbmcgPSByZWY7XG5cbiAgICAgICAgICBpZih1cGRhdGVkUmVmID09PSAnJyAmJiB0YWdJdGVtLmluY2x1ZGVzKCd0YWc6IHYnKSkge1xuICAgICAgICAgICAgdXBkYXRlZFJlZiA9IHRhZ0l0ZW0ucmVwbGFjZSgndGFnOiB2JywgJycpLnRyaW0oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlZjtcbiAgICAgICAgfSwgJycpO1xuXG4gICAgICAgIGlmKCFpc0VtcHR5KHVwZGF0ZWRWZXJzaW9uKSkge1xuICAgICAgICAgIHZlcnNpb24gPSB1cGRhdGVkVmVyc2lvbjtcbiAgICAgICAgICBjb21taXRDb250ZW50W3ZlcnNpb25dID0ge2RhdGU6IGZvcm1hdERhdGUsIHZlcnNpb246IHVwZGF0ZWRWZXJzaW9ufTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZighY29tbWl0Q29udGVudFt2ZXJzaW9uXSkge1xuICAgICAgICBjb21taXRDb250ZW50W3ZlcnNpb25dID0ge2xpc3Q6IHt9fTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3ViamVjdExpbmVzOiBzdHJpbmdbXSA9IGNvbW1lbnRzLnNwbGl0KCdbbGV4X2JyZWFrXScpO1xuICAgICAgY29uc3QgdG9waWNzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBDaGFuZ2Vsb2dJdGVtRGV0YWlsc1tdPj4gPSB7fTtcblxuXG4gICAgICBmb3IobGV0IGlkeDogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSBzdWJqZWN0TGluZXMubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgICAgIGNvbnN0IG5leHRMaW5lOiBzdHJpbmcgPSBzdWJqZWN0TGluZXNbaWR4XTtcbiAgICAgICAgY29uc3QgZm9ybWF0TGluZTogc3RyaW5nID0gbmV4dExpbmUudHJpbSgpO1xuICAgICAgICBjb25zdCBoZWFkZXJQYXR0ZXJuOiBSZWdFeHAgPSAvXihcXHcqKSg/OlxcKChbXFx3JC5cXC0gKl0qKVxcKSk/OiAoLiopJC87XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmb3JtYXRMaW5lLm1hdGNoKGhlYWRlclBhdHRlcm4pO1xuXG4gICAgICAgIGlmKG1hdGNoZXMpIHtcbiAgICAgICAgICBjb25zdCBpdGVtVHlwZTogc3RyaW5nID0gY2FwaXRhbGl6ZShtYXRjaGVzWzFdKTtcbiAgICAgICAgICBjb25zdCBpdGVtU2NvcGU6IHN0cmluZyA9IG1hdGNoZXNbMl0gfHwgJ0dlbmVyYWwnO1xuICAgICAgICAgIGNvbnN0IGl0ZW1EZXRhaWxzOiBzdHJpbmcgPSBtYXRjaGVzWzNdO1xuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSB7XG4gICAgICAgICAgICBhdXRob3JFbWFpbCxcbiAgICAgICAgICAgIGF1dGhvck5hbWUsXG4gICAgICAgICAgICBkZXRhaWxzOiBpdGVtRGV0YWlscyxcbiAgICAgICAgICAgIGhhc2hGdWxsLFxuICAgICAgICAgICAgaGFzaFNob3J0LFxuICAgICAgICAgICAgdHlwZTogaXRlbVR5cGVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYoIXRvcGljc1tpdGVtU2NvcGVdKSB7XG4gICAgICAgICAgICB0b3BpY3NbaXRlbVNjb3BlXSA9IHtbaXRlbVR5cGVdOiBbZGV0YWlsc119O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b3BpY3NbaXRlbVNjb3BlXVtpdGVtVHlwZV0ucHVzaChkZXRhaWxzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29tbWl0Q29udGVudFt2ZXJzaW9uXSA9IG1lcmdlKGNvbW1pdENvbnRlbnRbdmVyc2lvbl0sIHtsaXN0OiB0b3BpY3N9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1hdExvZzogc3RyaW5nID0gT2JqZWN0LmtleXMoY29tbWl0Q29udGVudCkucmVkdWNlKChjb250ZW50OiBzdHJpbmcsIHZlcnNpb25LZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qge2RhdGUsIGxpc3QgPSB7fSwgdmVyc2lvbn0gPSBjb21taXRDb250ZW50W3ZlcnNpb25LZXldO1xuICAgICAgY29uc3QgZm9ybWF0U2NvcGVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGxpc3QpO1xuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50O1xuXG4gICAgICBjb25zdCB2ZXJzaW9uTGFiZWw6IHN0cmluZyA9IHZlcnNpb24gPyB2ZXJzaW9uIDogJ1VucmVsZWFzZWQnO1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWxzOiBzdHJpbmdbXSA9IFt2ZXJzaW9uTGFiZWxdO1xuICAgICAgaWYoZGF0ZSkge1xuICAgICAgICBoZWFkZXJMYWJlbHMucHVzaChgKCR7ZGF0ZX0pYCk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZWRDb250ZW50ICs9IGBcXG4jIyAke2hlYWRlckxhYmVscy5qb2luKCcgJyl9XFxuYDtcblxuICAgICAgZm9ybWF0U2NvcGVzLmZvckVhY2goKHNjb3BlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZWRDb250ZW50ICs9IGBcXG4jIyMgJHtzY29wZU5hbWV9XFxuXFxuYDtcblxuICAgICAgICAvLyBHZXQgdGhlIHRvcGljIG5hbWVcbiAgICAgICAgY29uc3QgaXRlbUxpc3QgPSBsaXN0W3Njb3BlTmFtZV07XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhpdGVtTGlzdCk7XG5cbiAgICAgICAgaXRlbU5hbWVzLmZvckVhY2goKGl0ZW1OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB1cGRhdGVkQ29udGVudCArPSBgKiAke2l0ZW1OYW1lfVxcbmA7XG5cbiAgICAgICAgICBpdGVtTGlzdFtpdGVtTmFtZV0uZm9yRWFjaCgoY2hhbmdlczogQ2hhbmdlbG9nSXRlbURldGFpbHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHthdXRob3JFbWFpbCwgYXV0aG9yTmFtZSwgZGV0YWlscywgaGFzaEZ1bGwsIGhhc2hTaG9ydH0gPSBjaGFuZ2VzO1xuICAgICAgICAgICAgY29uc3Qge2dpdFVybH0gPSBjb25maWc7XG4gICAgICAgICAgICBsZXQgaGFzaDogc3RyaW5nID0gYCMke2hhc2hTaG9ydH1gO1xuXG4gICAgICAgICAgICBpZighaXNFbXB0eShnaXRVcmwpKSB7XG4gICAgICAgICAgICAgIGxldCBjb21taXRQYXRoOiBzdHJpbmcgPSAnY29tbWl0cyc7XG5cbiAgICAgICAgICAgICAgaWYoZ2l0VXJsICYmIGdpdFVybC5pbmNsdWRlcygnZ2l0aHViLmNvbScpKSB7XG4gICAgICAgICAgICAgICAgY29tbWl0UGF0aCA9ICdjb21taXQnO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGFzaCA9IGBbIyR7aGFzaFNob3J0fV0oJHtnaXRVcmx9LyR7Y29tbWl0UGF0aH0vJHtoYXNoRnVsbH0pYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZENvbnRlbnQgKz0gYCAgKiAke2RldGFpbHN9IChbJHthdXRob3JOYW1lfV0obWFpbHRvOiR7YXV0aG9yRW1haWx9KSBpbiAke2hhc2h9KVxcbmA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB1cGRhdGVkQ29udGVudDtcbiAgICB9LCAnIyBDaGFuZ2VzXFxuJyk7XG5cbiAgICBjb25zdCBsb2dGaWxlOiBzdHJpbmcgPSBwYXRoSm9pbihwcm9jZXNzLmN3ZCgpLCBvdXRwdXRGaWxlKTtcbiAgICB3cml0ZUZpbGVTeW5jKGxvZ0ZpbGUsIGZvcm1hdExvZyk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdHaXQgY2hhbmdlIGxvZyBjb21wbGV0ZSEnKTtcblxuICAgIC8vIEtpbGwgcHJvY2Vzc1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZ2VuZXJhdGluZyBjaGFuZ2UgbG9nIScpO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZXhlY2EiLCJ3cml0ZUZpbGVTeW5jIiwiY2FwaXRhbGl6ZSIsImlzRW1wdHkiLCJtZXJnZSIsIkRhdGVUaW1lIiwiam9pbiIsInBhdGhKb2luIiwiY3JlYXRlU3Bpbm5lciIsImxvZyIsImNyZWF0ZUNoYW5nZWxvZyIsImNsaU5hbWUiLCJjb25maWciLCJvdXRwdXRGaWxlIiwicXVpZXQiLCJzcGlubmVyIiwiZ2l0T3B0aW9ucyIsImdpdCIsImVuY29kaW5nIiwic3Rkb3V0IiwiZW50cmllcyIsInNwbGl0IiwiZmlsdGVyIiwiaXRlbSIsImdpdEpzb24iLCJKU09OIiwicGFyc2UiLCJyZXBsYWNlIiwibWF0Y2giLCJjb21taXRDb250ZW50IiwidmVyc2lvbiIsImZvckVhY2giLCJjb21tZW50cyIsImF1dGhvckVtYWlsIiwiYXV0aG9yTmFtZSIsImRhdGUiLCJoYXNoRnVsbCIsImhhc2hTaG9ydCIsInRhZyIsImZvcm1hdERhdGUiLCJmcm9tTWlsbGlzIiwidG9Gb3JtYXQiLCJyZWZzIiwidXBkYXRlZFZlcnNpb24iLCJyZWR1Y2UiLCJyZWYiLCJ0YWdJdGVtIiwidXBkYXRlZFJlZiIsImluY2x1ZGVzIiwidHJpbSIsImxpc3QiLCJzdWJqZWN0TGluZXMiLCJ0b3BpY3MiLCJpZHgiLCJsZW4iLCJsZW5ndGgiLCJuZXh0TGluZSIsImZvcm1hdExpbmUiLCJoZWFkZXJQYXR0ZXJuIiwibWF0Y2hlcyIsIml0ZW1UeXBlIiwiaXRlbVNjb3BlIiwiaXRlbURldGFpbHMiLCJkZXRhaWxzIiwidHlwZSIsInB1c2giLCJmb3JtYXRMb2ciLCJPYmplY3QiLCJrZXlzIiwiY29udGVudCIsInZlcnNpb25LZXkiLCJmb3JtYXRTY29wZXMiLCJ1cGRhdGVkQ29udGVudCIsInZlcnNpb25MYWJlbCIsImhlYWRlckxhYmVscyIsInNjb3BlTmFtZSIsIml0ZW1MaXN0IiwiaXRlbU5hbWVzIiwiaXRlbU5hbWUiLCJjaGFuZ2VzIiwiZ2l0VXJsIiwiaGFzaCIsImNvbW1pdFBhdGgiLCJsb2dGaWxlIiwicHJvY2VzcyIsImN3ZCIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJmYWlsIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxhQUFhLFFBQU8sS0FBSztBQUNqQyxPQUFPQyxnQkFBZ0IsdUJBQXVCO0FBQzlDLE9BQU9DLGFBQWEsb0JBQW9CO0FBQ3hDLE9BQU9DLFdBQVcsa0JBQWtCO0FBQ3BDLFNBQVFDLFFBQVEsUUFBTyxRQUFRO0FBQy9CLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBRXRDLFNBQVFDLGFBQWEsUUFBTyxrQkFBa0I7QUFDOUMsU0FBUUMsR0FBRyxRQUFPLGtCQUFrQjtBQXNDcEMsT0FBTyxNQUFNQyxrQkFBa0IsT0FBTyxFQUFDQyxPQUFPLEVBQUVDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLGFBQWEsa0JBQWtCLEVBQUVDLEtBQUssRUFBbUI7SUFDcEgsTUFBTUMsVUFBVVAsY0FBY007SUFFOUIsTUFBTUUsYUFBdUI7UUFDM0I7UUFDQTtRQUNBO0tBQ0Q7SUFFRCxJQUFJO1FBQ0YsTUFBTUMsTUFBTSxNQUFNakIsTUFBTSxPQUFPZ0IsWUFBWTtZQUFDRSxVQUFVO1FBQU07UUFFNUQsTUFBTSxFQUFDQyxNQUFNLEVBQUMsR0FBR0Y7UUFDakIsTUFBTUcsVUFBb0JELE9BQU9FLEtBQUssQ0FBQyxlQUFlQyxNQUFNLENBQUMsQ0FBQ0MsT0FBUyxDQUFDLENBQUNBO1FBQ3pFLE1BQU1D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
|
package/lib/lex.js
CHANGED
|
@@ -13,7 +13,7 @@ import { clean } from './commands/clean/clean.js';
|
|
|
13
13
|
import { compile } from './commands/compile/compile.js';
|
|
14
14
|
import { config } from './commands/config/config.js';
|
|
15
15
|
import { create } from './commands/create/create.js';
|
|
16
|
-
import { dev } from './commands/dev/dev.js';
|
|
16
|
+
import { dev, DEFAULT_DEV_PORT } from './commands/dev/dev.js';
|
|
17
17
|
import { init } from './commands/init/init.js';
|
|
18
18
|
import { linked } from './commands/link/link.js';
|
|
19
19
|
import { lint } from './commands/lint/lint.js';
|
|
@@ -57,7 +57,7 @@ program.command('create <type>').option('--outputFile <path>', 'Output filename.
|
|
|
57
57
|
program.command('dev').option('--bundleAnalyzer', 'Run bundle analyzer.').option('--config <path>', 'Custom Webpack configuration file path (ie. webpack.config.js).').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
|
|
58
58
|
'cjs',
|
|
59
59
|
'esm'
|
|
60
|
-
]).default('esm')).option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open dev server in a new browser window.').option('--outputPath <path>', 'Output path').option('--port <number>',
|
|
60
|
+
]).default('esm')).option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open dev server in a new browser window.').option('--outputPath <path>', 'Output path').option('--port <number>', `Port number for the development server (default: ${DEFAULT_DEV_PORT}).`).option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before compiling.').option('--sourcePath <path>', 'Source path').option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'development\'}").').option('--watch', 'Watch for changes.').action((cmd)=>dev(cmd, process.exit).then(()=>{}));
|
|
61
61
|
program.command('init <appName> [packageName]').option('--install', 'Install dependencies.').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
|
|
62
62
|
'npm',
|
|
63
63
|
'yarn'
|
|
@@ -76,7 +76,7 @@ program.command('publish').addOption(new Option('--bump <type>', 'Increments the
|
|
|
76
76
|
'npm',
|
|
77
77
|
'yarn'
|
|
78
78
|
]).default('npm')).option('--private', 'Publishes the module as restricted.').option('--quiet', 'No Lex notifications printed in the console.').option('--tag <tag>', 'Registers the published package with the given tag.').action((cmd)=>publish(cmd, process.exit).then(()=>{}));
|
|
79
|
-
program.command('serverless').option('--config <path>', 'Custom configuration file path (default: lex.config.mjs).').option('--host <host>', 'Host to bind the server to (default: localhost).').option('--httpPort <port>', 'HTTP server port (default:
|
|
79
|
+
program.command('serverless').option('--config <path>', 'Custom configuration file path (default: lex.config.mjs).').option('--host <host>', 'Host to bind the server to (default: localhost).').option('--httpPort <port>', 'HTTP server port (default: 3100).').option('--httpsPort <port>', 'HTTPS server port (default: 3101).').option('--wsPort <port>', 'WebSocket server port (default: 3102).').option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before starting.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <json>', 'Environment variables to set in process.env.').option('--debug', 'Enable GraphQL debug logging to see queries, variables, and operations.').option('--printOutput', 'Print GraphQL response output including status, headers, and body.').action((cmd)=>serverless(cmd, process.exit).then(()=>{}));
|
|
80
80
|
program.command('storybook').option('--config <path>', 'Custom Storybook configuration directory path (ie. .storybook).').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open Storybook in a new browser window.').option('--port <number>', 'Port number for the Storybook server.').option('--quiet', 'No Lex notifications printed in the console.').option('--static', 'Build a static Storybook site instead of starting dev server.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{STORYBOOK_THEME: \'dark\'}").').option('--verbose', 'Show detailed webpack progress output.').action((cmd)=>storybook(cmd, process.exit).then(()=>{}));
|
|
81
81
|
program.command('test [files...]').option('--analyze', 'Use AI to analyze test coverage and suggest improvements.', false).option('--debugTests', 'Use AI to debug test failures and suggest fixes.', false).option('--generate', 'Use AI to generate test cases for untested code.', false).option('--bail', 'Exit the test suite immediately upon the first failing test suite.').option('--changedFilesWithAncestor', 'Runs tests related to the current changes and the changes made in the last commit.').option('--changedSince', 'Runs tests related the changes since the provided branch.').option('--ci', 'When this option is provided, Vitest will assume it is running in a CI environment.').option('--clearCache', 'Clear Vitest cache.').option('--collectCoverageFrom <glob>', 'A glob pattern relative to matching the files that coverage info needs to be collected from.').option('--colors', 'Forces test results output highlighting even if stdout is not a TTY.').option('--config <path>', 'Custom Vitest configuration file path (ie. vitest.config.mjs).').option('--debug', 'Print debugging info about your Vitest config.').option('--detectOpenHandles', 'Attempt to collect and print open handles preventing Vitest from exiting cleanly').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').option('--env', 'The test environment used for all tests. This can point to any file or node module. Examples: happy-dom, jsdom, node or path/to/my-environment.js.').option('--errorOnDeprecated', 'Make calling deprecated APIs throw helpful error messages.').option('--expand', 'Use this flag to show full diffs and errors instead of a patch.').option('--forceExit', 'Force Vitest to exit after all tests have completed running.').option('--json', 'Prints the test results in JSON.').option('--lastCommit', 'Run all tests affected by file changes in the last commit made.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--listTests', 'Lists all tests as JSON that Vitest will run given the arguments, and exits.').option('--logHeapUsage', 'Logs the heap usage after every test.').option('--maxWorkers <num>', 'Specifies the maximum number of workers the worker-pool will spawn for running tests. ').option('--noStackTrace', 'Disables stack trace in test results output.').option('--notify', 'Activates notifications for test results.').option('--onlyChanged', 'un based on which files have changed in the current repository. ').option('--outputFile <filename>', 'Write test results to a file when the --json option is also specified.').option('--passWithNoTests', 'Allows the test suite to pass when no files are found.').option('--quiet', 'No Lex notifications printed in the console.').option('--runInBand', 'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests.').option('--setup <path>', 'Vitest setup file path.').option('--showConfig', 'Print your Vitest config and then exits.').option('--silent', 'Prevent tests from printing messages through the console.').option('--testLocationInResults', 'Adds a location field to test results.').option('--testNamePattern <regex>', 'Run only tests with a name that matches the regex. ').option('--testPathPattern <regex>', 'A regexp pattern string that is matched against all tests paths before executing the test.').option('--typescript', 'Transpile as Typescript.').option('--update', 'Update snapshots. Runs "vitest --update"').option('--useStderr', 'Divert all output to stderr.').option('--verbose', 'Display individual test results with the test suite hierarchy.').option('--watch <path>', 'Watch files for changes and rerun tests related to changed files.').option('--watchAll', 'Watch files for changes and rerun all tests when something changes.').action((files, options, cmd)=>test(options, cmd.args, files, process.exit).then(()=>{}));
|
|
82
82
|
program.command('update').option('--interactive', 'Choose which packages to update.').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
|
|
@@ -97,4 +97,4 @@ program.command('ai').option('--context', 'Include project context in the AI pro
|
|
|
97
97
|
program.command('versions').option('--json', 'Print the version as a JSON object.').action((cmd)=>versions(cmd, process.exit).then(()=>{}));
|
|
98
98
|
program.version(packageJson.version).parse(process.argv);
|
|
99
99
|
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXZ9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtwdWJsaXNofSBmcm9tICcuL2NvbW1hbmRzL3B1Ymxpc2gvcHVibGlzaC5qcyc7XG5pbXBvcnQge3NlcnZlcmxlc3N9IGZyb20gJy4vY29tbWFuZHMvc2VydmVybGVzcy9zZXJ2ZXJsZXNzLmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnRW5hYmxlIEFJIGFuYWx5c2lzIGZvciBidWlsZCBvcHRpbWl6YXRpb24gc3VnZ2VzdGlvbnMgb3IgaW52b2tlIHdlYnBhY2stYnVuZGxlLWFuYWx5emVyIHBsdWdpbi4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG4+JywgJ0J1bmRsZXIgdG8gdXNlIChcIndlYnBhY2tcIiBvciBcInN3Y1wiKS4gRGVmYXVsdDogXCJzd2NcIi4nKS5jaG9pY2VzKFsnd2VicGFjaycsICdzd2MnXSkuZGVmYXVsdCgnc3djJykpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gV2VicGFjayBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHdlYnBhY2suY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWNvbmZpZ05hbWUgPHZhbHVlLi4uPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZS4nKVxuICAub3B0aW9uKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAoQ3VycmVudGx5IGFuIGFsaWFzIGZvciBgLS1ub2RlLWVudmApJylcbiAgLm9wdGlvbignLS1kZXZ0b29sIDx2YWx1ZT4nLCAnQSBkZXZlbG9wZXIgdG9vbCB0byBlbmhhbmNlIGRlYnVnZ2luZyAoZmFsc2UgfCBldmFsIHwgW2lubGluZS18aGlkZGVuLXxldmFsLV1bbm9zb3VyY2VzLV1bY2hlYXAtW21vZHVsZS1dXXNvdXJjZS1tYXApLicpXG4gIC5vcHRpb24oJy0tZGlzYWJsZUludGVycHJldCcsICdEaXNhYmxlIGludGVycHJldCBmb3IgbG9hZGluZyB0aGUgY29uZmlnIGZpbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW50cnkgPHZhbHVlLi4uPicsICdBIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCB1cG9uIHN0YXJ0dXAuIE9ubHkgdGhlIGxhc3Qgb25lIGlzIGV4cG9ydGVkLicpXG4gIC5vcHRpb24oJy0tZW52IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIHdoZW4gaXQgaXMgYSBmdW5jdGlvbi4nKVxuICAub3B0aW9uKCctLWZhaWxPbldhcm5pbmdzJywgJ1N0b3Agd2VicGFjay1jbGkgcHJvY2VzcyB3aXRoIG5vbi16ZXJvIGV4aXQgY29kZSBvbiB3YXJuaW5ncyBmcm9tIHdlYnBhY2snLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWpzb24gPHZhbHVlPicsICdQcmludHMgcmVzdWx0IGFzIEpTT04gb3Igc3RvcmUgaXQgaW4gYSBmaWxlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbWVyZ2UnLCAnTWVyZ2UgdHdvIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgdXNpbmcgXCJ3ZWJwYWNrLW1lcmdlXCIuJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdXZWJwYWNrIG1vZGUgKFwicHJvZHVjdGlvblwiIG9yIFwiZGV2ZWxvcG1lbnRcIikuIERlZmF1bHQ6IFwiZGV2ZWxvcG1lbnRcIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpKVxuICAub3B0aW9uKCctLW5hbWUgPHZhbHVlPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uLiBVc2VkIHdoZW4gbG9hZGluZyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4nKVxuICAub3B0aW9uKCctLW5vRGV2dG9vbCcsICdOZWdhdGl2ZSBcImRldnRvb2xcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9TdGF0cycsICdOZWdhdGl2ZSBcInN0YXRzXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vVGFyZ2V0JywgJ05lZ2F0aXZlIFwidGFyZ2V0XCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vV2F0Y2gnLCAnTmVnYXRpdmUgXCJ3YXRjaFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoT3B0aW9uc1N0ZGluJywgJ05lZ2F0aXZlIFwid2F0Y2gtb3B0aW9ucy1zdGRpblwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRzIDx2YWx1ZT4nLCAnU3RhdHMgb3B0aW9ucyBvYmplY3Qgb3IgcHJlc2V0IG5hbWUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQ3JlYXRlcyBzdGF0aWMgSFRNTCBmaWxlcyB3aGVuIGJ1aWxkaW5nIGFwcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEVudmlyb25tZW50IHRvIGJ1aWxkIGZvci4gQW4gYXJyYXkgb2YgZW52aXJvbm1lbnRzIHRvIGJ1aWxkIGZvciBhbGwgb2YgdGhlbSB3aGVuIHBvc3NpYmxlLicpXG4gIC5vcHRpb24oJy0tdHJhbnNsYXRpb25zJywgJ1Byb2Nlc3MgdHJhbnNsYXRpb24gZmlsZXMgYW5kIG91dHB1dCBmbGF0dGVuZWQgSlNPTi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicsIGZhbHNlKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ3Byb2R1Y3Rpb25cXCd9XCIpLicpXG4gIC5vcHRpb24oJy0td2F0Y2gnLCAnV2F0Y2ggZm9yIGNoYW5nZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0td2F0Y2hPcHRpb25zU3RkaW4nLCAnU3RvcCB3YXRjaGluZyB3aGVuIHN0ZGluIHN0cmVhbSBoYXMgZW5kZWQuJywgZmFsc2UpXG4gIC5hY3Rpb24oKGNtZCkgPT4gYnVpbGQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjbGVhbicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNuYXBzaG90cycsICdSZW1vdmUgYWxsIFwiX19zbmFwc2hvdHNfX1wiIGRpcmVjdG9yaWVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY2xlYW4oY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjb25maWcgPHR5cGU+JylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tanNvbiA8cGF0aD4nLCAnU2F2ZSBvdXRwdXQgdG8ganNvbiBmaWxlLicpXG4gIC5hY3Rpb24oKHR5cGUsIGNtZCkgPT4gY29uZmlnKHR5cGUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29tcGlsZScpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdUcmFuc3BpbGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gdHNjb25maWcuanNvbikuJylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8bj4nLCAnVGFyZ2V0IGVudmlyb25tZW50LiBcIm5vZGVcIiBvciBcIndlYlwiLiBEZWZhdWx0OiBcIm5vZGVcIi4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoZXMgZm9yIGNoYW5nZXMgYW5kIGNvbXBpbGVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY29tcGlsZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NyZWF0ZSA8dHlwZT4nKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ091dHB1dCBmaWxlbmFtZS4nKVxuICAub3B0aW9uKCctLW91dHB1dE5hbWUgPG4+JywgJ091dHB1dCBuYW1lLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnQ3JlYXRlIFR5cGVzY3JpcHQgdmVyc2lvbi4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNyZWF0ZSh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2RldicpXG4gIC5vcHRpb24oJy0tYnVuZGxlQW5hbHl6ZXInLCAnUnVuIGJ1bmRsZSBhbmFseXplci4nKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gZGV2IHNlcnZlciBpbiBhIG5ldyBicm93c2VyIHdpbmRvdy4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHBhdGg+JywgJ091dHB1dCBwYXRoJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgJ1BvcnQgbnVtYmVyIGZvciB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIChkZWZhdWx0OiAzMDAwKS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXVzZVB1YmxpY0lwJywgJ0ZvcmNlIHJlZnJlc2ggdGhlIGNhY2hlZCBwdWJsaWMgSVAgYWRkcmVzcy4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ2RldmVsb3BtZW50XFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gZGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnaW5pdCA8YXBwTmFtZT4gW3BhY2thZ2VOYW1lXScpXG4gIC5vcHRpb24oJy0taW5zdGFsbCcsICdJbnN0YWxsIGRlcGVuZGVuY2llcy4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVXNlIGEgVHlwZXNjcmlwdCBiYXNlZCBhcHAuJylcbiAgLmFjdGlvbigoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCkgPT4gaW5pdChhcHBOYW1lLCBwYWNrYWdlTmFtZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW5rZWQnKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW5rZWQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW50JylcbiAgLm9wdGlvbignLS1jYWNoZScsICdPbmx5IGNoZWNrIGNoYW5nZWQgZmlsZXMuIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNhY2hlTG9jYXRpb24gPHBhdGg+JywgJ1BhdGggdG8gdGhlIGNhY2hlIGZpbGUgb3IgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tY29sb3InLCAnRm9yY2UgZW5hYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdVc2UgdGhpcyBjb25maWd1cmF0aW9uLCBvdmVycmlkaW5nIC5lc2xpbnRyYy4qIGNvbmZpZyBvcHRpb25zIGlmIHByZXNlbnQuIElmIG5vdCBzcGVjaWZpZWQgYW5kIG5vIGxvY2FsIGNvbmZpZyBleGlzdHMsIExleCB3aWxsIHVzZSBpdHMgZGVmYXVsdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdPdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudkluZm8nLCAnT3V0cHV0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW52IDxuPicsICdTcGVjaWZ5IGVudmlyb25tZW50cy4nKVxuICAub3B0aW9uKCctLWZpeCcsICdBcHBseSBBSSBmaXhlcyBhZnRlciBidWlsdC1pbiBFU0xpbnQgZml4ZXMgKHNhbWUgYXMgLS1maXgpLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeERyeVJ1bicsICdBdXRvbWF0aWNhbGx5IGZpeCBwcm9ibGVtcyB3aXRob3V0IHNhdmluZyB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZSBzeXN0ZW0uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZml4VHlwZSA8dHlwZT4nLCAnU3BlY2lmeSB0aGUgdHlwZXMgb2YgZml4ZXMgdG8gYXBwbHkgKHByb2JsZW0sIHN1Z2dlc3Rpb24sIGxheW91dCkuJylcbiAgLm9wdGlvbignLS1mb3JtYXQgPG4+JywgJ1VzZSBhIHNwZWNpZmljIG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IHN0eWxpc2guJylcbiAgLm9wdGlvbignLS1nbG9iYWwgPHZhcmlhYmxlcz4nLCAnRGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXRoIDxwYXRoPicsICdTcGVjaWZ5IHBhdGggb2YgaWdub3JlIGZpbGUuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXR0ZXJuIDxwYXR0ZXJuPicsICdQYXR0ZXJuIG9mIGZpbGVzIHRvIGlnbm9yZSAoaW4gYWRkaXRpb24gdG8gdGhvc2UgaW4gLmVzbGludGlnbm9yZSkuJylcbiAgLm9wdGlvbignLS1pbml0JywgJ1J1biBjb25maWcgaW5pdGlhbGl6YXRpb24gd2l6YXJkLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1tYXhXYXJuaW5ncyA8bnVtPicsICdOdW1iZXIgb2Ygd2FybmluZ3MgdG8gdHJpZ2dlciBub256ZXJvIGV4aXQgY29kZS4gRGVmYXVsdDogLTEuJylcbiAgLm9wdGlvbignLS1ub0NvbG9yJywgJ0ZvcmNlIGRpc2FibGluZyBvZiBjb2xvci4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0VzbGludHJjJywgJ0Rpc2FibGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJvbSAuZXNsaW50cmMuKi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lnbm9yZScsICdEaXNhYmxlIHVzZSBvZiBpZ25vcmUgZmlsZXMgYW5kIHBhdHRlcm5zLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vSW5saW5lQ29uZmlnJywgJ1ByZXZlbnQgY29tbWVudHMgZnJvbSBjaGFuZ2luZyBjb25maWcgb3IgcnVsZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnU3BlY2lmeSBmaWxlIHRvIHdyaXRlIHJlcG9ydCB0by4nKVxuICAub3B0aW9uKCctLXBhcnNlciA8bj4nLCAnU3BlY2lmeSB0aGUgcGFyc2VyIHRvIGJlIHVzZWQuJylcbiAgLm9wdGlvbignLS1wYXJzZXJPcHRpb25zIDxvcHRpb25zPicsICdTcGVjaWZ5IHBhcnNlciBvcHRpb25zLicpXG4gIC5vcHRpb24oJy0tcGx1Z2luIDxwbHVnaW5zPicsICdTcGVjaWZ5IHBsdWdpbnMuJylcbiAgLm9wdGlvbignLS1wcmludENvbmZpZyA8cGF0aD4nLCAnUHJpbnQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnaXZlbiBmaWxlLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZW1vdmUtY29tbWVudHMnLCAnUmVtb3ZlIGFsbCBjb21tZW50cyBleGNlcHQgVE9ET3MgYW5kIGNvcHlyaWdodCBub3RpY2VzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzJywgJ0FkZHMgcmVwb3J0ZWQgZXJyb3JzIGZvciB1bnVzZWQgZXNsaW50LWRpc2FibGUgZGlyZWN0aXZlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXNvbHZlUGx1Z2luc1JlbGF0aXZlVG8gPHBhdGg+JywgJ0EgZm9sZGVyIHdoZXJlIHBsdWdpbnMgc2hvdWxkIGJlIHJlc29sdmVkIGZyb20uJylcbiAgLm9wdGlvbignLS1ydWxlIDxwYXRoPicsICdTcGVjaWZ5IHJ1bGVzLicpXG4gIC5vcHRpb24oJy0tcnVsZXNkaXIgPHBhdGg+JywgJ1VzZSBhZGRpdGlvbmFsIHJ1bGVzIGZyb20gdGhpcyBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1zdGRpbicsICdMaW50IGNvZGUgcHJvdmlkZWQgb24gPFNURElOPiAtIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXN0ZGluRmlsZW5hbWUgPG4+JywgJ1NwZWNpZnkgZmlsZW5hbWUgdG8gcHJvY2VzcyBTVERJTiBhcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGxpbnQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdtaWdyYXRlJylcbiAgLm9wdGlvbignLXEsIC0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IG1pZ3JhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdwdWJsaXNoJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bXAgPHR5cGU+JywgJ0luY3JlbWVudHMgdGhlIHZlcnNpb24uIFR5cGVzIGluY2x1ZGU6IG1ham9yLCBtaW5vciwgcGF0Y2gsIGJldGEsIGFscGhhLCByYy4gRGVmYXVsdDogXCJwYXRjaFwiLicpLmNob2ljZXMoWydtYWpvcicsICdtaW5vcicsICdwYXRjaCcsICdiZXRhJywgJ2FscGhhJywgJ3JjJ10pLmRlZmF1bHQoJ3BhdGNoJykpXG4gIC5vcHRpb24oJy0tbmV3VmVyc2lvbiA8dmVyc2lvbk51bWJlcj4nLCAnUHVibGlzaCBhcyBhIHNwZWNpZmljIHZlcnNpb24uJylcbiAgLm9wdGlvbignLS1vdHAgPGNvZGU+JywgJ1Byb3ZpZGUgYSB0d28tZmFjdG9yIGNvZGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXByaXZhdGUnLCAnUHVibGlzaGVzIHRoZSBtb2R1bGUgYXMgcmVzdHJpY3RlZC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10YWcgPHRhZz4nLCAnUmVnaXN0ZXJzIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiB0YWcuJylcbiAgLmFjdGlvbigoY21kKSA9PiBwdWJsaXNoKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc2VydmVybGVzcycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGRlZmF1bHQ6IGxleC5jb25maWcubWpzKS4nKVxuICAub3B0aW9uKCctLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvIChkZWZhdWx0OiBsb2NhbGhvc3QpLicpXG4gIC5vcHRpb24oJy0taHR0cFBvcnQgPHBvcnQ+JywgJ0hUVFAgc2VydmVyIHBvcnQgKGRlZmF1bHQ6IDMwMDApLicpXG4gIC5vcHRpb24oJy0taHR0cHNQb3J0IDxwb3J0PicsICdIVFRQUyBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzAwMSkuJylcbiAgLm9wdGlvbignLS13c1BvcnQgPHBvcnQ+JywgJ1dlYlNvY2tldCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzAwMikuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHN0YXJ0aW5nLicpXG4gIC5vcHRpb24oJy0tdXNlUHVibGljSXAnLCAnRm9yY2UgcmVmcmVzaCB0aGUgY2FjaGVkIHB1YmxpYyBJUCBhZGRyZXNzLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxqc29uPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHByb2Nlc3MuZW52LicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIEdyYXBoUUwgZGVidWcgbG9nZ2luZyB0byBzZWUgcXVlcmllcywgdmFyaWFibGVzLCBhbmQgb3BlcmF0aW9ucy4nKVxuICAub3B0aW9uKCctLXByaW50T3V0cHV0JywgJ1ByaW50IEdyYXBoUUwgcmVzcG9uc2Ugb3V0cHV0IGluY2x1ZGluZyBzdGF0dXMsIGhlYWRlcnMsIGFuZCBib2R5LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzcyhjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3N0b3J5Ym9vaycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHBhdGggKGllLiAuc3Rvcnlib29rKS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gU3Rvcnlib29rIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LicpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsICdQb3J0IG51bWJlciBmb3IgdGhlIFN0b3J5Ym9vayBzZXJ2ZXIuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc3RhdGljJywgJ0J1aWxkIGEgc3RhdGljIFN0b3J5Ym9vayBzaXRlIGluc3RlYWQgb2Ygc3RhcnRpbmcgZGV2IHNlcnZlci4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7U1RPUllCT09LX1RIRU1FOiBcXCdkYXJrXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCB3ZWJwYWNrIHByb2dyZXNzIG91dHB1dC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHN0b3J5Ym9vayhjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3Rlc3QgW2ZpbGVzLi4uXScpXG4gIC5vcHRpb24oJy0tYW5hbHl6ZScsICdVc2UgQUkgdG8gYW5hbHl6ZSB0ZXN0IGNvdmVyYWdlIGFuZCBzdWdnZXN0IGltcHJvdmVtZW50cy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1kZWJ1Z1Rlc3RzJywgJ1VzZSBBSSB0byBkZWJ1ZyB0ZXN0IGZhaWx1cmVzIGFuZCBzdWdnZXN0IGZpeGVzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWdlbmVyYXRlJywgJ1VzZSBBSSB0byBnZW5lcmF0ZSB0ZXN0IGNhc2VzIGZvciB1bnRlc3RlZCBjb2RlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWJhaWwnLCAnRXhpdCB0aGUgdGVzdCBzdWl0ZSBpbW1lZGlhdGVseSB1cG9uIHRoZSBmaXJzdCBmYWlsaW5nIHRlc3Qgc3VpdGUuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkRmlsZXNXaXRoQW5jZXN0b3InLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IGNoYW5nZXMgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGxhc3QgY29tbWl0LicpXG4gIC5vcHRpb24oJy0tY2hhbmdlZFNpbmNlJywgJ1J1bnMgdGVzdHMgcmVsYXRlZCB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJvdmlkZWQgYnJhbmNoLicpXG4gIC5vcHRpb24oJy0tY2knLCAnV2hlbiB0aGlzIG9wdGlvbiBpcyBwcm92aWRlZCwgVml0ZXN0IHdpbGwgYXNzdW1lIGl0IGlzIHJ1bm5pbmcgaW4gYSBDSSBlbnZpcm9ubWVudC4nKVxuICAub3B0aW9uKCctLWNsZWFyQ2FjaGUnLCAnQ2xlYXIgVml0ZXN0IGNhY2hlLicpXG4gIC5vcHRpb24oJy0tY29sbGVjdENvdmVyYWdlRnJvbSA8Z2xvYj4nLCAnQSBnbG9iIHBhdHRlcm4gcmVsYXRpdmUgdG8gbWF0Y2hpbmcgdGhlIGZpbGVzIHRoYXQgY292ZXJhZ2UgaW5mbyBuZWVkcyB0byBiZSBjb2xsZWN0ZWQgZnJvbS4nKVxuICAub3B0aW9uKCctLWNvbG9ycycsICdGb3JjZXMgdGVzdCByZXN1bHRzIG91dHB1dCBoaWdobGlnaHRpbmcgZXZlbiBpZiBzdGRvdXQgaXMgbm90IGEgVFRZLicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gVml0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gdml0ZXN0LmNvbmZpZy5tanMpLicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnUHJpbnQgZGVidWdnaW5nIGluZm8gYWJvdXQgeW91ciBWaXRlc3QgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGV0ZWN0T3BlbkhhbmRsZXMnLCAnQXR0ZW1wdCB0byBjb2xsZWN0IGFuZCBwcmludCBvcGVuIGhhbmRsZXMgcHJldmVudGluZyBWaXRlc3QgZnJvbSBleGl0aW5nIGNsZWFubHknKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11cGRhdGUnLCAnVXBkYXRlIHNuYXBzaG90cy4gUnVucyBcInZpdGVzdCAtLXVwZGF0ZVwiJylcbiAgLm9wdGlvbignLS11c2VTdGRlcnInLCAnRGl2ZXJ0IGFsbCBvdXRwdXQgdG8gc3RkZXJyLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdEaXNwbGF5IGluZGl2aWR1YWwgdGVzdCByZXN1bHRzIHdpdGggdGhlIHRlc3Qgc3VpdGUgaGllcmFyY2h5LicpXG4gIC5vcHRpb24oJy0td2F0Y2ggPHBhdGg+JywgJ1dhdGNoIGZpbGVzIGZvciBjaGFuZ2VzIGFuZCByZXJ1biB0ZXN0cyByZWxhdGVkIHRvIGNoYW5nZWQgZmlsZXMuJylcbiAgLm9wdGlvbignLS13YXRjaEFsbCcsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gYWxsIHRlc3RzIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuJylcbiAgLmFjdGlvbigoZmlsZXMsIG9wdGlvbnMsIGNtZCkgPT4gdGVzdChvcHRpb25zLCBjbWQuYXJncywgZmlsZXMsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5vcHRpb24oJy0taW50ZXJhY3RpdmUnLCAnQ2hvb3NlIHdoaWNoIHBhY2thZ2VzIHRvIHVwZGF0ZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJlZ2lzdHJ5JywgJ0FkZCBhIGN1c3RvbSByZWdpc3RyeSB1cmwuJylcbiAgLmFjdGlvbigoY21kKSA9PiB1cGRhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGdyYWRlJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiB1cGdyYWRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnYWknKVxuICAub3B0aW9uKCctLWNvbnRleHQnLCAnSW5jbHVkZSBwcm9qZWN0IGNvbnRleHQgaW4gdGhlIEFJIHByb21wdC4nLCB0cnVlKVxuICAub3B0aW9uKCctLWZpbGUgPHBhdGg+JywgJ1NwZWNpZmljIGZpbGUgdG8gb3BlcmF0ZSBvbi4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbW9kZWwgPG1vZGVsPicsICdBSSBtb2RlbCB0byB1c2UuIERlZmF1bHQ6IGdwdC00by4nKVxuICAub3B0aW9uKCctLXByb21wdCA8dGV4dD4nLCAnVGhlIHByb21wdCB0byBzZW5kIHRvIHRoZSBBSS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1R5cGUgb2YgQUkgdGFzayB0byBwZXJmb3JtLicpLmNob2ljZXMoWydnZW5lcmF0ZScsICdleHBsYWluJywgJ3Rlc3QnLCAnb3B0aW1pemUnLCAnaGVscCddKS5kZWZhdWx0KCdoZWxwJykpXG4gIC5hY3Rpb24oKGNtZCkgPT4gYWlGdW5jdGlvbihjbWQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd2ZXJzaW9ucycpXG4gIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgdmVyc2lvbiBhcyBhIEpTT04gb2JqZWN0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdmVyc2lvbnMoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbVxuICAudmVyc2lvbihwYWNrYWdlSnNvbi52ZXJzaW9uKVxuICAucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdLCJuYW1lcyI6WyJPcHRpb24iLCJwcm9ncmFtIiwicmVhZEZpbGVTeW5jIiwiY3JlYXRlUmVxdWlyZSIsImRpcm5hbWUiLCJyZXNvbHZlIiwiZmlsZVVSTFRvUGF0aCIsImFpRnVuY3Rpb24iLCJidWlsZCIsImNsZWFuIiwiY29tcGlsZSIsImNvbmZpZyIsImNyZWF0ZSIsImRldiIsImluaXQiLCJsaW5rZWQiLCJsaW50IiwibWlncmF0ZSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzIiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsImFwcE5hbWUiLCJwYWNrYWdlTmFtZSIsImZpbGVzIiwib3B0aW9ucyIsImFyZ3MiLCJ2ZXJzaW9uIiwiYXJndiJdLCJtYXBwaW5ncyI6IjtBQUNBOzs7Q0FHQyxHQUNELFNBQVFBLE1BQU0sRUFBRUMsT0FBTyxRQUFPLFlBQVk7QUFDMUMsU0FBUUMsWUFBWSxRQUFPLEtBQUs7QUFDaEMsU0FBUUMsYUFBYSxRQUFPLFNBQVM7QUFDckMsU0FBUUMsT0FBTyxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxhQUFhLFFBQU8sTUFBTTtBQUVsQyxTQUFRQyxVQUFVLFFBQU8sc0JBQXNCO0FBQy9DLFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxPQUFPLFFBQU8sZ0NBQWdDO0FBQ3RELFNBQVFDLE1BQU0sUUFBTyw4QkFBOEI7QUFDbkQsU0FBUUMsTUFBTSxRQUFPLDhCQUE4QjtBQUNuRCxTQUFRQyxHQUFHLFFBQU8sd0JBQXdCO0FBQzFDLFNBQVFDLElBQUksUUFBTywwQkFBMEI7QUFDN0MsU0FBUUMsTUFBTSxRQUFPLDBCQUEwQjtBQUMvQyxTQUFRQyxJQUFJLFFBQU8sMEJBQTBCO0FBQzdDLFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsT0FBTyxRQUFPLGdDQUFnQztBQUN0RCxTQUFRQyxVQUFVLFFBQU8sc0NBQXNDO0FBQy9ELFNBQVFDLFNBQVMsUUFBTyxvQ0FB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
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtwdWJsaXNofSBmcm9tICcuL2NvbW1hbmRzL3B1Ymxpc2gvcHVibGlzaC5qcyc7XG5pbXBvcnQge3NlcnZlcmxlc3N9IGZyb20gJy4vY29tbWFuZHMvc2VydmVybGVzcy9zZXJ2ZXJsZXNzLmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnRW5hYmxlIEFJIGFuYWx5c2lzIGZvciBidWlsZCBvcHRpbWl6YXRpb24gc3VnZ2VzdGlvbnMgb3IgaW52b2tlIHdlYnBhY2stYnVuZGxlLWFuYWx5emVyIHBsdWdpbi4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG4+JywgJ0J1bmRsZXIgdG8gdXNlIChcIndlYnBhY2tcIiBvciBcInN3Y1wiKS4gRGVmYXVsdDogXCJzd2NcIi4nKS5jaG9pY2VzKFsnd2VicGFjaycsICdzd2MnXSkuZGVmYXVsdCgnc3djJykpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gV2VicGFjayBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHdlYnBhY2suY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWNvbmZpZ05hbWUgPHZhbHVlLi4uPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZS4nKVxuICAub3B0aW9uKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAoQ3VycmVudGx5IGFuIGFsaWFzIGZvciBgLS1ub2RlLWVudmApJylcbiAgLm9wdGlvbignLS1kZXZ0b29sIDx2YWx1ZT4nLCAnQSBkZXZlbG9wZXIgdG9vbCB0byBlbmhhbmNlIGRlYnVnZ2luZyAoZmFsc2UgfCBldmFsIHwgW2lubGluZS18aGlkZGVuLXxldmFsLV1bbm9zb3VyY2VzLV1bY2hlYXAtW21vZHVsZS1dXXNvdXJjZS1tYXApLicpXG4gIC5vcHRpb24oJy0tZGlzYWJsZUludGVycHJldCcsICdEaXNhYmxlIGludGVycHJldCBmb3IgbG9hZGluZyB0aGUgY29uZmlnIGZpbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW50cnkgPHZhbHVlLi4uPicsICdBIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCB1cG9uIHN0YXJ0dXAuIE9ubHkgdGhlIGxhc3Qgb25lIGlzIGV4cG9ydGVkLicpXG4gIC5vcHRpb24oJy0tZW52IDx2YWx1ZT4nLCAnRW52aXJvbm1lbnQgcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIHdoZW4gaXQgaXMgYSBmdW5jdGlvbi4nKVxuICAub3B0aW9uKCctLWZhaWxPbldhcm5pbmdzJywgJ1N0b3Agd2VicGFjay1jbGkgcHJvY2VzcyB3aXRoIG5vbi16ZXJvIGV4aXQgY29kZSBvbiB3YXJuaW5ncyBmcm9tIHdlYnBhY2snLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWpzb24gPHZhbHVlPicsICdQcmludHMgcmVzdWx0IGFzIEpTT04gb3Igc3RvcmUgaXQgaW4gYSBmaWxlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbWVyZ2UnLCAnTWVyZ2UgdHdvIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgdXNpbmcgXCJ3ZWJwYWNrLW1lcmdlXCIuJywgZmFsc2UpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdXZWJwYWNrIG1vZGUgKFwicHJvZHVjdGlvblwiIG9yIFwiZGV2ZWxvcG1lbnRcIikuIERlZmF1bHQ6IFwiZGV2ZWxvcG1lbnRcIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpKVxuICAub3B0aW9uKCctLW5hbWUgPHZhbHVlPicsICdOYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uLiBVc2VkIHdoZW4gbG9hZGluZyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucy4nKVxuICAub3B0aW9uKCctLW5vRGV2dG9vbCcsICdOZWdhdGl2ZSBcImRldnRvb2xcIiBvcHRpb24uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9TdGF0cycsICdOZWdhdGl2ZSBcInN0YXRzXCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vVGFyZ2V0JywgJ05lZ2F0aXZlIFwidGFyZ2V0XCIgb3B0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vV2F0Y2gnLCAnTmVnYXRpdmUgXCJ3YXRjaFwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub1dhdGNoT3B0aW9uc1N0ZGluJywgJ05lZ2F0aXZlIFwid2F0Y2gtb3B0aW9ucy1zdGRpblwiIG9wdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub2RlRW52IDx2YWx1ZT4nLCAnU2V0cyBwcm9jZXNzLmVudi5OT0RFX0VOViB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRzIDx2YWx1ZT4nLCAnU3RhdHMgb3B0aW9ucyBvYmplY3Qgb3IgcHJlc2V0IG5hbWUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQ3JlYXRlcyBzdGF0aWMgSFRNTCBmaWxlcyB3aGVuIGJ1aWxkaW5nIGFwcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdFbnZpcm9ubWVudCB0byBidWlsZCBmb3IuIEVudmlyb25tZW50IHRvIGJ1aWxkIGZvci4gQW4gYXJyYXkgb2YgZW52aXJvbm1lbnRzIHRvIGJ1aWxkIGZvciBhbGwgb2YgdGhlbSB3aGVuIHBvc3NpYmxlLicpXG4gIC5vcHRpb24oJy0tdHJhbnNsYXRpb25zJywgJ1Byb2Nlc3MgdHJhbnNsYXRpb24gZmlsZXMgYW5kIG91dHB1dCBmbGF0dGVuZWQgSlNPTi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicsIGZhbHNlKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ3Byb2R1Y3Rpb25cXCd9XCIpLicpXG4gIC5vcHRpb24oJy0td2F0Y2gnLCAnV2F0Y2ggZm9yIGNoYW5nZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0td2F0Y2hPcHRpb25zU3RkaW4nLCAnU3RvcCB3YXRjaGluZyB3aGVuIHN0ZGluIHN0cmVhbSBoYXMgZW5kZWQuJywgZmFsc2UpXG4gIC5hY3Rpb24oKGNtZCkgPT4gYnVpbGQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjbGVhbicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNuYXBzaG90cycsICdSZW1vdmUgYWxsIFwiX19zbmFwc2hvdHNfX1wiIGRpcmVjdG9yaWVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY2xlYW4oY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjb25maWcgPHR5cGU+JylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tanNvbiA8cGF0aD4nLCAnU2F2ZSBvdXRwdXQgdG8ganNvbiBmaWxlLicpXG4gIC5hY3Rpb24oKHR5cGUsIGNtZCkgPT4gY29uZmlnKHR5cGUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29tcGlsZScpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdUcmFuc3BpbGVyIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gdHNjb25maWcuanNvbikuJylcbiAgLm9wdGlvbignLS1lbnZpcm9ubWVudCA8bj4nLCAnVGFyZ2V0IGVudmlyb25tZW50LiBcIm5vZGVcIiBvciBcIndlYlwiLiBEZWZhdWx0OiBcIm5vZGVcIi4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1RyYW5zcGlsZSBhcyBUeXBlc2NyaXB0LicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoZXMgZm9yIGNoYW5nZXMgYW5kIGNvbXBpbGVzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gY29tcGlsZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NyZWF0ZSA8dHlwZT4nKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ091dHB1dCBmaWxlbmFtZS4nKVxuICAub3B0aW9uKCctLW91dHB1dE5hbWUgPG4+JywgJ091dHB1dCBuYW1lLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnQ3JlYXRlIFR5cGVzY3JpcHQgdmVyc2lvbi4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNyZWF0ZSh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2RldicpXG4gIC5vcHRpb24oJy0tYnVuZGxlQW5hbHl6ZXInLCAnUnVuIGJ1bmRsZSBhbmFseXplci4nKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIFdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB3ZWJwYWNrLmNvbmZpZy5qcykuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gZGV2IHNlcnZlciBpbiBhIG5ldyBicm93c2VyIHdpbmRvdy4nKVxuICAub3B0aW9uKCctLW91dHB1dFBhdGggPHBhdGg+JywgJ091dHB1dCBwYXRoJylcbiAgLm9wdGlvbignLS1wb3J0IDxudW1iZXI+JywgYFBvcnQgbnVtYmVyIGZvciB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIChkZWZhdWx0OiAke0RFRkFVTFRfREVWX1BPUlR9KS5gKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZW1vdmUnLCAnUmVtb3ZlcyBhbGwgZmlsZXMgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgY29tcGlsaW5nLicpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXVzZVB1YmxpY0lwJywgJ0ZvcmNlIHJlZnJlc2ggdGhlIGNhY2hlZCBwdWJsaWMgSVAgYWRkcmVzcy4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7Tk9ERV9FTlY6IFxcJ2RldmVsb3BtZW50XFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gZGV2KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnaW5pdCA8YXBwTmFtZT4gW3BhY2thZ2VOYW1lXScpXG4gIC5vcHRpb24oJy0taW5zdGFsbCcsICdJbnN0YWxsIGRlcGVuZGVuY2llcy4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVXNlIGEgVHlwZXNjcmlwdCBiYXNlZCBhcHAuJylcbiAgLmFjdGlvbigoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCkgPT4gaW5pdChhcHBOYW1lLCBwYWNrYWdlTmFtZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW5rZWQnKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW5rZWQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdsaW50JylcbiAgLm9wdGlvbignLS1jYWNoZScsICdPbmx5IGNoZWNrIGNoYW5nZWQgZmlsZXMuIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNhY2hlTG9jYXRpb24gPHBhdGg+JywgJ1BhdGggdG8gdGhlIGNhY2hlIGZpbGUgb3IgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tY29sb3InLCAnRm9yY2UgZW5hYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdVc2UgdGhpcyBjb25maWd1cmF0aW9uLCBvdmVycmlkaW5nIC5lc2xpbnRyYy4qIGNvbmZpZyBvcHRpb25zIGlmIHByZXNlbnQuIElmIG5vdCBzcGVjaWZpZWQgYW5kIG5vIGxvY2FsIGNvbmZpZyBleGlzdHMsIExleCB3aWxsIHVzZSBpdHMgZGVmYXVsdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdPdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudkluZm8nLCAnT3V0cHV0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZW52IDxuPicsICdTcGVjaWZ5IGVudmlyb25tZW50cy4nKVxuICAub3B0aW9uKCctLWZpeCcsICdBcHBseSBBSSBmaXhlcyBhZnRlciBidWlsdC1pbiBFU0xpbnQgZml4ZXMgKHNhbWUgYXMgLS1maXgpLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeERyeVJ1bicsICdBdXRvbWF0aWNhbGx5IGZpeCBwcm9ibGVtcyB3aXRob3V0IHNhdmluZyB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZSBzeXN0ZW0uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZml4VHlwZSA8dHlwZT4nLCAnU3BlY2lmeSB0aGUgdHlwZXMgb2YgZml4ZXMgdG8gYXBwbHkgKHByb2JsZW0sIHN1Z2dlc3Rpb24sIGxheW91dCkuJylcbiAgLm9wdGlvbignLS1mb3JtYXQgPG4+JywgJ1VzZSBhIHNwZWNpZmljIG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IHN0eWxpc2guJylcbiAgLm9wdGlvbignLS1nbG9iYWwgPHZhcmlhYmxlcz4nLCAnRGVmaW5lIGdsb2JhbCB2YXJpYWJsZXMuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXRoIDxwYXRoPicsICdTcGVjaWZ5IHBhdGggb2YgaWdub3JlIGZpbGUuJylcbiAgLm9wdGlvbignLS1pZ25vcmVQYXR0ZXJuIDxwYXR0ZXJuPicsICdQYXR0ZXJuIG9mIGZpbGVzIHRvIGlnbm9yZSAoaW4gYWRkaXRpb24gdG8gdGhvc2UgaW4gLmVzbGludGlnbm9yZSkuJylcbiAgLm9wdGlvbignLS1pbml0JywgJ1J1biBjb25maWcgaW5pdGlhbGl6YXRpb24gd2l6YXJkLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1tYXhXYXJuaW5ncyA8bnVtPicsICdOdW1iZXIgb2Ygd2FybmluZ3MgdG8gdHJpZ2dlciBub256ZXJvIGV4aXQgY29kZS4gRGVmYXVsdDogLTEuJylcbiAgLm9wdGlvbignLS1ub0NvbG9yJywgJ0ZvcmNlIGRpc2FibGluZyBvZiBjb2xvci4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0VzbGludHJjJywgJ0Rpc2FibGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJvbSAuZXNsaW50cmMuKi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lnbm9yZScsICdEaXNhYmxlIHVzZSBvZiBpZ25vcmUgZmlsZXMgYW5kIHBhdHRlcm5zLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vSW5saW5lQ29uZmlnJywgJ1ByZXZlbnQgY29tbWVudHMgZnJvbSBjaGFuZ2luZyBjb25maWcgb3IgcnVsZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnU3BlY2lmeSBmaWxlIHRvIHdyaXRlIHJlcG9ydCB0by4nKVxuICAub3B0aW9uKCctLXBhcnNlciA8bj4nLCAnU3BlY2lmeSB0aGUgcGFyc2VyIHRvIGJlIHVzZWQuJylcbiAgLm9wdGlvbignLS1wYXJzZXJPcHRpb25zIDxvcHRpb25zPicsICdTcGVjaWZ5IHBhcnNlciBvcHRpb25zLicpXG4gIC5vcHRpb24oJy0tcGx1Z2luIDxwbHVnaW5zPicsICdTcGVjaWZ5IHBsdWdpbnMuJylcbiAgLm9wdGlvbignLS1wcmludENvbmZpZyA8cGF0aD4nLCAnUHJpbnQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnaXZlbiBmaWxlLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZW1vdmUtY29tbWVudHMnLCAnUmVtb3ZlIGFsbCBjb21tZW50cyBleGNlcHQgVE9ET3MgYW5kIGNvcHlyaWdodCBub3RpY2VzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzJywgJ0FkZHMgcmVwb3J0ZWQgZXJyb3JzIGZvciB1bnVzZWQgZXNsaW50LWRpc2FibGUgZGlyZWN0aXZlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXNvbHZlUGx1Z2luc1JlbGF0aXZlVG8gPHBhdGg+JywgJ0EgZm9sZGVyIHdoZXJlIHBsdWdpbnMgc2hvdWxkIGJlIHJlc29sdmVkIGZyb20uJylcbiAgLm9wdGlvbignLS1ydWxlIDxwYXRoPicsICdTcGVjaWZ5IHJ1bGVzLicpXG4gIC5vcHRpb24oJy0tcnVsZXNkaXIgPHBhdGg+JywgJ1VzZSBhZGRpdGlvbmFsIHJ1bGVzIGZyb20gdGhpcyBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1zdGRpbicsICdMaW50IGNvZGUgcHJvdmlkZWQgb24gPFNURElOPiAtIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXN0ZGluRmlsZW5hbWUgPG4+JywgJ1NwZWNpZnkgZmlsZW5hbWUgdG8gcHJvY2VzcyBTVERJTiBhcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGxpbnQoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdtaWdyYXRlJylcbiAgLm9wdGlvbignLXEsIC0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAuYWN0aW9uKChjbWQpID0+IG1pZ3JhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdwdWJsaXNoJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bXAgPHR5cGU+JywgJ0luY3JlbWVudHMgdGhlIHZlcnNpb24uIFR5cGVzIGluY2x1ZGU6IG1ham9yLCBtaW5vciwgcGF0Y2gsIGJldGEsIGFscGhhLCByYy4gRGVmYXVsdDogXCJwYXRjaFwiLicpLmNob2ljZXMoWydtYWpvcicsICdtaW5vcicsICdwYXRjaCcsICdiZXRhJywgJ2FscGhhJywgJ3JjJ10pLmRlZmF1bHQoJ3BhdGNoJykpXG4gIC5vcHRpb24oJy0tbmV3VmVyc2lvbiA8dmVyc2lvbk51bWJlcj4nLCAnUHVibGlzaCBhcyBhIHNwZWNpZmljIHZlcnNpb24uJylcbiAgLm9wdGlvbignLS1vdHAgPGNvZGU+JywgJ1Byb3ZpZGUgYSB0d28tZmFjdG9yIGNvZGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXByaXZhdGUnLCAnUHVibGlzaGVzIHRoZSBtb2R1bGUgYXMgcmVzdHJpY3RlZC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10YWcgPHRhZz4nLCAnUmVnaXN0ZXJzIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiB0YWcuJylcbiAgLmFjdGlvbigoY21kKSA9PiBwdWJsaXNoKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc2VydmVybGVzcycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGRlZmF1bHQ6IGxleC5jb25maWcubWpzKS4nKVxuICAub3B0aW9uKCctLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvIChkZWZhdWx0OiBsb2NhbGhvc3QpLicpXG4gIC5vcHRpb24oJy0taHR0cFBvcnQgPHBvcnQ+JywgJ0hUVFAgc2VydmVyIHBvcnQgKGRlZmF1bHQ6IDMxMDApLicpXG4gIC5vcHRpb24oJy0taHR0cHNQb3J0IDxwb3J0PicsICdIVFRQUyBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMSkuJylcbiAgLm9wdGlvbignLS13c1BvcnQgPHBvcnQ+JywgJ1dlYlNvY2tldCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMikuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHN0YXJ0aW5nLicpXG4gIC5vcHRpb24oJy0tdXNlUHVibGljSXAnLCAnRm9yY2UgcmVmcmVzaCB0aGUgY2FjaGVkIHB1YmxpYyBJUCBhZGRyZXNzLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxqc29uPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHByb2Nlc3MuZW52LicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIEdyYXBoUUwgZGVidWcgbG9nZ2luZyB0byBzZWUgcXVlcmllcywgdmFyaWFibGVzLCBhbmQgb3BlcmF0aW9ucy4nKVxuICAub3B0aW9uKCctLXByaW50T3V0cHV0JywgJ1ByaW50IEdyYXBoUUwgcmVzcG9uc2Ugb3V0cHV0IGluY2x1ZGluZyBzdGF0dXMsIGhlYWRlcnMsIGFuZCBib2R5LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzcyhjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3N0b3J5Ym9vaycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHBhdGggKGllLiAuc3Rvcnlib29rKS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gU3Rvcnlib29rIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LicpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsICdQb3J0IG51bWJlciBmb3IgdGhlIFN0b3J5Ym9vayBzZXJ2ZXIuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc3RhdGljJywgJ0J1aWxkIGEgc3RhdGljIFN0b3J5Ym9vayBzaXRlIGluc3RlYWQgb2Ygc3RhcnRpbmcgZGV2IHNlcnZlci4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7U1RPUllCT09LX1RIRU1FOiBcXCdkYXJrXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCB3ZWJwYWNrIHByb2dyZXNzIG91dHB1dC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHN0b3J5Ym9vayhjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3Rlc3QgW2ZpbGVzLi4uXScpXG4gIC5vcHRpb24oJy0tYW5hbHl6ZScsICdVc2UgQUkgdG8gYW5hbHl6ZSB0ZXN0IGNvdmVyYWdlIGFuZCBzdWdnZXN0IGltcHJvdmVtZW50cy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1kZWJ1Z1Rlc3RzJywgJ1VzZSBBSSB0byBkZWJ1ZyB0ZXN0IGZhaWx1cmVzIGFuZCBzdWdnZXN0IGZpeGVzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWdlbmVyYXRlJywgJ1VzZSBBSSB0byBnZW5lcmF0ZSB0ZXN0IGNhc2VzIGZvciB1bnRlc3RlZCBjb2RlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWJhaWwnLCAnRXhpdCB0aGUgdGVzdCBzdWl0ZSBpbW1lZGlhdGVseSB1cG9uIHRoZSBmaXJzdCBmYWlsaW5nIHRlc3Qgc3VpdGUuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkRmlsZXNXaXRoQW5jZXN0b3InLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IGNoYW5nZXMgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGxhc3QgY29tbWl0LicpXG4gIC5vcHRpb24oJy0tY2hhbmdlZFNpbmNlJywgJ1J1bnMgdGVzdHMgcmVsYXRlZCB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJvdmlkZWQgYnJhbmNoLicpXG4gIC5vcHRpb24oJy0tY2knLCAnV2hlbiB0aGlzIG9wdGlvbiBpcyBwcm92aWRlZCwgVml0ZXN0IHdpbGwgYXNzdW1lIGl0IGlzIHJ1bm5pbmcgaW4gYSBDSSBlbnZpcm9ubWVudC4nKVxuICAub3B0aW9uKCctLWNsZWFyQ2FjaGUnLCAnQ2xlYXIgVml0ZXN0IGNhY2hlLicpXG4gIC5vcHRpb24oJy0tY29sbGVjdENvdmVyYWdlRnJvbSA8Z2xvYj4nLCAnQSBnbG9iIHBhdHRlcm4gcmVsYXRpdmUgdG8gbWF0Y2hpbmcgdGhlIGZpbGVzIHRoYXQgY292ZXJhZ2UgaW5mbyBuZWVkcyB0byBiZSBjb2xsZWN0ZWQgZnJvbS4nKVxuICAub3B0aW9uKCctLWNvbG9ycycsICdGb3JjZXMgdGVzdCByZXN1bHRzIG91dHB1dCBoaWdobGlnaHRpbmcgZXZlbiBpZiBzdGRvdXQgaXMgbm90IGEgVFRZLicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gVml0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gdml0ZXN0LmNvbmZpZy5tanMpLicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnUHJpbnQgZGVidWdnaW5nIGluZm8gYWJvdXQgeW91ciBWaXRlc3QgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGV0ZWN0T3BlbkhhbmRsZXMnLCAnQXR0ZW1wdCB0byBjb2xsZWN0IGFuZCBwcmludCBvcGVuIGhhbmRsZXMgcHJldmVudGluZyBWaXRlc3QgZnJvbSBleGl0aW5nIGNsZWFubHknKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11cGRhdGUnLCAnVXBkYXRlIHNuYXBzaG90cy4gUnVucyBcInZpdGVzdCAtLXVwZGF0ZVwiJylcbiAgLm9wdGlvbignLS11c2VTdGRlcnInLCAnRGl2ZXJ0IGFsbCBvdXRwdXQgdG8gc3RkZXJyLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdEaXNwbGF5IGluZGl2aWR1YWwgdGVzdCByZXN1bHRzIHdpdGggdGhlIHRlc3Qgc3VpdGUgaGllcmFyY2h5LicpXG4gIC5vcHRpb24oJy0td2F0Y2ggPHBhdGg+JywgJ1dhdGNoIGZpbGVzIGZvciBjaGFuZ2VzIGFuZCByZXJ1biB0ZXN0cyByZWxhdGVkIHRvIGNoYW5nZWQgZmlsZXMuJylcbiAgLm9wdGlvbignLS13YXRjaEFsbCcsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gYWxsIHRlc3RzIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuJylcbiAgLmFjdGlvbigoZmlsZXMsIG9wdGlvbnMsIGNtZCkgPT4gdGVzdChvcHRpb25zLCBjbWQuYXJncywgZmlsZXMsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5vcHRpb24oJy0taW50ZXJhY3RpdmUnLCAnQ2hvb3NlIHdoaWNoIHBhY2thZ2VzIHRvIHVwZGF0ZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJlZ2lzdHJ5JywgJ0FkZCBhIGN1c3RvbSByZWdpc3RyeSB1cmwuJylcbiAgLmFjdGlvbigoY21kKSA9PiB1cGRhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGdyYWRlJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiB1cGdyYWRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnYWknKVxuICAub3B0aW9uKCctLWNvbnRleHQnLCAnSW5jbHVkZSBwcm9qZWN0IGNvbnRleHQgaW4gdGhlIEFJIHByb21wdC4nLCB0cnVlKVxuICAub3B0aW9uKCctLWZpbGUgPHBhdGg+JywgJ1NwZWNpZmljIGZpbGUgdG8gb3BlcmF0ZSBvbi4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tbW9kZWwgPG1vZGVsPicsICdBSSBtb2RlbCB0byB1c2UuIERlZmF1bHQ6IGdwdC00by4nKVxuICAub3B0aW9uKCctLXByb21wdCA8dGV4dD4nLCAnVGhlIHByb21wdCB0byBzZW5kIHRvIHRoZSBBSS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhc2sgPHRhc2s+JywgJ1R5cGUgb2YgQUkgdGFzayB0byBwZXJmb3JtLicpLmNob2ljZXMoWydnZW5lcmF0ZScsICdleHBsYWluJywgJ3Rlc3QnLCAnb3B0aW1pemUnLCAnaGVscCddKS5kZWZhdWx0KCdoZWxwJykpXG4gIC5hY3Rpb24oKGNtZCkgPT4gYWlGdW5jdGlvbihjbWQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd2ZXJzaW9ucycpXG4gIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgdmVyc2lvbiBhcyBhIEpTT04gb2JqZWN0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdmVyc2lvbnMoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbVxuICAudmVyc2lvbihwYWNrYWdlSnNvbi52ZXJzaW9uKVxuICAucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdLCJuYW1lcyI6WyJPcHRpb24iLCJwcm9ncmFtIiwicmVhZEZpbGVTeW5jIiwiY3JlYXRlUmVxdWlyZSIsImRpcm5hbWUiLCJyZXNvbHZlIiwiZmlsZVVSTFRvUGF0aCIsImFpRnVuY3Rpb24iLCJidWlsZCIsImNsZWFuIiwiY29tcGlsZSIsImNvbmZpZyIsImNyZWF0ZSIsImRldiIsIkRFRkFVTFRfREVWX1BPUlQiLCJpbml0IiwibGlua2VkIiwibGludCIsIm1pZ3JhdGUiLCJwdWJsaXNoIiwic2VydmVybGVzcyIsInN0b3J5Ym9vayIsInRlc3QiLCJ1cGRhdGUiLCJ1cGdyYWRlIiwidmVyc2lvbnMiLCJwcm9jZXNzIiwiZW52IiwiTEVYX1JPT1QiLCJ1cmwiLCJsZXhOb2RlTW9kdWxlcyIsIk5PREVfUEFUSCIsInNwbGl0IiwiaW5jbHVkZXMiLCJyZXF1aXJlIiwiTW9kdWxlIiwiX2luaXRQYXRocyIsInBhY2thZ2VQYXRoIiwiVVJMIiwicGFja2FnZUpzb24iLCJKU09OIiwicGFyc2UiLCJjb21tYW5kIiwib3B0aW9uIiwiYWRkT3B0aW9uIiwiY2hvaWNlcyIsImRlZmF1bHQiLCJhY3Rpb24iLCJjbWQiLCJleGl0IiwidGhlbiIsInR5cGUiLCJhcHBOYW1lIiwicGFja2FnZU5hbWUiLCJmaWxlcyIsIm9wdGlvbnMiLCJhcmdzIiwidmVyc2lvbiIsImFyZ3YiXSwibWFwcGluZ3MiOiI7QUFDQTs7O0NBR0MsR0FDRCxTQUFRQSxNQUFNLEVBQUVDLE9BQU8sUUFBTyxZQUFZO0FBQzFDLFNBQVFDLFlBQVksUUFBTyxLQUFLO0FBQ2hDLFNBQVFDLGFBQWEsUUFBTyxTQUFTO0FBQ3JDLFNBQVFDLE9BQU8sRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFDdEMsU0FBUUMsYUFBYSxRQUFPLE1BQU07QUFFbEMsU0FBUUMsVUFBVSxRQUFPLHNCQUFzQjtBQUMvQyxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsT0FBTyxRQUFPLGdDQUFnQztBQUN0RCxTQUFRQyxNQUFNLFFBQU8sOEJBQThCO0FBQ25ELFNBQVFDLE1BQU0sUUFBTyw4QkFBOEI7QUFDbkQsU0FBUUMsR0FBRyxFQUFFQyxnQkFBZ0IsUUFBTyx3QkFBd0I7QUFDNUQsU0FBUUMsSUFBSSxRQUFPLDBCQUEwQjtBQUM3QyxTQUFRQyxNQUFNLFFBQU8sMEJBQTBCO0FBQy9DLFNBQVFDLElBQUksUUFBTywwQkFBMEI7QUFDN0MsU0FBUUMsT0FBTyxRQUFPLGdDQUFnQztBQUN0RCxTQUFRQyxPQUFPLFFB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
|