@bitgo/sdk-coin-stx 4.3.0 → 5.0.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/lib/abstractContractBuilder.d.ts +18 -2
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
- package/dist/src/lib/abstractContractBuilder.js +40 -7
- package/dist/src/lib/constants.d.ts +0 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +2 -4
- package/dist/src/lib/contractBuilder.d.ts +14 -0
- package/dist/src/lib/contractBuilder.d.ts.map +1 -1
- package/dist/src/lib/contractBuilder.js +29 -5
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -1
- package/dist/src/lib/fungibleTokenTransferBuilder.js +10 -5
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +2 -1
- package/dist/src/lib/keyPair.d.ts +1 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +8 -4
- package/dist/src/lib/network.d.ts.map +1 -1
- package/dist/src/lib/network.js +4 -3
- package/dist/src/lib/postConditions.d.ts +31 -0
- package/dist/src/lib/postConditions.d.ts.map +1 -0
- package/dist/src/lib/postConditions.js +61 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
- package/dist/src/lib/sbtcWithdrawBuilder.js +11 -9
- package/dist/src/lib/sendmanyBuilder.d.ts +1 -1
- package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -1
- package/dist/src/lib/sendmanyBuilder.js +5 -3
- package/dist/src/lib/transaction.d.ts +3 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +22 -20
- package/dist/src/lib/transactionBuilder.d.ts +0 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +20 -10
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +2 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +1 -2
- package/dist/src/lib/utils.d.ts +2 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +36 -21
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +13 -13
- package/dist/test/fixtures.d.ts +3 -18
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +7 -20
- package/dist/test/unit/btcAddressUtils.js +54 -1
- package/dist/test/unit/keyPair.js +9 -4
- package/dist/test/unit/network.js +5 -5
- package/dist/test/unit/postConditions.d.ts +2 -0
- package/dist/test/unit/postConditions.d.ts.map +1 -0
- package/dist/test/unit/postConditions.js +56 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +94 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts +2 -0
- package/dist/test/unit/registerForBondRealArgs.d.ts.map +1 -0
- package/dist/test/unit/registerForBondRealArgs.js +22 -0
- package/dist/test/unit/resources.d.ts +2 -0
- package/dist/test/unit/resources.d.ts.map +1 -1
- package/dist/test/unit/resources.js +7 -4
- package/dist/test/unit/sip10Token.js +47 -1
- package/dist/test/unit/stx.js +93 -2
- package/dist/test/unit/stxNodeErrors.d.ts +2 -0
- package/dist/test/unit/stxNodeErrors.d.ts.map +1 -0
- package/dist/test/unit/stxNodeErrors.js +118 -0
- package/dist/test/unit/transaction.js +24 -1
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/builderValidators.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/builderValidators.js +119 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +37 -3
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +86 -3
- package/dist/test/unit/transactionBuilder/pox5Builder.js +96 -1
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +94 -27
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +31 -8
- package/dist/test/unit/transactionBuilder/transferBuilder.js +69 -3
- package/dist/test/unit/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilderFactory.js +63 -0
- package/dist/test/unit/tstxsignet.js +14 -3
- package/dist/test/unit/util.js +106 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
package/dist/test/unit/util.js
CHANGED
|
@@ -234,11 +234,11 @@ describe('Stx util library', function () {
|
|
|
234
234
|
describe('stringifyCv', function () {
|
|
235
235
|
it('Int type', function () {
|
|
236
236
|
const input = { type: transactions_1.ClarityType.Int, value: BigInt('100000') };
|
|
237
|
-
Utils.stringifyCv(input).should.deepEqual({ type:
|
|
237
|
+
Utils.stringifyCv(input).should.deepEqual({ type: transactions_1.ClarityType.Int, value: '100000' });
|
|
238
238
|
});
|
|
239
239
|
it('UInt type', function () {
|
|
240
240
|
const input = { type: transactions_1.ClarityType.UInt, value: BigInt('100000') };
|
|
241
|
-
Utils.stringifyCv(input).should.deepEqual({ type:
|
|
241
|
+
Utils.stringifyCv(input).should.deepEqual({ type: transactions_1.ClarityType.UInt, value: '100000' });
|
|
242
242
|
});
|
|
243
243
|
it('OptionalNone type', function () {
|
|
244
244
|
const input = { type: transactions_1.ClarityType.OptionalNone };
|
|
@@ -249,28 +249,63 @@ describe('Stx util library', function () {
|
|
|
249
249
|
type: transactions_1.ClarityType.OptionalSome,
|
|
250
250
|
value: { type: transactions_1.ClarityType.UInt, value: BigInt('100000') },
|
|
251
251
|
};
|
|
252
|
-
Utils.stringifyCv(input).should.deepEqual({
|
|
252
|
+
Utils.stringifyCv(input).should.deepEqual({
|
|
253
|
+
type: transactions_1.ClarityType.OptionalSome,
|
|
254
|
+
value: { type: transactions_1.ClarityType.UInt, value: '100000' },
|
|
255
|
+
});
|
|
253
256
|
});
|
|
254
257
|
it('OptionalSome type with tuple value', function () {
|
|
255
258
|
const input = {
|
|
256
259
|
type: transactions_1.ClarityType.OptionalSome,
|
|
257
260
|
value: {
|
|
258
261
|
type: transactions_1.ClarityType.Tuple,
|
|
259
|
-
|
|
260
|
-
hashbytes: { type: transactions_1.ClarityType.Buffer,
|
|
261
|
-
version: { type: transactions_1.ClarityType.Buffer,
|
|
262
|
+
value: {
|
|
263
|
+
hashbytes: { type: transactions_1.ClarityType.Buffer, value: Buffer.from('some-hash').toString('hex') },
|
|
264
|
+
version: { type: transactions_1.ClarityType.Buffer, value: new bn_js_1.default(1).toBuffer().toString('hex') },
|
|
262
265
|
},
|
|
263
266
|
},
|
|
264
267
|
};
|
|
265
|
-
Utils.stringifyCv(input).should.deepEqual(
|
|
268
|
+
Utils.stringifyCv(input).should.deepEqual({
|
|
269
|
+
type: transactions_1.ClarityType.OptionalSome,
|
|
270
|
+
value: {
|
|
271
|
+
type: transactions_1.ClarityType.Tuple,
|
|
272
|
+
data: {
|
|
273
|
+
hashbytes: { type: transactions_1.ClarityType.Buffer, value: '736f6d652d68617368' },
|
|
274
|
+
version: { type: transactions_1.ClarityType.Buffer, value: '01' },
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
});
|
|
266
278
|
});
|
|
267
279
|
it('List type', function () {
|
|
268
|
-
const input = { type: transactions_1.ClarityType.List,
|
|
269
|
-
Utils.stringifyCv(input).should.deepEqual({
|
|
280
|
+
const input = { type: transactions_1.ClarityType.List, value: [{ type: transactions_1.ClarityType.UInt, value: BigInt('100000') }] };
|
|
281
|
+
Utils.stringifyCv(input).should.deepEqual({
|
|
282
|
+
type: transactions_1.ClarityType.List,
|
|
283
|
+
list: [{ type: transactions_1.ClarityType.UInt, value: '100000' }],
|
|
284
|
+
});
|
|
270
285
|
});
|
|
271
286
|
it('List type with empty list', function () {
|
|
272
|
-
const input = { type: transactions_1.ClarityType.List,
|
|
273
|
-
Utils.stringifyCv(input).should.deepEqual({ type:
|
|
287
|
+
const input = { type: transactions_1.ClarityType.List, value: [] };
|
|
288
|
+
Utils.stringifyCv(input).should.deepEqual({ type: transactions_1.ClarityType.List, list: [] });
|
|
289
|
+
});
|
|
290
|
+
it('ResponseOk type with uint value', function () {
|
|
291
|
+
const input = {
|
|
292
|
+
type: transactions_1.ClarityType.ResponseOk,
|
|
293
|
+
value: { type: transactions_1.ClarityType.UInt, value: BigInt('100000') },
|
|
294
|
+
};
|
|
295
|
+
Utils.stringifyCv(input).should.deepEqual({
|
|
296
|
+
type: transactions_1.ClarityType.ResponseOk,
|
|
297
|
+
value: { type: transactions_1.ClarityType.UInt, value: '100000' },
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
it('ResponseErr type with uint value', function () {
|
|
301
|
+
const input = {
|
|
302
|
+
type: transactions_1.ClarityType.ResponseErr,
|
|
303
|
+
value: { type: transactions_1.ClarityType.UInt, value: BigInt('10000') },
|
|
304
|
+
};
|
|
305
|
+
Utils.stringifyCv(input).should.deepEqual({
|
|
306
|
+
type: transactions_1.ClarityType.ResponseErr,
|
|
307
|
+
value: { type: transactions_1.ClarityType.UInt, value: '10000' },
|
|
308
|
+
});
|
|
274
309
|
});
|
|
275
310
|
});
|
|
276
311
|
describe('getAddressVersion', function () {
|
|
@@ -336,5 +371,64 @@ describe('Stx util library', function () {
|
|
|
336
371
|
assert_1.default.throws(() => Utils.isSameBaseAddress(address5, baseAddress5).should.false(), new RegExp(`invalid address: ${address5}`));
|
|
337
372
|
});
|
|
338
373
|
});
|
|
374
|
+
describe('edge cases and error branches', function () {
|
|
375
|
+
const validAddress = 'STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6';
|
|
376
|
+
const compressedPubKey = '02f6d0597fb6d5467203d080e17f7b4f767ead59fc303b7d7261a832cb44305bb0';
|
|
377
|
+
it('should prefix a buffer with 0x', function () {
|
|
378
|
+
Utils.bufferToHexPrefixString(Buffer.from('deadbeef', 'hex')).should.equal('0xdeadbeef');
|
|
379
|
+
});
|
|
380
|
+
it('should reject a contract principal whose address is invalid', function () {
|
|
381
|
+
assert_1.default.throws(() => Utils.contractPrincipalCVFromString('notanaddress.contract'), /must contain a valid address/);
|
|
382
|
+
});
|
|
383
|
+
it('should reject a raw transaction that is not a hex string', function () {
|
|
384
|
+
Utils.isValidRawTransaction(123).should.be.false();
|
|
385
|
+
Utils.isValidRawTransaction('deadbeef').should.be.false();
|
|
386
|
+
});
|
|
387
|
+
it('should reject a non-string memo', function () {
|
|
388
|
+
Utils.isValidMemo(123).should.be.false();
|
|
389
|
+
});
|
|
390
|
+
it('should reject more signatures than public keys', function () {
|
|
391
|
+
assert_1.default.throws(() => Utils.getSTXAddressFromPubKeys([compressedPubKey], transactions_1.AddressVersion.MainnetMultiSig, transactions_1.AddressHashMode.P2SH, 2), /Number of signatures required must be lower or equal to the number of Public Keys/);
|
|
392
|
+
});
|
|
393
|
+
it('should reject signing a message with a public-only key pair', function () {
|
|
394
|
+
const keyPair = new KeyPair({ pub: testData.xpub1 });
|
|
395
|
+
assert_1.default.throws(() => Utils.signMessage(keyPair, 'message'), /Missing private key/);
|
|
396
|
+
});
|
|
397
|
+
it('should reject normalizing an invalid address or memo id', function () {
|
|
398
|
+
assert_1.default.throws(() => Utils.normalizeAddress({ address: 'invalid' }), /invalid address: invalid/);
|
|
399
|
+
assert_1.default.throws(() => Utils.normalizeAddress({ address: validAddress, memoId: '-1' }), /invalid memo id: -1/);
|
|
400
|
+
});
|
|
401
|
+
it('should reject an address whose query string has no memo id', function () {
|
|
402
|
+
assert_1.default.throws(() => Utils.getAddressDetails(`${validAddress}?notMemoId=1`), /invalid address with memo id/);
|
|
403
|
+
});
|
|
404
|
+
it('should reject malformed send-many-memo function args', function () {
|
|
405
|
+
assert_1.default.throws(() => Utils.functionArgsToSendParams([]), /don't match send-many-memo type declaration/);
|
|
406
|
+
assert_1.default.throws(() => Utils.functionArgsToSendParams([(0, transactions_1.listCV)([(0, transactions_1.uintCV)(1)])]), /don't match send-many-memo type declaration/);
|
|
407
|
+
});
|
|
408
|
+
it('should reject malformed token transfer function args', function () {
|
|
409
|
+
assert_1.default.throws(() => Utils.functionArgsToTokenTransferParams([]), /don't match token transfer declaration/);
|
|
410
|
+
assert_1.default.throws(() => Utils.functionArgsToTokenTransferParams([
|
|
411
|
+
(0, transactions_1.uintCV)(1),
|
|
412
|
+
(0, transactions_1.bufferCVFromString)('sender'),
|
|
413
|
+
(0, transactions_1.bufferCVFromString)('recipient'),
|
|
414
|
+
]), /don't match token transfer declaration/);
|
|
415
|
+
});
|
|
416
|
+
it('should parse an optional memo in token transfer function args', function () {
|
|
417
|
+
const params = Utils.functionArgsToTokenTransferParams([
|
|
418
|
+
(0, transactions_1.uintCV)(1000),
|
|
419
|
+
(0, transactions_1.standardPrincipalCV)(validAddress),
|
|
420
|
+
(0, transactions_1.standardPrincipalCV)(validAddress),
|
|
421
|
+
(0, transactions_1.bufferCV)(Buffer.from('memo', 'ascii')),
|
|
422
|
+
]);
|
|
423
|
+
params.memo?.should.equal('memo');
|
|
424
|
+
});
|
|
425
|
+
it('should resolve a supported sip10 token name and return undefined for an unsupported contract', function () {
|
|
426
|
+
should_1.default.equal(Utils.findContractTokenNameUsingContract('STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH', 'tsip6dp-token'), 'tsip6dp-token');
|
|
427
|
+
should_1.default.equal(Utils.findContractTokenNameUsingContract('SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4', 'sbtc-token'), 'sbtc-token');
|
|
428
|
+
should_1.default.equal(Utils.findContractTokenNameUsingContract('ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT', 'sbtc-token'), 'sbtc-token');
|
|
429
|
+
should_1.default.equal(Utils.findContractTokenNameUsingContract('ST000000000000000000002AMW42H', 'not-a-token'), undefined);
|
|
430
|
+
should_1.default.equal(Utils.findTokenNameByContract('ST000000000000000000002AMW42H', 'not-a-token'), undefined);
|
|
431
|
+
});
|
|
432
|
+
});
|
|
339
433
|
});
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qix1REFBMEc7QUFDMUcsa0RBQTJCO0FBQzNCLHNEQUF3QztBQUN4QyxtQ0FBbUM7QUFFbkMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFNLENBQUM7QUFFbEMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO0lBQzNCLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDbEIsRUFBRSxDQUFDLDJCQUEyQixFQUFFO1lBQzlCLE1BQU0sY0FBYyxHQUFHO2dCQUNyQiwwQ0FBMEM7Z0JBQzFDLDJDQUEyQztnQkFDM0MsMkNBQTJDO2dCQUMzQyxvREFBb0Q7Z0JBQ3BELG1EQUFtRDtnQkFDbkQsc0RBQXNEO2FBQ3ZELENBQUM7WUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsTUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsMENBQTBDO2dCQUMxQywyQ0FBMkM7Z0JBQzNDLHNEQUFzRDtnQkFDdEQsa0RBQWtEO2dCQUNsRCwwREFBMEQ7Z0JBQzFELEVBQUU7Z0JBQ0YsS0FBSzthQUNOLENBQUM7WUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FB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LENBQUMsRUFBRSxDQUFDO1lBQ3hFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQVcsRUFBRSxJQUFJLEVBQUUsMEJBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUJBQW1CLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQVcsRUFBRSxJQUFJLEVBQUUsMEJBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQVc7Z0JBQ3BCLElBQUksRUFBRSwwQkFBVyxDQUFDLFlBQVk7Z0JBQzlCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2FBQzNELENBQUM7WUFDRixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FB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QztZQUM3RCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQztZQUNoRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUvRCxNQUFNLFFBQVEsR0FBRywyQ0FBMkMsQ0FBQztZQUM3RCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQztZQUNoRSxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDcEUsSUFBSSxNQUFNLENBQUMsb0JBQW9CLFFBQVEsRUFBRSxDQUFDLENBQzNDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBBZGRyZXNzVmVyc2lvbiwgQ2xhcml0eVR5cGUsIEludENWLCBOb25lQ1YsIFNvbWVDViwgVUludENWLCBMaXN0Q1YgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgQmlnTnVtIGZyb20gJ2JuLmpzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmNvbnN0IHsgS2V5UGFpciwgVXRpbHMgfSA9IFN0eExpYjtcblxuZGVzY3JpYmUoJ1N0eCB1dGlsIGxpYnJhcnknLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JyxcbiAgICAgICAgJ1NUMTFOSlRUS0dWVDZEMUhZNE5KUlZRV01RTTdUVkFSMDkxRUo4UDJZJyxcbiAgICAgICAgJ1NQMlQ3NThLNlQyWVJLRzlRMFRKMTZCNkZQNVFRUkVXWlNFU1JTMFBZJyxcbiAgICAgICAgJ1NUMVdWSk1TNVZTNDFGMFlNSDdEMk0wVkhYUkc0Q1k0M1pKWkJTNjBBP21lbW9JZD00JyxcbiAgICAgICAgJ1NQU1pCWjNXMEpDMk1FQk4wTTlQQU0yUUI1U0g3MlFZRVFBTU42SEQ/bWVtb0lkPTAnLFxuICAgICAgICAnU1AzQlY3MDkySzlaUzlOSjlaWU1QWEU2OVNWNlk2MDcyTTdIRVo0OUU/bWVtb0lkPTI1NScsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQWRkcmVzc2VzID0gW1xuICAgICAgICAnU1AyNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgICAgICdTVDFUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gICAgICAgICdTVDFXVkpNUzVWUzQxRjBZTUg3RDJNMFZIWFJHNENZNDNaSlpCUzYwQT9tZW1vSWQ9TmFOJyxcbiAgICAgICAgJ1NQU1pCWjNXMEpDMk1FQk4wTTlQQU0yUUI1U0g3MlFZRVFBTU42SEQ/bWVtb0lkPScsXG4gICAgICAgICdTUDNCVjcwOTJLOVpTOU5KOVpZTVBYRTY5U1Y2WTYwNzJNN0hFWjQ5RT9tZW1vSWQ9dGVzdGluZycsXG4gICAgICAgICcnLFxuICAgICAgICAnYWJjJyxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBpbnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpO1xuICAgICAgICBVdGlscy5pc1ZhbGlkQWRkcmVzc1dpdGhQYXltZW50SWQoYWRkcmVzcykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGNvbXByZXNzZWQgcHVibGljIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwdWJLZXlzID0gW1xuICAgICAgICAnMDI2M2UxZjJmMzIyZmI3NDIyNGUyMTBmOWQ2MTZmY2UxNGQxMGZhODk1MjBkY2RlM2Q2ZDAyNTE0Y2RiMTY4NDZhJyxcbiAgICAgICAgJzAyZDVkZTllMWI5YzEzZmM3YjY3NDQ2ZWJjZmY0ZmJiOWFhNmIxOTMzZjkwN2U5YWFiZjMyZjQ4ZDZlMGE1MDY0ZCcsXG4gICAgICAgICcwMjk2YzRiODM1M2M0YTkzODE3M2Y4MDcwNmRmNDgwY2Y2Zjg1NTIzYjQyOGQ1OWVlODFkOWVmZmNmNjFlNWVhZTgnLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgYWRkcmVzcyA9IFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKTtcblxuICAgICAgYWRkcmVzcy5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU00xVzlQQlZUWkE5U1JOQlFKMkEwNVIzVDBaVllDOTRQRDBBTjlLREcnKTtcbiAgICAgIGFkZHJlc3MuaGFzaDE2MC5zaG91bGQuZXF1YWwoJzc4OWIyZjdhZmE5MzljNTU3NzkwOTQwMmUwN2EwN2Y3ZTYyNDk2NjgnKTtcblxuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLlRlc3RuZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTjFXOVBCVlRaQTlTUk5CUUoyQTA1UjNUMFpWWUM5NFBEMEE5R0dNWidcbiAgICAgICk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uTWFpbm5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NNMVc5UEJWVFpBOVNSTkJRSjJBMDVSM1QwWlZZQzk0UEQwQU45S0RHJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgbXVsdGlzaWcgYWRkcmVzc2VzIGZyb20gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHViS2V5cyA9IFtcbiAgICAgICAgJzA0OTc0MmI5MDg1NzlmZmQyMjVkNWUxZDk0ODY0NzFmMTlhMTAxZGQwNGI3YTgxZDExZGE4ODJlN2FjN2YzZTA0Mjk4OWMzMTE1MjRhMzMzNWUxNWRlYzkzMzhhMDdiZDIxYjZlNDQ0NGI2Yjc3NDRkMzE0Y2M5MjZhMWYwMzgzZGInLFxuICAgICAgICAnMDQ2NDA5N2NjYmMyMjkwNWVjNmY2NzhjODQ2MzQ2Mjk0MDMzZTExYTIxNmQxMzNhYmY2YWYyNTIyOTQ2OTViMzUzOGQ2NWY2NWIxODhiNmU3MmUxODkwZTc3MzhmOWUyMjE5NDRlNjE4ZGVhMTE3OGVmNzQ5NzE3YjM1NDkyZGU2YScsXG4gICAgICAgICcwNDJjNjA4NDA4MzUyYWI0MTQ3N2FkOWRkMWNhYmNhOWU3MTJkZTJkZmYzYzVjOGJmYTRiNWY3ZjFhMGY3NGEzMjQwMmE4MjZkMmNlNWYzYTZiMDFjMTZhZWViZGQzMDRlMjM1NzkxOTU4YmJmOTdhMDhiNWQ0ZTlkZDRkYjM5OWI3JyxcbiAgICAgIF07XG5cbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU00yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjg2RkNDUTQnKTtcbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzLCBBZGRyZXNzVmVyc2lvbi5UZXN0bmV0TXVsdGlTaWcpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnU04yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjkwUDdZR1MnXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTTJURjhDMDAzSkU1WUE4QjQzQzJaQVkwSzk1UUZWSk5WODZGQ0NRNCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHB1YktleXMgPSBbXG4gICAgICAgICcwNGQ2ZjBmN2Q5N2E3Mjk3OTU5NmExN2ZhMjk0NmVhZWZmMzcwMzI1MGE2MjY0MDI3MWVlYTU5NDc3ZjViMTlmMzlhZDAxY2UyYTUzMDI1ZWJhMzY1YTRmNDBkZDA4NTIzNDE5NGQxZDA2YWVmZWMyYTlkNDQzOWJlMGYzYzJkZjM0JyxcbiAgICAgICAgJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCcsXG4gICAgICAgICcwMzRjODBmOTkxNDEwMDgyODI0YWVlNGNhNDgxNDcwODI5OTdkNDRlODAwZGE5ODc3ZTY5NGY5Y2I2NGIzY2I2NGEnLFxuICAgICAgXTtcblxuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdTTUU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1DS002N0VWJyk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uVGVzdG5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NORThQS1JIU0NCNjk5RkVLNTlGN1Q3Q0JCMjI1S0gxTURQQlZLRjknXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTUU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1DS002N0VWJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIGludmFsaWQgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhbXSksIC9JbnZhbGlkIG51bWJlciBvZiBwdWJsaWMga2V5cy8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoWydiYWRrZXknLCAnYmFka2V5MiddKSwgL0ludmFsaWQgcHVibGljIGtleS8pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoW1xuICAgICAgICAgICAgJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCcsXG4gICAgICAgICAgICAnYmFka2V5JyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgL0ludmFsaWQgcHVibGljIGtleS9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3ZhbGlkIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRBbW91bnQoJzEwJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbnZhbGlkIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRBbW91bnQoJy0xMCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwcm9wZXIga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbdGVzdERhdGEuc2VjcmV0S2V5MSwgdGVzdERhdGEuc2VjcmV0S2V5MiwgdGVzdERhdGEuQUNDT1VOVF8xLnBydl07XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoa2V5KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgdmFsaWRhdGUgaW52YWxpZCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgJzY2Yzg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQwOScsXG4gICAgICAgICc2ODg2NDgxMTZiNzIxYmIyZjM5NGUwMDA3ZjlkMzQ4ZWEwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICAgICcweDY2Yzg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2JpdGdvLXN0YWNrcycsXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzNCA4ZWEwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzcnJ4eDkwODAxN2I2ZTYwNGRlNTFhM2E3ZDk1N2Q1ODUyNCcsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlzID0gW3Rlc3REYXRhLnB1YktleTEsIHRlc3REYXRhLnB1YktleTIsIHRlc3REYXRhLnB1YktleTJDb21wcmVzc2VkXTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgICcwNDIxZDZmNDJjOTdkMjNlYzJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlODZlM2NlYTZmNDFhOTRhOWE3YzI0YTFjY2Q4Mzc5MjE3M2Y0NzVmZGI1OTBjYzgyZjk0ZmY2MTVkZjM5MTQyNzY2ZTc1OWNlNjM4NycsXG4gICAgICAgICcwMzIxZDZmNDJjOTlmN2QyM2VjIDJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlNmUzY2VhNmY0MWEnLFxuICAgICAgICAnMGFhNjhjMmQ2ZmRiMzcwNmIzOWYzMmQ2ZjQyMjUyNzVjZTA2MjU2MTkwOGZkN2NhNTQwYTQ0YzkyZWI4NTk0ZWE2ZGI5ZmNmZTBiMzkwYzBlYWQzZjQ1YzM2YWZkNjgyZWFiNjJlYjEyNGE2M2I0NjA5NDVmZTFmN2M3ZjhhMDllMicsXG4gICAgICAgICcnLFxuICAgICAgICAnYml0Z28tc3RhY2tzJyxcbiAgICAgICAgJzA5MjFkNmY0MmM5OWY3ZDIzZWMyYzBkYzIxMjA4YTljNWVkZmNlNGU1YmM3YjYzOTcyZTY4ZTg2ZTNjZWE2ZjQxYScsXG4gICAgICAgICcwMzIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGV6emUzY2VhNmY0MWEnLFxuICAgICAgICAnMHgwMzIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGU4NmUzY2VhNmY0MWEnLFxuICAgICAgICB0ZXN0RGF0YS5pbnZhbGlkUHViS2V5MSxcbiAgICAgICAgdGVzdERhdGEuaW52YWxpZFB1YktleTIsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoa2V5KS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGlkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SWRzID0gW1xuICAgICAgICAnMHgyMDlhM2UxOTYxOTUwNjNiMmU1MTk1MjMyMDg3YTcxZmUyMzI5YTZkYzhkMmZjYTUzMWQ0OGM1YTc4MjRmNjc5JyxcbiAgICAgICAgJzZhNTkwMzc4YzA1OWY3OGZiNjk4ZWMwYWYxZmY2MTA1ODZjYjFhNTJlZTc5ZmRhZTY5ZTU2NDMwZmRlMDhjZjQnLFxuICAgICAgICAnMGUwMTQ5YmMyYzgxOWYzYWU0MGNlZjk1Y2E1ODk1NWM4MGJiYzllMTVmOGM3YzY1MWM3Yjg2YzIyMTRiN2YwMicsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHR4SWQgb2YgdHhJZHMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQgaWRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhJZHMgPSBbXG4gICAgICAgICcnLFxuICAgICAgICAnYml0Z28tc3RhY2tzJyxcbiAgICAgICAgJzB4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3JyxcbiAgICAgICAgJzZhNTkwMzc4YzA1OWY3OGZiNjk4ZWMwYWYxZmY2MTA1ODZjYjUyZWU3OWZkYWU2OWU1NjQzMGZkZTA4Y2Y0JyxcbiAgICAgICAgJzF4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3OScsXG4gICAgICAgICc2YTU5MDM3OGMwNTlmNzhmYjY5OGVjMGFmMWZmNjEwNTg2Y2IxYXp6MmVlNzlmZGFlNjllNTY0MzBmZGUwOGNmNCcsXG4gICAgICAgICcwZTAxNDliYzJjODE5ZjNhZTQwY2VmOTVjYTU4OTU1YzgwYmJjOWUxICAgNWY4YzdjNjUxYzdiODZjMjIxNGI3ZjAyJyxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdHhJZCBvZiB0eElkcykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIG1lbW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2NoZWNrIGZvciB2YWxpZCBtZW1vIHN0cmluZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZW1vU3RyaW5ncyA9IFsnJywgJ1RoaXMgaXMgYSB0ZXN0LicsICdPa2F5JywgJyEhVGhpcyBpcyB0aGlydHkgZm91ciBieXRlcyBsb25nISEnXTtcbiAgICAgIGZvciAoY29uc3QgbWVtbyBvZiBtZW1vU3RyaW5ncykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkTWVtbyhtZW1vKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGl0KCdjaGVjayBmb3IgdmFsaWQgbWVtbyBzdHJpbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVtb1N0cmluZ3MgPSBbJ+qcn+qcn1RoaXMgaXMgdGhpcnR5IGZvdXIgY2hhcnMgbG9uZyEhJywgJ0l0IHdhcyB0aGUgYmVzdCBvZiB0aW1lcywgaXQgd2FzIHRoZSB3b3JzdCBvZiB0aW1lcyddO1xuICAgICAgZm9yIChjb25zdCBtZW1vIG9mIG1lbW9TdHJpbmdzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRNZW1vKG1lbW8pLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbiBhbmQgdmVyaWZ5JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleVBhaXIxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnNlY3JldEtleTEgfSk7XG4gICAgY29uc3Qga2V5UGFpcjIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuc2VjcmV0S2V5MiB9KTtcblxuICAgIGl0KCdzaWduIGEgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5zaWduTWVzc2FnZShrZXlQYWlyMSwgdGVzdERhdGEubWVzc2FnZTEpLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLnNpZ25NZXNzYWdlKGtleVBhaXIyLCB0ZXN0RGF0YS5tZXNzYWdlMiksIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMik7XG4gICAgfSk7XG5cbiAgICBpdCgndmVyaWZ5IGEgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKHRlc3REYXRhLm1lc3NhZ2UxLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIxLmdldEtleXMoKS5wdWIpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIC8vIGhhbmRsZSBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgcHVibGljIGtleXMgcHJvcGVybHlcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEubWVzc2FnZTIsXG4gICAgICAgIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMixcbiAgICAgICAga2V5UGFpcjIuZ2V0S2V5cyhmYWxzZSkucHViXG4gICAgICApLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEubWVzc2FnZTIsXG4gICAgICAgIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMixcbiAgICAgICAga2V5UGFpcjIuZ2V0S2V5cyh0cnVlKS5wdWJcbiAgICAgICkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZlcmlmeSBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZW1wdHkgbWVzc2FnZVxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gVXRpbHMudmVyaWZ5U2lnbmF0dXJlKCcnLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIxLmdldEtleXMoKS5wdWIpLFxuICAgICAgICBuZXcgUmVnRXhwKCdDYW5ub3QgdmVyaWZ5IGVtcHR5IG1lc3NhZ2VzJylcbiAgICAgICk7XG5cbiAgICAgIC8vIHdyb25nIHB1YmxpYyBrZXlcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZSh0ZXN0RGF0YS5tZXNzYWdlMSwgdGVzdERhdGEuZXhwZWN0ZWRTaWduYXR1cmUxLCBrZXlQYWlyMi5nZXRLZXlzKCkucHViKS5zaG91bGQuYmUuZmFsc2UoKTtcblxuICAgICAgLy8gd3Jvbmcgc2lnbmF0dXJlXG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUodGVzdERhdGEubWVzc2FnZTIsIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMSwga2V5UGFpcjIuZ2V0S2V5cygpLnB1Yikuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpbmdpZnlDdicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnSW50IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLkludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKHsgdHlwZTogMCwgdmFsdWU6ICcxMDAwMDAnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1VJbnQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBVSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiBCaWdJbnQoJzEwMDAwMCcpIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IDEsIHZhbHVlOiAnMTAwMDAwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbE5vbmUgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBOb25lQ1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ09wdGlvbmFsU29tZSB0eXBlIHdpdGggdWludCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBTb21lQ1YgPSB7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSxcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfSxcbiAgICAgIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IDEwLCB2YWx1ZTogeyB0eXBlOiAxLCB2YWx1ZTogJzEwMDAwMCcgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbFNvbWUgdHlwZSB3aXRoIHR1cGxlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQ6IFNvbWVDViA9IHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlR1cGxlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGhhc2hieXRlczogeyB0eXBlOiBDbGFyaXR5VHlwZS5CdWZmZXIsIGJ1ZmZlcjogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiB7IHR5cGU6IENsYXJpdHlUeXBlLkJ1ZmZlciwgYnVmZmVyOiBuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKGlucHV0KTtcbiAgICB9KTtcblxuICAgIGl0KCdMaXN0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbeyB0eXBlOiBDbGFyaXR5VHlwZS5VSW50LCB2YWx1ZTogQmlnSW50KCcxMDAwMDAnKSB9XSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiAxMSwgbGlzdDogW3sgdHlwZTogMSwgdmFsdWU6ICcxMDAwMDAnIH1dIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ0xpc3QgdHlwZSB3aXRoIGVtcHR5IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbXSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiAxMSwgbGlzdDogW10gfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBZGRyZXNzVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gZm9yIHZhbGlkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIE1haW5uZXQgc2luZ2xlIHNpZ1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NQMUROMk5HUkIyUjNXNzVTVDBHQUE3REJWMVZFQkJXWVoxRDMzREVRJykuc2hvdWxkLmVxdWFsKDIyKTtcbiAgICAgIC8vIE1haW5uZXQgbXVsdGkgc2lnXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU000NjhWRVRLQTVEQjE1SFdHMlFNN1kwNEVGUUtWNDRSOUQ2RDBRQycpLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAvLyBUZXN0bmV0IHNpbmdsZSBzaWdcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTVDFTUkNBOTNDRTFXRDhURUcyOEJTV0JGUjY4SjI0WlRBQjJGQUowJykuc2hvdWxkLmVxdWFsKDI2KTtcbiAgICAgIC8vIFRlc3RuZXQgbXVsdGkgc2lnXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnKS5zaG91bGQuZXF1YWwoMjEpO1xuICAgICAgLy8gV2l0aCBNZW1vIElkXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU1AxRE4yTkdSQjJSM1c3NVNUMEdBQTdEQlYxVkVCQldZWjFEMzNERVE/bWVtb0lkPTAnKS5zaG91bGQuZXF1YWwoMjIpO1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYP21lbW9JZD0yNTUnKS5zaG91bGQuZXF1YWwoMjEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RW5jb2RlZFByaW5jaXBhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSBhIHRlc3RuZXQgc3RhbmRhcmQgcHJpbmNpcGFsIGFzIHRoZSAyMi1ieXRlIENsYXJpdHkgYmxvYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ1NUMzkwRDBXQkY2MFQyNVAzNktNQ1A2V04xQlhRN1RUTU1RS05WMTVDJykuc2hvdWxkLmVxdWFsKFxuICAgICAgICAnMDUxYWQyMDY4MzhiNzk4MWExMTZjMzM0ZThjYjFiOTUwYWZiNzNlYjU0YTUnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgY29udHJhY3QgcHJpbmNpcGFscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ1NUMzkwRDBXQkY2MFQyNVAzNktNQ1A2V04xQlhRN1RUTU1RS05WMTVDLm15LWNvbnRyYWN0JyksXG4gICAgICAgIC9jb250cmFjdCBwcmluY2lwYWxzIGFyZSBub3Qgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFkZHJlc3NlcyB3aXRoIGEgbWVtb0lkIHN1ZmZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ1NUMzkwRDBXQkY2MFQyNVAzNktNQ1A2V04xQlhRN1RUTU1RS05WMTVDP21lbW9JZD0wJyksXG4gICAgICAgIC9tdXN0IG5vdCBpbmNsdWRlIGEgcXVlcnkgc3RyaW5nL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBVdGlscy5nZXRFbmNvZGVkUHJpbmNpcGFsKCdub3QtYS1zdGFja3MtYWRkcmVzcycpLCAvaW52YWxpZCBTdGFja3MgYWRkcmVzcy8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgneHB1YlRvU1RYUHVia2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBjb252ZXJ0IGZvciB2YWxpZCB4cHVicycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLnhwdWJUb1NUWFB1YmtleShcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHUzJITWR2QU5ON284RVNXcXd2cjVVNHJ5NWZaZEQ5VkhoeW1XeWZvRFFGNHZ6ZktvdFhnR3RKVHJ3ckZSejdYYkdGb3Y0RnFkS0tvNm1SWU5Xdk1wN1AyM0RqdUpuUydcbiAgICAgICkuc2hvdWxkLmVxdWFsKCcwM2YwZjM1ODFhNDI1Njc5N2ZhODQ3OGNiNmIxZGE2NTg4ZjRjNGJlZGM4MGFiMjYwMWUzYTE1NzJjZjU3YjYxNTYnKTtcbiAgICAgIFV0aWxzLnhwdWJUb1NUWFB1YmtleShcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNGRXpyNUNjcEZ6UEc0NXJtUGY3NURUdkRvYk41Z0ppbUNhdGJIdHpSNTNTYkh6RFoxSjU2YnlLU3NkYzh2U3VqR3VRcHlQamI3THN1YTJOZkFESmV3UHhOekwzTjZUaidcbiAgICAgICkuc2hvdWxkLmVxdWFsKCcwMjYyYjdlODZjMWUzNmU0NWQ0NTEyNjNiNTRhMWMzZDc0MGFiZWFiNjFkMjIxZDExNzVmYzNmZGFkNzUyODUzYWInKTtcbiAgICAgIFV0aWxzLnhwdWJUb1NUWFB1YmtleShcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNHUDFhZGszNFZ6UlFKRU1YMjVyQ3hqRXlVOVlGRldOaFdOendQb3FnakxvS2ZucW90THdyejdrQmV2V2JSWm5xVFNRclFEdUp1WVVRYURRNUREUEV6RVhNd1BTOVBFZidcbiAgICAgICkuc2hvdWxkLmVxdWFsKCcwMzY1MjlhMGU0MWNmZDFhOWQyNjViNzRmOGQwMDAyYzkyYzVhZWMxMGQ0MjM5MDAwMjYwYTI1Y2ZkNTRlNDcyNmMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEJhc2VBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBiYXNlIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFg/bWVtb0lkPTI1NSc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzcyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBVdGlscy5nZXRCYXNlQWRkcmVzcyhhZGRyZXNzV2l0aE1lbW8pLnNob3VsZC5lcXVhbChiYXNlQWRkcmVzcyk7XG4gICAgICBVdGlscy5nZXRCYXNlQWRkcmVzcyhiYXNlQWRkcmVzcykuc2hvdWxkLmVxdWFsKGJhc2VBZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzU2FtZUJhc2VBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgaWYgYmFzZSBhZGRyZXNzIG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWD9tZW1vSWQ9MjU1JztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJztcbiAgICAgIFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3MsIGJhc2VBZGRyZXNzKS5zaG91bGQudHJ1ZSgpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzMiA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzczIgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczIsIGJhc2VBZGRyZXNzMikuc2hvdWxkLnRydWUoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczMgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFg/bWVtb0lkPTI1NSc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzczMgPSAnU1QxU1JDQTkzQ0UxV0Q4VEVHMjhCU1dCRlI2OEoyNFpUQUIyRkFKMCc7XG4gICAgICBVdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzMywgYmFzZUFkZHJlc3MzKS5zaG91bGQuZmFsc2UoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczQgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3M0ID0gJ1NUMVNSQ0E5M0NFMVdEOFRFRzI4QlNXQkZSNjhKMjRaVEFCMkZBSjAnO1xuICAgICAgVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczQsIGJhc2VBZGRyZXNzNCkuc2hvdWxkLmZhbHNlKCk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3M1ID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRGJztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzNSA9ICdTVDFTUkNBOTNDRTFXRDhURUcyOEJTV0JGUjY4SjI0WlRBQjJGQUowJztcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3M1LCBiYXNlQWRkcmVzczUpLnNob3VsZC5mYWxzZSgpLFxuICAgICAgICBuZXcgUmVnRXhwKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzczV9YClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qix1REFnQjhCO0FBQzlCLGtEQUEyQjtBQUMzQixzREFBd0M7QUFDeEMsbUNBQW1DO0FBRW5DLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsWUFBTSxDQUFDO0FBRWxDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2xCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtZQUM5QixNQUFNLGNBQWMsR0FBRztnQkFDckIsMENBQTBDO2dCQUMxQywyQ0FBMkM7Z0JBQzNDLDJDQUEyQztnQkFDM0Msb0RBQW9EO2dCQUNwRCxtREFBbUQ7Z0JBQ25ELHNEQUFzRDthQUN2RCxDQUFDO1lBRUYsS0FBSyxNQUFNLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFO1lBQzlDLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLDBDQUEwQztnQkFDMUMsMkNBQTJDO2dCQUMzQyxzREFBc0Q7Z0JBQ3RELGtEQUFrRDtnQkFDbEQsMERBQTBEO2dCQUMxRCxFQUFFO2dCQUNGLEtBQUs7YUFDTixDQUFDO1lBRUYsS0FBSyxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN2QyxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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QkFBK0IsRUFBRSxhQUFhLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsK0JBQStCLEVBQUUsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgQWRkcmVzc0hhc2hNb2RlLFxuICBBZGRyZXNzVmVyc2lvbixcbiAgQ2xhcml0eVR5cGUsXG4gIEludENWLFxuICBOb25lQ1YsXG4gIFJlc3BvbnNlRXJyb3JDVixcbiAgUmVzcG9uc2VPa0NWLFxuICBTb21lQ1YsXG4gIFVJbnRDVixcbiAgTGlzdENWLFxuICBidWZmZXJDVixcbiAgYnVmZmVyQ1ZGcm9tU3RyaW5nLFxuICBsaXN0Q1YsXG4gIHN0YW5kYXJkUHJpbmNpcGFsQ1YsXG4gIHVpbnRDVixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IEJpZ051bSBmcm9tICdibi5qcyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5jb25zdCB7IEtleVBhaXIsIFV0aWxzIH0gPSBTdHhMaWI7XG5cbmRlc2NyaWJlKCdTdHggdXRpbCBsaWJyYXJ5JywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQWRkcmVzc2VzID0gW1xuICAgICAgICAnU1RCNDRIWVBZQVQyQkIyUUU1MTNOU1A4MUhUTVlXQkpQMDJIUEdLNicsXG4gICAgICAgICdTVDExTkpUVEtHVlQ2RDFIWTROSlJWUVdNUU03VFZBUjA5MUVKOFAyWScsXG4gICAgICAgICdTUDJUNzU4SzZUMllSS0c5UTBUSjE2QjZGUDVRUVJFV1pTRVNSUzBQWScsXG4gICAgICAgICdTVDFXVkpNUzVWUzQxRjBZTUg3RDJNMFZIWFJHNENZNDNaSlpCUzYwQT9tZW1vSWQ9NCcsXG4gICAgICAgICdTUFNaQlozVzBKQzJNRUJOME05UEFNMlFCNVNINzJRWUVRQU1ONkhEP21lbW9JZD0wJyxcbiAgICAgICAgJ1NQM0JWNzA5Mks5WlM5Tko5WllNUFhFNjlTVjZZNjA3Mk03SEVaNDlFP21lbW9JZD0yNTUnLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIHZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3NlcyA9IFtcbiAgICAgICAgJ1NQMjQ0SFlQWUFUMkJCMlFFNTEzTlNQODFIVE1ZV0JKUDAySFBHSzYnLFxuICAgICAgICAnU1QxVDc1OEs2VDJZUktHOVEwVEoxNkI2RlA1UVFSRVdaU0VTUlMwUFknLFxuICAgICAgICAnU1QxV1ZKTVM1VlM0MUYwWU1IN0QyTTBWSFhSRzRDWTQzWkpaQlM2MEE/bWVtb0lkPU5hTicsXG4gICAgICAgICdTUFNaQlozVzBKQzJNRUJOME05UEFNMlFCNVNINzJRWUVRQU1ONkhEP21lbW9JZD0nLFxuICAgICAgICAnU1AzQlY3MDkySzlaUzlOSjlaWU1QWEU2OVNWNlk2MDcyTTdIRVo0OUU/bWVtb0lkPXRlc3RpbmcnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2FiYycsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgaW52YWxpZEFkZHJlc3Nlcykge1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKTtcbiAgICAgICAgVXRpbHMuaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBtdWx0aXNpZyBhZGRyZXNzZXMgZnJvbSBjb21wcmVzc2VkIHB1YmxpYyBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHViS2V5cyA9IFtcbiAgICAgICAgJzAyNjNlMWYyZjMyMmZiNzQyMjRlMjEwZjlkNjE2ZmNlMTRkMTBmYTg5NTIwZGNkZTNkNmQwMjUxNGNkYjE2ODQ2YScsXG4gICAgICAgICcwMmQ1ZGU5ZTFiOWMxM2ZjN2I2NzQ0NmViY2ZmNGZiYjlhYTZiMTkzM2Y5MDdlOWFhYmYzMmY0OGQ2ZTBhNTA2NGQnLFxuICAgICAgICAnMDI5NmM0YjgzNTNjNGE5MzgxNzNmODA3MDZkZjQ4MGNmNmY4NTUyM2I0MjhkNTllZTgxZDllZmZjZjYxZTVlYWU4JyxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cyk7XG5cbiAgICAgIGFkZHJlc3MuYWRkcmVzcy5zaG91bGQuZXF1YWwoJ1NNMVc5UEJWVFpBOVNSTkJRSjJBMDVSM1QwWlZZQzk0UEQwQU45S0RHJyk7XG4gICAgICBhZGRyZXNzLmhhc2gxNjAuc2hvdWxkLmVxdWFsKCc3ODliMmY3YWZhOTM5YzU1Nzc5MDk0MDJlMDdhMDdmN2U2MjQ5NjY4Jyk7XG5cbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzLCBBZGRyZXNzVmVyc2lvbi5UZXN0bmV0TXVsdGlTaWcpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnU04xVzlQQlZUWkE5U1JOQlFKMkEwNVIzVDBaVllDOTRQRDBBOUdHTVonXG4gICAgICApO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLk1haW5uZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTTFXOVBCVlRaQTlTUk5CUUoyQTA1UjNUMFpWWUM5NFBEMEFOOUtERydcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG11bHRpc2lnIGFkZHJlc3NlcyBmcm9tIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHB1YktleXMgPSBbXG4gICAgICAgICcwNDk3NDJiOTA4NTc5ZmZkMjI1ZDVlMWQ5NDg2NDcxZjE5YTEwMWRkMDRiN2E4MWQxMWRhODgyZTdhYzdmM2UwNDI5ODljMzExNTI0YTMzMzVlMTVkZWM5MzM4YTA3YmQyMWI2ZTQ0NDRiNmI3NzQ0ZDMxNGNjOTI2YTFmMDM4M2RiJyxcbiAgICAgICAgJzA0NjQwOTdjY2JjMjI5MDVlYzZmNjc4Yzg0NjM0NjI5NDAzM2UxMWEyMTZkMTMzYWJmNmFmMjUyMjk0Njk1YjM1MzhkNjVmNjViMTg4YjZlNzJlMTg5MGU3NzM4ZjllMjIxOTQ0ZTYxOGRlYTExNzhlZjc0OTcxN2IzNTQ5MmRlNmEnLFxuICAgICAgICAnMDQyYzYwODQwODM1MmFiNDE0NzdhZDlkZDFjYWJjYTllNzEyZGUyZGZmM2M1YzhiZmE0YjVmN2YxYTBmNzRhMzI0MDJhODI2ZDJjZTVmM2E2YjAxYzE2YWVlYmRkMzA0ZTIzNTc5MTk1OGJiZjk3YTA4YjVkNGU5ZGQ0ZGIzOTliNycsXG4gICAgICBdO1xuXG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cykuYWRkcmVzcy5zaG91bGQuZXF1YWwoJ1NNMlRGOEMwMDNKRTVZQThCNDNDMlpBWTBLOTVRRlZKTlY4NkZDQ1E0Jyk7XG4gICAgICBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHViS2V5cywgQWRkcmVzc1ZlcnNpb24uVGVzdG5ldE11bHRpU2lnKS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1NOMlRGOEMwMDNKRTVZQThCNDNDMlpBWTBLOTVRRlZKTlY5MFA3WUdTJ1xuICAgICAgKTtcbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzLCBBZGRyZXNzVmVyc2lvbi5NYWlubmV0TXVsdGlTaWcpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnU00yVEY4QzAwM0pFNVlBOEI0M0MyWkFZMEs5NVFGVkpOVjg2RkNDUTQnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBtdWx0aXNpZyBhZGRyZXNzZXMgZnJvbSBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgcHVibGljIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwdWJLZXlzID0gW1xuICAgICAgICAnMDRkNmYwZjdkOTdhNzI5Nzk1OTZhMTdmYTI5NDZlYWVmZjM3MDMyNTBhNjI2NDAyNzFlZWE1OTQ3N2Y1YjE5ZjM5YWQwMWNlMmE1MzAyNWViYTM2NWE0ZjQwZGQwODUyMzQxOTRkMWQwNmFlZmVjMmE5ZDQ0MzliZTBmM2MyZGYzNCcsXG4gICAgICAgICcwMmY2ZDA1OTdmYjZkNTQ2NzIwM2QwODBlMTdmN2I0Zjc2N2VhZDU5ZmMzMDNiN2Q3MjYxYTgzMmNiNDQzMDViYjAnLFxuICAgICAgICAnMDM0YzgwZjk5MTQxMDA4MjgyNGFlZTRjYTQ4MTQ3MDgyOTk3ZDQ0ZTgwMGRhOTg3N2U2OTRmOWNiNjRiM2NiNjRhJyxcbiAgICAgIF07XG5cbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzKS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU01FOFBLUkhTQ0I2OTlGRUs1OUY3VDdDQkIyMjVLSDFNQ0tNNjdFVicpO1xuICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKHB1YktleXMsIEFkZHJlc3NWZXJzaW9uLlRlc3RuZXRNdWx0aVNpZykuYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdTTkU4UEtSSFNDQjY5OUZFSzU5RjdUN0NCQjIyNUtIMU1EUEJWS0Y5J1xuICAgICAgKTtcbiAgICAgIFV0aWxzLmdldFNUWEFkZHJlc3NGcm9tUHViS2V5cyhwdWJLZXlzLCBBZGRyZXNzVmVyc2lvbi5NYWlubmV0TXVsdGlTaWcpLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnU01FOFBLUkhTQ0I2OTlGRUs1OUY3VDdDQkIyMjVLSDFNQ0tNNjdFVidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBnZW5lcmF0ZSBtdWx0aXNpZyBhZGRyZXNzZXMgZnJvbSBpbnZhbGlkIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoW10pLCAvSW52YWxpZCBudW1iZXIgb2YgcHVibGljIGtleXMvKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKFsnYmFka2V5JywgJ2JhZGtleTInXSksIC9JbnZhbGlkIHB1YmxpYyBrZXkvKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKFtcbiAgICAgICAgICAgICcwMmY2ZDA1OTdmYjZkNTQ2NzIwM2QwODBlMTdmN2I0Zjc2N2VhZDU5ZmMzMDNiN2Q3MjYxYTgzMmNiNDQzMDViYjAnLFxuICAgICAgICAgICAgJ2JhZGtleScsXG4gICAgICAgICAgXSksXG4gICAgICAgIC9JbnZhbGlkIHB1YmxpYyBrZXkvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd2YWxpZCBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBVdGlscy5pc1ZhbGlkQW1vdW50KCcxMCcpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW52YWxpZCBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBVdGlscy5pc1ZhbGlkQW1vdW50KCctMTAnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJvcGVyIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlzID0gW3Rlc3REYXRhLnNlY3JldEtleTEsIHRlc3REYXRhLnNlY3JldEtleTIsIHRlc3REYXRhLkFDQ09VTlRfMS5wcnZdO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIGludmFsaWQga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgICc2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzNDhlYTA4MDE3YjZlNjA0ZGU1MWEzYTdkOTU3ZDU4NTI0MDknLFxuICAgICAgICAnNjg4NjQ4MTE2YjcyMWJiMmYzOTRlMDAwN2Y5ZDM0OGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQnLFxuICAgICAgICAnMHg2NmM4ODY0ODExNmI3MjFiYjJmMzk0ZTAwMDdmOWQzNDhlYTA4MDE3YjZlNjA0ZGU1MWEzYTdkOTU3ZDU4NTI0JyxcbiAgICAgICAgJycsXG4gICAgICAgICdiaXRnby1zdGFja3MnLFxuICAgICAgICAnNjZjODg2NDgxMTZiNzIxYmIyZjM5NGUwMDA3ZjlkMzQgOGVhMDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQnLFxuICAgICAgICAnNjZjODg2NDgxMTZiNzIxYmIyZjM5NGUwMDA3ZjlkM3JyeHg5MDgwMTdiNmU2MDRkZTUxYTNhN2Q5NTdkNTg1MjQnLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkUHJpdmF0ZUtleShrZXkpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHByb3BlciBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5cyA9IFt0ZXN0RGF0YS5wdWJLZXkxLCB0ZXN0RGF0YS5wdWJLZXkyLCB0ZXN0RGF0YS5wdWJLZXkyQ29tcHJlc3NlZF07XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFB1YmxpY0tleShrZXkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB2YWxpZGF0ZSBpbnZhbGlkIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlzID0gW1xuICAgICAgICAnMDQyMWQ2ZjQyYzk3ZDIzZWMyYzBkYzIxMjA4YTljNWVkZmNlNGU1YmM3YjYzOTcyZTY4ZTg2ZTNjZWE2ZjQxYTk0YTlhN2MyNGExY2NkODM3OTIxNzNmNDc1ZmRiNTkwY2M4MmY5NGZmNjE1ZGYzOTE0Mjc2NmU3NTljZTYzODcnLFxuICAgICAgICAnMDMyMWQ2ZjQyYzk5ZjdkMjNlYyAyYzBkYzIxMjA4YTljNWVkZmNlNGU1YmM3YjYzOTcyZTY4ZTZlM2NlYTZmNDFhJyxcbiAgICAgICAgJzBhYTY4YzJkNmZkYjM3MDZiMzlmMzJkNmY0MjI1Mjc1Y2UwNjI1NjE5MDhmZDdjYTU0MGE0NGM5MmViODU5NGVhNmRiOWZjZmUwYjM5MGMwZWFkM2Y0NWMzNmFmZDY4MmVhYjYyZWIxMjRhNjNiNDYwOTQ1ZmUxZjdjN2Y4YTA5ZTInLFxuICAgICAgICAnJyxcbiAgICAgICAgJ2JpdGdvLXN0YWNrcycsXG4gICAgICAgICcwOTIxZDZmNDJjOTlmN2QyM2VjMmMwZGMyMTIwOGE5YzVlZGZjZTRlNWJjN2I2Mzk3MmU2OGU4NmUzY2VhNmY0MWEnLFxuICAgICAgICAnMDMyMWQ2ZjQyYzk5ZjdkMjNlYzJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlenplM2NlYTZmNDFhJyxcbiAgICAgICAgJzB4MDMyMWQ2ZjQyYzk5ZjdkMjNlYzJjMGRjMjEyMDhhOWM1ZWRmY2U0ZTViYzdiNjM5NzJlNjhlODZlM2NlYTZmNDFhJyxcbiAgICAgICAgdGVzdERhdGEuaW52YWxpZFB1YktleTEsXG4gICAgICAgIHRlc3REYXRhLmludmFsaWRQdWJLZXkyLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0cmFuc2FjdGlvbiBpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHByb3BlciBpZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eElkcyA9IFtcbiAgICAgICAgJzB4MjA5YTNlMTk2MTk1MDYzYjJlNTE5NTIzMjA4N2E3MWZlMjMyOWE2ZGM4ZDJmY2E1MzFkNDhjNWE3ODI0ZjY3OScsXG4gICAgICAgICc2YTU5MDM3OGMwNTlmNzhmYjY5OGVjMGFmMWZmNjEwNTg2Y2IxYTUyZWU3OWZkYWU2OWU1NjQzMGZkZTA4Y2Y0JyxcbiAgICAgICAgJzBlMDE0OWJjMmM4MTlmM2FlNDBjZWY5NWNhNTg5NTVjODBiYmM5ZTE1ZjhjN2M2NTFjN2I4NmMyMjE0YjdmMDInLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB0eElkIG9mIHR4SWRzKSB7XG4gICAgICAgIFV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB2YWxpZGF0ZSBpbnZhbGlkIGlkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SWRzID0gW1xuICAgICAgICAnJyxcbiAgICAgICAgJ2JpdGdvLXN0YWNrcycsXG4gICAgICAgICcweDIwOWEzZTE5NjE5NTA2M2IyZTUxOTUyMzIwODdhNzFmZTIzMjlhNmRjOGQyZmNhNTMxZDQ4YzVhNzgyNGY2NycsXG4gICAgICAgICc2YTU5MDM3OGMwNTlmNzhmYjY5OGVjMGFmMWZmNjEwNTg2Y2I1MmVlNzlmZGFlNjllNTY0MzBmZGUwOGNmNCcsXG4gICAgICAgICcxeDIwOWEzZTE5NjE5NTA2M2IyZTUxOTUyMzIwODdhNzFmZTIzMjlhNmRjOGQyZmNhNTMxZDQ4YzVhNzgyNGY2NzknLFxuICAgICAgICAnNmE1OTAzNzhjMDU5Zjc4ZmI2OThlYzBhZjFmZjYxMDU4NmNiMWF6ejJlZTc5ZmRhZTY5ZTU2NDMwZmRlMDhjZjQnLFxuICAgICAgICAnMGUwMTQ5YmMyYzgxOWYzYWU0MGNlZjk1Y2E1ODk1NWM4MGJiYzllMSAgIDVmOGM3YzY1MWM3Yjg2YzIyMTRiN2YwMicsXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHR4SWQgb2YgdHhJZHMpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZCkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0cmFuc2FjdGlvbiBtZW1vJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjaGVjayBmb3IgdmFsaWQgbWVtbyBzdHJpbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVtb1N0cmluZ3MgPSBbJycsICdUaGlzIGlzIGEgdGVzdC4nLCAnT2theScsICchIVRoaXMgaXMgdGhpcnR5IGZvdXIgYnl0ZXMgbG9uZyEhJ107XG4gICAgICBmb3IgKGNvbnN0IG1lbW8gb2YgbWVtb1N0cmluZ3MpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZE1lbW8obWVtbykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpdCgnY2hlY2sgZm9yIHZhbGlkIG1lbW8gc3RyaW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lbW9TdHJpbmdzID0gWyfqnJ/qnJ9UaGlzIGlzIHRoaXJ0eSBmb3VyIGNoYXJzIGxvbmchIScsICdJdCB3YXMgdGhlIGJlc3Qgb2YgdGltZXMsIGl0IHdhcyB0aGUgd29yc3Qgb2YgdGltZXMnXTtcbiAgICAgIGZvciAoY29uc3QgbWVtbyBvZiBtZW1vU3RyaW5ncykge1xuICAgICAgICBVdGlscy5pc1ZhbGlkTWVtbyhtZW1vKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ24gYW5kIHZlcmlmeScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBrZXlQYWlyMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5zZWNyZXRLZXkxIH0pO1xuICAgIGNvbnN0IGtleVBhaXIyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnNlY3JldEtleTIgfSk7XG5cbiAgICBpdCgnc2lnbiBhIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuc2lnbk1lc3NhZ2Uoa2V5UGFpcjEsIHRlc3REYXRhLm1lc3NhZ2UxKSwgdGVzdERhdGEuZXhwZWN0ZWRTaWduYXR1cmUxKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5zaWduTWVzc2FnZShrZXlQYWlyMiwgdGVzdERhdGEubWVzc2FnZTIpLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmeSBhIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLnZlcmlmeVNpZ25hdHVyZSh0ZXN0RGF0YS5tZXNzYWdlMSwgdGVzdERhdGEuZXhwZWN0ZWRTaWduYXR1cmUxLCBrZXlQYWlyMS5nZXRLZXlzKCkucHViKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAvLyBoYW5kbGUgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlzIHByb3Blcmx5XG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgIHRlc3REYXRhLm1lc3NhZ2UyLFxuICAgICAgICB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTIsXG4gICAgICAgIGtleVBhaXIyLmdldEtleXMoZmFsc2UpLnB1YlxuICAgICAgKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUoXG4gICAgICAgIHRlc3REYXRhLm1lc3NhZ2UyLFxuICAgICAgICB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTIsXG4gICAgICAgIGtleVBhaXIyLmdldEtleXModHJ1ZSkucHViXG4gICAgICApLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB2ZXJpZnkgc2lnbmF0dXJlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVtcHR5IG1lc3NhZ2VcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLnZlcmlmeVNpZ25hdHVyZSgnJywgdGVzdERhdGEuZXhwZWN0ZWRTaWduYXR1cmUxLCBrZXlQYWlyMS5nZXRLZXlzKCkucHViKSxcbiAgICAgICAgbmV3IFJlZ0V4cCgnQ2Fubm90IHZlcmlmeSBlbXB0eSBtZXNzYWdlcycpXG4gICAgICApO1xuXG4gICAgICAvLyB3cm9uZyBwdWJsaWMga2V5XG4gICAgICBVdGlscy52ZXJpZnlTaWduYXR1cmUodGVzdERhdGEubWVzc2FnZTEsIHRlc3REYXRhLmV4cGVjdGVkU2lnbmF0dXJlMSwga2V5UGFpcjIuZ2V0S2V5cygpLnB1Yikuc2hvdWxkLmJlLmZhbHNlKCk7XG5cbiAgICAgIC8vIHdyb25nIHNpZ25hdHVyZVxuICAgICAgVXRpbHMudmVyaWZ5U2lnbmF0dXJlKHRlc3REYXRhLm1lc3NhZ2UyLCB0ZXN0RGF0YS5leHBlY3RlZFNpZ25hdHVyZTEsIGtleVBhaXIyLmdldEtleXMoKS5wdWIpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RyaW5naWZ5Q3YnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ0ludCB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQ6IEludENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5JbnQsIHZhbHVlOiBCaWdJbnQoJzEwMDAwMCcpIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IENsYXJpdHlUeXBlLkludCwgdmFsdWU6ICcxMDAwMDAnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1VJbnQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBVSW50Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiBCaWdJbnQoJzEwMDAwMCcpIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiAnMTAwMDAwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbE5vbmUgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBOb25lQ1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ09wdGlvbmFsU29tZSB0eXBlIHdpdGggdWludCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBTb21lQ1YgPSB7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSxcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfSxcbiAgICAgIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSxcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6ICcxMDAwMDAnIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdPcHRpb25hbFNvbWUgdHlwZSB3aXRoIHR1cGxlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQ6IFNvbWVDViA9IHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlR1cGxlLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBoYXNoYnl0ZXM6IHsgdHlwZTogQ2xhcml0eVR5cGUuQnVmZmVyLCB2YWx1ZTogQnVmZmVyLmZyb20oJ3NvbWUtaGFzaCcpLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgICAgICAgdmVyc2lvbjogeyB0eXBlOiBDbGFyaXR5VHlwZS5CdWZmZXIsIHZhbHVlOiBuZXcgQmlnTnVtKDEpLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB0eXBlOiBDbGFyaXR5VHlwZS5UdXBsZSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBoYXNoYnl0ZXM6IHsgdHlwZTogQ2xhcml0eVR5cGUuQnVmZmVyLCB2YWx1ZTogJzczNmY2ZDY1MmQ2ODYxNzM2OCcgfSxcbiAgICAgICAgICAgIHZlcnNpb246IHsgdHlwZTogQ2xhcml0eVR5cGUuQnVmZmVyLCB2YWx1ZTogJzAxJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdMaXN0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogTGlzdENWID0geyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCB2YWx1ZTogW3sgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfV0gfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuTGlzdCxcbiAgICAgICAgbGlzdDogW3sgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6ICcxMDAwMDAnIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnTGlzdCB0eXBlIHdpdGggZW1wdHkgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBMaXN0Q1YgPSB7IHR5cGU6IENsYXJpdHlUeXBlLkxpc3QsIHZhbHVlOiBbXSB9O1xuICAgICAgVXRpbHMuc3RyaW5naWZ5Q3YoaW5wdXQpLnNob3VsZC5kZWVwRXF1YWwoeyB0eXBlOiBDbGFyaXR5VHlwZS5MaXN0LCBsaXN0OiBbXSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdSZXNwb25zZU9rIHR5cGUgd2l0aCB1aW50IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5wdXQ6IFJlc3BvbnNlT2tDViA9IHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuUmVzcG9uc2VPayxcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAwJykgfSxcbiAgICAgIH07XG4gICAgICBVdGlscy5zdHJpbmdpZnlDdihpbnB1dCkuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIHR5cGU6IENsYXJpdHlUeXBlLlJlc3BvbnNlT2ssXG4gICAgICAgIHZhbHVlOiB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiAnMTAwMDAwJyB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnUmVzcG9uc2VFcnIgdHlwZSB3aXRoIHVpbnQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnB1dDogUmVzcG9uc2VFcnJvckNWID0ge1xuICAgICAgICB0eXBlOiBDbGFyaXR5VHlwZS5SZXNwb25zZUVycixcbiAgICAgICAgdmFsdWU6IHsgdHlwZTogQ2xhcml0eVR5cGUuVUludCwgdmFsdWU6IEJpZ0ludCgnMTAwMDAnKSB9LFxuICAgICAgfTtcbiAgICAgIFV0aWxzLnN0cmluZ2lmeUN2KGlucHV0KS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgdHlwZTogQ2xhcml0eVR5cGUuUmVzcG9uc2VFcnIsXG4gICAgICAgIHZhbHVlOiB7IHR5cGU6IENsYXJpdHlUeXBlLlVJbnQsIHZhbHVlOiAnMTAwMDAnIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFkZHJlc3NWZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byBmb3IgdmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTWFpbm5ldCBzaW5nbGUgc2lnXG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU1AxRE4yTkdSQjJSM1c3NVNUMEdBQTdEQlYxVkVCQldZWjFEMzNERVEnKS5zaG91bGQuZXF1YWwoMjIpO1xuICAgICAgLy8gTWFpbm5ldCBtdWx0aSBzaWdcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTTTQ2OFZFVEtBNURCMTVIV0cyUU03WTA0RUZRS1Y0NFI5RDZEMFFDJykuc2hvdWxkLmVxdWFsKDIwKTtcbiAgICAgIC8vIFRlc3RuZXQgc2luZ2xlIHNpZ1xuICAgICAgVXRpbHMuZ2V0QWRkcmVzc1ZlcnNpb24oJ1NUMVNSQ0E5M0NFMVdEOFRFRzI4QlNXQkZSNjhKMjRaVEFCMkZBSjAnKS5zaG91bGQuZXF1YWwoMjYpO1xuICAgICAgLy8gVGVzdG5ldCBtdWx0aSBzaWdcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCcpLnNob3VsZC5lcXVhbCgyMSk7XG4gICAgICAvLyBXaXRoIE1lbW8gSWRcbiAgICAgIFV0aWxzLmdldEFkZHJlc3NWZXJzaW9uKCdTUDFETjJOR1JCMlIzVzc1U1QwR0FBN0RCVjFWRUJCV1laMUQzM0RFUT9tZW1vSWQ9MCcpLnNob3VsZC5lcXVhbCgyMik7XG4gICAgICBVdGlscy5nZXRBZGRyZXNzVmVyc2lvbignU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFg/bWVtb0lkPTI1NScpLnNob3VsZC5lcXVhbCgyMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFbmNvZGVkUHJpbmNpcGFsJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZW5jb2RlIGEgdGVzdG5ldCBzdGFuZGFyZCBwcmluY2lwYWwgYXMgdGhlIDIyLWJ5dGUgQ2xhcml0eSBibG9iJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMuZ2V0RW5jb2RlZFByaW5jaXBhbCgnU1QzOTBEMFdCRjYwVDI1UDM2S01DUDZXTjFCWFE3VFRNTVFLTlYxNUMnKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICcwNTFhZDIwNjgzOGI3OTgxYTExNmMzMzRlOGNiMWI5NTBhZmI3M2ViNTRhNSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBjb250cmFjdCBwcmluY2lwYWxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gVXRpbHMuZ2V0RW5jb2RlZFByaW5jaXBhbCgnU1QzOTBEMFdCRjYwVDI1UDM2S01DUDZXTjFCWFE3VFRNTVFLTlYxNUMubXktY29udHJhY3QnKSxcbiAgICAgICAgL2NvbnRyYWN0IHByaW5jaXBhbHMgYXJlIG5vdCBzdXBwb3J0ZWQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYWRkcmVzc2VzIHdpdGggYSBtZW1vSWQgc3VmZml4JywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gVXRpbHMuZ2V0RW5jb2RlZFByaW5jaXBhbCgnU1QzOTBEMFdCRjYwVDI1UDM2S01DUDZXTjFCWFE3VFRNTVFLTlYxNUM/bWVtb0lkPTAnKSxcbiAgICAgICAgL211c3Qgbm90IGluY2x1ZGUgYSBxdWVyeSBzdHJpbmcvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IFV0aWxzLmdldEVuY29kZWRQcmluY2lwYWwoJ25vdC1hLXN0YWNrcy1hZGRyZXNzJyksIC9pbnZhbGlkIFN0YWNrcyBhZGRyZXNzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd4cHViVG9TVFhQdWJrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIGNvbnZlcnQgZm9yIHZhbGlkIHhwdWJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMueHB1YlRvU1RYUHVia2V5KFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0dTMkhNZHZBTk43bzhFU1dxd3ZyNVU0cnk1ZlpkRDlWSGh5bVd5Zm9EUUY0dnpmS290WGdHdEpUcndyRlJ6N1hiR0ZvdjRGcWRLS282bVJZTld2TXA3UDIzRGp1Sm5TJ1xuICAgICAgKS5zaG91bGQuZXF1YWwoJzAzZjBmMzU4MWE0MjU2Nzk3ZmE4NDc4Y2I2YjFkYTY1ODhmNGM0YmVkYzgwYWIyNjAxZTNhMTU3MmNmNTdiNjE1NicpO1xuICAgICAgVXRpbHMueHB1YlRvU1RYUHVia2V5KFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0ZFenI1Q2NwRnpQRzQ1cm1QZjc1RFR2RG9iTjVnSmltQ2F0Ykh0elI1M1NiSHpEWjFKNTZieUtTc2RjOHZTdWpHdVFweVBqYjdMc3VhMk5mQURKZXdQeE56TDNONlRqJ1xuICAgICAgKS5zaG91bGQuZXF1YWwoJzAyNjJiN2U4NmMxZTM2ZTQ1ZDQ1MTI2M2I1NGExYzNkNzQwYWJlYWI2MWQyMjFkMTE3NWZjM2ZkYWQ3NTI4NTNhYicpO1xuICAgICAgVXRpbHMueHB1YlRvU1RYUHVia2V5KFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0dQMWFkazM0VnpSUUpFTVgyNXJDeGpFeVU5WUZGV05oV056d1BvcWdqTG9LZm5xb3RMd3J6N2tCZXZXYlJabnFUU1FyUUR1SnVZVVFhRFE1RERQRXpFWE13UFM5UEVmJ1xuICAgICAgKS5zaG91bGQuZXF1YWwoJzAzNjUyOWEwZTQxY2ZkMWE5ZDI2NWI3NGY4ZDAwMDJjOTJjNWFlYzEwZDQyMzkwMDAyNjBhMjVjZmQ1NGU0NzI2YycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QmFzZUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGJhc2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWD9tZW1vSWQ9MjU1JztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJztcbiAgICAgIFV0aWxzLmdldEJhc2VBZGRyZXNzKGFkZHJlc3NXaXRoTWVtbykuc2hvdWxkLmVxdWFsKGJhc2VBZGRyZXNzKTtcbiAgICAgIFV0aWxzLmdldEJhc2VBZGRyZXNzKGJhc2VBZGRyZXNzKS5zaG91bGQuZXF1YWwoYmFzZUFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNTYW1lQmFzZUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBpZiBiYXNlIGFkZHJlc3MgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYP21lbW9JZD0yNTUnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3MgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFORFgnO1xuICAgICAgVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzcywgYmFzZUFkZHJlc3MpLnNob3VsZC50cnVlKCk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gJ1NOMjM3S0JOQ0EyQ1paMzJDV01OVEY3NERGQVlDUE5KM01OTjZBTkRYJztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzMiA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBVdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzMiwgYmFzZUFkZHJlc3MyKS5zaG91bGQudHJ1ZSgpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzMyA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWD9tZW1vSWQ9MjU1JztcbiAgICAgIGNvbnN0IGJhc2VBZGRyZXNzMyA9ICdTVDFTUkNBOTNDRTFXRDhURUcyOEJTV0JGUjY4SjI0WlRBQjJGQUowJztcbiAgICAgIFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3MzLCBiYXNlQWRkcmVzczMpLnNob3VsZC5mYWxzZSgpO1xuXG4gICAgICBjb25zdCBhZGRyZXNzNCA9ICdTTjIzN0tCTkNBMkNaWjMyQ1dNTlRGNzRERkFZQ1BOSjNNTk42QU5EWCc7XG4gICAgICBjb25zdCBiYXNlQWRkcmVzczQgPSAnU1QxU1JDQTkzQ0UxV0Q4VEVHMjhCU1dCRlI2OEoyNFpUQUIyRkFKMCc7XG4gICAgICBVdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzNCwgYmFzZUFkZHJlc3M0KS5zaG91bGQuZmFsc2UoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczUgPSAnU04yMzdLQk5DQTJDWlozMkNXTU5URjc0REZBWUNQTkozTU5ONkFOREYnO1xuICAgICAgY29uc3QgYmFzZUFkZHJlc3M1ID0gJ1NUMVNSQ0E5M0NFMVdEOFRFRzI4QlNXQkZSNjhKMjRaVEFCMkZBSjAnO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczUsIGJhc2VBZGRyZXNzNSkuc2hvdWxkLmZhbHNlKCksXG4gICAgICAgIG5ldyBSZWdFeHAoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzNX1gKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VkZ2UgY2FzZXMgYW5kIGVycm9yIGJyYW5jaGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZhbGlkQWRkcmVzcyA9ICdTVEI0NEhZUFlBVDJCQjJRRTUxM05TUDgxSFRNWVdCSlAwMkhQR0s2JztcbiAgICBjb25zdCBjb21wcmVzc2VkUHViS2V5ID0gJzAyZjZkMDU5N2ZiNmQ1NDY3MjAzZDA4MGUxN2Y3YjRmNzY3ZWFkNTlmYzMwM2I3ZDcyNjFhODMyY2I0NDMwNWJiMCc7XG5cbiAgICBpdCgnc2hvdWxkIHByZWZpeCBhIGJ1ZmZlciB3aXRoIDB4JywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMuYnVmZmVyVG9IZXhQcmVmaXhTdHJpbmcoQnVmZmVyLmZyb20oJ2RlYWRiZWVmJywgJ2hleCcpKS5zaG91bGQuZXF1YWwoJzB4ZGVhZGJlZWYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgY29udHJhY3QgcHJpbmNpcGFsIHdob3NlIGFkZHJlc3MgaXMgaW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gVXRpbHMuY29udHJhY3RQcmluY2lwYWxDVkZyb21TdHJpbmcoJ25vdGFuYWRkcmVzcy5jb250cmFjdCcpLCAvbXVzdCBjb250YWluIGEgdmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYSByYXcgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3QgYSBoZXggc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKDEyMykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICBVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24oJ2RlYWRiZWVmJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5vbi1zdHJpbmcgbWVtbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFV0aWxzLmlzVmFsaWRNZW1vKDEyMyBhcyB1bmtub3duIGFzIHN0cmluZykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBtb3JlIHNpZ25hdHVyZXMgdGhhbiBwdWJsaWMga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgVXRpbHMuZ2V0U1RYQWRkcmVzc0Zyb21QdWJLZXlzKFtjb21wcmVzc2VkUHViS2V5XSwgQWRkcmVzc1ZlcnNpb24uTWFpbm5ldE11bHRpU2lnLCBBZGRyZXNzSGFzaE1vZGUuUDJTSCwgMiksXG4gICAgICAgIC9OdW1iZXIgb2Ygc2lnbmF0dXJlcyByZXF1aXJlZCBtdXN0IGJlIGxvd2VyIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgUHVibGljIEtleXMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgc2lnbmluZyBhIG1lc3NhZ2Ugd2l0aCBhIHB1YmxpYy1vbmx5IGtleSBwYWlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS54cHViMSB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gVXRpbHMuc2lnbk1lc3NhZ2Uoa2V5UGFpciwgJ21lc3NhZ2UnKSwgL01pc3NpbmcgcHJpdmF0ZSBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5vcm1hbGl6aW5nIGFuIGludmFsaWQgYWRkcmVzcyBvciBtZW1vIGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5ub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzczogJ2ludmFsaWQnIH0pLCAvaW52YWxpZCBhZGRyZXNzOiBpbnZhbGlkLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzOiB2YWxpZEFkZHJlc3MsIG1lbW9JZDogJy0xJyB9KSwgL2ludmFsaWQgbWVtbyBpZDogLTEvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGFkZHJlc3Mgd2hvc2UgcXVlcnkgc3RyaW5nIGhhcyBubyBtZW1vIGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5nZXRBZGRyZXNzRGV0YWlscyhgJHt2YWxpZEFkZHJlc3N9P25vdE1lbW9JZD0xYCksIC9pbnZhbGlkIGFkZHJlc3Mgd2l0aCBtZW1vIGlkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBtYWxmb3JtZWQgc2VuZC1tYW55LW1lbW8gZnVuY3Rpb24gYXJncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gVXRpbHMuZnVuY3Rpb25BcmdzVG9TZW5kUGFyYW1zKFtdKSwgL2Rvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb24vKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IFV0aWxzLmZ1bmN0aW9uQXJnc1RvU2VuZFBhcmFtcyhbbGlzdENWKFt1aW50Q1YoMSldKV0pLFxuICAgICAgICAvZG9uJ3QgbWF0Y2ggc2VuZC1tYW55LW1lbW8gdHlwZSBkZWNsYXJhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBtYWxmb3JtZWQgdG9rZW4gdHJhbnNmZXIgZnVuY3Rpb24gYXJncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gVXRpbHMuZnVuY3Rpb25BcmdzVG9Ub2tlblRyYW5zZmVyUGFyYW1zKFtdKSwgL2Rvbid0IG1hdGNoIHRva2VuIHRyYW5zZmVyIGRlY2xhcmF0aW9uLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIFV0aWxzLmZ1bmN0aW9uQXJnc1RvVG9rZW5UcmFuc2ZlclBhcmFtcyhbXG4gICAgICAgICAgICB1aW50Q1YoMSksXG4gICAgICAgICAgICBidWZmZXJDVkZyb21TdHJpbmcoJ3NlbmRlcicpLFxuICAgICAgICAgICAgYnVmZmVyQ1ZGcm9tU3RyaW5nKCdyZWNpcGllbnQnKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgL2Rvbid0IG1hdGNoIHRva2VuIHRyYW5zZmVyIGRlY2xhcmF0aW9uL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYW4gb3B0aW9uYWwgbWVtbyBpbiB0b2tlbiB0cmFuc2ZlciBmdW5jdGlvbiBhcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gVXRpbHMuZnVuY3Rpb25BcmdzVG9Ub2tlblRyYW5zZmVyUGFyYW1zKFtcbiAgICAgICAgdWludENWKDEwMDApLFxuICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHZhbGlkQWRkcmVzcyksXG4gICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodmFsaWRBZGRyZXNzKSxcbiAgICAgICAgYnVmZmVyQ1YoQnVmZmVyLmZyb20oJ21lbW8nLCAnYXNjaWknKSksXG4gICAgICBdKTtcbiAgICAgIHBhcmFtcy5tZW1vPy5zaG91bGQuZXF1YWwoJ21lbW8nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBhIHN1cHBvcnRlZCBzaXAxMCB0b2tlbiBuYW1lIGFuZCByZXR1cm4gdW5kZWZpbmVkIGZvciBhbiB1bnN1cHBvcnRlZCBjb250cmFjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgVXRpbHMuZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdCgnU1RBRzE4RTQ1VzYxM0ZaM0g0Wk1GNlFISDQyNkVYTTVRVFNBVldZSCcsICd0c2lwNmRwLXRva2VuJyksXG4gICAgICAgICd0c2lwNmRwLXRva2VuJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgVXRpbHMuZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdCgnU00zVkRYSzNXWlpTQTg0WFhGS0FGQUYxNU5OWlgzMkNUU0c4MkpGUTQnLCAnc2J0Yy10b2tlbicpLFxuICAgICAgICAnc2J0Yy10b2tlbidcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIFV0aWxzLmZpbmRDb250cmFjdFRva2VuTmFtZVVzaW5nQ29udHJhY3QoJ1NUMUY3UUEyTURGMTdTODA3RVBBMzZUU1M4QU1FRlk0S0E5VFZHV1hUJywgJ3NidGMtdG9rZW4nKSxcbiAgICAgICAgJ3NidGMtdG9rZW4nXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmZpbmRDb250cmFjdFRva2VuTmFtZVVzaW5nQ29udHJhY3QoJ1NUMDAwMDAwMDAwMDAwMDAwMDAwMDAyQU1XNDJIJywgJ25vdC1hLXRva2VuJyksIHVuZGVmaW5lZCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuZmluZFRva2VuTmFtZUJ5Q29udHJhY3QoJ1NUMDAwMDAwMDAwMDAwMDAwMDAwMDAyQU1XNDJIJywgJ25vdC1hLXRva2VuJyksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|