@bitgo/sdk-coin-tempo 1.6.0 → 1.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/lib/transaction.d.ts +18 -1
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +17 -2
- package/dist/src/lib/transactionBuilder.d.ts +17 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +134 -8
- package/dist/src/lib/utils.d.ts +10 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +18 -1
- package/dist/src/tempo.d.ts +18 -2
- package/dist/src/tempo.d.ts.map +1 -1
- package/dist/src/tempo.js +84 -6
- package/dist/test/resources/tempo.d.ts +1 -1
- package/dist/test/resources/tempo.js +2 -2
- package/dist/test/unit/index.js +54 -1
- package/dist/test/unit/transactionBuilder.js +266 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -11,6 +11,9 @@ const transaction_1 = require("../../src/lib/transaction");
|
|
|
11
11
|
const utils_1 = require("../../src/lib/utils");
|
|
12
12
|
const constants_1 = require("../../src/lib/constants");
|
|
13
13
|
const statics_1 = require("@bitgo/statics");
|
|
14
|
+
const ttempo_1 = require("../../src/ttempo");
|
|
15
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
16
|
+
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
14
17
|
const tempo_1 = require("../resources/tempo");
|
|
15
18
|
const mockCoinConfig = statics_1.coins.get('ttempo');
|
|
16
19
|
(0, mocha_1.describe)('TIP-20 Utilities', () => {
|
|
@@ -80,9 +83,9 @@ const mockCoinConfig = statics_1.coins.get('ttempo');
|
|
|
80
83
|
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
81
84
|
assert_1.default.throws(() => builder.addOperation({ token: mockToken, to: mockRecipient, amount: 'invalid-amount' }), /Invalid amount/);
|
|
82
85
|
});
|
|
83
|
-
(0, mocha_1.it)('should throw error for
|
|
86
|
+
(0, mocha_1.it)('should throw error for invalid (non-numeric) memo', () => {
|
|
84
87
|
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
85
|
-
assert_1.default.throws(() => builder.addOperation({ token: mockToken, to: mockRecipient, amount: '100', memo: '
|
|
88
|
+
assert_1.default.throws(() => builder.addOperation({ token: mockToken, to: mockRecipient, amount: '100', memo: 'INV-001' }), /Invalid memo/);
|
|
86
89
|
});
|
|
87
90
|
});
|
|
88
91
|
(0, mocha_1.describe)('feeToken', () => {
|
|
@@ -294,5 +297,265 @@ const mockCoinConfig = statics_1.coins.get('ttempo');
|
|
|
294
297
|
assert_1.default.strictEqual(json.feeToken, mockFeeToken);
|
|
295
298
|
});
|
|
296
299
|
});
|
|
300
|
+
(0, mocha_1.describe)('Transaction id getter', () => {
|
|
301
|
+
(0, mocha_1.it)('unsigned and signed transactions should have different ids', async () => {
|
|
302
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
303
|
+
builder
|
|
304
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '10' })
|
|
305
|
+
.nonce(1)
|
|
306
|
+
.gas(100000n)
|
|
307
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
308
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
309
|
+
const tx = (await builder.build());
|
|
310
|
+
const unsignedId = tx.id;
|
|
311
|
+
tx.setSignature(tempo_1.SIGNATURE_TEST_DATA.validSignature);
|
|
312
|
+
const signedId = tx.id;
|
|
313
|
+
assert_1.default.notStrictEqual(unsignedId, signedId, 'Signed and unsigned tx should have different ids');
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
(0, mocha_1.describe)('outputs / inputs population', () => {
|
|
317
|
+
(0, mocha_1.it)('should expose outputs with base-unit value and token address as coin', async () => {
|
|
318
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
319
|
+
builder
|
|
320
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '1.5', memo: '7' })
|
|
321
|
+
.nonce(0)
|
|
322
|
+
.gas(100000n)
|
|
323
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
324
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
325
|
+
const tx = (await builder.build());
|
|
326
|
+
assert_1.default.strictEqual(tx.outputs.length, 1);
|
|
327
|
+
assert_1.default.strictEqual(tx.outputs[0].address, mockRecipient);
|
|
328
|
+
// 1.5 tokens * 10^6 = 1_500_000 base units
|
|
329
|
+
assert_1.default.strictEqual(tx.outputs[0].value, '1500000');
|
|
330
|
+
// coin is the token contract address, not the chain name
|
|
331
|
+
assert_1.default.strictEqual(tx.outputs[0].coin?.toLowerCase(), mockToken.toLowerCase());
|
|
332
|
+
});
|
|
333
|
+
(0, mocha_1.it)('should expose a single input with the total in base units', async () => {
|
|
334
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
335
|
+
builder
|
|
336
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '1.5' })
|
|
337
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '3.5' })
|
|
338
|
+
.nonce(0)
|
|
339
|
+
.gas(100000n)
|
|
340
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
341
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
342
|
+
const tx = (await builder.build());
|
|
343
|
+
assert_1.default.strictEqual(tx.inputs.length, 1);
|
|
344
|
+
assert_1.default.strictEqual(tx.inputs[0].address, '');
|
|
345
|
+
// (1.5 + 3.5) tokens * 10^6 = 5_000_000 base units
|
|
346
|
+
assert_1.default.strictEqual(tx.inputs[0].value, '5000000');
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
(0, mocha_1.describe)('Round-Trip: Build -> Serialize -> From (deserialization)', () => {
|
|
350
|
+
(0, mocha_1.it)('should round-trip a single-operation transaction without a signature', async () => {
|
|
351
|
+
const operation = { token: mockToken, to: mockRecipient, amount: '25.5', memo: '12345' };
|
|
352
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
353
|
+
builder
|
|
354
|
+
.addOperation(operation)
|
|
355
|
+
.feeToken(mockFeeToken)
|
|
356
|
+
.nonce(7)
|
|
357
|
+
.gas(150000n)
|
|
358
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
359
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
360
|
+
const originalTx = (await builder.build());
|
|
361
|
+
const serialized = await originalTx.serialize();
|
|
362
|
+
// Deserialize via from()
|
|
363
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
364
|
+
builder2.from(serialized);
|
|
365
|
+
const restoredTx = (await builder2.build());
|
|
366
|
+
const ops = restoredTx.getOperations();
|
|
367
|
+
assert_1.default.strictEqual(ops.length, 1);
|
|
368
|
+
assert_1.default.strictEqual(ops[0].token.toLowerCase(), operation.token.toLowerCase());
|
|
369
|
+
assert_1.default.strictEqual(ops[0].to.toLowerCase(), operation.to.toLowerCase());
|
|
370
|
+
assert_1.default.strictEqual(ops[0].amount, operation.amount);
|
|
371
|
+
assert_1.default.strictEqual(ops[0].memo, operation.memo);
|
|
372
|
+
assert_1.default.strictEqual(restoredTx.getFeeToken()?.toLowerCase(), mockFeeToken.toLowerCase());
|
|
373
|
+
});
|
|
374
|
+
(0, mocha_1.it)('should round-trip a batch transaction', async () => {
|
|
375
|
+
// Use amounts that match tip20UnitsToAmount output: ethers formatUnits always includes decimal
|
|
376
|
+
const operations = [
|
|
377
|
+
{ token: tempo_1.TESTNET_TOKENS.alphaUSD.address, to: mockRecipient, amount: '10.0', memo: '1' },
|
|
378
|
+
{ token: tempo_1.TESTNET_TOKENS.betaUSD.address, to: mockRecipient, amount: '20.0', memo: '2' },
|
|
379
|
+
];
|
|
380
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
381
|
+
builder
|
|
382
|
+
.addOperation(operations[0])
|
|
383
|
+
.addOperation(operations[1])
|
|
384
|
+
.nonce(42)
|
|
385
|
+
.gas(250000n)
|
|
386
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
387
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
388
|
+
const originalTx = (await builder.build());
|
|
389
|
+
const serialized = await originalTx.serialize();
|
|
390
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
391
|
+
builder2.from(serialized);
|
|
392
|
+
const restoredTx = (await builder2.build());
|
|
393
|
+
assert_1.default.strictEqual(restoredTx.getOperationCount(), 2);
|
|
394
|
+
assert_1.default.ok(restoredTx.isBatch());
|
|
395
|
+
const json = restoredTx.toJson();
|
|
396
|
+
assert_1.default.strictEqual(json.nonce, 42);
|
|
397
|
+
assert_1.default.strictEqual(json.gas, '250000');
|
|
398
|
+
assert_1.default.strictEqual(json.maxFeePerGas, tempo_1.TX_PARAMS.defaultMaxFeePerGas.toString());
|
|
399
|
+
assert_1.default.strictEqual(json.maxPriorityFeePerGas, tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas.toString());
|
|
400
|
+
const ops = restoredTx.getOperations();
|
|
401
|
+
for (let i = 0; i < operations.length; i++) {
|
|
402
|
+
assert_1.default.strictEqual(ops[i].token.toLowerCase(), operations[i].token.toLowerCase());
|
|
403
|
+
assert_1.default.strictEqual(ops[i].to.toLowerCase(), mockRecipient.toLowerCase());
|
|
404
|
+
assert_1.default.strictEqual(ops[i].amount, operations[i].amount);
|
|
405
|
+
assert_1.default.strictEqual(ops[i].memo, operations[i].memo);
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
(0, mocha_1.it)('should round-trip a signed transaction and preserve the signature', async () => {
|
|
409
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
410
|
+
builder
|
|
411
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '5' })
|
|
412
|
+
.nonce(99)
|
|
413
|
+
.gas(100000n)
|
|
414
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
415
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
416
|
+
const tx = (await builder.build());
|
|
417
|
+
tx.setSignature(tempo_1.SIGNATURE_TEST_DATA.validSignature);
|
|
418
|
+
const signedHex = await tx.toBroadcastFormat();
|
|
419
|
+
// Deserialize the signed transaction
|
|
420
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
421
|
+
builder2.from(signedHex);
|
|
422
|
+
const restoredTx = (await builder2.build());
|
|
423
|
+
const sig = restoredTx.getSignature();
|
|
424
|
+
assert_1.default.ok(sig !== undefined, 'Signature should be preserved');
|
|
425
|
+
assert_1.default.strictEqual(sig.yParity, tempo_1.SIGNATURE_TEST_DATA.validSignature.yParity);
|
|
426
|
+
});
|
|
427
|
+
(0, mocha_1.it)('should produce the same tx id after a serialization round-trip', async () => {
|
|
428
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
429
|
+
builder
|
|
430
|
+
.addOperation({ token: mockToken, to: mockRecipient, amount: '100.0', memo: '99' })
|
|
431
|
+
.nonce(3)
|
|
432
|
+
.gas(100000n)
|
|
433
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
434
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
435
|
+
const originalTx = (await builder.build());
|
|
436
|
+
const serialized = await originalTx.serialize();
|
|
437
|
+
const originalId = originalTx.id;
|
|
438
|
+
const builder2 = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
439
|
+
builder2.from(serialized);
|
|
440
|
+
const restoredTx = (await builder2.build());
|
|
441
|
+
assert_1.default.strictEqual(restoredTx.id, originalId);
|
|
442
|
+
const originalJson = originalTx.toJson();
|
|
443
|
+
const restoredJson = restoredTx.toJson();
|
|
444
|
+
assert_1.default.strictEqual(restoredJson.nonce, originalJson.nonce);
|
|
445
|
+
assert_1.default.strictEqual(restoredJson.gas, originalJson.gas);
|
|
446
|
+
assert_1.default.strictEqual(restoredJson.maxFeePerGas, originalJson.maxFeePerGas);
|
|
447
|
+
assert_1.default.strictEqual(restoredJson.maxPriorityFeePerGas, originalJson.maxPriorityFeePerGas);
|
|
448
|
+
assert_1.default.strictEqual(restoredJson.feeToken, originalJson.feeToken);
|
|
449
|
+
assert_1.default.strictEqual(restoredJson.callCount, originalJson.callCount);
|
|
450
|
+
const originalOps = originalTx.getOperations();
|
|
451
|
+
const restoredOps = restoredTx.getOperations();
|
|
452
|
+
assert_1.default.strictEqual(restoredOps.length, originalOps.length);
|
|
453
|
+
assert_1.default.strictEqual(restoredOps[0].token.toLowerCase(), originalOps[0].token.toLowerCase());
|
|
454
|
+
assert_1.default.strictEqual(restoredOps[0].to.toLowerCase(), originalOps[0].to.toLowerCase());
|
|
455
|
+
assert_1.default.strictEqual(restoredOps[0].amount, originalOps[0].amount);
|
|
456
|
+
assert_1.default.strictEqual(restoredOps[0].memo, originalOps[0].memo);
|
|
457
|
+
const restoredSerialized = await restoredTx.serialize();
|
|
458
|
+
assert_1.default.strictEqual(restoredSerialized, serialized);
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
(0, mocha_1.describe)('Tempo coin - parseTransaction / verifyTransaction', () => {
|
|
463
|
+
let bitgo;
|
|
464
|
+
let coin;
|
|
465
|
+
const mockToken = ethers_1.ethers.utils.getAddress(tempo_1.TESTNET_TOKENS.alphaUSD.address);
|
|
466
|
+
const mockRecipient = ethers_1.ethers.utils.getAddress(tempo_1.TEST_RECIPIENT_ADDRESS);
|
|
467
|
+
(0, mocha_1.before)(function () {
|
|
468
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
469
|
+
bitgo.safeRegister('ttempo', (bg) => {
|
|
470
|
+
const mockStaticsCoin = {
|
|
471
|
+
name: 'ttempo',
|
|
472
|
+
fullName: 'Testnet Tempo',
|
|
473
|
+
network: { type: 'testnet' },
|
|
474
|
+
features: [],
|
|
475
|
+
};
|
|
476
|
+
return ttempo_1.Ttempo.createInstance(bg, mockStaticsCoin);
|
|
477
|
+
});
|
|
478
|
+
bitgo.initializeTestVars();
|
|
479
|
+
coin = bitgo.coin('ttempo');
|
|
480
|
+
});
|
|
481
|
+
async function buildSerializedTx(operations, nonce = 0) {
|
|
482
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(statics_1.coins.get('ttempo'));
|
|
483
|
+
for (const op of operations) {
|
|
484
|
+
builder.addOperation(op);
|
|
485
|
+
}
|
|
486
|
+
builder
|
|
487
|
+
.nonce(nonce)
|
|
488
|
+
.gas(100000n)
|
|
489
|
+
.maxFeePerGas(tempo_1.TX_PARAMS.defaultMaxFeePerGas)
|
|
490
|
+
.maxPriorityFeePerGas(tempo_1.TX_PARAMS.defaultMaxPriorityFeePerGas);
|
|
491
|
+
const tx = (await builder.build());
|
|
492
|
+
return tx.serialize();
|
|
493
|
+
}
|
|
494
|
+
(0, mocha_1.describe)('parseTransaction', () => {
|
|
495
|
+
(0, mocha_1.it)('should parse a single-operation transaction into outputs', async () => {
|
|
496
|
+
const txHex = await buildSerializedTx([{ token: mockToken, to: mockRecipient, amount: '50', memo: '1' }]);
|
|
497
|
+
const parsed = await coin.parseTransaction({ txHex });
|
|
498
|
+
assert_1.default.ok(Array.isArray(parsed.outputs), 'outputs should be an array');
|
|
499
|
+
assert_1.default.strictEqual(parsed.outputs.length, 1);
|
|
500
|
+
assert_1.default.strictEqual(parsed.outputs[0].address.toLowerCase(), mockRecipient.toLowerCase());
|
|
501
|
+
// 50 tokens * 10^6 = 50_000_000 base units
|
|
502
|
+
assert_1.default.strictEqual(parsed.outputs[0].amount, '50000000');
|
|
503
|
+
});
|
|
504
|
+
(0, mocha_1.it)('should return empty object when no txHex is provided', async () => {
|
|
505
|
+
const parsed = await coin.parseTransaction({});
|
|
506
|
+
assert_1.default.deepStrictEqual(parsed, {});
|
|
507
|
+
});
|
|
508
|
+
});
|
|
509
|
+
(0, mocha_1.describe)('verifyTransaction', () => {
|
|
510
|
+
(0, mocha_1.it)('should return true when no recipients are specified', async () => {
|
|
511
|
+
const txHex = await buildSerializedTx([{ token: mockToken, to: mockRecipient, amount: '10' }]);
|
|
512
|
+
const result = await coin.verifyTransaction({
|
|
513
|
+
txPrebuild: { txHex },
|
|
514
|
+
txParams: {},
|
|
515
|
+
});
|
|
516
|
+
assert_1.default.strictEqual(result, true);
|
|
517
|
+
});
|
|
518
|
+
(0, mocha_1.it)('should return true when recipients match operations', async () => {
|
|
519
|
+
const txHex = await buildSerializedTx([{ token: mockToken, to: mockRecipient, amount: '100' }]);
|
|
520
|
+
const result = await coin.verifyTransaction({
|
|
521
|
+
txPrebuild: { txHex },
|
|
522
|
+
txParams: {
|
|
523
|
+
recipients: [{ address: mockRecipient, amount: '100000000' }], // 100 * 10^6 base units
|
|
524
|
+
},
|
|
525
|
+
});
|
|
526
|
+
assert_1.default.strictEqual(result, true);
|
|
527
|
+
});
|
|
528
|
+
(0, mocha_1.it)('should throw when recipient address does not match', async () => {
|
|
529
|
+
const txHex = await buildSerializedTx([{ token: mockToken, to: mockRecipient, amount: '100' }]);
|
|
530
|
+
const wrongAddress = ethers_1.ethers.utils.getAddress('0x1111111111111111111111111111111111111111');
|
|
531
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
532
|
+
txPrebuild: { txHex },
|
|
533
|
+
txParams: { recipients: [{ address: wrongAddress, amount: '100000000' }] },
|
|
534
|
+
}), /recipient mismatch/);
|
|
535
|
+
});
|
|
536
|
+
(0, mocha_1.it)('should throw when recipient amount does not match', async () => {
|
|
537
|
+
const txHex = await buildSerializedTx([{ token: mockToken, to: mockRecipient, amount: '100' }]);
|
|
538
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
539
|
+
txPrebuild: { txHex },
|
|
540
|
+
txParams: { recipients: [{ address: mockRecipient, amount: '999' }] },
|
|
541
|
+
}), /amount mismatch/);
|
|
542
|
+
});
|
|
543
|
+
(0, mocha_1.it)('should throw when operation count differs from recipient count', async () => {
|
|
544
|
+
const txHex = await buildSerializedTx([{ token: mockToken, to: mockRecipient, amount: '10' }]);
|
|
545
|
+
await assert_1.default.rejects(() => coin.verifyTransaction({
|
|
546
|
+
txPrebuild: { txHex },
|
|
547
|
+
txParams: {
|
|
548
|
+
recipients: [
|
|
549
|
+
{ address: mockRecipient, amount: '10000000' },
|
|
550
|
+
{ address: mockRecipient, amount: '10000000' },
|
|
551
|
+
],
|
|
552
|
+
},
|
|
553
|
+
}), /operation\(s\)/);
|
|
554
|
+
});
|
|
555
|
+
(0, mocha_1.it)('should return true when no txHex is provided', async () => {
|
|
556
|
+
const result = await coin.verifyTransaction({ txPrebuild: {}, txParams: {} });
|
|
557
|
+
assert_1.default.strictEqual(result, true);
|
|
558
|
+
});
|
|
559
|
+
});
|
|
297
560
|
});
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixpQ0FBcUM7QUFDckMsbUNBQWdDO0FBQ2hDLHlFQUEyRTtBQUMzRSwyREFBNkQ7QUFDN0QsK0NBTTZCO0FBQzdCLHVEQUE4RTtBQUM5RSw0Q0FBdUM7QUFDdkMsOENBTTRCO0FBRTVCLE1BQU0sY0FBYyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFM0MsSUFBQSxnQkFBUSxFQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFBLGdCQUFRLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUEsVUFBRSxFQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQkFBa0IsRUFBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsVUFBRSxFQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsZ0JBQVEsRUFBQyxvQkFBb0IsRUFBRSxHQUFH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QU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBhbW91bnRUb1RpcDIwVW5pdHMsXG4gIHRpcDIwVW5pdHNUb0Ftb3VudCxcbiAgc3RyaW5nVG9CeXRlczMyLFxuICBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8sXG4gIGlzVmFsaWRUaXAyMEFtb3VudCxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBUSVAyMF9ERUNJTUFMUywgQUFfVFJBTlNBQ1RJT05fVFlQRSB9IGZyb20gJy4uLy4uL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgVEVTVE5FVF9UT0tFTlMsXG4gIFRYX1BBUkFNUyxcbiAgRVJST1JfTUVTU0FHRVMsXG4gIFNJR05BVFVSRV9URVNUX0RBVEEsXG4gIFRFU1RfUkVDSVBJRU5UX0FERFJFU1MsXG59IGZyb20gJy4uL3Jlc291cmNlcy90ZW1wbyc7XG5cbmNvbnN0IG1vY2tDb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dGVtcG8nKTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBVdGlsaXRpZXMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhbW91bnRUb1RpcDIwVW5pdHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGRlY2ltYWwgYW1vdW50IHRvIDYtZGVjaW1hbCB1bml0cycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbW91bnRUb1RpcDIwVW5pdHMoJzEuNScpLCAxNTAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcxMDAnKSwgMTAwMDAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcwLjAwMDAwMScpLCAxbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW1vdW50VG9UaXAyMFVuaXRzKCdpbnZhbGlkJyksIC9JbnZhbGlkIGFtb3VudCBmb3JtYXQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RpcDIwVW5pdHNUb0Ftb3VudCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgNi1kZWNpbWFsIHVuaXRzIHRvIGh1bWFuLXJlYWRhYmxlIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMTUwMDAwMG4pLCAnMS41Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGlwMjBVbml0c1RvQW1vdW50KDEwMDAwMDAwMG4pLCAnMTAwLjAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMW4pLCAnMC4wMDAwMDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0cmluZ1RvQnl0ZXMzMicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgc3RyaW5nIHRvIGJ5dGVzMzInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpbmdUb0J5dGVzMzIoJzEyMzQ1Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgNjYpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHN0cmluZyBsb25nZXIgdGhhbiAzMiBieXRlcycsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nVG9CeXRlczMyKCdhJy5yZXBlYXQoMzMpKSwgL01lbW8gdG9vIGxvbmcvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSB0cmFuc2ZlcldpdGhNZW1vIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0byA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweDc0MmQzNWNjNjYzNGMwNTMyOTI1YTNiODQ0YmM5ZTc1OTVmMGJlYjEnKTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8odG8sIDE1MDAwMDBuLCAnMTIzNDUnKTtcbiAgICAgIGFzc2VydC5vayhlbmNvZGVkLnN0YXJ0c1dpdGgoJzB4JykpO1xuICAgICAgYXNzZXJ0Lm9rKGVuY29kZWQubGVuZ3RoID4gMTApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFRpcDIwQW1vdW50JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW1vdW50cyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCcxLjUnKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCdpbnZhbGlkJyksIGZhbHNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkVGlwMjBBbW91bnQoJy01JyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBtb2NrVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHg3NDJkMzVjYzY2MzRjMDUzMjkyNWEzYjg0NGJjOWU3NTk1ZjBiZWIxJyk7XG4gIGNvbnN0IG1vY2tGZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweGFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2QnKTtcblxuICBkZXNjcmliZSgnYWRkT3BlcmF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWRkIG9wZXJhdGlvbiB3aXRoIGFuZCB3aXRob3V0IG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1MCcsIG1lbW86ICcxJyB9KTtcblxuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGJ1aWxkZXIuZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wZXJhdGlvbnMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcGVyYXRpb25zWzBdLm1lbW8sIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BlcmF0aW9uc1sxXS5tZW1vLCAnMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46ICcweGludmFsaWQnIGFzIGFueSwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSksXG4gICAgICAgIC9JbnZhbGlkIHRva2VuIGFkZHJlc3MvXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogJzB4aW52YWxpZCcgYXMgYW55LCBhbW91bnQ6ICcxMDAnIH0pLFxuICAgICAgICAvSW52YWxpZCByZWNpcGllbnQgYWRkcmVzcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnaW52YWxpZC1hbW91bnQnIH0pLFxuICAgICAgICAvSW52YWxpZCBhbW91bnQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgbWVtbyBsb25nZXIgdGhhbiAzMiBieXRlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJywgbWVtbzogJ2EnLnJlcGVhdCgzMykgfSksXG4gICAgICAgIC9NZW1vIHRvbyBsb25nL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZlZVRva2VuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IGFuZCBnZXQgZmVlIHRva2VuJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLmZlZVRva2VuKG1vY2tGZWVUb2tlbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlci5nZXRGZWVUb2tlbigpLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBmZWUgdG9rZW4gYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmZlZVRva2VuKCdpbnZhbGlkLWFkZHJlc3MnKSwgL0ludmFsaWQgZmVlIHRva2VuIGFkZHJlc3MvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgbm9uY2UsIGdhcywgbWF4RmVlUGVyR2FzLCBhbmQgbWF4UHJpb3JpdHlGZWVQZXJHYXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UoNDIpLmdhcyg1MDAwMDBuKS5tYXhGZWVQZXJHYXMoMTAwMDAwMDAwMG4pLm1heFByaW9yaXR5RmVlUGVyR2FzKDUwMDAwMDAwMG4pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbm9uY2UsIDQyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9nYXMsIDUwMDAwMG4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKChidWlsZGVyIGFzIGFueSkuX21heEZlZVBlckdhcywgMTAwMDAwMDAwMG4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKChidWlsZGVyIGFzIGFueSkuX21heFByaW9yaXR5RmVlUGVyR2FzLCA1MDAwMDAwMDBuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgbm9uY2UgYW5kIGdhcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLm5vbmNlKC0xKSwgL0ludmFsaWQgbm9uY2UvKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5nYXMoMG4pLCAvSW52YWxpZCBnYXMgbGltaXQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ01ldGhvZCBjaGFpbmluZycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgZmx1ZW50IGludGVyZmFjZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICc1JyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoMTApXG4gICAgICAgIC5nYXMoNDAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygyMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDEwMDAwMDAwMDBuKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdUSVAtMjAgQ29uc3RhbnRzJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBkZWNpbWFsIHBsYWNlcycsICgpID0+IHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoVElQMjBfREVDSU1BTFMsIDYpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVElQLTIwIFRyYW5zYWN0aW9uIEJ1aWxkJywgKCkgPT4ge1xuICBjb25zdCBtb2NrVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzKTtcbiAgY29uc3QgbW9ja1JlY2lwaWVudCA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKFRFU1RfUkVDSVBJRU5UX0FERFJFU1MpO1xuICBjb25zdCBtb2NrRmVlVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MpO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHNpbmdsZS1vcGVyYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnLCBtZW1vOiAnMScgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5vayh0eCBpbnN0YW5jZW9mIFRpcDIwVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldE9wZXJhdGlvbkNvdW50KCksIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldEZlZVRva2VuKCksIG1vY2tGZWVUb2tlbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGJhdGNoIHRyYW5zYWN0aW9uIHdpdGggbXVsdGlwbGUgb3BlcmF0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IFRFU1RORVRfVE9LRU5TLmFscGhhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcsIG1lbW86ICcxJyB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IFRFU1RORVRfVE9LRU5TLmJldGFVU0QuYWRkcmVzcywgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzIwJywgbWVtbzogJzInIH0pXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogVEVTVE5FVF9UT0tFTlMudGhldGFVU0QuYWRkcmVzcywgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzMwJywgbWVtbzogJzMnIH0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSg0MilcbiAgICAgICAgLmdhcygzMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0Lm9rKHR4IGluc3RhbmNlb2YgVGlwMjBUcmFuc2FjdGlvbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguZ2V0T3BlcmF0aW9uQ291bnQoKSwgMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHguaXNCYXRjaCgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgdHJhbnNhY3Rpb24gd2l0aG91dCBmZWUgdG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1MCcgfSlcbiAgICAgICAgLm5vbmNlKDEpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5vayh0eCBpbnN0YW5jZW9mIFRpcDIwVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldEZlZVRva2VuKCksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBWYWxpZGF0aW9uIEVycm9ycycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbm8gb3BlcmF0aW9ucyBhZGRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5ub25jZSgwKS5nYXMoMTAwMDAwbikubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKS5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSwgRVJST1JfTUVTU0FHRVMubm9PcGVyYXRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBub25jZSBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9KVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMTAwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSwgRVJST1JfTUVTU0FHRVMubWlzc2luZ05vbmNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBnYXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMTAwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSwgRVJST1JfTUVTU0FHRVMubWlzc2luZ0dhcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbWF4RmVlUGVyR2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSwgRVJST1JfTUVTU0FHRVMubWlzc2luZ01heEZlZVBlckdhcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbWF4UHJpb3JpdHlGZWVQZXJHYXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygxMDAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdNYXhQcmlvcml0eUZlZVBlckdhcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSb3VuZC1UcmlwOiBCdWlsZCAtPiBTZXJpYWxpemUgLT4gT3BlcmF0aW9ucyBDaGVjaycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIG9wZXJhdGlvbiBkYXRhIHRocm91Z2ggYnVpbGQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb25zID0gW3sgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEyMycsIG1lbW86ICcxJyB9XTtcblxuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24ob3BlcmF0aW9uc1swXSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDEwKVxuICAgICAgICAuZ2FzKDE1MDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjAwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMDAwMDAwMDAwbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4T3BzID0gdHguZ2V0T3BlcmF0aW9ucygpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHhPcHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS50b2tlbiwgb3BlcmF0aW9uc1swXS50b2tlbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHhPcHNbMF0udG8sIG9wZXJhdGlvbnNbMF0udG8pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzWzBdLmFtb3VudCwgb3BlcmF0aW9uc1swXS5hbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzWzBdLm1lbW8sIG9wZXJhdGlvbnNbMF0ubWVtbyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCAtPiBTZXJpYWxpemUgLT4gU2lnbiBGbG93JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBzZXJpYWxpemFibGUgdW5zaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1MCcsIG1lbW86ICcyJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNSlcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDIwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB1bnNpZ25lZEhleCA9IGF3YWl0IHR4LnNlcmlhbGl6ZSgpO1xuXG4gICAgICBhc3NlcnQub2sodW5zaWduZWRIZXguc3RhcnRzV2l0aChBQV9UUkFOU0FDVElPTl9UWVBFKSk7XG4gICAgICBhc3NlcnQub2soL14weFswLTlhLWZdKyQvaS50ZXN0KHVuc2lnbmVkSGV4KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgZnVsbCBzaWduIGFuZCBicm9hZGNhc3QgZmxvdycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzc1JywgbWVtbzogJzMnIH0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgxMjMpXG4gICAgICAgIC5nYXMoMTIwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygyNTAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDEyMDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgdHguc2V0U2lnbmF0dXJlKFNJR05BVFVSRV9URVNUX0RBVEEudmFsaWRTaWduYXR1cmUpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RIZXggPSBhd2FpdCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXNzZXJ0Lm9rKGJyb2FkY2FzdEhleC5zdGFydHNXaXRoKEFBX1RSQU5TQUNUSU9OX1RZUEUpKTtcbiAgICAgIGFzc2VydC5vayhicm9hZGNhc3RIZXgubGVuZ3RoID4gdW5zaWduZWRIZXgubGVuZ3RoLCAnU2lnbmVkIHNob3VsZCBiZSBsb25nZXInKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIEpTT04gUmVwcmVzZW50YXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGNvbnNpc3RlbnQgSlNPTiBmcm9tIGJ1aWx0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJywgbWVtbzogJzQnIH0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSg1MClcbiAgICAgICAgLmdhcygyMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDMwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoMTUwMDAwMDAwMG4pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLnR5cGUsIEFBX1RSQU5TQUNUSU9OX1RZUEUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubm9uY2UsIDUwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLmdhcywgJzIwMDAwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubWF4RmVlUGVyR2FzLCAnMzAwMDAwMDAwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMsICcxNTAwMDAwMDAwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5jYWxsQ291bnQsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uZmVlVG9rZW4sIG1vY2tGZWVUb2tlbik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
561
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixpQ0FBNkM7QUFDN0MsbUNBQWdDO0FBQ2hDLHlFQUEyRTtBQUMzRSwyREFBNkQ7QUFDN0QsK0NBTTZCO0FBQzdCLHVEQUE4RTtBQUM5RSw0Q0FBdUM7QUFDdkMsNkNBQTBDO0FBQzFDLDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFFMUQsOENBTTRCO0FBRTVCLE1BQU0sY0FBYyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFM0MsSUFBQSxnQkFBUSxFQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFBLGdCQUFRLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUEsVUFBRSxFQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQkFBa0IsRUFBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsVUFBRSxFQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FB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RUFBZ0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RSxNQUFNLEtBQUssR0FBRyxNQUFNLGlCQUFpQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3JCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtnQkFDckIsUUFBUSxFQUFFO29CQUNSLFVBQVUsRUFBRTt3QkFDVixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTt3QkFDOUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7cUJBQy9DO2lCQUNGO2FBQ0YsQ0FBQyxFQUNKLGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFBLFVBQUUsRUFBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlc2NyaWJlLCBpdCwgYmVmb3JlIH0gZnJvbSAnbW9jaGEnO1xuaW1wb3J0IHsgZXRoZXJzIH0gZnJvbSAnZXRoZXJzJztcbmltcG9ydCB7IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVGlwMjBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgYW1vdW50VG9UaXAyMFVuaXRzLFxuICB0aXAyMFVuaXRzVG9BbW91bnQsXG4gIHN0cmluZ1RvQnl0ZXMzMixcbiAgZW5jb2RlVGlwMjBUcmFuc2ZlcldpdGhNZW1vLFxuICBpc1ZhbGlkVGlwMjBBbW91bnQsXG59IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgVElQMjBfREVDSU1BTFMsIEFBX1RSQU5TQUNUSU9OX1RZUEUgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFR0ZW1wbyB9IGZyb20gJy4uLy4uL3NyYy90dGVtcG8nO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgVEVTVE5FVF9UT0tFTlMsXG4gIFRYX1BBUkFNUyxcbiAgRVJST1JfTUVTU0FHRVMsXG4gIFNJR05BVFVSRV9URVNUX0RBVEEsXG4gIFRFU1RfUkVDSVBJRU5UX0FERFJFU1MsXG59IGZyb20gJy4uL3Jlc291cmNlcy90ZW1wbyc7XG5cbmNvbnN0IG1vY2tDb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dGVtcG8nKTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBVdGlsaXRpZXMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhbW91bnRUb1RpcDIwVW5pdHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGRlY2ltYWwgYW1vdW50IHRvIDYtZGVjaW1hbCB1bml0cycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbW91bnRUb1RpcDIwVW5pdHMoJzEuNScpLCAxNTAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcxMDAnKSwgMTAwMDAwMDAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW1vdW50VG9UaXAyMFVuaXRzKCcwLjAwMDAwMScpLCAxbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW1vdW50VG9UaXAyMFVuaXRzKCdpbnZhbGlkJyksIC9JbnZhbGlkIGFtb3VudCBmb3JtYXQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RpcDIwVW5pdHNUb0Ftb3VudCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgNi1kZWNpbWFsIHVuaXRzIHRvIGh1bWFuLXJlYWRhYmxlIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMTUwMDAwMG4pLCAnMS41Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGlwMjBVbml0c1RvQW1vdW50KDEwMDAwMDAwMG4pLCAnMTAwLjAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aXAyMFVuaXRzVG9BbW91bnQoMW4pLCAnMC4wMDAwMDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0cmluZ1RvQnl0ZXMzMicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgc3RyaW5nIHRvIGJ5dGVzMzInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpbmdUb0J5dGVzMzIoJzEyMzQ1Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgNjYpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHN0cmluZyBsb25nZXIgdGhhbiAzMiBieXRlcycsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nVG9CeXRlczMyKCdhJy5yZXBlYXQoMzMpKSwgL01lbW8gdG9vIGxvbmcvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSB0cmFuc2ZlcldpdGhNZW1vIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0byA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweDc0MmQzNWNjNjYzNGMwNTMyOTI1YTNiODQ0YmM5ZTc1OTVmMGJlYjEnKTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8odG8sIDE1MDAwMDBuLCAnMTIzNDUnKTtcbiAgICAgIGFzc2VydC5vayhlbmNvZGVkLnN0YXJ0c1dpdGgoJzB4JykpO1xuICAgICAgYXNzZXJ0Lm9rKGVuY29kZWQubGVuZ3RoID4gMTApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFRpcDIwQW1vdW50JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW1vdW50cyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCcxLjUnKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFRpcDIwQW1vdW50KCdpbnZhbGlkJyksIGZhbHNlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkVGlwMjBBbW91bnQoJy01JyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBtb2NrVG9rZW4gPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwJyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHg3NDJkMzVjYzY2MzRjMDUzMjkyNWEzYjg0NGJjOWU3NTk1ZjBiZWIxJyk7XG4gIGNvbnN0IG1vY2tGZWVUb2tlbiA9IGV0aGVycy51dGlscy5nZXRBZGRyZXNzKCcweGFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2RlZmFiY2QnKTtcblxuICBkZXNjcmliZSgnYWRkT3BlcmF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWRkIG9wZXJhdGlvbiB3aXRoIGFuZCB3aXRob3V0IG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1MCcsIG1lbW86ICcxJyB9KTtcblxuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGJ1aWxkZXIuZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wZXJhdGlvbnMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcGVyYXRpb25zWzBdLm1lbW8sIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BlcmF0aW9uc1sxXS5tZW1vLCAnMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46ICcweGludmFsaWQnIGFzIGFueSwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSksXG4gICAgICAgIC9JbnZhbGlkIHRva2VuIGFkZHJlc3MvXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogJzB4aW52YWxpZCcgYXMgYW55LCBhbW91bnQ6ICcxMDAnIH0pLFxuICAgICAgICAvSW52YWxpZCByZWNpcGllbnQgYWRkcmVzcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnaW52YWxpZC1hbW91bnQnIH0pLFxuICAgICAgICAvSW52YWxpZCBhbW91bnQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCAobm9uLW51bWVyaWMpIG1lbW8nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICdJTlYtMDAxJyB9KSxcbiAgICAgICAgL0ludmFsaWQgbWVtby9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmZWVUb2tlbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNldCBhbmQgZ2V0IGZlZSB0b2tlbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5mZWVUb2tlbihtb2NrRmVlVG9rZW4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXIuZ2V0RmVlVG9rZW4oKSwgbW9ja0ZlZVRva2VuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgZmVlIHRva2VuIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mZWVUb2tlbignaW52YWxpZC1hZGRyZXNzJyksIC9JbnZhbGlkIGZlZSB0b2tlbiBhZGRyZXNzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IG5vbmNlLCBnYXMsIG1heEZlZVBlckdhcywgYW5kIG1heFByaW9yaXR5RmVlUGVyR2FzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLm5vbmNlKDQyKS5nYXMoNTAwMDAwbikubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKS5tYXhQcmlvcml0eUZlZVBlckdhcyg1MDAwMDAwMDBuKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKChidWlsZGVyIGFzIGFueSkuX25vbmNlLCA0Mik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fZ2FzLCA1MDAwMDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXhGZWVQZXJHYXMsIDEwMDAwMDAwMDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tYXhQcmlvcml0eUZlZVBlckdhcywgNTAwMDAwMDAwbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIG5vbmNlIGFuZCBnYXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5ub25jZSgtMSksIC9JbnZhbGlkIG5vbmNlLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuZ2FzKDBuKSwgL0ludmFsaWQgZ2FzIGxpbWl0Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNZXRob2QgY2hhaW5pbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZsdWVudCBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnLCBtZW1vOiAnNScgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDEwKVxuICAgICAgICAuZ2FzKDQwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjAwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMDAwMDAwMDAwbik7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVElQLTIwIENvbnN0YW50cycsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgZGVjaW1hbCBwbGFjZXMnLCAoKSA9PiB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFRJUDIwX0RFQ0lNQUxTLCA2KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1RJUC0yMCBUcmFuc2FjdGlvbiBCdWlsZCcsICgpID0+IHtcbiAgY29uc3QgbW9ja1Rva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYWxwaGFVU0QuYWRkcmVzcyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUX1JFQ0lQSUVOVF9BRERSRVNTKTtcbiAgY29uc3QgbW9ja0ZlZVRva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYmV0YVVTRC5hZGRyZXNzKTtcblxuICBkZXNjcmliZSgnQnVpbGQgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJywgbWVtbzogJzEnIH0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRPcGVyYXRpb25Db3VudCgpLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRGZWVUb2tlbigpLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBiYXRjaCB0cmFuc2FjdGlvbiB3aXRoIG11bHRpcGxlIG9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAnLCBtZW1vOiAnMScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyMCcsIG1lbW86ICcyJyB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IFRFU1RORVRfVE9LRU5TLnRoZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICczMCcsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNDIpXG4gICAgICAgIC5nYXMoMzAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5vayh0eCBpbnN0YW5jZW9mIFRpcDIwVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmdldE9wZXJhdGlvbkNvdW50KCksIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlzQmF0Y2goKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRyYW5zYWN0aW9uIHdpdGhvdXQgZmVlIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnNTAnIH0pXG4gICAgICAgIC5ub25jZSgxKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnQub2sodHggaW5zdGFuY2VvZiBUaXAyMFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5nZXRGZWVUb2tlbigpLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVmFsaWRhdGlvbiBFcnJvcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG5vIG9wZXJhdGlvbnMgYWRkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UoMCkuZ2FzKDEwMDAwMG4pLm1heEZlZVBlckdhcygxMDAwMDAwMDAwbikubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm5vT3BlcmF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbm9uY2Ugbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcgfSlcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdOb25jZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gZ2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDEwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdHYXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1heEZlZVBlckdhcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9KVxuICAgICAgICAubm9uY2UoMClcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoNTAwMDAwMDAwbik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiBhd2FpdCBidWlsZGVyLmJ1aWxkKCksIEVSUk9SX01FU1NBR0VTLm1pc3NpbmdNYXhGZWVQZXJHYXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1heFByaW9yaXR5RmVlUGVyR2FzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYXdhaXQgYnVpbGRlci5idWlsZCgpLCBFUlJPUl9NRVNTQUdFUy5taXNzaW5nTWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUm91bmQtVHJpcDogQnVpbGQgLT4gU2VyaWFsaXplIC0+IE9wZXJhdGlvbnMgQ2hlY2snLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBvcGVyYXRpb24gZGF0YSB0aHJvdWdoIGJ1aWxkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMjMnLCBtZW1vOiAnMScgfV07XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbnNbMF0pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSgxMClcbiAgICAgICAgLmdhcygxNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKDIwMDAwMDAwMDBuKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoMTAwMDAwMDAwMG4pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0eE9wcyA9IHR4LmdldE9wZXJhdGlvbnMoKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHhPcHNbMF0udG9rZW4sIG9wZXJhdGlvbnNbMF0udG9rZW4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4T3BzWzBdLnRvLCBvcGVyYXRpb25zWzBdLnRvKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS5hbW91bnQsIG9wZXJhdGlvbnNbMF0uYW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eE9wc1swXS5tZW1vLCBvcGVyYXRpb25zWzBdLm1lbW8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgLT4gU2VyaWFsaXplIC0+IFNpZ24gRmxvdycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2Ugc2VyaWFsaXphYmxlIHVuc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnNTAnLCBtZW1vOiAnMicgfSlcbiAgICAgICAgLmZlZVRva2VuKG1vY2tGZWVUb2tlbilcbiAgICAgICAgLm5vbmNlKDUpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygyMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDEwMDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcblxuICAgICAgYXNzZXJ0Lm9rKHVuc2lnbmVkSGV4LnN0YXJ0c1dpdGgoQUFfVFJBTlNBQ1RJT05fVFlQRSkpO1xuICAgICAgYXNzZXJ0Lm9rKC9eMHhbMC05YS1mXSskL2kudGVzdCh1bnNpZ25lZEhleCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGZ1bGwgc2lnbiBhbmQgYnJvYWRjYXN0IGZsb3cnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc3NScsIG1lbW86ICczJyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoMTIzKVxuICAgICAgICAuZ2FzKDEyMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoMjUwMDAwMDAwMG4pXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcygxMjAwMDAwMDAwbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHVuc2lnbmVkSGV4ID0gYXdhaXQgdHguc2VyaWFsaXplKCk7XG5cbiAgICAgIHR4LnNldFNpZ25hdHVyZShTSUdOQVRVUkVfVEVTVF9EQVRBLnZhbGlkU2lnbmF0dXJlKTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0SGV4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydC5vayhicm9hZGNhc3RIZXguc3RhcnRzV2l0aChBQV9UUkFOU0FDVElPTl9UWVBFKSk7XG4gICAgICBhc3NlcnQub2soYnJvYWRjYXN0SGV4Lmxlbmd0aCA+IHVuc2lnbmVkSGV4Lmxlbmd0aCwgJ1NpZ25lZCBzaG91bGQgYmUgbG9uZ2VyJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBKU09OIFJlcHJlc2VudGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBjb25zaXN0ZW50IEpTT04gZnJvbSBidWlsdCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMCcsIG1lbW86ICc0JyB9KVxuICAgICAgICAuZmVlVG9rZW4obW9ja0ZlZVRva2VuKVxuICAgICAgICAubm9uY2UoNTApXG4gICAgICAgIC5nYXMoMjAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcygzMDAwMDAwMDAwbilcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKDE1MDAwMDAwMDBuKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi50eXBlLCBBQV9UUkFOU0FDVElPTl9UWVBFKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm5vbmNlLCA1MCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5nYXMsICcyMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm1heEZlZVBlckdhcywgJzMwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLm1heFByaW9yaXR5RmVlUGVyR2FzLCAnMTUwMDAwMDAwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uY2FsbENvdW50LCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChqc29uLmZlZVRva2VuLCBtb2NrRmVlVG9rZW4pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gaWQgZ2V0dGVyJywgKCkgPT4ge1xuICAgIGl0KCd1bnNpZ25lZCBhbmQgc2lnbmVkIHRyYW5zYWN0aW9ucyBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hZGRPcGVyYXRpb24oeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAnIH0pXG4gICAgICAgIC5ub25jZSgxKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdW5zaWduZWRJZCA9IHR4LmlkO1xuXG4gICAgICB0eC5zZXRTaWduYXR1cmUoU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzaWduZWRJZCA9IHR4LmlkO1xuXG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwodW5zaWduZWRJZCwgc2lnbmVkSWQsICdTaWduZWQgYW5kIHVuc2lnbmVkIHR4IHNob3VsZCBoYXZlIGRpZmZlcmVudCBpZHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dHB1dHMgLyBpbnB1dHMgcG9wdWxhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cG9zZSBvdXRwdXRzIHdpdGggYmFzZS11bml0IHZhbHVlIGFuZCB0b2tlbiBhZGRyZXNzIGFzIGNvaW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxLjUnLCBtZW1vOiAnNycgfSlcbiAgICAgICAgLm5vbmNlKDApXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHgub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgbW9ja1JlY2lwaWVudCk7XG4gICAgICAvLyAxLjUgdG9rZW5zICogMTBeNiA9IDFfNTAwXzAwMCBiYXNlIHVuaXRzXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgJzE1MDAwMDAnKTtcbiAgICAgIC8vIGNvaW4gaXMgdGhlIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MsIG5vdCB0aGUgY2hhaW4gbmFtZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4Lm91dHB1dHNbMF0uY29pbj8udG9Mb3dlckNhc2UoKSwgbW9ja1Rva2VuLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBvc2UgYSBzaW5nbGUgaW5wdXQgd2l0aCB0aGUgdG90YWwgaW4gYmFzZSB1bml0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEuNScgfSlcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICczLjUnIH0pXG4gICAgICAgIC5ub25jZSgwKVxuICAgICAgICAuZ2FzKDEwMDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR4LmlucHV0c1swXS5hZGRyZXNzLCAnJyk7XG4gICAgICAvLyAoMS41ICsgMy41KSB0b2tlbnMgKiAxMF42ID0gNV8wMDBfMDAwIGJhc2UgdW5pdHNcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsICc1MDAwMDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSb3VuZC1UcmlwOiBCdWlsZCAtPiBTZXJpYWxpemUgLT4gRnJvbSAoZGVzZXJpYWxpemF0aW9uKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyNS41JywgbWVtbzogJzEyMzQ1JyB9O1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pXG4gICAgICAgIC5mZWVUb2tlbihtb2NrRmVlVG9rZW4pXG4gICAgICAgIC5ub25jZSg3KVxuICAgICAgICAuZ2FzKDE1MDAwMG4pXG4gICAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAgIC5tYXhQcmlvcml0eUZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heFByaW9yaXR5RmVlUGVyR2FzKTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gYXdhaXQgb3JpZ2luYWxUeC5zZXJpYWxpemUoKTtcblxuICAgICAgLy8gRGVzZXJpYWxpemUgdmlhIGZyb20oKVxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgY29uc3Qgb3BzID0gcmVzdG9yZWRUeC5nZXRPcGVyYXRpb25zKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCksIG9wZXJhdGlvbi50b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbMF0udG8udG9Mb3dlckNhc2UoKSwgb3BlcmF0aW9uLnRvLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS5hbW91bnQsIG9wZXJhdGlvbi5hbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1swXS5tZW1vLCBvcGVyYXRpb24ubWVtbyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRUeC5nZXRGZWVUb2tlbigpPy50b0xvd2VyQ2FzZSgpLCBtb2NrRmVlVG9rZW4udG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBiYXRjaCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFVzZSBhbW91bnRzIHRoYXQgbWF0Y2ggdGlwMjBVbml0c1RvQW1vdW50IG91dHB1dDogZXRoZXJzIGZvcm1hdFVuaXRzIGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsXG4gICAgICBjb25zdCBvcGVyYXRpb25zID0gW1xuICAgICAgICB7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5hbHBoYVVTRC5hZGRyZXNzLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAuMCcsIG1lbW86ICcxJyB9LFxuICAgICAgICB7IHRva2VuOiBURVNUTkVUX1RPS0VOUy5iZXRhVVNELmFkZHJlc3MsIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcyMC4wJywgbWVtbzogJzInIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbihvcGVyYXRpb25zWzBdKVxuICAgICAgICAuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbnNbMV0pXG4gICAgICAgIC5ub25jZSg0MilcbiAgICAgICAgLmdhcygyNTAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCByZXN0b3JlZFR4ID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZFR4LmdldE9wZXJhdGlvbkNvdW50KCksIDIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3RvcmVkVHguaXNCYXRjaCgpKTtcblxuICAgICAgY29uc3QganNvbiA9IHJlc3RvcmVkVHgudG9Kc29uKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5ub25jZSwgNDIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24uZ2FzLCAnMjUwMDAwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoanNvbi5tYXhGZWVQZXJHYXMsIFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzLnRvU3RyaW5nKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMsIFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMudG9TdHJpbmcoKSk7XG5cbiAgICAgIGNvbnN0IG9wcyA9IHJlc3RvcmVkVHguZ2V0T3BlcmF0aW9ucygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcGVyYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcHNbaV0udG9rZW4udG9Mb3dlckNhc2UoKSwgb3BlcmF0aW9uc1tpXS50b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9wc1tpXS50by50b0xvd2VyQ2FzZSgpLCBtb2NrUmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzW2ldLmFtb3VudCwgb3BlcmF0aW9uc1tpXS5hbW91bnQpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3BzW2ldLm1lbW8sIG9wZXJhdGlvbnNbaV0ubWVtbyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgYSBzaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByZXNlcnZlIHRoZSBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICc1JyB9KVxuICAgICAgICAubm9uY2UoOTkpXG4gICAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgICAgLm1heEZlZVBlckdhcyhUWF9QQVJBTVMuZGVmYXVsdE1heEZlZVBlckdhcylcbiAgICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgICB0eC5zZXRTaWduYXR1cmUoU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzaWduZWRIZXggPSBhd2FpdCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBEZXNlcmlhbGl6ZSB0aGUgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBidWlsZGVyMiA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyMi5mcm9tKHNpZ25lZEhleCk7XG4gICAgICBjb25zdCByZXN0b3JlZFR4ID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG5cbiAgICAgIGNvbnN0IHNpZyA9IHJlc3RvcmVkVHguZ2V0U2lnbmF0dXJlKCk7XG4gICAgICBhc3NlcnQub2soc2lnICE9PSB1bmRlZmluZWQsICdTaWduYXR1cmUgc2hvdWxkIGJlIHByZXNlcnZlZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZyEueVBhcml0eSwgU0lHTkFUVVJFX1RFU1RfREFUQS52YWxpZFNpZ25hdHVyZS55UGFyaXR5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eCBpZCBhZnRlciBhIHNlcmlhbGl6YXRpb24gcm91bmQtdHJpcCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMC4wJywgbWVtbzogJzk5JyB9KVxuICAgICAgICAubm9uY2UoMylcbiAgICAgICAgLmdhcygxMDAwMDBuKVxuICAgICAgICAubWF4RmVlUGVyR2FzKFRYX1BBUkFNUy5kZWZhdWx0TWF4RmVlUGVyR2FzKVxuICAgICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IG9yaWdpbmFsVHguc2VyaWFsaXplKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbElkID0gb3JpZ2luYWxUeC5pZDtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlcjIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkVHggPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkVHguaWQsIG9yaWdpbmFsSWQpO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbEpzb24gPSBvcmlnaW5hbFR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgcmVzdG9yZWRKc29uID0gcmVzdG9yZWRUeC50b0pzb24oKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZEpzb24ubm9uY2UsIG9yaWdpbmFsSnNvbi5ub25jZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLmdhcywgb3JpZ2luYWxKc29uLmdhcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLm1heEZlZVBlckdhcywgb3JpZ2luYWxKc29uLm1heEZlZVBlckdhcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRKc29uLm1heFByaW9yaXR5RmVlUGVyR2FzLCBvcmlnaW5hbEpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkSnNvbi5mZWVUb2tlbiwgb3JpZ2luYWxKc29uLmZlZVRva2VuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZEpzb24uY2FsbENvdW50LCBvcmlnaW5hbEpzb24uY2FsbENvdW50KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxPcHMgPSBvcmlnaW5hbFR4LmdldE9wZXJhdGlvbnMoKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkT3BzID0gcmVzdG9yZWRUeC5nZXRPcGVyYXRpb25zKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdG9yZWRPcHMubGVuZ3RoLCBvcmlnaW5hbE9wcy5sZW5ndGgpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCksIG9yaWdpbmFsT3BzWzBdLnRva2VuLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLnRvLnRvTG93ZXJDYXNlKCksIG9yaWdpbmFsT3BzWzBdLnRvLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3RvcmVkT3BzWzBdLmFtb3VudCwgb3JpZ2luYWxPcHNbMF0uYW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZE9wc1swXS5tZW1vLCBvcmlnaW5hbE9wc1swXS5tZW1vKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWRTZXJpYWxpemVkID0gYXdhaXQgcmVzdG9yZWRUeC5zZXJpYWxpemUoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN0b3JlZFNlcmlhbGl6ZWQsIHNlcmlhbGl6ZWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVGVtcG8gY29pbiAtIHBhcnNlVHJhbnNhY3Rpb24gLyB2ZXJpZnlUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBjb2luOiBhbnk7XG5cbiAgY29uc3QgbW9ja1Rva2VuID0gZXRoZXJzLnV0aWxzLmdldEFkZHJlc3MoVEVTVE5FVF9UT0tFTlMuYWxwaGFVU0QuYWRkcmVzcyk7XG4gIGNvbnN0IG1vY2tSZWNpcGllbnQgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcyhURVNUX1JFQ0lQSUVOVF9BRERSRVNTKTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHRlbXBvJywgKGJnOiBCaXRHb0Jhc2UpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tTdGF0aWNzQ29pbiA9IHtcbiAgICAgICAgbmFtZTogJ3R0ZW1wbycsXG4gICAgICAgIGZ1bGxOYW1lOiAnVGVzdG5ldCBUZW1wbycsXG4gICAgICAgIG5ldHdvcms6IHsgdHlwZTogJ3Rlc3RuZXQnIH0sXG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIH0gYXMgYW55O1xuICAgICAgcmV0dXJuIFR0ZW1wby5jcmVhdGVJbnN0YW5jZShiZywgbW9ja1N0YXRpY3NDb2luKTtcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBjb2luID0gYml0Z28uY29pbigndHRlbXBvJyk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2VyaWFsaXplZFR4KFxuICAgIG9wZXJhdGlvbnM6IHsgdG9rZW46IHN0cmluZzsgdG86IHN0cmluZzsgYW1vdW50OiBzdHJpbmc7IG1lbW8/OiBzdHJpbmcgfVtdLFxuICAgIG5vbmNlID0gMFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCd0dGVtcG8nKSk7XG4gICAgZm9yIChjb25zdCBvcCBvZiBvcGVyYXRpb25zKSB7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbihvcCk7XG4gICAgfVxuICAgIGJ1aWxkZXJcbiAgICAgIC5ub25jZShub25jZSlcbiAgICAgIC5nYXMoMTAwMDAwbilcbiAgICAgIC5tYXhGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhGZWVQZXJHYXMpXG4gICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoVFhfUEFSQU1TLmRlZmF1bHRNYXhQcmlvcml0eUZlZVBlckdhcyk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0eC5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgYSBzaW5nbGUtb3BlcmF0aW9uIHRyYW5zYWN0aW9uIGludG8gb3V0cHV0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRTZXJpYWxpemVkVHgoW3sgdG9rZW46IG1vY2tUb2tlbiwgdG86IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzUwJywgbWVtbzogJzEnIH1dKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkocGFyc2VkLm91dHB1dHMpLCAnb3V0cHV0cyBzaG91bGQgYmUgYW4gYXJyYXknKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5vdXRwdXRzWzBdLmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgbW9ja1JlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIC8vIDUwIHRva2VucyAqIDEwXjYgPSA1MF8wMDBfMDAwIGJhc2UgdW5pdHNcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQub3V0cHV0c1swXS5hbW91bnQsICc1MDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgb2JqZWN0IHdoZW4gbm8gdHhIZXggaXMgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb2luLnBhcnNlVHJhbnNhY3Rpb24oe30pO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQsIHt9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBubyByZWNpcGllbnRzIGFyZSBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcgfV0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiByZWNpcGllbnRzIG1hdGNoIG9wZXJhdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAnIH1dKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSwgLy8gMTAwICogMTBeNiBiYXNlIHVuaXRzXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNlcmlhbGl6ZWRUeChbeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9XSk7XG4gICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSBldGhlcnMudXRpbHMuZ2V0QWRkcmVzcygnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHdyb25nQWRkcmVzcywgYW1vdW50OiAnMTAwMDAwMDAwJyB9XSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvcmVjaXBpZW50IG1pc21hdGNoL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZWNpcGllbnQgYW1vdW50IGRvZXMgbm90IG1hdGNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNlcmlhbGl6ZWRUeChbeyB0b2tlbjogbW9ja1Rva2VuLCB0bzogbW9ja1JlY2lwaWVudCwgYW1vdW50OiAnMTAwJyB9XSk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzk5OScgfV0gfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2Ftb3VudCBtaXNtYXRjaC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gb3BlcmF0aW9uIGNvdW50IGRpZmZlcnMgZnJvbSByZWNpcGllbnQgY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2VyaWFsaXplZFR4KFt7IHRva2VuOiBtb2NrVG9rZW4sIHRvOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMCcgfV0pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgICAgeyBhZGRyZXNzOiBtb2NrUmVjaXBpZW50LCBhbW91bnQ6ICcxMDAwMDAwMCcgfSxcbiAgICAgICAgICAgICAgICB7IGFkZHJlc3M6IG1vY2tSZWNpcGllbnQsIGFtb3VudDogJzEwMDAwMDAwJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL29wZXJhdGlvblxcKHNcXCkvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIG5vIHR4SGV4IGlzIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHt9LCB0eFBhcmFtczoge30gfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|