@dollhousemcp/mcp-server 2.0.14 → 2.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +7 -3
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +35 -19
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +4 -3
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts +2 -1
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/evaluatePermission.js +22 -11
- package/dist/handlers/strategies/BaseActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/BaseActivationStrategy.js +12 -3
- package/dist/handlers/strategies/PersonaActivationStrategy.js +2 -2
- package/dist/utils/permissionHooks.d.ts +38 -0
- package/dist/utils/permissionHooks.d.ts.map +1 -0
- package/dist/utils/permissionHooks.js +194 -0
- package/dist/web/public/index.html +12 -6
- package/dist/web/public/permissions.css +11 -0
- package/dist/web/public/permissions.js +43 -12
- package/dist/web/public/setup.css +172 -1
- package/dist/web/public/setup.js +353 -20
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +64 -15
- package/dist/web/routes/setupRoutes.d.ts +3 -0
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +14 -3
- package/package.json +6 -1
- package/scripts/pretooluse-codex.sh +6 -0
- package/scripts/pretooluse-cursor.sh +6 -0
- package/scripts/pretooluse-dollhouse.sh +110 -0
- package/scripts/pretooluse-gemini.sh +6 -0
- package/scripts/pretooluse-windsurf.sh +6 -0
- package/server.json +2 -2
|
@@ -18,6 +18,7 @@ const __dirname = dirname(__filename);
|
|
|
18
18
|
import { logger } from '../../utils/logger.js';
|
|
19
19
|
import { UnicodeValidator } from '../../security/validators/unicodeValidator.js';
|
|
20
20
|
import { PACKAGE_VERSION } from '../../generated/version.js';
|
|
21
|
+
import { getPermissionHookStatus, installPermissionHook } from '../../utils/permissionHooks.js';
|
|
21
22
|
const GITHUB_REPO = 'DollhouseMCP/mcp-server';
|
|
22
23
|
const MCPB_ASSET_PATTERN = /^dollhousemcp-.*\.mcpb$/;
|
|
23
24
|
import { SlidingWindowRateLimiter } from '../../utils/SlidingWindowRateLimiter.js';
|
|
@@ -183,7 +184,9 @@ function validateClient(req, res, allowedSet) {
|
|
|
183
184
|
return normalized;
|
|
184
185
|
}
|
|
185
186
|
// ── License verification ─────────────────────────────────────────────
|
|
186
|
-
const
|
|
187
|
+
const MS_PER_MINUTE = 60 * 1000;
|
|
188
|
+
const VERIFICATION_CODE_TTL_MINUTES = 10;
|
|
189
|
+
const VERIFICATION_CODE_TTL_MS = VERIFICATION_CODE_TTL_MINUTES * MS_PER_MINUTE;
|
|
187
190
|
const VERIFICATION_MAX_ATTEMPTS = 5;
|
|
188
191
|
/** Generate a cryptographically random 6-digit verification code. */
|
|
189
192
|
function generateVerificationCode() {
|
|
@@ -331,6 +334,7 @@ async function capturePostHogLicenseEvent(licenseData) {
|
|
|
331
334
|
}
|
|
332
335
|
export function createSetupRoutes(opts) {
|
|
333
336
|
const installer = opts?._runInstallMcp ?? runInstallMcp;
|
|
337
|
+
const permissionHookInstaller = opts?._installPermissionHook ?? installPermissionHook;
|
|
334
338
|
const skipRateLimit = opts?._skipRateLimit ?? false;
|
|
335
339
|
// ── Detect existing installations ───────────────────────────────────
|
|
336
340
|
const detectHandler = async (_req, res) => {
|
|
@@ -347,7 +351,12 @@ export function createSetupRoutes(opts) {
|
|
|
347
351
|
await Promise.all(clients.map(async ({ id, name }) => {
|
|
348
352
|
const detection = await detectClient(id);
|
|
349
353
|
if (detection) {
|
|
350
|
-
|
|
354
|
+
const result = { name, ...detection };
|
|
355
|
+
if (id === 'claude-code') {
|
|
356
|
+
const hookStatus = getPermissionHookStatus();
|
|
357
|
+
result.hookInstalled = hookStatus.installed && hookStatus.host === 'claude-code';
|
|
358
|
+
}
|
|
359
|
+
results[id] = result;
|
|
351
360
|
}
|
|
352
361
|
}));
|
|
353
362
|
res.json(results);
|
|
@@ -428,12 +437,14 @@ export function createSetupRoutes(opts) {
|
|
|
428
437
|
else if (nvmResult === 'failed') {
|
|
429
438
|
nvmMitigationApplied = false;
|
|
430
439
|
}
|
|
440
|
+
const hookInstall = await permissionHookInstaller(normalizedClient);
|
|
431
441
|
res.json({
|
|
432
442
|
success: true,
|
|
433
443
|
output,
|
|
434
444
|
client: normalizedClient,
|
|
435
445
|
version: effectiveVersion || 'latest',
|
|
436
446
|
nvmMitigationApplied,
|
|
447
|
+
hookInstall,
|
|
437
448
|
});
|
|
438
449
|
}
|
|
439
450
|
catch (err) {
|
|
@@ -1060,4 +1071,4 @@ function runInstallMcp(client, version) {
|
|
|
1060
1071
|
});
|
|
1061
1072
|
});
|
|
1062
1073
|
}
|
|
1063
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL3JvdXRlcy9zZXR1cFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBSSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDO0FBQzlDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUs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LFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLFVBQVU7WUFDYiwyQkFBMkIsR0FBRyxFQUFFO1lBQ2hDLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLE9BQU87U0FDUixDQUFDO1FBRUYsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9ELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTztZQUNULENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNldHVwIFJvdXRlcyDigJQgQXV0by1pbnN0YWxsIERvbGxob3VzZU1DUCB0byBNQ1AgY2xpZW50c1xuICpcbiAqIFVzZXMgYGluc3RhbGwtbWNwYCAoaHR0cHM6Ly9naXRodWIuY29tL3N1cGVybWVtb3J5YWkvaW5zdGFsbC1tY3ApXG4gKiB0byBpbmplY3Qgc2VydmVyIGNvbmZpZ3VyYXRpb24gaW50byBzdXBwb3J0ZWQgTUNQIGNsaWVudCBjb25maWcgZmlsZXMuXG4gKlxuICogU2VjdXJpdHk6IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgKGVuZm9yY2VkIGJ5IHNlcnZlci50cyksIHJhdGUtbGltaXRlZCxcbiAqIGFuZCBjb21tYW5kIGFyZ3VtZW50cyBhcmUgaGFyZGNvZGVkIOKAlCBubyB1c2VyLXN1cHBsaWVkIHNoZWxsIGlucHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGFjY2Vzc1N5bmMsIGNvbnN0YW50cyBhcyBmc0NvbnN0YW50cyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGhvbWVkaXIsIHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKF9fZmlsZW5hbWUpO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuXG5jb25zdCBHSVRIVUJfUkVQTyA9ICdEb2xsaG91c2VNQ1AvbWNwLXNlcnZlcic7XG5jb25zdCBNQ1BCX0FTU0VUX1BBVFRFUk4gPSAvXmRvbGxob3VzZW1jcC0uKlxcLm1jcGIkLztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uLy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgcmFuZG9tSW50IH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgUG9zdEhvZyB9IGZyb20gJ3Bvc3Rob2ctbm9kZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuLy8gUG9zdEhvZyBwcm9qZWN0IGNhcHR1cmUga2V5IOKAlCB3cml0ZS1vbmx5IGJ5IGRlc2lnbiwgc2FmZSB0byBleHBvc2UgcHVibGljbHkuXG4vLyBUaGlzIGtleSBjYW4gT05MWSBzZW5kIGV2ZW50cyB0byBQb3N0SG9nOyBpdCBjYW5ub3QgcmVhZCBkYXRhLCBxdWVyeSBhbmFseXRpY3MsXG4vLyBjb25maWd1cmUgZGVzdGluYXRpb25zLCBvciBhY2Nlc3MgYW55IG90aGVyIFBvc3RIb2cgQVBJLiBTYW1lIGtleSB1c2VkIGluXG4vLyBzcmMvdGVsZW1ldHJ5L09wZXJhdGlvbmFsVGVsZW1ldHJ5LnRzLiBWZXJpZmllZCB3cml0ZS1vbmx5IDIwMjYtMDQtMDcuXG4vLyBDYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIFBPU1RIT0dfQVBJX0tFWSBlbnYgdmFyIGZvciBjdXN0b20gUG9zdEhvZyBpbnN0YWxsYXRpb25zLlxuY29uc3QgUE9TVEhPR19QUk9KRUNUX0tFWSA9IHByb2Nlc3MuZW52LlBPU1RIT0dfQVBJX0tFWSB8fCAncGhjX3hGSktJSEFxUlgxWUxhMFRTZFRHd0dqMTlkMUplb1hES2pKTllxNDkydnEnO1xuXG4vKiogQWxsb3dlZCBjbGllbnQgaWRlbnRpZmllcnMg4oCUIG11c3QgbWF0Y2ggaW5zdGFsbC1tY3AncyAtLWNsaWVudCB2YWx1ZXMgKi9cbmNvbnN0IEFMTE9XRURfQ0xJRU5UUyA9IG5ldyBTZXQoW1xuICAnY2xhdWRlJyxcbiAgJ2NsYXVkZS1jb2RlJyxcbiAgJ2N1cnNvcicsXG4gICd2c2NvZGUnLFxuICAnY2xpbmUnLFxuICAncm9vLWNsaW5lJyxcbiAgJ3dpbmRzdXJmJyxcbiAgJ3dpdHN5JyxcbiAgJ2VuY29udm8nLFxuICAnZ2VtaW5pLWNsaScsXG4gICdnb29zZScsXG4gICd6ZWQnLFxuICAnd2FycCcsXG4gICdjb2RleCcsXG5dKTtcblxuLyoqIEFsbG93ZWQgcmVsZWFzZSBjaGFubmVscyBmb3IgdGhlIGluc3RhbGwgZW5kcG9pbnQuICovXG5jb25zdCBBTExPV0VEX0lOU1RBTExfQ0hBTk5FTFM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFsnbGF0ZXN0JywgJ2JldGEnLCAncmMnXSk7XG5cbi8qKiBSYXRlIGxpbWl0OiA1IGluc3RhbGxzIHBlciBtaW51dGUgKi9cbmNvbnN0IGluc3RhbGxMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcig1LCA2MF8wMDApO1xuXG4vKipcbiAqIEtub3duIGNvbmZpZyBmaWxlIHBhdGhzIHBlciBjbGllbnQuXG4gKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnUGF0aChjbGllbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBob21lID0gaG9tZWRpcigpO1xuICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcblxuICBjb25zdCBwYXRoczogUmVjb3JkPHN0cmluZywgKCkgPT4gc3RyaW5nIHwgbnVsbD4gPSB7XG4gICAgJ2NsYXVkZSc6ICgpID0+IHtcbiAgICAgIGlmIChwbGF0ID09PSAnZGFyd2luJykgcmV0dXJuIGpvaW4oaG9tZSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDbGF1ZGUnLCAnY2xhdWRlX2Rlc2t0b3BfY29uZmlnLmpzb24nKTtcbiAgICAgIGlmIChwbGF0ID09PSAnd2luMzInKSByZXR1cm4gam9pbihwcm9jZXNzLmVudi5BUFBEQVRBIHx8IGpvaW4oaG9tZSwgJ0FwcERhdGEnLCAnUm9hbWluZycpLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyk7XG4gICAgICByZXR1cm4gam9pbihob21lLCAnLmNvbmZpZycsICdDbGF1ZGUnLCAnY2xhdWRlX2Rlc2t0b3BfY29uZmlnLmpzb24nKTtcbiAgICB9LFxuICAgICdjbGF1ZGUtY29kZSc6ICgpID0+IGpvaW4oaG9tZSwgJy5jbGF1ZGUuanNvbicpLFxuICAgICdjdXJzb3InOiAoKSA9PiBqb2luKGhvbWUsICcuY3Vyc29yJywgJ21jcC5qc29uJyksXG4gICAgJ3dpbmRzdXJmJzogKCkgPT4gam9pbihob21lLCAnLmNvZGVpdW0nLCAnd2luZHN1cmYnLCAnbWNwX2NvbmZpZy5qc29uJyksXG4gICAgJ2xtc3R1ZGlvJzogKCkgPT4gam9pbihob21lLCAnLmxtc3R1ZGlvJywgJ21jcC5qc29uJyksXG4gICAgJ2dlbWluaS1jbGknOiAoKSA9PiBqb2luKGhvbWUsICcuZ2VtaW5pJywgJ3NldHRpbmdzLmpzb24nKSxcbiAgICAnY29kZXgnOiAoKSA9PiBqb2luKGhvbWUsICcuY29kZXgnLCAnY29uZmlnLnRvbWwnKSxcbiAgfTtcblxuICBjb25zdCByZXNvbHZlciA9IHBhdGhzW2NsaWVudF07XG4gIHJldHVybiByZXNvbHZlciA/IHJlc29sdmVyKCkgOiBudWxsO1xufVxuXG4vKipcbiAqIE9wZW4gYSBmaWxlIGluIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHRleHQgZWRpdG9yLlxuICovXG5mdW5jdGlvbiBvcGVuSW5FZGl0b3IoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgbGV0IGNtZDogc3RyaW5nO1xuICAgIGxldCBhcmdzOiBzdHJpbmdbXTtcblxuICAgIGlmIChwbGF0ID09PSAnZGFyd2luJykge1xuICAgICAgY21kID0gJ29wZW4nO1xuICAgICAgYXJncyA9IFsnLXQnLCBmaWxlUGF0aF07XG4gICAgfSBlbHNlIGlmIChwbGF0ID09PSAnd2luMzInKSB7XG4gICAgICBjbWQgPSAnbm90ZXBhZCc7XG4gICAgICBhcmdzID0gW2ZpbGVQYXRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY21kID0gJ3hkZy1vcGVuJztcbiAgICAgIGFyZ3MgPSBbZmlsZVBhdGhdO1xuICAgIH1cblxuICAgIGV4ZWNGaWxlKGNtZCwgYXJncywgeyB0aW1lb3V0OiAxMF8wMDAgfSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb3VsZCBub3Qgb3BlbiBlZGl0b3I6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKCdPcGVuZWQgaW4gZWRpdG9yLicpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqIENsaWVudHMgd2hvc2UgY29uZmlnIGZpbGVzIHdlIGNhbiBsb2NhdGUgYW5kIG9wZW4gKi9cbmNvbnN0IE9QRU5BQkxFX0NMSUVOVFMgPSBuZXcgU2V0KFtcbiAgJ2NsYXVkZScsICdjbGF1ZGUtY29kZScsICdjdXJzb3InLCAnd2luZHN1cmYnLCAnbG1zdHVkaW8nLCAnZ2VtaW5pLWNsaScsICdjb2RleCcsXG5dKTtcblxuLyoqXG4gKiBDcmVhdGUgc2V0dXAgaGFuZGxlcnMgKEV4cHJlc3MgNSBjb21wYXRpYmxlIOKAlCBwbGFpbiBoYW5kbGVyIGZ1bmN0aW9ucywgbm90IFJvdXRlcikuXG4gKi9cbmludGVyZmFjZSBEZXRlY3RSZXN1bHQge1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGw7XG4gIGN1cnJlbnRDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc2VydmVyS2V5Pzogc3RyaW5nO1xufVxuXG4vKiogUGFyc2UgYSBUT01MIGNvbmZpZyBmaWxlIGZvciBhIERvbGxob3VzZU1DUCBzZXJ2ZXIgZW50cnkgKi9cbmZ1bmN0aW9uIHBhcnNlVG9tbENvbmZpZyhyYXc6IHN0cmluZyk6IE9taXQ8RGV0ZWN0UmVzdWx0LCAnY29uZmlnUGF0aCc+IHtcbiAgaWYgKCFyYXcudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG9sbGhvdXNlbWNwJykpIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCB0b21sQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBjb25zdCBzZWN0aW9uTWF0Y2ggPSAvXFxbbWNwX3NlcnZlcnNcXC4oW15cXF1dKmRvbGxob3VzZW1jcFteXFxdXSopXFxdL2kuZXhlYyhyYXcpO1xuICBpZiAoIXNlY3Rpb25NYXRjaCkgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiB0b21sQ29uZmlnLCBzZXJ2ZXJLZXk6ICdtY3Bfc2VydmVycycgfTtcblxuICB0b21sQ29uZmlnLnNlcnZlck5hbWUgPSBzZWN0aW9uTWF0Y2hbMV07XG4gIGNvbnN0IHNlY3Rpb25TdGFydCA9IHNlY3Rpb25NYXRjaC5pbmRleCArIHNlY3Rpb25NYXRjaFswXS5sZW5ndGg7XG4gIGNvbnN0IG5leHRTZWN0aW9uID0gcmF3LmluZGV4T2YoJ1xcblsnLCBzZWN0aW9uU3RhcnQpO1xuICBjb25zdCBzZWN0aW9uQ29udGVudCA9IG5leHRTZWN0aW9uID4gLTEgPyByYXcuc2xpY2Uoc2VjdGlvblN0YXJ0LCBuZXh0U2VjdGlvbikgOiByYXcuc2xpY2Uoc2VjdGlvblN0YXJ0KTtcblxuICBjb25zdCBjb21tYW5kTWF0Y2ggPSAvY29tbWFuZFxccyo9XFxzKlwiKFteXCJdKylcIi8uZXhlYyhzZWN0aW9uQ29udGVudCk7XG4gIGNvbnN0IGFyZ3NNYXRjaCA9IC9hcmdzXFxzKj1cXHMqXFxbKFteXFxdXSopXFxdLy5leGVjKHNlY3Rpb25Db250ZW50KTtcbiAgaWYgKGNvbW1hbmRNYXRjaCkgdG9tbENvbmZpZy5jb21tYW5kID0gY29tbWFuZE1hdGNoWzFdO1xuICBpZiAoYXJnc01hdGNoKSB7XG4gICAgdG9tbENvbmZpZy5hcmdzID0gYXJnc01hdGNoWzFdLnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkucmVwbGFjZUFsbCgnXCInLCAnJykpO1xuICB9XG4gIHJldHVybiB7IGluc3RhbGxlZDogdHJ1ZSwgY3VycmVudENvbmZpZzogdG9tbENvbmZpZywgc2VydmVyS2V5OiAnbWNwX3NlcnZlcnMnIH07XG59XG5cbi8qKiBQYXJzZSBhIEpTT04gY29uZmlnIGZpbGUgZm9yIGEgRG9sbGhvdXNlTUNQIHNlcnZlciBlbnRyeSAqL1xuZnVuY3Rpb24gcGFyc2VKc29uQ29uZmlnKHJhdzogc3RyaW5nKTogT21pdDxEZXRlY3RSZXN1bHQsICdjb25maWdQYXRoJz4ge1xuICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnbWNwU2VydmVycycsICdzZXJ2ZXJzJ10pIHtcbiAgICBpZiAocGFyc2VkW2tleV0/LmRvbGxob3VzZW1jcCkge1xuICAgICAgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiBwYXJzZWRba2V5XS5kb2xsaG91c2VtY3AsIHNlcnZlcktleToga2V5IH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbn1cblxuLyoqIENoZWNrIGEgc2luZ2xlIGNsaWVudCBjb25maWcgZmlsZSBmb3IgYW4gZXhpc3RpbmcgRG9sbGhvdXNlTUNQIGVudHJ5ICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RDbGllbnQoY2xpZW50OiBzdHJpbmcpOiBQcm9taXNlPERldGVjdFJlc3VsdCB8IG51bGw+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGdldENvbmZpZ1BhdGgoY2xpZW50KTtcbiAgaWYgKCFjb25maWdQYXRoKSByZXR1cm4gbnVsbDtcblxuICB0cnkge1xuICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSwgY29uZmlnUGF0aCB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCByZXN1bHQgPSBjb25maWdQYXRoLmVuZHNXaXRoKCcudG9tbCcpID8gcGFyc2VUb21sQ29uZmlnKHJhdykgOiBwYXJzZUpzb25Db25maWcocmF3KTtcbiAgICByZXR1cm4geyBjb25maWdQYXRoLCAuLi5yZXN1bHQgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSwgY29uZmlnUGF0aCB9O1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBhIGNsaWVudCBuYW1lIGZyb20gcmVxdWVzdCBib2R5LlxuICogUmV0dXJucyB0aGUgbm9ybWFsaXplZCBjbGllbnQgbmFtZSBvciBudWxsICh3aXRoIGVycm9yIHJlc3BvbnNlIHNlbnQpLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNsaWVudChcbiAgcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBhbGxvd2VkU2V0OiBTZXQ8c3RyaW5nPixcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IGNsaWVudCB9ID0gcmVxLmJvZHkgYXMgeyBjbGllbnQ/OiBzdHJpbmcgfTtcbiAgaWYgKCFjbGllbnQgfHwgdHlwZW9mIGNsaWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZDogY2xpZW50JyB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY2xpZW50KS5ub3JtYWxpemVkQ29udGVudC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgaWYgKCFhbGxvd2VkU2V0Lmhhcyhub3JtYWxpemVkKSkge1xuICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgIGVycm9yOiBgVW5zdXBwb3J0ZWQgY2xpZW50OiAke2NsaWVudH1gLFxuICAgICAgc3VwcG9ydGVkOiBBcnJheS5mcm9tKGFsbG93ZWRTZXQpLFxuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vLyDilIDilIAgTGljZW5zZSB2ZXJpZmljYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFZFUklGSUNBVElPTl9DT0RFX1RUTF9NUyA9IDEwICogNjAgKiAxMDAwOyAvLyAxMCBtaW51dGVzXG5jb25zdCBWRVJJRklDQVRJT05fTUFYX0FUVEVNUFRTID0gNTtcblxuLyoqIEdlbmVyYXRlIGEgY3J5cHRvZ3JhcGhpY2FsbHkgcmFuZG9tIDYtZGlnaXQgdmVyaWZpY2F0aW9uIGNvZGUuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVZlcmlmaWNhdGlvbkNvZGUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyhyYW5kb21JbnQoMTAwMDAwLCA5OTk5OTkpKTtcbn1cblxuLyoqIENoZWNrIGlmIGEgdmVyaWZpY2F0aW9uIGNvZGUgaGFzIGV4cGlyZWQuICovXG5mdW5jdGlvbiBpc0NvZGVFeHBpcmVkKGV4cGlyZXNBdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBuZXcgRGF0ZShleHBpcmVzQXQpLmdldFRpbWUoKSA8IERhdGUubm93KCk7XG59XG5cbi8vIOKUgOKUgCBMaWNlbnNlIGhlbHBlcnMgKG1vZHVsZSBzY29wZSBmb3IgU29uYXJDbG91ZCBTNzcyMSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFZBTElEX0xJQ0VOU0VfVElFUlMgPSBuZXcgU2V0KFsnYWdwbCcsICdmcmVlLWNvbW1lcmNpYWwnLCAncGFpZC1jb21tZXJjaWFsJ10pO1xuY29uc3QgVkFMSURfUkVWRU5VRV9TQ0FMRVMgPSBuZXcgU2V0KFsnJDFN4oCTJDVNJywgJyQ1TeKAkyQyNU0nLCAnJDI1TeKAkyQxMDBNJywgJyQxMDBNKyddKTtcbi8vIFNhZmUgZnJvbSBSZURvUzogaW5wdXQgaXMgcHJlLWNoZWNrZWQgdG8g4omkMjU0IGNoYXJzLCBhbmQgezEsNjR9L3sxLDI1M30vezIsNjN9XG4vLyBib3VuZHMgcHJldmVudCBjYXRhc3Ryb3BoaWMgYmFja3RyYWNraW5nIG9uIGFueSBpbnB1dCB3aXRoaW4gdGhhdCBsZW5ndGguXG5jb25zdCBFTUFJTF9QQVRURVJOID0gL15bXlxcc0BdezEsNjR9QFteXFxzQF17MSwyNTN9XFwuW15cXHNAXXsyLDYzfSQvO1xuXG4vKiogU2FuaXRpemUgYSBzdHJpbmcgZmllbGQ6IHRyaW0sIHRydW5jYXRlLCByZXR1cm4gdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZnVuY3Rpb24gc2FuaXRpemUodmFsOiB1bmtub3duLCBtYXhMZW46IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJyB8fCAhdmFsLnRyaW0oKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHZhbC50cmltKCkuc2xpY2UoMCwgbWF4TGVuKTtcbn1cblxuLyoqIFZhbGlkYXRlIGVtYWlsIGZvcm1hdCBhbmQgY29tbWVyY2lhbCBhY2tub3dsZWRnbWVudHMuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbW1lcmNpYWxGaWVsZHMoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBlbWFpbCwgdGVsZW1ldHJ5QWNrbm93bGVkZ2VkIH0gPSBib2R5O1xuICBpZiAoIWVtYWlsIHx8IHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ0VtYWlsIGFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIENvbW1lcmNpYWwgYW5kIEVudGVycHJpc2UgbGljZW5zZXMnO1xuICB9XG4gIGlmIChlbWFpbC5sZW5ndGggPiAyNTQgfHwgIUVNQUlMX1BBVFRFUk4udGVzdChlbWFpbCkpIHtcbiAgICByZXR1cm4gJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgZW1haWwgYWRkcmVzcyc7XG4gIH1cbiAgaWYgKCF0ZWxlbWV0cnlBY2tub3dsZWRnZWQpIHtcbiAgICByZXR1cm4gJ1RlbGVtZXRyeSBhY2tub3dsZWRnbWVudCBpcyByZXF1aXJlZCBmb3IgQ29tbWVyY2lhbCBhbmQgRW50ZXJwcmlzZSBsaWNlbnNlcyc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBWYWxpZGF0ZSBmcmVlLWNvbW1lcmNpYWwgc3BlY2lmaWMgZmllbGRzLiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGcmVlQ29tbWVyY2lhbEZpZWxkcyhib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IGF0dHJpYnV0aW9uQWNrbm93bGVkZ2VkLCByZXZlbnVlQXR0ZXN0ZWQgfSA9IGJvZHk7XG4gIGlmICghYXR0cmlidXRpb25BY2tub3dsZWRnZWQpIHtcbiAgICByZXR1cm4gJ0F0dHJpYnV0aW9uIGFja25vd2xlZGdtZW50IGlzIHJlcXVpcmVkIGZvciBDb21tZXJjaWFsIGxpY2Vuc2VzJztcbiAgfVxuICBpZiAoIXJldmVudWVBdHRlc3RlZCkge1xuICAgIHJldHVybiAnUmV2ZW51ZSBhdHRlc3RhdGlvbiBpcyByZXF1aXJlZCBmb3IgQ29tbWVyY2lhbCBsaWNlbnNlcyc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBWYWxpZGF0ZSBlbnRlcnByaXNlIHNwZWNpZmljIGZpZWxkcy4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRW50ZXJwcmlzZUZpZWxkcyhib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IHJldmVudWVTY2FsZSwgY29tcGFueU5hbWUsIHVzZUNhc2UgfSA9IGJvZHk7XG4gIGlmICghcmV2ZW51ZVNjYWxlIHx8ICFWQUxJRF9SRVZFTlVFX1NDQUxFUy5oYXMocmV2ZW51ZVNjYWxlIGFzIHN0cmluZykpIHtcbiAgICByZXR1cm4gYFJldmVudWUgc2NhbGUgaXMgcmVxdWlyZWQuIE11c3QgYmUgb25lIG9mOiAke1suLi5WQUxJRF9SRVZFTlVFX1NDQUxFU10uam9pbignLCAnKX1gO1xuICB9XG4gIGlmICghY29tcGFueU5hbWUgfHwgdHlwZW9mIGNvbXBhbnlOYW1lICE9PSAnc3RyaW5nJyB8fCAhY29tcGFueU5hbWUudHJpbSgpKSB7XG4gICAgcmV0dXJuICdDb21wYW55IG5hbWUgaXMgcmVxdWlyZWQgZm9yIEVudGVycHJpc2UgbGljZW5zZXMnO1xuICB9XG4gIGlmICghdXNlQ2FzZSB8fCB0eXBlb2YgdXNlQ2FzZSAhPT0gJ3N0cmluZycgfHwgIXVzZUNhc2UudHJpbSgpKSB7XG4gICAgcmV0dXJuICdVc2UgY2FzZSBpcyByZXF1aXJlZCBmb3IgRW50ZXJwcmlzZSBsaWNlbnNlcyc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBWYWxpZGF0ZSBsaWNlbnNlIGZvcm0gaW5wdXQuIFJldHVybnMgZXJyb3Igc3RyaW5nIG9yIG51bGwgaWYgdmFsaWQuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpY2Vuc2VJbnB1dChib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IHRpZXIgfSA9IGJvZHk7XG4gIGlmICghdGllciB8fCAhVkFMSURfTElDRU5TRV9USUVSUy5oYXModGllciBhcyBzdHJpbmcpKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIGxpY2Vuc2UgdGllci4gTXVzdCBiZSBvbmUgb2Y6ICR7Wy4uLlZBTElEX0xJQ0VOU0VfVElFUlNdLmpvaW4oJywgJyl9YDtcbiAgfVxuICBpZiAodGllciAhPT0gJ2FncGwnKSB7XG4gICAgY29uc3QgY29tbWVyY2lhbEVycm9yID0gdmFsaWRhdGVDb21tZXJjaWFsRmllbGRzKGJvZHkpO1xuICAgIGlmIChjb21tZXJjaWFsRXJyb3IpIHJldHVybiBjb21tZXJjaWFsRXJyb3I7XG4gIH1cbiAgaWYgKHRpZXIgPT09ICdmcmVlLWNvbW1lcmNpYWwnKSB7XG4gICAgY29uc3QgZnJlZUVycm9yID0gdmFsaWRhdGVGcmVlQ29tbWVyY2lhbEZpZWxkcyhib2R5KTtcbiAgICBpZiAoZnJlZUVycm9yKSByZXR1cm4gZnJlZUVycm9yO1xuICB9XG4gIGlmICh0aWVyID09PSAncGFpZC1jb21tZXJjaWFsJykge1xuICAgIGNvbnN0IGVudGVycHJpc2VFcnJvciA9IHZhbGlkYXRlRW50ZXJwcmlzZUZpZWxkcyhib2R5KTtcbiAgICBpZiAoZW50ZXJwcmlzZUVycm9yKSByZXR1cm4gZW50ZXJwcmlzZUVycm9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQnVpbGQgbGljZW5zZSBkYXRhIG9iamVjdCBmcm9tIHZhbGlkYXRlZCBpbnB1dC4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGljZW5zZURhdGEoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHsgdGllciwgZW1haWwsIHJldmVudWVTY2FsZSwgY29tcGFueU5hbWUsIHVzZUNhc2UgfSA9IGJvZHk7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyB0aWVyIH07XG4gIGlmICh0aWVyICE9PSAnYWdwbCcpIHtcbiAgICBkYXRhLmVtYWlsID0gc2FuaXRpemUoZW1haWwsIDI1NCk7XG4gICAgZGF0YS5hdHRlc3RlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGRhdGEudGVsZW1ldHJ5UmVxdWlyZWQgPSB0cnVlO1xuICB9XG4gIGlmICh0aWVyID09PSAncGFpZC1jb21tZXJjaWFsJykge1xuICAgIGlmIChyZXZlbnVlU2NhbGUpIGRhdGEucmV2ZW51ZVNjYWxlID0gcmV2ZW51ZVNjYWxlO1xuICAgIGlmIChjb21wYW55TmFtZSkgZGF0YS5jb21wYW55TmFtZSA9IHNhbml0aXplKGNvbXBhbnlOYW1lLCAyMDApO1xuICAgIGlmICh1c2VDYXNlKSBkYXRhLnVzZUNhc2UgPSBzYW5pdGl6ZSh1c2VDYXNlLCA1MDApO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKiogU2VuZCBsaWNlbnNlX2FjdGl2YXRpb24gZXZlbnQgdG8gUG9zdEhvZyBmb3IgY29tbWVyY2lhbCB0aWVycy4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVQb3N0SG9nTGljZW5zZUV2ZW50KGxpY2Vuc2VEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwb3N0aG9nID0gbmV3IFBvc3RIb2coUE9TVEhPR19QUk9KRUNUX0tFWSwge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlBPU1RIT0dfSE9TVCB8fCAnaHR0cHM6Ly9hcHAucG9zdGhvZy5jb20nLFxuICAgIGZsdXNoQXQ6IDEsXG4gICAgZmx1c2hJbnRlcnZhbDogNTAwMCxcbiAgfSk7XG4gIGxldCBpbnN0YWxsSWQ6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCBpZFBhdGggPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLnRlbGVtZXRyeS1pZCcpO1xuICAgIGluc3RhbGxJZCA9IChhd2FpdCByZWFkRmlsZShpZFBhdGgsICd1dGYtOCcpKS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIGluc3RhbGxJZCA9IHV1aWR2NCgpO1xuICB9XG4gIGNvbnN0IGV2ZW50VHlwZSA9IChsaWNlbnNlRGF0YS5ldmVudFR5cGUgYXMgc3RyaW5nKSA/PyAnYWN0aXZhdGlvbic7XG4gIHBvc3Rob2cuY2FwdHVyZSh7XG4gICAgZGlzdGluY3RJZDogaW5zdGFsbElkLFxuICAgIGV2ZW50OiAnbGljZW5zZV9hY3RpdmF0aW9uJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB0aWVyOiBsaWNlbnNlRGF0YS50aWVyLFxuICAgICAgZW1haWw6IGxpY2Vuc2VEYXRhLmVtYWlsLFxuICAgICAgZXZlbnRfdHlwZTogZXZlbnRUeXBlLFxuICAgICAgc2VydmVyX3ZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIG9zOiBwbGF0Zm9ybSgpLFxuICAgICAgLi4uKGV2ZW50VHlwZSA9PT0gJ3ZlcmlmaWNhdGlvbicgPyB7XG4gICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25Db2RlLFxuICAgICAgfSA6IHt9KSxcbiAgICAgIC4uLihldmVudFR5cGUgPT09ICdhY3RpdmF0aW9uJyA/IHtcbiAgICAgICAgdmVyaWZpY2F0aW9uX3RpbWVfbXM6IGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbl90aW1lX21zLFxuICAgICAgICB2ZXJpZmljYXRpb25fdGltZV9zZWNvbmRzOiBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25fdGltZV9tc1xuICAgICAgICAgID8gTWF0aC5yb3VuZCgobGljZW5zZURhdGEudmVyaWZpY2F0aW9uX3RpbWVfbXMgYXMgbnVtYmVyKSAvIDEwMDApIDogdW5kZWZpbmVkLFxuICAgICAgICB2ZXJpZmljYXRpb25fYXR0ZW1wdHM6IGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbl9hdHRlbXB0cyxcbiAgICAgIH0gOiB7fSksXG4gICAgICAuLi4obGljZW5zZURhdGEudGllciA9PT0gJ3BhaWQtY29tbWVyY2lhbCcgPyB7XG4gICAgICAgIHJldmVudWVfc2NhbGU6IGxpY2Vuc2VEYXRhLnJldmVudWVTY2FsZSxcbiAgICAgICAgY29tcGFueV9uYW1lOiBsaWNlbnNlRGF0YS5jb21wYW55TmFtZSxcbiAgICAgICAgdXNlX2Nhc2U6IGxpY2Vuc2VEYXRhLnVzZUNhc2UsXG4gICAgICB9IDoge30pLFxuICAgIH0sXG4gIH0pO1xuICBhd2FpdCBwb3N0aG9nLnNodXRkb3duKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR1cFJvdXRlcyhvcHRzPzoge1xuICAvKiogT3ZlcnJpZGUgaW5zdGFsbC1tY3AgcnVubmVyLiBGb3IgdGVzdGluZyBvbmx5IOKAlCBwcmVmaXggc2lnbmFscyB0ZXN0LW9ubHkgdXNlLiAqL1xuICBfcnVuSW5zdGFsbE1jcD86IChjbGllbnQ6IHN0cmluZywgdmVyc2lvbj86IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKiogU2tpcCB0aGUgc2xpZGluZy13aW5kb3cgcmF0ZSBsaW1pdGVyLiBGb3IgdGVzdGluZyBvbmx5LiAqL1xuICBfc2tpcFJhdGVMaW1pdD86IGJvb2xlYW47XG59KToge1xuICBpbnN0YWxsSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgb3BlbkNvbmZpZ0hhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIHZlcnNpb25IYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBtY3BiUmVkaXJlY3RIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBkZXRlY3RIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRMaWNlbnNlSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2V0TGljZW5zZUhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIHZlcmlmeUxpY2Vuc2VIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZXNlbmRWZXJpZmljYXRpb25IYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xufSB7XG4gIGNvbnN0IGluc3RhbGxlciA9IG9wdHM/Ll9ydW5JbnN0YWxsTWNwID8/IHJ1bkluc3RhbGxNY3A7XG4gIGNvbnN0IHNraXBSYXRlTGltaXQgPSBvcHRzPy5fc2tpcFJhdGVMaW1pdCA/PyBmYWxzZTtcbiAgLy8g4pSA4pSAIERldGVjdCBleGlzdGluZyBpbnN0YWxsYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBkZXRlY3RIYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBjbGllbnRzID0gW1xuICAgICAgeyBpZDogJ2NsYXVkZScsIG5hbWU6ICdDbGF1ZGUgRGVza3RvcCcgfSxcbiAgICAgIHsgaWQ6ICdjbGF1ZGUtY29kZScsIG5hbWU6ICdDbGF1ZGUgQ29kZScgfSxcbiAgICAgIHsgaWQ6ICdjdXJzb3InLCBuYW1lOiAnQ3Vyc29yJyB9LFxuICAgICAgeyBpZDogJ3dpbmRzdXJmJywgbmFtZTogJ1dpbmRzdXJmJyB9LFxuICAgICAgeyBpZDogJ2xtc3R1ZGlvJywgbmFtZTogJ0xNIFN0dWRpbycgfSxcbiAgICAgIHsgaWQ6ICdnZW1pbmktY2xpJywgbmFtZTogJ0dlbWluaSBDTEknIH0sXG4gICAgICB7IGlkOiAnY29kZXgnLCBuYW1lOiAnQ29kZXgnIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50cy5tYXAoYXN5bmMgKHsgaWQsIG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3QgZGV0ZWN0aW9uID0gYXdhaXQgZGV0ZWN0Q2xpZW50KGlkKTtcbiAgICAgIGlmIChkZXRlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0c1tpZF0gPSB7IG5hbWUsIC4uLmRldGVjdGlvbiB9O1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJlcy5qc29uKHJlc3VsdHMpO1xuICB9O1xuXG4gIC8vIOKUgOKUgCBPcGVuIGNvbmZpZyBmaWxlIGluIGVkaXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qgb3BlbkNvbmZpZ0hhbmRsZXIgPSBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENsaWVudCA9IHZhbGlkYXRlQ2xpZW50KHJlcSwgcmVzLCBPUEVOQUJMRV9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBnZXRDb25maWdQYXRoKG5vcm1hbGl6ZWRDbGllbnQpO1xuICAgIGlmICghY29uZmlnUGF0aCkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYENvbmZpZyBwYXRoIHVua25vd24gZm9yOiAke25vcm1hbGl6ZWRDbGllbnR9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCBlbXB0eSBjb250ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSA/ICcnIDogJ3t9JztcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGNvbmZpZ1BhdGgsIGNvbnRlbnQgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIENyZWF0ZWQgZW1wdHkgY29uZmlnOiAke2NvbmZpZ1BhdGh9YCk7XG4gICAgICB9IGNhdGNoIChta0Vycikge1xuICAgICAgICBjb25zdCBtc2cgPSBta0VyciBpbnN0YW5jZW9mIEVycm9yID8gbWtFcnIubWVzc2FnZSA6IFN0cmluZyhta0Vycik7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBDb3VsZCBub3QgY3JlYXRlIGNvbmZpZyBmaWxlOiAke21zZ31gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gT3BlbmluZyBjb25maWcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7Y29uZmlnUGF0aH1gKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcGVuSW5FZGl0b3IoY29uZmlnUGF0aCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IG1lc3NhZ2UsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBBdXRvLWluc3RhbGwgdmlhIGluc3RhbGwtbWNwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBpbnN0YWxsSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXNraXBSYXRlTGltaXQgJiYgIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIFRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnQgPSB2YWxpZGF0ZUNsaWVudChyZXEsIHJlcywgQUxMT1dFRF9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gb3IgY2hhbm5lbCBpZiBwcm92aWRlZCDigJQgbXVzdCBiZSBzZW12ZXItbGlrZSBvciBhIGtub3duIGNoYW5uZWwgKG5vIHNoZWxsIGluamVjdGlvbilcbiAgICBjb25zdCB7IHZlcnNpb24sIGNoYW5uZWwgfSA9IHJlcS5ib2R5IGFzIHsgdmVyc2lvbj86IHN0cmluZzsgY2hhbm5lbD86IHN0cmluZyB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gdmVyc2lvbiA/IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHZlcnNpb24pLm5vcm1hbGl6ZWRDb250ZW50IDogdW5kZWZpbmVkO1xuICAgIGlmIChub3JtYWxpemVkVmVyc2lvbiAmJiAhL15cXGQrXFwuXFxkK1xcLlxcZCsvLnRlc3Qobm9ybWFsaXplZFZlcnNpb24pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCB2ZXJzaW9uIGZvcm1hdC4gRXhwZWN0ZWQgc2VtdmVyIChlLmcuLCAyLjAuMiknIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDaGFubmVsIG92ZXJyaWRlcyB2ZXJzaW9uIGZvciBhdXRvLXVwZGF0aW5nIGluc3RhbGxzIChiZXRhLCByYywgbGF0ZXN0KS5cbiAgICAvLyBOb3JtYWxpemUgYW5kIHZhbGlkYXRlIGFnYWluc3QgdGhlIGFsbG93bGlzdCB0byBwcmV2ZW50IGluamVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkQ2hhbm5lbCA9IGNoYW5uZWwgPyBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjaGFubmVsKS5ub3JtYWxpemVkQ29udGVudCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlZmZlY3RpdmVWZXJzaW9uID0gbm9ybWFsaXplZENoYW5uZWwgJiYgQUxMT1dFRF9JTlNUQUxMX0NIQU5ORUxTLmhhcyhub3JtYWxpemVkQ2hhbm5lbCkgJiYgbm9ybWFsaXplZENoYW5uZWwgIT09ICdsYXRlc3QnXG4gICAgICA/IG5vcm1hbGl6ZWRDaGFubmVsXG4gICAgICA6IG5vcm1hbGl6ZWRWZXJzaW9uO1xuXG4gICAgY29uc3QgdGFnID0gZWZmZWN0aXZlVmVyc2lvbiA/IGBAJHtlZmZlY3RpdmVWZXJzaW9ufWAgOiAnQGxhdGVzdCc7XG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gSW5zdGFsbGluZyBEb2xsaG91c2VNQ1Ake3RhZ30gdG8gY2xpZW50OiAke25vcm1hbGl6ZWRDbGllbnR9YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaW5zdGFsbGVyKG5vcm1hbGl6ZWRDbGllbnQsIGVmZmVjdGl2ZVZlcnNpb24pO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCB0byAke25vcm1hbGl6ZWRDbGllbnR9YCk7XG5cbiAgICAgIC8vIEJlc3QtZWZmb3J0IE5WTSBtaXRpZ2F0aW9uIChtYWNPUy9MaW51eCBvbmx5KS5cbiAgICAgIC8vIEV4dHJhY3RlZCBpbnRvIGFwcGx5TnZtTGF1bmNoZXJJZk5lZWRlZCB0byBrZWVwIHRoaXMgaGFuZGxlcidzXG4gICAgICAvLyBjb2duaXRpdmUgY29tcGxleGl0eSB3aXRoaW4gYm91bmRzIChTb25hckNsb3VkIFMzNzc2KS5cbiAgICAgIGNvbnN0IG52bVJlc3VsdCA9IGF3YWl0IGFwcGx5TnZtTGF1bmNoZXJJZk5lZWRlZChub3JtYWxpemVkQ2xpZW50KTtcblxuICAgICAgLy8gdHJ1ZSA9IG1pdGlnYXRpb24gYXBwbGllZDsgZmFsc2UgPSBwcmVzZW50IGJ1dCBmYWlsZWQ7IG51bGwgPSBub3QgYXBwbGljYWJsZVxuICAgICAgbGV0IG52bU1pdGlnYXRpb25BcHBsaWVkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAobnZtUmVzdWx0ID09PSAnYXBwbGllZCcpIHtcbiAgICAgICAgbnZtTWl0aWdhdGlvbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChudm1SZXN1bHQgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIG52bU1pdGlnYXRpb25BcHBsaWVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBjbGllbnQ6IG5vcm1hbGl6ZWRDbGllbnQsXG4gICAgICAgIHZlcnNpb246IGVmZmVjdGl2ZVZlcnNpb24gfHwgJ2xhdGVzdCcsXG4gICAgICAgIG52bU1pdGlnYXRpb25BcHBsaWVkLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gSW5zdGFsbCBmYWlsZWQgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7bWVzc2FnZX1gKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlLCBjbGllbnQ6IG5vcm1hbGl6ZWRDbGllbnQgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBWZXJzaW9uIGluZm8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IHZlcnNpb25IYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBsb2NhbCA9IHtcbiAgICAgIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIG1jcGJVcmw6IGBodHRwczovL2dpdGh1Yi5jb20vJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvZG93bmxvYWQvdiR7UEFDS0FHRV9WRVJTSU9OfS9kb2xsaG91c2VtY3AtJHtQQUNLQUdFX1ZFUlNJT059Lm1jcGJgLFxuICAgIH07XG5cbiAgICAvLyBRdWVyeSBHaXRIdWIgZm9yIHRoZSBhY3R1YWwgbGF0ZXN0IHJlbGVhc2VcbiAgICBsZXQgbGF0ZXN0ID0gbG9jYWw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdoUmVzID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvbGF0ZXN0YCwge1xuICAgICAgICBoZWFkZXJzOiB7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJywgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLVNldHVwJyB9LFxuICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoNTAwMCksXG4gICAgICB9KTtcbiAgICAgIGlmIChnaFJlcy5vaykge1xuICAgICAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgZ2hSZXMuanNvbigpIGFzIHsgdGFnX25hbWU6IHN0cmluZzsgYXNzZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgYnJvd3Nlcl9kb3dubG9hZF91cmw6IHN0cmluZyB9PiB9O1xuICAgICAgICBjb25zdCBtY3BiQXNzZXQgPSByZWxlYXNlLmFzc2V0cy5maW5kKGEgPT4gTUNQQl9BU1NFVF9QQVRURVJOLnRlc3QoYS5uYW1lKSk7XG4gICAgICAgIGxhdGVzdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiByZWxlYXNlLnRhZ19uYW1lLnJlcGxhY2UoL152LywgJycpLFxuICAgICAgICAgIG1jcGJVcmw6IG1jcGJBc3NldD8uYnJvd3Nlcl9kb3dubG9hZF91cmwgfHxcbiAgICAgICAgICAgIGBodHRwczovL2dpdGh1Yi5jb20vJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvZG93bmxvYWQvJHtyZWxlYXNlLnRhZ19uYW1lfS9kb2xsaG91c2VtY3AtJHtyZWxlYXNlLnRhZ19uYW1lLnJlcGxhY2UoL152LywgJycpfS5tY3BiYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEdpdEh1YiB1bnJlYWNoYWJsZSDigJQgdXNlIGxvY2FsIHZlcnNpb24gaW5mb1xuICAgIH1cblxuICAgIHJlcy5qc29uKHtcbiAgICAgIHJ1bm5pbmc6IGxvY2FsLFxuICAgICAgbGF0ZXN0LFxuICAgICAgaXNMYXRlc3Q6IGxvY2FsLnZlcnNpb24gPT09IGxhdGVzdC52ZXJzaW9uLFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIOKUgOKUgCAubWNwYiBkb3dubG9hZCByZWRpcmVjdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgbWNwYlJlZGlyZWN0SGFuZGxlciA9IGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgLy8gVHJ5IEdpdEh1YiBBUEkgZm9yIHRoZSBhY3R1YWwgbGF0ZXN0IC5tY3BiIGFzc2V0IFVSTFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBnaFJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2xhdGVzdGAsIHtcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC1TZXR1cCcgfSxcbiAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICAgICAgfSk7XG4gICAgICBpZiAoZ2hSZXMub2spIHtcbiAgICAgICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IGdoUmVzLmpzb24oKSBhcyB7IHRhZ19uYW1lOiBzdHJpbmc7IGFzc2V0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGJyb3dzZXJfZG93bmxvYWRfdXJsOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgY29uc3QgbWNwYkFzc2V0ID0gcmVsZWFzZS5hc3NldHMuZmluZChhID0+IE1DUEJfQVNTRVRfUEFUVEVSTi50ZXN0KGEubmFtZSkpO1xuICAgICAgICBpZiAobWNwYkFzc2V0KSB7XG4gICAgICAgICAgcmVzLnJlZGlyZWN0KG1jcGJBc3NldC5icm93c2VyX2Rvd25sb2FkX3VybCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGYWxsIHRocm91Z2ggdG8gY29uc3RydWN0ZWQgVVJMXG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGNvbnN0cnVjdCBVUkwgZnJvbSBydW5uaW5nIHZlcnNpb25cbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BBQ0tBR0VfVkVSU0lPTn0vZG9sbGhvdXNlbWNwLSR7UEFDS0FHRV9WRVJTSU9OfS5tY3BiYDtcbiAgICByZXMucmVkaXJlY3QodXJsKTtcbiAgfTtcblxuICAvLyDilIDilIAgTGljZW5zZSBzZWxlY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGxpY2Vuc2VDb25maWdQYXRoID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2xpY2Vuc2UuanNvbicpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWRMaWNlbnNlKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUobGljZW5zZUNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHRpZXI6ICdhZ3BsJyB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlTGljZW5zZShkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScpO1xuICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGxpY2Vuc2VDb25maWdQYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgfVxuXG4gIGNvbnN0IGdldExpY2Vuc2VIYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgcmVhZExpY2Vuc2UoKTtcbiAgICAvLyBOZXZlciBleHBvc2UgdmVyaWZpY2F0aW9uIGludGVybmFscyB0byBjbGllbnRcbiAgICBjb25zdCB7IHZlcmlmaWNhdGlvbkNvZGU6IF9jb2RlLCB2ZXJpZmljYXRpb25BdHRlbXB0czogX2F0dGVtcHRzLCAuLi5wdWJsaWNMaWNlbnNlIH0gPSBsaWNlbnNlO1xuICAgIHJlcy5qc29uKHB1YmxpY0xpY2Vuc2UpO1xuICB9O1xuXG4gIGNvbnN0IGxpY2Vuc2VSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoNSwgNjBfMDAwKTsgLy8gNSByZXF1ZXN0cy9taW51dGVcblxuICBjb25zdCBzZXRMaWNlbnNlSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIWxpY2Vuc2VSYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnNldExpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogJ0xpY2Vuc2UgZW5kcG9pbnQgcmF0ZSBsaW1pdCBleGNlZWRlZCAoNSByZXEvbWluKScsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBsaWNlbnNlIHJlcXVlc3RzLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHJlcS5ib2R5ID8/IHt9O1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlTGljZW5zZUlucHV0KGJvZHkpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IHZhbGlkYXRpb25FcnJvciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaWNlbnNlRGF0YSA9IGJ1aWxkTGljZW5zZURhdGEoYm9keSk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGxpY2Vuc2VEYXRhLnRpZXIgPT09ICdhZ3BsJykge1xuICAgICAgICAvLyBBR1BMOiBhY3RpdmF0ZSBpbW1lZGlhdGVseSwgbm8gdmVyaWZpY2F0aW9uIG5lZWRlZFxuICAgICAgICBsaWNlbnNlRGF0YS5zdGF0dXMgPSAnYWN0aXZlJztcbiAgICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2VEYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tTZXR1cF0gTGljZW5zZSBzZXQgdG8gQUdQTCAoYWN0aXZlLCBubyB2ZXJpZmljYXRpb24pJyk7XG4gICAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbGljZW5zZTogbGljZW5zZURhdGEgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tbWVyY2lhbCB0aWVyczogc2F2ZSBhcyBwZW5kaW5nLCBnZW5lcmF0ZSB2ZXJpZmljYXRpb24gY29kZVxuICAgICAgY29uc3QgY29kZSA9IGdlbmVyYXRlVmVyaWZpY2F0aW9uQ29kZSgpO1xuICAgICAgbGljZW5zZURhdGEuc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQ29kZSA9IGNvZGU7XG4gICAgICBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25FeHBpcnkgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgVkVSSUZJQ0FUSU9OX0NPREVfVFRMX01TKS50b0lTT1N0cmluZygpO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQXR0ZW1wdHMgPSAwO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZURhdGEpO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBMaWNlbnNlIHBlbmRpbmcgdmVyaWZpY2F0aW9uOiAke2xpY2Vuc2VEYXRhLnRpZXJ9ICgke2xpY2Vuc2VEYXRhLmVtYWlsfSlgKTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnQ09ORklHX1VQREFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnNldExpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogYExpY2Vuc2UgdmVyaWZpY2F0aW9uIGluaXRpYXRlZDogJHtsaWNlbnNlRGF0YS50aWVyfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgdGllcjogbGljZW5zZURhdGEudGllcixcbiAgICAgICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgZGlyZWN0bHkgdG8gV29ya2VyIGZvciBpbnN0YW50IGRlbGl2ZXJ5LlxuICAgICAgLy8gUG9zdEhvZyBldmVudCBhbHNvIGZpcmVzIGZvciBhbmFseXRpY3MsIGJ1dCB0aGUgZW1haWwgY2FuJ3Qgd2FpdCBmb3JcbiAgICAgIC8vIFBvc3RIb2cncyBldmVudCBwaXBlbGluZSAoMS01IG1pbiBkZWxheSkuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB3b3JrZXJVcmwgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfTElDRU5TRV9XT1JLRVJfVVJMIHx8ICdodHRwczovL2RvbGxob3VzZW1jcC1saWNlbnNlLWVtYWlsLm1pY2stZWJhLndvcmtlcnMuZGV2JztcbiAgICAgICAgY29uc3Qgd29ya2VyU2VjcmV0ID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0xJQ0VOU0VfV09SS0VSX1NFQ1JFVCB8fCAnJztcbiAgICAgICAgYXdhaXQgZmV0Y2god29ya2VyVXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIC4uLih3b3JrZXJTZWNyZXQgPyB7ICd4LXBvc3Rob2ctc2VjcmV0Jzogd29ya2VyU2VjcmV0IH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2xpY2Vuc2VfYWN0aXZhdGlvbicsXG4gICAgICAgICAgICBkaXN0aW5jdF9pZDogJ2RpcmVjdC12ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICB0aWVyOiBsaWNlbnNlRGF0YS50aWVyLFxuICAgICAgICAgICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICd2ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogY29kZSxcbiAgICAgICAgICAgICAgc2VydmVyX3ZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgICAgICAgICAgb3M6IHBsYXRmb3JtKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gVmVyaWZpY2F0aW9uIGVtYWlsIHNlbnQgZGlyZWN0bHkgdmlhIFdvcmtlcjogJHtsaWNlbnNlRGF0YS5lbWFpbH1gKTtcbiAgICAgIH0gY2F0Y2ggKHdvcmtlckVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbU2V0dXBdIERpcmVjdCBXb3JrZXIgY2FsbCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBQb3N0SG9nIHBpcGVsaW5lOiAke3dvcmtlckVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB3b3JrZXJFcnJvci5tZXNzYWdlIDogU3RyaW5nKHdvcmtlckVycm9yKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWxzbyBmaXJlIFBvc3RIb2cgZXZlbnQgZm9yIGFuYWx5dGljcyAobm9uLWJsb2NraW5nLCBkZWxheSBpcyBmaW5lKVxuICAgICAgY2FwdHVyZVBvc3RIb2dMaWNlbnNlRXZlbnQoeyAuLi5saWNlbnNlRGF0YSwgdmVyaWZpY2F0aW9uQ29kZTogY29kZSwgZXZlbnRUeXBlOiAndmVyaWZpY2F0aW9uJyB9KS5jYXRjaChcbiAgICAgICAgKGVycikgPT4gbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIFBvc3RIb2cgY2FwdHVyZSBmYWlsZWQ6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApLFxuICAgICAgKTtcblxuICAgICAgLy8gUmV0dXJuIHN1Y2Nlc3Mgd2l0aG91dCBleHBvc2luZyB0aGUgY29kZVxuICAgICAgY29uc3QgeyB2ZXJpZmljYXRpb25Db2RlOiBfYywgdmVyaWZpY2F0aW9uQXR0ZW1wdHM6IF9hLCAuLi5wdWJsaWNEYXRhIH0gPSBsaWNlbnNlRGF0YTtcbiAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbGljZW5zZTogcHVibGljRGF0YSwgdmVyaWZpY2F0aW9uUmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1NldHVwXSBGYWlsZWQgdG8gc2F2ZSBsaWNlbnNlJywgeyBlcnJvciB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gc2F2ZSBsaWNlbnNlIGNvbmZpZ3VyYXRpb24nIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB2ZXJpZnlSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoNSwgNjBfMDAwKTsgLy8gNSBhdHRlbXB0cy9taW51dGVcblxuICBjb25zdCB2ZXJpZnlMaWNlbnNlSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXZlcmlmeVJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnc2V0dXBSb3V0ZXMudmVyaWZ5TGljZW5zZUhhbmRsZXInLFxuICAgICAgICBkZXRhaWxzOiAnVmVyaWZpY2F0aW9uIGVuZHBvaW50IHJhdGUgbGltaXQgZXhjZWVkZWQgKDUgcmVxL21pbiknLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgdmVyaWZpY2F0aW9uIGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb2RlIH0gPSByZXEuYm9keSA/PyB7fTtcbiAgICBpZiAoIWNvZGUgfHwgdHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnIHx8ICEvXlxcZHs2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCA2LWRpZ2l0IHZlcmlmaWNhdGlvbiBjb2RlJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgcmVhZExpY2Vuc2UoKTtcbiAgICBpZiAobGljZW5zZS5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ05vIHBlbmRpbmcgbGljZW5zZSB2ZXJpZmljYXRpb24uIFBsZWFzZSBzdWJtaXQgdGhlIGxpY2Vuc2UgZm9ybSBmaXJzdC4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGV4cGlyeVxuICAgIGlmICghbGljZW5zZS52ZXJpZmljYXRpb25FeHBpcnkgfHwgaXNDb2RlRXhwaXJlZChsaWNlbnNlLnZlcmlmaWNhdGlvbkV4cGlyeSBhcyBzdHJpbmcpKSB7XG4gICAgICBsaWNlbnNlLnN0YXR1cyA9ICdleHBpcmVkJztcbiAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdWZXJpZmljYXRpb24gY29kZSBoYXMgZXhwaXJlZC4gUGxlYXNlIHN1Ym1pdCB0aGUgZm9ybSBhZ2FpbiB0byByZWNlaXZlIGEgbmV3IGNvZGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBtYXggYXR0ZW1wdHNcbiAgICBjb25zdCBhdHRlbXB0cyA9ICgobGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cyBhcyBudW1iZXIpID8/IDApICsgMTtcbiAgICBpZiAoYXR0ZW1wdHMgPiBWRVJJRklDQVRJT05fTUFYX0FUVEVNUFRTKSB7XG4gICAgICBsaWNlbnNlLnN0YXR1cyA9ICdleHBpcmVkJztcbiAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy52ZXJpZnlMaWNlbnNlSGFuZGxlcicsXG4gICAgICAgIGRldGFpbHM6IGBWZXJpZmljYXRpb24gbWF4IGF0dGVtcHRzIGV4Y2VlZGVkIGZvcjogJHtsaWNlbnNlLmVtYWlsfWAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBmYWlsZWQgYXR0ZW1wdHMuIFBsZWFzZSBzdWJtaXQgdGhlIGZvcm0gYWdhaW4gdG8gcmVjZWl2ZSBhIG5ldyBjb2RlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY29kZVxuICAgIGlmIChjb2RlICE9PSBsaWNlbnNlLnZlcmlmaWNhdGlvbkNvZGUpIHtcbiAgICAgIGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHMgPSBhdHRlbXB0cztcbiAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IFZFUklGSUNBVElPTl9NQVhfQVRURU1QVFMgLSBhdHRlbXB0cztcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbmNvcnJlY3QgdmVyaWZpY2F0aW9uIGNvZGUuICR7cmVtYWluaW5nfSBhdHRlbXB0JHtyZW1haW5pbmcgPT09IDEgPyAnJyA6ICdzJ30gcmVtYWluaW5nLmAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29kZSBpcyBjb3JyZWN0IOKAlCBhY3RpdmF0ZSBsaWNlbnNlXG4gICAgY29uc3QgdmVyaWZpZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCByZXF1ZXN0ZWRBdCA9IGxpY2Vuc2UudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRpbWVUb1ZlcmlmeU1zID0gcmVxdWVzdGVkQXQgPyBEYXRlLm5vdygpIC0gbmV3IERhdGUocmVxdWVzdGVkQXQpLmdldFRpbWUoKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhdHRlbXB0c1VzZWQgPSAoKGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHMgYXMgbnVtYmVyKSA/PyAwKSArIDE7XG5cbiAgICBsaWNlbnNlLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgIGxpY2Vuc2UudmVyaWZpZWRBdCA9IHZlcmlmaWVkQXQ7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uQ29kZTtcbiAgICBkZWxldGUgbGljZW5zZS52ZXJpZmljYXRpb25FeHBpcnk7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHM7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQ7XG4gICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuXG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gTGljZW5zZSB2ZXJpZmllZCBhbmQgYWN0aXZhdGVkOiAke2xpY2Vuc2UudGllcn0gKCR7bGljZW5zZS5lbWFpbH0pIOKAlCAke3RpbWVUb1ZlcmlmeU1zID8gTWF0aC5yb3VuZCh0aW1lVG9WZXJpZnlNcyAvIDEwMDApICsgJ3MnIDogJ3Vua25vd24nfSwgJHthdHRlbXB0c1VzZWR9IGF0dGVtcHQocylgKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdDT05GSUdfVVBEQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy52ZXJpZnlMaWNlbnNlSGFuZGxlcicsXG4gICAgICBkZXRhaWxzOiBgTGljZW5zZSBhY3RpdmF0ZWQgYWZ0ZXIgZW1haWwgdmVyaWZpY2F0aW9uOiAke2xpY2Vuc2UudGllcn1gLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHsgdGllcjogbGljZW5zZS50aWVyLCBlbWFpbDogbGljZW5zZS5lbWFpbCB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2VuZCBjb25maXJtYXRpb24gZW1haWwgKyBQb3N0SG9nIGFjdGl2YXRpb24gZXZlbnQgd2l0aCBhbmFseXRpY3NcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2FwdHVyZVBvc3RIb2dMaWNlbnNlRXZlbnQoe1xuICAgICAgICAuLi5saWNlbnNlLFxuICAgICAgICBldmVudFR5cGU6ICdhY3RpdmF0aW9uJyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX3RpbWVfbXM6IHRpbWVUb1ZlcmlmeU1zLFxuICAgICAgICB2ZXJpZmljYXRpb25fYXR0ZW1wdHM6IGF0dGVtcHRzVXNlZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogY29kZS5sZW5ndGggPT09IDYgPyAnY29kZV9vcl9jbGljaycgOiAndW5rbm93bicsXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIExpY2Vuc2UgYWN0aXZhdGlvbiBldmVudCBzZW50IHRvIFBvc3RIb2c6ICR7bGljZW5zZS50aWVyfWApO1xuICAgIH0gY2F0Y2ggKHBvc3Rob2dFcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIFBvc3RIb2cgY2FwdHVyZSBmYWlsZWQ6ICR7cG9zdGhvZ0Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwb3N0aG9nRXJyb3IubWVzc2FnZSA6IFN0cmluZyhwb3N0aG9nRXJyb3IpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uQ29kZTogX2MsIHZlcmlmaWNhdGlvbkF0dGVtcHRzOiBfYSwgdmVyaWZpY2F0aW9uRXhwaXJ5OiBfZSwgLi4ucHVibGljTGljZW5zZSB9ID0gbGljZW5zZTtcbiAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGxpY2Vuc2U6IHB1YmxpY0xpY2Vuc2UgfSk7XG4gIH07XG5cbiAgY29uc3QgcmVzZW5kUmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDMsIDEyMF8wMDApOyAvLyAzIHJlc2VuZHMgcGVyIDIgbWludXRlc1xuXG4gIGNvbnN0IHJlc2VuZFZlcmlmaWNhdGlvbkhhbmRsZXIgPSBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghcmVzZW5kUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUGxlYXNlIHdhaXQgYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBjb2RlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGljZW5zZSA9IGF3YWl0IHJlYWRMaWNlbnNlKCk7XG4gICAgaWYgKGxpY2Vuc2Uuc3RhdHVzICE9PSAncGVuZGluZycgJiYgbGljZW5zZS5zdGF0dXMgIT09ICdleHBpcmVkJykge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ05vIHBlbmRpbmcgbGljZW5zZSB2ZXJpZmljYXRpb24uJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBuZXcgY29kZSBhbmQgcmVzZXRcbiAgICBjb25zdCBjb2RlID0gZ2VuZXJhdGVWZXJpZmljYXRpb25Db2RlKCk7XG4gICAgbGljZW5zZS5zdGF0dXMgPSAncGVuZGluZyc7XG4gICAgbGljZW5zZS52ZXJpZmljYXRpb25Db2RlID0gY29kZTtcbiAgICBsaWNlbnNlLnZlcmlmaWNhdGlvbkV4cGlyeSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBWRVJJRklDQVRJT05fQ09ERV9UVExfTVMpLnRvSVNPU3RyaW5nKCk7XG4gICAgbGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cyA9IDA7XG4gICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuXG4gICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgZGlyZWN0bHkgdG8gV29ya2VyIGZvciBpbnN0YW50IGRlbGl2ZXJ5XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtlclVybCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9MSUNFTlNFX1dPUktFUl9VUkwgfHwgJ2h0dHBzOi8vZG9sbGhvdXNlbWNwLWxpY2Vuc2UtZW1haWwubWljay1lYmEud29ya2Vycy5kZXYnO1xuICAgICAgY29uc3Qgd29ya2VyU2VjcmV0ID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0xJQ0VOU0VfV09SS0VSX1NFQ1JFVCB8fCAnJztcbiAgICAgIGF3YWl0IGZldGNoKHdvcmtlclVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgLi4uKHdvcmtlclNlY3JldCA/IHsgJ3gtcG9zdGhvZy1zZWNyZXQnOiB3b3JrZXJTZWNyZXQgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiAnbGljZW5zZV9hY3RpdmF0aW9uJyxcbiAgICAgICAgICBkaXN0aW5jdF9pZDogJ2RpcmVjdC1yZXNlbmQnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHRpZXI6IGxpY2Vuc2UudGllcixcbiAgICAgICAgICAgIGVtYWlsOiBsaWNlbnNlLmVtYWlsLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3ZlcmlmaWNhdGlvbicsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogY29kZSxcbiAgICAgICAgICAgIHNlcnZlcl92ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICAgICAgICBvczogcGxhdGZvcm0oKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gVmVyaWZpY2F0aW9uIGNvZGUgcmVzZW50IGRpcmVjdGx5IHZpYSBXb3JrZXI6ICR7bGljZW5zZS5lbWFpbH1gKTtcbiAgICB9IGNhdGNoICh3b3JrZXJFcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gRGlyZWN0IFdvcmtlciBjYWxsIGZhaWxlZDogJHt3b3JrZXJFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gd29ya2VyRXJyb3IubWVzc2FnZSA6IFN0cmluZyh3b3JrZXJFcnJvcil9YCk7XG4gICAgfVxuXG4gICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiAnQSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUgaGFzIGJlZW4gc2VudCB0byB5b3VyIGVtYWlsLicgfSk7XG4gIH07XG5cbiAgcmV0dXJuIHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciwgZ2V0TGljZW5zZUhhbmRsZXIsIHNldExpY2Vuc2VIYW5kbGVyLCB2ZXJpZnlMaWNlbnNlSGFuZGxlciwgcmVzZW5kVmVyaWZpY2F0aW9uSGFuZGxlciB9O1xufVxuXG4vLyDilIDilIAgSW5zdGFsbCBhbmFseXRpY3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IFBvc3RIb2cgZXZlbnQgZm9yIGluc3RhbGxhdGlvbiBhbmFseXRpY3MuXG4gKiBVc2VzIHRoZSBzYW1lIGluc3RhbGwgSUQgYXMgdGhlIGxpY2Vuc2UgdGVsZW1ldHJ5IHN5c3RlbS5cbiAqIFNpbGVudGx5IHN3YWxsb3dzIGFsbCBlcnJvcnMg4oCUIGFuYWx5dGljcyBtdXN0IG5ldmVyIGJyZWFrIGluc3RhbGxzLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcyhldmVudDogc3RyaW5nLCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICBjb25zdCBwb3N0aG9nID0gbmV3IFBvc3RIb2coUE9TVEhPR19QUk9KRUNUX0tFWSwge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlBPU1RIT0dfSE9TVCB8fCAnaHR0cHM6Ly9hcHAucG9zdGhvZy5jb20nLFxuICAgIGZsdXNoQXQ6IDEsXG4gICAgZmx1c2hJbnRlcnZhbDogNTAwMCxcbiAgfSk7XG4gIHJlYWRGaWxlKGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcudGVsZW1ldHJ5LWlkJyksICd1dGYtOCcpXG4gICAgLnRoZW4oaWQgPT4gaWQudHJpbSgpKVxuICAgIC5jYXRjaCgoKSA9PiAnYW5vbnltb3VzJylcbiAgICAudGhlbihpbnN0YWxsSWQgPT4ge1xuICAgICAgcG9zdGhvZy5jYXB0dXJlKHsgZGlzdGluY3RJZDogaW5zdGFsbElkLCBldmVudCwgcHJvcGVydGllcyB9KTtcbiAgICAgIHJldHVybiBwb3N0aG9nLnNodXRkb3duKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKCkgPT4geyAvKiB0ZWxlbWV0cnkgbXVzdCBuZXZlciB0aHJvdyAqLyB9KTtcbn1cblxuLy8g4pSA4pSAIE5WTSBtaXRpZ2F0aW9uIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDbGF1ZGUgRGVza3RvcCBoYXMgYSBidWcgd2hlcmUgaXQgc2NhbnMgfi8ubnZtL3ZlcnNpb25zL25vZGUvLCBidWlsZHMgYSBQQVRIXG4vLyBmcm9tIGFsbCBpbnN0YWxsZWQgdmVyc2lvbnMgaW4gYXNjZW5kaW5nIG9yZGVyIChvbGRlc3QgZmlyc3QpLCBhbmQgcnVucyBucHhcbi8vIHVuZGVyIGFuIG91dGRhdGVkIE5vZGUgZXZlbiB3aGVuIGEgbmV3ZXIgdmVyc2lvbiBpcyBpbnN0YWxsZWQgYW5kIHNlbGVjdGVkLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzLzE5MDJcbi8vXG4vLyBGaXg6IHdoZW4gTlZNIGlzIHByZXNlbnQsIGNyZWF0ZSBhIHNtYWxsIGJhc2ggbGF1bmNoZXIgdGhhdCBpbml0aWFsaXNlcyBOVk1cbi8vIHByb3Blcmx5IGJlZm9yZSBkZWxlZ2F0aW5nIHRvIG5weCwgdGhlbiBwYXRjaCB0aGUgd3JpdHRlbiBNQ1AgY2xpZW50IGNvbmZpZ1xuLy8gdG8gdXNlIHRoYXQgbGF1bmNoZXIgaW5zdGVhZCBvZiBiYXJlIGBucHhgLlxuXG4vKiogUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gYXBwbHkgdGhlIE5WTSBsYXVuY2hlciBtaXRpZ2F0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTnZtTGF1bmNoZXJSZXN1bHQgPSAnYXBwbGllZCcgfCAnbm90LWFwcGxpY2FibGUnIHwgJ2ZhaWxlZCc7XG5cbi8qKiBKU09OLWZvcm1hdCBjbGllbnRzIGVsaWdpYmxlIGZvciBOVk0gbGF1bmNoZXIgcmVwYWlyIG9uIHN0YXJ0dXAuICovXG5jb25zdCBKU09OX0ZPUk1BVF9DTElFTlRTID0gW1xuICAnY2xhdWRlJywgJ2NsYXVkZS1jb2RlJywgJ2N1cnNvcicsICd3aW5kc3VyZicsICdsbXN0dWRpbycsICdnZW1pbmktY2xpJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIHRoZSBOVk0gbWl0aWdhdGlvbjogZGV0ZWN0IOKGkiBjcmVhdGUgbGF1bmNoZXIg4oaSIHBhdGNoIGNvbmZpZyDihpIgdGVsZW1ldHJ5LlxuICogRXh0cmFjdGVkIGZyb20gaW5zdGFsbEhhbmRsZXIgdG8ga2VlcCBpdHMgY29nbml0aXZlIGNvbXBsZXhpdHkgd2l0aGluIFNvbmFyQ2xvdWQgbGltaXRzLlxuICogUmV0dXJucyBhIHJlc3VsdCBlbnVtIHJhdGhlciB0aGFuIHRocm93aW5nIHNvIHRoZSBjYWxsZXIgYWx3YXlzIGdldHMgYSBjbGVhbiBzaWduYWwuXG4gKlxuICogQHBhcmFtIGhvbWUgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseU52bUxhdW5jaGVySWZOZWVkZWQoY2xpZW50OiBzdHJpbmcsIGhvbWUgPSBob21lZGlyKCkpOiBQcm9taXNlPE52bUxhdW5jaGVyUmVzdWx0PiB7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gbWl0aWdhdGlvbiBjaGVjayBmb3IgY2xpZW50OiAke2NsaWVudH1gKTtcbiAgaWYgKCFhd2FpdCBpc052bVByZXNlbnQoaG9tZSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG5vdCBwcmVzZW50IOKAlCBza2lwcGluZyBsYXVuY2hlciBtaXRpZ2F0aW9uIGZvciAke2NsaWVudH1gKTtcbiAgICBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcygnbnZtX2xhdW5jaGVyX25vdF9hcHBsaWNhYmxlJywgeyBjbGllbnQsIHBsYXRmb3JtOiBwbGF0Zm9ybSgpIH0pO1xuICAgIHJldHVybiAnbm90LWFwcGxpY2FibGUnO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JhcHBlclBhdGggPSBhd2FpdCBlbnN1cmVOdm1MYXVuY2hlcihob21lKTtcbiAgICBhd2FpdCBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudCwgd3JhcHBlclBhdGgpO1xuICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIE5WTS1hd2FyZSBsYXVuY2hlciBhcHBsaWVkIGZvciAke2NsaWVudH1gKTtcbiAgICBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcygnbnZtX2xhdW5jaGVyX2FwcGxpZWQnLCB7IGNsaWVudCwgcGxhdGZvcm06IHBsYXRmb3JtKCkgfSk7XG4gICAgcmV0dXJuICdhcHBsaWVkJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gTlZNIGxhdW5jaGVyIHNldHVwIGZhaWxlZCAobm9uLWZhdGFsKTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG4gICAgY2FwdHVyZUluc3RhbGxBbmFseXRpY3MoJ252bV9sYXVuY2hlcl9mYWlsZWQnLCB7XG4gICAgICBjbGllbnQsXG4gICAgICBwbGF0Zm9ybTogcGxhdGZvcm0oKSxcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnR1cCByZXBhaXI6IHJlLWNyZWF0ZXMgdGhlIHdyYXBwZXIgYW5kIHJlLXBhdGNoZXMgYWxsIGtub3duIEpTT04tZm9ybWF0XG4gKiBjbGllbnQgY29uZmlncyBvbiBldmVyeSBzZXJ2ZXIgc3RhcnQuIEhhbmRsZXMgdHdvIGNhc2VzOlxuICogICAxLiBXcmFwcGVyIHdhcyBkZWxldGVkIOKAlCByZWNyZWF0ZXMgaXQgc28gY29uZmlncyBwb2ludGluZyB0byBpdCBrZWVwIHdvcmtpbmcuXG4gKiAgIDIuIFByZS1leGlzdGluZyBpbnN0YWxsICh1c2VyIGluc3RhbGxlZCBiZWZvcmUgdGhpcyBmaXggc2hpcHBlZCkg4oCUIHBhdGNoZXNcbiAqICAgICAgY29uZmlncyB0aGF0IHN0aWxsIHVzZSBiYXJlIGBucHhgLlxuICpcbiAqIEZpcmUtYW5kLWZvcmdldCBmcm9tIHN0YXJ0V2ViU2VydmVyLiBBbGwgZXJyb3JzIGFyZSBzd2FsbG93ZWQgYW5kIGxvZ2dlZC5cbiAqXG4gKiBAcGFyYW0gaG9tZSAgICAgICAgICAgICAgIC0gT3ZlcnJpZGUgaG9tZSBkaXJlY3RvcnkgKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICogQHBhcmFtIGNvbmZpZ1BhdGhSZXNvbHZlciAtIE92ZXJyaWRlIGNvbmZpZyBwYXRoIGxvb2t1cCAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybiBudWxsIHRvIHNraXAgYSBjbGllbnQgZW50aXJlbHkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIHByb2R1Y3Rpb24gZ2V0Q29uZmlnUGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGFpck52bUxhdW5jaGVyT25TdGFydHVwKFxuICBob21lID0gaG9tZWRpcigpLFxuICBjb25maWdQYXRoUmVzb2x2ZXI6IChjbGllbnQ6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCA9IGdldENvbmZpZ1BhdGgsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBsYXRmb3JtKCkgPT09ICd3aW4zMicpIHJldHVybjtcbiAgbG9nZ2VyLmRlYnVnKCdbU2V0dXBdIE5WTSBsYXVuY2hlciBzdGFydHVwIHJlcGFpcjogY2hlY2tpbmcgZm9yIE5WTS4uLicpO1xuICBpZiAoIWF3YWl0IGlzTnZtUHJlc2VudChob21lKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXI6IE5WTSBub3QgcHJlc2VudCDigJQgbm90aGluZyB0byByZXBhaXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgd3JhcHBlclBhdGg6IHN0cmluZztcbiAgdHJ5IHtcbiAgICB3cmFwcGVyUGF0aCA9IGF3YWl0IGVuc3VyZU52bUxhdW5jaGVyKGhvbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgW1NldHVwXSBOVk0gc3RhcnR1cCByZXBhaXI6IGNvdWxkIG5vdCBjcmVhdGUgbGF1bmNoZXI6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICBKU09OX0ZPUk1BVF9DTElFTlRTLm1hcChjbGllbnQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhSZXNvbHZlcihjbGllbnQpO1xuICAgICAgaWYgKCFjb25maWdQYXRoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIHJlc29sdmVyIHJldHVybmVkIG51bGwg4oCUIHNraXAgdGhpcyBjbGllbnRcbiAgICAgIHJldHVybiBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudCwgd3JhcHBlclBhdGgsIGNvbmZpZ1BhdGgpXG4gICAgICAgIC5jYXRjaChlcnIgPT5cbiAgICAgICAgICBsb2dnZXIud2FybihgW1NldHVwXSBOVk0gc3RhcnR1cCByZXBhaXI6IGZhaWxlZCB0byBwYXRjaCAke2NsaWVudH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApXG4gICAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICBsb2dnZXIuaW5mbygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXIgY29tcGxldGUnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgTlZNIGlzIGluc3RhbGxlZCBvbiB0aGlzIG1hY2hpbmUgKG1hY09TL0xpbnV4IG9ubHkpLlxuICogQ2hlY2tzIHByb2Nlc3MuZW52Lk5WTV9ESVIgZmlyc3QgKGhhbmRsZXMgbm9uLXN0YW5kYXJkIGluc3RhbGwgbG9jYXRpb25zKSxcbiAqIHRoZW4gZmFsbHMgYmFjayB0byB+Ly5udm0uXG4gKlxuICogQHBhcmFtIGhvbWUgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gb3MuaG9tZWRpcigpOyBpbmplY3RhYmxlIGZvciB0ZXN0cylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTnZtUHJlc2VudChob21lID0gaG9tZWRpcigpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChwbGF0Zm9ybSgpID09PSAnd2luMzInKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGNhbmRpZGF0ZXMgaW4gb3JkZXI6IGVudiB2YXIgb3ZlcnJpZGUg4oaSIGRlZmF1bHQgbG9jYXRpb25cbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwcm9jZXNzLmVudi5OVk1fRElSLFxuICAgIGpvaW4oaG9tZSwgJy5udm0nKSxcbiAgXS5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG4gIGZvciAoY29uc3QgZGlyIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWNjZXNzKGpvaW4oZGlyLCAnbnZtLnNoJykpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkZXRlY3RlZCBhdDogJHtkaXJ9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHsgLyogdHJ5IG5leHQgY2FuZGlkYXRlICovIH1cbiAgfVxuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG5vdCBmb3VuZCAoY2hlY2tlZDogJHtjYW5kaWRhdGVzLmpvaW4oJywgJyl9KWApO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIE5WTSBkaXJlY3Rvcnk6IHByb2Nlc3MuZW52Lk5WTV9ESVIgaWYgc2V0LCBvdGhlcndpc2Ugfi8ubnZtLlxuICogVXNlZCB0byBoYXJkY29kZSB0aGUgcGF0aCBpbiB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc28gaXQgd29ya3MgZXZlbiB3aGVuXG4gKiBDbGF1ZGUgRGVza3RvcCBkb2VzIG5vdCBzb3VyY2UgdGhlIHVzZXIncyBzaGVsbCBwcm9maWxlLlxuICpcbiAqIHByb2Nlc3MuZW52Lk5WTV9ESVIgaXMgdmFsaWRhdGVkIGJlZm9yZSB1c2UgdG8gcHJldmVudCBzaGVsbCBpbmplY3Rpb24gaW5cbiAqIHRoZSBnZW5lcmF0ZWQgd3JhcHBlciBzY3JpcHQgKG9ubHkgYWJzb2x1dGUgcGF0aHMgd2l0aCBzYWZlIGNoYXJhY3RlcnMgYXJlXG4gKiBhY2NlcHRlZDsgdW5zYWZlIHZhbHVlcyBmYWxsIGJhY2sgdG8gfi8ubnZtKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU52bURpcihob21lID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgY29uc3QgZW52RGlyID0gcHJvY2Vzcy5lbnYuTlZNX0RJUjtcbiAgaWYgKGVudkRpciAmJiAvXlxcL1tcXHcuL34tXSskLy50ZXN0KGVudkRpcikpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIGRpciByZXNvbHZlZCBmcm9tIE5WTV9ESVIgZW52IHZhcjogJHtlbnZEaXJ9YCk7XG4gICAgcmV0dXJuIGVudkRpcjtcbiAgfVxuICBpZiAoZW52RGlyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTV9ESVIgZW52IHZhciByZWplY3RlZCAodW5zYWZlIHBhdGgpOiAke2VudkRpcn0g4oCUIGZhbGxpbmcgYmFjayB0byB+Ly5udm1gKTtcbiAgfVxuICBjb25zdCBmYWxsYmFjayA9IGpvaW4oaG9tZSwgJy5udm0nKTtcbiAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkaXIgcmVzb2x2ZWQgdG8gZGVmYXVsdDogJHtmYWxsYmFja31gKTtcbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgfi8uZG9sbGhvdXNlL2Jpbi9kb2xsaG91c2VtY3AtbnZtLnNoIGFuZCByZXR1cm5zIGl0cyBwYXRoLlxuICpcbiAqIFRoZSBOVk0gZGlyZWN0b3J5IGlzIHJlc29sdmVkIGF0IGdlbmVyYXRpb24gdGltZSBhbmQgaGFyZGNvZGVkIGludG8gdGhlXG4gKiBzY3JpcHQuIFRoaXMgaXMgaW50ZW50aW9uYWw6IENsYXVkZSBEZXNrdG9wIGRvZXMgbm90IHNvdXJjZSB0aGUgdXNlcidzXG4gKiBzaGVsbCBwcm9maWxlLCBzbyAkTlZNX0RJUiB3b3VsZCBiZSB1bnNldCB3aGVuIHRoZSB3cmFwcGVyIHJ1bnMuIEJ5XG4gKiBlbWJlZGRpbmcgdGhlIGFic29sdXRlIHBhdGggd2UgZ3VhcmFudGVlIHRoZSBjb3JyZWN0IE5WTSBpcyBmb3VuZC5cbiAqXG4gKiBUaGUgc2NyaXB0IHNvdXJjZXMgTlZNLCB0aGVuIGNoZWNrcyB0aGUgYWN0aXZlIE5vZGUgbWFqb3IgdmVyc2lvbi4gSWYgaXRcbiAqIGlzIGJlbG93IDE4ICh0aGUgRG9sbGhvdXNlTUNQIG1pbmltdW0pLCBpdCB0cmllcyBgbnZtIHVzZSBub2RlYCAoaGlnaGVzdFxuICogaW5zdGFsbGVkKSB0aGVuIGBudm0gdXNlIC0tbHRzYCBhcyBhIGZhbGxiYWNrLiBBIGZpbmFsIHZlcnNpb24gY2hlY2tcbiAqIHdyaXRlcyBhIHdhcm5pbmcgdG8gc3RkZXJyIGlmIHRoZSBub2RlIGlzIHN0aWxsIHRvbyBvbGQg4oCUIHRoYXQgd2FybmluZ1xuICogd2lsbCBhcHBlYXIgaW4gQ2xhdWRlIERlc2t0b3AncyBlcnJvciBsb2cuXG4gKlxuICogQHBhcmFtIGhvbWUgICAgICAgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKiBAcGFyYW0gbnZtRGlyT3ZlcnJpZGUgLSBPdmVycmlkZSB0aGUgcmVzb2x2ZWQgTlZNIHBhdGggKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTnZtTGF1bmNoZXIoaG9tZSA9IGhvbWVkaXIoKSwgbnZtRGlyT3ZlcnJpZGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiaW5EaXIgPSBqb2luKGhvbWUsICcuZG9sbGhvdXNlJywgJ2JpbicpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IGpvaW4oYmluRGlyLCAnZG9sbGhvdXNlbWNwLW52bS5zaCcpO1xuICBjb25zdCBudm1EaXIgPSBudm1EaXJPdmVycmlkZSA/PyByZXNvbHZlTnZtRGlyKGhvbWUpO1xuXG4gIGF3YWl0IG1rZGlyKGJpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgLy8gU2luZ2xlLWV4cHJlc3Npb24gaGVscGVyIHJldXNlZCB0d2ljZSB0byBnZXQgdGhlIE5vZGUgbWFqb3IgdmVyc2lvbi5cbiAgY29uc3QgZ2V0TWFqb3IgPSAnbm9kZSAtZSBcInByb2Nlc3Muc3Rkb3V0LndyaXRlKFN0cmluZyhwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoXFwnLlxcJylbMF0pKVwiIDI+L2Rldi9udWxsIHx8IGVjaG8gXCIwXCInO1xuXG4gIGNvbnN0IHNjcmlwdCA9IFtcbiAgICAnIyEvYmluL2Jhc2gnLFxuICAgICcjIERvbGxob3VzZU1DUCBOVk0tYXdhcmUgbGF1bmNoZXInLFxuICAgICcjIEF1dG8tZ2VuZXJhdGVkIGJ5IHRoZSBEb2xsaG91c2VNQ1AgaW5zdGFsbGVyLicsXG4gICAgJyMgRW5zdXJlcyB0aGUgY29ycmVjdCBOb2RlLmpzIHZlcnNpb24gaXMgYWN0aXZlIGJlZm9yZSBydW5uaW5nIG5weCwnLFxuICAgICcjIHdvcmtpbmcgYXJvdW5kIGEgQ2xhdWRlIERlc2t0b3AgYnVnIHdoZXJlIE5WTSBQQVRIIG9yZGVyaW5nIGNhdXNlcycsXG4gICAgJyMgbnB4IHRvIGV4ZWN1dGUgdW5kZXIgYW4gb2xkZXIgTm9kZSB2ZXJzaW9uIChlLmcuIHYxMikgZXZlbiB3aGVuIGEnLFxuICAgICcjIG5ld2VyIHZlcnNpb24gaXMgaW5zdGFsbGVkLicsXG4gICAgJyMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzLzE5MDInLFxuICAgICcnLFxuICAgIGBOVk1fRElSPVwiJHtudm1EaXJ9XCJgLFxuICAgICdpZiBbIC1zIFwiJE5WTV9ESVIvbnZtLnNoXCIgXTsgdGhlbicsXG4gICAgJyAgICAjIHNoZWxsY2hlY2sgc291cmNlPS9kZXYvbnVsbCcsXG4gICAgJyAgICAuIFwiJE5WTV9ESVIvbnZtLnNoXCIgMj4vZGV2L251bGwnLFxuICAgICcgICAgIyBJZiB0aGUgYWN0aXZlIE5vZGUgaXMgYmVsb3cgdjE4IChtaW5pbXVtIGZvciBEb2xsaG91c2VNQ1ApLCcsXG4gICAgYCAgICAjIHRyeSAnbm9kZScgYWxpYXMgKGhpZ2hlc3QgaW5zdGFsbGVkKSB0aGVuIExUUyBhcyBhIGZhbGxiYWNrLmAsXG4gICAgYCAgICBNQUpPUj0kKCR7Z2V0TWFqb3J9KWAsXG4gICAgJyAgICBpZiBbIFwiJE1BSk9SXCIgLWx0IDE4IF07IHRoZW4nLFxuICAgICcgICAgICAgIG52bSB1c2Ugbm9kZSAyPi9kZXYvbnVsbCB8fCBudm0gdXNlIC0tbHRzIDI+L2Rldi9udWxsIHx8IHRydWUnLFxuICAgIGAgICAgICAgIE1BSk9SPSQoJHtnZXRNYWpvcn0pYCxcbiAgICAnICAgICAgICBpZiBbIFwiJE1BSk9SXCIgLWx0IDE4IF07IHRoZW4nLFxuICAgICcgICAgICAgICAgICBlY2hvIFwiW0RvbGxob3VzZU1DUF0gV0FSTklORzogTm9kZS5qcyAkTUFKT1IgaXMgYmVsb3cgdGhlIG1pbmltdW0gKDE4KS4gRG9sbGhvdXNlTUNQIG1heSBub3Qgc3RhcnQgY29ycmVjdGx5LlwiID4mMicsXG4gICAgJyAgICAgICAgZmknLFxuICAgICcgICAgZmknLFxuICAgICdmaScsXG4gICAgJycsXG4gICAgJ2V4ZWMgbnB4IFwiJEBcIicsXG4gIF0uam9pbignXFxuJykgKyAnXFxuJztcblxuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gV3JpdGluZyBOVk0gbGF1bmNoZXIgd3JhcHBlciB0bzogJHt3cmFwcGVyUGF0aH0gKE5WTV9ESVI9JHtudm1EaXJ9KWApO1xuICBhd2FpdCB3cml0ZUZpbGUod3JhcHBlclBhdGgsIHNjcmlwdCwgJ3V0Zi04Jyk7XG4gIGF3YWl0IGNobW9kKHdyYXBwZXJQYXRoLCAwbzc1NSk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gbGF1bmNoZXIgd3JhcHBlciB3cml0dGVuIGFuZCBtYWRlIGV4ZWN1dGFibGVgKTtcbiAgcmV0dXJuIHdyYXBwZXJQYXRoO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIGluZGVudGF0aW9uIHVzZWQgaW4gYSBKU09OIHN0cmluZyBzbyB0aGUgcmVzZXJpYWxpc2VkIG91dHB1dFxuICogcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzdHlsZSAoYXZvaWRzIG5vaXN5IGRpZmZzIGluIHVzZXItbWFpbnRhaW5lZCBjb25maWdzKS5cbiAqIFJldHVybnMgdGhlIHRhYiBjaGFyYWN0ZXIgZm9yIHRhYi1pbmRlbnRlZCBmaWxlcywgb3IgdGhlIGxlYWRpbmctc3BhY2UgY291bnRcbiAqIChtaW5pbXVtIDIpIGZvciBzcGFjZS1pbmRlbnRlZCBmaWxlcy4gRGVmYXVsdHMgdG8gMiB3aGVuIHVuZGV0ZWN0YWJsZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0SW5kZW50KHJhdzogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhdy5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAobGluZS5sZW5ndGggPT09IDAgfHwgbGluZS5zdGFydHNXaXRoKCd7JykgfHwgbGluZS5zdGFydHNXaXRoKCd9JykpIGNvbnRpbnVlO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ1xcdCcpKSByZXR1cm4gJ1xcdCc7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICcpKSB7XG4gICAgICBjb25zdCBzcGFjZXMgPSBsaW5lLmxlbmd0aCAtIGxpbmUudHJpbVN0YXJ0KCkubGVuZ3RoO1xuICAgICAgaWYgKHNwYWNlcyA+PSAyKSByZXR1cm4gc3BhY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMjtcbn1cblxuLyoqXG4gKiBQYXRjaGVzIHRoZSBkb2xsaG91c2VtY3AgZW50cnkgaW4gYW4gTUNQIGNsaWVudCdzIEpTT04gY29uZmlnIHRvIHVzZVxuICogdGhlIE5WTS1hd2FyZSBsYXVuY2hlciBpbnN0ZWFkIG9mIGJhcmUgYG5weGAuXG4gKlxuICogT25seSBhY3RzIG9uIEpTT04tZm9ybWF0IGNvbmZpZ3MuIFRPTUwgY29uZmlncyAoY29kZXgpIGFyZSBza2lwcGVkLlxuICogU2lsZW50bHkgbm8tb3BzIGlmIHRoZSBjb25maWcgZmlsZSBpcyBtaXNzaW5nIG9yIHVucmVhZGFibGUuXG4gKlxuICogQHBhcmFtIGNvbmZpZ1BhdGhPdmVycmlkZSAtIFVzZSB0aGlzIHBhdGggaW5zdGVhZCBvZiB0aGUgcGxhdGZvcm0gZGVmYXVsdCAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudDogc3RyaW5nLCB3cmFwcGVyUGF0aDogc3RyaW5nLCBjb25maWdQYXRoT3ZlcnJpZGU/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhPdmVycmlkZSA/PyBnZXRDb25maWdQYXRoKGNsaWVudCk7XG4gIGlmICghY29uZmlnUGF0aCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBubyBjb25maWcgcGF0aCBmb3IgJHtjbGllbnR9IOKAlCBza2lwcGluZ2ApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBUT01MIGNvbmZpZyBmb3IgJHtjbGllbnR9IOKAlCBza2lwcGluZyAobm90IEpTT04tZm9ybWF0KWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCByYXc6IHN0cmluZztcbiAgdHJ5IHtcbiAgICByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuOyAvLyBDb25maWcgbm90IHJlYWRhYmxlIOKAlCBpbnN0YWxsLW1jcCBtYXkgbm90IGhhdmUgd3JpdHRlbiBpdCB5ZXRcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuOyAvLyBNYWxmb3JtZWQgSlNPTiDigJQgZG9uJ3QgdG91Y2ggaXRcbiAgfVxuXG4gIGxldCBwYXRjaGVkID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnbWNwU2VydmVycycsICdzZXJ2ZXJzJ10pIHtcbiAgICBjb25zdCBzZWN0aW9uID0gcGFyc2VkW2tleV0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZWN0aW9uPy5kb2xsaG91c2VtY3ApIHtcbiAgICAgIHNlY3Rpb24uZG9sbGhvdXNlbWNwLmNvbW1hbmQgPSB3cmFwcGVyUGF0aDtcbiAgICAgIHBhdGNoZWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXRjaGVkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIHBhdGNoQ29uZmlnRm9yTnZtTGF1bmNoZXI6IG5vIGRvbGxob3VzZW1jcCBlbnRyeSBpbiAke2NsaWVudH0gY29uZmlnIOKAlCBub3RoaW5nIHRvIHBhdGNoYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5kZW50ID0gZGV0ZWN0SW5kZW50KHJhdyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiB3cml0aW5nICR7Y2xpZW50fSBjb25maWcgKGluZGVudD0ke0pTT04uc3RyaW5naWZ5KGluZGVudCl9KWApO1xuICBhd2FpdCB3cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBpbmRlbnQpICsgJ1xcbicsICd1dGYtOCcpO1xuICBsb2dnZXIuaW5mbyhgW1NldHVwXSBQYXRjaGVkICR7Y2xpZW50fSBjb25maWcgdG8gdXNlIE5WTS1hd2FyZSBsYXVuY2hlcjogJHt3cmFwcGVyUGF0aH1gKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbnN0YWxsLW1jcCBiaW5hcnkgcGF0aC5cbiAqIFVzZXMgdGhlIGxvY2FsIGRlcGVuZGVuY3kgKG5vZGVfbW9kdWxlcy8uYmluL2luc3RhbGwtbWNwKSBmaXJzdCxcbiAqIGZhbGxzIGJhY2sgdG8gbnB4IGlmIG5vdCBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxNY3BCaW4oKTogeyBjbWQ6IHN0cmluZzsgcHJlZml4QXJnczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IGxvY2FsQmluID0gam9pbihkaXJuYW1lKGRpcm5hbWUoZGlybmFtZShfX2Rpcm5hbWUpKSksICdub2RlX21vZHVsZXMnLCAnLmJpbicsICdpbnN0YWxsLW1jcCcpO1xuICB0cnkge1xuICAgIGFjY2Vzc1N5bmMobG9jYWxCaW4sIGZzQ29uc3RhbnRzLlhfT0spO1xuICAgIHJldHVybiB7IGNtZDogbG9jYWxCaW4sIHByZWZpeEFyZ3M6IFtdIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGNtZDogJ25weCcsIHByZWZpeEFyZ3M6IFsnaW5zdGFsbC1tY3AnXSB9O1xuICB9XG59XG5cbi8qKlxuICogUnVuIGluc3RhbGwtbWNwIHRvIGNvbmZpZ3VyZSBhIHNwZWNpZmljIE1DUCBjbGllbnQuXG4gKlxuICogVXNlcyB0aGUgYnVuZGxlZCBpbnN0YWxsLW1jcCBkZXBlbmRlbmN5IChNSVQsIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBlcm1lbW9yeWFpL2luc3RhbGwtbWNwKS5cbiAqIENvbW1hbmQgYXJndW1lbnRzIGFyZSBmdWxseSBoYXJkY29kZWQg4oCUIG5vIHVzZXIgaW5wdXQgcmVhY2hlcyB0aGUgc2hlbGwuXG4gKiBleGVjRmlsZSBpcyB1c2VkIChub3QgZXhlYykgdG8gcHJldmVudCBzaGVsbCBpbmplY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHJ1bkluc3RhbGxNY3AoY2xpZW50OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHsgY21kLCBwcmVmaXhBcmdzIH0gPSByZXNvbHZlSW5zdGFsbE1jcEJpbigpO1xuICAgIGNvbnN0IHRhZyA9IHZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJ0BsYXRlc3QnO1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAuLi5wcmVmaXhBcmdzLFxuICAgICAgYEBkb2xsaG91c2VtY3AvbWNwLXNlcnZlciR7dGFnfWAsXG4gICAgICAnLS1jbGllbnQnLCBjbGllbnQsXG4gICAgICAnLS1uYW1lJywgJ2RvbGxob3VzZW1jcCcsXG4gICAgICAnLS15ZXMnLFxuICAgIF07XG5cbiAgICBleGVjRmlsZShjbWQsIGFyZ3MsIHsgdGltZW91dDogMzBfMDAwIH0sIChlcnIsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3Ioc3RkZXJyIHx8IGVyci5tZXNzYWdlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoc3Rkb3V0IHx8ICdJbnN0YWxsYXRpb24gY29tcGxldGVkLicpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
|
|
1074
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL3JvdXRlcy9zZXR1cFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBSSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBb0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsSSxNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8s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QU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2V0dXAgUm91dGVzIOKAlCBBdXRvLWluc3RhbGwgRG9sbGhvdXNlTUNQIHRvIE1DUCBjbGllbnRzXG4gKlxuICogVXNlcyBgaW5zdGFsbC1tY3BgIChodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtZW1vcnlhaS9pbnN0YWxsLW1jcClcbiAqIHRvIGluamVjdCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBpbnRvIHN1cHBvcnRlZCBNQ1AgY2xpZW50IGNvbmZpZyBmaWxlcy5cbiAqXG4gKiBTZWN1cml0eTogbG9jYWxob3N0LW9ubHkgYmluZGluZyAoZW5mb3JjZWQgYnkgc2VydmVyLnRzKSwgcmF0ZS1saW1pdGVkLFxuICogYW5kIGNvbW1hbmQgYXJndW1lbnRzIGFyZSBoYXJkY29kZWQg4oCUIG5vIHVzZXItc3VwcGxpZWQgc2hlbGwgaW5wdXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYWNjZXNzU3luYywgY29uc3RhbnRzIGFzIGZzQ29uc3RhbnRzIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBhY2Nlc3MsIGNobW9kLCBta2RpciwgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgaG9tZWRpciwgcGxhdGZvcm0gfSBmcm9tICdub2RlOm9zJztcblxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSk7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX1ZFUlNJT04gfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXRQZXJtaXNzaW9uSG9va1N0YXR1cywgaW5zdGFsbFBlcm1pc3Npb25Ib29rLCB0eXBlIEluc3RhbGxQZXJtaXNzaW9uSG9va1Jlc3VsdCB9IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25Ib29rcy5qcyc7XG5cbmNvbnN0IEdJVEhVQl9SRVBPID0gJ0RvbGxob3VzZU1DUC9tY3Atc2VydmVyJztcbmNvbnN0IE1DUEJfQVNTRVRfUEFUVEVSTiA9IC9eZG9sbGhvdXNlbWNwLS4qXFwubWNwYiQvO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyByYW5kb21JbnQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBQb3N0SG9nIH0gZnJvbSAncG9zdGhvZy1ub2RlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG4vLyBQb3N0SG9nIHByb2plY3QgY2FwdHVyZSBrZXkg4oCUIHdyaXRlLW9ubHkgYnkgZGVzaWduLCBzYWZlIHRvIGV4cG9zZSBwdWJsaWNseS5cbi8vIFRoaXMga2V5IGNhbiBPTkxZIHNlbmQgZXZlbnRzIHRvIFBvc3RIb2c7IGl0IGNhbm5vdCByZWFkIGRhdGEsIHF1ZXJ5IGFuYWx5dGljcyxcbi8vIGNvbmZpZ3VyZSBkZXN0aW5hdGlvbnMsIG9yIGFjY2VzcyBhbnkgb3RoZXIgUG9zdEhvZyBBUEkuIFNhbWUga2V5IHVzZWQgaW5cbi8vIHNyYy90ZWxlbWV0cnkvT3BlcmF0aW9uYWxUZWxlbWV0cnkudHMuIFZlcmlmaWVkIHdyaXRlLW9ubHkgMjAyNi0wNC0wNy5cbi8vIENhbiBiZSBvdmVycmlkZGVuIHdpdGggUE9TVEhPR19BUElfS0VZIGVudiB2YXIgZm9yIGN1c3RvbSBQb3N0SG9nIGluc3RhbGxhdGlvbnMuXG5jb25zdCBQT1NUSE9HX1BST0pFQ1RfS0VZID0gcHJvY2Vzcy5lbnYuUE9TVEhPR19BUElfS0VZIHx8ICdwaGNfeEZKS0lIQXFSWDFZTGEwVFNkVEd3R2oxOWQxSmVvWERLakpOWXE0OTJ2cSc7XG5cbi8qKiBBbGxvd2VkIGNsaWVudCBpZGVudGlmaWVycyDigJQgbXVzdCBtYXRjaCBpbnN0YWxsLW1jcCdzIC0tY2xpZW50IHZhbHVlcyAqL1xuY29uc3QgQUxMT1dFRF9DTElFTlRTID0gbmV3IFNldChbXG4gICdjbGF1ZGUnLFxuICAnY2xhdWRlLWNvZGUnLFxuICAnY3Vyc29yJyxcbiAgJ3ZzY29kZScsXG4gICdjbGluZScsXG4gICdyb28tY2xpbmUnLFxuICAnd2luZHN1cmYnLFxuICAnd2l0c3knLFxuICAnZW5jb252bycsXG4gICdnZW1pbmktY2xpJyxcbiAgJ2dvb3NlJyxcbiAgJ3plZCcsXG4gICd3YXJwJyxcbiAgJ2NvZGV4Jyxcbl0pO1xuXG4vKiogQWxsb3dlZCByZWxlYXNlIGNoYW5uZWxzIGZvciB0aGUgaW5zdGFsbCBlbmRwb2ludC4gKi9cbmNvbnN0IEFMTE9XRURfSU5TVEFMTF9DSEFOTkVMUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoWydsYXRlc3QnLCAnYmV0YScsICdyYyddKTtcblxuLyoqIFJhdGUgbGltaXQ6IDUgaW5zdGFsbHMgcGVyIG1pbnV0ZSAqL1xuY29uc3QgaW5zdGFsbExpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDUsIDYwXzAwMCk7XG5cbi8qKlxuICogS25vd24gY29uZmlnIGZpbGUgcGF0aHMgcGVyIGNsaWVudC5cbiAqIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICovXG5mdW5jdGlvbiBnZXRDb25maWdQYXRoKGNsaWVudDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKCk7XG4gIGNvbnN0IHBsYXQgPSBwbGF0Zm9ybSgpO1xuXG4gIGNvbnN0IHBhdGhzOiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBzdHJpbmcgfCBudWxsPiA9IHtcbiAgICAnY2xhdWRlJzogKCkgPT4ge1xuICAgICAgaWYgKHBsYXQgPT09ICdkYXJ3aW4nKSByZXR1cm4gam9pbihob21lLCAnTGlicmFyeScsICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgJ0NsYXVkZScsICdjbGF1ZGVfZGVza3RvcF9jb25maWcuanNvbicpO1xuICAgICAgaWYgKHBsYXQgPT09ICd3aW4zMicpIHJldHVybiBqb2luKHByb2Nlc3MuZW52LkFQUERBVEEgfHwgam9pbihob21lLCAnQXBwRGF0YScsICdSb2FtaW5nJyksICdDbGF1ZGUnLCAnY2xhdWRlX2Rlc2t0b3BfY29uZmlnLmpzb24nKTtcbiAgICAgIHJldHVybiBqb2luKGhvbWUsICcuY29uZmlnJywgJ0NsYXVkZScsICdjbGF1ZGVfZGVza3RvcF9jb25maWcuanNvbicpO1xuICAgIH0sXG4gICAgJ2NsYXVkZS1jb2RlJzogKCkgPT4gam9pbihob21lLCAnLmNsYXVkZS5qc29uJyksXG4gICAgJ2N1cnNvcic6ICgpID0+IGpvaW4oaG9tZSwgJy5jdXJzb3InLCAnbWNwLmpzb24nKSxcbiAgICAnd2luZHN1cmYnOiAoKSA9PiBqb2luKGhvbWUsICcuY29kZWl1bScsICd3aW5kc3VyZicsICdtY3BfY29uZmlnLmpzb24nKSxcbiAgICAnbG1zdHVkaW8nOiAoKSA9PiBqb2luKGhvbWUsICcubG1zdHVkaW8nLCAnbWNwLmpzb24nKSxcbiAgICAnZ2VtaW5pLWNsaSc6ICgpID0+IGpvaW4oaG9tZSwgJy5nZW1pbmknLCAnc2V0dGluZ3MuanNvbicpLFxuICAgICdjb2RleCc6ICgpID0+IGpvaW4oaG9tZSwgJy5jb2RleCcsICdjb25maWcudG9tbCcpLFxuICB9O1xuXG4gIGNvbnN0IHJlc29sdmVyID0gcGF0aHNbY2xpZW50XTtcbiAgcmV0dXJuIHJlc29sdmVyID8gcmVzb2x2ZXIoKSA6IG51bGw7XG59XG5cbi8qKlxuICogT3BlbiBhIGZpbGUgaW4gdGhlIHN5c3RlbSdzIGRlZmF1bHQgdGV4dCBlZGl0b3IuXG4gKi9cbmZ1bmN0aW9uIG9wZW5JbkVkaXRvcihmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBsZXQgY21kOiBzdHJpbmc7XG4gICAgbGV0IGFyZ3M6IHN0cmluZ1tdO1xuXG4gICAgaWYgKHBsYXQgPT09ICdkYXJ3aW4nKSB7XG4gICAgICBjbWQgPSAnb3Blbic7XG4gICAgICBhcmdzID0gWyctdCcsIGZpbGVQYXRoXTtcbiAgICB9IGVsc2UgaWYgKHBsYXQgPT09ICd3aW4zMicpIHtcbiAgICAgIGNtZCA9ICdub3RlcGFkJztcbiAgICAgIGFyZ3MgPSBbZmlsZVBhdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbWQgPSAneGRnLW9wZW4nO1xuICAgICAgYXJncyA9IFtmaWxlUGF0aF07XG4gICAgfVxuXG4gICAgZXhlY0ZpbGUoY21kLCBhcmdzLCB7IHRpbWVvdXQ6IDEwXzAwMCB9LCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvdWxkIG5vdCBvcGVuIGVkaXRvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoJ09wZW5lZCBpbiBlZGl0b3IuJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKiogQ2xpZW50cyB3aG9zZSBjb25maWcgZmlsZXMgd2UgY2FuIGxvY2F0ZSBhbmQgb3BlbiAqL1xuY29uc3QgT1BFTkFCTEVfQ0xJRU5UUyA9IG5ldyBTZXQoW1xuICAnY2xhdWRlJywgJ2NsYXVkZS1jb2RlJywgJ2N1cnNvcicsICd3aW5kc3VyZicsICdsbXN0dWRpbycsICdnZW1pbmktY2xpJywgJ2NvZGV4Jyxcbl0pO1xuXG4vKipcbiAqIENyZWF0ZSBzZXR1cCBoYW5kbGVycyAoRXhwcmVzcyA1IGNvbXBhdGlibGUg4oCUIHBsYWluIGhhbmRsZXIgZnVuY3Rpb25zLCBub3QgUm91dGVyKS5cbiAqL1xuaW50ZXJmYWNlIERldGVjdFJlc3VsdCB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgY29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgY3VycmVudENvbmZpZz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzZXJ2ZXJLZXk/OiBzdHJpbmc7XG59XG5cbi8qKiBQYXJzZSBhIFRPTUwgY29uZmlnIGZpbGUgZm9yIGEgRG9sbGhvdXNlTUNQIHNlcnZlciBlbnRyeSAqL1xuZnVuY3Rpb24gcGFyc2VUb21sQ29uZmlnKHJhdzogc3RyaW5nKTogT21pdDxEZXRlY3RSZXN1bHQsICdjb25maWdQYXRoJz4ge1xuICBpZiAoIXJhdy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkb2xsaG91c2VtY3AnKSkge1xuICAgIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IHRvbWxDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGNvbnN0IHNlY3Rpb25NYXRjaCA9IC9cXFttY3Bfc2VydmVyc1xcLihbXlxcXV0qZG9sbGhvdXNlbWNwW15cXF1dKilcXF0vaS5leGVjKHJhdyk7XG4gIGlmICghc2VjdGlvbk1hdGNoKSByZXR1cm4geyBpbnN0YWxsZWQ6IHRydWUsIGN1cnJlbnRDb25maWc6IHRvbWxDb25maWcsIHNlcnZlcktleTogJ21jcF9zZXJ2ZXJzJyB9O1xuXG4gIHRvbWxDb25maWcuc2VydmVyTmFtZSA9IHNlY3Rpb25NYXRjaFsxXTtcbiAgY29uc3Qgc2VjdGlvblN0YXJ0ID0gc2VjdGlvbk1hdGNoLmluZGV4ICsgc2VjdGlvbk1hdGNoWzBdLmxlbmd0aDtcbiAgY29uc3QgbmV4dFNlY3Rpb24gPSByYXcuaW5kZXhPZignXFxuWycsIHNlY3Rpb25TdGFydCk7XG4gIGNvbnN0IHNlY3Rpb25Db250ZW50ID0gbmV4dFNlY3Rpb24gPiAtMSA/IHJhdy5zbGljZShzZWN0aW9uU3RhcnQsIG5leHRTZWN0aW9uKSA6IHJhdy5zbGljZShzZWN0aW9uU3RhcnQpO1xuXG4gIGNvbnN0IGNvbW1hbmRNYXRjaCA9IC9jb21tYW5kXFxzKj1cXHMqXCIoW15cIl0rKVwiLy5leGVjKHNlY3Rpb25Db250ZW50KTtcbiAgY29uc3QgYXJnc01hdGNoID0gL2FyZ3NcXHMqPVxccypcXFsoW15cXF1dKilcXF0vLmV4ZWMoc2VjdGlvbkNvbnRlbnQpO1xuICBpZiAoY29tbWFuZE1hdGNoKSB0b21sQ29uZmlnLmNvbW1hbmQgPSBjb21tYW5kTWF0Y2hbMV07XG4gIGlmIChhcmdzTWF0Y2gpIHtcbiAgICB0b21sQ29uZmlnLmFyZ3MgPSBhcmdzTWF0Y2hbMV0uc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKS5yZXBsYWNlQWxsKCdcIicsICcnKSk7XG4gIH1cbiAgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiB0b21sQ29uZmlnLCBzZXJ2ZXJLZXk6ICdtY3Bfc2VydmVycycgfTtcbn1cblxuLyoqIFBhcnNlIGEgSlNPTiBjb25maWcgZmlsZSBmb3IgYSBEb2xsaG91c2VNQ1Agc2VydmVyIGVudHJ5ICovXG5mdW5jdGlvbiBwYXJzZUpzb25Db25maWcocmF3OiBzdHJpbmcpOiBPbWl0PERldGVjdFJlc3VsdCwgJ2NvbmZpZ1BhdGgnPiB7XG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydtY3BTZXJ2ZXJzJywgJ3NlcnZlcnMnXSkge1xuICAgIGlmIChwYXJzZWRba2V5XT8uZG9sbGhvdXNlbWNwKSB7XG4gICAgICByZXR1cm4geyBpbnN0YWxsZWQ6IHRydWUsIGN1cnJlbnRDb25maWc6IHBhcnNlZFtrZXldLmRvbGxob3VzZW1jcCwgc2VydmVyS2V5OiBrZXkgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xufVxuXG4vKiogQ2hlY2sgYSBzaW5nbGUgY2xpZW50IGNvbmZpZyBmaWxlIGZvciBhbiBleGlzdGluZyBEb2xsaG91c2VNQ1AgZW50cnkgKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdENsaWVudChjbGllbnQ6IHN0cmluZyk6IFByb21pc2U8RGV0ZWN0UmVzdWx0IHwgbnVsbD4ge1xuICBjb25zdCBjb25maWdQYXRoID0gZ2V0Q29uZmlnUGF0aChjbGllbnQpO1xuICBpZiAoIWNvbmZpZ1BhdGgpIHJldHVybiBudWxsO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYWNjZXNzKGNvbmZpZ1BhdGgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlLCBjb25maWdQYXRoIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlYWRGaWxlKGNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbmZpZ1BhdGguZW5kc1dpdGgoJy50b21sJykgPyBwYXJzZVRvbWxDb25maWcocmF3KSA6IHBhcnNlSnNvbkNvbmZpZyhyYXcpO1xuICAgIHJldHVybiB7IGNvbmZpZ1BhdGgsIC4uLnJlc3VsdCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlLCBjb25maWdQYXRoIH07XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgbm9ybWFsaXplIGEgY2xpZW50IG5hbWUgZnJvbSByZXF1ZXN0IGJvZHkuXG4gKiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIGNsaWVudCBuYW1lIG9yIG51bGwgKHdpdGggZXJyb3IgcmVzcG9uc2Ugc2VudCkuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xpZW50KFxuICByZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIGFsbG93ZWRTZXQ6IFNldDxzdHJpbmc+LFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHsgY2xpZW50IH0gPSByZXEuYm9keSBhcyB7IGNsaWVudD86IHN0cmluZyB9O1xuICBpZiAoIWNsaWVudCB8fCB0eXBlb2YgY2xpZW50ICE9PSAnc3RyaW5nJykge1xuICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdNaXNzaW5nIHJlcXVpcmVkIGZpZWxkOiBjbGllbnQnIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjbGllbnQpLm5vcm1hbGl6ZWRDb250ZW50LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBpZiAoIWFsbG93ZWRTZXQuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgZXJyb3I6IGBVbnN1cHBvcnRlZCBjbGllbnQ6ICR7Y2xpZW50fWAsXG4gICAgICBzdXBwb3J0ZWQ6IEFycmF5LmZyb20oYWxsb3dlZFNldCksXG4gICAgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8vIOKUgOKUgCBMaWNlbnNlIHZlcmlmaWNhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgTVNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbmNvbnN0IFZFUklGSUNBVElPTl9DT0RFX1RUTF9NSU5VVEVTID0gMTA7XG5jb25zdCBWRVJJRklDQVRJT05fQ09ERV9UVExfTVMgPSBWRVJJRklDQVRJT05fQ09ERV9UVExfTUlOVVRFUyAqIE1TX1BFUl9NSU5VVEU7XG5jb25zdCBWRVJJRklDQVRJT05fTUFYX0FUVEVNUFRTID0gNTtcblxuLyoqIEdlbmVyYXRlIGEgY3J5cHRvZ3JhcGhpY2FsbHkgcmFuZG9tIDYtZGlnaXQgdmVyaWZpY2F0aW9uIGNvZGUuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVZlcmlmaWNhdGlvbkNvZGUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyhyYW5kb21JbnQoMTAwMDAwLCA5OTk5OTkpKTtcbn1cblxuLyoqIENoZWNrIGlmIGEgdmVyaWZpY2F0aW9uIGNvZGUgaGFzIGV4cGlyZWQuICovXG5mdW5jdGlvbiBpc0NvZGVFeHBpcmVkKGV4cGlyZXNBdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBuZXcgRGF0ZShleHBpcmVzQXQpLmdldFRpbWUoKSA8IERhdGUubm93KCk7XG59XG5cbi8vIOKUgOKUgCBMaWNlbnNlIGhlbHBlcnMgKG1vZHVsZSBzY29wZSBmb3IgU29uYXJDbG91ZCBTNzcyMSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFZBTElEX0xJQ0VOU0VfVElFUlMgPSBuZXcgU2V0KFsnYWdwbCcsICdmcmVlLWNvbW1lcmNpYWwnLCAncGFpZC1jb21tZXJjaWFsJ10pO1xuY29uc3QgVkFMSURfUkVWRU5VRV9TQ0FMRVMgPSBuZXcgU2V0KFsnJDFN4oCTJDVNJywgJyQ1TeKAkyQyNU0nLCAnJDI1TeKAkyQxMDBNJywgJyQxMDBNKyddKTtcbi8vIFNhZmUgZnJvbSBSZURvUzogaW5wdXQgaXMgcHJlLWNoZWNrZWQgdG8g4omkMjU0IGNoYXJzLCBhbmQgezEsNjR9L3sxLDI1M30vezIsNjN9XG4vLyBib3VuZHMgcHJldmVudCBjYXRhc3Ryb3BoaWMgYmFja3RyYWNraW5nIG9uIGFueSBpbnB1dCB3aXRoaW4gdGhhdCBsZW5ndGguXG5jb25zdCBFTUFJTF9QQVRURVJOID0gL15bXlxcc0BdezEsNjR9QFteXFxzQF17MSwyNTN9XFwuW15cXHNAXXsyLDYzfSQvO1xuXG4vKiogU2FuaXRpemUgYSBzdHJpbmcgZmllbGQ6IHRyaW0sIHRydW5jYXRlLCByZXR1cm4gdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZnVuY3Rpb24gc2FuaXRpemUodmFsOiB1bmtub3duLCBtYXhMZW46IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJyB8fCAhdmFsLnRyaW0oKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHZhbC50cmltKCkuc2xpY2UoMCwgbWF4TGVuKTtcbn1cblxuLyoqIFZhbGlkYXRlIGVtYWlsIGZvcm1hdCBhbmQgY29tbWVyY2lhbCBhY2tub3dsZWRnbWVudHMuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbW1lcmNpYWxGaWVsZHMoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBlbWFpbCwgdGVsZW1ldHJ5QWNrbm93bGVkZ2VkIH0gPSBib2R5O1xuICBpZiAoIWVtYWlsIHx8IHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ0VtYWlsIGFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIENvbW1lcmNpYWwgYW5kIEVudGVycHJpc2UgbGljZW5zZXMnO1xuICB9XG4gIGlmIChlbWFpbC5sZW5ndGggPiAyNTQgfHwgIUVNQUlMX1BBVFRFUk4udGVzdChlbWFpbCkpIHtcbiAgICByZXR1cm4gJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgZW1haWwgYWRkcmVzcyc7XG4gIH1cbiAgaWYgKCF0ZWxlbWV0cnlBY2tub3dsZWRnZWQpIHtcbiAgICByZXR1cm4gJ1RlbGVtZXRyeSBhY2tub3dsZWRnbWVudCBpcyByZXF1aXJlZCBmb3IgQ29tbWVyY2lhbCBhbmQgRW50ZXJwcmlzZSBsaWNlbnNlcyc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBWYWxpZGF0ZSBmcmVlLWNvbW1lcmNpYWwgc3BlY2lmaWMgZmllbGRzLiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGcmVlQ29tbWVyY2lhbEZpZWxkcyhib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IGF0dHJpYnV0aW9uQWNrbm93bGVkZ2VkLCByZXZlbnVlQXR0ZXN0ZWQgfSA9IGJvZHk7XG4gIGlmICghYXR0cmlidXRpb25BY2tub3dsZWRnZWQpIHtcbiAgICByZXR1cm4gJ0F0dHJpYnV0aW9uIGFja25vd2xlZGdtZW50IGlzIHJlcXVpcmVkIGZvciBDb21tZXJjaWFsIGxpY2Vuc2VzJztcbiAgfVxuICBpZiAoIXJldmVudWVBdHRlc3RlZCkge1xuICAgIHJldHVybiAnUmV2ZW51ZSBhdHRlc3RhdGlvbiBpcyByZXF1aXJlZCBmb3IgQ29tbWVyY2lhbCBsaWNlbnNlcyc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBWYWxpZGF0ZSBlbnRlcnByaXNlIHNwZWNpZmljIGZpZWxkcy4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRW50ZXJwcmlzZUZpZWxkcyhib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IHJldmVudWVTY2FsZSwgY29tcGFueU5hbWUsIHVzZUNhc2UgfSA9IGJvZHk7XG4gIGlmICghcmV2ZW51ZVNjYWxlIHx8ICFWQUxJRF9SRVZFTlVFX1NDQUxFUy5oYXMocmV2ZW51ZVNjYWxlIGFzIHN0cmluZykpIHtcbiAgICByZXR1cm4gYFJldmVudWUgc2NhbGUgaXMgcmVxdWlyZWQuIE11c3QgYmUgb25lIG9mOiAke1suLi5WQUxJRF9SRVZFTlVFX1NDQUxFU10uam9pbignLCAnKX1gO1xuICB9XG4gIGlmICghY29tcGFueU5hbWUgfHwgdHlwZW9mIGNvbXBhbnlOYW1lICE9PSAnc3RyaW5nJyB8fCAhY29tcGFueU5hbWUudHJpbSgpKSB7XG4gICAgcmV0dXJuICdDb21wYW55IG5hbWUgaXMgcmVxdWlyZWQgZm9yIEVudGVycHJpc2UgbGljZW5zZXMnO1xuICB9XG4gIGlmICghdXNlQ2FzZSB8fCB0eXBlb2YgdXNlQ2FzZSAhPT0gJ3N0cmluZycgfHwgIXVzZUNhc2UudHJpbSgpKSB7XG4gICAgcmV0dXJuICdVc2UgY2FzZSBpcyByZXF1aXJlZCBmb3IgRW50ZXJwcmlzZSBsaWNlbnNlcyc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBWYWxpZGF0ZSBsaWNlbnNlIGZvcm0gaW5wdXQuIFJldHVybnMgZXJyb3Igc3RyaW5nIG9yIG51bGwgaWYgdmFsaWQuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxpY2Vuc2VJbnB1dChib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IHRpZXIgfSA9IGJvZHk7XG4gIGlmICghdGllciB8fCAhVkFMSURfTElDRU5TRV9USUVSUy5oYXModGllciBhcyBzdHJpbmcpKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIGxpY2Vuc2UgdGllci4gTXVzdCBiZSBvbmUgb2Y6ICR7Wy4uLlZBTElEX0xJQ0VOU0VfVElFUlNdLmpvaW4oJywgJyl9YDtcbiAgfVxuICBpZiAodGllciAhPT0gJ2FncGwnKSB7XG4gICAgY29uc3QgY29tbWVyY2lhbEVycm9yID0gdmFsaWRhdGVDb21tZXJjaWFsRmllbGRzKGJvZHkpO1xuICAgIGlmIChjb21tZXJjaWFsRXJyb3IpIHJldHVybiBjb21tZXJjaWFsRXJyb3I7XG4gIH1cbiAgaWYgKHRpZXIgPT09ICdmcmVlLWNvbW1lcmNpYWwnKSB7XG4gICAgY29uc3QgZnJlZUVycm9yID0gdmFsaWRhdGVGcmVlQ29tbWVyY2lhbEZpZWxkcyhib2R5KTtcbiAgICBpZiAoZnJlZUVycm9yKSByZXR1cm4gZnJlZUVycm9yO1xuICB9XG4gIGlmICh0aWVyID09PSAncGFpZC1jb21tZXJjaWFsJykge1xuICAgIGNvbnN0IGVudGVycHJpc2VFcnJvciA9IHZhbGlkYXRlRW50ZXJwcmlzZUZpZWxkcyhib2R5KTtcbiAgICBpZiAoZW50ZXJwcmlzZUVycm9yKSByZXR1cm4gZW50ZXJwcmlzZUVycm9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQnVpbGQgbGljZW5zZSBkYXRhIG9iamVjdCBmcm9tIHZhbGlkYXRlZCBpbnB1dC4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGljZW5zZURhdGEoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHsgdGllciwgZW1haWwsIHJldmVudWVTY2FsZSwgY29tcGFueU5hbWUsIHVzZUNhc2UgfSA9IGJvZHk7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyB0aWVyIH07XG4gIGlmICh0aWVyICE9PSAnYWdwbCcpIHtcbiAgICBkYXRhLmVtYWlsID0gc2FuaXRpemUoZW1haWwsIDI1NCk7XG4gICAgZGF0YS5hdHRlc3RlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGRhdGEudGVsZW1ldHJ5UmVxdWlyZWQgPSB0cnVlO1xuICB9XG4gIGlmICh0aWVyID09PSAncGFpZC1jb21tZXJjaWFsJykge1xuICAgIGlmIChyZXZlbnVlU2NhbGUpIGRhdGEucmV2ZW51ZVNjYWxlID0gcmV2ZW51ZVNjYWxlO1xuICAgIGlmIChjb21wYW55TmFtZSkgZGF0YS5jb21wYW55TmFtZSA9IHNhbml0aXplKGNvbXBhbnlOYW1lLCAyMDApO1xuICAgIGlmICh1c2VDYXNlKSBkYXRhLnVzZUNhc2UgPSBzYW5pdGl6ZSh1c2VDYXNlLCA1MDApO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKiogU2VuZCBsaWNlbnNlX2FjdGl2YXRpb24gZXZlbnQgdG8gUG9zdEhvZyBmb3IgY29tbWVyY2lhbCB0aWVycy4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVQb3N0SG9nTGljZW5zZUV2ZW50KGxpY2Vuc2VEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwb3N0aG9nID0gbmV3IFBvc3RIb2coUE9TVEhPR19QUk9KRUNUX0tFWSwge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlBPU1RIT0dfSE9TVCB8fCAnaHR0cHM6Ly9hcHAucG9zdGhvZy5jb20nLFxuICAgIGZsdXNoQXQ6IDEsXG4gICAgZmx1c2hJbnRlcnZhbDogNTAwMCxcbiAgfSk7XG4gIGxldCBpbnN0YWxsSWQ6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCBpZFBhdGggPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLnRlbGVtZXRyeS1pZCcpO1xuICAgIGluc3RhbGxJZCA9IChhd2FpdCByZWFkRmlsZShpZFBhdGgsICd1dGYtOCcpKS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIGluc3RhbGxJZCA9IHV1aWR2NCgpO1xuICB9XG4gIGNvbnN0IGV2ZW50VHlwZSA9IChsaWNlbnNlRGF0YS5ldmVudFR5cGUgYXMgc3RyaW5nKSA/PyAnYWN0aXZhdGlvbic7XG4gIHBvc3Rob2cuY2FwdHVyZSh7XG4gICAgZGlzdGluY3RJZDogaW5zdGFsbElkLFxuICAgIGV2ZW50OiAnbGljZW5zZV9hY3RpdmF0aW9uJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB0aWVyOiBsaWNlbnNlRGF0YS50aWVyLFxuICAgICAgZW1haWw6IGxpY2Vuc2VEYXRhLmVtYWlsLFxuICAgICAgZXZlbnRfdHlwZTogZXZlbnRUeXBlLFxuICAgICAgc2VydmVyX3ZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIG9zOiBwbGF0Zm9ybSgpLFxuICAgICAgLi4uKGV2ZW50VHlwZSA9PT0gJ3ZlcmlmaWNhdGlvbicgPyB7XG4gICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25Db2RlLFxuICAgICAgfSA6IHt9KSxcbiAgICAgIC4uLihldmVudFR5cGUgPT09ICdhY3RpdmF0aW9uJyA/IHtcbiAgICAgICAgdmVyaWZpY2F0aW9uX3RpbWVfbXM6IGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbl90aW1lX21zLFxuICAgICAgICB2ZXJpZmljYXRpb25fdGltZV9zZWNvbmRzOiBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25fdGltZV9tc1xuICAgICAgICAgID8gTWF0aC5yb3VuZCgobGljZW5zZURhdGEudmVyaWZpY2F0aW9uX3RpbWVfbXMgYXMgbnVtYmVyKSAvIDEwMDApIDogdW5kZWZpbmVkLFxuICAgICAgICB2ZXJpZmljYXRpb25fYXR0ZW1wdHM6IGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbl9hdHRlbXB0cyxcbiAgICAgIH0gOiB7fSksXG4gICAgICAuLi4obGljZW5zZURhdGEudGllciA9PT0gJ3BhaWQtY29tbWVyY2lhbCcgPyB7XG4gICAgICAgIHJldmVudWVfc2NhbGU6IGxpY2Vuc2VEYXRhLnJldmVudWVTY2FsZSxcbiAgICAgICAgY29tcGFueV9uYW1lOiBsaWNlbnNlRGF0YS5jb21wYW55TmFtZSxcbiAgICAgICAgdXNlX2Nhc2U6IGxpY2Vuc2VEYXRhLnVzZUNhc2UsXG4gICAgICB9IDoge30pLFxuICAgIH0sXG4gIH0pO1xuICBhd2FpdCBwb3N0aG9nLnNodXRkb3duKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR1cFJvdXRlcyhvcHRzPzoge1xuICAvKiogT3ZlcnJpZGUgaW5zdGFsbC1tY3AgcnVubmVyLiBGb3IgdGVzdGluZyBvbmx5IOKAlCBwcmVmaXggc2lnbmFscyB0ZXN0LW9ubHkgdXNlLiAqL1xuICBfcnVuSW5zdGFsbE1jcD86IChjbGllbnQ6IHN0cmluZywgdmVyc2lvbj86IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKiogT3ZlcnJpZGUgcGVybWlzc2lvbiBob29rIGluc3RhbGxlci4gRm9yIHRlc3Rpbmcgb25seS4gKi9cbiAgX2luc3RhbGxQZXJtaXNzaW9uSG9vaz86IChjbGllbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxJbnN0YWxsUGVybWlzc2lvbkhvb2tSZXN1bHQ+O1xuICAvKiogU2tpcCB0aGUgc2xpZGluZy13aW5kb3cgcmF0ZSBsaW1pdGVyLiBGb3IgdGVzdGluZyBvbmx5LiAqL1xuICBfc2tpcFJhdGVMaW1pdD86IGJvb2xlYW47XG59KToge1xuICBpbnN0YWxsSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgb3BlbkNvbmZpZ0hhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIHZlcnNpb25IYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBtY3BiUmVkaXJlY3RIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBkZXRlY3RIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRMaWNlbnNlSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2V0TGljZW5zZUhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIHZlcmlmeUxpY2Vuc2VIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZXNlbmRWZXJpZmljYXRpb25IYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xufSB7XG4gIGNvbnN0IGluc3RhbGxlciA9IG9wdHM/Ll9ydW5JbnN0YWxsTWNwID8/IHJ1bkluc3RhbGxNY3A7XG4gIGNvbnN0IHBlcm1pc3Npb25Ib29rSW5zdGFsbGVyID0gb3B0cz8uX2luc3RhbGxQZXJtaXNzaW9uSG9vayA/PyBpbnN0YWxsUGVybWlzc2lvbkhvb2s7XG4gIGNvbnN0IHNraXBSYXRlTGltaXQgPSBvcHRzPy5fc2tpcFJhdGVMaW1pdCA/PyBmYWxzZTtcbiAgLy8g4pSA4pSAIERldGVjdCBleGlzdGluZyBpbnN0YWxsYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBkZXRlY3RIYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBjbGllbnRzID0gW1xuICAgICAgeyBpZDogJ2NsYXVkZScsIG5hbWU6ICdDbGF1ZGUgRGVza3RvcCcgfSxcbiAgICAgIHsgaWQ6ICdjbGF1ZGUtY29kZScsIG5hbWU6ICdDbGF1ZGUgQ29kZScgfSxcbiAgICAgIHsgaWQ6ICdjdXJzb3InLCBuYW1lOiAnQ3Vyc29yJyB9LFxuICAgICAgeyBpZDogJ3dpbmRzdXJmJywgbmFtZTogJ1dpbmRzdXJmJyB9LFxuICAgICAgeyBpZDogJ2xtc3R1ZGlvJywgbmFtZTogJ0xNIFN0dWRpbycgfSxcbiAgICAgIHsgaWQ6ICdnZW1pbmktY2xpJywgbmFtZTogJ0dlbWluaSBDTEknIH0sXG4gICAgICB7IGlkOiAnY29kZXgnLCBuYW1lOiAnQ29kZXgnIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50cy5tYXAoYXN5bmMgKHsgaWQsIG5hbWUgfSkgPT4ge1xuICAgICAgY29uc3QgZGV0ZWN0aW9uID0gYXdhaXQgZGV0ZWN0Q2xpZW50KGlkKTtcbiAgICAgIGlmIChkZXRlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbmFtZSwgLi4uZGV0ZWN0aW9uIH07XG4gICAgICAgIGlmIChpZCA9PT0gJ2NsYXVkZS1jb2RlJykge1xuICAgICAgICAgIGNvbnN0IGhvb2tTdGF0dXMgPSBnZXRQZXJtaXNzaW9uSG9va1N0YXR1cygpO1xuICAgICAgICAgIHJlc3VsdC5ob29rSW5zdGFsbGVkID0gaG9va1N0YXR1cy5pbnN0YWxsZWQgJiYgaG9va1N0YXR1cy5ob3N0ID09PSAnY2xhdWRlLWNvZGUnO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNbaWRdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJlcy5qc29uKHJlc3VsdHMpO1xuICB9O1xuXG4gIC8vIOKUgOKUgCBPcGVuIGNvbmZpZyBmaWxlIGluIGVkaXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qgb3BlbkNvbmZpZ0hhbmRsZXIgPSBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENsaWVudCA9IHZhbGlkYXRlQ2xpZW50KHJlcSwgcmVzLCBPUEVOQUJMRV9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBnZXRDb25maWdQYXRoKG5vcm1hbGl6ZWRDbGllbnQpO1xuICAgIGlmICghY29uZmlnUGF0aCkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYENvbmZpZyBwYXRoIHVua25vd24gZm9yOiAke25vcm1hbGl6ZWRDbGllbnR9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCBlbXB0eSBjb250ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSA/ICcnIDogJ3t9JztcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGNvbmZpZ1BhdGgsIGNvbnRlbnQgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIENyZWF0ZWQgZW1wdHkgY29uZmlnOiAke2NvbmZpZ1BhdGh9YCk7XG4gICAgICB9IGNhdGNoIChta0Vycikge1xuICAgICAgICBjb25zdCBtc2cgPSBta0VyciBpbnN0YW5jZW9mIEVycm9yID8gbWtFcnIubWVzc2FnZSA6IFN0cmluZyhta0Vycik7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBDb3VsZCBub3QgY3JlYXRlIGNvbmZpZyBmaWxlOiAke21zZ31gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gT3BlbmluZyBjb25maWcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7Y29uZmlnUGF0aH1gKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcGVuSW5FZGl0b3IoY29uZmlnUGF0aCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IG1lc3NhZ2UsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBBdXRvLWluc3RhbGwgdmlhIGluc3RhbGwtbWNwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBpbnN0YWxsSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXNraXBSYXRlTGltaXQgJiYgIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIFRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnQgPSB2YWxpZGF0ZUNsaWVudChyZXEsIHJlcywgQUxMT1dFRF9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gb3IgY2hhbm5lbCBpZiBwcm92aWRlZCDigJQgbXVzdCBiZSBzZW12ZXItbGlrZSBvciBhIGtub3duIGNoYW5uZWwgKG5vIHNoZWxsIGluamVjdGlvbilcbiAgICBjb25zdCB7IHZlcnNpb24sIGNoYW5uZWwgfSA9IHJlcS5ib2R5IGFzIHsgdmVyc2lvbj86IHN0cmluZzsgY2hhbm5lbD86IHN0cmluZyB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gdmVyc2lvbiA/IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHZlcnNpb24pLm5vcm1hbGl6ZWRDb250ZW50IDogdW5kZWZpbmVkO1xuICAgIGlmIChub3JtYWxpemVkVmVyc2lvbiAmJiAhL15cXGQrXFwuXFxkK1xcLlxcZCsvLnRlc3Qobm9ybWFsaXplZFZlcnNpb24pKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCB2ZXJzaW9uIGZvcm1hdC4gRXhwZWN0ZWQgc2VtdmVyIChlLmcuLCAyLjAuMiknIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDaGFubmVsIG92ZXJyaWRlcyB2ZXJzaW9uIGZvciBhdXRvLXVwZGF0aW5nIGluc3RhbGxzIChiZXRhLCByYywgbGF0ZXN0KS5cbiAgICAvLyBOb3JtYWxpemUgYW5kIHZhbGlkYXRlIGFnYWluc3QgdGhlIGFsbG93bGlzdCB0byBwcmV2ZW50IGluamVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkQ2hhbm5lbCA9IGNoYW5uZWwgPyBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjaGFubmVsKS5ub3JtYWxpemVkQ29udGVudCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlZmZlY3RpdmVWZXJzaW9uID0gbm9ybWFsaXplZENoYW5uZWwgJiYgQUxMT1dFRF9JTlNUQUxMX0NIQU5ORUxTLmhhcyhub3JtYWxpemVkQ2hhbm5lbCkgJiYgbm9ybWFsaXplZENoYW5uZWwgIT09ICdsYXRlc3QnXG4gICAgICA/IG5vcm1hbGl6ZWRDaGFubmVsXG4gICAgICA6IG5vcm1hbGl6ZWRWZXJzaW9uO1xuXG4gICAgY29uc3QgdGFnID0gZWZmZWN0aXZlVmVyc2lvbiA/IGBAJHtlZmZlY3RpdmVWZXJzaW9ufWAgOiAnQGxhdGVzdCc7XG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gSW5zdGFsbGluZyBEb2xsaG91c2VNQ1Ake3RhZ30gdG8gY2xpZW50OiAke25vcm1hbGl6ZWRDbGllbnR9YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaW5zdGFsbGVyKG5vcm1hbGl6ZWRDbGllbnQsIGVmZmVjdGl2ZVZlcnNpb24pO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCB0byAke25vcm1hbGl6ZWRDbGllbnR9YCk7XG5cbiAgICAgIC8vIEJlc3QtZWZmb3J0IE5WTSBtaXRpZ2F0aW9uIChtYWNPUy9MaW51eCBvbmx5KS5cbiAgICAgIC8vIEV4dHJhY3RlZCBpbnRvIGFwcGx5TnZtTGF1bmNoZXJJZk5lZWRlZCB0byBrZWVwIHRoaXMgaGFuZGxlcidzXG4gICAgICAvLyBjb2duaXRpdmUgY29tcGxleGl0eSB3aXRoaW4gYm91bmRzIChTb25hckNsb3VkIFMzNzc2KS5cbiAgICAgIGNvbnN0IG52bVJlc3VsdCA9IGF3YWl0IGFwcGx5TnZtTGF1bmNoZXJJZk5lZWRlZChub3JtYWxpemVkQ2xpZW50KTtcblxuICAgICAgLy8gdHJ1ZSA9IG1pdGlnYXRpb24gYXBwbGllZDsgZmFsc2UgPSBwcmVzZW50IGJ1dCBmYWlsZWQ7IG51bGwgPSBub3QgYXBwbGljYWJsZVxuICAgICAgbGV0IG52bU1pdGlnYXRpb25BcHBsaWVkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAobnZtUmVzdWx0ID09PSAnYXBwbGllZCcpIHtcbiAgICAgICAgbnZtTWl0aWdhdGlvbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChudm1SZXN1bHQgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIG52bU1pdGlnYXRpb25BcHBsaWVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhvb2tJbnN0YWxsID0gYXdhaXQgcGVybWlzc2lvbkhvb2tJbnN0YWxsZXIobm9ybWFsaXplZENsaWVudCk7XG5cbiAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBjbGllbnQ6IG5vcm1hbGl6ZWRDbGllbnQsXG4gICAgICAgIHZlcnNpb246IGVmZmVjdGl2ZVZlcnNpb24gfHwgJ2xhdGVzdCcsXG4gICAgICAgIG52bU1pdGlnYXRpb25BcHBsaWVkLFxuICAgICAgICBob29rSW5zdGFsbCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgIGxvZ2dlci53YXJuKGBbU2V0dXBdIEluc3RhbGwgZmFpbGVkIGZvciAke25vcm1hbGl6ZWRDbGllbnR9OiAke21lc3NhZ2V9YCk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogbWVzc2FnZSwgY2xpZW50OiBub3JtYWxpemVkQ2xpZW50IH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyDilIDilIAgVmVyc2lvbiBpbmZvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCB2ZXJzaW9uSGFuZGxlciA9IGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgbG9jYWwgPSB7XG4gICAgICB2ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICBtY3BiVXJsOiBgaHR0cHM6Ly9naXRodWIuY29tLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BBQ0tBR0VfVkVSU0lPTn0vZG9sbGhvdXNlbWNwLSR7UEFDS0FHRV9WRVJTSU9OfS5tY3BiYCxcbiAgICB9O1xuXG4gICAgLy8gUXVlcnkgR2l0SHViIGZvciB0aGUgYWN0dWFsIGxhdGVzdCByZWxlYXNlXG4gICAgbGV0IGxhdGVzdCA9IGxvY2FsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnaFJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2xhdGVzdGAsIHtcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC1TZXR1cCcgfSxcbiAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICAgICAgfSk7XG4gICAgICBpZiAoZ2hSZXMub2spIHtcbiAgICAgICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IGdoUmVzLmpzb24oKSBhcyB7IHRhZ19uYW1lOiBzdHJpbmc7IGFzc2V0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGJyb3dzZXJfZG93bmxvYWRfdXJsOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgY29uc3QgbWNwYkFzc2V0ID0gcmVsZWFzZS5hc3NldHMuZmluZChhID0+IE1DUEJfQVNTRVRfUEFUVEVSTi50ZXN0KGEubmFtZSkpO1xuICAgICAgICBsYXRlc3QgPSB7XG4gICAgICAgICAgdmVyc2lvbjogcmVsZWFzZS50YWdfbmFtZS5yZXBsYWNlKC9edi8sICcnKSxcbiAgICAgICAgICBtY3BiVXJsOiBtY3BiQXNzZXQ/LmJyb3dzZXJfZG93bmxvYWRfdXJsIHx8XG4gICAgICAgICAgICBgaHR0cHM6Ly9naXRodWIuY29tLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2Rvd25sb2FkLyR7cmVsZWFzZS50YWdfbmFtZX0vZG9sbGhvdXNlbWNwLSR7cmVsZWFzZS50YWdfbmFtZS5yZXBsYWNlKC9edi8sICcnKX0ubWNwYmAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBHaXRIdWIgdW5yZWFjaGFibGUg4oCUIHVzZSBsb2NhbCB2ZXJzaW9uIGluZm9cbiAgICB9XG5cbiAgICByZXMuanNvbih7XG4gICAgICBydW5uaW5nOiBsb2NhbCxcbiAgICAgIGxhdGVzdCxcbiAgICAgIGlzTGF0ZXN0OiBsb2NhbC52ZXJzaW9uID09PSBsYXRlc3QudmVyc2lvbixcbiAgICB9KTtcbiAgfTtcblxuICAvLyDilIDilIAgLm1jcGIgZG93bmxvYWQgcmVkaXJlY3Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IG1jcGJSZWRpcmVjdEhhbmRsZXIgPSBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIC8vIFRyeSBHaXRIdWIgQVBJIGZvciB0aGUgYWN0dWFsIGxhdGVzdCAubWNwYiBhc3NldCBVUkxcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2hSZXMgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke0dJVEhVQl9SRVBPfS9yZWxlYXNlcy9sYXRlc3RgLCB7XG4gICAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLCAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AtU2V0dXAnIH0sXG4gICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCg1MDAwKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKGdoUmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCBnaFJlcy5qc29uKCkgYXMgeyB0YWdfbmFtZTogc3RyaW5nOyBhc3NldHM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBicm93c2VyX2Rvd25sb2FkX3VybDogc3RyaW5nIH0+IH07XG4gICAgICAgIGNvbnN0IG1jcGJBc3NldCA9IHJlbGVhc2UuYXNzZXRzLmZpbmQoYSA9PiBNQ1BCX0FTU0VUX1BBVFRFUk4udGVzdChhLm5hbWUpKTtcbiAgICAgICAgaWYgKG1jcGJBc3NldCkge1xuICAgICAgICAgIHJlcy5yZWRpcmVjdChtY3BiQXNzZXQuYnJvd3Nlcl9kb3dubG9hZF91cmwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGNvbnN0cnVjdGVkIFVSTFxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBjb25zdHJ1Y3QgVVJMIGZyb20gcnVubmluZyB2ZXJzaW9uXG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke0dJVEhVQl9SRVBPfS9yZWxlYXNlcy9kb3dubG9hZC92JHtQQUNLQUdFX1ZFUlNJT059L2RvbGxob3VzZW1jcC0ke1BBQ0tBR0VfVkVSU0lPTn0ubWNwYmA7XG4gICAgcmVzLnJlZGlyZWN0KHVybCk7XG4gIH07XG5cbiAgLy8g4pSA4pSAIExpY2Vuc2Ugc2VsZWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBsaWNlbnNlQ29uZmlnUGF0aCA9IGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdsaWNlbnNlLmpzb24nKTtcblxuICBhc3luYyBmdW5jdGlvbiByZWFkTGljZW5zZSgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlYWRGaWxlKGxpY2Vuc2VDb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHJhdyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyB0aWVyOiAnYWdwbCcgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB3cml0ZUxpY2Vuc2UoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnKTtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShsaWNlbnNlQ29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMiksIHsgbW9kZTogMG82MDAgfSk7XG4gIH1cblxuICBjb25zdCBnZXRMaWNlbnNlSGFuZGxlciA9IGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgbGljZW5zZSA9IGF3YWl0IHJlYWRMaWNlbnNlKCk7XG4gICAgLy8gTmV2ZXIgZXhwb3NlIHZlcmlmaWNhdGlvbiBpbnRlcm5hbHMgdG8gY2xpZW50XG4gICAgY29uc3QgeyB2ZXJpZmljYXRpb25Db2RlOiBfY29kZSwgdmVyaWZpY2F0aW9uQXR0ZW1wdHM6IF9hdHRlbXB0cywgLi4ucHVibGljTGljZW5zZSB9ID0gbGljZW5zZTtcbiAgICByZXMuanNvbihwdWJsaWNMaWNlbnNlKTtcbiAgfTtcblxuICBjb25zdCBsaWNlbnNlUmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDUsIDYwXzAwMCk7IC8vIDUgcmVxdWVzdHMvbWludXRlXG5cbiAgY29uc3Qgc2V0TGljZW5zZUhhbmRsZXIgPSBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKCFsaWNlbnNlUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy5zZXRMaWNlbnNlSGFuZGxlcicsXG4gICAgICAgIGRldGFpbHM6ICdMaWNlbnNlIGVuZHBvaW50IHJhdGUgbGltaXQgZXhjZWVkZWQgKDUgcmVxL21pbiknLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgbGljZW5zZSByZXF1ZXN0cy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSByZXEuYm9keSA/PyB7fTtcbiAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZUxpY2Vuc2VJbnB1dChib2R5KTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiB2YWxpZGF0aW9uRXJyb3IgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGljZW5zZURhdGEgPSBidWlsZExpY2Vuc2VEYXRhKGJvZHkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChsaWNlbnNlRGF0YS50aWVyID09PSAnYWdwbCcpIHtcbiAgICAgICAgLy8gQUdQTDogYWN0aXZhdGUgaW1tZWRpYXRlbHksIG5vIHZlcmlmaWNhdGlvbiBuZWVkZWRcbiAgICAgICAgbGljZW5zZURhdGEuc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlRGF0YSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbU2V0dXBdIExpY2Vuc2Ugc2V0IHRvIEFHUEwgKGFjdGl2ZSwgbm8gdmVyaWZpY2F0aW9uKScpO1xuICAgICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGxpY2Vuc2U6IGxpY2Vuc2VEYXRhIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbW1lcmNpYWwgdGllcnM6IHNhdmUgYXMgcGVuZGluZywgZ2VuZXJhdGUgdmVyaWZpY2F0aW9uIGNvZGVcbiAgICAgIGNvbnN0IGNvZGUgPSBnZW5lcmF0ZVZlcmlmaWNhdGlvbkNvZGUoKTtcbiAgICAgIGxpY2Vuc2VEYXRhLnN0YXR1cyA9ICdwZW5kaW5nJztcbiAgICAgIGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbkNvZGUgPSBjb2RlO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uRXhwaXJ5ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIFZFUklGSUNBVElPTl9DT0RFX1RUTF9NUykudG9JU09TdHJpbmcoKTtcbiAgICAgIGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbkF0dGVtcHRzID0gMDtcbiAgICAgIGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvblJlcXVlc3RlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2VEYXRhKTtcblxuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gTGljZW5zZSBwZW5kaW5nIHZlcmlmaWNhdGlvbjogJHtsaWNlbnNlRGF0YS50aWVyfSAoJHtsaWNlbnNlRGF0YS5lbWFpbH0pYCk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0NPTkZJR19VUERBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy5zZXRMaWNlbnNlSGFuZGxlcicsXG4gICAgICAgIGRldGFpbHM6IGBMaWNlbnNlIHZlcmlmaWNhdGlvbiBpbml0aWF0ZWQ6ICR7bGljZW5zZURhdGEudGllcn1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIHRpZXI6IGxpY2Vuc2VEYXRhLnRpZXIsXG4gICAgICAgICAgZW1haWw6IGxpY2Vuc2VEYXRhLmVtYWlsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNlbmQgdmVyaWZpY2F0aW9uIGVtYWlsIGRpcmVjdGx5IHRvIFdvcmtlciBmb3IgaW5zdGFudCBkZWxpdmVyeS5cbiAgICAgIC8vIFBvc3RIb2cgZXZlbnQgYWxzbyBmaXJlcyBmb3IgYW5hbHl0aWNzLCBidXQgdGhlIGVtYWlsIGNhbid0IHdhaXQgZm9yXG4gICAgICAvLyBQb3N0SG9nJ3MgZXZlbnQgcGlwZWxpbmUgKDEtNSBtaW4gZGVsYXkpLlxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgd29ya2VyVXJsID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0xJQ0VOU0VfV09SS0VSX1VSTCB8fCAnaHR0cHM6Ly9kb2xsaG91c2VtY3AtbGljZW5zZS1lbWFpbC5taWNrLWViYS53b3JrZXJzLmRldic7XG4gICAgICAgIGNvbnN0IHdvcmtlclNlY3JldCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9MSUNFTlNFX1dPUktFUl9TRUNSRVQgfHwgJyc7XG4gICAgICAgIGF3YWl0IGZldGNoKHdvcmtlclVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAuLi4od29ya2VyU2VjcmV0ID8geyAneC1wb3N0aG9nLXNlY3JldCc6IHdvcmtlclNlY3JldCB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6ICdsaWNlbnNlX2FjdGl2YXRpb24nLFxuICAgICAgICAgICAgZGlzdGluY3RfaWQ6ICdkaXJlY3QtdmVyaWZpY2F0aW9uJyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdGllcjogbGljZW5zZURhdGEudGllcixcbiAgICAgICAgICAgICAgZW1haWw6IGxpY2Vuc2VEYXRhLmVtYWlsLFxuICAgICAgICAgICAgICBldmVudF90eXBlOiAndmVyaWZpY2F0aW9uJyxcbiAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICAgIHNlcnZlcl92ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICAgICAgICAgIG9zOiBwbGF0Zm9ybSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIFZlcmlmaWNhdGlvbiBlbWFpbCBzZW50IGRpcmVjdGx5IHZpYSBXb3JrZXI6ICR7bGljZW5zZURhdGEuZW1haWx9YCk7XG4gICAgICB9IGNhdGNoICh3b3JrZXJFcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgW1NldHVwXSBEaXJlY3QgV29ya2VyIGNhbGwgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gUG9zdEhvZyBwaXBlbGluZTogJHt3b3JrZXJFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gd29ya2VyRXJyb3IubWVzc2FnZSA6IFN0cmluZyh3b3JrZXJFcnJvcil9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFsc28gZmlyZSBQb3N0SG9nIGV2ZW50IGZvciBhbmFseXRpY3MgKG5vbi1ibG9ja2luZywgZGVsYXkgaXMgZmluZSlcbiAgICAgIGNhcHR1cmVQb3N0SG9nTGljZW5zZUV2ZW50KHsgLi4ubGljZW5zZURhdGEsIHZlcmlmaWNhdGlvbkNvZGU6IGNvZGUsIGV2ZW50VHlwZTogJ3ZlcmlmaWNhdGlvbicgfSkuY2F0Y2goXG4gICAgICAgIChlcnIpID0+IGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBQb3N0SG9nIGNhcHR1cmUgZmFpbGVkOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFJldHVybiBzdWNjZXNzIHdpdGhvdXQgZXhwb3NpbmcgdGhlIGNvZGVcbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uQ29kZTogX2MsIHZlcmlmaWNhdGlvbkF0dGVtcHRzOiBfYSwgLi4ucHVibGljRGF0YSB9ID0gbGljZW5zZURhdGE7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGxpY2Vuc2U6IHB1YmxpY0RhdGEsIHZlcmlmaWNhdGlvblJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tTZXR1cF0gRmFpbGVkIHRvIHNhdmUgbGljZW5zZScsIHsgZXJyb3IgfSk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIHNhdmUgbGljZW5zZSBjb25maWd1cmF0aW9uJyB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmVyaWZ5UmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDUsIDYwXzAwMCk7IC8vIDUgYXR0ZW1wdHMvbWludXRlXG5cbiAgY29uc3QgdmVyaWZ5TGljZW5zZUhhbmRsZXIgPSBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKCF2ZXJpZnlSYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnZlcmlmeUxpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogJ1ZlcmlmaWNhdGlvbiBlbmRwb2ludCByYXRlIGxpbWl0IGV4Y2VlZGVkICg1IHJlcS9taW4pJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IHZlcmlmaWNhdGlvbiBhdHRlbXB0cy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29kZSB9ID0gcmVxLmJvZHkgPz8ge307XG4gICAgaWYgKCFjb2RlIHx8IHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyB8fCAhL15cXGR7Nn0kLy50ZXN0KGNvZGUpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgNi1kaWdpdCB2ZXJpZmljYXRpb24gY29kZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGljZW5zZSA9IGF3YWl0IHJlYWRMaWNlbnNlKCk7XG4gICAgaWYgKGxpY2Vuc2Uuc3RhdHVzICE9PSAncGVuZGluZycpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdObyBwZW5kaW5nIGxpY2Vuc2UgdmVyaWZpY2F0aW9uLiBQbGVhc2Ugc3VibWl0IHRoZSBsaWNlbnNlIGZvcm0gZmlyc3QuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBleHBpcnlcbiAgICBpZiAoIWxpY2Vuc2UudmVyaWZpY2F0aW9uRXhwaXJ5IHx8IGlzQ29kZUV4cGlyZWQobGljZW5zZS52ZXJpZmljYXRpb25FeHBpcnkgYXMgc3RyaW5nKSkge1xuICAgICAgbGljZW5zZS5zdGF0dXMgPSAnZXhwaXJlZCc7XG4gICAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnVmVyaWZpY2F0aW9uIGNvZGUgaGFzIGV4cGlyZWQuIFBsZWFzZSBzdWJtaXQgdGhlIGZvcm0gYWdhaW4gdG8gcmVjZWl2ZSBhIG5ldyBjb2RlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgbWF4IGF0dGVtcHRzXG4gICAgY29uc3QgYXR0ZW1wdHMgPSAoKGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHMgYXMgbnVtYmVyKSA/PyAwKSArIDE7XG4gICAgaWYgKGF0dGVtcHRzID4gVkVSSUZJQ0FUSU9OX01BWF9BVFRFTVBUUykge1xuICAgICAgbGljZW5zZS5zdGF0dXMgPSAnZXhwaXJlZCc7XG4gICAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZSk7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnc2V0dXBSb3V0ZXMudmVyaWZ5TGljZW5zZUhhbmRsZXInLFxuICAgICAgICBkZXRhaWxzOiBgVmVyaWZpY2F0aW9uIG1heCBhdHRlbXB0cyBleGNlZWRlZCBmb3I6ICR7bGljZW5zZS5lbWFpbH1gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgZmFpbGVkIGF0dGVtcHRzLiBQbGVhc2Ugc3VibWl0IHRoZSBmb3JtIGFnYWluIHRvIHJlY2VpdmUgYSBuZXcgY29kZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNvZGVcbiAgICBpZiAoY29kZSAhPT0gbGljZW5zZS52ZXJpZmljYXRpb25Db2RlKSB7XG4gICAgICBsaWNlbnNlLnZlcmlmaWNhdGlvbkF0dGVtcHRzID0gYXR0ZW1wdHM7XG4gICAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZSk7XG4gICAgICBjb25zdCByZW1haW5pbmcgPSBWRVJJRklDQVRJT05fTUFYX0FUVEVNUFRTIC0gYXR0ZW1wdHM7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiBgSW5jb3JyZWN0IHZlcmlmaWNhdGlvbiBjb2RlLiAke3JlbWFpbmluZ30gYXR0ZW1wdCR7cmVtYWluaW5nID09PSAxID8gJycgOiAncyd9IHJlbWFpbmluZy5gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENvZGUgaXMgY29ycmVjdCDigJQgYWN0aXZhdGUgbGljZW5zZVxuICAgIGNvbnN0IHZlcmlmaWVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgcmVxdWVzdGVkQXQgPSBsaWNlbnNlLnZlcmlmaWNhdGlvblJlcXVlc3RlZEF0IGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0aW1lVG9WZXJpZnlNcyA9IHJlcXVlc3RlZEF0ID8gRGF0ZS5ub3coKSAtIG5ldyBEYXRlKHJlcXVlc3RlZEF0KS5nZXRUaW1lKCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYXR0ZW1wdHNVc2VkID0gKChsaWNlbnNlLnZlcmlmaWNhdGlvbkF0dGVtcHRzIGFzIG51bWJlcikgPz8gMCkgKyAxO1xuXG4gICAgbGljZW5zZS5zdGF0dXMgPSAnYWN0aXZlJztcbiAgICBsaWNlbnNlLnZlcmlmaWVkQXQgPSB2ZXJpZmllZEF0O1xuICAgIGRlbGV0ZSBsaWNlbnNlLnZlcmlmaWNhdGlvbkNvZGU7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uRXhwaXJ5O1xuICAgIGRlbGV0ZSBsaWNlbnNlLnZlcmlmaWNhdGlvbkF0dGVtcHRzO1xuICAgIGRlbGV0ZSBsaWNlbnNlLnZlcmlmaWNhdGlvblJlcXVlc3RlZEF0O1xuICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcblxuICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIExpY2Vuc2UgdmVyaWZpZWQgYW5kIGFjdGl2YXRlZDogJHtsaWNlbnNlLnRpZXJ9ICgke2xpY2Vuc2UuZW1haWx9KSDigJQgJHt0aW1lVG9WZXJpZnlNcyA/IE1hdGgucm91bmQodGltZVRvVmVyaWZ5TXMgLyAxMDAwKSArICdzJyA6ICd1bmtub3duJ30sICR7YXR0ZW1wdHNVc2VkfSBhdHRlbXB0KHMpYCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnQ09ORklHX1VQREFURUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnc2V0dXBSb3V0ZXMudmVyaWZ5TGljZW5zZUhhbmRsZXInLFxuICAgICAgZGV0YWlsczogYExpY2Vuc2UgYWN0aXZhdGVkIGFmdGVyIGVtYWlsIHZlcmlmaWNhdGlvbjogJHtsaWNlbnNlLnRpZXJ9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IHRpZXI6IGxpY2Vuc2UudGllciwgZW1haWw6IGxpY2Vuc2UuZW1haWwgfSxcbiAgICB9KTtcblxuICAgIC8vIFNlbmQgY29uZmlybWF0aW9uIGVtYWlsICsgUG9zdEhvZyBhY3RpdmF0aW9uIGV2ZW50IHdpdGggYW5hbHl0aWNzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNhcHR1cmVQb3N0SG9nTGljZW5zZUV2ZW50KHtcbiAgICAgICAgLi4ubGljZW5zZSxcbiAgICAgICAgZXZlbnRUeXBlOiAnYWN0aXZhdGlvbicsXG4gICAgICAgIHZlcmlmaWNhdGlvbl90aW1lX21zOiB0aW1lVG9WZXJpZnlNcyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX2F0dGVtcHRzOiBhdHRlbXB0c1VzZWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IGNvZGUubGVuZ3RoID09PSA2ID8gJ2NvZGVfb3JfY2xpY2snIDogJ3Vua25vd24nLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBMaWNlbnNlIGFjdGl2YXRpb24gZXZlbnQgc2VudCB0byBQb3N0SG9nOiAke2xpY2Vuc2UudGllcn1gKTtcbiAgICB9IGNhdGNoIChwb3N0aG9nRXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBQb3N0SG9nIGNhcHR1cmUgZmFpbGVkOiAke3Bvc3Rob2dFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gcG9zdGhvZ0Vycm9yLm1lc3NhZ2UgOiBTdHJpbmcocG9zdGhvZ0Vycm9yKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHZlcmlmaWNhdGlvbkNvZGU6IF9jLCB2ZXJpZmljYXRpb25BdHRlbXB0czogX2EsIHZlcmlmaWNhdGlvbkV4cGlyeTogX2UsIC4uLnB1YmxpY0xpY2Vuc2UgfSA9IGxpY2Vuc2U7XG4gICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBsaWNlbnNlOiBwdWJsaWNMaWNlbnNlIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2VuZFJhdGVMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcigzLCAxMjBfMDAwKTsgLy8gMyByZXNlbmRzIHBlciAyIG1pbnV0ZXNcblxuICBjb25zdCByZXNlbmRWZXJpZmljYXRpb25IYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXJlc2VuZFJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1BsZWFzZSB3YWl0IGJlZm9yZSByZXF1ZXN0aW5nIGFub3RoZXIgY29kZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCByZWFkTGljZW5zZSgpO1xuICAgIGlmIChsaWNlbnNlLnN0YXR1cyAhPT0gJ3BlbmRpbmcnICYmIGxpY2Vuc2Uuc3RhdHVzICE9PSAnZXhwaXJlZCcpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdObyBwZW5kaW5nIGxpY2Vuc2UgdmVyaWZpY2F0aW9uLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbmV3IGNvZGUgYW5kIHJlc2V0XG4gICAgY29uc3QgY29kZSA9IGdlbmVyYXRlVmVyaWZpY2F0aW9uQ29kZSgpO1xuICAgIGxpY2Vuc2Uuc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgIGxpY2Vuc2UudmVyaWZpY2F0aW9uQ29kZSA9IGNvZGU7XG4gICAgbGljZW5zZS52ZXJpZmljYXRpb25FeHBpcnkgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgVkVSSUZJQ0FUSU9OX0NPREVfVFRMX01TKS50b0lTT1N0cmluZygpO1xuICAgIGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHMgPSAwO1xuICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcblxuICAgIC8vIFNlbmQgdmVyaWZpY2F0aW9uIGVtYWlsIGRpcmVjdGx5IHRvIFdvcmtlciBmb3IgaW5zdGFudCBkZWxpdmVyeVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB3b3JrZXJVcmwgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfTElDRU5TRV9XT1JLRVJfVVJMIHx8ICdodHRwczovL2RvbGxob3VzZW1jcC1saWNlbnNlLWVtYWlsLm1pY2stZWJhLndvcmtlcnMuZGV2JztcbiAgICAgIGNvbnN0IHdvcmtlclNlY3JldCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9MSUNFTlNFX1dPUktFUl9TRUNSRVQgfHwgJyc7XG4gICAgICBhd2FpdCBmZXRjaCh3b3JrZXJVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIC4uLih3b3JrZXJTZWNyZXQgPyB7ICd4LXBvc3Rob2ctc2VjcmV0Jzogd29ya2VyU2VjcmV0IH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ2xpY2Vuc2VfYWN0aXZhdGlvbicsXG4gICAgICAgICAgZGlzdGluY3RfaWQ6ICdkaXJlY3QtcmVzZW5kJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0aWVyOiBsaWNlbnNlLnRpZXIsXG4gICAgICAgICAgICBlbWFpbDogbGljZW5zZS5lbWFpbCxcbiAgICAgICAgICAgIGV2ZW50X3R5cGU6ICd2ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBzZXJ2ZXJfdmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgICAgICAgb3M6IHBsYXRmb3JtKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIFZlcmlmaWNhdGlvbiBjb2RlIHJlc2VudCBkaXJlY3RseSB2aWEgV29ya2VyOiAke2xpY2Vuc2UuZW1haWx9YCk7XG4gICAgfSBjYXRjaCAod29ya2VyRXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbU2V0dXBdIERpcmVjdCBXb3JrZXIgY2FsbCBmYWlsZWQ6ICR7d29ya2VyRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHdvcmtlckVycm9yLm1lc3NhZ2UgOiBTdHJpbmcod29ya2VyRXJyb3IpfWApO1xuICAgIH1cblxuICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogJ0EgbmV3IHZlcmlmaWNhdGlvbiBjb2RlIGhhcyBiZWVuIHNlbnQgdG8geW91ciBlbWFpbC4nIH0pO1xuICB9O1xuXG4gIHJldHVybiB7IGluc3RhbGxIYW5kbGVyLCBvcGVuQ29uZmlnSGFuZGxlciwgdmVyc2lvbkhhbmRsZXIsIG1jcGJSZWRpcmVjdEhhbmRsZXIsIGRldGVjdEhhbmRsZXIsIGdldExpY2Vuc2VIYW5kbGVyLCBzZXRMaWNlbnNlSGFuZGxlciwgdmVyaWZ5TGljZW5zZUhhbmRsZXIsIHJlc2VuZFZlcmlmaWNhdGlvbkhhbmRsZXIgfTtcbn1cblxuLy8g4pSA4pSAIEluc3RhbGwgYW5hbHl0aWNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEZpcmUtYW5kLWZvcmdldCBQb3N0SG9nIGV2ZW50IGZvciBpbnN0YWxsYXRpb24gYW5hbHl0aWNzLlxuICogVXNlcyB0aGUgc2FtZSBpbnN0YWxsIElEIGFzIHRoZSBsaWNlbnNlIHRlbGVtZXRyeSBzeXN0ZW0uXG4gKiBTaWxlbnRseSBzd2FsbG93cyBhbGwgZXJyb3JzIOKAlCBhbmFseXRpY3MgbXVzdCBuZXZlciBicmVhayBpbnN0YWxscy5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUluc3RhbGxBbmFseXRpY3MoZXZlbnQ6IHN0cmluZywgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgY29uc3QgcG9zdGhvZyA9IG5ldyBQb3N0SG9nKFBPU1RIT0dfUFJPSkVDVF9LRVksIHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5QT1NUSE9HX0hPU1QgfHwgJ2h0dHBzOi8vYXBwLnBvc3Rob2cuY29tJyxcbiAgICBmbHVzaEF0OiAxLFxuICAgIGZsdXNoSW50ZXJ2YWw6IDUwMDAsXG4gIH0pO1xuICByZWFkRmlsZShqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLnRlbGVtZXRyeS1pZCcpLCAndXRmLTgnKVxuICAgIC50aGVuKGlkID0+IGlkLnRyaW0oKSlcbiAgICAuY2F0Y2goKCkgPT4gJ2Fub255bW91cycpXG4gICAgLnRoZW4oaW5zdGFsbElkID0+IHtcbiAgICAgIHBvc3Rob2cuY2FwdHVyZSh7IGRpc3RpbmN0SWQ6IGluc3RhbGxJZCwgZXZlbnQsIHByb3BlcnRpZXMgfSk7XG4gICAgICByZXR1cm4gcG9zdGhvZy5zaHV0ZG93bigpO1xuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHsgLyogdGVsZW1ldHJ5IG11c3QgbmV2ZXIgdGhyb3cgKi8gfSk7XG59XG5cbi8vIOKUgOKUgCBOVk0gbWl0aWdhdGlvbiBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQ2xhdWRlIERlc2t0b3AgaGFzIGEgYnVnIHdoZXJlIGl0IHNjYW5zIH4vLm52bS92ZXJzaW9ucy9ub2RlLywgYnVpbGRzIGEgUEFUSFxuLy8gZnJvbSBhbGwgaW5zdGFsbGVkIHZlcnNpb25zIGluIGFzY2VuZGluZyBvcmRlciAob2xkZXN0IGZpcnN0KSwgYW5kIHJ1bnMgbnB4XG4vLyB1bmRlciBhbiBvdXRkYXRlZCBOb2RlIGV2ZW4gd2hlbiBhIG5ld2VyIHZlcnNpb24gaXMgaW5zdGFsbGVkIGFuZCBzZWxlY3RlZC5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyL2lzc3Vlcy8xOTAyXG4vL1xuLy8gRml4OiB3aGVuIE5WTSBpcyBwcmVzZW50LCBjcmVhdGUgYSBzbWFsbCBiYXNoIGxhdW5jaGVyIHRoYXQgaW5pdGlhbGlzZXMgTlZNXG4vLyBwcm9wZXJseSBiZWZvcmUgZGVsZWdhdGluZyB0byBucHgsIHRoZW4gcGF0Y2ggdGhlIHdyaXR0ZW4gTUNQIGNsaWVudCBjb25maWdcbi8vIHRvIHVzZSB0aGF0IGxhdW5jaGVyIGluc3RlYWQgb2YgYmFyZSBgbnB4YC5cblxuLyoqIFJlc3VsdCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IHRoZSBOVk0gbGF1bmNoZXIgbWl0aWdhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIE52bUxhdW5jaGVyUmVzdWx0ID0gJ2FwcGxpZWQnIHwgJ25vdC1hcHBsaWNhYmxlJyB8ICdmYWlsZWQnO1xuXG4vKiogSlNPTi1mb3JtYXQgY2xpZW50cyBlbGlnaWJsZSBmb3IgTlZNIGxhdW5jaGVyIHJlcGFpciBvbiBzdGFydHVwLiAqL1xuY29uc3QgSlNPTl9GT1JNQVRfQ0xJRU5UUyA9IFtcbiAgJ2NsYXVkZScsICdjbGF1ZGUtY29kZScsICdjdXJzb3InLCAnd2luZHN1cmYnLCAnbG1zdHVkaW8nLCAnZ2VtaW5pLWNsaScsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIE9yY2hlc3RyYXRlcyB0aGUgTlZNIG1pdGlnYXRpb246IGRldGVjdCDihpIgY3JlYXRlIGxhdW5jaGVyIOKGkiBwYXRjaCBjb25maWcg4oaSIHRlbGVtZXRyeS5cbiAqIEV4dHJhY3RlZCBmcm9tIGluc3RhbGxIYW5kbGVyIHRvIGtlZXAgaXRzIGNvZ25pdGl2ZSBjb21wbGV4aXR5IHdpdGhpbiBTb25hckNsb3VkIGxpbWl0cy5cbiAqIFJldHVybnMgYSByZXN1bHQgZW51bSByYXRoZXIgdGhhbiB0aHJvd2luZyBzbyB0aGUgY2FsbGVyIGFsd2F5cyBnZXRzIGEgY2xlYW4gc2lnbmFsLlxuICpcbiAqIEBwYXJhbSBob21lIC0gT3ZlcnJpZGUgaG9tZSBkaXJlY3RvcnkgKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlOdm1MYXVuY2hlcklmTmVlZGVkKGNsaWVudDogc3RyaW5nLCBob21lID0gaG9tZWRpcigpKTogUHJvbWlzZTxOdm1MYXVuY2hlclJlc3VsdD4ge1xuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG1pdGlnYXRpb24gY2hlY2sgZm9yIGNsaWVudDogJHtjbGllbnR9YCk7XG4gIGlmICghYXdhaXQgaXNOdm1QcmVzZW50KGhvbWUpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBub3QgcHJlc2VudCDigJQgc2tpcHBpbmcgbGF1bmNoZXIgbWl0aWdhdGlvbiBmb3IgJHtjbGllbnR9YCk7XG4gICAgY2FwdHVyZUluc3RhbGxBbmFseXRpY3MoJ252bV9sYXVuY2hlcl9ub3RfYXBwbGljYWJsZScsIHsgY2xpZW50LCBwbGF0Zm9ybTogcGxhdGZvcm0oKSB9KTtcbiAgICByZXR1cm4gJ25vdC1hcHBsaWNhYmxlJztcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHdyYXBwZXJQYXRoID0gYXdhaXQgZW5zdXJlTnZtTGF1bmNoZXIoaG9tZSk7XG4gICAgYXdhaXQgcGF0Y2hDb25maWdGb3JOdm1MYXVuY2hlcihjbGllbnQsIHdyYXBwZXJQYXRoKTtcbiAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBOVk0tYXdhcmUgbGF1bmNoZXIgYXBwbGllZCBmb3IgJHtjbGllbnR9YCk7XG4gICAgY2FwdHVyZUluc3RhbGxBbmFseXRpY3MoJ252bV9sYXVuY2hlcl9hcHBsaWVkJywgeyBjbGllbnQsIHBsYXRmb3JtOiBwbGF0Zm9ybSgpIH0pO1xuICAgIHJldHVybiAnYXBwbGllZCc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBbU2V0dXBdIE5WTSBsYXVuY2hlciBzZXR1cCBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApO1xuICAgIGNhcHR1cmVJbnN0YWxsQW5hbHl0aWNzKCdudm1fbGF1bmNoZXJfZmFpbGVkJywge1xuICAgICAgY2xpZW50LFxuICAgICAgcGxhdGZvcm06IHBsYXRmb3JtKCksXG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0dXAgcmVwYWlyOiByZS1jcmVhdGVzIHRoZSB3cmFwcGVyIGFuZCByZS1wYXRjaGVzIGFsbCBrbm93biBKU09OLWZvcm1hdFxuICogY2xpZW50IGNvbmZpZ3Mgb24gZXZlcnkgc2VydmVyIHN0YXJ0LiBIYW5kbGVzIHR3byBjYXNlczpcbiAqICAgMS4gV3JhcHBlciB3YXMgZGVsZXRlZCDigJQgcmVjcmVhdGVzIGl0IHNvIGNvbmZpZ3MgcG9pbnRpbmcgdG8gaXQga2VlcCB3b3JraW5nLlxuICogICAyLiBQcmUtZXhpc3RpbmcgaW5zdGFsbCAodXNlciBpbnN0YWxsZWQgYmVmb3JlIHRoaXMgZml4IHNoaXBwZWQpIOKAlCBwYXRjaGVzXG4gKiAgICAgIGNvbmZpZ3MgdGhhdCBzdGlsbCB1c2UgYmFyZSBgbnB4YC5cbiAqXG4gKiBGaXJlLWFuZC1mb3JnZXQgZnJvbSBzdGFydFdlYlNlcnZlci4gQWxsIGVycm9ycyBhcmUgc3dhbGxvd2VkIGFuZCBsb2dnZWQuXG4gKlxuICogQHBhcmFtIGhvbWUgICAgICAgICAgICAgICAtIE92ZXJyaWRlIGhvbWUgZGlyZWN0b3J5IChpbmplY3RhYmxlIGZvciB0ZXN0cylcbiAqIEBwYXJhbSBjb25maWdQYXRoUmVzb2x2ZXIgLSBPdmVycmlkZSBjb25maWcgcGF0aCBsb29rdXAgKGluamVjdGFibGUgZm9yIHRlc3RzKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm4gbnVsbCB0byBza2lwIGEgY2xpZW50IGVudGlyZWx5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBwcm9kdWN0aW9uIGdldENvbmZpZ1BhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBhaXJOdm1MYXVuY2hlck9uU3RhcnR1cChcbiAgaG9tZSA9IGhvbWVkaXIoKSxcbiAgY29uZmlnUGF0aFJlc29sdmVyOiAoY2xpZW50OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwgPSBnZXRDb25maWdQYXRoLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwbGF0Zm9ybSgpID09PSAnd2luMzInKSByZXR1cm47XG4gIGxvZ2dlci5kZWJ1ZygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXI6IGNoZWNraW5nIGZvciBOVk0uLi4nKTtcbiAgaWYgKCFhd2FpdCBpc052bVByZXNlbnQoaG9tZSkpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tTZXR1cF0gTlZNIGxhdW5jaGVyIHN0YXJ0dXAgcmVwYWlyOiBOVk0gbm90IHByZXNlbnQg4oCUIG5vdGhpbmcgdG8gcmVwYWlyJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHdyYXBwZXJQYXRoOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgd3JhcHBlclBhdGggPSBhd2FpdCBlbnN1cmVOdm1MYXVuY2hlcihob21lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gTlZNIHN0YXJ0dXAgcmVwYWlyOiBjb3VsZCBub3QgY3JlYXRlIGxhdW5jaGVyOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgSlNPTl9GT1JNQVRfQ0xJRU5UUy5tYXAoY2xpZW50ID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBjb25maWdQYXRoUmVzb2x2ZXIoY2xpZW50KTtcbiAgICAgIGlmICghY29uZmlnUGF0aCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyAvLyByZXNvbHZlciByZXR1cm5lZCBudWxsIOKAlCBza2lwIHRoaXMgY2xpZW50XG4gICAgICByZXR1cm4gcGF0Y2hDb25maWdGb3JOdm1MYXVuY2hlcihjbGllbnQsIHdyYXBwZXJQYXRoLCBjb25maWdQYXRoKVxuICAgICAgICAuY2F0Y2goZXJyID0+XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gTlZNIHN0YXJ0dXAgcmVwYWlyOiBmYWlsZWQgdG8gcGF0Y2ggJHtjbGllbnR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gKVxuICAgICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgbG9nZ2VyLmluZm8oJ1tTZXR1cF0gTlZNIGxhdW5jaGVyIHN0YXJ0dXAgcmVwYWlyIGNvbXBsZXRlJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIE5WTSBpcyBpbnN0YWxsZWQgb24gdGhpcyBtYWNoaW5lIChtYWNPUy9MaW51eCBvbmx5KS5cbiAqIENoZWNrcyBwcm9jZXNzLmVudi5OVk1fRElSIGZpcnN0IChoYW5kbGVzIG5vbi1zdGFuZGFyZCBpbnN0YWxsIGxvY2F0aW9ucyksXG4gKiB0aGVuIGZhbGxzIGJhY2sgdG8gfi8ubnZtLlxuICpcbiAqIEBwYXJhbSBob21lIC0gT3ZlcnJpZGUgaG9tZSBkaXJlY3RvcnkgKGRlZmF1bHRzIHRvIG9zLmhvbWVkaXIoKTsgaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc052bVByZXNlbnQoaG9tZSA9IGhvbWVkaXIoKSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAocGxhdGZvcm0oKSA9PT0gJ3dpbjMyJykgcmV0dXJuIGZhbHNlO1xuICAvLyBDaGVjayBjYW5kaWRhdGVzIGluIG9yZGVyOiBlbnYgdmFyIG92ZXJyaWRlIOKGkiBkZWZhdWx0IGxvY2F0aW9uXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXG4gICAgcHJvY2Vzcy5lbnYuTlZNX0RJUixcbiAgICBqb2luKGhvbWUsICcubnZtJyksXG4gIF0uZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuICBmb3IgKGNvbnN0IGRpciBvZiBjYW5kaWRhdGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjY2Vzcyhqb2luKGRpciwgJ252bS5zaCcpKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gZGV0ZWN0ZWQgYXQ6ICR7ZGlyfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7IC8qIHRyeSBuZXh0IGNhbmRpZGF0ZSAqLyB9XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBub3QgZm91bmQgKGNoZWNrZWQ6ICR7Y2FuZGlkYXRlcy5qb2luKCcsICcpfSlgKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBOVk0gZGlyZWN0b3J5OiBwcm9jZXNzLmVudi5OVk1fRElSIGlmIHNldCwgb3RoZXJ3aXNlIH4vLm52bS5cbiAqIFVzZWQgdG8gaGFyZGNvZGUgdGhlIHBhdGggaW4gdGhlIGdlbmVyYXRlZCB3cmFwcGVyIHNvIGl0IHdvcmtzIGV2ZW4gd2hlblxuICogQ2xhdWRlIERlc2t0b3AgZG9lcyBub3Qgc291cmNlIHRoZSB1c2VyJ3Mgc2hlbGwgcHJvZmlsZS5cbiAqXG4gKiBwcm9jZXNzLmVudi5OVk1fRElSIGlzIHZhbGlkYXRlZCBiZWZvcmUgdXNlIHRvIHByZXZlbnQgc2hlbGwgaW5qZWN0aW9uIGluXG4gKiB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc2NyaXB0IChvbmx5IGFic29sdXRlIHBhdGhzIHdpdGggc2FmZSBjaGFyYWN0ZXJzIGFyZVxuICogYWNjZXB0ZWQ7IHVuc2FmZSB2YWx1ZXMgZmFsbCBiYWNrIHRvIH4vLm52bSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVOdm1EaXIoaG9tZSA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIGNvbnN0IGVudkRpciA9IHByb2Nlc3MuZW52Lk5WTV9ESVI7XG4gIGlmIChlbnZEaXIgJiYgL15cXC9bXFx3Li9+LV0rJC8udGVzdChlbnZEaXIpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkaXIgcmVzb2x2ZWQgZnJvbSBOVk1fRElSIGVudiB2YXI6ICR7ZW52RGlyfWApO1xuICAgIHJldHVybiBlbnZEaXI7XG4gIH1cbiAgaWYgKGVudkRpcikge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk1fRElSIGVudiB2YXIgcmVqZWN0ZWQgKHVuc2FmZSBwYXRoKTogJHtlbnZEaXJ9IOKAlCBmYWxsaW5nIGJhY2sgdG8gfi8ubnZtYCk7XG4gIH1cbiAgY29uc3QgZmFsbGJhY2sgPSBqb2luKGhvbWUsICcubnZtJyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gZGlyIHJlc29sdmVkIHRvIGRlZmF1bHQ6ICR7ZmFsbGJhY2t9YCk7XG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIH4vLmRvbGxob3VzZS9iaW4vZG9sbGhvdXNlbWNwLW52bS5zaCBhbmQgcmV0dXJucyBpdHMgcGF0aC5cbiAqXG4gKiBUaGUgTlZNIGRpcmVjdG9yeSBpcyByZXNvbHZlZCBhdCBnZW5lcmF0aW9uIHRpbWUgYW5kIGhhcmRjb2RlZCBpbnRvIHRoZVxuICogc2NyaXB0LiBUaGlzIGlzIGludGVudGlvbmFsOiBDbGF1ZGUgRGVza3RvcCBkb2VzIG5vdCBzb3VyY2UgdGhlIHVzZXInc1xuICogc2hlbGwgcHJvZmlsZSwgc28gJE5WTV9ESVIgd291bGQgYmUgdW5zZXQgd2hlbiB0aGUgd3JhcHBlciBydW5zLiBCeVxuICogZW1iZWRkaW5nIHRoZSBhYnNvbHV0ZSBwYXRoIHdlIGd1YXJhbnRlZSB0aGUgY29ycmVjdCBOVk0gaXMgZm91bmQuXG4gKlxuICogVGhlIHNjcmlwdCBzb3VyY2VzIE5WTSwgdGhlbiBjaGVja3MgdGhlIGFjdGl2ZSBOb2RlIG1ham9yIHZlcnNpb24uIElmIGl0XG4gKiBpcyBiZWxvdyAxOCAodGhlIERvbGxob3VzZU1DUCBtaW5pbXVtKSwgaXQgdHJpZXMgYG52bSB1c2Ugbm9kZWAgKGhpZ2hlc3RcbiAqIGluc3RhbGxlZCkgdGhlbiBgbnZtIHVzZSAtLWx0c2AgYXMgYSBmYWxsYmFjay4gQSBmaW5hbCB2ZXJzaW9uIGNoZWNrXG4gKiB3cml0ZXMgYSB3YXJuaW5nIHRvIHN0ZGVyciBpZiB0aGUgbm9kZSBpcyBzdGlsbCB0b28gb2xkIOKAlCB0aGF0IHdhcm5pbmdcbiAqIHdpbGwgYXBwZWFyIGluIENsYXVkZSBEZXNrdG9wJ3MgZXJyb3IgbG9nLlxuICpcbiAqIEBwYXJhbSBob21lICAgICAgIC0gT3ZlcnJpZGUgaG9tZSBkaXJlY3RvcnkgKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICogQHBhcmFtIG52bURpck92ZXJyaWRlIC0gT3ZlcnJpZGUgdGhlIHJlc29sdmVkIE5WTSBwYXRoIChpbmplY3RhYmxlIGZvciB0ZXN0cylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZU52bUxhdW5jaGVyKGhvbWUgPSBob21lZGlyKCksIG52bURpck92ZXJyaWRlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmluRGlyID0gam9pbihob21lLCAnLmRvbGxob3VzZScsICdiaW4nKTtcbiAgY29uc3Qgd3JhcHBlclBhdGggPSBqb2luKGJpbkRpciwgJ2RvbGxob3VzZW1jcC1udm0uc2gnKTtcbiAgY29uc3QgbnZtRGlyID0gbnZtRGlyT3ZlcnJpZGUgPz8gcmVzb2x2ZU52bURpcihob21lKTtcblxuICBhd2FpdCBta2RpcihiaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIFNpbmdsZS1leHByZXNzaW9uIGhlbHBlciByZXVzZWQgdHdpY2UgdG8gZ2V0IHRoZSBOb2RlIG1ham9yIHZlcnNpb24uXG4gIGNvbnN0IGdldE1ham9yID0gJ25vZGUgLWUgXCJwcm9jZXNzLnN0ZG91dC53cml0ZShTdHJpbmcocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KFxcJy5cXCcpWzBdKSlcIiAyPi9kZXYvbnVsbCB8fCBlY2hvIFwiMFwiJztcblxuICBjb25zdCBzY3JpcHQgPSBbXG4gICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAnIyBEb2xsaG91c2VNQ1AgTlZNLWF3YXJlIGxhdW5jaGVyJyxcbiAgICAnIyBBdXRvLWdlbmVyYXRlZCBieSB0aGUgRG9sbGhvdXNlTUNQIGluc3RhbGxlci4nLFxuICAgICcjIEVuc3VyZXMgdGhlIGNvcnJlY3QgTm9kZS5qcyB2ZXJzaW9uIGlzIGFjdGl2ZSBiZWZvcmUgcnVubmluZyBucHgsJyxcbiAgICAnIyB3b3JraW5nIGFyb3VuZCBhIENsYXVkZSBEZXNrdG9wIGJ1ZyB3aGVyZSBOVk0gUEFUSCBvcmRlcmluZyBjYXVzZXMnLFxuICAgICcjIG5weCB0byBleGVjdXRlIHVuZGVyIGFuIG9sZGVyIE5vZGUgdmVyc2lvbiAoZS5nLiB2MTIpIGV2ZW4gd2hlbiBhJyxcbiAgICAnIyBuZXdlciB2ZXJzaW9uIGlzIGluc3RhbGxlZC4nLFxuICAgICcjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyL2lzc3Vlcy8xOTAyJyxcbiAgICAnJyxcbiAgICBgTlZNX0RJUj1cIiR7bnZtRGlyfVwiYCxcbiAgICAnaWYgWyAtcyBcIiROVk1fRElSL252bS5zaFwiIF07IHRoZW4nLFxuICAgICcgICAgIyBzaGVsbGNoZWNrIHNvdXJjZT0vZGV2L251bGwnLFxuICAgICcgICAgLiBcIiROVk1fRElSL252bS5zaFwiIDI+L2Rldi9udWxsJyxcbiAgICAnICAgICMgSWYgdGhlIGFjdGl2ZSBOb2RlIGlzIGJlbG93IHYxOCAobWluaW11bSBmb3IgRG9sbGhvdXNlTUNQKSwnLFxuICAgIGAgICAgIyB0cnkgJ25vZGUnIGFsaWFzIChoaWdoZXN0IGluc3RhbGxlZCkgdGhlbiBMVFMgYXMgYSBmYWxsYmFjay5gLFxuICAgIGAgICAgTUFKT1I9JCgke2dldE1ham9yfSlgLFxuICAgICcgICAgaWYgWyBcIiRNQUpPUlwiIC1sdCAxOCBdOyB0aGVuJyxcbiAgICAnICAgICAgICBudm0gdXNlIG5vZGUgMj4vZGV2L251bGwgfHwgbnZtIHVzZSAtLWx0cyAyPi9kZXYvbnVsbCB8fCB0cnVlJyxcbiAgICBgICAgICAgICBNQUpPUj0kKCR7Z2V0TWFqb3J9KWAsXG4gICAgJyAgICAgICAgaWYgWyBcIiRNQUpPUlwiIC1sdCAxOCBdOyB0aGVuJyxcbiAgICAnICAgICAgICAgICAgZWNobyBcIltEb2xsaG91c2VNQ1BdIFdBUk5JTkc6IE5vZGUuanMgJE1BSk9SIGlzIGJlbG93IHRoZSBtaW5pbXVtICgxOCkuIERvbGxob3VzZU1DUCBtYXkgbm90IHN0YXJ0IGNvcnJlY3RseS5cIiA+JjInLFxuICAgICcgICAgICAgIGZpJyxcbiAgICAnICAgIGZpJyxcbiAgICAnZmknLFxuICAgICcnLFxuICAgICdleGVjIG5weCBcIiRAXCInLFxuICBdLmpvaW4oJ1xcbicpICsgJ1xcbic7XG5cbiAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIFdyaXRpbmcgTlZNIGxhdW5jaGVyIHdyYXBwZXIgdG86ICR7d3JhcHBlclBhdGh9IChOVk1fRElSPSR7bnZtRGlyfSlgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHdyYXBwZXJQYXRoLCBzY3JpcHQsICd1dGYtOCcpO1xuICBhd2FpdCBjaG1vZCh3cmFwcGVyUGF0aCwgMG83NTUpO1xuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIGxhdW5jaGVyIHdyYXBwZXIgd3JpdHRlbiBhbmQgbWFkZSBleGVjdXRhYmxlYCk7XG4gIHJldHVybiB3cmFwcGVyUGF0aDtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSBpbmRlbnRhdGlvbiB1c2VkIGluIGEgSlNPTiBzdHJpbmcgc28gdGhlIHJlc2VyaWFsaXNlZCBvdXRwdXRcbiAqIHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgc3R5bGUgKGF2b2lkcyBub2lzeSBkaWZmcyBpbiB1c2VyLW1haW50YWluZWQgY29uZmlncykuXG4gKiBSZXR1cm5zIHRoZSB0YWIgY2hhcmFjdGVyIGZvciB0YWItaW5kZW50ZWQgZmlsZXMsIG9yIHRoZSBsZWFkaW5nLXNwYWNlIGNvdW50XG4gKiAobWluaW11bSAyKSBmb3Igc3BhY2UtaW5kZW50ZWQgZmlsZXMuIERlZmF1bHRzIHRvIDIgd2hlbiB1bmRldGVjdGFibGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdEluZGVudChyYXc6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbGluZSBvZiByYXcuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwIHx8IGxpbmUuc3RhcnRzV2l0aCgneycpIHx8IGxpbmUuc3RhcnRzV2l0aCgnfScpKSBjb250aW51ZTtcbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCdcXHQnKSkgcmV0dXJuICdcXHQnO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAnKSkge1xuICAgICAgY29uc3Qgc3BhY2VzID0gbGluZS5sZW5ndGggLSBsaW5lLnRyaW1TdGFydCgpLmxlbmd0aDtcbiAgICAgIGlmIChzcGFjZXMgPj0gMikgcmV0dXJuIHNwYWNlcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDI7XG59XG5cbi8qKlxuICogUGF0Y2hlcyB0aGUgZG9sbGhvdXNlbWNwIGVudHJ5IGluIGFuIE1DUCBjbGllbnQncyBKU09OIGNvbmZpZyB0byB1c2VcbiAqIHRoZSBOVk0tYXdhcmUgbGF1bmNoZXIgaW5zdGVhZCBvZiBiYXJlIGBucHhgLlxuICpcbiAqIE9ubHkgYWN0cyBvbiBKU09OLWZvcm1hdCBjb25maWdzLiBUT01MIGNvbmZpZ3MgKGNvZGV4KSBhcmUgc2tpcHBlZC5cbiAqIFNpbGVudGx5IG5vLW9wcyBpZiB0aGUgY29uZmlnIGZpbGUgaXMgbWlzc2luZyBvciB1bnJlYWRhYmxlLlxuICpcbiAqIEBwYXJhbSBjb25maWdQYXRoT3ZlcnJpZGUgLSBVc2UgdGhpcyBwYXRoIGluc3RlYWQgb2YgdGhlIHBsYXRmb3JtIGRlZmF1bHQgKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF0Y2hDb25maWdGb3JOdm1MYXVuY2hlcihjbGllbnQ6IHN0cmluZywgd3JhcHBlclBhdGg6IHN0cmluZywgY29uZmlnUGF0aE92ZXJyaWRlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBjb25maWdQYXRoT3ZlcnJpZGUgPz8gZ2V0Q29uZmlnUGF0aChjbGllbnQpO1xuICBpZiAoIWNvbmZpZ1BhdGgpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gcGF0Y2hDb25maWdGb3JOdm1MYXVuY2hlcjogbm8gY29uZmlnIHBhdGggZm9yICR7Y2xpZW50fSDigJQgc2tpcHBpbmdgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGNvbmZpZ1BhdGguZW5kc1dpdGgoJy50b21sJykpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gcGF0Y2hDb25maWdGb3JOdm1MYXVuY2hlcjogVE9NTCBjb25maWcgZm9yICR7Y2xpZW50fSDigJQgc2tpcHBpbmcgKG5vdCBKU09OLWZvcm1hdClgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcmF3OiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgcmF3ID0gYXdhaXQgcmVhZEZpbGUoY29uZmlnUGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybjsgLy8gQ29uZmlnIG5vdCByZWFkYWJsZSDigJQgaW5zdGFsbC1tY3AgbWF5IG5vdCBoYXZlIHdyaXR0ZW4gaXQgeWV0XG4gIH1cblxuICBsZXQgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybjsgLy8gTWFsZm9ybWVkIEpTT04g4oCUIGRvbid0IHRvdWNoIGl0XG4gIH1cblxuICBsZXQgcGF0Y2hlZCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBbJ21jcFNlcnZlcnMnLCAnc2VydmVycyddKSB7XG4gICAgY29uc3Qgc2VjdGlvbiA9IHBhcnNlZFtrZXldIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VjdGlvbj8uZG9sbGhvdXNlbWNwKSB7XG4gICAgICBzZWN0aW9uLmRvbGxob3VzZW1jcC5jb21tYW5kID0gd3JhcHBlclBhdGg7XG4gICAgICBwYXRjaGVkID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcGF0Y2hlZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBubyBkb2xsaG91c2VtY3AgZW50cnkgaW4gJHtjbGllbnR9IGNvbmZpZyDigJQgbm90aGluZyB0byBwYXRjaGApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGVudCA9IGRldGVjdEluZGVudChyYXcpO1xuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gcGF0Y2hDb25maWdGb3JOdm1MYXVuY2hlcjogd3JpdGluZyAke2NsaWVudH0gY29uZmlnIChpbmRlbnQ9JHtKU09OLnN0cmluZ2lmeShpbmRlbnQpfSlgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgaW5kZW50KSArICdcXG4nLCAndXRmLTgnKTtcbiAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gUGF0Y2hlZCAke2NsaWVudH0gY29uZmlnIHRvIHVzZSBOVk0tYXdhcmUgbGF1bmNoZXI6ICR7d3JhcHBlclBhdGh9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgaW5zdGFsbC1tY3AgYmluYXJ5IHBhdGguXG4gKiBVc2VzIHRoZSBsb2NhbCBkZXBlbmRlbmN5IChub2RlX21vZHVsZXMvLmJpbi9pbnN0YWxsLW1jcCkgZmlyc3QsXG4gKiBmYWxscyBiYWNrIHRvIG5weCBpZiBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsTWNwQmluKCk6IHsgY21kOiBzdHJpbmc7IHByZWZpeEFyZ3M6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBsb2NhbEJpbiA9IGpvaW4oZGlybmFtZShkaXJuYW1lKGRpcm5hbWUoX19kaXJuYW1lKSkpLCAnbm9kZV9tb2R1bGVzJywgJy5iaW4nLCAnaW5zdGFsbC1tY3AnKTtcbiAgdHJ5IHtcbiAgICBhY2Nlc3NTeW5jKGxvY2FsQmluLCBmc0NvbnN0YW50cy5YX09LKTtcbiAgICByZXR1cm4geyBjbWQ6IGxvY2FsQmluLCBwcmVmaXhBcmdzOiBbXSB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBjbWQ6ICducHgnLCBwcmVmaXhBcmdzOiBbJ2luc3RhbGwtbWNwJ10gfTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBpbnN0YWxsLW1jcCB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBNQ1AgY2xpZW50LlxuICpcbiAqIFVzZXMgdGhlIGJ1bmRsZWQgaW5zdGFsbC1tY3AgZGVwZW5kZW5jeSAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtZW1vcnlhaS9pbnN0YWxsLW1jcCkuXG4gKiBDb21tYW5kIGFyZ3VtZW50cyBhcmUgZnVsbHkgaGFyZGNvZGVkIOKAlCBubyB1c2VyIGlucHV0IHJlYWNoZXMgdGhlIHNoZWxsLlxuICogZXhlY0ZpbGUgaXMgdXNlZCAobm90IGV4ZWMpIHRvIHByZXZlbnQgc2hlbGwgaW5qZWN0aW9uLlxuICovXG5mdW5jdGlvbiBydW5JbnN0YWxsTWNwKGNsaWVudDogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IGNtZCwgcHJlZml4QXJncyB9ID0gcmVzb2x2ZUluc3RhbGxNY3BCaW4oKTtcbiAgICBjb25zdCB0YWcgPSB2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICdAbGF0ZXN0JztcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgLi4ucHJlZml4QXJncyxcbiAgICAgIGBAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXIke3RhZ31gLFxuICAgICAgJy0tY2xpZW50JywgY2xpZW50LFxuICAgICAgJy0tbmFtZScsICdkb2xsaG91c2VtY3AnLFxuICAgICAgJy0teWVzJyxcbiAgICBdO1xuXG4gICAgZXhlY0ZpbGUoY21kLCBhcmdzLCB7IHRpbWVvdXQ6IDMwXzAwMCB9LCAoZXJyLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKHN0ZGVyciB8fCBlcnIubWVzc2FnZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHN0ZG91dCB8fCAnSW5zdGFsbGF0aW9uIGNvbXBsZXRlZC4nKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.16",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -133,6 +133,11 @@
|
|
|
133
133
|
"dist/**/*.d.ts.map",
|
|
134
134
|
"dist/web/public/**",
|
|
135
135
|
"dist/seed-elements/**",
|
|
136
|
+
"scripts/pretooluse-dollhouse.sh",
|
|
137
|
+
"scripts/pretooluse-cursor.sh",
|
|
138
|
+
"scripts/pretooluse-windsurf.sh",
|
|
139
|
+
"scripts/pretooluse-gemini.sh",
|
|
140
|
+
"scripts/pretooluse-codex.sh",
|
|
136
141
|
"data/personas/**/*.md",
|
|
137
142
|
"data/skills/**/*.md",
|
|
138
143
|
"data/templates/**/*.md",
|