@bitgo/sdk-core 38.5.2 → 38.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +13 -3
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +35 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +11 -2
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/keychain/iKeychains.d.ts +12 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts +6 -2
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +9 -5
- package/dist/src/bitgo/trading/network/network.d.ts +1 -1
- package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/network.js +5 -10
- package/dist/src/bitgo/trading/network/types.d.ts +1 -1
- package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/types.js +1 -1
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +6 -1
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +10 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +7 -6
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +8 -9
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.js +13 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts +11 -4
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +23 -4
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +16 -12
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/network.test.js +136 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +25 -1
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +24 -1
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +35 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -242,6 +242,30 @@ describe('EdDSA MPS DSG helper functions', async () => {
|
|
|
242
242
|
assert.ok(parsed.data.msg3.message, 'msg3.message should be set');
|
|
243
243
|
assert.ok(parsed.data.msg3.signature, 'msg3.signature should be set');
|
|
244
244
|
});
|
|
245
|
+
it('verifyPeerMessageRoundThree should verify a valid BitGo round-3 message', async () => {
|
|
246
|
+
const messageBuffer = Buffer.from(signableHex, 'hex');
|
|
247
|
+
const [, [bitgoMsg3]] = (await sdk_lib_mpc_1.MPSUtil.executeTillRound(2, new sdk_lib_mpc_1.EddsaMPSDsg.DSG(typesMPCv2_1.MPCv2PartiesEnum.USER), new sdk_lib_mpc_1.EddsaMPSDsg.DSG(typesMPCv2_1.MPCv2PartiesEnum.BITGO), userKeyShare, bitgoKeyShare, messageBuffer, derivationPath));
|
|
248
|
+
const bitgoSignedMsg3 = await sdk_lib_mpc_1.MPSComms.detachSignMpsMessage(Buffer.from(bitgoMsg3.payload), bitgoGpgPrivKey);
|
|
249
|
+
const round3Output = {
|
|
250
|
+
type: 'round3Output',
|
|
251
|
+
data: { msg3: bitgoSignedMsg3 },
|
|
252
|
+
};
|
|
253
|
+
const result = await (0, eddsaMPCv2_1.verifyPeerMessageRoundThree)(round3Output, bitgoGpgPubKey);
|
|
254
|
+
assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
|
|
255
|
+
assert.ok(result.payload.length > 0, 'payload should be non-empty');
|
|
256
|
+
});
|
|
257
|
+
it('verifyPeerMessageRoundThree should throw on a tampered message', async () => {
|
|
258
|
+
const round3Output = {
|
|
259
|
+
type: 'round3Output',
|
|
260
|
+
data: {
|
|
261
|
+
msg3: {
|
|
262
|
+
message: Buffer.from('tampered').toString('base64'),
|
|
263
|
+
signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
await assert.rejects((0, eddsaMPCv2_1.verifyPeerMessageRoundThree)(round3Output, bitgoGpgPubKey), 'should throw on invalid signature');
|
|
268
|
+
});
|
|
245
269
|
});
|
|
246
270
|
describe('getEddsaMPCv2RecoveryKeyShares', () => {
|
|
247
271
|
const walletPassphrase = 'testPass';
|
|
@@ -1521,4 +1545,4 @@ describe('EddsaMPCv2Utils.createKeychainsWithExternalSigner', function () {
|
|
|
1521
1545
|
await assert.rejects(() => utils.createKeychainsWithExternalSigner({ enterprise, callbacks }), /Failed to get BitGo EdDSA MPCv2 GPG public key/);
|
|
1522
1546
|
});
|
|
1523
1547
|
});
|
|
1524
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsNkNBQStCO0FBQy9CLG1DQUFxQztBQUNyQyxvREFBMkY7QUFDM0YsbURBQWdEO0FBQ2hELGtEQUFvQztBQUNwQyxzREFNNkI7QUFDN0IsK0NBZStCO0FBQy9CLGlGQU0wRDtBQUMxRCx1RUFBd0Y7QUFDeEYsbUVBQWdGO0FBQ2hGLHFFQUEyRTtBQUMzRSxpRkFBb0Y7QUFDcEYsdUZBQTBGO0FBQzFGLCtFQUErRTtBQUUvRSxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDcEQsSUFBSSxZQUFvQixDQUFDO0lBQ3pCLElBQUksY0FBc0IsQ0FBQztJQUMzQixJQUFJLGFBQXFCLENBQUM7SUFDMUIsSUFBSSxjQUE4QixDQUFDO0lBQ25DLElBQUksZ0JBQWdDLENBQUM7SUFDckMsSUFBSSxlQUErQixDQUFDO0lBQ3BDLElBQUksY0FBdUIsQ0FBQztJQUU1QixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDL0IsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRTdCLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsaUNBQWtCLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUEsaUNBQWtCLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLGlDQUFrQixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVELGNBQWMsR0FBRyxNQUFNLEdB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QUUsY0FBYyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEtBQUs7UUFDOUUsU0FBUyxDQUFDLGdCQUFvQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFFbkcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFDeEUsK0JBQStCLENBQ2hDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLO1FBQy9ELEtBQUssQ0FBQyx1QkFBMkMsQ0FBQyxRQUFRLENBQUM7WUFDMUQsU0FBUyxFQUFFLG1CQUEwQjtZQUNyQyxvQkFBb0IsRUFBRSxjQUFxQjtZQUMzQyxTQUFTO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFDeEUsOENBQThDLENBQy9DLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLO1FBQ3ZFLEtBQWEsQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUM7UUFFdkQsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFDeEUsZ0RBQWdELENBQ2pELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgKiBhcyBwZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBFZGRzYU1QU0RrZywgRWRkc2FNUFNEc2csIE1QU0NvbW1zLCBNUFNUeXBlcywgTVBTVXRpbCB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBlZDI1NTE5IH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9lZDI1NTE5JztcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvL3NqY2wnO1xuaW1wb3J0IHtcbiAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCxcbiAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQsXG4gIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG59IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHtcbiAgQml0R29CYXNlLFxuICBCaXRHb1JlcXVlc3QsXG4gIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEVERFNBVXRpbHMsXG4gIEVkZHNhTVBDdjJLZXlHZW5DYWxsYmFja3MsXG4gIEVkZHNhTVBDdjJVdGlscyxcbiAgSUJhc2VDb2luLFxuICBJV2FsbGV0LFxuICBSZXF1ZXN0VHJhY2VyLFxuICBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBUeFJlcXVlc3QsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQge1xuICBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lLFxuICBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVHdvLFxuICBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUsXG4gIHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUsXG4gIHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZE1wY0luc3RhbmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9lZGRzYS9lZGRzYSc7XG5pbXBvcnQgeyBnZXRCaXRnb1NpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9jb21tb24nO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2NvZGVjcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUdQR0tleVBhaXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvb3BlbmdwZ1V0aWxzJztcbmltcG9ydCB7IE1QQ3YyUGFydGllc0VudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL3R5cGVzTVBDdjInO1xuaW1wb3J0IHsgaXNWMkVudmVsb3BlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVHlwZXMnO1xuXG5kZXNjcmliZSgnRWREU0EgTVBTIERTRyBoZWxwZXIgZnVuY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICBsZXQgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiYWNrdXBLZXlTaGFyZTogQnVmZmVyO1xuICBsZXQgYml0Z29LZXlTaGFyZTogQnVmZmVyO1xuICBsZXQgdXNlckdwZ1ByaXZLZXk6IHBncC5Qcml2YXRlS2V5O1xuICBsZXQgYmFja3VwR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1ByaXZLZXk6IHBncC5Qcml2YXRlS2V5O1xuICBsZXQgYml0Z29HcGdQdWJLZXk6IHBncC5LZXk7XG5cbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgRWREU0EgREtHIGtleSBzaGFyZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlckdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiYWNrdXBHcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgY29uc3QgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG5cbiAgICB1c2VyR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXkgfSk7XG4gICAgYmFja3VwR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJhY2t1cEdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiaXRnb0dwZ1ByaXZLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiaXRnb0dwZ1B1YktleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSB9KTtcblxuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2csIGJpdGdvRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIHVzZXJLZXlTaGFyZSA9IHVzZXJEa2cuZ2V0S2V5U2hhcmUoKTtcbiAgICBiYWNrdXBLZXlTaGFyZSA9IGJhY2t1cERrZy5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvS2V5U2hhcmUgPSBiaXRnb0RrZy5nZXRLZXlTaGFyZSgpO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgYXdhaXQgdXNlckRzZy5pbml0RHNnKHVzZXJLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gdXNlckRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUodXNlck1zZzEsIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCBiYWNrdXAgcm91bmQtMSBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhd2FpdCBiYWNrdXBEc2cuaW5pdERzZyhiYWNrdXBLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKFxuICAgICAgYmFja3VwTXNnMSxcbiAgICAgIGJhY2t1cEdwZ1ByaXZLZXksXG4gICAgICBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLkJBQ0tVUCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMSBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGJpdGdvRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhd2FpdCBiaXRnb0RzZy5pbml0RHNnKGJpdGdvS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgICBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lKHJvdW5kMU91dHB1dCwgYml0Z29HcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mcm9tLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQub2socmVzdWx0LnBheWxvYWQubGVuZ3RoID4gMCwgJ3BheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZSBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1zZzE6IHtcbiAgICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgndGFtcGVyZWQnKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgc2lnbmF0dXJlOiAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cXG5cXG5JTlZBTElEXFxuLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tXFxuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUocm91bmQxT3V0cHV0LCBiaXRnb0dwZ1B1YktleSksICdzaG91bGQgdGhyb3cgb24gaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIFJvdW5kIDIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2dldFNpZ25hdHVyZVNoYXJlUm91bmRUd28gc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMiBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGF3YWl0IHVzZXJEc2cuaW5pdERzZyh1c2VyS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBjb25zdCB1c2VyTXNnMSA9IHVzZXJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBjb25zdCBiaXRnb01zZzEgPSBiaXRnb0RzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMSA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvTXNnMS5wYXlsb2FkKSwgYml0Z29HcGdQcml2S2V5KTtcbiAgICBjb25zdCBiaXRnb0Rlc2VyaWFsaXplZE1zZzEgPSBhd2FpdCB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lKFxuICAgICAgeyB0eXBlOiAncm91bmQxT3V0cHV0JywgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSB9LFxuICAgICAgYml0Z29HcGdQdWJLZXlcbiAgICApO1xuICAgIGNvbnN0IFt1c2VyTXNnMl0gPSB1c2VyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3VzZXJNc2cxLCBiaXRnb0Rlc2VyaWFsaXplZE1zZzFdKTtcblxuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlck1zZzIsIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMklucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzIubWVzc2FnZSwgJ21zZzIubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzIuc2lnbmF0dXJlLCAnbXNnMi5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byBzaG91bGQgYnVpbGQgYSB2YWxpZCBiYWNrdXAgcm91bmQtMiBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhd2FpdCBiYWNrdXBEc2cuaW5pdERzZyhiYWNrdXBLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMSA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUoXG4gICAgICB7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW2JhY2t1cE1zZzJdID0gYmFja3VwRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JhY2t1cE1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV0pO1xuXG4gICAgY29uc3Qgc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byhcbiAgICAgIGJhY2t1cE1zZzIsXG4gICAgICBiYWNrdXBHcGdQcml2S2V5LFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLmZyb20sIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDJJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2cyLm1lc3NhZ2UsICdtc2cyLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2cyLnNpZ25hdHVyZSwgJ21zZzIuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28gc2hvdWxkIHZlcmlmeSBhIHZhbGlkIEJpdEdvIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGF3YWl0IHVzZXJEc2cuaW5pdERzZyh1c2VyS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBjb25zdCB1c2VyTXNnMSA9IHVzZXJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBjb25zdCBiaXRnb01zZzEgPSBiaXRnb0RzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IFtiaXRnb01zZzJdID0gYml0Z29Ec2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYml0Z29Nc2cxLCB1c2VyTXNnMV0pO1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMiA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvTXNnMi5wYXlsb2FkKSwgYml0Z29HcGdQcml2S2V5KTtcblxuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMk91dHB1dCcsXG4gICAgICBkYXRhOiB7IG1zZzI6IGJpdGdvU2lnbmVkTXNnMiB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvKHJvdW5kMk91dHB1dCwgYml0Z29HcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mcm9tLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQub2socmVzdWx0LnBheWxvYWQubGVuZ3RoID4gMCwgJ3BheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMk91dHB1dCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1zZzI6IHtcbiAgICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgndGFtcGVyZWQnKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgc2lnbmF0dXJlOiAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cXG5cXG5JTlZBTElEXFxuLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tXFxuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28ocm91bmQyT3V0cHV0LCBiaXRnb0dwZ1B1YktleSksICdzaG91bGQgdGhyb3cgb24gaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIFJvdW5kIDMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2dldFNpZ25hdHVyZVNoYXJlUm91bmRUaHJlZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0zIHNoYXJlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgYXdhaXQgdXNlckRzZy5pbml0RHNnKHVzZXJLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gdXNlckRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IGJpdGdvRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhd2FpdCBiaXRnb0RzZy5pbml0RHNnKGJpdGdvS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgLy8gQWR2YW5jZSB0byByb3VuZCAyXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMSA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUoXG4gICAgICB7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW3VzZXJNc2cyXSA9IHVzZXJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbdXNlck1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV0pO1xuXG4gICAgY29uc3QgW2JpdGdvTXNnMl0gPSBiaXRnb0RzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtiaXRnb01zZzEsIHVzZXJNc2cxXSk7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cyLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMiA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28oXG4gICAgICB7IHR5cGU6ICdyb3VuZDJPdXRwdXQnLCBkYXRhOiB7IG1zZzI6IGJpdGdvU2lnbmVkTXNnMiB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW3VzZXJNc2czXSA9IHVzZXJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbdXNlck1zZzIsIGJpdGdvRGVzZXJpYWxpemVkTXNnMl0pO1xuXG4gICAgY29uc3Qgc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlKHVzZXJNc2czLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ2dldFNpZ25hdHVyZVNoYXJlUm91bmRUaHJlZSBzaG91bGQgYnVpbGQgYSB2YWxpZCBiYWNrdXAgcm91bmQtMyBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhd2FpdCBiYWNrdXBEc2cuaW5pdERzZyhiYWNrdXBLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMSA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUoXG4gICAgICB7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW2JhY2t1cE1zZzJdID0gYmFja3VwRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JhY2t1cE1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV0pO1xuXG4gICAgY29uc3QgW2JpdGdvTXNnMl0gPSBiaXRnb0RzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtiaXRnb01zZzEsIGJhY2t1cE1zZzFdKTtcbiAgICBjb25zdCBiaXRnb1NpZ25lZE1zZzIgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiaXRnb01zZzIucGF5bG9hZCksIGJpdGdvR3BnUHJpdktleSk7XG4gICAgY29uc3QgYml0Z29EZXNlcmlhbGl6ZWRNc2cyID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhcbiAgICAgIHsgdHlwZTogJ3JvdW5kMk91dHB1dCcsIGRhdGE6IHsgbXNnMjogYml0Z29TaWduZWRNc2cyIH0gfSxcbiAgICAgIGJpdGdvR3BnUHViS2V5XG4gICAgKTtcbiAgICBjb25zdCBbYmFja3VwTXNnM10gPSBiYWNrdXBEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYmFja3VwTXNnMiwgYml0Z29EZXNlcmlhbGl6ZWRNc2cyXSk7XG5cbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBNc2czLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ0VkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQzSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMy5tZXNzYWdlLCAnbXNnMy5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMy5zaWduYXR1cmUsICdtc2czLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRFZGRzYU1QQ3YyUmVjb3ZlcnlLZXlTaGFyZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdFBhc3MnO1xuXG4gIGNvbnN0IGVuY3J5cHRLZXkgPSAoa2V5U2hhcmU6IEJ1ZmZlcik6IHN0cmluZyA9PiBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwga2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZWNvdmVyeSBrZXkgc2hhcmVzIGZyb20gdjEtZW5jcnlwdGVkIHJlZHVjZWQga2V5cyAobm8gYml0Z28gaW5zdGFuY2UpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgIGVuY3J5cHRLZXkodXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSksXG4gICAgICBlbmNyeXB0S2V5KGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlXG4gICAgKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LnVzZXJLZXlTaGFyZSwgdXNlckRrZy5nZXRLZXlTaGFyZSgpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdC5iYWNrdXBLZXlTaGFyZSwgYmFja3VwRGtnLmdldEtleVNoYXJlKCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuY29tbW9uS2V5Q2hhaW4sIHVzZXJEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcm91dGUgZGVjcnlwdGlvbiB0aHJvdWdoIGJpdGdvLmRlY3J5cHQgd2hlbiBhIGJpdGdvIGluc3RhbmNlIGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIHNkay1jb3JlIGhhcyBubyBkZXZEZXBlbmRlbmN5IG9uIHNkay1hcGkgb3IgYXJnb24yLCBzbyB3ZSBjYW5ub3QgZW5jcnlwdCB3aXRoIGEgcmVhbCB2MiBlbnZlbG9wZSBoZXJlLlxuICAgIC8vIFRoZSBzdHViIHZlcmlmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIGRlbGVnYXRlcyB0byBiaXRnby5kZWNyeXB0ICh3aGljaCBzdXBwb3J0cyB2MSArIHYyIGluXG4gICAgLy8gcHJvZHVjdGlvbikgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvIHNqY2wuZGVjcnlwdC5cbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IHVzZXJLZXlCYXNlNjQgPSB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBiYWNrdXBLZXlCYXNlNjQgPSBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgY29uc3QgbW9ja0JpdGdvID0ge1xuICAgICAgZGVjcnlwdDogc2lub24uc3R1YigpLm9uRmlyc3RDYWxsKCkucmVzb2x2ZXModXNlcktleUJhc2U2NCkub25TZWNvbmRDYWxsKCkucmVzb2x2ZXMoYmFja3VwS2V5QmFzZTY0KSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgICdlbmNyeXB0ZWQtdXNlci1rZXknLFxuICAgICAgJ2VuY3J5cHRlZC1iYWNrdXAta2V5JyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBtb2NrQml0Z29cbiAgICApO1xuXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKG1vY2tCaXRnby5kZWNyeXB0IGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQudXNlcktleVNoYXJlLCB1c2VyRGtnLmdldEtleVNoYXJlKCkpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LmJhY2t1cEtleVNoYXJlLCBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5jb21tb25LZXlDaGFpbiwgdXNlckRrZy5nZXRDb21tb25LZXljaGFpbigpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgYSBtYWxmb3JtZWQga2V5Y2FyZCB3aXRoIGEgZGVzY3JpcHRpdmUgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgbWFsZm9ybWVkS2V5ID0gc2pjbC5lbmNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJhbmRvbUJ5dGVzKDY0KS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgICAgbWFsZm9ybWVkS2V5LFxuICAgICAgICBlbmNyeXB0S2V5KHVzZXJEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkpLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlXG4gICAgICApLFxuICAgICAgL3VuYWJsZSB0byBkZWNvZGUgcmVkdWNlZCBrZXkgc2hhcmUvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgcmVkdWNlZCBrZXlzIGZyb20gZGlmZmVyZW50IHdhbGxldHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgWywgYmFja3VwRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgICAgZW5jcnlwdEtleSh1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpKSxcbiAgICAgICAgZW5jcnlwdEtleShiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkpLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlXG4gICAgICApLFxuICAgICAgL3B1YiBrZXlzIGRvIG5vdCBtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCByZWR1Y2VkIGtleXMgd2l0aCBtYXRjaGluZyBwdWIgYnV0IG1pc21hdGNoZWQgcm9vdENoYWluQ29kZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZEtleVNoYXJlID0gdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKTtcbiAgICBjb25zdCBiYWNrdXBSZWR1Y2VkS2V5U2hhcmUgPSBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCk7XG4gICAgY29uc3QgZ2V0RGVjb2RlZFJlZHVjZWRLZXlTaGFyZSA9IE1QU1R5cGVzLmdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmU7XG4gICAgY29uc3QgZGVjb2RlU3R1YiA9IHNpbm9uLnN0dWIoTVBTVHlwZXMsICdnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlJykuY2FsbHNGYWtlKChidWYpID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZWQgPSBnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlKGJ1Zik7XG4gICAgICBpZiAoQnVmZmVyLmZyb20oYnVmKS5lcXVhbHMoYmFja3VwUmVkdWNlZEtleVNoYXJlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlZHVjZWQsXG4gICAgICAgICAgcm9vdENoYWluQ29kZTogQXJyYXkuZnJvbShyYW5kb21CeXRlcygzMikpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIEVERFNBVXRpbHMuZ2V0RWRkc2FNcGNWMlJlY292ZXJ5S2V5U2hhcmVzRnJvbVJlZHVjZWRLZXkoXG4gICAgICAgICAgZW5jcnlwdEtleSh1c2VyUmVkdWNlZEtleVNoYXJlKSxcbiAgICAgICAgICBlbmNyeXB0S2V5KGJhY2t1cFJlZHVjZWRLZXlTaGFyZSksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZVxuICAgICAgICApLFxuICAgICAgICAvcm9vdENoYWluQ29kZXMgZG8gbm90IG1hdGNoL1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVjb2RlU3R1Yi5yZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZScsICgpID0+IHtcbiAgbGV0IGVkZHNhTVBDdjJVdGlsczogRWRkc2FNUEN2MlV0aWxzO1xuICBsZXQgbW9ja0JpdGdvOiBCaXRHb0Jhc2U7XG4gIGxldCB1c2VyS2V5U2hhcmU6IEJ1ZmZlcjtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAvMCc7XG4gIGNvbnN0IGV4cGVjdGVkQWRhdGEgPSBgJHtzaWduYWJsZUhleH06JHtkZXJpdmF0aW9uUGF0aH1gO1xuICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICB0eFJlcXVlc3RJZDogJ3R4cmVxLWVkZHNhLXJvdW5kMScsXG4gICAgd2FsbGV0SWQ6ICd3YWxsZXQtZWRkc2Etcm91bmQxJyxcbiAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlLWVkZHNhLXJvdW5kMScsXG4gICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAge1xuICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3BheW1lbnQnIH0sXG4gICAgdW5zaWduZWRUeHM6IFtdLFxuICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgRWREU0EgdXNlciBrZXkgc2hhcmUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlcktleVNoYXJlID0gdXNlckRrZy5nZXRLZXlTaGFyZSgpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBzamNsRW5jcnlwdCA9IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZzsgYWRhdGE/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3Qgc2FsdCA9IHJhbmRvbUJ5dGVzKDgpO1xuICAgICAgY29uc3QgaXYgPSByYW5kb21CeXRlcygxNik7XG4gICAgICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0LCB7XG4gICAgICAgIHNhbHQ6IFtieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDAsIDQpKSwgYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSg0KSldLFxuICAgICAgICBpdjogW1xuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDAsIDQpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg0LCA4KSksXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgxMiwgMTYpKSxcbiAgICAgICAgXSxcbiAgICAgICAgYWRhdGE6IHBhcmFtcy5hZGF0YSxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgbW9ja0JpdGdvID0ge1xuICAgICAgZW5jcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBzamNsRW5jcnlwdChwYXJhbXMpKSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgbW9ja0NvaW4gPSB7XG4gICAgICBnZXRNUENBbGdvcml0aG06IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdlZGRzYScpLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG5cbiAgICBlZGRzYU1QQ3YyVXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHJvdW5kLTEgc2hhcmUgYW5kIGVuY3J5cHRlZCBTSkNMIHNlc3Npb24gcGF5bG9hZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnNpZ25hdHVyZVNoYXJlUm91bmQxLmZyb20sIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnNpZ25hdHVyZVNoYXJlUm91bmQxLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuICAgIGFzc2VydC5vayhyZXN1bHQudXNlckdwZ1B1YktleS5pbmNsdWRlcygnQkVHSU4gUEdQIFBVQkxJQyBLRVkgQkxPQ0snKSk7XG4gICAgYXNzZXJ0Lm9rKEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pLmN0LCAnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiBzaG91bGQgYmUgYW4gU0pDTCBKU09OIGJsb2InKTtcbiAgICBhc3NlcnQub2soSlNPTi5wYXJzZShyZXN1bHQuZW5jcnlwdGVkVXNlckdwZ1BydktleSkuY3QsICdlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5IHNob3VsZCBiZSBhbiBTSkNMIEpTT04gYmxvYicpO1xuXG4gICAgY29uc3QgcGFyc2VkU2hhcmUgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2UocmVzdWx0LnNpZ25hdHVyZVNoYXJlUm91bmQxLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWRTaGFyZS50eXBlLCAncm91bmQxSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkU2hhcmUuZGF0YS5tc2cxLm1lc3NhZ2UsICdtc2cxLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWRTaGFyZS5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiA9IEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBKU09OLnBhcnNlKHJlc3VsdC5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBkZWNvZGVVUklDb21wb25lbnQoZW5jcnlwdGVkUm91bmQxU2Vzc2lvbi5hZGF0YSksXG4gICAgICBgTVBTX0RTR19TSUdOSU5HX1JPVU5EMV9TVEFURToke2V4cGVjdGVkQWRhdGF9YCxcbiAgICAgICdyb3VuZC0xIHNlc3Npb24gYWRhdGEgc2hvdWxkIGJpbmQgdGhlIHNpZ25pbmcgY29udGV4dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGRlY29kZVVSSUNvbXBvbmVudChlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LmFkYXRhKSxcbiAgICAgIGBNUFNfRFNHX1NJR05JTkdfVVNFUl9HUEdfS0VZOiR7ZXhwZWN0ZWRBZGF0YX1gLFxuICAgICAgJ0dQRyBwcml2YXRlIGtleSBhZGF0YSBzaG91bGQgYmluZCB0aGUgc2lnbmluZyBjb250ZXh0J1xuICAgICk7XG5cbiAgICBjb25zdCBzZXNzaW9uUGF5bG9hZCA9IEpTT04ucGFyc2Uoc2pjbC5kZWNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKSk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb25QYXlsb2FkLmRzZ1Nlc3Npb24sICdkc2dTZXNzaW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZm9yIHJvdW5kIDInKTtcbiAgICBhc3NlcnQub2soc2Vzc2lvblBheWxvYWQudXNlck1zZ1BheWxvYWQsICd1c2VyTXNnUGF5bG9hZCBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByb3VuZCAyJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIHYyIGVuY3J5cHRpb24gd2hlbiBlbmNyeXB0ZWRQcnYgaXMgYSB2MiBlbnZlbG9wZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub25cbiAgICAgIC5zdHViKClcbiAgICAgIC5jYWxsc0Zha2UoKGlucHV0OiBzdHJpbmcsIGFkYXRhOiBzdHJpbmcpID0+IFByb21pc2UucmVzb2x2ZShKU09OLnN0cmluZ2lmeSh7IHY6IDIsIGlucHV0LCBhZGF0YSB9KSkpO1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBzaW5vbi5zdHViKCk7XG4gICAgY29uc3QgY3JlYXRlRW5jcnlwdGlvblNlc3Npb24gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBlbmNyeXB0LCBkZXN0cm95IH0pO1xuICAgIG1vY2tCaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiA9IGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICB0eFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGVkUHJ2OiBKU09OLnN0cmluZ2lmeSh7IHY6IDIgfSksXG4gICAgfSk7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uLmdldENhbGwoMCkuYXJnc1swXSwgd2FsbGV0UGFzc3BocmFzZSk7XG4gICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChtb2NrQml0Z28uZW5jcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShlbmNyeXB0KTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShkZXN0cm95KTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24gPSBKU09OLnBhcnNlKHJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gSlNPTi5wYXJzZShyZXN1bHQuZW5jcnlwdGVkVXNlckdwZ1BydktleSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24udiwgMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24uYWRhdGEsIGBNUFNfRFNHX1NJR05JTkdfUk9VTkQxX1NUQVRFOiR7ZXhwZWN0ZWRBZGF0YX1gKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdGVkVXNlckdwZ1BydktleS52LCAyKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdGVkVXNlckdwZ1BydktleS5hZGF0YSwgYE1QU19EU0dfU0lHTklOR19VU0VSX0dQR19LRVk6JHtleHBlY3RlZEFkYXRhfWApO1xuXG4gICAgY29uc3Qgc2Vzc2lvblBheWxvYWQgPSBKU09OLnBhcnNlKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24uaW5wdXQpO1xuICAgIGFzc2VydC5vayhzZXNzaW9uUGF5bG9hZC5kc2dTZXNzaW9uLCAnZHNnU2Vzc2lvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByb3VuZCAyJyk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb25QYXlsb2FkLnVzZXJNc2dQYXlsb2FkLCAndXNlck1zZ1BheWxvYWQgc2hvdWxkIGJlIHBlcnNpc3RlZCBmb3Igcm91bmQgMicpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSBTSkNMIGVuY3J5cHRpb24gd2hlbiBlbmNyeXB0ZWRQcnYgaXMgYSB2MSBibG9iJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tCaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiA9IHNpbm9uLnN0dWIoKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgfSk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShtb2NrQml0Z28uZW5jcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIGFzc2VydC5vayhKU09OLnBhcnNlKHJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKS5jdCwgJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24gc2hvdWxkIGJlIGFuIFNKQ0wgSlNPTiBibG9iJyk7XG4gICAgYXNzZXJ0Lm9rKEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFVzZXJHcGdQcnZLZXkpLmN0LCAnZW5jcnlwdGVkVXNlckdwZ1BydktleSBzaG91bGQgYmUgYW4gU0pDTCBKU09OIGJsb2InKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9wYWdhdGUgdGhlIHR4LW9ubHkgZ3VhcmQgd2hlbiB0cmFuc2FjdGlvbnMgYXJlIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHsgLi4udHhSZXF1ZXN0LCB0cmFuc2FjdGlvbnM6IHVuZGVmaW5lZCB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0LFxuICAgICAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9KSxcbiAgICAgIC9VbmFibGUgdG8gZmluZCB0cmFuc2FjdGlvbnMgaW4gdHhSZXF1ZXN0L1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdFZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZUtleUdlblJvdW5kMVNoYXJlJywgKCkgPT4ge1xuICBsZXQgZWRkc2FNUEN2MlV0aWxzOiBFZGRzYU1QQ3YyVXRpbHM7XG4gIGxldCBtb2NrQml0Z286IEJpdEdvQmFzZTtcbiAgbGV0IHVzZXJHcGdLZXlQYWlyOiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgbGV0IGJhY2t1cEdwZ0tleVBhaXI6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICBsZXQgYml0Z29HcGdLZXlQYWlyOiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcblxuICBiZWZvcmUoJ2dlbmVyYXRlIEdQRyBrZXkgcGFpcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgdXNlckdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBiYWNrdXBHcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IHNqY2xFbmNyeXB0ID0gKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyBhZGF0YT86IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gICAgICBjb25zdCBpdiA9IHJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgIHJldHVybiBzamNsLmVuY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQsIHtcbiAgICAgICAgc2FsdDogW2J5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoMCwgNCkpLCBieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDQpKV0sXG4gICAgICAgIGl2OiBbXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDQsIDgpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg4LCAxMikpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgICAgICBdLFxuICAgICAgICBhZGF0YTogcGFyYW1zLmFkYXRhLFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBtb2NrQml0Z28gPSB7XG4gICAgICBlbmNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKHNqY2xFbmNyeXB0KSxcbiAgICAgIGVuY3J5cHRBc3luYzogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBzamNsRW5jcnlwdChwYXJhbXMpKSxcbiAgICAgIGRlY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSksXG4gICAgICBkZWNyeXB0QXN5bmM6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSksXG4gICAgICBnZXRFbnY6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdtb2NrJyksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge1xuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuXG4gICAgZWRkc2FNUEN2MlV0aWxzID0gbmV3IEVkZHNhTVBDdjJVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZhbGlkIHNpZ25lZE1zZzEgYW5kIGVuY3J5cHRlZCByb3VuZC0xIHNlc3Npb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lS2V5R2VuUm91bmQxU2hhcmUoe1xuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGNvdW50ZXJQYXJ0eUdwZ1B1YktleTogYmFja3VwR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgfSk7XG5cbiAgICBhc3NlcnQub2socmVzdWx0LnNpZ25lZE1zZzEubWVzc2FnZSwgJ3NpZ25lZE1zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgcmVzdWx0LnNpZ25lZE1zZzEuc2lnbmF0dXJlLmluY2x1ZGVzKCdCRUdJTiBQR1AgU0lHTkFUVVJFJyksXG4gICAgICAnc2lnbmVkTXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIFBHUCBhcm1vcmVkJ1xuICAgICk7XG4gICAgYXNzZXJ0Lm9rKEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pLmN0LCAnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiBzaG91bGQgYmUgYW4gU0pDTCBKU09OIGJsb2InKTtcbiAgfSk7XG5cbiAgaXQoJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24gc2hvdWxkIG9ubHkgYmUgZGVjcnlwdGFibGUgd2l0aCBjb3JyZWN0IHdhbGxldFBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lS2V5R2VuUm91bmQxU2hhcmUoe1xuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGNvdW50ZXJQYXJ0eUdwZ1B1YktleTogYmFja3VwR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWQgPSBzamNsLmRlY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgcmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb24uZGtnU2Vzc2lvbiwgJ2RrZ1Nlc3Npb24gc2hvdWxkIGJlIHBlcnNpc3RlZCcpO1xuICAgIGFzc2VydC5vayhzZXNzaW9uLm93bk1zZ1BheWxvYWQsICdvd25Nc2dQYXlsb2FkIHNob3VsZCBiZSBwZXJzaXN0ZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHNlc3Npb24ub3duTXNnRnJvbSwgJ251bWJlcicsICdvd25Nc2dGcm9tIHNob3VsZCBiZSBhIG51bWJlcicpO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IHNqY2wuZGVjcnlwdCgnd3JvbmdwYXNzcGhyYXNlJywgcmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pLFxuICAgICAgJ3Nob3VsZCB0aHJvdyBvbiB3cm9uZyBwYXNzcGhyYXNlJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzdG9yZSBES0cgc2Vzc2lvbiBhbmQgaGFuZGxlIHJvdW5kLTIgbWVzc2FnZXMgYWZ0ZXIgcm91bmQgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gc2pjbC5lbmNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXkpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVLZXlHZW5Sb3VuZDFTaGFyZSh7XG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGJpdGdvR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgY291bnRlclBhcnR5R3BnUHViS2V5OiBiYWNrdXBHcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZCA9IHNqY2wuZGVjcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbik7XG4gICAgY29uc3QgeyBka2dTZXNzaW9uLCBvd25Nc2dQYXlsb2FkLCBvd25Nc2dGcm9tIH0gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCkgYXMge1xuICAgICAgZGtnU2Vzc2lvbjogc3RyaW5nO1xuICAgICAgb3duTXNnUGF5bG9hZDogc3RyaW5nO1xuICAgICAgb3duTXNnRnJvbTogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN0b3JlZERrZyA9IG5ldyBFZGRzYU1QU0RrZy5ES0coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBhd2FpdCByZXN0b3JlZERrZy5yZXN0b3JlU2Vzc2lvbihka2dTZXNzaW9uKTtcblxuICAgIGNvbnN0IG93bk1zZzE6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UgPSB7XG4gICAgICBmcm9tOiBvd25Nc2dGcm9tLFxuICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ob3duTXNnUGF5bG9hZCwgJ2Jhc2U2NCcpKSxcbiAgICB9O1xuICAgIGFzc2VydC5vayhvd25Nc2cxLnBheWxvYWQubGVuZ3RoID4gMCwgJ3Jlc3RvcmVkIHBheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuXG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShyZXN1bHQuc2lnbmVkTXNnMSwgdXNlckdwZ0tleSk7XG4gICAgYXNzZXJ0Lm9rKHJhd0J5dGVzLmxlbmd0aCA+IDAsICdzaWduZWRNc2cxIHNob3VsZCB2ZXJpZnkgYWdhaW5zdCB1c2VyIEdQRyBrZXknKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgaW52YWxpZCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVLZXlHZW5Sb3VuZDFTaGFyZSh7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgJ25vdC1hLWdwZy1rZXknKSxcbiAgICAgICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBjb3VudGVyUGFydHlHcGdQdWJLZXk6IGJhY2t1cEdwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICB9KSxcbiAgICAgICdzaG91bGQgdGhyb3cgd2hlbiBHUEcga2V5IGNhbm5vdCBiZSBwYXJzZWQnXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ1VTRVIgYW5kIEJBQ0tVUCBwYXJ0eUlkIHByb2R1Y2UgZGlmZmVyZW50IGVuY3J5cHRlZCBzZXNzaW9uIHN0YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJFbmNyeXB0ZWRHcGdQcnZLZXkgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSk7XG5cbiAgICBjb25zdCB1c2VyUmVzdWx0ID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVLZXlHZW5Sb3VuZDFTaGFyZSh7XG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogdXNlckVuY3J5cHRlZEdwZ1BydktleSxcbiAgICAgIGJpdGdvR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgY291bnRlclBhcnR5R3BnUHViS2V5OiBiYWNrdXBHcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhY2t1cEVuY3J5cHRlZEdwZ1BydktleTIgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5KTtcbiAgICBjb25zdCBiYWNrdXBSZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZUtleUdlblJvdW5kMVNoYXJlKHtcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBiYWNrdXBFbmNyeXB0ZWRHcGdQcnZLZXkyLFxuICAgICAgYml0Z29HcGdQdWJLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBjb3VudGVyUGFydHlHcGdQdWJLZXk6IHVzZXJHcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlclNlc3Npb24gPSBKU09OLnBhcnNlKHNqY2wuZGVjcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyUmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pKTtcbiAgICBjb25zdCBiYWNrdXBTZXNzaW9uID0gSlNPTi5wYXJzZShzamNsLmRlY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwUmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1c2VyU2Vzc2lvbi5vd25Nc2dGcm9tLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYWNrdXBTZXNzaW9uLm93bk1zZ0Zyb20sIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwodXNlclNlc3Npb24uZGtnU2Vzc2lvbiwgYmFja3VwU2Vzc2lvbi5ka2dTZXNzaW9uLCAnU2Vzc2lvbnMgc2hvdWxkIGRpZmZlciBiZXR3ZWVuIHBhcnRpZXMnKTtcblxuICAgIC8vIFNlc3Npb25zIGVuY3J5cHRlZCB3aXRoIHBhcnR5LWJvdW5kIGFkYXRhIOKAlCB0YW1wZXJlZCBhZGF0YSBmYWlscyBDQ00gdGFnIGNoZWNrXG4gICAgY29uc3QgdGFtcGVyZWRTZXNzaW9uID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodXNlclJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKTtcbiAgICAgIHBhcnNlZC5hZGF0YSA9IGVuY29kZVVSSUNvbXBvbmVudChgTVBTX0RLR19LRVlHRU5fUk9VTkQxX1NUQVRFOiR7TVBDdjJQYXJ0aWVzRW51bS5CQUNLVVB9YCk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKTtcbiAgICB9KSgpO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBzamNsLmRlY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdGFtcGVyZWRTZXNzaW9uKSxcbiAgICAgICdzaG91bGQgZmFpbCB0byBkZWNyeXB0IHdpdGggd3JvbmcgcGFydHkgYWRhdGEnXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0VkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUnLCAoKSA9PiB7XG4gIGxldCBlZGRzYU1QQ3YyVXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0tleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0dwZ0tleVBhaXI6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICBsZXQgYml0Z29HcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAvMCc7XG4gIGNvbnN0IGV4cGVjdGVkQWRhdGEgPSBgJHtzaWduYWJsZUhleH06JHtkZXJpdmF0aW9uUGF0aH1gO1xuXG4gIGNvbnN0IGJhc2VUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICB0eFJlcXVlc3RJZDogJ3R4cmVxLWVkZHNhLXJvdW5kMicsXG4gICAgd2FsbGV0SWQ6ICd3YWxsZXQtZWRkc2Etcm91bmQyJyxcbiAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlLWVkZHNhLXJvdW5kMicsXG4gICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAge1xuICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3BheW1lbnQnIH0sXG4gICAgdW5zaWduZWRUeHM6IFtdLFxuICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgRWREU0Ega2V5IHNoYXJlcyBhbmQgR1BHIGtleXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csICwgYml0Z29Ea2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlcktleVNoYXJlID0gdXNlckRrZy5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvS2V5U2hhcmUgPSBiaXRnb0RrZy5nZXRLZXlTaGFyZSgpO1xuXG4gICAgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgYml0Z29HcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGdLZXlQYWlyLnByaXZhdGVLZXkgfSk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tCaXRnbyA9IHtcbiAgICAgIGVuY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gICAgICAgIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICAgICAgICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0LCB7XG4gICAgICAgICAgc2FsdDogW2J5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoMCwgNCkpLCBieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDQpKV0sXG4gICAgICAgICAgaXY6IFtcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDAsIDQpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDQsIDgpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDgsIDEyKSksXG4gICAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgxMiwgMTYpKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkYXRhOiBwYXJhbXMuYWRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXMpID0+IHNqY2wuZGVjcnlwdChwYXJhbXMucGFzc3dvcmQsIHBhcmFtcy5pbnB1dCkpLFxuICAgIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VkZHNhJyksXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcblxuICAgIGVkZHNhTVBDdjJVdGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMobW9ja0JpdGdvLCBtb2NrQ29pbik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIGEgcm91bmQtMiBzaGFyZSBmcm9tIG9mZmxpbmUgcm91bmQgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb3VuZDEgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb0VkZHNhUm91bmQxKFxuICAgICAgYml0Z29Ec2csXG4gICAgICBjbG9uZVR4UmVxdWVzdFdpdGhFbXB0eVNpZ25hdHVyZVNoYXJlcyhiYXNlVHhSZXF1ZXN0KSxcbiAgICAgIHJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJvdW5kMS51c2VyR3BnUHViS2V5LFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHJvdW5kMiA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IHJvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZFNoYXJlID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi5zaGFyZSksXG4gICAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkU2hhcmUudHlwZSwgJ3JvdW5kMklucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZFNoYXJlLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkU2hhcmUuZGF0YS5tc2cyLnNpZ25hdHVyZSwgJ21zZzIuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24gPSBKU09OLnBhcnNlKHJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBkZWNvZGVVUklDb21wb25lbnQoZW5jcnlwdGVkUm91bmQyU2Vzc2lvbi5hZGF0YSksXG4gICAgICBgTVBTX0RTR19TSUdOSU5HX1JPVU5EMl9TVEFURToke2V4cGVjdGVkQWRhdGF9YFxuICAgICk7XG5cbiAgICBjb25zdCBzZXNzaW9uUGF5bG9hZCA9IEpTT04ucGFyc2Uoc2pjbC5kZWNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uKSk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb25QYXlsb2FkLmRzZ1Nlc3Npb24sICdkc2dTZXNzaW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZm9yIHJvdW5kIDMnKTtcbiAgICBhc3NlcnQub2soc2Vzc2lvblBheWxvYWQudXNlck1zZ1BheWxvYWQsICd1c2VyTXNnUGF5bG9hZCBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByb3VuZCAzJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIHYyIGRlY3J5cHRpb24gd2hlbiBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uIGlzIGEgdjIgZW52ZWxvcGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdCA9IHNpbm9uXG4gICAgICAuc3R1YigpXG4gICAgICAuY2FsbHNGYWtlKChpbnB1dDogc3RyaW5nLCBhZGF0YTogc3RyaW5nKSA9PiBQcm9taXNlLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoeyB2OiAyLCBpbnB1dCwgYWRhdGEgfSkpKTtcbiAgICBjb25zdCBkZXN0cm95ID0gc2lub24uc3R1YigpO1xuICAgIGNvbnN0IGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgZW5jcnlwdCwgZGVzdHJveSB9KTtcbiAgICBtb2NrQml0Z28uY3JlYXRlRW5jcnlwdGlvblNlc3Npb24gPSBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbjtcblxuICAgIGNvbnN0IHJvdW5kMSA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiBiYXNlVHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyS2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFBydjogSlNPTi5zdHJpbmdpZnkoeyB2OiAyIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgYml0Z29Ec2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGF3YWl0IGJpdGdvRHNnLmluaXREc2coYml0Z29LZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29FZGRzYVJvdW5kMShcbiAgICAgIGJpdGdvRHNnLFxuICAgICAgY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXMoYmFzZVR4UmVxdWVzdCksXG4gICAgICByb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByb3VuZDEudXNlckdwZ1B1YktleSxcbiAgICAgIGJpdGdvR3BnUHJpdktleVxuICAgICk7XG5cbiAgICBjb25zdCBkZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHBhcmFtcy5pbnB1dCk7XG4gICAgICByZXR1cm4gZW52ZWxvcGUuaW5wdXQ7XG4gICAgfSk7XG4gICAgbW9ja0JpdGdvLmRlY3J5cHQgPSBkZWNyeXB0O1xuXG4gICAgY29uc3Qgcm91bmQyID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgfSk7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkKG1vY2tCaXRnby5kZWNyeXB0IGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uID0gSlNPTi5wYXJzZShyb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMlNlc3Npb24udiwgMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMlNlc3Npb24uYWRhdGEsIGBNUFNfRFNHX1NJR05JTkdfUk9VTkQyX1NUQVRFOiR7ZXhwZWN0ZWRBZGF0YX1gKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgdGFtcGVyZWQgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiBhZGF0YScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdGhlclR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgLi4uYmFzZVR4UmVxdWVzdCxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgc2lnbmFibGVIZXg6ICdjYWZlYmFiZScsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMS8yJyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2NhZmViYWJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgICBjb25zdCByb3VuZDFPdGhlciA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiBvdGhlclR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByb3VuZDEgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb0VkZHNhUm91bmQxKFxuICAgICAgYml0Z29Ec2csXG4gICAgICBjbG9uZVR4UmVxdWVzdFdpdGhFbXB0eVNpZ25hdHVyZVNoYXJlcyhiYXNlVHhSZXF1ZXN0KSxcbiAgICAgIHJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJvdW5kMS51c2VyR3BnUHViS2V5LFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZSh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiByb3VuZDFPdGhlci5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgICAgICB9KSxcbiAgICAgIC9BZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHRhbXBlcmVkIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgYWRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3RoZXJUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLmJhc2VUeFJlcXVlc3QsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4OiAnY2FmZWJhYmUnLFxuICAgICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzEvMicsXG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdjYWZlYmFiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gICAgY29uc3Qgcm91bmQxT3RoZXIgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogb3RoZXJUeFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQxID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IGJhc2VUeFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgYml0Z29Ec2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGF3YWl0IGJpdGdvRHNnLmluaXREc2coYml0Z29LZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29FZGRzYVJvdW5kMShcbiAgICAgIGJpdGdvRHNnLFxuICAgICAgY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXMoYmFzZVR4UmVxdWVzdCksXG4gICAgICByb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByb3VuZDEudXNlckdwZ1B1YktleSxcbiAgICAgIGJpdGdvR3BnUHJpdktleVxuICAgICk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQxLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxT3RoZXIuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiByb3VuZDEuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbixcbiAgICAgICAgfSksXG4gICAgICAvQWRhdGEgZG9lcyBub3QgbWF0Y2ggY3lwaGVydGV4dCBhZGF0YS9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIEJpdEdvIHNpZ25hdHVyZSBzaGFyZSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvdW5kMSA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiBiYXNlVHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyS2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhc2VUcmFuc2FjdGlvbiA9IGFzc2VydFNpbmdsZVRyYW5zYWN0aW9uKGJhc2VUeFJlcXVlc3QpO1xuICAgIGNvbnN0IHR4UmVxdWVzdE5vQml0Z29TaGFyZTogVHhSZXF1ZXN0ID0ge1xuICAgICAgLi4uYmFzZVR4UmVxdWVzdCxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uYmFzZVRyYW5zYWN0aW9uLFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW3JvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Tm9CaXRnb1NoYXJlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL01pc3NpbmcgQml0R28gcm91bmQxT3V0cHV0IHNpZ25hdHVyZSBzaGFyZS9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3BhZ2F0ZSB0aGUgdHgtb25seSBndWFyZCB3aGVuIHRyYW5zYWN0aW9ucyBhcmUgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb3VuZDEgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogeyAuLi5iYXNlVHhSZXF1ZXN0LCB0cmFuc2FjdGlvbnM6IHVuZGVmaW5lZCB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiB0cmFuc2FjdGlvbnMgYXJyYXkgaXMgZW1wdHknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgcm91bmQxID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IGJhc2VUeFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMlNoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHsgLi4uYmFzZVR4UmVxdWVzdCwgdHJhbnNhY3Rpb25zOiBbXSB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0VkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQzU2hhcmUnLCAoKSA9PiB7XG4gIGxldCBlZGRzYU1QQ3YyVXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0tleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0dwZ0tleVBhaXI6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICBsZXQgYml0Z29HcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAvMCc7XG5cbiAgY29uc3QgYmFzZVR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgIHR4UmVxdWVzdElkOiAndHhyZXEtZWRkc2Etcm91bmQzJyxcbiAgICB3YWxsZXRJZDogJ3dhbGxldC1lZGRzYS1yb3VuZDMnLFxuICAgIGVudGVycHJpc2VJZDogJ2VudGVycHJpc2UtZWRkc2Etcm91bmQzJyxcbiAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICBzaWduYWJsZUhleCxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHNpZ25hYmxlSGV4LFxuICAgICAgICB9LFxuICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAncGF5bWVudCcgfSxcbiAgICB1bnNpZ25lZFR4czogW10sXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgYmVmb3JlKCdnZW5lcmF0ZSBFZERTQSBrZXkgc2hhcmVzIGFuZCBHUEcga2V5cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBbdXNlckRrZywgLCBiaXRnb0RrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICB1c2VyS2V5U2hhcmUgPSB1c2VyRGtnLmdldEtleVNoYXJlKCk7XG4gICAgYml0Z29LZXlTaGFyZSA9IGJpdGdvRGtnLmdldEtleVNoYXJlKCk7XG5cbiAgICBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBiaXRnb0dwZ1ByaXZLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja0JpdGdvID0ge1xuICAgICAgZW5jcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbHQgPSByYW5kb21CeXRlcyg4KTtcbiAgICAgICAgY29uc3QgaXYgPSByYW5kb21CeXRlcygxNik7XG4gICAgICAgIHJldHVybiBzamNsLmVuY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQsIHtcbiAgICAgICAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoNCkpXSxcbiAgICAgICAgICBpdjogW1xuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoNCwgOCkpLFxuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRhdGE6IHBhcmFtcy5hZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge1xuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuXG4gICAgZWRkc2FNUEN2MlV0aWxzID0gbmV3IEVkZHNhTVBDdjJVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUm91bmQyRmxvdyhcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdCxcbiAgICBlbmNyeXB0ZWRQcnY/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7XG4gICAgcm91bmQxOiB7XG4gICAgICBzaWduYXR1cmVTaGFyZVJvdW5kMTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgICB1c2VyR3BnUHViS2V5OiBzdHJpbmc7XG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiBzdHJpbmc7XG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBzdHJpbmc7XG4gICAgfTtcbiAgICByb3VuZDI6IHtcbiAgICAgIHNpZ25hdHVyZVNoYXJlUm91bmQyOiBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgICAgIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246IHN0cmluZztcbiAgICB9O1xuICAgIHR4UmVxdWVzdFJvdW5kMTogVHhSZXF1ZXN0O1xuICAgIHR4UmVxdWVzdFJvdW5kMjogVHhSZXF1ZXN0O1xuICAgIG1lc3NhZ2VCdWZmZXI6IEJ1ZmZlcjtcbiAgfT4ge1xuICAgIGNvbnN0IHJvdW5kMSA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyS2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFBydixcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24odHhSZXF1ZXN0KTtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24udW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGJpdGdvRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhd2FpdCBiaXRnb0RzZy5pbml0RHNnKGJpdGdvS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIHRyYW5zYWN0aW9uLnVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29FZGRzYVJvdW5kMShcbiAgICAgIGJpdGdvRHNnLFxuICAgICAgY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0KSxcbiAgICAgIHJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJvdW5kMS51c2VyR3BnUHViS2V5LFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHJvdW5kMiA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IHJvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQxVHJhbnNhY3Rpb24gPSBhc3NlcnRTaW5nbGVUcmFuc2FjdGlvbih0eFJlcXVlc3RSb3VuZDEpO1xuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMiA9IGF3YWl0IHNpZ25CaXRnb0VkZHNhUm91bmQyKFxuICAgICAgYml0Z29Ec2csXG4gICAgICB7XG4gICAgICAgIC4uLnR4UmVxdWVzdFJvdW5kMSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4ucm91bmQxVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFsuLi5yb3VuZDFUcmFuc2FjdGlvbi5zaWduYXR1cmVTaGFyZXNdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcm91bmQyLnNpZ25hdHVyZVNoYXJlUm91bmQyLFxuICAgICAgcm91bmQxLnVzZXJHcGdQdWJLZXksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgcm91bmQxLCByb3VuZDIsIHR4UmVxdWVzdFJvdW5kMSwgdHhSZXF1ZXN0Um91bmQyLCBtZXNzYWdlQnVmZmVyIH07XG4gIH1cblxuICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHJvdW5kLTMgc2hhcmUgZnJvbSBvZmZsaW5lIHJvdW5kIDInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyByb3VuZDEsIHJvdW5kMiwgdHhSZXF1ZXN0Um91bmQyIH0gPSBhd2FpdCBjcmVhdGVSb3VuZDJGbG93KGJhc2VUeFJlcXVlc3QpO1xuXG4gICAgY29uc3Qgcm91bmQzID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMixcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogcm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLmZyb20sIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkU2hhcmUgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uocm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWRTaGFyZS50eXBlLCAncm91bmQzSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkU2hhcmUuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWRTaGFyZS5kYXRhLm1zZzMuc2lnbmF0dXJlLCAnbXNnMy5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSB2MiBkZWNyeXB0aW9uIHdoZW4gZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiBpcyBhIHYyIGVudmVsb3BlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLmNhbGxzRmFrZSgoaW5wdXQ6IHN0cmluZywgYWRhdGE6IHN0cmluZykgPT4gUHJvbWlzZS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHsgdjogMiwgaW5wdXQsIGFkYXRhIH0pKSk7XG4gICAgY29uc3QgZGVzdHJveSA9IHNpbm9uLnN0dWIoKTtcbiAgICBjb25zdCBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGVuY3J5cHQsIGRlc3Ryb3kgfSk7XG4gICAgbW9ja0JpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uID0gY3JlYXRlRW5jcnlwdGlvblNlc3Npb247XG5cbiAgICBjb25zdCBkZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHBhcmFtcy5pbnB1dCk7XG4gICAgICByZXR1cm4gZW52ZWxvcGUuaW5wdXQ7XG4gICAgfSk7XG4gICAgbW9ja0JpdGdvLmRlY3J5cHQgPSBkZWNyeXB0O1xuXG4gICAgY29uc3QgeyByb3VuZDEsIHJvdW5kMiwgdHhSZXF1ZXN0Um91bmQyIH0gPSBhd2FpdCBjcmVhdGVSb3VuZDJGbG93KGJhc2VUeFJlcXVlc3QsIEpTT04uc3RyaW5naWZ5KHsgdjogMiB9KSk7XG5cbiAgICBjb25zdCByb3VuZDMgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiByb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCgobW9ja0JpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQsIDQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDMuc2lnbmF0dXJlU2hhcmVSb3VuZDMuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB0YW1wZXJlZCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uIGFkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG90aGVyVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAuLi5iYXNlVHhSZXF1ZXN0LFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICBzaWduYWJsZUhleDogJ2NhZmViYWJlJyxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8xLzInLFxuICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnY2FmZWJhYmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcblxuICAgIGNvbnN0IG90aGVyRmxvdyA9IGF3YWl0IGNyZWF0ZVJvdW5kMkZsb3cob3RoZXJUeFJlcXVlc3QpO1xuICAgIGNvbnN0IHsgcm91bmQxLCB0eFJlcXVlc3RSb3VuZDIgfSA9IGF3YWl0IGNyZWF0ZVJvdW5kMkZsb3coYmFzZVR4UmVxdWVzdCk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQzU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogb3RoZXJGbG93LnJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLFxuICAgICAgICB9KSxcbiAgICAgIC9BZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHRhbXBlcmVkIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgYWRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3RoZXJUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLmJhc2VUeFJlcXVlc3QsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4OiAnY2FmZWJhYmUnLFxuICAgICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzEvMicsXG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdjYWZlYmFiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gICAgY29uc3Qgb3RoZXJGbG93ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhvdGhlclR4UmVxdWVzdCk7XG4gICAgY29uc3QgeyByb3VuZDIsIHR4UmVxdWVzdFJvdW5kMiB9ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhiYXNlVHhSZXF1ZXN0KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZSh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBvdGhlckZsb3cucm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogcm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL0FkYXRhIGRvZXMgbm90IG1hdGNoIGN5cGhlcnRleHQgYWRhdGEvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBCaXRHbyByb3VuZC0yIHNpZ25hdHVyZSBzaGFyZSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgcm91bmQxLCByb3VuZDIsIHR4UmVxdWVzdFJvdW5kMSB9ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhiYXNlVHhSZXF1ZXN0KTtcblxuICAgIGNvbnN0IHJvdW5kMVRyYW5zYWN0aW9uID0gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24odHhSZXF1ZXN0Um91bmQxKTtcbiAgICBjb25zdCB0eFJlcXVlc3ROb0JpdGdvUm91bmQyU2hhcmU6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLnR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4ucm91bmQxVHJhbnNhY3Rpb24sXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbLi4ucm91bmQxVHJhbnNhY3Rpb24uc2lnbmF0dXJlU2hhcmVzLCByb3VuZDIuc2lnbmF0dXJlU2hhcmVSb3VuZDJdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdE5vQml0Z29Sb3VuZDJTaGFyZSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICAgIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246IHJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLFxuICAgICAgICB9KSxcbiAgICAgIC9NaXNzaW5nIEJpdEdvIHJvdW5kMk91dHB1dCBzaWduYXR1cmUgc2hhcmUvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9wYWdhdGUgdGhlIHR4LW9ubHkgZ3VhcmQgd2hlbiB0cmFuc2FjdGlvbnMgYXJlIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyByb3VuZDEsIHJvdW5kMiB9ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhiYXNlVHhSZXF1ZXN0KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZSh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiB7IC4uLmJhc2VUeFJlcXVlc3QsIHRyYW5zYWN0aW9uczogdW5kZWZpbmVkIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3QsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiByb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICAgICAgfSksXG4gICAgICAvVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIHRyYW5zYWN0aW9ucyBhcnJheSBpcyBlbXB0eScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IHJvdW5kMSwgcm91bmQyIH0gPSBhd2FpdCBjcmVhdGVSb3VuZDJGbG93KGJhc2VUeFJlcXVlc3QpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHsgLi4uYmFzZVR4UmVxdWVzdCwgdHJhbnNhY3Rpb25zOiBbXSB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogcm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2dldEJpdGdvU2lnbmF0dXJlU2hhcmUnLCAoKSA9PiB7XG4gIGNvbnN0IHJvdW5kMU91dHB1dFNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7fSB9KSxcbiAgfTtcbiAgY29uc3Qgcm91bmQyT3V0cHV0U2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgc2hhcmU6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3JvdW5kMk91dHB1dCcsIGRhdGE6IHt9IH0pLFxuICB9O1xuXG4gIGl0KCdzZWxlY3RzIHRoZSByZXF1ZXN0ZWQgQml0R28gcm91bmQgb3V0cHV0IHdoZW4gbXVsdGlwbGUgcm91bmQgb3V0cHV0cyBhcmUgcHJlc2VudCcsICgpID0+IHtcbiAgICBjb25zdCBzaWduYXR1cmVTaGFyZXMgPSBbcm91bmQxT3V0cHV0U2hhcmUsIHJvdW5kMk91dHB1dFNoYXJlXTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGdldEJpdGdvU2lnbmF0dXJlU2hhcmUoc2lnbmF0dXJlU2hhcmVzLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgJ3JvdW5kMk91dHB1dCcpLFxuICAgICAgcm91bmQyT3V0cHV0U2hhcmVcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGdldEJpdGdvU2lnbmF0dXJlU2hhcmUoc2lnbmF0dXJlU2hhcmVzLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgJ3JvdW5kMU91dHB1dCcpLFxuICAgICAgcm91bmQxT3V0cHV0U2hhcmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2tpcHMgbWFsZm9ybWVkIHNoYXJlIHJlY29yZHMgd2hpbGUgc2VsZWN0aW5nIHRoZSByZXF1ZXN0ZWQgQml0R28gcm91bmQgb3V0cHV0JywgKCkgPT4ge1xuICAgIGNvbnN0IG1hbGZvcm1lZFNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgIHNoYXJlOiAnbm90LWpzb24nLFxuICAgIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBnZXRCaXRnb1NpZ25hdHVyZVNoYXJlKFttYWxmb3JtZWRTaGFyZSwgcm91bmQyT3V0cHV0U2hhcmVdLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgJ3JvdW5kMk91dHB1dCcpLFxuICAgICAgcm91bmQyT3V0cHV0U2hhcmVcbiAgICApO1xuICB9KTtcbn0pO1xuXG50eXBlIFR4UmVxdWVzdFRyYW5zYWN0aW9uID0gTm9uTnVsbGFibGU8VHhSZXF1ZXN0Wyd0cmFuc2FjdGlvbnMnXT5bbnVtYmVyXTtcblxuZnVuY3Rpb24gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24odHhSZXF1ZXN0OiBUeFJlcXVlc3QpOiBUeFJlcXVlc3RUcmFuc2FjdGlvbiB7XG4gIGFzc2VydC5vayh0eFJlcXVlc3QudHJhbnNhY3Rpb25zLCAndHhSZXF1ZXN0IG11c3QgaW5jbHVkZSB0cmFuc2FjdGlvbnMnKTtcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoLCAxLCAndHhSZXF1ZXN0IG11c3QgaGF2ZSBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbicpO1xuICByZXR1cm4gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXTtcbn1cblxuZnVuY3Rpb24gY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0OiBUeFJlcXVlc3QpOiBUeFJlcXVlc3Qge1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IGFzc2VydFNpbmdsZVRyYW5zYWN0aW9uKHR4UmVxdWVzdCk7XG4gIHJldHVybiB7XG4gICAgLi4udHhSZXF1ZXN0LFxuICAgIHRyYW5zYWN0aW9uczogW3sgLi4udHJhbnNhY3Rpb24sIHNpZ25hdHVyZVNoYXJlczogW10gfV0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNpZ25CaXRnb0VkZHNhUm91bmQxKFxuICBiaXRnb0RzZzogRWRkc2FNUFNEc2cuRFNHLFxuICB0eFJlcXVlc3Q6IFR4UmVxdWVzdCxcbiAgdXNlclJvdW5kMVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgdXNlckdwZ1B1YktleUFybW9yZWQ6IHN0cmluZyxcbiAgYml0Z29HcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleVxuKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBhc3NlcnRTaW5nbGVUcmFuc2FjdGlvbih0eFJlcXVlc3QpO1xuICB0cmFuc2FjdGlvbi5zaWduYXR1cmVTaGFyZXMucHVzaCh1c2VyUm91bmQxU2hhcmUpO1xuXG4gIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gIGNvbnN0IHBhcnNlZFVzZXJTaGFyZSA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICBKU09OLnBhcnNlKHVzZXJSb3VuZDFTaGFyZS5zaGFyZSksXG4gICAgJ0VkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMUlucHV0J1xuICApO1xuICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiB1c2VyR3BnUHViS2V5QXJtb3JlZCB9KTtcbiAgY29uc3QgdXNlclJhd01zZzFCeXRlcyA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGFyc2VkVXNlclNoYXJlLmRhdGEubXNnMSwgdXNlckdwZ0tleSk7XG4gIGNvbnN0IHVzZXJNc2cxID0ge1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheSh1c2VyUmF3TXNnMUJ5dGVzKSxcbiAgfTtcblxuICBjb25zdCBbYml0Z29Nc2cyXSA9IGJpdGdvRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvTXNnMSwgdXNlck1zZzFdKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvTXNnMiwgJ0JpdEdvIERTRyBwcm9kdWNlZCBubyByb3VuZC0yIG91dHB1dCcpO1xuICAoYml0Z29Ec2cgYXMgRWRkc2FNUFNEc2cuRFNHICYgeyByb3VuZDJNZXNzYWdlPzogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSB9KS5yb3VuZDJNZXNzYWdlID0gYml0Z29Nc2cyO1xuXG4gIGNvbnN0IGJpdGdvU2lnbmVkTXNnMSA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvTXNnMS5wYXlsb2FkKSwgYml0Z29HcGdQcml2S2V5KTtcbiAgY29uc3Qgcm91bmQxT3V0cHV0OiBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgfTtcblxuICB0cmFuc2FjdGlvbi5zaWduYXR1cmVTaGFyZXMucHVzaCh7XG4gICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkocm91bmQxT3V0cHV0KSxcbiAgfSk7XG5cbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2lnbkJpdGdvRWRkc2FSb3VuZDIoXG4gIGJpdGdvRHNnOiBFZGRzYU1QU0RzZy5EU0csXG4gIHR4UmVxdWVzdDogVHhSZXF1ZXN0LFxuICB1c2VyUm91bmQyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICB1c2VyR3BnUHViS2V5QXJtb3JlZDogc3RyaW5nLFxuICBiaXRnb0dwZ1ByaXZLZXk6IHBncC5Qcml2YXRlS2V5XG4pOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IGFzc2VydFNpbmdsZVRyYW5zYWN0aW9uKHR4UmVxdWVzdCk7XG4gIHRyYW5zYWN0aW9uLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHVzZXJSb3VuZDJTaGFyZSk7XG5cbiAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ1B1YktleUFybW9yZWQgfSk7XG4gIGNvbnN0IGJpdGdvTXNnMiA9IChiaXRnb0RzZyBhcyBFZGRzYU1QU0RzZy5EU0cgJiB7IHJvdW5kMk1lc3NhZ2U/OiBNUFNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlIH0pLnJvdW5kMk1lc3NhZ2U7XG4gIGFzc2VydC5vayhiaXRnb01zZzIsICdCaXRHbyBEU0cgaXMgbWlzc2luZyB0aGUgY2FjaGVkIHJvdW5kLTIgb3V0cHV0Jyk7XG5cbiAgY29uc3QgcGFyc2VkVXNlclJvdW5kMlNoYXJlID0gZGVjb2RlV2l0aENvZGVjKFxuICAgIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgIEpTT04ucGFyc2UodXNlclJvdW5kMlNoYXJlLnNoYXJlKSxcbiAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQnXG4gICk7XG4gIGNvbnN0IHVzZXJSYXdNc2cyQnl0ZXMgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBhcnNlZFVzZXJSb3VuZDJTaGFyZS5kYXRhLm1zZzIsIHVzZXJHcGdLZXkpO1xuICBjb25zdCB1c2VyTXNnMiA9IHtcbiAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkodXNlclJhd01zZzJCeXRlcyksXG4gIH07XG5cbiAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cyLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICBjb25zdCByb3VuZDJPdXRwdXQ6IEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICBkYXRhOiB7IG1zZzI6IGJpdGdvU2lnbmVkTXNnMiB9LFxuICB9O1xuXG4gIHRyYW5zYWN0aW9uLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHtcbiAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeShyb3VuZDJPdXRwdXQpLFxuICB9KTtcblxuICBiaXRnb0RzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtiaXRnb01zZzIsIHVzZXJNc2cyXSk7XG5cbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuZGVzY3JpYmUoJ0VkZHNhTVBDdjJVdGlscy5zaWduRWRkc2FNUEN2MlRzc1VzaW5nRXh0ZXJuYWxTaWduZXInLCAoKSA9PiB7XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gIGxldCBlZGRzYU1QQ3YyVXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgYml0Z29HcGdLZXlQYWlyOiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgbGV0IGJpdGdvR3BnUHViS2V5OiBwZ3AuS2V5O1xuXG4gIGNvbnN0IHdhbGxldElkID0gJ2FiYzEyM3dhbGxldCc7XG4gIGNvbnN0IHR4UmVxdWVzdElkID0gJ3R4cmVxLTAwMSc7XG4gIGNvbnN0IGVudGVycHJpc2VJZCA9ICdlbnQtMDAxJztcblxuICBjb25zdCBtb2NrVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgdHhSZXF1ZXN0SWQsXG4gICAgd2FsbGV0SWQsXG4gICAgZW50ZXJwcmlzZUlkLFxuICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7fSB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAncGF5bWVudCcgfSxcbiAgICB1bnNpZ25lZFR4czogW10sXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgY29uc3QgbW9ja1R4UmVxdWVzdFRyYW5zYWN0aW9uID0gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24obW9ja1R4UmVxdWVzdCk7XG4gIGNvbnN0IG1vY2tUeFJlcXVlc3RSb3VuZDI6IFR4UmVxdWVzdCA9IHtcbiAgICAuLi5tb2NrVHhSZXF1ZXN0LFxuICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAge1xuICAgICAgICAuLi5tb2NrVHhSZXF1ZXN0VHJhbnNhY3Rpb24sXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyb3VuZDJPdXRwdXQnLCBkYXRhOiB7fSB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IGR1bW15U2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgc2hhcmU6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3JvdW5kMUlucHV0JywgZGF0YToge30gfSksXG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGNoYWluIGNvbXBhdGlibGUgd2l0aDogYml0Z28ucG9zdCh1cmwpLnNlbmQoYm9keSkucmVzdWx0KClcbiAgY29uc3QgbWFrZVBvc3RDaGFpbiA9IChyZXNwb25zZTogVHhSZXF1ZXN0KTogQml0R29SZXF1ZXN0PFR4UmVxdWVzdD4gPT5cbiAgICAoeyBzZW5kOiAoKSA9PiAoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhyZXNwb25zZSkgfSkgfSBhcyB1bmtub3duIGFzIEJpdEdvUmVxdWVzdDxUeFJlcXVlc3Q+KTtcblxuICAvLyBSZXR1cm5zIGEgY2hhaW4gY29tcGF0aWJsZSB3aXRoOiBiaXRnby5nZXQodXJsKS5xdWVyeShwYXJhbXMpLnJldHJ5KG4pLnJlc3VsdCgpXG4gIGNvbnN0IG1ha2VHZXRDaGFpbiA9ICh0eFJlcXVlc3RzOiBUeFJlcXVlc3RbXSk6IEJpdEdvUmVxdWVzdDx7IHR4UmVxdWVzdHM6IFR4UmVxdWVzdFtdIH0+ID0+XG4gICAgKHtcbiAgICAgIHF1ZXJ5OiAoKSA9PiAoe1xuICAgICAgICByZXRyeTogKCkgPT4gKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyB0eFJlcXVlc3RzIH0pIH0pLFxuICAgICAgfSksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvUmVxdWVzdDx7IHR4UmVxdWVzdHM6IFR4UmVxdWVzdFtdIH0+KTtcblxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIGJpdGdvR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgLy8gRnVsbCBtb2NrIG9mIHRoZSBCaXRHbyBIVFRQIGNsaWVudCAoY29uc2lzdGVudCB3aXRoIG90aGVyIHNkay1jb3JlIHRlc3RzIHN1Y2ggYXNcbiAgICAvLyB0b2tlbkFwcHJvdmFsLnRzIGFuZCB3YWxsZXRzRXZtS2V5cmluZy50cykuICBNb2R1bGUtbGV2ZWwgc3R1YnMgb24gdHNzQ29tbW9uIGZ1bmN0aW9uc1xuICAgIC8vIGRvIG5vdCB3b3JrIHVuZGVyIHRzeCA0LnggKEVTTSBsaXZlIGJpbmRpbmdzKSwgc28gd2UgbW9jayBhdCB0aGUgYml0Z28gb2JqZWN0IGxldmVsLlxuICAgIG1vY2tCaXRnbyA9IHtcbiAgICAgIGdldEVudjogc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbSR7cGF0aH1gKSxcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldDogc2lub24uc3R1YigpLFxuICAgIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VkZHNhJyksXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICBpZDogc2lub24uc3R1YigpLnJldHVybnMod2FsbGV0SWQpLFxuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhbJ3VzZXJLZXlJZCcsICdiYWNrdXBLZXlJZCcsICdiaXRnb0tleUlkJ10pLFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogc2lub24uc3R1YigpLnJldHVybnMoJ01QQ3YyJyksXG4gICAgfSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG5cbiAgICBlZGRzYU1QQ3YyVXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4sIG1vY2tXYWxsZXQpO1xuXG4gICAgc2FuZGJveC5zdHViKGVkZHNhTVBDdjJVdGlscywgJ3BpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcnKS5yZXNvbHZlcyhiaXRnb0dwZ1B1YktleSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2FsbCBhbGwgMyBnZW5lcmF0b3JzIGFuZCByZXR1cm4gdGhlIGZpbmFsIHR4IHJlcXVlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxUeFJlcXVlc3QgPSB7IC4uLm1vY2tUeFJlcXVlc3QsIHR4UmVxdWVzdElkIH07XG5cbiAgICAvLyBzZW5kU2lnbmF0dXJlU2hhcmVWMiBpcyBjYWxsZWQgMyB0aW1lcyAob25lIHBlciByb3VuZCksIHNlbmRUeFJlcXVlc3Qgb25jZSDigJQgYWxsIHVzZSBiaXRnby5wb3N0XG4gICAgKG1vY2tCaXRnby5wb3N0IGFzIHNpbm9uLlNpbm9uU3R1YilcbiAgICAgIC5vbkNhbGwoMClcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdCkpIC8vIHJvdW5kIDEgc2lnblxuICAgICAgLm9uQ2FsbCgxKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0Um91bmQyKSkgLy8gcm91bmQgMiBzaWduXG4gICAgICAub25DYWxsKDIpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3RSb3VuZDIpKSAvLyByb3VuZCAzIHNpZ25cbiAgICAgIC5vbkNhbGwoMylcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4oZmluYWxUeFJlcXVlc3QpKTsgLy8gc2VuZFR4UmVxdWVzdCAoc2VuZClcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24gPSAnZW5jcnlwdGVkLXIxLXNlc3Npb24nO1xuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24gPSAnZW5jcnlwdGVkLXIyLXNlc3Npb24nO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSAnZW5jcnlwdGVkLWdwZy1rZXknO1xuICAgIGNvbnN0IHVzZXJHcGdQdWJLZXkgPSBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5O1xuXG4gICAgY29uc3Qgcm91bmQxU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0geyAuLi5kdW1teVNoYXJlIH07XG4gICAgY29uc3Qgcm91bmQyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0geyAuLi5kdW1teVNoYXJlLCBzaGFyZTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncm91bmQySW5wdXQnIH0pIH07XG4gICAgY29uc3Qgcm91bmQzU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0geyAuLi5kdW1teVNoYXJlLCBzaGFyZTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncm91bmQzSW5wdXQnIH0pIH07XG5cbiAgICBjb25zdCByb3VuZDFHZW5lcmF0b3IgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLnJlc29sdmVzKHsgc2lnbmF0dXJlU2hhcmVSb3VuZDE6IHJvdW5kMVNoYXJlLCB1c2VyR3BnUHViS2V5LCBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5IH0pO1xuICAgIGNvbnN0IHJvdW5kMkdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQyOiByb3VuZDJTaGFyZSwgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiB9KTtcbiAgICBjb25zdCByb3VuZDNHZW5lcmF0b3IgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzaWduYXR1cmVTaGFyZVJvdW5kMzogcm91bmQzU2hhcmUgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuc2lnbkVkZHNhTVBDdjJUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgeyB0eFJlcXVlc3Q6IG1vY2tUeFJlcXVlc3QsIHJlcUlkOiBuZXcgUmVxdWVzdFRyYWNlcigpIH0sXG4gICAgICByb3VuZDFHZW5lcmF0b3IgYXMgdW5rbm93biBhcyBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICAgIHJvdW5kMkdlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgICAgcm91bmQzR2VuZXJhdG9yIGFzIHVua25vd24gYXMgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb25cbiAgICApO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQsIGZpbmFsVHhSZXF1ZXN0KTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHJvdW5kMUdlbmVyYXRvcik7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgocm91bmQxR2VuZXJhdG9yLCB7IHR4UmVxdWVzdDogbW9ja1R4UmVxdWVzdCB9KTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHJvdW5kMkdlbmVyYXRvcik7XG4gICAgY29uc3Qgcm91bmQyQ2FsbCA9IHJvdW5kMkdlbmVyYXRvci5nZXRDYWxsKDApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDJDYWxsLmFyZ3NbMF0udHhSZXF1ZXN0LCBtb2NrVHhSZXF1ZXN0KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQyQ2FsbC5hcmdzWzBdLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sIGVuY3J5cHRlZFJvdW5kMVNlc3Npb24pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDJDYWxsLmFyZ3NbMF0uZW5jcnlwdGVkVXNlckdwZ1BydktleSwgZW5jcnlwdGVkVXNlckdwZ1BydktleSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMkNhbGwuYXJnc1swXS5iaXRnb1B1YmxpY0dwZ0tleSwgYml0Z29HcGdQdWJLZXkuYXJtb3IoKSk7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShyb3VuZDNHZW5lcmF0b3IpO1xuICAgIGNvbnN0IHJvdW5kM0NhbGwgPSByb3VuZDNHZW5lcmF0b3IuZ2V0Q2FsbCgwKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzQ2FsbC5hcmdzWzBdLnR4UmVxdWVzdCwgbW9ja1R4UmVxdWVzdFJvdW5kMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kM0NhbGwuYXJnc1swXS5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzQ2FsbC5hcmdzWzBdLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDNDYWxsLmFyZ3NbMF0uYml0Z29QdWJsaWNHcGdLZXksIGJpdGdvR3BnUHViS2V5LmFybW9yKCkpO1xuXG4gICAgLy8gMyBzZW5kU2lnbmF0dXJlU2hhcmVWMiBjYWxscyArIDEgc2VuZFR4UmVxdWVzdCA9IDQgUE9TVCBjYWxscyB0b3RhbFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCgobW9ja0JpdGdvLnBvc3QgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQsIDQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc29sdmUgdHhSZXF1ZXN0IGJ5IElEIHN0cmluZyB1c2luZyBnZXRUeFJlcXVlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gZ2V0VHhSZXF1ZXN0IHVzZXMgYml0Z28uZ2V0OyBzZW5kU2lnbmF0dXJlU2hhcmVWMiAow5czKSArIHNlbmRUeFJlcXVlc3QgdXNlIGJpdGdvLnBvc3RcbiAgICAobW9ja0JpdGdvLmdldCBhcyBzaW5vbi5TaW5vblN0dWIpLnJldHVybnMobWFrZUdldENoYWluKFttb2NrVHhSZXF1ZXN0XSkpO1xuICAgIChtb2NrQml0Z28ucG9zdCBhcyBzaW5vbi5TaW5vblN0dWIpXG4gICAgICAub25DYWxsKDApXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3QpKVxuICAgICAgLm9uQ2FsbCgxKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0Um91bmQyKSlcbiAgICAgIC5vbkNhbGwoMilcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdFJvdW5kMikpXG4gICAgICAub25DYWxsKDMpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3QpKTtcblxuICAgIGNvbnN0IHJvdW5kMUdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICBzaWduYXR1cmVTaGFyZVJvdW5kMTogZHVtbXlTaGFyZSxcbiAgICAgIHVzZXJHcGdQdWJLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiAncjEnLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogJ2tleScsXG4gICAgfSk7XG4gICAgY29uc3Qgcm91bmQyR2VuZXJhdG9yID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2lnbmF0dXJlU2hhcmVSb3VuZDI6IGR1bW15U2hhcmUsIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246ICdyMicgfSk7XG4gICAgY29uc3Qgcm91bmQzR2VuZXJhdG9yID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2lnbmF0dXJlU2hhcmVSb3VuZDM6IGR1bW15U2hhcmUgfSk7XG5cbiAgICBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuc2lnbkVkZHNhTVBDdjJUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdElkLCByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSB9LFxuICAgICAgcm91bmQxR2VuZXJhdG9yIGFzIHVua25vd24gYXMgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgICByb3VuZDJHZW5lcmF0b3IgYXMgdW5rbm93biBhcyBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICAgIHJvdW5kM0dlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRnby5nZXQgYXMgc2lub24uU2lub25TdHViKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChyb3VuZDFHZW5lcmF0b3IsIHsgdHhSZXF1ZXN0OiBtb2NrVHhSZXF1ZXN0IH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcm91bmQgMiB0eFJlcXVlc3QgaXMgbWlzc2luZyBzaWduYXR1cmVTaGFyZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgcm91bmQyTm9TaGFyZXM6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLm1vY2tUeFJlcXVlc3QsXG4gICAgICB0cmFuc2FjdGlvbnM6IFt7IC4uLm1vY2tUeFJlcXVlc3RUcmFuc2FjdGlvbiwgc2lnbmF0dXJlU2hhcmVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBbXSB9XSxcbiAgICB9O1xuXG4gICAgKG1vY2tCaXRnby5wb3N0IGFzIHNpbm9uLlNpbm9uU3R1YilcbiAgICAgIC5vbkNhbGwoMClcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdCkpXG4gICAgICAub25DYWxsKDEpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKHJvdW5kMk5vU2hhcmVzKSk7XG5cbiAgICBjb25zdCByb3VuZDFHZW5lcmF0b3IgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgc2lnbmF0dXJlU2hhcmVSb3VuZDE6IGR1bW15U2hhcmUsXG4gICAgICB1c2VyR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogJ3IxJyxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6ICdrZXknLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMkdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQyOiBkdW1teVNoYXJlLCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiAncjInIH0pO1xuICAgIGNvbnN0IHJvdW5kM0dlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQzOiBkdW1teVNoYXJlIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuc2lnbkVkZHNhTVBDdjJUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgICAgIHsgdHhSZXF1ZXN0OiBtb2NrVHhSZXF1ZXN0LCByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSB9LFxuICAgICAgICAgIHJvdW5kMUdlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgICAgICAgIHJvdW5kMkdlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgICAgICAgIHJvdW5kM0dlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICAgICAgICksXG4gICAgICAvTWlzc2luZyBzaWduYXR1cmUgc2hhcmVzIGluIHJvdW5kIDIgdHhSZXF1ZXN0L1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBhcm1vcmVkIEJpdEdvIHB1YmxpYyBHUEcga2V5IHRvIHJvdW5kIDIgYW5kIHJvdW5kIDMgZ2VuZXJhdG9ycycsIGFzeW5jICgpID0+IHtcbiAgICAobW9ja0JpdGdvLnBvc3QgYXMgc2lub24uU2lub25TdHViKVxuICAgICAgLm9uQ2FsbCgwKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0KSlcbiAgICAgIC5vbkNhbGwoMSlcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdFJvdW5kMikpXG4gICAgICAub25DYWxsKDIpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3RSb3VuZDIpKVxuICAgICAgLm9uQ2FsbCgzKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0KSk7XG5cbiAgICBjb25zdCByb3VuZDFHZW5lcmF0b3IgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgc2lnbmF0dXJlU2hhcmVSb3VuZDE6IGR1bW15U2hhcmUsXG4gICAgICB1c2VyR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogJ3IxJyxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6ICdrZXknLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMkdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQyOiBkdW1teVNoYXJlLCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiAncjInIH0pO1xuICAgIGNvbnN0IHJvdW5kM0dlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQzOiBkdW1teVNoYXJlIH0pO1xuXG4gICAgYXdhaXQgZWRkc2FNUEN2MlV0aWxzLnNpZ25FZGRzYU1QQ3YyVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICAgIHsgdHhSZXF1ZXN0OiBtb2NrVHhSZXF1ZXN0LCByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSB9LFxuICAgICAgcm91bmQxR2VuZXJhdG9yIGFzIHVua25vd24gYXMgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgICByb3VuZDJHZW5lcmF0b3IgYXMgdW5rbm93biBhcyBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICAgIHJvdW5kM0dlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGFybW9yZWRLZXkgPSBiaXRnb0dwZ1B1YktleS5hcm1vcigpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHJvdW5kMkdlbmVyYXRvci5nZXRDYWxsKDApLmFyZ3NbMF0uYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICBhcm1vcmVkS2V5LFxuICAgICAgJ3JvdW5kIDIgc2hvdWxkIHJlY2VpdmUgYXJtb3JlZCBCaXRHbyBHUEcga2V5J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgcm91bmQzR2VuZXJhdG9yLmdldENhbGwoMCkuYXJnc1swXS5iaXRnb1B1YmxpY0dwZ0tleSxcbiAgICAgIGFybW9yZWRLZXksXG4gICAgICAncm91bmQgMyBzaG91bGQgcmVjZWl2ZSBhcm1vcmVkIEJpdEdvIEdQRyBrZXknXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gYnl0ZXNUb1dvcmQoYnl0ZXM/OiBVaW50OEFycmF5IHwgbnVtYmVyW10pOiBudW1iZXIge1xuICBpZiAoIShieXRlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGJ5dGVzLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnl0ZXMgbXVzdCBiZSBhIFVpbnQ4QXJyYXkgd2l0aCBsZW5ndGggNCcpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuXG5kZXNjcmliZSgnRUREU0FVdGlscy5pc0VkZHNhTXBjVjFTaWduaW5nTWF0ZXJpYWwnLCAoKSA9PiB7XG4gIGNvbnN0IFBBU1NQSFJBU0UgPSAndGVzdC1wYXNzcGhyYXNlJztcblxuICBjb25zdCBNUEN2MV9NQVRFUklBTF9CQUNLVVAgPSB7XG4gICAgdVNoYXJlOiB7IGk6IDEsIHQ6IDIsIG46IDMsIHk6ICdhYWJiY2MnLCBzZWVkOiAnZGVhZGJlZWYwMTIzNDU2NycsIGNoYWluY29kZTogJzAwJyB9LFxuICAgIGJpdGdvWVNoYXJlOiB7IGk6IDMsIGo6IDEsIHk6ICdhYWJiY2MnLCB1OiAnYml0Z28tdS12YWx1ZScsIGNoYWluY29kZTogJzAwJyB9LFxuICAgIGJhY2t1cFlTaGFyZTogeyBpOiAyLCBqOiAxLCB5OiAnYWFiYmNjJywgdTogJ2JhY2t1cC11LXZhbHVlJywgY2hhaW5jb2RlOiAnMDAnIH0sXG4gIH07XG5cbiAgY29uc3QgTVBDdjFfTUFURVJJQUxfVVNFUiA9IHtcbiAgICB1U2hhcmU6IHsgaTogMiwgdDogMiwgbjogMywgeTogJ2FhYmJjYycsIHNlZWQ6ICdkZWFkYmVlZjAxMjM0NTY3JywgY2hhaW5jb2RlOiAnMDAnIH0sXG4gICAgYml0Z29ZU2hhcmU6IHsgaTogMywgajogMiwgeTogJ2FhYmJjYycsIHU6ICdiaXRnby11LXZhbHVlJywgY2hhaW5jb2RlOiAnMDAnIH0sXG4gICAgdXNlcllTaGFyZTogeyBpOiAxLCBqOiAyLCB5OiAnYWFiYmNjJywgdTogJ3VzZXItdS12YWx1ZScsIGNoYWluY29kZTogJzAwJyB9LFxuICB9O1xuXG4gIGNvbnN0IE1QQ3YyX0NCT1JfQllURVMgPSBCdWZmZXIuZnJvbShbMHhkOSwgMHgwMSwgMHgwNCwgMHhhMywgMHg2MSwgMHg3OCwgMHgxOCwgMHgwMF0pLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICBsZXQgbW9ja0JpdGdvOiBCaXRHb0Jhc2U7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIC8vIHNkay1jb3JlIGhhcyBubyBkZXZEZXBlbmRlbmN5IG9uIHNkay1hcGkvYXJnb24yLCBzbyB2MiBlbnZlbG9wZXMgYXJlIHNpbXVsYXRlZCBoZXJlLlxuICAgIC8vIFJlYWwgYml0Z28uZGVjcnlwdCByb3V0ZXMgdjIgdG8gQXJnb24yaWQ7IHRoZSBzdHViIHJldHVybnMgTVBDdjIgQ0JPUiBwbGFpbnRleHQgaW5zdGVhZC5cbiAgICBtb2NrQml0Z28gPSB7XG4gICAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgaW5wdXQ6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChpc1YyRW52ZWxvcGUocGFyYW1zLmlucHV0KSkge1xuICAgICAgICAgIHJldHVybiBNUEN2Ml9DQk9SX0JZVEVTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzamNsLmRlY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQpO1xuICAgICAgfSksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgdHJ1ZSBmb3IgTVBDdjEgU0pDTC1lbmNyeXB0ZWQga2V5Y2FyZCB3aXRoIGJhY2t1cFlTaGFyZSArIGNvcnJlY3QgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoUEFTU1BIUkFTRSwgSlNPTi5zdHJpbmdpZnkoTVBDdjFfTUFURVJJQUxfQkFDS1VQKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGF3YWl0IEVERFNBVXRpbHMuaXNFZGRzYU1wY1YxU2lnbmluZ01hdGVyaWFsKGVuY3J5cHRlZCwgUEFTU1BIUkFTRSksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB0cnVlIGZvciBNUEN2MSBTSkNMLWVuY3J5cHRlZCBrZXljYXJkIHdpdGggdXNlcllTaGFyZSArIGNvcnJlY3QgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoUEFTU1BIUkFTRSwgSlNPTi5zdHJpbmdpZnkoTVBDdjFfTUFURVJJQUxfVVNFUikpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhd2FpdCBFRERTQVV0aWxzLmlzRWRkc2FNcGNWMVNpZ25pbmdNYXRlcmlhbChlbmNyeXB0ZWQsIFBBU1NQSFJBU0UpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgZmFsc2UgZm9yIE1QQ3YyIENCT1IgY29udGVudCB3cmFwcGVkIGluIFNKQ0wgZW52ZWxvcGUgKyBjb3JyZWN0IHBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KFBBU1NQSFJBU0UsIE1QQ3YyX0NCT1JfQllURVMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhd2FpdCBFRERTQVV0aWxzLmlzRWRkc2FNcGNWMVNpZ25pbmdNYXRlcmlhbChlbmNyeXB0ZWQsIFBBU1NQSFJBU0UpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGZhbHNlIGZvciBNUEN2MiBBcmdvbjJpZCBlbnZlbG9wZSAodjIpICsgY29ycmVjdCBwYXNzcGhyYXNlIChmb3J3YXJkLWNvbXBhdCknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmFrZVYyRW52ZWxvcGUgPSBKU09OLnN0cmluZ2lmeSh7IHY6IDIsIG06IDY1NTM2LCB0OiAzLCBwOiA0LCBzYWx0OiAnQUFBQScsIGl2OiAnQUFBQScsIGN0OiAnQUFBQScgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGF3YWl0IEVERFNBVXRpbHMuaXNFZGRzYU1wY1YxU2lnbmluZ01hdGVyaWFsKGZha2VWMkVudmVsb3BlLCBQQVNTUEhSQVNFLCBtb2NrQml0Z28pLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3Mgb24gd3JvbmcgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoUEFTU1BIUkFTRSwgSlNPTi5zdHJpbmdpZnkoTVBDdjFfTUFURVJJQUxfQkFDS1VQKSk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBFRERTQVV0aWxzLmlzRWRkc2FNcGNWMVNpZ25pbmdNYXRlcmlhbChlbmNyeXB0ZWQsICd3cm9uZy1wYXNzcGhyYXNlJyksXG4gICAgICAvY2NtOiB0YWcgZG9lc24ndCBtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBmYWxzZSB3aGVuIG5laXRoZXIgYmFja3VwWVNoYXJlLnUgbm9yIHVzZXJZU2hhcmUudSBpcyBwcmVzZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRpYWwgPSB7IHVTaGFyZTogeyBzZWVkOiAnYWJjJyB9LCBiaXRnb1lTaGFyZTogeyB1OiAneHl6JyB9IH07XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KFBBU1NQSFJBU0UsIEpTT04uc3RyaW5naWZ5KHBhcnRpYWwpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgRUREU0FVdGlscy5pc0VkZHNhTXBjVjFTaWduaW5nTWF0ZXJpYWwoZW5jcnlwdGVkLCBQQVNTUEhSQVNFKSwgZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2lnblJlY292ZXJ5RWRkc2FNUEN2MicsICgpID0+IHtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wLzAnO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgNjQtYnl0ZSBzaWduYXR1cmUgdGhhdCB2ZXJpZmllcyBhZ2FpbnN0IHRoZSBkZXJpdmVkIHB1YmxpYyBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2RlYWRiZWVmJywgJ2hleCcpO1xuICAgIGNvbnN0IGNvbW1vbktleUNoYWluID0gdXNlckRrZy5nZXRDb21tb25LZXljaGFpbigpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgRUREU0FVdGlscy5zaWduUmVjb3ZlcnlFZGRzYU1QQ3YyKFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgdXNlckRrZy5nZXRLZXlTaGFyZSgpLFxuICAgICAgYmFja3VwRGtnLmdldEtleVNoYXJlKCksXG4gICAgICBjb21tb25LZXlDaGFpblxuICAgICk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnbmF0dXJlLmxlbmd0aCwgNjQpO1xuXG4gICAgY29uc3QgbXBjID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleUNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBCdWZmZXIuZnJvbShkZXJpdmVkS2V5Y2hhaW4uc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG4gICAgY29uc3Qgb2sgPSBlZDI1NTE5LnZlcmlmeShuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShtZXNzYWdlKSwgbmV3IFVpbnQ4QXJyYXkocHVibGljS2V5Qnl0ZXMpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2ssIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZlcmlmeWluZyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgYSBkaWZmZXJlbnQgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZGVhZGJlZWYnLCAnaGV4Jyk7XG4gICAgY29uc3QgY29tbW9uS2V5Q2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBFRERTQVV0aWxzLnNpZ25SZWNvdmVyeUVkZHNhTVBDdjIoXG4gICAgICBtZXNzYWdlLFxuICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICB1c2VyRGtnLmdldEtleVNoYXJlKCksXG4gICAgICBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgIGNvbW1vbktleUNoYWluXG4gICAgKTtcblxuICAgIGNvbnN0IGRpZmZlcmVudE1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnY2FmZWJhYmUnLCAnaGV4Jyk7XG4gICAgY29uc3QgbXBjID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleUNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBCdWZmZXIuZnJvbShkZXJpdmVkS2V5Y2hhaW4uc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG4gICAgY29uc3Qgb2sgPSBlZDI1NTE5LnZlcmlmeShcbiAgICAgIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksXG4gICAgICBuZXcgVWludDhBcnJheShkaWZmZXJlbnRNZXNzYWdlKSxcbiAgICAgIG5ldyBVaW50OEFycmF5KHB1YmxpY0tleUJ5dGVzKVxuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9rLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIHdyb25nIGNvbW1vbktleUNoYWluIGlzIHByb3ZpZGVkICh2ZXJpZmljYXRpb24gbWlzbWF0Y2gpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3dyb25nRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZGVhZGJlZWYnLCAnaGV4Jyk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIEVERFNBVXRpbHMuc2lnblJlY292ZXJ5RWRkc2FNUEN2MihcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgIHVzZXJEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgICAgICBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgICAgICB3cm9uZ0RrZy5nZXRDb21tb25LZXljaGFpbigpIC8vIGtleSBjaGFpbiBmcm9tIGEgZGlmZmVyZW50IHdhbGxldFxuICAgICAgICApLFxuICAgICAgL0VkRFNBIE1QQ3YyIHJlY292ZXJ5IHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkL1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdFZGRzYU1QQ3YyVXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgdXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IGNhbGxiYWNrczogRWRkc2FNUEN2MktleUdlbkNhbGxiYWNrcztcbiAgY29uc3QgZW50ZXJwcmlzZSA9ICdlbnRlcnByaXNlLWlkJztcbiAgY29uc3Qgc2Vzc2lvbklkID0gJ3Nlc3Npb24tMDAxJztcbiAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSAnY29tbW9uLWtleWNoYWluLWhleCc7XG5cbiAgY29uc3QgdXNlclN0YXRlID0geyBlbmNyeXB0ZWREYXRhOiAndS1kYXRhJywgZW5jcnlwdGVkRGF0YUtleTogJ3UtZGF0YS1rZXknIH07XG4gIGNvbnN0IGJhY2t1cFN0YXRlID0geyBlbmNyeXB0ZWREYXRhOiAnYi1kYXRhJywgZW5jcnlwdGVkRGF0YUtleTogJ2ItZGF0YS1rZXknIH07XG4gIGNvbnN0IHVzZXJTaWduZWRNc2cxOiBNUFNUeXBlcy5NUFNTaWduZWRNZXNzYWdlID0geyBtZXNzYWdlOiAndW1zZzEnLCBzaWduYXR1cmU6ICd1c2lnMScgfTtcbiAgY29uc3QgYmFja3VwU2lnbmVkTXNnMTogTVBTVHlwZXMuTVBTU2lnbmVkTWVzc2FnZSA9IHsgbWVzc2FnZTogJ2Jtc2cxJywgc2lnbmF0dXJlOiAnYnNpZzEnIH07XG4gIGNvbnN0IHVzZXJTaWduZWRNc2cyOiBNUFNUeXBlcy5NUFNTaWduZWRNZXNzYWdlID0geyBtZXNzYWdlOiAndW1zZzInLCBzaWduYXR1cmU6ICd1c2lnMicgfTtcbiAgY29uc3QgYmFja3VwU2lnbmVkTXNnMjogTVBTVHlwZXMuTVBTU2lnbmVkTWVzc2FnZSA9IHsgbWVzc2FnZTogJ2Jtc2cyJywgc2lnbmF0dXJlOiAnYnNpZzInIH07XG4gIGNvbnN0IGJpdGdvTXNnMTogTVBTVHlwZXMuTVBTU2lnbmVkTWVzc2FnZSA9IHsgbWVzc2FnZTogJ2JpdGdvLW1zZzEnLCBzaWduYXR1cmU6ICdiaXRnby1zaWcxJyB9O1xuICBjb25zdCBiaXRnb01zZzI6IE1QU1R5cGVzLk1QU1NpZ25lZE1lc3NhZ2UgPSB7IG1lc3NhZ2U6ICdiaXRnby1tc2cyJywgc2lnbmF0dXJlOiAnYml0Z28tc2lnMicgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBjYWxsYmFja3MgPSB7XG4gICAgICBpbml0aWFsaXplQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHVzZXJHcGdQdWJsaWNLZXk6ICd1c2VyLWdwZy1wdWInLFxuICAgICAgICBiYWNrdXBHcGdQdWJsaWNLZXk6ICdiYWNrdXAtZ3BnLXB1YicsXG4gICAgICAgIHVzZXJTdGF0ZSxcbiAgICAgICAgYmFja3VwU3RhdGUsXG4gICAgICB9KSxcbiAgICAgIHJvdW5kMUNhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICB1c2VyU2lnbmVkTXNnMSxcbiAgICAgICAgYmFja3VwU2lnbmVkTXNnMSxcbiAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBiYWNrdXBTdGF0ZSxcbiAgICAgIH0pLFxuICAgICAgcm91bmQyQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHVzZXJTaWduZWRNc2cyLFxuICAgICAgICBiYWNrdXBTaWduZWRNc2cyLFxuICAgICAgICB1c2VyU3RhdGUsXG4gICAgICAgIGJhY2t1cFN0YXRlLFxuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZUNhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBjb21tb25LZXljaGFpbiB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja0JpdEdvID0ge1xuICAgICAgZ2V0RW52OiBzaW5vbi5zdHViKCkucmV0dXJucygnZGV2JyksXG4gICAgfSBhcyBhbnk7XG5cbiAgICBjb25zdCBtb2NrS2V5Y2hhaW5zID0ge1xuICAgICAgYWRkOiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoKHBhcmFtczogYW55KSA9PiBQcm9taXNlLnJlc29sdmUoeyBpZDogYCR7cGFyYW1zLnNvdXJjZX0ta2V5LWlkYCwgY29tbW9uS2V5Y2hhaW4sIGlzTVBDdjI6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgfSBhcyBhbnk7XG5cbiAgICB1dGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMobW9ja0JpdEdvLCBtb2NrQ29pbik7XG5cbiAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzJyBhcyBhbnkpLnJlc29sdmVzKHsgZWRkc2FNcGN2MlB1YmxpY0tleTogbnVsbCB9KTtcbiAgICAodXRpbHMgYXMgYW55KS5iaXRnb0VkZHNhTXBjdjJQdWJsaWNHcGdLZXkgPSB7IGFybW9yOiAoKSA9PiAnLS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tXFxuJyB9O1xuXG4gICAgc2lub24uc3R1Yih1dGlscywgJ3NlbmRLZXlHZW5lcmF0aW9uUm91bmQxJykucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgYXMgYW55LFxuICAgICAgYml0Z29Nc2cxLFxuICAgIH0pO1xuICAgIHNpbm9uLnN0dWIodXRpbHMsICdzZW5kS2V5R2VuZXJhdGlvblJvdW5kMicpLnJlc29sdmVzKHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkIGFzIGFueSxcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluOiBjb21tb25LZXljaGFpbiBhcyBhbnksXG4gICAgICBiaXRnb01zZzIsXG4gICAgfSk7XG4gICAgc2lub24uc3R1Yih1dGlscyBhcyBhbnksICdhZGRCaXRnb0tleWNoYWluJykucmVzb2x2ZXMoeyBpZDogJ2JpdGdvLWtleS1pZCcsIGNvbW1vbktleWNoYWluLCBpc01QQ3YyOiB0cnVlIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnZva2UgY2FsbGJhY2tzIGluIG9yZGVyIGFuZCByZXR1cm4ga2V5Y2hhaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KTtcblxuICAgIGFzc2VydC5vayhrZXljaGFpbnMudXNlcktleWNoYWluKTtcbiAgICBhc3NlcnQub2soa2V5Y2hhaW5zLmJhY2t1cEtleWNoYWluKTtcbiAgICBhc3NlcnQub2soa2V5Y2hhaW5zLmJpdGdvS2V5Y2hhaW4pO1xuXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoY2FsbGJhY2tzLmluaXRpYWxpemVDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5yb3VuZDFDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5yb3VuZDJDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5maW5hbGl6ZUNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyByb3VuZDEgcmVzcG9uc2UgdG8gcm91bmQyQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3Qgcm91bmQyQXJncyA9IChjYWxsYmFja3Mucm91bmQyQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MuYml0Z29Nc2cxLCBiaXRnb01zZzEpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy51c2VyU2lnbmVkTXNnMSwgdXNlclNpZ25lZE1zZzEpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy5iYWNrdXBTaWduZWRNc2cxLCBiYWNrdXBTaWduZWRNc2cxKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MudXNlclN0YXRlLCB1c2VyU3RhdGUpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy5iYWNrdXBTdGF0ZSwgYmFja3VwU3RhdGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3Mgcm91bmQyIHJlc3BvbnNlIHRvIGZpbmFsaXplQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3QgZmluYWxpemVBcmdzID0gKGNhbGxiYWNrcy5maW5hbGl6ZUNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1YikuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYml0Z29Nc2cyLCBiaXRnb01zZzIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYml0Z29Db21tb25LZXljaGFpbiwgY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZmluYWxpemVBcmdzLnVzZXJTdGF0ZSwgdXNlclN0YXRlKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGZpbmFsaXplQXJncy5iYWNrdXBTdGF0ZSwgYmFja3VwU3RhdGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGtleWNoYWlucyB3aXRoIGlzTVBDdjI6IHRydWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3QgbW9ja0tleWNoYWlucyA9ICh1dGlscyBhcyBhbnkpLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIGNvbnN0IGFkZENhbGxzID0gKG1vY2tLZXljaGFpbnMuYWRkIGFzIHNpbm9uLlNpbm9uU3R1YikuZ2V0Q2FsbHMoKTtcbiAgICBhc3NlcnQub2soYWRkQ2FsbHMubGVuZ3RoID49IDIsICdrZXljaGFpbnMuYWRkIHNob3VsZCBiZSBjYWxsZWQgZm9yIHVzZXIgYW5kIGJhY2t1cCcpO1xuICAgIGZvciAoY29uc3QgY2FsbCBvZiBhZGRDYWxscykge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNhbGwuYXJnc1swXS5pc01QQ3YyLCB0cnVlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjYWxsLmFyZ3NbMF0ua2V5VHlwZSwgJ3RzcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNhbGwuYXJnc1swXS5jb21tb25LZXljaGFpbiwgY29tbW9uS2V5Y2hhaW4pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBmaW5hbGl6ZUNhbGxiYWNrIHJldHVybnMgbWlzbWF0Y2hlZCBjb21tb25LZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoY2FsbGJhY2tzLmZpbmFsaXplQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5yZXNvbHZlcyh7IGNvbW1vbktleWNoYWluOiAnZGlmZmVyZW50LWtleWNoYWluJyB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pLFxuICAgICAgL0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHdoZW4gcm91bmQyIHJldHVybnMgbWlzbWF0Y2hlZCBzZXNzaW9uSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgKHV0aWxzLnNlbmRLZXlHZW5lcmF0aW9uUm91bmQyIGFzIHNpbm9uLlNpbm9uU3R1YikucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiAnZGlmZmVyZW50LXNlc3Npb24nIGFzIGFueSxcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluOiBjb21tb25LZXljaGFpbiBhcyBhbnksXG4gICAgICBiaXRnb01zZzIsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KSxcbiAgICAgIC9Sb3VuZCAxIGFuZCByb3VuZCAyIHNlc3Npb24gSURzIGRvIG5vdCBtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIEJpdEdvIEVkRFNBIE1QQ3YyIEdQRyBwdWJsaWMga2V5IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgKHV0aWxzIGFzIGFueSkuYml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5ID0gdW5kZWZpbmVkO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiB1dGlscy5jcmVhdGVLZXljaGFpbnNXaXRoRXh0ZXJuYWxTaWduZXIoeyBlbnRlcnByaXNlLCBjYWxsYmFja3MgfSksXG4gICAgICAvRmFpbGVkIHRvIGdldCBCaXRHbyBFZERTQSBNUEN2MiBHUEcgcHVibGljIGtleS9cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|
|
1548
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsNkNBQStCO0FBQy9CLG1DQUFxQztBQUNyQyxvREFBMkY7QUFDM0YsbURBQWdEO0FBQ2hELGtEQUFvQztBQUNwQyxzREFPNkI7QUFDN0IsK0NBZStCO0FBQy9CLGlGQU8wRDtBQUMxRCx1RUFBd0Y7QUFDeEYsbUVBQWdGO0FBQ2hGLHFFQUEyRTtBQUMzRSxpRkFBb0Y7QUFDcEYsdUZBQTBGO0FBQzFGLCtFQUErRTtBQUUvRSxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDcEQsSUFBSSxZQUFvQixDQUFDO0lBQ3pCLElBQUksY0FBc0IsQ0FBQztJQUMzQixJQUFJLGFBQXFCLENBQUM7SUFDMUIsSUFBSSxjQUE4QixDQUFDO0lBQ25DLElBQUksZ0JBQWdDLENBQUM7SUFDckMsSUFBSSxlQUErQixDQUFDO0lBQ3BDLElBQUksY0FBdUIsQ0FBQztJQUU1QixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDL0IsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRTdCLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsaUNBQWtCLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUEsaUNBQWtCLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLGlDQUFrQixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVELGNBQWMsR0FBRyxNQUFNLEdB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Q0FBQztRQUV2RCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUN4RSxnREFBZ0QsQ0FDakQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEVkZHNhTVBTRGtnLCBFZGRzYU1QU0RzZywgTVBTQ29tbXMsIE1QU1R5cGVzLCBNUFNVdGlsIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IGVkMjU1MTkgfSBmcm9tICdAbm9ibGUvY3VydmVzL2VkMjU1MTknO1xuaW1wb3J0ICogYXMgc2pjbCBmcm9tICdAYml0Z28vc2pjbCc7XG5pbXBvcnQge1xuICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxT3V0cHV0LFxuICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0LFxuICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCxcbiAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzT3V0cHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7XG4gIEJpdEdvQmFzZSxcbiAgQml0R29SZXF1ZXN0LFxuICBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDJHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBFRERTQVV0aWxzLFxuICBFZGRzYU1QQ3YyS2V5R2VuQ2FsbGJhY2tzLFxuICBFZGRzYU1QQ3YyVXRpbHMsXG4gIElCYXNlQ29pbixcbiAgSVdhbGxldCxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIFNpZ25hdHVyZVNoYXJlVHlwZSxcbiAgVHhSZXF1ZXN0LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5pbXBvcnQgeyBnZXRJbml0aWFsaXplZE1wY0luc3RhbmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9lZGRzYS9lZGRzYSc7XG5pbXBvcnQgeyBnZXRCaXRnb1NpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy9jb21tb24nO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2NvZGVjcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUdQR0tleVBhaXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvb3BlbmdwZ1V0aWxzJztcbmltcG9ydCB7IE1QQ3YyUGFydGllc0VudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL3R5cGVzTVBDdjInO1xuaW1wb3J0IHsgaXNWMkVudmVsb3BlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVHlwZXMnO1xuXG5kZXNjcmliZSgnRWREU0EgTVBTIERTRyBoZWxwZXIgZnVuY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICBsZXQgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiYWNrdXBLZXlTaGFyZTogQnVmZmVyO1xuICBsZXQgYml0Z29LZXlTaGFyZTogQnVmZmVyO1xuICBsZXQgdXNlckdwZ1ByaXZLZXk6IHBncC5Qcml2YXRlS2V5O1xuICBsZXQgYmFja3VwR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1ByaXZLZXk6IHBncC5Qcml2YXRlS2V5O1xuICBsZXQgYml0Z29HcGdQdWJLZXk6IHBncC5LZXk7XG5cbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgRWREU0EgREtHIGtleSBzaGFyZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlckdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiYWNrdXBHcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgY29uc3QgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG5cbiAgICB1c2VyR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXkgfSk7XG4gICAgYmFja3VwR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJhY2t1cEdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiaXRnb0dwZ1ByaXZLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiaXRnb0dwZ1B1YktleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSB9KTtcblxuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2csIGJpdGdvRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIHVzZXJLZXlTaGFyZSA9IHVzZXJEa2cuZ2V0S2V5U2hhcmUoKTtcbiAgICBiYWNrdXBLZXlTaGFyZSA9IGJhY2t1cERrZy5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvS2V5U2hhcmUgPSBiaXRnb0RrZy5nZXRLZXlTaGFyZSgpO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgYXdhaXQgdXNlckRzZy5pbml0RHNnKHVzZXJLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gdXNlckRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUodXNlck1zZzEsIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCBiYWNrdXAgcm91bmQtMSBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhd2FpdCBiYWNrdXBEc2cuaW5pdERzZyhiYWNrdXBLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKFxuICAgICAgYmFja3VwTXNnMSxcbiAgICAgIGJhY2t1cEdwZ1ByaXZLZXksXG4gICAgICBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLkJBQ0tVUCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMSBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGJpdGdvRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhd2FpdCBiaXRnb0RzZy5pbml0RHNnKGJpdGdvS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgICBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lKHJvdW5kMU91dHB1dCwgYml0Z29HcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mcm9tLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQub2socmVzdWx0LnBheWxvYWQubGVuZ3RoID4gMCwgJ3BheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZSBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1zZzE6IHtcbiAgICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgndGFtcGVyZWQnKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgc2lnbmF0dXJlOiAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cXG5cXG5JTlZBTElEXFxuLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tXFxuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUocm91bmQxT3V0cHV0LCBiaXRnb0dwZ1B1YktleSksICdzaG91bGQgdGhyb3cgb24gaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIFJvdW5kIDIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2dldFNpZ25hdHVyZVNoYXJlUm91bmRUd28gc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMiBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGF3YWl0IHVzZXJEc2cuaW5pdERzZyh1c2VyS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBjb25zdCB1c2VyTXNnMSA9IHVzZXJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBjb25zdCBiaXRnb01zZzEgPSBiaXRnb0RzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMSA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvTXNnMS5wYXlsb2FkKSwgYml0Z29HcGdQcml2S2V5KTtcbiAgICBjb25zdCBiaXRnb0Rlc2VyaWFsaXplZE1zZzEgPSBhd2FpdCB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lKFxuICAgICAgeyB0eXBlOiAncm91bmQxT3V0cHV0JywgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSB9LFxuICAgICAgYml0Z29HcGdQdWJLZXlcbiAgICApO1xuICAgIGNvbnN0IFt1c2VyTXNnMl0gPSB1c2VyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3VzZXJNc2cxLCBiaXRnb0Rlc2VyaWFsaXplZE1zZzFdKTtcblxuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlck1zZzIsIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMklucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzIubWVzc2FnZSwgJ21zZzIubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzIuc2lnbmF0dXJlLCAnbXNnMi5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byBzaG91bGQgYnVpbGQgYSB2YWxpZCBiYWNrdXAgcm91bmQtMiBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhd2FpdCBiYWNrdXBEc2cuaW5pdERzZyhiYWNrdXBLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMSA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUoXG4gICAgICB7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW2JhY2t1cE1zZzJdID0gYmFja3VwRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JhY2t1cE1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV0pO1xuXG4gICAgY29uc3Qgc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byhcbiAgICAgIGJhY2t1cE1zZzIsXG4gICAgICBiYWNrdXBHcGdQcml2S2V5LFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLmZyb20sIFNpZ25hdHVyZVNoYXJlVHlwZS5CQUNLVVApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDJJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2cyLm1lc3NhZ2UsICdtc2cyLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2cyLnNpZ25hdHVyZSwgJ21zZzIuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28gc2hvdWxkIHZlcmlmeSBhIHZhbGlkIEJpdEdvIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCB1c2VyRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGF3YWl0IHVzZXJEc2cuaW5pdERzZyh1c2VyS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBjb25zdCB1c2VyTXNnMSA9IHVzZXJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBjb25zdCBiaXRnb01zZzEgPSBiaXRnb0RzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IFtiaXRnb01zZzJdID0gYml0Z29Ec2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYml0Z29Nc2cxLCB1c2VyTXNnMV0pO1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMiA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvTXNnMi5wYXlsb2FkKSwgYml0Z29HcGdQcml2S2V5KTtcblxuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMk91dHB1dCcsXG4gICAgICBkYXRhOiB7IG1zZzI6IGJpdGdvU2lnbmVkTXNnMiB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvKHJvdW5kMk91dHB1dCwgYml0Z29HcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mcm9tLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQub2socmVzdWx0LnBheWxvYWQubGVuZ3RoID4gMCwgJ3BheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0ID0ge1xuICAgICAgdHlwZTogJ3JvdW5kMk91dHB1dCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG1zZzI6IHtcbiAgICAgICAgICBtZXNzYWdlOiBCdWZmZXIuZnJvbSgndGFtcGVyZWQnKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgc2lnbmF0dXJlOiAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cXG5cXG5JTlZBTElEXFxuLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tXFxuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28ocm91bmQyT3V0cHV0LCBiaXRnb0dwZ1B1YktleSksICdzaG91bGQgdGhyb3cgb24gaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIFJvdW5kIDMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2dldFNpZ25hdHVyZVNoYXJlUm91bmRUaHJlZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0zIHNoYXJlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgYXdhaXQgdXNlckRzZy5pbml0RHNnKHVzZXJLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gdXNlckRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICAgIGNvbnN0IGJpdGdvRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhd2FpdCBiaXRnb0RzZy5pbml0RHNnKGJpdGdvS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIGRlcml2YXRpb25QYXRoLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgLy8gQWR2YW5jZSB0byByb3VuZCAyXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMSA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUoXG4gICAgICB7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW3VzZXJNc2cyXSA9IHVzZXJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbdXNlck1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV0pO1xuXG4gICAgY29uc3QgW2JpdGdvTXNnMl0gPSBiaXRnb0RzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtiaXRnb01zZzEsIHVzZXJNc2cxXSk7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cyLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMiA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUd28oXG4gICAgICB7IHR5cGU6ICdyb3VuZDJPdXRwdXQnLCBkYXRhOiB7IG1zZzI6IGJpdGdvU2lnbmVkTXNnMiB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW3VzZXJNc2czXSA9IHVzZXJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbdXNlck1zZzIsIGJpdGdvRGVzZXJpYWxpemVkTXNnMl0pO1xuXG4gICAgY29uc3Qgc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlKHVzZXJNc2czLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ2dldFNpZ25hdHVyZVNoYXJlUm91bmRUaHJlZSBzaG91bGQgYnVpbGQgYSB2YWxpZCBiYWNrdXAgcm91bmQtMyBzaGFyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBEc2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhd2FpdCBiYWNrdXBEc2cuaW5pdERzZyhiYWNrdXBLZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuICAgIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cxLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMSA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRPbmUoXG4gICAgICB7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7IG1zZzE6IGJpdGdvU2lnbmVkTXNnMSB9IH0sXG4gICAgICBiaXRnb0dwZ1B1YktleVxuICAgICk7XG4gICAgY29uc3QgW2JhY2t1cE1zZzJdID0gYmFja3VwRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JhY2t1cE1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV0pO1xuXG4gICAgY29uc3QgW2JpdGdvTXNnMl0gPSBiaXRnb0RzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtiaXRnb01zZzEsIGJhY2t1cE1zZzFdKTtcbiAgICBjb25zdCBiaXRnb1NpZ25lZE1zZzIgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiaXRnb01zZzIucGF5bG9hZCksIGJpdGdvR3BnUHJpdktleSk7XG4gICAgY29uc3QgYml0Z29EZXNlcmlhbGl6ZWRNc2cyID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhcbiAgICAgIHsgdHlwZTogJ3JvdW5kMk91dHB1dCcsIGRhdGE6IHsgbXNnMjogYml0Z29TaWduZWRNc2cyIH0gfSxcbiAgICAgIGJpdGdvR3BnUHViS2V5XG4gICAgKTtcbiAgICBjb25zdCBbYmFja3VwTXNnM10gPSBiYWNrdXBEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbYmFja3VwTXNnMiwgYml0Z29EZXNlcmlhbGl6ZWRNc2cyXSk7XG5cbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBNc2czLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ0VkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQzSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMy5tZXNzYWdlLCAnbXNnMy5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMy5zaWduYXR1cmUsICdtc2czLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUgc2hvdWxkIHZlcmlmeSBhIHZhbGlkIEJpdEdvIHJvdW5kLTMgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBbLCBbYml0Z29Nc2czXV0gPSAoYXdhaXQgTVBTVXRpbC5leGVjdXRlVGlsbFJvdW5kKFxuICAgICAgMixcbiAgICAgIG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5VU0VSKSxcbiAgICAgIG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleVNoYXJlLFxuICAgICAgbWVzc2FnZUJ1ZmZlcixcbiAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgKSkgYXMgTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXNbXTtcbiAgICBjb25zdCBiaXRnb1NpZ25lZE1zZzMgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiaXRnb01zZzMucGF5bG9hZCksIGJpdGdvR3BnUHJpdktleSk7XG5cbiAgICBjb25zdCByb3VuZDNPdXRwdXQ6IEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDNPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2czOiBiaXRnb1NpZ25lZE1zZzMgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFRocmVlKHJvdW5kM091dHB1dCwgYml0Z29HcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5mcm9tLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQub2socmVzdWx0LnBheWxvYWQubGVuZ3RoID4gMCwgJ3BheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFRocmVlIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIG1lc3NhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgcm91bmQzT3V0cHV0OiBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQzT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMzoge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUocm91bmQzT3V0cHV0LCBiaXRnb0dwZ1B1YktleSksXG4gICAgICAnc2hvdWxkIHRocm93IG9uIGludmFsaWQgc2lnbmF0dXJlJ1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRFZGRzYU1QQ3YyUmVjb3ZlcnlLZXlTaGFyZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdFBhc3MnO1xuXG4gIGNvbnN0IGVuY3J5cHRLZXkgPSAoa2V5U2hhcmU6IEJ1ZmZlcik6IHN0cmluZyA9PiBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwga2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcblxuICBpdCgnc2hvdWxkIHJldHVybiByZWNvdmVyeSBrZXkgc2hhcmVzIGZyb20gdjEtZW5jcnlwdGVkIHJlZHVjZWQga2V5cyAobm8gYml0Z28gaW5zdGFuY2UpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgIGVuY3J5cHRLZXkodXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSksXG4gICAgICBlbmNyeXB0S2V5KGJhY2t1cERrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlXG4gICAgKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LnVzZXJLZXlTaGFyZSwgdXNlckRrZy5nZXRLZXlTaGFyZSgpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdC5iYWNrdXBLZXlTaGFyZSwgYmFja3VwRGtnLmdldEtleVNoYXJlKCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuY29tbW9uS2V5Q2hhaW4sIHVzZXJEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcm91dGUgZGVjcnlwdGlvbiB0aHJvdWdoIGJpdGdvLmRlY3J5cHQgd2hlbiBhIGJpdGdvIGluc3RhbmNlIGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIHNkay1jb3JlIGhhcyBubyBkZXZEZXBlbmRlbmN5IG9uIHNkay1hcGkgb3IgYXJnb24yLCBzbyB3ZSBjYW5ub3QgZW5jcnlwdCB3aXRoIGEgcmVhbCB2MiBlbnZlbG9wZSBoZXJlLlxuICAgIC8vIFRoZSBzdHViIHZlcmlmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIGRlbGVnYXRlcyB0byBiaXRnby5kZWNyeXB0ICh3aGljaCBzdXBwb3J0cyB2MSArIHYyIGluXG4gICAgLy8gcHJvZHVjdGlvbikgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvIHNqY2wuZGVjcnlwdC5cbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IHVzZXJLZXlCYXNlNjQgPSB1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBiYWNrdXBLZXlCYXNlNjQgPSBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgY29uc3QgbW9ja0JpdGdvID0ge1xuICAgICAgZGVjcnlwdDogc2lub24uc3R1YigpLm9uRmlyc3RDYWxsKCkucmVzb2x2ZXModXNlcktleUJhc2U2NCkub25TZWNvbmRDYWxsKCkucmVzb2x2ZXMoYmFja3VwS2V5QmFzZTY0KSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgICdlbmNyeXB0ZWQtdXNlci1rZXknLFxuICAgICAgJ2VuY3J5cHRlZC1iYWNrdXAta2V5JyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBtb2NrQml0Z29cbiAgICApO1xuXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKG1vY2tCaXRnby5kZWNyeXB0IGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQudXNlcktleVNoYXJlLCB1c2VyRGtnLmdldEtleVNoYXJlKCkpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LmJhY2t1cEtleVNoYXJlLCBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5jb21tb25LZXlDaGFpbiwgdXNlckRrZy5nZXRDb21tb25LZXljaGFpbigpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgYSBtYWxmb3JtZWQga2V5Y2FyZCB3aXRoIGEgZGVzY3JpcHRpdmUgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgbWFsZm9ybWVkS2V5ID0gc2pjbC5lbmNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJhbmRvbUJ5dGVzKDY0KS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgICAgbWFsZm9ybWVkS2V5LFxuICAgICAgICBlbmNyeXB0S2V5KHVzZXJEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkpLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlXG4gICAgICApLFxuICAgICAgL3VuYWJsZSB0byBkZWNvZGUgcmVkdWNlZCBrZXkgc2hhcmUvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgcmVkdWNlZCBrZXlzIGZyb20gZGlmZmVyZW50IHdhbGxldHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgWywgYmFja3VwRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgRUREU0FVdGlscy5nZXRFZGRzYU1wY1YyUmVjb3ZlcnlLZXlTaGFyZXNGcm9tUmVkdWNlZEtleShcbiAgICAgICAgZW5jcnlwdEtleSh1c2VyRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpKSxcbiAgICAgICAgZW5jcnlwdEtleShiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCkpLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlXG4gICAgICApLFxuICAgICAgL3B1YiBrZXlzIGRvIG5vdCBtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCByZWR1Y2VkIGtleXMgd2l0aCBtYXRjaGluZyBwdWIgYnV0IG1pc21hdGNoZWQgcm9vdENoYWluQ29kZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZEtleVNoYXJlID0gdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKTtcbiAgICBjb25zdCBiYWNrdXBSZWR1Y2VkS2V5U2hhcmUgPSBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCk7XG4gICAgY29uc3QgZ2V0RGVjb2RlZFJlZHVjZWRLZXlTaGFyZSA9IE1QU1R5cGVzLmdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmU7XG4gICAgY29uc3QgZGVjb2RlU3R1YiA9IHNpbm9uLnN0dWIoTVBTVHlwZXMsICdnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlJykuY2FsbHNGYWtlKChidWYpID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZWQgPSBnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlKGJ1Zik7XG4gICAgICBpZiAoQnVmZmVyLmZyb20oYnVmKS5lcXVhbHMoYmFja3VwUmVkdWNlZEtleVNoYXJlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlZHVjZWQsXG4gICAgICAgICAgcm9vdENoYWluQ29kZTogQXJyYXkuZnJvbShyYW5kb21CeXRlcygzMikpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIEVERFNBVXRpbHMuZ2V0RWRkc2FNcGNWMlJlY292ZXJ5S2V5U2hhcmVzRnJvbVJlZHVjZWRLZXkoXG4gICAgICAgICAgZW5jcnlwdEtleSh1c2VyUmVkdWNlZEtleVNoYXJlKSxcbiAgICAgICAgICBlbmNyeXB0S2V5KGJhY2t1cFJlZHVjZWRLZXlTaGFyZSksXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZVxuICAgICAgICApLFxuICAgICAgICAvcm9vdENoYWluQ29kZXMgZG8gbm90IG1hdGNoL1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVjb2RlU3R1Yi5yZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZScsICgpID0+IHtcbiAgbGV0IGVkZHNhTVBDdjJVdGlsczogRWRkc2FNUEN2MlV0aWxzO1xuICBsZXQgbW9ja0JpdGdvOiBCaXRHb0Jhc2U7XG4gIGxldCB1c2VyS2V5U2hhcmU6IEJ1ZmZlcjtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAvMCc7XG4gIGNvbnN0IGV4cGVjdGVkQWRhdGEgPSBgJHtzaWduYWJsZUhleH06JHtkZXJpdmF0aW9uUGF0aH1gO1xuICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICB0eFJlcXVlc3RJZDogJ3R4cmVxLWVkZHNhLXJvdW5kMScsXG4gICAgd2FsbGV0SWQ6ICd3YWxsZXQtZWRkc2Etcm91bmQxJyxcbiAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlLWVkZHNhLXJvdW5kMScsXG4gICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAge1xuICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3BheW1lbnQnIH0sXG4gICAgdW5zaWduZWRUeHM6IFtdLFxuICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgRWREU0EgdXNlciBrZXkgc2hhcmUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlcktleVNoYXJlID0gdXNlckRrZy5nZXRLZXlTaGFyZSgpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBzamNsRW5jcnlwdCA9IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZzsgYWRhdGE/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3Qgc2FsdCA9IHJhbmRvbUJ5dGVzKDgpO1xuICAgICAgY29uc3QgaXYgPSByYW5kb21CeXRlcygxNik7XG4gICAgICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0LCB7XG4gICAgICAgIHNhbHQ6IFtieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDAsIDQpKSwgYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSg0KSldLFxuICAgICAgICBpdjogW1xuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDAsIDQpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg0LCA4KSksXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgxMiwgMTYpKSxcbiAgICAgICAgXSxcbiAgICAgICAgYWRhdGE6IHBhcmFtcy5hZGF0YSxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgbW9ja0JpdGdvID0ge1xuICAgICAgZW5jcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBzamNsRW5jcnlwdChwYXJhbXMpKSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgY29uc3QgbW9ja0NvaW4gPSB7XG4gICAgICBnZXRNUENBbGdvcml0aG06IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdlZGRzYScpLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG5cbiAgICBlZGRzYU1QQ3YyVXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHJvdW5kLTEgc2hhcmUgYW5kIGVuY3J5cHRlZCBTSkNMIHNlc3Npb24gcGF5bG9hZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnNpZ25hdHVyZVNoYXJlUm91bmQxLmZyb20sIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnNpZ25hdHVyZVNoYXJlUm91bmQxLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuICAgIGFzc2VydC5vayhyZXN1bHQudXNlckdwZ1B1YktleS5pbmNsdWRlcygnQkVHSU4gUEdQIFBVQkxJQyBLRVkgQkxPQ0snKSk7XG4gICAgYXNzZXJ0Lm9rKEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pLmN0LCAnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiBzaG91bGQgYmUgYW4gU0pDTCBKU09OIGJsb2InKTtcbiAgICBhc3NlcnQub2soSlNPTi5wYXJzZShyZXN1bHQuZW5jcnlwdGVkVXNlckdwZ1BydktleSkuY3QsICdlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5IHNob3VsZCBiZSBhbiBTSkNMIEpTT04gYmxvYicpO1xuXG4gICAgY29uc3QgcGFyc2VkU2hhcmUgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2UocmVzdWx0LnNpZ25hdHVyZVNoYXJlUm91bmQxLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWRTaGFyZS50eXBlLCAncm91bmQxSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkU2hhcmUuZGF0YS5tc2cxLm1lc3NhZ2UsICdtc2cxLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWRTaGFyZS5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiA9IEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBKU09OLnBhcnNlKHJlc3VsdC5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBkZWNvZGVVUklDb21wb25lbnQoZW5jcnlwdGVkUm91bmQxU2Vzc2lvbi5hZGF0YSksXG4gICAgICBgTVBTX0RTR19TSUdOSU5HX1JPVU5EMV9TVEFURToke2V4cGVjdGVkQWRhdGF9YCxcbiAgICAgICdyb3VuZC0xIHNlc3Npb24gYWRhdGEgc2hvdWxkIGJpbmQgdGhlIHNpZ25pbmcgY29udGV4dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGRlY29kZVVSSUNvbXBvbmVudChlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LmFkYXRhKSxcbiAgICAgIGBNUFNfRFNHX1NJR05JTkdfVVNFUl9HUEdfS0VZOiR7ZXhwZWN0ZWRBZGF0YX1gLFxuICAgICAgJ0dQRyBwcml2YXRlIGtleSBhZGF0YSBzaG91bGQgYmluZCB0aGUgc2lnbmluZyBjb250ZXh0J1xuICAgICk7XG5cbiAgICBjb25zdCBzZXNzaW9uUGF5bG9hZCA9IEpTT04ucGFyc2Uoc2pjbC5kZWNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKSk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb25QYXlsb2FkLmRzZ1Nlc3Npb24sICdkc2dTZXNzaW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZm9yIHJvdW5kIDInKTtcbiAgICBhc3NlcnQub2soc2Vzc2lvblBheWxvYWQudXNlck1zZ1BheWxvYWQsICd1c2VyTXNnUGF5bG9hZCBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByb3VuZCAyJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIHYyIGVuY3J5cHRpb24gd2hlbiBlbmNyeXB0ZWRQcnYgaXMgYSB2MiBlbnZlbG9wZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ID0gc2lub25cbiAgICAgIC5zdHViKClcbiAgICAgIC5jYWxsc0Zha2UoKGlucHV0OiBzdHJpbmcsIGFkYXRhOiBzdHJpbmcpID0+IFByb21pc2UucmVzb2x2ZShKU09OLnN0cmluZ2lmeSh7IHY6IDIsIGlucHV0LCBhZGF0YSB9KSkpO1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBzaW5vbi5zdHViKCk7XG4gICAgY29uc3QgY3JlYXRlRW5jcnlwdGlvblNlc3Npb24gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBlbmNyeXB0LCBkZXN0cm95IH0pO1xuICAgIG1vY2tCaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiA9IGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICB0eFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGVkUHJ2OiBKU09OLnN0cmluZ2lmeSh7IHY6IDIgfSksXG4gICAgfSk7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uLmdldENhbGwoMCkuYXJnc1swXSwgd2FsbGV0UGFzc3BocmFzZSk7XG4gICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChtb2NrQml0Z28uZW5jcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShlbmNyeXB0KTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShkZXN0cm95KTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24gPSBKU09OLnBhcnNlKHJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gSlNPTi5wYXJzZShyZXN1bHQuZW5jcnlwdGVkVXNlckdwZ1BydktleSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24udiwgMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24uYWRhdGEsIGBNUFNfRFNHX1NJR05JTkdfUk9VTkQxX1NUQVRFOiR7ZXhwZWN0ZWRBZGF0YX1gKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdGVkVXNlckdwZ1BydktleS52LCAyKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdGVkVXNlckdwZ1BydktleS5hZGF0YSwgYE1QU19EU0dfU0lHTklOR19VU0VSX0dQR19LRVk6JHtleHBlY3RlZEFkYXRhfWApO1xuXG4gICAgY29uc3Qgc2Vzc2lvblBheWxvYWQgPSBKU09OLnBhcnNlKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24uaW5wdXQpO1xuICAgIGFzc2VydC5vayhzZXNzaW9uUGF5bG9hZC5kc2dTZXNzaW9uLCAnZHNnU2Vzc2lvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByb3VuZCAyJyk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb25QYXlsb2FkLnVzZXJNc2dQYXlsb2FkLCAndXNlck1zZ1BheWxvYWQgc2hvdWxkIGJlIHBlcnNpc3RlZCBmb3Igcm91bmQgMicpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSBTSkNMIGVuY3J5cHRpb24gd2hlbiBlbmNyeXB0ZWRQcnYgaXMgYSB2MSBibG9iJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tCaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiA9IHNpbm9uLnN0dWIoKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgfSk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShtb2NrQml0Z28uZW5jcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIGFzc2VydC5vayhKU09OLnBhcnNlKHJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKS5jdCwgJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24gc2hvdWxkIGJlIGFuIFNKQ0wgSlNPTiBibG9iJyk7XG4gICAgYXNzZXJ0Lm9rKEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFVzZXJHcGdQcnZLZXkpLmN0LCAnZW5jcnlwdGVkVXNlckdwZ1BydktleSBzaG91bGQgYmUgYW4gU0pDTCBKU09OIGJsb2InKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9wYWdhdGUgdGhlIHR4LW9ubHkgZ3VhcmQgd2hlbiB0cmFuc2FjdGlvbnMgYXJlIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHsgLi4udHhSZXF1ZXN0LCB0cmFuc2FjdGlvbnM6IHVuZGVmaW5lZCB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0LFxuICAgICAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9KSxcbiAgICAgIC9VbmFibGUgdG8gZmluZCB0cmFuc2FjdGlvbnMgaW4gdHhSZXF1ZXN0L1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdFZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZUtleUdlblJvdW5kMVNoYXJlJywgKCkgPT4ge1xuICBsZXQgZWRkc2FNUEN2MlV0aWxzOiBFZGRzYU1QQ3YyVXRpbHM7XG4gIGxldCBtb2NrQml0Z286IEJpdEdvQmFzZTtcbiAgbGV0IHVzZXJHcGdLZXlQYWlyOiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgbGV0IGJhY2t1cEdwZ0tleVBhaXI6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICBsZXQgYml0Z29HcGdLZXlQYWlyOiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcblxuICBiZWZvcmUoJ2dlbmVyYXRlIEdQRyBrZXkgcGFpcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgdXNlckdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBiYWNrdXBHcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IHNqY2xFbmNyeXB0ID0gKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyBhZGF0YT86IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gICAgICBjb25zdCBpdiA9IHJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgIHJldHVybiBzamNsLmVuY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQsIHtcbiAgICAgICAgc2FsdDogW2J5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoMCwgNCkpLCBieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDQpKV0sXG4gICAgICAgIGl2OiBbXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDQsIDgpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg4LCAxMikpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgICAgICBdLFxuICAgICAgICBhZGF0YTogcGFyYW1zLmFkYXRhLFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBtb2NrQml0Z28gPSB7XG4gICAgICBlbmNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKHNqY2xFbmNyeXB0KSxcbiAgICAgIGVuY3J5cHRBc3luYzogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBzamNsRW5jcnlwdChwYXJhbXMpKSxcbiAgICAgIGRlY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSksXG4gICAgICBkZWNyeXB0QXN5bmM6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSksXG4gICAgICBnZXRFbnY6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdtb2NrJyksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge1xuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuXG4gICAgZWRkc2FNUEN2MlV0aWxzID0gbmV3IEVkZHNhTVBDdjJVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZhbGlkIHNpZ25lZE1zZzEgYW5kIGVuY3J5cHRlZCByb3VuZC0xIHNlc3Npb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lS2V5R2VuUm91bmQxU2hhcmUoe1xuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGNvdW50ZXJQYXJ0eUdwZ1B1YktleTogYmFja3VwR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgfSk7XG5cbiAgICBhc3NlcnQub2socmVzdWx0LnNpZ25lZE1zZzEubWVzc2FnZSwgJ3NpZ25lZE1zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgcmVzdWx0LnNpZ25lZE1zZzEuc2lnbmF0dXJlLmluY2x1ZGVzKCdCRUdJTiBQR1AgU0lHTkFUVVJFJyksXG4gICAgICAnc2lnbmVkTXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIFBHUCBhcm1vcmVkJ1xuICAgICk7XG4gICAgYXNzZXJ0Lm9rKEpTT04ucGFyc2UocmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pLmN0LCAnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiBzaG91bGQgYmUgYW4gU0pDTCBKU09OIGJsb2InKTtcbiAgfSk7XG5cbiAgaXQoJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24gc2hvdWxkIG9ubHkgYmUgZGVjcnlwdGFibGUgd2l0aCBjb3JyZWN0IHdhbGxldFBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHNqY2wuZW5jcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lS2V5R2VuUm91bmQxU2hhcmUoe1xuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGNvdW50ZXJQYXJ0eUdwZ1B1YktleTogYmFja3VwR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWQgPSBzamNsLmRlY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgcmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pO1xuICAgIGNvbnN0IHNlc3Npb24gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb24uZGtnU2Vzc2lvbiwgJ2RrZ1Nlc3Npb24gc2hvdWxkIGJlIHBlcnNpc3RlZCcpO1xuICAgIGFzc2VydC5vayhzZXNzaW9uLm93bk1zZ1BheWxvYWQsICdvd25Nc2dQYXlsb2FkIHNob3VsZCBiZSBwZXJzaXN0ZWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHNlc3Npb24ub3duTXNnRnJvbSwgJ251bWJlcicsICdvd25Nc2dGcm9tIHNob3VsZCBiZSBhIG51bWJlcicpO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IHNqY2wuZGVjcnlwdCgnd3JvbmdwYXNzcGhyYXNlJywgcmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pLFxuICAgICAgJ3Nob3VsZCB0aHJvdyBvbiB3cm9uZyBwYXNzcGhyYXNlJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVzdG9yZSBES0cgc2Vzc2lvbiBhbmQgaGFuZGxlIHJvdW5kLTIgbWVzc2FnZXMgYWZ0ZXIgcm91bmQgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gc2pjbC5lbmNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXkpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVLZXlHZW5Sb3VuZDFTaGFyZSh7XG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGJpdGdvR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgY291bnRlclBhcnR5R3BnUHViS2V5OiBiYWNrdXBHcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZCA9IHNqY2wuZGVjcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCByZXN1bHQuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbik7XG4gICAgY29uc3QgeyBka2dTZXNzaW9uLCBvd25Nc2dQYXlsb2FkLCBvd25Nc2dGcm9tIH0gPSBKU09OLnBhcnNlKGRlY3J5cHRlZCkgYXMge1xuICAgICAgZGtnU2Vzc2lvbjogc3RyaW5nO1xuICAgICAgb3duTXNnUGF5bG9hZDogc3RyaW5nO1xuICAgICAgb3duTXNnRnJvbTogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdCByZXN0b3JlZERrZyA9IG5ldyBFZGRzYU1QU0RrZy5ES0coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBhd2FpdCByZXN0b3JlZERrZy5yZXN0b3JlU2Vzc2lvbihka2dTZXNzaW9uKTtcblxuICAgIGNvbnN0IG93bk1zZzE6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UgPSB7XG4gICAgICBmcm9tOiBvd25Nc2dGcm9tLFxuICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ob3duTXNnUGF5bG9hZCwgJ2Jhc2U2NCcpKSxcbiAgICB9O1xuICAgIGFzc2VydC5vayhvd25Nc2cxLnBheWxvYWQubGVuZ3RoID4gMCwgJ3Jlc3RvcmVkIHBheWxvYWQgc2hvdWxkIGJlIG5vbi1lbXB0eScpO1xuXG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShyZXN1bHQuc2lnbmVkTXNnMSwgdXNlckdwZ0tleSk7XG4gICAgYXNzZXJ0Lm9rKHJhd0J5dGVzLmxlbmd0aCA+IDAsICdzaWduZWRNc2cxIHNob3VsZCB2ZXJpZnkgYWdhaW5zdCB1c2VyIEdQRyBrZXknKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgaW52YWxpZCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVLZXlHZW5Sb3VuZDFTaGFyZSh7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgJ25vdC1hLWdwZy1rZXknKSxcbiAgICAgICAgICBiaXRnb0dwZ1B1YktleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBjb3VudGVyUGFydHlHcGdQdWJLZXk6IGJhY2t1cEdwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICB9KSxcbiAgICAgICdzaG91bGQgdGhyb3cgd2hlbiBHUEcga2V5IGNhbm5vdCBiZSBwYXJzZWQnXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ1VTRVIgYW5kIEJBQ0tVUCBwYXJ0eUlkIHByb2R1Y2UgZGlmZmVyZW50IGVuY3J5cHRlZCBzZXNzaW9uIHN0YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXJFbmNyeXB0ZWRHcGdQcnZLZXkgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSk7XG5cbiAgICBjb25zdCB1c2VyUmVzdWx0ID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVLZXlHZW5Sb3VuZDFTaGFyZSh7XG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogdXNlckVuY3J5cHRlZEdwZ1BydktleSxcbiAgICAgIGJpdGdvR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgY291bnRlclBhcnR5R3BnUHViS2V5OiBiYWNrdXBHcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhY2t1cEVuY3J5cHRlZEdwZ1BydktleTIgPSBzamNsLmVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5KTtcbiAgICBjb25zdCBiYWNrdXBSZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZUtleUdlblJvdW5kMVNoYXJlKHtcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBiYWNrdXBFbmNyeXB0ZWRHcGdQcnZLZXkyLFxuICAgICAgYml0Z29HcGdQdWJLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBjb3VudGVyUGFydHlHcGdQdWJLZXk6IHVzZXJHcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlclNlc3Npb24gPSBKU09OLnBhcnNlKHNqY2wuZGVjcnlwdCh3YWxsZXRQYXNzcGhyYXNlLCB1c2VyUmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pKTtcbiAgICBjb25zdCBiYWNrdXBTZXNzaW9uID0gSlNPTi5wYXJzZShzamNsLmRlY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwUmVzdWx0LmVuY3J5cHRlZFJvdW5kMVNlc3Npb24pKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1c2VyU2Vzc2lvbi5vd25Nc2dGcm9tLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYWNrdXBTZXNzaW9uLm93bk1zZ0Zyb20sIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwodXNlclNlc3Npb24uZGtnU2Vzc2lvbiwgYmFja3VwU2Vzc2lvbi5ka2dTZXNzaW9uLCAnU2Vzc2lvbnMgc2hvdWxkIGRpZmZlciBiZXR3ZWVuIHBhcnRpZXMnKTtcblxuICAgIC8vIFNlc3Npb25zIGVuY3J5cHRlZCB3aXRoIHBhcnR5LWJvdW5kIGFkYXRhIOKAlCB0YW1wZXJlZCBhZGF0YSBmYWlscyBDQ00gdGFnIGNoZWNrXG4gICAgY29uc3QgdGFtcGVyZWRTZXNzaW9uID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodXNlclJlc3VsdC5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKTtcbiAgICAgIHBhcnNlZC5hZGF0YSA9IGVuY29kZVVSSUNvbXBvbmVudChgTVBTX0RLR19LRVlHRU5fUk9VTkQxX1NUQVRFOiR7TVBDdjJQYXJ0aWVzRW51bS5CQUNLVVB9YCk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKTtcbiAgICB9KSgpO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBzamNsLmRlY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdGFtcGVyZWRTZXNzaW9uKSxcbiAgICAgICdzaG91bGQgZmFpbCB0byBkZWNyeXB0IHdpdGggd3JvbmcgcGFydHkgYWRhdGEnXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0VkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUnLCAoKSA9PiB7XG4gIGxldCBlZGRzYU1QQ3YyVXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0tleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0dwZ0tleVBhaXI6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICBsZXQgYml0Z29HcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAvMCc7XG4gIGNvbnN0IGV4cGVjdGVkQWRhdGEgPSBgJHtzaWduYWJsZUhleH06JHtkZXJpdmF0aW9uUGF0aH1gO1xuXG4gIGNvbnN0IGJhc2VUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICB0eFJlcXVlc3RJZDogJ3R4cmVxLWVkZHNhLXJvdW5kMicsXG4gICAgd2FsbGV0SWQ6ICd3YWxsZXQtZWRkc2Etcm91bmQyJyxcbiAgICBlbnRlcnByaXNlSWQ6ICdlbnRlcnByaXNlLWVkZHNhLXJvdW5kMicsXG4gICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAge1xuICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ3BheW1lbnQnIH0sXG4gICAgdW5zaWduZWRUeHM6IFtdLFxuICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgRWREU0Ega2V5IHNoYXJlcyBhbmQgR1BHIGtleXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csICwgYml0Z29Ea2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlcktleVNoYXJlID0gdXNlckRrZy5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvS2V5U2hhcmUgPSBiaXRnb0RrZy5nZXRLZXlTaGFyZSgpO1xuXG4gICAgYml0Z29HcGdLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgYml0Z29HcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGdLZXlQYWlyLnByaXZhdGVLZXkgfSk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tCaXRnbyA9IHtcbiAgICAgIGVuY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gICAgICAgIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICAgICAgICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0LCB7XG4gICAgICAgICAgc2FsdDogW2J5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoMCwgNCkpLCBieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDQpKV0sXG4gICAgICAgICAgaXY6IFtcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDAsIDQpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDQsIDgpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDgsIDEyKSksXG4gICAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgxMiwgMTYpKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkYXRhOiBwYXJhbXMuYWRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXMpID0+IHNqY2wuZGVjcnlwdChwYXJhbXMucGFzc3dvcmQsIHBhcmFtcy5pbnB1dCkpLFxuICAgIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VkZHNhJyksXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcblxuICAgIGVkZHNhTVBDdjJVdGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMobW9ja0JpdGdvLCBtb2NrQ29pbik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIGEgcm91bmQtMiBzaGFyZSBmcm9tIG9mZmxpbmUgcm91bmQgMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb3VuZDEgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb0VkZHNhUm91bmQxKFxuICAgICAgYml0Z29Ec2csXG4gICAgICBjbG9uZVR4UmVxdWVzdFdpdGhFbXB0eVNpZ25hdHVyZVNoYXJlcyhiYXNlVHhSZXF1ZXN0KSxcbiAgICAgIHJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJvdW5kMS51c2VyR3BnUHViS2V5LFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHJvdW5kMiA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IHJvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZFNoYXJlID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi5zaGFyZSksXG4gICAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkU2hhcmUudHlwZSwgJ3JvdW5kMklucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZFNoYXJlLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkU2hhcmUuZGF0YS5tc2cyLnNpZ25hdHVyZSwgJ21zZzIuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24gPSBKU09OLnBhcnNlKHJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBkZWNvZGVVUklDb21wb25lbnQoZW5jcnlwdGVkUm91bmQyU2Vzc2lvbi5hZGF0YSksXG4gICAgICBgTVBTX0RTR19TSUdOSU5HX1JPVU5EMl9TVEFURToke2V4cGVjdGVkQWRhdGF9YFxuICAgICk7XG5cbiAgICBjb25zdCBzZXNzaW9uUGF5bG9hZCA9IEpTT04ucGFyc2Uoc2pjbC5kZWNyeXB0KHdhbGxldFBhc3NwaHJhc2UsIHJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uKSk7XG4gICAgYXNzZXJ0Lm9rKHNlc3Npb25QYXlsb2FkLmRzZ1Nlc3Npb24sICdkc2dTZXNzaW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZm9yIHJvdW5kIDMnKTtcbiAgICBhc3NlcnQub2soc2Vzc2lvblBheWxvYWQudXNlck1zZ1BheWxvYWQsICd1c2VyTXNnUGF5bG9hZCBzaG91bGQgYmUgcGVyc2lzdGVkIGZvciByb3VuZCAzJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIHYyIGRlY3J5cHRpb24gd2hlbiBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uIGlzIGEgdjIgZW52ZWxvcGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdCA9IHNpbm9uXG4gICAgICAuc3R1YigpXG4gICAgICAuY2FsbHNGYWtlKChpbnB1dDogc3RyaW5nLCBhZGF0YTogc3RyaW5nKSA9PiBQcm9taXNlLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoeyB2OiAyLCBpbnB1dCwgYWRhdGEgfSkpKTtcbiAgICBjb25zdCBkZXN0cm95ID0gc2lub24uc3R1YigpO1xuICAgIGNvbnN0IGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgZW5jcnlwdCwgZGVzdHJveSB9KTtcbiAgICBtb2NrQml0Z28uY3JlYXRlRW5jcnlwdGlvblNlc3Npb24gPSBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbjtcblxuICAgIGNvbnN0IHJvdW5kMSA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiBiYXNlVHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyS2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFBydjogSlNPTi5zdHJpbmdpZnkoeyB2OiAyIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgYml0Z29Ec2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGF3YWl0IGJpdGdvRHNnLmluaXREc2coYml0Z29LZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29FZGRzYVJvdW5kMShcbiAgICAgIGJpdGdvRHNnLFxuICAgICAgY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXMoYmFzZVR4UmVxdWVzdCksXG4gICAgICByb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByb3VuZDEudXNlckdwZ1B1YktleSxcbiAgICAgIGJpdGdvR3BnUHJpdktleVxuICAgICk7XG5cbiAgICBjb25zdCBkZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHBhcmFtcy5pbnB1dCk7XG4gICAgICByZXR1cm4gZW52ZWxvcGUuaW5wdXQ7XG4gICAgfSk7XG4gICAgbW9ja0JpdGdvLmRlY3J5cHQgPSBkZWNyeXB0O1xuXG4gICAgY29uc3Qgcm91bmQyID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgfSk7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkKG1vY2tCaXRnby5kZWNyeXB0IGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMi5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uID0gSlNPTi5wYXJzZShyb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMlNlc3Npb24udiwgMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZFJvdW5kMlNlc3Npb24uYWRhdGEsIGBNUFNfRFNHX1NJR05JTkdfUk9VTkQyX1NUQVRFOiR7ZXhwZWN0ZWRBZGF0YX1gKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgdGFtcGVyZWQgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiBhZGF0YScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdGhlclR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgICAgLi4uYmFzZVR4UmVxdWVzdCxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgc2lnbmFibGVIZXg6ICdjYWZlYmFiZScsXG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aDogJ20vMS8yJyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleDogJ2NhZmViYWJlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgICBjb25zdCByb3VuZDFPdGhlciA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiBvdGhlclR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByb3VuZDEgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCBiaXRnb0RzZyA9IG5ldyBFZGRzYU1QU0RzZy5EU0coTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXdhaXQgYml0Z29Ec2cuaW5pdERzZyhiaXRnb0tleVNoYXJlLCBtZXNzYWdlQnVmZmVyLCBkZXJpdmF0aW9uUGF0aCwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb0VkZHNhUm91bmQxKFxuICAgICAgYml0Z29Ec2csXG4gICAgICBjbG9uZVR4UmVxdWVzdFdpdGhFbXB0eVNpZ25hdHVyZVNoYXJlcyhiYXNlVHhSZXF1ZXN0KSxcbiAgICAgIHJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJvdW5kMS51c2VyR3BnUHViS2V5LFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZSh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiByb3VuZDFPdGhlci5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgICAgICB9KSxcbiAgICAgIC9BZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHRhbXBlcmVkIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgYWRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3RoZXJUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLmJhc2VUeFJlcXVlc3QsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4OiAnY2FmZWJhYmUnLFxuICAgICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzEvMicsXG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdjYWZlYmFiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gICAgY29uc3Qgcm91bmQxT3RoZXIgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogb3RoZXJUeFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQxID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IGJhc2VUeFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgYml0Z29Ec2cgPSBuZXcgRWRkc2FNUFNEc2cuRFNHKE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGF3YWl0IGJpdGdvRHNnLmluaXREc2coYml0Z29LZXlTaGFyZSwgbWVzc2FnZUJ1ZmZlciwgZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29FZGRzYVJvdW5kMShcbiAgICAgIGJpdGdvRHNnLFxuICAgICAgY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXMoYmFzZVR4UmVxdWVzdCksXG4gICAgICByb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByb3VuZDEudXNlckdwZ1B1YktleSxcbiAgICAgIGJpdGdvR3BnUHJpdktleVxuICAgICk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQxLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxT3RoZXIuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiByb3VuZDEuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbixcbiAgICAgICAgfSksXG4gICAgICAvQWRhdGEgZG9lcyBub3QgbWF0Y2ggY3lwaGVydGV4dCBhZGF0YS9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIEJpdEdvIHNpZ25hdHVyZSBzaGFyZSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJvdW5kMSA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiBiYXNlVHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyS2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhc2VUcmFuc2FjdGlvbiA9IGFzc2VydFNpbmdsZVRyYW5zYWN0aW9uKGJhc2VUeFJlcXVlc3QpO1xuICAgIGNvbnN0IHR4UmVxdWVzdE5vQml0Z29TaGFyZTogVHhSZXF1ZXN0ID0ge1xuICAgICAgLi4uYmFzZVR4UmVxdWVzdCxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uYmFzZVRyYW5zYWN0aW9uLFxuICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW3JvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Tm9CaXRnb1NoYXJlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL01pc3NpbmcgQml0R28gcm91bmQxT3V0cHV0IHNpZ25hdHVyZSBzaGFyZS9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3BhZ2F0ZSB0aGUgdHgtb25seSBndWFyZCB3aGVuIHRyYW5zYWN0aW9ucyBhcmUgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb3VuZDEgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogYmFzZVR4UmVxdWVzdCxcbiAgICAgIHBydjogdXNlcktleVNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogeyAuLi5iYXNlVHhSZXF1ZXN0LCB0cmFuc2FjdGlvbnM6IHVuZGVmaW5lZCB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiB0cmFuc2FjdGlvbnMgYXJyYXkgaXMgZW1wdHknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgcm91bmQxID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IGJhc2VUeFJlcXVlc3QsXG4gICAgICBwcnY6IHVzZXJLZXlTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMlNoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHsgLi4uYmFzZVR4UmVxdWVzdCwgdHJhbnNhY3Rpb25zOiBbXSB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogcm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0VkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQzU2hhcmUnLCAoKSA9PiB7XG4gIGxldCBlZGRzYU1QQ3YyVXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0tleVNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb0dwZ0tleVBhaXI6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICBsZXQgYml0Z29HcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3RQYXNzJztcbiAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAvMCc7XG5cbiAgY29uc3QgYmFzZVR4UmVxdWVzdDogVHhSZXF1ZXN0ID0ge1xuICAgIHR4UmVxdWVzdElkOiAndHhyZXEtZWRkc2Etcm91bmQzJyxcbiAgICB3YWxsZXRJZDogJ3dhbGxldC1lZGRzYS1yb3VuZDMnLFxuICAgIGVudGVycHJpc2VJZDogJ2VudGVycHJpc2UtZWRkc2Etcm91bmQzJyxcbiAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICBzaWduYWJsZUhleCxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHNpZ25hYmxlSGV4LFxuICAgICAgICB9LFxuICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAncGF5bWVudCcgfSxcbiAgICB1bnNpZ25lZFR4czogW10sXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgYmVmb3JlKCdnZW5lcmF0ZSBFZERTQSBrZXkgc2hhcmVzIGFuZCBHUEcga2V5cycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBbdXNlckRrZywgLCBiaXRnb0RrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICB1c2VyS2V5U2hhcmUgPSB1c2VyRGtnLmdldEtleVNoYXJlKCk7XG4gICAgYml0Z29LZXlTaGFyZSA9IGJpdGdvRGtnLmdldEtleVNoYXJlKCk7XG5cbiAgICBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBiaXRnb0dwZ1ByaXZLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja0JpdGdvID0ge1xuICAgICAgZW5jcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbHQgPSByYW5kb21CeXRlcyg4KTtcbiAgICAgICAgY29uc3QgaXYgPSByYW5kb21CeXRlcygxNik7XG4gICAgICAgIHJldHVybiBzamNsLmVuY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQsIHtcbiAgICAgICAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoNCkpXSxcbiAgICAgICAgICBpdjogW1xuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoNCwgOCkpLFxuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRhdGE6IHBhcmFtcy5hZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlY3J5cHQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge1xuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuXG4gICAgZWRkc2FNUEN2MlV0aWxzID0gbmV3IEVkZHNhTVBDdjJVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUm91bmQyRmxvdyhcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdCxcbiAgICBlbmNyeXB0ZWRQcnY/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7XG4gICAgcm91bmQxOiB7XG4gICAgICBzaWduYXR1cmVTaGFyZVJvdW5kMTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgICB1c2VyR3BnUHViS2V5OiBzdHJpbmc7XG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiBzdHJpbmc7XG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBzdHJpbmc7XG4gICAgfTtcbiAgICByb3VuZDI6IHtcbiAgICAgIHNpZ25hdHVyZVNoYXJlUm91bmQyOiBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgICAgIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246IHN0cmluZztcbiAgICB9O1xuICAgIHR4UmVxdWVzdFJvdW5kMTogVHhSZXF1ZXN0O1xuICAgIHR4UmVxdWVzdFJvdW5kMjogVHhSZXF1ZXN0O1xuICAgIG1lc3NhZ2VCdWZmZXI6IEJ1ZmZlcjtcbiAgfT4ge1xuICAgIGNvbnN0IHJvdW5kMSA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyS2V5U2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRlZFBydixcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24odHhSZXF1ZXN0KTtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmZyb20odHJhbnNhY3Rpb24udW5zaWduZWRUeC5zaWduYWJsZUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGJpdGdvRHNnID0gbmV3IEVkZHNhTVBTRHNnLkRTRyhNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhd2FpdCBiaXRnb0RzZy5pbml0RHNnKGJpdGdvS2V5U2hhcmUsIG1lc3NhZ2VCdWZmZXIsIHRyYW5zYWN0aW9uLnVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGgsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29FZGRzYVJvdW5kMShcbiAgICAgIGJpdGdvRHNnLFxuICAgICAgY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0KSxcbiAgICAgIHJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJvdW5kMS51c2VyR3BnUHViS2V5LFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHJvdW5kMiA9IGF3YWl0IGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IHJvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQxVHJhbnNhY3Rpb24gPSBhc3NlcnRTaW5nbGVUcmFuc2FjdGlvbih0eFJlcXVlc3RSb3VuZDEpO1xuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMiA9IGF3YWl0IHNpZ25CaXRnb0VkZHNhUm91bmQyKFxuICAgICAgYml0Z29Ec2csXG4gICAgICB7XG4gICAgICAgIC4uLnR4UmVxdWVzdFJvdW5kMSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4ucm91bmQxVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFsuLi5yb3VuZDFUcmFuc2FjdGlvbi5zaWduYXR1cmVTaGFyZXNdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcm91bmQyLnNpZ25hdHVyZVNoYXJlUm91bmQyLFxuICAgICAgcm91bmQxLnVzZXJHcGdQdWJLZXksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgcm91bmQxLCByb3VuZDIsIHR4UmVxdWVzdFJvdW5kMSwgdHhSZXF1ZXN0Um91bmQyLCBtZXNzYWdlQnVmZmVyIH07XG4gIH1cblxuICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHJvdW5kLTMgc2hhcmUgZnJvbSBvZmZsaW5lIHJvdW5kIDInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyByb3VuZDEsIHJvdW5kMiwgdHhSZXF1ZXN0Um91bmQyIH0gPSBhd2FpdCBjcmVhdGVSb3VuZDJGbG93KGJhc2VUeFJlcXVlc3QpO1xuXG4gICAgY29uc3Qgcm91bmQzID0gYXdhaXQgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZSh7XG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMixcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogcm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLmZyb20sIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkU2hhcmUgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uocm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLnNoYXJlKSxcbiAgICAgICdFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWRTaGFyZS50eXBlLCAncm91bmQzSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkU2hhcmUuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWRTaGFyZS5kYXRhLm1zZzMuc2lnbmF0dXJlLCAnbXNnMy5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHVzZSB2MiBkZWNyeXB0aW9uIHdoZW4gZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiBpcyBhIHYyIGVudmVsb3BlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVuY3J5cHQgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLmNhbGxzRmFrZSgoaW5wdXQ6IHN0cmluZywgYWRhdGE6IHN0cmluZykgPT4gUHJvbWlzZS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHsgdjogMiwgaW5wdXQsIGFkYXRhIH0pKSk7XG4gICAgY29uc3QgZGVzdHJveSA9IHNpbm9uLnN0dWIoKTtcbiAgICBjb25zdCBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGVuY3J5cHQsIGRlc3Ryb3kgfSk7XG4gICAgbW9ja0JpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uID0gY3JlYXRlRW5jcnlwdGlvblNlc3Npb247XG5cbiAgICBjb25zdCBkZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHBhcmFtcy5pbnB1dCk7XG4gICAgICByZXR1cm4gZW52ZWxvcGUuaW5wdXQ7XG4gICAgfSk7XG4gICAgbW9ja0JpdGdvLmRlY3J5cHQgPSBkZWNyeXB0O1xuXG4gICAgY29uc3QgeyByb3VuZDEsIHJvdW5kMiwgdHhSZXF1ZXN0Um91bmQyIH0gPSBhd2FpdCBjcmVhdGVSb3VuZDJGbG93KGJhc2VUeFJlcXVlc3QsIEpTT04uc3RyaW5naWZ5KHsgdjogMiB9KSk7XG5cbiAgICBjb25zdCByb3VuZDMgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHtcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiByb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCgobW9ja0JpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQsIDQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDMuc2lnbmF0dXJlU2hhcmVSb3VuZDMuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB0YW1wZXJlZCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uIGFkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG90aGVyVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgICAuLi5iYXNlVHhSZXF1ZXN0LFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICBzaWduYWJsZUhleDogJ2NhZmViYWJlJyxcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8xLzInLFxuICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4OiAnY2FmZWJhYmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcblxuICAgIGNvbnN0IG90aGVyRmxvdyA9IGF3YWl0IGNyZWF0ZVJvdW5kMkZsb3cob3RoZXJUeFJlcXVlc3QpO1xuICAgIGNvbnN0IHsgcm91bmQxLCB0eFJlcXVlc3RSb3VuZDIgfSA9IGF3YWl0IGNyZWF0ZVJvdW5kMkZsb3coYmFzZVR4UmVxdWVzdCk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIGVkZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQzU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogb3RoZXJGbG93LnJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLFxuICAgICAgICB9KSxcbiAgICAgIC9BZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHRhbXBlcmVkIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgYWRhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3RoZXJUeFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLmJhc2VUeFJlcXVlc3QsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4OiAnY2FmZWJhYmUnLFxuICAgICAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzEvMicsXG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdjYWZlYmFiZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gICAgY29uc3Qgb3RoZXJGbG93ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhvdGhlclR4UmVxdWVzdCk7XG4gICAgY29uc3QgeyByb3VuZDIsIHR4UmVxdWVzdFJvdW5kMiB9ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhiYXNlVHhSZXF1ZXN0KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZSh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBvdGhlckZsb3cucm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogcm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL0FkYXRhIGRvZXMgbm90IG1hdGNoIGN5cGhlcnRleHQgYWRhdGEvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBCaXRHbyByb3VuZC0yIHNpZ25hdHVyZSBzaGFyZSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgcm91bmQxLCByb3VuZDIsIHR4UmVxdWVzdFJvdW5kMSB9ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhiYXNlVHhSZXF1ZXN0KTtcblxuICAgIGNvbnN0IHJvdW5kMVRyYW5zYWN0aW9uID0gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24odHhSZXF1ZXN0Um91bmQxKTtcbiAgICBjb25zdCB0eFJlcXVlc3ROb0JpdGdvUm91bmQyU2hhcmU6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLnR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4ucm91bmQxVHJhbnNhY3Rpb24sXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbLi4ucm91bmQxVHJhbnNhY3Rpb24uc2lnbmF0dXJlU2hhcmVzLCByb3VuZDIuc2lnbmF0dXJlU2hhcmVSb3VuZDJdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdE5vQml0Z29Sb3VuZDJTaGFyZSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6IHJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICAgIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246IHJvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLFxuICAgICAgICB9KSxcbiAgICAgIC9NaXNzaW5nIEJpdEdvIHJvdW5kMk91dHB1dCBzaWduYXR1cmUgc2hhcmUvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9wYWdhdGUgdGhlIHR4LW9ubHkgZ3VhcmQgd2hlbiB0cmFuc2FjdGlvbnMgYXJlIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyByb3VuZDEsIHJvdW5kMiB9ID0gYXdhaXQgY3JlYXRlUm91bmQyRmxvdyhiYXNlVHhSZXF1ZXN0KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgZWRkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZSh7XG4gICAgICAgICAgdHhSZXF1ZXN0OiB7IC4uLmJhc2VUeFJlcXVlc3QsIHRyYW5zYWN0aW9uczogdW5kZWZpbmVkIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3QsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiByb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiByb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICAgICAgfSksXG4gICAgICAvVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIHRyYW5zYWN0aW9ucyBhcnJheSBpcyBlbXB0eScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IHJvdW5kMSwgcm91bmQyIH0gPSBhd2FpdCBjcmVhdGVSb3VuZDJGbG93KGJhc2VUeFJlcXVlc3QpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IHsgLi4uYmFzZVR4UmVxdWVzdCwgdHJhbnNhY3Rpb25zOiBbXSB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogcm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjogcm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgICAgIH0pLFxuICAgICAgL1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QvXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2dldEJpdGdvU2lnbmF0dXJlU2hhcmUnLCAoKSA9PiB7XG4gIGNvbnN0IHJvdW5kMU91dHB1dFNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7fSB9KSxcbiAgfTtcbiAgY29uc3Qgcm91bmQyT3V0cHV0U2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgc2hhcmU6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3JvdW5kMk91dHB1dCcsIGRhdGE6IHt9IH0pLFxuICB9O1xuXG4gIGl0KCdzZWxlY3RzIHRoZSByZXF1ZXN0ZWQgQml0R28gcm91bmQgb3V0cHV0IHdoZW4gbXVsdGlwbGUgcm91bmQgb3V0cHV0cyBhcmUgcHJlc2VudCcsICgpID0+IHtcbiAgICBjb25zdCBzaWduYXR1cmVTaGFyZXMgPSBbcm91bmQxT3V0cHV0U2hhcmUsIHJvdW5kMk91dHB1dFNoYXJlXTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGdldEJpdGdvU2lnbmF0dXJlU2hhcmUoc2lnbmF0dXJlU2hhcmVzLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgJ3JvdW5kMk91dHB1dCcpLFxuICAgICAgcm91bmQyT3V0cHV0U2hhcmVcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGdldEJpdGdvU2lnbmF0dXJlU2hhcmUoc2lnbmF0dXJlU2hhcmVzLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgJ3JvdW5kMU91dHB1dCcpLFxuICAgICAgcm91bmQxT3V0cHV0U2hhcmVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2tpcHMgbWFsZm9ybWVkIHNoYXJlIHJlY29yZHMgd2hpbGUgc2VsZWN0aW5nIHRoZSByZXF1ZXN0ZWQgQml0R28gcm91bmQgb3V0cHV0JywgKCkgPT4ge1xuICAgIGNvbnN0IG1hbGZvcm1lZFNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgIHNoYXJlOiAnbm90LWpzb24nLFxuICAgIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBnZXRCaXRnb1NpZ25hdHVyZVNoYXJlKFttYWxmb3JtZWRTaGFyZSwgcm91bmQyT3V0cHV0U2hhcmVdLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUiwgJ3JvdW5kMk91dHB1dCcpLFxuICAgICAgcm91bmQyT3V0cHV0U2hhcmVcbiAgICApO1xuICB9KTtcbn0pO1xuXG50eXBlIFR4UmVxdWVzdFRyYW5zYWN0aW9uID0gTm9uTnVsbGFibGU8VHhSZXF1ZXN0Wyd0cmFuc2FjdGlvbnMnXT5bbnVtYmVyXTtcblxuZnVuY3Rpb24gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24odHhSZXF1ZXN0OiBUeFJlcXVlc3QpOiBUeFJlcXVlc3RUcmFuc2FjdGlvbiB7XG4gIGFzc2VydC5vayh0eFJlcXVlc3QudHJhbnNhY3Rpb25zLCAndHhSZXF1ZXN0IG11c3QgaW5jbHVkZSB0cmFuc2FjdGlvbnMnKTtcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoLCAxLCAndHhSZXF1ZXN0IG11c3QgaGF2ZSBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbicpO1xuICByZXR1cm4gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXTtcbn1cblxuZnVuY3Rpb24gY2xvbmVUeFJlcXVlc3RXaXRoRW1wdHlTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0OiBUeFJlcXVlc3QpOiBUeFJlcXVlc3Qge1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IGFzc2VydFNpbmdsZVRyYW5zYWN0aW9uKHR4UmVxdWVzdCk7XG4gIHJldHVybiB7XG4gICAgLi4udHhSZXF1ZXN0LFxuICAgIHRyYW5zYWN0aW9uczogW3sgLi4udHJhbnNhY3Rpb24sIHNpZ25hdHVyZVNoYXJlczogW10gfV0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNpZ25CaXRnb0VkZHNhUm91bmQxKFxuICBiaXRnb0RzZzogRWRkc2FNUFNEc2cuRFNHLFxuICB0eFJlcXVlc3Q6IFR4UmVxdWVzdCxcbiAgdXNlclJvdW5kMVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgdXNlckdwZ1B1YktleUFybW9yZWQ6IHN0cmluZyxcbiAgYml0Z29HcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleVxuKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBhc3NlcnRTaW5nbGVUcmFuc2FjdGlvbih0eFJlcXVlc3QpO1xuICB0cmFuc2FjdGlvbi5zaWduYXR1cmVTaGFyZXMucHVzaCh1c2VyUm91bmQxU2hhcmUpO1xuXG4gIGNvbnN0IGJpdGdvTXNnMSA9IGJpdGdvRHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gIGNvbnN0IHBhcnNlZFVzZXJTaGFyZSA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICBKU09OLnBhcnNlKHVzZXJSb3VuZDFTaGFyZS5zaGFyZSksXG4gICAgJ0VkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMUlucHV0J1xuICApO1xuICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiB1c2VyR3BnUHViS2V5QXJtb3JlZCB9KTtcbiAgY29uc3QgdXNlclJhd01zZzFCeXRlcyA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGFyc2VkVXNlclNoYXJlLmRhdGEubXNnMSwgdXNlckdwZ0tleSk7XG4gIGNvbnN0IHVzZXJNc2cxID0ge1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheSh1c2VyUmF3TXNnMUJ5dGVzKSxcbiAgfTtcblxuICBjb25zdCBbYml0Z29Nc2cyXSA9IGJpdGdvRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW2JpdGdvTXNnMSwgdXNlck1zZzFdKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvTXNnMiwgJ0JpdEdvIERTRyBwcm9kdWNlZCBubyByb3VuZC0yIG91dHB1dCcpO1xuICAoYml0Z29Ec2cgYXMgRWRkc2FNUFNEc2cuRFNHICYgeyByb3VuZDJNZXNzYWdlPzogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSB9KS5yb3VuZDJNZXNzYWdlID0gYml0Z29Nc2cyO1xuXG4gIGNvbnN0IGJpdGdvU2lnbmVkTXNnMSA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvTXNnMS5wYXlsb2FkKSwgYml0Z29HcGdQcml2S2V5KTtcbiAgY29uc3Qgcm91bmQxT3V0cHV0OiBFZGRzYU1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgfTtcblxuICB0cmFuc2FjdGlvbi5zaWduYXR1cmVTaGFyZXMucHVzaCh7XG4gICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkocm91bmQxT3V0cHV0KSxcbiAgfSk7XG5cbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2lnbkJpdGdvRWRkc2FSb3VuZDIoXG4gIGJpdGdvRHNnOiBFZGRzYU1QU0RzZy5EU0csXG4gIHR4UmVxdWVzdDogVHhSZXF1ZXN0LFxuICB1c2VyUm91bmQyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICB1c2VyR3BnUHViS2V5QXJtb3JlZDogc3RyaW5nLFxuICBiaXRnb0dwZ1ByaXZLZXk6IHBncC5Qcml2YXRlS2V5XG4pOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IGFzc2VydFNpbmdsZVRyYW5zYWN0aW9uKHR4UmVxdWVzdCk7XG4gIHRyYW5zYWN0aW9uLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHVzZXJSb3VuZDJTaGFyZSk7XG5cbiAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ1B1YktleUFybW9yZWQgfSk7XG4gIGNvbnN0IGJpdGdvTXNnMiA9IChiaXRnb0RzZyBhcyBFZGRzYU1QU0RzZy5EU0cgJiB7IHJvdW5kMk1lc3NhZ2U/OiBNUFNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlIH0pLnJvdW5kMk1lc3NhZ2U7XG4gIGFzc2VydC5vayhiaXRnb01zZzIsICdCaXRHbyBEU0cgaXMgbWlzc2luZyB0aGUgY2FjaGVkIHJvdW5kLTIgb3V0cHV0Jyk7XG5cbiAgY29uc3QgcGFyc2VkVXNlclJvdW5kMlNoYXJlID0gZGVjb2RlV2l0aENvZGVjKFxuICAgIEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgIEpTT04ucGFyc2UodXNlclJvdW5kMlNoYXJlLnNoYXJlKSxcbiAgICAnRWRkc2FNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQnXG4gICk7XG4gIGNvbnN0IHVzZXJSYXdNc2cyQnl0ZXMgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBhcnNlZFVzZXJSb3VuZDJTaGFyZS5kYXRhLm1zZzIsIHVzZXJHcGdLZXkpO1xuICBjb25zdCB1c2VyTXNnMiA9IHtcbiAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkodXNlclJhd01zZzJCeXRlcyksXG4gIH07XG5cbiAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYml0Z29Nc2cyLnBheWxvYWQpLCBiaXRnb0dwZ1ByaXZLZXkpO1xuICBjb25zdCByb3VuZDJPdXRwdXQ6IEVkZHNhTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICBkYXRhOiB7IG1zZzI6IGJpdGdvU2lnbmVkTXNnMiB9LFxuICB9O1xuXG4gIHRyYW5zYWN0aW9uLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHtcbiAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeShyb3VuZDJPdXRwdXQpLFxuICB9KTtcblxuICBiaXRnb0RzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtiaXRnb01zZzIsIHVzZXJNc2cyXSk7XG5cbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuZGVzY3JpYmUoJ0VkZHNhTVBDdjJVdGlscy5zaWduRWRkc2FNUEN2MlRzc1VzaW5nRXh0ZXJuYWxTaWduZXInLCAoKSA9PiB7XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gIGxldCBlZGRzYU1QQ3YyVXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IG1vY2tCaXRnbzogQml0R29CYXNlO1xuICBsZXQgYml0Z29HcGdLZXlQYWlyOiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgbGV0IGJpdGdvR3BnUHViS2V5OiBwZ3AuS2V5O1xuXG4gIGNvbnN0IHdhbGxldElkID0gJ2FiYzEyM3dhbGxldCc7XG4gIGNvbnN0IHR4UmVxdWVzdElkID0gJ3R4cmVxLTAwMSc7XG4gIGNvbnN0IGVudGVycHJpc2VJZCA9ICdlbnQtMDAxJztcblxuICBjb25zdCBtb2NrVHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB7XG4gICAgdHhSZXF1ZXN0SWQsXG4gICAgd2FsbGV0SWQsXG4gICAgZW50ZXJwcmlzZUlkLFxuICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoOiAnbS8wJyxcbiAgICAgICAgICBzZXJpYWxpemVkVHhIZXg6ICdkZWFkYmVlZicsXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyb3VuZDFPdXRwdXQnLCBkYXRhOiB7fSB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAncGF5bWVudCcgfSxcbiAgICB1bnNpZ25lZFR4czogW10sXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgY29uc3QgbW9ja1R4UmVxdWVzdFRyYW5zYWN0aW9uID0gYXNzZXJ0U2luZ2xlVHJhbnNhY3Rpb24obW9ja1R4UmVxdWVzdCk7XG4gIGNvbnN0IG1vY2tUeFJlcXVlc3RSb3VuZDI6IFR4UmVxdWVzdCA9IHtcbiAgICAuLi5tb2NrVHhSZXF1ZXN0LFxuICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAge1xuICAgICAgICAuLi5tb2NrVHhSZXF1ZXN0VHJhbnNhY3Rpb24sXG4gICAgICAgIHNpZ25hdHVyZVNoYXJlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICAgICAgICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyb3VuZDJPdXRwdXQnLCBkYXRhOiB7fSB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IGR1bW15U2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgc2hhcmU6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3JvdW5kMUlucHV0JywgZGF0YToge30gfSksXG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGNoYWluIGNvbXBhdGlibGUgd2l0aDogYml0Z28ucG9zdCh1cmwpLnNlbmQoYm9keSkucmVzdWx0KClcbiAgY29uc3QgbWFrZVBvc3RDaGFpbiA9IChyZXNwb25zZTogVHhSZXF1ZXN0KTogQml0R29SZXF1ZXN0PFR4UmVxdWVzdD4gPT5cbiAgICAoeyBzZW5kOiAoKSA9PiAoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhyZXNwb25zZSkgfSkgfSBhcyB1bmtub3duIGFzIEJpdEdvUmVxdWVzdDxUeFJlcXVlc3Q+KTtcblxuICAvLyBSZXR1cm5zIGEgY2hhaW4gY29tcGF0aWJsZSB3aXRoOiBiaXRnby5nZXQodXJsKS5xdWVyeShwYXJhbXMpLnJldHJ5KG4pLnJlc3VsdCgpXG4gIGNvbnN0IG1ha2VHZXRDaGFpbiA9ICh0eFJlcXVlc3RzOiBUeFJlcXVlc3RbXSk6IEJpdEdvUmVxdWVzdDx7IHR4UmVxdWVzdHM6IFR4UmVxdWVzdFtdIH0+ID0+XG4gICAgKHtcbiAgICAgIHF1ZXJ5OiAoKSA9PiAoe1xuICAgICAgICByZXRyeTogKCkgPT4gKHsgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyB0eFJlcXVlc3RzIH0pIH0pLFxuICAgICAgfSksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvUmVxdWVzdDx7IHR4UmVxdWVzdHM6IFR4UmVxdWVzdFtdIH0+KTtcblxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIGJpdGdvR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgLy8gRnVsbCBtb2NrIG9mIHRoZSBCaXRHbyBIVFRQIGNsaWVudCAoY29uc2lzdGVudCB3aXRoIG90aGVyIHNkay1jb3JlIHRlc3RzIHN1Y2ggYXNcbiAgICAvLyB0b2tlbkFwcHJvdmFsLnRzIGFuZCB3YWxsZXRzRXZtS2V5cmluZy50cykuICBNb2R1bGUtbGV2ZWwgc3R1YnMgb24gdHNzQ29tbW9uIGZ1bmN0aW9uc1xuICAgIC8vIGRvIG5vdCB3b3JrIHVuZGVyIHRzeCA0LnggKEVTTSBsaXZlIGJpbmRpbmdzKSwgc28gd2UgbW9jayBhdCB0aGUgYml0Z28gb2JqZWN0IGxldmVsLlxuICAgIG1vY2tCaXRnbyA9IHtcbiAgICAgIGdldEVudjogc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbSR7cGF0aH1gKSxcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldDogc2lub24uc3R1YigpLFxuICAgIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VkZHNhJyksXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICBpZDogc2lub24uc3R1YigpLnJldHVybnMod2FsbGV0SWQpLFxuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhbJ3VzZXJLZXlJZCcsICdiYWNrdXBLZXlJZCcsICdiaXRnb0tleUlkJ10pLFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogc2lub24uc3R1YigpLnJldHVybnMoJ01QQ3YyJyksXG4gICAgfSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG5cbiAgICBlZGRzYU1QQ3YyVXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4sIG1vY2tXYWxsZXQpO1xuXG4gICAgc2FuZGJveC5zdHViKGVkZHNhTVBDdjJVdGlscywgJ3BpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcnKS5yZXNvbHZlcyhiaXRnb0dwZ1B1YktleSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY2FsbCBhbGwgMyBnZW5lcmF0b3JzIGFuZCByZXR1cm4gdGhlIGZpbmFsIHR4IHJlcXVlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmluYWxUeFJlcXVlc3QgPSB7IC4uLm1vY2tUeFJlcXVlc3QsIHR4UmVxdWVzdElkIH07XG5cbiAgICAvLyBzZW5kU2lnbmF0dXJlU2hhcmVWMiBpcyBjYWxsZWQgMyB0aW1lcyAob25lIHBlciByb3VuZCksIHNlbmRUeFJlcXVlc3Qgb25jZSDigJQgYWxsIHVzZSBiaXRnby5wb3N0XG4gICAgKG1vY2tCaXRnby5wb3N0IGFzIHNpbm9uLlNpbm9uU3R1YilcbiAgICAgIC5vbkNhbGwoMClcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdCkpIC8vIHJvdW5kIDEgc2lnblxuICAgICAgLm9uQ2FsbCgxKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0Um91bmQyKSkgLy8gcm91bmQgMiBzaWduXG4gICAgICAub25DYWxsKDIpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3RSb3VuZDIpKSAvLyByb3VuZCAzIHNpZ25cbiAgICAgIC5vbkNhbGwoMylcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4oZmluYWxUeFJlcXVlc3QpKTsgLy8gc2VuZFR4UmVxdWVzdCAoc2VuZClcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24gPSAnZW5jcnlwdGVkLXIxLXNlc3Npb24nO1xuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24gPSAnZW5jcnlwdGVkLXIyLXNlc3Npb24nO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSAnZW5jcnlwdGVkLWdwZy1rZXknO1xuICAgIGNvbnN0IHVzZXJHcGdQdWJLZXkgPSBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5O1xuXG4gICAgY29uc3Qgcm91bmQxU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0geyAuLi5kdW1teVNoYXJlIH07XG4gICAgY29uc3Qgcm91bmQyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0geyAuLi5kdW1teVNoYXJlLCBzaGFyZTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncm91bmQySW5wdXQnIH0pIH07XG4gICAgY29uc3Qgcm91bmQzU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0geyAuLi5kdW1teVNoYXJlLCBzaGFyZTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncm91bmQzSW5wdXQnIH0pIH07XG5cbiAgICBjb25zdCByb3VuZDFHZW5lcmF0b3IgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLnJlc29sdmVzKHsgc2lnbmF0dXJlU2hhcmVSb3VuZDE6IHJvdW5kMVNoYXJlLCB1c2VyR3BnUHViS2V5LCBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5IH0pO1xuICAgIGNvbnN0IHJvdW5kMkdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQyOiByb3VuZDJTaGFyZSwgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiB9KTtcbiAgICBjb25zdCByb3VuZDNHZW5lcmF0b3IgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzaWduYXR1cmVTaGFyZVJvdW5kMzogcm91bmQzU2hhcmUgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuc2lnbkVkZHNhTVBDdjJUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgeyB0eFJlcXVlc3Q6IG1vY2tUeFJlcXVlc3QsIHJlcUlkOiBuZXcgUmVxdWVzdFRyYWNlcigpIH0sXG4gICAgICByb3VuZDFHZW5lcmF0b3IgYXMgdW5rbm93biBhcyBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICAgIHJvdW5kMkdlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgICAgcm91bmQzR2VuZXJhdG9yIGFzIHVua25vd24gYXMgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb25cbiAgICApO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQsIGZpbmFsVHhSZXF1ZXN0KTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHJvdW5kMUdlbmVyYXRvcik7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgocm91bmQxR2VuZXJhdG9yLCB7IHR4UmVxdWVzdDogbW9ja1R4UmVxdWVzdCB9KTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKHJvdW5kMkdlbmVyYXRvcik7XG4gICAgY29uc3Qgcm91bmQyQ2FsbCA9IHJvdW5kMkdlbmVyYXRvci5nZXRDYWxsKDApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDJDYWxsLmFyZ3NbMF0udHhSZXF1ZXN0LCBtb2NrVHhSZXF1ZXN0KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQyQ2FsbC5hcmdzWzBdLmVuY3J5cHRlZFJvdW5kMVNlc3Npb24sIGVuY3J5cHRlZFJvdW5kMVNlc3Npb24pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDJDYWxsLmFyZ3NbMF0uZW5jcnlwdGVkVXNlckdwZ1BydktleSwgZW5jcnlwdGVkVXNlckdwZ1BydktleSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kMkNhbGwuYXJnc1swXS5iaXRnb1B1YmxpY0dwZ0tleSwgYml0Z29HcGdQdWJLZXkuYXJtb3IoKSk7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShyb3VuZDNHZW5lcmF0b3IpO1xuICAgIGNvbnN0IHJvdW5kM0NhbGwgPSByb3VuZDNHZW5lcmF0b3IuZ2V0Q2FsbCgwKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzQ2FsbC5hcmdzWzBdLnR4UmVxdWVzdCwgbW9ja1R4UmVxdWVzdFJvdW5kMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kM0NhbGwuYXJnc1swXS5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzQ2FsbC5hcmdzWzBdLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXksIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDNDYWxsLmFyZ3NbMF0uYml0Z29QdWJsaWNHcGdLZXksIGJpdGdvR3BnUHViS2V5LmFybW9yKCkpO1xuXG4gICAgLy8gMyBzZW5kU2lnbmF0dXJlU2hhcmVWMiBjYWxscyArIDEgc2VuZFR4UmVxdWVzdCA9IDQgUE9TVCBjYWxscyB0b3RhbFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCgobW9ja0JpdGdvLnBvc3QgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQsIDQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlc29sdmUgdHhSZXF1ZXN0IGJ5IElEIHN0cmluZyB1c2luZyBnZXRUeFJlcXVlc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gZ2V0VHhSZXF1ZXN0IHVzZXMgYml0Z28uZ2V0OyBzZW5kU2lnbmF0dXJlU2hhcmVWMiAow5czKSArIHNlbmRUeFJlcXVlc3QgdXNlIGJpdGdvLnBvc3RcbiAgICAobW9ja0JpdGdvLmdldCBhcyBzaW5vbi5TaW5vblN0dWIpLnJldHVybnMobWFrZUdldENoYWluKFttb2NrVHhSZXF1ZXN0XSkpO1xuICAgIChtb2NrQml0Z28ucG9zdCBhcyBzaW5vbi5TaW5vblN0dWIpXG4gICAgICAub25DYWxsKDApXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3QpKVxuICAgICAgLm9uQ2FsbCgxKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0Um91bmQyKSlcbiAgICAgIC5vbkNhbGwoMilcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdFJvdW5kMikpXG4gICAgICAub25DYWxsKDMpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3QpKTtcblxuICAgIGNvbnN0IHJvdW5kMUdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICBzaWduYXR1cmVTaGFyZVJvdW5kMTogZHVtbXlTaGFyZSxcbiAgICAgIHVzZXJHcGdQdWJLZXk6IGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiAncjEnLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogJ2tleScsXG4gICAgfSk7XG4gICAgY29uc3Qgcm91bmQyR2VuZXJhdG9yID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2lnbmF0dXJlU2hhcmVSb3VuZDI6IGR1bW15U2hhcmUsIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246ICdyMicgfSk7XG4gICAgY29uc3Qgcm91bmQzR2VuZXJhdG9yID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2lnbmF0dXJlU2hhcmVSb3VuZDM6IGR1bW15U2hhcmUgfSk7XG5cbiAgICBhd2FpdCBlZGRzYU1QQ3YyVXRpbHMuc2lnbkVkZHNhTVBDdjJUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdElkLCByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSB9LFxuICAgICAgcm91bmQxR2VuZXJhdG9yIGFzIHVua25vd24gYXMgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgICByb3VuZDJHZW5lcmF0b3IgYXMgdW5rbm93biBhcyBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICAgIHJvdW5kM0dlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRnby5nZXQgYXMgc2lub24uU2lub25TdHViKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChyb3VuZDFHZW5lcmF0b3IsIHsgdHhSZXF1ZXN0OiBtb2NrVHhSZXF1ZXN0IH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IHdoZW4gcm91bmQgMiB0eFJlcXVlc3QgaXMgbWlzc2luZyBzaWduYXR1cmVTaGFyZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgcm91bmQyTm9TaGFyZXM6IFR4UmVxdWVzdCA9IHtcbiAgICAgIC4uLm1vY2tUeFJlcXVlc3QsXG4gICAgICB0cmFuc2FjdGlvbnM6IFt7IC4uLm1vY2tUeFJlcXVlc3RUcmFuc2FjdGlvbiwgc2lnbmF0dXJlU2hhcmVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBbXSB9XSxcbiAgICB9O1xuXG4gICAgKG1vY2tCaXRnby5wb3N0IGFzIHNpbm9uLlNpbm9uU3R1YilcbiAgICAgIC5vbkNhbGwoMClcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdCkpXG4gICAgICAub25DYWxsKDEpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKHJvdW5kMk5vU2hhcmVzKSk7XG5cbiAgICBjb25zdCByb3VuZDFHZW5lcmF0b3IgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgc2lnbmF0dXJlU2hhcmVSb3VuZDE6IGR1bW15U2hhcmUsXG4gICAgICB1c2VyR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogJ3IxJyxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6ICdrZXknLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMkdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQyOiBkdW1teVNoYXJlLCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiAncjInIH0pO1xuICAgIGNvbnN0IHJvdW5kM0dlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQzOiBkdW1teVNoYXJlIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICBlZGRzYU1QQ3YyVXRpbHMuc2lnbkVkZHNhTVBDdjJUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgICAgICAgIHsgdHhSZXF1ZXN0OiBtb2NrVHhSZXF1ZXN0LCByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSB9LFxuICAgICAgICAgIHJvdW5kMUdlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgICAgICAgIHJvdW5kMkdlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgICAgICAgIHJvdW5kM0dlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICAgICAgICksXG4gICAgICAvTWlzc2luZyBzaWduYXR1cmUgc2hhcmVzIGluIHJvdW5kIDIgdHhSZXF1ZXN0L1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBhcm1vcmVkIEJpdEdvIHB1YmxpYyBHUEcga2V5IHRvIHJvdW5kIDIgYW5kIHJvdW5kIDMgZ2VuZXJhdG9ycycsIGFzeW5jICgpID0+IHtcbiAgICAobW9ja0JpdGdvLnBvc3QgYXMgc2lub24uU2lub25TdHViKVxuICAgICAgLm9uQ2FsbCgwKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0KSlcbiAgICAgIC5vbkNhbGwoMSlcbiAgICAgIC5yZXR1cm5zKG1ha2VQb3N0Q2hhaW4obW9ja1R4UmVxdWVzdFJvdW5kMikpXG4gICAgICAub25DYWxsKDIpXG4gICAgICAucmV0dXJucyhtYWtlUG9zdENoYWluKG1vY2tUeFJlcXVlc3RSb3VuZDIpKVxuICAgICAgLm9uQ2FsbCgzKVxuICAgICAgLnJldHVybnMobWFrZVBvc3RDaGFpbihtb2NrVHhSZXF1ZXN0KSk7XG5cbiAgICBjb25zdCByb3VuZDFHZW5lcmF0b3IgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgc2lnbmF0dXJlU2hhcmVSb3VuZDE6IGR1bW15U2hhcmUsXG4gICAgICB1c2VyR3BnUHViS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogJ3IxJyxcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXk6ICdrZXknLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMkdlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQyOiBkdW1teVNoYXJlLCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiAncjInIH0pO1xuICAgIGNvbnN0IHJvdW5kM0dlbmVyYXRvciA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZVNoYXJlUm91bmQzOiBkdW1teVNoYXJlIH0pO1xuXG4gICAgYXdhaXQgZWRkc2FNUEN2MlV0aWxzLnNpZ25FZGRzYU1QQ3YyVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICAgIHsgdHhSZXF1ZXN0OiBtb2NrVHhSZXF1ZXN0LCByZXFJZDogbmV3IFJlcXVlc3RUcmFjZXIoKSB9LFxuICAgICAgcm91bmQxR2VuZXJhdG9yIGFzIHVua25vd24gYXMgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgICByb3VuZDJHZW5lcmF0b3IgYXMgdW5rbm93biBhcyBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICAgIHJvdW5kM0dlbmVyYXRvciBhcyB1bmtub3duIGFzIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGFybW9yZWRLZXkgPSBiaXRnb0dwZ1B1YktleS5hcm1vcigpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHJvdW5kMkdlbmVyYXRvci5nZXRDYWxsKDApLmFyZ3NbMF0uYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICBhcm1vcmVkS2V5LFxuICAgICAgJ3JvdW5kIDIgc2hvdWxkIHJlY2VpdmUgYXJtb3JlZCBCaXRHbyBHUEcga2V5J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgcm91bmQzR2VuZXJhdG9yLmdldENhbGwoMCkuYXJnc1swXS5iaXRnb1B1YmxpY0dwZ0tleSxcbiAgICAgIGFybW9yZWRLZXksXG4gICAgICAncm91bmQgMyBzaG91bGQgcmVjZWl2ZSBhcm1vcmVkIEJpdEdvIEdQRyBrZXknXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gYnl0ZXNUb1dvcmQoYnl0ZXM/OiBVaW50OEFycmF5IHwgbnVtYmVyW10pOiBudW1iZXIge1xuICBpZiAoIShieXRlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGJ5dGVzLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnl0ZXMgbXVzdCBiZSBhIFVpbnQ4QXJyYXkgd2l0aCBsZW5ndGggNCcpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuXG5kZXNjcmliZSgnRUREU0FVdGlscy5pc0VkZHNhTXBjVjFTaWduaW5nTWF0ZXJpYWwnLCAoKSA9PiB7XG4gIGNvbnN0IFBBU1NQSFJBU0UgPSAndGVzdC1wYXNzcGhyYXNlJztcblxuICBjb25zdCBNUEN2MV9NQVRFUklBTF9CQUNLVVAgPSB7XG4gICAgdVNoYXJlOiB7IGk6IDEsIHQ6IDIsIG46IDMsIHk6ICdhYWJiY2MnLCBzZWVkOiAnZGVhZGJlZWYwMTIzNDU2NycsIGNoYWluY29kZTogJzAwJyB9LFxuICAgIGJpdGdvWVNoYXJlOiB7IGk6IDMsIGo6IDEsIHk6ICdhYWJiY2MnLCB1OiAnYml0Z28tdS12YWx1ZScsIGNoYWluY29kZTogJzAwJyB9LFxuICAgIGJhY2t1cFlTaGFyZTogeyBpOiAyLCBqOiAxLCB5OiAnYWFiYmNjJywgdTogJ2JhY2t1cC11LXZhbHVlJywgY2hhaW5jb2RlOiAnMDAnIH0sXG4gIH07XG5cbiAgY29uc3QgTVBDdjFfTUFURVJJQUxfVVNFUiA9IHtcbiAgICB1U2hhcmU6IHsgaTogMiwgdDogMiwgbjogMywgeTogJ2FhYmJjYycsIHNlZWQ6ICdkZWFkYmVlZjAxMjM0NTY3JywgY2hhaW5jb2RlOiAnMDAnIH0sXG4gICAgYml0Z29ZU2hhcmU6IHsgaTogMywgajogMiwgeTogJ2FhYmJjYycsIHU6ICdiaXRnby11LXZhbHVlJywgY2hhaW5jb2RlOiAnMDAnIH0sXG4gICAgdXNlcllTaGFyZTogeyBpOiAxLCBqOiAyLCB5OiAnYWFiYmNjJywgdTogJ3VzZXItdS12YWx1ZScsIGNoYWluY29kZTogJzAwJyB9LFxuICB9O1xuXG4gIGNvbnN0IE1QQ3YyX0NCT1JfQllURVMgPSBCdWZmZXIuZnJvbShbMHhkOSwgMHgwMSwgMHgwNCwgMHhhMywgMHg2MSwgMHg3OCwgMHgxOCwgMHgwMF0pLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICBsZXQgbW9ja0JpdGdvOiBCaXRHb0Jhc2U7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIC8vIHNkay1jb3JlIGhhcyBubyBkZXZEZXBlbmRlbmN5IG9uIHNkay1hcGkvYXJnb24yLCBzbyB2MiBlbnZlbG9wZXMgYXJlIHNpbXVsYXRlZCBoZXJlLlxuICAgIC8vIFJlYWwgYml0Z28uZGVjcnlwdCByb3V0ZXMgdjIgdG8gQXJnb24yaWQ7IHRoZSBzdHViIHJldHVybnMgTVBDdjIgQ0JPUiBwbGFpbnRleHQgaW5zdGVhZC5cbiAgICBtb2NrQml0Z28gPSB7XG4gICAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgaW5wdXQ6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChpc1YyRW52ZWxvcGUocGFyYW1zLmlucHV0KSkge1xuICAgICAgICAgIHJldHVybiBNUEN2Ml9DQk9SX0JZVEVTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzamNsLmRlY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQpO1xuICAgICAgfSksXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgdHJ1ZSBmb3IgTVBDdjEgU0pDTC1lbmNyeXB0ZWQga2V5Y2FyZCB3aXRoIGJhY2t1cFlTaGFyZSArIGNvcnJlY3QgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoUEFTU1BIUkFTRSwgSlNPTi5zdHJpbmdpZnkoTVBDdjFfTUFURVJJQUxfQkFDS1VQKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGF3YWl0IEVERFNBVXRpbHMuaXNFZGRzYU1wY1YxU2lnbmluZ01hdGVyaWFsKGVuY3J5cHRlZCwgUEFTU1BIUkFTRSksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB0cnVlIGZvciBNUEN2MSBTSkNMLWVuY3J5cHRlZCBrZXljYXJkIHdpdGggdXNlcllTaGFyZSArIGNvcnJlY3QgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoUEFTU1BIUkFTRSwgSlNPTi5zdHJpbmdpZnkoTVBDdjFfTUFURVJJQUxfVVNFUikpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhd2FpdCBFRERTQVV0aWxzLmlzRWRkc2FNcGNWMVNpZ25pbmdNYXRlcmlhbChlbmNyeXB0ZWQsIFBBU1NQSFJBU0UpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgZmFsc2UgZm9yIE1QQ3YyIENCT1IgY29udGVudCB3cmFwcGVkIGluIFNKQ0wgZW52ZWxvcGUgKyBjb3JyZWN0IHBhc3NwaHJhc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KFBBU1NQSFJBU0UsIE1QQ3YyX0NCT1JfQllURVMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhd2FpdCBFRERTQVV0aWxzLmlzRWRkc2FNcGNWMVNpZ25pbmdNYXRlcmlhbChlbmNyeXB0ZWQsIFBBU1NQSFJBU0UpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGZhbHNlIGZvciBNUEN2MiBBcmdvbjJpZCBlbnZlbG9wZSAodjIpICsgY29ycmVjdCBwYXNzcGhyYXNlIChmb3J3YXJkLWNvbXBhdCknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmFrZVYyRW52ZWxvcGUgPSBKU09OLnN0cmluZ2lmeSh7IHY6IDIsIG06IDY1NTM2LCB0OiAzLCBwOiA0LCBzYWx0OiAnQUFBQScsIGl2OiAnQUFBQScsIGN0OiAnQUFBQScgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGF3YWl0IEVERFNBVXRpbHMuaXNFZGRzYU1wY1YxU2lnbmluZ01hdGVyaWFsKGZha2VWMkVudmVsb3BlLCBQQVNTUEhSQVNFLCBtb2NrQml0Z28pLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3Mgb24gd3JvbmcgcGFzc3BocmFzZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBzamNsLmVuY3J5cHQoUEFTU1BIUkFTRSwgSlNPTi5zdHJpbmdpZnkoTVBDdjFfTUFURVJJQUxfQkFDS1VQKSk7XG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBFRERTQVV0aWxzLmlzRWRkc2FNcGNWMVNpZ25pbmdNYXRlcmlhbChlbmNyeXB0ZWQsICd3cm9uZy1wYXNzcGhyYXNlJyksXG4gICAgICAvY2NtOiB0YWcgZG9lc24ndCBtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBmYWxzZSB3aGVuIG5laXRoZXIgYmFja3VwWVNoYXJlLnUgbm9yIHVzZXJZU2hhcmUudSBpcyBwcmVzZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnRpYWwgPSB7IHVTaGFyZTogeyBzZWVkOiAnYWJjJyB9LCBiaXRnb1lTaGFyZTogeyB1OiAneHl6JyB9IH07XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KFBBU1NQSFJBU0UsIEpTT04uc3RyaW5naWZ5KHBhcnRpYWwpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgRUREU0FVdGlscy5pc0VkZHNhTXBjVjFTaWduaW5nTWF0ZXJpYWwoZW5jcnlwdGVkLCBQQVNTUEhSQVNFKSwgZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2lnblJlY292ZXJ5RWRkc2FNUEN2MicsICgpID0+IHtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wLzAnO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgNjQtYnl0ZSBzaWduYXR1cmUgdGhhdCB2ZXJpZmllcyBhZ2FpbnN0IHRoZSBkZXJpdmVkIHB1YmxpYyBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2csIGJhY2t1cERrZ10gPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ2RlYWRiZWVmJywgJ2hleCcpO1xuICAgIGNvbnN0IGNvbW1vbktleUNoYWluID0gdXNlckRrZy5nZXRDb21tb25LZXljaGFpbigpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgRUREU0FVdGlscy5zaWduUmVjb3ZlcnlFZGRzYU1QQ3YyKFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgdXNlckRrZy5nZXRLZXlTaGFyZSgpLFxuICAgICAgYmFja3VwRGtnLmdldEtleVNoYXJlKCksXG4gICAgICBjb21tb25LZXlDaGFpblxuICAgICk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnbmF0dXJlLmxlbmd0aCwgNjQpO1xuXG4gICAgY29uc3QgbXBjID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleUNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBCdWZmZXIuZnJvbShkZXJpdmVkS2V5Y2hhaW4uc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG4gICAgY29uc3Qgb2sgPSBlZDI1NTE5LnZlcmlmeShuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShtZXNzYWdlKSwgbmV3IFVpbnQ4QXJyYXkocHVibGljS2V5Qnl0ZXMpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2ssIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZlcmlmeWluZyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgYSBkaWZmZXJlbnQgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBbdXNlckRrZywgYmFja3VwRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZGVhZGJlZWYnLCAnaGV4Jyk7XG4gICAgY29uc3QgY29tbW9uS2V5Q2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBFRERTQVV0aWxzLnNpZ25SZWNvdmVyeUVkZHNhTVBDdjIoXG4gICAgICBtZXNzYWdlLFxuICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICB1c2VyRGtnLmdldEtleVNoYXJlKCksXG4gICAgICBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgIGNvbW1vbktleUNoYWluXG4gICAgKTtcblxuICAgIGNvbnN0IGRpZmZlcmVudE1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnY2FmZWJhYmUnLCAnaGV4Jyk7XG4gICAgY29uc3QgbXBjID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlcml2ZWRLZXljaGFpbiA9IG1wYy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleUNoYWluLCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBCdWZmZXIuZnJvbShkZXJpdmVkS2V5Y2hhaW4uc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG4gICAgY29uc3Qgb2sgPSBlZDI1NTE5LnZlcmlmeShcbiAgICAgIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksXG4gICAgICBuZXcgVWludDhBcnJheShkaWZmZXJlbnRNZXNzYWdlKSxcbiAgICAgIG5ldyBVaW50OEFycmF5KHB1YmxpY0tleUJ5dGVzKVxuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9rLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhIHdyb25nIGNvbW1vbktleUNoYWluIGlzIHByb3ZpZGVkICh2ZXJpZmljYXRpb24gbWlzbWF0Y2gpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgY29uc3QgW3dyb25nRGtnXSA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbSgnZGVhZGJlZWYnLCAnaGV4Jyk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIEVERFNBVXRpbHMuc2lnblJlY292ZXJ5RWRkc2FNUEN2MihcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgIHVzZXJEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgICAgICBiYWNrdXBEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgICAgICB3cm9uZ0RrZy5nZXRDb21tb25LZXljaGFpbigpIC8vIGtleSBjaGFpbiBmcm9tIGEgZGlmZmVyZW50IHdhbGxldFxuICAgICAgICApLFxuICAgICAgL0VkRFNBIE1QQ3YyIHJlY292ZXJ5IHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkL1xuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdFZGRzYU1QQ3YyVXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgdXRpbHM6IEVkZHNhTVBDdjJVdGlscztcbiAgbGV0IGNhbGxiYWNrczogRWRkc2FNUEN2MktleUdlbkNhbGxiYWNrcztcbiAgY29uc3QgZW50ZXJwcmlzZSA9ICdlbnRlcnByaXNlLWlkJztcbiAgY29uc3Qgc2Vzc2lvbklkID0gJ3Nlc3Npb24tMDAxJztcbiAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSAnY29tbW9uLWtleWNoYWluLWhleCc7XG5cbiAgY29uc3QgdXNlclN0YXRlID0geyBlbmNyeXB0ZWREYXRhOiAndS1kYXRhJywgZW5jcnlwdGVkRGF0YUtleTogJ3UtZGF0YS1rZXknIH07XG4gIGNvbnN0IGJhY2t1cFN0YXRlID0geyBlbmNyeXB0ZWREYXRhOiAnYi1kYXRhJywgZW5jcnlwdGVkRGF0YUtleTogJ2ItZGF0YS1rZXknIH07XG4gIGNvbnN0IHVzZXJTaWduZWRNc2cxOiBNUFNUeXBlcy5NUFNTaWduZWRNZXNzYWdlID0geyBtZXNzYWdlOiAndW1zZzEnLCBzaWduYXR1cmU6ICd1c2lnMScgfTtcbiAgY29uc3QgYmFja3VwU2lnbmVkTXNnMTogTVBTVHlwZXMuTVBTU2lnbmVkTWVzc2FnZSA9IHsgbWVzc2FnZTogJ2Jtc2cxJywgc2lnbmF0dXJlOiAnYnNpZzEnIH07XG4gIGNvbnN0IHVzZXJTaWduZWRNc2cyOiBNUFNUeXBlcy5NUFNTaWduZWRNZXNzYWdlID0geyBtZXNzYWdlOiAndW1zZzInLCBzaWduYXR1cmU6ICd1c2lnMicgfTtcbiAgY29uc3QgYmFja3VwU2lnbmVkTXNnMjogTVBTVHlwZXMuTVBTU2lnbmVkTWVzc2FnZSA9IHsgbWVzc2FnZTogJ2Jtc2cyJywgc2lnbmF0dXJlOiAnYnNpZzInIH07XG4gIGNvbnN0IGJpdGdvTXNnMTogTVBTVHlwZXMuTVBTU2lnbmVkTWVzc2FnZSA9IHsgbWVzc2FnZTogJ2JpdGdvLW1zZzEnLCBzaWduYXR1cmU6ICdiaXRnby1zaWcxJyB9O1xuICBjb25zdCBiaXRnb01zZzI6IE1QU1R5cGVzLk1QU1NpZ25lZE1lc3NhZ2UgPSB7IG1lc3NhZ2U6ICdiaXRnby1tc2cyJywgc2lnbmF0dXJlOiAnYml0Z28tc2lnMicgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBjYWxsYmFja3MgPSB7XG4gICAgICBpbml0aWFsaXplQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHVzZXJHcGdQdWJsaWNLZXk6ICd1c2VyLWdwZy1wdWInLFxuICAgICAgICBiYWNrdXBHcGdQdWJsaWNLZXk6ICdiYWNrdXAtZ3BnLXB1YicsXG4gICAgICAgIHVzZXJTdGF0ZSxcbiAgICAgICAgYmFja3VwU3RhdGUsXG4gICAgICB9KSxcbiAgICAgIHJvdW5kMUNhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICB1c2VyU2lnbmVkTXNnMSxcbiAgICAgICAgYmFja3VwU2lnbmVkTXNnMSxcbiAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBiYWNrdXBTdGF0ZSxcbiAgICAgIH0pLFxuICAgICAgcm91bmQyQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHVzZXJTaWduZWRNc2cyLFxuICAgICAgICBiYWNrdXBTaWduZWRNc2cyLFxuICAgICAgICB1c2VyU3RhdGUsXG4gICAgICAgIGJhY2t1cFN0YXRlLFxuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZUNhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBjb21tb25LZXljaGFpbiB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja0JpdEdvID0ge1xuICAgICAgZ2V0RW52OiBzaW5vbi5zdHViKCkucmV0dXJucygnZGV2JyksXG4gICAgfSBhcyBhbnk7XG5cbiAgICBjb25zdCBtb2NrS2V5Y2hhaW5zID0ge1xuICAgICAgYWRkOiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoKHBhcmFtczogYW55KSA9PiBQcm9taXNlLnJlc29sdmUoeyBpZDogYCR7cGFyYW1zLnNvdXJjZX0ta2V5LWlkYCwgY29tbW9uS2V5Y2hhaW4sIGlzTVBDdjI6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgfSBhcyBhbnk7XG5cbiAgICB1dGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMobW9ja0JpdEdvLCBtb2NrQ29pbik7XG5cbiAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzJyBhcyBhbnkpLnJlc29sdmVzKHsgZWRkc2FNcGN2MlB1YmxpY0tleTogbnVsbCB9KTtcbiAgICAodXRpbHMgYXMgYW55KS5iaXRnb0VkZHNhTXBjdjJQdWJsaWNHcGdLZXkgPSB7IGFybW9yOiAoKSA9PiAnLS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tXFxuJyB9O1xuXG4gICAgc2lub24uc3R1Yih1dGlscywgJ3NlbmRLZXlHZW5lcmF0aW9uUm91bmQxJykucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgYXMgYW55LFxuICAgICAgYml0Z29Nc2cxLFxuICAgIH0pO1xuICAgIHNpbm9uLnN0dWIodXRpbHMsICdzZW5kS2V5R2VuZXJhdGlvblJvdW5kMicpLnJlc29sdmVzKHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkIGFzIGFueSxcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluOiBjb21tb25LZXljaGFpbiBhcyBhbnksXG4gICAgICBiaXRnb01zZzIsXG4gICAgfSk7XG4gICAgc2lub24uc3R1Yih1dGlscyBhcyBhbnksICdhZGRCaXRnb0tleWNoYWluJykucmVzb2x2ZXMoeyBpZDogJ2JpdGdvLWtleS1pZCcsIGNvbW1vbktleWNoYWluLCBpc01QQ3YyOiB0cnVlIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnZva2UgY2FsbGJhY2tzIGluIG9yZGVyIGFuZCByZXR1cm4ga2V5Y2hhaW5zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KTtcblxuICAgIGFzc2VydC5vayhrZXljaGFpbnMudXNlcktleWNoYWluKTtcbiAgICBhc3NlcnQub2soa2V5Y2hhaW5zLmJhY2t1cEtleWNoYWluKTtcbiAgICBhc3NlcnQub2soa2V5Y2hhaW5zLmJpdGdvS2V5Y2hhaW4pO1xuXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoY2FsbGJhY2tzLmluaXRpYWxpemVDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5yb3VuZDFDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5yb3VuZDJDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5maW5hbGl6ZUNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyByb3VuZDEgcmVzcG9uc2UgdG8gcm91bmQyQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3Qgcm91bmQyQXJncyA9IChjYWxsYmFja3Mucm91bmQyQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MuYml0Z29Nc2cxLCBiaXRnb01zZzEpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy51c2VyU2lnbmVkTXNnMSwgdXNlclNpZ25lZE1zZzEpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy5iYWNrdXBTaWduZWRNc2cxLCBiYWNrdXBTaWduZWRNc2cxKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MudXNlclN0YXRlLCB1c2VyU3RhdGUpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy5iYWNrdXBTdGF0ZSwgYmFja3VwU3RhdGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3Mgcm91bmQyIHJlc3BvbnNlIHRvIGZpbmFsaXplQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3QgZmluYWxpemVBcmdzID0gKGNhbGxiYWNrcy5maW5hbGl6ZUNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1YikuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYml0Z29Nc2cyLCBiaXRnb01zZzIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYml0Z29Db21tb25LZXljaGFpbiwgY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZmluYWxpemVBcmdzLnVzZXJTdGF0ZSwgdXNlclN0YXRlKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGZpbmFsaXplQXJncy5iYWNrdXBTdGF0ZSwgYmFja3VwU3RhdGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGtleWNoYWlucyB3aXRoIGlzTVBDdjI6IHRydWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3QgbW9ja0tleWNoYWlucyA9ICh1dGlscyBhcyBhbnkpLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIGNvbnN0IGFkZENhbGxzID0gKG1vY2tLZXljaGFpbnMuYWRkIGFzIHNpbm9uLlNpbm9uU3R1YikuZ2V0Q2FsbHMoKTtcbiAgICBhc3NlcnQub2soYWRkQ2FsbHMubGVuZ3RoID49IDIsICdrZXljaGFpbnMuYWRkIHNob3VsZCBiZSBjYWxsZWQgZm9yIHVzZXIgYW5kIGJhY2t1cCcpO1xuICAgIGZvciAoY29uc3QgY2FsbCBvZiBhZGRDYWxscykge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNhbGwuYXJnc1swXS5pc01QQ3YyLCB0cnVlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjYWxsLmFyZ3NbMF0ua2V5VHlwZSwgJ3RzcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNhbGwuYXJnc1swXS5jb21tb25LZXljaGFpbiwgY29tbW9uS2V5Y2hhaW4pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBmaW5hbGl6ZUNhbGxiYWNrIHJldHVybnMgbWlzbWF0Y2hlZCBjb21tb25LZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoY2FsbGJhY2tzLmZpbmFsaXplQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5yZXNvbHZlcyh7IGNvbW1vbktleWNoYWluOiAnZGlmZmVyZW50LWtleWNoYWluJyB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pLFxuICAgICAgL0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHdoZW4gcm91bmQyIHJldHVybnMgbWlzbWF0Y2hlZCBzZXNzaW9uSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgKHV0aWxzLnNlbmRLZXlHZW5lcmF0aW9uUm91bmQyIGFzIHNpbm9uLlNpbm9uU3R1YikucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiAnZGlmZmVyZW50LXNlc3Npb24nIGFzIGFueSxcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluOiBjb21tb25LZXljaGFpbiBhcyBhbnksXG4gICAgICBiaXRnb01zZzIsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KSxcbiAgICAgIC9Sb3VuZCAxIGFuZCByb3VuZCAyIHNlc3Npb24gSURzIGRvIG5vdCBtYXRjaC9cbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIEJpdEdvIEVkRFNBIE1QQ3YyIEdQRyBwdWJsaWMga2V5IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgKHV0aWxzIGFzIGFueSkuYml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5ID0gdW5kZWZpbmVkO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiB1dGlscy5jcmVhdGVLZXljaGFpbnNXaXRoRXh0ZXJuYWxTaWduZXIoeyBlbnRlcnByaXNlLCBjYWxsYmFja3MgfSksXG4gICAgICAvRmFpbGVkIHRvIGdldCBCaXRHbyBFZERTQSBNUEN2MiBHUEcgcHVibGljIGtleS9cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|