@bitgo-beta/sdk-coin-ada 2.2.3-alpha.473 → 2.2.3-alpha.475
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/src/ada.d.ts.map +1 -1
- package/dist/src/ada.js +22 -2
- package/dist/test/resources/index.d.ts +23 -0
- package/dist/test/resources/index.d.ts.map +1 -1
- package/dist/test/resources/index.js +25 -1
- package/dist/test/unit/ada.js +46 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
package/dist/test/unit/ada.js
CHANGED
|
@@ -46,6 +46,7 @@ const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
|
46
46
|
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
47
47
|
const resources_1 = require("../resources");
|
|
48
48
|
const _ = __importStar(require("lodash"));
|
|
49
|
+
const CardanoWasm = __importStar(require("@emurgo/cardano-serialization-lib-nodejs"));
|
|
49
50
|
const src_1 = require("../../src");
|
|
50
51
|
const lib_1 = require("../../src/lib");
|
|
51
52
|
const enum_1 = require("../../../sdk-core/src/account-lib/baseCoin/enum");
|
|
@@ -549,8 +550,9 @@ describe('ADA', function () {
|
|
|
549
550
|
describe('Recover Transactions:', () => {
|
|
550
551
|
const destAddr = resources_1.address.address2;
|
|
551
552
|
const sandBox = sinon.createSandbox();
|
|
553
|
+
let callBack;
|
|
552
554
|
beforeEach(function () {
|
|
553
|
-
|
|
555
|
+
callBack = sandBox.stub(src_1.Ada.prototype, 'getDataFromNode');
|
|
554
556
|
callBack
|
|
555
557
|
.withArgs('address_info', {
|
|
556
558
|
_addresses: [resources_1.wrwUser.walletAddress0],
|
|
@@ -618,6 +620,48 @@ describe('ADA', function () {
|
|
|
618
620
|
should.deepEqual(txJson.outputs[0].address, destAddr);
|
|
619
621
|
should.deepEqual(Number(txJson.outputs[0].amount) + fee, resources_1.testnetUTXO.UTXO_1.value);
|
|
620
622
|
});
|
|
623
|
+
it('should recover ADA plus token UTXOs - token and ADA both appear in outputs (signed)', async function () {
|
|
624
|
+
callBack
|
|
625
|
+
.withArgs('address_info', { _addresses: [resources_1.wrwUser.walletAddress0] })
|
|
626
|
+
.resolves(resources_1.endpointResponses.addressInfoResponse.ADAAndTokenUTXOs);
|
|
627
|
+
const res = await basecoin.recover({
|
|
628
|
+
userKey: resources_1.wrwUser.userKey,
|
|
629
|
+
backupKey: resources_1.wrwUser.backupKey,
|
|
630
|
+
bitgoKey: resources_1.wrwUser.bitgoKey,
|
|
631
|
+
walletPassphrase: resources_1.wrwUser.walletPassphrase,
|
|
632
|
+
recoveryDestination: destAddr,
|
|
633
|
+
});
|
|
634
|
+
res.should.not.be.empty();
|
|
635
|
+
res.should.hasOwnProperty('serializedTx');
|
|
636
|
+
const tx = new lib_1.Transaction(basecoin);
|
|
637
|
+
tx.fromRawTransaction(res.serializedTx);
|
|
638
|
+
const txJson = tx.toJson();
|
|
639
|
+
txJson.inputs.length.should.equal(2);
|
|
640
|
+
should.deepEqual(txJson.inputs[0].transaction_id, resources_1.testnetUTXO.UTXO_1.tx_hash);
|
|
641
|
+
should.deepEqual(txJson.inputs[1].transaction_id, resources_1.testnetUTXO.UTXO_TOKEN.tx_hash);
|
|
642
|
+
// expect 2 outputs: one token output + one ADA change output, both at destAddr
|
|
643
|
+
txJson.outputs.length.should.equal(2);
|
|
644
|
+
const tokenPolicyId = '2533cca6eb42076e144e9f2772c390dece9fce173bc38c72294b3924';
|
|
645
|
+
const tokenEncodedAssetName = '5741544552';
|
|
646
|
+
const tokenQuantity = '111';
|
|
647
|
+
const minADAForToken = 1500000;
|
|
648
|
+
const tokenOutput = txJson.outputs.find((o) => o.multiAssets !== undefined);
|
|
649
|
+
should.exist(tokenOutput);
|
|
650
|
+
should.deepEqual(tokenOutput.address, destAddr);
|
|
651
|
+
should.deepEqual(Number(tokenOutput.amount), minADAForToken);
|
|
652
|
+
const expectedPolicyId = CardanoWasm.ScriptHash.from_bytes(Buffer.from(tokenPolicyId, 'hex'));
|
|
653
|
+
const expectedAssetName = CardanoWasm.AssetName.new(Buffer.from(tokenEncodedAssetName, 'hex'));
|
|
654
|
+
tokenOutput.multiAssets
|
|
655
|
+
.get_asset(expectedPolicyId, expectedAssetName)
|
|
656
|
+
.to_str()
|
|
657
|
+
.should.equal(tokenQuantity);
|
|
658
|
+
const adaOutput = txJson.outputs.find((o) => o.multiAssets === undefined);
|
|
659
|
+
should.exist(adaOutput);
|
|
660
|
+
should.deepEqual(adaOutput.address, destAddr);
|
|
661
|
+
const fee = Number(tx.explainTransaction().fee.fee);
|
|
662
|
+
const totalBalance = resources_1.testnetUTXO.UTXO_1.value + resources_1.testnetUTXO.UTXO_TOKEN.value;
|
|
663
|
+
should.deepEqual(Number(adaOutput.amount), totalBalance - minADAForToken - fee);
|
|
664
|
+
});
|
|
621
665
|
});
|
|
622
666
|
describe('Recover Transactions Multiple UTXO:', () => {
|
|
623
667
|
const destAddr = resources_1.address.address2;
|
|
@@ -1199,4 +1243,4 @@ describe('ADA', function () {
|
|
|
1199
1243
|
});
|
|
1200
1244
|
});
|
|
1201
1245
|
});
|
|
1202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2FkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsaUNBQWtDO0FBQ2xDLG1DQUFxQztBQUNyQyw2Q0FBK0I7QUFDL0IsbURBQStEO0FBQy9ELGlEQUF3RDtBQUN4RCw0Q0FZc0I7QUFDdEIsMENBQTRCO0FBQzVCLG1DQUErQztBQUMvQyx1Q0FBNEM7QUFDNUMsMEVBQWtGO0FBQ2xGLG9EQUE0QjtBQUM1QixtREFBc0Q7QUFDdEQsZ0RBQXdCO0FBRXhCLFFBQVEsQ0FBQyxLQUFLLEVBQUU7SUFDZCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDdkIsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUNqQyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLFdBQVcsQ0FBQztJQUVoQixNQUFNLFVBQVUsR0FBRztRQUNqQixLQUFLLEVBQUUsaUJBQUssQ0FBQyxVQUFVO1FBQ3ZCLE1BQU0sRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHO1FBQ2YsVUFBVSxFQUFFO1lBQ1Y7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFLLENBQUMsY0FBYyxDQUFDLE9BQU87Z0JBQ3JDLE1BQU0sRUFBRSxTQUFTO2FBQ2xCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFLLENBQUMsY0FBYyxDQUFDLE9BQU87Z0JBQ3JDLE1BQU0sRUFBRSxXQUFXO2FBQ3BCO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSxzQkFBc0IsR0FBRztRQUM3QixZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLENB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Q0FDakM7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLEdBQUc7b0JBQ2IsV0FBVyxFQUFFLGFBQWE7b0JBQzFCLFlBQVksRUFBRTt3QkFDWjs0QkFDRSxZQUFZLEVBQUUsYUFBYTs0QkFDM0IsUUFBUSxFQUFFLFdBQVc7eUJBQ3RCO3FCQUNGO29CQUNELElBQUksRUFBRSxNQUFNO2lCQUNiO2dCQUNELGFBQWEsRUFBRSxrQ0FBa0M7Z0JBQ2pELElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQztZQUVGLHlFQUF5RTtZQUN6RSxNQUFNLFlBQVksR0FBRztnQkFDbkIsWUFBWSxFQUFFLEdBQUcsRUFBRTtvQkFDakIsT0FBTzt3QkFDTCxXQUFXLEVBQ1QsOEdBQThHO3FCQUNqSCxDQUFDO2dCQUNKLENBQUM7YUFDRixDQUFDO1lBRUYsTUFBTSxRQUFRO2lCQUNYLGlCQUFpQixDQUFDO2dCQUNqQixRQUFRLEVBQUUsRUFBRTtnQkFDWixVQUFVLEVBQUUsZUFBZTtnQkFDM0IsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLFlBQVksRUFBRTtvQkFDWiwwQkFBMEIsRUFBRSxJQUFJO2lCQUNqQzthQUNGLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5cbmltcG9ydCBzaG91bGQgPSByZXF1aXJlKCdzaG91bGQnKTtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEksIGVuY3J5cHQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7XG4gIGFkZHJlc3MsXG4gIGNvbnNvbGlkYXRpb25XcndVc2VyLFxuICBlbmRwb2ludFJlc3BvbnNlcyxcbiAgZW50ZXJwcmlzZUFjY291bnRzIGFzIGFjY291bnRzLFxuICBvdmNSZXNwb25zZSxcbiAgb3ZjUmVzcG9uc2UyLFxuICBwcml2YXRlS2V5cyxcbiAgcHVibGljS2V5cyxcbiAgcmF3VHgsXG4gIHRlc3RuZXRVVFhPLFxuICB3cndVc2VyLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQWRhLCBLZXlQYWlyLCBUYWRhIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi9zZGstY29yZS9zcmMvYWNjb3VudC1saWIvYmFzZUNvaW4vZW51bSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBjb21tb24sIFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuXG5kZXNjcmliZSgnQURBJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZSA9ICdhZGEnO1xuICBjb25zdCB0Y29pbk5hbWUgPSAndCcgKyBjb2luTmFtZTtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IG5ld1R4UHJlYnVpbGQ7XG4gIGxldCBuZXdUeFBhcmFtcztcblxuICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgIHR4SGV4OiByYXdUeC51bnNpZ25lZFR4LFxuICAgIHR4SW5mbzoge30sXG4gIH07XG5cbiAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgcmVjaXBpZW50czogW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiByYXdUeC5vdXRwdXRBZGRyZXNzMS5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICc1MDAwMDAwJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHJhd1R4Lm91dHB1dEFkZHJlc3MyLmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogJzI0ODMyOTE1MCcsXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgY29uc3QgdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICBpZDogJ2Y0OGY2ZWEwZjc1ZjNmOTQyODU1Y2MwZWRmMjllODFlMWUwNzI0ZTc1ZjVkYjhhMTU3NWIxNjZmYjIwMjE3NmMnLFxuICAgIG91dHB1dHM6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAnYWRkcl90ZXN0MXFxbm52cHRyYzNyZWM2NHEybjlqaDU3Mm5jdTV3dmR0dDh1dmc0ZzNhajk2czVkd3U5bmo3MG1sYWh6Z2xtOTkzOXVldnVwc21qOGRjZHF2MjVkNW41cjh2dzhzbjdwcmV5JyxcbiAgICAgICAgYW1vdW50OiAnNzgyMzEyMScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhZGRyZXNzOiAnYWRkcl90ZXN0MXZyOHJha202NnJjZnY0ZmN4cXlrZzVsZjB5djdsc3lrOW12YXB4MzY5anB2dGNnZmN1azdmJyxcbiAgICAgICAgYW1vdW50OiAnMTMwNDE3MjknLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG91dHB1dEFtb3VudDogJzIwODY0ODUwJyxcbiAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICBmZWU6IHsgZmVlOiAnMTY3MTczJyB9LFxuICAgIHR5cGU6ICdUcmFuc2ZlcicsXG4gICAgY2VydGlmaWNhdGVzOiBbXSxcbiAgICB3aXRoZHJhd2FsczogW10sXG4gICAgcGxlZGdlRGV0YWlsczogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKGNvaW5OYW1lLCBBZGEuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcih0Y29pbk5hbWUsIFRhZGEuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbih0Y29pbk5hbWUpO1xuICAgIG5ld1R4UHJlYnVpbGQgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQcmVidWlsZCk7XG4gICAgfTtcbiAgICBuZXdUeFBhcmFtcyA9ICgpID0+IHtcbiAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFBhcmFtcyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnN0YW50aWF0ZSB0aGUgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgbG9jYWxCYXNlY29pbiA9IGJpdGdvLmNvaW4odGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKFRhZGEpO1xuICAgIGxvY2FsQmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwodGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEFkYScpO1xuXG4gICAgbG9jYWxCYXNlY29pbiA9IGJpdGdvLmNvaW4oY29pbk5hbWUpO1xuICAgIGxvY2FsQmFzZWNvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoQWRhKTtcbiAgICBsb2NhbEJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdDYXJkYW5vIEFEQScpO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBNZXNzYWdlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYmUgcGVyZm9ybWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20ocmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLmdldEtleXMoKSwgbWVzc2FnZVRvU2lnbik7XG4gICAgICBrZXlQYWlyLnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlVG9TaWduLCBVaW50OEFycmF5LmZyb20oc2lnbmF0dXJlKSkuc2hvdWxkLmVxdWFscyhmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBtaXNzaW5nIHByaXZhdGUga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHViOiAnNzc4ODMyN2M2OTVkY2E0YjNlNjQ5YTBkYjQ1YmMzZTcwM2EyYzY3NDI4ZmNlMzYwZTYxODAwY2M0MjQ4ZjRmNycsXG4gICAgICB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20ocmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlQYWlyLCBtZXNzYWdlVG9TaWduKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiByYXdUeC51bnNpZ25lZFR4MixcbiAgICAgICAgfSxcbiAgICAgICAgcHViczogW3B1YmxpY0tleXMucHViS2V5MV0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleXMucHJ2S2V5NCxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVkLnR4SGV4LnNob3VsZC5lcXVhbChyYXdUeC5zaWduZWRUeDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gdHJhbnNhY3Rpb24gd2l0aCBhbiBpbnZhbGlkIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6IHJhd1R4LnVuc2lnbmVkVHgyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHViczogW3B1YmxpY0tleXMucHViS2V5MV0sXG4gICAgICAgICAgcHJ2OiBwcml2YXRlS2V5cy5wcnZLZXkyLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGUubWVzc2FnZSwgJ1ByaXZhdGUga2V5IGNhbm5vdCBzaWduIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIHRyYW5zYWN0aW9uIHdpdGggbWlzc2luZyBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4SGV4OiByYXdUeC51bnNpZ25lZFR4LFxuICAgICAgICAgICAga2V5OiBhY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcnY6IGFjY291bnRzLmFjY291bnQxLnNlY3JldEtleSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3VsZC5ub3RFcXVhbChlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0dlbmVyYXRlIHdhbGxldCBrZXkgcGFpcjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrcCA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleSBwYWlyIGZyb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnOWQ2MWIxOWRlZmZkNWE2MGJhODQ0YWY0OTJlYzJjYzQ0NDQ5YzU2OTdiMzI2OTE5NzAzYmFjMDMxY2FlN2Y2MCcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgdHJhbnNhY3Rpb246ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHVuc2lnbmVkIHRyYW5zYWN0aW9uIGluIGhleCBlbmNvZGluZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgc2lnbmVkIHRyYW5zYWN0aW9uIGluIGhleCBlbmNvZGluZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiByYXdUeC5zaWduZWRUeCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuXG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSB0cmFuc2FjdGlvbnMgd2hlbiBoYXZlIGRpZmZlcmVudCByZWNpcGllbnRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnOWY3YjA2NzVkYjU5ZDE5YjRiZDljOGM3MmVhYWJiYTc1YTk4NjNkMDJiMzAxMTViOGIzYzNjYTVjMjBmMDI1NCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICc5ZjdiMDY3NWRiNTlkMTliNGJkOWM4YzcyZWFhYmJhNzVhOTg2M2QwMmIzMDExNWI4YjNjM2NhNWMyMGYwMjU0JyxcbiAgICAgICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnY2Fubm90IGZpbmQgcmVjaXBpZW50IGluIGV4cGVjdGVkIG91dHB1dCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgd2hlbiBpbnB1dCBgcmVjaXBpZW50c2AgaXMgYWJzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB2YWxpZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIHZhbGlkVHJhbnNhY3Rpb24uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmeSB3aGVuIHR4SGV4IGlzIGludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHt9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gcmVjaXBpZW50cyBoYXMgZXh0cmEgZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5kYXRhID0gJ2RhdGEnO1xuXG4gICAgICBjb25zdCB2YWxpZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIHZhbGlkVHJhbnNhY3Rpb24uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uc29saWRhdGlvblR4ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogJzFiNWM3OWM1LWFiN2MtNGY0Ny05MTJiLWRlNmE5NWZiMDc3OScsXG4gICAgICAgIHdhbGxldElkOiAnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJyxcbiAgICAgICAgdHhIZXg6XG4gICAgICAgICAgJzg0YTQwMDgxODI1ODIwZGI0NmM3Yzc2ZWE1NGZlYzJjYTBhMmY5NGI3N2EyMzg5MzFhOGRjZTIzODdjOTlhMTJiMDhkZDhhYWMyMWM0ZjAwMDE4MTgyNTgzOTAwNDYwMWZjMDE2YWMzODU4MDkxNmQzNTIwYmM3NmI2NTkyOTgxNTYwMDg3MzhkMzQ3YWE5MzE0MmY0NjAxZmMwMTZhYzM4NTgwOTE2ZDM1MjBiYzc2YjY1OTI5ODE1NjAwODczOGQzNDdhYTkzMTQyZjFhM2I5ODQzNTcwMjFhMDAwMjg2YTkwMzFhMDYwZTM3ZWVhMGY1ZjYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAxNjU1NDUsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTY1NTQ1JyxcbiAgICAgICAgfSxcbiAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgbWluZXJGZWU6ICcxNjU1NDUnLFxuICAgICAgICAgIHNwZW5kQW1vdW50OiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICBzcGVuZEFtb3VudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29pbk5hbWU6ICd0YWRhJyxcbiAgICAgICAgICAgICAgYW1vdW50U3RyaW5nOiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXlHb0ZlZTogJzAnLFxuICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAnYWRkcl90ZXN0MXFwcnFybHFwZHRwY3RxeTNkNTZqcDBya2tldmpucTJrcXpybjM1Njg0MmYzZ3Q2eHE4N3F6Nmtyc2txZnptZjR5ejc4ZGRqZTl4cTR2cXk4OHJmNTAyNW56c2hzamRtZzJzJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDk5OTgzNDQ1NSxcbiAgICAgICAgICAgICAgd2FsbGV0OiAnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJyxcbiAgICAgICAgICAgICAgd2FsbGV0czogWyc2NGZhMzFhOTRkYjY1YTAwMDdjOTY5MWInXSxcbiAgICAgICAgICAgICAgZW50ZXJwcmlzZTogJzYyY2M1OWI3Mjc0NDNhMDAwNzA4OTAzMycsXG4gICAgICAgICAgICAgIGVudGVycHJpc2VzOiBbJzYyY2M1OWI3Mjc0NDNhMDAwNzA4OTAzMyddLFxuICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgICAgIGNvaW5OYW1lOiAndGFkYScsXG4gICAgICAgICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICAgICAgICB3YWxsZXRUeXBlczogWydob3QnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcWx6eGZsN3RsZ3A5OTl4NGE3MzM0cGNoeWNwa2s3MnB5a3JzcjNtcnlsM3lqNnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc3ZwZ2w4dycsXG4gICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHlwZTogJzAnLFxuICAgICAgICB9LFxuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNjhiOWZjMTg1NTgwMDZhYWI1Mzc4NTYxNWZlYTdjMjgnLFxuICAgICAgICBjb2luOiAndGFkYScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrZWRXYWxsZXQgPSB7XG4gICAgICAgIGNvaW5TcGVjaWZpYzogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb290QWRkcmVzczpcbiAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcHJxcmxxcGR0cGN0cXkzZDU2anAwcmtrZXZqbnEya3F6cm4zNTY4NDJmM2d0NnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc2pkbWcycycsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IGNvbnNvbGlkYXRpb25UeCxcbiAgICAgICAgICB3YWxsZXQ6IG1vY2tlZFdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb246IHtcbiAgICAgICAgICAgIGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXNzZXJ0LmZhaWwoJ1RyYW5zYWN0aW9uIHNob3VsZCBwYXNzIHZlcmlmaWNhdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBzcG9uc29yZWQgY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnNvbGlkYXRpb25UeCA9IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICcxYjVjNzljNS1hYjdjLTRmNDctOTEyYi1kZTZhOTVmYjA3NzknLFxuICAgICAgICB3YWxsZXRJZDogJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYicsXG4gICAgICAgIHR4SGV4OlxuICAgICAgICAgICc4NGE0MDA4MjgyNTgyMDIyN2Y2NWQyMGFjNmU0OTYwMmQ3OWM2MjNjNTE5MTFlYWQ4MjQyMzVlMDFlYjJhMWU3ZTMzYTcyZjA3NDdjYmIwMDgyNTgyMDIyN2Y2NWQyMGFjNmU0OTYwMmQ3OWM2MjNjNTE5MTFlYWQ4MjQyMzVlMDFlYjJhMWU3ZTMzYTcyZjA3NDdjYmIwMjAxODI4MjU4MzkwMDIyMDk4MjcwYTVjMTljOWZiNzA2ZGNlMGU3ZTQ1NjZiMjM0ZWM1ZjAwMTA2MjNjZDYzZjE5OGFkMjIwOTgyNzBhNWMxOWM5ZmI3MDZkY2UwZTdlNDU2NmIyMzRlYzVmMDAxMDYyM2NkNjNmMTk4YWQxYTAwOTg5NjgwODI1ODFkNjBjZjkwZjlmYjAyYzg4YmFkM2M1Mjk0ZDkwNTg3NDU4YzRmMTYwYTJkYjI2YmE4YWYzZGEyNTViMTFhMDVkNDJmYjgwMjFhMDAwMmE0OTEwMzFhMDZkOGMwNDhhMGY1ZjYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAxNjU1NDUsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTY1NTQ1JyxcbiAgICAgICAgfSxcbiAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgbWluZXJGZWU6ICcxNjU1NDUnLFxuICAgICAgICAgIHNwZW5kQW1vdW50OiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICBzcGVuZEFtb3VudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29pbk5hbWU6ICd0YWRhJyxcbiAgICAgICAgICAgICAgYW1vdW50U3RyaW5nOiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwYXlHb0ZlZTogJzAnLFxuICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAnYWRkcl90ZXN0MXFwcnFybHFwZHRwY3RxeTNkNTZqcDBya2tldmpucTJrcXpybjM1Njg0MmYzZ3Q2eHE4N3F6Nmtyc2txZnptZjR5ejc4ZGRqZTl4cTR2cXk4OHJmNTAyNW56c2hzamRtZzJzJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDk5OTgzNDQ1NSxcbiAgICAgICAgICAgICAgd2FsbGV0OiAnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJyxcbiAgICAgICAgICAgICAgd2FsbGV0czogWyc2NGZhMzFhOTRkYjY1YTAwMDdjOTY5MWInXSxcbiAgICAgICAgICAgICAgZW50ZXJwcmlzZTogJzYyY2M1OWI3Mjc0NDNhMDAwNzA4OTAzMycsXG4gICAgICAgICAgICAgIGVudGVycHJpc2VzOiBbJzYyY2M1OWI3Mjc0NDNhMDAwNzA4OTAzMyddLFxuICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgICAgIGNvaW5OYW1lOiAndGFkYScsXG4gICAgICAgICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICAgICAgICB3YWxsZXRUeXBlczogWydob3QnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcWx6eGZsN3RsZ3A5OTl4NGE3MzM0cGNoeWNwa2s3MnB5a3JzcjNtcnlsM3lqNnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc3ZwZ2w4dycsXG4gICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHlwZTogJzAnLFxuICAgICAgICAgIGZlZUFkZHJlc3M6ICdhZGRyX3Rlc3QxdnI4ZXA3MG1xdHlnaHRmdTIyMmRqcHY4Z2t4eTc5czI5a2V4aDI5MDhrMzl0dmdlMDJkNWonLFxuICAgICAgICB9LFxuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNjhiOWZjMTg1NTgwMDZhYWI1Mzc4NTYxNWZlYTdjMjgnLFxuICAgICAgICBjb2luOiAndGFkYScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrZWRXYWxsZXQgPSB7XG4gICAgICAgIGNvaW5TcGVjaWZpYzogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb290QWRkcmVzczpcbiAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcTNxbnFuczVocWVlOGFocW13d3BlbHkyZTRqeG5rOTdxcXN2ZzdkdjBjZTN0ZnpweHA4cGZ3cG5qMG13cGt1dXJuN2c0bnR5ZDh2dHVxcHFjM3U2Y2wzbnprc3ZnZ3U4MicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IGNvbnNvbGlkYXRpb25UeCxcbiAgICAgICAgICB3YWxsZXQ6IG1vY2tlZFdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb246IHtcbiAgICAgICAgICAgIGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXNzZXJ0LmZhaWwoJ1RyYW5zYWN0aW9uIHNob3VsZCBwYXNzIHZlcmlmaWNhdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gYSBzcG9vZmVkIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTZXQgdXAgd2FsbGV0IGRhdGFcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLFxuICAgICAgICBjb2luOiAndGFkYScsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzYwMDAwMDAwMCcsXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NzAwMDAwMDAwJyxcbiAgICAgICAgXSxcbiAgICAgICAgY29pblNwZWNpZmljOiB7XG4gICAgICAgICAgcm9vdEFkZHJlc3M6XG4gICAgICAgICAgICAnYWRkcl90ZXN0MXFwcnFybHFwZHRwY3RxeTNkNTZqcDBya2tldmpucTJrcXpybjM1Njg0MmYzZ3Q2eHE4N3F6Nmtyc2txZnptZjR5ejc4ZGRqZTl4cTR2cXk4OHJmNTAyNW56c2hzamRtZzJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBmYWtlUHJ2ID0gZW5jcnlwdCgncGFzc3dvcmQnLCAncHJ2Jyk7XG5cbiAgICAgIGNvbnN0IHdhbGxldE9iaiA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgICAgIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1snbW9jayddLnVyaTtcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLmdldCgnL2FwaS92Mi90YWRhL2tleS81YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUwMDAwMDAwMCcpXG4gICAgICAgIC5yZXBseSgyMDAsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGZha2VQcnYsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgIC8vIE1vY2sgdGhlIEFQSSByZXNwb25zZSBmb3IgYnVpbGRBY2NvdW50Q29uc29saWRhdGlvbnNcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KCcvYXBpL3YyL3RhZGEvd2FsbGV0LzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwL2NvbnNvbGlkYXRlQWNjb3VudC9idWlsZCcpXG4gICAgICAgIC5yZXBseSgyMDAsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eFJlcXVlc3RJZDogJzFiNWM3OWM1LWFiN2MtNGY0Ny05MTJiLWRlNmE5NWZiMDc3OScsXG4gICAgICAgICAgICB3YWxsZXRJZDogJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYicsXG4gICAgICAgICAgICB0eEhleDpcbiAgICAgICAgICAgICAgJzg0YTQwMDgxODI1ODIwZGI0NmM3Yzc2ZWE1NGZlYzJjYTBhMmY5NGI3N2EyMzg5MzFhOGRjZTIzODdjOTlhMTJiMDhkZDhhYWMyMWM0ZjAxMDE4MjgyNTgxZDYwMzNjMzc4Y2VlNDFiMmUxNWFjODQ4ZjdmNmYxZDJmNzgxNTVhYjEyZDkzYjcxM2RlODk4ZDg1NWYxYTAwOTg5NjgwODI1ODM5MDA0NjAxZmMwMTZhYzM4NTgwOTE2ZDM1MjBiYzc2YjY1OTI5ODE1NjAwODczOGQzNDdhYTkzMTQyZjQ2MDFmYzAxNmFjMzg1ODA5MTZkMzUyMGJjNzZiNjU5Mjk4MTU2MDA4NzM4ZDM0N2FhOTMxNDJmMWIwMDAwMDAwMjE3YWNlYmU5MDIxYTAwMDI4ZGI1MDMxYTA2MGUzYjQxYTBmNWY2JyxcbiAgICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgICAgZmVlOiAxNjU1NDUsXG4gICAgICAgICAgICAgIGZlZVN0cmluZzogJzE2NTU0NScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHhJbmZvOiB7XG4gICAgICAgICAgICAgIG1pbmVyRmVlOiAnMTY1NTQ1JyxcbiAgICAgICAgICAgICAgc3BlbmRBbW91bnQ6ICc5OTk4MzQ0NTUnLFxuICAgICAgICAgICAgICBzcGVuZEFtb3VudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb2luTmFtZTogJ3RhZGEnLFxuICAgICAgICAgICAgICAgICAgYW1vdW50U3RyaW5nOiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBwYXlHb0ZlZTogJzAnLFxuICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcHJxcmxxcGR0cGN0cXkzZDU2anAwcmtrZXZqbnEya3F6cm4zNTY4NDJmM2d0NnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc2pkbWcycycsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogOTk5ODM0NDU1LFxuICAgICAgICAgICAgICAgICAgd2FsbGV0OiAnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJyxcbiAgICAgICAgICAgICAgICAgIHdhbGxldHM6IFsnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJ10sXG4gICAgICAgICAgICAgICAgICBlbnRlcnByaXNlOiAnNjJjYzU5YjcyNzQ0M2EwMDA3MDg5MDMzJyxcbiAgICAgICAgICAgICAgICAgIGVudGVycHJpc2VzOiBbJzYyY2M1OWI3Mjc0NDNhMDAwNzA4OTAzMyddLFxuICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTk4MzQ0NTUnLFxuICAgICAgICAgICAgICAgICAgY29pbk5hbWU6ICd0YWRhJyxcbiAgICAgICAgICAgICAgICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgICAgICAgICAgICAgICAgd2FsbGV0VHlwZXM6IFsnaG90J10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICAgICAgICAgICAnYWRkcl90ZXN0MXFxbHp4Zmw3dGxncDk5OXg0YTczMzRwY2h5Y3BrazcycHlrcnNyM21yeWwzeWo2eHE4N3F6Nmtyc2txZnptZjR5ejc4ZGRqZTl4cTR2cXk4OHJmNTAyNW56c2hzdnBnbDh3JyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgdHlwZTogJzAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnNvbGlkYXRlSWQ6ICc2OGI5ZmMxODU1ODAwNmFhYjUzNzg1NjE1ZmVhN2MyOCcsXG4gICAgICAgICAgICBjb2luOiAndGFkYScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIHRvIHRlc3RcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgd2FsbGV0T2JqLnNlbmRBY2NvdW50Q29uc29saWRhdGlvbnMoe1xuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6ICd0eCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgYWRkcmVzcycsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFeHBsYWluIFRyYW5zYWN0aW9uczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGFuIHVuc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHJhd1R4LnVuc2lnbmVkVHgyLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhleHBsYWluZWRUcmFuc2FjdGlvbik7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHRyYW5zYWN0aW9uRXhwbGFuYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBtaXNzaW5nIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2UsICdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6ICdpbnZhbGlkVHhIZXgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2UsICdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQYXJzZSBSYXcgVHJhbnNhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGFyc2Ugc3Rha2luZyBwbGVkZ2UgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgudW5zaWduZWROZXdQbGVkZ2VUeCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdQbGVkZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBzdGFraW5nIGFjdGl2YXRpb24gdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgudW5zaWduZWRTdGFraW5nQWN0aXZlVHgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBzdGFraW5nIGRlYWN0aXZhdGlvbiB0eCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGJhc2Vjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeC51bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgVHJhbnNhY3Rpb25zOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGFuIHVuc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiByYXdUeC51bnNpZ25lZFR4MixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHRyYW5zYWN0aW9uRXhwbGFuYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogcmF3VHguc2lnbmVkVHgyLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwodHJhbnNhY3Rpb25FeHBsYW5hdGlvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgcGFyc2UgYSBzaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoQWRhLnByb3RvdHlwZSwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXNvbHZlcyh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4SGV4OiByYXdUeC5zaWduZWRUeCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZWNvdmVyIFRyYW5zYWN0aW9uczonLCAoKSA9PiB7XG4gICAgY29uc3QgZGVzdEFkZHIgPSBhZGRyZXNzLmFkZHJlc3MyO1xuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEFkYS5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGtleW9mIEFkYSk7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHtcbiAgICAgICAgICBfYWRkcmVzc2VzOiBbd3J3VXNlci53YWxsZXRBZGRyZXNzMF0sXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLk9uZVVUWE8pO1xuICAgICAgY2FsbEJhY2sud2l0aEFyZ3MoJ3RpcCcpLnJlc29sdmVzKGVuZHBvaW50UmVzcG9uc2VzLnRpcEluZm9SZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRha2UgT1ZDIG91dHB1dCBhbmQgZ2VuZXJhdGUgYSBzaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBvdmNSZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5VHhuID0gYXdhaXQgYmFzZWNvaW4uY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zZXJpYWxpemVkVHguc2hvdWxkLmVxdWFsKFxuICAgICAgICAnODRhNDAwODE4MjU4MjA0YmQwZjk5MWMxNTMyY2ZmZTMxZDRhMTBkYjQ5MmI0MzE3NWVjMzI2NzY1YjZiMjljZWVlNTk4ZGYyYjYxZjQ3MDAwMTgxODI1ODM5MDA4NzM3OWViYzU1MzNlYmU2MjE5NjNjOTE1YzNjYmM1ZjA4NTM3ZmNkY2E0YWY4ZjhhZTA4ZWQ0Yzg3Mzc5ZWJjNTUzM2ViZTYyMTk2M2M5MTVjM2NiYzVmMDg1MzdmY2RjYTRhZjhmOGFlMDhlZDRjMWEwNWYzNTlmZjAyMWEwMDAyODcwMTAzMWEwMjQ5NzJlMWExMDA4MTgyNTgyMGJiYWNiMTM0MzFiOTkyMDhlNmU4Y2RiZjcxMDE0N2ZlYWYwNmEzOWQ3MTU2NWU2MGI0MTFjZTllNGZhM2YxMzc1ODQwMDFhNGFiODIzNjU2M2Y2OWZmMzA5ZTU3ODZlOGYzOWM2MjllZDU3Njc2YzY5MjE1OWNiMmUwNDk0YzllNjYzMzU1Mzg0YzEzYzc0OWQwNGMxN2E4MGJhMmE0NWNjMTI3ZGY0ODBmYzY0YTQzMTk5YTc3MmYxMWFjZDViMTRhMGZmNWY2J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgcmVjb3ZlcnlUeG4ubGFzdFNjYW5JbmRleC5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRha2UgY29uc29saWRhdGlvbiBPVkMgb3V0cHV0IGFuZCBnZW5lcmF0ZSBtdWx0aXBsZSBzaWduZWQgc3dlZXAgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gb3ZjUmVzcG9uc2UyO1xuICAgICAgY29uc3QgcmVjb3ZlcnlUeG4gPSBhd2FpdCBiYXNlY29pbi5jcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzBdLnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICc4NGE0MDA4MTgyNTgyMDNlNjJlNWVlOGIxMjAxMmM0Yjk0OWY5Nzc3YjcyMTY1MjM5YmIyMTQ2YWU4YjA3OGI0ZDFjNWNhOGQzMTY4ZTMwMDAxODE4MjU4MzkwMGJhZjU1ZWJjZjlhZGExYjhlY2IxNjQwODgwZmJhNTRkMjgxNzY5MGYxMmIzYTEwNmFmZDA4MDA0YmFmNTVlYmNmOWFkYTFiOGVjYjE2NDA4ODBmYmE1NGQyODE3NjkwZjEyYjNhMTA2YWZkMDgwMDQxYTAwOTYwZjdmMDIxYTAwMDI4NzAxMDMxYTAyNTBmN2VhYTEwMDgxODI1ODIwNTAwZTBkNzI1YTViYTNhMzA2ZGEzNTAzZGZlNTdiOGExNDA2OGEwOWI2MWIzNmVjMDY4ZmNmOGNmNWMzOTFkZTU4NDBjODM2Y2U2ZDMyNjJkNTY1NDcwNmVhMDY3MjE1MjJkM2I3NWY2ZDU0NTI0NTA0N2E3YmU3NDYzNjI5ZDg4YjNmNDI2NGI5OTVmNTkxZGY1MmJkZmZjZjA5ZGExZTZhYjllODhkZTM3MTRjNmUyZWMxOTYxNzg2Y2YxYzU4NmEwN2Y1ZjYnXG4gICAgICApO1xuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzBdLnNjYW5JbmRleC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMV0uc2VyaWFsaXplZFR4LnNob3VsZC5lcXVhbChcbiAgICAgICAgJzg0YTQwMDgxODI1ODIwMjljMTBhY2YwZTA4Zjk1MjMzMjVjODgyNDM1NjVhZjZiMzIyNzQ5OTIxODljMTE1MzkwM2M0MTBiZWQ3YzJjNzAwMDE4MTgyNTgzOTAwYmFmNTVlYmNmOWFkYTFiOGVjYjE2NDA4ODBmYmE1NGQyODE3NjkwZjEyYjNhMTA2YWZkMDgwMDRiYWY1NWViY2Y5YWRhMWI4ZWNiMTY0MDg4MGZiYTU0ZDI4MTc2OTBmMTJiM2ExMDZhZmQwODAwNDFhMDA5NjBmN2YwMjFhMDAwMjg3MDEwMzFhMDI1MGY3ZWFhMTAwODE4MjU4MjA2Mjc3MGIyMjRiZDMxNGJjNTI2ZmJkNmE5NGU5MDgyZmI2NDU4YzQyNWU2ZTA5YmFkNzQwMDRkZDg5N2U5NjIzNTg0MDM4NDI1NDRmMmZmMjhiZTA1NGViN2M3OTk3YmMzMDNiMWUyNTFlYjEzYTQxODAyYzgyMzE4ZTU5MmJiMjRlYWEzMTk3YzQ1MGU3OTdjYzg1NTlmMDM1NmNkNWNkZDFhYjVlYjgwYzUxNzNlMzRlOWUxZDE3Mzc1MzNhODk1MjBjZjVmNidcbiAgICAgICk7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMV0uc2NhbkluZGV4LnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1syXS5zZXJpYWxpemVkVHguc2hvdWxkLmVxdWFsKFxuICAgICAgICAnODRhNDAwODE4MjU4MjBkZDE0MGYxMzNkODY1ZTFiYjU2NDJlNzA4ZmU2ODViZjc2MDFkNzFkMGM5OTUxMWU1ZDU1MmRhN2Y4YmQxMGZmMDAwMTgxODI1ODM5MDBiYWY1NWViY2Y5YWRhMWI4ZWNiMTY0MDg4MGZiYTU0ZDI4MTc2OTBmMTJiM2ExMDZhZmQwODAwNGJhZjU1ZWJjZjlhZGExYjhlY2IxNjQwODgwZmJhNTRkMjgxNzY5MGYxMmIzYTEwNmFmZDA4MDA0MWEwMDk2MGY3ZjAyMWEwMDAyODcwMTAzMWEwMjUwZjdlYWExMDA4MTgyNTgyMDUzYjRiYjc0YWEzOGFkZDQ1OGRhZmM4MTUzZjBhYTgyNjZhY2FkNTkzMjJiODc3Y2E5YzIzYzVkMzg3Mzc3OWQ1ODQwZTk0Y2U3ODk2OTU3ZDA5NGM2YmFmYmYyZWMxMGRmNWViYjBmMWQyYTI3YTdlMzFmMmQ0NWM1MzFmYjY4N2VkZDZjNGQzM2Y4ZTliOTljNzY5MmI2ZmFjNmQ4Mzk5YmQ4ZmQ0NzY0MWJhYWU5YmJiNjlmNTE4ZDQyYWQxMTcxMGFmNWY2J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1syXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzNdLnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICc4NGE0MDA4MTgyNTgyMDE1YTFkNmRiNWQzZjU5MmFhMWNkYTE4NWI2MzU5Y2EwZTI5MjFjM2M1MTk1OWY2NDIyMmE2YjdkOTVkMzM5MjMwMDAxODE4MjU4MzkwMGJhZjU1ZWJjZjlhZGExYjhlY2IxNjQwODgwZmJhNTRkMjgxNzY5MGYxMmIzYTEwNmFmZDA4MDA0YmFmNTVlYmNmOWFkYTFiOGVjYjE2NDA4ODBmYmE1NGQyODE3NjkwZjEyYjNhMTA2YWZkMDgwMDQxYTAwOTYwZjdmMDIxYTAwMDI4NzAxMDMxYTAyNTBmN2VhYTEwMDgxODI1ODIwNjAwZjg2Y2EyMmQ2NzBmMGE5OTBhZGU0ZTg4MmMwNWU2NTQzNDMyNjM0OTQ3MzVhMzE1MTdkZTA4MTk2NzY3MzU4NDBmZTE5OWY4ZTI0N2E0Y2ZhYmZlYjRmOWNiNTc0YWEzNTczOWEwYWE5ODg2MGVlMGE4NWQ3MjBjNGFiNGZlY2ZhYzdiNDUwNGRmMzEwYjNlNGJlYTA0NzExZjYwNjUyZDRhOGNmNWViNDE4MTcyOTNiOGQyOTk3N2ZlNjk1ZjcwNGY1ZjYnXG4gICAgICApO1xuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzNdLnNjYW5JbmRleC5zaG91bGQuZXF1YWwoNCk7XG4gICAgICByZWNvdmVyeVR4bi5sYXN0U2NhbkluZGV4LnNob3VsZC5lcXVhbCgyMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgYSB0eG4gZm9yIG5vbi1iaXRnbyByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiB3cndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29LZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdEFkZHIsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZFR3aWNlKGJhc2Vjb2luLmdldERhdGFGcm9tTm9kZSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGJhc2Vjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyZXMuc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgZmVlID0gTnVtYmVyKHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpLmZlZS5mZWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faW5kZXgsIHRlc3RuZXRVVFhPLlVUWE9fMS50eF9pbmRleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5vdXRwdXRzWzBdLmFkZHJlc3MsIGRlc3RBZGRyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoTnVtYmVyKHR4SnNvbi5vdXRwdXRzWzBdLmFtb3VudCkgKyBmZWUsIHRlc3RuZXRVVFhPLlVUWE9fMS52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgYSB0eG4gZm9yIHVuc2lnbmVkIHN3ZWVwIHJlY292ZXJpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RBZGRyLFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZFR3aWNlKGJhc2Vjb2luLmdldERhdGFGcm9tTm9kZSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGJhc2Vjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyZXMudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBjb25zdCBmZWUgPSBOdW1iZXIodHguZXhwbGFpblRyYW5zYWN0aW9uKCkuZmVlLmZlZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faWQsIHRlc3RuZXRVVFhPLlVUWE9fMS50eF9oYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1swXS50cmFuc2FjdGlvbl9pbmRleCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2luZGV4KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm91dHB1dHNbMF0uYWRkcmVzcywgZGVzdEFkZHIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChOdW1iZXIodHhKc29uLm91dHB1dHNbMF0uYW1vdW50KSArIGZlZSwgdGVzdG5ldFVUWE8uVVRYT18xLnZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXIgVHJhbnNhY3Rpb25zIE11bHRpcGxlIFVUWE86JywgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3RBZGRyID0gYWRkcmVzcy5hZGRyZXNzMjtcbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihBZGEucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBrZXlvZiBBZGEpO1xuICAgICAgY2FsbEJhY2tcbiAgICAgICAgLndpdGhBcmdzKCdhZGRyZXNzX2luZm8nLCB7XG4gICAgICAgICAgX2FkZHJlc3NlczogW3dyd1VzZXIud2FsbGV0QWRkcmVzczBdLFxuICAgICAgICB9KVxuICAgICAgICAucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMuYWRkcmVzc0luZm9SZXNwb25zZS5Ud29VVFhPKTtcbiAgICAgIGNhbGxCYWNrLndpdGhBcmdzKCd0aXAnKS5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy50aXBJbmZvUmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIGEgdHhuIGZvciBub24tYml0Z28gcmVjb3ZlcmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiB3cndVc2VyLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogd3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RBZGRyLFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2VyaWFsaXplZFR4Jyk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRUd2ljZShiYXNlY29pbi5nZXREYXRhRnJvbU5vZGUpO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmVzLnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGNvbnN0IGZlZSA9IE51bWJlcih0eC5leHBsYWluVHJhbnNhY3Rpb24oKS5mZWUuZmVlKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaW5kZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzFdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzIudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMV0udHJhbnNhY3Rpb25faW5kZXgsIHRlc3RuZXRVVFhPLlVUWE9fMi50eF9pbmRleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5vdXRwdXRzWzBdLmFkZHJlc3MsIGRlc3RBZGRyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoTnVtYmVyKHR4SnNvbi5vdXRwdXRzWzBdLmFtb3VudCkgKyBmZWUsIHRlc3RuZXRVVFhPLlVUWE9fMS52YWx1ZSArIHRlc3RuZXRVVFhPLlVUWE9fMi52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgYSB0eG4gZm9yIHVuc2lnbmVkIHN3ZWVwIHJlY292ZXJpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RBZGRyLFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZFR3aWNlKGJhc2Vjb2luLmdldERhdGFGcm9tTm9kZSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGJhc2Vjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyZXMudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBjb25zdCBmZWUgPSBOdW1iZXIodHguZXhwbGFpblRyYW5zYWN0aW9uKCkuZmVlLmZlZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faWQsIHRlc3RuZXRVVFhPLlVUWE9fMS50eF9oYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1swXS50cmFuc2FjdGlvbl9pbmRleCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2luZGV4KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pZCwgdGVzdG5ldFVUWE8uVVRYT18yLnR4X2hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzFdLnRyYW5zYWN0aW9uX2luZGV4LCB0ZXN0bmV0VVRYTy5VVFhPXzIudHhfaW5kZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ub3V0cHV0c1swXS5hZGRyZXNzLCBkZXN0QWRkcik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKE51bWJlcih0eEpzb24ub3V0cHV0c1swXS5hbW91bnQpICsgZmVlLCB0ZXN0bmV0VVRYTy5VVFhPXzEudmFsdWUgKyB0ZXN0bmV0VVRYTy5VVFhPXzIudmFsdWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgQ29uc29saWRhdGlvbiBSZWNvdmVyaWVzOicsICgpID0+IHtcbiAgICBjb25zdCBiYXNlQWRkciA9IGNvbnNvbGlkYXRpb25XcndVc2VyLndhbGxldEFkZHJlc3MwO1xuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEFkYS5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGtleW9mIEFkYSk7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHtcbiAgICAgICAgICBfYWRkcmVzc2VzOiBbY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0QWRkcmVzczFdLFxuICAgICAgICB9KVxuICAgICAgICAucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMuYWRkcmVzc0luZm9SZXNwb25zZS5aZXJvVVRYTyk7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHtcbiAgICAgICAgICBfYWRkcmVzc2VzOiBbY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0QWRkcmVzczJdLFxuICAgICAgICB9KVxuICAgICAgICAucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMuYWRkcmVzc0luZm9SZXNwb25zZS5PbmVVVFhPKTtcbiAgICAgIGNhbGxCYWNrXG4gICAgICAgIC53aXRoQXJncygnYWRkcmVzc19pbmZvJywge1xuICAgICAgICAgIF9hZGRyZXNzZXM6IFtjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRBZGRyZXNzM10sXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLk9uZVVUWE8yKTtcbiAgICAgIGNhbGxCYWNrLndpdGhBcmdzKCd0aXAnKS5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy50aXBJbmZvUmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBzaWduZWQgY29uc29saWRhdGlvbiByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogNCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIHJlcy5sYXN0U2NhbkluZGV4LnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIGNvbnN0IHR4bjEgPSByZXMudHJhbnNhY3Rpb25zWzBdO1xuICAgICAgY29uc3QgdHgxID0gbmV3IFRyYW5zYWN0aW9uKGJhc2Vjb2luKTtcbiAgICAgIHR4MS5mcm9tUmF3VHJhbnNhY3Rpb24odHhuMS5zZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgdHhKc29uMSA9IHR4MS50b0pzb24oKTtcbiAgICAgIGNvbnN0IGZlZTEgPSBOdW1iZXIodHgxLmV4cGxhaW5UcmFuc2FjdGlvbigpLmZlZS5mZWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24xLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24xLmlucHV0c1swXS50cmFuc2FjdGlvbl9pbmRleCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2luZGV4KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uMS5vdXRwdXRzWzBdLmFkZHJlc3MsIGJhc2VBZGRyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoTnVtYmVyKHR4SnNvbjEub3V0cHV0c1swXS5hbW91bnQpICsgZmVlMSwgdGVzdG5ldFVUWE8uVVRYT18xLnZhbHVlKTtcblxuICAgICAgY29uc3QgdHhuMiA9IHJlcy50cmFuc2FjdGlvbnNbMV07XG4gICAgICBjb25zdCB0eDIgPSBuZXcgVHJhbnNhY3Rpb24oYmFzZWNvaW4pO1xuICAgICAgdHgyLmZyb21SYXdUcmFuc2FjdGlvbih0eG4yLnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eEpzb24yID0gdHgyLnRvSnNvbigpO1xuICAgICAgY29uc3QgZmVlMiA9IE51bWJlcih0eDIuZXhwbGFpblRyYW5zYWN0aW9uKCkuZmVlLmZlZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbjIuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzIudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbjIuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LCB0ZXN0bmV0VVRYTy5VVFhPXzIudHhfaW5kZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24yLm91dHB1dHNbMF0uYWRkcmVzcywgYmFzZUFkZHIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChOdW1iZXIodHhKc29uMi5vdXRwdXRzWzBdLmFtb3VudCkgKyBmZWUyLCB0ZXN0bmV0VVRYTy5VVFhPXzIudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBza2lwIGJ1aWxkaW5nIGNvbnNvbGlkYXRlIHRyYW5zYWN0aW9uIGlmIGJhbGFuY2UgaXMgZXF1YWwgdG8gemVybycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICAgIHVzZXJLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IGNvbnNvbGlkYXRpb25XcndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgICAgZW5kaW5nU2NhbkluZGV4OiAyLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnRGlkIG5vdCBmaW5kIGFuIGFkZHJlc3Mgd2l0aCBmdW5kcyB0byByZWNvdmVyLicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzdGFydGluZ1NjYW5JbmRleCBpcyBub3QgZ2UgdG8gMScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICAgIHVzZXJLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAtMSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ0ludmFsaWQgc3RhcnRpbmcgb3IgZW5kaW5nIGluZGV4IHRvIHNjYW4gZm9yIGFkZHJlc3Nlcy4gc3RhcnRpbmdTY2FuSW5kZXg6IC0xLCBlbmRpbmdTY2FuSW5kZXg6IDE5LidcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgc2NhbiBmYWN0b3IgaXMgdG9vIGhpZ2gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgICB1c2VyS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogY29uc29saWRhdGlvbldyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMwMCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ0ludmFsaWQgc3RhcnRpbmcgb3IgZW5kaW5nIGluZGV4IHRvIHNjYW4gZm9yIGFkZHJlc3Nlcy4gc3RhcnRpbmdTY2FuSW5kZXg6IDEsIGVuZGluZ1NjYW5JbmRleDogMzAwLidcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgdW5zaWduZWQgY29uc29saWRhdGlvbiByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogNCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgYWxsIGFkZHJlc3NlcyBoYXZlIGJhbGFuY2UgbGVzcyB0aGFuIDEgQURBJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihBZGEucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBrZXlvZiBBZGEpO1xuICAgICAgY2FsbEJhY2sud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHNpbm9uLm1hdGNoLmhhcygnX2FkZHJlc3NlcycpKS5yZXNvbHZlcyh7XG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBib2R5OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFsYW5jZTogNTAwMDAwLFxuICAgICAgICAgICAgdXR4b19zZXQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR4X2hhc2g6ICc4ZGY4ZDQxMjA3OTgwZjllMjFkZTY5OGJkNWQ2YzM5NWMzOWU0MjBmN2RlMjdmODUzOTA1MmRkMzRlM2EyOGQ2JyxcbiAgICAgICAgICAgICAgICB0eF9pbmRleDogMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogNTAwMDAwLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBjYWxsQmFjay53aXRoQXJncygndGlwJykucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMudGlwSW5mb1Jlc3BvbnNlKTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogY29uc29saWRhdGlvbldyd1VzZXIuYml0Z29LZXksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdEaWQgbm90IGZpbmQgYW4gYWRkcmVzcyB3aXRoIGZ1bmRzIHRvIHJlY292ZXIuJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGV2ZW4gaWYgc2luZ2xlIGFkZHJlc3MgaGFzIG5vIGZ1bmRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogNCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZXZlbiBpZiBzaW5nbGUgYWRkcmVzcyBoYXMgaW5zdWZmaWNpZW50IGZ1bmRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IDEsXG4gICAgICAgIGVuZGluZ1NjYW5JbmRleDogNCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXIgVHJhbnNhY3Rpb25zIEZhaWx1cmU6JywgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3RBZGRyID0gYWRkcmVzcy5hZGRyZXNzMjtcbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHJlY292ZXIgZHVlIHRvIG5vdCBmaW5kaW5nIGFuIGFkZHJlc3Mgd2l0aCBmdW5kcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEFkYS5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGtleW9mIEFkYSk7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHNpbm9uLm1hdGNoLmhhcygnX2FkZHJlc3NlcycpKVxuICAgICAgICAucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMuYWRkcmVzc0luZm9SZXNwb25zZS5aZXJvVVRYTyk7XG4gICAgICBjYWxsQmFjay53aXRoQXJncygndGlwJykucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMudGlwSW5mb1Jlc3BvbnNlKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OiB3cndVc2VyLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiB3cndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdEFkZHIsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdEaWQgbm90IGZpbmQgYWRkcmVzcyB3aXRoIGZ1bmRzIHRvIHJlY292ZXIuJyk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRPbmNlKGJhc2Vjb2luLmdldERhdGFGcm9tTm9kZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcmVjb3ZlciBkdWUgdG8gbm90IGhhdmluZyBtb3JlIHRoYW4gMSBBREEgaW4gZnVuZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihBZGEucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBrZXlvZiBBZGEpO1xuICAgICAgY2FsbEJhY2tcbiAgICAgICAgLndpdGhBcmdzKCdhZGRyZXNzX2luZm8nLCBzaW5vbi5tYXRjaC5oYXMoJ19hZGRyZXNzZXMnKSlcbiAgICAgICAgLnJlc29sdmVzKGVuZHBvaW50UmVzcG9uc2VzLmFkZHJlc3NJbmZvUmVzcG9uc2UuT25lU21hbGxVVFhPKTtcbiAgICAgIGNhbGxCYWNrLndpdGhBcmdzKCd0aXAnKS5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy50aXBJbmZvUmVzcG9uc2UpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvS2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0QWRkcixcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ0luc3VmZmljaWVudCBmdW5kcyB0byByZWNvdmVyLCBtaW5pbXVtIHJlcXVpcmVkIGlzIDEgQURBIHBsdXMgZmVlcywgZ290IDgzNDQ1NSBmZWVzOiAxNjU1NDUnXG4gICAgICAgICk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRUd2ljZShiYXNlY29pbi5nZXREYXRhRnJvbU5vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHdhbGxldCBhZGRyZXNzIChpc1dhbGxldEFkZHJlc3MpOicsICgpID0+IHtcbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9XG4gICAgICAnZWQzMTJkMGRiNDYxNTY4ODIxOWM0MzIzMWViNGI5OGQ1ODgzYzBiNDRiY2ZlZjE5NTYyOTA1NTU5OTVhZDY4ZWY3YzIyOTE3YjRhOGI2OTE4Mzg2NGI4M2NjNzAyODY1NWNkN2E3MGVmNzZkNjk0OGQ4MDlhMTUwNTAwNTQ4NDAnO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCB3YWxsZXQgYWRkcmVzcyBhdCBpbmRleCAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzInLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICczJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICdhZGRyX3Rlc3QxcXp2bWF6bXBnZmhqeXBwd2xzdzI5empqd2F6Y3NmazYyejl6djV2c3YyNHAwd3llaDY5a3pzbjB5Z3p6YWxxdTUyOTl5YTY5M3FuZDU1eTJ5ZWdlcWM0Mno3dXEwZ2UycHEnO1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICB9KTtcblxuICAgICAgaXNWYWxpZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGFuIGFkZHJlc3Mgd2l0aCB3cm9uZyBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcyJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICdhZGRyX3Rlc3QxcXp2bWF6bXBnZmhqeXBwd2xzdzI5empqd2F6Y3NmazYyejl6djV2c3YyNHAwd3llaDY5a3pzbjB5Z3p6YWxxdTUyOTl5YTY5M3FuZDU1eTJ5ZWdlcWM0Mno3dXEwZ2UycHEnLFxuICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiAyLFxuICAgICAgfSk7XG5cbiAgICAgIGlzVmFsaWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgYSByYW5kb20gYWRkcmVzcyBub3QgZnJvbSB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzMnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICAvLyBVc2UgYSByYW5kb20gdmFsaWQgQURBIGFkZHJlc3Mgbm90IGZyb20gdGhpcyB3YWxsZXRcbiAgICAgIGNvbnN0IHJhbmRvbUFkZHJlc3MgPSAnYWRkcl90ZXN0MXZyOHJha202NnJjZnY0ZmN4cXlrZzVsZjB5djdsc3lrOW12YXB4MzY5anB2dGNnZmN1azdmJztcblxuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHJhbmRvbUFkZHJlc3MsXG4gICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICB9KTtcblxuICAgICAgaXNWYWxpZC5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzIGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcyJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gJ25vdF9hX3ZhbGlkX2FkZHJlc3MnO1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiBpbnZhbGlkQWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIENhcmRhbm8gQWRkcmVzczogbm90X2FfdmFsaWRfYWRkcmVzcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGtleWNoYWlucyBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgICAnYWRkcl90ZXN0MXF6dm1hem1wZ2ZoanlwcHdsc3cyOXpqandhemNzZms2Mno5enY1dnN2MjRwMHd5ZWg2OWt6c24weWd6emFscXU1Mjk5eWE2OTNxbmQ1NXkyeWVnZXFjNDJ6N3VxMGdlMnBxJztcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBjb21tb25LZXljaGFpbiBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyBhcyBjb25zdCxcbiAgICAgICAgICAvLyBjb21tb25LZXljaGFpbiBpcyBtaXNzaW5nXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgICAgJ2FkZHJfdGVzdDFxenZtYXptcGdmaGp5cHB3bHN3Mjl6amp3YXpjc2ZrNjJ6OXp2NXZzdjI0cDB3eWVoNjlrenNuMHlnenphbHF1NTI5OXlhNjkzcW5kNTV5MnllZ2VxYzQyejd1cTBnZTJwcSc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCBwYXJhbSBjb21tb25LZXljaGFpbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGtleWNoYWlucyBoYXZlIG1pc21hdGNoZWQgY29tbW9uS2V5Y2hhaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAndXNlcicgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzInLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiAnZGlmZmVyZW50S2V5Y2hhaW4xMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmJyxcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICdhZGRyX3Rlc3QxcXp2bWF6bXBnZmhqeXBwd2xzdzI5empqd2F6Y3NmazYyejl6djV2c3YyNHAwd3llaDY5a3pzbjB5Z3p6YWxxdTUyOTl5YTY5M3FuZDU1eTJ5ZWdlcWM0Mno3dXEwZ2UycHEnO1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2FsbCBrZXljaGFpbnMgbXVzdCBoYXZlIHRoZSBzYW1lIGNvbW1vbktleWNoYWluIGZvciBNUEMgY29pbnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGFkZHJlc3Mgd2hlbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkIGlzIHByZXNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkID0gJ3Rlc3REZXJpdmF0aW9uU2VlZDEyMyc7XG5cbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6IGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAndXNlcicgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzInLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzMnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHsgYWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzIH0gPSBhd2FpdCAoYmFzZWNvaW4gYXMgYW55KS5nZXRBZGFBZGRyZXNzQW5kQWNjb3VudElkKHtcbiAgICAgICAgYml0Z29LZXk6IGNvbW1vbktleWNoYWluLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc2VlZDogZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSk7XG5cbiAgICAgIGlzVmFsaWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZlcmlmaWNhdGlvbiB3aGVuIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgaXMgbWlzc2luZyBidXQgYWRkcmVzcyB3YXMgY3JlYXRlZCB3aXRoIHNlZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkID0gJ3Rlc3REZXJpdmF0aW9uU2VlZDEyMyc7XG4gICAgICBjb25zdCB7IGFkZHJlc3M6IGFkZHJlc3NXaXRoU2VlZCB9ID0gYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkuZ2V0QWRhQWRkcmVzc0FuZEFjY291bnRJZCh7XG4gICAgICAgIGJpdGdvS2V5OiBjb21tb25LZXljaGFpbixcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHNlZWQ6IGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2V5Y2hhaW5zV2l0aG91dFNlZWQgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzMnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhTZWVkLFxuICAgICAgICBrZXljaGFpbnM6IGtleWNoYWluc1dpdGhvdXRTZWVkLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0pO1xuXG4gICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgdG9rZW4gY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbjonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHNwb29mZWQgdG9rZW4gY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIGluY29ycmVjdCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uc29saWRhdGlvblR4ID0ge1xuICAgICAgICB0eFJlcXVlc3RJZDogJzRmZGQwY2FlLTI1NjMtNDNiMS1iNWNmLTk0ODY1MTU4Y2ExMCcsXG4gICAgICAgIHdhbGxldElkOiAnNjMwNjhlZDRlZmE2M2EwMDA4NzdmMDJmZDRiMGZhNmQnLFxuICAgICAgICB0eEhleDpcbiAgICAgICAgICAnODRhNDAwODE4MjU4MjA0YmQwZjk5MWMxNTMyY2ZmZTMxZDRhMTBkYjQ5MmI0MzE3NWVjMzI2NzY1YjZiMjljZWVlNTk4ZGYyYjYxZjQ3MDAwMTgxODI1ODM5MDA4NzM3OWViYzU1MzNlYmU2MjE5NjNjOTE1YzNjYmM1ZjA4NTM3ZmNkY2E0YWY4ZjhhZTA4ZWQ0Yzg3Mzc5ZWJjNTUzM2ViZTYyMTk2M2M5MTVjM2NiYzVmMDg1MzdmY2RjYTRhZjhmOGFlMDhlZDRjMWEwNWYzNTlmZjAyMWEwMDAyODcwMTAzMWEwMjQ5NzJlMWExMDA4MTgyNTgyMGJiYWNiMTM0MzFiOTkyMDhlNmU4Y2RiZjcxMDE0N2ZlYWYwNmEzOWQ3MTU2NWU2MGI0MTFjZTllNGZhM2YxMzc1ODQwMDFhNGFiODIzNjU2M2Y2OWZmMzA5ZTU3ODZlOGYzOWM2MjllZDU3Njc2YzY5MjE1OWNiMmUwNDk0YzllNjYzMzU1Mzg0YzEzYzc0OWQwNGMxN2E4MGJhMmE0NWNjMTI3ZGY0ODBmYzY0YTQzMTk5YTc3MmYxMWFjZDViMTRhMGZmNWY2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogMTAwMDAsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMDAnLFxuICAgICAgICB9LFxuICAgICAgICB0eEluZm86IHtcbiAgICAgICAgICBpbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJzhpTGEyNktTYmRwQlV6Tks3dVlxOEZ2eXV5QTVoNGs0ZXJESHNEY1BiSHVzJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDIuMDE3MzIyOGUxMCxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcyMDE3MzIyODAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnOFAya1g3VHloOWVTM1JLZGFCaHFiRXRRR0FYNThEWHpMN21oRFFBQkdYMmQnLFxuICAgICAgICAgICAgICB2YWx1ZTogMTAwMDAsXG4gICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiAnMTAwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1pbmVyRmVlOiAnMTAwMDAnLFxuICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogJ2FkZHJfdGVzdDF2cjhyYWttNjZyY2Z2NGZjeHF5a2c1bGYweXY3bHN5azltdmFweDM2OWpwdnRjZ2ZjdWs3ZicsXG4gICAgICAgICAgICAgIGNvaW5OYW1lOiAndGFkYTp1c2R0JyxcbiAgICAgICAgICAgICAgZW50ZXJwcmlzZToge1xuICAgICAgICAgICAgICAgICRvaWQ6ICc1NTUzYmE4YWU3YTVjNzcwMDY3MTk2NjEnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlbnRlcnByaXNlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICRvaWQ6ICc1NTUzYmE4YWU3YTVjNzcwMDY3MTk2NjEnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHZhbHVlOiAyLjAxNzMyMjhlMTAsXG4gICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiAnMjAxNzMyMjgwMDAnLFxuICAgICAgICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICAgICAgICAkb2lkOiAnNjJmNGMzNzIwZDkyYzUwMDA4MjU3ZWI1JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgICAgICAgICAgIHdhbGxldHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAkb2lkOiAnNjJmNGMzNzIwZDkyYzUwMDA4MjU3ZWI1JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHBheUdvRmVlOiAnMCcsXG4gICAgICAgICAgc3BlbmRBbW91bnQ6ICcyMDE3MzIyODAwMCcsXG4gICAgICAgICAgc3BlbmRBbW91bnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFtb3VudFN0cmluZzogJzIwMTczMjI4MDAwJyxcbiAgICAgICAgICAgICAgY29pbk5hbWU6ICd0YWRhOnVzZHQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHR5cGU6ICdTZW5kJyxcbiAgICAgICAgfSxcbiAgICAgICAgY29uc29saWRhdGVJZDogJzY3MTJkN2ZkYTZkZTQ5MDZkNjU4YzA0YWViYmY4ZjliJyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgd2FsbGV0IHdpdGggYSBkaWZmZXJlbnQgYWRkcmVzcyB0aGFuIHRoZSB0cmFuc2FjdGlvbidzIG91dHB1dFxuICAgICAgY29uc3QgbW9ja2VkV2FsbGV0ID0ge1xuICAgICAgICBjb2luU3BlY2lmaWM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm9vdEFkZHJlc3M6XG4gICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXFubnZwdHJjM3JlYzY0cTJuOWpoNTcybmN1NXd2ZHR0OHV2ZzRnM2FqOTZzNWR3dTluajcwbWxhaHpnbG05OTM5dWV2dXBzbWo4ZGNkcXYyNWQ1bjVyOHZ3OHNuN3ByZXknLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiBjb25zb2xpZGF0aW9uVHgsXG4gICAgICAgICAgd2FsbGV0OiBtb2NrZWRXYWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7XG4gICAgICAgICAgICBjb25zb2xpZGF0aW9uVG9CYXNlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIGFkZHJlc3MnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
1246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2FkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsaUNBQWtDO0FBQ2xDLG1DQUFxQztBQUNyQyw2Q0FBK0I7QUFDL0IsbURBQStEO0FBQy9ELGlEQUF3RDtBQUN4RCw0Q0FZc0I7QUFDdEIsMENBQTRCO0FBQzVCLHNGQUF3RTtBQUN4RSxtQ0FBK0M7QUFDL0MsdUNBQTRDO0FBQzVDLDBFQUFrRjtBQUNsRixvREFBNEI7QUFDNUIsbURBQXNEO0FBQ3RELGdEQUF3QjtBQUV4QixRQUFRLENBQUMsS0FBSyxFQUFFO0lBQ2QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxXQUFXLENBQUM7SUFFaEIsTUFBTSxVQUFVLEdBQUc7UUFDakIsS0FBSyxFQUFFLGlCQUFLLENBQUMsVUFBVTtRQUN2QixNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRztRQUNmLFVBQVUsRUFBRTtZQUNWO2dCQUNFLE9BQU8sRUFBRSxpQkFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPO2dCQUNyQyxNQUFNLEVBQUUsU0FBUzthQUNsQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxpQkFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPO2dCQUNyQyxNQUFNLEVBQUUsV0FBVzthQUNwQjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE1BQU0sc0JBQXNCLEdBQUc7UUFDN0IsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxLQUFL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QVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxlQUFlO2dCQUMzQixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsWUFBWSxFQUFFO29CQUNaLDBCQUEwQixFQUFFLElBQUk7aUJBQ2pDO2FBQ0YsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cblxuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSwgZW5jcnlwdCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHtcbiAgYWRkcmVzcyxcbiAgY29uc29saWRhdGlvbldyd1VzZXIsXG4gIGVuZHBvaW50UmVzcG9uc2VzLFxuICBlbnRlcnByaXNlQWNjb3VudHMgYXMgYWNjb3VudHMsXG4gIG92Y1Jlc3BvbnNlLFxuICBvdmNSZXNwb25zZTIsXG4gIHByaXZhdGVLZXlzLFxuICBwdWJsaWNLZXlzLFxuICByYXdUeCxcbiAgdGVzdG5ldFVUWE8sXG4gIHdyd1VzZXIsXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBDYXJkYW5vV2FzbSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEFkYSwgS2V5UGFpciwgVGFkYSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2RrLWNvcmUvc3JjL2FjY291bnQtbGliL2Jhc2VDb2luL2VudW0nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgY29tbW9uLCBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgbm9jayBmcm9tICdub2NrJztcblxuZGVzY3JpYmUoJ0FEQScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnYWRhJztcbiAgY29uc3QgdGNvaW5OYW1lID0gJ3QnICsgY29pbk5hbWU7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgYmFzZWNvaW47XG4gIGxldCBuZXdUeFByZWJ1aWxkO1xuICBsZXQgbmV3VHhQYXJhbXM7XG5cbiAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICB0eEhleDogcmF3VHgudW5zaWduZWRUeCxcbiAgICB0eEluZm86IHt9LFxuICB9O1xuXG4gIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgIHJlY2lwaWVudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogcmF3VHgub3V0cHV0QWRkcmVzczEuYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiAnNTAwMDAwMCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhZGRyZXNzOiByYXdUeC5vdXRwdXRBZGRyZXNzMi5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6ICcyNDgzMjkxNTAnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IHRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ10sXG4gICAgaWQ6ICdmNDhmNmVhMGY3NWYzZjk0Mjg1NWNjMGVkZjI5ZTgxZTFlMDcyNGU3NWY1ZGI4YTE1NzViMTY2ZmIyMDIxNzZjJyxcbiAgICBvdXRwdXRzOiBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgJ2FkZHJfdGVzdDFxcW5udnB0cmMzcmVjNjRxMm45amg1NzJuY3U1d3ZkdHQ4dXZnNGczYWo5NnM1ZHd1OW5qNzBtbGFoemdsbTk5Mzl1ZXZ1cHNtajhkY2RxdjI1ZDVuNXI4dnc4c243cHJleScsXG4gICAgICAgIGFtb3VudDogJzc4MjMxMjEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogJ2FkZHJfdGVzdDF2cjhyYWttNjZyY2Z2NGZjeHF5a2c1bGYweXY3bHN5azltdmFweDM2OWpwdnRjZ2ZjdWs3ZicsXG4gICAgICAgIGFtb3VudDogJzEzMDQxNzI5JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBvdXRwdXRBbW91bnQ6ICcyMDg2NDg1MCcsXG4gICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgZmVlOiB7IGZlZTogJzE2NzE3MycgfSxcbiAgICB0eXBlOiAnVHJhbnNmZXInLFxuICAgIGNlcnRpZmljYXRlczogW10sXG4gICAgd2l0aGRyYXdhbHM6IFtdLFxuICAgIHBsZWRnZURldGFpbHM6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcihjb2luTmFtZSwgQWRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIodGNvaW5OYW1lLCBUYWRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4odGNvaW5OYW1lKTtcbiAgICBuZXdUeFByZWJ1aWxkID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UHJlYnVpbGQpO1xuICAgIH07XG4gICAgbmV3VHhQYXJhbXMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQYXJhbXMpO1xuICAgIH07XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihUYWRhKTtcbiAgICBsb2NhbEJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRjb2luTmFtZSk7XG4gICAgbG9jYWxCYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBBZGEnKTtcblxuICAgIGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEFkYSk7XG4gICAgbG9jYWxCYXNlY29pbi5nZXRDaGFpbigpLnNob3VsZC5lcXVhbChjb2luTmFtZSk7XG4gICAgbG9jYWxCYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnQ2FyZGFubyBBREEnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gTWVzc2FnZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJlIHBlcmZvcm1lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKHJhbmRvbUJ5dGVzKDMyKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgYmFzZWNvaW4uc2lnbk1lc3NhZ2Uoa2V5UGFpci5nZXRLZXlzKCksIG1lc3NhZ2VUb1NpZ24pO1xuICAgICAga2V5UGFpci52ZXJpZnlTaWduYXR1cmUobWVzc2FnZVRvU2lnbiwgVWludDhBcnJheS5mcm9tKHNpZ25hdHVyZSkpLnNob3VsZC5lcXVhbHMoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggbWlzc2luZyBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHB1YjogJzc3ODgzMjdjNjk1ZGNhNGIzZTY0OWEwZGI0NWJjM2U3MDNhMmM2NzQyOGZjZTM2MGU2MTgwMGNjNDI0OGY0ZjcnLFxuICAgICAgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKHJhbmRvbUJ5dGVzKDMyKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgYXdhaXQgYmFzZWNvaW4uc2lnbk1lc3NhZ2Uoa2V5UGFpciwgbWVzc2FnZVRvU2lnbikuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2lnbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogcmF3VHgudW5zaWduZWRUeDIsXG4gICAgICAgIH0sXG4gICAgICAgIHB1YnM6IFtwdWJsaWNLZXlzLnB1YktleTFdLFxuICAgICAgICBwcnY6IHByaXZhdGVLZXlzLnBydktleTQsXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZC50eEhleC5zaG91bGQuZXF1YWwocmF3VHguc2lnbmVkVHgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHRyYW5zYWN0aW9uIHdpdGggYW4gaW52YWxpZCBrZXknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4SGV4OiByYXdUeC51bnNpZ25lZFR4MixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YnM6IFtwdWJsaWNLZXlzLnB1YktleTFdLFxuICAgICAgICAgIHBydjogcHJpdmF0ZUtleXMucHJ2S2V5MixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlLm1lc3NhZ2UsICdQcml2YXRlIGtleSBjYW5ub3Qgc2lnbiB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBidWlsZCB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eEhleDogcmF3VHgudW5zaWduZWRUeCxcbiAgICAgICAgICAgIGtleTogYWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJ2OiBhY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG91bGQubm90RXF1YWwoZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdHZW5lcmF0ZSB3YWxsZXQga2V5IHBhaXI6ICcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleSBwYWlyJywgKCkgPT4ge1xuICAgICAgY29uc3Qga3AgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoa3AucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KGtwLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBrZXkgcGFpciBmcm9tIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oJzlkNjFiMTlkZWZmZDVhNjBiYTg0NGFmNDkyZWMyY2M0NDQ0OWM1Njk3YjMyNjkxOTcwM2JhYzAzMWNhZTdmNjAnLCAnaGV4Jyk7XG4gICAgICBjb25zdCBrcCA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoa3AucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KGtwLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB1bnNpZ25lZCB0cmFuc2FjdGlvbiBpbiBoZXggZW5jb2RpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG5cbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHNpZ25lZCB0cmFuc2FjdGlvbiBpbiBoZXggZW5jb2RpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogcmF3VHguc2lnbmVkVHgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcblxuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgdHJhbnNhY3Rpb25zIHdoZW4gaGF2ZSBkaWZmZXJlbnQgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJzlmN2IwNjc1ZGI1OWQxOWI0YmQ5YzhjNzJlYWFiYmE3NWE5ODYzZDAyYjMwMTE1YjhiM2MzY2E1YzIwZjAyNTQnLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnOWY3YjA2NzVkYjU5ZDE5YjRiZDljOGM3MmVhYWJiYTc1YTk4NjNkMDJiMzAxMTViOGIzYzNjYTVjMjBmMDI1NCcsXG4gICAgICAgICAgICBhbW91bnQ6ICcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB2ZXJpZmljYXRpb24gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2Nhbm5vdCBmaW5kIHJlY2lwaWVudCBpbiBleHBlY3RlZCBvdXRwdXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IHdoZW4gaW5wdXQgYHJlY2lwaWVudHNgIGlzIGFic2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHMgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdmFsaWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICB2YWxpZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2ZXJpZnkgd2hlbiB0eEhleCBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50cyA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9ucyB3aGVuIHJlY2lwaWVudHMgaGFzIGV4dHJhIGRhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMuZGF0YSA9ICdkYXRhJztcblxuICAgICAgY29uc3QgdmFsaWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICB2YWxpZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnNvbGlkYXRpb25UeCA9IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICcxYjVjNzljNS1hYjdjLTRmNDctOTEyYi1kZTZhOTVmYjA3NzknLFxuICAgICAgICB3YWxsZXRJZDogJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYicsXG4gICAgICAgIHR4SGV4OlxuICAgICAgICAgICc4NGE0MDA4MTgyNTgyMGRiNDZjN2M3NmVhNTRmZWMyY2EwYTJmOTRiNzdhMjM4OTMxYThkY2UyMzg3Yzk5YTEyYjA4ZGQ4YWFjMjFjNGYwMDAxODE4MjU4MzkwMDQ2MDFmYzAxNmFjMzg1ODA5MTZkMzUyMGJjNzZiNjU5Mjk4MTU2MDA4NzM4ZDM0N2FhOTMxNDJmNDYwMWZjMDE2YWMzODU4MDkxNmQzNTIwYmM3NmI2NTkyOTgxNTYwMDg3MzhkMzQ3YWE5MzE0MmYxYTNiOTg0MzU3MDIxYTAwMDI4NmE5MDMxYTA2MGUzN2VlYTBmNWY2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogMTY1NTQ1LFxuICAgICAgICAgIGZlZVN0cmluZzogJzE2NTU0NScsXG4gICAgICAgIH0sXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIG1pbmVyRmVlOiAnMTY1NTQ1JyxcbiAgICAgICAgICBzcGVuZEFtb3VudDogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgc3BlbmRBbW91bnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvaW5OYW1lOiAndGFkYScsXG4gICAgICAgICAgICAgIGFtb3VudFN0cmluZzogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGF5R29GZWU6ICcwJyxcbiAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcHJxcmxxcGR0cGN0cXkzZDU2anAwcmtrZXZqbnEya3F6cm4zNTY4NDJmM2d0NnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc2pkbWcycycsXG4gICAgICAgICAgICAgIHZhbHVlOiA5OTk4MzQ0NTUsXG4gICAgICAgICAgICAgIHdhbGxldDogJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYicsXG4gICAgICAgICAgICAgIHdhbGxldHM6IFsnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJ10sXG4gICAgICAgICAgICAgIGVudGVycHJpc2U6ICc2MmNjNTliNzI3NDQzYTAwMDcwODkwMzMnLFxuICAgICAgICAgICAgICBlbnRlcnByaXNlczogWyc2MmNjNTliNzI3NDQzYTAwMDcwODkwMzMnXSxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTk4MzQ0NTUnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3RhZGEnLFxuICAgICAgICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgICAgICAgd2FsbGV0VHlwZXM6IFsnaG90J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAxMDAwMDAwMDAwLFxuICAgICAgICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXFsenhmbDd0bGdwOTk5eDRhNzMzNHBjaHljcGtrNzJweWtyc3IzbXJ5bDN5ajZ4cTg3cXo2a3Jza3Fmem1mNHl6NzhkZGplOXhxNHZxeTg4cmY1MDI1bnpzaHN2cGdsOHcnLFxuICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogJzEwMDAwMDAwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHR5cGU6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY29uc29saWRhdGVJZDogJzY4YjlmYzE4NTU4MDA2YWFiNTM3ODU2MTVmZWE3YzI4JyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja2VkV2FsbGV0ID0ge1xuICAgICAgICBjb2luU3BlY2lmaWM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm9vdEFkZHJlc3M6XG4gICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXBycXJscXBkdHBjdHF5M2Q1NmpwMHJra2V2am5xMmtxenJuMzU2ODQyZjNndDZ4cTg3cXo2a3Jza3Fmem1mNHl6NzhkZGplOXhxNHZxeTg4cmY1MDI1bnpzaHNqZG1nMnMnLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiBjb25zb2xpZGF0aW9uVHgsXG4gICAgICAgICAgd2FsbGV0OiBtb2NrZWRXYWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7XG4gICAgICAgICAgICBjb25zb2xpZGF0aW9uVG9CYXNlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzc2VydC5mYWlsKCdUcmFuc2FjdGlvbiBzaG91bGQgcGFzcyB2ZXJpZmljYXRpb24nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgc3BvbnNvcmVkIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb25zb2xpZGF0aW9uVHggPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAnMWI1Yzc5YzUtYWI3Yy00ZjQ3LTkxMmItZGU2YTk1ZmIwNzc5JyxcbiAgICAgICAgd2FsbGV0SWQ6ICc2NGZhMzFhOTRkYjY1YTAwMDdjOTY5MWInLFxuICAgICAgICB0eEhleDpcbiAgICAgICAgICAnODRhNDAwODI4MjU4MjAyMjdmNjVkMjBhYzZlNDk2MDJkNzljNjIzYzUxOTExZWFkODI0MjM1ZTAxZWIyYTFlN2UzM2E3MmYwNzQ3Y2JiMDA4MjU4MjAyMjdmNjVkMjBhYzZlNDk2MDJkNzljNjIzYzUxOTExZWFkODI0MjM1ZTAxZWIyYTFlN2UzM2E3MmYwNzQ3Y2JiMDIwMTgyODI1ODM5MDAyMjA5ODI3MGE1YzE5YzlmYjcwNmRjZTBlN2U0NTY2YjIzNGVjNWYwMDEwNjIzY2Q2M2YxOThhZDIyMDk4MjcwYTVjMTljOWZiNzA2ZGNlMGU3ZTQ1NjZiMjM0ZWM1ZjAwMTA2MjNjZDYzZjE5OGFkMWEwMDk4OTY4MDgyNTgxZDYwY2Y5MGY5ZmIwMmM4OGJhZDNjNTI5NGQ5MDU4NzQ1OGM0ZjE2MGEyZGIyNmJhOGFmM2RhMjU1YjExYTA1ZDQyZmI4MDIxYTAwMDJhNDkxMDMxYTA2ZDhjMDQ4YTBmNWY2JyxcbiAgICAgICAgZmVlSW5mbzoge1xuICAgICAgICAgIGZlZTogMTY1NTQ1LFxuICAgICAgICAgIGZlZVN0cmluZzogJzE2NTU0NScsXG4gICAgICAgIH0sXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIG1pbmVyRmVlOiAnMTY1NTQ1JyxcbiAgICAgICAgICBzcGVuZEFtb3VudDogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgc3BlbmRBbW91bnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvaW5OYW1lOiAndGFkYScsXG4gICAgICAgICAgICAgIGFtb3VudFN0cmluZzogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGF5R29GZWU6ICcwJyxcbiAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcHJxcmxxcGR0cGN0cXkzZDU2anAwcmtrZXZqbnEya3F6cm4zNTY4NDJmM2d0NnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc2pkbWcycycsXG4gICAgICAgICAgICAgIHZhbHVlOiA5OTk4MzQ0NTUsXG4gICAgICAgICAgICAgIHdhbGxldDogJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYicsXG4gICAgICAgICAgICAgIHdhbGxldHM6IFsnNjRmYTMxYTk0ZGI2NWEwMDA3Yzk2OTFiJ10sXG4gICAgICAgICAgICAgIGVudGVycHJpc2U6ICc2MmNjNTliNzI3NDQzYTAwMDcwODkwMzMnLFxuICAgICAgICAgICAgICBlbnRlcnByaXNlczogWyc2MmNjNTliNzI3NDQzYTAwMDcwODkwMzMnXSxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTk4MzQ0NTUnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3RhZGEnLFxuICAgICAgICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgICAgICAgd2FsbGV0VHlwZXM6IFsnaG90J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiAxMDAwMDAwMDAwLFxuICAgICAgICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXFsenhmbDd0bGdwOTk5eDRhNzMzNHBjaHljcGtrNzJweWtyc3IzbXJ5bDN5ajZ4cTg3cXo2a3Jza3Fmem1mNHl6NzhkZGplOXhxNHZxeTg4cmY1MDI1bnpzaHN2cGdsOHcnLFxuICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogJzEwMDAwMDAwMDAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHR5cGU6ICcwJyxcbiAgICAgICAgICBmZWVBZGRyZXNzOiAnYWRkcl90ZXN0MXZyOGVwNzBtcXR5Z2h0ZnUyMjJkanB2OGdreHk3OXMyOWtleGgyOTA4azM5dHZnZTAyZDVqJyxcbiAgICAgICAgfSxcbiAgICAgICAgY29uc29saWRhdGVJZDogJzY4YjlmYzE4NTU4MDA2YWFiNTM3ODU2MTVmZWE3YzI4JyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja2VkV2FsbGV0ID0ge1xuICAgICAgICBjb2luU3BlY2lmaWM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm9vdEFkZHJlc3M6XG4gICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXEzcW5xbnM1aHFlZThhaHFtd3dwZWx5MmU0anhuazk3cXFzdmc3ZHYwY2UzdGZ6cHhwOHBmd3BuajBtd3BrdXVybjdnNG50eWQ4dnR1cXBxYzN1NmNsM256a3N2Z2d1ODInLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7fSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiBjb25zb2xpZGF0aW9uVHgsXG4gICAgICAgICAgd2FsbGV0OiBtb2NrZWRXYWxsZXQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7XG4gICAgICAgICAgICBjb25zb2xpZGF0aW9uVG9CYXNlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzc2VydC5mYWlsKCdUcmFuc2FjdGlvbiBzaG91bGQgcGFzcyB2ZXJpZmljYXRpb24nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIGEgc3Bvb2ZlZCBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2V0IHVwIHdhbGxldCBkYXRhXG4gICAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJyxcbiAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NTAwMDAwMDAwJyxcbiAgICAgICAgICAnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc2MDAwMDAwMDAnLFxuICAgICAgICAgICc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzcwMDAwMDAwMCcsXG4gICAgICAgIF0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHJvb3RBZGRyZXNzOlxuICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcHJxcmxxcGR0cGN0cXkzZDU2anAwcmtrZXZqbnEya3F6cm4zNTY4NDJmM2d0NnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc2pkbWcycycsXG4gICAgICAgIH0sXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICB9O1xuICAgICAgY29uc3QgZmFrZVBydiA9IGVuY3J5cHQoJ3Bhc3N3b3JkJywgJ3BydicpO1xuXG4gICAgICBjb25zdCB3YWxsZXRPYmogPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG4gICAgICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbJ21vY2snXS51cmk7XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5nZXQoJy9hcGkvdjIvdGFkYS9rZXkvNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1MDAwMDAwMDAnKVxuICAgICAgICAucmVwbHkoMjAwLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBmYWtlUHJ2LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAvLyBNb2NrIHRoZSBBUEkgcmVzcG9uc2UgZm9yIGJ1aWxkQWNjb3VudENvbnNvbGlkYXRpb25zXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdCgnL2FwaS92Mi90YWRhL3dhbGxldC81YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMC9jb25zb2xpZGF0ZUFjY291bnQvYnVpbGQnKVxuICAgICAgICAucmVwbHkoMjAwLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHhSZXF1ZXN0SWQ6ICcxYjVjNzljNS1hYjdjLTRmNDctOTEyYi1kZTZhOTVmYjA3NzknLFxuICAgICAgICAgICAgd2FsbGV0SWQ6ICc2NGZhMzFhOTRkYjY1YTAwMDdjOTY5MWInLFxuICAgICAgICAgICAgdHhIZXg6XG4gICAgICAgICAgICAgICc4NGE0MDA4MTgyNTgyMGRiNDZjN2M3NmVhNTRmZWMyY2EwYTJmOTRiNzdhMjM4OTMxYThkY2UyMzg3Yzk5YTEyYjA4ZGQ4YWFjMjFjNGYwMTAxODI4MjU4MWQ2MDMzYzM3OGNlZTQxYjJlMTVhYzg0OGY3ZjZmMWQyZjc4MTU1YWIxMmQ5M2I3MTNkZTg5OGQ4NTVmMWEwMDk4OTY4MDgyNTgzOTAwNDYwMWZjMDE2YWMzODU4MDkxNmQzNTIwYmM3NmI2NTkyOTgxNTYwMDg3MzhkMzQ3YWE5MzE0MmY0NjAxZmMwMTZhYzM4NTgwOTE2ZDM1MjBiYzc2YjY1OTI5ODE1NjAwODczOGQzNDdhYTkzMTQyZjFiMDAwMDAwMDIxN2FjZWJlOTAyMWEwMDAyOGRiNTAzMWEwNjBlM2I0MWEwZjVmNicsXG4gICAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICAgIGZlZTogMTY1NTQ1LFxuICAgICAgICAgICAgICBmZWVTdHJpbmc6ICcxNjU1NDUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgICAgICBtaW5lckZlZTogJzE2NTU0NScsXG4gICAgICAgICAgICAgIHNwZW5kQW1vdW50OiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICAgICAgc3BlbmRBbW91bnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY29pbk5hbWU6ICd0YWRhJyxcbiAgICAgICAgICAgICAgICAgIGFtb3VudFN0cmluZzogJzk5OTgzNDQ1NScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcGF5R29GZWU6ICcwJyxcbiAgICAgICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgICAgICdhZGRyX3Rlc3QxcXBycXJscXBkdHBjdHF5M2Q1NmpwMHJra2V2am5xMmtxenJuMzU2ODQyZjNndDZ4cTg3cXo2a3Jza3Fmem1mNHl6NzhkZGplOXhxNHZxeTg4cmY1MDI1bnpzaHNqZG1nMnMnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IDk5OTgzNDQ1NSxcbiAgICAgICAgICAgICAgICAgIHdhbGxldDogJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYicsXG4gICAgICAgICAgICAgICAgICB3YWxsZXRzOiBbJzY0ZmEzMWE5NGRiNjVhMDAwN2M5NjkxYiddLFxuICAgICAgICAgICAgICAgICAgZW50ZXJwcmlzZTogJzYyY2M1OWI3Mjc0NDNhMDAwNzA4OTAzMycsXG4gICAgICAgICAgICAgICAgICBlbnRlcnByaXNlczogWyc2MmNjNTliNzI3NDQzYTAwMDcwODkwMzMnXSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiAnOTk5ODM0NDU1JyxcbiAgICAgICAgICAgICAgICAgIGNvaW5OYW1lOiAndGFkYScsXG4gICAgICAgICAgICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgICAgICAgICAgIHdhbGxldFR5cGVzOiBbJ2hvdCddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAxMDAwMDAwMDAwLFxuICAgICAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcWx6eGZsN3RsZ3A5OTl4NGE3MzM0cGNoeWNwa2s3MnB5a3JzcjNtcnlsM3lqNnhxODdxejZrcnNrcWZ6bWY0eXo3OGRkamU5eHE0dnF5ODhyZjUwMjVuenNoc3ZwZ2w4dycsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogJzEwMDAwMDAwMDAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHR5cGU6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNjhiOWZjMTg1NTgwMDZhYWI1Mzc4NTYxNWZlYTdjMjgnLFxuICAgICAgICAgICAgY29pbjogJ3RhZGEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiB0byB0ZXN0XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHdhbGxldE9iai5zZW5kQWNjb3VudENvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzd29yZCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiAndHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIGFkZHJlc3MnLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhbiB1bnNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiByYXdUeC51bnNpZ25lZFR4MixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coZXhwbGFpbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh0cmFuc2FjdGlvbkV4cGxhbmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBleHBsYWluIHRyYW5zYWN0aW9uIHdpdGggbWlzc2luZyBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICAgIHR4SGV4OiAnaW52YWxpZFR4SGV4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgUmF3IFRyYW5zYWN0aW9ucycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIHN0YWtpbmcgcGxlZGdlIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oYmFzZWNvaW4pO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4LnVuc2lnbmVkTmV3UGxlZGdlVHgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2Ugc3Rha2luZyBhY3RpdmF0aW9uIHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oYmFzZWNvaW4pO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4LnVuc2lnbmVkU3Rha2luZ0FjdGl2ZVR4KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2Ugc3Rha2luZyBkZWFjdGl2YXRpb24gdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgudW5zaWduZWRTdGFraW5nRGVhY3RpdmVUeCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BhcnNlIFRyYW5zYWN0aW9uczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhbiB1bnNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogcmF3VHgudW5zaWduZWRUeDIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcGFyc2VkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh0cmFuc2FjdGlvbkV4cGxhbmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYSBzaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHJhd1R4LnNpZ25lZFR4MixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHRyYW5zYWN0aW9uRXhwbGFuYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHBhcnNlIGEgc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdoZW4gZXhwbGFpblRyYW5zYWN0aW9uIHJlc3BvbnNlIGlzIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKEFkYS5wcm90b3R5cGUsICdleHBsYWluVHJhbnNhY3Rpb24nKTtcbiAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eEhleDogcmF3VHguc2lnbmVkVHgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb24nKTtcbiAgICAgIHN0dWIucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbnM6JywgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3RBZGRyID0gYWRkcmVzcy5hZGRyZXNzMjtcbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGxldCBjYWxsQmFjazogc2lub24uU2lub25TdHViO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihBZGEucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBrZXlvZiBBZGEpO1xuICAgICAgY2FsbEJhY2tcbiAgICAgICAgLndpdGhBcmdzKCdhZGRyZXNzX2luZm8nLCB7XG4gICAgICAgICAgX2FkZHJlc3NlczogW3dyd1VzZXIud2FsbGV0QWRkcmVzczBdLFxuICAgICAgICB9KVxuICAgICAgICAucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMuYWRkcmVzc0luZm9SZXNwb25zZS5PbmVVVFhPKTtcbiAgICAgIGNhbGxCYWNrLndpdGhBcmdzKCd0aXAnKS5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy50aXBJbmZvUmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0YWtlIE9WQyBvdXRwdXQgYW5kIGdlbmVyYXRlIGEgc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gb3ZjUmVzcG9uc2U7XG4gICAgICBjb25zdCByZWNvdmVyeVR4biA9IGF3YWl0IGJhc2Vjb2luLmNyZWF0ZUJyb2FkY2FzdGFibGVTd2VlcFRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMF0uc2VyaWFsaXplZFR4LnNob3VsZC5lcXVhbChcbiAgICAgICAgJzg0YTQwMDgxODI1ODIwNGJkMGY5OTFjMTUzMmNmZmUzMWQ0YTEwZGI0OTJiNDMxNzVlYzMyNjc2NWI2YjI5Y2VlZTU5OGRmMmI2MWY0NzAwMDE4MTgyNTgzOTAwODczNzllYmM1NTMzZWJlNjIxOTYzYzkxNWMzY2JjNWYwODUzN2ZjZGNhNGFmOGY4YWUwOGVkNGM4NzM3OWViYzU1MzNlYmU2MjE5NjNjOTE1YzNjYmM1ZjA4NTM3ZmNkY2E0YWY4ZjhhZTA4ZWQ0YzFhMDVmMzU5ZmYwMjFhMDAwMjg3MDEwMzFhMDI0OTcyZTFhMTAwODE4MjU4MjBiYmFjYjEzNDMxYjk5MjA4ZTZlOGNkYmY3MTAxNDdmZWFmMDZhMzlkNzE1NjVlNjBiNDExY2U5ZTRmYTNmMTM3NTg0MDAxYTRhYjgyMzY1NjNmNjlmZjMwOWU1Nzg2ZThmMzljNjI5ZWQ1NzY3NmM2OTIxNTljYjJlMDQ5NGM5ZTY2MzM1NTM4NGMxM2M3NDlkMDRjMTdhODBiYTJhNDVjYzEyN2RmNDgwZmM2NGE0MzE5OWE3NzJmMTFhY2Q1YjE0YTBmZjVmNidcbiAgICAgICk7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMF0uc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHJlY292ZXJ5VHhuLmxhc3RTY2FuSW5kZXguc2hvdWxkLmVxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0YWtlIGNvbnNvbGlkYXRpb24gT1ZDIG91dHB1dCBhbmQgZ2VuZXJhdGUgbXVsdGlwbGUgc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG92Y1Jlc3BvbnNlMjtcbiAgICAgIGNvbnN0IHJlY292ZXJ5VHhuID0gYXdhaXQgYmFzZWNvaW4uY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zZXJpYWxpemVkVHguc2hvdWxkLmVxdWFsKFxuICAgICAgICAnODRhNDAwODE4MjU4MjAzZTYyZTVlZThiMTIwMTJjNGI5NDlmOTc3N2I3MjE2NTIzOWJiMjE0NmFlOGIwNzhiNGQxYzVjYThkMzE2OGUzMDAwMTgxODI1ODM5MDBiYWY1NWViY2Y5YWRhMWI4ZWNiMTY0MDg4MGZiYTU0ZDI4MTc2OTBmMTJiM2ExMDZhZmQwODAwNGJhZjU1ZWJjZjlhZGExYjhlY2IxNjQwODgwZmJhNTRkMjgxNzY5MGYxMmIzYTEwNmFmZDA4MDA0MWEwMDk2MGY3ZjAyMWEwMDAyODcwMTAzMWEwMjUwZjdlYWExMDA4MTgyNTgyMDUwMGUwZDcyNWE1YmEzYTMwNmRhMzUwM2RmZTU3YjhhMTQwNjhhMDliNjFiMzZlYzA2OGZjZjhjZjVjMzkxZGU1ODQwYzgzNmNlNmQzMjYyZDU2NTQ3MDZlYTA2NzIxNTIyZDNiNzVmNmQ1NDUyNDUwNDdhN2JlNzQ2MzYyOWQ4OGIzZjQyNjRiOTk1ZjU5MWRmNTJiZGZmY2YwOWRhMWU2YWI5ZTg4ZGUzNzE0YzZlMmVjMTk2MTc4NmNmMWM1ODZhMDdmNWY2J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzFdLnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICc4NGE0MDA4MTgyNTgyMDI5YzEwYWNmMGUwOGY5NTIzMzI1Yzg4MjQzNTY1YWY2YjMyMjc0OTkyMTg5YzExNTM5MDNjNDEwYmVkN2MyYzcwMDAxODE4MjU4MzkwMGJhZjU1ZWJjZjlhZGExYjhlY2IxNjQwODgwZmJhNTRkMjgxNzY5MGYxMmIzYTEwNmFmZDA4MDA0YmFmNTVlYmNmOWFkYTFiOGVjYjE2NDA4ODBmYmE1NGQyODE3NjkwZjEyYjNhMTA2YWZkMDgwMDQxYTAwOTYwZjdmMDIxYTAwMDI4NzAxMDMxYTAyNTBmN2VhYTEwMDgxODI1ODIwNjI3NzBiMjI0YmQzMTRiYzUyNmZiZDZhOTRlOTA4MmZiNjQ1OGM0MjVlNmUwOWJhZDc0MDA0ZGQ4OTdlOTYyMzU4NDAzODQyNTQ0ZjJmZjI4YmUwNTRlYjdjNzk5N2JjMzAzYjFlMjUxZWIxM2E0MTgwMmM4MjMxOGU1OTJiYjI0ZWFhMzE5N2M0NTBlNzk3Y2M4NTU5ZjAzNTZjZDVjZGQxYWI1ZWI4MGM1MTczZTM0ZTllMWQxNzM3NTMzYTg5NTIwY2Y1ZjYnXG4gICAgICApO1xuICAgICAgcmVjb3ZlcnlUeG4udHJhbnNhY3Rpb25zWzFdLnNjYW5JbmRleC5zaG91bGQuZXF1YWwoMik7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMl0uc2VyaWFsaXplZFR4LnNob3VsZC5lcXVhbChcbiAgICAgICAgJzg0YTQwMDgxODI1ODIwZGQxNDBmMTMzZDg2NWUxYmI1NjQyZTcwOGZlNjg1YmY3NjAxZDcxZDBjOTk1MTFlNWQ1NTJkYTdmOGJkMTBmZjAwMDE4MTgyNTgzOTAwYmFmNTVlYmNmOWFkYTFiOGVjYjE2NDA4ODBmYmE1NGQyODE3NjkwZjEyYjNhMTA2YWZkMDgwMDRiYWY1NWViY2Y5YWRhMWI4ZWNiMTY0MDg4MGZiYTU0ZDI4MTc2OTBmMTJiM2ExMDZhZmQwODAwNDFhMDA5NjBmN2YwMjFhMDAwMjg3MDEwMzFhMDI1MGY3ZWFhMTAwODE4MjU4MjA1M2I0YmI3NGFhMzhhZGQ0NThkYWZjODE1M2YwYWE4MjY2YWNhZDU5MzIyYjg3N2NhOWMyM2M1ZDM4NzM3NzlkNTg0MGU5NGNlNzg5Njk1N2QwOTRjNmJhZmJmMmVjMTBkZjVlYmIwZjFkMmEyN2E3ZTMxZjJkNDVjNTMxZmI2ODdlZGQ2YzRkMzNmOGU5Yjk5Yzc2OTJiNmZhYzZkODM5OWJkOGZkNDc2NDFiYWFlOWJiYjY5ZjUxOGQ0MmFkMTE3MTBhZjVmNidcbiAgICAgICk7XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMl0uc2NhbkluZGV4LnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1szXS5zZXJpYWxpemVkVHguc2hvdWxkLmVxdWFsKFxuICAgICAgICAnODRhNDAwODE4MjU4MjAxNWExZDZkYjVkM2Y1OTJhYTFjZGExODViNjM1OWNhMGUyOTIxYzNjNTE5NTlmNjQyMjJhNmI3ZDk1ZDMzOTIzMDAwMTgxODI1ODM5MDBiYWY1NWViY2Y5YWRhMWI4ZWNiMTY0MDg4MGZiYTU0ZDI4MTc2OTBmMTJiM2ExMDZhZmQwODAwNGJhZjU1ZWJjZjlhZGExYjhlY2IxNjQwODgwZmJhNTRkMjgxNzY5MGYxMmIzYTEwNmFmZDA4MDA0MWEwMDk2MGY3ZjAyMWEwMDAyODcwMTAzMWEwMjUwZjdlYWExMDA4MTgyNTgyMDYwMGY4NmNhMjJkNjcwZjBhOTkwYWRlNGU4ODJjMDVlNjU0MzQzMjYzNDk0NzM1YTMxNTE3ZGUwODE5Njc2NzM1ODQwZmUxOTlmOGUyNDdhNGNmYWJmZWI0ZjljYjU3NGFhMzU3MzlhMGFhOTg4NjBlZTBhODVkNzIwYzRhYjRmZWNmYWM3YjQ1MDRkZjMxMGIzZTRiZWEwNDcxMWY2MDY1MmQ0YThjZjVlYjQxODE3MjkzYjhkMjk5NzdmZTY5NWY3MDRmNWY2J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1szXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgcmVjb3ZlcnlUeG4ubGFzdFNjYW5JbmRleC5zaG91bGQuZXF1YWwoMjApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIGEgdHhuIGZvciBub24tYml0Z28gcmVjb3ZlcmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiB3cndVc2VyLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogd3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB3cndVc2VyLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RBZGRyLFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2VyaWFsaXplZFR4Jyk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRUd2ljZShiYXNlY29pbi5nZXREYXRhRnJvbU5vZGUpO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmVzLnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGNvbnN0IGZlZSA9IE51bWJlcih0eC5leHBsYWluVHJhbnNhY3Rpb24oKS5mZWUuZmVlKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaW5kZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ub3V0cHV0c1swXS5hZGRyZXNzLCBkZXN0QWRkcik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKE51bWJlcih0eEpzb24ub3V0cHV0c1swXS5hbW91bnQpICsgZmVlLCB0ZXN0bmV0VVRYTy5VVFhPXzEudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWNvdmVyIGEgdHhuIGZvciB1bnNpZ25lZCBzd2VlcCByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0QWRkcixcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2VyaWFsaXplZFR4Jyk7XG4gICAgICBzYW5kQm94LmFzc2VydC5jYWxsZWRUd2ljZShiYXNlY29pbi5nZXREYXRhRnJvbU5vZGUpO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmVzLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgZmVlID0gTnVtYmVyKHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpLmZlZS5mZWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faW5kZXgsIHRlc3RuZXRVVFhPLlVUWE9fMS50eF9pbmRleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5vdXRwdXRzWzBdLmFkZHJlc3MsIGRlc3RBZGRyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoTnVtYmVyKHR4SnNvbi5vdXRwdXRzWzBdLmFtb3VudCkgKyBmZWUsIHRlc3RuZXRVVFhPLlVUWE9fMS52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgQURBIHBsdXMgdG9rZW4gVVRYT3MgLSB0b2tlbiBhbmQgQURBIGJvdGggYXBwZWFyIGluIG91dHB1dHMgKHNpZ25lZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHsgX2FkZHJlc3NlczogW3dyd1VzZXIud2FsbGV0QWRkcmVzczBdIH0pXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLkFEQUFuZFRva2VuVVRYT3MpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogd3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogd3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0QWRkcixcbiAgICAgIH0pO1xuICAgICAgcmVzLnNob3VsZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgIHJlcy5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmVzLnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgdHhKc29uLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMV0udHJhbnNhY3Rpb25faWQsIHRlc3RuZXRVVFhPLlVUWE9fVE9LRU4udHhfaGFzaCk7XG5cbiAgICAgIC8vIGV4cGVjdCAyIG91dHB1dHM6IG9uZSB0b2tlbiBvdXRwdXQgKyBvbmUgQURBIGNoYW5nZSBvdXRwdXQsIGJvdGggYXQgZGVzdEFkZHJcbiAgICAgIHR4SnNvbi5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IHRva2VuUG9saWN5SWQgPSAnMjUzM2NjYTZlYjQyMDc2ZTE0NGU5ZjI3NzJjMzkwZGVjZTlmY2UxNzNiYzM4YzcyMjk0YjM5MjQnO1xuICAgICAgY29uc3QgdG9rZW5FbmNvZGVkQXNzZXROYW1lID0gJzU3NDE1NDQ1NTInO1xuICAgICAgY29uc3QgdG9rZW5RdWFudGl0eSA9ICcxMTEnO1xuICAgICAgY29uc3QgbWluQURBRm9yVG9rZW4gPSAxNTAwMDAwO1xuXG4gICAgICBjb25zdCB0b2tlbk91dHB1dCA9IHR4SnNvbi5vdXRwdXRzLmZpbmQoKG8pID0+IG8ubXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCk7XG4gICAgICBzaG91bGQuZXhpc3QodG9rZW5PdXRwdXQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0b2tlbk91dHB1dCEuYWRkcmVzcywgZGVzdEFkZHIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChOdW1iZXIodG9rZW5PdXRwdXQhLmFtb3VudCksIG1pbkFEQUZvclRva2VuKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUG9saWN5SWQgPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20odG9rZW5Qb2xpY3lJZCwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQXNzZXROYW1lID0gQ2FyZGFub1dhc20uQXNzZXROYW1lLm5ldyhCdWZmZXIuZnJvbSh0b2tlbkVuY29kZWRBc3NldE5hbWUsICdoZXgnKSk7XG4gICAgICAodG9rZW5PdXRwdXQhLm11bHRpQXNzZXRzIGFzIENhcmRhbm9XYXNtLk11bHRpQXNzZXQpXG4gICAgICAgIC5nZXRfYXNzZXQoZXhwZWN0ZWRQb2xpY3lJZCwgZXhwZWN0ZWRBc3NldE5hbWUpXG4gICAgICAgIC50b19zdHIoKVxuICAgICAgICAuc2hvdWxkLmVxdWFsKHRva2VuUXVhbnRpdHkpO1xuXG4gICAgICBjb25zdCBhZGFPdXRwdXQgPSB0eEpzb24ub3V0cHV0cy5maW5kKChvKSA9PiBvLm11bHRpQXNzZXRzID09PSB1bmRlZmluZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGFkYU91dHB1dCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGFkYU91dHB1dCEuYWRkcmVzcywgZGVzdEFkZHIpO1xuICAgICAgY29uc3QgZmVlID0gTnVtYmVyKHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpLmZlZS5mZWUpO1xuICAgICAgY29uc3QgdG90YWxCYWxhbmNlID0gdGVzdG5ldFVUWE8uVVRYT18xLnZhbHVlICsgdGVzdG5ldFVUWE8uVVRYT19UT0tFTi52YWx1ZTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoTnVtYmVyKGFkYU91dHB1dCEuYW1vdW50KSwgdG90YWxCYWxhbmNlIC0gbWluQURBRm9yVG9rZW4gLSBmZWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbnMgTXVsdGlwbGUgVVRYTzonLCAoKSA9PiB7XG4gICAgY29uc3QgZGVzdEFkZHIgPSBhZGRyZXNzLmFkZHJlc3MyO1xuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEFkYS5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGtleW9mIEFkYSk7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHtcbiAgICAgICAgICBfYWRkcmVzc2VzOiBbd3J3VXNlci53YWxsZXRBZGRyZXNzMF0sXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLlR3b1VUWE8pO1xuICAgICAgY2FsbEJhY2sud2l0aEFyZ3MoJ3RpcCcpLnJlc29sdmVzKGVuZHBvaW50UmVzcG9uc2VzLnRpcEluZm9SZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgYSB0eG4gZm9yIG5vbi1iaXRnbyByZWNvdmVyaWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiB3cndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29LZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdEFkZHIsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZFR3aWNlKGJhc2Vjb2luLmdldERhdGFGcm9tTm9kZSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKGJhc2Vjb2luKTtcbiAgICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyZXMuc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgZmVlID0gTnVtYmVyKHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpLmZlZS5mZWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faW5kZXgsIHRlc3RuZXRVVFhPLlVUWE9fMS50eF9pbmRleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMV0udHJhbnNhY3Rpb25faWQsIHRlc3RuZXRVVFhPLlVUWE9fMi50eF9oYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1sxXS50cmFuc2FjdGlvbl9pbmRleCwgdGVzdG5ldFVUWE8uVVRYT18yLnR4X2luZGV4KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm91dHB1dHNbMF0uYWRkcmVzcywgZGVzdEFkZHIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChOdW1iZXIodHhKc29uLm91dHB1dHNbMF0uYW1vdW50KSArIGZlZSwgdGVzdG5ldFVUWE8uVVRYT18xLnZhbHVlICsgdGVzdG5ldFVUWE8uVVRYT18yLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBhIHR4biBmb3IgdW5zaWduZWQgc3dlZXAgcmVjb3ZlcmllcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICBiaXRnb0tleTogd3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdEFkZHIsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICByZXMudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgc2FuZEJveC5hc3NlcnQuY2FsbGVkVHdpY2UoYmFzZWNvaW4uZ2V0RGF0YUZyb21Ob2RlKTtcblxuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oYmFzZWNvaW4pO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJlcy50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGNvbnN0IGZlZSA9IE51bWJlcih0eC5leHBsYWluVHJhbnNhY3Rpb24oKS5mZWUuZmVlKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmlucHV0c1swXS50cmFuc2FjdGlvbl9pZCwgdGVzdG5ldFVUWE8uVVRYT18xLnR4X2hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaW5kZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uaW5wdXRzWzFdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzIudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5pbnB1dHNbMV0udHJhbnNhY3Rpb25faW5kZXgsIHRlc3RuZXRVVFhPLlVUWE9fMi50eF9pbmRleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5vdXRwdXRzWzBdLmFkZHJlc3MsIGRlc3RBZGRyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoTnVtYmVyKHR4SnNvbi5vdXRwdXRzWzBdLmFtb3VudCkgKyBmZWUsIHRlc3RuZXRVVFhPLlVUWE9fMS52YWx1ZSArIHRlc3RuZXRVVFhPLlVUWE9fMi52YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBDb25zb2xpZGF0aW9uIFJlY292ZXJpZXM6JywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VBZGRyID0gY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0QWRkcmVzczA7XG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FsbEJhY2sgPSBzYW5kQm94LnN0dWIoQWRhLnByb3RvdHlwZSwgJ2dldERhdGFGcm9tTm9kZScgYXMga2V5b2YgQWRhKTtcbiAgICAgIGNhbGxCYWNrXG4gICAgICAgIC53aXRoQXJncygnYWRkcmVzc19pbmZvJywge1xuICAgICAgICAgIF9hZGRyZXNzZXM6IFtjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRBZGRyZXNzMV0sXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLlplcm9VVFhPKTtcbiAgICAgIGNhbGxCYWNrXG4gICAgICAgIC53aXRoQXJncygnYWRkcmVzc19pbmZvJywge1xuICAgICAgICAgIF9hZGRyZXNzZXM6IFtjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRBZGRyZXNzMl0sXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLk9uZVVUWE8pO1xuICAgICAgY2FsbEJhY2tcbiAgICAgICAgLndpdGhBcmdzKCdhZGRyZXNzX2luZm8nLCB7XG4gICAgICAgICAgX2FkZHJlc3NlczogW2NvbnNvbGlkYXRpb25XcndVc2VyLndhbGxldEFkZHJlc3MzXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnJlc29sdmVzKGVuZHBvaW50UmVzcG9uc2VzLmFkZHJlc3NJbmZvUmVzcG9uc2UuT25lVVRYTzIpO1xuICAgICAgY2FsbEJhY2sud2l0aEFyZ3MoJ3RpcCcpLnJlc29sdmVzKGVuZHBvaW50UmVzcG9uc2VzLnRpcEluZm9SZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHNpZ25lZCBjb25zb2xpZGF0aW9uIHJlY292ZXJpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiA0LFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnRyYW5zYWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgcmVzLmxhc3RTY2FuSW5kZXguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgY29uc3QgdHhuMSA9IHJlcy50cmFuc2FjdGlvbnNbMF07XG4gICAgICBjb25zdCB0eDEgPSBuZXcgVHJhbnNhY3Rpb24oYmFzZWNvaW4pO1xuICAgICAgdHgxLmZyb21SYXdUcmFuc2FjdGlvbih0eG4xLnNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCB0eEpzb24xID0gdHgxLnRvSnNvbigpO1xuICAgICAgY29uc3QgZmVlMSA9IE51bWJlcih0eDEuZXhwbGFpblRyYW5zYWN0aW9uKCkuZmVlLmZlZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbjEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2lkLCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbjEuaW5wdXRzWzBdLnRyYW5zYWN0aW9uX2luZGV4LCB0ZXN0bmV0VVRYTy5VVFhPXzEudHhfaW5kZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24xLm91dHB1dHNbMF0uYWRkcmVzcywgYmFzZUFkZHIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChOdW1iZXIodHhKc29uMS5vdXRwdXRzWzBdLmFtb3VudCkgKyBmZWUxLCB0ZXN0bmV0VVRYTy5VVFhPXzEudmFsdWUpO1xuXG4gICAgICBjb25zdCB0eG4yID0gcmVzLnRyYW5zYWN0aW9uc1sxXTtcbiAgICAgIGNvbnN0IHR4MiA9IG5ldyBUcmFuc2FjdGlvbihiYXNlY29pbik7XG4gICAgICB0eDIuZnJvbVJhd1RyYW5zYWN0aW9uKHR4bjIuc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IHR4SnNvbjIgPSB0eDIudG9Kc29uKCk7XG4gICAgICBjb25zdCBmZWUyID0gTnVtYmVyKHR4Mi5leHBsYWluVHJhbnNhY3Rpb24oKS5mZWUuZmVlKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uMi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faWQsIHRlc3RuZXRVVFhPLlVUWE9fMi50eF9oYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uMi5pbnB1dHNbMF0udHJhbnNhY3Rpb25faW5kZXgsIHRlc3RuZXRVVFhPLlVUWE9fMi50eF9pbmRleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbjIub3V0cHV0c1swXS5hZGRyZXNzLCBiYXNlQWRkcik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKE51bWJlcih0eEpzb24yLm91dHB1dHNbMF0uYW1vdW50KSArIGZlZTIsIHRlc3RuZXRVVFhPLlVUWE9fMi52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNraXAgYnVpbGRpbmcgY29uc29saWRhdGUgdHJhbnNhY3Rpb24gaWYgYmFsYW5jZSBpcyBlcXVhbCB0byB6ZXJvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogY29uc29saWRhdGlvbldyd1VzZXIuYml0Z29LZXksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogY29uc29saWRhdGlvbldyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDIsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdEaWQgbm90IGZpbmQgYW4gYWRkcmVzcyB3aXRoIGZ1bmRzIHRvIHJlY292ZXIuJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHN0YXJ0aW5nU2NhbkluZGV4IGlzIG5vdCBnZSB0byAxJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgICAgdXNlcktleTogY29uc29saWRhdGlvbldyd1VzZXIudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogY29uc29saWRhdGlvbldyd1VzZXIuYml0Z29LZXksXG4gICAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IC0xLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnSW52YWxpZCBzdGFydGluZyBvciBlbmRpbmcgaW5kZXggdG8gc2NhbiBmb3IgYWRkcmVzc2VzLiBzdGFydGluZ1NjYW5JbmRleDogLTEsIGVuZGluZ1NjYW5JbmRleDogMTkuJ1xuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBzY2FuIGZhY3RvciBpcyB0b28gaGlnaCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICAgIHVzZXJLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICAgIGVuZGluZ1NjYW5JbmRleDogMzAwLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnSW52YWxpZCBzdGFydGluZyBvciBlbmRpbmcgaW5kZXggdG8gc2NhbiBmb3IgYWRkcmVzc2VzLiBzdGFydGluZ1NjYW5JbmRleDogMSwgZW5kaW5nU2NhbkluZGV4OiAzMDAuJ1xuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCB1bnNpZ25lZCBjb25zb2xpZGF0aW9uIHJlY292ZXJpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiA0LFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnRyYW5zYWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBhbGwgYWRkcmVzc2VzIGhhdmUgYmFsYW5jZSBsZXNzIHRoYW4gMSBBREEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzYW5kQm94LnJlc3RvcmUoKTtcbiAgICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEFkYS5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGtleW9mIEFkYSk7XG4gICAgICBjYWxsQmFjay53aXRoQXJncygnYWRkcmVzc19pbmZvJywgc2lub24ubWF0Y2guaGFzKCdfYWRkcmVzc2VzJykpLnJlc29sdmVzKHtcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIGJvZHk6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYWxhbmNlOiA1MDAwMDAsXG4gICAgICAgICAgICB1dHhvX3NldDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHhfaGFzaDogJzhkZjhkNDEyMDc5ODBmOWUyMWRlNjk4YmQ1ZDZjMzk1YzM5ZTQyMGY3ZGUyN2Y4NTM5MDUyZGQzNGUzYTI4ZDYnLFxuICAgICAgICAgICAgICAgIHR4X2luZGV4OiAwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiA1MDAwMDAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIGNhbGxCYWNrLndpdGhBcmdzKCd0aXAnKS5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy50aXBJbmZvUmVzcG9uc2UpO1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgICB1c2VyS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogY29uc29saWRhdGlvbldyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci5iaXRnb0tleSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICAgIGVuZGluZ1NjYW5JbmRleDogNCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0RpZCBub3QgZmluZCBhbiBhZGRyZXNzIHdpdGggZnVuZHMgdG8gcmVjb3Zlci4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZXZlbiBpZiBzaW5nbGUgYWRkcmVzcyBoYXMgbm8gZnVuZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiA0LFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnRyYW5zYWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBldmVuIGlmIHNpbmdsZSBhZGRyZXNzIGhhcyBpbnN1ZmZpY2llbnQgZnVuZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBjb25zb2xpZGF0aW9uV3J3VXNlci51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IGNvbnNvbGlkYXRpb25XcndVc2VyLmJpdGdvS2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBjb25zb2xpZGF0aW9uV3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiA0LFxuICAgICAgfSk7XG4gICAgICByZXMuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgcmVzLnRyYW5zYWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlciBUcmFuc2FjdGlvbnMgRmFpbHVyZTonLCAoKSA9PiB7XG4gICAgY29uc3QgZGVzdEFkZHIgPSBhZGRyZXNzLmFkZHJlc3MyO1xuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcmVjb3ZlciBkdWUgdG8gbm90IGZpbmRpbmcgYW4gYWRkcmVzcyB3aXRoIGZ1bmRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2FsbEJhY2sgPSBzYW5kQm94LnN0dWIoQWRhLnByb3RvdHlwZSwgJ2dldERhdGFGcm9tTm9kZScgYXMga2V5b2YgQWRhKTtcbiAgICAgIGNhbGxCYWNrXG4gICAgICAgIC53aXRoQXJncygnYWRkcmVzc19pbmZvJywgc2lub24ubWF0Y2guaGFzKCdfYWRkcmVzc2VzJykpXG4gICAgICAgIC5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy5hZGRyZXNzSW5mb1Jlc3BvbnNlLlplcm9VVFhPKTtcbiAgICAgIGNhbGxCYWNrLndpdGhBcmdzKCd0aXAnKS5yZXNvbHZlcyhlbmRwb2ludFJlc3BvbnNlcy50aXBJbmZvUmVzcG9uc2UpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IHdyd1VzZXIudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IHdyd1VzZXIuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiB3cndVc2VyLmJpdGdvS2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHdyd1VzZXIud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0QWRkcixcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ0RpZCBub3QgZmluZCBhZGRyZXNzIHdpdGggZnVuZHMgdG8gcmVjb3Zlci4nKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZE9uY2UoYmFzZWNvaW4uZ2V0RGF0YUZyb21Ob2RlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byByZWNvdmVyIGR1ZSB0byBub3QgaGF2aW5nIG1vcmUgdGhhbiAxIEFEQSBpbiBmdW5kcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEFkYS5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGtleW9mIEFkYSk7XG4gICAgICBjYWxsQmFja1xuICAgICAgICAud2l0aEFyZ3MoJ2FkZHJlc3NfaW5mbycsIHNpbm9uLm1hdGNoLmhhcygnX2FkZHJlc3NlcycpKVxuICAgICAgICAucmVzb2x2ZXMoZW5kcG9pbnRSZXNwb25zZXMuYWRkcmVzc0luZm9SZXNwb25zZS5PbmVTbWFsbFVUWE8pO1xuICAgICAgY2FsbEJhY2sud2l0aEFyZ3MoJ3RpcCcpLnJlc29sdmVzKGVuZHBvaW50UmVzcG9uc2VzLnRpcEluZm9SZXNwb25zZSk7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleTogd3J3VXNlci51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogd3J3VXNlci5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IHdyd1VzZXIuYml0Z29LZXksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogd3J3VXNlci53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RBZGRyLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aChcbiAgICAgICAgICAnSW5zdWZmaWNpZW50IGZ1bmRzIHRvIHJlY292ZXIsIG1pbmltdW0gcmVxdWlyZWQgaXMgMSBBREEgcGx1cyBmZWVzLCBnb3QgODM0NDU1IGZlZXM6IDE2NTU0NSdcbiAgICAgICAgKTtcbiAgICAgIHNhbmRCb3guYXNzZXJ0LmNhbGxlZFR3aWNlKGJhc2Vjb2luLmdldERhdGFGcm9tTm9kZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgd2FsbGV0IGFkZHJlc3MgKGlzV2FsbGV0QWRkcmVzcyk6JywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbW1vbktleWNoYWluID1cbiAgICAgICdlZDMxMmQwZGI0NjE1Njg4MjE5YzQzMjMxZWI0Yjk4ZDU4ODNjMGI0NGJjZmVmMTk1NjI5MDU1NTk5NWFkNjhlZjdjMjI5MTdiNGE4YjY5MTgzODY0YjgzY2M3MDI4NjU1Y2Q3YTcwZWY3NmQ2OTQ4ZDgwOWExNTA1MDA1NDg0MCc7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHdhbGxldCBhZGRyZXNzIGF0IGluZGV4IDAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzMnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgICAgJ2FkZHJfdGVzdDFxenZtYXptcGdmaGp5cHB3bHN3Mjl6amp3YXpjc2ZrNjJ6OXp2NXZzdjI0cDB3eWVoNjlrenNuMHlnenphbHF1NTI5OXlhNjkzcW5kNTV5MnllZ2VxYzQyejd1cTBnZTJwcSc7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0pO1xuXG4gICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgYW4gYWRkcmVzcyB3aXRoIHdyb25nIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAndXNlcicgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzInLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICczJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgJ2FkZHJfdGVzdDFxenZtYXptcGdmaGp5cHB3bHN3Mjl6amp3YXpjc2ZrNjJ6OXp2NXZzdjI0cDB3eWVoNjlrenNuMHlnenphbHF1NTI5OXlhNjkzcW5kNTV5MnllZ2VxYzQyejd1cTBnZTJwcScsXG4gICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDIsXG4gICAgICB9KTtcblxuICAgICAgaXNWYWxpZC5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHJhbmRvbSBhZGRyZXNzIG5vdCBmcm9tIHdhbGxldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcyJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIFVzZSBhIHJhbmRvbSB2YWxpZCBBREEgYWRkcmVzcyBub3QgZnJvbSB0aGlzIHdhbGxldFxuICAgICAgY29uc3QgcmFuZG9tQWRkcmVzcyA9ICdhZGRyX3Rlc3QxdnI4cmFrbTY2cmNmdjRmY3hxeWtnNWxmMHl2N2xzeWs5bXZhcHgzNjlqcHZ0Y2dmY3VrN2YnO1xuXG4gICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogcmFuZG9tQWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0pO1xuXG4gICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFkZHJlc3MgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAndXNlcicgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzInLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICdiYWNrdXAnIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICczJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSAnbm90X2FfdmFsaWRfYWRkcmVzcyc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgQ2FyZGFubyBBZGRyZXNzOiBub3RfYV92YWxpZF9hZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4ga2V5Y2hhaW5zIGFyZSBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9XG4gICAgICAgICdhZGRyX3Rlc3QxcXp2bWF6bXBnZmhqeXBwd2xzdzI5empqd2F6Y3NmazYyejl6djV2c3YyNHAwd3llaDY5a3pzbjB5Z3p6YWxxdTUyOTl5YTY5M3FuZDU1eTJ5ZWdlcWM0Mno3dXEwZ2UycHEnO1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczogW10sXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGNvbW1vbktleWNoYWluIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgICAgICAgIC8vIGNvbW1vbktleWNoYWluIGlzIG1pc3NpbmdcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MgPVxuICAgICAgICAnYWRkcl90ZXN0MXF6dm1hem1wZ2ZoanlwcHdsc3cyOXpqandhemNzZms2Mno5enY1dnN2MjRwMHd5ZWg2OWt6c24weWd6emFscXU1Mjk5eWE2OTNxbmQ1NXkyeWVnZXFjNDJ6N3VxMGdlMnBxJztcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGNvbW1vbktleWNoYWluJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4ga2V5Y2hhaW5zIGhhdmUgbWlzbWF0Y2hlZCBjb21tb25LZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOiBjb21tb25LZXljaGFpbixcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdkaWZmZXJlbnRLZXljaGFpbjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYnLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBhZGRyZXNzID1cbiAgICAgICAgJ2FkZHJfdGVzdDFxenZtYXptcGdmaGp5cHB3bHN3Mjl6amp3YXpjc2ZrNjJ6OXp2NXZzdjI0cDB3eWVoNjlrenNuMHlnenphbHF1NTI5OXlhNjkzcW5kNTV5MnllZ2VxYzQyejd1cTBnZTJwcSc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnYWxsIGtleWNoYWlucyBtdXN0IGhhdmUgdGhlIHNhbWUgY29tbW9uS2V5Y2hhaW4gZm9yIE1QQyBjb2lucycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aGVuIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgaXMgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgPSAndGVzdERlcml2YXRpb25TZWVkMTIzJztcblxuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgICBzb3VyY2U6ICd1c2VyJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6IGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6IGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgeyBhZGRyZXNzOiBleHBlY3RlZEFkZHJlc3MgfSA9IGF3YWl0IChiYXNlY29pbiBhcyBhbnkpLmdldEFkYUFkZHJlc3NBbmRBY2NvdW50SWQoe1xuICAgICAgICBiaXRnb0tleTogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBzZWVkOiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOiBleHBlY3RlZEFkZHJlc3MsXG4gICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICB9KTtcblxuICAgICAgaXNWYWxpZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmVyaWZpY2F0aW9uIHdoZW4gZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCBpcyBtaXNzaW5nIGJ1dCBhZGRyZXNzIHdhcyBjcmVhdGVkIHdpdGggc2VlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgPSAndGVzdERlcml2YXRpb25TZWVkMTIzJztcbiAgICAgIGNvbnN0IHsgYWRkcmVzczogYWRkcmVzc1dpdGhTZWVkIH0gPSBhd2FpdCAoYmFzZWNvaW4gYXMgYW55KS5nZXRBZGFBZGRyZXNzQW5kQWNjb3VudElkKHtcbiAgICAgICAgYml0Z29LZXk6IGNvbW1vbktleWNoYWluLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc2VlZDogZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBrZXljaGFpbnNXaXRob3V0U2VlZCA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICcyJyxcbiAgICAgICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgICAgc291cmNlOiAnYmFja3VwJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnMycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICAgIHNvdXJjZTogJ2JpdGdvJyBhcyBjb25zdCxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aFNlZWQsXG4gICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zV2l0aG91dFNlZWQsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSk7XG5cbiAgICAgIGlzVmFsaWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSB0b2tlbiBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uOicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGEgc3Bvb2ZlZCB0b2tlbiBjb25zb2xpZGF0aW9uIHRyYW5zYWN0aW9uIHdpdGggaW5jb3JyZWN0IGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb25zb2xpZGF0aW9uVHggPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAnNGZkZDBjYWUtMjU2My00M2IxLWI1Y2YtOTQ4NjUxNThjYTEwJyxcbiAgICAgICAgd2FsbGV0SWQ6ICc2MzA2OGVkNGVmYTYzYTAwMDg3N2YwMmZkNGIwZmE2ZCcsXG4gICAgICAgIHR4SGV4OlxuICAgICAgICAgICc4NGE0MDA4MTgyNTgyMDRiZDBmOTkxYzE1MzJjZmZlMzFkNGExMGRiNDkyYjQzMTc1ZWMzMjY3NjViNmIyOWNlZWU1OThkZjJiNjFmNDcwMDAxODE4MjU4MzkwMDg3Mzc5ZWJjNTUzM2ViZTYyMTk2M2M5MTVjM2NiYzVmMDg1MzdmY2RjYTRhZjhmOGFlMDhlZDRjODczNzllYmM1NTMzZWJlNjIxOTYzYzkxNWMzY2JjNWYwODUzN2ZjZGNhNGFmOGY4YWUwOGVkNGMxYTA1ZjM1OWZmMDIxYTAwMDI4NzAxMDMxYTAyNDk3MmUxYTEwMDgxODI1ODIwYmJhY2IxMzQzMWI5OTIwOGU2ZThjZGJmNzEwMTQ3ZmVhZjA2YTM5ZDcxNTY1ZTYwYjQxMWNlOWU0ZmEzZjEzNzU4NDAwMWE0YWI4MjM2NTYzZjY5ZmYzMDllNTc4NmU4ZjM5YzYyOWVkNTc2NzZjNjkyMTU5Y2IyZTA0OTRjOWU2NjMzNTUzODRjMTNjNzQ5ZDA0YzE3YTgwYmEyYTQ1Y2MxMjdkZjQ4MGZjNjRhNDMxOTlhNzcyZjExYWNkNWIxNGEwZmY1ZjYnLFxuICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgZmVlOiAxMDAwMCxcbiAgICAgICAgICBmZWVTdHJpbmc6ICcxMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnOGlMYTI2S1NiZHBCVXpOSzd1WXE4RnZ5dXlBNWg0azRlckRIc0RjUGJIdXMnLFxuICAgICAgICAgICAgICB2YWx1ZTogMi4wMTczMjI4ZTEwLFxuICAgICAgICAgICAgICB2YWx1ZVN0cmluZzogJzIwMTczMjI4MDAwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6ICc4UDJrWDdUeWg5ZVMzUktkYUJocWJFdFFHQVg1OERYekw3bWhEUUFCR1gyZCcsXG4gICAgICAgICAgICAgIHZhbHVlOiAxMDAwMCxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcxMDAwMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbWluZXJGZWU6ICcxMDAwMCcsXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnYWRkcl90ZXN0MXZyOHJha202NnJjZnY0ZmN4cXlrZzVsZjB5djdsc3lrOW12YXB4MzY5anB2dGNnZmN1azdmJyxcbiAgICAgICAgICAgICAgY29pbk5hbWU6ICd0YWRhOnVzZHQnLFxuICAgICAgICAgICAgICBlbnRlcnByaXNlOiB7XG4gICAgICAgICAgICAgICAgJG9pZDogJzU1NTNiYThhZTdhNWM3NzAwNjcxOTY2MScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVudGVycHJpc2VzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgJG9pZDogJzU1NTNiYThhZTdhNWM3NzAwNjcxOTY2MScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgdmFsdWU6IDIuMDE3MzIyOGUxMCxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcyMDE3MzIyODAwMCcsXG4gICAgICAgICAgICAgIHdhbGxldDoge1xuICAgICAgICAgICAgICAgICRvaWQ6ICc2MmY0YzM3MjBkOTJjNTAwMDgyNTdlYjUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3YWxsZXRUeXBlOiAnaG90JyxcbiAgICAgICAgICAgICAgd2FsbGV0czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICRvaWQ6ICc2MmY0YzM3MjBkOTJjNTAwMDgyNTdlYjUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcGF5R29GZWU6ICcwJyxcbiAgICAgICAgICBzcGVuZEFtb3VudDogJzIwMTczMjI4MDAwJyxcbiAgICAgICAgICBzcGVuZEFtb3VudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW1vdW50U3RyaW5nOiAnMjAxNzMyMjgwMDAnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3RhZGE6dXNkdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHlwZTogJ1NlbmQnLFxuICAgICAgICB9LFxuICAgICAgICBjb25zb2xpZGF0ZUlkOiAnNjcxMmQ3ZmRhNmRlNDkwNmQ2NThjMDRhZWJiZjhmOWInLFxuICAgICAgICBjb2luOiAndGFkYScsXG4gICAgICB9O1xuXG4gICAgICAvLyBNb2NrIHRoZSB3YWxsZXQgd2l0aCBhIGRpZmZlcmVudCBhZGRyZXNzIHRoYW4gdGhlIHRyYW5zYWN0aW9uJ3Mgb3V0cHV0XG4gICAgICBjb25zdCBtb2NrZWRXYWxsZXQgPSB7XG4gICAgICAgIGNvaW5TcGVjaWZpYzogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb290QWRkcmVzczpcbiAgICAgICAgICAgICAgJ2FkZHJfdGVzdDFxcW5udnB0cmMzcmVjNjRxMm45amg1NzJuY3U1d3ZkdHQ4dXZnNGczYWo5NnM1ZHd1OW5qNzBtbGFoemdsbTk5Mzl1ZXZ1cHNtajhkY2RxdjI1ZDVuNXI4dnc4c243cHJleScsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IGNvbnNvbGlkYXRpb25UeCxcbiAgICAgICAgICB3YWxsZXQ6IG1vY2tlZFdhbGxldCxcbiAgICAgICAgICB2ZXJpZmljYXRpb246IHtcbiAgICAgICAgICAgIGNvbnNvbGlkYXRpb25Ub0Jhc2VBZGRyZXNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgYWRkcmVzcycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|