@bitgo-beta/bitgo 14.2.1-beta.2211 → 14.2.1-beta.2213
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/BitGoJS.min.js +2 -2
- package/dist/browser/{3b44c44f53e243925ddb.module.wasm → d71095613eb3069c86a1.module.wasm} +0 -0
- package/dist/package.json +92 -92
- package/dist/test/v2/unit/wallet.js +51 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/npm-shrinkwrap.json +22987 -0
- package/package.json +92 -92
|
@@ -549,6 +549,56 @@ describe('V2 Wallet:', function () {
|
|
|
549
549
|
}
|
|
550
550
|
nockKeychain.isDone().should.be.true();
|
|
551
551
|
});
|
|
552
|
+
it('should send wrapParams to /tx/build when prebuilding wrapApprove on an onchain multi-sig wallet', async function () {
|
|
553
|
+
const wrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
|
|
554
|
+
const buildNock = nock(bgUrl)
|
|
555
|
+
.post(`/api/v2/${ethWallet.coin()}/wallet/${ethWallet.id()}/tx/build`, (body) => {
|
|
556
|
+
body.type.should.equal('wrapApprove');
|
|
557
|
+
body.wrapParams.should.deepEqual(wrapParams);
|
|
558
|
+
should.not.exist(body.recipients);
|
|
559
|
+
return true;
|
|
560
|
+
})
|
|
561
|
+
.reply(200, { txHex: '0xfaketxhex', feeInfo: { fee: '1000' } });
|
|
562
|
+
try {
|
|
563
|
+
await ethWallet.prebuildTransaction({ type: 'wrapApprove', wrapParams });
|
|
564
|
+
}
|
|
565
|
+
catch (e) {
|
|
566
|
+
// post-processing of the fake prebuild may fail; the contract under test is the request body
|
|
567
|
+
}
|
|
568
|
+
buildNock.isDone().should.be.true();
|
|
569
|
+
});
|
|
570
|
+
it('should send unwrapParams to /tx/build when prebuilding unwrap on an onchain multi-sig wallet', async function () {
|
|
571
|
+
const unwrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
|
|
572
|
+
const buildNock = nock(bgUrl)
|
|
573
|
+
.post(`/api/v2/${ethWallet.coin()}/wallet/${ethWallet.id()}/tx/build`, (body) => {
|
|
574
|
+
body.type.should.equal('unwrap');
|
|
575
|
+
body.unwrapParams.should.deepEqual(unwrapParams);
|
|
576
|
+
should.not.exist(body.recipients);
|
|
577
|
+
return true;
|
|
578
|
+
})
|
|
579
|
+
.reply(200, { txHex: '0xfaketxhex', feeInfo: { fee: '1000' } });
|
|
580
|
+
try {
|
|
581
|
+
await ethWallet.prebuildTransaction({ type: 'unwrap', unwrapParams });
|
|
582
|
+
}
|
|
583
|
+
catch (e) {
|
|
584
|
+
// post-processing of the fake prebuild may fail; the contract under test is the request body
|
|
585
|
+
}
|
|
586
|
+
buildNock.isDone().should.be.true();
|
|
587
|
+
});
|
|
588
|
+
it('should not pass recipients in sendMany when transaction type is finalizeUnwrap', async function () {
|
|
589
|
+
const recipients = [
|
|
590
|
+
{
|
|
591
|
+
address: '0x7db562c4dd465cc895761c56f83b6af0e32689ba',
|
|
592
|
+
amount: 0,
|
|
593
|
+
},
|
|
594
|
+
];
|
|
595
|
+
try {
|
|
596
|
+
await ethWallet.sendMany({ recipients, type: 'finalizeUnwrap' });
|
|
597
|
+
}
|
|
598
|
+
catch (e) {
|
|
599
|
+
e.message.should.equal('cannot provide recipients for transaction type finalizeUnwrap');
|
|
600
|
+
}
|
|
601
|
+
});
|
|
552
602
|
});
|
|
553
603
|
describe('OFC Create Address', () => {
|
|
554
604
|
let ofcWallet;
|
|
@@ -7001,4 +7051,4 @@ describe('V2 Wallet:', function () {
|
|
|
7001
7051
|
});
|
|
7002
7052
|
});
|
|
7003
7053
|
});
|
|
7004
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLG1CQUFtQjtBQUNuQixFQUFFOztBQUVGLGlDQUFrQztBQUNsQywrQkFBK0I7QUFDL0IsMEJBQXdCO0FBQ3hCLDZCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBRWpDLG1EQThCOEI7QUFFOUIsbURBQWlEO0FBQ2pELHNDQUFxQztBQUNyQyxnREFBZ0Q7QUFDaEQsbUNBQXFDO0FBQ3JDLDJEQUFnRDtBQUNoRCwyREFBZ0Q7QUFFaEQsZ0VBQW9GO0FBRXBGLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQVF6QixRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sUUFBUSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxFQUFFLGtDQUFrQztRQUN0QyxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLGtDQUFrQyxFQUFFLGtDQUFrQyxFQUFFLGtDQUFrQyxDQUFDO1FBQ2xILFlBQVksRUFBRSxFQUFFO1FBQ2hCLFlBQVksRUFBRSxTQUFTO1FBQ3ZCLElBQUksRUFBRSxLQUFLO0tBQ1osQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHO1FBQ3JCLEVBQUUsRUFBRSxrQ0FBa0M7UUFDdEMsSUFBSSxFQUFFLE1B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QyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vLyBUZXN0cyBmb3IgV2FsbGV0XG4vL1xuXG5pbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJy4uL2xpYi9hc3NlcnRzJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7XG4gIEJhc2VUc3NVdGlscyxcbiAgY29tbW9uLFxuICBFY2RzYSxcbiAgRUNEU0FVdGlscyxcbiAgRUREU0FVdGlscyxcbiAgR2V0VXNlclBydk9wdGlvbnMsXG4gIEtleWNoYWlucyxcbiAgS2V5VHlwZSxcbiAgTWFuYWdlVW5zcGVudHNPcHRpb25zLFxuICBNQVhfU09MX01FU1NBR0VfQllURVMsXG4gIE1lc3NhZ2VTdGFuZGFyZFR5cGUsXG4gIE1lc3NhZ2VUeXBlcyxcbiAgUG9wdWxhdGVkSW50ZW50LFxuICBQcmVidWlsZFRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBTZW5kTWFueU9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlVHlwZSxcbiAgU2lnbmVkTWVzc2FnZSxcbiAgU2lnblR5cGVkRGF0YVZlcnNpb24sXG4gIFRva2VuVHlwZSxcbiAgVHNzVXRpbHMsXG4gIFR4UmVxdWVzdCxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgVHlwZWREYXRhLFxuICBUeXBlZE1lc3NhZ2UsXG4gIFdhbGxldCxcbiAgV2FsbGV0U2lnbk1lc3NhZ2VPcHRpb25zLFxuICBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHbyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB1dHhvTGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IFRzb2wgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29pbi1zb2wnO1xuaW1wb3J0IHsgVGV0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb2luLWV0aCc7XG5cbmltcG9ydCB7IG5mdFJlc3BvbnNlLCB1bnN1cHBvcnRlZE5mdFJlc3BvbnNlIH0gZnJvbSAnLi4vZml4dHVyZXMvbmZ0cy9uZnRSZXNwb25zZXMnO1xuXG5yZXF1aXJlKCdzaG91bGQtc2lub24nKTtcblxubm9jay5kaXNhYmxlTmV0Q29ubmVjdCgpO1xuXG50eXBlIENyZWF0ZVR4UmVxdWVzdEJvZHkgPSB7XG4gIGludGVudDogUG9wdWxhdGVkSW50ZW50O1xuICBhcGl2ZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uO1xuICBwcmV2aWV3PzogYm9vbGVhbjtcbn07XG5cbmRlc2NyaWJlKCdWMiBXYWxsZXQ6JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gIGNvbnN0IGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ3Rlc3QnIH0pO1xuICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgY29uc3QgYmFzZWNvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMCcsICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCddLFxuICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgdHlwZTogJ2hvdCcsXG4gIH07XG4gIGNvbnN0IGNvbGRXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnNjU3NzQ0MTlmYjRkOTY5MDg0N2ZiZTRiMDAwMDAwMDAnLFxuICAgIGNvaW46ICd0YnRjJyxcbiAgICBrZXlzOiBbJzY1Nzc0NDEyZTU0Yjc1MTYzOTNjOWRmODAwMDAwMDAwJywgJzY1Nzc0NDI0Mjg2NjRmZmU3OTFhZjdlYTAwMDAwMDAwJywgJzY1Nzc0NDJiNzMxN2E5NDU3NTZjMmZkOTAwMDAwMDAwJ10sXG4gICAgY29pblNwZWNpZmljOiB7fSxcbiAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICB0eXBlOiAnY29sZCcsXG4gIH07XG4gIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgY29uc3QgY29sZFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCBjb2xkV2FsbGV0RGF0YSk7XG4gIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tiaXRnby5nZXRFbnYoKV0udXJpO1xuICBjb25zdCBhZGRyZXNzMSA9ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnO1xuICBjb25zdCBhZGRyZXNzMiA9ICcweDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYnO1xuICBjb25zdCB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcyA9IHtcbiAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgIGNoYW5nZUFkZHJlc3NUeXBlOiBbJ3AydHJNdXNpZzInLCAncDJ3c2gnLCAncDJzaFAyd3NoJywgJ3Ayc2gnLCAncDJ0ciddLFxuICB9O1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICAgIHNpbm9uLnJlc2V0KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdXYWxsZXQgdHJhbnNmZXJzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2VhcmNoIGluIHdhbGxldCBmb3IgYSB0cmFuc2ZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbGltaXQ6IDEsIHNlYXJjaExhYmVsOiAndGVzdCcgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3RyYW5zZmVyYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvaW46ICd0YmNoJyxcbiAgICAgICAgICB0cmFuc2ZlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FsbGV0OiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICAgICAgY29tbWVudDogJ3Rlc3RzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMocGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZvcndhcmQgYWxsIHZhbGlkIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGxpbWl0OiAxLFxuICAgICAgICBhZGRyZXNzOiBbJ2FkZHJlc3MxJywgJ2FkZHJlc3MyJ10sXG4gICAgICAgIGRhdGVHdGU6ICdkYXRlU3RyaW5nMCcsXG4gICAgICAgIGRhdGVMdDogJ2RhdGVTdHJpbmcxJyxcbiAgICAgICAgdmFsdWVHdGU6IDAsXG4gICAgICAgIHZhbHVlTHQ6IDMwMDAwMDAwMCxcbiAgICAgICAgYWxsVG9rZW5zOiB0cnVlLFxuICAgICAgICBzZWFyY2hMYWJlbDogJ2FiYycsXG4gICAgICAgIGluY2x1ZGVIZXg6IHRydWUsXG4gICAgICAgIHR5cGU6ICd0cmFuc2Zlcl90eXBlJyxcbiAgICAgICAgc3RhdGU6ICd0cmFuc2Zlcl9zdGF0ZScsXG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYWN0dWFsIGFwaSByZXF1ZXN0IHdpbGwgb25seSBzZW5kIHN0cmluZ3MsIGJ1dCB0aGUgU0RLIGZ1bmN0aW9uIGV4cGVjdHMgbnVtYmVycyBmb3Igc29tZSB2YWx1ZXNcbiAgICAgIGNvbnN0IGFwaVBhcmFtcyA9IF8ubWFwVmFsdWVzKHBhcmFtcywgKHBhcmFtKSA9PiAoQXJyYXkuaXNBcnJheShwYXJhbSkgPyBwYXJhbSA6IFN0cmluZyhwYXJhbSkpKTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3RyYW5zZmVyYClcbiAgICAgICAgLnF1ZXJ5KF8ubWF0Y2hlcyhhcGlQYXJhbXMpKVxuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyhwYXJhbXMpO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgc3RyaW5nIGFyZ3VtZW50IGZvciBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgYWRkcmVzczogJ3N0cmluZ0FkZHJlc3MnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXBpUGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogJzEnLFxuICAgICAgICBhZGRyZXNzOiAnc3RyaW5nQWRkcmVzcycsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHJhbnNmZXJgKVxuICAgICAgICAucXVlcnkoXy5tYXRjaGVzKGFwaVBhcmFtcykpXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcnMgZm9yIGludmFsaWQgZXhwZWN0ZWQgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGFkZHJlc3M6IDEzMzc1IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGFkZHJlc3MgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcgb3IgYXJyYXknKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgYWRkcmVzczogW251bGxdIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGFkZHJlc3MgYXJndW1lbnQsIGV4cGVjdGluZyBhcnJheSBvZiBhZGRyZXNzIHN0cmluZ3MnKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgZGF0ZUd0ZTogMjAxMDE5MDQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgZGF0ZUd0ZSBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMoeyBkYXRlTHQ6IDIwMTAxOTA0IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgZGF0ZUx0IGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IHZhbHVlR3RlOiAnMTAyMzAwMDUnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHZhbHVlR3RlIGFyZ3VtZW50LCBleHBlY3RpbmcgbnVtYmVyJyk7XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyh7IHZhbHVlTHQ6ICctNWU4JyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHZhbHVlTHQgYXJndW1lbnQsIGV4cGVjdGluZyBudW1iZXInKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgaW5jbHVkZUhleDogJzEyMycgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZUhleCBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgc3RhdGU6IDEyMyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBzdGF0ZSBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZyBvciBhcnJheScpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyBzdGF0ZTogWzEyMywgNDU2XSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBzdGF0ZSBhcmd1bWVudCwgZXhwZWN0aW5nIGFycmF5IG9mIHN0YXRlIHN0cmluZ3MnKTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHsgdHlwZTogMTIzIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgdHlwZSBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNlYXJjaCBpbiB3YWxsZXQgYWRkcmVzc2VzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBsaW1pdDogMSwgbGFiZWxDb250YWluczogJ3Rlc3QnIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9hZGRyZXNzZXNgKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgY29pbjogJ3RiY2gnLFxuICAgICAgICAgIHRyYW5zZmVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3YWxsZXQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgICAgICBjb21tZW50OiAndGVzdHMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmFkZHJlc3NlcyhwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYmNoIGNhc2hhZGRyIGZvcm1hdCBhcyB2YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGJjaCcpO1xuICAgIGNvbnN0IHZhbGlkID0gY29pbi5pc1ZhbGlkQWRkcmVzcygnYmNodGVzdDpwemZreHY1MzJ0MHE1emNoY2sybWhtbWYyeTAyY2Rlanlzc3E1cXJ6N2EnKTtcbiAgICB2YWxpZC5zaG91bGQuYmUuVHJ1ZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZlcmlmeSBiY2ggbGVnYWN5IGZvcm1hdCBhcyB2YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGJjaCcpO1xuICAgIGNvbnN0IHZhbGlkID0gY29pbi5pc1ZhbGlkQWRkcmVzcygnMk42Z1k5cjlpdVhRUXpaaVN5bmdXSmVvVXVMNW1DMXg0QWMnKTtcbiAgICB2YWxpZC5zaG91bGQuYmUuVHJ1ZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVEVUSCBXYWxsZXQgQWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBldGhXYWxsZXQ7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2VhcmNoIGxpc3QgYWRkcmVzc2VzIHNob3VsZCByZXR1cm4gc3VjY2VzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgaW5jbHVkZUJhbGFuY2VzOiB0cnVlLFxuICAgICAgICBpbmNsdWRlVG9rZW5zOiB0cnVlLFxuICAgICAgICByZXR1cm5CYWxhbmNlc0ZvclRva2VuOiAnZ3RlcmM2ZHAnLFxuICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogZmFsc2UsXG4gICAgICAgIGluY2x1ZGVUb3RhbEFkZHJlc3NDb3VudDogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9hZGRyZXNzZXNgKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5hZGRyZXNzZXMocGFyYW1zKTtcbiAgICAgICAgdGhyb3cgJyc7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9ycyBmb3IgaW52YWxpZCBleHBlY3RlZCBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlQmFsYW5jZXM6IHRydWUsIHJldHVybkJhbGFuY2VzRm9yVG9rZW46IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgcmV0dXJuQmFsYW5jZXNGb3JUb2tlbiBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmFkZHJlc3Nlcyh7IHBlbmRpbmdEZXBsb3ltZW50OiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHBlbmRpbmdEZXBsb3ltZW50IGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmFkZHJlc3Nlcyh7IGluY2x1ZGVCYWxhbmNlczogMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBpbmNsdWRlQmFsYW5jZXMgYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuYWRkcmVzc2VzKHsgaW5jbHVkZVRva2VuczogMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBpbmNsdWRlVG9rZW5zIGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmFkZHJlc3Nlcyh7IGluY2x1ZGVUb3RhbEFkZHJlc3NDb3VudDogMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQgYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2V0IGZvcndhcmRlciBiYWxhbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZm9yd2FyZGVycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweGJmYmNjMGZlMmI4NjVkZTg3NzEzNDI0NmFmMDkzNzhlOWJjM2M5MWQnLFxuICAgICAgICAgIGJhbGFuY2U6ICcyMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJzB4ZTU5NTI0ZWQ4YjQ3MTY1ZjRjYjA4NTBjOTQyODA2OWE2MDAyZTVlYicsXG4gICAgICAgICAgYmFsYW5jZTogJzEwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9mb3J3YXJkZXJzL2JhbGFuY2VzYCkucmVwbHkoMjAwLCB7XG4gICAgICAgIGZvcndhcmRlcnMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9yd2FyZGVyQmFsYW5jZSA9IGF3YWl0IGV0aFdhbGxldC5nZXRGb3J3YXJkZXJCYWxhbmNlKCk7XG4gICAgICBmb3J3YXJkZXJCYWxhbmNlLmZvcndhcmRlcnNbMF0uYWRkcmVzcy5zaG91bGQuZXFsKGZvcndhcmRlcnNbMF0uYWRkcmVzcyk7XG4gICAgICBmb3J3YXJkZXJCYWxhbmNlLmZvcndhcmRlcnNbMF0uYmFsYW5jZS5zaG91bGQuZXFsKGZvcndhcmRlcnNbMF0uYmFsYW5jZSk7XG4gICAgICBmb3J3YXJkZXJCYWxhbmNlLmZvcndhcmRlcnNbMV0uYWRkcmVzcy5zaG91bGQuZXFsKGZvcndhcmRlcnNbMV0uYWRkcmVzcyk7XG4gICAgICBmb3J3YXJkZXJCYWxhbmNlLmZvcndhcmRlcnNbMV0uYmFsYW5jZS5zaG91bGQuZXFsKGZvcndhcmRlcnNbMV0uYmFsYW5jZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdHZXQgVXNlciBQcnYnLCAoKSA9PiB7XG4gICAgY29uc3QgcHJ2ID1cbiAgICAgICd4cHJ2OXMyMVpyUUgxNDNLM2hla3lOajdUY2lSNFhOWWUxa01qNjhXMmlwakpHTkhFVFdQN280MkFqRG5TUGdLaGRaNHg4TkJBdmFMNzJSclhqdVhOZG1rTXFMRVJaemE3M29ZdWdHdGJMRlhHOGcnO1xuICAgIGNvbnN0IGRlcml2ZWRQcnYgPVxuICAgICAgJ3hwcnY5eW9HNjdUZDExdXdqWHdiVjh6RW1yeVNWWEVSdTVGWkFzTEQ5c3VCZUVKYmdKcUFOczhZbmc1ZEVKb2lpN2hhZzVKZXJtSzZQYmZ4Z0RtU3pXN2V3V2VMbWVKRWttUGZtWlVTTGRFVHRIeCc7XG4gICAgaXQoJ3Nob3VsZCB1c2UgdGhlIGNvbGQgZGVyaXZhdGlvbiBzZWVkIHRvIGRlcml2ZSB0aGUgcHJvcGVyIHVzZXIgcHJpdmF0ZSBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBjb2xkRGVyaXZhdGlvblNlZWQ6ICcxMjMnLFxuICAgICAgfTtcbiAgICAgIChhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih1c2VyUHJ2T3B0aW9ucykpLnNob3VsZC5lcWwoZGVyaXZlZFBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSB0aGUgdXNlciBrZXljaGFpbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkIGFzIHRoZSBjb2xkIGRlcml2YXRpb24gc2VlZCBpZiBub25lIGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnM6IEdldFVzZXJQcnZPcHRpb25zID0ge1xuICAgICAgICBwcnYsXG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgaWQ6ICc0NTYnLFxuICAgICAgICAgIHB1YjogJzc4OScsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVmZXIgdGhlIGV4cGxpY2l0IGNvbGQgZGVyaXZhdGlvbiBzZWVkIHRvIHRoZSB1c2VyIGtleWNoYWluIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyUHJ2T3B0aW9uczogR2V0VXNlclBydk9wdGlvbnMgPSB7XG4gICAgICAgIHBydixcbiAgICAgICAgY29sZERlcml2YXRpb25TZWVkOiAnMTIzJyxcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiAnNDU2JyxcbiAgICAgICAgICBpZDogJzc4OScsXG4gICAgICAgICAgcHViOiAnMDEyJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIChhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih1c2VyUHJ2T3B0aW9ucykpLnNob3VsZC5lcWwoZGVyaXZlZFBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcHJ2IHByb3ZpZGVkIGZvciBUU1MgU01DJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHNzV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NjAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc3MDAwMDAwMDAnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRzb2xjb2luOiBhbnkgPSBiaXRnby5jb2luKCd0c29sJyk7XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sY29pbiwgdHNzV2FsbGV0RGF0YSk7XG4gICAgICBjb25zdCBwcnYgPSAnbG9uZ3N0cmluZ2lmaWVkanNvbic7XG4gICAgICBjb25zdCBrZXljaGFpbiA9IHtcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJ3JhbmRvbSBzZWVkJyxcbiAgICAgICAgaWQ6ICcxMjMnLFxuICAgICAgICBjb21tb25LZXljaGFpbjogJ2xvbmdzdHJpbmcnLFxuICAgICAgICB0eXBlOiAndHNzJyBhcyBLZXlUeXBlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHVzZXJQcnZPcHRpb25zID0ge1xuICAgICAgICBwcnYsXG4gICAgICAgIGtleWNoYWluLFxuICAgICAgfTtcbiAgICAgIChhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih1c2VyUHJ2T3B0aW9ucykpLnNob3VsZC5lcWwocHJ2KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RFVEggV2FsbGV0IFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICB9O1xuICAgICAgZXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGV0aCcpLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVycm9yIGVpcDE1NTkgYW5kIGdhc1ByaWNlIGFyZSBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGdhc1ByaWNlOiAxMDAsXG4gICAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMTAsXG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAxMCxcbiAgICAgICAgfSxcbiAgICAgICAgYW1vdW50OiAxMCxcbiAgICAgICAgYWRkcmVzczogVGVzdEJpdEdvLlYyLlRFU1RfV0FMTEVUMV9BRERSRVNTLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBUZXN0Qml0R28uVjIuVEVTVF9XQUxMRVQxX1BBU1NDT0RFLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kKHBhcmFtcykuc2hvdWxkLmJlLnJlamVjdGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlYXJjaCBmb3IgcGVuZGluZyB0cmFuc2FjdGlvbiBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IHdhbGxldElkOiB3YWxsZXQuaWQoKSB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3R4L3BlbmRpbmcvZmlyc3RgKS5xdWVyeShwYXJhbXMpLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuZ2V0Rmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgdGhyb3cgJyc7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRyeSB0byBjaGFuZ2UgdGhlIGZlZSBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IHR4aWQ6ICcweGZmZmZmZmZmJywgZmVlOiAnMTAwMDAwMDAnIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9jaGFuZ2VGZWVgLCBwYXJhbXMpLnJlcGx5KDIwMCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5jaGFuZ2VGZWUoeyB0eGlkOiAnMHhmZmZmZmZmZicsIGZlZTogJzEwMDAwMDAwJyB9KTtcbiAgICAgICAgdGhyb3cgJyc7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRyeSB0byBjaGFuZ2UgdGhlIGZlZSBjb3JyZWN0bHkgdXNpbmcgZWlwMTU1OScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhpZDogJzB4ZmZmZmZmZmYnLFxuICAgICAgICBlaXAxNTU5OiB7XG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6ICcyNTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvY2hhbmdlRmVlYCwgcGFyYW1zKS5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuY2hhbmdlRmVlKHBhcmFtcyk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGRhdGEgcGFyYW1ldGVyIGFuZCBhbW91bnQ6IDAgd2hlbiB1c2luZyBzZW5kVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICAgIGRhdGE6ICcweDAwMTEwMDExJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IG5vY2tLZXlDaGFpbiA9IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L2tleS8ke2V0aFdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmQoe1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudHNbMF0uYWRkcmVzcyxcbiAgICAgICAgICBkYXRhOiByZWNpcGllbnRzWzBdLmRhdGEsXG4gICAgICAgICAgYW1vdW50OiByZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG5vY2tLZXlDaGFpbi5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGRhdGEgcGFyYW1ldGVyIGFuZCBhbW91bnQ6IDAgd2hlbiB1c2luZyBzZW5kTWFueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgICBjb25zdCByZWNpcGllbnRBZGRyZXNzID0gJzB4N2RiNTYyYzRkZDQ2NWNjODk1NzYxYzU2ZjgzYjZhZjBlMzI2ODliYSc7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50QWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgICAgZGF0YTogJzB4MDAxMTAwMTEnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cyB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgY29uc3Qgbm9ja0tleUNoYWluID0gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoeyByZWNpcGllbnRzIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBub2NrS2V5Q2hhaW4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHBhc3MgcmVjaXBpZW50cyBpbiBzZW5kTWFueSB3aGVuIHRyYW5zYWN0aW9uIHR5cGUgaXMgZmlsbE5vbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zID0geyByZWNpcGllbnRzLCB0eXBlOiAnZmlsbE5vbmNlJywgaXNUc3M6IHRydWUsIG5vbmNlOiAnMTMnIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoJ2Nhbm5vdCBwcm92aWRlIHJlY2lwaWVudHMgZm9yIHRyYW5zYWN0aW9uIHR5cGUgZmlsbE5vbmNlJyk7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcGFzcyByZWNlaXZlQWRkcmVzcyBpbiBzZW5kTWFueSB3aGVuIFRTUyB0cmFuc2FjdGlvbiB0eXBlIGlzIHRyYW5zZmVyIG9yIHRyYW5zZmVyVG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRBZGRyZXNzID0gJzB4N2RiNTYyYzRkZDQ2NWNjODk1NzYxYzU2ZjgzYjZhZjBlMzI2ODliYSc7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50QWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gJ2Nhbm5vdCB1c2UgcmVjZWl2ZSBhZGRyZXNzIGZvciBUU1MgdHJhbnNhY3Rpb25zIG9mIHR5cGUgdHJhbnNmZXInO1xuICAgICAgY29uc3Qgc2VuZE1hbnlQYXJhbXNSZWNlaXZlQWRkcmVzc0Vycm9yID0ge1xuICAgICAgICByZWNlaXZlQWRkcmVzczogJ3Rocm93JyxcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgaXNUc3M6IHRydWUsXG4gICAgICAgIG5vbmNlOiAnMTMnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zID0geyByZWNpcGllbnRzLCB0eXBlOiAndHJhbnNmZXInLCBpc1RzczogdHJ1ZSwgbm9uY2U6ICcxMycgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55UGFyYW1zUmVjZWl2ZUFkZHJlc3NFcnJvcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55UGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5ub3QuZXF1YWwoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZWFybHkgaWYgcGFzc3dvcmQgaXMgd3JvbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRBZGRyZXNzID0gJzB4N2RiNTYyYzRkZDQ2NWNjODk1NzYxYzU2ZjgzYjZhZjBlMzI2ODliYSc7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50QWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IDAsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYHVuYWJsZSB0byBkZWNyeXB0IGtleWNoYWluIHdpdGggdGhlIGdpdmVuIHdhbGxldCBwYXNzcGhyYXNlYDtcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zQ29ycmVjdFBhc3NQaHJhc2UgPSB7XG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICBub25jZTogJzEzJyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5vY2tLZXljaGFpbiA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMF19YClcbiAgICAgICAgLnRpbWVzKDIpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRlhEY1dEMnZ4dWViY1QxWnBURjRWa2U2cW1NVzh5emRkd05ZcEFQanZZRUVMNWpMZnlZWFcyZnV4dEF4WThUZ2pQVUpMY2YxQzhxejlONlZnWnhBcktYNEV3QjhySDUnLFxuICAgICAgICAgIGV0aEFkZHJlc3M6ICcweDI2YTE2M2JhOTczOTUyOTcyMGMwOTE0YzU4Mzg2NWRlYzBkMzcyNzgnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwiMTVGc2JEVkkxekc5T2dnRDhZWCtIZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImhIYk5IM1N6L2FVPVwiLFwiY3RcIjpcIldvTlZLejdhZmlSeFhJMncvWWt6TWRNeW9RZy9CMTV1MVE4YVFnaTk2akpaOXdrNlRJYVNFYzZiWEZIM0FIekQ5TWRKQ1dKUVVwUmhvUWMvcmd5dGNuNjlzY1BUaktlZXlWTUVsR0N4WmRGVlMvcHNRY05FK2x1ZTMvLzJabHhqKzZ0MU5rdllPKzh5QWV6U01SQks1T2RmdFhFak5RST1cIn0nLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLnNlbmRNYW55KHsgLi4uc2VuZE1hbnlQYXJhbXNDb3JyZWN0UGFzc1BocmFzZSwgd2FsbGV0UGFzc3BocmFzZTogJ3dyb25nUGFzc3BocmFzZScgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoZXJyb3JNZXNzYWdlKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnbW9jayc7XG4gICAgICAgIH07XG4gICAgICAgIC8vIFNob3VsZCBub3QgdmFsaWRhdGUgcGFzc3BocmFzZSBpZiBjdXN0b20gc2lnbmluZyBmdW5jdGlvbiBpcyBwcm92aWRlZFxuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoe1xuICAgICAgICAgIC4uLnNlbmRNYW55UGFyYW1zQ29ycmVjdFBhc3NQaHJhc2UsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3dyb25nUGFzc3BocmFzZScsXG4gICAgICAgICAgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZS5tZXNzYWdlLnNob3VsZC5ub3QuZXF1YWwoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueSh7IC4uLnNlbmRNYW55UGFyYW1zQ29ycmVjdFBhc3NQaHJhc2UgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBub2NrS2V5Y2hhaW4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ09GQyBDcmVhdGUgQWRkcmVzcycsICgpID0+IHtcbiAgICBsZXQgb2ZjV2FsbGV0OiBXYWxsZXQ7XG4gICAgbGV0IG5vY2tzO1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhT2ZjID0ge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDBiMDAwMDAwMDAnLFxuICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzgwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3OTAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTgwMDAwMDAwMDAnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgIH07XG4gICAgICBvZmNXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCdvZmMnKSwgd2FsbGV0RGF0YU9mYyk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tzID0gW1xuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvb2ZjL2tleS8ke29mY1dhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogb2ZjV2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNXYWxsZXQua2V5SWRzKClbMV19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IG9mY1dhbGxldC5rZXlJZHMoKVsxXSxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjR2hTYVhpa3B1VEM5S1U4OFh4OUxyaktTdzFKS3N2WE5nYWJwVGRnank3TFNvdmg5WkhoY3FoQUhRdTd1dGh1N0ZndU5HZGNDNGFYVEtLNWdxVGNQZTRXdkxZUmJDU0cnLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNXYWxsZXQua2V5SWRzKClbMl19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IG9mY1dhbGxldC5rZXlJZHMoKVsyXSxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnNYU2hXOFIzaEpzSE5UWVRVd3pjZWpuTGtZN0tDdGFKYkRxY0drY0JGOTlCckVKU2pOWkhlSHZlaVlVcnNBZHdualVNR3dwZ21FYmlLY1pXUnVWQTlIeG5SYUEzcjMnLFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgbm9ja3MuZm9yRWFjaCgoc2NvcGUpID0+IHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgdmFsaWRhdGUgYXJndW1lbnRzIHRvIGNyZWF0ZSBhZGRyZXNzIG9uIE9GQyB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBvZmNXYWxsZXQuY3JlYXRlQWRkcmVzcygpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ29uVG9rZW4gaXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIGZvciBPRkMgd2FsbGV0cycpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0ZXN0IHBhc3NpbmcgaW52YWxpZCBudW1iZXIgYXJndW1lbnRcbiAgICAgIGF3YWl0IG9mY1dhbGxldC5jcmVhdGVBZGRyZXNzKHsgb25Ub2tlbjogNDIgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnb25Ub2tlbiBoYXMgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRyZXNzIGNyZWF0aW9uIHdpdGggdmFsaWQgb25Ub2tlbiBhcmd1bWVudCBzdWNjZWVkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvb2ZjL3dhbGxldC8ke29mY1dhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBvblRva2VuOiAnb2ZjdGJ0YycgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjM4YTQ4YzZjM2RiYTQwMDA3YTM0OTdmYTQ5YTA4MGMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdnZW5lcmF0ZWQgYWRkcmVzcycsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDEsXG4gICAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICAgIHdhbGxldDogb2ZjV2FsbGV0LmlkLFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCBvZmNXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46ICdvZmN0YnRjJyB9KTtcbiAgICAgIGFkZHJlc3MuYWRkcmVzcy5zaG91bGQuZXF1YWwoJ2dlbmVyYXRlZCBhZGRyZXNzJyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVEVUSCBDcmVhdGUgQWRkcmVzcycsICgpID0+IHtcbiAgICBsZXQgZXRoV2FsbGV0LCBub2NrcztcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgfSxcbiAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGV0aCcpLCB3YWxsZXREYXRhKTtcbiAgICAgIG5vY2tzID0gW1xuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgyNmExNjNiYTk3Mzk1Mjk3MjBjMDkxNGM1ODM4NjVkZWMwZDM3Mjc4JyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcblxuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMV19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0doU2FYaWtwdVRDOUtVODhYeDlMcmpLU3cxSktzdlhOZ2FicFRkZ2p5N0xTb3ZoOVpIaGNxaEFIUXU3dXRodTdGZ3VOR2RjQzRhWFRLSzVncVRjUGU0V3ZMWVJiQ1NHJyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHhhMWE4OGE1MDIyNzQwNzNiMWJjNGZlMDZlYTBmNWZlNzdlMTUxYjkxJyxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L2tleS8ke2V0aFdhbGxldC5rZXlJZHMoKVsyXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnNYU2hXOFIzaEpzSE5UWVRVd3pjZWpuTGtZN0tDdGFKYkRxY0drY0JGOTlCckVKU2pOWkhlSHZlaVlVcnNBZHdualVNR3dwZ21FYmlLY1pXUnVWQTlIeG5SYUEzcjMnLFxuICAgICAgICAgIGV0aEFkZHJlc3M6ICcweDAzMjgyMWI3ZWE0MGVhNWQ0NDZmNDdjMjlhMGY3NzdlZTAzNWFhMTAnLFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgbm9ja3MuZm9yRWFjaCgoc2NvcGUpID0+IHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgdmFsaWRhdGUgYXJndW1lbnRzIHRvIGNyZWF0ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSAnZ2FzUHJpY2UgaGFzIHRvIGJlIGFuIGludGVnZXIgb3IgbnVtZXJpYyBzdHJpbmcnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGdhc1ByaWNlOiB7fSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBnYXNQcmljZTogJ2FiYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBnYXNQcmljZTogbnVsbCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuXG4gICAgICBtZXNzYWdlID0gJ2NoYWluIGhhcyB0byBiZSBhbiBpbnRlZ2VyJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogJ2FiYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogbnVsbCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuXG4gICAgICBtZXNzYWdlID0gJ2NvdW50IGhhcyB0byBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDI1MCc7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6ICdhYmMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6IC0xIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAwIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAyNTEgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdiYXNlQWRkcmVzcyBoYXMgdG8gYmUgYSBzdHJpbmcnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGJhc2VBZGRyZXNzOiB7fSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGJhc2VBZGRyZXNzOiAxMjMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBiYXNlQWRkcmVzczogbnVsbCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuXG4gICAgICBtZXNzYWdlID0gJ2FsbG93U2tpcFZlcmlmeUFkZHJlc3MgaGFzIHRvIGJlIGEgYm9vbGVhbic7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiAxMjMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiAnYWJjJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGFsbG93U2tpcFZlcmlmeUFkZHJlc3M6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdmb3J3YXJkZXJWZXJzaW9uIGhhcyB0byBiZSBhbiBpbnRlZ2VyIDAsIDEsIDIsIDMsIDQgb3IgNSc7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGZvcndhcmRlclZlcnNpb246IDYgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgZm9yd2FyZGVyVmVyc2lvbjogLTEgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRyZXNzIGNyZWF0aW9uIHdpdGggZm9yd2FyZGVyIHZlcnNpb24gMyBzdWNjZWVkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDMgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjM4YTQ4YzZjM2RiYTQwMDA3YTM0OTdmYTQ5YTA4MGMnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDVlNjFiNjRmMzhmMWI1Zjg1MDc4ZmI4NGIyNzM5NDgzMGI0YzhlODAnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0cG9seWdvbicsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzYzNzg1Zjk1YWY3Yzc2MDAwN2NmYWUwNjhjMmYzMWFlJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIyLTEyLTAyVDE4OjQ5OjQyLjM0OFonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHgxJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMyxcbiAgICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IGV0aFdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDMgfSk7XG4gICAgICBhZGRyZXNzLmNvaW5TcGVjaWZpYy5mb3J3YXJkZXJWZXJzaW9uLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcmVzcyBjcmVhdGlvbiB3aXRoIGZvcndhcmRlciB2ZXJzaW9uIDMgZmFpbHMgZHVlIGludmFsaWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHg1ZTYxYjYnOyAvLyBpbnZhbGlkIGFkZHJlc3NcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYzOGE0OGM2YzNkYmE0MDAwN2EzNDk3ZmE0OWEwODBjJyxcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0cG9seWdvbicsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzYzNzg1Zjk1YWY3Yzc2MDAwN2NmYWUwNjhjMmYzMWFlJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIyLTEyLTAyVDE4OjQ5OjQyLjM0OFonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHgxJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMyxcbiAgICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHJlc3MgY3JlYXRpb24gd2l0aCBmb3J3YXJkZXIgdmVyc2lvbiAyIHN1Y2NlZWRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMiB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MzhhNDhjNmMzZGJhNDAwMDdhMzQ5N2ZhNDlhMDgwYycsXG4gICAgICAgICAgYWRkcmVzczogJzB4NWU2MWI2NGYzOGYxYjVmODUwNzhmYjg0YjI3Mzk0ODMwYjRjOGU4MCcsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDEsXG4gICAgICAgICAgY29pbjogJ3Rwb2x5Z29uJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNjM3ODVmOTVhZjdjNzYwMDA3Y2ZhZTA2OGMyZjMxYWUnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjItMTItMDJUMTg6NDk6NDIuMzQ4WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDIsXG4gICAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCBldGhXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAyIH0pO1xuICAgICAgYWRkcmVzcy5jb2luU3BlY2lmaWMuZm9yd2FyZGVyVmVyc2lvbi5zaG91bGQuZXF1YWwoMik7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdoZW4gcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb24gaXMgdHJ1ZSBpbiBjYXNlIG9mIGV0aCB2MSBmb3J3YXJkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHg4YzEzY2QwYmIxOTg4NThmNjI4ZDU2MzFiYTRiMjI5M2ZjMDhkZjQ5JyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ2FkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAweDMyYTIyNmNkYTE0ZTM1MmE0N2JmNGIxNjU4NjQ4ZDgwMzc3MzZmODAgYnV0IGdvdCAweDhjMTNjZDBiYjE5ODg1OGY2MjhkNTYzMWJhNGIyMjkzZmMwOGRmNDknXG4gICAgICAgICk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdoZW4gaW52YWxpZCBiYXNlQWRkcmVzcyBpcyBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEsIGJhc2VBZGRyZXNzOiAnYXNnZicgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgYmFzZSBhZGRyZXNzJyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdoZW4gaW5jb3JyZWN0IGJhc2VBZGRyZXNzIGlzIHBhc3NlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjE1YzY0M2E5OGEyYTEwMDA2OGUwMjNjNjM5YzBmNzQnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDMyYTIyNmNkYTE0ZTM1MmE0N2JmNGIxNjU4NjQ4ZDgwMzc3MzZmODAnLFxuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMzE3OSxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIxLTEwLTA1VDE0OjQyOjAyLjM5OVonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRpb25GYWlsdXJlOiBbXSxcbiAgICAgICAgICAgIHNhbHQ6ICcweGM2YicsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAvLyBpbmNvcnJlY3QgYWRkcmVzcyBpcyBnZW5lcmF0ZWQgd2hpbGUgdmFsaWRhdGluZyBkdWUgdG8gaW5jb3JyZWN0IGJhc2VBZGRyZXNzXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSwgYmFzZUFkZHJlc3M6ICcweDhjMTNjZDBiYjE5ODg1OGY2MjhkNTYzMWJhNGIyMjkzZmMwOGRmNDknIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgMHgzNjc0ODkyNjAwNzc5MGU3ZWU0MTZjNjQ4NWIzMmUwMGNmYjE3N2EzIGJ1dCBnb3QgMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJ1xuICAgICAgICApO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWUgIGFuZCBhbGxvd1NraXBWZXJpZnlBZGRyZXNzIGlzIGZhbHNlIGluIGNhc2Ugb2YgZXRoIHYwIGZvcndhcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjE1YzY0M2E5OGEyYTEwMDA2OGUwMjNjNjM5YzBmNzQnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDMyYTI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCcsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAwLCBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiBmYWxzZSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnYWRkcmVzcyB2ZXJpZmljYXRpb24gc2tpcHBlZCBmb3IgY291bnQgPSAxJyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdpdGggYWxsb3dTa2lwVmVyaWZ5QWRkcmVzcyBzZXQgdG8gZmFsc2UgYW5kIGV0aCB2MSBmb3J3YXJkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3QWRkcmVzcyA9IGF3YWl0IGV0aFdhbGxldC5jcmVhdGVBZGRyZXNzKHtcbiAgICAgICAgY2hhaW46IDAsXG4gICAgICAgIGZvcndhcmRlclZlcnNpb246IDEsXG4gICAgICAgIGFsbG93U2tpcFZlcmlmeUFkZHJlc3M6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBuZXdBZGRyZXNzLmluZGV4LnNob3VsZC5lcXVhbCgzMTc5KTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBbGdvcmFuZCB0ZXN0cycsICgpID0+IHtcbiAgICBsZXQgYWxnb1dhbGxldDogV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoaXMgaXMgbm90IGEgcmVhbCBUQUxHTyB3YWxsZXRcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNjUwMjA0Y2Y0M2Q4YjQwMDA3Y2Q5ZTExYTg3MmNlNjUnLFxuICAgICAgICBjb2luOiAndGFsZ28nLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzY1MDIwNGI3OGE3NWM5MDAwNzc5MGJjZTk3OWFlMzRkJyxcbiAgICAgICAgICAnNjUwMjA0Yjc2NmM1NmEwMDA3Mjk1NmMwOGZiOWNkZjEnLFxuICAgICAgICAgICc2NTAyMDRiOGNjZjEzNzAwMDdiMzJiYjgxNTVkZmJlYycsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHJvb3RBZGRyZXNzOiAnMlVMUkdFNjRVN0xUTVQ1TTZSRUI3T1JIWDVHTEpZV0hUSVY1RUFYVkxXUVRUQVRWSkRHTTVLSk1JSScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYWxnb1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RhbGdvJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RhbGdvOlVTRHQtMTgwNDQ3JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2FsZ29XYWxsZXQuY29pbigpfS93YWxsZXQvJHthbGdvV2FsbGV0LmlkKCl9L3R4L2J1aWxkYClcbiAgICAgICAgLnJlcGx5KCh1cmksIGJvZHkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBib2R5IGFzIGFueTtcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICAgIHBhcmFtcy5yZWNpcGllbnRzWzBdLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ3RhbGdvOlVTRHQtMTgwNDQ3Jyk7XG4gICAgICAgICAgcGFyYW1zLnR5cGUuc2hvdWxkLmVxdWFsKCdlbmFibGV0b2tlbicpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGFyYW1zLmVuYWJsZVRva2Vucyk7XG4gICAgICAgICAgcmV0dXJuIFsyMDAsIHBhcmFtc107XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgYWxnb1dhbGxldC5idWlsZFRva2VuRW5hYmxlbWVudHMocGFyYW1zKTtcbiAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hlZGVyYSB0ZXN0cycsICgpID0+IHtcbiAgICBsZXQgaGJhcldhbGxldDogV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoaXMgaXMgbm90IGEgcmVhbCBUSEJBUiB3YWxsZXRcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGhiYXInLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMC4wLjQ3ODQxNTExJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBoYmFyV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGhiYXInKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHRva2VuIGVuYWJsZW1lbnQgdHJhbnNhY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBlbmFibGVUb2tlbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndGhiYXI6dXNkYycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtoYmFyV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7aGJhcldhbGxldC5pZCgpfS90eC9idWlsZGApXG4gICAgICAgIC5yZXBseSgodXJpLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gYm9keSBhcyBhbnk7XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCd0aGJhcjp1c2RjJyk7XG4gICAgICAgICAgcGFyYW1zLnR5cGUuc2hvdWxkLmVxdWFsKCdlbmFibGV0b2tlbicpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGFyYW1zLmVuYWJsZVRva2Vucyk7XG4gICAgICAgICAgcmV0dXJuIFsyMDAsIHBhcmFtc107XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgaGJhcldhbGxldC5idWlsZFRva2VuRW5hYmxlbWVudHMocGFyYW1zKTtcbiAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NhbnRvbiB0ZXN0czogJywgKCkgPT4ge1xuICAgIGxldCBjYW50b25XYWxsZXQ6IFdhbGxldDtcbiAgICBjb25zdCBjYW50b25CaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBjYW50b25CaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6ICcxMjIwNTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQnLFxuICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgbGFzdENoYWluSW5kZXg6IHsgMDogMCB9LFxuICAgICAgfSxcbiAgICAgIGNvaW46ICd0Y2FudG9uJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY2FudG9uV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGNhbnRvbicpLCB3YWxsZXREYXRhKTtcbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NhbnRvbldhbGxldC5jb2luKCl9L2tleS8ke2NhbnRvbldhbGxldC5rZXlJZHMoKVswXX1gKS50aW1lcygzKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgIHB1YjogJzVmOFdtQzJ1VzlTQWs3TE1YMnI0RzFCeDhNTXd4OHNkZ3BvdHlIR29kaVpvJyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImhOSzNyZzgyUDFUOTRNYXVlWEZBYkE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJjVjR3VTRFelBqcz1cIixcImN0XCI6XCI5VlpYOTladHNiNnA3NUN4bDJscmNYQnBsbXNzSUFROWs3WkE4MXZkRFlHNE41ZFozNkJRTldWZkRvZWxqOU8zMVh5SitYcmkwWEtJV1V6bDBLS0xmVUVScGxtdE5vT0NuNWlmSmNad0NyT3hwSFpRZTNBSjcwMG84V21zcms1SFwifScsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y2FudG9uV2FsbGV0LmNvaW4oKX0va2V5LyR7Y2FudG9uV2FsbGV0LmtleUlkcygpWzFdfWApLnRpbWVzKDIpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgcHViOiAnRzFzNDNKVHpOWnpxaFVuNGFOcHdnY2M2d2I5RlVzWlFENUpqZmZHNmlzeWQnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJVRnJ0L1FsSVVSMVhlUWFmUEJhQWx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiN1ZQQllhSlhQbTg9XCIsXCJjdFwiOlwiYWpGS3YyeTh5YUlCWFEzOXNBYkJXY25iaUVFemJqUzRBb1F0cDVjWFlxamVEUnh0M2FDeGVtUG0yMnBua0phQ2lqRmpKck1IYmttc05oTll6SGc1YUhGdWtOK25FQVZzc3lOd0hiemxoU25tOC9CVk41MHlBZEFBdFdyZWg4Y3BcIn0nLFxuICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NhbnRvbldhbGxldC5jb2luKCl9L2tleS8ke2NhbnRvbldhbGxldC5rZXlJZHMoKVsyXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIHB1YjogJ0dIMUxWMWU5RmRxR2U4VTJjOFBNRWNtYTNmRGVoMWt0Y0dWQnJEM0F1RnF4JyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiaUl1V09ISU9FckVEZGlKbjZnNDZtZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIlJ6aDdSUkprc2owPVwiLFwiY3RcIjpcInJjTklDVWZwOUZha1Q1M2wrYWRCNlhLelMxdk5UYzBRcTlqQXRxbnhBK1Njc3NpUzRRMGwzc2dHLzBnRHk1RGFaS3RYcnlLQkRVdkdzaTdiL2ZZYUZDVXBBb1puL1ZaVE9oT1VOL21vN1pIYjRPaE9YTDI5WVBQa2lyeUFxOUNyXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHdhbGxldCBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbnMgY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke2NhbnRvbldhbGxldC5pZCgpfS90eHJlcXVlc3RzYClcbiAgICAgICAgLnJlcGx5KCh1cmwsIGJvZHkpID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5UGFyYW1zID0gYm9keSBhcyBhbnk7XG4gICAgICAgICAgYm9keVBhcmFtcy5pbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2NyZWF0ZUFjY291bnQnKTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2Zha2UgdHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmFrZSBmZWUgaW5mbycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgY2FudG9uV2FsbGV0LnNlbmRXYWxsZXRJbml0aWFsaXphdGlvbigpO1xuICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTb2xhbmEgdGVzdHM6ICcsICgpID0+IHtcbiAgICBsZXQgc29sV2FsbGV0OiBXYWxsZXQ7XG4gICAgY29uc3QgcGFzc3BocmFzZSA9ICcjQm9uZGlvbGExMjM0JztcbiAgICBjb25zdCBzb2xCaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBzb2xCaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgbWluaW11bUZ1bmRpbmc6IDI0NDcxMzYsXG4gICAgICAgIGxhc3RDaGFpbkluZGV4OiB7IDA6IDAgfSxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndHNvbCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNvbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3Rzb2wnKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtzb2xXYWxsZXQuY29pbigpfS9rZXkvJHtzb2xXYWxsZXQua2V5SWRzKClbMF19YCkudGltZXMoMykucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICBwdWI6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJoTkszcmc4MlAxVDk0TWF1ZVhGQWJBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiY1Y0d1U0RXpQanM9XCIsXCJjdFwiOlwiOVZaWDk5WnRzYjZwNzVDeGwybHJjWEJwbG1zc0lBUTlrN1pBODF2ZERZRzRONWRaMzZCUU5XVmZEb2VsajlPMzFYeUorWHJpMFhLSVdVemwwS0tMZlVFUnBsbXROb09DbjVpZkpjWndDck94cEhaUWUzQUo3MDBvOFdtc3JrNUhcIn0nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3NvbFdhbGxldC5jb2luKCl9L2tleS8ke3NvbFdhbGxldC5rZXlJZHMoKVsxXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgIHB1YjogJ0cxczQzSlR6Tlp6cWhVbjRhTnB3Z2NjNndiOUZVc1pRRDVKamZmRzZpc3lkJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiVUZydC9RbElVUjFYZVFhZlBCYUFsdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjdWUEJZYUpYUG04PVwiLFwiY3RcIjpcImFqRkt2Mnk4eWFJQlhRMzlzQWJCV2NuYmlFRXpialM0QW9RdHA1Y1hZcWplRFJ4dDNhQ3hlbVBtMjJwbmtKYUNpakZqSnJNSGJrbXNOaE5ZekhnNWFIRnVrTituRUFWc3N5TndIYnpsaFNubTgvQlZONTB5QWRBQXRXcmVoOGNwXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtzb2xXYWxsZXQuY29pbigpfS9rZXkvJHtzb2xXYWxsZXQua2V5SWRzKClbMl19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBwdWI6ICdHSDFMVjFlOUZkcUdlOFUyYzhQTUVjbWEzZkRlaDFrdGNHVkJyRDNBdUZxeCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImlJdVdPSElPRXJFRGRpSm42ZzQ2bWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJSemg3UlJKa3NqMD1cIixcImN0XCI6XCJyY05JQ1VmcDlGYWtUNTNsK2FkQjZYS3pTMXZOVGMwUXE5akF0cW54QStTY3NzaVM0UTBsM3NnRy8wZ0R5NURhWkt0WHJ5S0JEVXZHc2k3Yi9mWWFGQ1VwQW9abi9WWlRPaE9VTi9tbzdaSGI0T2hPWEwyOVlQUGtpcnlBcTlDclwifScsXG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uOiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUT0RPIChTVExYLTE1MDE4KTogZml4IHRlc3RcbiAgICAgIHhpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBzaWduIGEgY29uc29saWRhdGlvbiB0cmFuc2ZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcHJlYnVpbGRUeDoge1xuICAgICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldERhdGEuaWQsXG4gICAgICAgICAgICB0eEhleDpcbiAgICAgICAgICAgICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUlFOU1XV1YyY3QwMW1nNUdtNEVxY0o5U0FuMlh1RCtGdUFIY0hGVGtjMVRndXQzRGdUc2lTZ1RRMGRtemo1SkpnNnFZVHBuOEZ4T1lQRkNGVE1vWmk0NmdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCVXBUV3BrcElRWk5KT2h4WU5vNGZIdzF0ZDI4a3J1QjVCK29RRUVGUkkwUWMrcTBaZzZPT3BWOGVDRFZMZll6aW94N1lCQTcrUVBMWDRJUmhEQ1NLd0lDQWdBQkRBSUFBQUNnaGdFQUFBQUFBQU1BRlZSbGMzUWdhVzUwWldkeVlYUnBiMjRnYldWdGJ3PT0nLFxuICAgICAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgICAgIGZlZVBheWVyOiAnSFVWRTVOZkp5R2ZVMWRqWnNWTEE2ZnhTVFMxRTJpUnFjVFJWTkM5SzJ6N2MnLFxuICAgICAgICAgICAgICBsYW1wb3J0c1BlclNpZ25hdHVyZTogNTAwMCxcbiAgICAgICAgICAgICAgbm9uY2U6ICcyN0UzTVhGdlhNVU5ZZU1KZVgxcEFiRVJHc0pmVWJrYVpUZmdNZ3BtTk41ZycsXG4gICAgICAgICAgICAgIG51bVNpZ25hdHVyZXM6IDAsXG4gICAgICAgICAgICAgIGluc3RydWN0aW9uc0RhdGE6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnVHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21BZGRyZXNzOiAnSFVWRTVOZkp5R2ZVMWRqWnNWTEE2ZnhTVFMxRTJpUnFjVFJWTkM5SzJ6N2MnLFxuICAgICAgICAgICAgICAgICAgICB0b0FkZHJlc3M6ICdDaGdKNXRnRHdCVXNrOVJOTW0yaUxpd1A4Um9kd2daNnVxckM1cGFKc1hWVCcsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ01lbW8nLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW86ICdUZXN0IGludGVncmF0aW9uIG1lbW8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTWVtbycsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUZXN0IGludGVncmF0aW9uIG1lbW8nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczogJ0NoZ0o1dGdEd0JVc2s5Uk5NbTJpTGl3UDhSb2R3Z1o2dXFyQzVwYUpzWFZUJyxcbiAgICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25zb2xpZGF0ZUlkOiAnMTIzNCcsXG4gICAgICAgICAgICBjb25zb2xpZGF0aW9uRGV0YWlsczoge1xuICAgICAgICAgICAgICBzZW5kZXJBZGRyZXNzSW5kZXg6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQnVpbGQgYW5kIHNpZ24gdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgIGNvbnN0IHByZUJ1aWx0U2lnbmVkVHggPSBhd2FpdCBzb2xXYWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24odHhQYXJhbXMpO1xuICAgICAgICBwcmVCdWlsdFNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHRva2VuIGVuYWJsZW1lbnQgdHJhbnNhY3Rpb25zIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndHNvbDp1c2RjJyB9LCB7IG5hbWU6ICd0c29sOnNybScgfSwgeyBuYW1lOiAndHNvbDpnbXQnIH1dLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHtzb2xXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IGJvZHkgYXMgYW55O1xuICAgICAgICAgIGJvZHlQYXJhbXMuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdlbmFibGVUb2tlbicpO1xuICAgICAgICAgIGJvZHlQYXJhbXMuaW50ZW50LnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5lbmFibGVUb2tlbnMuc2hvdWxkLmRlZXBFcXVhbChwYXJhbXMuZW5hYmxlVG9rZW5zKTtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnZmFrZSB0cmFuc2FjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIGZlZUluZm86ICdmYWtlIGZlZSBpbmZvJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSk7XG4gICAgICBhd2FpdCBzb2xXYWxsZXQuYnVpbGRUb2tlbkVuYWJsZW1lbnRzKHBhcmFtcyk7XG4gICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FjY2VsZXJhdGUgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2ZhaWxzIGlmIGFjY2VsZXJhdGlvbiBpZHMgYXJlIG5vdCBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXQuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2NwZnB0eGlkc19vcl9yYmZ0eGlkc19yZXF1aXJlZCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcFR4SWRzIGlzIG5vdCBhbiBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfbm90X2FycmF5JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwVHhJZHMgaXMgbm90IG9mIGxlbmd0aCAxJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogW10gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfbm90X2FycmF5JyB9KTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkMScsICdpZDInXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfbm90X2FycmF5JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwRmVlUmF0ZSBpcyBub3QgcGFzc2VkIGFuZCBuZWl0aGVyIGlzIG5vQ3BmcEZlZVJhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXQuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwZmVlcmF0ZV9ub3Rfc2V0JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwRmVlUmF0ZSBpcyBub3QgYW4gaW50ZWdlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddLCBjcGZwRmVlUmF0ZTogJ29uZScgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcGZlZXJhdGVfbm90X25vbm5lZ2F0aXZlX2ludGVnZXInIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGNwZnBGZWVSYXRlIGlzIG5lZ2F0aXZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgY3BmcEZlZVJhdGU6IC0xIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2NwZnBmZWVyYXRlX25vdF9ub25uZWdhdGl2ZV9pbnRlZ2VyJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBtYXhGZWUgaXMgbm90IHBhc3NlZCBhbmQgbmVpdGhlciBpcyBub01heEZlZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10sIG5vQ3BmcEZlZVJhdGU6IHRydWUgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnbWF4ZmVlX25vdF9zZXQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIG1heEZlZSBpcyBub3QgYW4gaW50ZWdlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddLCBub0NwZnBGZWVSYXRlOiB0cnVlLCBtYXhGZWU6ICdvbmUnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ21heGZlZV9ub3Rfbm9ubmVnYXRpdmVfaW50ZWdlcicgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgbWF4RmVlIGlzIG5lZ2F0aXZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgbm9DcGZwRmVlUmF0ZTogdHJ1ZSwgbWF4RmVlOiAtMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdtYXhmZWVfbm90X25vbm5lZ2F0aXZlX2ludGVnZXInIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGJvdGggcmJmVHhpZHMgYW5kIGNwZnBUeGlkcyBpcyBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZDEnXSwgcmJmVHhJZHM6IFsnaWQyJ10gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY2Fubm90X3NwZWNpZnlfYm90aF9jcGZwX2FuZF9yYmZfdHhpZHMnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIHJiZlR4SWRzIGlzIHNldCBidXQgZmVlTXVsdGlwbGllciBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyByYmZUeElkczogWydpZCddIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2ZlZW11bHRpcGxpZXJfbm90X3NldCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgZmVlIG11bHRpcGxpZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IHJiZlR4SWRzOiBbJ2lkJ10sIGZlZU11bHRpcGxpZXI6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnZmVlbXVsdGlwbGllcl9ncmVhdGVyX3RoYW5fb25lJyB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyByYmZUeElkczogWydpZDInXSwgZmVlTXVsdGlwbGllcjogMC41IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2ZlZW11bHRpcGxpZXJfZ3JlYXRlcl90aGFuX29uZScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3VibWl0cyBhIHRyYW5zYWN0aW9uIHdpdGggYWxsIGNwZnAgc3BlY2lmaWMgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgY3BmcFR4SWRzOiBbJ2lkJ10sXG4gICAgICAgIGNwZnBGZWVSYXRlOiAxLFxuICAgICAgICBtYXhGZWU6IDEsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwcmVidWlsZFJldHVybiA9IE9iamVjdC5hc3NpZ24oeyB0eEhleDogJzEyMycgfSwgcGFyYW1zKTtcbiAgICAgIGNvbnN0IHByZWJ1aWxkU3R1YiA9IHNpbm9uLnN0dWIod2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhwcmVidWlsZFJldHVybik7XG5cbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYDtcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QocGF0aCwgXy5tYXRjaGVzKHByZWJ1aWxkUmV0dXJuKSkucmVwbHkoMjAwKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICBwcmVidWlsZFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aChwYXJhbXMpO1xuXG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYW5vdXQgaW5wdXQgbWF4TnVtSW5wdXRzVG9Vc2UgYW5kIHVuc3BlbnRzIHZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gICAgY29uc3QgbWF4TnVtSW5wdXRzVG9Vc2UgPSAyO1xuICAgIGNvbnN0IHVuc3BlbnRzID0gW1xuICAgICAgJ2NjMzA1NjU3NTBlMmFlYjgxODYyNWFhZWRhZjg5ZGI1YzYxNGU1OTc3Yjk2NDVjZWUxZDcyODlmNjE2ZmIxZDg6MCcsXG4gICAgICAnOGM0NTE2NDc4N2E5NTRhYjA3ODY0YWY5YjA1YjM0ZmJkZTNhOGU0MzBhOGM2NWIwZTYwZTRlNTQzZDhlMWI2YzoyJyxcbiAgICBdO1xuICAgIGxldCBiYXNlY29pbjtcbiAgICBsZXQgd2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGJ0YycpO1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICB9O1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIG1heE51bUlucHV0c1RvVXNlIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgZmFub3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgbWF4TnVtSW5wdXRzVG9Vc2UgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5mYW5vdXRVbnNwZW50cyh7IGFkZHJlc3MsIG1heE51bUlucHV0c1RvVXNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIG1heE51bUlucHV0c1RvVXNlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgdW5zcGVudHMgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBmYW5vdXQgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vZmFub3V0VW5zcGVudHNgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyB1bnNwZW50cyB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgYWRkcmVzcywgdW5zcGVudHMgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRoZSBmYW5vdXRVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvZmFub3V0VW5zcGVudHMgYW5kIHdoZXRoZXIgdW5zcGVudHMgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgb25seSBidWlsZCB0eCAobm90IHNpZ24vc2VuZCkgd2hpbGUgZmFubmluZyBvdXQgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vZmFub3V0VW5zcGVudHNgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKS5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHVuc3BlbnRzIH0pKS5yZXBseSgyMDApO1xuXG4gICAgICBjb25zdCB1bnVzZWROb2NrcyA9IG5vY2soYmdVcmwpO1xuICAgICAgdW51c2VkTm9ja3MuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCk7XG4gICAgICB1bnVzZWROb2Nrcy5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NlbmRgKS5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuZmFub3V0VW5zcGVudHMoeyBhZGRyZXNzLCB1bnNwZW50cyB9LCBNYW5hZ2VVbnNwZW50c09wdGlvbnMuQlVJTERfT05MWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRoZSBmYW5vdXRVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvZmFub3V0VW5zcGVudHMgYW5kIHdoZXRoZXIgdW5zcGVudHMgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHVudXNlZE5vY2tzLnBlbmRpbmdNb2NrcygpLmxlbmd0aC5zaG91bGQuZXFsKDIpO1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByb3V0ZSBjdXN0b2RpYWwgZmFub3V0VW5zcGVudHMgdGhyb3VnaCB0eC9pbml0aWF0ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbEJhc2Vjb2luID0gYml0Z28uY29pbigndGJ0YycpO1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGN1c3RvZGlhbEJhc2Vjb2luLCBjdXN0b2RpYWxXYWxsZXREYXRhKTtcblxuICAgICAgY29uc3QgaW5pdGlhdGVQYXRoID0gYC9hcGkvdjIvJHtjdXN0b2RpYWxXYWxsZXQuY29pbigpfS93YWxsZXQvJHtjdXN0b2RpYWxXYWxsZXQuaWQoKX0vdHgvaW5pdGlhdGVgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChpbml0aWF0ZVBhdGgsIF8ubWF0Y2hlcyh7IHR5cGU6ICdmYW5vdXQnIH0pKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ2FjY2VwdGVkJywgdHhSZXF1ZXN0SWQ6ICdtb2NrLXR4LXJlcXVlc3QtaWQnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjdXN0b2RpYWxXYWxsZXQuZmFub3V0VW5zcGVudHMoeyBudW1VbnNwZW50c1RvTWFrZTogMTAgfSk7XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgKHJlc3VsdCBhcyBhbnkpLnN0YXR1cy5zaG91bGQuZXF1YWwoJ2FjY2VwdGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDdXN0b2R5IHNCVEMgYnJpZGdpbmcvd2l0aGRyYXcgcGFyYW1zIHBhc3MtdGhyb3VnaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBicmlkZ2luZ1BhcmFtcyA9IHtcbiAgICAgIHNidGM6IHtcbiAgICAgICAgYW1vdW50OiAxMDAwMDAsXG4gICAgICAgIHN0YWNrc1JlY2lwaWVudDogJ1NQMko2Wlk0OEdWMUVaNVYyVjVSQjlNUDY2U1c4NlBZS0tOUlY5RUo3JyxcbiAgICAgICAgbWF4RmVlOiA1MDAwLFxuICAgICAgICBsb2NrVGltZTogMTQ0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHNidGNXaXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICBidGNBZGRyZXNzOiAnMk45RWdvOUtpZGlaUjh0TVA4Mmc2UmFnZ1F0Y2JSOXpOekgnLFxuICAgICAgbWF4RmVlOiAnNTAwMCcsXG4gICAgfTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgYnJpZGdpbmdQYXJhbXMgdGhyb3VnaCBzZW5kTWFueSB0byB0eC9pbml0aWF0ZSBmb3IgY3VzdG9kaWFsIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b2RpYWxXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0YnRjJyksIHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGluaXRpYXRlUGF0aCA9IGAvYXBpL3YyLyR7Y3VzdG9kaWFsV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7Y3VzdG9kaWFsV2FsbGV0LmlkKCl9L3R4L2luaXRpYXRlYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoaW5pdGlhdGVQYXRoLCBfLm1hdGNoZXMoeyB0eXBlOiAnYnJpZGdpbmcnLCBicmlkZ2luZ1BhcmFtcyB9KSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdhY2NlcHRlZCcsIHR4UmVxdWVzdElkOiAnbW9jay10eC1yZXF1ZXN0LWlkJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9kaWFsV2FsbGV0LnNlbmRNYW55KHsgdHlwZTogJ2JyaWRnaW5nJywgYnJpZGdpbmdQYXJhbXMgfSk7XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgKHJlc3VsdCBhcyBhbnkpLnN0YXR1cy5zaG91bGQuZXF1YWwoJ2FjY2VwdGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3Mgc2J0Y1dpdGhkcmF3UGFyYW1zIHRocm91Z2ggc2VuZE1hbnkgdG8gdHgvaW5pdGlhdGUgZm9yIGN1c3RvZGlhbCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGJ0YycpLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbml0aWF0ZVBhdGggPSBgL2FwaS92Mi8ke2N1c3RvZGlhbFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2N1c3RvZGlhbFdhbGxldC5pZCgpfS90eC9pbml0aWF0ZWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGluaXRpYXRlUGF0aCwgXy5tYXRjaGVzKHsgc2J0Y1dpdGhkcmF3UGFyYW1zIH0pKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ2FjY2VwdGVkJywgdHhSZXF1ZXN0SWQ6ICdtb2NrLXR4LXJlcXVlc3QtaWQnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjdXN0b2RpYWxXYWxsZXQuc2VuZE1hbnkoeyBzYnRjV2l0aGRyYXdQYXJhbXMgfSBhcyBhbnkpO1xuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIChyZXN1bHQgYXMgYW55KS5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhY2NlcHRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gcHJlYnVpbGRzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBldGhXYWxsZXQ7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiByZXFJZCBpZiBpdCB3YXMgcGFzc2VkIGluIHRoZSBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9mZmxpbmVWZXJpZmljYXRpb246IHRydWUgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSAxMDA7XG4gICAgICBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcyhibG9ja0hlaWdodCk7XG4gICAgICBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHsgLi4ucGFyYW1zLCByZXFJZDogcmVxSWQgfSk7XG4gICAgICB0eFJlcXVlc3QucmVxSWQ/LnNob3VsZC5jb250YWluRXFsKHJlcUlkKTtcbiAgICAgIHNjb3BlLmRvbmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBvZmZsaW5lVmVyaWZpY2F0aW9uPXRydWUgcXVlcnkgcGFyYW0gaWYgcGFzc2VkIHRydXRoeSB2YWx1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgb2ZmbGluZVZlcmlmaWNhdGlvbjogdHJ1ZSB9O1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2UoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgYmxvY2tIZWlnaHQ6IDEwMCxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgc2NvcGUuZG9uZSgpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBwYXNzIHRoZSBvZmZsaW5lVmVyaWZpY2F0aW9uIHF1ZXJ5IHBhcmFtIGlmIHBhc3NlZCBhIGZhbHNleSB2YWx1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgb2ZmbGluZVZlcmlmaWNhdGlvbjogZmFsc2UgfTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMpXG4gICAgICAgIC5xdWVyeSh7fSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSAxMDA7XG4gICAgICBjb25zdCBibG9ja0hlaWdodFN0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcyhibG9ja0hlaWdodCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5yZXN0b3JlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHNjcmlwdCBvdXRwdXRzIHdpdGggdGhlIHByb3BlciBzdHJ1Y3R1cmUgdG8gd2FsbGV0IHBsYXRmb3JtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gJzZhMTEyMjMzNDQ1NTY2Nzc4ODk5MDAnO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCB7XG4gICAgICAgICAgLi4udGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgc2NyaXB0LCBhbW91bnQ6IDFlNiB9XSxcbiAgICAgICAgfSlcbiAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IGBzY3JpcHRQdWJLZXk6JHtzY3JpcHR9YCwgYW1vdW50OiAxZTYgfV0gfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogeyAuLi50YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcywgcmVjaXBpZW50czogW3sgc2NyaXB0LCBhbW91bnQ6IDFlNiB9XSB9LFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVidWlsZCBzaG91bGQgY2FsbCBidWlsZCBhbmQgZ2V0TGF0ZXN0QmxvY2tIZWlnaHQgZm9yIHV0eG8gY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMpXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVidWlsZCBzaG91bGQgbm90IGhhdmUgY2hhbmdlQWRkcmVzc1R5cGUgYXJyYXkgaW4gcG9zdCBib2R5IHdoZW4gY2hhbmdlQWRkcmVzc1R5cGUgaXMgZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQnVpbGRQb3N0Qm9keVBhcmFtcyA9IHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGU6ICdwMnRyTXVzaWcyJyxcbiAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgZXhwZWN0ZWRCdWlsZFBvc3RCb2R5UGFyYW1zKVxuICAgICAgICAucXVlcnkoe30pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IGNoYW5nZUFkZHJlc3NUeXBlOiAncDJ0ck11c2lnMicgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogZXhwZWN0ZWRCdWlsZFBvc3RCb2R5UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBicmlkZ2luZ1BhcmFtcyB0byB0eC9idWlsZCBmb3Igbm9uLVRTUyBCVEMgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnJpZGdpbmdQYXJhbXMgPSB7XG4gICAgICAgIHNidGM6IHtcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwMCxcbiAgICAgICAgICBzdGFja3NSZWNpcGllbnQ6ICdTUDJKNlpZNDhHVjFFWjVWMlY1UkI5TVA2NlNXODZQWUtLTlJWOUVKNycsXG4gICAgICAgICAgbWF4RmVlOiA1MDAwLFxuICAgICAgICAgIGxvY2tUaW1lOiAxNDQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRCdWlsZFBhcmFtcyA9IHtcbiAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIGJyaWRnaW5nUGFyYW1zLFxuICAgICAgICBjaGFuZ2VBZGRyZXNzVHlwZTogWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCBleHBlY3RlZEJ1aWxkUGFyYW1zKVxuICAgICAgICAucXVlcnkoe30pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKDEwMCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIGJyaWRnaW5nUGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogZXhwZWN0ZWRCdWlsZFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgc2NvcGUuZG9uZSgpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gYnJpZGdpbmdQYXJhbXMgaXMgbWlzc2luZyBmb3IgYnJpZGdpbmcgdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcIidicmlkZ2luZ1BhcmFtcycgaXMgcmVxdWlyZWQgZm9yIGJyaWRnaW5nIGludGVudFwiKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVidWlsZCBzaG91bGQgY2FsbCBidWlsZCBidXQgbm90IGdldExhdGVzdEJsb2NrSGVpZ2h0IGZvciBhY2NvdW50IGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgWyd0eHJwJywgJ3R4bG0nLCAndGV0aCddLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGNvaW4pIHtcbiAgICAgICAgY29uc3QgYWNjb3VudGNvaW4gPSBiaXRnby5jb2luKGNvaW4pO1xuICAgICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjFhJyxcbiAgICAgICAgICBjb2luLFxuICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjY291bnRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBhY2NvdW50Y29pbiwgd2FsbGV0RGF0YSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7YWNjb3VudFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2FjY291bnRXYWxsZXQuaWQoKX0vdHgvYnVpbGRgKVxuICAgICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGFjY291bnRjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgICAgYXdhaXQgYWNjb3VudFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICAgIHBvc3RQcm9jZXNzU3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgICB3YWxsZXQ6IGFjY291bnRXYWxsZXQsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHt9LFxuICAgICAgICB9KTtcbiAgICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGlzQmF0Y2ggPSB0cnVlIGluIHRoZSB0eFByZWJ1aWxkIGlmIHR4UGFyYW1zIGhhcyBtb3JlIHRoYW4gb25lIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczEgfSxcbiAgICAgICAgICB7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiBhZGRyZXNzMiB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnbW9vbicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0b3RhbEFtb3VudCA9ICcyMDAwMDAwMDAwMDAwMDAwJztcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoXG4gICAgICAgICAgYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdHgvYnVpbGRgLFxuICAgICAgICAgIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHM6IHR4UGFyYW1zLnJlY2lwaWVudHMgfSlcbiAgICAgICAgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHhjMGFhZjI2NDllN2IwZjM5NTAxNjQ2ODFlY2EyYjFhOGY2NTRhNDc4JyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMjAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIGRhdGE6ICcweGMwMGM0ZTllMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTc0Y2ZkODIzYWY4Y2UyN2VkMGFmZWUzZmNmM2MzYmEyNTkxMTZiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzhkN2VhNGM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4ZDdlYTRjNjgwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDEwODk2LFxuICAgICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICAgIGlzQmF0Y2g6IHRydWUsXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGV0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHR4UGFyYW1zKTtcbiAgICAgIHR4UHJlYnVpbGQuaXNCYXRjaC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB0eFByZWJ1aWxkLnJlY2lwaWVudHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgIChiaXRnby5jb2luKCd0ZXRoJykgYXMgYW55KS5zdGF0aWNzQ29pbi5uZXR3b3JrLmJhdGNoZXJDb250cmFjdEFkZHJlc3NcbiAgICAgICk7XG4gICAgICB0eFByZWJ1aWxkLnJlY2lwaWVudHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0b3RhbEFtb3VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgaXNCYXRjaCA9IGZhbHNlIGFuZCBob3BUcmFuc2FjdGlvbiBmaWVsZCBzaG91bGQgbm90IGJlIHRoZXJlIGluIHRoZSB0eFByZWJ1aWxkICBmb3Igbm9ybWFsIGV0aCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczEgfV0sXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdtb29uJyxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KFxuICAgICAgICAgIGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYCxcbiAgICAgICAgICBfLm1hdGNoZXMoeyByZWNpcGllbnRzOiB0eFBhcmFtcy5yZWNpcGllbnRzIH0pXG4gICAgICAgIClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDEwODk3LFxuICAgICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICAgIGlzQmF0Y2g6IGZhbHNlLFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih0eFBhcmFtcyk7XG4gICAgICB0eFByZWJ1aWxkLmlzQmF0Y2guc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdob3BUcmFuc2FjdGlvbicpO1xuICAgICAgdHhQcmVidWlsZC5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MxKTtcbiAgICAgIHR4UHJlYnVpbGQucmVjaXBpZW50c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgaXNUZXN0VHJhbnNhY3Rpb24gcGFyYW1ldGVyIHRocm91Z2ggZm9yIG11bHRpc2lnIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2FhYScsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgaXNUZXN0VHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cywgaXNUZXN0VHJhbnNhY3Rpb24gfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMsIGlzVGVzdFRyYW5zYWN0aW9uIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgaXNUZXN0VHJhbnNhY3Rpb24gaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyB1bnNwZW50IHJlc2VydmF0aW9uIHBhcmFtZXRlciB0aHJvdWdoIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzZXJ2YXRpb24gPSB7XG4gICAgICAgIGV4cGlyZVRpbWU6ICcyMDI5LTA4LTEyJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2FhYScsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cywgcmVzZXJ2YXRpb24gfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMsIHJlc2VydmF0aW9uIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgcmVzZXJ2YXRpb24gaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBnYXMgbGltaXQgcGFyYW1ldGVyIHRocm91Z2ggd2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbiBmb3Igc3VpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBnYXNMaW1pdDogMTAwIH07XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMocGFyYW1zKSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgICAucmVwbHkoMjAwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRoZSBwcmVidWlsZFRyYW5zYWN0aW9uIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC90eC9idWlsZCBhbmQgd2hldGhlciByZXNlcnZhdGlvbiBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTWF4aW11bSBTcGVuZGFibGUnLCBmdW5jdGlvbiBtYXhpbXVtU3BlbmRhYmxlKCkge1xuICAgIGxldCBiZ1VybDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLnBlbmRpbmdNb2NrcygpLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS51cmk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXJndW1lbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJhbXMgPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgbWluVmFsdWU6ICcwJyxcbiAgICAgICAgbWF4VmFsdWU6ICc5OTk5OTk5OTk5OTk5JyxcbiAgICAgICAgbWluSGVpZ2h0OiAwLFxuICAgICAgICBtaW5Db25maXJtczogMixcbiAgICAgICAgZW5mb3JjZU1pbkNvbmZpcm1zRm9yQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgZmVlUmF0ZTogMTAwMDAsXG4gICAgICAgIG1heEZlZVJhdGU6IDEwMDAwMCxcbiAgICAgICAgcmVjaXBpZW50QWRkcmVzczogJzJOQ1VGRExpVXo5Q1ZubWRWcVFlOWFjVm9ub004OWU3NmRmJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBhY3R1YWwgYXBpIHJlcXVlc3Qgd2lsbCBvbmx5IHNlbmQgc3RyaW5ncywgYnV0IHRoZSBTREsgZnVuY3Rpb24gZXhwZWN0cyBudW1iZXJzIGZvciBzb21lIHZhbHVlc1xuICAgICAgY29uc3QgYXBpUGFyYW1zID0gXy5tYXBWYWx1ZXMob3B0aW9uYWxQYXJhbXMsIChwYXJhbSkgPT4gU3RyaW5nKHBhcmFtKSk7XG5cbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9tYXhpbXVtU3BlbmRhYmxlYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChwYXRoKVxuICAgICAgICAucXVlcnkoXy5tYXRjaGVzKGFwaVBhcmFtcykpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvaW46ICd0YmNoJyxcbiAgICAgICAgICBtYXhpbXVtU3BlbmRhYmxlOiA2NTAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5tYXhpbXVtU3BlbmRhYmxlKG9wdGlvbmFsUGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWRcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2hhcmUgdG8gY29sZCB3YWxsZXQgd2l0aG91dCBwYXNzaW5nIHNraXBLZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcblxuICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSkucmVwbHkoMjAwLCB7IHVzZXJJZCB9KTtcblxuICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtjb2xkV2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7Y29sZFdhbGxldC5rZXlJZHMoKVsxXX1gKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSlcbiAgICAgICAgLmdldChgL2FwaS92Mi90YnRjL2tleS8ke2NvbGRXYWxsZXQua2V5SWRzKClbMl19YClcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90YnRjL3dhbGxldC8ke2NvbGRXYWxsZXQuaWQoKX0vc2hhcmVgLCB7XG4gICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIHNraXBLZXljaGFpbjogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBjb2xkV2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zIH0pO1xuXG4gICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgZ2V0S2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSG90IFdhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2JpdGdvMTIzNCc7XG4gICAgICBjb25zdCBwdWIgPSAnWm8xZ2d6VFVLTVk1YlluRHZUNW10VmVaeHpmMkZhTFRiS2ttdkdVaFVRayc7XG5cbiAgICAgIGNvbnN0IGxpZ2h0bmluZ0NvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RsbmJ0YycpO1xuICAgICAgY29uc3QgbGlnaHRuaW5nV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMScsXG4gICAgICAgIGNvaW46ICd0bG5idGMnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAxJ10sXG4gICAgICAgIGNvaW5TcGVjaWZpYzogeyBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NjAwMDAwMDAwJywgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJ10gfSxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlnaHRuaW5nV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgbGlnaHRuaW5nQ29pbiwgbGlnaHRuaW5nV2FsbGV0RGF0YSk7XG5cbiAgICAgIGZvciAoY29uc3QgaG90V2FsbGV0IG9mIFt3YWxsZXQsIGxpZ2h0bmluZ1dhbGxldF0gYXMgY29uc3QpIHtcbiAgICAgICAgaXQoYHNob3VsZCB1c2Uga2V5Y2hhaW4gcHViIHRvIHNoYXJlICR7aG90V2FsbGV0LmNvaW4oKX0gaG90IHdhbGxldGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5LCBwYXRoIH0pO1xuXG4gICAgICAgICAgY29uc3QgZ2V0S2V5Tm9ja3M6IG5vY2suU2NvcGVbXSA9IFtdO1xuICAgICAgICAgIGlmIChob3RXYWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsbmJ0YycpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYwID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjAnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZFBydnMgPSBbZW5jWHBydjAsIGVuY1hwcnYxXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleUlkID0gbGlnaHRuaW5nV2FsbGV0RGF0YS5jb2luU3BlY2lmaWMua2V5c1tpXTtcbiAgICAgICAgICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgICAgLmdldChgL2FwaS92Mi90bG5idGMva2V5LyR7a2V5SWR9YClcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICAgICAgICBpZDoga2V5SWQsXG4gICAgICAgICAgICAgICAgICBwdWI6IGkgPT09IDAgPyBwdWIgOiAnWm8xZ2d6VFVLTVk1YlluRHZUNW10VmVaeHpmMkZhTFRiS2ttdkdVaFVRbScsXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jcnlwdGVkUHJ2c1tpXSxcbiAgICAgICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzpcbiAgICAgICAgICAgICAgICAgICAgaSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgID8geyBbaG90V2FsbGV0LmJhc2VDb2luLmdldENoYWluKCldOiB7IHB1cnBvc2U6ICd1c2VyQXV0aCcgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7IFtob3RXYWxsZXQuYmFzZUNvaW4uZ2V0Q2hhaW4oKV06IHsgcHVycG9zZTogJ25vZGVBdXRoJyB9IH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGdldEtleU5vY2tzLnB1c2goZ2V0S2V5Tm9jayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt3YWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICAgIGlkOiB3YWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgICAgIHB1YixcbiAgICAgICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jWHBydjEsXG4gICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdldEtleU5vY2tzLnB1c2goZ2V0S2V5Tm9jayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoaG90V2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5wdWIhLnNob3VsZC5lcXVhbChwdWIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCBob3RXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgICBzdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIGdldEtleU5vY2tzLmV2ZXJ5KCh2KSA9PiB2LmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvdmlkZSBza2lwS2V5Y2hhaW4gdG8gd2FsbGV0IHNoYXJlIGFwaSBmb3IgaG90IHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3RidGMvd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3NoYXJlYCwge1xuICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICBza2lwS2V5Y2hhaW46IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCBza2lwS2V5Y2hhaW46IHRydWUgfSk7XG5cbiAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjcnlwdCB3ZWJhdXRobiBlbmNyeXB0ZWRQcnYgZm9yIHdhbGxldCBzaGFyZSAoc3BlbmQpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gJ3hwcnYxJztcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UxID0gJ2JpdGdvMTIzNCc7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlMiA9ICdiaXRnbzU2NzgnO1xuXG4gICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcblxuICAgICAgY29uc3QgcHViID0gJ1pvMWdnelRVS01ZNWJZbkR2VDVtdFZlWnh6ZjJGYUxUYktrbXZHVWhVUWsnO1xuICAgICAgY29uc3QgZW5jUHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJpdmF0ZUtleSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UxIH0pO1xuICAgICAgY29uc3QgZW5jUHJ2MiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJpdmF0ZUtleSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UyIH0pO1xuICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt3YWxsZXQua2V5SWRzKClbMF19YClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiB3YWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgcHViLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jUHJ2MSxcbiAgICAgICAgICB3ZWJhdXRobkRldmljZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3RwRGV2aWNlSWQ6ICcxMjMnLFxuICAgICAgICAgICAgICBhdXRoZW50aWNhdG9ySW5mbzoge1xuICAgICAgICAgICAgICAgIGNyZWRJRDogJ2NyZWRJRCcsXG4gICAgICAgICAgICAgICAgZm10OiAncGFja2VkJyxcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6ICdzb21lIHZhbHVlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcHJmU2FsdDogJzQ1NicsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jUHJ2MixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIod2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLmVuY3J5cHRlZFBydiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlOiB3YWxsZXRQYXNzcGhyYXNlMiB9KTtcbiAgICAgIHN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPRkMgbXVsdGkta2V5LXVzZXItS2V5IFdhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgbGV0IG9mY1dhbGxldDogV2FsbGV0O1xuICAgICAgbGV0IG9mY011bHRpVXNlcktleVdhbGxldDogV2FsbGV0O1xuICAgICAgbGV0IG5vbk11bHRpVXNlcktleVdhbGxldDogV2FsbGV0O1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBvZmNDb2luID0gYml0Z28uY29pbignb2ZjJyk7XG5cbiAgICAgICAgLy8gUmVndWxhciBPRkMgd2FsbGV0IHdpdGhvdXQgbXVsdGkta2V5LXVzZXIta2V5IGZlYXR1cmVcbiAgICAgICAgY29uc3QgcmVndWxhck9mY1dhbGxldERhdGEgPSB7XG4gICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAwYzAwMDAwMDAwJyxcbiAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTgxMDAwMDAwMDAnLFxuICAgICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE4MjAwMDAwMDAwJyxcbiAgICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxODMwMDAwMDAwMCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICB9IGFzIGFueTtcbiAgICAgICAgb2ZjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwgcmVndWxhck9mY1dhbGxldERhdGEpO1xuXG4gICAgICAgIC8vIE9GQyB3YWxsZXQgd2l0aCBtdWx0aS1rZXktdXNlci1rZXkgZmVhdHVyZVxuICAgICAgICBjb25zdCBtdWx0aVVzZXJLZXlXYWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMGQwMDAwMDAwMCcsXG4gICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxODQwMDAwMDAwMCddLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgZmVhdHVyZXM6IFsnbXVsdGkta2V5LXVzZXIta2V5J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICAgIG9mY011bHRpVXNlcktleVdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIG11bHRpVXNlcktleVdhbGxldERhdGEpO1xuXG4gICAgICAgIC8vIE5vbi1tdWx0aS1rZXktdXNlci1rZXkgd2FsbGV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0ZXN0c1xuICAgICAgICBjb25zdCBub25NdWx0aVVzZXJLZXlXYWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDMnLFxuICAgICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDInXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICB9O1xuICAgICAgICBub25NdWx0aVVzZXJLZXlXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCBub25NdWx0aVVzZXJLZXlXYWxsZXREYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnY3JlYXRlU2hhcmUgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBleGNsdWRlIGtleWNoYWluIHByb3BlcnR5IGZyb20gQVBJIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL29mYy93YWxsZXQvJHtvZmNNdWx0aVVzZXJLZXlXYWxsZXQuaWQoKX0vc2hhcmVgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGJvZHkuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdrZXljaGFpbicpO1xuICAgICAgICAgICAgICAgIGJvZHkudXNlci5zaG91bGQuZXF1YWwodXNlcklkKTtcbiAgICAgICAgICAgICAgICBib2R5LnBlcm1pc3Npb25zLnNob3VsZC5lcXVhbChwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmNyZWF0ZVNoYXJlKGNyZWF0ZVNoYXJlUGFyYW1zKTtcblxuICAgICAgICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbm9uLWVtcHR5IGtleWNoYWluIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQnLFxuICAgICAgICAgICAgICAgIGZyb21QdWJLZXk6ICdmcm9tUHViJyxcbiAgICAgICAgICAgICAgICB0b1B1YktleTogJ3RvUHViJyxcbiAgICAgICAgICAgICAgICBwYXRoOiAnbS85OTk5OTkvMS8xJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldFxuICAgICAgICAgICAgICAuY3JlYXRlU2hhcmUoY3JlYXRlU2hhcmVQYXJhbXMpXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBwcm92aWRlZCBmb3IgbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgb21pdCBrZXljaGFpbiBmcm9tIHJlcXVlc3QgZXZlbiB3aGVuIGVtcHR5IG9iamVjdCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlUGFyYW1zID0ge1xuICAgICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBrZXljaGFpbjoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmlkKCl9L3NoYXJlYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgICAgICAgICAgICBib2R5LnVzZXIuc2hvdWxkLmVxdWFsKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5wZXJtaXNzaW9ucy5zaG91bGQuZXF1YWwocGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldC5jcmVhdGVTaGFyZShjcmVhdGVTaGFyZVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnbm9uLW11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBrZXljaGFpbiBwcm9wZXJ0eSBpbiBBUEkgcmVxdWVzdCB3aGVuIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQnLFxuICAgICAgICAgICAgICAgIGZyb21QdWJLZXk6ICdmcm9tUHViJyxcbiAgICAgICAgICAgICAgICB0b1B1YktleTogJ3RvUHViJyxcbiAgICAgICAgICAgICAgICBwYXRoOiAnbS85OTk5OTkvMS8xJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL29mYy93YWxsZXQvJHtvZmNXYWxsZXQuaWQoKX0vc2hhcmVgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGJvZHkuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZnJvbVB1YktleScpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3RvUHViS2V5Jyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGF0aCcpO1xuICAgICAgICAgICAgICAgIGJvZHkudXNlci5zaG91bGQuZXF1YWwodXNlcklkKTtcbiAgICAgICAgICAgICAgICBib2R5LnBlcm1pc3Npb25zLnNob3VsZC5lcXVhbChwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjV2FsbGV0LmNyZWF0ZVNoYXJlKGNyZWF0ZVNoYXJlUGFyYW1zKTtcblxuICAgICAgICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzaGFyZVdhbGxldCBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdtdWx0aS1rZXktdXNlci1rZXkgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHNraXAga2V5Y2hhaW4gcHJlcGFyYXRpb24gYW5kIHNldCBza2lwS2V5Y2hhaW49dHJ1ZSBpbiBBUEkgcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5OiAndGVzdHB1YmtleScsIHBhdGg6ICdtLzk5OTk5OS8xLzEnIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmlkKCl9L3NoYXJlYCwgZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdza2lwS2V5Y2hhaW4nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyJywgdXNlcklkKTtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdwZXJtaXNzaW9ucycsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAgICAgICAvLyBTdHViIHByZXBhcmVTaGFyZWRLZXljaGFpbiB0byBlbnN1cmUgaXQncyBub3QgY2FsbGVkXG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlU2hhcmVkS2V5Y2hhaW5TdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdwcmVwYXJlU2hhcmVkS2V5Y2hhaW4nKS5yZXNvbHZlcyh7fSk7XG5cbiAgICAgICAgICAgIC8vIFN0dWIgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluIHRvIHByZXZlbnQgYW55IGtleWNoYWluIGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nKTtcbiAgICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIucmVqZWN0cyhuZXcgRXJyb3IoJ2dldEVuY3J5cHRlZFVzZXJLZXljaGFpbiBzaG91bGQgbm90IGJlIGNhbGxlZCcpKTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjTXVsdGlVc2VyS2V5V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zIH0pO1xuXG4gICAgICAgICAgICAvLyBWZXJpZnkga2V5Y2hhaW4gcHJlcGFyYXRpb24gbWV0aG9kcyBhcmUgbm90IGNhbGxlZFxuICAgICAgICAgICAgcHJlcGFyZVNoYXJlZEtleWNoYWluU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgICBjcmVhdGVTaGFyZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgcGFzcyBza2lwS2V5Y2hhaW49dHJ1ZSBhbmQgdW5kZWZpbmVkIGtleWNoYWluIHRvIGNyZWF0ZVNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXk6ICd0ZXN0cHVia2V5JywgcGF0aDogJ20vOTk5OTk5LzEvMScgfSk7XG5cbiAgICAgICAgICAgIC8vIFN0dWIgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluIHRvIHByZXZlbnQgYW55IGtleWNoYWluIGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nKTtcbiAgICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIucmVqZWN0cyhuZXcgRXJyb3IoJ2dldEVuY3J5cHRlZFVzZXJLZXljaGFpbiBzaG91bGQgbm90IGJlIGNhbGxlZCcpKTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVTdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBvcHRpb25zIS5za2lwS2V5Y2hhaW4hLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgICAgICAgc2hvdWxkKG9wdGlvbnMhLmtleWNoYWluKS5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCBvZmNNdWx0aVVzZXJLZXlXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMgfSk7XG5cbiAgICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgICAgY3JlYXRlU2hhcmVTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdub24tbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGtleWNoYWluIHdoZW4gd2FsbGV0IHBhc3NwaHJhc2UgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0b0tleWNoYWluID0gdXR4b0xpYi5iaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMicsICdoZXgnKSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gJ20vOTk5OTk5LzEvMSc7XG4gICAgICAgICAgICBjb25zdCBwdWJrZXkgPSB0b0tleWNoYWluLmRlcml2ZVBhdGgocGF0aCkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnYml0Z28xMjM0JztcbiAgICAgICAgICAgIGNvbnN0IHB1YiA9ICdabzFnZ3pUVUtNWTViWW5EdlQ1bXRWZVp4emYyRmFMVGJLa212R1VoVVFrJztcblxuICAgICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvb2ZjL2tleS8ke25vbk11bHRpVXNlcktleVdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgICAgaWQ6IG5vbk11bHRpVXNlcktleVdhbGxldC5rZXlJZHMoKVswXSxcbiAgICAgICAgICAgICAgcHViLFxuICAgICAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBlbmNYcHJ2MSxcbiAgICAgICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVN0dWIgPSBzaW5vbi5zdHViKG5vbk11bHRpVXNlcktleVdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEZvciBub24tbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMsIGtleWNoYWluIHNob3VsZCBiZSBwcmVzZW50IHdoZW4gc3BlbmQgcGVybWlzc2lvbnMgYXJlIGluY2x1ZGVkXG4gICAgICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQuZXF1YWwocHViKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCBub25NdWx0aVVzZXJLZXlXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgICAgZ2V0S2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnbXVsdGkta2V5LXVzZXIta2V5IGRldGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBkZXRlY3QgbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldCB2aWEgY29pblNwZWNpZmljLmZlYXR1cmVzIGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IG9mY0NvaW46IGFueSA9IGJpdGdvLmNvaW4oJ29mYycpO1xuICAgICAgICAgIGNvbnN0IHdhbGxldFdpdGhNdWx0aVVzZXJLZXlGZWF0dXJlID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwge1xuICAgICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwNCcsXG4gICAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDMnXSxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgICBmZWF0dXJlczogWydtdWx0aS1rZXktdXNlci1rZXknXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHdhbGxldFdpdGhvdXRGZWF0dXJlID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwge1xuICAgICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwNScsXG4gICAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDQnXSxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgICBmZWF0dXJlczogWydzb21lLW90aGVyLWZlYXR1cmUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHdhbGxldFdpdGhvdXRDb2luU3BlY2lmaWMgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCB7XG4gICAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDA2JyxcbiAgICAgICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwNSddLFxuICAgICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgLnRpbWVzKDMpXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5OiAndGVzdHB1YmtleScsIHBhdGg6ICdtLzk5OTk5OS8xLzEnIH0pO1xuXG4gICAgICAgICAgLy8gTXVsdGkta2V5LXVzZXIta2V5IHdhbGxldCBzaG91bGQgc2tpcCBrZXljaGFpblxuICAgICAgICAgIGNvbnN0IGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIxID0gc2lub24uc3R1Yih3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZSwgJ2dldEVuY3J5cHRlZFVzZXJLZXljaGFpbicpO1xuICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIxLnJlamVjdHMobmV3IEVycm9yKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4gc2hvdWxkIG5vdCBiZSBjYWxsZWQnKSk7XG4gICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVTdHViMSA9IHNpbm9uXG4gICAgICAgICAgICAuc3R1Yih3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZSwgJ2NyZWF0ZVNoYXJlJylcbiAgICAgICAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucyEuc2tpcEtleWNoYWluIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZS5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucyB9KTtcbiAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViMS5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgY3JlYXRlU2hhcmVTdHViMS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgICAvLyBXYWxsZXQgd2l0aG91dCBtdWx0aS1rZXktdXNlci1rZXkgZmVhdHVyZSBzaG91bGQgcmVzcGVjdCBza2lwS2V5Y2hhaW4gZmxhZ1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YjIgPSBzaW5vbi5zdHViKHdhbGxldFdpdGhvdXRGZWF0dXJlLCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0V2l0aG91dEZlYXR1cmUuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHNraXBLZXljaGFpbjogdHJ1ZSB9KTtcbiAgICAgICAgICBjcmVhdGVTaGFyZVN0dWIyLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgICAgIC8vIFdhbGxldCB3aXRob3V0IGNvaW5TcGVjaWZpYyBzaG91bGQgbm90IGJlIGRldGVjdGVkIGFzIG11bHRpLWtleS11c2VyLWtleVxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YjMgPSBzaW5vbi5zdHViKHdhbGxldFdpdGhvdXRDb2luU3BlY2lmaWMsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB3YWxsZXRXaXRob3V0Q29pblNwZWNpZmljLnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCBza2lwS2V5Y2hhaW46IHRydWUgfSk7XG4gICAgICAgICAgY3JlYXRlU2hhcmVTdHViMy5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IEZyZWV6aW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZnJlZXplIHdhbGxldCBmb3Igc3BlY2lmaWVkIGR1cmF0aW9uIGluIHNlY29uZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGR1cmF0aW9uOiA2MCB9O1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2ZyZWV6ZWAsIHBhcmFtcykucmVwbHkoMjAwLCB7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQuZnJlZXplKHBhcmFtcyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVFNTIFdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCB0c29sID0gYml0Z28uY29pbigndHNvbCcpO1xuICAgIGNvbnN0IHRhZGEgPSBiaXRnby5jb2luKCd0YWRhJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCBldGhXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luOiAndGV0aCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIGNvaW5TcGVjaWZpYzogeyBhZGRyZXNzVmVyc2lvbjogMSB9LFxuICAgICAgdHlwZTogJ2hvdCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHBvbHlnb25XYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc2MzI4MjY1MjBlZTFlNTAwMDcyOTAxNzM1NGFjYWVhYicsXG4gICAgICBjb2luOiAndHBvbHlnb24nLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IGFkYVdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJ2JmMTg5N2ExLWU0YmQtNGI5Ni1iMmE0LWJhMDJjMGZjOTk1NicsXG4gICAgICBjb2luOiAndGFkYScsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IHRzc1NvbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRzb2wsIHdhbGxldERhdGEpO1xuICAgIGNvbnN0IHRzc0FkYVdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRhZGEsIGFkYVdhbGxldERhdGEpO1xuXG4gICAgbGV0IHRzc0V0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgZXRoV2FsbGV0RGF0YSk7XG4gICAgY29uc3QgdHNzUG9seWdvbldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3Rwb2x5Z29uJyksIHBvbHlnb25XYWxsZXREYXRhKTtcbiAgICBjb25zdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdEZ1bGw6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLFxuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgY29tbWl0bWVudFNoYXJlczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIHRzcyB0eFByZWJ1aWxkIGJ1aWxkUGFyYW1zIHdoZW4gcHJlc2lnbiByZXBsYWNlcyB0aGUgdHhQcmVidWlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgfTtcblxuICAgICAgc2FuZGJveC5zdHViKHRzb2wsICdwcmVzaWduVHJhbnNhY3Rpb24nKS5jYWxsc0Zha2UoYXN5bmMgKHByZXNpZ25QYXJhbXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmVzaWduUGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgICAgdHhIZXg6ICdyZWZyZXNoZWQtdHgtaGV4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnb3JpZ2luYWwtdHgtaGV4JyxcbiAgICAgICAgICBidWlsZFBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiAndXNlci1wcnYnLFxuICAgICAgfSk7XG5cbiAgICAgIHNpZ25UeFJlcXVlc3Quc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBjb25zdCBmaXJzdFNpZ25UeFJlcXVlc3RDYWxsID0gc2lnblR4UmVxdWVzdC5maXJzdENhbGw7XG4gICAgICBhc3NlcnQub2soZmlyc3RTaWduVHhSZXF1ZXN0Q2FsbCk7XG4gICAgICBjb25zdCBzaWduVHhSZXF1ZXN0UGFyYW1zID0gZmlyc3RTaWduVHhSZXF1ZXN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25UeFJlcXVlc3RQYXJhbXMpO1xuICAgICAgc2hvdWxkKHNpZ25UeFJlcXVlc3RQYXJhbXMudHhQYXJhbXMpLmRlZXBFcXVhbChidWlsZFBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJlQnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlMTIzNDUnLFxuICAgICAgICBwcmVidWlsZFR4OiB7IHdhbGxldElkOiB0c3NFdGhXYWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6ICdyYW5kb21JZCcgfSxcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgIH07XG5cbiAgICAgIFsnZWRkc2EnLCAnZWNkc2EnXS5mb3JFYWNoKChrZXlDdXJ2ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGRlc2NyaWJlKGtleUN1cnZlLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2FsbGV0ID0ga2V5Q3VydmUgPT09ICdlZGRzYScgPyB0c3NTb2xXYWxsZXQgOiB0c3NFdGhXYWxsZXQ7XG5cbiAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhbmRib3hcbiAgICAgICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAgICAgLnJlc29sdmVzKFt7IGNvbW1vbktleWNoYWluOiAndGVzdCcsIGlkOiAnJywgcHViOiAnJywgdHlwZTogJ2luZGVwZW5kZW50JyB9XSk7XG4gICAgICAgICAgICBpZiAoa2V5Q3VydmUgPT09ICdlZGRzYScpIHtcbiAgICAgICAgICAgICAgc2FuZGJveC5zdHViKFRzb2wucHJvdG90eXBlLCAndmVyaWZ5VHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNhbmRib3guc3R1YihUZXRoLnByb3RvdHlwZSwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnaXQgc2hvdWxkIHN1Y2NlZWQgYnV0IG5vdCBzaWduIGlmIHRoZSB0eFJlcXVlc3QgaXMgcGVuZGluZyBhcHByb3ZhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFR4UmVxdWVzdFN0dWIgPSBzYW5kYm94LnN0dWIoQmFzZVRzc1V0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXMoe1xuICAgICAgICAgICAgICAuLi50eFJlcXVlc3RGdWxsLFxuICAgICAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnblRyYW5zYWN0aW9uU3B5ID0gc2FuZGJveC5zcHkoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgd2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcykpIGFzIFR4UmVxdWVzdDtcbiAgICAgICAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc3RhdGUnKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0ZS5zaG91bGQuZXF1YWwoJ3BlbmRpbmdBcHByb3ZhbCcpO1xuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0U3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TcHkubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnaXQgc2hvdWxkIHN1Y2NlZWQgYW5kIHNpZ24gaWYgdGhlIHR4UmVxdWVzdCBpcyBub3QgcGVuZGluZyBhcHByb3ZhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFR4UmVxdWVzdFN0dWIgPSBzYW5kYm94LnN0dWIoQmFzZVRzc1V0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICAgICAgICBnZXRUeFJlcXVlc3RTdHViLnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduVHJhbnNhY3Rpb25TdHViID0gc2FuZGJveC5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3RGdWxsLCBzdGF0ZTogJ3NpZ25lZCcgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zKSkgYXMgVHhSZXF1ZXN0O1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzdGF0ZScpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXRlLnNob3VsZC5lcXVhbCgnc2lnbmVkJyk7XG4gICAgICAgICAgICBnZXRUeFJlcXVlc3RTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHByZWJ1aWxkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaW5nbGUgcmVjaXBpZW50IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2luZ2xlIHJlY2lwaWVudCB0cmFuc2ZlciB3aXRoIHBlbmRpbmcgYXBwcm92YWwgaWQgaWYgdHJhbnNhY3Rpb24gaXMgaGF2aW5nIG9uZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh7IC4uLnR4UmVxdWVzdCwgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLCBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnIH0pO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbXVsdGlwbGUgcmVjaXBpZW50IHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMjAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBpc1Rlc3RUcmFuc2FjdGlvbiBmbGFnJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgaXNUZXN0VHJhbnNhY3Rpb246IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZlcmlmeSBpc1Rlc3RUcmFuc2FjdGlvbiBpcyBwYXNzZWQgdG8gcHJlYnVpbGRUeFdpdGhJbnRlbnRcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBjYWxsQXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmdldENhbGwoMCkuYXJnc1swXTtcbiAgICAgICAgY2FsbEFyZ3Muc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lzVGVzdFRyYW5zYWN0aW9uJywgdHJ1ZSk7XG4gICAgICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpbnRlbnRUeXBlJywgJ3BheW1lbnQnKTtcbiAgICAgICAgY2FsbEFyZ3Muc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGNhbGxBcmdzLnJlY2lwaWVudHMpO1xuICAgICAgICBjYWxsQXJncy5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIGlzVGVzdFRyYW5zYWN0aW9uOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBlbmFibGUgdG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3Rjb2luOnRva2VuTmFtZSc7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBlbmFibGUgdG9rZW4gdHJhbnNhY3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtdO1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAndGNvaW46dG9rZW5OYW1lJztcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgdHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGN1c3RvbSBpbnN0cnVjdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBjb21tZW50ID0gJ1Rlc3QgY29tbWVudCc7XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlSWQgPSAnMTIzJztcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb21tZW50LFxuICAgICAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24gd2l0aCBtdWx0aXBsZSBpbnN0cnVjdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJ0NvbXB1dGVCdWRnZXQxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnLFxuICAgICAgICAgICAga2V5czogW10sXG4gICAgICAgICAgICBkYXRhOiAnQXdBQTZBTUFBQUFBJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24gd2l0aCBwZW5kaW5nIGFwcHJvdmFsIGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBzb2xJbnN0cnVjdGlvbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvZ3JhbUlkOiAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTInLFxuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHVia2V5OiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgICAgIGlzU2lnbmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzV3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0YTogJ1NHVnNiRzhnVjI5eWJHUT0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3QsIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJywgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGN1c3RvbSBpbnN0cnVjdGlvbiB0cmFuc2FjdGlvbiBmb3IgY29sZCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW107XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICB0eFJlcXVlc3Qud2FsbGV0VHlwZSA9ICdjb2xkJztcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCBmb3Igbm9uLXRyYW5zZmVyIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHlwZTogJ3N0YWtlJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0cmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQ6IHN0YWtlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBmdWxsIGFwaSB2ZXJzaW9uIGNvbXBhdGliaWxpdHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZvciBub24gc2VsZi1jdXN0b2RpYWwgKGhvdCkgdHNzIHdhbGxldHMsIHBhcmFtZXRlciBgYXBpVmVyc2lvbmAgbXVzdCBiZSBgZnVsbGAuJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpbmdsZSByZWNpcGllbnQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZm9yIGZ1bGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnZnVsbCdcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggdHJhbnNmZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgncGF5bWVudCcpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgZmVlVG9rZW4gcGFyYW1ldGVyIHRvIHByZWJ1aWxkVHhXaXRoSW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVUb2tlbiA9ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDInO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGZlZVRva2VuLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVUb2tlbiEuc2hvdWxkLmVxdWFsKGZlZVRva2VuKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggdHJhbnNmZXJ0b2tlbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4QUIxMDA5MTJlMTMzQUEwNmNFQjkyMTQ1OWFhRGRCZDYyMzgxRjVBMycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2d0ZXJjMThkcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVydG9rZW4nLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwocmVjaXBpZW50cyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmlzVHNzIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd0cmFuc2ZlclRva2VuJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIGFjY2VsZXJhdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4QUIxMDA5MTJlMTMzQUEwNmNFQjkyMTQ1OWFhRGRCZDYyMzgxRjVBMycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2d0ZXJjMThkcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmxvd0ZlZVR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIGV0aCBhY2NlbGVyYXRpb25zIGZvciByZWNlaXZlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4QUIxMDA5MTJlMTMzQUEwNmNFQjkyMTQ1OWFhRGRCZDYyMzgxRjVBMycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2d0ZXJjMThkcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmxvd0ZlZVR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgYXJnc1swXSEucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbXMgZm9yIHNlaWV2bSBhY2NlbGVyYXRpb24gKHVzZXIgc3R1Y2sgdHgpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweGRlNTBkOWJiZGNkNDc3Yzk2MmJmMWNlYmVjZWY1MGU0NTI1NjVjNTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDRkNmRlYWIxMzZkYTFmMzg3MGRlNGViNmY4Y2Y0NmVjMWUwOGI5YmY5MThiNzY0NTc4YjdiMWM3YWIwOGQ2YjgnO1xuICAgICAgICBjb25zdCByZWNlaXZlQWRkcmVzcyA9ICcweDliYmI5YTAyZTY2ZTE3NjM2ZmQwNjM3YTBlZWUxZTM4ZjQ2MGI2YmEnO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICAvLyBDcmVhdGUgc2VpZXZtIHdhbGxldCBmb3IgdGVzdGluZ1xuICAgICAgICBjb25zdCBzZWlldm1XYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCdzZWlldm0nKSwgd2FsbGV0RGF0YSk7XG5cbiAgICAgICAgYXdhaXQgc2VpZXZtV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIHJlY2VpdmVBZGRyZXNzLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWZXJpZnkgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3QgcGFyYW1ldGVyc1xuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICAvLyBWYWxpZGF0ZSBhY2NlbGVyYXRpb24gaW50ZW50IHBhcmFtZXRlcnNcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmxvd0ZlZVR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgYXJnc1swXSEucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggZmlsbE5vbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgY29uc3Qgbm9uY2UgPSAnMSc7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSAnZmlsbE5vbmNlIGNvbW1lbnQnO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ZpbGxOb25jZScpO1xuICAgICAgICBhcmdzWzBdIS5jb21tZW50IS5zaG91bGQuZXF1YWwoY29tbWVudCk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3Igd3JhcEFwcHJvdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB3cmFwUGFyYW1zID0geyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzEwMDAwMDAnIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICAgIHdyYXBQYXJhbXMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd3cmFwQXBwcm92ZScpO1xuICAgICAgICBhcmdzWzBdIS53cmFwUGFyYW1zIS5zaG91bGQuZGVlcEVxdWFsKHdyYXBQYXJhbXMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIHdyYXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICd3cmFwJyxcbiAgICAgICAgICB3cmFwUGFyYW1zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3dyYXAnKTtcbiAgICAgICAgYXJnc1swXSEud3JhcFBhcmFtcyEuc2hvdWxkLmRlZXBFcXVhbCh3cmFwUGFyYW1zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciB1bndyYXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVud3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ3Vud3JhcCcsXG4gICAgICAgICAgdW53cmFwUGFyYW1zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3Vud3JhcCcpO1xuICAgICAgICBhcmdzWzBdIS51bndyYXBQYXJhbXMhLnNob3VsZC5kZWVwRXF1YWwodW53cmFwUGFyYW1zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggZmlsbE5vbmNlIGZvciByZWNlaXZlIGFkZHJlc3Mgbm9uY2UgZmlsbGluZyB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGNvbnN0IG5vbmNlID0gJzEnO1xuICAgICAgICBjb25zdCBjb21tZW50ID0gJ2ZpbGxOb25jZSBjb21tZW50JztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHgwNjIxNzZiYzkzNDVkYTNlOGVlOTAzNjFiMGNmNmZmODgzYmE3MjA2JztcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICBjb21tZW50LFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1swXSEubm9uY2UhLnNob3VsZC5lcXVhbChub25jZSk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuY29tbWVudCEuc2hvdWxkLmVxdWFsKGNvbW1lbnQpO1xuICAgICAgICBhcmdzWzBdIS5yZWNlaXZlQWRkcmVzcyEuc2hvdWxkLmVxdWFsKHJlY2VpdmVBZGRyZXNzKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBicmlkZ2VGdW5kcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW50ZW50QW1vdW50ID0geyB2YWx1ZTogJzEwMDAwMDAnLCBzeW1ib2w6ICd0aHlwZWV2bScgfTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnYnJpZGdlRnVuZHMnLFxuICAgICAgICAgIGludGVudEFtb3VudCxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYnJpZGdlRnVuZHMnKTtcbiAgICAgICAgYXJnc1swXSEuYW1vdW50IS5zaG91bGQuZGVlcEVxdWFsKGludGVudEFtb3VudCk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIEV4cG9ydCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnUC1jb3N0d28xeHh0MjdyZ25yanlhdzJ3bXVzd3h1bWxtbWUydGFwajYyczd1eTAnLFxuICAgICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBub25jZTogJzUnLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdleHBvcnQnKTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcbiAgICAgICAgYXJnc1swXSEubm9uY2UhLnNob3VsZC5lcXVhbCgnNScpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIEltcG9ydCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnSW1wb3J0JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ltcG9ydCcpO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKFtdKTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdub25jZScpO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2ZlZU9wdGlvbnMnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBJbXBvcnRUb0MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydFRvQycsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdpbXBvcnR0b2MnKTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnbm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IGZlZU9wdGlvbnMgd2hlbiBwYXNzaW5nIHVzaW5nIHRoZSBsZWdhY3kgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZEZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICAgIGdhc0xpbWl0OiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiBleHBlY3RlZEZlZU9wdGlvbnMubWF4RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogZXhwZWN0ZWRGZWVPcHRpb25zLm1heFByaW9yaXR5RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZEZlZU9wdGlvbnMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggYWNjZWxlcmF0aW9uIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDZlYTA3Zjk0MjBmNDY3NmJlNjQ3OGFiMTY2MGViOTI0NDRhN2M2NjNlMGUyNGJlY2U5MjlmNzE1ZTg4MmUwY2YnO1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudHhpZCEuc2hvdWxkLmVxdWFsKGxvd0ZlZVR4aWQpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHBsYWNlIGZlZVRva2VuIGF0IGludGVudCBsZXZlbCwgbm90IGluIGZlZU9wdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG5cbiAgICAgICAgY29uc3QgZmVlVG9rZW4gPSAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJztcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGZlZVRva2VuLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5mZWVUb2tlbiEuc2hvdWxkLmVxdWFsKGZlZVRva2VuKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZmVlVG9rZW4nKTtcbiAgICAgIH0pO1xuXG4gICAgICBbJ3dyYXAtbmF0aXZlJywgJ3Vud3JhcC1uYXRpdmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlbnRUeXBlKSB7XG4gICAgICAgIGl0KGBwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiBhIHZhbGlkICR7aW50ZW50VHlwZX0gaW50ZW50IHdpdGhvdXQgcmVjaXBpZW50c2AsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuXG4gICAgICAgICAgLy8gVHdvIGluZGVwZW5kZW50IHNpdGVzIGluIHBvcHVsYXRlSW50ZW50IG11c3Qga25vdyBhYm91dCB0aGlzIGludGVudFR5cGU6XG4gICAgICAgICAgLy8gdGhlIHJlY2lwaWVudHMtcmVxdWlyZWQgZXhlbXB0aW9uIGxpc3QsIGFuZCB0aGUgRVZNIGludGVudC1zaGFwZSBzd2l0Y2guXG4gICAgICAgICAgLy8gTWlzc2luZyB0aGUgZmlyc3QgbWFrZXMgdGhpcyBjYWxsIHRocm93IG9uIHRoZSByZWNpcGllbnRzIGFzc2VydGlvblxuICAgICAgICAgIC8vIGJlZm9yZSB0aGUgc3dpdGNoIGlzIGV2ZXIgcmVhY2hlZC5cbiAgICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIGludGVudFR5cGUsXG4gICAgICAgICAgICBkZWZpUGFyYW1zOiB7IHZhdWx0SWQ6ICdodGV0aC13ZXRoLXRlc3QnLCBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKGludGVudFR5cGUpO1xuICAgICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgaW50ZW50LnZhdWx0SWQhLnNob3VsZC5lcXVhbCgnaHRldGgtd2V0aC10ZXN0Jyk7XG4gICAgICAgICAgLy8gQSBwbGFpbiBgYW1vdW50YCwgbm90IHRoZSBgc2hhcmVUb2tlbkFtb3VudGAgZGVmaS13aXRoZHJhdyB1c2VzIGZvciBzaGFyZXMuXG4gICAgICAgICAgaW50ZW50LmFtb3VudCEuc2hvdWxkLmVxdWFsKCcxMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgICAgICAgaW50ZW50LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnc2hhcmVUb2tlbkFtb3VudCcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgY29yZWRhbyBhY2NlbGVyYXRpb24gaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2NvcmVkYW8nKSk7XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg2ZWEwN2Y5NDIwZjQ2NzZiZTY0NzhhYjE2NjBlYjkyNDQ0YTdjNjYzZTBlMjRiZWNlOTI5ZjcxNWU4ODJlMGNmJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdjb3JlZGFvJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudHhpZCEuc2hvdWxkLmVxdWFsKGxvd0ZlZVR4aWQpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBzZWlldm0gYWNjZWxlcmF0aW9uIGludGVudCBmb3Igc3R1Y2sgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignc2VpZXZtJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg0ZDZkZWFiMTM2ZGExZjM4NzBkZTRlYjZmOGNmNDZlYzFlMDhiOWJmOTE4Yjc2NDU3OGI3YjFjN2FiMDhkNmI4JztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHg5YmJiOWEwMmU2NmUxNzYzNmZkMDYzN2EwZWVlMWUzOGY0NjBiNmJhJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdzZWlldm0nKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGFjY2VsZXJhdGlvbiBpbnRlbnQgc3RydWN0dXJlXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudHhpZCEuc2hvdWxkLmVxdWFsKGxvd0ZlZVR4aWQpO1xuICAgICAgICBpbnRlbnQucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYWNjZWxlcmF0aW9uJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGV0aCBhY2NlbGVyYXRpb24gaW50ZW50IGZvciByZWNlaXZlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg2ZWEwN2Y5NDIwZjQ2NzZiZTY0NzhhYjE2NjBlYjkyNDQ0YTdjNjYzZTBlMjRiZWNlOTI5ZjcxNWU4ODJlMGNmJztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHgwNjIxNzZiYzkzNDVkYTNlOGVlOTAzNjFiMGNmNmZmODgzYmE3MjA2JztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggZmlsbE5vbmNlIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5vbmNlID0gJzEnO1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50Lm5vbmNlIS5zaG91bGQuZXF1YWwobm9uY2UpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ZpbGxOb25jZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggZmlsbE5vbmNlIGludGVudCBmb3IgcmVjZWl2ZSBhZGRyZXNzIG5vbmNlIGZpbGxpbmcgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHgwNjIxNzZiYzkzNDVkYTNlOGVlOTAzNjFiMGNmNmZmODgzYmE3MjA2JztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgaW50ZW50LnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ZpbGxOb25jZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggdG9rZW5BcHByb3ZhbCBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAndXNkYyc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICd0b2tlbkFwcHJvdmFsJyxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3Rva2VuQXBwcm92YWwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgcG9seWdvbiB0b2tlbkFwcHJvdmFsIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9ICd1c2R0JztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0cG9seWdvbicpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnRva2VuTmFtZSEuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgndG9rZW5BcHByb3ZhbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBic2MgdG9rZW5BcHByb3ZhbCBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndGJzYycpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9ICdidXNkJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0YnNjJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudG9rZW5OYW1lIS5zaG91bGQuZXF1YWwodG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd0b2tlbkFwcHJvdmFsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGV0aCB3cmFwQXBwcm92ZSBpbnRlbnQgZnJvbSB3cmFwUGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICAgIHdyYXBQYXJhbXMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLnRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5hbW91bnQhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnd3JhcEFwcHJvdmUnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIHdyYXAgaW50ZW50IGZyb20gd3JhcFBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcCcsXG4gICAgICAgICAgd3JhcFBhcmFtcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LnRva2VuTmFtZSEuc2hvdWxkLmVxdWFsKHdyYXBQYXJhbXMudG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LmFtb3VudCEuc2hvdWxkLmVxdWFsKHdyYXBQYXJhbXMuYW1vdW50KTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd3cmFwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmVxdWlyZSB3cmFwUGFyYW1zIGZvciB3cmFwQXBwcm92ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgKCgpID0+XG4gICAgICAgICAgbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICAgIH0pKS5zaG91bGQudGhyb3coL3dyYXBQYXJhbXMvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgY3VzdG9kaWFuVHJhbnNhY3Rpb25JZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuY3VzdG9kaWFuVHJhbnNhY3Rpb25JZCEuc2hvdWxkLmVxdWFsKCd1bml0dGVzdCcpO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50Lm5vbmNlIS5zaG91bGQuZXF1YWwobm9uY2UpO1xuICAgICAgICBpbnRlbnQuaXNUc3MhLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgYnJpZGdlRnVuZHMgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBhbW91bnQgPSB7IHZhbHVlOiAnMTAwMDAwMCcsIHN5bWJvbDogJ3RoeXBlZXZtJyB9O1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2JyaWRnZUZ1bmRzJyxcbiAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdicmlkZ2VGdW5kcycpO1xuICAgICAgICBpbnRlbnQuYW1vdW50IS5zaG91bGQuZGVlcEVxdWFsKGFtb3VudCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBleHBvcnQgaW50ZW50IGZvciBFVk0gY3Jvc3MtY2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdQLWNvc3R3bzF4eHQyN3JnbnJqeWF3MndtdXN3eHVtbG1tZTJ0YXBqNjJzN3V5MCcsXG4gICAgICAgICAgICBhbW91bnQ6ICc1MDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2V4cG9ydCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIG5vbmNlOiAnNScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZXhwb3J0Jyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQubm9uY2UhLnNob3VsZC5lcXVhbCgnNScpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyEuc2hvdWxkLmJlLmFuLkFycmF5KCkud2l0aC5sZW5ndGhPZigxKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLmFkZHJlc3MuYWRkcmVzcy5zaG91bGQuZXF1YWwocmVjaXBpZW50c1swXS5hZGRyZXNzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2luZ2xlIHJlY2lwaWVudCB0cmFuc2ZlciB0cmFuc2FjdGlvbiBwcm92aWRpbmcgYXBpVmVyc2lvbiBwYXJhbWV0ZXIgYXMgXCJmdWxsXCIgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2Z1bGwnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgdW5zcGVudHMgYW5kIHNlcXVlbmNlIGlkIGluIHRyYW5zZmVyVG9rZW4gYnVpbGQgcGF5bG9hZCBmb3IgYWRhIHRva2VuIHdpdGhkcmF3YWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgIGlkZlNpZ25lZFRpbWVzdGFtcDogJzIwMjUtMTEtMTBUMDg6MTQ6MTkuMDEwWicsXG4gICAgICAgICAgaWRmVXNlcklkOiAnNWNhZTMxMzBmOGY0NTYxZDUxZGZjYmZkYWFmYmE5YjknLFxuICAgICAgICAgIGlkZlZlcnNpb246IDEsXG4gICAgICAgICAgaW5zdGFudDogZmFsc2UsXG4gICAgICAgICAgY29tbWVudDogJycsXG4gICAgICAgICAgdW5zcGVudHM6IFsnNzliYWMyYjNjNDNkZTE3NjdmMDczMWNhZjkyZDVjZDdlZGZlNWRhNDMzYjA1NjAwMmRmNDJmMGMwNTVhMzAyMzoxJ10sXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhbW91bnQ6ICcyJyxcbiAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAnYWRkcl90ZXN0MXF6NG0zbXM5bnhyYTM2dDZydHo0bHpjOXprazNkNHF3Y3BjcjN5eHdoeGxzbHBhdGhyaHF0eHY4bXI1aDV4azl0NzlzMjlkZHptMnFhc3JzOHpndmF3ZGxwN3JzNDRnNWhjJyxcbiAgICAgICAgICAgICAgdG9rZW5OYW1lOiAndGFkYTp3YXRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VJZDogJzRRTHRYa0JyWmhjNkF0ZWNGWlZuSENZSDFVQWsnLFxuICAgICAgICAgIG51bUJsb2NrczogMixcbiAgICAgICAgICB0eEZvcm1hdDogJ3BzYnQnIGFzIGNvbnN0LFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBjYXB0dXJlZFJlcXVlc3RCb2R5OiBhbnk7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzQWRhV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSA9IGJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdW5zaWduZWRUeHM6IFsndHgnXSB9KTtcblxuICAgICAgICBhd2FpdCB0c3NBZGFXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYXB0dXJlZFJlcXVlc3RCb2R5JywgY2FwdHVyZWRSZXF1ZXN0Qm9keSk7XG4gICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCd1bnNwZW50cycpO1xuICAgICAgICBjYXB0dXJlZFJlcXVlc3RCb2R5IS5pbnRlbnQudW5zcGVudHMuc2hvdWxkLmRlZXBFcXVhbChwYXJhbXMudW5zcGVudHMpO1xuICAgICAgICBjYXB0dXJlZFJlcXVlc3RCb2R5IS5pbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NlcXVlbmNlSWQnKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnNlcXVlbmNlSWQuc2hvdWxkLmVxdWFsKHBhcmFtcy5zZXF1ZW5jZUlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgndmlkZW9BcHByb3ZlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZpZGVvQXBwcm92ZXJzID0gWyc1Y2FlMzEzMGY4ZjQ1NjFkNTFkZmNiZmRhYWZiYTliOScsICc1Y2FlMzEzMGY4ZjQ1NjFkNTFkZmNiZmRhYWZiYTliYSddO1xuICAgICAgICBjb25zdCBhZGFBZGRyZXNzID1cbiAgICAgICAgICAnYWRkcl90ZXN0MXF6NG0zbXM5bnhyYTM2dDZydHo0bHpjOXprazNkNHF3Y3BjcjN5eHdoeGxzbHBhdGhyaHF0eHY4bXI1aDV4azl0NzlzMjlkZHptMnFhc3JzOHpndmF3ZGxwN3JzNDRnNWhjJztcblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjYXB0dXJlVHhSZXF1ZXN0Qm9keShwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgICBsZXQgY2FwdHVyZWRSZXF1ZXN0Qm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NBZGFXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2AsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVuc2lnbmVkVHhzOiBbJ3R4J10gfSk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NBZGFXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IC4uLnBhcmFtcywgcHJldmlldzogdHJ1ZSB9KTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QoY2FwdHVyZWRSZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgcmV0dXJuIGNhcHR1cmVkUmVxdWVzdEJvZHk7XG4gICAgICAgIH1cblxuICAgICAgICBpdCgnc2hvdWxkIHNlbmQgdmlkZW9BcHByb3ZlcnMgYXMgYSB0b3AtbGV2ZWwgZmllbGQgZm9yIHRyYW5zZmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY2FwdHVyZVR4UmVxdWVzdEJvZHkoe1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzInLCBhZGRyZXNzOiBhZGFBZGRyZXNzIH1dLFxuICAgICAgICAgICAgdmlkZW9BcHByb3ZlcnMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBib2R5LnZpZGVvQXBwcm92ZXJzLnNob3VsZC5kZWVwRXF1YWwodmlkZW9BcHByb3ZlcnMpO1xuICAgICAgICAgIGJvZHkuaW50ZW50LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgndmlkZW9BcHByb3ZlcnMnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBzZW5kIHZpZGVvQXBwcm92ZXJzIGFzIGEgdG9wLWxldmVsIGZpZWxkIGZvciB0b2tlbiB0cmFuc2ZlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGNhcHR1cmVUeFJlcXVlc3RCb2R5KHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzInLCBhZGRyZXNzOiBhZGFBZGRyZXNzLCB0b2tlbk5hbWU6ICd0YWRhOndhdGVyJyB9XSxcbiAgICAgICAgICAgIHZpZGVvQXBwcm92ZXJzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYm9keS52aWRlb0FwcHJvdmVycy5zaG91bGQuZGVlcEVxdWFsKHZpZGVvQXBwcm92ZXJzKTtcbiAgICAgICAgICBib2R5LmludGVudC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3ZpZGVvQXBwcm92ZXJzJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IHNlbmQgdmlkZW9BcHByb3ZlcnMgd2hlbiBub25lIGFyZSBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY2FwdHVyZVR4UmVxdWVzdEJvZHkoe1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzInLCBhZGRyZXNzOiBhZGFBZGRyZXNzIH1dLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYm9keS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3ZpZGVvQXBwcm92ZXJzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gc2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2lnbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzaWduVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNpZ25UcmFuc2FjdGlvblxuICAgICAgICBzaWduVHhSZXF1ZXN0LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHR4UmVxdWVzdCwgcHJ2OiAnc2VjcmV0S2V5JywgcmVxSWQgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICBwcnY6ICdzZXJjcmV0S2V5JyxcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gc2lnbiB0cmFuc2FjdGlvbiB3aXRob3V0IHR4UmVxdWVzdElkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICBwcnY6ICdzZXJjcmV0S2V5JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eFJlcXVlc3RJZCByZXF1aXJlZCB0byBzaWduIHRyYW5zYWN0aW9ucyB3aXRoIFRTUycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFsnZWRkc2EnLCAnZWNkc2EnXS5mb3JFYWNoKChrZXlDdXJ2ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGRlc2NyaWJlKGtleUN1cnZlLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2FsbGV0ID0ga2V5Q3VydmUgPT09ICdlZGRzYScgPyB0c3NTb2xXYWxsZXQgOiB0c3NFdGhXYWxsZXQ7XG4gICAgICAgICAgbGV0IGdldEtleXNTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICAgICAgbGV0IHNpZ25UcmFuc2FjdGlvblN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViID0gc2FuZGJveC5zdHViKEtleWNoYWlucy5wcm90b3R5cGUsICdnZXRLZXlzRm9yU2lnbmluZycpO1xuXG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViID0gc2FuZGJveFxuICAgICAgICAgICAgICAuc3R1YihXYWxsZXQucHJvdG90eXBlLCAnc2lnblRyYW5zYWN0aW9uJylcbiAgICAgICAgICAgICAgLnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0RnVsbCwgc3RhdGU6ICdzaWduZWQnIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViLnJlc29sdmVzKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1vbktleWNoYWluOiAndGVzdCcsXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICAgIHB1YjogJycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9QQVNTUEhSQVNFIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdhbGxldC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICAgICAgICByZXNwb25zZS5zaG91bGQuZGVlcEVxdWFsKHsgLi4udHhSZXF1ZXN0RnVsbCwgc3RhdGU6ICdzaWduZWQnIH0pO1xuXG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdGhlIGtleWNoYWluIGRvZXNudCBoYXZlIHRoZSBlbmNyeXB0ZWRLZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5yZXNvbHZlcyhbeyBjb21tb25LZXljaGFpbjogJ3Rlc3QnLCBpZDogJycsIHB1YjogJycsIHR5cGU6ICd0c3MnIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9QQVNTUEhSQVNFIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgICAgICAgLmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24ocGFyYW1zKVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndGhlIHVzZXIga2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcblxuICAgICAgICAgICAgZ2V0S2V5c1N0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgICAgc2lnblRyYW5zYWN0aW9uU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgcGFzc3dvcmQgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViLnJlc29sdmVzKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1vbktleWNoYWluOiAndGVzdCcsXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICAgIHB1YjogJycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3JhbmRvbXBhc3MnLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAgICAgICAuZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbihwYXJhbXMpXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGB1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZWApO1xuXG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NpZ25BbmRTZW5kVHhSZXF1ZXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhhbXBsZVNpZ25lZFR4ID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzJyxcbiAgICAgICAgdHhpZDogJzB4NDU2JyxcbiAgICAgICAgc3RhdHVzOiAnc2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2lnbiBsaXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkZWxldGVTaWduYXR1cmVTaGFyZXNTcHkgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnZGVsZXRlU2lnbmF0dXJlU2hhcmVzJyk7XG4gICAgICAgIGNvbnN0IGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkgPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbicpO1xuICAgICAgICBnZXRVc2VyS2V5QW5kU2lnblRzc1R4U3B5LnJlc29sdmVzKGV4YW1wbGVTaWduZWRUeCk7XG4gICAgICAgIGNvbnN0IHN1Ym1pdFR4U3B5ID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3N1Ym1pdFRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN1Ym1pdFR4U3B5LnJlc29sdmVzKGV4YW1wbGVTaWduZWRUeCk7XG5cbiAgICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnbkFuZFNlbmRUeFJlcXVlc3Qoe1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICBpc1R4UmVxdWVzdEZ1bGw6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2Uoc3VibWl0VHhTcHkpO1xuICAgICAgICBzaWduZWRUeC5zaG91bGQuZGVlcEVxdWFsKGV4YW1wbGVTaWduZWRUeCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzaWduIGZ1bGwgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKTtcbiAgICAgICAgY29uc3QgZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uJyk7XG4gICAgICAgIGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkucmVzb2x2ZXMoZXhhbXBsZVNpZ25lZFR4KTtcblxuICAgICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduQW5kU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIGlzVHhSZXF1ZXN0RnVsbDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShkZWxldGVTaWduYXR1cmVTaGFyZXNTcHkpO1xuICAgICAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkpO1xuICAgICAgICBzaWduZWRUeC5zaG91bGQuZGVlcEVxdWFsKGV4YW1wbGVTaWduZWRUeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNZXNzYWdlIFNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhhc2ggPSAnMHhycnJzc3MxYic7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ2hlbGxvIHdvcmxkJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZzogVHhSZXF1ZXN0ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3NpZ25NZXNzYWdlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgIHVuc2lnbmVkTWVzc2FnZXM6IFtdLFxuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2VSYXc6ICdoZWxsbyB3b3JsZCcsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICAgIGNvbWJpbmVTaWdTaGFyZTogJzA6cnJyOnNzczozJyxcbiAgICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgbGV0IHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlO1xuICAgICAgY29uc3QgbWVzc2FnZVNpZ25pbmdDb2lucyA9IFsndGV0aCcsICd0cG9seWdvbiddO1xuICAgICAgY29uc3QgZXhwZWN0ZWQ6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHJlcUlkLnRvU3RyaW5nKCksXG4gICAgICAgIHR4SGFzaCxcbiAgICAgICAgc2lnbmF0dXJlOiB0eEhhc2gsXG4gICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgbWVzc2FnZUVuY29kZWQsXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlLnJlc29sdmVzKHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcbiAgICAgICAgc2FuZGJveFxuICAgICAgICAgIC5zdHViKEtleWNoYWlucy5wcm90b3R5cGUsICdnZXRLZXlzRm9yU2lnbmluZycpXG4gICAgICAgICAgLnJlc29sdmVzKFt7IGNvbW1vbktleWNoYWluOiAndGVzdCcsIGlkOiAnJywgcHViOiAnJywgdHlwZTogJ2luZGVwZW5kZW50JyB9XSk7XG4gICAgICAgIHNpbm9uLnN0dWIoRWNkc2EucHJvdG90eXBlLCAndmVyaWZ5JykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICB9KTtcblxuICAgICAgbWVzc2FnZVNpZ25pbmdDb2lucy5tYXAoKGNvaW5OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkV2l0aENvaW5GaWVsZCA9IHsgLi4uZXhwZWN0ZWQsIGNvaW46ICd0ZXRoJyB9O1xuXG4gICAgICAgIHRzc0V0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oY29pbk5hbWUpLCBldGhXYWxsZXREYXRhKTtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZy50eFJlcXVlc3RJZDtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSB0eCBSZXF1ZXN0IHdpdGggc2lnbk1lc3NhZ2UgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCB0c3NFdGhXYWxsZXQuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICAgICAgICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHhSZXF1ZXN0LnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUgcHJlcGFyZWRUcmFuc2FjdGlvbiBpbiB0aGUgbXNncmVxdWVzdHMgYm9keSB3aGVuIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHByZXBhcmVkVHJhbnNhY3Rpb24gPSAnYmFzZTY0LXByZXBhcmVkLXRyYW5zYWN0aW9uLWJ5dGVzJztcbiAgICAgICAgICBsZXQgY2FwdHVyZWRCb2R5OiBhbnk7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2AsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLFxuICAgICAgICAgICAgICBwcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQucHJlcGFyZWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwocHJlcGFyZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBbJHtjb2luTmFtZX1dIHNob3VsZCBzaWduIG1lc3NhZ2VgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnbk1lc3NhZ2VUc3MnIGFzIGFueSk7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgbWVzc2FnZVJhdywgdHhSZXF1ZXN0SWQsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25NZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRXaXRoQ29pbkZpZWxkKTtcbiAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduTWVzc2FnZVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnbk1lc3NhZ2VPcHRpb25zO1xuICAgICAgICAgIGFjdHVhbEFyZy5tZXNzYWdlPy5tZXNzYWdlRW5jb2RlZD8uc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgWyR7Y29pbk5hbWV9XSBzaG91bGQgc2lnbiBtZXNzYWdlIHdoZW4gY3VzdG9kaWFuTWVzc2FnZUlkIGlzIHByb3ZpZGVkYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25NZXNzYWdlVHNzJyBhcyBhbnkpO1xuICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6ICd1bml0dGVzdCcsXG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgbWVzc2FnZVJhdywgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEgfSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lnbk1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFdpdGhDb2luRmllbGQpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25NZXNzYWdlVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnM7XG4gICAgICAgICAgYWN0dWFsQXJnLm1lc3NhZ2U/Lm1lc3NhZ2VFbmNvZGVkPy5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShgXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcbiR7bWVzc2FnZVJhdy5sZW5ndGh9JHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBbJHtjb2luTmFtZX1dIHNob3VsZCBzaWduIG1lc3NhZ2Ugd2hlbiB0eFJlcXVlc3RJZCBub3QgcHJvdmlkZWRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnbk1lc3NhZ2VUc3MnIGFzIGFueSk7XG4gICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduTWVzc2FnZS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkV2l0aENvaW5GaWVsZCk7XG4gICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbk1lc3NhZ2VUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25NZXNzYWdlT3B0aW9ucztcbiAgICAgICAgICBhY3R1YWxBcmcubWVzc2FnZT8ubWVzc2FnZUVuY29kZWQ/LnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGBcXHUwMDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XFxuJHttZXNzYWdlUmF3Lmxlbmd0aH0ke21lc3NhZ2VSYXd9YCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYFske2NvaW5OYW1lfV0gc2hvdWxkIGluY2x1ZGUgcHJlcGFyZWRUcmFuc2FjdGlvbiB3aGVuIHNpZ25pbmcgYSBmcmVzaCBtZXNzYWdlIHJlcXVlc3RgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHJlcGFyZWRUcmFuc2FjdGlvbiA9ICdiYXNlNjQtcHJlcGFyZWQtdHJhbnNhY3Rpb24tYnl0ZXMnO1xuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSwgcHJlcGFyZWRUcmFuc2FjdGlvbiB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQucHJlcGFyZWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwocHJlcGFyZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIG1lc3NhZ2Ugd2l0aCBlbXB0eSBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0XG4gICAgICAgICAgICAuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCB0eFJlcXVlc3RJZCwgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEgfSxcbiAgICAgICAgICAgICAgcHJ2OiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ1NPTCBtZXNzYWdlIHNpZ25pbmcgKFVURi04IHN0cmluZyBwYXRoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc29sU2lnbmVyQWRkcmVzcyA9ICdKOFRFUEZxTkpqRlRwMk5HSHVXZ2lqeXVGNDVMcnpvMmZlWjYxa1M3eVkycSc7XG4gICAgICAgIC8vIHRoZSBtZXNzYWdlIGNsYXNzIHRoZSBzaWduaW5nIHN0YWNrIChCR01fU09MX01FU1NBR0UpIGFjY2VwdHM6IHdlbGwtZm9ybWVkIFNJV1NcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZVJhdyA9IFtcbiAgICAgICAgICAnaGFzdHJhLmlvIHdhbnRzIHlvdSB0byBzaWduIGluIHdpdGggeW91ciBTb2xhbmEgYWNjb3VudDonLFxuICAgICAgICAgIHNvbFNpZ25lckFkZHJlc3MsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFlvdSBhcmUgcHJvdmluZyB5b3Ugb3duICR7c29sU2lnbmVyQWRkcmVzc30uYCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVVJJOiBodHRwczovL2hhc3RyYS5pbycsXG4gICAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICAgJ05vbmNlOiAzMWE2YmFiNScsXG4gICAgICAgICAgJ0lzc3VlZCBBdDogMjAyNi0wOS0yMVQxMDowMDowMFonLFxuICAgICAgICAgICdSZXNvdXJjZXM6JyxcbiAgICAgICAgICAnLSBodHRwczovL3ByaXZ5LmlvJyxcbiAgICAgICAgXS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZUVuY29kZWQgPSBCdWZmZXIuZnJvbShzb2xNZXNzYWdlUmF3LCAndXRmOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgY29uc3Qgc2l3c0Jhc2VMaW5lcyA9IFtcbiAgICAgICAgICAnaGFzdHJhLmlvIHdhbnRzIHlvdSB0byBzaWduIGluIHdpdGggeW91ciBTb2xhbmEgYWNjb3VudDonLFxuICAgICAgICAgIHNvbFNpZ25lckFkZHJlc3MsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICAgJ05vbmNlOiAzMWE2YmFiNScsXG4gICAgICAgICAgJ0lzc3VlZCBBdDogMjAyNi0wOS0yMVQxMDowMDowMFonLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBidWlsZFNpd3MgPSAoc3RhdGVtZW50Pzogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgICAgWy4uLnNpd3NCYXNlTGluZXMuc2xpY2UoMCwgMyksIC4uLihzdGF0ZW1lbnQgPyBbc3RhdGVtZW50LCAnJ10gOiBbXSksIC4uLnNpd3NCYXNlTGluZXMuc2xpY2UoMyldLmpvaW4oJ1xcbicpO1xuICAgICAgICAvLyBhZGRpbmcgYSBzdGF0ZW1lbnQgbGluZSB0byB0aGUgbm8tc3RhdGVtZW50IHRlbXBsYXRlIGFkZHMgaXRzIGJ5dGVzICsgMiBuZXdsaW5lc1xuICAgICAgICBjb25zdCBzaXdzT2ZTaXplID0gKGJ5dGVMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PlxuICAgICAgICAgIGJ1aWxkU2l3cygneCcucmVwZWF0KGJ5dGVMZW5ndGggLSBCdWZmZXIuYnl0ZUxlbmd0aChidWlsZFNpd3MoKSkgLSAyKSk7XG4gICAgICAgIGNvbnN0IHNvbFR4SGFzaCA9ICdycnJzc3MxYic7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nOiBUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHJlcUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdzaWduTWVzc2FnZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgICAgdW5zaWduZWRNZXNzYWdlczogW10sXG4gICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgICAgICBtZXNzYWdlUmF3OiBzb2xNZXNzYWdlUmF3LFxuICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW3sgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgc2hhcmU6ICcnIH1dLFxuICAgICAgICAgICAgICB0eEhhc2g6IHNvbFR4SGFzaCxcbiAgICAgICAgICAgICAgbWVzc2FnZUVuY29kZWQ6IHNvbE1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzb2xFeHBlY3RlZFNpZ25lZE1lc3NhZ2U6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgc3RhdGU6ICdkZWxpdmVyZWQnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiByZXFJZC50b1N0cmluZygpLFxuICAgICAgICAgIHR4SGFzaDogc29sVHhIYXNoLFxuICAgICAgICAgIHNpZ25hdHVyZTogc29sVHhIYXNoLFxuICAgICAgICAgIG1lc3NhZ2VSYXc6IHNvbE1lc3NhZ2VSYXcsXG4gICAgICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkOiBzb2xNZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZSA9IHtcbiAgICAgICAgICBtZXNzYWdlUmF3OiBzb2xNZXNzYWdlUmF3LFxuICAgICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFLFxuICAgICAgICAgIHNpZ25lckFkZHJlc3M6IHNvbFNpZ25lckFkZHJlc3MsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1YiA9IHNhbmRib3hcbiAgICAgICAgICAgIC5zdHViKEVERFNBVXRpbHMuZGVmYXVsdC5wcm90b3R5cGUsICdzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZScpXG4gICAgICAgICAgICAucmVzb2x2ZXModHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBtc2cgcmVxdWVzdCBjYXJyeWluZyBtZXNzYWdlUmF3LCBTSU1QTEUgYW5kIHNpZ25lckFkZHJlc3MgdW5jaGFuZ2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzU29sV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHsgbWVzc2FnZTogc29sTWVzc2FnZSB9KTtcblxuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQubWVzc2FnZVJhdy5zaG91bGQuZXF1YWwoc29sTWVzc2FnZVJhdyk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5tZXNzYWdlU3RhbmRhcmRUeXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5zaWduZXJBZGRyZXNzLnNob3VsZC5lcXVhbChzb2xTaWduZXJBZGRyZXNzKTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VFbmNvZGVkLnNob3VsZC5lcXVhbCgnJyk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnc2lnbk1lc3NhZ2UnKTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50LmlzVHNzLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBzaWduIG1lc3NhZ2Ugd2l0aG91dCBlbmNvZGVNZXNzYWdlIHRyYW5zZm9ybWF0aW9uLCBoYW5kaW5nIEVkRFNBIHRoZSBVVEYtOCBieXRlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZVRzc1NweSA9IHNhbmRib3guc3B5KHRzc1NvbFdhbGxldCwgJ3NpZ25NZXNzYWdlVHNzJyBhcyBhbnkpO1xuICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzU29sV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25lZE1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbChzb2xFeHBlY3RlZFNpZ25lZE1lc3NhZ2UpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25NZXNzYWdlVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnM7XG4gICAgICAgICAgc2hvdWxkKGFjdHVhbEFyZy5tZXNzYWdlPy5tZXNzYWdlRW5jb2RlZCkuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViLmdldENhbGxzKCkubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdLm1lc3NhZ2VFbmNvZGVkLnNob3VsZC5lcXVhbChzb2xNZXNzYWdlRW5jb2RlZCk7XG4gICAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViXG4gICAgICAgICAgICAuZ2V0Q2FsbHMoKVswXVxuICAgICAgICAgICAgLmFyZ3NbMF0uYnVmZmVyVG9TaWduLnNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20oc29sTWVzc2FnZVJhdywgJ3V0ZjgnKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgc2lnbiBtZXNzYWdlIHdoZW4gdHhSZXF1ZXN0SWQgaXMgcHJvdmlkZWQsIHJldHVybmluZyB0aGUgV1AtcGVyc2lzdGVkIG1lc3NhZ2VSYXcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAuLi5zb2xNZXNzYWdlLFxuICAgICAgICAgICAgICBtZXNzYWdlUmF3OiAnY2xpZW50LXN0YWxlLWVjaG8nLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduZWRNZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoc29sRXhwZWN0ZWRTaWduZWRNZXNzYWdlKTtcbiAgICAgICAgICBzaWduZWRNZXNzYWdlLm1lc3NhZ2VSYXcuc2hvdWxkLmVxdWFsKHNvbE1lc3NhZ2VSYXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZhbGwgYmFjayB0byB0aGUgY2FsbGVyIG1lc3NhZ2VSYXcgd2hlbiB0aGUgc2lnbmVkIHJlcXVlc3QgY2FycmllcyBub25lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGxlZ2FjeVR4UmVxdWVzdCA9IHtcbiAgICAgICAgICAgIC4uLnR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLFxuICAgICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLm1lc3NhZ2VzIVswXSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlUmF3OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFtsZWdhY3lUeFJlcXVlc3RdIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2lnbmVkTWVzc2FnZSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25lZE1lc3NhZ2UubWVzc2FnZVJhdy5zaG91bGQuZXF1YWwoc29sTWVzc2FnZVJhdyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGVtcHR5IG1lc3NhZ2VSYXcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6ICcnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21lc3NhZ2UgYW5kIHR5cGUgcmVxdWlyZWQgdG8gY3JlYXRlIG1lc3NhZ2Ugc2lnbiByZXF1ZXN0Jyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6ICcnIH0sXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21lc3NhZ2VSYXcgaXMgcmVxdWlyZWQgdG8gc2lnbiBhIFNPTCBtZXNzYWdlLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG1lc3NhZ2VSYXcgb3ZlciBNQVhfU09MX01FU1NBR0VfQllURVMgYW5kIGFjY2VwdCBleGFjdGx5IE1BWF9TT0xfTUVTU0FHRV9CWVRFUycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogc2l3c09mU2l6ZShNQVhfU09MX01FU1NBR0VfQllURVMgKyAxKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9TT0wgbWVzc2FnZSBleGNlZWRzIG1heGltdW0gc2l6ZS8pO1xuXG4gICAgICAgICAgbGV0IGNhcHR1cmVkQm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NTb2xXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICBjYXB0dXJlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlUmF3OiBzaXdzT2ZTaXplKE1BWF9TT0xfTUVTU0FHRV9CWVRFUykgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VSYXcubGVuZ3RoLnNob3VsZC5lcXVhbChNQVhfU09MX01FU1NBR0VfQllURVMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG1lYXN1cmUgbXVsdGktYnl0ZSBtZXNzYWdlUmF3IGluIFVURi04IGJ5dGVzLCBub3QgY2hhcmFjdGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBmaWxsQnl0ZXMgPSBNQVhfU09MX01FU1NBR0VfQllURVMgLSBCdWZmZXIuYnl0ZUxlbmd0aChidWlsZFNpd3MoKSkgLSAyO1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9XG4gICAgICAgICAgICAnw6knLnJlcGVhdChNYXRoLmZsb29yKGZpbGxCeXRlcyAvIDIpKSArICd4Jy5yZXBlYXQoZmlsbEJ5dGVzIC0gTWF0aC5mbG9vcihmaWxsQnl0ZXMgLyAyKSAqIDIpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VBdENhcCA9IGJ1aWxkU2l3cyhzdGF0ZW1lbnQpO1xuICAgICAgICAgIG1lc3NhZ2VBdENhcC5sZW5ndGguc2hvdWxkLmJlLmJlbG93KE1BWF9TT0xfTUVTU0FHRV9CWVRFUyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogbWVzc2FnZUF0Q2FwICsgJ8OpJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9TT0wgbWVzc2FnZSBleGNlZWRzIG1heGltdW0gc2l6ZS8pO1xuXG4gICAgICAgICAgbGV0IGNhcHR1cmVkQm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NTb2xXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICBjYXB0dXJlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlUmF3OiBtZXNzYWdlQXRDYXAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aChjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VSYXcpLnNob3VsZC5lcXVhbChNQVhfU09MX01FU1NBR0VfQllURVMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBwbGFpbiB0ZXh0IG1lc3NhZ2VSYXcgKG5vbi1TSVdTKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogJ2hlbGxvIGZyb20gc29sYW5hJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tZXNzYWdlIGlzIG5vdCBhIHZhbGlkIFNJV1MgbWVzc2FnZS8pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBKU09OIG1lc3NhZ2VSYXcgKG5vbi1TSVdTKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogJ3tcImFjdGlvblwiOlwibG9naW5cIn0nIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21lc3NhZ2UgaXMgbm90IGEgdmFsaWQgU0lXUyBtZXNzYWdlLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG1hbGZvcm1lZCBTSVdTIG1lc3NhZ2VSYXcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgbWlzc2luZ05vbmNlID0gc29sTWVzc2FnZVJhd1xuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuc3RhcnRzV2l0aCgnTm9uY2U6JykpXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6IG1pc3NpbmdOb25jZSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tZXNzYWdlIGlzIG5vdCBhIHZhbGlkIFNJV1MgbWVzc2FnZS8pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tU0lNUExFIG1lc3NhZ2Ugc3RhbmRhcmRzIGFuZCBtaXNzaW5nIHNpZ25lckFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1NPTCBtZXNzYWdlIHNpZ25pbmcgc3VwcG9ydHMgb25seSB0aGUgU0lNUExFIHN0YW5kYXJkLyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgc2lnbmVyQWRkcmVzczogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NpZ25lckFkZHJlc3MgaXMgcmVxdWlyZWQgdG8gc2lnbiBhIFNPTCBtZXNzYWdlLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGltcGxlbWVudCBlbmNvZGVNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZCgodHNvbCBhcyBhbnkpLmVuY29kZU1lc3NhZ2UpLmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1R5cGVkIERhdGEgU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGFzaCA9XG4gICAgICAgICcxOTAxNDkzZmJmMmFlMWMyN2MzY2VkMjZhODkwNzBjNmFiNWQzZmJmMzdlZDc3OGRlOTM3OGU3NzAzYjdkMWYxMTZiMzg4MzA3N2E2MTgyNjEyOWI5OGI2MjJlNTRmYzY4YzUwMDhkMWIxYzE2NTUyZTFlZGE2OTE2Zjg3MGQ3MTkyMjAnO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZzogVHhSZXF1ZXN0ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3NpZ25NZXNzYWdlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgIHVuc2lnbmVkTWVzc2FnZXM6IFtdLFxuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2VSYXc6ICdoZWxsbyB3b3JsZCcsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICAgIGNvbWJpbmVTaWdTaGFyZTogJzA6cnJyOnNzczozJyxcbiAgICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGxldCBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VTaWduaW5nQ29pbnMgPSBbJ3RldGgnLCAndHBvbHlnb24nXTtcbiAgICAgIGNvbnN0IHR5cGVzOiBNZXNzYWdlVHlwZXMgPSB7XG4gICAgICAgIEVJUDcxMkRvbWFpbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2hhaW5JZCcsXG4gICAgICAgICAgICB0eXBlOiAndWludDI1NicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndmVyaWZ5aW5nQ29udHJhY3QnLFxuICAgICAgICAgICAgdHlwZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIE1lc3NhZ2U6IFt7IG5hbWU6ICdkYXRhJywgdHlwZTogJ3N0cmluZycgfV0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZWRNZXNzYWdlOiBUeXBlZE1lc3NhZ2U8TWVzc2FnZVR5cGVzPiA9IHtcbiAgICAgICAgZG9tYWluOiB7XG4gICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICB2ZXJzaW9uOiAnMScsXG4gICAgICAgICAgY2hhaW5JZDogMSxcbiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByaW1hcnlUeXBlOiAnTWVzc2FnZScsXG4gICAgICAgIHR5cGVzLFxuICAgICAgICBtZXNzYWdlOiB7IGRhdGE6ICdiaXRnbyBzYXlzIGhlbGxvIScgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlZERhdGFCYXNlOiBUeXBlZERhdGEgPSB7XG4gICAgICAgIHR5cGVkRGF0YVJhdzogSlNPTi5zdHJpbmdpZnkodHlwZWRNZXNzYWdlKSxcbiAgICAgICAgdmVyc2lvbjogU2lnblR5cGVkRGF0YVZlcnNpb24uVjMsXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlLnJlc29sdmVzKHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcpO1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAucmVzb2x2ZXMoW3sgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JywgaWQ6ICcnLCBwdWI6ICcnLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH1dKTtcbiAgICAgICAgc2lub24uc3R1YihFY2RzYS5wcm90b3R5cGUsICd2ZXJpZnknKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciB1bnN1cHBvcnRlZCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUJhc2UsXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1NpZ24gdHlwZWQgZGF0YSBub3Qgc3VwcG9ydGVkIGZvciBUZXN0bmV0IFNvbGFuYScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHNpZ24gdHlwZWQgZGF0YSBWMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHlwZWREYXRhID0geyAuLi50eXBlZERhdGFCYXNlIH07XG4gICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjE7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLmdldChcbiAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnU2lnblR5cGVkRGF0YSB2MSBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBzZWN1cml0eSBjb25jZXJucycpO1xuICAgICAgfSk7XG4gICAgICBtZXNzYWdlU2lnbmluZ0NvaW5zLm1hcCgoY29pbk5hbWUpID0+IHtcbiAgICAgICAgdHNzRXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbihjb2luTmFtZSksIGV0aFdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWQ7XG4gICAgICAgIHR5cGVkRGF0YUJhc2UudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQ6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgc3RhdGU6ICdkZWxpdmVyZWQnLFxuICAgICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICAgIG1lc3NhZ2VSYXc6IEpTT04uc3RyaW5naWZ5KHR5cGVkTWVzc2FnZSksXG4gICAgICAgICAgc2lnbmF0dXJlOiB0eEhhc2gsXG4gICAgICAgICAgdHhIYXNoLFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBtZXNzYWdlRW5jb2RlZDogdHhIYXNoLFxuICAgICAgICB9O1xuXG4gICAgICAgIGRlc2NyaWJlKGBzaWduIHR5cGVkIGRhdGEgVjMgZm9yICR7Y29pbk5hbWV9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVkRGF0YSA9IHsgLi4udHlwZWREYXRhQmFzZSB9O1xuICAgICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjM7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25UeXBlZERhdGFUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnblR5cGVkRGF0YVRzcycgYXMgYW55KTtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFYzIHdoZW4gY3VzdG9kaWFuTWVzc2FnZUlEIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHlwZWREYXRhLnR4UmVxdWVzdElkID0gdHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBjb25zdCBzaWduVHlwZWREYXRhVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25UeXBlZERhdGFUc3MnIGFzIGFueSk7XG4gICAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgY3VzdG9kaWFuTWVzc2FnZUlkOiAndW5pdHRlc3QnLFxuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHR5cGVkIGRhdGEgVjMgd2l0aCBlbXB0eSBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAgICAgLnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICAgIHR5cGVkRGF0YTogdHlwZWREYXRhQmFzZSxcbiAgICAgICAgICAgICAgICBwcnY6ICcnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFYzIHdoZW4gdHhSZXF1ZXN0SWQgbm90IHByb3ZpZGVkICcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0eXBlZERhdGEudHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGFUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnblR5cGVkRGF0YVRzcycgYXMgYW55KTtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcpO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25lZFR5cGVkRGF0YVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnblR5cGVkRGF0YU9wdGlvbnM7XG4gICAgICAgICAgICBhY3R1YWxBcmcudHlwZWREYXRhPy50eXBlZERhdGFFbmNvZGVkPy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHR4SGFzaCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKGBzaWduIHR5cGVkIGRhdGEgVjQgZm9yICR7Y29pbk5hbWV9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVkRGF0YSA9IHsgLi4udHlwZWREYXRhQmFzZSB9O1xuICAgICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjQ7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0eXBlZERhdGEudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWNCB3aGVuIGN1c3RvZGlhbk1lc3NhZ2VJRCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHR5cGVkRGF0YS50eFJlcXVlc3RJZCA9IHR4UmVxdWVzdElkO1xuICAgICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmddIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gdHlwZWQgZGF0YSBWNCB3aXRoIGVtcHR5IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldFxuICAgICAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgICAgdHlwZWREYXRhOiB0eXBlZERhdGFCYXNlLFxuICAgICAgICAgICAgICAgIHBydjogJycsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjQgd2hlbiB0eFJlcXVlc3RJZCBub3QgcHJvdmlkZWQgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVsZXRlIHR5cGVkRGF0YS50eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduVHlwZWREYXRhVHNzJyBhcyBhbnkpO1xuICAgICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbmVkVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNZXNzYWdlIFNpZ25pbmcgd2l0aCBwZW5kaW5nIGFwcHJvdmFsIChwb2xpY3kgZmxvdyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ2hlbGxvIHdvcmxkJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eEhhc2ggPSAnMHhycnJzc3MxYic7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWxJZCA9ICdwYS0xMTExMjIyMjMzMzM0NDQ0NTU1NTY2NjY3Nzc3ODg4OCc7XG5cbiAgICAgIGNvbnN0IHNpZ25lZE1lc3NhZ2VzRml4dHVyZTogTm9uTnVsbGFibGU8VHhSZXF1ZXN0WydtZXNzYWdlcyddPiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICBjb21iaW5lU2lnU2hhcmU6ICcwOnJycjpzc3M6MycsXG4gICAgICAgICAgdHhIYXNoLFxuICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcGFya2VkVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAncGFya2VkLXR4LXJlcXVlc3QtaWQnLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3NpZ25UeXBlZFN0cnVjdHVyZWREYXRhJyB9LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbElkLFxuICAgICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICB1bnNpZ25lZE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLFxuICAgICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2lnbmFibGVUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgLi4ucGFya2VkVHhSZXF1ZXN0LFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdEZWxpdmVyeScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgLi4ucGFya2VkVHhSZXF1ZXN0LFxuICAgICAgICBzdGF0ZTogJ2RlbGl2ZXJlZCcsXG4gICAgICAgIG1lc3NhZ2VzOiBzaWduZWRNZXNzYWdlc0ZpeHR1cmUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eXBlZERhdGFGaXh0dXJlOiBUeXBlZERhdGEgPSB7XG4gICAgICAgIHR5cGVkRGF0YVJhdzogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRvbWFpbjoge1xuICAgICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgICAgICAgIGNoYWluSWQ6IDEsXG4gICAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmltYXJ5VHlwZTogJ01lc3NhZ2UnLFxuICAgICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICBFSVA3MTJEb21haW46IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3ZlcnNpb24nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdjaGFpbklkJywgdHlwZTogJ3VpbnQyNTYnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3ZlcmlmeWluZ0NvbnRyYWN0JywgdHlwZTogJ2FkZHJlc3MnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTWVzc2FnZTogW3sgbmFtZTogJ2RhdGEnLCB0eXBlOiAnc3RyaW5nJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IHsgZGF0YTogJ2JpdGdvIHNheXMgaGVsbG8hJyB9LFxuICAgICAgICB9KSxcbiAgICAgICAgdmVyc2lvbjogU2lnblR5cGVkRGF0YVZlcnNpb24uVjMsXG4gICAgICB9O1xuXG4gICAgICBsZXQgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViOiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1Yi5yZXNvbHZlcyhzaWduZWRUeFJlcXVlc3QpO1xuICAgICAgICBzYW5kYm94LnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJykucmVzb2x2ZXMoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbW1vbktleWNoYWluOiAndGVzdCcsXG4gICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICBwdWI6ICcnLFxuICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAgICd7XCJpdlwiOlwiMTVGc2JEVkkxekc5T2dnRDhZWCtIZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImhIYk5IM1N6L2FVPVwiLFwiY3RcIjpcIldvTlZLejdhZmlSeFhJMncvWWt6TWRNeW9RZy9CMTV1MVE4YVFnaTk2akpaOXdrNlRJYVNFYzZiWEZIM0FIekQ5TWRKQ1dKUVVwUmhvUWMvcmd5dGNuNjlzY1BUaktlZXlWTUVsR0N4WmRGVlMvcHNRY05FK2x1ZTMvLzJabHhqKzZ0MU5rdllPKzh5QWV6U01SQks1T2RmdFhFak5RST1cIn0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTmFycm93cyB0aGUgU2lnbmVkTWVzc2FnZSB1bmlvbiBhZnRlciBhc3NlcnRpbmcgaXRzIHN0YXRlOiBhIHNob3VsZFxuICAgICAgICogYXNzZXJ0aW9uIG9uIGBzdGF0ZWAgYWxvbmUgZG9lcyBub3QgbmFycm93IHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uXG4gICAgICAgKiBmb3IgdGhlIGNvbXBpbGVyLCBzbyB2YXJpYW50LXNwZWNpZmljIGZpZWxkcyBtdXN0IGJlIHJlYWQgZnJvbSB0aGVcbiAgICAgICAqIG5hcnJvd2VkIHJldHVybiB2YWx1ZS5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gYXNzZXJ0U2lnbmVkTWVzc2FnZVN0YXRlPFQgZXh0ZW5kcyBTaWduZWRNZXNzYWdlWydzdGF0ZSddPihcbiAgICAgICAgcmVzdWx0OiBTaWduZWRNZXNzYWdlLFxuICAgICAgICBzdGF0ZTogVFxuICAgICAgKTogRXh0cmFjdDxTaWduZWRNZXNzYWdlLCB7IHN0YXRlOiBUIH0+IHtcbiAgICAgICAgcmVzdWx0LnN0YXRlLnNob3VsZC5lcXVhbChzdGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgYXMgRXh0cmFjdDxTaWduZWRNZXNzYWdlLCB7IHN0YXRlOiBUIH0+O1xuICAgICAgfVxuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbElkIHdpdGhvdXQgc2lnbmluZyB3aGVuIGEgZnJlc2ggc2lnbk1lc3NhZ2UgcmVxdWVzdCBpcyBwYXJrZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCBwYXJrZWRUeFJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmtlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgcGFya2VkLnBlbmRpbmdBcHByb3ZhbElkLnNob3VsZC5lcXVhbChwZW5kaW5nQXBwcm92YWxJZCk7XG4gICAgICAgIHBhcmtlZC50eFJlcXVlc3RJZC5zaG91bGQuZXF1YWwocGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkKTtcbiAgICAgICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbElkIHdpdGhvdXQgc2lnbmluZyB3aGVuIHJlc3VtaW5nIGEgcGFya2VkIHNpZ25NZXNzYWdlIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtwYXJrZWRUeFJlcXVlc3QudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFtwYXJrZWRUeFJlcXVlc3RdIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiBwYXJrZWRUeFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmtlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgcGFya2VkLnBlbmRpbmdBcHByb3ZhbElkLnNob3VsZC5lcXVhbChwZW5kaW5nQXBwcm92YWxJZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcGVuZGluZ0FwcHJvdmFsSWQgd2l0aG91dCBzaWduaW5nIHdoZW4gYSBmcmVzaCBzaWduVHlwZWREYXRhIHJlcXVlc3QgaXMgcGFya2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzYCkucmVwbHkoMjAwLCBwYXJrZWRUeFJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUZpeHR1cmUsXG4gICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFya2VkID0gYXNzZXJ0U2lnbmVkTWVzc2FnZVN0YXRlKHJlc3VsdCwgJ3BlbmRpbmdBcHByb3ZhbCcpO1xuICAgICAgICBwYXJrZWQucGVuZGluZ0FwcHJvdmFsSWQuc2hvdWxkLmVxdWFsKHBlbmRpbmdBcHByb3ZhbElkKTtcbiAgICAgICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbElkIHdpdGhvdXQgc2lnbmluZyB3aGVuIHJlc3VtaW5nIGEgcGFya2VkIHNpZ25UeXBlZERhdGEgcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke3BhcmtlZFR4UmVxdWVzdC50eFJlcXVlc3RJZH0mbGF0ZXN0PXRydWVgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3BhcmtlZFR4UmVxdWVzdF0gfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgIHR5cGVkRGF0YTogeyAuLi50eXBlZERhdGFGaXh0dXJlLCB0eFJlcXVlc3RJZDogcGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkIH0sXG4gICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFya2VkID0gYXNzZXJ0U2lnbmVkTWVzc2FnZVN0YXRlKHJlc3VsdCwgJ3BlbmRpbmdBcHByb3ZhbCcpO1xuICAgICAgICBwYXJrZWQucGVuZGluZ0FwcHJvdmFsSWQuc2hvdWxkLmVxdWFsKHBlbmRpbmdBcHByb3ZhbElkKTtcbiAgICAgICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2lnbiBhIHBlbmRpbmdEZWxpdmVyeSBtZXNzYWdlIHJlcXVlc3QgdmlhIHNpZ25BbmRTZW5kTWVzc2FnZVR4UmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7c2lnbmFibGVUeFJlcXVlc3QudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFtzaWduYWJsZVR4UmVxdWVzdF0gfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25BbmRTZW5kTWVzc2FnZVR4UmVxdWVzdCh7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHNpZ25hYmxlVHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSBhcyBzdHJpbmcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlbGl2ZXJlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdkZWxpdmVyZWQnKTtcbiAgICAgICAgZGVsaXZlcmVkLnR4SGFzaC5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgZGVsaXZlcmVkLnNpZ25hdHVyZS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgZGVsaXZlcmVkLnR4UmVxdWVzdElkLnNob3VsZC5lcXVhbChzaWduYWJsZVR4UmVxdWVzdC50eFJlcXVlc3RJZCk7XG4gICAgICAgIGRlbGl2ZXJlZC5tZXNzYWdlUmF3LnNob3VsZC5lcXVhbChtZXNzYWdlUmF3KTtcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBwZW5kaW5nQXBwcm92YWxJZCB3aXRob3V0IHNpZ25pbmcgd2hlbiBzaWduQW5kU2VuZE1lc3NhZ2VUeFJlcXVlc3QgaGl0cyBhIHN0aWxsLXBhcmtlZCByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7cGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkfSZsYXRlc3Q9dHJ1ZWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbcGFya2VkVHhSZXF1ZXN0XSB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnbkFuZFNlbmRNZXNzYWdlVHhSZXF1ZXN0KHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogcGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSBhcyBzdHJpbmcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmtlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgcGFya2VkLnBlbmRpbmdBcHByb3ZhbElkLnNob3VsZC5lcXVhbChwZW5kaW5nQXBwcm92YWxJZCk7XG4gICAgICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQoc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBzaWduQW5kU2VuZE1lc3NhZ2VUeFJlcXVlc3QgZm9yIG5vbi1UU1Mgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9uVHNzV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGV0aCcpLCB7IC4uLmV0aFdhbGxldERhdGEsIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nIH0pO1xuXG4gICAgICAgIGF3YWl0IG5vblRzc1dhbGxldFxuICAgICAgICAgIC5zaWduQW5kU2VuZE1lc3NhZ2VUeFJlcXVlc3Qoe1xuICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6IHBhcmtlZFR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdNZXNzYWdlIHNpZ25pbmcgb25seSBzdXBwb3J0ZWQgZm9yIFRTUyB3YWxsZXRzJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdTZW5kIE1hbnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kTWFueUlucHV0ID0ge1xuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVxSWQ6IG5ldyBSZXF1ZXN0VHJhY2VyKCksXG4gICAgICB9O1xuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzZW5kIG1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNlbmRNYW55XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShzZW5kTWFueUlucHV0KTtcblxuICAgICAgICBjb25zdCBzZW5kVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNlbmRNYW55XG4gICAgICAgIHNlbmRUeFJlcXVlc3QuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHNpZ25lZFRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKTtcblxuICAgICAgICBjb25zdCBzZW5kTWFueSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zZW5kTWFueShzZW5kTWFueUlucHV0KTtcbiAgICAgICAgc2VuZE1hbnkuc2hvdWxkLmRlZXBFcXVhbCgnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFsbG93IHplcm8gYW1vdW50IHJlY2lwaWVudHMgZm9yIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgY29uc3Qgc2VuZFR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNlbmRUeFJlcXVlc3QucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnkgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2VuZE1hbnkoe1xuICAgICAgICAgIHR5cGU6ICdjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzMicsXG4gICAgICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbmRNYW55LnNob3VsZC5kZWVwRXF1YWwoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCB6ZXJvIGFtb3VudCByZWNpcGllbnRzIGZvciBzb2wgdHJhbnNmZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoe1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgICdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBwb3NpdGl2ZSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8gb3IgbnVtZXJpYyBzdHJpbmcgZXhwZWN0ZWQnXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBhbW91bnQgcmVjaXBpZW50cyBmb3IgY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Nsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnYXRhQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnLTEnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ2ludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIHBvc2l0aXZlIG51bWJlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCdcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG5vbi16ZXJvIGFtb3VudCByZWNpcGllbnRzIGZvciBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zZW5kTWFueSh7XG4gICAgICAgICAgICB0eXBlOiAnY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcImludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCByZXF1aXJlcyBhbW91bnQgJzAnXCIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwic2hvdWxkIHJlamVjdCBhbW91bnQgJ21heCcgcmVjaXBpZW50cyBmb3IgY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50XCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHtcbiAgICAgICAgICAgIHR5cGU6ICdjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJ21heCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXCJpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgcmVxdWlyZXMgYW1vdW50ICcwJ1wiKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHNlbmQgbWFueSBhbmQgY2FsbCBzZXRSZXF1ZXN0VHJhY2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShzZW5kTWFueUlucHV0KTtcblxuICAgICAgICBjb25zdCBzZW5kVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2lnbmVkVHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpO1xuXG4gICAgICAgIGNvbnN0IHNldFJlcXVlc3RUcmFjZXJTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdzZXRSZXF1ZXN0VHJhY2VyJyk7XG4gICAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkud2l0aEFyZ3Moc2VuZE1hbnlJbnB1dC5yZXFJZCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnkgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlJbnB1dCk7XG4gICAgICAgIHNlbmRNYW55LnNob3VsZC5kZWVwRXF1YWwoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHNldFJlcXVlc3RUcmFjZXJTcHkpO1xuICAgICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgaXNUZXN0VHJhbnNhY3Rpb24gdGhyb3VnaCBzZW5kTWFueSB0byBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnlJbnB1dFdpdGhUZXN0RmxhZyA9IHtcbiAgICAgICAgICAuLi5zZW5kTWFueUlucHV0LFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgaXNUZXN0VHJhbnNhY3Rpb246IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoc2lnbmVkVHJhbnNhY3Rpb24pO1xuXG4gICAgICAgIGNvbnN0IHNlbmRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpO1xuICAgICAgICBzZW5kVHhSZXF1ZXN0LnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRNYW55ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55SW5wdXRXaXRoVGVzdEZsYWcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiB3YXMgY2FsbGVkIHdpdGggaXNUZXN0VHJhbnNhY3Rpb25cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24pO1xuICAgICAgICBjb25zdCBjYWxsQXJncyA9IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmdldENhbGwoMCkuYXJnc1swXTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGNhbGxBcmdzKTtcbiAgICAgICAgY2FsbEFyZ3MhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc1Rlc3RUcmFuc2FjdGlvbicsIHRydWUpO1xuICAgICAgICBjYWxsQXJncyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R5cGUnLCAndHJhbnNmZXInKTtcblxuICAgICAgICBzZW5kTWFueS5zaG91bGQuZGVlcEVxdWFsKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRyYW5zZmVyIGZyb20gc2VuZE1hbnkgZm9yIGFwaVZlcnNpb249ZnVsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaWduZWRUeFJlc3VsdCA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpLFxuICAgICAgICAgIGludGVudDogJ3BheW1lbnQnLFxuICAgICAgICAgIGxhdGVzdDogZmFsc2UsXG4gICAgICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0ZTogJ2RlbGl2ZXJlZCcsXG4gICAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICAgIHVzZXJJZDogJ3VuaXQtdGVzdCcsXG4gICAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0VHlwZTogd2FsbGV0LnR5cGUoKSA/PyAnaG90JyxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogc2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgICAgICAgc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICBpZDogJ3R4aWQnLFxuICAgICAgICAgICAgICAgIHR4OiAndHgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4OiAnc29tZXRoaW5nJyBhcyBhbnksXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0ge1xuICAgICAgICAgIGlkOiAndHJhbnNmZXJJZCcsXG4gICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgIHR4aWQ6ICd0eGlkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih3YWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHNpZ25lZFR4UmVzdWx0KTtcblxuICAgICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdCgpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi93YWxsZXQvJHt3YWxsZXREYXRhLmlkfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke3NpZ25lZFR4UmVzdWx0LnR4UmVxdWVzdElkfSZsYXRlc3Q9dHJ1ZWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0XSB9KTtcblxuICAgICAgICBjb25zdCBjcmVhdGVUcmFuc2Zlck5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt3YWxsZXREYXRhLmlkfS90eHJlcXVlc3RzLyR7c2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWR9L3RyYW5zZmVyc2ApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgdHJhbnNmZXIpO1xuXG4gICAgICAgIGNvbnN0IGlucHV0OiBTZW5kTWFueU9wdGlvbnMgPSB7XG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZW5kTWFueVJlc3VsdCA9IGF3YWl0IHdhbGxldC5zZW5kTWFueShpbnB1dCk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShpbnB1dCk7XG4gICAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgY3JlYXRlVHJhbnNmZXJOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgc2VuZE1hbnlSZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICAgIHRyYW5zZmVyLFxuICAgICAgICAgIHR4aWQ6ICd0eGlkJyxcbiAgICAgICAgICB0eDogJ3R4JyxcbiAgICAgICAgICBzdGF0dXM6ICdzaWduZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBwZW5kaW5nQXBwcm92YWwgZnJvbSBzZW5kTWFueSBmb3IgYXBpVmVyc2lvbj1mdWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZFR4UmVzdWx0ID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogc2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpLFxuICAgICAgICAgIGludGVudDogJ3BheW1lbnQnLFxuICAgICAgICAgIGxhdGVzdDogZmFsc2UsXG4gICAgICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICAgIHVzZXJJZDogJ3VuaXQtdGVzdCcsXG4gICAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0VHlwZTogd2FsbGV0LnR5cGUoKSA/PyAnaG90JyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtcGVuZGluZy1hcHByb3ZhbC1pZCcsXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRlOiAnaW5pdGlhbGl6ZWQnLFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4OiAnc29tZXRoaW5nJyBhcyBhbnksXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0ge1xuICAgICAgICAgIGlkOiAndHJhbnNmZXJJZCcsXG4gICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgIHR4aWQ6ICd0eGlkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFsID0ge1xuICAgICAgICAgIGlkOiAnc29tZS1wZW5kaW5nLWFwcHJvdmFsLWlkJyxcbiAgICAgICAgICB3YWxsZXQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgIGluZm86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2FjdGlvblJlcXVlc3RGdWxsJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIod2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzaWduZWRUeFJlc3VsdCk7XG5cbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvd2FsbGV0LyR7d2FsbGV0RGF0YS5pZH0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHt0eFJlcXVlc3QudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RdIH0pO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVRyYW5zZmVyTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3dhbGxldERhdGEuaWR9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3QudHhSZXF1ZXN0SWR9L3RyYW5zZmVyc2ApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgdHJhbnNmZXIpO1xuXG4gICAgICAgIGNvbnN0IGdldFBlbmRpbmdBcHByb3ZhbE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vcGVuZGluZ2FwcHJvdmFscy8ke3R4UmVxdWVzdC5wZW5kaW5nQXBwcm92YWxJZH1gKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHBlbmRpbmdBcHByb3ZhbCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQ6IFNlbmRNYW55T3B0aW9ucyA9IHtcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlbmRNYW55UmVzdWx0ID0gYXdhaXQgd2FsbGV0LnNlbmRNYW55KGlucHV0KTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KGlucHV0KTtcbiAgICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBjcmVhdGVUcmFuc2Zlck5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgZ2V0UGVuZGluZ0FwcHJvdmFsTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgIHNlbmRNYW55UmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyBwZW5kaW5nQXBwcm92YWwsIHR4UmVxdWVzdCB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdHhSZXF1ZXN0SWQgaXMgbWlzc2luZyBmcm9tIHByZWJ1aWxkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eEhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBzZW5kTWFueVxuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2VuZE1hbnlJbnB1dCk7XG5cbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHNlbmRNYW55SW5wdXQpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4UmVxdWVzdElkIG1pc3NpbmcgZnJvbSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1N1Ym1pdCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc3VibWl0IHRyYW5zYWN0aW9uIHdpdGggdHhSZXF1ZXN0SWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5vY2tTZW5kVHggPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KGZhbHNlKVxuICAgICAgICAgIC5wb3N0KHRzc1NvbFdhbGxldC51cmwoJy90eC9zZW5kJykucmVwbGFjZShiZ1VybCwgJycpKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgbWVzc2FnZTogJ3N1Y2Nlc3MnIH0pO1xuXG4gICAgICAgIGNvbnN0IHN1Ym1pdHRlZFR4ID0gYXdhaXQgdHNzU29sV2FsbGV0LnN1Ym1pdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHN1Ym1pdHRlZFR4LnNob3VsZC5kZWVwRXF1YWwoeyBtZXNzYWdlOiAnc3VjY2VzcycgfSk7XG4gICAgICAgIG5vY2tTZW5kVHguaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0eFJlcXVlc3RJZCBhbmQgdHhIZXggYXJlIGJvdGggcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIHR4SGV4OiAnYmVlZicsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbXVzdCBzdXBwbHkgZXhhY3RseSBvbmUgb2YgdHhSZXF1ZXN0SWQsIHR4SGV4LCBvciBoYWxmU2lnbmVkJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHhSZXF1ZXN0SWQgYW5kIGhhbGZTaWduZWQgYXJlIGJvdGggcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIGhhbGZTaWduZWQ6IHtcbiAgICAgICAgICAgICAgdHhIZXg6ICdiZWVmJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbXVzdCBzdXBwbHkgZXhhY3RseSBvbmUgb2YgdHhSZXF1ZXN0SWQsIHR4SGV4LCBvciBoYWxmU2lnbmVkJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHhIZXggYW5kIGhhbGZTaWduZWQgYXJlIGJvdGggcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eEhleDogJ2JlZWYnLFxuICAgICAgICAgICAgaGFsZlNpZ25lZDoge1xuICAgICAgICAgICAgICB0eEhleDogJ2JlZWYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtdXN0IHN1cHBseSBlaXRoZXIgdHhIZXggb3IgaGFsZlNpZ25lZCwgYnV0IG5vdCBib3RoJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2ZlciB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJzB4MTAxYzM5Mjg5NDZiMmUxZDk5NzU5ZThlNWQzNGI1ZTk0YzFhOGUyZicsXG4gICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgdG9rZW5EYXRhOiB7XG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweDgzOTdiMDkxNTE0YzFmN2JlYmI5ZGVhNmFjMjY3ZWEyM2I1NzA2MDUnLFxuICAgICAgICAgICAgdG9rZW5JZDogJzM4JyxcbiAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IDAsXG4gICAgICAgICAgICB0b2tlblR5cGU6IFRva2VuVHlwZS5FUkM3MjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgIG1heEZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwMDAwMDAwMDAsXG4gICAgICB9O1xuXG4gICAgICBpdCgnY2FsbGluZyBwcmVidWlsZHhUcmFuc2FjdGlvbiBzaG91bGQgZXhlY3V0ZSBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHByb3BlciBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdEZ1bGxUb2tlblRyYW5zZmVyID0geyAuLi50eFJlcXVlc3RGdWxsLCBpbnRlbnQ6ICd0cmFuc2ZlclRva2VuJyB9O1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbFRva2VuVHJhbnNmZXIpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdmdWxsJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NQb2x5Z29uV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVydG9rZW4nLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlMTIzNDUnLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1BvbHlnb25XYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1BvbHlnb25XYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXJ0b2tlbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIEVWTS1saWtlIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBvbmx5IHBhc3MgaW4gcGFyYW1zIGJlaW5nIHRlc3RlZFxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0cG9seWdvbicpLCB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlT3B0aW9ucycpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heEZlZVBlckdhcycsIDIwMDAwMDAwMDApO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heFByaW9yaXR5RmVlUGVyR2FzJywgMTAwMDAwMDAwMCk7XG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcsIDEpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuRGF0YScpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5RdWFudGl0eScsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuUXVhbnRpdHkpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5UeXBlJywgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5UeXBlKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuTmFtZScsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KFxuICAgICAgICAgICd0b2tlbkNvbnRyYWN0QWRkcmVzcycsXG4gICAgICAgICAgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5Db250cmFjdEFkZHJlc3NcbiAgICAgICAgKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuSWQnLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS50b2tlbklkKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS5kZWNpbWFsUGxhY2VzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIGNhbGxkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweDEwMWMzOTI4OTQ2YjJlMWQ5OTc1OWU4ZTVkMzRiNWU5NGMxYThlMmYnLFxuICAgICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgICBkYXRhOiAnMHgwMDAwMTExMTIyMjInLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBvbmx5IHBhc3MgaW4gcGFyYW1zIGJlaW5nIHRlc3RlZFxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUGVyR2FzJywgMjAwMDAwMDAwMCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLCAxMDAwMDAwMDAwKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJywgMSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS5kYXRhIS5zaG91bGQuZXF1YWwoJzB4MDAwMDExMTEyMjIyJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgcG9wdWxhdGUgaW50ZW50IHdpdGggdG9rZW5EYXRhIGlmIGNlcnRhaW4gcGFyYW1zIGFyZSB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndHBvbHlnb24nKSk7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4MTAxYzM5Mjg5NDZiMmUxZDk5NzU5ZThlNWQzNGI1ZTk0YzFhOGUyZicsXG4gICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgIHRva2VuRGF0YToge1xuICAgICAgICAgICAgICB0b2tlbk5hbWU6ICdlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ODM5N2IwOTE1MTRjMWY3YmViYjlkZWE2YWMyNjdlYTIzYjU3MDYwNScsXG4gICAgICAgICAgICAgIHRva2VuSWQ6ICczOCcsXG4gICAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgICAgZGVjaW1hbFBsYWNlczogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IGludGVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0cG9seWdvbicpLCB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAndHJhbnNmZXJUb2tlbicsXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG9ubHkgcGFzcyBpbiBwYXJhbXMgYmUgdGVzdGVkIGZvclxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaW50ZW50LnNob3VsZC5lcXVhbCh1bmRlZmluZWQpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgJ3Rva2VuIHR5cGUgYW5kIHF1YW50aXR5IGlzIHJlcXVpcmVkIHRvIHJlcXVlc3QgYSB0cmFuc2FjdGlvbiB3aXRoIGludGVudCB0byB0cmFuc2ZlciBhIHRva2VuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZmVyIE5GVHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIE5GVCB0b2tlbiBkZXRhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHg5ZmVmNzQ5MDUwNjQ0NjI1MDEyYTJjODY2OTczNzc1ZTcxMjM3NTNiM2VlZjBhMWE0MDM3NDUzYWMyNmQ3OWJmJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMScsXG4gICAgICAgICAgICAgIHRva2VuRGF0YToge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZTogVG9rZW5UeXBlLkRJR0lUQUxfQVNTRVQsXG4gICAgICAgICAgICAgICAgdG9rZW5RdWFudGl0eTogJzEnLFxuICAgICAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhiYmM1NjFmYmZhNWQxMDVlZmQ4ZGZiMDZhZTNlN2U1YmU0NjMzMTE2NWI5OWQ1MThmMDk0YzcwMWU0MDYwM2I1JyxcbiAgICAgICAgICAgICAgICB0b2tlbklkOiAnMHg2NzViMDUzZDcyYzI0ZGNjNmJjN2YzOGNkZDQ1YjQ4NDNjZmI3YWY2OWEyNWFkMjFkMDAyYzM3NjM1N2U5ZDY5JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBiYXNlQ29pbiA9IGJpdGdvLmNvaW4oJ3RhcHQnKTtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUREU0FVdGlscy5kZWZhdWx0KGJpdGdvLCBiYXNlQ29pbik7XG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJhc2VDb2luLCBwYXJhbXMpO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW50ZW50VHlwZScsICdwYXltZW50Jyk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweDlmZWY3NDkwNTA2NDQ2MjUwMTJhMmM4NjY5NzM3NzVlNzEyMzc1M2IzZWVmMGExYTQwMzc0NTNhYzI2ZDc5YmYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFtb3VudDoge1xuICAgICAgICAgICAgICB2YWx1ZTogJzEnLFxuICAgICAgICAgICAgICBzeW1ib2w6ICd0YXB0Om5mdGNvbGxlY3Rpb24xJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b2tlbkRhdGE6IHtcbiAgICAgICAgICAgICAgdG9rZW5UeXBlOiAnRGlnaXRhbCBBc3NldCcsXG4gICAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweGJiYzU2MWZiZmE1ZDEwNWVmZDhkZmIwNmFlM2U3ZTViZTQ2MzMxMTY1Yjk5ZDUxOGYwOTRjNzAxZTQwNjAzYjUnLFxuICAgICAgICAgICAgICB0b2tlbklkOiAnMHg2NzViMDUzZDcyYzI0ZGNjNmJjN2YzOGNkZDQ1YjQ4NDNjZmI3YWY2OWEyNWFkMjFkMDAyYzM3NjM1N2U5ZDY5JyxcbiAgICAgICAgICAgICAgdG9rZW5OYW1lOiAndGFwdDpuZnRjb2xsZWN0aW9uMScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFNoYXJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHVzZSBrZXljaGFpbiBwdWIgdG8gc2hhcmUgdHNzIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IGVtYWlsID0gJ3NoYXJldG9Ac2RrdGVzdC5jb20nO1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgICBjb25zdCBwYXRoID0gJ20vOTk5OTk5LzEvMSc7XG4gICAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2JpdGdvMTIzNCc7XG5cbiAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5LCBwYXRoIH0pO1xuXG4gICAgICAgIC8vIGNvbW1vblB1YiArIGNvbW1vbkNoYWluY29kZVxuICAgICAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4JykgKyByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICBjb25zdCBlbmNYcHJ2MVRzcyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvdHNvbC9rZXkvJHt0c3NTb2xXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IHRzc1NvbFdhbGxldC5rZXlJZHMoKVswXSxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiBlbmNYcHJ2MVRzcyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdHViID0gc2lub24uc3R1Yih0c3NTb2xXYWxsZXQsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5wdWIhLnNob3VsZC5lcXVhbChUc3NVdGlscy5nZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW4pKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgIHN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICBnZXRLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FWQVggdGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJnVXJsO1xuICAgIGxldCBiYXNlY29pbjtcbiAgICBsZXQgd2FsbGV0RGF0YTtcbiAgICBsZXQgd2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgICAgIHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCcsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmZXRjaCBjcm9zcy1jaGFpbiB1dHhvcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGF2YXhwJyk7XG4gICAgICB3YWxsZXREYXRhLmNvaW4gPSAndGF2YXhwJztcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBzb3VyY2VDaGFpbjogJ0MnIH07XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vY3Jvc3NDaGFpblVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChwYXRoKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgdW5zcGVudDoge1xuICAgICAgICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgICAgICB0eGlkOiAnVjNVQlpUUWozNjR6TldxdDh1TUhENU5qeHhYOFQ4cWtiZVpYVVJtam5WbUxFcXphYicsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDIsXG4gICAgICAgICAgICBhZGRyZXNzZXM6IFtcbiAgICAgICAgICAgICAgJ0MtZnVqaTE5OWZsdWVncnRocXM0dHZ6NDB6YWpmcnN4NW03ZHZ5NzVhamZtNicsXG4gICAgICAgICAgICAgICdDLWZ1amkxZ2szbTQ0NDg5M3lubDBnZnZ4YWhqZ3czdmZ0bm44c3B0eWQ5ZzUnLFxuICAgICAgICAgICAgICAnQy1mdWppMXVqZnpqZ3d6ZnlnbDYwcXAybDhybWdsZzNsbm03dzQwNTluY2E1JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvdXRwdXRpZHg6ICcxMTExWGlhWWcnLFxuICAgICAgICAgICAgbG9ja3RpbWU6ICcwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZyb21XYWxsZXQ6ICc2MzUwOTJmZDRmZjMzMTYxNDJkZjZlNmI3YTA3OGI5MicsXG4gICAgICAgICAgdG9XYWxsZXQ6ICc2MzUwOTJmZDRmZjMzMTYxNDJkZjZlODkxZjZhN2VlNicsXG4gICAgICAgICAgdG9BZGRyZXNzOiAnMHgxMjVjNDQ1MWM4NzBmNzUzMjY1YjBiMWFmM2NmNmFiODhmZmU0NjU3JyxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5mZXRjaENyb3NzQ2hhaW5VVFhPcyhwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzZW5kTWFueSBzaG91bGQgd29yayBmb3IgQyA+IFAgZXhwb3J0IHdpdGggY3VzdG9kaWFsIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGF2YXhjJyk7XG4gICAgICB3YWxsZXREYXRhLmNvaW4gPSAndGF2YXhjJztcbiAgICAgIHdhbGxldERhdGEudHlwZSA9ICdjdXN0b2RpYWwnO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgICAgJ1AtZnVqaTFlNTZwYzQ5NjZxc2V2emh3Z2t5bTVsMGpmbWE5bGxrcW5ycjRnaH5QLWZ1amkxa3EwNXptOW5tbHE4cDNsZDU1azc5ZGwzcWF5NmMwZTNhdGo1NnZ+UC1mdWppMXJwNDZ6MzBxZzQ1N3hjM2RwZmZ5eGNnenBmbHhjODVtaGtqbWUzJztcbiAgICAgIGNvbnN0IGluaXRpYXRlVHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDAuMDEgQVZBWFxuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBob3A6IHRydWUsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW5pdGlhdGVUeFBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9pbml0aWF0ZWA7XG4gICAgICBsZXQgaW5pdGlhdGVUeEJvZHk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGluaXRpYXRlVHhQYXRoLCAoYm9keSkgPT4ge1xuICAgICAgICAgIGluaXRpYXRlVHhCb2R5ID0gYm9keTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IGZlZUVzdGltYXRpb25QYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS90eC9mZWU/aG9wPXRydWUmcmVjaXBpZW50PSR7YWRkcmVzc30mYW1vdW50PTEwMDAwMDAwMDAwMDAwMDAwJnR5cGU9RXhwb3J0YDtcbiAgICAgIG5vY2soYmdVcmwpLmdldChmZWVFc3RpbWF0aW9uUGF0aCkucmVwbHkoMjAwLCB7XG4gICAgICAgIGZlZUVzdGltYXRlOiAnNzE4NzUwMDAwMDAwMDAwJyxcbiAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogNTAwMDAwLFxuICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5zZW5kTWFueShpbml0aWF0ZVR4UGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgICAgXy5pc01hdGNoKGluaXRpYXRlVHhCb2R5LCB7XG4gICAgICAgIGhvcFBhcmFtczoge1xuICAgICAgICAgIGdhc1ByaWNlTWF4OiA3MTg3NTAwMDAwLFxuICAgICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ05GVCBUZXN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0OiBXYWxsZXQ7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgIGNvaW46ICdodGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJldHVybiBhbGwgbmZ0cyBpbiB0aGUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VG9rZW5CYWxhbmNlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvaHRldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9P2FsbFRva2Vucz10cnVlYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgLi4ubmZ0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgbmZ0cyA9IGF3YWl0IGV0aFdhbGxldC5nZXROZnRCYWxhbmNlcygpO1xuICAgICAgZ2V0VG9rZW5CYWxhbmNlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBuZnRzLnNob3VsZC5sZW5ndGgoNSk7XG4gICAgICBuZnRzLnNob3VsZC5jb250YWluRXFsKHtcbiAgICAgICAgdHlwZTogJ0VSQzcyMScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgbmFtZTogJ3RlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHg4Mzk3YjA5MTUxNGMxZjdiZWJiOWRlYTZhYzI2N2VhMjNiNTcwNjA1JyxcbiAgICAgICAgfSxcbiAgICAgICAgY29sbGVjdGlvbnM6IHt9LFxuICAgICAgICBiYWxhbmNlU3RyaW5nOiAnMCcsXG4gICAgICAgIGNvbmZpcm1lZEJhbGFuY2VTdHJpbmc6ICcwJyxcbiAgICAgICAgc3BlbmRhYmxlQmFsYW5jZVN0cmluZzogJzAnLFxuICAgICAgICB0cmFuc2ZlckNvdW50OiAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHRocm93IHdoZW4gYXR0ZW1wdGluZyB0byB0cmFuc2ZlciBhIG5mdCBjb2xsZWN0aW9uIG5vdCBpbiB0aGUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VG9rZW5CYWxhbmNlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvaHRldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9P2FsbFRva2Vucz10cnVlYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgLi4ubmZ0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLnNlbmROZnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJzEyM2FiYycsXG4gICAgICAgICAgICBvdHA6ICcwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5JZDogJzEyMycsXG4gICAgICAgICAgICB0eXBlOiAnRVJDNzIxJyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHgxMjNiYWRhZGRyZXNzJyxcbiAgICAgICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcweGMxNWFjYzI3ZWU0MWYyNjY4NzdjOGYwYzYxZGY1YmNiYzc5OTdkZjYnLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnQ29sbGVjdGlvbiBub3QgZm91bmQgZm9yIHRva2VuIGNvbnRyYWN0IDB4MTIzYmFkYWRkcmVzcycpO1xuICAgICAgZ2V0VG9rZW5CYWxhbmNlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCB0aHJvdyB3aGVuIGF0dGVtcHRpbmcgdG8gdHJhbnNmZXIgYSBFUkMtNzIxIG5mdCBub3Qgb3duZWQgYnkgdGhlIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFRva2VuQmFsYW5jZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL2h0ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfT9hbGxUb2tlbnM9dHJ1ZWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIC4uLm5mdFJlc3BvbnNlLFxuICAgICAgICAgIC4uLnVuc3VwcG9ydGVkTmZ0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLnNlbmROZnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJzEyM2FiYycsXG4gICAgICAgICAgICBvdHA6ICcwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5JZDogJzEyMycsXG4gICAgICAgICAgICB0eXBlOiAnRVJDNzIxJyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiJyxcbiAgICAgICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcweGMxNWFjYzI3ZWU0MWYyNjY4NzdjOGYwYzYxZGY1YmNiYzc5OTdkZjYnLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnVG9rZW4gMTIzIG5vdCBmb3VuZCBpbiBjb2xsZWN0aW9uIDB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYiBvciBkb2VzIG5vdCBoYXZlIGEgc3BlbmRhYmxlIGJhbGFuY2UnXG4gICAgICAgICk7XG4gICAgICBnZXRUb2tlbkJhbGFuY2VOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHRocm93IHdoZW4gYXR0ZW1wdGluZyB0byB0cmFuc2ZlciBFUkMtMTE1NSB0b2tlbnMgd2hlbiB0aGUgYW1vdW50IHRyYW5zZmVycmVkIGlzIG1vcmUgdGhhbiB0aGUgc3BlbmRhYmxlIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUb2tlbkJhbGFuY2VOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi9odGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0/YWxsVG9rZW5zPXRydWVgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICAuLi57XG4gICAgICAgICAgICB1bnN1cHBvcnRlZE5mdHM6IHtcbiAgICAgICAgICAgICAgJzB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYic6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRVJDMTE1NScsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIDExODY3MDM6ICc5JyxcbiAgICAgICAgICAgICAgICAgIDExODY3MDU6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTY6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTc6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTg6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTk6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NjA6ICcxJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiAnTXVsdGlGYXVjZXQgTkZUJyxcbiAgICAgICAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTmZ0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICcxMjNhYmMnLFxuICAgICAgICAgICAgb3RwOiAnMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudHJpZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFtb3VudDogMTAsXG4gICAgICAgICAgICAgICAgdG9rZW5JZDogJzExODY3MDMnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICAgIHRva2VuSWQ6ICcxMTg2NzA1JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0eXBlOiAnRVJDMTE1NScsXG4gICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYicsXG4gICAgICAgICAgICByZWNpcGllbnRBZGRyZXNzOiAnMHhjMTVhY2MyN2VlNDFmMjY2ODc3YzhmMGM2MWRmNWJjYmM3OTk3ZGY2JyxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0Ftb3VudCAxMCBleGNlZWRzIHNwZW5kYWJsZSBiYWxhbmNlIG9mIDkgZm9yIHRva2VuIDExODY3MDMnKTtcbiAgICAgIGdldFRva2VuQmFsYW5jZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkYSB0ZXN0czogJywgKCkgPT4ge1xuICAgIGxldCBhZGFXYWxsZXQ6IFdhbGxldDtcbiAgICBjb25zdCBhZGFCaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBhZGFCaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6XG4gICAgICAgICAgJ2FkZHJfdGVzdDFxOWZhYTVxM3pyMzh3a2Q0a2QzdThqZnNoeDk3anh2d3N5dmpnM3RhYzgyNjUwMm5tbWdwenk4endhdm10dm1yYzB5bnB3dnRheXZjYXFnZXkzemhtc3c0NGc3c2hyZnJoOScsXG4gICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgbWluaW11bUZ1bmRpbmc6IDEwMDAwMDAsXG4gICAgICAgIGxhc3RDaGFpbkluZGV4OiB7IDA6IDAgfSxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndGFkYScsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFkYVdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RhZGEnKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHthZGFXYWxsZXQuY29pbigpfS9rZXkvJHthZGFXYWxsZXQua2V5SWRzKClbMF19YCkudGltZXMoMykucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICBwdWI6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJoTkszcmc4MlAxVDk0TWF1ZVhGQWJBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiY1Y0d1U0RXpQanM9XCIsXCJjdFwiOlwiOVZaWDk5WnRzYjZwNzVDeGwybHJjWEJwbG1zc0lBUTlrN1pBODF2ZERZRzRONWRaMzZCUU5XVmZEb2VsajlPMzFYeUorWHJpMFhLSVdVemwwS0tMZlVFUnBsbXROb09DbjVpZkpjWndDck94cEhaUWUzQUo3MDBvOFdtc3JrNUhcIn0nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2FkYVdhbGxldC5jb2luKCl9L2tleS8ke2FkYVdhbGxldC5rZXlJZHMoKVsxXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgIHB1YjogJ0cxczQzSlR6Tlp6cWhVbjRhTnB3Z2NjNndiOUZVc1pRRDVKamZmRzZpc3lkJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiVUZydC9RbElVUjFYZVFhZlBCYUFsdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjdWUEJZYUpYUG04PVwiLFwiY3RcIjpcImFqRkt2Mnk4eWFJQlhRMzlzQWJCV2NuYmlFRXpialM0QW9RdHA1Y1hZcWplRFJ4dDNhQ3hlbVBtMjJwbmtKYUNpakZqSnJNSGJrbXNOaE5ZekhnNWFIRnVrTituRUFWc3N5TndIYnpsaFNubTgvQlZONTB5QWRBQXRXcmVoOGNwXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHthZGFXYWxsZXQuY29pbigpfS9rZXkvJHthZGFXYWxsZXQua2V5SWRzKClbMl19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBwdWI6ICdHSDFMVjFlOUZkcUdlOFUyYzhQTUVjbWEzZkRlaDFrdGNHVkJyRDNBdUZxeCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImlJdVdPSElPRXJFRGRpSm42ZzQ2bWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJSemg3UlJKa3NqMD1cIixcImN0XCI6XCJyY05JQ1VmcDlGYWtUNTNsK2FkQjZYS3pTMXZOVGMwUXE5akF0cW54QStTY3NzaVM0UTBsM3NnRy8wZ0R5NURhWkt0WHJ5S0JEVXZHc2k3Yi9mWWFGQ1VwQW9abi9WWlRPaE9VTi9tbzdaSGI0T2hPWEwyOVlQUGtpcnlBcTlDclwifScsXG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBzZW5kIHVuc3BlbnRzIGluIHBheW1lbnQgaW50ZW50IHdoZW4gdXNpbmcgc2VuZG1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHtcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHVuc3BlbnRzOiBbJ3Vuc3BlbnQxJywgJ3Vuc3BlbnQyJ10sXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHthZGFXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5OiBhbnkpID0+IHtcbiAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGF0IHRoZSBwb3B1bGF0ZWQgaW50ZW50IGhhcyB1bnNwZW50c1xuICAgICAgICAgIGJvZHkuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgICAgYm9keS5pbnRlbnQudW5zcGVudHMuc2hvdWxkLmRlZXBFcXVhbChbJ3Vuc3BlbnQxJywgJ3Vuc3BlbnQyJ10pO1xuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnc2VyaWFsaXplZFR4SGV4JyxcbiAgICAgICAgICAgICAgICAgICAgZmVlSW5mbzogJ2ZlZSBpbmZvJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHN0dWIgYWxsIHN0ZXBzIGFmdGVyIHR4cmVxdWVzdCBjcmVhdGlvblxuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQuYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7IHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnIH0pO1xuICAgICAgc2lub24uc3R1YihCYXNlVHNzVXRpbHMuZGVmYXVsdC5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0JykucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICBhd2FpdCBhZGFXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBzZW5kIHNlbmRlckFkZHJlc3MgaW4gcGF5bWVudCBpbnRlbnQgd2hlbiB1c2luZyBzZW5kbWFueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zID0ge1xuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VuZGVyQWRkcmVzczogJ3NlbmRlckFkZHIxJyxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke2FkYVdhbGxldC5pZCgpfS90eHJlcXVlc3RzYClcbiAgICAgICAgLnJlcGx5KCh1cmwsIGJvZHk6IG5vY2suQm9keSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZVR4UmVxdWVzdEJvZHkgPSBib2R5IGFzIENyZWF0ZVR4UmVxdWVzdEJvZHk7XG4gICAgICAgICAgY3JlYXRlVHhSZXF1ZXN0Qm9keS5pbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgICBjcmVhdGVUeFJlcXVlc3RCb2R5LmludGVudC5zZW5kZXJBZGRyZXNzPy5zaG91bGQuZXF1YWwoJ3NlbmRlckFkZHIxJyk7XG5cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdzZXJpYWxpemVkVHhIZXgnLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmVlIGluZm8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcblxuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQuYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7IHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnIH0pO1xuICAgICAgc2lub24uc3R1YihCYXNlVHNzVXRpbHMuZGVmYXVsdC5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0JykucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICBhd2FpdCBhZGFXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpLnNob3VsZC5iZS5yZXNvbHZlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRVJDMjAgVG9rZW4gQXBwcm92YWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHdhbGxldDtcbiAgICBjb25zdCB3YWxsZXRJZCA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCc7XG4gICAgbGV0IHRvcGV0aENvaW47XG4gICAgY29uc3QgdG9rZW5OYW1lID0gJ3RvcGV0aDp0ZXJjMThkcCc7XG4gICAgY29uc3QgY29pbiA9ICd0b3BldGgnO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB0b3BldGhDb2luID0gYml0Z28uY29pbigndG9wZXRoJyk7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0b3BldGhDb2luLCB7XG4gICAgICAgIGlkOiB3YWxsZXRJZCxcbiAgICAgICAgY29pbjogY29pbixcbiAgICAgICAga2V5czogWydrZXlpZDEnLCAna2V5aWQyJywgJ2tleWlkMyddLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgYXBwcm92ZSBhIHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25lZFR4ID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2c2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2VuZFJlc3VsdCA9IHtcbiAgICAgICAgdHhpZDogJzB4YWJjZGVmJyxcbiAgICAgICAgdHg6ICcweDEyMzQ1NnNpZ25lZCcsXG4gICAgICAgIHN0YXR1czogJ3NpZ25lZCcsXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIGNvbnN0IGV0aFVybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgICAgIG5vY2soZXRoVXJsKS5wb3N0KGAvYXBpL3YyLyR7Y29pbn0vd2FsbGV0LyR7d2FsbGV0SWR9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYCkucmVwbHkoMjAwLCBleHBlY3RlZEFwcHJvdmFsQnVpbGQpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UgbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAna2V5aWQxJyxcbiAgICAgICAgICBwdWI6ICdwdWIxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWRQcnYnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNpZ24gdHJhbnNhY3Rpb24gbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGVjdGVkU2lnbmVkVHgpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzZW5kIHRyYW5zYWN0aW9uIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzZW5kVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBlY3RlZFNlbmRSZXN1bHQpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHJlc3VsdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFNlbmRSZXN1bHQpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHNpZ25UcmFuc2FjdGlvblxuICAgICAgY29uc3Qgc2lnblBhcmFtcyA9IHdhbGxldC5zaWduVHJhbnNhY3Rpb24uZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBzaWduUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFByZWJ1aWxkJywgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcbiAgICAgIHNpZ25QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICBzaWduUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJywgd2FsbGV0UGFzc3BocmFzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUEkgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAndG9rZW4gYXBwcm92YWwgYnVpbGQgZmFpbGVkJztcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJIHRvIHJldHVybiBhbiBlcnJvclxuICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5V2l0aEVycm9yKGVycm9yTWVzc2FnZSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoZXJyb3JNZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHdhbGxldCBwYXNzcGhyYXNlIHZhbGlkYXRpb24gZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd3cm9uZy1wYXNzd29yZCc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseSgyMDAsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZSBtZXRob2QgdG8gdGhyb3cgYW4gZXJyb3JcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgZXJyb3IubmFtZSA9ICd3YWxsZXRfcGFzc3BocmFzZV9pbmNvcnJlY3QnO1xuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZWplY3RzKGVycm9yKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmluZyBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Bhc3N3b3JkMTIzJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkQXBwcm92YWxCdWlsZCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NicsXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduaW5nRXJyb3IgPSBuZXcgRXJyb3IoJ3NpZ25pbmcgZmFpbGVkJyk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSVxuICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5KDIwMCwgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayB0aGUgZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZXNvbHZlcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2tleWlkMScsXG4gICAgICAgICAgcHViOiAncHViMScsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkUHJ2JyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzaWduIHRyYW5zYWN0aW9uIG1ldGhvZCB0byB0aHJvdyBhbiBlcnJvclxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZWplY3RzKHNpZ25pbmdFcnJvcik7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoc2lnbmluZ0Vycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHNlbmQgdHJhbnNhY3Rpb24gZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRTaWduZWRUeCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NnNpZ25lZCcsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VuZEVycm9yID0gbmV3IEVycm9yKCdzZW5kIGZhaWxlZCcpO1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseSgyMDAsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZSBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdrZXlpZDEnLFxuICAgICAgICAgIHB1YjogJ3B1YjEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZFBydicsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgLy8gTW9jayB0aGUgc2lnbiB0cmFuc2FjdGlvbiBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoZXhwZWN0ZWRTaWduZWRUeCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNlbmQgdHJhbnNhY3Rpb24gbWV0aG9kIHRvIHRocm93IGFuIGVycm9yXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NlbmRUcmFuc2FjdGlvbicpLnJlamVjdHMoc2VuZEVycm9yKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChzZW5kRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQW1vdW50IFZhbGlkYXRpb24gZm9yIHNlbmRDb2lucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgd2FsbGV0O1xuICAgIGxldCBwYXJhbXM7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YnRjJyk7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH0pO1xuICAgICAgcGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzOiAnMk40WHo0aXRDZEtLVVJFaXl0RUoxS0dQb0VuS0htSlVJd3EnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAndGVzdDEyMycsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgZGVjaW1hbCBhbW91bnRzIGluIHNlbmQgY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJhbXMuYW1vdW50ID0gMTUwMDAwMDAwLjU1O1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNlbmQocGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gSW50ZWdlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgYW1vdW50IGluIHNlbmQgY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJhbXMuYW1vdW50ID0gJy0xMic7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2VuZChwYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB6ZXJvIGluIHNlbmQgY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJhbXMuYW1vdW50ID0gJzAnO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNlbmQocGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gSW50ZWdlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9rZW4gQXBwcm92YWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGV0aFdhbGxldDtcbiAgICBjb25zdCB0b2tlbk5hbWUgPSAndXNkYyc7XG4gICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0X3Bhc3NwaHJhc2UnO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgYXBwcm92ZSBFUkMyMCB0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzB4MTIzNDU2Nzg5MGFiY2RlZicsXG4gICAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgICBnYXNMaW1pdDogNjAwMDAsXG4gICAgICAgICAgICBub25jZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja1NpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICB0eEhleDogJzB4YWJjZGVmMTIzNDU2Nzg5MCcsXG4gICAgICAgIGhhbGZTaWduZWQ6IHtcbiAgICAgICAgICB0eEhleDogJzB4YWJjZGVmMTIzNDU2Nzg5MCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrU2VudFRyYW5zYWN0aW9uID0ge1xuICAgICAgICBoYXNoOiAnMHg5ODc2NTQzMjEwZmVkY2JhJyxcbiAgICAgICAgc3RhdHVzOiAnc2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIGVuZHBvaW50XG4gICAgICBjb25zdCBidWlsZFNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKVxuICAgICAgICAucmVwbHkoMjAwLCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2VcbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHJ2OiAndGVzdF9wcml2YXRlX2tleScsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgLy8gTW9jayBzaWduVHJhbnNhY3Rpb25cbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMobW9ja1NpZ25lZFRyYW5zYWN0aW9uKTtcblxuICAgICAgLy8gTW9jayBzZW5kVHJhbnNhY3Rpb25cbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnc2VuZFRyYW5zYWN0aW9uJykucmVzb2x2ZXMobW9ja1NlbnRUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV0aFdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKG1vY2tTZW50VHJhbnNhY3Rpb24pO1xuICAgICAgYnVpbGRTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgZmFpbHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkU2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90b2tlbi9hcHByb3ZhbC9idWlsZGApXG4gICAgICAgIC5yZXBseSg0MDAsIHsgZXJyb3I6ICdJbnZhbGlkIHRva2VuIG5hbWUnIH0pO1xuXG4gICAgICBzaW5vbi5zdHViKGV0aFdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgIHBydjogJ3Rlc3RfcHJpdmF0ZV9rZXknLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCAnaW52YWxpZF90b2tlbicpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdG9rZW4gbmFtZScpO1xuXG4gICAgICBidWlsZFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIGFwcHJvdmVFcmMyMFRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZXRoV2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKCcnLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTb2xhbmEgSW5zdHJ1Y3Rpb24gRmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgLy8gU2V0IHVwIHRlc3QgZGF0YSBhbmQgd2FsbGV0c1xuICAgIGNvbnN0IHRzb2wgPSBiaXRnby5jb2luKCd0c29sJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB0c3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB3YWxsZXREYXRhKTtcbiAgICBjb25zdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgfSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScsXG4gICAgICBrZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwdWJrZXk6ICdEZlh5Z1NtNGpDeU5DeWJWWVlLNkR3dldxaktlZThwYkRtSkdjTFdORFhqaCcsXG4gICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHB1YmtleTogJ0VzOXZNRnJ6YUNFUm1KZnJGNEgyRllENEtDb05rWTExTWNDZThCZW53TllCJyxcbiAgICAgICAgICBpc1NpZ25lcjogZmFsc2UsXG4gICAgICAgICAgaXNXcml0YWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0YTogJzNCeHMzenQ2S0s1aE4nLFxuICAgIH07XG5cbiAgICBjb25zdCB0ZXN0UmVjaXBpZW50cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogJ0RmWHlnU200akN5TkN5YlZZWUs2RHd2V3FqS2VlOHBiRG1KR2NMV05EWGpoJyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBkZXNjcmliZSgncHJlYnVpbGRUcmFuc2FjdGlvbiB3aXRoIHNvbEluc3RydWN0aW9uIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBpbnN0cnVjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbEluc3RydWN0aW9uIHdpdGggZW1wdHkgcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBjdXN0b20gaW5zdHJ1Y3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzZWNvbmRJbnN0cnVjdGlvbiA9IHtcbiAgICAgICAgICBwcm9ncmFtSWQ6ICcyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMicsXG4gICAgICAgICAga2V5czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwdWJrZXk6ICdFczl2TUZyemFDRVJtSmZyRjRIMkZZRDRLQ29Oa1kxMU1jQ2U4QmVud05ZQicsXG4gICAgICAgICAgICAgIGlzU2lnbmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiAndGVzdERhdGExMjMnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb24sIHNlY29uZEluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbiwgc2Vjb25kSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbiwgc2Vjb25kSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xJbnN0cnVjdGlvbiB3aXRoIG1lbW8gcGFyYW1ldGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xJbnN0cnVjdGlvbiB3aXRoIHBlbmRpbmcgYXBwcm92YWwgSUQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0LCBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGVtcHR5IHNvbEluc3RydWN0aW9ucyBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYCdzb2xJbnN0cnVjdGlvbnMnIG9yICdzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnIGlzIHJlcXVpcmVkIGZvciBjdXN0b21UeCBpbnRlbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1cHBvcnQgc29sSW5zdHJ1Y3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgdHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkVHJhbnNhY3Rpb24gd2l0aCBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGdldFRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb2dyYW1JZEluZGV4OiAxMCxcbiAgICAgICAgICAgICAgYWNjb3VudEtleUluZGV4ZXM6IFswLCAxLCAyXSxcbiAgICAgICAgICAgICAgZGF0YTogJzAxMDIwMzA0MDUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvZ3JhbUlkSW5kZXg6IDExLFxuICAgICAgICAgICAgICBhY2NvdW50S2V5SW5kZXhlczogWzAsIDMsIDQsIDVdLFxuICAgICAgICAgICAgICBkYXRhOiAnMDYwNzA4MDkwYScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRkcmVzc0xvb2t1cFRhYmxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY2NvdW50S2V5OiAnMnNrNmJWaGpONTNoejdzcUU3MmVxSHZoUGZTYzFzblp6c0pSNnlBNWhGN2onLFxuICAgICAgICAgICAgICB3cml0YWJsZUluZGV4ZXM6IFswLCAxXSxcbiAgICAgICAgICAgICAgcmVhZG9ubHlJbmRleGVzOiBbMiwgM10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQWNjb3VudEtleXM6IFtcbiAgICAgICAgICAgICc1aHI1ZmlzUGk2RFhOdXVScG01WFVienBpRW5tZHl4WHVCRFR3endaajVQZScsXG4gICAgICAgICAgICAnMnNrNmJWaGpONTNoejdzcUU3MmVxSHZoUGZTYzFzblp6c0pSNnlBNWhGN2onLFxuICAgICAgICAgICAgJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1lc3NhZ2VIZWFkZXI6IHtcbiAgICAgICAgICAgIG51bVJlcXVpcmVkU2lnbmF0dXJlczogMSxcbiAgICAgICAgICAgIG51bVJlYWRvbmx5U2lnbmVkQWNjb3VudHM6IDAsXG4gICAgICAgICAgICBudW1SZWFkb25seVVuc2lnbmVkQWNjb3VudHM6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzIGZvciB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgPSBnZXRUZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgd2l0aCBlbXB0eSByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB3aXRoIG1lbW8gcGFyYW1ldGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgd2l0aCBwZW5kaW5nIGFwcHJvdmFsIElEJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh7IC4uLnR4UmVxdWVzdCwgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLCBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnIH0pO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSB2ZXJzaW9uZWRJbnN0cnVjdGlvbnMgYXJyYXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YToge1xuICAgICAgICAgICAgICB2ZXJzaW9uZWRJbnN0cnVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgICBhZGRyZXNzTG9va3VwVGFibGVzOiBbXSxcbiAgICAgICAgICAgICAgc3RhdGljQWNjb3VudEtleXM6IFsndGVzdCddLFxuICAgICAgICAgICAgICBtZXNzYWdlSGVhZGVyOiB7IG51bVJlcXVpcmVkU2lnbmF0dXJlczogMSwgbnVtUmVhZG9ubHlTaWduZWRBY2NvdW50czogMCwgbnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzOiAwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgJ3NvbEluc3RydWN0aW9ucycgb3IgJ3NvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YScgaXMgcmVxdWlyZWQgZm9yIGN1c3RvbVR4IGludGVudGApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBcHRvcyBDdXN0b20gdHJhbnNhY3Rpb24gRmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgLy8gU2V0IHVwIHRlc3QgZGF0YSBhbmQgd2FsbGV0c1xuICAgIGNvbnN0IHRhcHQgPSBiaXRnby5jb2luKCd0YXB0Jyk7XG4gICAgY29uc3QgYXB0b3NXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMScsXG4gICAgICBjb2luOiAndGFwdCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMycsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMycsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkOCcsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IHRzc0FwdG9zV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGFwdCwgYXB0b3NXYWxsZXREYXRhKTtcbiAgICBjb25zdCBjdXN0b2RpYWxUc3NBcHRvc1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRhcHQsIHtcbiAgICAgIC4uLmFwdG9zV2FsbGV0RGF0YSxcbiAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuXG4gICAgY29uc3QgYXB0b3NUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgfSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnYXB0b3NkZWFkYmVlZicsXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwgPSB7XG4gICAgICBtb2R1bGVOYW1lOiAnMHgxOjpjb2luJyxcbiAgICAgIGZ1bmN0aW9uTmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgIHR5cGVBcmd1bWVudHM6IFsnMHgxOjphcHRvc19jb2luOjpBcHRvc0NvaW4nXSxcbiAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbJzB4NzQyZDM1Q2M2NjM0QzA1MzI5MjVhM2I4RDQwMEU2NUFBRDgwMWMwYicsICcxMDAwMDAwJ10sXG4gICAgfTtcblxuICAgIGNvbnN0IHRlc3RBcHRvc1JlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6ICcweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiOEQ0MDBFNjVBQUQ4MDFjMGInLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZFRyYW5zYWN0aW9uIHdpdGggYXB0b3NDdXN0b21UcmFuc2FjdGlvbiB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzIGZvciBjdXN0b20gc21hcnQgY29udHJhY3QgY2FsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoYXB0b3NUeFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb24gd2l0aCBlbXB0eSByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGN1c3RvbSBzbWFydCBjb250cmFjdCBjYWxsIHdpdGggdHlwZSBhcmd1bWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRDcmVhdGlvbkNhbGwgPSB7XG4gICAgICAgICAgbW9kdWxlTmFtZTogJzB4MTo6YXB0b3NfYWNjb3VudCcsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiAnY3JlYXRlX2FjY291bnQnLFxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IFtdLFxuICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbJzB4MTIzZGVmNDU2YWJjNzg5ZmVkMDEyMzQ1YWJjZGVmNjc4OTAnXSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBhY2NvdW50Q3JlYXRpb25DYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGFjY291bnRDcmVhdGlvbkNhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGFjY291bnRDcmVhdGlvbkNhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXB0b3NDdXN0b21UcmFuc2FjdGlvbiB3aXRoIEFCSSBpbmZvcm1hdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ2FsbFdpdGhBYmkgPSB7XG4gICAgICAgICAgLi4udGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIGFiaToge1xuICAgICAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6ICdwdWJsaWMnLFxuICAgICAgICAgICAgaXNfZW50cnk6IHRydWUsXG4gICAgICAgICAgICBnZW5lcmljX3R5cGVfcGFyYW1zOiBbXSxcbiAgICAgICAgICAgIHBhcmFtczogWydhZGRyZXNzJywgJ3U2NCddLFxuICAgICAgICAgICAgcmV0dXJuOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKGFwdG9zVHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGN1c3RvbUNhbGxXaXRoQWJpLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGN1c3RvbUNhbGxXaXRoQWJpLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBjdXN0b21DYWxsV2l0aEFiaSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uIHdpdGggcGVuZGluZyBhcHByb3ZhbCBJRCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoe1xuICAgICAgICAgIC4uLmFwdG9zVHhSZXF1ZXN0LFxuICAgICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ2FwdG9zLWFwcHJvdmFsLWlkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdhcHRvcy1hcHByb3ZhbC1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgbWlzc2luZyBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NBcHRvc1dhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgJ2FwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMnIGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciBjdXN0b21UeCBpbnRlbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1cHBvcnQgYXB0b3NDdXN0b21UcmFuc2FjdGlvbiBmb3IgY29sZCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBhcHRvc1R4UmVxdWVzdC53YWxsZXRUeXBlID0gJ2NvbGQnO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHN0YW5kYXJkIEFwdG9zIHRyYW5zZmVyIHdpdGhvdXQgYnJlYWtpbmcgY3VzdG9tIGZ1bmN0aW9uYWxpdHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHN0YW5kYXJkVHJhbnNmZXJSZXF1ZXN0ID0ge1xuICAgICAgICAgIC4uLmFwdG9zVHhSZXF1ZXN0LFxuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoc3RhbmRhcmRUcmFuc2ZlclJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcyBzdHJ1Y3R1cmUgZm9yIHNtYXJ0IGNvbnRyYWN0IGNhbGxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkUGFyYW1zID0ge1xuICAgICAgICAgIG1vZHVsZU5hbWU6ICcweDE6OmNvaW4nLFxuICAgICAgICAgIC8vIE1pc3NpbmcgcmVxdWlyZWQgZnVuY3Rpb25OYW1lXG4gICAgICAgICAgdHlwZUFyZ3VtZW50czogWycweDE6OmFwdG9zX2NvaW46OkFwdG9zQ29pbiddLFxuICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbJzB4NzQyZDM1Q2M2NjM0QzA1MzI5MjVhM2I4RDQwMEU2NUFBRDgwMWMwYicsICcxMDAwMDAwJ10sXG4gICAgICAgIH0gYXMgYW55OyAvLyBUeXBlIGFzc2VydGlvbiB0byB0ZXN0IGludmFsaWQgcGFyYW1zXG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVqZWN0cyhuZXcgRXJyb3IoJ0Z1bmN0aW9uIG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJykpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBpbnZhbGlkUGFyYW1zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLnNob3VsZC5lcXVhbCgnRnVuY3Rpb24gbmFtZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc2VxdWVuY2VJZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbW1lbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBpbnZhbGlkUGFyYW1zLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmZWVPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cGdyYWRlRW5jcnlwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXRJZCA9IHdhbGxldERhdGEuaWQ7XG4gICAgY29uc3QgW3VzZXJLZXlJZCwgYmFja3VwS2V5SWQsIGJpdGdvS2V5SWRdID0gd2FsbGV0RGF0YS5rZXlzO1xuICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAnd2FsbGV0UGFzc3BocmFzZSc7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQcmV2ZW50IGxlZnRvdmVyIGludGVyY2VwdG9ycyBmcm9tIGJsZWVkaW5nIGludG8gb3RoZXIgc3VpdGVzIGluIHRoZSBmaWxlLlxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbm9ja1VubG9jayh0aW1lcyA9IDEpIHtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvdW5sb2NrJykudGltZXModGltZXMpLnJlcGx5KDIwMCwge30pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vY2tLZXljaGFpbihpZDogc3RyaW5nLCBrZXljaGFpbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7aWR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpZCwgcHViOiAncHViJywgdHlwZTogJ2luZGVwZW5kZW50JywgLi4ua2V5Y2hhaW4gfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ja1BlY0ZldGNoKHBlYzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGJ0Yy93YWxsZXQvJHt3YWxsZXRJZH0vcGFzc2NvZGVyZWNvdmVyeWApXG4gICAgICAgIC5yZXBseSgyMDAsIHsgcmVjb3ZlcnlJbmZvOiB7IHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBlYyB9IH0pO1xuICAgIH1cblxuICAgIGl0KCdyZS1lbmNyeXB0cyBib3RoIHVzZXIgYW5kIGJhY2t1cCBrZXlzIGFuZCBQVVRzIHRoZW0gYXMgdjInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyRW5jIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwRW5jIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICBjb25zdCBwdXRzOiBBcnJheTx7IHVybDogc3RyaW5nOyBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiA9IFtdO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke3VzZXJLZXlJZH1gLCAoYm9keSkgPT4ge1xuICAgICAgICAgIHB1dHMucHVzaCh7IHVybDogdXNlcktleUlkLCBib2R5IH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7YmFja3VwS2V5SWR9YCwgKGJvZHkpID0+IHtcbiAgICAgICAgICBwdXRzLnB1c2goeyB1cmw6IGJhY2t1cEtleUlkLCBib2R5IH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMteHl6JyB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCA9PT0gdW5kZWZpbmVkLCAnbm8gUERGIGdlbmVyYXRvciDihpIgcmV0dXJucyB1bmRlZmluZWQnKTtcbiAgICAgIHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgY29uc3QgdXNlclB1dCA9IHB1dHMuZmluZCgocCkgPT4gcC51cmwgPT09IHVzZXJLZXlJZCkhO1xuICAgICAgSlNPTi5wYXJzZSh1c2VyUHV0LmJvZHkuZW5jcnlwdGVkUHJ2IGFzIHN0cmluZykudi5zaG91bGQuZXF1YWwoMik7XG4gICAgICBKU09OLnBhcnNlKHVzZXJQdXQuYm9keS5vcmlnaW5hbEVuY3J5cHRlZFBydiBhcyBzdHJpbmcpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIG5laXRoZXIgcGFzc3BocmFzZSBub3IgYm94RCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7fSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcGFzc3BocmFzZS4qYm94RC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBmb3IgYW4gTVBDdjIgd2FsbGV0IHdoZW4gYm94QSBvciBib3hCIGFyZSBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXBjV2FsbGV0RGF0YSA9IHsgLi4ud2FsbGV0RGF0YSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyBhcyBjb25zdCB9O1xuICAgICAgY29uc3QgbXBjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIG1wY1dhbGxldERhdGEpO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICAvLyBQRUMgZmV0Y2ggaGFwcGVucyBiZWZvcmUgdGhlIE1QQ3YyIHZhbGlkYXRpb24gc2hvcnQtY2lyY3VpdHMg4oCUIGFsbG93IHRoZSBjYWxsIHRvIG5vb3BcbiAgICAgIG5vY2tQZWNGZXRjaCgncGVjJyk7XG5cbiAgICAgIGF3YWl0IG1wY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL01QQ3YyLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmUtZW5jcnlwdHMgYm94QSBhbmQgYm94QiBhcyByZWR1Y2VkRW5jcnlwdGVkUHJ2IG9uIHRoZSBrZXljaGFpbnMgZm9yIE1QQ3YyIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtcGNXYWxsZXREYXRhID0geyAuLi53YWxsZXREYXRhLCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInIGFzIGNvbnN0IH07XG4gICAgICBjb25zdCBtcGNXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgbXBjV2FsbGV0RGF0YSk7XG4gICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJveEEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUmVkdWNlZFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJveEIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBSZWR1Y2VkUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJFbmMgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBFbmMgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt1c2VyS2V5SWR9YCkucmVwbHkoMjAwLCB7fSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtiYWNrdXBLZXlJZH1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgY2FwdHVyZWRQZGZQYXJhbXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IFtdO1xuICAgICAgY29uc3QgZ2VuZXJhdGVQZGYgPSBhc3luYyAocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICBjYXB0dXJlZFBkZlBhcmFtcy5wdXNoKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7IG91dHB1dDogKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApIH07XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBtcGNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oe1xuICAgICAgICBwYXNzcGhyYXNlLFxuICAgICAgICBib3hBLFxuICAgICAgICBib3hCLFxuICAgICAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyxcbiAgICAgICAgZ2VuZXJhdGVQZGYsXG4gICAgICB9KTtcblxuICAgICAgY2FwdHVyZWRQZGZQYXJhbXMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluIH0gPSBjYXB0dXJlZFBkZlBhcmFtc1swXSBhcyB7XG4gICAgICAgIHVzZXJLZXljaGFpbjogeyByZWR1Y2VkRW5jcnlwdGVkUHJ2Pzogc3RyaW5nIH07XG4gICAgICAgIGJhY2t1cEtleWNoYWluOiB7IHJlZHVjZWRFbmNyeXB0ZWRQcnY/OiBzdHJpbmcgfTtcbiAgICAgIH07XG4gICAgICBhc3NlcnQub2sodXNlcktleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYsICd1c2VyIHJlZHVjZWRFbmNyeXB0ZWRQcnYgbXVzdCBiZSBzZXQnKTtcbiAgICAgIEpTT04ucGFyc2UodXNlcktleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYhKS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIGFzc2VydC5vayhiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LCAnYmFja3VwIHJlZHVjZWRFbmNyeXB0ZWRQcnYgbXVzdCBiZSBzZXQnKTtcbiAgICAgIEpTT04ucGFyc2UoYmFja3VwS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydiEpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NraXBzIGtleWNoYWlucyB0aGF0IGFyZSBhbHJlYWR5IHYyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYyID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cFYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMiB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICBjb25zdCBwdXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgLy8gT25seSB0aGUgYmFja3VwIGtleSBzaG91bGQgYmUgUFVUIOKAlCB1c2VyIGlzIGFscmVhZHkgdjIuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucHV0KG5ldyBSZWdFeHAoYC9hcGkvdjIvdGJ0Yy9rZXkvKCR7dXNlcktleUlkfXwke2JhY2t1cEtleUlkfSlgKSlcbiAgICAgICAgLnJlcGx5KDIwMCwgZnVuY3Rpb24gKHVyaSkge1xuICAgICAgICAgIHB1dHMucHVzaCh1cmkpO1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuXG4gICAgICBwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHB1dHNbMF0uc2hvdWxkLmNvbnRhaW5FcWwoYmFja3VwS2V5SWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYmFja3VwIGtleWNoYWluIHdpdGggbm8gZW5jcnlwdGVkUHJ2IChwdWJsaWMta2V5LW9ubHkpIHdpdGhvdXQgUFVUaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJyB9KTsgLy8gcHVibGljIGtleSBvbmx5XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt1c2VyS2V5SWR9YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlIHdpdGhvdXQgdW5oYW5kbGVkIG5vY2sgZXJyb3IsIHRoZSBmbG93IGNvbXBsZXRlZCB3aXRob3V0IFBVVGluZyB0aGUgYmFja3VwLlxuICAgIH0pO1xuXG4gICAgaXQoJ3JlLWVuY3J5cHRzIGEgYmFja3VwIGtleSBmcm9tIGJveEIgd2l0aG91dCBQVVRpbmcgdG8gdGhlIHNlcnZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBib3hCID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnIH0pOyAvLyBubyBlbmNyeXB0ZWRQcnYgc2VydmVyLXNpZGVcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke3VzZXJLZXlJZH1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgYm94QiwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVyaXZlcyB0aGUgcGFzc3BocmFzZSBmcm9tIGJveEQgd2hlbiBwYXNzcGhyYXNlIGlzIG9taXR0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwZWMgPSAncGVjLWRlcml2ZSc7XG4gICAgICBjb25zdCBkZXJpdmVkUGFzcyA9ICdkZXJpdmVkRnJvbUJveEQnO1xuICAgICAgY29uc3QgYm94RCA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogZGVyaXZlZFBhc3MsIHBhc3N3b3JkOiBwZWMsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBkZXJpdmVkUGFzcywgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBkZXJpdmVkUGFzcywgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tQZWNGZXRjaChwZWMpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5L2ApKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAvLyBObyBwYXNzcGhyYXNlIOKAlCBtdXN0IGJlIGRlcml2ZWQgZnJvbSBib3hELlxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgYm94RCB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWtlcyBubyBQVVQgY2FsbHMgaW4gZHJ5LXJ1biBtb2RlIGFuZCByZXR1cm5zIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgLy8gTm8gdW5sb2NrLCBubyBQRUMsIG5vIFBVVHMgZXhwZWN0ZWQuXG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBkcnlSdW46IHRydWUgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHVubG9jayByZWplY3RzIHdpdGggYW4gZXJyb3IgdW5yZWxhdGVkIHRvIHNlc3Npb24gZHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvdW5sb2NrJykucmVwbHlXaXRoRXJyb3IoJ2ludmFsaWQgT1RQJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvaW52YWxpZCBPVFAvKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9jZWVkcyB3aGVuIHVubG9jayByZXBvcnRzIFwiYWxyZWFkeSB1bmxvY2tlZCBsb25nZXJcIicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9jayhiZ1VybCkucG9zdCgnL2FwaS92MS91c2VyL3VubG9jaycpLnJlcGx5KDQwMSwgeyBlcnJvcjogJ1Nlc3Npb24gYWxyZWFkeSB1bmxvY2tlZCBsb25nZXInIH0pO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5L2ApKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIHRoZSBzdXBwbGllZCBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFuZCBza2lwcyB0aGUgcGFzc2NvZGVyZWNvdmVyeSBmZXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBkbyBOT1Qgbm9jayBwYXNzY29kZXJlY292ZXJ5IOKAlCB0aGUgdGVzdCBmYWlscyBpZiB0aGUgY29kZSB0cmllcyB0byBjYWxsIGl0LlxuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5L2ApKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjLXN1cHBsaWVkJyB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPRkMgd2FsbGV0cyAoMiBrZXlzLCBubyBiYWNrdXApJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb2ZjQ29pbiA9IGJpdGdvLmNvaW4oJ29mYycpO1xuICAgICAgY29uc3Qgb2ZjVXNlcktleUlkID0gJ29mYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJztcbiAgICAgIGNvbnN0IG9mY0JpdGdvS2V5SWQgPSAnb2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDInO1xuICAgICAgY29uc3Qgb2ZjV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICdvZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwd2FsbGV0MScsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBrZXlzOiBbb2ZjVXNlcktleUlkLCBvZmNCaXRnb0tleUlkXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICdob3QnIGFzIGNvbnN0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9mY1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIG9mY1dhbGxldERhdGEgYXMgYW55KTtcblxuICAgICAgZnVuY3Rpb24gbm9ja09mY0tleWNoYWluKGlkOiBzdHJpbmcsIGtleWNoYWluOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtpZH1gKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgaWQsIHB1YjogJ3B1YicsIHR5cGU6ICdpbmRlcGVuZGVudCcsIC4uLmtleWNoYWluIH0pO1xuICAgICAgfVxuXG4gICAgICBpdCgncmUtZW5jcnlwdHMgdGhlIHVzZXIga2V5IGFuZCBza2lwcyBiaXRnbyBrZXkgd2l0aCBubyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY1VzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyRW5jIH0pO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjQml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgICAgY29uc3QgcHV0czogQXJyYXk8eyBpZDogc3RyaW5nOyBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiA9IFtdO1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wdXQoYC9hcGkvdjIvb2ZjL2tleS8ke29mY1VzZXJLZXlJZH1gLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgcHV0cy5wdXNoKHsgaWQ6IG9mY1VzZXJLZXlJZCwgYm9keSB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9mY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgICAgICBwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgICAgcHV0c1swXS5pZC5zaG91bGQuZXF1YWwob2ZjVXNlcktleUlkKTtcbiAgICAgICAgSlNPTi5wYXJzZShwdXRzWzBdLmJvZHkuZW5jcnlwdGVkUHJ2IGFzIHN0cmluZykudi5zaG91bGQuZXF1YWwoMik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3NraXBzIHVzZXIga2V5IGFscmVhZHkgYXQgdjInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJWMiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG5cbiAgICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjVXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMiB9KTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY0JpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICAgIGF3YWl0IG9mY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgICAgICAvLyBObyBQVVRzIGV4cGVjdGVkIOKAlCBub2NrIHdpbGwgZXJyb3IgaWYgYW55IHVuZXhwZWN0ZWQgY2FsbCBpcyBtYWRlLlxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdtYWtlcyBubyBQVVQgY2FsbHMgaW4gZHJ5LXJ1biBtb2RlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjVXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJFbmMgfSk7XG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNCaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvZmNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBkcnlSdW46IHRydWUgfSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
7054
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC92Mi91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLG1CQUFtQjtBQUNuQixFQUFFOztBQUVGLGlDQUFrQztBQUNsQywrQkFBK0I7QUFDL0IsMEJBQXdCO0FBQ3hCLDZCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBRWpDLG1EQThCOEI7QUFFOUIsbURBQWlEO0FBQ2pELHNDQUFxQztBQUNyQyxnREFBZ0Q7QUFDaEQsbUNBQXFDO0FBQ3JDLDJEQUFnRDtBQUNoRCwyREFBZ0Q7QUFFaEQsZ0VBQW9GO0FBRXBGLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQVF6QixRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLFdBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sUUFBUSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxFQUFFLGtDQUFrQztRQUN0QyxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLGtDQUFrQyxFQUFFLGtDQUFrQyxFQUFFLGtDQUFrQyxDQUFDO1FBQ2xILFlBQVksRUFBRSxFQUFFO1FBQ2hCLFlBQVksRUFBRSxTQUFTO1FBQ3ZCLElBQUksRUFBRSxLQUFLO0tBQ1osQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHO1FBQ3JCLEVBQUUsRUFBRSxrQ0FBa0M7UUFDdEMsSUFBSSxFQUFFLE1B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QUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdFLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU1RSxPQUFPLEdBQUcsNENBQTRDLENBQUM7WUFDdkQsMENBQTBDO1lBQzFDLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFFLDBDQUEwQztZQUMxQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RSwwQ0FBMEM7WUFDMUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRSxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6RSxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUz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QUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy8gVGVzdHMgZm9yIFdhbGxldFxuLy9cblxuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICcuLi9saWIvYXNzZXJ0cyc7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge1xuICBCYXNlVHNzVXRpbHMsXG4gIGNvbW1vbixcbiAgRWNkc2EsXG4gIEVDRFNBVXRpbHMsXG4gIEVERFNBVXRpbHMsXG4gIEdldFVzZXJQcnZPcHRpb25zLFxuICBLZXljaGFpbnMsXG4gIEtleVR5cGUsXG4gIE1hbmFnZVVuc3BlbnRzT3B0aW9ucyxcbiAgTUFYX1NPTF9NRVNTQUdFX0JZVEVTLFxuICBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICBNZXNzYWdlVHlwZXMsXG4gIFBvcHVsYXRlZEludGVudCxcbiAgUHJlYnVpbGRUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2VuZE1hbnlPcHRpb25zLFxuICBTaWduYXR1cmVTaGFyZVR5cGUsXG4gIFNpZ25lZE1lc3NhZ2UsXG4gIFNpZ25UeXBlZERhdGFWZXJzaW9uLFxuICBUb2tlblR5cGUsXG4gIFRzc1V0aWxzLFxuICBUeFJlcXVlc3QsXG4gIFR4UmVxdWVzdFZlcnNpb24sXG4gIFR5cGVkRGF0YSxcbiAgVHlwZWRNZXNzYWdlLFxuICBXYWxsZXQsXG4gIFdhbGxldFNpZ25NZXNzYWdlT3B0aW9ucyxcbiAgV2FsbGV0U2lnblR5cGVkRGF0YU9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28gfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdXR4b0xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBUc29sIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvaW4tc29sJztcbmltcG9ydCB7IFRldGggfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29pbi1ldGgnO1xuXG5pbXBvcnQgeyBuZnRSZXNwb25zZSwgdW5zdXBwb3J0ZWROZnRSZXNwb25zZSB9IGZyb20gJy4uL2ZpeHR1cmVzL25mdHMvbmZ0UmVzcG9uc2VzJztcblxucmVxdWlyZSgnc2hvdWxkLXNpbm9uJyk7XG5cbm5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcblxudHlwZSBDcmVhdGVUeFJlcXVlc3RCb2R5ID0ge1xuICBpbnRlbnQ6IFBvcHVsYXRlZEludGVudDtcbiAgYXBpdmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbjtcbiAgcHJldmlldz86IGJvb2xlYW47XG59O1xuXG5kZXNjcmliZSgnVjIgV2FsbGV0OicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IGJhc2Vjb2luOiBhbnkgPSBiaXRnby5jb2luKCd0YnRjJyk7XG4gIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsXG4gICAgY29pbjogJ3RidGMnLFxuICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLCAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLCAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc3MDAwMDAwMDAnXSxcbiAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIHR5cGU6ICdob3QnLFxuICB9O1xuICBjb25zdCBjb2xkV2FsbGV0RGF0YSA9IHtcbiAgICBpZDogJzY1Nzc0NDE5ZmI0ZDk2OTA4NDdmYmU0YjAwMDAwMDAwJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyc2NTc3NDQxMmU1NGI3NTE2MzkzYzlkZjgwMDAwMDAwMCcsICc2NTc3NDQyNDI4NjY0ZmZlNzkxYWY3ZWEwMDAwMDAwMCcsICc2NTc3NDQyYjczMTdhOTQ1NzU2YzJmZDkwMDAwMDAwMCddLFxuICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgdHlwZTogJ2NvbGQnLFxuICB9O1xuICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG4gIGNvbnN0IGNvbGRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgY29sZFdhbGxldERhdGEpO1xuICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgY29uc3QgYWRkcmVzczEgPSAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJztcbiAgY29uc3QgYWRkcmVzczIgPSAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JztcbiAgY29uc3QgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMgPSB7XG4gICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICBjaGFuZ2VBZGRyZXNzVHlwZTogWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXSxcbiAgfTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICBzaW5vbi5yZXNldCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IHRyYW5zZmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNlYXJjaCBpbiB3YWxsZXQgZm9yIGEgdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGxpbWl0OiAxLCBzZWFyY2hMYWJlbDogJ3Rlc3QnIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90cmFuc2ZlcmApXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBjb2luOiAndGJjaCcsXG4gICAgICAgICAgdHJhbnNmZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdhbGxldDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgICAgIGNvbW1lbnQ6ICd0ZXN0cycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuXG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmb3J3YXJkIGFsbCB2YWxpZCBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzMScsICdhZGRyZXNzMiddLFxuICAgICAgICBkYXRlR3RlOiAnZGF0ZVN0cmluZzAnLFxuICAgICAgICBkYXRlTHQ6ICdkYXRlU3RyaW5nMScsXG4gICAgICAgIHZhbHVlR3RlOiAwLFxuICAgICAgICB2YWx1ZUx0OiAzMDAwMDAwMDAsXG4gICAgICAgIGFsbFRva2VuczogdHJ1ZSxcbiAgICAgICAgc2VhcmNoTGFiZWw6ICdhYmMnLFxuICAgICAgICBpbmNsdWRlSGV4OiB0cnVlLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXJfdHlwZScsXG4gICAgICAgIHN0YXRlOiAndHJhbnNmZXJfc3RhdGUnLFxuICAgICAgfTtcblxuICAgICAgLy8gVGhlIGFjdHVhbCBhcGkgcmVxdWVzdCB3aWxsIG9ubHkgc2VuZCBzdHJpbmdzLCBidXQgdGhlIFNESyBmdW5jdGlvbiBleHBlY3RzIG51bWJlcnMgZm9yIHNvbWUgdmFsdWVzXG4gICAgICBjb25zdCBhcGlQYXJhbXMgPSBfLm1hcFZhbHVlcyhwYXJhbXMsIChwYXJhbSkgPT4gKEFycmF5LmlzQXJyYXkocGFyYW0pID8gcGFyYW0gOiBTdHJpbmcocGFyYW0pKSk7XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90cmFuc2ZlcmApXG4gICAgICAgIC5xdWVyeShfLm1hdGNoZXMoYXBpUGFyYW1zKSlcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMocGFyYW1zKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHN0cmluZyBhcmd1bWVudCBmb3IgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbGltaXQ6IDEsXG4gICAgICAgIGFkZHJlc3M6ICdzdHJpbmdBZGRyZXNzJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFwaVBhcmFtcyA9IHtcbiAgICAgICAgbGltaXQ6ICcxJyxcbiAgICAgICAgYWRkcmVzczogJ3N0cmluZ0FkZHJlc3MnLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3RyYW5zZmVyYClcbiAgICAgICAgLnF1ZXJ5KF8ubWF0Y2hlcyhhcGlQYXJhbXMpKVxuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyhwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3JzIGZvciBpbnZhbGlkIGV4cGVjdGVkIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyBhZGRyZXNzOiAxMzM3NSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhZGRyZXNzIGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nIG9yIGFycmF5Jyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGFkZHJlc3M6IFtudWxsXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhZGRyZXNzIGFyZ3VtZW50LCBleHBlY3RpbmcgYXJyYXkgb2YgYWRkcmVzcyBzdHJpbmdzJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGRhdGVHdGU6IDIwMTAxOTA0IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGRhdGVHdGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQudHJhbnNmZXJzKHsgZGF0ZUx0OiAyMDEwMTkwNCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGRhdGVMdCBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICAgIC50cmFuc2ZlcnMoeyB2YWx1ZUd0ZTogJzEwMjMwMDA1JyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCB2YWx1ZUd0ZSBhcmd1bWVudCwgZXhwZWN0aW5nIG51bWJlcicpO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC50cmFuc2ZlcnMoeyB2YWx1ZUx0OiAnLTVlOCcgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCB2YWx1ZUx0IGFyZ3VtZW50LCBleHBlY3RpbmcgbnVtYmVyJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IGluY2x1ZGVIZXg6ICcxMjMnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGluY2x1ZGVIZXggYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLnRyYW5zZmVycyh7IHN0YXRlOiAxMjMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgc3RhdGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcgb3IgYXJyYXknKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgICAudHJhbnNmZXJzKHsgc3RhdGU6IFsxMjMsIDQ1Nl0gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgc3RhdGUgYXJndW1lbnQsIGV4cGVjdGluZyBhcnJheSBvZiBzdGF0ZSBzdHJpbmdzJyk7XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LnRyYW5zZmVycyh7IHR5cGU6IDEyMyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHR5cGUgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZWFyY2ggaW4gd2FsbGV0IGFkZHJlc3NlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbGltaXQ6IDEsIGxhYmVsQ29udGFpbnM6ICd0ZXN0JyB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vYWRkcmVzc2VzYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvaW46ICd0YmNoJyxcbiAgICAgICAgICB0cmFuc2ZlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FsbGV0OiB3YWxsZXQuaWQoKSxcbiAgICAgICAgICAgICAgY29tbWVudDogJ3Rlc3RzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5hZGRyZXNzZXMocGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG5cbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGJjaCBjYXNoYWRkciBmb3JtYXQgYXMgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3RiY2gnKTtcbiAgICBjb25zdCB2YWxpZCA9IGNvaW4uaXNWYWxpZEFkZHJlc3MoJ2JjaHRlc3Q6cHpma3h2NTMydDBxNXpjaGNrMm1obW1mMnkwMmNkZWp5c3NxNXFyejdhJyk7XG4gICAgdmFsaWQuc2hvdWxkLmJlLlRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2ZXJpZnkgYmNoIGxlZ2FjeSBmb3JtYXQgYXMgdmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29pbiA9IGJpdGdvLmNvaW4oJ3RiY2gnKTtcbiAgICBjb25zdCB2YWxpZCA9IGNvaW4uaXNWYWxpZEFkZHJlc3MoJzJONmdZOXI5aXVYUVF6WmlTeW5nV0plb1V1TDVtQzF4NEFjJyk7XG4gICAgdmFsaWQuc2hvdWxkLmJlLlRydWUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RFVEggV2FsbGV0IEFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlYXJjaCBsaXN0IGFkZHJlc3NlcyBzaG91bGQgcmV0dXJuIHN1Y2Nlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGluY2x1ZGVCYWxhbmNlczogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZVRva2VuczogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmFsYW5jZXNGb3JUb2tlbjogJ2d0ZXJjNmRwJyxcbiAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IGZhbHNlLFxuICAgICAgICBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQ6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vYWRkcmVzc2VzYClcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuYWRkcmVzc2VzKHBhcmFtcyk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcnMgZm9yIGludmFsaWQgZXhwZWN0ZWQgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuYWRkcmVzc2VzKHsgaW5jbHVkZUJhbGFuY2VzOiB0cnVlLCByZXR1cm5CYWxhbmNlc0ZvclRva2VuOiAxIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJldHVybkJhbGFuY2VzRm9yVG9rZW4gYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBwZW5kaW5nRGVwbG95bWVudDogMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBwZW5kaW5nRGVwbG95bWVudCBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlQmFsYW5jZXM6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZUJhbGFuY2VzIGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmFkZHJlc3Nlcyh7IGluY2x1ZGVUb2tlbnM6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZVRva2VucyBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5hZGRyZXNzZXMoeyBpbmNsdWRlVG90YWxBZGRyZXNzQ291bnQ6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgaW5jbHVkZVRvdGFsQWRkcmVzc0NvdW50IGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldCBmb3J3YXJkZXIgYmFsYW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZvcndhcmRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnMHhiZmJjYzBmZTJiODY1ZGU4NzcxMzQyNDZhZjA5Mzc4ZTliYzNjOTFkJyxcbiAgICAgICAgICBiYWxhbmNlOiAnMjAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweGU1OTUyNGVkOGI0NzE2NWY0Y2IwODUwYzk0MjgwNjlhNjAwMmU1ZWInLFxuICAgICAgICAgIGJhbGFuY2U6ICcxMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vZm9yd2FyZGVycy9iYWxhbmNlc2ApLnJlcGx5KDIwMCwge1xuICAgICAgICBmb3J3YXJkZXJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcndhcmRlckJhbGFuY2UgPSBhd2FpdCBldGhXYWxsZXQuZ2V0Rm9yd2FyZGVyQmFsYW5jZSgpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzBdLmFkZHJlc3Muc2hvdWxkLmVxbChmb3J3YXJkZXJzWzBdLmFkZHJlc3MpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzBdLmJhbGFuY2Uuc2hvdWxkLmVxbChmb3J3YXJkZXJzWzBdLmJhbGFuY2UpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzFdLmFkZHJlc3Muc2hvdWxkLmVxbChmb3J3YXJkZXJzWzFdLmFkZHJlc3MpO1xuICAgICAgZm9yd2FyZGVyQmFsYW5jZS5mb3J3YXJkZXJzWzFdLmJhbGFuY2Uuc2hvdWxkLmVxbChmb3J3YXJkZXJzWzFdLmJhbGFuY2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnR2V0IFVzZXIgUHJ2JywgKCkgPT4ge1xuICAgIGNvbnN0IHBydiA9XG4gICAgICAneHBydjlzMjFaclFIMTQzSzNoZWt5Tmo3VGNpUjRYTlllMWtNajY4VzJpcGpKR05IRVRXUDdvNDJBakRuU1BnS2hkWjR4OE5CQXZhTDcyUnJYanVYTmRta01xTEVSWnphNzNvWXVnR3RiTEZYRzhnJztcbiAgICBjb25zdCBkZXJpdmVkUHJ2ID1cbiAgICAgICd4cHJ2OXlvRzY3VGQxMXV3alh3YlY4ekVtcnlTVlhFUnU1RlpBc0xEOXN1QmVFSmJnSnFBTnM4WW5nNWRFSm9paTdoYWc1SmVybUs2UGJmeGdEbVN6Vzdld1dlTG1lSkVrbVBmbVpVU0xkRVR0SHgnO1xuICAgIGl0KCdzaG91bGQgdXNlIHRoZSBjb2xkIGRlcml2YXRpb24gc2VlZCB0byBkZXJpdmUgdGhlIHByb3BlciB1c2VyIHByaXZhdGUga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnMgPSB7XG4gICAgICAgIHBydixcbiAgICAgICAgY29sZERlcml2YXRpb25TZWVkOiAnMTIzJyxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgdGhlIHVzZXIga2V5Y2hhaW4gZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBhcyB0aGUgY29sZCBkZXJpdmF0aW9uIHNlZWQgaWYgbm9uZSBpcyBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcnZPcHRpb25zOiBHZXRVc2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGlkOiAnNDU2JyxcbiAgICAgICAgICBwdWI6ICc3ODknLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgKGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHVzZXJQcnZPcHRpb25zKSkuc2hvdWxkLmVxbChkZXJpdmVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlZmVyIHRoZSBleHBsaWNpdCBjb2xkIGRlcml2YXRpb24gc2VlZCB0byB0aGUgdXNlciBrZXljaGFpbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlclBydk9wdGlvbnM6IEdldFVzZXJQcnZPcHRpb25zID0ge1xuICAgICAgICBwcnYsXG4gICAgICAgIGNvbGREZXJpdmF0aW9uU2VlZDogJzEyMycsXG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzQ1NicsXG4gICAgICAgICAgaWQ6ICc3ODknLFxuICAgICAgICAgIHB1YjogJzAxMicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKGRlcml2ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHBydiBwcm92aWRlZCBmb3IgVFNTIFNNQycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRzc1dhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgICBjb2luOiAndHNvbCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0c29sY29pbjogYW55ID0gYml0Z28uY29pbigndHNvbCcpO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbGNvaW4sIHRzc1dhbGxldERhdGEpO1xuICAgICAgY29uc3QgcHJ2ID0gJ2xvbmdzdHJpbmdpZmllZGpzb24nO1xuICAgICAgY29uc3Qga2V5Y2hhaW4gPSB7XG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdyYW5kb20gc2VlZCcsXG4gICAgICAgIGlkOiAnMTIzJyxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdsb25nc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgS2V5VHlwZSxcbiAgICAgIH07XG4gICAgICBjb25zdCB1c2VyUHJ2T3B0aW9ucyA9IHtcbiAgICAgICAgcHJ2LFxuICAgICAgICBrZXljaGFpbixcbiAgICAgIH07XG4gICAgICAoYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYodXNlclBydk9wdGlvbnMpKS5zaG91bGQuZXFsKHBydik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdURVRIIFdhbGxldCBUcmFuc2FjdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGV0aFdhbGxldDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlcnJvciBlaXAxNTU5IGFuZCBnYXNQcmljZSBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBnYXNQcmljZTogMTAwLFxuICAgICAgICBlaXAxNTU5OiB7XG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwLFxuICAgICAgICAgIG1heEZlZVBlckdhczogMTAsXG4gICAgICAgIH0sXG4gICAgICAgIGFtb3VudDogMTAsXG4gICAgICAgIGFkZHJlc3M6IFRlc3RCaXRHby5WMi5URVNUX1dBTExFVDFfQUREUkVTUyxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfV0FMTEVUMV9QQVNTQ09ERSxcbiAgICAgIH07XG4gICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZChwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZWFyY2ggZm9yIHBlbmRpbmcgdHJhbnNhY3Rpb24gY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyB3YWxsZXRJZDogd2FsbGV0LmlkKCkgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS90eC9wZW5kaW5nL2ZpcnN0YCkucXVlcnkocGFyYW1zKS5yZXBseSgyMDApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmdldEZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKCk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBmZWUgY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyB0eGlkOiAnMHhmZmZmZmZmZicsIGZlZTogJzEwMDAwMDAwJyB9O1xuXG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvY2hhbmdlRmVlYCwgcGFyYW1zKS5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuY2hhbmdlRmVlKHsgdHhpZDogJzB4ZmZmZmZmZmYnLCBmZWU6ICcxMDAwMDAwMCcgfSk7XG4gICAgICAgIHRocm93ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0cnkgdG8gY2hhbmdlIHRoZSBmZWUgY29ycmVjdGx5IHVzaW5nIGVpcDE1NTknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4aWQ6ICcweGZmZmZmZmZmJyxcbiAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMjUwMDAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2NoYW5nZUZlZWAsIHBhcmFtcykucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmNoYW5nZUZlZShwYXJhbXMpO1xuICAgICAgICB0aHJvdyAnJztcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBkYXRhIHBhcmFtZXRlciBhbmQgYW1vdW50OiAwIHdoZW4gdXNpbmcgc2VuZFRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHg3ZGI1NjJjNGRkNDY1Y2M4OTU3NjFjNTZmODNiNmFmMGUzMjY4OWJhJztcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICBkYXRhOiAnMHgwMDExMDAxMScsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyByZWNpcGllbnRzIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgICBjb25zdCBub2NrS2V5Q2hhaW4gPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kKHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgZGF0YTogcmVjaXBpZW50c1swXS5kYXRhLFxuICAgICAgICAgIGFtb3VudDogcmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBub2NrS2V5Q2hhaW4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBkYXRhIHBhcmFtZXRlciBhbmQgYW1vdW50OiAwIHdoZW4gdXNpbmcgc2VuZE1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICAgIGRhdGE6ICcweDAwMTEwMDExJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IG5vY2tLZXlDaGFpbiA9IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L2tleS8ke2V0aFdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHsgcmVjaXBpZW50cyB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWQsIEhNQUMgZXJyb3JzIGV4cGVjdGVkXG4gICAgICB9XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbm9ja0tleUNoYWluLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBwYXNzIHJlY2lwaWVudHMgaW4gc2VuZE1hbnkgd2hlbiB0cmFuc2FjdGlvbiB0eXBlIGlzIGZpbGxOb25jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHg3ZGI1NjJjNGRkNDY1Y2M4OTU3NjFjNTZmODNiNmFmMGUzMjY4OWJhJztcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHsgcmVjaXBpZW50cywgdHlwZTogJ2ZpbGxOb25jZScsIGlzVHNzOiB0cnVlLCBub25jZTogJzEzJyB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKCdjYW5ub3QgcHJvdmlkZSByZWNpcGllbnRzIGZvciB0cmFuc2FjdGlvbiB0eXBlIGZpbGxOb25jZScpO1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHBhc3MgcmVjZWl2ZUFkZHJlc3MgaW4gc2VuZE1hbnkgd2hlbiBUU1MgdHJhbnNhY3Rpb24gdHlwZSBpcyB0cmFuc2ZlciBvciB0cmFuc2ZlclRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdjYW5ub3QgdXNlIHJlY2VpdmUgYWRkcmVzcyBmb3IgVFNTIHRyYW5zYWN0aW9ucyBvZiB0eXBlIHRyYW5zZmVyJztcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zUmVjZWl2ZUFkZHJlc3NFcnJvciA9IHtcbiAgICAgICAgcmVjZWl2ZUFkZHJlc3M6ICd0aHJvdycsXG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICBub25jZTogJzEzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHsgcmVjaXBpZW50cywgdHlwZTogJ3RyYW5zZmVyJywgaXNUc3M6IHRydWUsIG5vbmNlOiAnMTMnIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtc1JlY2VpdmVBZGRyZXNzRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueShzZW5kTWFueVBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGVhcmx5IGlmIHBhc3N3b3JkIGlzIHdyb25nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnO1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiAwLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGB1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZWA7XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlID0ge1xuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgbm9uY2U6ICcxMycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgIH07XG4gICAgICBjb25zdCBub2NrS2V5Y2hhaW4gPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0va2V5LyR7ZXRoV2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC50aW1lcygyKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgyNmExNjNiYTk3Mzk1Mjk3MjBjMDkxNGM1ODM4NjVkZWMwZDM3Mjc4JyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTWFueSh7IC4uLnNlbmRNYW55UGFyYW1zQ29ycmVjdFBhc3NQaHJhc2UsIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZ1Bhc3NwaHJhc2UnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGVycm9yTWVzc2FnZSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gJ21vY2snO1xuICAgICAgICB9O1xuICAgICAgICAvLyBTaG91bGQgbm90IHZhbGlkYXRlIHBhc3NwaHJhc2UgaWYgY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gaXMgcHJvdmlkZWRcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnNlbmRNYW55KHtcbiAgICAgICAgICAuLi5zZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICd3cm9uZ1Bhc3NwaHJhc2UnLFxuICAgICAgICAgIGN1c3RvbVNpZ25pbmdGdW5jdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQubm90LmVxdWFsKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQuc2VuZE1hbnkoeyAuLi5zZW5kTWFueVBhcmFtc0NvcnJlY3RQYXNzUGhyYXNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLm5vdC5lcXVhbChlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgbm9ja0tleWNoYWluLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgd3JhcFBhcmFtcyB0byAvdHgvYnVpbGQgd2hlbiBwcmVidWlsZGluZyB3cmFwQXBwcm92ZSBvbiBhbiBvbmNoYWluIG11bHRpLXNpZyB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3cmFwUGFyYW1zID0geyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzEwMDAwMDAnIH07XG4gICAgICBjb25zdCBidWlsZE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90eC9idWlsZGAsIChib2R5KSA9PiB7XG4gICAgICAgICAgYm9keS50eXBlLnNob3VsZC5lcXVhbCgnd3JhcEFwcHJvdmUnKTtcbiAgICAgICAgICBib2R5LndyYXBQYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh3cmFwUGFyYW1zKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KGJvZHkucmVjaXBpZW50cyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdHhIZXg6ICcweGZha2V0eGhleCcsIGZlZUluZm86IHsgZmVlOiAnMTAwMCcgfSB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyB0eXBlOiAnd3JhcEFwcHJvdmUnLCB3cmFwUGFyYW1zIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGZha2UgcHJlYnVpbGQgbWF5IGZhaWw7IHRoZSBjb250cmFjdCB1bmRlciB0ZXN0IGlzIHRoZSByZXF1ZXN0IGJvZHlcbiAgICAgIH1cbiAgICAgIGJ1aWxkTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIHVud3JhcFBhcmFtcyB0byAvdHgvYnVpbGQgd2hlbiBwcmVidWlsZGluZyB1bndyYXAgb24gYW4gb25jaGFpbiBtdWx0aS1zaWcgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdW53cmFwUGFyYW1zID0geyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzEwMDAwMDAnIH07XG4gICAgICBjb25zdCBidWlsZE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90eC9idWlsZGAsIChib2R5KSA9PiB7XG4gICAgICAgICAgYm9keS50eXBlLnNob3VsZC5lcXVhbCgndW53cmFwJyk7XG4gICAgICAgICAgYm9keS51bndyYXBQYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh1bndyYXBQYXJhbXMpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QoYm9keS5yZWNpcGllbnRzKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0eEhleDogJzB4ZmFrZXR4aGV4JywgZmVlSW5mbzogeyBmZWU6ICcxMDAwJyB9IH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHR5cGU6ICd1bndyYXAnLCB1bndyYXBQYXJhbXMgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZmFrZSBwcmVidWlsZCBtYXkgZmFpbDsgdGhlIGNvbnRyYWN0IHVuZGVyIHRlc3QgaXMgdGhlIHJlcXVlc3QgYm9keVxuICAgICAgfVxuICAgICAgYnVpbGROb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBwYXNzIHJlY2lwaWVudHMgaW4gc2VuZE1hbnkgd2hlbiB0cmFuc2FjdGlvbiB0eXBlIGlzIGZpbmFsaXplVW53cmFwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweDdkYjU2MmM0ZGQ0NjVjYzg5NTc2MWM1NmY4M2I2YWYwZTMyNjg5YmEnLFxuICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV0aFdhbGxldC5zZW5kTWFueSh7IHJlY2lwaWVudHMsIHR5cGU6ICdmaW5hbGl6ZVVud3JhcCcgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZS5zaG91bGQuZXF1YWwoJ2Nhbm5vdCBwcm92aWRlIHJlY2lwaWVudHMgZm9yIHRyYW5zYWN0aW9uIHR5cGUgZmluYWxpemVVbndyYXAnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ09GQyBDcmVhdGUgQWRkcmVzcycsICgpID0+IHtcbiAgICBsZXQgb2ZjV2FsbGV0OiBXYWxsZXQ7XG4gICAgbGV0IG5vY2tzO1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXREYXRhT2ZjID0ge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDBiMDAwMDAwMDAnLFxuICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzgwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3OTAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTgwMDAwMDAwMDAnLFxuICAgICAgICBdLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgIH07XG4gICAgICBvZmNXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCdvZmMnKSwgd2FsbGV0RGF0YU9mYyk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tzID0gW1xuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvb2ZjL2tleS8ke29mY1dhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogb2ZjV2FsbGV0LmtleUlkcygpWzBdLFxuICAgICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGWERjV0Qydnh1ZWJjVDFacFRGNFZrZTZxbU1XOHl6ZGR3TllwQVBqdllFRUw1akxmeVlYVzJmdXh0QXhZOFRnalBVSkxjZjFDOHF6OU42VmdaeEFyS1g0RXdCOHJINScsXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNXYWxsZXQua2V5SWRzKClbMV19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IG9mY1dhbGxldC5rZXlJZHMoKVsxXSxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjR2hTYVhpa3B1VEM5S1U4OFh4OUxyaktTdzFKS3N2WE5nYWJwVGRnank3TFNvdmg5WkhoY3FoQUhRdTd1dGh1N0ZndU5HZGNDNGFYVEtLNWdxVGNQZTRXdkxZUmJDU0cnLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtvZmNXYWxsZXQua2V5SWRzKClbMl19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IG9mY1dhbGxldC5rZXlJZHMoKVsyXSxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnNYU2hXOFIzaEpzSE5UWVRVd3pjZWpuTGtZN0tDdGFKYkRxY0drY0JGOTlCckVKU2pOWkhlSHZlaVlVcnNBZHdualVNR3dwZ21FYmlLY1pXUnVWQTlIeG5SYUEzcjMnLFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgbm9ja3MuZm9yRWFjaCgoc2NvcGUpID0+IHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgdmFsaWRhdGUgYXJndW1lbnRzIHRvIGNyZWF0ZSBhZGRyZXNzIG9uIE9GQyB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBvZmNXYWxsZXQuY3JlYXRlQWRkcmVzcygpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ29uVG9rZW4gaXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIGZvciBPRkMgd2FsbGV0cycpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0ZXN0IHBhc3NpbmcgaW52YWxpZCBudW1iZXIgYXJndW1lbnRcbiAgICAgIGF3YWl0IG9mY1dhbGxldC5jcmVhdGVBZGRyZXNzKHsgb25Ub2tlbjogNDIgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnb25Ub2tlbiBoYXMgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRyZXNzIGNyZWF0aW9uIHdpdGggdmFsaWQgb25Ub2tlbiBhcmd1bWVudCBzdWNjZWVkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvb2ZjL3dhbGxldC8ke29mY1dhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBvblRva2VuOiAnb2ZjdGJ0YycgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjM4YTQ4YzZjM2RiYTQwMDA3YTM0OTdmYTQ5YTA4MGMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdnZW5lcmF0ZWQgYWRkcmVzcycsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDEsXG4gICAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICAgIHdhbGxldDogb2ZjV2FsbGV0LmlkLFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCBvZmNXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IG9uVG9rZW46ICdvZmN0YnRjJyB9KTtcbiAgICAgIGFkZHJlc3MuYWRkcmVzcy5zaG91bGQuZXF1YWwoJ2dlbmVyYXRlZCBhZGRyZXNzJyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVEVUSCBDcmVhdGUgQWRkcmVzcycsICgpID0+IHtcbiAgICBsZXQgZXRoV2FsbGV0LCBub2NrcztcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgfSxcbiAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGV0aCcpLCB3YWxsZXREYXRhKTtcbiAgICAgIG5vY2tzID0gW1xuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHgyNmExNjNiYTk3Mzk1Mjk3MjBjMDkxNGM1ODM4NjVkZWMwZDM3Mjc4JyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcIjE1RnNiRFZJMXpHOU9nZ0Q4WVgrSGc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJoSGJOSDNTei9hVT1cIixcImN0XCI6XCJXb05WS3o3YWZpUnhYSTJ3L1lrek1kTXlvUWcvQjE1dTFROGFRZ2k5NmpKWjl3azZUSWFTRWM2YlhGSDNBSHpEOU1kSkNXSlFVcFJob1FjL3JneXRjbjY5c2NQVGpLZWV5Vk1FbEdDeFpkRlZTL3BzUWNORStsdWUzLy8yWmx4ais2dDFOa3ZZTys4eUFlelNNUkJLNU9kZnRYRWpOUUk9XCJ9JyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcblxuICAgICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS9rZXkvJHtldGhXYWxsZXQua2V5SWRzKClbMV19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0doU2FYaWtwdVRDOUtVODhYeDlMcmpLU3cxSktzdlhOZ2FicFRkZ2p5N0xTb3ZoOVpIaGNxaEFIUXU3dXRodTdGZ3VOR2RjQzRhWFRLSzVncVRjUGU0V3ZMWVJiQ1NHJyxcbiAgICAgICAgICBldGhBZGRyZXNzOiAnMHhhMWE4OGE1MDIyNzQwNzNiMWJjNGZlMDZlYTBmNWZlNzdlMTUxYjkxJyxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L2tleS8ke2V0aFdhbGxldC5rZXlJZHMoKVsyXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnNYU2hXOFIzaEpzSE5UWVRVd3pjZWpuTGtZN0tDdGFKYkRxY0drY0JGOTlCckVKU2pOWkhlSHZlaVlVcnNBZHdualVNR3dwZ21FYmlLY1pXUnVWQTlIeG5SYUEzcjMnLFxuICAgICAgICAgIGV0aEFkZHJlc3M6ICcweDAzMjgyMWI3ZWE0MGVhNWQ0NDZmNDdjMjlhMGY3NzdlZTAzNWFhMTAnLFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgbm9ja3MuZm9yRWFjaCgoc2NvcGUpID0+IHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgdmFsaWRhdGUgYXJndW1lbnRzIHRvIGNyZWF0ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSAnZ2FzUHJpY2UgaGFzIHRvIGJlIGFuIGludGVnZXIgb3IgbnVtZXJpYyBzdHJpbmcnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGdhc1ByaWNlOiB7fSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBnYXNQcmljZTogJ2FiYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBnYXNQcmljZTogbnVsbCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuXG4gICAgICBtZXNzYWdlID0gJ2NoYWluIGhhcyB0byBiZSBhbiBpbnRlZ2VyJztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogJ2FiYycgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogbnVsbCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuXG4gICAgICBtZXNzYWdlID0gJ2NvdW50IGhhcyB0byBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDI1MCc7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6IHt9IH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6ICdhYmMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY291bnQ6IC0xIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAwIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgobWVzc2FnZSk7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNvdW50OiAyNTEgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdiYXNlQWRkcmVzcyBoYXMgdG8gYmUgYSBzdHJpbmcnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGJhc2VBZGRyZXNzOiB7fSB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGJhc2VBZGRyZXNzOiAxMjMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBiYXNlQWRkcmVzczogbnVsbCB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuXG4gICAgICBtZXNzYWdlID0gJ2FsbG93U2tpcFZlcmlmeUFkZHJlc3MgaGFzIHRvIGJlIGEgYm9vbGVhbic7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgYWxsb3dTa2lwVmVyaWZ5QWRkcmVzczoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiAxMjMgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoeyBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiAnYWJjJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKG1lc3NhZ2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja2luZyB0eXBlIG1pc21hdGNoXG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGFsbG93U2tpcFZlcmlmeUFkZHJlc3M6IG51bGwgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcblxuICAgICAgbWVzc2FnZSA9ICdmb3J3YXJkZXJWZXJzaW9uIGhhcyB0byBiZSBhbiBpbnRlZ2VyIDAsIDEsIDIsIDMsIDQgb3IgNSc7XG4gICAgICBhd2FpdCB3YWxsZXQuY3JlYXRlQWRkcmVzcyh7IGZvcndhcmRlclZlcnNpb246IDYgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHdhbGxldC5jcmVhdGVBZGRyZXNzKHsgZm9yd2FyZGVyVmVyc2lvbjogLTEgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRyZXNzIGNyZWF0aW9uIHdpdGggZm9yd2FyZGVyIHZlcnNpb24gMyBzdWNjZWVkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDMgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjM4YTQ4YzZjM2RiYTQwMDA3YTM0OTdmYTQ5YTA4MGMnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDVlNjFiNjRmMzhmMWI1Zjg1MDc4ZmI4NGIyNzM5NDgzMGI0YzhlODAnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0cG9seWdvbicsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzYzNzg1Zjk1YWY3Yzc2MDAwN2NmYWUwNjhjMmYzMWFlJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIyLTEyLTAyVDE4OjQ5OjQyLjM0OFonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHgxJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMyxcbiAgICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IGV0aFdhbGxldC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDMgfSk7XG4gICAgICBhZGRyZXNzLmNvaW5TcGVjaWZpYy5mb3J3YXJkZXJWZXJzaW9uLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcmVzcyBjcmVhdGlvbiB3aXRoIGZvcndhcmRlciB2ZXJzaW9uIDMgZmFpbHMgZHVlIGludmFsaWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnMHg1ZTYxYjYnOyAvLyBpbnZhbGlkIGFkZHJlc3NcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAzIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYzOGE0OGM2YzNkYmE0MDAwN2EzNDk3ZmE0OWEwODBjJyxcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvaW46ICd0cG9seWdvbicsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzYzNzg1Zjk1YWY3Yzc2MDAwN2NmYWUwNjhjMmYzMWFlJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIyLTEyLTAyVDE4OjQ5OjQyLjM0OFonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHgxJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMyxcbiAgICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDMgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHJlc3MgY3JlYXRpb24gd2l0aCBmb3J3YXJkZXIgdmVyc2lvbiAyIHN1Y2NlZWRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2V0aFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS9hZGRyZXNzYCwgeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMiB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6ICc2MzhhNDhjNmMzZGJhNDAwMDdhMzQ5N2ZhNDlhMDgwYycsXG4gICAgICAgICAgYWRkcmVzczogJzB4NWU2MWI2NGYzOGYxYjVmODUwNzhmYjg0YjI3Mzk0ODMwYjRjOGU4MCcsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDEsXG4gICAgICAgICAgY29pbjogJ3Rwb2x5Z29uJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNjM3ODVmOTVhZjdjNzYwMDA3Y2ZhZTA2OGMyZjMxYWUnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjItMTItMDJUMTg6NDk6NDIuMzQ4WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDIsXG4gICAgICAgICAgICBpc1RzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCBldGhXYWxsZXQuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAyIH0pO1xuICAgICAgYWRkcmVzcy5jb2luU3BlY2lmaWMuZm9yd2FyZGVyVmVyc2lvbi5zaG91bGQuZXF1YWwoMik7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdoZW4gcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb24gaXMgdHJ1ZSBpbiBjYXNlIG9mIGV0aCB2MSBmb3J3YXJkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHg4YzEzY2QwYmIxOTg4NThmNjI4ZDU2MzFiYTRiMjI5M2ZjMDhkZjQ5JyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ2FkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAweDMyYTIyNmNkYTE0ZTM1MmE0N2JmNGIxNjU4NjQ4ZDgwMzc3MzZmODAgYnV0IGdvdCAweDhjMTNjZDBiYjE5ODg1OGY2MjhkNTYzMWJhNGIyMjkzZmMwOGRmNDknXG4gICAgICAgICk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdoZW4gaW52YWxpZCBiYXNlQWRkcmVzcyBpcyBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5jcmVhdGVBZGRyZXNzKHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEsIGJhc2VBZGRyZXNzOiAnYXNnZicgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgYmFzZSBhZGRyZXNzJyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdoZW4gaW5jb3JyZWN0IGJhc2VBZGRyZXNzIGlzIHBhc3NlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDEgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjE1YzY0M2E5OGEyYTEwMDA2OGUwMjNjNjM5YzBmNzQnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDMyYTIyNmNkYTE0ZTM1MmE0N2JmNGIxNjU4NjQ4ZDgwMzc3MzZmODAnLFxuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMzE3OSxcbiAgICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgICAgbGFzdE5vbmNlOiAwLFxuICAgICAgICAgIHdhbGxldDogJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkYjFkOTQ1OWJiJyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIG5vbmNlOiAtMSxcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6ICcyMDIxLTEwLTA1VDE0OjQyOjAyLjM5OVonLFxuICAgICAgICAgICAgdHhDb3VudDogMCxcbiAgICAgICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRpb25GYWlsdXJlOiBbXSxcbiAgICAgICAgICAgIHNhbHQ6ICcweGM2YicsXG4gICAgICAgICAgICBwZW5kaW5nRGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZvcndhcmRlclZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAvLyBpbmNvcnJlY3QgYWRkcmVzcyBpcyBnZW5lcmF0ZWQgd2hpbGUgdmFsaWRhdGluZyBkdWUgdG8gaW5jb3JyZWN0IGJhc2VBZGRyZXNzXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLmNyZWF0ZUFkZHJlc3MoeyBjaGFpbjogMCwgZm9yd2FyZGVyVmVyc2lvbjogMSwgYmFzZUFkZHJlc3M6ICcweDhjMTNjZDBiYjE5ODg1OGY2MjhkNTYzMWJhNGIyMjkzZmMwOGRmNDknIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgMHgzNjc0ODkyNjAwNzc5MGU3ZWU0MTZjNjQ4NWIzMmUwMGNmYjE3N2EzIGJ1dCBnb3QgMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJ1xuICAgICAgICApO1xuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd2ZXJpZnkgYWRkcmVzcyB3aGVuIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uIGlzIHRydWUgIGFuZCBhbGxvd1NraXBWZXJpZnlBZGRyZXNzIGlzIGZhbHNlIGluIGNhc2Ugb2YgZXRoIHYwIGZvcndhcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vYWRkcmVzc2AsIHsgY2hhaW46IDAsIGZvcndhcmRlclZlcnNpb246IDAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiAnNjE1YzY0M2E5OGEyYTEwMDA2OGUwMjNjNjM5YzBmNzQnLFxuICAgICAgICAgIGFkZHJlc3M6ICcweDMyYTI2Y2RhMTRlMzUyYTQ3YmY0YjE2NTg2NDhkODAzNzczNmY4MCcsXG4gICAgICAgICAgYmFzZUFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAzMTc5LFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBsYXN0Tm9uY2U6IDAsXG4gICAgICAgICAgd2FsbGV0OiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgbm9uY2U6IC0xLFxuICAgICAgICAgICAgdXBkYXRlVGltZTogJzIwMjEtMTAtMDVUMTQ6NDI6MDIuMzk5WicsXG4gICAgICAgICAgICB0eENvdW50OiAwLFxuICAgICAgICAgICAgcGVuZGluZ0NoYWluSW5pdGlhbGl6YXRpb246IHRydWUsXG4gICAgICAgICAgICBjcmVhdGlvbkZhaWx1cmU6IFtdLFxuICAgICAgICAgICAgc2FsdDogJzB4YzZiJyxcbiAgICAgICAgICAgIHBlbmRpbmdEZXBsb3ltZW50OiB0cnVlLFxuICAgICAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IGV0aFdhbGxldFxuICAgICAgICAuY3JlYXRlQWRkcmVzcyh7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAwLCBhbGxvd1NraXBWZXJpZnlBZGRyZXNzOiBmYWxzZSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnYWRkcmVzcyB2ZXJpZmljYXRpb24gc2tpcHBlZCBmb3IgY291bnQgPSAxJyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhZGRyZXNzIHdpdGggYWxsb3dTa2lwVmVyaWZ5QWRkcmVzcyBzZXQgdG8gZmFsc2UgYW5kIGV0aCB2MSBmb3J3YXJkZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L2FkZHJlc3NgLCB7IGNoYWluOiAwLCBmb3J3YXJkZXJWZXJzaW9uOiAxIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBpZDogJzYxNWM2NDNhOThhMmExMDAwNjhlMDIzYzYzOWMwZjc0JyxcbiAgICAgICAgICBhZGRyZXNzOiAnMHgzMmEyMjZjZGExNGUzNTJhNDdiZjRiMTY1ODY0OGQ4MDM3NzM2ZjgwJyxcbiAgICAgICAgICBiYXNlQWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgICAgY2hhaW46IDAsXG4gICAgICAgICAgaW5kZXg6IDMxNzksXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICAgIGxhc3ROb25jZTogMCxcbiAgICAgICAgICB3YWxsZXQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgICBub25jZTogLTEsXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiAnMjAyMS0xMC0wNVQxNDo0MjowMi4zOTlaJyxcbiAgICAgICAgICAgIHR4Q291bnQ6IDAsXG4gICAgICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmFpbHVyZTogW10sXG4gICAgICAgICAgICBzYWx0OiAnMHhjNmInLFxuICAgICAgICAgICAgcGVuZGluZ0RlcGxveW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3QWRkcmVzcyA9IGF3YWl0IGV0aFdhbGxldC5jcmVhdGVBZGRyZXNzKHtcbiAgICAgICAgY2hhaW46IDAsXG4gICAgICAgIGZvcndhcmRlclZlcnNpb246IDEsXG4gICAgICAgIGFsbG93U2tpcFZlcmlmeUFkZHJlc3M6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBuZXdBZGRyZXNzLmluZGV4LnNob3VsZC5lcXVhbCgzMTc5KTtcbiAgICAgIHNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBbGdvcmFuZCB0ZXN0cycsICgpID0+IHtcbiAgICBsZXQgYWxnb1dhbGxldDogV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoaXMgaXMgbm90IGEgcmVhbCBUQUxHTyB3YWxsZXRcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNjUwMjA0Y2Y0M2Q4YjQwMDA3Y2Q5ZTExYTg3MmNlNjUnLFxuICAgICAgICBjb2luOiAndGFsZ28nLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzY1MDIwNGI3OGE3NWM5MDAwNzc5MGJjZTk3OWFlMzRkJyxcbiAgICAgICAgICAnNjUwMjA0Yjc2NmM1NmEwMDA3Mjk1NmMwOGZiOWNkZjEnLFxuICAgICAgICAgICc2NTAyMDRiOGNjZjEzNzAwMDdiMzJiYjgxNTVkZmJlYycsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHJvb3RBZGRyZXNzOiAnMlVMUkdFNjRVN0xUTVQ1TTZSRUI3T1JIWDVHTEpZV0hUSVY1RUFYVkxXUVRUQVRWSkRHTTVLSk1JSScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYWxnb1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RhbGdvJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBidWlsZCB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3RhbGdvOlVTRHQtMTgwNDQ3JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke2FsZ29XYWxsZXQuY29pbigpfS93YWxsZXQvJHthbGdvV2FsbGV0LmlkKCl9L3R4L2J1aWxkYClcbiAgICAgICAgLnJlcGx5KCh1cmksIGJvZHkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBib2R5IGFzIGFueTtcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICAgIHBhcmFtcy5yZWNpcGllbnRzWzBdLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ3RhbGdvOlVTRHQtMTgwNDQ3Jyk7XG4gICAgICAgICAgcGFyYW1zLnR5cGUuc2hvdWxkLmVxdWFsKCdlbmFibGV0b2tlbicpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGFyYW1zLmVuYWJsZVRva2Vucyk7XG4gICAgICAgICAgcmV0dXJuIFsyMDAsIHBhcmFtc107XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgYWxnb1dhbGxldC5idWlsZFRva2VuRW5hYmxlbWVudHMocGFyYW1zKTtcbiAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0hlZGVyYSB0ZXN0cycsICgpID0+IHtcbiAgICBsZXQgaGJhcldhbGxldDogV2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoaXMgaXMgbm90IGEgcmVhbCBUSEJBUiB3YWxsZXRcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGhiYXInLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMC4wLjQ3ODQxNTExJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBoYmFyV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGhiYXInKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHRva2VuIGVuYWJsZW1lbnQgdHJhbnNhY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBlbmFibGVUb2tlbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndGhiYXI6dXNkYycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHtoYmFyV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7aGJhcldhbGxldC5pZCgpfS90eC9idWlsZGApXG4gICAgICAgIC5yZXBseSgodXJpLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gYm9keSBhcyBhbnk7XG4gICAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgICBwYXJhbXMucmVjaXBpZW50c1swXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCd0aGJhcjp1c2RjJyk7XG4gICAgICAgICAgcGFyYW1zLnR5cGUuc2hvdWxkLmVxdWFsKCdlbmFibGV0b2tlbicpO1xuICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGFyYW1zLmVuYWJsZVRva2Vucyk7XG4gICAgICAgICAgcmV0dXJuIFsyMDAsIHBhcmFtc107XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgaGJhcldhbGxldC5idWlsZFRva2VuRW5hYmxlbWVudHMocGFyYW1zKTtcbiAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NhbnRvbiB0ZXN0czogJywgKCkgPT4ge1xuICAgIGxldCBjYW50b25XYWxsZXQ6IFdhbGxldDtcbiAgICBjb25zdCBjYW50b25CaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBjYW50b25CaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6ICcxMjIwNTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQnLFxuICAgICAgICBwZW5kaW5nQ2hhaW5Jbml0aWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgbGFzdENoYWluSW5kZXg6IHsgMDogMCB9LFxuICAgICAgfSxcbiAgICAgIGNvaW46ICd0Y2FudG9uJyxcbiAgICAgIGtleXM6IFtcbiAgICAgICAgJzU5OGY2MDZjZDhmYzI0NzEwZDJlYmFkODlkY2U4NmMyJyxcbiAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgIF0sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY2FudG9uV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGNhbnRvbicpLCB3YWxsZXREYXRhKTtcbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NhbnRvbldhbGxldC5jb2luKCl9L2tleS8ke2NhbnRvbldhbGxldC5rZXlJZHMoKVswXX1gKS50aW1lcygzKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgIHB1YjogJzVmOFdtQzJ1VzlTQWs3TE1YMnI0RzFCeDhNTXd4OHNkZ3BvdHlIR29kaVpvJyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImhOSzNyZzgyUDFUOTRNYXVlWEZBYkE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJjVjR3VTRFelBqcz1cIixcImN0XCI6XCI5VlpYOTladHNiNnA3NUN4bDJscmNYQnBsbXNzSUFROWs3WkE4MXZkRFlHNE41ZFozNkJRTldWZkRvZWxqOU8zMVh5SitYcmkwWEtJV1V6bDBLS0xmVUVScGxtdE5vT0NuNWlmSmNad0NyT3hwSFpRZTNBSjcwMG84V21zcms1SFwifScsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9KTtcblxuICAgICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7Y2FudG9uV2FsbGV0LmNvaW4oKX0va2V5LyR7Y2FudG9uV2FsbGV0LmtleUlkcygpWzFdfWApLnRpbWVzKDIpLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgcHViOiAnRzFzNDNKVHpOWnpxaFVuNGFOcHdnY2M2d2I5RlVzWlFENUpqZmZHNmlzeWQnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJVRnJ0L1FsSVVSMVhlUWFmUEJhQWx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiN1ZQQllhSlhQbTg9XCIsXCJjdFwiOlwiYWpGS3YyeTh5YUlCWFEzOXNBYkJXY25iaUVFemJqUzRBb1F0cDVjWFlxamVEUnh0M2FDeGVtUG0yMnBua0phQ2lqRmpKck1IYmttc05oTll6SGc1YUhGdWtOK25FQVZzc3lOd0hiemxoU25tOC9CVk41MHlBZEFBdFdyZWg4Y3BcIn0nLFxuICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2NhbnRvbldhbGxldC5jb2luKCl9L2tleS8ke2NhbnRvbldhbGxldC5rZXlJZHMoKVsyXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICAgIHB1YjogJ0dIMUxWMWU5RmRxR2U4VTJjOFBNRWNtYTNmRGVoMWt0Y0dWQnJEM0F1RnF4JyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiaUl1V09ISU9FckVEZGlKbjZnNDZtZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIlJ6aDdSUkprc2owPVwiLFwiY3RcIjpcInJjTklDVWZwOUZha1Q1M2wrYWRCNlhLelMxdk5UYzBRcTlqQXRxbnhBK1Njc3NpUzRRMGwzc2dHLzBnRHk1RGFaS3RYcnlLQkRVdkdzaTdiL2ZZYUZDVXBBb1puL1ZaVE9oT1VOL21vN1pIYjRPaE9YTDI5WVBQa2lyeUFxOUNyXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHdhbGxldCBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbnMgY29ycmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke2NhbnRvbldhbGxldC5pZCgpfS90eHJlcXVlc3RzYClcbiAgICAgICAgLnJlcGx5KCh1cmwsIGJvZHkpID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5UGFyYW1zID0gYm9keSBhcyBhbnk7XG4gICAgICAgICAgYm9keVBhcmFtcy5pbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2NyZWF0ZUFjY291bnQnKTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2Zha2UgdHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmFrZSBmZWUgaW5mbycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuICAgICAgYXdhaXQgY2FudG9uV2FsbGV0LnNlbmRXYWxsZXRJbml0aWFsaXphdGlvbigpO1xuICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTb2xhbmEgdGVzdHM6ICcsICgpID0+IHtcbiAgICBsZXQgc29sV2FsbGV0OiBXYWxsZXQ7XG4gICAgY29uc3QgcGFzc3BocmFzZSA9ICcjQm9uZGlvbGExMjM0JztcbiAgICBjb25zdCBzb2xCaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBzb2xCaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgbWluaW11bUZ1bmRpbmc6IDI0NDcxMzYsXG4gICAgICAgIGxhc3RDaGFpbkluZGV4OiB7IDA6IDAgfSxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndHNvbCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNvbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3Rzb2wnKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtzb2xXYWxsZXQuY29pbigpfS9rZXkvJHtzb2xXYWxsZXQua2V5SWRzKClbMF19YCkudGltZXMoMykucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICBwdWI6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJoTkszcmc4MlAxVDk0TWF1ZVhGQWJBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiY1Y0d1U0RXpQanM9XCIsXCJjdFwiOlwiOVZaWDk5WnRzYjZwNzVDeGwybHJjWEJwbG1zc0lBUTlrN1pBODF2ZERZRzRONWRaMzZCUU5XVmZEb2VsajlPMzFYeUorWHJpMFhLSVdVemwwS0tMZlVFUnBsbXROb09DbjVpZkpjWndDck94cEhaUWUzQUo3MDBvOFdtc3JrNUhcIn0nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3NvbFdhbGxldC5jb2luKCl9L2tleS8ke3NvbFdhbGxldC5rZXlJZHMoKVsxXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgIHB1YjogJ0cxczQzSlR6Tlp6cWhVbjRhTnB3Z2NjNndiOUZVc1pRRDVKamZmRzZpc3lkJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiVUZydC9RbElVUjFYZVFhZlBCYUFsdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjdWUEJZYUpYUG04PVwiLFwiY3RcIjpcImFqRkt2Mnk4eWFJQlhRMzlzQWJCV2NuYmlFRXpialM0QW9RdHA1Y1hZcWplRFJ4dDNhQ3hlbVBtMjJwbmtKYUNpakZqSnJNSGJrbXNOaE5ZekhnNWFIRnVrTituRUFWc3N5TndIYnpsaFNubTgvQlZONTB5QWRBQXRXcmVoOGNwXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHtzb2xXYWxsZXQuY29pbigpfS9rZXkvJHtzb2xXYWxsZXQua2V5SWRzKClbMl19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBwdWI6ICdHSDFMVjFlOUZkcUdlOFUyYzhQTUVjbWEzZkRlaDFrdGNHVkJyRDNBdUZxeCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImlJdVdPSElPRXJFRGRpSm42ZzQ2bWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJSemg3UlJKa3NqMD1cIixcImN0XCI6XCJyY05JQ1VmcDlGYWtUNTNsK2FkQjZYS3pTMXZOVGMwUXE5akF0cW54QStTY3NzaVM0UTBsM3NnRy8wZ0R5NURhWkt0WHJ5S0JEVXZHc2k3Yi9mWWFGQ1VwQW9abi9WWlRPaE9VTi9tbzdaSGI0T2hPWEwyOVlQUGtpcnlBcTlDclwifScsXG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uOiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUT0RPIChTVExYLTE1MDE4KTogZml4IHRlc3RcbiAgICAgIHhpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBzaWduIGEgY29uc29saWRhdGlvbiB0cmFuc2ZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcHJlYnVpbGRUeDoge1xuICAgICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldERhdGEuaWQsXG4gICAgICAgICAgICB0eEhleDpcbiAgICAgICAgICAgICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUlFOU1XV1YyY3QwMW1nNUdtNEVxY0o5U0FuMlh1RCtGdUFIY0hGVGtjMVRndXQzRGdUc2lTZ1RRMGRtemo1SkpnNnFZVHBuOEZ4T1lQRkNGVE1vWmk0NmdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCVXBUV3BrcElRWk5KT2h4WU5vNGZIdzF0ZDI4a3J1QjVCK29RRUVGUkkwUWMrcTBaZzZPT3BWOGVDRFZMZll6aW94N1lCQTcrUVBMWDRJUmhEQ1NLd0lDQWdBQkRBSUFBQUNnaGdFQUFBQUFBQU1BRlZSbGMzUWdhVzUwWldkeVlYUnBiMjRnYldWdGJ3PT0nLFxuICAgICAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgICAgIGZlZVBheWVyOiAnSFVWRTVOZkp5R2ZVMWRqWnNWTEE2ZnhTVFMxRTJpUnFjVFJWTkM5SzJ6N2MnLFxuICAgICAgICAgICAgICBsYW1wb3J0c1BlclNpZ25hdHVyZTogNTAwMCxcbiAgICAgICAgICAgICAgbm9uY2U6ICcyN0UzTVhGdlhNVU5ZZU1KZVgxcEFiRVJHc0pmVWJrYVpUZmdNZ3BtTk41ZycsXG4gICAgICAgICAgICAgIG51bVNpZ25hdHVyZXM6IDAsXG4gICAgICAgICAgICAgIGluc3RydWN0aW9uc0RhdGE6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnVHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21BZGRyZXNzOiAnSFVWRTVOZkp5R2ZVMWRqWnNWTEE2ZnhTVFMxRTJpUnFjVFJWTkM5SzJ6N2MnLFxuICAgICAgICAgICAgICAgICAgICB0b0FkZHJlc3M6ICdDaGdKNXRnRHdCVXNrOVJOTW0yaUxpd1A4Um9kd2daNnVxckM1cGFKc1hWVCcsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ01lbW8nLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW86ICdUZXN0IGludGVncmF0aW9uIG1lbW8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTWVtbycsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUZXN0IGludGVncmF0aW9uIG1lbW8nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczogJ0NoZ0o1dGdEd0JVc2s5Uk5NbTJpTGl3UDhSb2R3Z1o2dXFyQzVwYUpzWFZUJyxcbiAgICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25zb2xpZGF0ZUlkOiAnMTIzNCcsXG4gICAgICAgICAgICBjb25zb2xpZGF0aW9uRGV0YWlsczoge1xuICAgICAgICAgICAgICBzZW5kZXJBZGRyZXNzSW5kZXg6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQnVpbGQgYW5kIHNpZ24gdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgIGNvbnN0IHByZUJ1aWx0U2lnbmVkVHggPSBhd2FpdCBzb2xXYWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24odHhQYXJhbXMpO1xuICAgICAgICBwcmVCdWlsdFNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHRva2VuIGVuYWJsZW1lbnQgdHJhbnNhY3Rpb25zIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndHNvbDp1c2RjJyB9LCB7IG5hbWU6ICd0c29sOnNybScgfSwgeyBuYW1lOiAndHNvbDpnbXQnIH1dLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHtzb2xXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9keVBhcmFtcyA9IGJvZHkgYXMgYW55O1xuICAgICAgICAgIGJvZHlQYXJhbXMuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdlbmFibGVUb2tlbicpO1xuICAgICAgICAgIGJvZHlQYXJhbXMuaW50ZW50LnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgICAgICBib2R5UGFyYW1zLmludGVudC5lbmFibGVUb2tlbnMuc2hvdWxkLmRlZXBFcXVhbChwYXJhbXMuZW5hYmxlVG9rZW5zKTtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnZmFrZSB0cmFuc2FjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIGZlZUluZm86ICdmYWtlIGZlZSBpbmZvJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSk7XG4gICAgICBhd2FpdCBzb2xXYWxsZXQuYnVpbGRUb2tlbkVuYWJsZW1lbnRzKHBhcmFtcyk7XG4gICAgICB0eFJlcXVlc3ROb2NrLmlzRG9uZSgpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FjY2VsZXJhdGUgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2ZhaWxzIGlmIGFjY2VsZXJhdGlvbiBpZHMgYXJlIG5vdCBwYXNzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXQuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2NwZnB0eGlkc19vcl9yYmZ0eGlkc19yZXF1aXJlZCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgY3BmcFR4SWRzIGlzIG5vdCBhbiBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2hlY2tpbmcgdHlwZSBtaXNtYXRjaFxuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczoge30gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfbm90X2FycmF5JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwVHhJZHMgaXMgbm90IG9mIGxlbmd0aCAxJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogW10gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfbm90X2FycmF5JyB9KTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkMScsICdpZDInXSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwdHhpZHNfbm90X2FycmF5JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwRmVlUmF0ZSBpcyBub3QgcGFzc2VkIGFuZCBuZWl0aGVyIGlzIG5vQ3BmcEZlZVJhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXQuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10gfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdjcGZwZmVlcmF0ZV9ub3Rfc2V0JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBjcGZwRmVlUmF0ZSBpcyBub3QgYW4gaW50ZWdlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddLCBjcGZwRmVlUmF0ZTogJ29uZScgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY3BmcGZlZXJhdGVfbm90X25vbm5lZ2F0aXZlX2ludGVnZXInIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGNwZnBGZWVSYXRlIGlzIG5lZ2F0aXZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgY3BmcEZlZVJhdGU6IC0xIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2NwZnBmZWVyYXRlX25vdF9ub25uZWdhdGl2ZV9pbnRlZ2VyJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBpZiBtYXhGZWUgaXMgbm90IHBhc3NlZCBhbmQgbmVpdGhlciBpcyBub01heEZlZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuYWNjZWxlcmF0ZVRyYW5zYWN0aW9uKHsgY3BmcFR4SWRzOiBbJ2lkJ10sIG5vQ3BmcEZlZVJhdGU6IHRydWUgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnbWF4ZmVlX25vdF9zZXQnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIG1heEZlZSBpcyBub3QgYW4gaW50ZWdlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNraW5nIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZCddLCBub0NwZnBGZWVSYXRlOiB0cnVlLCBtYXhGZWU6ICdvbmUnIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ21heGZlZV9ub3Rfbm9ubmVnYXRpdmVfaW50ZWdlcicgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgbWF4RmVlIGlzIG5lZ2F0aXZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyBjcGZwVHhJZHM6IFsnaWQnXSwgbm9DcGZwRmVlUmF0ZTogdHJ1ZSwgbWF4RmVlOiAtMSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh7IGNvZGU6ICdtYXhmZWVfbm90X25vbm5lZ2F0aXZlX2ludGVnZXInIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIGJvdGggcmJmVHhpZHMgYW5kIGNwZnBUeGlkcyBpcyBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IGNwZnBUeElkczogWydpZDEnXSwgcmJmVHhJZHM6IFsnaWQyJ10gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnY2Fubm90X3NwZWNpZnlfYm90aF9jcGZwX2FuZF9yYmZfdHhpZHMnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGlmIHJiZlR4SWRzIGlzIHNldCBidXQgZmVlTXVsdGlwbGllciBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyByYmZUeElkczogWydpZCddIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2ZlZW11bHRpcGxpZXJfbm90X3NldCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgaWYgZmVlIG11bHRpcGxpZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmFjY2VsZXJhdGVUcmFuc2FjdGlvbih7IHJiZlR4SWRzOiBbJ2lkJ10sIGZlZU11bHRpcGxpZXI6IDEgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoeyBjb2RlOiAnZmVlbXVsdGlwbGllcl9ncmVhdGVyX3RoYW5fb25lJyB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hY2NlbGVyYXRlVHJhbnNhY3Rpb24oeyByYmZUeElkczogWydpZDInXSwgZmVlTXVsdGlwbGllcjogMC41IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHsgY29kZTogJ2ZlZW11bHRpcGxpZXJfZ3JlYXRlcl90aGFuX29uZScgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3VibWl0cyBhIHRyYW5zYWN0aW9uIHdpdGggYWxsIGNwZnAgc3BlY2lmaWMgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgY3BmcFR4SWRzOiBbJ2lkJ10sXG4gICAgICAgIGNwZnBGZWVSYXRlOiAxLFxuICAgICAgICBtYXhGZWU6IDEsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwcmVidWlsZFJldHVybiA9IE9iamVjdC5hc3NpZ24oeyB0eEhleDogJzEyMycgfSwgcGFyYW1zKTtcbiAgICAgIGNvbnN0IHByZWJ1aWxkU3R1YiA9IHNpbm9uLnN0dWIod2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhwcmVidWlsZFJldHVybik7XG5cbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYDtcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QocGF0aCwgXy5tYXRjaGVzKHByZWJ1aWxkUmV0dXJuKSkucmVwbHkoMjAwKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmFjY2VsZXJhdGVUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICBwcmVidWlsZFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aChwYXJhbXMpO1xuXG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYW5vdXQgaW5wdXQgbWF4TnVtSW5wdXRzVG9Vc2UgYW5kIHVuc3BlbnRzIHZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gICAgY29uc3QgbWF4TnVtSW5wdXRzVG9Vc2UgPSAyO1xuICAgIGNvbnN0IHVuc3BlbnRzID0gW1xuICAgICAgJ2NjMzA1NjU3NTBlMmFlYjgxODYyNWFhZWRhZjg5ZGI1YzYxNGU1OTc3Yjk2NDVjZWUxZDcyODlmNjE2ZmIxZDg6MCcsXG4gICAgICAnOGM0NTE2NDc4N2E5NTRhYjA3ODY0YWY5YjA1YjM0ZmJkZTNhOGU0MzBhOGM2NWIwZTYwZTRlNTQzZDhlMWI2YzoyJyxcbiAgICBdO1xuICAgIGxldCBiYXNlY29pbjtcbiAgICBsZXQgd2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGJ0YycpO1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICB9O1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIG1heE51bUlucHV0c1RvVXNlIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgZmFub3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgbWF4TnVtSW5wdXRzVG9Vc2UgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5mYW5vdXRVbnNwZW50cyh7IGFkZHJlc3MsIG1heE51bUlucHV0c1RvVXNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIG1heE51bUlucHV0c1RvVXNlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgdW5zcGVudHMgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBmYW5vdXQgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vZmFub3V0VW5zcGVudHNgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyB1bnNwZW50cyB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgICAucmVwbHkoMjAwKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgYWRkcmVzcywgdW5zcGVudHMgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRoZSBmYW5vdXRVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvZmFub3V0VW5zcGVudHMgYW5kIHdoZXRoZXIgdW5zcGVudHMgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgb25seSBidWlsZCB0eCAobm90IHNpZ24vc2VuZCkgd2hpbGUgZmFubmluZyBvdXQgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vZmFub3V0VW5zcGVudHNgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKS5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHVuc3BlbnRzIH0pKS5yZXBseSgyMDApO1xuXG4gICAgICBjb25zdCB1bnVzZWROb2NrcyA9IG5vY2soYmdVcmwpO1xuICAgICAgdW51c2VkTm9ja3MuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCk7XG4gICAgICB1bnVzZWROb2Nrcy5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NlbmRgKS5yZXBseSgyMDApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQuZmFub3V0VW5zcGVudHMoeyBhZGRyZXNzLCB1bnNwZW50cyB9LCBNYW5hZ2VVbnNwZW50c09wdGlvbnMuQlVJTERfT05MWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRoZSBmYW5vdXRVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvZmFub3V0VW5zcGVudHMgYW5kIHdoZXRoZXIgdW5zcGVudHMgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHVudXNlZE5vY2tzLnBlbmRpbmdNb2NrcygpLmxlbmd0aC5zaG91bGQuZXFsKDIpO1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByb3V0ZSBjdXN0b2RpYWwgZmFub3V0VW5zcGVudHMgdGhyb3VnaCB0eC9pbml0aWF0ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbEJhc2Vjb2luID0gYml0Z28uY29pbigndGJ0YycpO1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGN1c3RvZGlhbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGN1c3RvZGlhbEJhc2Vjb2luLCBjdXN0b2RpYWxXYWxsZXREYXRhKTtcblxuICAgICAgY29uc3QgaW5pdGlhdGVQYXRoID0gYC9hcGkvdjIvJHtjdXN0b2RpYWxXYWxsZXQuY29pbigpfS93YWxsZXQvJHtjdXN0b2RpYWxXYWxsZXQuaWQoKX0vdHgvaW5pdGlhdGVgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChpbml0aWF0ZVBhdGgsIF8ubWF0Y2hlcyh7IHR5cGU6ICdmYW5vdXQnIH0pKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ2FjY2VwdGVkJywgdHhSZXF1ZXN0SWQ6ICdtb2NrLXR4LXJlcXVlc3QtaWQnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjdXN0b2RpYWxXYWxsZXQuZmFub3V0VW5zcGVudHMoeyBudW1VbnNwZW50c1RvTWFrZTogMTAgfSk7XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgKHJlc3VsdCBhcyBhbnkpLnN0YXR1cy5zaG91bGQuZXF1YWwoJ2FjY2VwdGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDdXN0b2R5IHNCVEMgYnJpZGdpbmcvd2l0aGRyYXcgcGFyYW1zIHBhc3MtdGhyb3VnaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBicmlkZ2luZ1BhcmFtcyA9IHtcbiAgICAgIHNidGM6IHtcbiAgICAgICAgYW1vdW50OiAxMDAwMDAsXG4gICAgICAgIHN0YWNrc1JlY2lwaWVudDogJ1NQMko2Wlk0OEdWMUVaNVYyVjVSQjlNUDY2U1c4NlBZS0tOUlY5RUo3JyxcbiAgICAgICAgbWF4RmVlOiA1MDAwLFxuICAgICAgICBsb2NrVGltZTogMTQ0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHNidGNXaXRoZHJhd1BhcmFtcyA9IHtcbiAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICBidGNBZGRyZXNzOiAnMk45RWdvOUtpZGlaUjh0TVA4Mmc2UmFnZ1F0Y2JSOXpOekgnLFxuICAgICAgbWF4RmVlOiAnNTAwMCcsXG4gICAgfTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgYnJpZGdpbmdQYXJhbXMgdGhyb3VnaCBzZW5kTWFueSB0byB0eC9pbml0aWF0ZSBmb3IgY3VzdG9kaWFsIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b2RpYWxXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0YnRjJyksIHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgICBjb2luOiAndGJ0YycsXG4gICAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGluaXRpYXRlUGF0aCA9IGAvYXBpL3YyLyR7Y3VzdG9kaWFsV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7Y3VzdG9kaWFsV2FsbGV0LmlkKCl9L3R4L2luaXRpYXRlYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoaW5pdGlhdGVQYXRoLCBfLm1hdGNoZXMoeyB0eXBlOiAnYnJpZGdpbmcnLCBicmlkZ2luZ1BhcmFtcyB9KSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBzdGF0dXM6ICdhY2NlcHRlZCcsIHR4UmVxdWVzdElkOiAnbW9jay10eC1yZXF1ZXN0LWlkJyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9kaWFsV2FsbGV0LnNlbmRNYW55KHsgdHlwZTogJ2JyaWRnaW5nJywgYnJpZGdpbmdQYXJhbXMgfSk7XG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgKHJlc3VsdCBhcyBhbnkpLnN0YXR1cy5zaG91bGQuZXF1YWwoJ2FjY2VwdGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3Mgc2J0Y1dpdGhkcmF3UGFyYW1zIHRocm91Z2ggc2VuZE1hbnkgdG8gdHgvaW5pdGlhdGUgZm9yIGN1c3RvZGlhbCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VzdG9kaWFsV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGJ0YycpLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICB0eXBlOiAnY3VzdG9kaWFsJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpbml0aWF0ZVBhdGggPSBgL2FwaS92Mi8ke2N1c3RvZGlhbFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2N1c3RvZGlhbFdhbGxldC5pZCgpfS90eC9pbml0aWF0ZWA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGluaXRpYXRlUGF0aCwgXy5tYXRjaGVzKHsgc2J0Y1dpdGhkcmF3UGFyYW1zIH0pKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHN0YXR1czogJ2FjY2VwdGVkJywgdHhSZXF1ZXN0SWQ6ICdtb2NrLXR4LXJlcXVlc3QtaWQnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjdXN0b2RpYWxXYWxsZXQuc2VuZE1hbnkoeyBzYnRjV2l0aGRyYXdQYXJhbXMgfSBhcyBhbnkpO1xuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIChyZXN1bHQgYXMgYW55KS5zdGF0dXMuc2hvdWxkLmVxdWFsKCdhY2NlcHRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gcHJlYnVpbGRzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBldGhXYWxsZXQ7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAga2V5czogW1xuICAgICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgJzU5OGY2MDZjYzhlNDNhZWYwOWZjYjc4NTIyMWQ5ZGQyJyxcbiAgICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiByZXFJZCBpZiBpdCB3YXMgcGFzc2VkIGluIHRoZSBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IG9mZmxpbmVWZXJpZmljYXRpb246IHRydWUgfTtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcylcbiAgICAgICAgLnF1ZXJ5KHBhcmFtcylcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSAxMDA7XG4gICAgICBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcyhibG9ja0hlaWdodCk7XG4gICAgICBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHsgLi4ucGFyYW1zLCByZXFJZDogcmVxSWQgfSk7XG4gICAgICB0eFJlcXVlc3QucmVxSWQ/LnNob3VsZC5jb250YWluRXFsKHJlcUlkKTtcbiAgICAgIHNjb3BlLmRvbmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBvZmZsaW5lVmVyaWZpY2F0aW9uPXRydWUgcXVlcnkgcGFyYW0gaWYgcGFzc2VkIHRydXRoeSB2YWx1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgb2ZmbGluZVZlcmlmaWNhdGlvbjogdHJ1ZSB9O1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGAsIHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IDEwMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKGJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHBvc3RQcm9jZXNzU3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdwb3N0UHJvY2Vzc1ByZWJ1aWxkJykucmVzb2x2ZXMoe30pO1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2UoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgYmxvY2tIZWlnaHQ6IDEwMCxcbiAgICAgICAgd2FsbGV0OiB3YWxsZXQsXG4gICAgICAgIGJ1aWxkUGFyYW1zOiB0YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgc2NvcGUuZG9uZSgpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBwYXNzIHRoZSBvZmZsaW5lVmVyaWZpY2F0aW9uIHF1ZXJ5IHBhcmFtIGlmIHBhc3NlZCBhIGZhbHNleSB2YWx1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgb2ZmbGluZVZlcmlmaWNhdGlvbjogZmFsc2UgfTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMpXG4gICAgICAgIC5xdWVyeSh7fSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSAxMDA7XG4gICAgICBjb25zdCBibG9ja0hlaWdodFN0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAnZ2V0TGF0ZXN0QmxvY2tIZWlnaHQnKS5yZXNvbHZlcyhibG9ja0hlaWdodCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIGJsb2NrSGVpZ2h0U3R1Yi5yZXN0b3JlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHNjcmlwdCBvdXRwdXRzIHdpdGggdGhlIHByb3BlciBzdHJ1Y3R1cmUgdG8gd2FsbGV0IHBsYXRmb3JtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2NyaXB0ID0gJzZhMTEyMjMzNDQ1NTY2Nzc4ODk5MDAnO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCB7XG4gICAgICAgICAgLi4udGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgc2NyaXB0LCBhbW91bnQ6IDFlNiB9XSxcbiAgICAgICAgfSlcbiAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IGBzY3JpcHRQdWJLZXk6JHtzY3JpcHR9YCwgYW1vdW50OiAxZTYgfV0gfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogeyAuLi50YnRjSG90V2FsbGV0RGVmYXVsdFBhcmFtcywgcmVjaXBpZW50czogW3sgc2NyaXB0LCBhbW91bnQ6IDFlNiB9XSB9LFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVidWlsZCBzaG91bGQgY2FsbCBidWlsZCBhbmQgZ2V0TGF0ZXN0QmxvY2tIZWlnaHQgZm9yIHV0eG8gY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgdGJ0Y0hvdFdhbGxldERlZmF1bHRQYXJhbXMpXG4gICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICBibG9ja0hlaWdodDogMTAwLFxuICAgICAgICB3YWxsZXQ6IHdhbGxldCxcbiAgICAgICAgYnVpbGRQYXJhbXM6IHRidGNIb3RXYWxsZXREZWZhdWx0UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVidWlsZCBzaG91bGQgbm90IGhhdmUgY2hhbmdlQWRkcmVzc1R5cGUgYXJyYXkgaW4gcG9zdCBib2R5IHdoZW4gY2hhbmdlQWRkcmVzc1R5cGUgaXMgZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQnVpbGRQb3N0Qm9keVBhcmFtcyA9IHtcbiAgICAgICAgY2hhbmdlQWRkcmVzc1R5cGU6ICdwMnRyTXVzaWcyJyxcbiAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYCwgZXhwZWN0ZWRCdWlsZFBvc3RCb2R5UGFyYW1zKVxuICAgICAgICAucXVlcnkoe30pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ2dldExhdGVzdEJsb2NrSGVpZ2h0JykucmVzb2x2ZXMoYmxvY2tIZWlnaHQpO1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NTdHViID0gc2lub24uc3R1YihiYXNlY29pbiwgJ3Bvc3RQcm9jZXNzUHJlYnVpbGQnKS5yZXNvbHZlcyh7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IGNoYW5nZUFkZHJlc3NUeXBlOiAncDJ0ck11c2lnMicgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogZXhwZWN0ZWRCdWlsZFBvc3RCb2R5UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBibG9ja0hlaWdodFN0dWIucmVzdG9yZSgpO1xuICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBicmlkZ2luZ1BhcmFtcyB0byB0eC9idWlsZCBmb3Igbm9uLVRTUyBCVEMgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnJpZGdpbmdQYXJhbXMgPSB7XG4gICAgICAgIHNidGM6IHtcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwMCxcbiAgICAgICAgICBzdGFja3NSZWNpcGllbnQ6ICdTUDJKNlpZNDhHVjFFWjVWMlY1UkI5TVA2NlNXODZQWUtLTlJWOUVKNycsXG4gICAgICAgICAgbWF4RmVlOiA1MDAwLFxuICAgICAgICAgIGxvY2tUaW1lOiAxNDQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRCdWlsZFBhcmFtcyA9IHtcbiAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIGJyaWRnaW5nUGFyYW1zLFxuICAgICAgICBjaGFuZ2VBZGRyZXNzVHlwZTogWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgLCBleHBlY3RlZEJ1aWxkUGFyYW1zKVxuICAgICAgICAucXVlcnkoe30pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0U3R1YiA9IHNpbm9uLnN0dWIoYmFzZWNvaW4sICdnZXRMYXRlc3RCbG9ja0hlaWdodCcpLnJlc29sdmVzKDEwMCk7XG4gICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGJhc2Vjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgdHhGb3JtYXQ6ICdwc2J0JyxcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIGJyaWRnaW5nUGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBwb3N0UHJvY2Vzc1N0dWIuc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlV2l0aCh7XG4gICAgICAgIGJsb2NrSGVpZ2h0OiAxMDAsXG4gICAgICAgIHdhbGxldDogd2FsbGV0LFxuICAgICAgICBidWlsZFBhcmFtczogZXhwZWN0ZWRCdWlsZFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgc2NvcGUuZG9uZSgpO1xuICAgICAgYmxvY2tIZWlnaHRTdHViLnJlc3RvcmUoKTtcbiAgICAgIHBvc3RQcm9jZXNzU3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gYnJpZGdpbmdQYXJhbXMgaXMgbWlzc2luZyBmb3IgYnJpZGdpbmcgdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgICB0eEZvcm1hdDogJ3BzYnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcIidicmlkZ2luZ1BhcmFtcycgaXMgcmVxdWlyZWQgZm9yIGJyaWRnaW5nIGludGVudFwiKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcmVidWlsZCBzaG91bGQgY2FsbCBidWlsZCBidXQgbm90IGdldExhdGVzdEJsb2NrSGVpZ2h0IGZvciBhY2NvdW50IGNvaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgWyd0eHJwJywgJ3R4bG0nLCAndGV0aCddLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGNvaW4pIHtcbiAgICAgICAgY29uc3QgYWNjb3VudGNvaW4gPSBiaXRnby5jb2luKGNvaW4pO1xuICAgICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjFhJyxcbiAgICAgICAgICBjb2luLFxuICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjY291bnRXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBhY2NvdW50Y29pbiwgd2FsbGV0RGF0YSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7YWNjb3VudFdhbGxldC5jb2luKCl9L3dhbGxldC8ke2FjY291bnRXYWxsZXQuaWQoKX0vdHgvYnVpbGRgKVxuICAgICAgICAgIC5xdWVyeShwYXJhbXMpXG4gICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc1N0dWIgPSBzaW5vbi5zdHViKGFjY291bnRjb2luLCAncG9zdFByb2Nlc3NQcmVidWlsZCcpLnJlc29sdmVzKHt9KTtcbiAgICAgICAgYXdhaXQgYWNjb3VudFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICAgIHBvc3RQcm9jZXNzU3R1Yi5zaG91bGQuaGF2ZS5iZWVuLmNhbGxlZE9uY2VXaXRoKHtcbiAgICAgICAgICB3YWxsZXQ6IGFjY291bnRXYWxsZXQsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHt9LFxuICAgICAgICB9KTtcbiAgICAgICAgcG9zdFByb2Nlc3NTdHViLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGlzQmF0Y2ggPSB0cnVlIGluIHRoZSB0eFByZWJ1aWxkIGlmIHR4UGFyYW1zIGhhcyBtb3JlIHRoYW4gb25lIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczEgfSxcbiAgICAgICAgICB7IGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAnLCBhZGRyZXNzOiBhZGRyZXNzMiB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXRDb250cmFjdEFkZHJlc3M6ICcweGRmMDcxMTc3MDVhOWY4ZGM0YzJhNzhkZTY2YjdmMTc5N2RiYTlkNGUnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnbW9vbicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0b3RhbEFtb3VudCA9ICcyMDAwMDAwMDAwMDAwMDAwJztcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoXG4gICAgICAgICAgYC9hcGkvdjIvJHtldGhXYWxsZXQuY29pbigpfS93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdHgvYnVpbGRgLFxuICAgICAgICAgIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHM6IHR4UGFyYW1zLnJlY2lwaWVudHMgfSlcbiAgICAgICAgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHhjMGFhZjI2NDllN2IwZjM5NTAxNjQ2ODFlY2EyYjFhOGY2NTRhNDc4JyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMjAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIGRhdGE6ICcweGMwMGM0ZTllMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTc0Y2ZkODIzYWY4Y2UyN2VkMGFmZWUzZmNmM2MzYmEyNTkxMTZiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdlODViZGMyN2MwNTBlMzkwNWViZjRiOGU2MzRkOWFkNmVkZDBkZTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzhkN2VhNGM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4ZDdlYTRjNjgwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDEwODk2LFxuICAgICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICAgIGlzQmF0Y2g6IHRydWUsXG4gICAgICAgICAgY29pbjogJ3RldGgnLFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGV0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHR4UGFyYW1zKTtcbiAgICAgIHR4UHJlYnVpbGQuaXNCYXRjaC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB0eFByZWJ1aWxkLnJlY2lwaWVudHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgIChiaXRnby5jb2luKCd0ZXRoJykgYXMgYW55KS5zdGF0aWNzQ29pbi5uZXR3b3JrLmJhdGNoZXJDb250cmFjdEFkZHJlc3NcbiAgICAgICk7XG4gICAgICB0eFByZWJ1aWxkLnJlY2lwaWVudHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCh0b3RhbEFtb3VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgaXNCYXRjaCA9IGZhbHNlIGFuZCBob3BUcmFuc2FjdGlvbiBmaWVsZCBzaG91bGQgbm90IGJlIHRoZXJlIGluIHRoZSB0eFByZWJ1aWxkICBmb3Igbm9ybWFsIGV0aCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwJywgYWRkcmVzczogYWRkcmVzczEgfV0sXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogJzB4ZGYwNzExNzcwNWE5ZjhkYzRjMmE3OGRlNjZiN2YxNzk3ZGJhOWQ0ZScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdtb29uJyxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KFxuICAgICAgICAgIGAvYXBpL3YyLyR7ZXRoV2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9L3R4L2J1aWxkYCxcbiAgICAgICAgICBfLm1hdGNoZXMoeyByZWNpcGllbnRzOiB0eFBhcmFtcy5yZWNpcGllbnRzIH0pXG4gICAgICAgIClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweDE3NGNmZDgyM2FmOGNlMjdlZDBhZmVlM2ZjZjNjM2JhMjU5MTE2YmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG5leHRDb250cmFjdFNlcXVlbmNlSWQ6IDEwODk3LFxuICAgICAgICAgIGdhc1ByaWNlOiAyMDAwMDAwMDAwMCxcbiAgICAgICAgICBnYXNMaW1pdDogNTAwMDAwLFxuICAgICAgICAgIGlzQmF0Y2g6IGZhbHNlLFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCBldGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih0eFBhcmFtcyk7XG4gICAgICB0eFByZWJ1aWxkLmlzQmF0Y2guc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdob3BUcmFuc2FjdGlvbicpO1xuICAgICAgdHhQcmVidWlsZC5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MxKTtcbiAgICAgIHR4UHJlYnVpbGQucmVjaXBpZW50c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgaXNUZXN0VHJhbnNhY3Rpb24gcGFyYW1ldGVyIHRocm91Z2ggZm9yIG11bHRpc2lnIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2FhYScsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgaXNUZXN0VHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cywgaXNUZXN0VHJhbnNhY3Rpb24gfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMsIGlzVGVzdFRyYW5zYWN0aW9uIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgaXNUZXN0VHJhbnNhY3Rpb24gaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyB1bnNwZW50IHJlc2VydmF0aW9uIHBhcmFtZXRlciB0aHJvdWdoIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzZXJ2YXRpb24gPSB7XG4gICAgICAgIGV4cGlyZVRpbWU6ICcyMDI5LTA4LTEyJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ2FhYScsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cywgcmVzZXJ2YXRpb24gfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMsIHJlc2VydmF0aW9uIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgcmVzZXJ2YXRpb24gaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBnYXMgbGltaXQgcGFyYW1ldGVyIHRocm91Z2ggd2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbiBmb3Igc3VpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0geyBnYXNMaW1pdDogMTAwIH07XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMocGFyYW1zKSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgICAucmVwbHkoMjAwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIHRoZSBwcmVidWlsZFRyYW5zYWN0aW9uIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC90eC9idWlsZCBhbmQgd2hldGhlciByZXNlcnZhdGlvbiBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTWF4aW11bSBTcGVuZGFibGUnLCBmdW5jdGlvbiBtYXhpbXVtU3BlbmRhYmxlKCkge1xuICAgIGxldCBiZ1VybDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLnBlbmRpbmdNb2NrcygpLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgICAgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2JpdGdvLmdldEVudigpXS51cmk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXJndW1lbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJhbXMgPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgbWluVmFsdWU6ICcwJyxcbiAgICAgICAgbWF4VmFsdWU6ICc5OTk5OTk5OTk5OTk5JyxcbiAgICAgICAgbWluSGVpZ2h0OiAwLFxuICAgICAgICBtaW5Db25maXJtczogMixcbiAgICAgICAgZW5mb3JjZU1pbkNvbmZpcm1zRm9yQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgZmVlUmF0ZTogMTAwMDAsXG4gICAgICAgIG1heEZlZVJhdGU6IDEwMDAwMCxcbiAgICAgICAgcmVjaXBpZW50QWRkcmVzczogJzJOQ1VGRExpVXo5Q1ZubWRWcVFlOWFjVm9ub004OWU3NmRmJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBhY3R1YWwgYXBpIHJlcXVlc3Qgd2lsbCBvbmx5IHNlbmQgc3RyaW5ncywgYnV0IHRoZSBTREsgZnVuY3Rpb24gZXhwZWN0cyBudW1iZXJzIGZvciBzb21lIHZhbHVlc1xuICAgICAgY29uc3QgYXBpUGFyYW1zID0gXy5tYXBWYWx1ZXMob3B0aW9uYWxQYXJhbXMsIChwYXJhbSkgPT4gU3RyaW5nKHBhcmFtKSk7XG5cbiAgICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9tYXhpbXVtU3BlbmRhYmxlYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChwYXRoKVxuICAgICAgICAucXVlcnkoXy5tYXRjaGVzKGFwaVBhcmFtcykpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGNvaW46ICd0YmNoJyxcbiAgICAgICAgICBtYXhpbXVtU3BlbmRhYmxlOiA2NTAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5tYXhpbXVtU3BlbmRhYmxlKG9wdGlvbmFsUGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGVzdCBpcyBzdWNjZXNzZnVsIGlmIG5vY2sgaXMgY29uc3VtZWRcbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2hhcmUgdG8gY29sZCB3YWxsZXQgd2l0aG91dCBwYXNzaW5nIHNraXBLZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcblxuICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSkucmVwbHkoMjAwLCB7IHVzZXJJZCB9KTtcblxuICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtjb2xkV2FsbGV0LmtleUlkcygpWzBdfWApXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7Y29sZFdhbGxldC5rZXlJZHMoKVsxXX1gKVxuICAgICAgICAucmVwbHkoMjAwLCB7fSlcbiAgICAgICAgLmdldChgL2FwaS92Mi90YnRjL2tleS8ke2NvbGRXYWxsZXQua2V5SWRzKClbMl19YClcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90YnRjL3dhbGxldC8ke2NvbGRXYWxsZXQuaWQoKX0vc2hhcmVgLCB7XG4gICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIHNraXBLZXljaGFpbjogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCBjb2xkV2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zIH0pO1xuXG4gICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgZ2V0S2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSG90IFdhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2JpdGdvMTIzNCc7XG4gICAgICBjb25zdCBwdWIgPSAnWm8xZ2d6VFVLTVk1YlluRHZUNW10VmVaeHpmMkZhTFRiS2ttdkdVaFVRayc7XG5cbiAgICAgIGNvbnN0IGxpZ2h0bmluZ0NvaW46IGFueSA9IGJpdGdvLmNvaW4oJ3RsbmJ0YycpO1xuICAgICAgY29uc3QgbGlnaHRuaW5nV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMScsXG4gICAgICAgIGNvaW46ICd0bG5idGMnLFxuICAgICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAxJ10sXG4gICAgICAgIGNvaW5TcGVjaWZpYzogeyBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NjAwMDAwMDAwJywgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJ10gfSxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlnaHRuaW5nV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgbGlnaHRuaW5nQ29pbiwgbGlnaHRuaW5nV2FsbGV0RGF0YSk7XG5cbiAgICAgIGZvciAoY29uc3QgaG90V2FsbGV0IG9mIFt3YWxsZXQsIGxpZ2h0bmluZ1dhbGxldF0gYXMgY29uc3QpIHtcbiAgICAgICAgaXQoYHNob3VsZCB1c2Uga2V5Y2hhaW4gcHViIHRvIHNoYXJlICR7aG90V2FsbGV0LmNvaW4oKX0gaG90IHdhbGxldGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5LCBwYXRoIH0pO1xuXG4gICAgICAgICAgY29uc3QgZ2V0S2V5Tm9ja3M6IG5vY2suU2NvcGVbXSA9IFtdO1xuICAgICAgICAgIGlmIChob3RXYWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsbmJ0YycpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYwID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjAnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZFBydnMgPSBbZW5jWHBydjAsIGVuY1hwcnYxXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleUlkID0gbGlnaHRuaW5nV2FsbGV0RGF0YS5jb2luU3BlY2lmaWMua2V5c1tpXTtcbiAgICAgICAgICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgICAgLmdldChgL2FwaS92Mi90bG5idGMva2V5LyR7a2V5SWR9YClcbiAgICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICAgICAgICBpZDoga2V5SWQsXG4gICAgICAgICAgICAgICAgICBwdWI6IGkgPT09IDAgPyBwdWIgOiAnWm8xZ2d6VFVLTVk1YlluRHZUNW10VmVaeHpmMkZhTFRiS2ttdkdVaFVRbScsXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jcnlwdGVkUHJ2c1tpXSxcbiAgICAgICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzpcbiAgICAgICAgICAgICAgICAgICAgaSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgID8geyBbaG90V2FsbGV0LmJhc2VDb2luLmdldENoYWluKCldOiB7IHB1cnBvc2U6ICd1c2VyQXV0aCcgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7IFtob3RXYWxsZXQuYmFzZUNvaW4uZ2V0Q2hhaW4oKV06IHsgcHVycG9zZTogJ25vZGVBdXRoJyB9IH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGdldEtleU5vY2tzLnB1c2goZ2V0S2V5Tm9jayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt3YWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgICAgIGlkOiB3YWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgICAgIHB1YixcbiAgICAgICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jWHBydjEsXG4gICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdldEtleU5vY2tzLnB1c2goZ2V0S2V5Tm9jayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoaG90V2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5wdWIhLnNob3VsZC5lcXVhbChwdWIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCBob3RXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgICBzdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIGdldEtleU5vY2tzLmV2ZXJ5KCh2KSA9PiB2LmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvdmlkZSBza2lwS2V5Y2hhaW4gdG8gd2FsbGV0IHNoYXJlIGFwaSBmb3IgaG90IHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9ICcxMjMnO1xuICAgICAgY29uc3QgZW1haWwgPSAnc2hhcmV0b0BzZGt0ZXN0LmNvbSc7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgIGNvbnN0IHRvS2V5Y2hhaW4gPSB1dHhvTGliLmJpcDMyLmZyb21TZWVkKEJ1ZmZlci5mcm9tKCdkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyJywgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS85OTk5OTkvMS8xJztcbiAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3RidGMvd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3NoYXJlYCwge1xuICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICBza2lwS2V5Y2hhaW46IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCBza2lwS2V5Y2hhaW46IHRydWUgfSk7XG5cbiAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjcnlwdCB3ZWJhdXRobiBlbmNyeXB0ZWRQcnYgZm9yIHdhbGxldCBzaGFyZSAoc3BlbmQpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgY29uc3QgcGF0aCA9ICdtLzk5OTk5OS8xLzEnO1xuICAgICAgY29uc3QgcHVia2V5ID0gdG9LZXljaGFpbi5kZXJpdmVQYXRoKHBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gJ3hwcnYxJztcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UxID0gJ2JpdGdvMTIzNCc7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlMiA9ICdiaXRnbzU2NzgnO1xuXG4gICAgICBjb25zdCBnZXRTaGFyaW5nS2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB1c2VySWQsIHB1YmtleSwgcGF0aCB9KTtcblxuICAgICAgY29uc3QgcHViID0gJ1pvMWdnelRVS01ZNWJZbkR2VDVtdFZlWnh6ZjJGYUxUYktrbXZHVWhVUWsnO1xuICAgICAgY29uc3QgZW5jUHJ2MSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJpdmF0ZUtleSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UxIH0pO1xuICAgICAgY29uc3QgZW5jUHJ2MiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJpdmF0ZUtleSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UyIH0pO1xuICAgICAgY29uc3QgZ2V0S2V5Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt3YWxsZXQua2V5SWRzKClbMF19YClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIGlkOiB3YWxsZXQua2V5SWRzKClbMF0sXG4gICAgICAgICAgcHViLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jUHJ2MSxcbiAgICAgICAgICB3ZWJhdXRobkRldmljZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3RwRGV2aWNlSWQ6ICcxMjMnLFxuICAgICAgICAgICAgICBhdXRoZW50aWNhdG9ySW5mbzoge1xuICAgICAgICAgICAgICAgIGNyZWRJRDogJ2NyZWRJRCcsXG4gICAgICAgICAgICAgICAgZm10OiAncGFja2VkJyxcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6ICdzb21lIHZhbHVlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcHJmU2FsdDogJzQ1NicsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZW5jUHJ2MixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIod2FsbGV0LCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLmVuY3J5cHRlZFBydiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlOiB3YWxsZXRQYXNzcGhyYXNlMiB9KTtcbiAgICAgIHN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgZ2V0U2hhcmluZ0tleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgIGdldEtleU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPRkMgbXVsdGkta2V5LXVzZXItS2V5IFdhbGxldCBTaGFyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICBjb25zdCBlbWFpbCA9ICdzaGFyZXRvQHNka3Rlc3QuY29tJztcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gJ3ZpZXcsc3BlbmQnO1xuICAgICAgbGV0IG9mY1dhbGxldDogV2FsbGV0O1xuICAgICAgbGV0IG9mY011bHRpVXNlcktleVdhbGxldDogV2FsbGV0O1xuICAgICAgbGV0IG5vbk11bHRpVXNlcktleVdhbGxldDogV2FsbGV0O1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBvZmNDb2luID0gYml0Z28uY29pbignb2ZjJyk7XG5cbiAgICAgICAgLy8gUmVndWxhciBPRkMgd2FsbGV0IHdpdGhvdXQgbXVsdGkta2V5LXVzZXIta2V5IGZlYXR1cmVcbiAgICAgICAgY29uc3QgcmVndWxhck9mY1dhbGxldERhdGEgPSB7XG4gICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAwYzAwMDAwMDAwJyxcbiAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTgxMDAwMDAwMDAnLFxuICAgICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE4MjAwMDAwMDAwJyxcbiAgICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxODMwMDAwMDAwMCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICB9IGFzIGFueTtcbiAgICAgICAgb2ZjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwgcmVndWxhck9mY1dhbGxldERhdGEpO1xuXG4gICAgICAgIC8vIE9GQyB3YWxsZXQgd2l0aCBtdWx0aS1rZXktdXNlci1rZXkgZmVhdHVyZVxuICAgICAgICBjb25zdCBtdWx0aVVzZXJLZXlXYWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMGQwMDAwMDAwMCcsXG4gICAgICAgICAgY29pbjogJ29mYycsXG4gICAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxODQwMDAwMDAwMCddLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgZmVhdHVyZXM6IFsnbXVsdGkta2V5LXVzZXIta2V5J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGU6ICdvbmNoYWluJyxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICAgIG9mY011bHRpVXNlcktleVdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIG11bHRpVXNlcktleVdhbGxldERhdGEpO1xuXG4gICAgICAgIC8vIE5vbi1tdWx0aS1rZXktdXNlci1rZXkgd2FsbGV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0ZXN0c1xuICAgICAgICBjb25zdCBub25NdWx0aVVzZXJLZXlXYWxsZXREYXRhID0ge1xuICAgICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDMnLFxuICAgICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDInXSxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICB9O1xuICAgICAgICBub25NdWx0aVVzZXJLZXlXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCBub25NdWx0aVVzZXJLZXlXYWxsZXREYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnY3JlYXRlU2hhcmUgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBleGNsdWRlIGtleWNoYWluIHByb3BlcnR5IGZyb20gQVBJIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL29mYy93YWxsZXQvJHtvZmNNdWx0aVVzZXJLZXlXYWxsZXQuaWQoKX0vc2hhcmVgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGJvZHkuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdrZXljaGFpbicpO1xuICAgICAgICAgICAgICAgIGJvZHkudXNlci5zaG91bGQuZXF1YWwodXNlcklkKTtcbiAgICAgICAgICAgICAgICBib2R5LnBlcm1pc3Npb25zLnNob3VsZC5lcXVhbChwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmNyZWF0ZVNoYXJlKGNyZWF0ZVNoYXJlUGFyYW1zKTtcblxuICAgICAgICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbm9uLWVtcHR5IGtleWNoYWluIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQnLFxuICAgICAgICAgICAgICAgIGZyb21QdWJLZXk6ICdmcm9tUHViJyxcbiAgICAgICAgICAgICAgICB0b1B1YktleTogJ3RvUHViJyxcbiAgICAgICAgICAgICAgICBwYXRoOiAnbS85OTk5OTkvMS8xJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldFxuICAgICAgICAgICAgICAuY3JlYXRlU2hhcmUoY3JlYXRlU2hhcmVQYXJhbXMpXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBwcm92aWRlZCBmb3IgbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgb21pdCBrZXljaGFpbiBmcm9tIHJlcXVlc3QgZXZlbiB3aGVuIGVtcHR5IG9iamVjdCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlUGFyYW1zID0ge1xuICAgICAgICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBrZXljaGFpbjoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmlkKCl9L3NoYXJlYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgICAgICAgICAgICBib2R5LnVzZXIuc2hvdWxkLmVxdWFsKHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgYm9keS5wZXJtaXNzaW9ucy5zaG91bGQuZXF1YWwocGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgICAgICAgIGF3YWl0IG9mY011bHRpVXNlcktleVdhbGxldC5jcmVhdGVTaGFyZShjcmVhdGVTaGFyZVBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnbm9uLW11bHRpLWtleS11c2VyLWtleSB3YWxsZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBrZXljaGFpbiBwcm9wZXJ0eSBpbiBBUEkgcmVxdWVzdCB3aGVuIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVQYXJhbXMgPSB7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJJZCxcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZYRGNXRDJ2eHVlYmNUMVpwVEY0VmtlNnFtTVc4eXpkZHdOWXBBUGp2WUVFTDVqTGZ5WVhXMmZ1eHRBeFk4VGdqUFVKTGNmMUM4cXo5TjZWZ1p4QXJLWDRFd0I4ckg1JyxcbiAgICAgICAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQnLFxuICAgICAgICAgICAgICAgIGZyb21QdWJLZXk6ICdmcm9tUHViJyxcbiAgICAgICAgICAgICAgICB0b1B1YktleTogJ3RvUHViJyxcbiAgICAgICAgICAgICAgICBwYXRoOiAnbS85OTk5OTkvMS8xJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL29mYy93YWxsZXQvJHtvZmNXYWxsZXQuaWQoKX0vc2hhcmVgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGJvZHkuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZnJvbVB1YktleScpO1xuICAgICAgICAgICAgICAgIGJvZHkua2V5Y2hhaW4uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3RvUHViS2V5Jyk7XG4gICAgICAgICAgICAgICAgYm9keS5rZXljaGFpbi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGF0aCcpO1xuICAgICAgICAgICAgICAgIGJvZHkudXNlci5zaG91bGQuZXF1YWwodXNlcklkKTtcbiAgICAgICAgICAgICAgICBib2R5LnBlcm1pc3Npb25zLnNob3VsZC5lcXVhbChwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjV2FsbGV0LmNyZWF0ZVNoYXJlKGNyZWF0ZVNoYXJlUGFyYW1zKTtcblxuICAgICAgICAgICAgY3JlYXRlU2hhcmVOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzaGFyZVdhbGxldCBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdtdWx0aS1rZXktdXNlci1rZXkgd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHNraXAga2V5Y2hhaW4gcHJlcGFyYXRpb24gYW5kIHNldCBza2lwS2V5Y2hhaW49dHJ1ZSBpbiBBUEkgcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFNoYXJpbmdLZXlOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5OiAndGVzdHB1YmtleScsIHBhdGg6ICdtLzk5OTk5OS8xLzEnIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdChgL2FwaS92Mi9vZmMvd2FsbGV0LyR7b2ZjTXVsdGlVc2VyS2V5V2FsbGV0LmlkKCl9L3NoYXJlYCwgZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdza2lwS2V5Y2hhaW4nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nKTtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyJywgdXNlcklkKTtcbiAgICAgICAgICAgICAgICBib2R5LnNob3VsZC5oYXZlLnByb3BlcnR5KCdwZXJtaXNzaW9ucycsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAgICAgICAvLyBTdHViIHByZXBhcmVTaGFyZWRLZXljaGFpbiB0byBlbnN1cmUgaXQncyBub3QgY2FsbGVkXG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlU2hhcmVkS2V5Y2hhaW5TdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdwcmVwYXJlU2hhcmVkS2V5Y2hhaW4nKS5yZXNvbHZlcyh7fSk7XG5cbiAgICAgICAgICAgIC8vIFN0dWIgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluIHRvIHByZXZlbnQgYW55IGtleWNoYWluIGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nKTtcbiAgICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIucmVqZWN0cyhuZXcgRXJyb3IoJ2dldEVuY3J5cHRlZFVzZXJLZXljaGFpbiBzaG91bGQgbm90IGJlIGNhbGxlZCcpKTtcblxuICAgICAgICAgICAgYXdhaXQgb2ZjTXVsdGlVc2VyS2V5V2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zIH0pO1xuXG4gICAgICAgICAgICAvLyBWZXJpZnkga2V5Y2hhaW4gcHJlcGFyYXRpb24gbWV0aG9kcyBhcmUgbm90IGNhbGxlZFxuICAgICAgICAgICAgcHJlcGFyZVNoYXJlZEtleWNoYWluU3R1Yi5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgICBjcmVhdGVTaGFyZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgcGFzcyBza2lwS2V5Y2hhaW49dHJ1ZSBhbmQgdW5kZWZpbmVkIGtleWNoYWluIHRvIGNyZWF0ZVNoYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXk6ICd0ZXN0cHVia2V5JywgcGF0aDogJ20vOTk5OTk5LzEvMScgfSk7XG5cbiAgICAgICAgICAgIC8vIFN0dWIgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluIHRvIHByZXZlbnQgYW55IGtleWNoYWluIGZldGNoaW5nXG4gICAgICAgICAgICBjb25zdCBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4nKTtcbiAgICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIucmVqZWN0cyhuZXcgRXJyb3IoJ2dldEVuY3J5cHRlZFVzZXJLZXljaGFpbiBzaG91bGQgbm90IGJlIGNhbGxlZCcpKTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVTdHViID0gc2lub24uc3R1YihvZmNNdWx0aVVzZXJLZXlXYWxsZXQsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBvcHRpb25zIS5za2lwS2V5Y2hhaW4hLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgICAgICAgc2hvdWxkKG9wdGlvbnMhLmtleWNoYWluKS5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCBvZmNNdWx0aVVzZXJLZXlXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMgfSk7XG5cbiAgICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICAgICAgY3JlYXRlU2hhcmVTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIGdldFNoYXJpbmdLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdub24tbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIGtleWNoYWluIHdoZW4gd2FsbGV0IHBhc3NwaHJhc2UgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0b0tleWNoYWluID0gdXR4b0xpYi5iaXAzMi5mcm9tU2VlZChCdWZmZXIuZnJvbSgnZGVhZGJlZWYwMmRlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMicsICdoZXgnKSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gJ20vOTk5OTk5LzEvMSc7XG4gICAgICAgICAgICBjb25zdCBwdWJrZXkgPSB0b0tleWNoYWluLmRlcml2ZVBhdGgocGF0aCkucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnYml0Z28xMjM0JztcbiAgICAgICAgICAgIGNvbnN0IHB1YiA9ICdabzFnZ3pUVUtNWTViWW5EdlQ1bXRWZVp4emYyRmFMVGJLa212R1VoVVFrJztcblxuICAgICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAucG9zdCgnL2FwaS92MS91c2VyL3NoYXJpbmdrZXknLCB7IGVtYWlsIH0pXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdXNlcklkLCBwdWJrZXksIHBhdGggfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVuY1hwcnYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAneHBydjEnLCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvb2ZjL2tleS8ke25vbk11bHRpVXNlcktleVdhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDAsIHtcbiAgICAgICAgICAgICAgaWQ6IG5vbk11bHRpVXNlcktleVdhbGxldC5rZXlJZHMoKVswXSxcbiAgICAgICAgICAgICAgcHViLFxuICAgICAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBlbmNYcHJ2MSxcbiAgICAgICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFyZVN0dWIgPSBzaW5vbi5zdHViKG5vbk11bHRpVXNlcktleVdhbGxldCwgJ2NyZWF0ZVNoYXJlJykuY2FsbHNGYWtlKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEZvciBub24tbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldHMsIGtleWNoYWluIHNob3VsZCBiZSBwcmVzZW50IHdoZW4gc3BlbmQgcGVybWlzc2lvbnMgYXJlIGluY2x1ZGVkXG4gICAgICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5zaG91bGQubm90LmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICAgICAgICBvcHRpb25zIS5rZXljaGFpbiEucHViIS5zaG91bGQuZXF1YWwocHViKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCBub25NdWx0aVVzZXJLZXlXYWxsZXQuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNoYXJlU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgICAgZ2V0S2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnbXVsdGkta2V5LXVzZXIta2V5IGRldGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBkZXRlY3QgbXVsdGkta2V5LXVzZXIta2V5IHdhbGxldCB2aWEgY29pblNwZWNpZmljLmZlYXR1cmVzIGFycmF5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IG9mY0NvaW46IGFueSA9IGJpdGdvLmNvaW4oJ29mYycpO1xuICAgICAgICAgIGNvbnN0IHdhbGxldFdpdGhNdWx0aVVzZXJLZXlGZWF0dXJlID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwge1xuICAgICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwNCcsXG4gICAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDMnXSxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgICBmZWF0dXJlczogWydtdWx0aS1rZXktdXNlci1rZXknXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHdhbGxldFdpdGhvdXRGZWF0dXJlID0gbmV3IFdhbGxldChiaXRnbywgb2ZjQ29pbiwge1xuICAgICAgICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwNScsXG4gICAgICAgICAgICBjb2luOiAnb2ZjJyxcbiAgICAgICAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDQnXSxcbiAgICAgICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgICAgICBmZWF0dXJlczogWydzb21lLW90aGVyLWZlYXR1cmUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHdhbGxldFdpdGhvdXRDb2luU3BlY2lmaWMgPSBuZXcgV2FsbGV0KGJpdGdvLCBvZmNDb2luLCB7XG4gICAgICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDA2JyxcbiAgICAgICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwNSddLFxuICAgICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoJy9hcGkvdjEvdXNlci9zaGFyaW5na2V5JywgeyBlbWFpbCB9KVxuICAgICAgICAgICAgLnRpbWVzKDMpXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5OiAndGVzdHB1YmtleScsIHBhdGg6ICdtLzk5OTk5OS8xLzEnIH0pO1xuXG4gICAgICAgICAgLy8gTXVsdGkta2V5LXVzZXIta2V5IHdhbGxldCBzaG91bGQgc2tpcCBrZXljaGFpblxuICAgICAgICAgIGNvbnN0IGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIxID0gc2lub24uc3R1Yih3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZSwgJ2dldEVuY3J5cHRlZFVzZXJLZXljaGFpbicpO1xuICAgICAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpblN0dWIxLnJlamVjdHMobmV3IEVycm9yKCdnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4gc2hvdWxkIG5vdCBiZSBjYWxsZWQnKSk7XG4gICAgICAgICAgY29uc3QgY3JlYXRlU2hhcmVTdHViMSA9IHNpbm9uXG4gICAgICAgICAgICAuc3R1Yih3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZSwgJ2NyZWF0ZVNoYXJlJylcbiAgICAgICAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucyEuc2tpcEtleWNoYWluIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB3YWxsZXRXaXRoTXVsdGlVc2VyS2V5RmVhdHVyZS5zaGFyZVdhbGxldCh7IGVtYWlsLCBwZXJtaXNzaW9ucyB9KTtcbiAgICAgICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW5TdHViMS5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgICAgY3JlYXRlU2hhcmVTdHViMS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgICAvLyBXYWxsZXQgd2l0aG91dCBtdWx0aS1rZXktdXNlci1rZXkgZmVhdHVyZSBzaG91bGQgcmVzcGVjdCBza2lwS2V5Y2hhaW4gZmxhZ1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YjIgPSBzaW5vbi5zdHViKHdhbGxldFdpdGhvdXRGZWF0dXJlLCAnY3JlYXRlU2hhcmUnKS5jYWxsc0Zha2UoYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0V2l0aG91dEZlYXR1cmUuc2hhcmVXYWxsZXQoeyBlbWFpbCwgcGVybWlzc2lvbnMsIHNraXBLZXljaGFpbjogdHJ1ZSB9KTtcbiAgICAgICAgICBjcmVhdGVTaGFyZVN0dWIyLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgICAgIC8vIFdhbGxldCB3aXRob3V0IGNvaW5TcGVjaWZpYyBzaG91bGQgbm90IGJlIGRldGVjdGVkIGFzIG11bHRpLWtleS11c2VyLWtleVxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYXJlU3R1YjMgPSBzaW5vbi5zdHViKHdhbGxldFdpdGhvdXRDb2luU3BlY2lmaWMsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhd2FpdCB3YWxsZXRXaXRob3V0Q29pblNwZWNpZmljLnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCBza2lwS2V5Y2hhaW46IHRydWUgfSk7XG4gICAgICAgICAgY3JlYXRlU2hhcmVTdHViMy5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IEZyZWV6aW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZnJlZXplIHdhbGxldCBmb3Igc3BlY2lmaWVkIGR1cmF0aW9uIGluIHNlY29uZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGR1cmF0aW9uOiA2MCB9O1xuICAgICAgY29uc3Qgc2NvcGUgPSBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2ZyZWV6ZWAsIHBhcmFtcykucmVwbHkoMjAwLCB7fSk7XG4gICAgICBhd2FpdCB3YWxsZXQuZnJlZXplKHBhcmFtcyk7XG4gICAgICBzY29wZS5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVFNTIFdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCB0c29sID0gYml0Z28uY29pbigndHNvbCcpO1xuICAgIGNvbnN0IHRhZGEgPSBiaXRnby5jb2luKCd0YWRhJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCBldGhXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luOiAndGV0aCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIGNvaW5TcGVjaWZpYzogeyBhZGRyZXNzVmVyc2lvbjogMSB9LFxuICAgICAgdHlwZTogJ2hvdCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHBvbHlnb25XYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc2MzI4MjY1MjBlZTFlNTAwMDcyOTAxNzM1NGFjYWVhYicsXG4gICAgICBjb2luOiAndHBvbHlnb24nLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IGFkYVdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJ2JmMTg5N2ExLWU0YmQtNGI5Ni1iMmE0LWJhMDJjMGZjOTk1NicsXG4gICAgICBjb2luOiAndGFkYScsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IHRzc1NvbFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRzb2wsIHdhbGxldERhdGEpO1xuICAgIGNvbnN0IHRzc0FkYVdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRhZGEsIGFkYVdhbGxldERhdGEpO1xuXG4gICAgbGV0IHRzc0V0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RldGgnKSwgZXRoV2FsbGV0RGF0YSk7XG4gICAgY29uc3QgdHNzUG9seWdvbldhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3Rwb2x5Z29uJyksIHBvbHlnb25XYWxsZXREYXRhKTtcbiAgICBjb25zdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICB9LFxuICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgc3RhdGU6ICdwZW5kaW5nVXNlclNpZ25hdHVyZScsXG4gICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICBwb2xpY2llc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgdW5zaWduZWRUeHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBzaWduYWJsZUhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdEZ1bGw6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICBzdGF0ZTogJ3BlbmRpbmdVc2VyU2lnbmF0dXJlJyxcbiAgICAgIHVzZXJJZDogJ3VzZXJJZCcsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLFxuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgY29tbWl0bWVudFNoYXJlczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIHRzcyB0eFByZWJ1aWxkIGJ1aWxkUGFyYW1zIHdoZW4gcHJlc2lnbiByZXBsYWNlcyB0aGUgdHhQcmVidWlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgfTtcblxuICAgICAgc2FuZGJveC5zdHViKHRzb2wsICdwcmVzaWduVHJhbnNhY3Rpb24nKS5jYWxsc0Zha2UoYXN5bmMgKHByZXNpZ25QYXJhbXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmVzaWduUGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgICAgdHhIZXg6ICdyZWZyZXNoZWQtdHgtaGV4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnb3JpZ2luYWwtdHgtaGV4JyxcbiAgICAgICAgICBidWlsZFBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiAndXNlci1wcnYnLFxuICAgICAgfSk7XG5cbiAgICAgIHNpZ25UeFJlcXVlc3Quc2hvdWxkLmhhdmUuYmVlbi5jYWxsZWRPbmNlKCk7XG4gICAgICBjb25zdCBmaXJzdFNpZ25UeFJlcXVlc3RDYWxsID0gc2lnblR4UmVxdWVzdC5maXJzdENhbGw7XG4gICAgICBhc3NlcnQub2soZmlyc3RTaWduVHhSZXF1ZXN0Q2FsbCk7XG4gICAgICBjb25zdCBzaWduVHhSZXF1ZXN0UGFyYW1zID0gZmlyc3RTaWduVHhSZXF1ZXN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25UeFJlcXVlc3RQYXJhbXMpO1xuICAgICAgc2hvdWxkKHNpZ25UeFJlcXVlc3RQYXJhbXMudHhQYXJhbXMpLmRlZXBFcXVhbChidWlsZFBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJlQnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlMTIzNDUnLFxuICAgICAgICBwcmVidWlsZFR4OiB7IHdhbGxldElkOiB0c3NFdGhXYWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQ6ICdyYW5kb21JZCcgfSxcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgIH07XG5cbiAgICAgIFsnZWRkc2EnLCAnZWNkc2EnXS5mb3JFYWNoKChrZXlDdXJ2ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGRlc2NyaWJlKGtleUN1cnZlLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2FsbGV0ID0ga2V5Q3VydmUgPT09ICdlZGRzYScgPyB0c3NTb2xXYWxsZXQgOiB0c3NFdGhXYWxsZXQ7XG5cbiAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhbmRib3hcbiAgICAgICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAgICAgLnJlc29sdmVzKFt7IGNvbW1vbktleWNoYWluOiAndGVzdCcsIGlkOiAnJywgcHViOiAnJywgdHlwZTogJ2luZGVwZW5kZW50JyB9XSk7XG4gICAgICAgICAgICBpZiAoa2V5Q3VydmUgPT09ICdlZGRzYScpIHtcbiAgICAgICAgICAgICAgc2FuZGJveC5zdHViKFRzb2wucHJvdG90eXBlLCAndmVyaWZ5VHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNhbmRib3guc3R1YihUZXRoLnByb3RvdHlwZSwgJ3ZlcmlmeVRyYW5zYWN0aW9uJykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnaXQgc2hvdWxkIHN1Y2NlZWQgYnV0IG5vdCBzaWduIGlmIHRoZSB0eFJlcXVlc3QgaXMgcGVuZGluZyBhcHByb3ZhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFR4UmVxdWVzdFN0dWIgPSBzYW5kYm94LnN0dWIoQmFzZVRzc1V0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXMoe1xuICAgICAgICAgICAgICAuLi50eFJlcXVlc3RGdWxsLFxuICAgICAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnblRyYW5zYWN0aW9uU3B5ID0gc2FuZGJveC5zcHkoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgd2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcykpIGFzIFR4UmVxdWVzdDtcbiAgICAgICAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc3RhdGUnKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0ZS5zaG91bGQuZXF1YWwoJ3BlbmRpbmdBcHByb3ZhbCcpO1xuICAgICAgICAgICAgZ2V0VHhSZXF1ZXN0U3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TcHkubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnaXQgc2hvdWxkIHN1Y2NlZWQgYW5kIHNpZ24gaWYgdGhlIHR4UmVxdWVzdCBpcyBub3QgcGVuZGluZyBhcHByb3ZhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdldFR4UmVxdWVzdFN0dWIgPSBzYW5kYm94LnN0dWIoQmFzZVRzc1V0aWxzLmRlZmF1bHQucHJvdG90eXBlLCAnZ2V0VHhSZXF1ZXN0Jyk7XG4gICAgICAgICAgICBnZXRUeFJlcXVlc3RTdHViLnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduVHJhbnNhY3Rpb25TdHViID0gc2FuZGJveC5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3RGdWxsLCBzdGF0ZTogJ3NpZ25lZCcgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQucHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zKSkgYXMgVHhSZXF1ZXN0O1xuICAgICAgICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzdGF0ZScpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXRlLnNob3VsZC5lcXVhbCgnc2lnbmVkJyk7XG4gICAgICAgICAgICBnZXRUeFJlcXVlc3RTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICAgIHNpZ25UcmFuc2FjdGlvblN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHByZWJ1aWxkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaW5nbGUgcmVjaXBpZW50IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2luZ2xlIHJlY2lwaWVudCB0cmFuc2ZlciB3aXRoIHBlbmRpbmcgYXBwcm92YWwgaWQgaWYgdHJhbnNhY3Rpb24gaXMgaGF2aW5nIG9uZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh7IC4uLnR4UmVxdWVzdCwgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLCBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnIH0pO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbXVsdGlwbGUgcmVjaXBpZW50IHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMjAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBpc1Rlc3RUcmFuc2FjdGlvbiBmbGFnJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgaXNUZXN0VHJhbnNhY3Rpb246IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZlcmlmeSBpc1Rlc3RUcmFuc2FjdGlvbiBpcyBwYXNzZWQgdG8gcHJlYnVpbGRUeFdpdGhJbnRlbnRcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBjYWxsQXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmdldENhbGwoMCkuYXJnc1swXTtcbiAgICAgICAgY2FsbEFyZ3Muc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lzVGVzdFRyYW5zYWN0aW9uJywgdHJ1ZSk7XG4gICAgICAgIGNhbGxBcmdzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpbnRlbnRUeXBlJywgJ3BheW1lbnQnKTtcbiAgICAgICAgY2FsbEFyZ3Muc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGNhbGxBcmdzLnJlY2lwaWVudHMpO1xuICAgICAgICBjYWxsQXJncy5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIGlzVGVzdFRyYW5zYWN0aW9uOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBlbmFibGUgdG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXTtcbiAgICAgICAgY29uc3QgdG9rZW5OYW1lID0gJ3Rjb2luOnRva2VuTmFtZSc7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBlbmFibGUgdG9rZW4gdHJhbnNhY3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtdO1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAndGNvaW46dG9rZW5OYW1lJztcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgdHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZW5hYmxldG9rZW4nLFxuICAgICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGN1c3RvbSBpbnN0cnVjdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBjb21tZW50ID0gJ1Rlc3QgY29tbWVudCc7XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlSWQgPSAnMTIzJztcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb21tZW50LFxuICAgICAgICAgICAgc2VxdWVuY2VJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24gd2l0aCBtdWx0aXBsZSBpbnN0cnVjdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJ0NvbXB1dGVCdWRnZXQxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnLFxuICAgICAgICAgICAga2V5czogW10sXG4gICAgICAgICAgICBkYXRhOiAnQXdBQTZBTUFBQUFBJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc29sSW5zdHJ1Y3Rpb25zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2dyYW1JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyJyxcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBpc1NpZ25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1dyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRhdGE6ICdTR1ZzYkc4Z1YyOXliR1E9JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBjdXN0b20gaW5zdHJ1Y3Rpb24gdHJhbnNhY3Rpb24gd2l0aCBwZW5kaW5nIGFwcHJvdmFsIGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBzb2xJbnN0cnVjdGlvbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvZ3JhbUlkOiAnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTInLFxuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHVia2V5OiAnNkRhZGtaY3g5SlpnZVFVRGJIaDEyY21xQ3BhcWVobVZ4djZzR3k0OWpyYWgnLFxuICAgICAgICAgICAgICAgIGlzU2lnbmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzV3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0YTogJ1NHVnNiRzhnVjI5eWJHUT0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoeyAuLi50eFJlcXVlc3QsIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJywgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyB9KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGN1c3RvbSBpbnN0cnVjdGlvbiB0cmFuc2FjdGlvbiBmb3IgY29sZCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW107XG4gICAgICAgIGNvbnN0IHNvbEluc3RydWN0aW9ucyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMicsXG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJrZXk6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRhOiAnU0dWc2JHOGdWMjl5YkdRPScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICB0eFJlcXVlc3Qud2FsbGV0VHlwZSA9ICdjb2xkJztcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCBmb3Igbm9uLXRyYW5zZmVyIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHlwZTogJ3N0YWtlJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0cmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQ6IHN0YWtlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBmdWxsIGFwaSB2ZXJzaW9uIGNvbXBhdGliaWxpdHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ZvciBub24gc2VsZi1jdXN0b2RpYWwgKGhvdCkgdHNzIHdhbGxldHMsIHBhcmFtZXRlciBgYXBpVmVyc2lvbmAgbXVzdCBiZSBgZnVsbGAuJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpbmdsZSByZWNpcGllbnQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gZm9yIGZ1bGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzZEYWRrWmN4OUpaZ2VRVURiSGgxMmNtcUNwYXFlaG1WeHY2c0d5NDlqcmFoJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBwcmVidWlsZFRyYW5zYWN0aW9uXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnZnVsbCdcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggdHJhbnNmZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgncGF5bWVudCcpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgZmVlVG9rZW4gcGFyYW1ldGVyIHRvIHByZWJ1aWxkVHhXaXRoSW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVUb2tlbiA9ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDInO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIGZlZVRva2VuLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKHJlY2lwaWVudHMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVUb2tlbiEuc2hvdWxkLmVxdWFsKGZlZVRva2VuKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggdHJhbnNmZXJ0b2tlbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4QUIxMDA5MTJlMTMzQUEwNmNFQjkyMTQ1OWFhRGRCZDYyMzgxRjVBMycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2d0ZXJjMThkcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVydG9rZW4nLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnJlY2lwaWVudHMhLnNob3VsZC5kZWVwRXF1YWwocmVjaXBpZW50cyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmlzVHNzIS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd0cmFuc2ZlclRva2VuJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3IgZXRoIGFjY2VsZXJhdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4QUIxMDA5MTJlMTMzQUEwNmNFQjkyMTQ1OWFhRGRCZDYyMzgxRjVBMycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2d0ZXJjMThkcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmxvd0ZlZVR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIGV0aCBhY2NlbGVyYXRpb25zIGZvciByZWNlaXZlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4QUIxMDA5MTJlMTMzQUEwNmNFQjkyMTQ1OWFhRGRCZDYyMzgxRjVBMycsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogJ2d0ZXJjMThkcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsb3dGZWVUeGlkID0gJzB4NmVhMDdmOTQyMGY0Njc2YmU2NDc4YWIxNjYwZWI5MjQ0NGE3YzY2M2UwZTI0YmVjZTkyOWY3MTVlODgyZTBjZic7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0gJzB4MDYyMTc2YmM5MzQ1ZGEzZThlZTkwMzYxYjBjZjZmZjg4M2JhNzIwNic7XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmxvd0ZlZVR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgYXJnc1swXSEucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbXMgZm9yIHNlaWV2bSBhY2NlbGVyYXRpb24gKHVzZXIgc3R1Y2sgdHgpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweGRlNTBkOWJiZGNkNDc3Yzk2MmJmMWNlYmVjZWY1MGU0NTI1NjVjNTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDRkNmRlYWIxMzZkYTFmMzg3MGRlNGViNmY4Y2Y0NmVjMWUwOGI5YmY5MThiNzY0NTc4YjdiMWM3YWIwOGQ2YjgnO1xuICAgICAgICBjb25zdCByZWNlaXZlQWRkcmVzcyA9ICcweDliYmI5YTAyZTY2ZTE3NjM2ZmQwNjM3YTBlZWUxZTM4ZjQ2MGI2YmEnO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICAvLyBDcmVhdGUgc2VpZXZtIHdhbGxldCBmb3IgdGVzdGluZ1xuICAgICAgICBjb25zdCBzZWlldm1XYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCdzZWlldm0nKSwgd2FsbGV0RGF0YSk7XG5cbiAgICAgICAgYXdhaXQgc2VpZXZtV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIHJlY2VpdmVBZGRyZXNzLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWZXJpZnkgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2FzIGNhbGxlZCB3aXRoIGNvcnJlY3QgcGFyYW1ldGVyc1xuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICAvLyBWYWxpZGF0ZSBhY2NlbGVyYXRpb24gaW50ZW50IHBhcmFtZXRlcnNcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLmxvd0ZlZVR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgYXJnc1swXSEucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdhY2NlbGVyYXRpb24nKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggZmlsbE5vbmNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgY29uc3Qgbm9uY2UgPSAnMSc7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSAnZmlsbE5vbmNlIGNvbW1lbnQnO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzBdIS5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ZpbGxOb25jZScpO1xuICAgICAgICBhcmdzWzBdIS5jb21tZW50IS5zaG91bGQuZXF1YWwoY29tbWVudCk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IHBhcmFtcyBmb3Igd3JhcEFwcHJvdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB3cmFwUGFyYW1zID0geyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzEwMDAwMDAnIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICAgIHdyYXBQYXJhbXMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd3cmFwQXBwcm92ZScpO1xuICAgICAgICBhcmdzWzBdIS53cmFwUGFyYW1zIS5zaG91bGQuZGVlcEVxdWFsKHdyYXBQYXJhbXMpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIHdyYXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbCk7XG5cbiAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICd3cmFwJyxcbiAgICAgICAgICB3cmFwUGFyYW1zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3dyYXAnKTtcbiAgICAgICAgYXJnc1swXSEud3JhcFBhcmFtcyEuc2hvdWxkLmRlZXBFcXVhbCh3cmFwUGFyYW1zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciB1bndyYXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVud3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ3Vud3JhcCcsXG4gICAgICAgICAgdW53cmFwUGFyYW1zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3Vud3JhcCcpO1xuICAgICAgICBhcmdzWzBdIS51bndyYXBQYXJhbXMhLnNob3VsZC5kZWVwRXF1YWwodW53cmFwUGFyYW1zKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBldGggZmlsbE5vbmNlIGZvciByZWNlaXZlIGFkZHJlc3Mgbm9uY2UgZmlsbGluZyB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGNvbnN0IG5vbmNlID0gJzEnO1xuICAgICAgICBjb25zdCBjb21tZW50ID0gJ2ZpbGxOb25jZSBjb21tZW50JztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHgwNjIxNzZiYzkzNDVkYTNlOGVlOTAzNjFiMGNmNmZmODgzYmE3MjA2JztcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICBjb21tZW50LFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnKTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgYXJnc1swXSEubm9uY2UhLnNob3VsZC5lcXVhbChub25jZSk7XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuY29tbWVudCEuc2hvdWxkLmVxdWFsKGNvbW1lbnQpO1xuICAgICAgICBhcmdzWzBdIS5yZWNlaXZlQWRkcmVzcyEuc2hvdWxkLmVxdWFsKHJlY2VpdmVBZGRyZXNzKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBicmlkZ2VGdW5kcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW50ZW50QW1vdW50ID0geyB2YWx1ZTogJzEwMDAwMDAnLCBzeW1ib2w6ICd0aHlwZWV2bScgfTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnYnJpZGdlRnVuZHMnLFxuICAgICAgICAgIGludGVudEFtb3VudCxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShwcmVidWlsZFR4V2l0aEludGVudCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwcmVidWlsZFR4V2l0aEludGVudC5hcmdzWzBdO1xuICAgICAgICBhcmdzWzBdIS5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYnJpZGdlRnVuZHMnKTtcbiAgICAgICAgYXJnc1swXSEuYW1vdW50IS5zaG91bGQuZGVlcEVxdWFsKGludGVudEFtb3VudCk7XG4gICAgICAgIGFyZ3NbMF0hLmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIEV4cG9ydCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnUC1jb3N0d28xeHh0MjdyZ25yanlhdzJ3bXVzd3h1bWxtbWUydGFwajYyczd1eTAnLFxuICAgICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBub25jZTogJzUnLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdleHBvcnQnKTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChyZWNpcGllbnRzKTtcbiAgICAgICAgYXJnc1swXSEubm9uY2UhLnNob3VsZC5lcXVhbCgnNScpO1xuICAgICAgICBhcmdzWzBdIS5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBhcmdzWzFdIS5zaG91bGQuZXF1YWwoJ2Z1bGwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCB0aGUgY29ycmVjdCBwYXJhbXMgZm9yIEltcG9ydCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnSW1wb3J0JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ltcG9ydCcpO1xuICAgICAgICBhcmdzWzBdIS5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKFtdKTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdub25jZScpO1xuICAgICAgICBhcmdzWzBdIS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2ZlZU9wdGlvbnMnKTtcbiAgICAgICAgYXJnc1sxXSEuc2hvdWxkLmVxdWFsKCdmdWxsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggdGhlIGNvcnJlY3QgcGFyYW1zIGZvciBJbXBvcnRUb0MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKEVDRFNBVXRpbHMuRWNkc2FVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3RGdWxsKTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydFRvQycsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkVHhXaXRoSW50ZW50KTtcbiAgICAgICAgY29uc3QgYXJncyA9IHByZWJ1aWxkVHhXaXRoSW50ZW50LmFyZ3NbMF07XG4gICAgICAgIGFyZ3NbMF0hLmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdpbXBvcnR0b2MnKTtcbiAgICAgICAgYXJnc1swXSEucmVjaXBpZW50cyEuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICAgIGFyZ3NbMF0hLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnbm9uY2UnKTtcbiAgICAgICAgYXJnc1swXSEuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGFyZ3NbMV0hLnNob3VsZC5lcXVhbCgnZnVsbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2FsbCBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHRoZSBjb3JyZWN0IGZlZU9wdGlvbnMgd2hlbiBwYXNzaW5nIHVzaW5nIHRoZSBsZWdhY3kgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZEZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICAgIGdhc0xpbWl0OiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuXG4gICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiBleHBlY3RlZEZlZU9wdGlvbnMubWF4RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogZXhwZWN0ZWRGZWVPcHRpb25zLm1heFByaW9yaXR5RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRUeFdpdGhJbnRlbnQpO1xuICAgICAgICBjb25zdCBhcmdzID0gcHJlYnVpbGRUeFdpdGhJbnRlbnQuYXJnc1swXTtcbiAgICAgICAgYXJnc1swXSEuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZEZlZU9wdGlvbnMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggYWNjZWxlcmF0aW9uIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcblxuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbG93RmVlVHhpZCA9ICcweDZlYTA3Zjk0MjBmNDY3NmJlNjQ3OGFiMTY2MGViOTI0NDRhN2M2NjNlMGUyNGJlY2U5MjlmNzE1ZTg4MmUwY2YnO1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudHhpZCEuc2hvdWxkLmVxdWFsKGxvd0ZlZVR4aWQpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHBsYWNlIGZlZVRva2VuIGF0IGludGVudCBsZXZlbCwgbm90IGluIGZlZU9wdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG5cbiAgICAgICAgY29uc3QgZmVlVG9rZW4gPSAnMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyJztcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweEFCMTAwOTEyZTEzM0FBMDZjRUI5MjE0NTlhYURkQmQ2MjM4MUY1QTMnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGZlZVRva2VuLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5mZWVUb2tlbiEuc2hvdWxkLmVxdWFsKGZlZVRva2VuKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZmVlVG9rZW4nKTtcbiAgICAgIH0pO1xuXG4gICAgICBbJ3dyYXAtbmF0aXZlJywgJ3Vud3JhcC1uYXRpdmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlbnRUeXBlKSB7XG4gICAgICAgIGl0KGBwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiBhIHZhbGlkICR7aW50ZW50VHlwZX0gaW50ZW50IHdpdGhvdXQgcmVjaXBpZW50c2AsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuXG4gICAgICAgICAgLy8gVHdvIGluZGVwZW5kZW50IHNpdGVzIGluIHBvcHVsYXRlSW50ZW50IG11c3Qga25vdyBhYm91dCB0aGlzIGludGVudFR5cGU6XG4gICAgICAgICAgLy8gdGhlIHJlY2lwaWVudHMtcmVxdWlyZWQgZXhlbXB0aW9uIGxpc3QsIGFuZCB0aGUgRVZNIGludGVudC1zaGFwZSBzd2l0Y2guXG4gICAgICAgICAgLy8gTWlzc2luZyB0aGUgZmlyc3QgbWFrZXMgdGhpcyBjYWxsIHRocm93IG9uIHRoZSByZWNpcGllbnRzIGFzc2VydGlvblxuICAgICAgICAgIC8vIGJlZm9yZSB0aGUgc3dpdGNoIGlzIGV2ZXIgcmVhY2hlZC5cbiAgICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIGludGVudFR5cGUsXG4gICAgICAgICAgICBkZWZpUGFyYW1zOiB7IHZhdWx0SWQ6ICdodGV0aC13ZXRoLXRlc3QnLCBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKGludGVudFR5cGUpO1xuICAgICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgaW50ZW50LnZhdWx0SWQhLnNob3VsZC5lcXVhbCgnaHRldGgtd2V0aC10ZXN0Jyk7XG4gICAgICAgICAgLy8gQSBwbGFpbiBgYW1vdW50YCwgbm90IHRoZSBgc2hhcmVUb2tlbkFtb3VudGAgZGVmaS13aXRoZHJhdyB1c2VzIGZvciBzaGFyZXMuXG4gICAgICAgICAgaW50ZW50LmFtb3VudCEuc2hvdWxkLmVxdWFsKCcxMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgICAgICAgaW50ZW50LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnc2hhcmVUb2tlbkFtb3VudCcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgY29yZWRhbyBhY2NlbGVyYXRpb24gaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2NvcmVkYW8nKSk7XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg2ZWEwN2Y5NDIwZjQ2NzZiZTY0NzhhYjE2NjBlYjkyNDQ0YTdjNjYzZTBlMjRiZWNlOTI5ZjcxNWU4ODJlMGNmJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdjb3JlZGFvJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgICBsb3dGZWVUeGlkLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudHhpZCEuc2hvdWxkLmVxdWFsKGxvd0ZlZVR4aWQpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBzZWlldm0gYWNjZWxlcmF0aW9uIGludGVudCBmb3Igc3R1Y2sgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignc2VpZXZtJykpO1xuXG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg0ZDZkZWFiMTM2ZGExZjM4NzBkZTRlYjZmOGNmNDZlYzFlMDhiOWJmOTE4Yjc2NDU3OGI3YjFjN2FiMDhkNmI4JztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHg5YmJiOWEwMmU2NmUxNzYzNmZkMDYzN2EwZWVlMWUzOGY0NjBiNmJhJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdzZWlldm0nKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAgIGxvd0ZlZVR4aWQsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGFjY2VsZXJhdGlvbiBpbnRlbnQgc3RydWN0dXJlXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudHhpZCEuc2hvdWxkLmVxdWFsKGxvd0ZlZVR4aWQpO1xuICAgICAgICBpbnRlbnQucmVjZWl2ZUFkZHJlc3MhLnNob3VsZC5lcXVhbChyZWNlaXZlQWRkcmVzcyk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnYWNjZWxlcmF0aW9uJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGV0aCBhY2NlbGVyYXRpb24gaW50ZW50IGZvciByZWNlaXZlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG5cbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvd0ZlZVR4aWQgPSAnMHg2ZWEwN2Y5NDIwZjQ2NzZiZTY0NzhhYjE2NjBlYjkyNDQ0YTdjNjYzZTBlMjRiZWNlOTI5ZjcxNWU4ODJlMGNmJztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHgwNjIxNzZiYzkzNDVkYTNlOGVlOTAzNjFiMGNmNmZmODgzYmE3MjA2JztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICAgbG93RmVlVHhpZCxcbiAgICAgICAgICByZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnR4aWQhLnNob3VsZC5lcXVhbChsb3dGZWVUeGlkKTtcbiAgICAgICAgaW50ZW50LnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2FjY2VsZXJhdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggZmlsbE5vbmNlIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5vbmNlID0gJzEnO1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50Lm5vbmNlIS5zaG91bGQuZXF1YWwobm9uY2UpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ZpbGxOb25jZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggZmlsbE5vbmNlIGludGVudCBmb3IgcmVjZWl2ZSBhZGRyZXNzIG5vbmNlIGZpbGxpbmcgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcbiAgICAgICAgY29uc3QgcmVjZWl2ZUFkZHJlc3MgPSAnMHgwNjIxNzZiYzkzNDVkYTNlOGVlOTAzNjFiMGNmNmZmODgzYmE3MjA2JztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2ZpbGxOb25jZScsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgcmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC5ub25jZSEuc2hvdWxkLmVxdWFsKG5vbmNlKTtcbiAgICAgICAgaW50ZW50LnJlY2VpdmVBZGRyZXNzIS5zaG91bGQuZXF1YWwocmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ2ZpbGxOb25jZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBldGggdG9rZW5BcHByb3ZhbCBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b2tlbk5hbWUgPSAndXNkYyc7XG5cbiAgICAgICAgY29uc3QgaW50ZW50ID0gbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICd0b2tlbkFwcHJvdmFsJyxcbiAgICAgICAgICB0b2tlbk5hbWUsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgICAgICBpbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3Rva2VuQXBwcm92YWwnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgcG9seWdvbiB0b2tlbkFwcHJvdmFsIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9ICd1c2R0JztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0cG9seWdvbicpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAgIHRva2VuTmFtZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50LnRva2VuTmFtZSEuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgndG9rZW5BcHByb3ZhbCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBic2MgdG9rZW5BcHByb3ZhbCBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndGJzYycpKTtcbiAgICAgICAgY29uc3QgZmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6IDMwMDAwMDAwMDAsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRva2VuTmFtZSA9ICdidXNkJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0YnNjJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICAgdG9rZW5OYW1lLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycsIHVuZGVmaW5lZCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQudG9rZW5OYW1lIS5zaG91bGQuZXF1YWwodG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd0b2tlbkFwcHJvdmFsJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmV0dXJuIHZhbGlkIGV0aCB3cmFwQXBwcm92ZSBpbnRlbnQgZnJvbSB3cmFwUGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICAgIHdyYXBQYXJhbXMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LmZlZU9wdGlvbnMhLnNob3VsZC5kZWVwRXF1YWwoZmVlT3B0aW9ucyk7XG4gICAgICAgIGludGVudC50b2tlbk5hbWUhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLnRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5hbW91bnQhLnNob3VsZC5lcXVhbCh3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnd3JhcEFwcHJvdmUnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgZXRoIHdyYXAgaW50ZW50IGZyb20gd3JhcFBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuXG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJpdGdvLmNvaW4oJ2h0ZXRoJyksIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcCcsXG4gICAgICAgICAgd3JhcFBhcmFtcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJywgdW5kZWZpbmVkKTtcbiAgICAgICAgaW50ZW50LnRva2VuTmFtZSEuc2hvdWxkLmVxdWFsKHdyYXBQYXJhbXMudG9rZW5OYW1lKTtcbiAgICAgICAgaW50ZW50LmFtb3VudCEuc2hvdWxkLmVxdWFsKHdyYXBQYXJhbXMuYW1vdW50KTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCd3cmFwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BvcHVsYXRlIGludGVudCBzaG91bGQgcmVxdWlyZSB3cmFwUGFyYW1zIGZvciB3cmFwQXBwcm92ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgKCgpID0+XG4gICAgICAgICAgbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoYml0Z28uY29pbignaHRldGgnKSwge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICAgIH0pKS5zaG91bGQudGhyb3coL3dyYXBQYXJhbXMvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBub25jZSA9ICcxJztcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgY3VzdG9kaWFuVHJhbnNhY3Rpb25JZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnZmlsbE5vbmNlJyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbnRlbnQuY3VzdG9kaWFuVHJhbnNhY3Rpb25JZCEuc2hvdWxkLmVxdWFsKCd1bml0dGVzdCcpO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmRlZXBFcXVhbChmZWVPcHRpb25zKTtcbiAgICAgICAgaW50ZW50Lm5vbmNlIS5zaG91bGQuZXF1YWwobm9uY2UpO1xuICAgICAgICBpbnRlbnQuaXNUc3MhLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdmaWxsTm9uY2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncG9wdWxhdGUgaW50ZW50IHNob3VsZCByZXR1cm4gdmFsaWQgYnJpZGdlRnVuZHMgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMoYml0Z28sIGJpdGdvLmNvaW4oJ2h0ZXRoJykpO1xuICAgICAgICBjb25zdCBhbW91bnQgPSB7IHZhbHVlOiAnMTAwMDAwMCcsIHN5bWJvbDogJ3RoeXBlZXZtJyB9O1xuICAgICAgICBjb25zdCBmZWVPcHRpb25zID0ge1xuICAgICAgICAgIG1heEZlZVBlckdhczogMzAwMDAwMDAwMCxcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2JyaWRnZUZ1bmRzJyxcbiAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdicmlkZ2VGdW5kcycpO1xuICAgICAgICBpbnRlbnQuYW1vdW50IS5zaG91bGQuZGVlcEVxdWFsKGFtb3VudCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY2lwaWVudHMnLCB1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwb3B1bGF0ZSBpbnRlbnQgc2hvdWxkIHJldHVybiB2YWxpZCBleHBvcnQgaW50ZW50IGZvciBFVk0gY3Jvc3MtY2hhaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbignaHRldGgnKSk7XG4gICAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiAzMDAwMDAwMDAwLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAyMDAwMDAwMDAwLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdQLWNvc3R3bzF4eHQyN3JnbnJqeWF3MndtdXN3eHVtbG1tZTJ0YXBqNjJzN3V5MCcsXG4gICAgICAgICAgICBhbW91bnQ6ICc1MDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2V4cG9ydCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBmZWVPcHRpb25zLFxuICAgICAgICAgIG5vbmNlOiAnNScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnZXhwb3J0Jyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuZGVlcEVxdWFsKGZlZU9wdGlvbnMpO1xuICAgICAgICBpbnRlbnQubm9uY2UhLnNob3VsZC5lcXVhbCgnNScpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyEuc2hvdWxkLmJlLmFuLkFycmF5KCkud2l0aC5sZW5ndGhPZigxKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLmFkZHJlc3MuYWRkcmVzcy5zaG91bGQuZXF1YWwocmVjaXBpZW50c1swXS5hZGRyZXNzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2luZ2xlIHJlY2lwaWVudCB0cmFuc2ZlciB0cmFuc2FjdGlvbiBwcm92aWRpbmcgYXBpVmVyc2lvbiBwYXJhbWV0ZXIgYXMgXCJmdWxsXCIgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc2RGFka1pjeDlKWmdlUVVEYkhoMTJjbXFDcGFxZWhtVnh2NnNHeTQ5anJhaCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdEZ1bGwpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2Z1bGwnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgdW5zcGVudHMgYW5kIHNlcXVlbmNlIGlkIGluIHRyYW5zZmVyVG9rZW4gYnVpbGQgcGF5bG9hZCBmb3IgYWRhIHRva2VuIHdpdGhkcmF3YWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgICAgIGlkZlNpZ25lZFRpbWVzdGFtcDogJzIwMjUtMTEtMTBUMDg6MTQ6MTkuMDEwWicsXG4gICAgICAgICAgaWRmVXNlcklkOiAnNWNhZTMxMzBmOGY0NTYxZDUxZGZjYmZkYWFmYmE5YjknLFxuICAgICAgICAgIGlkZlZlcnNpb246IDEsXG4gICAgICAgICAgaW5zdGFudDogZmFsc2UsXG4gICAgICAgICAgY29tbWVudDogJycsXG4gICAgICAgICAgdW5zcGVudHM6IFsnNzliYWMyYjNjNDNkZTE3NjdmMDczMWNhZjkyZDVjZDdlZGZlNWRhNDMzYjA1NjAwMmRmNDJmMGMwNTVhMzAyMzoxJ10sXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhbW91bnQ6ICcyJyxcbiAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAnYWRkcl90ZXN0MXF6NG0zbXM5bnhyYTM2dDZydHo0bHpjOXprazNkNHF3Y3BjcjN5eHdoeGxzbHBhdGhyaHF0eHY4bXI1aDV4azl0NzlzMjlkZHptMnFhc3JzOHpndmF3ZGxwN3JzNDRnNWhjJyxcbiAgICAgICAgICAgICAgdG9rZW5OYW1lOiAndGFkYTp3YXRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VJZDogJzRRTHRYa0JyWmhjNkF0ZWNGWlZuSENZSDFVQWsnLFxuICAgICAgICAgIG51bUJsb2NrczogMixcbiAgICAgICAgICB0eEZvcm1hdDogJ3BzYnQnIGFzIGNvbnN0LFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBjYXB0dXJlZFJlcXVlc3RCb2R5OiBhbnk7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzQWRhV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSA9IGJvZHk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdW5zaWduZWRUeHM6IFsndHgnXSB9KTtcblxuICAgICAgICBhd2FpdCB0c3NBZGFXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYXB0dXJlZFJlcXVlc3RCb2R5JywgY2FwdHVyZWRSZXF1ZXN0Qm9keSk7XG4gICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCd1bnNwZW50cycpO1xuICAgICAgICBjYXB0dXJlZFJlcXVlc3RCb2R5IS5pbnRlbnQudW5zcGVudHMuc2hvdWxkLmRlZXBFcXVhbChwYXJhbXMudW5zcGVudHMpO1xuICAgICAgICBjYXB0dXJlZFJlcXVlc3RCb2R5IS5pbnRlbnQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NlcXVlbmNlSWQnKTtcbiAgICAgICAgY2FwdHVyZWRSZXF1ZXN0Qm9keSEuaW50ZW50LnNlcXVlbmNlSWQuc2hvdWxkLmVxdWFsKHBhcmFtcy5zZXF1ZW5jZUlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgndmlkZW9BcHByb3ZlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZpZGVvQXBwcm92ZXJzID0gWyc1Y2FlMzEzMGY4ZjQ1NjFkNTFkZmNiZmRhYWZiYTliOScsICc1Y2FlMzEzMGY4ZjQ1NjFkNTFkZmNiZmRhYWZiYTliYSddO1xuICAgICAgICBjb25zdCBhZGFBZGRyZXNzID1cbiAgICAgICAgICAnYWRkcl90ZXN0MXF6NG0zbXM5bnhyYTM2dDZydHo0bHpjOXprazNkNHF3Y3BjcjN5eHdoeGxzbHBhdGhyaHF0eHY4bXI1aDV4azl0NzlzMjlkZHptMnFhc3JzOHpndmF3ZGxwN3JzNDRnNWhjJztcblxuICAgICAgICBhc3luYyBmdW5jdGlvbiBjYXB0dXJlVHhSZXF1ZXN0Qm9keShwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgICBsZXQgY2FwdHVyZWRSZXF1ZXN0Qm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NBZGFXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2AsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkUmVxdWVzdEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHVuc2lnbmVkVHhzOiBbJ3R4J10gfSk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NBZGFXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IC4uLnBhcmFtcywgcHJldmlldzogdHJ1ZSB9KTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QoY2FwdHVyZWRSZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgcmV0dXJuIGNhcHR1cmVkUmVxdWVzdEJvZHk7XG4gICAgICAgIH1cblxuICAgICAgICBpdCgnc2hvdWxkIHNlbmQgdmlkZW9BcHByb3ZlcnMgYXMgYSB0b3AtbGV2ZWwgZmllbGQgZm9yIHRyYW5zZmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY2FwdHVyZVR4UmVxdWVzdEJvZHkoe1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzInLCBhZGRyZXNzOiBhZGFBZGRyZXNzIH1dLFxuICAgICAgICAgICAgdmlkZW9BcHByb3ZlcnMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBib2R5LnZpZGVvQXBwcm92ZXJzLnNob3VsZC5kZWVwRXF1YWwodmlkZW9BcHByb3ZlcnMpO1xuICAgICAgICAgIGJvZHkuaW50ZW50LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgndmlkZW9BcHByb3ZlcnMnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBzZW5kIHZpZGVvQXBwcm92ZXJzIGFzIGEgdG9wLWxldmVsIGZpZWxkIGZvciB0b2tlbiB0cmFuc2ZlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGNhcHR1cmVUeFJlcXVlc3RCb2R5KHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcnRva2VuJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzInLCBhZGRyZXNzOiBhZGFBZGRyZXNzLCB0b2tlbk5hbWU6ICd0YWRhOndhdGVyJyB9XSxcbiAgICAgICAgICAgIHZpZGVvQXBwcm92ZXJzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYm9keS52aWRlb0FwcHJvdmVycy5zaG91bGQuZGVlcEVxdWFsKHZpZGVvQXBwcm92ZXJzKTtcbiAgICAgICAgICBib2R5LmludGVudC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3ZpZGVvQXBwcm92ZXJzJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IHNlbmQgdmlkZW9BcHByb3ZlcnMgd2hlbiBub25lIGFyZSBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY2FwdHVyZVR4UmVxdWVzdEJvZHkoe1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFtb3VudDogJzInLCBhZGRyZXNzOiBhZGFBZGRyZXNzIH1dLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYm9keS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3ZpZGVvQXBwcm92ZXJzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gc2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2lnbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzaWduVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3QucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNpZ25UcmFuc2FjdGlvblxuICAgICAgICBzaWduVHhSZXF1ZXN0LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHR4UmVxdWVzdCwgcHJ2OiAnc2VjcmV0S2V5JywgcmVxSWQgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICBwcnY6ICdzZXJjcmV0S2V5JyxcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gc2lnbiB0cmFuc2FjdGlvbiB3aXRob3V0IHR4UmVxdWVzdElkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICBwcnY6ICdzZXJjcmV0S2V5JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eFJlcXVlc3RJZCByZXF1aXJlZCB0byBzaWduIHRyYW5zYWN0aW9ucyB3aXRoIFRTUycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFsnZWRkc2EnLCAnZWNkc2EnXS5mb3JFYWNoKChrZXlDdXJ2ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGRlc2NyaWJlKGtleUN1cnZlLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2FsbGV0ID0ga2V5Q3VydmUgPT09ICdlZGRzYScgPyB0c3NTb2xXYWxsZXQgOiB0c3NFdGhXYWxsZXQ7XG4gICAgICAgICAgbGV0IGdldEtleXNTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICAgICAgbGV0IHNpZ25UcmFuc2FjdGlvblN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViID0gc2FuZGJveC5zdHViKEtleWNoYWlucy5wcm90b3R5cGUsICdnZXRLZXlzRm9yU2lnbmluZycpO1xuXG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViID0gc2FuZGJveFxuICAgICAgICAgICAgICAuc3R1YihXYWxsZXQucHJvdG90eXBlLCAnc2lnblRyYW5zYWN0aW9uJylcbiAgICAgICAgICAgICAgLnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0RnVsbCwgc3RhdGU6ICdzaWduZWQnIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViLnJlc29sdmVzKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1vbktleWNoYWluOiAndGVzdCcsXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICAgIHB1YjogJycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9QQVNTUEhSQVNFIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdhbGxldC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICAgICAgICByZXNwb25zZS5zaG91bGQuZGVlcEVxdWFsKHsgLi4udHhSZXF1ZXN0RnVsbCwgc3RhdGU6ICdzaWduZWQnIH0pO1xuXG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdGhlIGtleWNoYWluIGRvZXNudCBoYXZlIHRoZSBlbmNyeXB0ZWRLZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5yZXNvbHZlcyhbeyBjb21tb25LZXljaGFpbjogJ3Rlc3QnLCBpZDogJycsIHB1YjogJycsIHR5cGU6ICd0c3MnIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogVGVzdEJpdEdvLlYyLlRFU1RfRVRIX1dBTExFVF9QQVNTUEhSQVNFIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgICAgICAgLmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24ocGFyYW1zKVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndGhlIHVzZXIga2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcblxuICAgICAgICAgICAgZ2V0S2V5c1N0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgICAgc2lnblRyYW5zYWN0aW9uU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgcGFzc3dvcmQgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGdldEtleXNTdHViLnJlc29sdmVzKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1vbktleWNoYWluOiAndGVzdCcsXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICAgIHB1YjogJycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICAgICAgICAgJ3tcIml2XCI6XCIxNUZzYkRWSTF6RzlPZ2dEOFlYK0hnPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiaEhiTkgzU3ovYVU9XCIsXCJjdFwiOlwiV29OVkt6N2FmaVJ4WEkydy9Za3pNZE15b1FnL0IxNXUxUThhUWdpOTZqSlo5d2s2VElhU0VjNmJYRkgzQUh6RDlNZEpDV0pRVXBSaG9RYy9yZ3l0Y242OXNjUFRqS2VleVZNRWxHQ3haZEZWUy9wc1FjTkUrbHVlMy8vMlpseGorNnQxTmt2WU8rOHlBZXpTTVJCSzVPZGZ0WEVqTlFJPVwifScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3JhbmRvbXBhc3MnLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAgICAgICAuZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbihwYXJhbXMpXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGB1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZWApO1xuXG4gICAgICAgICAgICBnZXRLZXlzU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgICAgICBzaWduVHJhbnNhY3Rpb25TdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NpZ25BbmRTZW5kVHhSZXF1ZXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhhbXBsZVNpZ25lZFR4ID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzJyxcbiAgICAgICAgdHhpZDogJzB4NDU2JyxcbiAgICAgICAgc3RhdHVzOiAnc2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2lnbiBsaXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkZWxldGVTaWduYXR1cmVTaGFyZXNTcHkgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnZGVsZXRlU2lnbmF0dXJlU2hhcmVzJyk7XG4gICAgICAgIGNvbnN0IGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkgPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbicpO1xuICAgICAgICBnZXRVc2VyS2V5QW5kU2lnblRzc1R4U3B5LnJlc29sdmVzKGV4YW1wbGVTaWduZWRUeCk7XG4gICAgICAgIGNvbnN0IHN1Ym1pdFR4U3B5ID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3N1Ym1pdFRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN1Ym1pdFR4U3B5LnJlc29sdmVzKGV4YW1wbGVTaWduZWRUeCk7XG5cbiAgICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2lnbkFuZFNlbmRUeFJlcXVlc3Qoe1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICBpc1R4UmVxdWVzdEZ1bGw6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2Uoc3VibWl0VHhTcHkpO1xuICAgICAgICBzaWduZWRUeC5zaG91bGQuZGVlcEVxdWFsKGV4YW1wbGVTaWduZWRUeCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzaWduIGZ1bGwgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVNpZ25hdHVyZVNoYXJlc1NweSA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKTtcbiAgICAgICAgY29uc3QgZ2V0VXNlcktleUFuZFNpZ25Uc3NUeFNweSA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdnZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uJyk7XG4gICAgICAgIGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkucmVzb2x2ZXMoZXhhbXBsZVNpZ25lZFR4KTtcblxuICAgICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduQW5kU2VuZFR4UmVxdWVzdCh7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIGlzVHhSZXF1ZXN0RnVsbDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkT25jZShkZWxldGVTaWduYXR1cmVTaGFyZXNTcHkpO1xuICAgICAgICBzYW5kYm94LmFzc2VydC5jYWxsZWRPbmNlKGdldFVzZXJLZXlBbmRTaWduVHNzVHhTcHkpO1xuICAgICAgICBzaWduZWRUeC5zaG91bGQuZGVlcEVxdWFsKGV4YW1wbGVTaWduZWRUeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNZXNzYWdlIFNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhhc2ggPSAnMHhycnJzc3MxYic7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ2hlbGxvIHdvcmxkJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZzogVHhSZXF1ZXN0ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3NpZ25NZXNzYWdlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgIHVuc2lnbmVkTWVzc2FnZXM6IFtdLFxuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2VSYXc6ICdoZWxsbyB3b3JsZCcsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICAgIGNvbWJpbmVTaWdTaGFyZTogJzA6cnJyOnNzczozJyxcbiAgICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgbGV0IHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlO1xuICAgICAgY29uc3QgbWVzc2FnZVNpZ25pbmdDb2lucyA9IFsndGV0aCcsICd0cG9seWdvbiddO1xuICAgICAgY29uc3QgZXhwZWN0ZWQ6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHJlcUlkLnRvU3RyaW5nKCksXG4gICAgICAgIHR4SGFzaCxcbiAgICAgICAgc2lnbmF0dXJlOiB0eEhhc2gsXG4gICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgbWVzc2FnZUVuY29kZWQsXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlLnJlc29sdmVzKHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcbiAgICAgICAgc2FuZGJveFxuICAgICAgICAgIC5zdHViKEtleWNoYWlucy5wcm90b3R5cGUsICdnZXRLZXlzRm9yU2lnbmluZycpXG4gICAgICAgICAgLnJlc29sdmVzKFt7IGNvbW1vbktleWNoYWluOiAndGVzdCcsIGlkOiAnJywgcHViOiAnJywgdHlwZTogJ2luZGVwZW5kZW50JyB9XSk7XG4gICAgICAgIHNpbm9uLnN0dWIoRWNkc2EucHJvdG90eXBlLCAndmVyaWZ5JykucmVzb2x2ZXModHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICB9KTtcblxuICAgICAgbWVzc2FnZVNpZ25pbmdDb2lucy5tYXAoKGNvaW5OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkV2l0aENvaW5GaWVsZCA9IHsgLi4uZXhwZWN0ZWQsIGNvaW46ICd0ZXRoJyB9O1xuXG4gICAgICAgIHRzc0V0aFdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oY29pbk5hbWUpLCBldGhXYWxsZXREYXRhKTtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZy50eFJlcXVlc3RJZDtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSB0eCBSZXF1ZXN0IHdpdGggc2lnbk1lc3NhZ2UgaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCB0c3NFdGhXYWxsZXQuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICAgICAgICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHhSZXF1ZXN0LnNob3VsZC5kZWVwRXF1YWwodHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUgcHJlcGFyZWRUcmFuc2FjdGlvbiBpbiB0aGUgbXNncmVxdWVzdHMgYm9keSB3aGVuIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHByZXBhcmVkVHJhbnNhY3Rpb24gPSAnYmFzZTY0LXByZXBhcmVkLXRyYW5zYWN0aW9uLWJ5dGVzJztcbiAgICAgICAgICBsZXQgY2FwdHVyZWRCb2R5OiBhbnk7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2AsIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkQm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VSYXcsXG4gICAgICAgICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxLFxuICAgICAgICAgICAgICBwcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQucHJlcGFyZWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwocHJlcGFyZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBbJHtjb2luTmFtZX1dIHNob3VsZCBzaWduIG1lc3NhZ2VgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnbk1lc3NhZ2VUc3MnIGFzIGFueSk7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgbWVzc2FnZVJhdywgdHhSZXF1ZXN0SWQsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25NZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRXaXRoQ29pbkZpZWxkKTtcbiAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduTWVzc2FnZVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnbk1lc3NhZ2VPcHRpb25zO1xuICAgICAgICAgIGFjdHVhbEFyZy5tZXNzYWdlPy5tZXNzYWdlRW5jb2RlZD8uc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgWyR7Y29pbk5hbWV9XSBzaG91bGQgc2lnbiBtZXNzYWdlIHdoZW4gY3VzdG9kaWFuTWVzc2FnZUlkIGlzIHByb3ZpZGVkYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25NZXNzYWdlVHNzJyBhcyBhbnkpO1xuICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6ICd1bml0dGVzdCcsXG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgbWVzc2FnZVJhdywgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEgfSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lnbk1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFdpdGhDb2luRmllbGQpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25NZXNzYWdlVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnM7XG4gICAgICAgICAgYWN0dWFsQXJnLm1lc3NhZ2U/Lm1lc3NhZ2VFbmNvZGVkPy5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShgXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcbiR7bWVzc2FnZVJhdy5sZW5ndGh9JHttZXNzYWdlUmF3fWApLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGBbJHtjb2luTmFtZX1dIHNob3VsZCBzaWduIG1lc3NhZ2Ugd2hlbiB0eFJlcXVlc3RJZCBub3QgcHJvdmlkZWRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnbk1lc3NhZ2VUc3MnIGFzIGFueSk7XG4gICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvck1lc3NhZ2VTaWduaW5nKTtcblxuICAgICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduTWVzc2FnZS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkV2l0aENvaW5GaWVsZCk7XG4gICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbk1lc3NhZ2VUc3NTcHkuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdIGFzIFdhbGxldFNpZ25NZXNzYWdlT3B0aW9ucztcbiAgICAgICAgICBhY3R1YWxBcmcubWVzc2FnZT8ubWVzc2FnZUVuY29kZWQ/LnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGBcXHUwMDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XFxuJHttZXNzYWdlUmF3Lmxlbmd0aH0ke21lc3NhZ2VSYXd9YCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYFske2NvaW5OYW1lfV0gc2hvdWxkIGluY2x1ZGUgcHJlcGFyZWRUcmFuc2FjdGlvbiB3aGVuIHNpZ25pbmcgYSBmcmVzaCBtZXNzYWdlIHJlcXVlc3RgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHJlcGFyZWRUcmFuc2FjdGlvbiA9ICdiYXNlNjQtcHJlcGFyZWQtdHJhbnNhY3Rpb24tYnl0ZXMnO1xuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSwgcHJlcGFyZWRUcmFuc2FjdGlvbiB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQucHJlcGFyZWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwocHJlcGFyZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIG1lc3NhZ2Ugd2l0aCBlbXB0eSBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzRXRoV2FsbGV0XG4gICAgICAgICAgICAuc2lnbk1lc3NhZ2Uoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCB0eFJlcXVlc3RJZCwgbWVzc2FnZVN0YW5kYXJkVHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEgfSxcbiAgICAgICAgICAgICAgcHJ2OiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ1NPTCBtZXNzYWdlIHNpZ25pbmcgKFVURi04IHN0cmluZyBwYXRoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc29sU2lnbmVyQWRkcmVzcyA9ICdKOFRFUEZxTkpqRlRwMk5HSHVXZ2lqeXVGNDVMcnpvMmZlWjYxa1M3eVkycSc7XG4gICAgICAgIC8vIHRoZSBtZXNzYWdlIGNsYXNzIHRoZSBzaWduaW5nIHN0YWNrIChCR01fU09MX01FU1NBR0UpIGFjY2VwdHM6IHdlbGwtZm9ybWVkIFNJV1NcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZVJhdyA9IFtcbiAgICAgICAgICAnaGFzdHJhLmlvIHdhbnRzIHlvdSB0byBzaWduIGluIHdpdGggeW91ciBTb2xhbmEgYWNjb3VudDonLFxuICAgICAgICAgIHNvbFNpZ25lckFkZHJlc3MsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFlvdSBhcmUgcHJvdmluZyB5b3Ugb3duICR7c29sU2lnbmVyQWRkcmVzc30uYCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnVVJJOiBodHRwczovL2hhc3RyYS5pbycsXG4gICAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICAgJ05vbmNlOiAzMWE2YmFiNScsXG4gICAgICAgICAgJ0lzc3VlZCBBdDogMjAyNi0wOS0yMVQxMDowMDowMFonLFxuICAgICAgICAgICdSZXNvdXJjZXM6JyxcbiAgICAgICAgICAnLSBodHRwczovL3ByaXZ5LmlvJyxcbiAgICAgICAgXS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZUVuY29kZWQgPSBCdWZmZXIuZnJvbShzb2xNZXNzYWdlUmF3LCAndXRmOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgY29uc3Qgc2l3c0Jhc2VMaW5lcyA9IFtcbiAgICAgICAgICAnaGFzdHJhLmlvIHdhbnRzIHlvdSB0byBzaWduIGluIHdpdGggeW91ciBTb2xhbmEgYWNjb3VudDonLFxuICAgICAgICAgIHNvbFNpZ25lckFkZHJlc3MsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICAgJ05vbmNlOiAzMWE2YmFiNScsXG4gICAgICAgICAgJ0lzc3VlZCBBdDogMjAyNi0wOS0yMVQxMDowMDowMFonLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBidWlsZFNpd3MgPSAoc3RhdGVtZW50Pzogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgICAgWy4uLnNpd3NCYXNlTGluZXMuc2xpY2UoMCwgMyksIC4uLihzdGF0ZW1lbnQgPyBbc3RhdGVtZW50LCAnJ10gOiBbXSksIC4uLnNpd3NCYXNlTGluZXMuc2xpY2UoMyldLmpvaW4oJ1xcbicpO1xuICAgICAgICAvLyBhZGRpbmcgYSBzdGF0ZW1lbnQgbGluZSB0byB0aGUgbm8tc3RhdGVtZW50IHRlbXBsYXRlIGFkZHMgaXRzIGJ5dGVzICsgMiBuZXdsaW5lc1xuICAgICAgICBjb25zdCBzaXdzT2ZTaXplID0gKGJ5dGVMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PlxuICAgICAgICAgIGJ1aWxkU2l3cygneCcucmVwZWF0KGJ5dGVMZW5ndGggLSBCdWZmZXIuYnl0ZUxlbmd0aChidWlsZFNpd3MoKSkgLSAyKSk7XG4gICAgICAgIGNvbnN0IHNvbFR4SGFzaCA9ICdycnJzc3MxYic7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nOiBUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHJlcUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdzaWduTWVzc2FnZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgbGF0ZXN0OiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgICAgdW5zaWduZWRNZXNzYWdlczogW10sXG4gICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgICAgICBtZXNzYWdlUmF3OiBzb2xNZXNzYWdlUmF3LFxuICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW3sgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgc2hhcmU6ICcnIH1dLFxuICAgICAgICAgICAgICB0eEhhc2g6IHNvbFR4SGFzaCxcbiAgICAgICAgICAgICAgbWVzc2FnZUVuY29kZWQ6IHNvbE1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzb2xFeHBlY3RlZFNpZ25lZE1lc3NhZ2U6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgc3RhdGU6ICdkZWxpdmVyZWQnLFxuICAgICAgICAgIHR4UmVxdWVzdElkOiByZXFJZC50b1N0cmluZygpLFxuICAgICAgICAgIHR4SGFzaDogc29sVHhIYXNoLFxuICAgICAgICAgIHNpZ25hdHVyZTogc29sVHhIYXNoLFxuICAgICAgICAgIG1lc3NhZ2VSYXc6IHNvbE1lc3NhZ2VSYXcsXG4gICAgICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkOiBzb2xNZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc29sTWVzc2FnZSA9IHtcbiAgICAgICAgICBtZXNzYWdlUmF3OiBzb2xNZXNzYWdlUmF3LFxuICAgICAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFLFxuICAgICAgICAgIHNpZ25lckFkZHJlc3M6IHNvbFNpZ25lckFkZHJlc3MsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1YiA9IHNhbmRib3hcbiAgICAgICAgICAgIC5zdHViKEVERFNBVXRpbHMuZGVmYXVsdC5wcm90b3R5cGUsICdzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZScpXG4gICAgICAgICAgICAucmVzb2x2ZXModHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBtc2cgcmVxdWVzdCBjYXJyeWluZyBtZXNzYWdlUmF3LCBTSU1QTEUgYW5kIHNpZ25lckFkZHJlc3MgdW5jaGFuZ2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCBjYXB0dXJlZEJvZHk6IGFueTtcbiAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzU29sV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCwgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcpO1xuXG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LmJ1aWxkU2lnbk1lc3NhZ2VSZXF1ZXN0KHsgbWVzc2FnZTogc29sTWVzc2FnZSB9KTtcblxuICAgICAgICAgIGNhcHR1cmVkQm9keS5pbnRlbnQubWVzc2FnZVJhdy5zaG91bGQuZXF1YWwoc29sTWVzc2FnZVJhdyk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5tZXNzYWdlU3RhbmRhcmRUeXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5zaWduZXJBZGRyZXNzLnNob3VsZC5lcXVhbChzb2xTaWduZXJBZGRyZXNzKTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VFbmNvZGVkLnNob3VsZC5lcXVhbCgnJyk7XG4gICAgICAgICAgY2FwdHVyZWRCb2R5LmludGVudC5pbnRlbnRUeXBlLnNob3VsZC5lcXVhbCgnc2lnbk1lc3NhZ2UnKTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50LmlzVHNzLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBzaWduIG1lc3NhZ2Ugd2l0aG91dCBlbmNvZGVNZXNzYWdlIHRyYW5zZm9ybWF0aW9uLCBoYW5kaW5nIEVkRFNBIHRoZSBVVEYtOCBieXRlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBzaWduTWVzc2FnZVRzc1NweSA9IHNhbmRib3guc3B5KHRzc1NvbFdhbGxldCwgJ3NpZ25NZXNzYWdlVHNzJyBhcyBhbnkpO1xuICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzU29sV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25lZE1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbChzb2xFeHBlY3RlZFNpZ25lZE1lc3NhZ2UpO1xuICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25NZXNzYWdlVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduTWVzc2FnZU9wdGlvbnM7XG4gICAgICAgICAgc2hvdWxkKGFjdHVhbEFyZy5tZXNzYWdlPy5tZXNzYWdlRW5jb2RlZCkuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViLmdldENhbGxzKCkubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIuZ2V0Q2FsbHMoKVswXS5hcmdzWzBdLm1lc3NhZ2VFbmNvZGVkLnNob3VsZC5lcXVhbChzb2xNZXNzYWdlRW5jb2RlZCk7XG4gICAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViXG4gICAgICAgICAgICAuZ2V0Q2FsbHMoKVswXVxuICAgICAgICAgICAgLmFyZ3NbMF0uYnVmZmVyVG9TaWduLnNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20oc29sTWVzc2FnZVJhdywgJ3V0ZjgnKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgc2lnbiBtZXNzYWdlIHdoZW4gdHhSZXF1ZXN0SWQgaXMgcHJvdmlkZWQsIHJldHVybmluZyB0aGUgV1AtcGVyc2lzdGVkIG1lc3NhZ2VSYXcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gYXdhaXQgdHNzU29sV2FsbGV0LnNpZ25NZXNzYWdlKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAuLi5zb2xNZXNzYWdlLFxuICAgICAgICAgICAgICBtZXNzYWdlUmF3OiAnY2xpZW50LXN0YWxlLWVjaG8nLFxuICAgICAgICAgICAgICB0eFJlcXVlc3RJZDogdHhSZXF1ZXN0Rm9yU29sTWVzc2FnZVNpZ25pbmcudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWduZWRNZXNzYWdlLnNob3VsZC5kZWVwRXF1YWwoc29sRXhwZWN0ZWRTaWduZWRNZXNzYWdlKTtcbiAgICAgICAgICBzaWduZWRNZXNzYWdlLm1lc3NhZ2VSYXcuc2hvdWxkLmVxdWFsKHNvbE1lc3NhZ2VSYXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZhbGwgYmFjayB0byB0aGUgY2FsbGVyIG1lc3NhZ2VSYXcgd2hlbiB0aGUgc2lnbmVkIHJlcXVlc3QgY2FycmllcyBub25lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGxlZ2FjeVR4UmVxdWVzdCA9IHtcbiAgICAgICAgICAgIC4uLnR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLFxuICAgICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLm1lc3NhZ2VzIVswXSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlUmF3OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG4gICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc1NvbFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFtsZWdhY3lUeFJlcXVlc3RdIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2lnbmVkTWVzc2FnZSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgdHhSZXF1ZXN0SWQ6IHR4UmVxdWVzdEZvclNvbE1lc3NhZ2VTaWduaW5nLnR4UmVxdWVzdElkIH0sXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNpZ25lZE1lc3NhZ2UubWVzc2FnZVJhdy5zaG91bGQuZXF1YWwoc29sTWVzc2FnZVJhdyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGVtcHR5IG1lc3NhZ2VSYXcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6ICcnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21lc3NhZ2UgYW5kIHR5cGUgcmVxdWlyZWQgdG8gY3JlYXRlIG1lc3NhZ2Ugc2lnbiByZXF1ZXN0Jyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6ICcnIH0sXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21lc3NhZ2VSYXcgaXMgcmVxdWlyZWQgdG8gc2lnbiBhIFNPTCBtZXNzYWdlLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG1lc3NhZ2VSYXcgb3ZlciBNQVhfU09MX01FU1NBR0VfQllURVMgYW5kIGFjY2VwdCBleGFjdGx5IE1BWF9TT0xfTUVTU0FHRV9CWVRFUycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogc2l3c09mU2l6ZShNQVhfU09MX01FU1NBR0VfQllURVMgKyAxKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9TT0wgbWVzc2FnZSBleGNlZWRzIG1heGltdW0gc2l6ZS8pO1xuXG4gICAgICAgICAgbGV0IGNhcHR1cmVkQm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NTb2xXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICBjYXB0dXJlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlUmF3OiBzaXdzT2ZTaXplKE1BWF9TT0xfTUVTU0FHRV9CWVRFUykgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VSYXcubGVuZ3RoLnNob3VsZC5lcXVhbChNQVhfU09MX01FU1NBR0VfQllURVMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG1lYXN1cmUgbXVsdGktYnl0ZSBtZXNzYWdlUmF3IGluIFVURi04IGJ5dGVzLCBub3QgY2hhcmFjdGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBmaWxsQnl0ZXMgPSBNQVhfU09MX01FU1NBR0VfQllURVMgLSBCdWZmZXIuYnl0ZUxlbmd0aChidWlsZFNpd3MoKSkgLSAyO1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9XG4gICAgICAgICAgICAnw6knLnJlcGVhdChNYXRoLmZsb29yKGZpbGxCeXRlcyAvIDIpKSArICd4Jy5yZXBlYXQoZmlsbEJ5dGVzIC0gTWF0aC5mbG9vcihmaWxsQnl0ZXMgLyAyKSAqIDIpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VBdENhcCA9IGJ1aWxkU2l3cyhzdGF0ZW1lbnQpO1xuICAgICAgICAgIG1lc3NhZ2VBdENhcC5sZW5ndGguc2hvdWxkLmJlLmJlbG93KE1BWF9TT0xfTUVTU0FHRV9CWVRFUyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogbWVzc2FnZUF0Q2FwICsgJ8OpJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9TT0wgbWVzc2FnZSBleGNlZWRzIG1heGltdW0gc2l6ZS8pO1xuXG4gICAgICAgICAgbGV0IGNhcHR1cmVkQm9keTogYW55O1xuICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NTb2xXYWxsZXQuaWQoKX0vbXNncmVxdWVzdHNgLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICBjYXB0dXJlZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbHkoMjAwLCB0eFJlcXVlc3RGb3JTb2xNZXNzYWdlU2lnbmluZyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXQuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgbWVzc2FnZTogeyAuLi5zb2xNZXNzYWdlLCBtZXNzYWdlUmF3OiBtZXNzYWdlQXRDYXAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aChjYXB0dXJlZEJvZHkuaW50ZW50Lm1lc3NhZ2VSYXcpLnNob3VsZC5lcXVhbChNQVhfU09MX01FU1NBR0VfQllURVMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBwbGFpbiB0ZXh0IG1lc3NhZ2VSYXcgKG5vbi1TSVdTKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogJ2hlbGxvIGZyb20gc29sYW5hJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tZXNzYWdlIGlzIG5vdCBhIHZhbGlkIFNJV1MgbWVzc2FnZS8pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBKU09OIG1lc3NhZ2VSYXcgKG5vbi1TSVdTKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgbWVzc2FnZVJhdzogJ3tcImFjdGlvblwiOlwibG9naW5cIn0nIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21lc3NhZ2UgaXMgbm90IGEgdmFsaWQgU0lXUyBtZXNzYWdlLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG1hbGZvcm1lZCBTSVdTIG1lc3NhZ2VSYXcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgbWlzc2luZ05vbmNlID0gc29sTWVzc2FnZVJhd1xuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuc3RhcnRzV2l0aCgnTm9uY2U6JykpXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VSYXc6IG1pc3NpbmdOb25jZSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9tZXNzYWdlIGlzIG5vdCBhIHZhbGlkIFNJV1MgbWVzc2FnZS8pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tU0lNUExFIG1lc3NhZ2Ugc3RhbmRhcmRzIGFuZCBtaXNzaW5nIHNpZ25lckFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgICAuYnVpbGRTaWduTWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7IC4uLnNvbE1lc3NhZ2UsIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1NPTCBtZXNzYWdlIHNpZ25pbmcgc3VwcG9ydHMgb25seSB0aGUgU0lNUExFIHN0YW5kYXJkLyk7XG5cbiAgICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAgIC5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHsgLi4uc29sTWVzc2FnZSwgc2lnbmVyQWRkcmVzczogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NpZ25lckFkZHJlc3MgaXMgcmVxdWlyZWQgdG8gc2lnbiBhIFNPTCBtZXNzYWdlLyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGltcGxlbWVudCBlbmNvZGVNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZCgodHNvbCBhcyBhbnkpLmVuY29kZU1lc3NhZ2UpLmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1R5cGVkIERhdGEgU2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGFzaCA9XG4gICAgICAgICcxOTAxNDkzZmJmMmFlMWMyN2MzY2VkMjZhODkwNzBjNmFiNWQzZmJmMzdlZDc3OGRlOTM3OGU3NzAzYjdkMWYxMTZiMzg4MzA3N2E2MTgyNjEyOWI5OGI2MjJlNTRmYzY4YzUwMDhkMWIxYzE2NTUyZTFlZGE2OTE2Zjg3MGQ3MTkyMjAnO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZzogVHhSZXF1ZXN0ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogcmVxSWQudG9TdHJpbmcoKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3NpZ25NZXNzYWdlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBsYXRlc3Q6IHRydWUsXG4gICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgIHBvbGljaWVzQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHdhbGxldElkOiAnd2FsbGV0SWQnLFxuICAgICAgICB1bnNpZ25lZFR4czogW10sXG4gICAgICAgIHVuc2lnbmVkTWVzc2FnZXM6IFtdLFxuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2VSYXc6ICdoZWxsbyB3b3JsZCcsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICAgIGNvbWJpbmVTaWdTaGFyZTogJzA6cnJyOnNzczozJyxcbiAgICAgICAgICAgIHR4SGFzaCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGxldCBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VTaWduaW5nQ29pbnMgPSBbJ3RldGgnLCAndHBvbHlnb24nXTtcbiAgICAgIGNvbnN0IHR5cGVzOiBNZXNzYWdlVHlwZXMgPSB7XG4gICAgICAgIEVJUDcxMkRvbWFpbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2hhaW5JZCcsXG4gICAgICAgICAgICB0eXBlOiAndWludDI1NicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAndmVyaWZ5aW5nQ29udHJhY3QnLFxuICAgICAgICAgICAgdHlwZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIE1lc3NhZ2U6IFt7IG5hbWU6ICdkYXRhJywgdHlwZTogJ3N0cmluZycgfV0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHlwZWRNZXNzYWdlOiBUeXBlZE1lc3NhZ2U8TWVzc2FnZVR5cGVzPiA9IHtcbiAgICAgICAgZG9tYWluOiB7XG4gICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICB2ZXJzaW9uOiAnMScsXG4gICAgICAgICAgY2hhaW5JZDogMSxcbiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByaW1hcnlUeXBlOiAnTWVzc2FnZScsXG4gICAgICAgIHR5cGVzLFxuICAgICAgICBtZXNzYWdlOiB7IGRhdGE6ICdiaXRnbyBzYXlzIGhlbGxvIScgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eXBlZERhdGFCYXNlOiBUeXBlZERhdGEgPSB7XG4gICAgICAgIHR5cGVkRGF0YVJhdzogSlNPTi5zdHJpbmdpZnkodHlwZWRNZXNzYWdlKSxcbiAgICAgICAgdmVyc2lvbjogU2lnblR5cGVkRGF0YVZlcnNpb24uVjMsXG4gICAgICB9O1xuXG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlLnJlc29sdmVzKHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcpO1xuICAgICAgICBzYW5kYm94XG4gICAgICAgICAgLnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJylcbiAgICAgICAgICAucmVzb2x2ZXMoW3sgY29tbW9uS2V5Y2hhaW46ICd0ZXN0JywgaWQ6ICcnLCBwdWI6ICcnLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH1dKTtcbiAgICAgICAgc2lub24uc3R1YihFY2RzYS5wcm90b3R5cGUsICd2ZXJpZnknKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciB1bnN1cHBvcnRlZCBjb2lucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUJhc2UsXG4gICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1NpZ24gdHlwZWQgZGF0YSBub3Qgc3VwcG9ydGVkIGZvciBUZXN0bmV0IFNvbGFuYScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHNpZ24gdHlwZWQgZGF0YSBWMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHlwZWREYXRhID0geyAuLi50eXBlZERhdGFCYXNlIH07XG4gICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjE7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLmdldChcbiAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnU2lnblR5cGVkRGF0YSB2MSBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBzZWN1cml0eSBjb25jZXJucycpO1xuICAgICAgfSk7XG4gICAgICBtZXNzYWdlU2lnbmluZ0NvaW5zLm1hcCgoY29pbk5hbWUpID0+IHtcbiAgICAgICAgdHNzRXRoV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbihjb2luTmFtZSksIGV0aFdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCB0eFJlcXVlc3RJZCA9IHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWQ7XG4gICAgICAgIHR5cGVkRGF0YUJhc2UudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQ6IFNpZ25lZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgc3RhdGU6ICdkZWxpdmVyZWQnLFxuICAgICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICAgIG1lc3NhZ2VSYXc6IEpTT04uc3RyaW5naWZ5KHR5cGVkTWVzc2FnZSksXG4gICAgICAgICAgc2lnbmF0dXJlOiB0eEhhc2gsXG4gICAgICAgICAgdHhIYXNoLFxuICAgICAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgICAgICBtZXNzYWdlRW5jb2RlZDogdHhIYXNoLFxuICAgICAgICB9O1xuXG4gICAgICAgIGRlc2NyaWJlKGBzaWduIHR5cGVkIGRhdGEgVjMgZm9yICR7Y29pbk5hbWV9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVkRGF0YSA9IHsgLi4udHlwZWREYXRhQmFzZSB9O1xuICAgICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjM7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25UeXBlZERhdGFUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnblR5cGVkRGF0YVRzcycgYXMgYW55KTtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFYzIHdoZW4gY3VzdG9kaWFuTWVzc2FnZUlEIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHlwZWREYXRhLnR4UmVxdWVzdElkID0gdHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBjb25zdCBzaWduVHlwZWREYXRhVHNzU3B5ID0gc2lub24uc3B5KHRzc0V0aFdhbGxldCwgJ3NpZ25UeXBlZERhdGFUc3MnIGFzIGFueSk7XG4gICAgICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke1xuICAgICAgICAgICAgICAgICAgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZy50eFJlcXVlc3RJZFxuICAgICAgICAgICAgICAgIH0mbGF0ZXN0PXRydWVgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZ10gfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgY3VzdG9kaWFuTWVzc2FnZUlkOiAndW5pdHRlc3QnLFxuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxBcmcgPSBzaWduVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHR5cGVkIGRhdGEgVjMgd2l0aCBlbXB0eSBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhd2FpdCB0c3NFdGhXYWxsZXRcbiAgICAgICAgICAgICAgLnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICAgIHR5cGVkRGF0YTogdHlwZWREYXRhQmFzZSxcbiAgICAgICAgICAgICAgICBwcnY6ICcnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgc2lnbiB0eXBlZCBkYXRhIFYzIHdoZW4gdHhSZXF1ZXN0SWQgbm90IHByb3ZpZGVkICcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0eXBlZERhdGEudHhSZXF1ZXN0SWQ7XG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGFUc3NTcHkgPSBzaW5vbi5zcHkodHNzRXRoV2FsbGV0LCAnc2lnblR5cGVkRGF0YVRzcycgYXMgYW55KTtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgKS5yZXBseSgyMDAsIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcpO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgICB0eXBlZERhdGEsXG4gICAgICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNpZ25lZFR5cGVkRGF0YS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEFyZyA9IHNpZ25lZFR5cGVkRGF0YVRzc1NweS5nZXRDYWxscygpWzBdLmFyZ3NbMF0gYXMgV2FsbGV0U2lnblR5cGVkRGF0YU9wdGlvbnM7XG4gICAgICAgICAgICBhY3R1YWxBcmcudHlwZWREYXRhPy50eXBlZERhdGFFbmNvZGVkPy50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKHR4SGFzaCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKGBzaWduIHR5cGVkIGRhdGEgVjQgZm9yICR7Y29pbk5hbWV9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVkRGF0YSA9IHsgLi4udHlwZWREYXRhQmFzZSB9O1xuICAgICAgICAgIHR5cGVkRGF0YS52ZXJzaW9uID0gU2lnblR5cGVkRGF0YVZlcnNpb24uVjQ7XG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0eXBlZERhdGEudHhSZXF1ZXN0SWQgPSB0eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7XG4gICAgICAgICAgICAgICAgICB0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nLnR4UmVxdWVzdElkXG4gICAgICAgICAgICAgICAgfSZsYXRlc3Q9dHJ1ZWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RGb3JUeXBlZERhdGFTaWduaW5nXSB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVHlwZWREYXRhID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgICAgdHlwZWREYXRhLFxuICAgICAgICAgICAgICBwcnY6ICdzZWNyZXRLZXknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzaWduZWRUeXBlZERhdGEuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHNpZ24gdHlwZWQgZGF0YSBWNCB3aGVuIGN1c3RvZGlhbk1lc3NhZ2VJRCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHR5cGVkRGF0YS50eFJlcXVlc3RJZCA9IHR4UmVxdWVzdElkO1xuICAgICAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICBgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtcbiAgICAgICAgICAgICAgICAgIHR4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmcudHhSZXF1ZXN0SWRcbiAgICAgICAgICAgICAgICB9JmxhdGVzdD10cnVlYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3R4UmVxdWVzdEZvclR5cGVkRGF0YVNpZ25pbmddIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduZWRUeXBlZERhdGEgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogJ3VuaXR0ZXN0JyxcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gdHlwZWQgZGF0YSBWNCB3aXRoIGVtcHR5IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRzc0V0aFdhbGxldFxuICAgICAgICAgICAgICAuc2lnblR5cGVkRGF0YSh7XG4gICAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgICAgdHlwZWREYXRhOiB0eXBlZERhdGFCYXNlLFxuICAgICAgICAgICAgICAgIHBydjogJycsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBzaWduIHR5cGVkIGRhdGEgVjQgd2hlbiB0eFJlcXVlc3RJZCBub3QgcHJvdmlkZWQgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVsZXRlIHR5cGVkRGF0YS50eFJlcXVlc3RJZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YVRzc1NweSA9IHNpbm9uLnNweSh0c3NFdGhXYWxsZXQsICdzaWduVHlwZWREYXRhVHNzJyBhcyBhbnkpO1xuICAgICAgICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApLnJlcGx5KDIwMCwgdHhSZXF1ZXN0Rm9yVHlwZWREYXRhU2lnbmluZyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZFR5cGVkRGF0YSA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICAgIHR5cGVkRGF0YSxcbiAgICAgICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2lnbmVkVHlwZWREYXRhLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsQXJnID0gc2lnbmVkVHlwZWREYXRhVHNzU3B5LmdldENhbGxzKClbMF0uYXJnc1swXSBhcyBXYWxsZXRTaWduVHlwZWREYXRhT3B0aW9ucztcbiAgICAgICAgICAgIGFjdHVhbEFyZy50eXBlZERhdGE/LnR5cGVkRGF0YUVuY29kZWQ/LnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNZXNzYWdlIFNpZ25pbmcgd2l0aCBwZW5kaW5nIGFwcHJvdmFsIChwb2xpY3kgZmxvdyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlUmF3ID0gJ2hlbGxvIHdvcmxkJztcbiAgICAgIGNvbnN0IG1lc3NhZ2VFbmNvZGVkID0gQnVmZmVyLmZyb20oYFxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4ke21lc3NhZ2VSYXcubGVuZ3RofSR7bWVzc2FnZVJhd31gKS50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eEhhc2ggPSAnMHhycnJzc3MxYic7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWxJZCA9ICdwYS0xMTExMjIyMjMzMzM0NDQ0NTU1NTY2NjY3Nzc3ODg4OCc7XG5cbiAgICAgIGNvbnN0IHNpZ25lZE1lc3NhZ2VzRml4dHVyZTogTm9uTnVsbGFibGU8VHhSZXF1ZXN0WydtZXNzYWdlcyddPiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICBtZXNzYWdlUmF3LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFt7IGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLCB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsIHNoYXJlOiAnJyB9XSxcbiAgICAgICAgICBjb21iaW5lU2lnU2hhcmU6ICcwOnJycjpzc3M6MycsXG4gICAgICAgICAgdHhIYXNoLFxuICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcGFya2VkVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAncGFya2VkLXR4LXJlcXVlc3QtaWQnLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3NpZ25UeXBlZFN0cnVjdHVyZWREYXRhJyB9LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbElkLFxuICAgICAgICB1c2VySWQ6ICd1c2VySWQnLFxuICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICB1bnNpZ25lZE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLFxuICAgICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICBtZXNzYWdlRW5jb2RlZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2lnbmFibGVUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgLi4ucGFya2VkVHhSZXF1ZXN0LFxuICAgICAgICBzdGF0ZTogJ3BlbmRpbmdEZWxpdmVyeScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzaWduZWRUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgLi4ucGFya2VkVHhSZXF1ZXN0LFxuICAgICAgICBzdGF0ZTogJ2RlbGl2ZXJlZCcsXG4gICAgICAgIG1lc3NhZ2VzOiBzaWduZWRNZXNzYWdlc0ZpeHR1cmUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eXBlZERhdGFGaXh0dXJlOiBUeXBlZERhdGEgPSB7XG4gICAgICAgIHR5cGVkRGF0YVJhdzogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRvbWFpbjoge1xuICAgICAgICAgICAgbmFtZTogJ2JpdGdvJyxcbiAgICAgICAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgICAgICAgIGNoYWluSWQ6IDEsXG4gICAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmltYXJ5VHlwZTogJ01lc3NhZ2UnLFxuICAgICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICBFSVA3MTJEb21haW46IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3ZlcnNpb24nLCB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdjaGFpbklkJywgdHlwZTogJ3VpbnQyNTYnIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3ZlcmlmeWluZ0NvbnRyYWN0JywgdHlwZTogJ2FkZHJlc3MnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTWVzc2FnZTogW3sgbmFtZTogJ2RhdGEnLCB0eXBlOiAnc3RyaW5nJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IHsgZGF0YTogJ2JpdGdvIHNheXMgaGVsbG8hJyB9LFxuICAgICAgICB9KSxcbiAgICAgICAgdmVyc2lvbjogU2lnblR5cGVkRGF0YVZlcnNpb24uVjMsXG4gICAgICB9O1xuXG4gICAgICBsZXQgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViOiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIgPSBzYW5kYm94LnN0dWIoRUNEU0FVdGlscy5FY2RzYVV0aWxzLnByb3RvdHlwZSwgJ3NpZ25UeFJlcXVlc3RGb3JNZXNzYWdlJyk7XG4gICAgICAgIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlU3R1Yi5yZXNvbHZlcyhzaWduZWRUeFJlcXVlc3QpO1xuICAgICAgICBzYW5kYm94LnN0dWIoS2V5Y2hhaW5zLnByb3RvdHlwZSwgJ2dldEtleXNGb3JTaWduaW5nJykucmVzb2x2ZXMoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbW1vbktleWNoYWluOiAndGVzdCcsXG4gICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICBwdWI6ICcnLFxuICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAgICd7XCJpdlwiOlwiMTVGc2JEVkkxekc5T2dnRDhZWCtIZz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImhIYk5IM1N6L2FVPVwiLFwiY3RcIjpcIldvTlZLejdhZmlSeFhJMncvWWt6TWRNeW9RZy9CMTV1MVE4YVFnaTk2akpaOXdrNlRJYVNFYzZiWEZIM0FIekQ5TWRKQ1dKUVVwUmhvUWMvcmd5dGNuNjlzY1BUaktlZXlWTUVsR0N4WmRGVlMvcHNRY05FK2x1ZTMvLzJabHhqKzZ0MU5rdllPKzh5QWV6U01SQks1T2RmdFhFak5RST1cIn0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTmFycm93cyB0aGUgU2lnbmVkTWVzc2FnZSB1bmlvbiBhZnRlciBhc3NlcnRpbmcgaXRzIHN0YXRlOiBhIHNob3VsZFxuICAgICAgICogYXNzZXJ0aW9uIG9uIGBzdGF0ZWAgYWxvbmUgZG9lcyBub3QgbmFycm93IHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uXG4gICAgICAgKiBmb3IgdGhlIGNvbXBpbGVyLCBzbyB2YXJpYW50LXNwZWNpZmljIGZpZWxkcyBtdXN0IGJlIHJlYWQgZnJvbSB0aGVcbiAgICAgICAqIG5hcnJvd2VkIHJldHVybiB2YWx1ZS5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gYXNzZXJ0U2lnbmVkTWVzc2FnZVN0YXRlPFQgZXh0ZW5kcyBTaWduZWRNZXNzYWdlWydzdGF0ZSddPihcbiAgICAgICAgcmVzdWx0OiBTaWduZWRNZXNzYWdlLFxuICAgICAgICBzdGF0ZTogVFxuICAgICAgKTogRXh0cmFjdDxTaWduZWRNZXNzYWdlLCB7IHN0YXRlOiBUIH0+IHtcbiAgICAgICAgcmVzdWx0LnN0YXRlLnNob3VsZC5lcXVhbChzdGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgYXMgRXh0cmFjdDxTaWduZWRNZXNzYWdlLCB7IHN0YXRlOiBUIH0+O1xuICAgICAgfVxuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbElkIHdpdGhvdXQgc2lnbmluZyB3aGVuIGEgZnJlc2ggc2lnbk1lc3NhZ2UgcmVxdWVzdCBpcyBwYXJrZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L21zZ3JlcXVlc3RzYCkucmVwbHkoMjAwLCBwYXJrZWRUeFJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZTogeyBtZXNzYWdlUmF3LCBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSB9LFxuICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmtlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgcGFya2VkLnBlbmRpbmdBcHByb3ZhbElkLnNob3VsZC5lcXVhbChwZW5kaW5nQXBwcm92YWxJZCk7XG4gICAgICAgIHBhcmtlZC50eFJlcXVlc3RJZC5zaG91bGQuZXF1YWwocGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkKTtcbiAgICAgICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbElkIHdpdGhvdXQgc2lnbmluZyB3aGVuIHJlc3VtaW5nIGEgcGFya2VkIHNpZ25NZXNzYWdlIHJlcXVlc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi93YWxsZXQvJHt0c3NFdGhXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHtwYXJrZWRUeFJlcXVlc3QudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFtwYXJrZWRUeFJlcXVlc3RdIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduTWVzc2FnZSh7XG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgbWVzc2FnZVJhdyxcbiAgICAgICAgICAgIHR4UmVxdWVzdElkOiBwYXJrZWRUeFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgICBtZXNzYWdlU3RhbmRhcmRUeXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBydjogJ3NlY3JldEtleScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmtlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgcGFya2VkLnBlbmRpbmdBcHByb3ZhbElkLnNob3VsZC5lcXVhbChwZW5kaW5nQXBwcm92YWxJZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcGVuZGluZ0FwcHJvdmFsSWQgd2l0aG91dCBzaWduaW5nIHdoZW4gYSBmcmVzaCBzaWduVHlwZWREYXRhIHJlcXVlc3QgaXMgcGFya2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzYCkucmVwbHkoMjAwLCBwYXJrZWRUeFJlcXVlc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRzc0V0aFdhbGxldC5zaWduVHlwZWREYXRhKHtcbiAgICAgICAgICB0eXBlZERhdGE6IHR5cGVkRGF0YUZpeHR1cmUsXG4gICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFya2VkID0gYXNzZXJ0U2lnbmVkTWVzc2FnZVN0YXRlKHJlc3VsdCwgJ3BlbmRpbmdBcHByb3ZhbCcpO1xuICAgICAgICBwYXJrZWQucGVuZGluZ0FwcHJvdmFsSWQuc2hvdWxkLmVxdWFsKHBlbmRpbmdBcHByb3ZhbElkKTtcbiAgICAgICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHBlbmRpbmdBcHByb3ZhbElkIHdpdGhvdXQgc2lnbmluZyB3aGVuIHJlc3VtaW5nIGEgcGFya2VkIHNpZ25UeXBlZERhdGEgcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyL3dhbGxldC8ke3Rzc0V0aFdhbGxldC5pZCgpfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke3BhcmtlZFR4UmVxdWVzdC50eFJlcXVlc3RJZH0mbGF0ZXN0PXRydWVgKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgdHhSZXF1ZXN0czogW3BhcmtlZFR4UmVxdWVzdF0gfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25UeXBlZERhdGEoe1xuICAgICAgICAgIHR5cGVkRGF0YTogeyAuLi50eXBlZERhdGFGaXh0dXJlLCB0eFJlcXVlc3RJZDogcGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkIH0sXG4gICAgICAgICAgcHJ2OiAnc2VjcmV0S2V5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFya2VkID0gYXNzZXJ0U2lnbmVkTWVzc2FnZVN0YXRlKHJlc3VsdCwgJ3BlbmRpbmdBcHByb3ZhbCcpO1xuICAgICAgICBwYXJrZWQucGVuZGluZ0FwcHJvdmFsSWQuc2hvdWxkLmVxdWFsKHBlbmRpbmdBcHByb3ZhbElkKTtcbiAgICAgICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZVN0dWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2lnbiBhIHBlbmRpbmdEZWxpdmVyeSBtZXNzYWdlIHJlcXVlc3QgdmlhIHNpZ25BbmRTZW5kTWVzc2FnZVR4UmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7c2lnbmFibGVUeFJlcXVlc3QudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFtzaWduYWJsZVR4UmVxdWVzdF0gfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHNzRXRoV2FsbGV0LnNpZ25BbmRTZW5kTWVzc2FnZVR4UmVxdWVzdCh7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHNpZ25hYmxlVHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSBhcyBzdHJpbmcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlbGl2ZXJlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdkZWxpdmVyZWQnKTtcbiAgICAgICAgZGVsaXZlcmVkLnR4SGFzaC5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgZGVsaXZlcmVkLnNpZ25hdHVyZS5zaG91bGQuZXF1YWwodHhIYXNoKTtcbiAgICAgICAgZGVsaXZlcmVkLnR4UmVxdWVzdElkLnNob3VsZC5lcXVhbChzaWduYWJsZVR4UmVxdWVzdC50eFJlcXVlc3RJZCk7XG4gICAgICAgIGRlbGl2ZXJlZC5tZXNzYWdlUmF3LnNob3VsZC5lcXVhbChtZXNzYWdlUmF3KTtcbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBwZW5kaW5nQXBwcm92YWxJZCB3aXRob3V0IHNpZ25pbmcgd2hlbiBzaWduQW5kU2VuZE1lc3NhZ2VUeFJlcXVlc3QgaGl0cyBhIHN0aWxsLXBhcmtlZCByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvd2FsbGV0LyR7dHNzRXRoV2FsbGV0LmlkKCl9L3R4cmVxdWVzdHM/dHhSZXF1ZXN0SWRzPSR7cGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkfSZsYXRlc3Q9dHJ1ZWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbcGFya2VkVHhSZXF1ZXN0XSB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0c3NFdGhXYWxsZXQuc2lnbkFuZFNlbmRNZXNzYWdlVHhSZXF1ZXN0KHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogcGFya2VkVHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IFRlc3RCaXRHby5WMi5URVNUX0VUSF9XQUxMRVRfUEFTU1BIUkFTRSBhcyBzdHJpbmcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmtlZCA9IGFzc2VydFNpZ25lZE1lc3NhZ2VTdGF0ZShyZXN1bHQsICdwZW5kaW5nQXBwcm92YWwnKTtcbiAgICAgICAgcGFya2VkLnBlbmRpbmdBcHByb3ZhbElkLnNob3VsZC5lcXVhbChwZW5kaW5nQXBwcm92YWxJZCk7XG4gICAgICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQoc2lnblR4UmVxdWVzdEZvck1lc3NhZ2VTdHViKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBzaWduQW5kU2VuZE1lc3NhZ2VUeFJlcXVlc3QgZm9yIG5vbi1UU1Mgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9uVHNzV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYml0Z28uY29pbigndGV0aCcpLCB7IC4uLmV0aFdhbGxldERhdGEsIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nIH0pO1xuXG4gICAgICAgIGF3YWl0IG5vblRzc1dhbGxldFxuICAgICAgICAgIC5zaWduQW5kU2VuZE1lc3NhZ2VUeFJlcXVlc3Qoe1xuICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6IHBhcmtlZFR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdNZXNzYWdlIHNpZ25pbmcgb25seSBzdXBwb3J0ZWQgZm9yIFRTUyB3YWxsZXRzJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdTZW5kIE1hbnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kTWFueUlucHV0ID0ge1xuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVxSWQ6IG5ldyBSZXF1ZXN0VHJhY2VyKCksXG4gICAgICB9O1xuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzZW5kIG1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNlbmRNYW55XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShzZW5kTWFueUlucHV0KTtcblxuICAgICAgICBjb25zdCBzZW5kVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgICAgLy8gVE9ETyhCRy01OTY4Nik6IHRoaXMgaXMgbm90IGRvaW5nIGFueXRoaW5nIGlmIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIHdlIHNob3VsZCBhbHNvIG1vdmUgdGhpcyBjaGVjayB0byBoYXBwZW4gYWZ0ZXIgd2UgaW52b2tlIHNlbmRNYW55XG4gICAgICAgIHNlbmRUeFJlcXVlc3QuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHNpZ25lZFRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKTtcblxuICAgICAgICBjb25zdCBzZW5kTWFueSA9IGF3YWl0IHRzc1NvbFdhbGxldC5zZW5kTWFueShzZW5kTWFueUlucHV0KTtcbiAgICAgICAgc2VuZE1hbnkuc2hvdWxkLmRlZXBFcXVhbCgnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFsbG93IHplcm8gYW1vdW50IHJlY2lwaWVudHMgZm9yIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uID0gc2FuZGJveC5zdHViKHRzc1NvbFdhbGxldCwgJ3ByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLnJlc29sdmVzKHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgICAgY29uc3Qgc2VuZFR4UmVxdWVzdCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0Jyk7XG4gICAgICAgIHNlbmRUeFJlcXVlc3QucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnkgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2VuZE1hbnkoe1xuICAgICAgICAgIHR5cGU6ICdjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzMicsXG4gICAgICAgICAgICAgIGFtb3VudDogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbmRNYW55LnNob3VsZC5kZWVwRXF1YWwoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCB6ZXJvIGFtb3VudCByZWNpcGllbnRzIGZvciBzb2wgdHJhbnNmZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoe1xuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAgICdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBwb3NpdGl2ZSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8gb3IgbnVtZXJpYyBzdHJpbmcgZXhwZWN0ZWQnXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBhbW91bnQgcmVjaXBpZW50cyBmb3IgY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NTb2xXYWxsZXRcbiAgICAgICAgICAuc2VuZE1hbnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Nsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiAnYXRhQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnLTEnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ2ludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIHBvc2l0aXZlIG51bWJlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCdcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IG5vbi16ZXJvIGFtb3VudCByZWNpcGllbnRzIGZvciBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zZW5kTWFueSh7XG4gICAgICAgICAgICB0eXBlOiAnY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6ICdhdGFBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcImludmFsaWQgYXJndW1lbnQgZm9yIGFtb3VudCAtIGNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCByZXF1aXJlcyBhbW91bnQgJzAnXCIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwic2hvdWxkIHJlamVjdCBhbW91bnQgJ21heCcgcmVjaXBpZW50cyBmb3IgY2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50XCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHtcbiAgICAgICAgICAgIHR5cGU6ICdjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogJ2F0YUFkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogJ21heCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXCJpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBjbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgcmVxdWlyZXMgYW1vdW50ICcwJ1wiKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHNlbmQgbWFueSBhbmQgY2FsbCBzZXRSZXF1ZXN0VHJhY2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShzZW5kTWFueUlucHV0KTtcblxuICAgICAgICBjb25zdCBzZW5kVHhSZXF1ZXN0ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3NlbmRUeFJlcXVlc3QnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5yZXNvbHZlcygnc2VuZFR4UmVzcG9uc2UnKTtcbiAgICAgICAgc2VuZFR4UmVxdWVzdC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2lnbmVkVHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpO1xuXG4gICAgICAgIGNvbnN0IHNldFJlcXVlc3RUcmFjZXJTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdzZXRSZXF1ZXN0VHJhY2VyJyk7XG4gICAgICAgIHNldFJlcXVlc3RUcmFjZXJTcHkud2l0aEFyZ3Moc2VuZE1hbnlJbnB1dC5yZXFJZCk7XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnkgPSBhd2FpdCB0c3NTb2xXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlJbnB1dCk7XG4gICAgICAgIHNlbmRNYW55LnNob3VsZC5kZWVwRXF1YWwoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHNldFJlcXVlc3RUcmFjZXJTcHkpO1xuICAgICAgICBzZXRSZXF1ZXN0VHJhY2VyU3B5LnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgaXNUZXN0VHJhbnNhY3Rpb24gdGhyb3VnaCBzZW5kTWFueSB0byBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSB7XG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICd0eFJlcXVlc3RJZCcsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2VuZE1hbnlJbnB1dFdpdGhUZXN0RmxhZyA9IHtcbiAgICAgICAgICAuLi5zZW5kTWFueUlucHV0LFxuICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgaXNUZXN0VHJhbnNhY3Rpb246IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIodHNzU29sV2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24ucmVzb2x2ZXMoc2lnbmVkVHJhbnNhY3Rpb24pO1xuXG4gICAgICAgIGNvbnN0IHNlbmRUeFJlcXVlc3QgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAnc2VuZFR4UmVxdWVzdCcpO1xuICAgICAgICBzZW5kVHhSZXF1ZXN0LnJlc29sdmVzKCdzZW5kVHhSZXNwb25zZScpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRNYW55ID0gYXdhaXQgdHNzU29sV2FsbGV0LnNlbmRNYW55KHNlbmRNYW55SW5wdXRXaXRoVGVzdEZsYWcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiB3YXMgY2FsbGVkIHdpdGggaXNUZXN0VHJhbnNhY3Rpb25cbiAgICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UocHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24pO1xuICAgICAgICBjb25zdCBjYWxsQXJncyA9IHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmdldENhbGwoMCkuYXJnc1swXTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGNhbGxBcmdzKTtcbiAgICAgICAgY2FsbEFyZ3MhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdpc1Rlc3RUcmFuc2FjdGlvbicsIHRydWUpO1xuICAgICAgICBjYWxsQXJncyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R5cGUnLCAndHJhbnNmZXInKTtcblxuICAgICAgICBzZW5kTWFueS5zaG91bGQuZGVlcEVxdWFsKCdzZW5kVHhSZXNwb25zZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRyYW5zZmVyIGZyb20gc2VuZE1hbnkgZm9yIGFwaVZlcnNpb249ZnVsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdHNvbCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaWduZWRUeFJlc3VsdCA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4UmVxdWVzdElkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpLFxuICAgICAgICAgIGludGVudDogJ3BheW1lbnQnLFxuICAgICAgICAgIGxhdGVzdDogZmFsc2UsXG4gICAgICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0ZTogJ2RlbGl2ZXJlZCcsXG4gICAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICAgIHVzZXJJZDogJ3VuaXQtdGVzdCcsXG4gICAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0VHlwZTogd2FsbGV0LnR5cGUoKSA/PyAnaG90JyxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogc2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgICAgICAgc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICBpZDogJ3R4aWQnLFxuICAgICAgICAgICAgICAgIHR4OiAndHgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4OiAnc29tZXRoaW5nJyBhcyBhbnksXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0ge1xuICAgICAgICAgIGlkOiAndHJhbnNmZXJJZCcsXG4gICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgIHR4aWQ6ICd0eGlkJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih3YWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHNpZ25lZFR4UmVzdWx0KTtcblxuICAgICAgICBjb25zdCB0eFJlcXVlc3ROb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucGVyc2lzdCgpXG4gICAgICAgICAgLmdldChgL2FwaS92Mi93YWxsZXQvJHt3YWxsZXREYXRhLmlkfS90eHJlcXVlc3RzP3R4UmVxdWVzdElkcz0ke3NpZ25lZFR4UmVzdWx0LnR4UmVxdWVzdElkfSZsYXRlc3Q9dHJ1ZWApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgeyB0eFJlcXVlc3RzOiBbdHhSZXF1ZXN0XSB9KTtcblxuICAgICAgICBjb25zdCBjcmVhdGVUcmFuc2Zlck5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHt3YWxsZXREYXRhLmlkfS90eHJlcXVlc3RzLyR7c2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWR9L3RyYW5zZmVyc2ApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgdHJhbnNmZXIpO1xuXG4gICAgICAgIGNvbnN0IGlucHV0OiBTZW5kTWFueU9wdGlvbnMgPSB7XG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZW5kTWFueVJlc3VsdCA9IGF3YWl0IHdhbGxldC5zZW5kTWFueShpbnB1dCk7XG4gICAgICAgIHByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uLmNhbGxlZE9uY2VXaXRoRXhhY3RseShpbnB1dCk7XG4gICAgICAgIHR4UmVxdWVzdE5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgY3JlYXRlVHJhbnNmZXJOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgICAgc2VuZE1hbnlSZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICAgIHRyYW5zZmVyLFxuICAgICAgICAgIHR4aWQ6ICd0eGlkJyxcbiAgICAgICAgICB0eDogJ3R4JyxcbiAgICAgICAgICBzdGF0dXM6ICdzaWduZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBwZW5kaW5nQXBwcm92YWwgZnJvbSBzZW5kTWFueSBmb3IgYXBpVmVyc2lvbj1mdWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZFR4UmVzdWx0ID0ge1xuICAgICAgICAgIHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogc2lnbmVkVHhSZXN1bHQudHhSZXF1ZXN0SWQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpLFxuICAgICAgICAgIGludGVudDogJ3BheW1lbnQnLFxuICAgICAgICAgIGxhdGVzdDogZmFsc2UsXG4gICAgICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsXG4gICAgICAgICAgdW5zaWduZWRUeHM6IFtdLFxuICAgICAgICAgIHVzZXJJZDogJ3VuaXQtdGVzdCcsXG4gICAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgICB3YWxsZXRJZDogd2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0VHlwZTogd2FsbGV0LnR5cGUoKSA/PyAnaG90JyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtcGVuZGluZy1hcHByb3ZhbC1pZCcsXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRlOiAnaW5pdGlhbGl6ZWQnLFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4OiAnc29tZXRoaW5nJyBhcyBhbnksXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0ge1xuICAgICAgICAgIGlkOiAndHJhbnNmZXJJZCcsXG4gICAgICAgICAgc3RhdGU6ICdzaWduZWQnLFxuICAgICAgICAgIHR4aWQ6ICd0eGlkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFsID0ge1xuICAgICAgICAgIGlkOiAnc29tZS1wZW5kaW5nLWFwcHJvdmFsLWlkJyxcbiAgICAgICAgICB3YWxsZXQ6IHdhbGxldC5pZCgpLFxuICAgICAgICAgIGluZm86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2FjdGlvblJlcXVlc3RGdWxsJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24gPSBzYW5kYm94LnN0dWIod2FsbGV0LCAncHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzaWduZWRUeFJlc3VsdCk7XG5cbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0Tm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5nZXQoYC9hcGkvdjIvd2FsbGV0LyR7d2FsbGV0RGF0YS5pZH0vdHhyZXF1ZXN0cz90eFJlcXVlc3RJZHM9JHt0eFJlcXVlc3QudHhSZXF1ZXN0SWR9JmxhdGVzdD10cnVlYClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHR4UmVxdWVzdHM6IFt0eFJlcXVlc3RdIH0pO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVRyYW5zZmVyTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBlcnNpc3QoKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke3dhbGxldERhdGEuaWR9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3QudHhSZXF1ZXN0SWR9L3RyYW5zZmVyc2ApXG4gICAgICAgICAgLnJlcGx5KDIwMCwgdHJhbnNmZXIpO1xuXG4gICAgICAgIGNvbnN0IGdldFBlbmRpbmdBcHByb3ZhbE5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vcGVuZGluZ2FwcHJvdmFscy8ke3R4UmVxdWVzdC5wZW5kaW5nQXBwcm92YWxJZH1gKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHBlbmRpbmdBcHByb3ZhbCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQ6IFNlbmRNYW55T3B0aW9ucyA9IHtcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlbmRNYW55UmVzdWx0ID0gYXdhaXQgd2FsbGV0LnNlbmRNYW55KGlucHV0KTtcbiAgICAgICAgcHJlYnVpbGRBbmRTaWduVHJhbnNhY3Rpb24uY2FsbGVkT25jZVdpdGhFeGFjdGx5KGlucHV0KTtcbiAgICAgICAgdHhSZXF1ZXN0Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBjcmVhdGVUcmFuc2Zlck5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgZ2V0UGVuZGluZ0FwcHJvdmFsTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgIHNlbmRNYW55UmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyBwZW5kaW5nQXBwcm92YWwsIHR4UmVxdWVzdCB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdHhSZXF1ZXN0SWQgaXMgbWlzc2luZyBmcm9tIHByZWJ1aWxkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgICB0eEhleDogJ2RlYWRiZWVmJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbiA9IHNhbmRib3guc3R1Yih0c3NTb2xXYWxsZXQsICdwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbicpO1xuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5yZXNvbHZlcyhzaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIC8vIFRPRE8oQkctNTk2ODYpOiB0aGlzIGlzIG5vdCBkb2luZyBhbnl0aGluZyBpZiB3ZSBkb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBzaG91bGQgYWxzbyBtb3ZlIHRoaXMgY2hlY2sgdG8gaGFwcGVuIGFmdGVyIHdlIGludm9rZSBzZW5kTWFueVxuICAgICAgICBwcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbi5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoc2VuZE1hbnlJbnB1dCk7XG5cbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnNlbmRNYW55KHNlbmRNYW55SW5wdXQpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4UmVxdWVzdElkIG1pc3NpbmcgZnJvbSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1N1Ym1pdCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc3VibWl0IHRyYW5zYWN0aW9uIHdpdGggdHhSZXF1ZXN0SWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5vY2tTZW5kVHggPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wZXJzaXN0KGZhbHNlKVxuICAgICAgICAgIC5wb3N0KHRzc1NvbFdhbGxldC51cmwoJy90eC9zZW5kJykucmVwbGFjZShiZ1VybCwgJycpKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgbWVzc2FnZTogJ3N1Y2Nlc3MnIH0pO1xuXG4gICAgICAgIGNvbnN0IHN1Ym1pdHRlZFR4ID0gYXdhaXQgdHNzU29sV2FsbGV0LnN1Ym1pdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHN1Ym1pdHRlZFR4LnNob3VsZC5kZWVwRXF1YWwoeyBtZXNzYWdlOiAnc3VjY2VzcycgfSk7XG4gICAgICAgIG5vY2tTZW5kVHguaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0eFJlcXVlc3RJZCBhbmQgdHhIZXggYXJlIGJvdGggcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIHR4SGV4OiAnYmVlZicsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbXVzdCBzdXBwbHkgZXhhY3RseSBvbmUgb2YgdHhSZXF1ZXN0SWQsIHR4SGV4LCBvciBoYWxmU2lnbmVkJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHhSZXF1ZXN0SWQgYW5kIGhhbGZTaWduZWQgYXJlIGJvdGggcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICAgIGhhbGZTaWduZWQ6IHtcbiAgICAgICAgICAgICAgdHhIZXg6ICdiZWVmJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbXVzdCBzdXBwbHkgZXhhY3RseSBvbmUgb2YgdHhSZXF1ZXN0SWQsIHR4SGV4LCBvciBoYWxmU2lnbmVkJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdHhIZXggYW5kIGhhbGZTaWduZWQgYXJlIGJvdGggcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5zdWJtaXRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eEhleDogJ2JlZWYnLFxuICAgICAgICAgICAgaGFsZlNpZ25lZDoge1xuICAgICAgICAgICAgICB0eEhleDogJ2JlZWYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtdXN0IHN1cHBseSBlaXRoZXIgdHhIZXggb3IgaGFsZlNpZ25lZCwgYnV0IG5vdCBib3RoJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2ZlciB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJzB4MTAxYzM5Mjg5NDZiMmUxZDk5NzU5ZThlNWQzNGI1ZTk0YzFhOGUyZicsXG4gICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgdG9rZW5EYXRhOiB7XG4gICAgICAgICAgICB0b2tlbk5hbWU6ICdlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweDgzOTdiMDkxNTE0YzFmN2JlYmI5ZGVhNmFjMjY3ZWEyM2I1NzA2MDUnLFxuICAgICAgICAgICAgdG9rZW5JZDogJzM4JyxcbiAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgIGRlY2ltYWxQbGFjZXM6IDAsXG4gICAgICAgICAgICB0b2tlblR5cGU6IFRva2VuVHlwZS5FUkM3MjEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7XG4gICAgICAgIG1heEZlZVBlckdhczogMjAwMDAwMDAwMCxcbiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwMDAwMDAwMDAsXG4gICAgICB9O1xuXG4gICAgICBpdCgnY2FsbGluZyBwcmVidWlsZHhUcmFuc2FjdGlvbiBzaG91bGQgZXhlY3V0ZSBwcmVidWlsZFR4V2l0aEludGVudCB3aXRoIHByb3BlciBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdEZ1bGxUb2tlblRyYW5zZmVyID0geyAuLi50eFJlcXVlc3RGdWxsLCBpbnRlbnQ6ICd0cmFuc2ZlclRva2VuJyB9O1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihFQ0RTQVV0aWxzLkVjZHNhVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0RnVsbFRva2VuVHJhbnNmZXIpO1xuICAgICAgICAvLyBUT0RPKEJHLTU5Njg2KTogdGhpcyBpcyBub3QgZG9pbmcgYW55dGhpbmcgaWYgd2UgZG9uJ3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgd2Ugc2hvdWxkIGFsc28gbW92ZSB0aGlzIGNoZWNrIHRvIGhhcHBlbiBhZnRlciB3ZSBpbnZva2UgcHJlYnVpbGRUcmFuc2FjdGlvblxuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICdmdWxsJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NQb2x5Z29uV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVydG9rZW4nLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlMTIzNDUnLFxuICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1BvbHlnb25XYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1BvbHlnb25XYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXJ0b2tlbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIEVWTS1saWtlIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCd0cG9seWdvbicpKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBvbmx5IHBhc3MgaW4gcGFyYW1zIGJlaW5nIHRlc3RlZFxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0cG9seWdvbicpLCB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlT3B0aW9ucycpO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heEZlZVBlckdhcycsIDIwMDAwMDAwMDApO1xuICAgICAgICBpbnRlbnQuZmVlT3B0aW9ucyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21heFByaW9yaXR5RmVlUGVyR2FzJywgMTAwMDAwMDAwMCk7XG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjaXBpZW50cycpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcsIDEpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuRGF0YScpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5RdWFudGl0eScsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuUXVhbnRpdHkpO1xuICAgICAgICBpbnRlbnQucmVjaXBpZW50cyFbMF0udG9rZW5EYXRhIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5UeXBlJywgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5UeXBlKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuTmFtZScsIHJlY2lwaWVudHNbMF0udG9rZW5EYXRhLnRva2VuTmFtZSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS50b2tlbkRhdGEhLnNob3VsZC5oYXZlLnByb3BlcnR5KFxuICAgICAgICAgICd0b2tlbkNvbnRyYWN0QWRkcmVzcycsXG4gICAgICAgICAgcmVjaXBpZW50c1swXS50b2tlbkRhdGEudG9rZW5Db250cmFjdEFkZHJlc3NcbiAgICAgICAgKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Rva2VuSWQnLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS50b2tlbklkKTtcbiAgICAgICAgaW50ZW50LnJlY2lwaWVudHMhWzBdLnRva2VuRGF0YSEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnLCByZWNpcGllbnRzWzBdLnRva2VuRGF0YS5kZWNpbWFsUGxhY2VzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIGNhbGxkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweDEwMWMzOTI4OTQ2YjJlMWQ5OTc1OWU4ZTVkMzRiNWU5NGMxYThlMmYnLFxuICAgICAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgICAgICBkYXRhOiAnMHgwMDAwMTExMTIyMjInLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUNEU0FVdGlscy5FY2RzYVV0aWxzKGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBvbmx5IHBhc3MgaW4gcGFyYW1zIGJlaW5nIHRlc3RlZFxuICAgICAgICBjb25zdCBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCdodGV0aCcpLCB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZmVlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWVPcHRpb25zJyk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4RmVlUGVyR2FzJywgMjAwMDAwMDAwMCk7XG4gICAgICAgIGludGVudC5mZWVPcHRpb25zIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLCAxMDAwMDAwMDAwKTtcbiAgICAgICAgaW50ZW50LnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWNpcGllbnRzJyk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJywgMSk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIVswXS5kYXRhIS5zaG91bGQuZXF1YWwoJzB4MDAwMDExMTEyMjIyJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgcG9wdWxhdGUgaW50ZW50IHdpdGggdG9rZW5EYXRhIGlmIGNlcnRhaW4gcGFyYW1zIGFyZSB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IEVDRFNBVXRpbHMuRWNkc2FVdGlscyhiaXRnbywgYml0Z28uY29pbigndHBvbHlnb24nKSk7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzB4MTAxYzM5Mjg5NDZiMmUxZDk5NzU5ZThlNWQzNGI1ZTk0YzFhOGUyZicsXG4gICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgIHRva2VuRGF0YToge1xuICAgICAgICAgICAgICB0b2tlbk5hbWU6ICdlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ODM5N2IwOTE1MTRjMWY3YmViYjlkZWE2YWMyNjdlYTIzYjU3MDYwNScsXG4gICAgICAgICAgICAgIHRva2VuSWQ6ICczOCcsXG4gICAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgICAgZGVjaW1hbFBsYWNlczogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IGludGVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnRlbnQgPSBtcGNVdGlscy5wb3B1bGF0ZUludGVudChiaXRnby5jb2luKCd0cG9seWdvbicpLCB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAndHJhbnNmZXJUb2tlbicsXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG9ubHkgcGFzcyBpbiBwYXJhbXMgYmUgdGVzdGVkIGZvclxuICAgICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICAgIGZlZU9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaW50ZW50LnNob3VsZC5lcXVhbCh1bmRlZmluZWQpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBlLm1lc3NhZ2Uuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICAgJ3Rva2VuIHR5cGUgYW5kIHF1YW50aXR5IGlzIHJlcXVpcmVkIHRvIHJlcXVlc3QgYSB0cmFuc2FjdGlvbiB3aXRoIGludGVudCB0byB0cmFuc2ZlciBhIHRva2VuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZmVyIE5GVHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHBvcHVsYXRlIGludGVudCB3aXRoIE5GVCB0b2tlbiBkZXRhaWxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnMHg5ZmVmNzQ5MDUwNjQ0NjI1MDEyYTJjODY2OTczNzc1ZTcxMjM3NTNiM2VlZjBhMWE0MDM3NDUzYWMyNmQ3OWJmJyxcbiAgICAgICAgICAgICAgYW1vdW50OiAnMScsXG4gICAgICAgICAgICAgIHRva2VuRGF0YToge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZTogVG9rZW5UeXBlLkRJR0lUQUxfQVNTRVQsXG4gICAgICAgICAgICAgICAgdG9rZW5RdWFudGl0eTogJzEnLFxuICAgICAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhiYmM1NjFmYmZhNWQxMDVlZmQ4ZGZiMDZhZTNlN2U1YmU0NjMzMTE2NWI5OWQ1MThmMDk0YzcwMWU0MDYwM2I1JyxcbiAgICAgICAgICAgICAgICB0b2tlbklkOiAnMHg2NzViMDUzZDcyYzI0ZGNjNmJjN2YzOGNkZDQ1YjQ4NDNjZmI3YWY2OWEyNWFkMjFkMDAyYzM3NjM1N2U5ZDY5JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBiYXNlQ29pbiA9IGJpdGdvLmNvaW4oJ3RhcHQnKTtcbiAgICAgICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgRUREU0FVdGlscy5kZWZhdWx0KGJpdGdvLCBiYXNlQ29pbik7XG4gICAgICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGJhc2VDb2luLCBwYXJhbXMpO1xuXG4gICAgICAgIGludGVudC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW50ZW50VHlwZScsICdwYXltZW50Jyk7XG4gICAgICAgIGludGVudC5yZWNpcGllbnRzIS5zaG91bGQuZGVlcEVxdWFsKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICcweDlmZWY3NDkwNTA2NDQ2MjUwMTJhMmM4NjY5NzM3NzVlNzEyMzc1M2IzZWVmMGExYTQwMzc0NTNhYzI2ZDc5YmYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFtb3VudDoge1xuICAgICAgICAgICAgICB2YWx1ZTogJzEnLFxuICAgICAgICAgICAgICBzeW1ib2w6ICd0YXB0Om5mdGNvbGxlY3Rpb24xJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b2tlbkRhdGE6IHtcbiAgICAgICAgICAgICAgdG9rZW5UeXBlOiAnRGlnaXRhbCBBc3NldCcsXG4gICAgICAgICAgICAgIHRva2VuUXVhbnRpdHk6ICcxJyxcbiAgICAgICAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICcweGJiYzU2MWZiZmE1ZDEwNWVmZDhkZmIwNmFlM2U3ZTViZTQ2MzMxMTY1Yjk5ZDUxOGYwOTRjNzAxZTQwNjAzYjUnLFxuICAgICAgICAgICAgICB0b2tlbklkOiAnMHg2NzViMDUzZDcyYzI0ZGNjNmJjN2YzOGNkZDQ1YjQ4NDNjZmI3YWY2OWEyNWFkMjFkMDAyYzM3NjM1N2U5ZDY5JyxcbiAgICAgICAgICAgICAgdG9rZW5OYW1lOiAndGFwdDpuZnRjb2xsZWN0aW9uMScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFNoYXJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHVzZSBrZXljaGFpbiBwdWIgdG8gc2hhcmUgdHNzIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXNlcklkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IGVtYWlsID0gJ3NoYXJldG9Ac2RrdGVzdC5jb20nO1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9ICd2aWV3LHNwZW5kJztcbiAgICAgICAgY29uc3QgdG9LZXljaGFpbiA9IHV0eG9MaWIuYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmZyb20oJ2RlYWRiZWVmMDJkZWFkYmVlZjAyZGVhZGJlZWYwMmRlYWRiZWVmMDInLCAnaGV4JykpO1xuICAgICAgICBjb25zdCBwYXRoID0gJ20vOTk5OTk5LzEvMSc7XG4gICAgICAgIGNvbnN0IHB1YmtleSA9IHRvS2V5Y2hhaW4uZGVyaXZlUGF0aChwYXRoKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2JpdGdvMTIzNCc7XG5cbiAgICAgICAgY29uc3QgZ2V0U2hhcmluZ0tleU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KCcvYXBpL3YxL3VzZXIvc2hhcmluZ2tleScsIHsgZW1haWwgfSlcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHVzZXJJZCwgcHVia2V5LCBwYXRoIH0pO1xuXG4gICAgICAgIC8vIGNvbW1vblB1YiArIGNvbW1vbkNoYWluY29kZVxuICAgICAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4JykgKyByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICBjb25zdCBlbmNYcHJ2MVRzcyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3hwcnYxJywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgICAgIGNvbnN0IGdldEtleU5vY2sgPSBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvdHNvbC9rZXkvJHt0c3NTb2xXYWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwLCB7XG4gICAgICAgICAgaWQ6IHRzc1NvbFdhbGxldC5rZXlJZHMoKVswXSxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiBlbmNYcHJ2MVRzcyxcbiAgICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdHViID0gc2lub24uc3R1Yih0c3NTb2xXYWxsZXQsICdjcmVhdGVTaGFyZScpLmNhbGxzRmFrZShhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgb3B0aW9ucyEua2V5Y2hhaW4hLnB1YiEuc2hvdWxkLm5vdC5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIG9wdGlvbnMhLmtleWNoYWluIS5wdWIhLnNob3VsZC5lcXVhbChUc3NVdGlscy5nZXRQdWJsaWNLZXlGcm9tQ29tbW9uS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW4pKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0LnNoYXJlV2FsbGV0KHsgZW1haWwsIHBlcm1pc3Npb25zLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgIHN0dWIuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBnZXRTaGFyaW5nS2V5Tm9jay5pc0RvbmUoKS5zaG91bGQuYmUuVHJ1ZSgpO1xuICAgICAgICBnZXRLZXlOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS5UcnVlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FWQVggdGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJnVXJsO1xuICAgIGxldCBiYXNlY29pbjtcbiAgICBsZXQgd2FsbGV0RGF0YTtcbiAgICBsZXQgd2FsbGV0O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgICBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgICAgIHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCcsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmZXRjaCBjcm9zcy1jaGFpbiB1dHhvcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGF2YXhwJyk7XG4gICAgICB3YWxsZXREYXRhLmNvaW4gPSAndGF2YXhwJztcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBzb3VyY2VDaGFpbjogJ0MnIH07XG4gICAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vY3Jvc3NDaGFpblVuc3BlbnRzYDtcbiAgICAgIGNvbnN0IHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChwYXRoKVxuICAgICAgICAucXVlcnkocGFyYW1zKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgdW5zcGVudDoge1xuICAgICAgICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgICAgICB0eGlkOiAnVjNVQlpUUWozNjR6TldxdDh1TUhENU5qeHhYOFQ4cWtiZVpYVVJtam5WbUxFcXphYicsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDIsXG4gICAgICAgICAgICBhZGRyZXNzZXM6IFtcbiAgICAgICAgICAgICAgJ0MtZnVqaTE5OWZsdWVncnRocXM0dHZ6NDB6YWpmcnN4NW03ZHZ5NzVhamZtNicsXG4gICAgICAgICAgICAgICdDLWZ1amkxZ2szbTQ0NDg5M3lubDBnZnZ4YWhqZ3czdmZ0bm44c3B0eWQ5ZzUnLFxuICAgICAgICAgICAgICAnQy1mdWppMXVqZnpqZ3d6ZnlnbDYwcXAybDhybWdsZzNsbm03dzQwNTluY2E1JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvdXRwdXRpZHg6ICcxMTExWGlhWWcnLFxuICAgICAgICAgICAgbG9ja3RpbWU6ICcwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZyb21XYWxsZXQ6ICc2MzUwOTJmZDRmZjMzMTYxNDJkZjZlNmI3YTA3OGI5MicsXG4gICAgICAgICAgdG9XYWxsZXQ6ICc2MzUwOTJmZDRmZjMzMTYxNDJkZjZlODkxZjZhN2VlNicsXG4gICAgICAgICAgdG9BZGRyZXNzOiAnMHgxMjVjNDQ1MWM4NzBmNzUzMjY1YjBiMWFmM2NmNmFiODhmZmU0NjU3JyxcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5mZXRjaENyb3NzQ2hhaW5VVFhPcyhwYXJhbXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgbm9jayBpcyBjb25zdW1lZCwgSE1BQyBlcnJvcnMgZXhwZWN0ZWRcbiAgICAgIH1cblxuICAgICAgc2NvcGUuaXNEb25lKCkuc2hvdWxkLmJlLlRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzZW5kTWFueSBzaG91bGQgd29yayBmb3IgQyA+IFAgZXhwb3J0IHdpdGggY3VzdG9kaWFsIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGF2YXhjJyk7XG4gICAgICB3YWxsZXREYXRhLmNvaW4gPSAndGF2YXhjJztcbiAgICAgIHdhbGxldERhdGEudHlwZSA9ICdjdXN0b2RpYWwnO1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgICAgJ1AtZnVqaTFlNTZwYzQ5NjZxc2V2emh3Z2t5bTVsMGpmbWE5bGxrcW5ycjRnaH5QLWZ1amkxa3EwNXptOW5tbHE4cDNsZDU1azc5ZGwzcWF5NmMwZTNhdGo1NnZ+UC1mdWppMXJwNDZ6MzBxZzQ1N3hjM2RwZmZ5eGNnenBmbHhjODVtaGtqbWUzJztcbiAgICAgIGNvbnN0IGluaXRpYXRlVHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDAuMDEgQVZBWFxuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBob3A6IHRydWUsXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW5pdGlhdGVUeFBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9pbml0aWF0ZWA7XG4gICAgICBsZXQgaW5pdGlhdGVUeEJvZHk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGluaXRpYXRlVHhQYXRoLCAoYm9keSkgPT4ge1xuICAgICAgICAgIGluaXRpYXRlVHhCb2R5ID0gYm9keTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICAgIGNvbnN0IGZlZUVzdGltYXRpb25QYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS90eC9mZWU/aG9wPXRydWUmcmVjaXBpZW50PSR7YWRkcmVzc30mYW1vdW50PTEwMDAwMDAwMDAwMDAwMDAwJnR5cGU9RXhwb3J0YDtcbiAgICAgIG5vY2soYmdVcmwpLmdldChmZWVFc3RpbWF0aW9uUGF0aCkucmVwbHkoMjAwLCB7XG4gICAgICAgIGZlZUVzdGltYXRlOiAnNzE4NzUwMDAwMDAwMDAwJyxcbiAgICAgICAgZ2FzTGltaXRFc3RpbWF0ZTogNTAwMDAwLFxuICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhbGxldC5zZW5kTWFueShpbml0aWF0ZVR4UGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIC8vIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBub2NrIGlzIGNvbnN1bWVkLCBITUFDIGVycm9ycyBleHBlY3RlZFxuICAgICAgfVxuICAgICAgXy5pc01hdGNoKGluaXRpYXRlVHhCb2R5LCB7XG4gICAgICAgIGhvcFBhcmFtczoge1xuICAgICAgICAgIGdhc1ByaWNlTWF4OiA3MTg3NTAwMDAwLFxuICAgICAgICAgIGdhc0xpbWl0OiA1MDAwMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ05GVCBUZXN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZXRoV2FsbGV0OiBXYWxsZXQ7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICAgIGNvaW46ICdodGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiAnMHhkZjA3MTE3NzA1YTlmOGRjNGMyYTc4ZGU2NmI3ZjE3OTdkYmE5ZDRlJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCdodGV0aCcpLCB3YWxsZXREYXRhKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrLmNsZWFuQWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJldHVybiBhbGwgbmZ0cyBpbiB0aGUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VG9rZW5CYWxhbmNlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvaHRldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9P2FsbFRva2Vucz10cnVlYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgLi4ubmZ0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgbmZ0cyA9IGF3YWl0IGV0aFdhbGxldC5nZXROZnRCYWxhbmNlcygpO1xuICAgICAgZ2V0VG9rZW5CYWxhbmNlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBuZnRzLnNob3VsZC5sZW5ndGgoNSk7XG4gICAgICBuZnRzLnNob3VsZC5jb250YWluRXFsKHtcbiAgICAgICAgdHlwZTogJ0VSQzcyMScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgbmFtZTogJ3RlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHg4Mzk3YjA5MTUxNGMxZjdiZWJiOWRlYTZhYzI2N2VhMjNiNTcwNjA1JyxcbiAgICAgICAgfSxcbiAgICAgICAgY29sbGVjdGlvbnM6IHt9LFxuICAgICAgICBiYWxhbmNlU3RyaW5nOiAnMCcsXG4gICAgICAgIGNvbmZpcm1lZEJhbGFuY2VTdHJpbmc6ICcwJyxcbiAgICAgICAgc3BlbmRhYmxlQmFsYW5jZVN0cmluZzogJzAnLFxuICAgICAgICB0cmFuc2ZlckNvdW50OiAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHRocm93IHdoZW4gYXR0ZW1wdGluZyB0byB0cmFuc2ZlciBhIG5mdCBjb2xsZWN0aW9uIG5vdCBpbiB0aGUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZ2V0VG9rZW5CYWxhbmNlTm9jayA9IG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvaHRldGgvd2FsbGV0LyR7ZXRoV2FsbGV0LmlkKCl9P2FsbFRva2Vucz10cnVlYClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIC4uLndhbGxldERhdGEsXG4gICAgICAgICAgLi4ubmZ0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLnNlbmROZnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJzEyM2FiYycsXG4gICAgICAgICAgICBvdHA6ICcwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5JZDogJzEyMycsXG4gICAgICAgICAgICB0eXBlOiAnRVJDNzIxJyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHgxMjNiYWRhZGRyZXNzJyxcbiAgICAgICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcweGMxNWFjYzI3ZWU0MWYyNjY4NzdjOGYwYzYxZGY1YmNiYzc5OTdkZjYnLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnQ29sbGVjdGlvbiBub3QgZm91bmQgZm9yIHRva2VuIGNvbnRyYWN0IDB4MTIzYmFkYWRkcmVzcycpO1xuICAgICAgZ2V0VG9rZW5CYWxhbmNlTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCB0aHJvdyB3aGVuIGF0dGVtcHRpbmcgdG8gdHJhbnNmZXIgYSBFUkMtNzIxIG5mdCBub3Qgb3duZWQgYnkgdGhlIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGdldFRva2VuQmFsYW5jZU5vY2sgPSBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL2h0ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfT9hbGxUb2tlbnM9dHJ1ZWApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgICAgIC4uLm5mdFJlc3BvbnNlLFxuICAgICAgICAgIC4uLnVuc3VwcG9ydGVkTmZ0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBldGhXYWxsZXRcbiAgICAgICAgLnNlbmROZnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJzEyM2FiYycsXG4gICAgICAgICAgICBvdHA6ICcwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG9rZW5JZDogJzEyMycsXG4gICAgICAgICAgICB0eXBlOiAnRVJDNzIxJyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiJyxcbiAgICAgICAgICAgIHJlY2lwaWVudEFkZHJlc3M6ICcweGMxNWFjYzI3ZWU0MWYyNjY4NzdjOGYwYzYxZGY1YmNiYzc5OTdkZjYnLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnVG9rZW4gMTIzIG5vdCBmb3VuZCBpbiBjb2xsZWN0aW9uIDB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYiBvciBkb2VzIG5vdCBoYXZlIGEgc3BlbmRhYmxlIGJhbGFuY2UnXG4gICAgICAgICk7XG4gICAgICBnZXRUb2tlbkJhbGFuY2VOb2NrLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHRocm93IHdoZW4gYXR0ZW1wdGluZyB0byB0cmFuc2ZlciBFUkMtMTE1NSB0b2tlbnMgd2hlbiB0aGUgYW1vdW50IHRyYW5zZmVycmVkIGlzIG1vcmUgdGhhbiB0aGUgc3BlbmRhYmxlIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBnZXRUb2tlbkJhbGFuY2VOb2NrID0gbm9jayhiZ1VybClcbiAgICAgICAgLmdldChgL2FwaS92Mi9odGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0/YWxsVG9rZW5zPXRydWVgKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgLi4ud2FsbGV0RGF0YSxcbiAgICAgICAgICAuLi57XG4gICAgICAgICAgICB1bnN1cHBvcnRlZE5mdHM6IHtcbiAgICAgICAgICAgICAgJzB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYic6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRVJDMTE1NScsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIDExODY3MDM6ICc5JyxcbiAgICAgICAgICAgICAgICAgIDExODY3MDU6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTY6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTc6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTg6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NTk6ICcxJyxcbiAgICAgICAgICAgICAgICAgIDEyOTQ4NjA6ICcxJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiAnTXVsdGlGYXVjZXQgTkZUJyxcbiAgICAgICAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHhmNWRlNzYwZjJlOTE2NjQ3ZmQ3NjZiNGFkOWU4NWZmOTQzY2UzYTJiJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgYXdhaXQgZXRoV2FsbGV0XG4gICAgICAgIC5zZW5kTmZ0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICcxMjNhYmMnLFxuICAgICAgICAgICAgb3RwOiAnMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudHJpZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFtb3VudDogMTAsXG4gICAgICAgICAgICAgICAgdG9rZW5JZDogJzExODY3MDMnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYW1vdW50OiAxLFxuICAgICAgICAgICAgICAgIHRva2VuSWQ6ICcxMTg2NzA1JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0eXBlOiAnRVJDMTE1NScsXG4gICAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJzB4ZjVkZTc2MGYyZTkxNjY0N2ZkNzY2YjRhZDllODVmZjk0M2NlM2EyYicsXG4gICAgICAgICAgICByZWNpcGllbnRBZGRyZXNzOiAnMHhjMTVhY2MyN2VlNDFmMjY2ODc3YzhmMGM2MWRmNWJjYmM3OTk3ZGY2JyxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0Ftb3VudCAxMCBleGNlZWRzIHNwZW5kYWJsZSBiYWxhbmNlIG9mIDkgZm9yIHRva2VuIDExODY3MDMnKTtcbiAgICAgIGdldFRva2VuQmFsYW5jZU5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkYSB0ZXN0czogJywgKCkgPT4ge1xuICAgIGxldCBhZGFXYWxsZXQ6IFdhbGxldDtcbiAgICBjb25zdCBhZGFCaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBhZGFCaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZGIxZDk0NTliYicsXG4gICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgYmFzZUFkZHJlc3M6XG4gICAgICAgICAgJ2FkZHJfdGVzdDFxOWZhYTVxM3pyMzh3a2Q0a2QzdThqZnNoeDk3anh2d3N5dmpnM3RhYzgyNjUwMm5tbWdwenk4endhdm10dm1yYzB5bnB3dnRheXZjYXFnZXkzemhtc3c0NGc3c2hyZnJoOScsXG4gICAgICAgIHBlbmRpbmdDaGFpbkluaXRpYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgbWluaW11bUZ1bmRpbmc6IDEwMDAwMDAsXG4gICAgICAgIGxhc3RDaGFpbkluZGV4OiB7IDA6IDAgfSxcbiAgICAgIH0sXG4gICAgICBjb2luOiAndGFkYScsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkNycsXG4gICAgICBdLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICB9O1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFkYVdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJpdGdvLmNvaW4oJ3RhZGEnKSwgd2FsbGV0RGF0YSk7XG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHthZGFXYWxsZXQuY29pbigpfS9rZXkvJHthZGFXYWxsZXQua2V5SWRzKClbMF19YCkudGltZXMoMykucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICBwdWI6ICc1ZjhXbUMydVc5U0FrN0xNWDJyNEcxQng4TU13eDhzZGdwb3R5SEdvZGlabycsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgJ3tcIml2XCI6XCJoTkszcmc4MlAxVDk0TWF1ZVhGQWJBPT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiY1Y0d1U0RXpQanM9XCIsXCJjdFwiOlwiOVZaWDk5WnRzYjZwNzVDeGwybHJjWEJwbG1zc0lBUTlrN1pBODF2ZERZRzRONWRaMzZCUU5XVmZEb2VsajlPMzFYeUorWHJpMFhLSVdVemwwS0tMZlVFUnBsbXROb09DbjVpZkpjWndDck94cEhaUWUzQUo3MDBvOFdtc3JrNUhcIn0nLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke2FkYVdhbGxldC5jb2luKCl9L2tleS8ke2FkYVdhbGxldC5rZXlJZHMoKVsxXX1gKS50aW1lcygyKS5yZXBseSgyMDAsIHtcbiAgICAgICAgaWQ6ICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgIHB1YjogJ0cxczQzSlR6Tlp6cWhVbjRhTnB3Z2NjNndiOUZVc1pRRDVKamZmRzZpc3lkJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OlxuICAgICAgICAgICd7XCJpdlwiOlwiVUZydC9RbElVUjFYZVFhZlBCYUFsdz09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjdWUEJZYUpYUG04PVwiLFwiY3RcIjpcImFqRkt2Mnk4eWFJQlhRMzlzQWJCV2NuYmlFRXpialM0QW9RdHA1Y1hZcWplRFJ4dDNhQ3hlbVBtMjJwbmtKYUNpakZqSnJNSGJrbXNOaE5ZekhnNWFIRnVrTituRUFWc3N5TndIYnpsaFNubTgvQlZONTB5QWRBQXRXcmVoOGNwXCJ9JyxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHthZGFXYWxsZXQuY29pbigpfS9rZXkvJHthZGFXYWxsZXQua2V5SWRzKClbMl19YCkudGltZXMoMikucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgICBwdWI6ICdHSDFMVjFlOUZkcUdlOFUyYzhQTUVjbWEzZkRlaDFrdGNHVkJyRDNBdUZxeCcsXG4gICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAne1wiaXZcIjpcImlJdVdPSElPRXJFRGRpSm42ZzQ2bWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCJSemg3UlJKa3NqMD1cIixcImN0XCI6XCJyY05JQ1VmcDlGYWtUNTNsK2FkQjZYS3pTMXZOVGMwUXE5akF0cW54QStTY3NzaVM0UTBsM3NnRy8wZ0R5NURhWkt0WHJ5S0JEVXZHc2k3Yi9mWWFGQ1VwQW9abi9WWlRPaE9VTi9tbzdaSGI0T2hPWEwyOVlQUGtpcnlBcTlDclwifScsXG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBzZW5kIHVuc3BlbnRzIGluIHBheW1lbnQgaW50ZW50IHdoZW4gdXNpbmcgc2VuZG1hbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZW5kTWFueVBhcmFtcyA9IHtcbiAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHVuc3BlbnRzOiBbJ3Vuc3BlbnQxJywgJ3Vuc3BlbnQyJ10sXG4gICAgICB9O1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi93YWxsZXQvJHthZGFXYWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2ApXG4gICAgICAgIC5yZXBseSgodXJsLCBib2R5OiBhbnkpID0+IHtcbiAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGF0IHRoZSBwb3B1bGF0ZWQgaW50ZW50IGhhcyB1bnNwZW50c1xuICAgICAgICAgIGJvZHkuaW50ZW50LmludGVudFR5cGUuc2hvdWxkLmVxdWFsKCdwYXltZW50Jyk7XG4gICAgICAgICAgYm9keS5pbnRlbnQudW5zcGVudHMuc2hvdWxkLmRlZXBFcXVhbChbJ3Vuc3BlbnQxJywgJ3Vuc3BlbnQyJ10pO1xuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDIwMCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogJ2xpdGUnLFxuICAgICAgICAgICAgICB1bnNpZ25lZFR4czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnc2VyaWFsaXplZFR4SGV4JyxcbiAgICAgICAgICAgICAgICAgICAgZmVlSW5mbzogJ2ZlZSBpbmZvJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHN0dWIgYWxsIHN0ZXBzIGFmdGVyIHR4cmVxdWVzdCBjcmVhdGlvblxuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQuYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7IHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnIH0pO1xuICAgICAgc2lub24uc3R1YihCYXNlVHNzVXRpbHMuZGVmYXVsdC5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0JykucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICBhd2FpdCBhZGFXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBzZW5kIHNlbmRlckFkZHJlc3MgaW4gcGF5bWVudCBpbnRlbnQgd2hlbiB1c2luZyBzZW5kbWFueScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbmRNYW55UGFyYW1zID0ge1xuICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VuZGVyQWRkcmVzczogJ3NlbmRlckFkZHIxJyxcbiAgICAgIH07XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyL3dhbGxldC8ke2FkYVdhbGxldC5pZCgpfS90eHJlcXVlc3RzYClcbiAgICAgICAgLnJlcGx5KCh1cmwsIGJvZHk6IG5vY2suQm9keSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZVR4UmVxdWVzdEJvZHkgPSBib2R5IGFzIENyZWF0ZVR4UmVxdWVzdEJvZHk7XG4gICAgICAgICAgY3JlYXRlVHhSZXF1ZXN0Qm9keS5pbnRlbnQuaW50ZW50VHlwZS5zaG91bGQuZXF1YWwoJ3BheW1lbnQnKTtcbiAgICAgICAgICBjcmVhdGVUeFJlcXVlc3RCb2R5LmludGVudC5zZW5kZXJBZGRyZXNzPy5zaG91bGQuZXF1YWwoJ3NlbmRlckFkZHIxJyk7XG5cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICAgICAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdzZXJpYWxpemVkVHhIZXgnLFxuICAgICAgICAgICAgICAgICAgICBmZWVJbmZvOiAnZmVlIGluZm8nLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcblxuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQuYmFzZUNvaW4sICd2ZXJpZnlUcmFuc2FjdGlvbicpLnJlc29sdmVzKHRydWUpO1xuICAgICAgc2lub24uc3R1YihhZGFXYWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7IHR4UmVxdWVzdElkOiAndHhSZXF1ZXN0SWQnIH0pO1xuICAgICAgc2lub24uc3R1YihCYXNlVHNzVXRpbHMuZGVmYXVsdC5wcm90b3R5cGUsICdzZW5kVHhSZXF1ZXN0JykucmVzb2x2ZXMoJ3NlbmRUeFJlc3BvbnNlJyk7XG4gICAgICBhd2FpdCBhZGFXYWxsZXQuc2VuZE1hbnkoc2VuZE1hbnlQYXJhbXMpLnNob3VsZC5iZS5yZXNvbHZlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRVJDMjAgVG9rZW4gQXBwcm92YWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHdhbGxldDtcbiAgICBjb25zdCB3YWxsZXRJZCA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCc7XG4gICAgbGV0IHRvcGV0aENvaW47XG4gICAgY29uc3QgdG9rZW5OYW1lID0gJ3RvcGV0aDp0ZXJjMThkcCc7XG4gICAgY29uc3QgY29pbiA9ICd0b3BldGgnO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB0b3BldGhDb2luID0gYml0Z28uY29pbigndG9wZXRoJyk7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0b3BldGhDb2luLCB7XG4gICAgICAgIGlkOiB3YWxsZXRJZCxcbiAgICAgICAgY29pbjogY29pbixcbiAgICAgICAga2V5czogWydrZXlpZDEnLCAna2V5aWQyJywgJ2tleWlkMyddLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgYXBwcm92ZSBhIHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25lZFR4ID0ge1xuICAgICAgICB0eEhleDogJzB4MTIzNDU2c2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2VuZFJlc3VsdCA9IHtcbiAgICAgICAgdHhpZDogJzB4YWJjZGVmJyxcbiAgICAgICAgdHg6ICcweDEyMzQ1NnNpZ25lZCcsXG4gICAgICAgIHN0YXR1czogJ3NpZ25lZCcsXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIGNvbnN0IGV0aFVybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbYml0Z28uZ2V0RW52KCldLnVyaTtcbiAgICAgIG5vY2soZXRoVXJsKS5wb3N0KGAvYXBpL3YyLyR7Y29pbn0vd2FsbGV0LyR7d2FsbGV0SWR9L3Rva2VuL2FwcHJvdmFsL2J1aWxkYCkucmVwbHkoMjAwLCBleHBlY3RlZEFwcHJvdmFsQnVpbGQpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UgbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAna2V5aWQxJyxcbiAgICAgICAgICBwdWI6ICdwdWIxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWRQcnYnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNpZ24gdHJhbnNhY3Rpb24gbWV0aG9kXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGVjdGVkU2lnbmVkVHgpO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzZW5kIHRyYW5zYWN0aW9uIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzZW5kVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBlY3RlZFNlbmRSZXN1bHQpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuYXBwcm92ZUVyYzIwVG9rZW4od2FsbGV0UGFzc3BocmFzZSwgdG9rZW5OYW1lKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHJlc3VsdCk7XG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFNlbmRSZXN1bHQpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHNpZ25UcmFuc2FjdGlvblxuICAgICAgY29uc3Qgc2lnblBhcmFtcyA9IHdhbGxldC5zaWduVHJhbnNhY3Rpb24uZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBzaWduUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFByZWJ1aWxkJywgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcbiAgICAgIHNpZ25QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2tleWNoYWluJyk7XG4gICAgICBzaWduUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJywgd2FsbGV0UGFzc3BocmFzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUEkgZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAndG9rZW4gYXBwcm92YWwgYnVpbGQgZmFpbGVkJztcblxuICAgICAgLy8gTW9jayB0aGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgQVBJIHRvIHJldHVybiBhbiBlcnJvclxuICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5V2l0aEVycm9yKGVycm9yTWVzc2FnZSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoZXJyb3JNZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHdhbGxldCBwYXNzcGhyYXNlIHZhbGlkYXRpb24gZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd3cm9uZy1wYXNzd29yZCc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseSgyMDAsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZSBtZXRob2QgdG8gdGhyb3cgYW4gZXJyb3JcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgZXJyb3IubmFtZSA9ICd3YWxsZXRfcGFzc3BocmFzZV9pbmNvcnJlY3QnO1xuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZWplY3RzKGVycm9yKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd1bmFibGUgdG8gZGVjcnlwdCBrZXljaGFpbiB3aXRoIHRoZSBnaXZlbiB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmluZyBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Bhc3N3b3JkMTIzJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkQXBwcm92YWxCdWlsZCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NicsXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduaW5nRXJyb3IgPSBuZXcgRXJyb3IoJ3NpZ25pbmcgZmFpbGVkJyk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIEFQSVxuICAgICAgbm9jayhiZ1VybCkucG9zdChgL2FwaS92Mi8ke2NvaW59L3dhbGxldC8ke3dhbGxldElkfS90b2tlbi9hcHByb3ZhbC9idWlsZGApLnJlcGx5KDIwMCwgZXhwZWN0ZWRBcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayB0aGUgZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlIG1ldGhvZFxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2UnKS5yZXNvbHZlcyhbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2tleWlkMScsXG4gICAgICAgICAgcHViOiAncHViMScsXG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkUHJ2JyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBNb2NrIHRoZSBzaWduIHRyYW5zYWN0aW9uIG1ldGhvZCB0byB0aHJvdyBhbiBlcnJvclxuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nKS5yZWplY3RzKHNpZ25pbmdFcnJvcik7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoc2lnbmluZ0Vycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHNlbmQgdHJhbnNhY3Rpb24gZXJyb3JzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdwYXNzd29yZDEyMyc7XG4gICAgICBjb25zdCBleHBlY3RlZEFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRTaWduZWRUeCA9IHtcbiAgICAgICAgdHhIZXg6ICcweDEyMzQ1NnNpZ25lZCcsXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VuZEVycm9yID0gbmV3IEVycm9yKCdzZW5kIGZhaWxlZCcpO1xuXG4gICAgICAvLyBNb2NrIHRoZSB0b2tlbiBhcHByb3ZhbCBidWlsZCBBUElcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHtjb2lufS93YWxsZXQvJHt3YWxsZXRJZH0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKS5yZXBseSgyMDAsIGV4cGVjdGVkQXBwcm92YWxCdWlsZCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIGdldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZSBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdrZXlpZDEnLFxuICAgICAgICAgIHB1YjogJ3B1YjEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZFBydicsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgLy8gTW9jayB0aGUgc2lnbiB0cmFuc2FjdGlvbiBtZXRob2RcbiAgICAgIHNpbm9uLnN0dWIod2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoZXhwZWN0ZWRTaWduZWRUeCk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIHNlbmQgdHJhbnNhY3Rpb24gbWV0aG9kIHRvIHRocm93IGFuIGVycm9yXG4gICAgICBzaW5vbi5zdHViKHdhbGxldCwgJ3NlbmRUcmFuc2FjdGlvbicpLnJlamVjdHMoc2VuZEVycm9yKTtcblxuICAgICAgYXdhaXQgd2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKHdhbGxldFBhc3NwaHJhc2UsIHRva2VuTmFtZSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChzZW5kRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQW1vdW50IFZhbGlkYXRpb24gZm9yIHNlbmRDb2lucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgd2FsbGV0O1xuICAgIGxldCBwYXJhbXM7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YnRjJyk7XG4gICAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICAgIH0pO1xuICAgICAgcGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzOiAnMk40WHo0aXRDZEtLVVJFaXl0RUoxS0dQb0VuS0htSlVJd3EnLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAndGVzdDEyMycsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgZGVjaW1hbCBhbW91bnRzIGluIHNlbmQgY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJhbXMuYW1vdW50ID0gMTUwMDAwMDAwLjU1O1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNlbmQocGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gSW50ZWdlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgYW1vdW50IGluIHNlbmQgY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJhbXMuYW1vdW50ID0gJy0xMic7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuc2VuZChwYXJhbXMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIGFyZ3VtZW50IGZvciBhbW91bnQgLSBJbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvIG9yIG51bWVyaWMgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB6ZXJvIGluIHNlbmQgY29pbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJhbXMuYW1vdW50ID0gJzAnO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNlbmQocGFyYW1zKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnaW52YWxpZCBhcmd1bWVudCBmb3IgYW1vdW50IC0gSW50ZWdlciBncmVhdGVyIHRoYW4gemVybyBvciBudW1lcmljIHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9rZW4gQXBwcm92YWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGV0aFdhbGxldDtcbiAgICBjb25zdCB0b2tlbk5hbWUgPSAndXNkYyc7XG4gICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0X3Bhc3NwaHJhc2UnO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWRiMWQ5NDU5YmInLFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMicsXG4gICAgICAgICAgJzU5MzVkNTljZjY2MDc2NDMzMWJhZmNhZGUxODU1ZmQ3JyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBldGhXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiaXRnby5jb2luKCd0ZXRoJyksIHdhbGxldERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgYXBwcm92ZSBFUkMyMCB0b2tlbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzB4MTIzNDU2Nzg5MGFiY2RlZicsXG4gICAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAgICAgICBnYXNMaW1pdDogNjAwMDAsXG4gICAgICAgICAgICBub25jZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb2luOiAndGV0aCcsXG4gICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja1NpZ25lZFRyYW5zYWN0aW9uID0ge1xuICAgICAgICB0eEhleDogJzB4YWJjZGVmMTIzNDU2Nzg5MCcsXG4gICAgICAgIGhhbGZTaWduZWQ6IHtcbiAgICAgICAgICB0eEhleDogJzB4YWJjZGVmMTIzNDU2Nzg5MCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrU2VudFRyYW5zYWN0aW9uID0ge1xuICAgICAgICBoYXNoOiAnMHg5ODc2NTQzMjEwZmVkY2JhJyxcbiAgICAgICAgc3RhdHVzOiAnc2lnbmVkJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIHRva2VuIGFwcHJvdmFsIGJ1aWxkIGVuZHBvaW50XG4gICAgICBjb25zdCBidWlsZFNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGV0aC93YWxsZXQvJHtldGhXYWxsZXQuaWQoKX0vdG9rZW4vYXBwcm92YWwvYnVpbGRgKVxuICAgICAgICAucmVwbHkoMjAwLCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkKTtcblxuICAgICAgLy8gTW9jayBnZXRLZXljaGFpbnNBbmRWYWxpZGF0ZVBhc3NwaHJhc2VcbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMicsXG4gICAgICAgICAgcHJ2OiAndGVzdF9wcml2YXRlX2tleScsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgLy8gTW9jayBzaWduVHJhbnNhY3Rpb25cbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnc2lnblRyYW5zYWN0aW9uJykucmVzb2x2ZXMobW9ja1NpZ25lZFRyYW5zYWN0aW9uKTtcblxuICAgICAgLy8gTW9jayBzZW5kVHJhbnNhY3Rpb25cbiAgICAgIHNpbm9uLnN0dWIoZXRoV2FsbGV0LCAnc2VuZFRyYW5zYWN0aW9uJykucmVzb2x2ZXMobW9ja1NlbnRUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV0aFdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCB0b2tlbk5hbWUpO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKG1vY2tTZW50VHJhbnNhY3Rpb24pO1xuICAgICAgYnVpbGRTY29wZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdG9rZW4gYXBwcm92YWwgYnVpbGQgZmFpbHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkU2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi90ZXRoL3dhbGxldC8ke2V0aFdhbGxldC5pZCgpfS90b2tlbi9hcHByb3ZhbC9idWlsZGApXG4gICAgICAgIC5yZXBseSg0MDAsIHsgZXJyb3I6ICdJbnZhbGlkIHRva2VuIG5hbWUnIH0pO1xuXG4gICAgICBzaW5vbi5zdHViKGV0aFdhbGxldCwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAgIHBydjogJ3Rlc3RfcHJpdmF0ZV9rZXknLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGF3YWl0IGV0aFdhbGxldC5hcHByb3ZlRXJjMjBUb2tlbih3YWxsZXRQYXNzcGhyYXNlLCAnaW52YWxpZF90b2tlbicpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdG9rZW4gbmFtZScpO1xuXG4gICAgICBidWlsZFNjb3BlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIGFwcHJvdmVFcmMyMFRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZXRoV2FsbGV0LmFwcHJvdmVFcmMyMFRva2VuKCcnLCB0b2tlbk5hbWUpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTb2xhbmEgSW5zdHJ1Y3Rpb24gRmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgLy8gU2V0IHVwIHRlc3QgZGF0YSBhbmQgd2FsbGV0c1xuICAgIGNvbnN0IHRzb2wgPSBiaXRnby5jb2luKCd0c29sJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgY29pbjogJ3Rzb2wnLFxuICAgICAga2V5czogW1xuICAgICAgICAnNTk4ZjYwNmNkOGZjMjQ3MTBkMmViYWQ4OWRjZTg2YzInLFxuICAgICAgICAnNTk4ZjYwNmNjOGU0M2FlZjA5ZmNiNzg1MjIxZDlkZDInLFxuICAgICAgICAnNTkzNWQ1OWNmNjYwNzY0MzMxYmFmY2FkZTE4NTVmZDcnLFxuICAgICAgXSxcbiAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgIH07XG5cbiAgICBjb25zdCB0c3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB3YWxsZXREYXRhKTtcbiAgICBjb25zdCBjdXN0b2RpYWxUc3NTb2xXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0c29sLCB7XG4gICAgICAuLi53YWxsZXREYXRhLFxuICAgICAgdHlwZTogJ2N1c3RvZGlhbCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgfSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiA1MDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnNTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICBwcm9ncmFtSWQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScsXG4gICAgICBrZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwdWJrZXk6ICdEZlh5Z1NtNGpDeU5DeWJWWVlLNkR3dldxaktlZThwYkRtSkdjTFdORFhqaCcsXG4gICAgICAgICAgaXNTaWduZXI6IHRydWUsXG4gICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHB1YmtleTogJ0VzOXZNRnJ6YUNFUm1KZnJGNEgyRllENEtDb05rWTExTWNDZThCZW53TllCJyxcbiAgICAgICAgICBpc1NpZ25lcjogZmFsc2UsXG4gICAgICAgICAgaXNXcml0YWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGF0YTogJzNCeHMzenQ2S0s1aE4nLFxuICAgIH07XG5cbiAgICBjb25zdCB0ZXN0UmVjaXBpZW50cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogJ0RmWHlnU200akN5TkN5YlZZWUs2RHd2V3FqS2VlOHBiRG1KR2NMV05EWGpoJyxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMCcsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBkZXNjcmliZSgncHJlYnVpbGRUcmFuc2FjdGlvbiB3aXRoIHNvbEluc3RydWN0aW9uIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgcHJlYnVpbGRUeFdpdGhJbnRlbnQgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBpbnN0cnVjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbEluc3RydWN0aW9uIHdpdGggZW1wdHkgcmVjaXBpZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBjdXN0b20gaW5zdHJ1Y3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzZWNvbmRJbnN0cnVjdGlvbiA9IHtcbiAgICAgICAgICBwcm9ncmFtSWQ6ICcyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMicsXG4gICAgICAgICAga2V5czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwdWJrZXk6ICdFczl2TUZyemFDRVJtSmZyRjRIMkZZRDRLQ29Oa1kxMU1jQ2U4QmVud05ZQicsXG4gICAgICAgICAgICAgIGlzU2lnbmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNXcml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkYXRhOiAndGVzdERhdGExMjMnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb24sIHNlY29uZEluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbiwgc2Vjb25kSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbiwgc2Vjb25kSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xJbnN0cnVjdGlvbiB3aXRoIG1lbW8gcGFyYW1ldGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICBtZW1vOiB7XG4gICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICB2YWx1ZTogJ3Rlc3QgbWVtbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc1NvbFdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgdHlwZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6ICd0ZXN0IG1lbW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xJbnN0cnVjdGlvbiB3aXRoIHBlbmRpbmcgYXBwcm92YWwgSUQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHsgLi4udHhSZXF1ZXN0LCBzdGF0ZTogJ3BlbmRpbmdBcHByb3ZhbCcsIHBlbmRpbmdBcHByb3ZhbElkOiAnc29tZS1pZCcgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogY3VzdG9kaWFsVHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdzb21lLWlkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbEluc3RydWN0aW9uczogW3Rlc3RDdXN0b21JbnN0cnVjdGlvbl0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGVtcHR5IHNvbEluc3RydWN0aW9ucyBhcnJheScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHNzU29sV2FsbGV0XG4gICAgICAgICAgLnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbXSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYCdzb2xJbnN0cnVjdGlvbnMnIG9yICdzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEnIGlzIHJlcXVpcmVkIGZvciBjdXN0b21UeCBpbnRlbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1cHBvcnQgc29sSW5zdHJ1Y3Rpb24gZm9yIGNvbGQgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgdHhSZXF1ZXN0LndhbGxldFR5cGUgPSAnY29sZCc7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sSW5zdHJ1Y3Rpb25zOiBbdGVzdEN1c3RvbUluc3RydWN0aW9uXSxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0UmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzU29sV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NTb2xXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdpZCcsXG4gICAgICAgICAgdHhIZXg6ICdhYmFiY2RjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IFt0ZXN0Q3VzdG9tSW5zdHJ1Y3Rpb25dLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ByZWJ1aWxkVHJhbnNhY3Rpb24gd2l0aCBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGdldFRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb2dyYW1JZEluZGV4OiAxMCxcbiAgICAgICAgICAgICAgYWNjb3VudEtleUluZGV4ZXM6IFswLCAxLCAyXSxcbiAgICAgICAgICAgICAgZGF0YTogJzAxMDIwMzA0MDUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvZ3JhbUlkSW5kZXg6IDExLFxuICAgICAgICAgICAgICBhY2NvdW50S2V5SW5kZXhlczogWzAsIDMsIDQsIDVdLFxuICAgICAgICAgICAgICBkYXRhOiAnMDYwNzA4MDkwYScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRkcmVzc0xvb2t1cFRhYmxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhY2NvdW50S2V5OiAnMnNrNmJWaGpONTNoejdzcUU3MmVxSHZoUGZTYzFzblp6c0pSNnlBNWhGN2onLFxuICAgICAgICAgICAgICB3cml0YWJsZUluZGV4ZXM6IFswLCAxXSxcbiAgICAgICAgICAgICAgcmVhZG9ubHlJbmRleGVzOiBbMiwgM10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQWNjb3VudEtleXM6IFtcbiAgICAgICAgICAgICc1aHI1ZmlzUGk2RFhOdXVScG01WFVienBpRW5tZHl4WHVCRFR3endaajVQZScsXG4gICAgICAgICAgICAnMnNrNmJWaGpONTNoejdzcUU3MmVxSHZoUGZTYzFzblp6c0pSNnlBNWhGN2onLFxuICAgICAgICAgICAgJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1lc3NhZ2VIZWFkZXI6IHtcbiAgICAgICAgICAgIG51bVJlcXVpcmVkU2lnbmF0dXJlczogMSxcbiAgICAgICAgICAgIG51bVJlYWRvbmx5U2lnbmVkQWNjb3VudHM6IDAsXG4gICAgICAgICAgICBudW1SZWFkb25seVVuc2lnbmVkQWNjb3VudHM6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzIGZvciB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgPSBnZXRUZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NTb2xXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IHRlc3RWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc1NvbFdhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzU29sV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYWJhYmNkY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgd2l0aCBlbXB0eSByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogNTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzUwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB3aXRoIG1lbW8gcGFyYW1ldGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgIG1lbW86IHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YTogdGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICAgICAgbWVtbzoge1xuICAgICAgICAgICAgICB0eXBlOiAndHlwZScsXG4gICAgICAgICAgICAgIHZhbHVlOiAndGVzdCBtZW1vJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzb2xWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgd2l0aCBwZW5kaW5nIGFwcHJvdmFsIElEJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZ2V0VGVzdFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyh7IC4uLnR4UmVxdWVzdCwgc3RhdGU6ICdwZW5kaW5nQXBwcm92YWwnLCBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnIH0pO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgY3VzdG9kaWFsVHNzU29sV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiBjdXN0b2RpYWxUc3NTb2xXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IGN1c3RvZGlhbFRzc1NvbFdhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2lkJyxcbiAgICAgICAgICB0eEhleDogJ2FiYWJjZGNkJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ3NvbWUtaWQnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgc29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhOiB0ZXN0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDUwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICc1MDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSB2ZXJzaW9uZWRJbnN0cnVjdGlvbnMgYXJyYXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRzc1NvbFdhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YToge1xuICAgICAgICAgICAgICB2ZXJzaW9uZWRJbnN0cnVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgICBhZGRyZXNzTG9va3VwVGFibGVzOiBbXSxcbiAgICAgICAgICAgICAgc3RhdGljQWNjb3VudEtleXM6IFsndGVzdCddLFxuICAgICAgICAgICAgICBtZXNzYWdlSGVhZGVyOiB7IG51bVJlcXVpcmVkU2lnbmF0dXJlczogMSwgbnVtUmVhZG9ubHlTaWduZWRBY2NvdW50czogMCwgbnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzOiAwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdFJlY2lwaWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgJ3NvbEluc3RydWN0aW9ucycgb3IgJ3NvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YScgaXMgcmVxdWlyZWQgZm9yIGN1c3RvbVR4IGludGVudGApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBcHRvcyBDdXN0b20gdHJhbnNhY3Rpb24gRmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgLy8gU2V0IHVwIHRlc3QgZGF0YSBhbmQgd2FsbGV0c1xuICAgIGNvbnN0IHRhcHQgPSBiaXRnby5jb2luKCd0YXB0Jyk7XG4gICAgY29uc3QgYXB0b3NXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMScsXG4gICAgICBjb2luOiAndGFwdCcsXG4gICAgICBrZXlzOiBbXG4gICAgICAgICc1OThmNjA2Y2Q4ZmMyNDcxMGQyZWJhZDg5ZGNlODZjMycsXG4gICAgICAgICc1OThmNjA2Y2M4ZTQzYWVmMDlmY2I3ODUyMjFkOWRkMycsXG4gICAgICAgICc1OTM1ZDU5Y2Y2NjA3NjQzMzFiYWZjYWRlMTg1NWZkOCcsXG4gICAgICBdLFxuICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgfTtcblxuICAgIGNvbnN0IHRzc0FwdG9zV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdGFwdCwgYXB0b3NXYWxsZXREYXRhKTtcbiAgICBjb25zdCBjdXN0b2RpYWxUc3NBcHRvc1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIHRhcHQsIHtcbiAgICAgIC4uLmFwdG9zV2FsbGV0RGF0YSxcbiAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuXG4gICAgY29uc3QgYXB0b3NUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIGludGVudDoge1xuICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgfSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAgIHN0YXRlOiAncGVuZGluZ1VzZXJTaWduYXR1cmUnLFxuICAgICAgdXNlcklkOiAndXNlcklkJyxcbiAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgcG9saWNpZXNDaGVja2VkOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICB3YWxsZXRJZDogJ3dhbGxldElkJyxcbiAgICAgIHVuc2lnbmVkVHhzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnYXB0b3NkZWFkYmVlZicsXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwgPSB7XG4gICAgICBtb2R1bGVOYW1lOiAnMHgxOjpjb2luJyxcbiAgICAgIGZ1bmN0aW9uTmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgIHR5cGVBcmd1bWVudHM6IFsnMHgxOjphcHRvc19jb2luOjpBcHRvc0NvaW4nXSxcbiAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbJzB4NzQyZDM1Q2M2NjM0QzA1MzI5MjVhM2I4RDQwMEU2NUFBRDgwMWMwYicsICcxMDAwMDAwJ10sXG4gICAgfTtcblxuICAgIGNvbnN0IHRlc3RBcHRvc1JlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6ICcweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiOEQ0MDBFNjVBQUQ4MDFjMGInLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGRlc2NyaWJlKCdwcmVidWlsZFRyYW5zYWN0aW9uIHdpdGggYXB0b3NDdXN0b21UcmFuc2FjdGlvbiB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHByZWJ1aWxkVHhXaXRoSW50ZW50IHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzIGZvciBjdXN0b20gc21hcnQgY29udHJhY3QgY2FsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoYXB0b3NUeFJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb24gd2l0aCBlbXB0eSByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IHRlc3RDdXN0b21TbWFydENvbnRyYWN0Q2FsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGN1c3RvbSBzbWFydCBjb250cmFjdCBjYWxsIHdpdGggdHlwZSBhcmd1bWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFjY291bnRDcmVhdGlvbkNhbGwgPSB7XG4gICAgICAgICAgbW9kdWxlTmFtZTogJzB4MTo6YXB0b3NfYWNjb3VudCcsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiAnY3JlYXRlX2FjY291bnQnLFxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IFtdLFxuICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbJzB4MTIzZGVmNDU2YWJjNzg5ZmVkMDEyMzQ1YWJjZGVmNjc4OTAnXSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBhY2NvdW50Q3JlYXRpb25DYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGFjY291bnRDcmVhdGlvbkNhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhQcmVidWlsZC5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICB3YWxsZXRJZDogdHNzQXB0b3NXYWxsZXQuaWQoKSxcbiAgICAgICAgICB3YWxsZXQ6IHRzc0FwdG9zV2FsbGV0LFxuICAgICAgICAgIHR4UmVxdWVzdElkOiAnYXB0b3MtdHgtaWQnLFxuICAgICAgICAgIHR4SGV4OiAnYXB0b3MxMjNhYmNkJyxcbiAgICAgICAgICBidWlsZFBhcmFtczoge1xuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGFjY291bnRDcmVhdGlvbkNhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXB0b3NDdXN0b21UcmFuc2FjdGlvbiB3aXRoIEFCSSBpbmZvcm1hdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ2FsbFdpdGhBYmkgPSB7XG4gICAgICAgICAgLi4udGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIGFiaToge1xuICAgICAgICAgICAgbmFtZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6ICdwdWJsaWMnLFxuICAgICAgICAgICAgaXNfZW50cnk6IHRydWUsXG4gICAgICAgICAgICBnZW5lcmljX3R5cGVfcGFyYW1zOiBbXSxcbiAgICAgICAgICAgIHBhcmFtczogWydhZGRyZXNzJywgJ3U2NCddLFxuICAgICAgICAgICAgcmV0dXJuOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByZWJ1aWxkVHhXaXRoSW50ZW50ID0gc2FuZGJveC5zdHViKFRzc1V0aWxzLnByb3RvdHlwZSwgJ3ByZWJ1aWxkVHhXaXRoSW50ZW50Jyk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnJlc29sdmVzKGFwdG9zVHhSZXF1ZXN0KTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGN1c3RvbUNhbGxXaXRoQWJpLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBhd2FpdCB0c3NBcHRvc1dhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tVHgnLFxuICAgICAgICAgIGFwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXM6IGN1c3RvbUNhbGxXaXRoQWJpLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBjdXN0b21DYWxsV2l0aEFiaSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICBmZWU6IDEwMDAsXG4gICAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uIHdpdGggcGVuZGluZyBhcHByb3ZhbCBJRCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoe1xuICAgICAgICAgIC4uLmFwdG9zVHhSZXF1ZXN0LFxuICAgICAgICAgIHN0YXRlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZDogJ2FwdG9zLWFwcHJvdmFsLWlkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IGN1c3RvZGlhbFRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IGN1c3RvZGlhbFRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiBjdXN0b2RpYWxUc3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsSWQ6ICdhcHRvcy1hcHByb3ZhbC1pZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgbWlzc2luZyBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0c3NBcHRvc1dhbGxldFxuICAgICAgICAgIC5wcmVidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgICAgdHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgJ2FwdG9zQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMnIGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciBjdXN0b21UeCBpbnRlbnRgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1cHBvcnQgYXB0b3NDdXN0b21UcmFuc2FjdGlvbiBmb3IgY29sZCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcmVidWlsZFR4V2l0aEludGVudCA9IHNhbmRib3guc3R1YihUc3NVdGlscy5wcm90b3R5cGUsICdwcmVidWlsZFR4V2l0aEludGVudCcpO1xuICAgICAgICBhcHRvc1R4UmVxdWVzdC53YWxsZXRUeXBlID0gJ2NvbGQnO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5yZXNvbHZlcyhhcHRvc1R4UmVxdWVzdCk7XG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ2N1c3RvbVR4JyxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IGF3YWl0IHRzc0FwdG9zV2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtczogdGVzdEN1c3RvbVNtYXJ0Q29udHJhY3RDYWxsLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHR4UHJlYnVpbGQuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRzc0FwdG9zV2FsbGV0LmlkKCksXG4gICAgICAgICAgd2FsbGV0OiB0c3NBcHRvc1dhbGxldCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ2FwdG9zLXR4LWlkJyxcbiAgICAgICAgICB0eEhleDogJ2FwdG9zMTIzYWJjZCcsXG4gICAgICAgICAgYnVpbGRQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiB0ZXN0Q3VzdG9tU21hcnRDb250cmFjdENhbGwsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgICAgZmVlOiAxMDAwLFxuICAgICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHN0YW5kYXJkIEFwdG9zIHRyYW5zZmVyIHdpdGhvdXQgYnJlYWtpbmcgY3VzdG9tIGZ1bmN0aW9uYWxpdHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHN0YW5kYXJkVHJhbnNmZXJSZXF1ZXN0ID0ge1xuICAgICAgICAgIC4uLmFwdG9zVHhSZXF1ZXN0LFxuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVzb2x2ZXMoc3RhbmRhcmRUcmFuc2ZlclJlcXVlc3QpO1xuICAgICAgICBwcmVidWlsZFR4V2l0aEludGVudC5jYWxsZWRPbmNlV2l0aEV4YWN0bHkoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0gYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgcmVxSWQsXG4gICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICB9KTtcblxuICAgICAgICB0eFByZWJ1aWxkLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIHdhbGxldElkOiB0c3NBcHRvc1dhbGxldC5pZCgpLFxuICAgICAgICAgIHdhbGxldDogdHNzQXB0b3NXYWxsZXQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6ICdhcHRvcy10eC1pZCcsXG4gICAgICAgICAgdHhIZXg6ICdhcHRvczEyM2FiY2QnLFxuICAgICAgICAgIGJ1aWxkUGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiB0ZXN0QXB0b3NSZWNpcGllbnRzLFxuICAgICAgICAgICAgdHlwZTogJ3RyYW5zZmVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgIGZlZTogMTAwMCxcbiAgICAgICAgICAgIGZlZVN0cmluZzogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYXB0b3NDdXN0b21UcmFuc2FjdGlvblBhcmFtcyBzdHJ1Y3R1cmUgZm9yIHNtYXJ0IGNvbnRyYWN0IGNhbGxzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkUGFyYW1zID0ge1xuICAgICAgICAgIG1vZHVsZU5hbWU6ICcweDE6OmNvaW4nLFxuICAgICAgICAgIC8vIE1pc3NpbmcgcmVxdWlyZWQgZnVuY3Rpb25OYW1lXG4gICAgICAgICAgdHlwZUFyZ3VtZW50czogWycweDE6OmFwdG9zX2NvaW46OkFwdG9zQ29pbiddLFxuICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbJzB4NzQyZDM1Q2M2NjM0QzA1MzI5MjVhM2I4RDQwMEU2NUFBRDgwMWMwYicsICcxMDAwMDAwJ10sXG4gICAgICAgIH0gYXMgYW55OyAvLyBUeXBlIGFzc2VydGlvbiB0byB0ZXN0IGludmFsaWQgcGFyYW1zXG5cbiAgICAgICAgY29uc3QgcHJlYnVpbGRUeFdpdGhJbnRlbnQgPSBzYW5kYm94LnN0dWIoVHNzVXRpbHMucHJvdG90eXBlLCAncHJlYnVpbGRUeFdpdGhJbnRlbnQnKTtcbiAgICAgICAgcHJlYnVpbGRUeFdpdGhJbnRlbnQucmVqZWN0cyhuZXcgRXJyb3IoJ0Z1bmN0aW9uIG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJykpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdHNzQXB0b3NXYWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICByZXFJZCxcbiAgICAgICAgICAgIHR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBpbnZhbGlkUGFyYW1zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdGVzdEFwdG9zUmVjaXBpZW50cyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLnNob3VsZC5lcXVhbCgnRnVuY3Rpb24gbmFtZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZWJ1aWxkVHhXaXRoSW50ZW50LnNob3VsZC5oYXZlLmJlZW4uY2FsbGVkT25jZVdpdGgoe1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICdjdXN0b21UeCcsXG4gICAgICAgICAgc2VxdWVuY2VJZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbW1lbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzb2xJbnN0cnVjdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhcHRvc0N1c3RvbVRyYW5zYWN0aW9uUGFyYW1zOiBpbnZhbGlkUGFyYW1zLFxuICAgICAgICAgIHJlY2lwaWVudHM6IHRlc3RBcHRvc1JlY2lwaWVudHMsXG4gICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmZWVPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cGdyYWRlRW5jcnlwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXRJZCA9IHdhbGxldERhdGEuaWQ7XG4gICAgY29uc3QgW3VzZXJLZXlJZCwgYmFja3VwS2V5SWQsIGJpdGdvS2V5SWRdID0gd2FsbGV0RGF0YS5rZXlzO1xuICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAnd2FsbGV0UGFzc3BocmFzZSc7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQcmV2ZW50IGxlZnRvdmVyIGludGVyY2VwdG9ycyBmcm9tIGJsZWVkaW5nIGludG8gb3RoZXIgc3VpdGVzIGluIHRoZSBmaWxlLlxuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbm9ja1VubG9jayh0aW1lcyA9IDEpIHtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvdW5sb2NrJykudGltZXModGltZXMpLnJlcGx5KDIwMCwge30pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vY2tLZXljaGFpbihpZDogc3RyaW5nLCBrZXljaGFpbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyL3RidGMva2V5LyR7aWR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBpZCwgcHViOiAncHViJywgdHlwZTogJ2luZGVwZW5kZW50JywgLi4ua2V5Y2hhaW4gfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ja1BlY0ZldGNoKHBlYzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvdGJ0Yy93YWxsZXQvJHt3YWxsZXRJZH0vcGFzc2NvZGVyZWNvdmVyeWApXG4gICAgICAgIC5yZXBseSgyMDAsIHsgcmVjb3ZlcnlJbmZvOiB7IHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBlYyB9IH0pO1xuICAgIH1cblxuICAgIGl0KCdyZS1lbmNyeXB0cyBib3RoIHVzZXIgYW5kIGJhY2t1cCBrZXlzIGFuZCBQVVRzIHRoZW0gYXMgdjInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyRW5jIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJhY2t1cEtleUlkLCB7IHNvdXJjZTogJ2JhY2t1cCcsIGVuY3J5cHRlZFBydjogYmFja3VwRW5jIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICBjb25zdCBwdXRzOiBBcnJheTx7IHVybDogc3RyaW5nOyBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiA9IFtdO1xuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke3VzZXJLZXlJZH1gLCAoYm9keSkgPT4ge1xuICAgICAgICAgIHB1dHMucHVzaCh7IHVybDogdXNlcktleUlkLCBib2R5IH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucHV0KGAvYXBpL3YyL3RidGMva2V5LyR7YmFja3VwS2V5SWR9YCwgKGJvZHkpID0+IHtcbiAgICAgICAgICBwdXRzLnB1c2goeyB1cmw6IGJhY2t1cEtleUlkLCBib2R5IH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMteHl6JyB9KTtcblxuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCA9PT0gdW5kZWZpbmVkLCAnbm8gUERGIGdlbmVyYXRvciDihpIgcmV0dXJucyB1bmRlZmluZWQnKTtcbiAgICAgIHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgY29uc3QgdXNlclB1dCA9IHB1dHMuZmluZCgocCkgPT4gcC51cmwgPT09IHVzZXJLZXlJZCkhO1xuICAgICAgSlNPTi5wYXJzZSh1c2VyUHV0LmJvZHkuZW5jcnlwdGVkUHJ2IGFzIHN0cmluZykudi5zaG91bGQuZXF1YWwoMik7XG4gICAgICBKU09OLnBhcnNlKHVzZXJQdXQuYm9keS5vcmlnaW5hbEVuY3J5cHRlZFBydiBhcyBzdHJpbmcpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIG5laXRoZXIgcGFzc3BocmFzZSBub3IgYm94RCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7fSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvcGFzc3BocmFzZS4qYm94RC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBmb3IgYW4gTVBDdjIgd2FsbGV0IHdoZW4gYm94QSBvciBib3hCIGFyZSBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXBjV2FsbGV0RGF0YSA9IHsgLi4ud2FsbGV0RGF0YSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyBhcyBjb25zdCB9O1xuICAgICAgY29uc3QgbXBjV2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIG1wY1dhbGxldERhdGEpO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICAvLyBQRUMgZmV0Y2ggaGFwcGVucyBiZWZvcmUgdGhlIE1QQ3YyIHZhbGlkYXRpb24gc2hvcnQtY2lyY3VpdHMg4oCUIGFsbG93IHRoZSBjYWxsIHRvIG5vb3BcbiAgICAgIG5vY2tQZWNGZXRjaCgncGVjJyk7XG5cbiAgICAgIGF3YWl0IG1wY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL01QQ3YyLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmUtZW5jcnlwdHMgYm94QSBhbmQgYm94QiBhcyByZWR1Y2VkRW5jcnlwdGVkUHJ2IG9uIHRoZSBrZXljaGFpbnMgZm9yIE1QQ3YyIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtcGNXYWxsZXREYXRhID0geyAuLi53YWxsZXREYXRhLCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInIGFzIGNvbnN0IH07XG4gICAgICBjb25zdCBtcGNXYWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgbXBjV2FsbGV0RGF0YSk7XG4gICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cEVuYyA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJveEEgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUmVkdWNlZFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcbiAgICAgIGNvbnN0IGJveEIgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICdiYWNrdXBSZWR1Y2VkUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJFbmMgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBFbmMgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt1c2VyS2V5SWR9YCkucmVwbHkoMjAwLCB7fSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHtiYWNrdXBLZXlJZH1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgY29uc3QgY2FwdHVyZWRQZGZQYXJhbXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IFtdO1xuICAgICAgY29uc3QgZ2VuZXJhdGVQZGYgPSBhc3luYyAocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICBjYXB0dXJlZFBkZlBhcmFtcy5wdXNoKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7IG91dHB1dDogKCkgPT4gbmV3IEFycmF5QnVmZmVyKDApIH07XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBtcGNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oe1xuICAgICAgICBwYXNzcGhyYXNlLFxuICAgICAgICBib3hBLFxuICAgICAgICBib3hCLFxuICAgICAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyxcbiAgICAgICAgZ2VuZXJhdGVQZGYsXG4gICAgICB9KTtcblxuICAgICAgY2FwdHVyZWRQZGZQYXJhbXMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluIH0gPSBjYXB0dXJlZFBkZlBhcmFtc1swXSBhcyB7XG4gICAgICAgIHVzZXJLZXljaGFpbjogeyByZWR1Y2VkRW5jcnlwdGVkUHJ2Pzogc3RyaW5nIH07XG4gICAgICAgIGJhY2t1cEtleWNoYWluOiB7IHJlZHVjZWRFbmNyeXB0ZWRQcnY/OiBzdHJpbmcgfTtcbiAgICAgIH07XG4gICAgICBhc3NlcnQub2sodXNlcktleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYsICd1c2VyIHJlZHVjZWRFbmNyeXB0ZWRQcnYgbXVzdCBiZSBzZXQnKTtcbiAgICAgIEpTT04ucGFyc2UodXNlcktleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYhKS52LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIGFzc2VydC5vayhiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LCAnYmFja3VwIHJlZHVjZWRFbmNyeXB0ZWRQcnYgbXVzdCBiZSBzZXQnKTtcbiAgICAgIEpTT04ucGFyc2UoYmFja3VwS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydiEpLnYuc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NraXBzIGtleWNoYWlucyB0aGF0IGFyZSBhbHJlYWR5IHYyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYyID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cFYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMiB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICBjb25zdCBwdXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgLy8gT25seSB0aGUgYmFja3VwIGtleSBzaG91bGQgYmUgUFVUIOKAlCB1c2VyIGlzIGFscmVhZHkgdjIuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucHV0KG5ldyBSZWdFeHAoYC9hcGkvdjIvdGJ0Yy9rZXkvKCR7dXNlcktleUlkfXwke2JhY2t1cEtleUlkfSlgKSlcbiAgICAgICAgLnJlcGx5KDIwMCwgZnVuY3Rpb24gKHVyaSkge1xuICAgICAgICAgIHB1dHMucHVzaCh1cmkpO1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuXG4gICAgICBwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHB1dHNbMF0uc2hvdWxkLmNvbnRhaW5FcWwoYmFja3VwS2V5SWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgYmFja3VwIGtleWNoYWluIHdpdGggbm8gZW5jcnlwdGVkUHJ2IChwdWJsaWMta2V5LW9ubHkpIHdpdGhvdXQgUFVUaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJyB9KTsgLy8gcHVibGljIGtleSBvbmx5XG4gICAgICBub2NrS2V5Y2hhaW4oYml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG4gICAgICBub2NrKGJnVXJsKS5wdXQoYC9hcGkvdjIvdGJ0Yy9rZXkvJHt1c2VyS2V5SWR9YCkucmVwbHkoMjAwLCB7fSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlIHdpdGhvdXQgdW5oYW5kbGVkIG5vY2sgZXJyb3IsIHRoZSBmbG93IGNvbXBsZXRlZCB3aXRob3V0IFBVVGluZyB0aGUgYmFja3VwLlxuICAgIH0pO1xuXG4gICAgaXQoJ3JlLWVuY3J5cHRzIGEgYmFja3VwIGtleSBmcm9tIGJveEIgd2l0aG91dCBQVVRpbmcgdG8gdGhlIHNlcnZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBib3hCID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAnYmFja3VwUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICBub2NrVW5sb2NrKCk7XG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnIH0pOyAvLyBubyBlbmNyeXB0ZWRQcnYgc2VydmVyLXNpZGVcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChgL2FwaS92Mi90YnRjL2tleS8ke3VzZXJLZXlJZH1gKS5yZXBseSgyMDAsIHt9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgcGFzc3BocmFzZSwgYm94QiwgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BlYycgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVyaXZlcyB0aGUgcGFzc3BocmFzZSBmcm9tIGJveEQgd2hlbiBwYXNzcGhyYXNlIGlzIG9taXR0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwZWMgPSAncGVjLWRlcml2ZSc7XG4gICAgICBjb25zdCBkZXJpdmVkUGFzcyA9ICdkZXJpdmVkRnJvbUJveEQnO1xuICAgICAgY29uc3QgYm94RCA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogZGVyaXZlZFBhc3MsIHBhc3N3b3JkOiBwZWMsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuICAgICAgY29uc3QgdXNlclYxID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBkZXJpdmVkUGFzcywgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBkZXJpdmVkUGFzcywgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG5cbiAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgIG5vY2tQZWNGZXRjaChwZWMpO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5L2ApKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAvLyBObyBwYXNzcGhyYXNlIOKAlCBtdXN0IGJlIGRlcml2ZWQgZnJvbSBib3hELlxuICAgICAgYXdhaXQgd2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgYm94RCB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWtlcyBubyBQVVQgY2FsbHMgaW4gZHJ5LXJ1biBtb2RlIGFuZCByZXR1cm5zIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgLy8gTm8gdW5sb2NrLCBubyBQRUMsIG5vIFBVVHMgZXhwZWN0ZWQuXG4gICAgICBub2NrS2V5Y2hhaW4odXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiYWNrdXBLZXlJZCwgeyBzb3VyY2U6ICdiYWNrdXAnLCBlbmNyeXB0ZWRQcnY6IGJhY2t1cFYxIH0pO1xuICAgICAgbm9ja0tleWNoYWluKGJpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBkcnlSdW46IHRydWUgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHVubG9jayByZWplY3RzIHdpdGggYW4gZXJyb3IgdW5yZWxhdGVkIHRvIHNlc3Npb24gZHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBub2NrKGJnVXJsKS5wb3N0KCcvYXBpL3YxL3VzZXIvdW5sb2NrJykucmVwbHlXaXRoRXJyb3IoJ2ludmFsaWQgT1RQJyk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvaW52YWxpZCBPVFAvKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9jZWVkcyB3aGVuIHVubG9jayByZXBvcnRzIFwiYWxyZWFkeSB1bmxvY2tlZCBsb25nZXJcIicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9jayhiZ1VybCkucG9zdCgnL2FwaS92MS91c2VyL3VubG9jaycpLnJlcGx5KDQwMSwgeyBlcnJvcjogJ1Nlc3Npb24gYWxyZWFkeSB1bmxvY2tlZCBsb25nZXInIH0pO1xuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5L2ApKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd1c2VzIHRoZSBzdXBwbGllZCBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFuZCBza2lwcyB0aGUgcGFzc2NvZGVyZWNvdmVyeSBmZXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHVzZXJWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSk7XG4gICAgICBjb25zdCBiYWNrdXBWMSA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ2JhY2t1cFBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBkbyBOT1Qgbm9jayBwYXNzY29kZXJlY292ZXJ5IOKAlCB0aGUgdGVzdCBmYWlscyBpZiB0aGUgY29kZSB0cmllcyB0byBjYWxsIGl0LlxuICAgICAgbm9ja0tleWNoYWluKHVzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyVjEgfSk7XG4gICAgICBub2NrS2V5Y2hhaW4oYmFja3VwS2V5SWQsIHsgc291cmNlOiAnYmFja3VwJywgZW5jcnlwdGVkUHJ2OiBiYWNrdXBWMSB9KTtcbiAgICAgIG5vY2tLZXljaGFpbihiaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcbiAgICAgIG5vY2soYmdVcmwpLnB1dChuZXcgUmVnRXhwKGAvYXBpL3YyL3RidGMva2V5L2ApKS50d2ljZSgpLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICBhd2FpdCB3YWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGVjLXN1cHBsaWVkJyB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPRkMgd2FsbGV0cyAoMiBrZXlzLCBubyBiYWNrdXApJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb2ZjQ29pbiA9IGJpdGdvLmNvaW4oJ29mYycpO1xuICAgICAgY29uc3Qgb2ZjVXNlcktleUlkID0gJ29mYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJztcbiAgICAgIGNvbnN0IG9mY0JpdGdvS2V5SWQgPSAnb2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDInO1xuICAgICAgY29uc3Qgb2ZjV2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICdvZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwd2FsbGV0MScsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBrZXlzOiBbb2ZjVXNlcktleUlkLCBvZmNCaXRnb0tleUlkXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICdob3QnIGFzIGNvbnN0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9mY1dhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIG9mY0NvaW4sIG9mY1dhbGxldERhdGEgYXMgYW55KTtcblxuICAgICAgZnVuY3Rpb24gbm9ja09mY0tleWNoYWluKGlkOiBzdHJpbmcsIGtleWNoYWluOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgICAuZ2V0KGAvYXBpL3YyL29mYy9rZXkvJHtpZH1gKVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgaWQsIHB1YjogJ3B1YicsIHR5cGU6ICdpbmRlcGVuZGVudCcsIC4uLmtleWNoYWluIH0pO1xuICAgICAgfVxuXG4gICAgICBpdCgncmUtZW5jcnlwdHMgdGhlIHVzZXIga2V5IGFuZCBza2lwcyBiaXRnbyBrZXkgd2l0aCBubyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJFbmMgPSBhd2FpdCBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6ICd1c2VyUHJ2JywgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pO1xuXG4gICAgICAgIG5vY2tVbmxvY2soKTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY1VzZXJLZXlJZCwgeyBzb3VyY2U6ICd1c2VyJywgZW5jcnlwdGVkUHJ2OiB1c2VyRW5jIH0pO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjQml0Z29LZXlJZCwgeyBzb3VyY2U6ICdiaXRnbycgfSk7XG5cbiAgICAgICAgY29uc3QgcHV0czogQXJyYXk8eyBpZDogc3RyaW5nOyBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiA9IFtdO1xuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wdXQoYC9hcGkvdjIvb2ZjL2tleS8ke29mY1VzZXJLZXlJZH1gLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgcHV0cy5wdXNoKHsgaWQ6IG9mY1VzZXJLZXlJZCwgYm9keSB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcGx5KDIwMCwge30pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9mY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgICAgICBwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgICAgcHV0c1swXS5pZC5zaG91bGQuZXF1YWwob2ZjVXNlcktleUlkKTtcbiAgICAgICAgSlNPTi5wYXJzZShwdXRzWzBdLmJvZHkuZW5jcnlwdGVkUHJ2IGFzIHN0cmluZykudi5zaG91bGQuZXF1YWwoMik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3NraXBzIHVzZXIga2V5IGFscmVhZHkgYXQgdjInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHVzZXJWMiA9IGF3YWl0IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogJ3VzZXJQcnYnLCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG5cbiAgICAgICAgbm9ja1VubG9jaygpO1xuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjVXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJWMiB9KTtcbiAgICAgICAgbm9ja09mY0tleWNoYWluKG9mY0JpdGdvS2V5SWQsIHsgc291cmNlOiAnYml0Z28nIH0pO1xuXG4gICAgICAgIGF3YWl0IG9mY1dhbGxldC51cGdyYWRlRW5jcnlwdGlvbih7IHBhc3NwaHJhc2UsIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwZWMnIH0pO1xuICAgICAgICAvLyBObyBQVVRzIGV4cGVjdGVkIOKAlCBub2NrIHdpbGwgZXJyb3IgaWYgYW55IHVuZXhwZWN0ZWQgY2FsbCBpcyBtYWRlLlxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdtYWtlcyBubyBQVVQgY2FsbHMgaW4gZHJ5LXJ1biBtb2RlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1c2VyRW5jID0gYXdhaXQgYml0Z28uZW5jcnlwdCh7IGlucHV0OiAndXNlclBydicsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KTtcblxuICAgICAgICBub2NrT2ZjS2V5Y2hhaW4ob2ZjVXNlcktleUlkLCB7IHNvdXJjZTogJ3VzZXInLCBlbmNyeXB0ZWRQcnY6IHVzZXJFbmMgfSk7XG4gICAgICAgIG5vY2tPZmNLZXljaGFpbihvZmNCaXRnb0tleUlkLCB7IHNvdXJjZTogJ2JpdGdvJyB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvZmNXYWxsZXQudXBncmFkZUVuY3J5cHRpb24oeyBwYXNzcGhyYXNlLCBkcnlSdW46IHRydWUgfSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|