@nlabs/lex 1.55.2 → 1.56.1
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/.storybook/main.ts +1 -2
- package/lib/LexConfig.d.ts +3 -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.js +4 -4
- package/lib/commands/publish/publish.js +10 -5
- package/lib/commands/serverless/serverless.js +12 -10
- 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/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 +31 -34
- package/tsconfig.json +1 -0
- package/webpack.config.js +6 -13
|
@@ -429,11 +429,12 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
|
|
|
429
429
|
console.log(`[Serverless] ${method} ${url} (pathname: ${pathname})`);
|
|
430
430
|
// Find matching function
|
|
431
431
|
let matchedFunction = null;
|
|
432
|
+
const functions = config.functions || {};
|
|
432
433
|
if (config.functions) {
|
|
433
|
-
const functionNames = Object.keys(
|
|
434
|
+
const functionNames = Object.keys(functions);
|
|
434
435
|
console.log(`[Serverless] Available functions: ${functionNames.join(', ')}`);
|
|
435
|
-
console.log('[Serverless] Config functions:', JSON.stringify(
|
|
436
|
-
for (const [functionName, functionConfig] of Object.entries(
|
|
436
|
+
console.log('[Serverless] Config functions:', JSON.stringify(functions, null, 2));
|
|
437
|
+
for (const [functionName, functionConfig] of Object.entries(functions)){
|
|
437
438
|
if (functionConfig.events) {
|
|
438
439
|
for (const event of functionConfig.events){
|
|
439
440
|
if (event.http) {
|
|
@@ -460,9 +461,9 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
|
|
|
460
461
|
} else {
|
|
461
462
|
console.log('[Serverless] No functions found in config');
|
|
462
463
|
}
|
|
463
|
-
if (matchedFunction &&
|
|
464
|
+
if (matchedFunction && functions[matchedFunction]) {
|
|
464
465
|
// Resolve handler path relative to output directory
|
|
465
|
-
const handlerPath =
|
|
466
|
+
const handlerPath = functions[matchedFunction].handler;
|
|
466
467
|
console.log(`[Serverless] Loading handler: ${handlerPath} from outputDir: ${outputDir}`);
|
|
467
468
|
const handler = await loadHandler(handlerPath, outputDir);
|
|
468
469
|
if (handler) {
|
|
@@ -517,7 +518,7 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
|
|
|
517
518
|
}
|
|
518
519
|
} else {
|
|
519
520
|
console.error(`[Serverless] Function not found for pathname: ${pathname}, method: ${method}`);
|
|
520
|
-
console.error(`[Serverless] Available functions: ${config.functions ? Object.keys(
|
|
521
|
+
console.error(`[Serverless] Available functions: ${config.functions ? Object.keys(functions).join(', ') : 'none'}`);
|
|
521
522
|
res.status(404).json({
|
|
522
523
|
error: 'Function not found'
|
|
523
524
|
});
|
|
@@ -542,8 +543,9 @@ const createWebSocketServer = (config, outputDir, wsPort, quiet, debug)=>{
|
|
|
542
543
|
const data = JSON.parse(message.toString());
|
|
543
544
|
// Find matching WebSocket function
|
|
544
545
|
let matchedFunction = null;
|
|
546
|
+
const functions = config.functions || {};
|
|
545
547
|
if (config.functions) {
|
|
546
|
-
for (const [functionName, functionConfig] of Object.entries(
|
|
548
|
+
for (const [functionName, functionConfig] of Object.entries(functions)){
|
|
547
549
|
if (functionConfig.events) {
|
|
548
550
|
for (const event of functionConfig.events){
|
|
549
551
|
if (event.websocket) {
|
|
@@ -560,8 +562,8 @@ const createWebSocketServer = (config, outputDir, wsPort, quiet, debug)=>{
|
|
|
560
562
|
}
|
|
561
563
|
}
|
|
562
564
|
}
|
|
563
|
-
if (matchedFunction &&
|
|
564
|
-
const handler = await loadHandler(
|
|
565
|
+
if (matchedFunction && functions[matchedFunction]) {
|
|
566
|
+
const handler = await loadHandler(functions[matchedFunction].handler, outputDir);
|
|
565
567
|
if (handler) {
|
|
566
568
|
// Wrap handler with console log capture
|
|
567
569
|
const wrappedHandler = captureConsoleLogs(handler, quiet);
|
|
@@ -831,4 +833,4 @@ export const serverless = async (cmd, callback = ()=>({}))=>{
|
|
|
831
833
|
}
|
|
832
834
|
};
|
|
833
835
|
|
|
834
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3BhdGhUb0ZpbGVVUkx9IGZyb20gJ3VybCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBQdWJsaWNJcENhY2hlIHtcbiAgaXA6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTZXJ2ZXJsZXNzSGFuZGxlciB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnRzPzogQXJyYXk8e1xuICAgIHJlYWRvbmx5IGh0dHA/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gICAgfTtcbiAgICByZWFkb25seSB3ZWJzb2NrZXQ/OiB7XG4gICAgICByZWFkb25seSByb3V0ZT86IHN0cmluZztcbiAgICB9O1xuICB9Pjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NDb25maWcge1xuICByZWFkb25seSBjdXN0b20/OiB7XG4gICAgcmVhZG9ubHkgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG4gICAgICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGh0dHBzUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IHdzUG9ydD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZWFkb25seSBmdW5jdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJ2ZXJsZXNzSGFuZGxlcj47XG59XG5cbmNvbnN0IGdldENhY2hlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNhY2hlRGlyID0gam9pbihob21lZGlyKCksICcubGV4LWNhY2hlJyk7XG4gIGlmKCFleGlzdHNTeW5jKGNhY2hlRGlyKSkge1xuICAgIG1rZGlyU3luYyhjYWNoZURpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICB9XG4gIHJldHVybiBjYWNoZURpcjtcbn07XG5cbmNvbnN0IGdldENhY2hlUGF0aCA9ICgpOiBzdHJpbmcgPT4gam9pbihnZXRDYWNoZURpcigpLCAncHVibGljLWlwLmpzb24nKTtcblxuY29uc3QgcmVhZFB1YmxpY0lwQ2FjaGUgPSAoKTogUHVibGljSXBDYWNoZSB8IG51bGwgPT4ge1xuICBjb25zdCBjYWNoZVBhdGggPSBnZXRDYWNoZVBhdGgoKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjYWNoZURhdGEgPSByZWFkRmlsZVN5bmMoY2FjaGVQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0gSlNPTi5wYXJzZShjYWNoZURhdGEpO1xuXG4gICAgLy8gQ2hlY2sgaWYgY2FjaGUgaXMgb2xkZXIgdGhhbiAxIHdlZWtcbiAgICBjb25zdCBvbmVXZWVrTXMgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDtcbiAgICBpZihEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gb25lV2Vla01zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGU7XG4gIH0gY2F0Y2h7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IHdyaXRlUHVibGljSXBDYWNoZSA9IChpcDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBjb25zdCBjYWNoZTogUHVibGljSXBDYWNoZSA9IHtcbiAgICBpcCxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgfTtcbiAgd3JpdGVGaWxlU3luYyhjYWNoZVBhdGgsIEpTT04uc3RyaW5naWZ5KGNhY2hlLCBudWxsLCAyKSk7XG59O1xuXG5jb25zdCBmZXRjaFB1YmxpY0lwID0gKGZvcmNlUmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGlmKCFmb3JjZVJlZnJlc2gpIHtcbiAgICBjb25zdCBjYWNoZWQgPSByZWFkUHVibGljSXBDYWNoZSgpO1xuICAgIGlmKGNhY2hlZCkge1xuICAgICAgcmVzb2x2ZShjYWNoZWQuaXApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZSBmZXRjaCBpbnN0ZWFkIG9mIGh0dHBzXG4gIGZldGNoKCdodHRwczovL2FwaS5pcGlmeS5vcmcnKVxuICAgIC50aGVuKChyZXMpID0+IHJlcy50ZXh0KCkpXG4gICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGlwID0gZGF0YS50cmltKCk7XG4gICAgICBpZihpcCkge1xuICAgICAgICB3cml0ZVB1YmxpY0lwQ2FjaGUoaXApO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShpcCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKTtcbn0pO1xuXG5jb25zdCByZXNvbHZlUHVibGljSXBGb3JEaXNwbGF5ID0gYXN5bmMgKGZvcmNlUmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgY29uc3QgdGltZW91dE1zID0gMTUwMDtcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTx1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCksIHRpbWVvdXRNcyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShbZmV0Y2hQdWJsaWNJcChmb3JjZVJlZnJlc2gpLCB0aW1lb3V0UHJvbWlzZV0pO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbmNvbnN0IGRpc3BsYXlTZXJ2ZXJTdGF0dXMgPSAoXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGh0dHBzUG9ydDogbnVtYmVyLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgcHVibGljSXA/OiBzdHJpbmdcbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGh0dHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH1gO1xuICBjb25zdCBodHRwc1VybCA9IGBodHRwczovLyR7aG9zdH06JHtodHRwc1BvcnR9YDtcbiAgY29uc3Qgd3NVcmwgPSBgd3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG4gIGNvbnN0IHdzc1VybCA9IGB3c3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG5cbiAgbGV0IHVybExpbmVzID0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFA6Jyl9ICAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cFVybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFBTOicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cHNVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXZWJTb2NrZXQ6Jyl9ICR7Y2hhbGsudW5kZXJsaW5lKHdzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV1NTOicpfSAgICAgICAke2NoYWxrLnVuZGVybGluZSh3c3NVcmwpfVxcbmA7XG5cbiAgaWYocHVibGljSXApIHtcbiAgICB1cmxMaW5lcyArPSBgXFxuJHtjaGFsay5ncmVlbignUHVibGljOicpfSAgICAke2NoYWxrLnVuZGVybGluZShgaHR0cDovLyR7cHVibGljSXB9OiR7aHR0cFBvcnR9YCl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+agCBTZXJ2ZXJsZXNzIERldmVsb3BtZW50IFNlcnZlciBSdW5uaW5nJyl9XFxuXFxuJHt1cmxMaW5lc31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1ByZXNzIEN0cmwrQyB0byBzdG9wIHRoZSBzZXJ2ZXInKX1gLFxuICAgIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdjeWFuJyxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgcGFkZGluZzogMVxuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZyhgXFxuJHtzdGF0dXNCb3h9XFxuYCk7XG59O1xuXG5jb25zdCBsb2FkSGFuZGxlciA9IGFzeW5jIChoYW5kbGVyUGF0aDogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2luZyBoYW5kbGVyIHBhdGg6ICR7aGFuZGxlclBhdGh9YCk7XG5cbiAgICAvLyBQYXJzZSBBV1MgTGFtYmRhIGhhbmRsZXIgZm9ybWF0OiBcInBhdGgvdG8vZmlsZS5leHBvcnROYW1lXCIgb3IgXCJmaWxlLmV4cG9ydE5hbWVcIlxuICAgIC8vIEV4YW1wbGVzOiBcImluZGV4LmhhbmRsZXJcIiwgXCJoYW5kbGVycy9hcGkuaGFuZGxlclwiLCBcInNyYy9pbmRleC5kZWZhdWx0XCJcbiAgICBjb25zdCBoYW5kbGVyUGFydHMgPSBoYW5kbGVyUGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gSGFuZGxlciBwYXJ0cyBhZnRlciBzcGxpdDonLCBoYW5kbGVyUGFydHMpO1xuXG4gICAgbGV0IGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGV0IGV4cG9ydE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYoaGFuZGxlclBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEFXUyBMYW1iZGEgZm9ybWF0OiBcImZpbGUuZXhwb3J0TmFtZVwiXG4gICAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnQgYXMgZXhwb3J0IG5hbWUsIHJlc3QgYXMgZmlsZSBwYXRoXG4gICAgICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBcImluZGV4LmhhbmRsZXJcIiAtPiBmaWxlOiBcImluZGV4XCIsIGV4cG9ydDogXCJoYW5kbGVyXCJcbiAgICAgIC8vIE9yIFwiaGFuZGxlcnMvYXBpLmhhbmRsZXJcIiAtPiBmaWxlOiBcImhhbmRsZXJzL2FwaVwiLCBleHBvcnQ6IFwiaGFuZGxlclwiXG4gICAgICBleHBvcnROYW1lID0gaGFuZGxlclBhcnRzW2hhbmRsZXJQYXJ0cy5sZW5ndGggLSAxXSB8fCBudWxsO1xuICAgICAgZmlsZVBhdGggPSBoYW5kbGVyUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2VkIEFXUyBMYW1iZGEgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cIiwgZXhwb3J0TmFtZTogXCIke2V4cG9ydE5hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2ltcGxlIGZvcm1hdDoganVzdCB0aGUgZmlsZSBwYXRoXG4gICAgICBmaWxlUGF0aCA9IGhhbmRsZXJQYXRoO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBTaW1wbGUgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmaWxlUGF0aCBkb2Vzbid0IGhhdmUgdGhlIGV4cG9ydCBuYW1lIGluIGl0XG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJy5oYW5kbGVyJykgfHwgZmlsZVBhdGguaW5jbHVkZXMoJy5kZWZhdWx0JykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBXQVJOSU5HOiBmaWxlUGF0aCBzdGlsbCBjb250YWlucyBleHBvcnQgbmFtZSEgZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgICAgLy8gVHJ5IHRvIGZpeCBpdCAtIHJlbW92ZSB0aGUgbGFzdCBwYXJ0IGlmIGl0IGxvb2tzIGxpa2UgYW4gZXhwb3J0IG5hbWVcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGZpbGVQYXRoLnNwbGl0KCcuJyk7XG4gICAgICBpZihwYXRoUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBsYXN0UGFydCA9IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmKFsnaGFuZGxlcicsICdkZWZhdWx0JywgJ2luZGV4J10uaW5jbHVkZXMobGFzdFBhcnQpICYmICFleHBvcnROYW1lKSB7XG4gICAgICAgICAgZXhwb3J0TmFtZSA9IGxhc3RQYXJ0O1xuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaXhlZCAtIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCIsIGV4cG9ydE5hbWU6IFwiJHtleHBvcnROYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYm90aCByZWxhdGl2ZSBwYXRocyBhbmQgYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgZnVsbFBhdGg6IHN0cmluZztcbiAgICBpZihpc0Fic29sdXRlKGZpbGVQYXRoKSkge1xuICAgICAgZnVsbFBhdGggPSBmaWxlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIGZpbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBSZXNvbHZlZCBmdWxsUGF0aCAoYmVmb3JlIGV4dGVuc2lvbnMpOiAke2Z1bGxQYXRofWApO1xuXG4gICAgLy8gVHJ5IGRpZmZlcmVudCBleHRlbnNpb25zIGlmIGZpbGUgZG9lc24ndCBleGlzdFxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLmpzJywgJy5tanMnLCAnLmNqcyddO1xuICAgICAgY29uc3QgcGF0aFdpdGhvdXRFeHQgPSBmdWxsUGF0aC5yZXBsYWNlKC9cXC4oanN8bWpzfGNqcykkLywgJycpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBUcnlpbmcgZXh0ZW5zaW9ucy4gQmFzZSBwYXRoOiAke3BhdGhXaXRob3V0RXh0fWApO1xuICAgICAgZm9yKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVBhdGggPSBwYXRoV2l0aG91dEV4dCArIGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZzogJHtjYW5kaWRhdGVQYXRofSAoZXhpc3RzOiAke2V4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCl9KWApO1xuICAgICAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICAgICAgZnVsbFBhdGggPSBjYW5kaWRhdGVQYXRoO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRm91bmQgZmlsZSB3aXRoIGV4dGVuc2lvbjogJHtmdWxsUGF0aH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbGUgZXhpc3RzIHdpdGhvdXQgdHJ5aW5nIGV4dGVuc2lvbnM6ICR7ZnVsbFBhdGh9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaW5hbCBmdWxsUGF0aDogJHtmdWxsUGF0aH1gKTtcbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEV4cG9ydCBuYW1lOiAke2V4cG9ydE5hbWUgfHwgJ2RlZmF1bHQvaGFuZGxlcid9YCk7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKGZ1bGxQYXRoKX1gKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZmlsZSBub3QgZm91bmQ6ICR7ZnVsbFBhdGh9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gT3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoIGZyb20gY29uZmlnOiAke2hhbmRsZXJQYXRofWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIC8vIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBoYW5kbGVyIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgLy8gQWRkIC5qcyBleHRlbnNpb24gaWYgaW1wb3J0aW5nIFR5cGVTY3JpcHQgY29tcGlsZWQgb3V0cHV0XG4gICAgY29uc3QgaW1wb3J0UGF0aCA9IGZ1bGxQYXRoLmVuZHNXaXRoKCcudHMnKSA/IGZ1bGxQYXRoLnJlcGxhY2UoL1xcLnRzJC8sICcuanMnKSA6IGZ1bGxQYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnZlcnQgdG8gZmlsZTovLyBVUkwgZm9yIEVTIG1vZHVsZSBpbXBvcnRzIChyZXF1aXJlZCBmb3IgYWJzb2x1dGUgcGF0aHMpXG4gICAgICAvLyBVc2UgcGF0aFRvRmlsZVVSTCB0byBlbnN1cmUgcHJvcGVyIGZpbGU6Ly8gVVJMIGZvcm1hdFxuICAgICAgY29uc3QgaW1wb3J0VXJsID0gcGF0aFRvRmlsZVVSTChpbXBvcnRQYXRoKS5ocmVmO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBJbXBvcnRpbmcgaGFuZGxlciBmcm9tOiAke2ltcG9ydFVybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmlsZSBwYXRoOiAke2ltcG9ydFBhdGh9YCk7XG5cbiAgICAgIC8vIFVzZSBpbXBvcnQoKSB3aXRoIHRoZSBmaWxlIFVSTFxuICAgICAgLy8gTm90ZTogSWYgdGhlIGhhbmRsZXIgZmlsZSBoYXMgaW1wb3J0IGVycm9ycyAobGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyksXG4gICAgICAvLyB0aG9zZSB3aWxsIHN1cmZhY2UgaGVyZSwgYnV0IHRoYXQncyBhIGhhbmRsZXIgY29kZSBpc3N1ZSwgbm90IGEgbG9hZGVyIGlzc3VlXG4gICAgICBjb25zdCBoYW5kbGVyTW9kdWxlID0gYXdhaXQgaW1wb3J0KGltcG9ydFVybCk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbW9kdWxlIGxvYWRlZCBzdWNjZXNzZnVsbHkuIEV4cG9ydHM6ICR7T2JqZWN0LmtleXMoaGFuZGxlck1vZHVsZSkuam9pbignLCAnKX1gKTtcblxuICAgICAgLy8gR2V0IHRoZSBoYW5kbGVyIGJhc2VkIG9uIGV4cG9ydCBuYW1lIG9yIHRyeSBkZWZhdWx0c1xuICAgICAgbGV0IGhhbmRsZXI6IGFueTtcbiAgICAgIGlmKGV4cG9ydE5hbWUpIHtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGVbZXhwb3J0TmFtZV07XG4gICAgICAgIGlmKCFoYW5kbGVyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEV4cG9ydCBcIiR7ZXhwb3J0TmFtZX1cIiBub3QgZm91bmQgaW4gbW9kdWxlLiBBdmFpbGFibGUgZXhwb3J0czogJHtPYmplY3Qua2V5cyhoYW5kbGVyTW9kdWxlKS5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUcnkgZGVmYXVsdCwgaGFuZGxlciwgb3IgdGhlIG1vZHVsZSBpdHNlbGZcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGUuZGVmYXVsdCB8fCBoYW5kbGVyTW9kdWxlLmhhbmRsZXIgfHwgaGFuZGxlck1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZvdW5kOiAke3R5cGVvZiBoYW5kbGVyfSwgaXNGdW5jdGlvbjogJHt0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJ31gKTtcblxuICAgICAgaWYodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgaXMgbm90IGEgZnVuY3Rpb24uIFR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9LCBWYWx1ZTpgLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH0gY2F0Y2goaW1wb3J0RXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEltcG9ydCBlcnJvciBmb3IgaGFuZGxlciAke2hhbmRsZXJQYXRofTpgLCBpbXBvcnRFcnJvci5tZXNzYWdlKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBJbXBvcnQgZXJyb3Igc3RhY2s6JywgaW1wb3J0RXJyb3Iuc3RhY2spO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yIChjb21tb24gd2l0aCBFUyBtb2R1bGVzKVxuICAgICAgaWYoaW1wb3J0RXJyb3IubWVzc2FnZSAmJiBpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdDYW5ub3QgZmluZCBtb2R1bGUnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhpcyBhcHBlYXJzIHRvIGJlIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhlIGhhbmRsZXIgZmlsZSBleGlzdHMsIGJ1dCBvbmUgb2YgaXRzIGltcG9ydHMgaXMgZmFpbGluZy4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIENoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBpbiB0aGUgaGFuZGxlciBmaWxlIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZpbGU6ICR7aW1wb3J0UGF0aH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIE1ha2Ugc3VyZSB0aGUgaGFuZGxlciBhbmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgY29tcGlsZWQgY29ycmVjdGx5LicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBFcnJvciBsb2FkaW5nIGhhbmRsZXIgJHtoYW5kbGVyUGF0aH06YCwgZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgY2FwdHVyZUNvbnNvbGVMb2dzID0gKGhhbmRsZXI6IChldmVudDogYW55LCBjb250ZXh0OiBhbnkpID0+IFByb21pc2U8YW55PiwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm4gaGFuZGxlcjtcbiAgfVxuXG4gIHJldHVybiBhc3luYyAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KSA9PiB7XG4gICAgLy8gQ2FwdHVyZSBjb25zb2xlLmxvZywgY29uc29sZS5lcnJvciwgZXRjLlxuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVXYXJuID0gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUluZm8gPSBjb25zb2xlLmluZm87XG5cbiAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc29sZS5sb2cgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0xPR10gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbRVJST1JdICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS53YXJuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtXQVJOXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlV2FybiguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtJTkZPXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlSW5mbyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAvLyBPdXRwdXQgY2FwdHVyZWQgbG9nc1xuICAgICAgaWYobG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBIYW5kbGVyIENvbnNvbGUgT3V0cHV0IC0tLScpKTtcbiAgICAgICAgbG9ncy5mb3JFYWNoKChsb2cpID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkobG9nKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCctLS0gRW5kIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGNvbnNvbGUgbWV0aG9kc1xuICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICBjb25zb2xlLmVycm9yID0gb3JpZ2luYWxDb25zb2xlRXJyb3I7XG4gICAgICBjb25zb2xlLndhcm4gPSBvcmlnaW5hbENvbnNvbGVXYXJuO1xuICAgICAgY29uc29sZS5pbmZvID0gb3JpZ2luYWxDb25zb2xlSW5mbztcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVFeHByZXNzU2VydmVyID0gYXN5bmMgKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICBodHRwUG9ydDogbnVtYmVyLFxuICBob3N0OiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBFbmFibGUgQ09SU1xuICBhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBQQVRDSCwgT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnKicpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJywgJ3RydWUnKTtcblxuICAgIGlmKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFyc2UgSlNPTiBib2RpZXNcbiAgYXBwLnVzZShleHByZXNzLmpzb24oKSk7XG5cbiAgLy8gTG9hZCBHcmFwaFFMIGhhbmRsZXJcbiAgY29uc3QgbG9hZEdyYXBoUUxTY2hlbWEgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBmaW5kIGEgR3JhcGhRTCBoYW5kbGVyXG4gICAgICBsZXQgZ3JhcGhxbEhhbmRsZXIgPSBudWxsO1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCAmJiBldmVudC5odHRwLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAvLyBMb29rIGZvciBHcmFwaFFMIGVuZHBvaW50c1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9wdWJsaWMnIHx8IGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9ncmFwaHFsJykge1xuICAgICAgICAgICAgICAgICAgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihmdW5jdGlvbkNvbmZpZy5oYW5kbGVyLCBvdXRwdXREaXIpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgbG9nKCdGb3VuZCBHcmFwaFFMIGhhbmRsZXInLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgcmV0dXJuIGdyYXBocWxIYW5kbGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEdyYXBoUUwgaGFuZGxlcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgdXAgR3JhcGhRTCBoYW5kbGVyIGZvciBHcmFwaFFMIHJlcXVlc3RzXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkR3JhcGhRTFNjaGVtYSgpO1xuICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAvLyBGaW5kIHRoZSBHcmFwaFFMIHBhdGggZnJvbSB0aGUgc2VydmVybGVzcyBjb25maWdcbiAgICAgIGxldCBncmFwaHFsUGF0aCA9ICcvZ3JhcGhxbCc7IC8vIGRlZmF1bHQgZmFsbGJhY2tcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBmb3IoY29uc3QgW19mdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudD8uaHR0cD8ucGF0aCkge1xuICAgICAgICAgICAgICAgIGdyYXBocWxQYXRoID0gZXZlbnQuaHR0cC5wYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxQYXRoICE9PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHVwIEdyYXBoUUwgZW5kcG9pbnQgd2l0aCBlbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICBhcHAudXNlKGdyYXBocWxQYXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgLy8gR3JhcGhRTCBEZWJ1ZyBMb2dnaW5nXG4gICAgICAgIGlmKGRlYnVnICYmIHJlcS5ib2R5ICYmIHJlcS5ib2R5LnF1ZXJ5KSB7XG4gICAgICAgICAgbG9nKCfwn5SNIEdyYXBoUUwgRGVidWcgTW9kZTogQW5hbHl6aW5nIHJlcXVlc3QuLi4nLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBsb2coYPCfk50gR3JhcGhRTCBRdWVyeTogJHtyZXEuYm9keS5xdWVyeX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBpZihyZXEuYm9keS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGxvZyhg8J+TiiBHcmFwaFFMIFZhcmlhYmxlczogJHtKU09OLnN0cmluZ2lmeShyZXEuYm9keS52YXJpYWJsZXMsIG51bGwsIDIpfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXEuYm9keS5vcGVyYXRpb25OYW1lKSB7XG4gICAgICAgICAgICBsb2coYPCfj7fvuI8gIEdyYXBoUUwgT3BlcmF0aW9uOiAke3JlcS5ib2R5Lm9wZXJhdGlvbk5hbWV9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY29uc29sZS5sb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgY29uc3QgbG9nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGFyZ3MubWFwKChhcmcpID0+XG4gICAgICAgICAgICAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIDIpIDogU3RyaW5nKGFyZykpXG4gICAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgICAgbG9ncy5wdXNoKGxvZ01lc3NhZ2UpO1xuICAgICAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyhgW0dyYXBoUUxdICR7bG9nTWVzc2FnZX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDcmVhdGUgY29udGV4dCBmb3IgdGhlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogJ2dyYXBocWwnLFxuICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiAnYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjpncmFwaHFsJyxcbiAgICAgICAgICBsb2dHcm91cE5hbWU6ICcvYXdzL2xhbWJkYS9ncmFwaHFsJyxcbiAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgcmVzXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhncmFwaHFsSGFuZGxlciwgcXVpZXQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciB3aXRoIEdyYXBoUUwgcGFyYW1ldGVyc1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgaHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgcGF0aDogZ3JhcGhxbFBhdGgsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHt9XG4gICAgICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3VsdFxuICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICBpZihyZXN1bHQuaGVhZGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICAgICAgbG9nKGBHcmFwaFFMIGhhbmRsZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsb2coYEdyYXBoUUwgZW5kcG9pbnQgYXZhaWxhYmxlIGF0IGh0dHA6Ly8ke2hvc3R9OiR7aHR0cFBvcnR9JHtncmFwaHFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHNldHRpbmcgdXAgR3JhcGhRTDogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIGZvciBub24tR3JhcGhRTCByb3V0ZXMgLSBoYW5kbGUgYWxsIHJlbWFpbmluZyByb3V0ZXNcbiAgYXBwLnVzZSgnLycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSByZXEudXJsIHx8ICcvJztcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IHJlcS5wYXRoIHx8IHVybC5zcGxpdCgnPycpWzBdOyAvLyBFeHRyYWN0IHBhdGhuYW1lIHdpdGhvdXQgcXVlcnkgc3RyaW5nXG5cbiAgICAgIC8vIEFsd2F5cyBsb2cgcmVxdWVzdHMgKG5vdCBhZmZlY3RlZCBieSBxdWlldCBmbGFnIGZvciBkZWJ1Z2dpbmcpXG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdICR7bWV0aG9kfSAke3VybH0gKHBhdGhuYW1lOiAke3BhdGhuYW1lfSlgKTtcblxuICAgICAgLy8gRmluZCBtYXRjaGluZyBmdW5jdGlvblxuICAgICAgbGV0IG1hdGNoZWRGdW5jdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbnMpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEF2YWlsYWJsZSBmdW5jdGlvbnM6ICR7ZnVuY3Rpb25OYW1lcy5qb2luKCcsICcpfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIENvbmZpZyBmdW5jdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoY29uZmlnLmZ1bmN0aW9ucywgbnVsbCwgMikpO1xuXG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50UGF0aCA9IGV2ZW50Lmh0dHAucGF0aCB8fCAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAoZXZlbnQuaHR0cC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX06IHBhdGg9XCIke2V2ZW50UGF0aH1cIiwgbWV0aG9kPVwiJHtldmVudE1ldGhvZH1cIiBhZ2FpbnN0IHBhdGhuYW1lPVwiJHtwYXRobmFtZX1cIiwgbWV0aG9kPVwiJHtyZXF1ZXN0TWV0aG9kfVwiYCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJbXByb3ZlZCBwYXRoIG1hdGNoaW5nIC0gY29tcGFyZSBwYXRobmFtZSB3aXRob3V0IHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyAocmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZm9yIGNvbXBhcmlzb24pXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV2ZW50UGF0aCA9IGV2ZW50UGF0aC5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcblxuICAgICAgICAgICAgICAgIGlmKG5vcm1hbGl6ZWRFdmVudFBhdGggPT09IG5vcm1hbGl6ZWRQYXRobmFtZSAmJiBldmVudE1ldGhvZCA9PT0gcmVxdWVzdE1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSDinJMgTWF0Y2hlZCBmdW5jdGlvbjogJHttYXRjaGVkRnVuY3Rpb259YCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gTm8gZnVuY3Rpb25zIGZvdW5kIGluIGNvbmZpZycpO1xuICAgICAgfVxuXG4gICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dKSB7XG4gICAgICAgIC8vIFJlc29sdmUgaGFuZGxlciBwYXRoIHJlbGF0aXZlIHRvIG91dHB1dCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0uaGFuZGxlcjtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBMb2FkaW5nIGhhbmRsZXI6ICR7aGFuZGxlclBhdGh9IGZyb20gb3V0cHV0RGlyOiAke291dHB1dERpcn1gKTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGhhbmRsZXJQYXRoLCBvdXRwdXREaXIpO1xuXG4gICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgdHlwZTogJHt0eXBlb2YgaGFuZGxlcn1gKTtcbiAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHJlcS5ib2R5LFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHJlcS5xdWVyeVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBDYWxsaW5nIGhhbmRsZXIgd2l0aCBldmVudDonLCBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIHJldHVybmVkOicsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikpO1xuXG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gSGFuZGxlciBlcnJvcjonLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIGVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGxvZyhgSGFuZGxlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtlcnJvcjogZXJyb3IubWVzc2FnZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBub3QgZm91bmQgZm9yIGZ1bmN0aW9uOiAke21hdGNoZWRGdW5jdGlvbn1gKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoOiAke2hhbmRsZXJQYXRofSwgT3V0cHV0IGRpcjogJHtvdXRwdXREaXJ9YCk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oe2Vycm9yOiAnSGFuZGxlciBub3QgZm91bmQnfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBGdW5jdGlvbiBub3QgZm91bmQgZm9yIHBhdGhuYW1lOiAke3BhdGhuYW1lfSwgbWV0aG9kOiAke21ldGhvZH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEF2YWlsYWJsZSBmdW5jdGlvbnM6ICR7Y29uZmlnLmZ1bmN0aW9ucyA/IE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbnMpLmpvaW4oJywgJykgOiAnbm9uZSd9YCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0Z1bmN0aW9uIG5vdCBmb3VuZCd9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFJvdXRlIGhhbmRsaW5nIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXBwO1xufTtcblxuY29uc3QgY3JlYXRlV2ViU29ja2V0U2VydmVyID0gKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldFNlcnZlcih7cG9ydDogd3NQb3J0fSk7XG5cbiAgd3NzLm9uKCdjb25uZWN0aW9uJywgYXN5bmMgKHdzLCByZXEpID0+IHtcbiAgICBsb2coYFdlYlNvY2tldCBjb25uZWN0aW9uIGVzdGFibGlzaGVkOiAke3JlcS51cmx9YCwgJ2luZm8nLCBmYWxzZSk7XG5cbiAgICB3cy5vbignbWVzc2FnZScsIGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIC8vIEZpbmQgbWF0Y2hpbmcgV2ViU29ja2V0IGZ1bmN0aW9uXG4gICAgICAgIGxldCBtYXRjaGVkRnVuY3Rpb24gPSBudWxsO1xuXG4gICAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50LndlYnNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBldmVudC53ZWJzb2NrZXQucm91dGUgfHwgJyRjb25uZWN0JztcbiAgICAgICAgICAgICAgICAgIGlmKHJvdXRlID09PSAnJGRlZmF1bHQnIHx8IHJvdXRlID09PSBkYXRhLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbiAmJiBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0pIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgbG9hZEhhbmRsZXIoY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dLmhhbmRsZXIsIG91dHB1dERpcik7XG5cbiAgICAgICAgICBpZihoYW5kbGVyKSB7XG4gICAgICAgICAgICAvLyBXcmFwIGhhbmRsZXIgd2l0aCBjb25zb2xlIGxvZyBjYXB0dXJlXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgICAgYm9keTogZGF0YS5ib2R5IHx8IG51bGwsXG4gICAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgYXBpR2F0ZXdheToge1xuICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IGB3czovL2xvY2FsaG9zdDoke3dzUG9ydH1gXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6ICd0ZXN0LWNvbm5lY3Rpb24taWQnLFxuICAgICAgICAgICAgICAgIHJvdXRlS2V5OiBkYXRhLmFjdGlvbiB8fCAnJGRlZmF1bHQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgICBmdW5jdGlvblZlcnNpb246ICckTEFURVNUJyxcbiAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgTGFtYmRhIHJlc3BvbnNlIGZvcm1hdCBmb3IgV2ViU29ja2V0XG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIExhbWJkYSByZXNwb25zZSBvYmplY3QsIGV4dHJhY3QgdGhlIGJvZHlcbiAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlc3VsdC5ib2R5IHx8ICcnO1xuICAgICAgICAgICAgICB3cy5zZW5kKGJvZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGRpcmVjdCByZXNwb25zZSwgc3RyaW5naWZ5IGl0XG4gICAgICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiAnSGFuZGxlciBub3QgZm91bmQnfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogJ1dlYlNvY2tldCBmdW5jdGlvbiBub3QgZm91bmQnfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxvZyhgV2ViU29ja2V0IGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogZXJyb3IubWVzc2FnZX0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHdzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGxvZygnV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkJywgJ2luZm8nLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB3c3M7XG59O1xuXG5jb25zdCBsb2FkRW52RmlsZSA9IChlbnZQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgY29uc3QgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmKCFleGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudkNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZW52UGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGVudkNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG5cbiAgICAgIC8vIFNraXAgZW1wdHkgbGluZXMgYW5kIGNvbW1lbnRzXG4gICAgICBpZighdHJpbW1lZExpbmUgfHwgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBLRVk9dmFsdWUgZm9ybWF0XG4gICAgICBjb25zdCBlcXVhbEluZGV4ID0gdHJpbW1lZExpbmUuaW5kZXhPZignPScpO1xuICAgICAgaWYoZXF1YWxJbmRleCA+IDApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdHJpbW1lZExpbmUuc3Vic3RyaW5nKDAsIGVxdWFsSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0cmltbWVkTGluZS5zdWJzdHJpbmcoZXF1YWxJbmRleCArIDEpLnRyaW0oKTtcblxuICAgICAgICAvLyBSZW1vdmUgcXVvdGVzIGlmIHByZXNlbnRcbiAgICAgICAgY29uc3QgY2xlYW5WYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgJycpO1xuXG4gICAgICAgIGlmKGtleSkge1xuICAgICAgICAgIGVudlZhcnNba2V5XSA9IGNsZWFuVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFdhcm5pbmc6IENvdWxkIG5vdCBsb2FkIC5lbnYgZmlsZSBhdCAke2VudlBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gZW52VmFycztcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJ2ZXJsZXNzID0gYXN5bmMgKFxuICBjbWQ6IFNlcnZlcmxlc3NPcHRpb25zLFxuICBjYWxsYmFjazogU2VydmVybGVzc0NhbGxiYWNrID0gKCkgPT4gKHt9KVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBob3N0OiBjbGlIb3N0LFxuICAgIGh0dHBQb3J0OiBjbGlIdHRwUG9ydCxcbiAgICBodHRwc1BvcnQ6IGNsaUh0dHBzUG9ydCxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIHJlbW92ZSA9IGZhbHNlLFxuICAgIHRlc3QgPSBmYWxzZSxcbiAgICB1c2VQdWJsaWNJcCxcbiAgICB2YXJpYWJsZXMsXG4gICAgd3NQb3J0OiBjbGlXc1BvcnRcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IHN0YXJ0aW5nIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRofSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSAuZW52IGZpbGVzXG4gIGNvbnN0IGVudlBhdGhzID0gW1xuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52JyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYubG9jYWwnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudi5kZXZlbG9wbWVudCcpXG4gIF07XG5cbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvLyBMb2FkIGZyb20gLmVudiBmaWxlcyBpbiBvcmRlciAobGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzKVxuICBmb3IoY29uc3QgZW52UGF0aCBvZiBlbnZQYXRocykge1xuICAgIGNvbnN0IGZpbGVFbnZWYXJzID0gbG9hZEVudkZpbGUoZW52UGF0aCk7XG4gICAgaWYoT2JqZWN0LmtleXMoZmlsZUVudlZhcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZyhgTG9hZGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tOiAke2VudlBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGVudlZhcnMgPSB7Li4uZW52VmFycywgLi4uZmlsZUVudlZhcnN9O1xuICB9XG5cbiAgLy8gU3RhcnQgd2l0aCBkZWZhdWx0IE5PREVfRU5WIGFuZCBsb2FkZWQgLmVudiB2YXJpYWJsZXNcbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnLCAuLi5lbnZWYXJzfTtcblxuICAvLyBPdmVycmlkZSB3aXRoIGNvbW1hbmQgbGluZSB2YXJpYWJsZXMgaWYgcHJvdmlkZWRcbiAgaWYodmFyaWFibGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaVZhcnMgPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgICB2YXJpYWJsZXNPYmogPSB7Li4udmFyaWFibGVzT2JqLCAuLi5jbGlWYXJzfTtcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgLy8gSWYgaW4gdGVzdCBtb2RlLCBleGl0IGVhcmx5IGFmdGVyIGxvYWRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIGlmKHRlc3QpIHtcbiAgICBsb2coJ1Rlc3QgbW9kZTogRW52aXJvbm1lbnQgdmFyaWFibGVzIGxvYWRlZCwgZXhpdGluZycsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQ2xlYW5pbmcgb3V0cHV0IGRpcmVjdG9yeS4uLicpO1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dEZ1bGxQYXRoIHx8ICcnKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIG91dHB1dCBkaXJlY3RvcnkhJyk7XG4gIH1cblxuICAvLyBMb2FkIHNlcnZlcmxlc3MgY29uZmlndXJhdGlvblxuICBsZXQgc2VydmVybGVzc0NvbmZpZzogU2VydmVybGVzc0NvbmZpZyA9IHt9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIGdldFBhY2thZ2VEaXIgdG8gaGFuZGxlIG5wbSB3b3Jrc3BhY2VzIGNvcnJlY3RseVxuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICAvLyBUcnkgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9ybWF0c1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBjb25maWcgPyBbY29uZmlnXSA6IFtcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcuanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yKGNvbnN0IGNhbmRpZGF0ZVBhdGggb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgaWYoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgICBjb25maWdQYXRoID0gY2FuZGlkYXRlUGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgbG9nKGBMb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ01vZHVsZSA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgIHNlcnZlcmxlc3NDb25maWcgPSBjb25maWdNb2R1bGUuZGVmYXVsdD8uc2VydmVybGVzcyB8fCBjb25maWdNb2R1bGUuc2VydmVybGVzcyB8fCB7fTtcbiAgICAgIGxvZygnU2VydmVybGVzcyBjb25maWcgbG9hZGVkIHN1Y2Nlc3NmdWxseScsICdpbmZvJywgcXVpZXQpO1xuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKHNlcnZlcmxlc3NDb25maWcuZnVuY3Rpb25zIHx8IHt9KTtcbiAgICAgIGxvZyhgTG9hZGVkIGZ1bmN0aW9uczogJHtmdW5jdGlvbk5hbWVzLmxlbmd0aCA+IDAgPyBmdW5jdGlvbk5hbWVzLmpvaW4oJywgJykgOiAnbm9uZSd9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIC8vIERlYnVnOiBQcmludCBmdWxsIGNvbmZpZyBpZiBkZWJ1ZyBtb2RlXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYEZ1bGwgc2VydmVybGVzcyBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkoc2VydmVybGVzc0NvbmZpZywgbnVsbCwgMil9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZyhgTm8gc2VydmVybGVzcyBjb25maWcgZm91bmQuIFRyaWVkOiAke2NvbmZpZ0Zvcm1hdHMuam9pbignLCAnKX1gLCAnd2FybicsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIGxvYWRpbmcgc2VydmVybGVzcyBjb25maWc6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoZGVidWcpIHtcbiAgICAgIGxvZyhgQ29uZmlnIGVycm9yIHN0YWNrOiAke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgZXhpdCwgY29udGludWUgd2l0aCBlbXB0eSBjb25maWdcbiAgfVxuXG4gIC8vIE1lcmdlIGNvbmZpZyB3aXRoIGNvbW1hbmQgbGluZSBvcHRpb25zXG4gIC8vIERldGVybWluZSBlZmZlY3RpdmUgaG9zdC9wb3J0cyB3aXRoIGNvcnJlY3QgcHJlY2VkZW5jZTogQ0xJID4gY29uZmlnID4gZGVmYXVsdHNcbiAgY29uc3QgY29uZmlnT2ZmbGluZSA9IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIHx8IHt9O1xuICBjb25zdCBlZmZlY3RpdmVIb3N0ID0gKGNsaUhvc3QgPz8gY29uZmlnT2ZmbGluZS5ob3N0ID8/ICdsb2NhbGhvc3QnKSBhcyBzdHJpbmc7XG4gIGNvbnN0IHRvTnVtYmVyID0gKHY6IGFueSwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgaWYodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwgfHwgdiA9PT0gJycpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG5cbiAgICBjb25zdCBuID0gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IHBhcnNlSW50KFN0cmluZyh2KSk7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbiAgfTtcbiAgY29uc3QgZWZmZWN0aXZlSHR0cFBvcnQgPSB0b051bWJlcihjbGlIdHRwUG9ydCA/PyBjb25maWdPZmZsaW5lLmh0dHBQb3J0LCAzMTAwKTtcbiAgY29uc3QgZWZmZWN0aXZlSHR0cHNQb3J0ID0gdG9OdW1iZXIoY2xpSHR0cHNQb3J0ID8/IGNvbmZpZ09mZmxpbmUuaHR0cHNQb3J0LCAzMTAxKTtcbiAgY29uc3QgZWZmZWN0aXZlV3NQb3J0ID0gdG9OdW1iZXIoY2xpV3NQb3J0ID8/IGNvbmZpZ09mZmxpbmUud3NQb3J0LCAzMTAyKTtcblxuICBjb25zdCBmaW5hbENvbmZpZzogU2VydmVybGVzc0NvbmZpZyA9IHtcbiAgICAuLi5zZXJ2ZXJsZXNzQ29uZmlnLFxuICAgIGN1c3RvbToge1xuICAgICAgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc6IHtcbiAgICAgICAgY29yczogc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10/LmNvcnMgIT09IGZhbHNlLFxuICAgICAgICBob3N0OiBlZmZlY3RpdmVIb3N0LFxuICAgICAgICBodHRwUG9ydDogZWZmZWN0aXZlSHR0cFBvcnQsXG4gICAgICAgIGh0dHBzUG9ydDogZWZmZWN0aXZlSHR0cHNQb3J0LFxuICAgICAgICB3c1BvcnQ6IGVmZmVjdGl2ZVdzUG9ydFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvdXRwdXREaXIgPSBvdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcbiAgbG9nKGBVc2luZyBvdXRwdXQgZGlyZWN0b3J5OiAke291dHB1dERpcn1gLCAnaW5mbycsIHF1aWV0KTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ1N0YXJ0aW5nIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBodHRwUG9ydCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwUG9ydCE7XG4gICAgY29uc3Qgd3NQb3J0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLndzUG9ydCE7XG4gICAgY29uc3QgaG9zdCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5ob3N0ITtcblxuICAgIGxvZyhgQ3JlYXRpbmcgSFRUUCBzZXJ2ZXIgb24gJHtob3N0fToke2h0dHBQb3J0fWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhgQ3JlYXRpbmcgV2ViU29ja2V0IHNlcnZlciBvbiBwb3J0ICR7d3NQb3J0fWAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgLy8gQ3JlYXRlIEV4cHJlc3Mgc2VydmVyXG4gICAgY29uc3QgZXhwcmVzc0FwcCA9IGF3YWl0IGNyZWF0ZUV4cHJlc3NTZXJ2ZXIoXG4gICAgICBmaW5hbENvbmZpZyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgIGh0dHBQb3J0LFxuICAgICAgaG9zdCxcbiAgICAgIHF1aWV0LFxuICAgICAgZGVidWdcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIFdlYlNvY2tldCBzZXJ2ZXJcbiAgICBjb25zdCB3c1NlcnZlciA9IGNyZWF0ZVdlYlNvY2tldFNlcnZlcihcbiAgICAgIGZpbmFsQ29uZmlnLFxuICAgICAgb3V0cHV0RGlyLFxuICAgICAgd3NQb3J0LFxuICAgICAgcXVpZXQsXG4gICAgICBkZWJ1Z1xuICAgICk7XG5cbiAgICAvLyBIYW5kbGUgc2VydmVyIGVycm9yc1xuICAgIHdzU2VydmVyLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgbG9nKGBXZWJTb2NrZXQgc2VydmVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgV2ViU29ja2V0IHNlcnZlci4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgLy8gU3RhcnQgRXhwcmVzcyBzZXJ2ZXJcbiAgICBjb25zdCBzZXJ2ZXIgPSBleHByZXNzQXBwLmxpc3RlbihodHRwUG9ydCwgaG9zdCwgKCkgPT4ge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdTZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlciBzdGFydGVkLicpO1xuICAgICAgdm9pZCByZXNvbHZlUHVibGljSXBGb3JEaXNwbGF5KHVzZVB1YmxpY0lwKS50aGVuKChwdWJsaWNJcCkgPT4ge1xuICAgICAgICBkaXNwbGF5U2VydmVyU3RhdHVzKFxuICAgICAgICAgIGh0dHBQb3J0LFxuICAgICAgICAgIGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwc1BvcnQhLFxuICAgICAgICAgIHdzUG9ydCxcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHB1YmxpY0lwXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBFeHByZXNzIHNlcnZlciBlcnJvcnNcbiAgICBzZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYEV4cHJlc3Mgc2VydmVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgRXhwcmVzcyBzZXJ2ZXIuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBncmFjZWZ1bCBzaHV0ZG93blxuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4ge1xuICAgICAgbG9nKCdcXG5TaHV0dGluZyBkb3duIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHdzU2VydmVyLmNsb3NlKCk7XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgc2h1dGRvd24pO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG5cbiAgICAvLyBLZWVwIHRoZSBwcm9jZXNzIGFsaXZlXG4gICAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcblxuICAgIGxvZygnU2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcnVubmluZy4gUHJlc3MgQ3RybCtDIHRvIHN0b3AuJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBEb24ndCBjYWxsIGNhbGxiYWNrIGhlcmUsIGxldCB0aGUgcHJvY2VzcyBzdGF5IGFsaXZlXG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiYm94ZW4iLCJjaGFsayIsImV4cHJlc3MiLCJyZWFkRmlsZVN5bmMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsImhvbWVkaXIiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJqb2luIiwiaXNBYnNvbHV0ZSIsInBhdGhUb0ZpbGVVUkwiLCJXZWJTb2NrZXRTZXJ2ZXIiLCJMZXhDb25maWciLCJnZXRQYWNrYWdlRGlyIiwiY3JlYXRlU3Bpbm5lciIsInJlbW92ZUZpbGVzIiwibG9nIiwiZ2V0Q2FjaGVEaXIiLCJjYWNoZURpciIsInJlY3Vyc2l2ZSIsImdldENhY2hlUGF0aCIsInJlYWRQdWJsaWNJcENhY2hlIiwiY2FjaGVQYXRoIiwiY2FjaGVEYXRhIiwiY2FjaGUiLCJKU09OIiwicGFyc2UiLCJvbmVXZWVrTXMiLCJEYXRlIiwibm93IiwidGltZXN0YW1wIiwid3JpdGVQdWJsaWNJcENhY2hlIiwiaXAiLCJzdHJpbmdpZnkiLCJmZXRjaFB1YmxpY0lwIiwiZm9yY2VSZWZyZXNoIiwiUHJvbWlzZSIsImNhY2hlZCIsImZldGNoIiwidGhlbiIsInJlcyIsInRleHQiLCJkYXRhIiwidHJpbSIsImNhdGNoIiwidW5kZWZpbmVkIiwicmVzb2x2ZVB1YmxpY0lwRm9yRGlzcGxheSIsInRpbWVvdXRNcyIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJkaXNwbGF5U2VydmVyU3RhdHVzIiwiaHR0cFBvcnQiLCJodHRwc1BvcnQiLCJ3c1BvcnQiLCJob3N0IiwicXVpZXQiLCJwdWJsaWNJcCIsImh0dHBVcmwiLCJodHRwc1VybCIsIndzVXJsIiwid3NzVXJsIiwidXJsTGluZXMiLCJncmVlbiIsInVuZGVybGluZSIsInN0YXR1c0JveCIsImN5YW4iLCJib2xkIiwieWVsbG93IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJTdHlsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJjb25zb2xlIiwibG9hZEhhbmRsZXIiLCJoYW5kbGVyUGF0aCIsIm91dHB1dERpciIsImhhbmRsZXJQYXJ0cyIsInNwbGl0IiwiZmlsZVBhdGgiLCJleHBvcnROYW1lIiwibGVuZ3RoIiwic2xpY2UiLCJpbmNsdWRlcyIsImVycm9yIiwicGF0aFBhcnRzIiwibGFzdFBhcnQiLCJmdWxsUGF0aCIsImV4dGVuc2lvbnMiLCJwYXRoV2l0aG91dEV4dCIsInJlcGxhY2UiLCJleHQiLCJjYW5kaWRhdGVQYXRoIiwiRXJyb3IiLCJpbXBvcnRQYXRoIiwiZW5kc1dpdGgiLCJpbXBvcnRVcmwiLCJocmVmIiwiaGFuZGxlck1vZHVsZSIsIk9iamVjdCIsImtleXMiLCJoYW5kbGVyIiwiZGVmYXVsdCIsImltcG9ydEVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiY2FwdHVyZUNvbnNvbGVMb2dzIiwiZXZlbnQiLCJjb250ZXh0Iiwib3JpZ2luYWxDb25zb2xlTG9nIiwib3JpZ2luYWxDb25zb2xlRXJyb3IiLCJvcmlnaW5hbENvbnNvbGVXYXJuIiwid2FybiIsIm9yaWdpbmFsQ29uc29sZUluZm8iLCJpbmZvIiwibG9ncyIsImFyZ3MiLCJwdXNoIiwicmVzdWx0IiwiZ3JheSIsImZvckVhY2giLCJjcmVhdGVFeHByZXNzU2VydmVyIiwiY29uZmlnIiwiZGVidWciLCJhcHAiLCJ1c2UiLCJyZXEiLCJuZXh0IiwiaGVhZGVyIiwibWV0aG9kIiwic2VuZFN0YXR1cyIsImpzb24iLCJsb2FkR3JhcGhRTFNjaGVtYSIsImdyYXBocWxIYW5kbGVyIiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25OYW1lIiwiZnVuY3Rpb25Db25maWciLCJlbnRyaWVzIiwiZXZlbnRzIiwiaHR0cCIsInBhdGgiLCJncmFwaHFsUGF0aCIsIl9mdW5jdGlvbk5hbWUiLCJib2R5IiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJvcGVyYXRpb25OYW1lIiwibG9nTWVzc2FnZSIsIm1hcCIsImFyZyIsIlN0cmluZyIsImF3c1JlcXVlc3RJZCIsImZ1bmN0aW9uVmVyc2lvbiIsImdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcyIsImludm9rZWRGdW5jdGlvbkFybiIsImxvZ0dyb3VwTmFtZSIsImxvZ1N0cmVhbU5hbWUiLCJ3cmFwcGVkSGFuZGxlciIsImhlYWRlcnMiLCJodHRwTWV0aG9kIiwicXVlcnlTdHJpbmdQYXJhbWV0ZXJzIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsImtleSIsInZhbHVlIiwic2V0SGVhZGVyIiwic2VuZCIsInVybCIsInBhdGhuYW1lIiwibWF0Y2hlZEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lcyIsImV2ZW50UGF0aCIsImV2ZW50TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0TWV0aG9kIiwibm9ybWFsaXplZEV2ZW50UGF0aCIsIm5vcm1hbGl6ZWRQYXRobmFtZSIsIm1lbW9yeUxpbWl0SW5NQiIsImNyZWF0ZVdlYlNvY2tldFNlcnZlciIsIndzcyIsInBvcnQiLCJvbiIsIndzIiwidG9TdHJpbmciLCJ3ZWJzb2NrZXQiLCJyb3V0ZSIsImFjdGlvbiIsInJlcXVlc3RDb250ZXh0IiwiYXBpR2F0ZXdheSIsImVuZHBvaW50IiwiY29ubmVjdGlvbklkIiwicm91dGVLZXkiLCJsb2FkRW52RmlsZSIsImVudlBhdGgiLCJlbnZWYXJzIiwiZW52Q29udGVudCIsImxpbmVzIiwibGluZSIsInRyaW1tZWRMaW5lIiwic3RhcnRzV2l0aCIsImVxdWFsSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiY2xlYW5WYWx1ZSIsInNlcnZlcmxlc3MiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjbGlIb3N0IiwiY2xpSHR0cFBvcnQiLCJjbGlIdHRwc1BvcnQiLCJyZW1vdmUiLCJ0ZXN0IiwidXNlUHVibGljSXAiLCJjbGlXc1BvcnQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsImVudlBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImZpbGVFbnZWYXJzIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJjbGlWYXJzIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJzdWNjZWVkIiwic2VydmVybGVzc0NvbmZpZyIsInBhY2thZ2VEaXIiLCJjb25maWdGb3JtYXRzIiwiY29uZmlnUGF0aCIsImNvbmZpZ01vZHVsZSIsImNvbmZpZ09mZmxpbmUiLCJjdXN0b20iLCJlZmZlY3RpdmVIb3N0IiwidG9OdW1iZXIiLCJ2IiwiZmFsbGJhY2siLCJuIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImVmZmVjdGl2ZUh0dHBQb3J0IiwiZWZmZWN0aXZlSHR0cHNQb3J0IiwiZWZmZWN0aXZlV3NQb3J0IiwiZmluYWxDb25maWciLCJjb3JzIiwiZXhwcmVzc0FwcCIsIndzU2VydmVyIiwiZmFpbCIsInNlcnZlciIsImxpc3RlbiIsInNodXRkb3duIiwiY2xvc2UiLCJzdGRpbiIsInJlc3VtZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBUUMsWUFBWSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDdEUsU0FBUUMsT0FBTyxRQUFPLEtBQUs7QUFDM0IsU0FBUUMsV0FBV0MsV0FBVyxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsUUFBTyxPQUFPO0FBQzlELFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBQ2xDLFNBQVFDLGVBQWUsUUFBTyxLQUFLO0FBRW5DLFNBQVFDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUM1RCxTQUFRQyxhQUFhLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7QUFDOUQsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtB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
|
|
836
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3BhdGhUb0ZpbGVVUkx9IGZyb20gJ3VybCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBQdWJsaWNJcENhY2hlIHtcbiAgaXA6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTZXJ2ZXJsZXNzSGFuZGxlciB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnRzPzogQXJyYXk8e1xuICAgIHJlYWRvbmx5IGh0dHA/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gICAgfTtcbiAgICByZWFkb25seSB3ZWJzb2NrZXQ/OiB7XG4gICAgICByZWFkb25seSByb3V0ZT86IHN0cmluZztcbiAgICB9O1xuICB9Pjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NDb25maWcge1xuICByZWFkb25seSBjdXN0b20/OiB7XG4gICAgcmVhZG9ubHkgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG4gICAgICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGh0dHBzUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IHdzUG9ydD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZWFkb25seSBmdW5jdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJ2ZXJsZXNzSGFuZGxlcj47XG59XG5cbmludGVyZmFjZSBXZWJTb2NrZXRDbGllbnRMaWtlIHtcbiAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gIHNlbmQoZGF0YTogc3RyaW5nKTogdm9pZDtcbn1cblxuY29uc3QgZ2V0Q2FjaGVEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5sZXgtY2FjaGUnKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgbWtkaXJTeW5jKGNhY2hlRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRGlyO1xufTtcblxuY29uc3QgZ2V0Q2FjaGVQYXRoID0gKCk6IHN0cmluZyA9PiBqb2luKGdldENhY2hlRGlyKCksICdwdWJsaWMtaXAuanNvbicpO1xuXG5jb25zdCByZWFkUHVibGljSXBDYWNoZSA9ICgpOiBQdWJsaWNJcENhY2hlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBpZighZXhpc3RzU3luYyhjYWNoZVBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHJlYWRGaWxlU3luYyhjYWNoZVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgY2FjaGU6IFB1YmxpY0lwQ2FjaGUgPSBKU09OLnBhcnNlKGNhY2hlRGF0YSk7XG5cbiAgICAvLyBDaGVjayBpZiBjYWNoZSBpcyBvbGRlciB0aGFuIDEgd2Vla1xuICAgIGNvbnN0IG9uZVdlZWtNcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgIGlmKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiBvbmVXZWVrTXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZTtcbiAgfSBjYXRjaHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgd3JpdGVQdWJsaWNJcENhY2hlID0gKGlwOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgY2FjaGVQYXRoID0gZ2V0Q2FjaGVQYXRoKCk7XG4gIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0ge1xuICAgIGlwLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICB9O1xuICB3cml0ZUZpbGVTeW5jKGNhY2hlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2FjaGUsIG51bGwsIDIpKTtcbn07XG5cbmNvbnN0IGZldGNoUHVibGljSXAgPSAoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgaWYoIWZvcmNlUmVmcmVzaCkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHJlYWRQdWJsaWNJcENhY2hlKCk7XG4gICAgaWYoY2FjaGVkKSB7XG4gICAgICByZXNvbHZlKGNhY2hlZC5pcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIGZldGNoIGluc3RlYWQgb2YgaHR0cHNcbiAgZmV0Y2goJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZycpXG4gICAgLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaXAgPSBkYXRhLnRyaW0oKTtcbiAgICAgIGlmKGlwKSB7XG4gICAgICAgIHdyaXRlUHVibGljSXBDYWNoZShpcCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGlwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpO1xufSk7XG5cbmNvbnN0IHJlc29sdmVQdWJsaWNJcEZvckRpc3BsYXkgPSBhc3luYyAoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSAxNTAwO1xuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHVuZGVmaW5lZD4oKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodW5kZWZpbmVkKSwgdGltZW91dE1zKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFtmZXRjaFB1YmxpY0lwKGZvcmNlUmVmcmVzaCksIHRpbWVvdXRQcm9taXNlXSk7XG4gIH0gY2F0Y2h7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuY29uc3QgZGlzcGxheVNlcnZlclN0YXR1cyA9IChcbiAgaHR0cFBvcnQ6IG51bWJlcixcbiAgaHR0cHNQb3J0OiBudW1iZXIsXG4gIHdzUG9ydDogbnVtYmVyLFxuICBob3N0OiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuLFxuICBwdWJsaWNJcD86IHN0cmluZ1xuKSA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaHR0cFVybCA9IGBodHRwOi8vJHtob3N0fToke2h0dHBQb3J0fWA7XG4gIGNvbnN0IGh0dHBzVXJsID0gYGh0dHBzOi8vJHtob3N0fToke2h0dHBzUG9ydH1gO1xuICBjb25zdCB3c1VybCA9IGB3czovLyR7aG9zdH06JHt3c1BvcnR9YDtcbiAgY29uc3Qgd3NzVXJsID0gYHdzczovLyR7aG9zdH06JHt3c1BvcnR9YDtcblxuICBsZXQgdXJsTGluZXMgPSBgJHtjaGFsay5ncmVlbignSFRUUDonKX0gICAgICAke2NoYWxrLnVuZGVybGluZShodHRwVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignSFRUUFM6Jyl9ICAgICAke2NoYWxrLnVuZGVybGluZShodHRwc1VybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ1dlYlNvY2tldDonKX0gJHtjaGFsay51bmRlcmxpbmUod3NVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXU1M6Jyl9ICAgICAgICR7Y2hhbGsudW5kZXJsaW5lKHdzc1VybCl9XFxuYDtcblxuICBpZihwdWJsaWNJcCkge1xuICAgIHVybExpbmVzICs9IGBcXG4ke2NoYWxrLmdyZWVuKCdQdWJsaWM6Jyl9ICAgICR7Y2hhbGsudW5kZXJsaW5lKGBodHRwOi8vJHtwdWJsaWNJcH06JHtodHRwUG9ydH1gKX1cXG5gO1xuICB9XG5cbiAgY29uc3Qgc3RhdHVzQm94ID0gYm94ZW4oXG4gICAgYCR7Y2hhbGsuY3lhbi5ib2xkKCfwn5qAIFNlcnZlcmxlc3MgRGV2ZWxvcG1lbnQgU2VydmVyIFJ1bm5pbmcnKX1cXG5cXG4ke3VybExpbmVzfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUHJlc3MgQ3RybCtDIHRvIHN0b3AgdGhlIHNlcnZlcicpfWAsXG4gICAge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYScsXG4gICAgICBib3JkZXJDb2xvcjogJ2N5YW4nLFxuICAgICAgYm9yZGVyU3R5bGU6ICdyb3VuZCcsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBwYWRkaW5nOiAxXG4gICAgfVxuICApO1xuXG4gIGNvbnNvbGUubG9nKGBcXG4ke3N0YXR1c0JveH1cXG5gKTtcbn07XG5cbmNvbnN0IGxvYWRIYW5kbGVyID0gYXN5bmMgKGhhbmRsZXJQYXRoOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBQYXJzaW5nIGhhbmRsZXIgcGF0aDogJHtoYW5kbGVyUGF0aH1gKTtcblxuICAgIC8vIFBhcnNlIEFXUyBMYW1iZGEgaGFuZGxlciBmb3JtYXQ6IFwicGF0aC90by9maWxlLmV4cG9ydE5hbWVcIiBvciBcImZpbGUuZXhwb3J0TmFtZVwiXG4gICAgLy8gRXhhbXBsZXM6IFwiaW5kZXguaGFuZGxlclwiLCBcImhhbmRsZXJzL2FwaS5oYW5kbGVyXCIsIFwic3JjL2luZGV4LmRlZmF1bHRcIlxuICAgIGNvbnN0IGhhbmRsZXJQYXJ0cyA9IGhhbmRsZXJQYXRoLnNwbGl0KCcuJyk7XG4gICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIHBhcnRzIGFmdGVyIHNwbGl0OicsIGhhbmRsZXJQYXJ0cyk7XG5cbiAgICBsZXQgZmlsZVBhdGg6IHN0cmluZztcbiAgICBsZXQgZXhwb3J0TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZihoYW5kbGVyUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gQVdTIExhbWJkYSBmb3JtYXQ6IFwiZmlsZS5leHBvcnROYW1lXCJcbiAgICAgIC8vIFRha2UgdGhlIGxhc3QgcGFydCBhcyBleHBvcnQgbmFtZSwgcmVzdCBhcyBmaWxlIHBhdGhcbiAgICAgIC8vIEhhbmRsZSBjYXNlcyBsaWtlIFwiaW5kZXguaGFuZGxlclwiIC0+IGZpbGU6IFwiaW5kZXhcIiwgZXhwb3J0OiBcImhhbmRsZXJcIlxuICAgICAgLy8gT3IgXCJoYW5kbGVycy9hcGkuaGFuZGxlclwiIC0+IGZpbGU6IFwiaGFuZGxlcnMvYXBpXCIsIGV4cG9ydDogXCJoYW5kbGVyXCJcbiAgICAgIGV4cG9ydE5hbWUgPSBoYW5kbGVyUGFydHNbaGFuZGxlclBhcnRzLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgICBmaWxlUGF0aCA9IGhhbmRsZXJQYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLicpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBQYXJzZWQgQVdTIExhbWJkYSBmb3JtYXQgLSBmaWxlUGF0aDogXCIke2ZpbGVQYXRofVwiLCBleHBvcnROYW1lOiBcIiR7ZXhwb3J0TmFtZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW1wbGUgZm9ybWF0OiBqdXN0IHRoZSBmaWxlIHBhdGhcbiAgICAgIGZpbGVQYXRoID0gaGFuZGxlclBhdGg7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIFNpbXBsZSBmb3JtYXQgLSBmaWxlUGF0aDogXCIke2ZpbGVQYXRofVwiYCk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGZpbGVQYXRoIGRvZXNuJ3QgaGF2ZSB0aGUgZXhwb3J0IG5hbWUgaW4gaXRcbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnLmhhbmRsZXInKSB8fCBmaWxlUGF0aC5pbmNsdWRlcygnLmRlZmF1bHQnKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIFdBUk5JTkc6IGZpbGVQYXRoIHN0aWxsIGNvbnRhaW5zIGV4cG9ydCBuYW1lISBmaWxlUGF0aDogXCIke2ZpbGVQYXRofVwiYCk7XG4gICAgICAvLyBUcnkgdG8gZml4IGl0IC0gcmVtb3ZlIHRoZSBsYXN0IHBhcnQgaWYgaXQgbG9va3MgbGlrZSBhbiBleHBvcnQgbmFtZVxuICAgICAgY29uc3QgcGF0aFBhcnRzID0gZmlsZVBhdGguc3BsaXQoJy4nKTtcbiAgICAgIGlmKHBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3RQYXJ0ID0gcGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYoWydoYW5kbGVyJywgJ2RlZmF1bHQnLCAnaW5kZXgnXS5pbmNsdWRlcyhsYXN0UGFydCkgJiYgIWV4cG9ydE5hbWUpIHtcbiAgICAgICAgICBleHBvcnROYW1lID0gbGFzdFBhcnQ7XG4gICAgICAgICAgZmlsZVBhdGggPSBwYXRoUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpeGVkIC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cIiwgZXhwb3J0TmFtZTogXCIke2V4cG9ydE5hbWV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBib3RoIHJlbGF0aXZlIHBhdGhzIGFuZCBhYnNvbHV0ZSBwYXRoc1xuICAgIGxldCBmdWxsUGF0aDogc3RyaW5nO1xuICAgIGlmKGlzQWJzb2x1dGUoZmlsZVBhdGgpKSB7XG4gICAgICBmdWxsUGF0aCA9IGZpbGVQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxsUGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgZmlsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIFJlc29sdmVkIGZ1bGxQYXRoIChiZWZvcmUgZXh0ZW5zaW9ucyk6ICR7ZnVsbFBhdGh9YCk7XG5cbiAgICAvLyBUcnkgZGlmZmVyZW50IGV4dGVuc2lvbnMgaWYgZmlsZSBkb2Vzbid0IGV4aXN0XG4gICAgaWYoIWV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgICBjb25zdCBleHRlbnNpb25zID0gWycuanMnLCAnLm1qcycsICcuY2pzJ107XG4gICAgICBjb25zdCBwYXRoV2l0aG91dEV4dCA9IGZ1bGxQYXRoLnJlcGxhY2UoL1xcLihqc3xtanN8Y2pzKSQvLCAnJyk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIFRyeWluZyBleHRlbnNpb25zLiBCYXNlIHBhdGg6ICR7cGF0aFdpdGhvdXRFeHR9YCk7XG4gICAgICBmb3IoY29uc3QgZXh0IG9mIGV4dGVuc2lvbnMpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlUGF0aCA9IHBhdGhXaXRob3V0RXh0ICsgZXh0O1xuICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIENoZWNraW5nOiAke2NhbmRpZGF0ZVBhdGh9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKX0pYCk7XG4gICAgICAgIGlmKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgICAgICBmdWxsUGF0aCA9IGNhbmRpZGF0ZVBhdGg7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGb3VuZCBmaWxlIHdpdGggZXh0ZW5zaW9uOiAke2Z1bGxQYXRofWApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmlsZSBleGlzdHMgd2l0aG91dCB0cnlpbmcgZXh0ZW5zaW9uczogJHtmdWxsUGF0aH1gKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbmFsIGZ1bGxQYXRoOiAke2Z1bGxQYXRofWApO1xuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRXhwb3J0IG5hbWU6ICR7ZXhwb3J0TmFtZSB8fCAnZGVmYXVsdC9oYW5kbGVyJ31gKTtcbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbGUgZXhpc3RzOiAke2V4aXN0c1N5bmMoZnVsbFBhdGgpfWApO1xuXG4gICAgaWYoIWV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBmaWxlIG5vdCBmb3VuZDogJHtmdWxsUGF0aH1gKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBPdXRwdXQgZGlyZWN0b3J5OiAke291dHB1dERpcn1gKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIHBhdGggZnJvbSBjb25maWc6ICR7aGFuZGxlclBhdGh9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhhbmRsZXIgZmlsZSBub3QgZm91bmQ6ICR7ZnVsbFBhdGh9YCk7XG4gICAgfVxuXG4gICAgLy8gRHluYW1pYyBpbXBvcnQgb2YgdGhlIGhhbmRsZXIgd2l0aCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICAvLyBBZGQgLmpzIGV4dGVuc2lvbiBpZiBpbXBvcnRpbmcgVHlwZVNjcmlwdCBjb21waWxlZCBvdXRwdXRcbiAgICBjb25zdCBpbXBvcnRQYXRoID0gZnVsbFBhdGguZW5kc1dpdGgoJy50cycpID8gZnVsbFBhdGgucmVwbGFjZSgvXFwudHMkLywgJy5qcycpIDogZnVsbFBhdGg7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29udmVydCB0byBmaWxlOi8vIFVSTCBmb3IgRVMgbW9kdWxlIGltcG9ydHMgKHJlcXVpcmVkIGZvciBhYnNvbHV0ZSBwYXRocylcbiAgICAgIC8vIFVzZSBwYXRoVG9GaWxlVVJMIHRvIGVuc3VyZSBwcm9wZXIgZmlsZTovLyBVUkwgZm9ybWF0XG4gICAgICBjb25zdCBpbXBvcnRVcmwgPSBwYXRoVG9GaWxlVVJMKGltcG9ydFBhdGgpLmhyZWY7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEltcG9ydGluZyBoYW5kbGVyIGZyb206ICR7aW1wb3J0VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIHBhdGg6ICR7aW1wb3J0UGF0aH1gKTtcblxuICAgICAgLy8gVXNlIGltcG9ydCgpIHdpdGggdGhlIGZpbGUgVVJMXG4gICAgICAvLyBOb3RlOiBJZiB0aGUgaGFuZGxlciBmaWxlIGhhcyBpbXBvcnQgZXJyb3JzIChsaWtlIG1pc3NpbmcgZGVwZW5kZW5jaWVzKSxcbiAgICAgIC8vIHRob3NlIHdpbGwgc3VyZmFjZSBoZXJlLCBidXQgdGhhdCdzIGEgaGFuZGxlciBjb2RlIGlzc3VlLCBub3QgYSBsb2FkZXIgaXNzdWVcbiAgICAgIGNvbnN0IGhhbmRsZXJNb2R1bGUgPSBhd2FpdCBpbXBvcnQoaW1wb3J0VXJsKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gSGFuZGxlciBtb2R1bGUgbG9hZGVkIHN1Y2Nlc3NmdWxseS4gRXhwb3J0czogJHtPYmplY3Qua2V5cyhoYW5kbGVyTW9kdWxlKS5qb2luKCcsICcpfWApO1xuXG4gICAgICAvLyBHZXQgdGhlIGhhbmRsZXIgYmFzZWQgb24gZXhwb3J0IG5hbWUgb3IgdHJ5IGRlZmF1bHRzXG4gICAgICBsZXQgaGFuZGxlcjogYW55O1xuICAgICAgaWYoZXhwb3J0TmFtZSkge1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlck1vZHVsZVtleHBvcnROYW1lXTtcbiAgICAgICAgaWYoIWhhbmRsZXIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gRXhwb3J0IFwiJHtleHBvcnROYW1lfVwiIG5vdCBmb3VuZCBpbiBtb2R1bGUuIEF2YWlsYWJsZSBleHBvcnRzOiAke09iamVjdC5rZXlzKGhhbmRsZXJNb2R1bGUpLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRyeSBkZWZhdWx0LCBoYW5kbGVyLCBvciB0aGUgbW9kdWxlIGl0c2VsZlxuICAgICAgICBoYW5kbGVyID0gaGFuZGxlck1vZHVsZS5kZWZhdWx0IHx8IGhhbmRsZXJNb2R1bGUuaGFuZGxlciB8fCBoYW5kbGVyTW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZm91bmQ6ICR7dHlwZW9mIGhhbmRsZXJ9LCBpc0Z1bmN0aW9uOiAke3R5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nfWApO1xuXG4gICAgICBpZih0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBpcyBub3QgYSBmdW5jdGlvbi4gVHlwZTogJHt0eXBlb2YgaGFuZGxlcn0sIFZhbHVlOmAsIGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhhbmRsZXI7XG4gICAgfSBjYXRjaChpbXBvcnRFcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSW1wb3J0IGVycm9yIGZvciBoYW5kbGVyICR7aGFuZGxlclBhdGh9OmAsIGltcG9ydEVycm9yLm1lc3NhZ2UpO1xuICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEltcG9ydCBlcnJvciBzdGFjazonLCBpbXBvcnRFcnJvci5zdGFjayk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBkZXBlbmRlbmN5IHJlc29sdXRpb24gZXJyb3IgKGNvbW1vbiB3aXRoIEVTIG1vZHVsZXMpXG4gICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlICYmIGltcG9ydEVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0Nhbm5vdCBmaW5kIG1vZHVsZScpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBUaGlzIGFwcGVhcnMgdG8gYmUgYSBkZXBlbmRlbmN5IHJlc29sdXRpb24gZXJyb3IuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBUaGUgaGFuZGxlciBmaWxlIGV4aXN0cywgYnV0IG9uZSBvZiBpdHMgaW1wb3J0cyBpcyBmYWlsaW5nLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gQ2hlY2sgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGluIHRoZSBoYW5kbGVyIGZpbGUgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZmlsZTogJHtpbXBvcnRQYXRofWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gTWFrZSBzdXJlIHRoZSBoYW5kbGVyIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFyZSBjb21waWxlZCBjb3JyZWN0bHkuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEVycm9yIGxvYWRpbmcgaGFuZGxlciAke2hhbmRsZXJQYXRofTpgLCBlcnJvci5tZXNzYWdlKTtcbiAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gRXJyb3Igc3RhY2s6JywgZXJyb3Iuc3RhY2spO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBjYXB0dXJlQ29uc29sZUxvZ3MgPSAoaGFuZGxlcjogKGV2ZW50OiBhbnksIGNvbnRleHQ6IGFueSkgPT4gUHJvbWlzZTxhbnk+LCBxdWlldDogYm9vbGVhbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG5cbiAgcmV0dXJuIGFzeW5jIChldmVudDogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcbiAgICAvLyBDYXB0dXJlIGNvbnNvbGUubG9nLCBjb25zb2xlLmVycm9yLCBldGMuXG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTG9nID0gY29uc29sZS5sb2c7XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZVdhcm4gPSBjb25zb2xlLndhcm47XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlSW5mbyA9IGNvbnNvbGUuaW5mbztcblxuICAgIGNvbnN0IGxvZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbTE9HXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlTG9nKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtFUlJPUl0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUVycm9yKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLndhcm4gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW1dBUk5dICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVXYXJuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLmluZm8gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0lORk9dICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVJbmZvKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihldmVudCwgY29udGV4dCk7XG5cbiAgICAgIC8vIE91dHB1dCBjYXB0dXJlZCBsb2dzXG4gICAgICBpZihsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnLS0tIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgICBsb2dzLmZvckVhY2goKGxvZykgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheShsb2cpKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBFbmQgSGFuZGxlciBDb25zb2xlIE91dHB1dCAtLS0nKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgY29uc29sZSBtZXRob2RzXG4gICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcbiAgICAgIGNvbnNvbGUuZXJyb3IgPSBvcmlnaW5hbENvbnNvbGVFcnJvcjtcbiAgICAgIGNvbnNvbGUud2FybiA9IG9yaWdpbmFsQ29uc29sZVdhcm47XG4gICAgICBjb25zb2xlLmluZm8gPSBvcmlnaW5hbENvbnNvbGVJbmZvO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZUV4cHJlc3NTZXJ2ZXIgPSBhc3luYyAoXG4gIGNvbmZpZzogU2VydmVybGVzc0NvbmZpZyxcbiAgb3V0cHV0RGlyOiBzdHJpbmcsXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGhvc3Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuXG4gIC8vIEVuYWJsZSBDT1JTXG4gIGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCwgUE9TVCwgUFVULCBERUxFVEUsIFBBVENILCBPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLCAndHJ1ZScpO1xuXG4gICAgaWYocmVxLm1ldGhvZCA9PT0gJ09QVElPTlMnKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZSBKU09OIGJvZGllc1xuICBhcHAudXNlKGV4cHJlc3MuanNvbigpKTtcblxuICAvLyBMb2FkIEdyYXBoUUwgaGFuZGxlclxuICBjb25zdCBsb2FkR3JhcGhRTFNjaGVtYSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBHcmFwaFFMIGhhbmRsZXJcbiAgICAgIGxldCBncmFwaHFsSGFuZGxlciA9IG51bGw7XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudC5odHRwICYmIGV2ZW50Lmh0dHAucGF0aCkge1xuICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIEdyYXBoUUwgZW5kcG9pbnRzXG4gICAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cC5wYXRoID09PSAnL3B1YmxpYycgfHwgZXZlbnQuaHR0cC5wYXRoID09PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICAgICAgICBncmFwaHFsSGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGZ1bmN0aW9uQ29uZmlnLmhhbmRsZXIsIG91dHB1dERpcik7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihncmFwaHFsSGFuZGxlcikge1xuICAgICAgICBsb2coJ0ZvdW5kIEdyYXBoUUwgaGFuZGxlcicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICByZXR1cm4gZ3JhcGhxbEhhbmRsZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYEVycm9yIGxvYWRpbmcgR3JhcGhRTCBoYW5kbGVyOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNldCB1cCBHcmFwaFFMIGhhbmRsZXIgZm9yIEdyYXBoUUwgcmVxdWVzdHNcbiAgdHJ5IHtcbiAgICBjb25zdCBncmFwaHFsSGFuZGxlciA9IGF3YWl0IGxvYWRHcmFwaFFMU2NoZW1hKCk7XG4gICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgIC8vIEZpbmQgdGhlIEdyYXBoUUwgcGF0aCBmcm9tIHRoZSBzZXJ2ZXJsZXNzIGNvbmZpZ1xuICAgICAgbGV0IGdyYXBocWxQYXRoID0gJy9ncmFwaHFsJzsgLy8gZGVmYXVsdCBmYWxsYmFja1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbX2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Py5odHRwPy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhxbFBhdGggPSBldmVudC5odHRwLnBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZ3JhcGhxbFBhdGggIT09ICcvZ3JhcGhxbCcpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdXAgR3JhcGhRTCBlbmRwb2ludCB3aXRoIGVuaGFuY2VkIGNvbnNvbGUubG9nIGNhcHR1cmVcbiAgICAgIGFwcC51c2UoZ3JhcGhxbFBhdGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICAvLyBHcmFwaFFMIERlYnVnIExvZ2dpbmdcbiAgICAgICAgaWYoZGVidWcgJiYgcmVxLmJvZHkgJiYgcmVxLmJvZHkucXVlcnkpIHtcbiAgICAgICAgICBsb2coJ/CflI0gR3JhcGhRTCBEZWJ1ZyBNb2RlOiBBbmFseXppbmcgcmVxdWVzdC4uLicsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIGxvZyhg8J+TnSBHcmFwaFFMIFF1ZXJ5OiAke3JlcS5ib2R5LnF1ZXJ5fWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIGlmKHJlcS5ib2R5LnZhcmlhYmxlcykge1xuICAgICAgICAgICAgbG9nKGDwn5OKIEdyYXBoUUwgVmFyaWFibGVzOiAke0pTT04uc3RyaW5naWZ5KHJlcS5ib2R5LnZhcmlhYmxlcywgbnVsbCwgMil9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlcS5ib2R5Lm9wZXJhdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGxvZyhg8J+Pt++4jyAgR3JhcGhRTCBPcGVyYXRpb246ICR7cmVxLmJvZHkub3BlcmF0aW9uTmFtZX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dNZXNzYWdlID0gYXJncy5tYXAoKGFyZykgPT5cbiAgICAgICAgICAgICh0eXBlb2YgYXJnID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgMikgOiBTdHJpbmcoYXJnKSlcbiAgICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgICBsb2dzLnB1c2gobG9nTWVzc2FnZSk7XG4gICAgICAgICAgb3JpZ2luYWxDb25zb2xlTG9nKGBbR3JhcGhRTF0gJHtsb2dNZXNzYWdlfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENyZWF0ZSBjb250ZXh0IGZvciB0aGUgaGFuZGxlclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiAnZ3JhcGhxbCcsXG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOmdyYXBocWwnLFxuICAgICAgICAgIGxvZ0dyb3VwTmFtZTogJy9hd3MvbGFtYmRhL2dyYXBocWwnLFxuICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICByZXNcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcmFwIGhhbmRsZXIgd2l0aCBjb25zb2xlIGxvZyBjYXB0dXJlXG4gICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGdyYXBocWxIYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSBoYW5kbGVyIHdpdGggR3JhcGhRTCBwYXJhbWV0ZXJzXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoe1xuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxLmJvZHkpLFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBwYXRoOiBncmFwaHFsUGF0aCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczoge31cbiAgICAgICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgICAgIC8vIFJlc3RvcmUgY29uc29sZS5sb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcblxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgcmVzdWx0XG4gICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LmJvZHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMuanNvbihyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIC8vIFJlc3RvcmUgY29uc29sZS5sb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcbiAgICAgICAgICBsb2coYEdyYXBoUUwgaGFuZGxlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxvZyhgR3JhcGhRTCBlbmRwb2ludCBhdmFpbGFibGUgYXQgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH0ke2dyYXBocWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3Igc2V0dGluZyB1cCBHcmFwaFFMOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgZm9yIG5vbi1HcmFwaFFMIHJvdXRlcyAtIGhhbmRsZSBhbGwgcmVtYWluaW5nIHJvdXRlc1xuICBhcHAudXNlKCcvJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IHJlcS51cmwgfHwgJy8nO1xuICAgICAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZCB8fCAnR0VUJztcbiAgICAgIGNvbnN0IHBhdGhuYW1lID0gcmVxLnBhdGggfHwgdXJsLnNwbGl0KCc/JylbMF07IC8vIEV4dHJhY3QgcGF0aG5hbWUgd2l0aG91dCBxdWVyeSBzdHJpbmdcblxuICAgICAgLy8gQWx3YXlzIGxvZyByZXF1ZXN0cyAobm90IGFmZmVjdGVkIGJ5IHF1aWV0IGZsYWcgZm9yIGRlYnVnZ2luZylcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gJHttZXRob2R9ICR7dXJsfSAocGF0aG5hbWU6ICR7cGF0aG5hbWV9KWApO1xuXG4gICAgICAvLyBGaW5kIG1hdGNoaW5nIGZ1bmN0aW9uXG4gICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcbiAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IGNvbmZpZy5mdW5jdGlvbnMgfHwge307XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKGZ1bmN0aW9ucyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gQXZhaWxhYmxlIGZ1bmN0aW9uczogJHtmdW5jdGlvbk5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gQ29uZmlnIGZ1bmN0aW9uczonLCBKU09OLnN0cmluZ2lmeShmdW5jdGlvbnMsIG51bGwsIDIpKTtcblxuICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50UGF0aCA9IGV2ZW50Lmh0dHAucGF0aCB8fCAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAoZXZlbnQuaHR0cC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX06IHBhdGg9XCIke2V2ZW50UGF0aH1cIiwgbWV0aG9kPVwiJHtldmVudE1ldGhvZH1cIiBhZ2FpbnN0IHBhdGhuYW1lPVwiJHtwYXRobmFtZX1cIiwgbWV0aG9kPVwiJHtyZXF1ZXN0TWV0aG9kfVwiYCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJbXByb3ZlZCBwYXRoIG1hdGNoaW5nIC0gY29tcGFyZSBwYXRobmFtZSB3aXRob3V0IHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyAocmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZm9yIGNvbXBhcmlzb24pXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV2ZW50UGF0aCA9IGV2ZW50UGF0aC5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcblxuICAgICAgICAgICAgICAgIGlmKG5vcm1hbGl6ZWRFdmVudFBhdGggPT09IG5vcm1hbGl6ZWRQYXRobmFtZSAmJiBldmVudE1ldGhvZCA9PT0gcmVxdWVzdE1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSDinJMgTWF0Y2hlZCBmdW5jdGlvbjogJHttYXRjaGVkRnVuY3Rpb259YCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gTm8gZnVuY3Rpb25zIGZvdW5kIGluIGNvbmZpZycpO1xuICAgICAgfVxuXG4gICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0pIHtcbiAgICAgICAgLy8gUmVzb2x2ZSBoYW5kbGVyIHBhdGggcmVsYXRpdmUgdG8gb3V0cHV0IGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBoYW5kbGVyUGF0aCA9IGZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dLmhhbmRsZXI7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gTG9hZGluZyBoYW5kbGVyOiAke2hhbmRsZXJQYXRofSBmcm9tIG91dHB1dERpcjogJHtvdXRwdXREaXJ9YCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihoYW5kbGVyUGF0aCwgb3V0cHV0RGlyKTtcblxuICAgICAgICBpZihoYW5kbGVyKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGxvYWRlZCBzdWNjZXNzZnVsbHksIHR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9YCk7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXIgPSBjYXB0dXJlQ29uc29sZUxvZ3MoaGFuZGxlciwgcXVpZXQpO1xuXG4gICAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgICBib2R5OiByZXEuYm9keSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgaHR0cE1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiByZXEucXVlcnlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoZWRGdW5jdGlvbixcbiAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICAgIGludm9rZWRGdW5jdGlvbkFybjogYGFybjphd3M6bGFtYmRhOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6ZnVuY3Rpb246JHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICAgIG1lbW9yeUxpbWl0SW5NQjogJzEyOCdcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gQ2FsbGluZyBoYW5kbGVyIHdpdGggZXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gSGFuZGxlciByZXR1cm5lZDonLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpKTtcblxuICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICBpZihyZXN1bHQuaGVhZGVycykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMuc2VuZChyZXN1bHQuYm9keSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMuanNvbihyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEhhbmRsZXIgZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gSGFuZGxlciBlcnJvciBzdGFjazonLCBlcnJvci5zdGFjayk7XG4gICAgICAgICAgICBsb2coYEhhbmRsZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbm90IGZvdW5kIGZvciBmdW5jdGlvbjogJHttYXRjaGVkRnVuY3Rpb259YCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgcGF0aDogJHtoYW5kbGVyUGF0aH0sIE91dHB1dCBkaXI6ICR7b3V0cHV0RGlyfWApO1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0hhbmRsZXIgbm90IGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gRnVuY3Rpb24gbm90IGZvdW5kIGZvciBwYXRobmFtZTogJHtwYXRobmFtZX0sIG1ldGhvZDogJHttZXRob2R9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBBdmFpbGFibGUgZnVuY3Rpb25zOiAke2NvbmZpZy5mdW5jdGlvbnMgPyBPYmplY3Qua2V5cyhmdW5jdGlvbnMpLmpvaW4oJywgJykgOiAnbm9uZSd9YCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0Z1bmN0aW9uIG5vdCBmb3VuZCd9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFJvdXRlIGhhbmRsaW5nIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXBwO1xufTtcblxuY29uc3QgY3JlYXRlV2ViU29ja2V0U2VydmVyID0gKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldFNlcnZlcih7cG9ydDogd3NQb3J0fSk7XG5cbiAgd3NzLm9uKCdjb25uZWN0aW9uJywgYXN5bmMgKHdzOiBXZWJTb2NrZXRDbGllbnRMaWtlLCByZXE6IGFueSkgPT4ge1xuICAgIGxvZyhgV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQ6ICR7cmVxLnVybH1gLCAnaW5mbycsIGZhbHNlKTtcblxuICAgIHdzLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UobWVzc2FnZS50b1N0cmluZygpKTtcblxuICAgICAgICAvLyBGaW5kIG1hdGNoaW5nIFdlYlNvY2tldCBmdW5jdGlvblxuICAgICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gY29uZmlnLmZ1bmN0aW9ucyB8fCB7fTtcblxuICAgICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhmdW5jdGlvbnMpKSB7XG4gICAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50LndlYnNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBldmVudC53ZWJzb2NrZXQucm91dGUgfHwgJyRjb25uZWN0JztcbiAgICAgICAgICAgICAgICAgIGlmKHJvdXRlID09PSAnJGRlZmF1bHQnIHx8IHJvdXRlID09PSBkYXRhLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbiAmJiBmdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXSkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihmdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXS5oYW5kbGVyLCBvdXRwdXREaXIpO1xuXG4gICAgICAgICAgaWYoaGFuZGxlcikge1xuICAgICAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXIgPSBjYXB0dXJlQ29uc29sZUxvZ3MoaGFuZGxlciwgcXVpZXQpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgICAgIGJvZHk6IGRhdGEuYm9keSB8fCBudWxsLFxuICAgICAgICAgICAgICByZXF1ZXN0Q29udGV4dDoge1xuICAgICAgICAgICAgICAgIGFwaUdhdGV3YXk6IHtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50OiBgd3M6Ly9sb2NhbGhvc3Q6JHt3c1BvcnR9YFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbklkOiAndGVzdC1jb25uZWN0aW9uLWlkJyxcbiAgICAgICAgICAgICAgICByb3V0ZUtleTogZGF0YS5hY3Rpb24gfHwgJyRkZWZhdWx0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoZWRGdW5jdGlvbixcbiAgICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgICAgIGludm9rZWRGdW5jdGlvbkFybjogYGFybjphd3M6bGFtYmRhOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6ZnVuY3Rpb246JHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgICAgbG9nU3RyZWFtTmFtZTogJ3Rlc3QtbG9nLXN0cmVhbScsXG4gICAgICAgICAgICAgIG1lbW9yeUxpbWl0SW5NQjogJzEyOCdcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIExhbWJkYSByZXNwb25zZSBmb3JtYXQgZm9yIFdlYlNvY2tldFxuICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBMYW1iZGEgcmVzcG9uc2Ugb2JqZWN0LCBleHRyYWN0IHRoZSBib2R5XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXN1bHQuYm9keSB8fCAnJztcbiAgICAgICAgICAgICAgd3Muc2VuZChib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBkaXJlY3QgcmVzcG9uc2UsIHN0cmluZ2lmeSBpdFxuICAgICAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogJ0hhbmRsZXIgbm90IGZvdW5kJ30pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ICdXZWJTb2NrZXQgZnVuY3Rpb24gbm90IGZvdW5kJ30pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFdlYlNvY2tldCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3cy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBsb2coJ1dlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlZCcsICdpbmZvJywgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gd3NzO1xufTtcblxuY29uc3QgbG9hZEVudkZpbGUgPSAoZW52UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBpZighZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnZDb250ZW50ID0gcmVhZEZpbGVTeW5jKGVudlBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgbGluZXMgPSBlbnZDb250ZW50LnNwbGl0KCdcXG4nKTtcblxuICAgIGZvcihjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuXG4gICAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgICAgaWYoIXRyaW1tZWRMaW5lIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgS0VZPXZhbHVlIGZvcm1hdFxuICAgICAgY29uc3QgZXF1YWxJbmRleCA9IHRyaW1tZWRMaW5lLmluZGV4T2YoJz0nKTtcbiAgICAgIGlmKGVxdWFsSW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRyaW1tZWRMaW5lLnN1YnN0cmluZygwLCBlcXVhbEluZGV4KS50cmltKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZExpbmUuc3Vic3RyaW5nKGVxdWFsSW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHF1b3RlcyBpZiBwcmVzZW50XG4gICAgICAgIGNvbnN0IGNsZWFuVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICAgICAgICBpZihrZXkpIHtcbiAgICAgICAgICBlbnZWYXJzW2tleV0gPSBjbGVhblZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBXYXJuaW5nOiBDb3VsZCBub3QgbG9hZCAuZW52IGZpbGUgYXQgJHtlbnZQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGVudlZhcnM7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VydmVybGVzcyA9IGFzeW5jIChcbiAgY21kOiBTZXJ2ZXJsZXNzT3B0aW9ucyxcbiAgY2FsbGJhY2s6IFNlcnZlcmxlc3NDYWxsYmFjayA9ICgpID0+ICh7fSlcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgaG9zdDogY2xpSG9zdCxcbiAgICBodHRwUG9ydDogY2xpSHR0cFBvcnQsXG4gICAgaHR0cHNQb3J0OiBjbGlIdHRwc1BvcnQsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICByZW1vdmUgPSBmYWxzZSxcbiAgICB0ZXN0ID0gZmFsc2UsXG4gICAgdXNlUHVibGljSXAsXG4gICAgdmFyaWFibGVzLFxuICAgIHdzUG9ydDogY2xpV3NQb3J0XG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBzdGFydGluZyBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIC8vIExvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gLmVudiBmaWxlc1xuICBjb25zdCBlbnZQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudicpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52LmxvY2FsJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYuZGV2ZWxvcG1lbnQnKVxuICBdO1xuXG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLy8gTG9hZCBmcm9tIC5lbnYgZmlsZXMgaW4gb3JkZXIgKGxhdGVyIGZpbGVzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcbiAgZm9yKGNvbnN0IGVudlBhdGggb2YgZW52UGF0aHMpIHtcbiAgICBjb25zdCBmaWxlRW52VmFycyA9IGxvYWRFbnZGaWxlKGVudlBhdGgpO1xuICAgIGlmKE9iamVjdC5rZXlzKGZpbGVFbnZWYXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2coYExvYWRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbTogJHtlbnZQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBlbnZWYXJzID0gey4uLmVudlZhcnMsIC4uLmZpbGVFbnZWYXJzfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBOT0RFX0VOViBhbmQgbG9hZGVkIC5lbnYgdmFyaWFibGVzXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ2RldmVsb3BtZW50JywgLi4uZW52VmFyc307XG5cbiAgLy8gT3ZlcnJpZGUgd2l0aCBjb21tYW5kIGxpbmUgdmFyaWFibGVzIGlmIHByb3ZpZGVkXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGlWYXJzID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgICAgdmFyaWFibGVzT2JqID0gey4uLnZhcmlhYmxlc09iaiwgLi4uY2xpVmFyc307XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIC8vIElmIGluIHRlc3QgbW9kZSwgZXhpdCBlYXJseSBhZnRlciBsb2FkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICBpZih0ZXN0KSB7XG4gICAgbG9nKCdUZXN0IG1vZGU6IEVudmlyb25tZW50IHZhcmlhYmxlcyBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHJlbW92ZSkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0NsZWFuaW5nIG91dHB1dCBkaXJlY3RvcnkuLi4nKTtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXRGdWxsUGF0aCB8fCAnJyk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCBvdXRwdXQgZGlyZWN0b3J5IScpO1xuICB9XG5cbiAgLy8gTG9hZCBzZXJ2ZXJsZXNzIGNvbmZpZ3VyYXRpb25cbiAgbGV0IHNlcnZlcmxlc3NDb25maWc6IFNlcnZlcmxlc3NDb25maWcgPSB7fTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBnZXRQYWNrYWdlRGlyIHRvIGhhbmRsZSBucG0gd29ya3NwYWNlcyBjb3JyZWN0bHlcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuXG4gICAgLy8gVHJ5IG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvcm1hdHNcbiAgICBjb25zdCBjb25maWdGb3JtYXRzID0gY29uZmlnID8gW2NvbmZpZ10gOiBbXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy5tanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLmpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy5janMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLnRzJylcbiAgICBdO1xuXG4gICAgbGV0IGNvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGZvcihjb25zdCBjYW5kaWRhdGVQYXRoIG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgIGlmKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgICAgY29uZmlnUGF0aCA9IGNhbmRpZGF0ZVBhdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ1BhdGgpIHtcbiAgICAgIGxvZyhgTG9hZGluZyBzZXJ2ZXJsZXNzIGNvbmZpZyBmcm9tOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICBjb25zdCBjb25maWdNb2R1bGUgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICBzZXJ2ZXJsZXNzQ29uZmlnID0gY29uZmlnTW9kdWxlLmRlZmF1bHQ/LnNlcnZlcmxlc3MgfHwgY29uZmlnTW9kdWxlLnNlcnZlcmxlc3MgfHwge307XG4gICAgICBsb2coJ1NlcnZlcmxlc3MgY29uZmlnIGxvYWRlZCBzdWNjZXNzZnVsbHknLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhzZXJ2ZXJsZXNzQ29uZmlnLmZ1bmN0aW9ucyB8fCB7fSk7XG4gICAgICBsb2coYExvYWRlZCBmdW5jdGlvbnM6ICR7ZnVuY3Rpb25OYW1lcy5sZW5ndGggPiAwID8gZnVuY3Rpb25OYW1lcy5qb2luKCcsICcpIDogJ25vbmUnfWAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICAvLyBEZWJ1ZzogUHJpbnQgZnVsbCBjb25maWcgaWYgZGVidWcgbW9kZVxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBGdWxsIHNlcnZlcmxlc3MgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KHNlcnZlcmxlc3NDb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYE5vIHNlcnZlcmxlc3MgY29uZmlnIGZvdW5kLiBUcmllZDogJHtjb25maWdGb3JtYXRzLmpvaW4oJywgJyl9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBFcnJvciBsb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGlmKGRlYnVnKSB7XG4gICAgICBsb2coYENvbmZpZyBlcnJvciBzdGFjazogJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgfVxuICAgIC8vIERvbid0IGV4aXQsIGNvbnRpbnVlIHdpdGggZW1wdHkgY29uZmlnXG4gIH1cblxuICAvLyBNZXJnZSBjb25maWcgd2l0aCBjb21tYW5kIGxpbmUgb3B0aW9uc1xuICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIGhvc3QvcG9ydHMgd2l0aCBjb3JyZWN0IHByZWNlZGVuY2U6IENMSSA+IGNvbmZpZyA+IGRlZmF1bHRzXG4gIGNvbnN0IGNvbmZpZ09mZmxpbmUgPSBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSB8fCB7fTtcbiAgY29uc3QgZWZmZWN0aXZlSG9zdCA9IChjbGlIb3N0ID8/IGNvbmZpZ09mZmxpbmUuaG9zdCA/PyAnbG9jYWxob3N0JykgYXMgc3RyaW5nO1xuICBjb25zdCB0b051bWJlciA9ICh2OiBhbnksIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGlmKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsIHx8IHYgPT09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiBwYXJzZUludChTdHJpbmcodikpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG4gIH07XG4gIGNvbnN0IGVmZmVjdGl2ZUh0dHBQb3J0ID0gdG9OdW1iZXIoY2xpSHR0cFBvcnQgPz8gY29uZmlnT2ZmbGluZS5odHRwUG9ydCwgMzEwMCk7XG4gIGNvbnN0IGVmZmVjdGl2ZUh0dHBzUG9ydCA9IHRvTnVtYmVyKGNsaUh0dHBzUG9ydCA/PyBjb25maWdPZmZsaW5lLmh0dHBzUG9ydCwgMzEwMSk7XG4gIGNvbnN0IGVmZmVjdGl2ZVdzUG9ydCA9IHRvTnVtYmVyKGNsaVdzUG9ydCA/PyBjb25maWdPZmZsaW5lLndzUG9ydCwgMzEwMik7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IFNlcnZlcmxlc3NDb25maWcgPSB7XG4gICAgLi4uc2VydmVybGVzc0NvbmZpZyxcbiAgICBjdXN0b206IHtcbiAgICAgICdzZXJ2ZXJsZXNzLW9mZmxpbmUnOiB7XG4gICAgICAgIGNvcnM6IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddPy5jb3JzICE9PSBmYWxzZSxcbiAgICAgICAgaG9zdDogZWZmZWN0aXZlSG9zdCxcbiAgICAgICAgaHR0cFBvcnQ6IGVmZmVjdGl2ZUh0dHBQb3J0LFxuICAgICAgICBodHRwc1BvcnQ6IGVmZmVjdGl2ZUh0dHBzUG9ydCxcbiAgICAgICAgd3NQb3J0OiBlZmZlY3RpdmVXc1BvcnRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gb3V0cHV0RnVsbFBhdGggfHwgJ2xpYic7XG4gIGxvZyhgVXNpbmcgb3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdTdGFydGluZyBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLicpO1xuXG4gICAgY29uc3QgaHR0cFBvcnQgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cFBvcnQhO1xuICAgIGNvbnN0IHdzUG9ydCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS53c1BvcnQhO1xuICAgIGNvbnN0IGhvc3QgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaG9zdCE7XG5cbiAgICBsb2coYENyZWF0aW5nIEhUVFAgc2VydmVyIG9uICR7aG9zdH06JHtodHRwUG9ydH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYENyZWF0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgb24gcG9ydCAke3dzUG9ydH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgIC8vIENyZWF0ZSBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IGV4cHJlc3NBcHAgPSBhd2FpdCBjcmVhdGVFeHByZXNzU2VydmVyKFxuICAgICAgZmluYWxDb25maWcsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICBodHRwUG9ydCxcbiAgICAgIGhvc3QsXG4gICAgICBxdWlldCxcbiAgICAgIGRlYnVnXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBXZWJTb2NrZXQgc2VydmVyXG4gICAgY29uc3Qgd3NTZXJ2ZXIgPSBjcmVhdGVXZWJTb2NrZXRTZXJ2ZXIoXG4gICAgICBmaW5hbENvbmZpZyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgIHdzUG9ydCxcbiAgICAgIHF1aWV0LFxuICAgICAgZGVidWdcbiAgICApO1xuXG4gICAgLy8gSGFuZGxlIHNlcnZlciBlcnJvcnNcbiAgICB3c1NlcnZlci5vbignZXJyb3InLCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2coYFdlYlNvY2tldCBzZXJ2ZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBzdGFydCBXZWJTb2NrZXQgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IHNlcnZlciA9IGV4cHJlc3NBcHAubGlzdGVuKGh0dHBQb3J0LCBob3N0LCAoKSA9PiB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJyk7XG4gICAgICB2b2lkIHJlc29sdmVQdWJsaWNJcEZvckRpc3BsYXkodXNlUHVibGljSXApLnRoZW4oKHB1YmxpY0lwKSA9PiB7XG4gICAgICAgIGRpc3BsYXlTZXJ2ZXJTdGF0dXMoXG4gICAgICAgICAgaHR0cFBvcnQsXG4gICAgICAgICAgZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmh0dHBzUG9ydCEsXG4gICAgICAgICAgd3NQb3J0LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgcXVpZXQsXG4gICAgICAgICAgcHVibGljSXBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIEV4cHJlc3Mgc2VydmVyIGVycm9yc1xuICAgIHNlcnZlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIGxvZyhgRXhwcmVzcyBzZXJ2ZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBzdGFydCBFeHByZXNzIHNlcnZlci4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGdyYWNlZnVsIHNodXRkb3duXG4gICAgY29uc3Qgc2h1dGRvd24gPSAoKSA9PiB7XG4gICAgICBsb2coJ1xcblNodXR0aW5nIGRvd24gc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgd3NTZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIGNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIHNodXRkb3duKTtcblxuICAgIC8vIEtlZXAgdGhlIHByb2Nlc3MgYWxpdmVcbiAgICBwcm9jZXNzLnN0ZGluLnJlc3VtZSgpO1xuXG4gICAgbG9nKCdTZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlciBpcyBydW5uaW5nLiBQcmVzcyBDdHJsK0MgdG8gc3RvcC4nLCAnaW5mbycsIHF1aWV0KTtcblxuICAgIC8vIERvbid0IGNhbGwgY2FsbGJhY2sgaGVyZSwgbGV0IHRoZSBwcm9jZXNzIHN0YXkgYWxpdmVcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBzdGFydCBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4nKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJib3hlbiIsImNoYWxrIiwiZXhwcmVzcyIsInJlYWRGaWxlU3luYyIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiaG9tZWRpciIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImpvaW4iLCJpc0Fic29sdXRlIiwicGF0aFRvRmlsZVVSTCIsIldlYlNvY2tldFNlcnZlciIsIkxleENvbmZpZyIsImdldFBhY2thZ2VEaXIiLCJjcmVhdGVTcGlubmVyIiwicmVtb3ZlRmlsZXMiLCJsb2ciLCJnZXRDYWNoZURpciIsImNhY2hlRGlyIiwicmVjdXJzaXZlIiwiZ2V0Q2FjaGVQYXRoIiwicmVhZFB1YmxpY0lwQ2FjaGUiLCJjYWNoZVBhdGgiLCJjYWNoZURhdGEiLCJjYWNoZSIsIkpTT04iLCJwYXJzZSIsIm9uZVdlZWtNcyIsIkRhdGUiLCJub3ciLCJ0aW1lc3RhbXAiLCJ3cml0ZVB1YmxpY0lwQ2FjaGUiLCJpcCIsInN0cmluZ2lmeSIsImZldGNoUHVibGljSXAiLCJmb3JjZVJlZnJlc2giLCJQcm9taXNlIiwiY2FjaGVkIiwiZmV0Y2giLCJ0aGVuIiwicmVzIiwidGV4dCIsImRhdGEiLCJ0cmltIiwiY2F0Y2giLCJ1bmRlZmluZWQiLCJyZXNvbHZlUHVibGljSXBGb3JEaXNwbGF5IiwidGltZW91dE1zIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImRpc3BsYXlTZXJ2ZXJTdGF0dXMiLCJodHRwUG9ydCIsImh0dHBzUG9ydCIsIndzUG9ydCIsImhvc3QiLCJxdWlldCIsInB1YmxpY0lwIiwiaHR0cFVybCIsImh0dHBzVXJsIiwid3NVcmwiLCJ3c3NVcmwiLCJ1cmxMaW5lcyIsImdyZWVuIiwidW5kZXJsaW5lIiwic3RhdHVzQm94IiwiY3lhbiIsImJvbGQiLCJ5ZWxsb3ciLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlclN0eWxlIiwibWFyZ2luIiwicGFkZGluZyIsImNvbnNvbGUiLCJsb2FkSGFuZGxlciIsImhhbmRsZXJQYXRoIiwib3V0cHV0RGlyIiwiaGFuZGxlclBhcnRzIiwic3BsaXQiLCJmaWxlUGF0aCIsImV4cG9ydE5hbWUiLCJsZW5ndGgiLCJzbGljZSIsImluY2x1ZGVzIiwiZXJyb3IiLCJwYXRoUGFydHMiLCJsYXN0UGFydCIsImZ1bGxQYXRoIiwiZXh0ZW5zaW9ucyIsInBhdGhXaXRob3V0RXh0IiwicmVwbGFjZSIsImV4dCIsImNhbmRpZGF0ZVBhdGgiLCJFcnJvciIsImltcG9ydFBhdGgiLCJlbmRzV2l0aCIsImltcG9ydFVybCIsImhyZWYiLCJoYW5kbGVyTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImhhbmRsZXIiLCJkZWZhdWx0IiwiaW1wb3J0RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJjYXB0dXJlQ29uc29sZUxvZ3MiLCJldmVudCIsImNvbnRleHQiLCJvcmlnaW5hbENvbnNvbGVMb2ciLCJvcmlnaW5hbENvbnNvbGVFcnJvciIsIm9yaWdpbmFsQ29uc29sZVdhcm4iLCJ3YXJuIiwib3JpZ2luYWxDb25zb2xlSW5mbyIsImluZm8iLCJsb2dzIiwiYXJncyIsInB1c2giLCJyZXN1bHQiLCJncmF5IiwiZm9yRWFjaCIsImNyZWF0ZUV4cHJlc3NTZXJ2ZXIiLCJjb25maWciLCJkZWJ1ZyIsImFwcCIsInVzZSIsInJlcSIsIm5leHQiLCJoZWFkZXIiLCJtZXRob2QiLCJzZW5kU3RhdHVzIiwianNvbiIsImxvYWRHcmFwaFFMU2NoZW1hIiwiZ3JhcGhxbEhhbmRsZXIiLCJmdW5jdGlvbnMiLCJmdW5jdGlvbk5hbWUiLCJmdW5jdGlvbkNvbmZpZyIsImVudHJpZXMiLCJldmVudHMiLCJodHRwIiwicGF0aCIsImdyYXBocWxQYXRoIiwiX2Z1bmN0aW9uTmFtZSIsImJvZHkiLCJxdWVyeSIsInZhcmlhYmxlcyIsIm9wZXJhdGlvbk5hbWUiLCJsb2dNZXNzYWdlIiwibWFwIiwiYXJnIiwiU3RyaW5nIiwiYXdzUmVxdWVzdElkIiwiZnVuY3Rpb25WZXJzaW9uIiwiZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzIiwiaW52b2tlZEZ1bmN0aW9uQXJuIiwibG9nR3JvdXBOYW1lIiwibG9nU3RyZWFtTmFtZSIsIndyYXBwZWRIYW5kbGVyIiwiaGVhZGVycyIsImh0dHBNZXRob2QiLCJxdWVyeVN0cmluZ1BhcmFtZXRlcnMiLCJzdGF0dXNDb2RlIiwic3RhdHVzIiwia2V5IiwidmFsdWUiLCJzZXRIZWFkZXIiLCJzZW5kIiwidXJsIiwicGF0aG5hbWUiLCJtYXRjaGVkRnVuY3Rpb24iLCJmdW5jdGlvbk5hbWVzIiwiZXZlbnRQYXRoIiwiZXZlbnRNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInJlcXVlc3RNZXRob2QiLCJub3JtYWxpemVkRXZlbnRQYXRoIiwibm9ybWFsaXplZFBhdGhuYW1lIiwibWVtb3J5TGltaXRJbk1CIiwiY3JlYXRlV2ViU29ja2V0U2VydmVyIiwid3NzIiwicG9ydCIsIm9uIiwid3MiLCJ0b1N0cmluZyIsIndlYnNvY2tldCIsInJvdXRlIiwiYWN0aW9uIiwicmVxdWVzdENvbnRleHQiLCJhcGlHYXRld2F5IiwiZW5kcG9pbnQiLCJjb25uZWN0aW9uSWQiLCJyb3V0ZUtleSIsImxvYWRFbnZGaWxlIiwiZW52UGF0aCIsImVudlZhcnMiLCJlbnZDb250ZW50IiwibGluZXMiLCJsaW5lIiwidHJpbW1lZExpbmUiLCJzdGFydHNXaXRoIiwiZXF1YWxJbmRleCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJjbGVhblZhbHVlIiwic2VydmVybGVzcyIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNsaUhvc3QiLCJjbGlIdHRwUG9ydCIsImNsaUh0dHBzUG9ydCIsInJlbW92ZSIsInRlc3QiLCJ1c2VQdWJsaWNJcCIsImNsaVdzUG9ydCIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsIm91dHB1dEZ1bGxQYXRoIiwiZW52UGF0aHMiLCJwcm9jZXNzIiwiY3dkIiwiZmlsZUVudlZhcnMiLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsImNsaVZhcnMiLCJfZXJyb3IiLCJlbnYiLCJzdGFydCIsInN1Y2NlZWQiLCJzZXJ2ZXJsZXNzQ29uZmlnIiwicGFja2FnZURpciIsImNvbmZpZ0Zvcm1hdHMiLCJjb25maWdQYXRoIiwiY29uZmlnTW9kdWxlIiwiY29uZmlnT2ZmbGluZSIsImN1c3RvbSIsImVmZmVjdGl2ZUhvc3QiLCJ0b051bWJlciIsInYiLCJmYWxsYmFjayIsIm4iLCJwYXJzZUludCIsIk51bWJlciIsImlzRmluaXRlIiwiZWZmZWN0aXZlSHR0cFBvcnQiLCJlZmZlY3RpdmVIdHRwc1BvcnQiLCJlZmZlY3RpdmVXc1BvcnQiLCJmaW5hbENvbmZpZyIsImNvcnMiLCJleHByZXNzQXBwIiwid3NTZXJ2ZXIiLCJmYWlsIiwic2VydmVyIiwibGlzdGVuIiwic2h1dGRvd24iLCJjbG9zZSIsInN0ZGluIiwicmVzdW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLGFBQWEsVUFBVTtBQUM5QixTQUFRQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN0RSxTQUFRQyxPQUFPLFFBQU8sS0FBSztBQUMzQixTQUFRQyxX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
|