@bitgo-beta/sdk-coin-trx 1.2.3-alpha.427 → 1.2.3-alpha.429

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.
@@ -50,6 +50,26 @@ const resources_1 = require("../resources");
50
50
  bitgo.safeRegister('trx', src_1.Trx.createInstance);
51
51
  bitgo.safeRegister('ttrx', src_1.Ttrx.createInstance);
52
52
  let basecoin;
53
+ // Test data from wallet 693b011a3ec26986f569b02140c7627e
54
+ const testWalletData = {
55
+ rootAddress: 'TAf36b36eqoMCzJJm3jwSsP81UvkMxrPbi',
56
+ receiveAddress: 'TFaD6DeKFMcBuGuDD7LbbqxTnKunhXfdya',
57
+ receiveAddressIndex: 2,
58
+ keychains: [
59
+ {
60
+ id: '693b0110271fc3f5749754097793bb8d',
61
+ pub: 'xpub661MyMwAqRbcFsVAdZyN2m8p21WHXg8NRNkqKApyS5gwmFsPdRTrmHYCnzR9vYe8DQ4uWGCBcAAsWE3r97HsFS3K2faZ2ejXNhHxdEoAEWC',
62
+ },
63
+ {
64
+ id: '693b011065b9c4674825ce1f849b7bef',
65
+ pub: 'xpub661MyMwAqRbcErKpZr9ztTFJk6fzXWatMFgRnpXfsjybWBfE9847EVGrHHBsGP8fcnzJmJuevAbPUEpjHTjEEWfYUWNMEDahvssQein848o',
66
+ },
67
+ {
68
+ id: '693b01117c41846abb04818815b89b6c',
69
+ pub: 'xpub661MyMwAqRbcFqZd7XU9DFW4f29VJzQt7UCA51ypaWa5ymhQ2pRZDTgViw3vZ56PqZ8dj1cracN3fAWhaiG1QKj9mvyt9Cba4nM2tPibNKw',
70
+ },
71
+ ],
72
+ };
53
73
  (0, node_test_1.before)(function () {
54
74
  basecoin = bitgo.coin('ttrx');
55
75
  });
@@ -528,5 +548,92 @@ const resources_1 = require("../resources");
528
548
  node_assert_1.default.equal(src_1.Utils.getBase58AddressFromHex(value1.to_address), resources_1.TestRecoverData.baseAddress);
529
549
  });
530
550
  });
551
+ (0, node_test_1.describe)('isWalletAddress', () => {
552
+ (0, node_test_1.it)('should verify root address (index 0)', async function () {
553
+ const result = await basecoin.isWalletAddress({
554
+ address: testWalletData.rootAddress,
555
+ keychains: testWalletData.keychains,
556
+ index: 0,
557
+ });
558
+ node_assert_1.default.equal(result, true);
559
+ });
560
+ (0, node_test_1.it)('should verify receive address (index > 0)', async function () {
561
+ const result = await basecoin.isWalletAddress({
562
+ address: testWalletData.receiveAddress,
563
+ keychains: testWalletData.keychains,
564
+ index: testWalletData.receiveAddressIndex,
565
+ chain: 0,
566
+ });
567
+ node_assert_1.default.equal(result, true);
568
+ });
569
+ (0, node_test_1.it)('should verify address with index in coinSpecific', async function () {
570
+ const result = await basecoin.isWalletAddress({
571
+ address: testWalletData.rootAddress,
572
+ keychains: testWalletData.keychains,
573
+ coinSpecific: { index: 0 },
574
+ });
575
+ node_assert_1.default.equal(result, true);
576
+ });
577
+ (0, node_test_1.it)('should verify address with string index', async function () {
578
+ const result = await basecoin.isWalletAddress({
579
+ address: testWalletData.rootAddress,
580
+ keychains: testWalletData.keychains,
581
+ index: '0',
582
+ });
583
+ node_assert_1.default.equal(result, true);
584
+ });
585
+ (0, node_test_1.it)('should return false for wrong address at index 0', async function () {
586
+ const result = await basecoin.isWalletAddress({
587
+ address: testWalletData.receiveAddress, // wrong address for index 0
588
+ keychains: testWalletData.keychains,
589
+ index: 0,
590
+ });
591
+ node_assert_1.default.equal(result, false);
592
+ });
593
+ (0, node_test_1.it)('should return false for wrong address at receive index', async function () {
594
+ const result = await basecoin.isWalletAddress({
595
+ address: testWalletData.rootAddress, // wrong address for index 1
596
+ keychains: testWalletData.keychains,
597
+ index: testWalletData.receiveAddressIndex,
598
+ chain: 0,
599
+ });
600
+ node_assert_1.default.equal(result, false);
601
+ });
602
+ (0, node_test_1.it)('should throw for invalid address', async function () {
603
+ await node_assert_1.default.rejects(basecoin.isWalletAddress({
604
+ address: 'invalid-address',
605
+ keychains: testWalletData.keychains,
606
+ index: 0,
607
+ }), {
608
+ message: 'Invalid address: invalid-address',
609
+ });
610
+ });
611
+ (0, node_test_1.it)('should throw for missing index', async function () {
612
+ await node_assert_1.default.rejects(basecoin.isWalletAddress({
613
+ address: testWalletData.rootAddress,
614
+ keychains: testWalletData.keychains,
615
+ }), {
616
+ message: 'Invalid or missing index for address verification',
617
+ });
618
+ });
619
+ (0, node_test_1.it)('should throw for missing bitgo key on root address verification', async function () {
620
+ await node_assert_1.default.rejects(basecoin.isWalletAddress({
621
+ address: testWalletData.rootAddress,
622
+ keychains: testWalletData.keychains.slice(0, 2), // only user and backup keys
623
+ index: 0,
624
+ }), {
625
+ message: 'BitGo public key required for root address verification',
626
+ });
627
+ });
628
+ (0, node_test_1.it)('should throw for missing user key on receive address verification', async function () {
629
+ await node_assert_1.default.rejects(basecoin.isWalletAddress({
630
+ address: testWalletData.receiveAddress,
631
+ keychains: [], // no keys
632
+ index: testWalletData.receiveAddressIndex,
633
+ }), {
634
+ message: 'User public key required for receive address verification',
635
+ });
636
+ });
637
+ });
531
638
  });
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyx5Q0FBa0U7QUFDbEUsaURBQStDO0FBQy9DLG1EQUErRDtBQUMvRCwwQ0FBNEI7QUFDNUIsbUNBQTZDO0FBQzdDLDBDQUFvRDtBQUNwRCw0Q0FNc0I7QUFFdEIsSUFBQSxvQkFBUSxFQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUM7SUFFYixJQUFBLGtCQUFNLEVBQUM7UUFDTCxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsY0FBRSxFQUFDLDZCQUE2QixFQUFFO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMscUJBQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxZQUFZLFNBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxjQUFFLEVBQUMsaUJBQWlCLEVBQUUsS0FBSztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFNLENBQUMsQ0FBQztRQUNyQyxN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TSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLHFCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsMkJBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZHLHFCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsMkJBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlLCBkZXNjcmliZSwgaXQsIG1vY2sgfSBmcm9tICdub2RlOnRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHb0FQSSwgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVHJ4LCBUdHJ4LCBVdGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBzaWduVHhPcHRpb25zLCBtb2NrVHggfSBmcm9tICcuLi9maXh0dXJlcyc7XG5pbXBvcnQge1xuICBiYXNlQWRkcmVzc0JhbGFuY2UsXG4gIFNhbXBsZVJhd1Rva2VuU2VuZFR4bixcbiAgcmVjZWl2ZUFkZHJlc3NCYWxhbmNlLFxuICBUZXN0UmVjb3ZlckRhdGEsXG4gIGNyZWF0aW9uVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdUUk9OOicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGJpdGdvLnNhZmVSZWdpc3RlcigndHJ4JywgVHJ4LmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0dHJ4JywgVHRyeC5jcmVhdGVJbnN0YW5jZSk7XG5cbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dHJ4Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0cngnKTtcbiAgICBhc3NlcnQub2soYmFzZWNvaW4gaW5zdGFuY2VvZiBUcngpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpbiBhIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gSlNPTi5zdHJpbmdpZnkobW9ja1R4KTtcbiAgICBjb25zdCBleHBsYWluUGFyYW1zID0ge1xuICAgICAgdHhIZXgsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogMSB9LFxuICAgICAgdHhJRDogbW9ja1R4LnR4SUQsXG4gICAgfTtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluUGFyYW1zKTtcbiAgICBjb25zdCB0b0FkZHJlc3MgPSBVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleChtb2NrVHgucmF3X2RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlLnRvX2FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5pZCwgbW9ja1R4LnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LCAnMTAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLCB0b0FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcxMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAwKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uZmVlLmZlZSwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmV4cGlyYXRpb24sIG1vY2tUeC5yYXdfZGF0YS5leHBpcmF0aW9uKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24udGltZXN0YW1wLCBtb2NrVHgucmF3X2RhdGEudGltZXN0YW1wKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjaGVjayB2YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFkQWRkcmVzc2VzID0gW1xuICAgICAgJycsXG4gICAgICBudWxsLFxuICAgICAgJ3h4eHgnLFxuICAgICAgJ1laMDlmZC0nLFxuICAgICAgJzQxMkMyQkE0QTlGRjZDNTMyMDdEQzVCNjg2QkZFQ0Y3NUVBN0I4MDU3NzInLFxuICAgICAgJzQxMkMyQkE0QTlGRjZDNTMyMDdEQzVCNjg2QkZFQ0Y3NUVBN0I4MCcsXG4gICAgICAnVEJDaHdLWU5hVG80YTRONjhNZTFxRWlpS3NSRHNwWHFMTFonLFxuICAgICAgJzB4OTZiZTExMzk5MmJkYzNiZTI0YzExZjYwMTcwODViNjA1ZDI1MzY0OScsXG4gICAgICAnMHgzNDFxZzM5MjJiMScsXG4gICAgICAnNDFFMEMwRjU4MUQ3RDAyRDQwODI2QzFDNkNCRUU3MUY2MjVENjM0NEQwJyxcbiAgICAgICc0MTJDMkJBNEE5RkY2QzUzMjA3REM1QjY4NkJGRUNGNzVFQTdCODA1NzcnLFxuICAgICAgJzQxODg0MEU2QzU1QjlBREEzMjZEMjExRDgxOEMzNEE5OTRBRUNFRDgwOCcsXG4gICAgICAnNDEyQTJCOUY3NjQxRDA3NTBDMUU4MjJEMEU0OUVGNzY1QzgxMDY1MjRCJyxcbiAgICAgICc0MUE2MTRGODAzQjZGRDc4MDk4NkE0MkM3OEVDOUM3Rjc3RTZERUQxM0MnLFxuICAgICAgJzQxODg0MEU2QzU1QjlBREEzMjZEMjExRDgxOEMzNEE5OTRBRUNFRDgwOCcsXG4gICAgXTtcbiAgICBjb25zdCBnb29kQWRkcmVzc2VzID0gWydUQkNod0tZTmFUbzRhNE42OE1lMXFFaWlLc1JEc3BYcUxwJywgJ1RQY2Y1anRZVWhDTjFYMTR0TjU3N3pGNE5lcGJEWmJ4VDcnXTtcblxuICAgIGJhZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyKSwgZmFsc2UpO1xuICAgIH0pO1xuICAgIGdvb2RBZGRyZXNzZXMubWFwKChhZGRyKSA9PiB7XG4gICAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkciksIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHRoZSBwYXJhbXMgb2JqZWN0IGlzIG1pc3NpbmcgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluUGFyYW1zID0ge1xuICAgICAgZmVlSW5mbzogeyBmZWU6IDEgfSxcbiAgICAgIHR4SUQ6IG1vY2tUeC50eElELFxuICAgICAgdHhIZXg6IG51bGwsXG4gICAgfTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oZXhwbGFpblBhcmFtcyksIHtcbiAgICAgIG1lc3NhZ2U6ICdtaXNzaW5nIGV4cGxhaW4gdHggcGFyYW1ldGVycycsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluIGFuIGhhbGYtc2lnbmVkL2Z1bGx5IHNpZ25lZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IEpTT04uc3RyaW5naWZ5KG1vY2tUeCk7XG4gICAgY29uc3QgZXhwbGFpblBhcmFtcyA9IHtcbiAgICAgIGhhbGZTaWduZWQ6IHsgdHhIZXggfSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAxIH0sXG4gICAgICB0eElEOiBtb2NrVHgudHhJRCxcbiAgICB9O1xuICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKGV4cGxhaW5QYXJhbXMpO1xuICAgIGNvbnN0IHRvQWRkcmVzcyA9IFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KG1vY2tUeC5yYXdfZGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWUudG9fYWRkcmVzcyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmlkLCBtb2NrVHgudHhJRCk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQsICcxMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFkZHJlc3MsIHRvQWRkcmVzcyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzEwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIDApO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5mZWUuZmVlLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uZXhwaXJhdGlvbiwgbW9ja1R4LnJhd19kYXRhLmV4cGlyYXRpb24pO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi50aW1lc3RhbXAsIG1vY2tUeC5yYXdfZGF0YS50aW1lc3RhbXApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYSBoYWxmIHNpZ25lZCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihzaWduVHhPcHRpb25zKTtcbiAgICBjb25zdCB1bnNpZ25lZFR4SnNvbiA9IEpTT04ucGFyc2Uoc2lnblR4T3B0aW9ucy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICBjb25zdCBzaWduZWRUeEpzb24gPSBKU09OLnBhcnNlKHR4LmhhbGZTaWduZWQudHhIZXgpO1xuXG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi50eElELCB1bnNpZ25lZFR4SnNvbi50eElEKTtcbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnJhd19kYXRhX2hleCwgdW5zaWduZWRUeEpzb24ucmF3X2RhdGFfaGV4KTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEpTT04uc3RyaW5naWZ5KHNpZ25lZFR4SnNvbi5yYXdfZGF0YSksIEpTT04uc3RyaW5naWZ5KHVuc2lnbmVkVHhKc29uLnJhd19kYXRhKSk7XG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi5zaWduYXR1cmUubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoXG4gICAgICBzaWduZWRUeEpzb24uc2lnbmF0dXJlWzBdLFxuICAgICAgJzBhOTk0NDMxNjkyNGVjN2ZiYTQ4OTVmMWVhMWU3Y2M5NWY5ZTJiODI4YWUyNjhhNDhhOGRiZWRkZWY0MGM2ZjVlMTI3MTcwYTk1YWVkOWYzZjU0MjViMTMwNThkMGNiNmVmMWY1YzIyMTMxOTBlNDgyZTg3MDQzNjkxZjIyZTY4MDAnXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIHdpdGggYW4gWHBydiBhIGhhbGYgc2lnbmVkIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBwcnY6ICd4cHJ2OXMyMVpyUUgxNDNLMnNnMkN1a2s1WHFMUWRyWW5NQ0RhaDN5MUZGVnk2SHo5YlFmcU1TZm1VaUhQVkhLaGNVeWZ0M04xZW1FNUZ1ZEpWeGdGbTVOMTJNQWc1bzdEVFBzREFUVGt3TmdyNzMnLFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleDogc2lnblR4T3B0aW9ucy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHApO1xuICAgIGNvbnN0IHVuc2lnbmVkVHhKc29uID0gSlNPTi5wYXJzZShzaWduVHhPcHRpb25zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IHNpZ25lZFR4SnNvbiA9IEpTT04ucGFyc2UodHguaGFsZlNpZ25lZC50eEhleCk7XG5cbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnR4SUQsIHVuc2lnbmVkVHhKc29uLnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24ucmF3X2RhdGFfaGV4LCB1bnNpZ25lZFR4SnNvbi5yYXdfZGF0YV9oZXgpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoSlNPTi5zdHJpbmdpZnkoc2lnbmVkVHhKc29uLnJhd19kYXRhKSwgSlNPTi5zdHJpbmdpZnkodW5zaWduZWRUeEpzb24ucmF3X2RhdGEpKTtcbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnNpZ25hdHVyZS5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHNpZ25lZFR4SnNvbi5zaWduYXR1cmVbMF0sXG4gICAgICAnNjVlNTZmNTNhNDU4YzZmODJkMWVmMzliMmNmNWJlNjg1YTkwNmFkMjJiYjAyNjk5ZjkwN2ZjYjcyZWYyNmYxZTkxY2ZjMmI2YTQzYmY1NDMyZmFhMGI2M2JkYzVhZWJmMWRjMmY0OWE2NzVkMjhkMjNmZDdlMDM4YjMzNThiMDYwMCdcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFkZCBmZWVMaW1pdCB0byByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmVlTGltaXQgPSAxMDA7XG4gICAgY29uc3QgYnVpbGRQYXJhbXMgPSB7XG4gICAgICByZWNpcGllbnRzOiBbeyBkYXRhOiAndGVzdCcgfV0sXG4gICAgICBmZWVMaW1pdCxcbiAgICB9O1xuICAgIGJhc2Vjb2luLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgIGFzc2VydC5lcXVhbCgoYnVpbGRQYXJhbXMgYXMgYW55KS5yZWNpcGllbnRzWzBdLmZlZUxpbWl0LCBmZWVMaW1pdCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGRgdCBhZGQgYW55IG5ldyBmaWVsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgIHJlY2lwaWVudHM6IFt7IGRhdGE6ICd0ZXN0JyB9XSxcbiAgICB9O1xuICAgIGNvbnN0IHVubW9kaWZpZWRCdWlsZFBhcmFtcyA9IF8uY2xvbmVEZWVwKGJ1aWxkUGFyYW1zKTtcbiAgICBhd2FpdCBiYXNlY29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJ1aWxkUGFyYW1zLCB1bm1vZGlmaWVkQnVpbGRQYXJhbXMpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtleVBhaXIsICdwdWInKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtleVBhaXIsICdwcnYnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZFB1YihrZXlQYWlyLnB1YiksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkVGV4dCA9XG4gICAgICAgICc4MDM1MGI0MjA4ZDM4MWZiZmUyMjc2YTMyNjYwMzA0OWZlNTAwNzMxYzQ2ZDNjOTkzNmI1Y2UwMzZiNTEzNzdmMjRiYWI3ZGQwYzJhZjdmMTA3NDE2ZWY4NThmZjc5YjA2NzBjNzI0MDZkYWQwNjRlNzJiYjE3ZmMwYTkwMzhiYic7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oc2VlZFRleHQsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIGtleVBhaXIucHViLFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0ZBd3F2U0diazM1a0pmN0NRcWROMXc0Q01VQkJUcUg1ZTNpdmpVNkQ4dWd2OWhSU2dSYlJlbkM0dzNhaFhkTFZhaHdqZ2pYaFN1UUtNZE5kbjU1WTlUTlNhZ0JrdHdzJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAga2V5UGFpci5wcnYsXG4gICAgICAgICd4cHJ2OXMyMVpyUUgxNDNLMmdzTnBRamJOdTkxa2RHaTFOdVdlaThiWjVtWnVWazZtRlBuQnZteGI3TlNKUWRiWlczRkdwSzNZY243am9yQVhjRXpNdnZpR3RieUJ6NXRCcmpmbld5UXAzZzc1RksnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVW5zaWduZWQgU3dlZXAnLCAoKSA9PiB7XG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG1vY2sucmVzZXQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciB0cnggZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oYmFzZUFkZHJIZXgsIGRlc3RpbmF0aW9uSGV4LCA5MDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICdmZWVJbmZvJykpO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZS5hbW91bnQsIDkwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciB0cnggZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcyB3aXRoIHNjYW4gcGFzc2VkIGFzIHZhbGlkIGludGVnZXIgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMzAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb25IZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGRlc3RpbmF0aW9uSGV4ICYmIGFyZ3NbMV0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihiYXNlQWRkckhleCwgZGVzdGluYXRpb25IZXgsIDkwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHNjYW46ICcxMCcsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ2ZlZUluZm8nKSk7XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhd0RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlLmFtb3VudCwgOTAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHJlY292ZXIgdHJ4IGZyb20gYmFzZSBhZGRyZXNzIHRvIHJlY292ZXJ5IGFkZHJlc3Mgd2l0aCBzY2FuIHBhc3NlZCBhcyB2YWxpZCBpbnRlZ2VyIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oYmFzZUFkZHJIZXgsIGRlc3RpbmF0aW9uSGV4LCA5MDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICAgIHNjYW46ICdhYmMnLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHNjYW5uaW5nIGZhY3RvcicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgdHJ4IGZyb20gcmVjZWl2ZSBhZGRyZXNzIHRvIGJhc2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDIwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSgxMDIxMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpcnN0UmVjZWl2ZUFkZHJlc3NIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzFdID09PSBmaXJzdFJlY2VpdmVBZGRyZXNzSGV4ICYmIGFyZ3NbMl0gPT09IDEwMDAwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihmaXJzdFJlY2VpdmVBZGRyZXNzSGV4LCBiYXNlQWRkckhleCwgMTAwMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0eEhleCcpKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAnZmVlSW5mbycpKTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHJlcy50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUuYW1vdW50LCAxMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgdG9rZW4gZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBiYXNlQWRkcmVzc0JhbGFuY2UoMTAwMDAwMDAwLCBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzOiAnMTEwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0VHJpZ2dlclNtYXJ0Q29udHJhY3RUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoU2FtcGxlUmF3VG9rZW5TZW5kVHhuKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICdURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMucmVjb3ZlcnlBbW91bnQsIDExMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5mZWVJbmZvLmZlZSwgJzEwMDAwMDAwMCcpO1xuICAgICAgY29uc3QgZXhwaXJhdGlvbkR1cmF0aW9uID0gcmVzLnR4LnJhd19kYXRhLmV4cGlyYXRpb24gLSByZXMudHgucmF3X2RhdGEudGltZXN0YW1wO1xuICAgICAgYXNzZXJ0Lm9rKGV4cGlyYXRpb25EdXJhdGlvbiA+PSA4NjQwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLmFkZHJlc3NJbmZvLCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5jb250cmFjdF9hZGRyZXNzKSwgJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdHJ4IGJhbGFuY2UgYXQgYmFzZSBhZGRyZXNzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGNvdmVyIHRva2VuIHNlbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgYmFzZUFkZHJlc3NCYWxhbmNlKDEwMDAwMDAsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFRHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenM6ICcxMTAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRUcmlnZ2VyU21hcnRDb250cmFjdFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTYW1wbGVSYXdUb2tlblNlbmRUeG4pO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBcIkFtb3VudCBvZiBmdW5kcyB0byByZWNvdmVyIDEwMDAwMDAgaXMgbGVzcyB0aGFuIDEwMDAwMDAwMCBhbmQgd291bGRuJ3QgYmUgYWJsZSB0byBmdW5kIGEgdHJjMjAgc2VuZFwiLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVW5zaWduZWQgQ29uc29saWRhdGlvbiBSZWNvdmVyaWVzJywgKCkgPT4ge1xuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBtb2NrLnJlc2V0KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHN0YXJ0aW5nU2NhbkluZGV4IGlzIG5vdCBnZSB0byAxJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IC0xLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAnSW52YWxpZCBzdGFydGluZyBvciBlbmRpbmcgaW5kZXggdG8gc2NhbiBmb3IgYWRkcmVzc2VzLiBzdGFydGluZ1NjYW5JbmRleDogLTEsIGVuZGluZ1NjYW5JbmRleDogMTkuJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgc2NhbiBmYWN0b3IgaXMgdG9vIGhpZ2gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMwMCxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0ludmFsaWQgc3RhcnRpbmcgb3IgZW5kaW5nIGluZGV4IHRvIHNjYW4gZm9yIGFkZHJlc3Nlcy4gc3RhcnRpbmdTY2FuSW5kZXg6IDEsIGVuZGluZ1NjYW5JbmRleDogMzAwLicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGNvbnNvbGlkYXRlIHJlY292ZXJpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDEwMjEwMDAwMCwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoNTAwMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IGZpcnN0UmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gMTAwMDAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGZpcnN0UmVjZWl2ZUFkZHJIZXgsIGJhc2VBZGRySGV4LCAxMDAwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gc2Vjb25kUmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gNDc5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oc2Vjb25kUmVjZWl2ZUFkZHJIZXgsIGJhc2VBZGRySGV4LCA0NzkwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHNlY29uZFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiAzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHJhbnNhY3Rpb25zJykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLCAyKTtcbiAgICAgIGNvbnN0IHR4bjEgPSByZXMudHJhbnNhY3Rpb25zWzBdO1xuICAgICAgY29uc3QgcmF3RGF0YTEgPSBKU09OLnBhcnNlKHR4bjEudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhMSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUxID0gcmF3RGF0YTEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlMS5hbW91bnQsIDEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUxLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUxLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgY29uc3QgdHhuMiA9IHJlcy50cmFuc2FjdGlvbnNbMV07XG4gICAgICBjb25zdCByYXdEYXRhMiA9IEpTT04ucGFyc2UodHhuMi50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEyLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZTIgPSByYXdEYXRhMi5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUyLmFtb3VudCwgNDc5MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMi5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTIudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGNvbnNvbGlkYXRlIHRva2VuIHJlY292ZXJpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICByZWNlaXZlQWRkcmVzc0JhbGFuY2UoMjAyMTAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcywgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZDogJzExMDAwMDAwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSg1MDAsIFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IGZpcnN0UmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gMTEwMDAwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihmaXJzdFJlY2VpdmVBZGRySGV4LCBiYXNlQWRkckhleCwgMTEwMDAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZCcsXG4gICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0cmFuc2FjdGlvbnMnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnRyYW5zYWN0aW9ucy5sZW5ndGgsIDEpO1xuICAgICAgY29uc3QgdHhuID0gcmVzLnRyYW5zYWN0aW9uc1swXTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHR4bi50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHZhbHVlLmRhdGEsXG4gICAgICAgICdhOTA1OWNiYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMyNTQyMDI1NWMyYzVhMmRkNTRlZjY5ZjkyZWYyNjFlNmJkNDIxNmEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxOTBhYjAwJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLmNvbnRyYWN0X2FkZHJlc3MpLCAnVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBza2lwIGJ1aWxkaW5nIGNvbnNvbGlkYXRlIHRyYW5zYWN0aW9uIGlmIGJhbGFuY2UgaXMgbG93ZXIgdGhhbiByZXNlcnZlZCBmZWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDEwMjEwMDAwMCwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoMjAwMDAwMCwgVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gZmlyc3RSZWNlaXZlQWRkckhleCAmJiBhcmdzWzJdID09PSAxMDAwMDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oZmlyc3RSZWNlaXZlQWRkckhleCwgYmFzZUFkZHJIZXgsIDEwMDAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0cmFuc2FjdGlvbnMnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnRyYW5zYWN0aW9ucy5sZW5ndGgsIDEpO1xuICAgICAgY29uc3QgdHhuMSA9IHJlcy50cmFuc2FjdGlvbnNbMF07XG4gICAgICBjb25zdCByYXdEYXRhMSA9IEpTT04ucGFyc2UodHhuMS50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGExLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZTEgPSByYXdEYXRhMS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUxLmFtb3VudCwgMTAwMDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTEub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTEudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
639
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyx5Q0FBa0U7QUFDbEUsaURBQStDO0FBQy9DLG1EQUErRDtBQUMvRCwwQ0FBNEI7QUFDNUIsbUNBQTZDO0FBQzdDLDBDQUFvRDtBQUNwRCw0Q0FNc0I7QUFFdEIsSUFBQSxvQkFBUSxFQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFaEQsSUFBSSxRQUFRLENBQUM7SUFFYix5REFBeUQ7SUFDekQsTUFBTSxjQUFjLEdBQUc7UUFDckIsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxjQUFjLEVBQUUsb0NBQW9DO1FBQ3BELG1CQUFtQixFQUFFLENBQUM7UUFDdEIsU0FBUyxFQUFFO1lBQ1Q7Z0JBQ0UsRUFBRSxFQUFFLGtDQUFrQztnQkFDdEMsR0FBRyxFQUFFLGlIQUFpSDthQUN2SDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLEdBQUcsRUFBRSxpSEFBaUg7YUFDdkg7WUFDRDtnQkFDRSxFQUFFLEVBQUUsa0NBQWtDO2dCQUN0QyxHQUFHLEVBQUUsaUhBQWlIO2FBQ3ZIO1NBQ0Y7S0FDRixDQUFDO0lBRUYsSUFBQSxrQkFBTSxFQUFDO1FBQ0wsUUFBUSxHQUFHLEtBQUssQ0FBQyxJ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QyxFQUNGO2dCQUNFLE9BQU8sRUFBRSxtREFBbUQ7YUFDN0QsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFBLGNBQUUsRUFBQyxpRUFBaUUsRUFBRSxLQUFLO1lBQ3pFLE1BQU0scUJBQU0sQ0FBQyxPQUFPLENBQ2xCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxjQUFjLENBQUMsV0FBVztnQkFDbkMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSw0QkFBNEI7Z0JBQzdFLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQyxFQUNGO2dCQUNFLE9BQU8sRUFBRSx5REFBeUQ7YUFDbkUsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFBLGNBQUUsRUFBQyxtRUFBbUUsRUFBRSxLQUFLO1lBQzNFLE1BQU0scUJBQU0sQ0FBQyxPQUFPLENBQ2xCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxjQUFjLENBQUMsY0FBYztnQkFDdEMsU0FBUyxFQUFFLEVBQUUsRUFBRSxVQUFVO2dCQUN6QixLQUFLLEVBQUUsY0FBYyxDQUFDLG1CQUFtQjthQUMxQyxDQUFDLEVBQ0Y7Z0JBQ0UsT0FBTyxFQUFFLDJEQUEyRDthQUNyRSxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlLCBkZXNjcmliZSwgaXQsIG1vY2sgfSBmcm9tICdub2RlOnRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHb0FQSSwgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVHJ4LCBUdHJ4LCBVdGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBzaWduVHhPcHRpb25zLCBtb2NrVHggfSBmcm9tICcuLi9maXh0dXJlcyc7XG5pbXBvcnQge1xuICBiYXNlQWRkcmVzc0JhbGFuY2UsXG4gIFNhbXBsZVJhd1Rva2VuU2VuZFR4bixcbiAgcmVjZWl2ZUFkZHJlc3NCYWxhbmNlLFxuICBUZXN0UmVjb3ZlckRhdGEsXG4gIGNyZWF0aW9uVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdUUk9OOicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGJpdGdvLnNhZmVSZWdpc3RlcigndHJ4JywgVHJ4LmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0dHJ4JywgVHRyeC5jcmVhdGVJbnN0YW5jZSk7XG5cbiAgbGV0IGJhc2Vjb2luO1xuXG4gIC8vIFRlc3QgZGF0YSBmcm9tIHdhbGxldCA2OTNiMDExYTNlYzI2OTg2ZjU2OWIwMjE0MGM3NjI3ZVxuICBjb25zdCB0ZXN0V2FsbGV0RGF0YSA9IHtcbiAgICByb290QWRkcmVzczogJ1RBZjM2YjM2ZXFvTUN6SkptM2p3U3NQODFVdmtNeHJQYmknLFxuICAgIHJlY2VpdmVBZGRyZXNzOiAnVEZhRDZEZUtGTWNCdUd1REQ3TGJicXhUbkt1bmhYZmR5YScsXG4gICAgcmVjZWl2ZUFkZHJlc3NJbmRleDogMixcbiAgICBrZXljaGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICc2OTNiMDExMDI3MWZjM2Y1NzQ5NzU0MDk3NzkzYmI4ZCcsXG4gICAgICAgIHB1YjogJ3hwdWI2NjFNeU13QXFSYmNGc1ZBZFp5TjJtOHAyMVdIWGc4TlJOa3FLQXB5UzVnd21Gc1BkUlRybUhZQ256Ujl2WWU4RFE0dVdHQ0JjQUFzV0Uzcjk3SHNGUzNLMmZhWjJlalhOaEh4ZEVvQUVXQycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzY5M2IwMTEwNjViOWM0Njc0ODI1Y2UxZjg0OWI3YmVmJyxcbiAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0VyS3Bacjl6dFRGSms2ZnpYV2F0TUZnUm5wWGZzanliV0JmRTk4NDdFVkdySEhCc0dQOGZjbnpKbUp1ZXZBYlBVRXBqSFRqRUVXZllVV05NRURhaHZzc1FlaW44NDhvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnNjkzYjAxMTE3YzQxODQ2YWJiMDQ4MTg4MTViODliNmMnLFxuICAgICAgICBwdWI6ICd4cHViNjYxTXlNd0FxUmJjRnFaZDdYVTlERlc0ZjI5Vkp6UXQ3VUNBNTF5cGFXYTV5bWhRMnBSWkRUZ1ZpdzN2WjU2UHFaOGRqMWNyYWNOM2ZBV2hhaUcxUUtqOW12eXQ5Q2JhNG5NMnRQaWJOS3cnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dHJ4Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0cngnKTtcbiAgICBhc3NlcnQub2soYmFzZWNvaW4gaW5zdGFuY2VvZiBUcngpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpbiBhIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4SGV4ID0gSlNPTi5zdHJpbmdpZnkobW9ja1R4KTtcbiAgICBjb25zdCBleHBsYWluUGFyYW1zID0ge1xuICAgICAgdHhIZXgsXG4gICAgICBmZWVJbmZvOiB7IGZlZTogMSB9LFxuICAgICAgdHhJRDogbW9ja1R4LnR4SUQsXG4gICAgfTtcbiAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluUGFyYW1zKTtcbiAgICBjb25zdCB0b0FkZHJlc3MgPSBVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleChtb2NrVHgucmF3X2RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlLnRvX2FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5pZCwgbW9ja1R4LnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LCAnMTAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLCB0b0FkZHJlc3MpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcxMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCAwKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uZmVlLmZlZSwgMSk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmV4cGlyYXRpb24sIG1vY2tUeC5yYXdfZGF0YS5leHBpcmF0aW9uKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24udGltZXN0YW1wLCBtb2NrVHgucmF3X2RhdGEudGltZXN0YW1wKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjaGVjayB2YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmFkQWRkcmVzc2VzID0gW1xuICAgICAgJycsXG4gICAgICBudWxsLFxuICAgICAgJ3h4eHgnLFxuICAgICAgJ1laMDlmZC0nLFxuICAgICAgJzQxMkMyQkE0QTlGRjZDNTMyMDdEQzVCNjg2QkZFQ0Y3NUVBN0I4MDU3NzInLFxuICAgICAgJzQxMkMyQkE0QTlGRjZDNTMyMDdEQzVCNjg2QkZFQ0Y3NUVBN0I4MCcsXG4gICAgICAnVEJDaHdLWU5hVG80YTRONjhNZTFxRWlpS3NSRHNwWHFMTFonLFxuICAgICAgJzB4OTZiZTExMzk5MmJkYzNiZTI0YzExZjYwMTcwODViNjA1ZDI1MzY0OScsXG4gICAgICAnMHgzNDFxZzM5MjJiMScsXG4gICAgICAnNDFFMEMwRjU4MUQ3RDAyRDQwODI2QzFDNkNCRUU3MUY2MjVENjM0NEQwJyxcbiAgICAgICc0MTJDMkJBNEE5RkY2QzUzMjA3REM1QjY4NkJGRUNGNzVFQTdCODA1NzcnLFxuICAgICAgJzQxODg0MEU2QzU1QjlBREEzMjZEMjExRDgxOEMzNEE5OTRBRUNFRDgwOCcsXG4gICAgICAnNDEyQTJCOUY3NjQxRDA3NTBDMUU4MjJEMEU0OUVGNzY1QzgxMDY1MjRCJyxcbiAgICAgICc0MUE2MTRGODAzQjZGRDc4MDk4NkE0MkM3OEVDOUM3Rjc3RTZERUQxM0MnLFxuICAgICAgJzQxODg0MEU2QzU1QjlBREEzMjZEMjExRDgxOEMzNEE5OTRBRUNFRDgwOCcsXG4gICAgXTtcbiAgICBjb25zdCBnb29kQWRkcmVzc2VzID0gWydUQkNod0tZTmFUbzRhNE42OE1lMXFFaWlLc1JEc3BYcUxwJywgJ1RQY2Y1anRZVWhDTjFYMTR0TjU3N3pGNE5lcGJEWmJ4VDcnXTtcblxuICAgIGJhZEFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHtcbiAgICAgIGFzc2VydC5lcXVhbChiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyKSwgZmFsc2UpO1xuICAgIH0pO1xuICAgIGdvb2RBZGRyZXNzZXMubWFwKChhZGRyKSA9PiB7XG4gICAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkciksIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHRoZSBwYXJhbXMgb2JqZWN0IGlzIG1pc3NpbmcgcGFyYW1ldGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBsYWluUGFyYW1zID0ge1xuICAgICAgZmVlSW5mbzogeyBmZWU6IDEgfSxcbiAgICAgIHR4SUQ6IG1vY2tUeC50eElELFxuICAgICAgdHhIZXg6IG51bGwsXG4gICAgfTtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oZXhwbGFpblBhcmFtcyksIHtcbiAgICAgIG1lc3NhZ2U6ICdtaXNzaW5nIGV4cGxhaW4gdHggcGFyYW1ldGVycycsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluIGFuIGhhbGYtc2lnbmVkL2Z1bGx5IHNpZ25lZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEhleCA9IEpTT04uc3RyaW5naWZ5KG1vY2tUeCk7XG4gICAgY29uc3QgZXhwbGFpblBhcmFtcyA9IHtcbiAgICAgIGhhbGZTaWduZWQ6IHsgdHhIZXggfSxcbiAgICAgIGZlZUluZm86IHsgZmVlOiAxIH0sXG4gICAgICB0eElEOiBtb2NrVHgudHhJRCxcbiAgICB9O1xuICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKGV4cGxhaW5QYXJhbXMpO1xuICAgIGNvbnN0IHRvQWRkcmVzcyA9IFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KG1vY2tUeC5yYXdfZGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWUudG9fYWRkcmVzcyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmlkLCBtb2NrVHgudHhJRCk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQsICcxMCcpO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFkZHJlc3MsIHRvQWRkcmVzcyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzEwJyk7XG4gICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIDApO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5mZWUuZmVlLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uZXhwaXJhdGlvbiwgbW9ja1R4LnJhd19kYXRhLmV4cGlyYXRpb24pO1xuICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi50aW1lc3RhbXAsIG1vY2tUeC5yYXdfZGF0YS50aW1lc3RhbXApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYSBoYWxmIHNpZ25lZCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihzaWduVHhPcHRpb25zKTtcbiAgICBjb25zdCB1bnNpZ25lZFR4SnNvbiA9IEpTT04ucGFyc2Uoc2lnblR4T3B0aW9ucy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICBjb25zdCBzaWduZWRUeEpzb24gPSBKU09OLnBhcnNlKHR4LmhhbGZTaWduZWQudHhIZXgpO1xuXG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi50eElELCB1bnNpZ25lZFR4SnNvbi50eElEKTtcbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnJhd19kYXRhX2hleCwgdW5zaWduZWRUeEpzb24ucmF3X2RhdGFfaGV4KTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEpTT04uc3RyaW5naWZ5KHNpZ25lZFR4SnNvbi5yYXdfZGF0YSksIEpTT04uc3RyaW5naWZ5KHVuc2lnbmVkVHhKc29uLnJhd19kYXRhKSk7XG4gICAgYXNzZXJ0LmVxdWFsKHNpZ25lZFR4SnNvbi5zaWduYXR1cmUubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuZXF1YWwoXG4gICAgICBzaWduZWRUeEpzb24uc2lnbmF0dXJlWzBdLFxuICAgICAgJzBhOTk0NDMxNjkyNGVjN2ZiYTQ4OTVmMWVhMWU3Y2M5NWY5ZTJiODI4YWUyNjhhNDhhOGRiZWRkZWY0MGM2ZjVlMTI3MTcwYTk1YWVkOWYzZjU0MjViMTMwNThkMGNiNmVmMWY1YzIyMTMxOTBlNDgyZTg3MDQzNjkxZjIyZTY4MDAnXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIHdpdGggYW4gWHBydiBhIGhhbGYgc2lnbmVkIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBwcnY6ICd4cHJ2OXMyMVpyUUgxNDNLMnNnMkN1a2s1WHFMUWRyWW5NQ0RhaDN5MUZGVnk2SHo5YlFmcU1TZm1VaUhQVkhLaGNVeWZ0M04xZW1FNUZ1ZEpWeGdGbTVOMTJNQWc1bzdEVFBzREFUVGt3TmdyNzMnLFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleDogc2lnblR4T3B0aW9ucy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHApO1xuICAgIGNvbnN0IHVuc2lnbmVkVHhKc29uID0gSlNPTi5wYXJzZShzaWduVHhPcHRpb25zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IHNpZ25lZFR4SnNvbiA9IEpTT04ucGFyc2UodHguaGFsZlNpZ25lZC50eEhleCk7XG5cbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnR4SUQsIHVuc2lnbmVkVHhKc29uLnR4SUQpO1xuICAgIGFzc2VydC5lcXVhbChzaWduZWRUeEpzb24ucmF3X2RhdGFfaGV4LCB1bnNpZ25lZFR4SnNvbi5yYXdfZGF0YV9oZXgpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoSlNPTi5zdHJpbmdpZnkoc2lnbmVkVHhKc29uLnJhd19kYXRhKSwgSlNPTi5zdHJpbmdpZnkodW5zaWduZWRUeEpzb24ucmF3X2RhdGEpKTtcbiAgICBhc3NlcnQuZXF1YWwoc2lnbmVkVHhKc29uLnNpZ25hdHVyZS5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHNpZ25lZFR4SnNvbi5zaWduYXR1cmVbMF0sXG4gICAgICAnNjVlNTZmNTNhNDU4YzZmODJkMWVmMzliMmNmNWJlNjg1YTkwNmFkMjJiYjAyNjk5ZjkwN2ZjYjcyZWYyNmYxZTkxY2ZjMmI2YTQzYmY1NDMyZmFhMGI2M2JkYzVhZWJmMWRjMmY0OWE2NzVkMjhkMjNmZDdlMDM4YjMzNThiMDYwMCdcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFkZCBmZWVMaW1pdCB0byByZWNpcGllbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmVlTGltaXQgPSAxMDA7XG4gICAgY29uc3QgYnVpbGRQYXJhbXMgPSB7XG4gICAgICByZWNpcGllbnRzOiBbeyBkYXRhOiAndGVzdCcgfV0sXG4gICAgICBmZWVMaW1pdCxcbiAgICB9O1xuICAgIGJhc2Vjb2luLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgIGFzc2VydC5lcXVhbCgoYnVpbGRQYXJhbXMgYXMgYW55KS5yZWNpcGllbnRzWzBdLmZlZUxpbWl0LCBmZWVMaW1pdCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGRgdCBhZGQgYW55IG5ldyBmaWVsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZFBhcmFtcyA9IHtcbiAgICAgIHJlY2lwaWVudHM6IFt7IGRhdGE6ICd0ZXN0JyB9XSxcbiAgICB9O1xuICAgIGNvbnN0IHVubW9kaWZpZWRCdWlsZFBhcmFtcyA9IF8uY2xvbmVEZWVwKGJ1aWxkUGFyYW1zKTtcbiAgICBhd2FpdCBiYXNlY29pbi5nZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJ1aWxkUGFyYW1zLCB1bm1vZGlmaWVkQnVpbGRQYXJhbXMpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtleVBhaXIsICdwdWInKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtleVBhaXIsICdwcnYnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwoYmFzZWNvaW4uaXNWYWxpZFB1YihrZXlQYWlyLnB1YiksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkVGV4dCA9XG4gICAgICAgICc4MDM1MGI0MjA4ZDM4MWZiZmUyMjc2YTMyNjYwMzA0OWZlNTAwNzMxYzQ2ZDNjOTkzNmI1Y2UwMzZiNTEzNzdmMjRiYWI3ZGQwYzJhZjdmMTA3NDE2ZWY4NThmZjc5YjA2NzBjNzI0MDZkYWQwNjRlNzJiYjE3ZmMwYTkwMzhiYic7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oc2VlZFRleHQsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIGtleVBhaXIucHViLFxuICAgICAgICAneHB1YjY2MU15TXdBcVJiY0ZBd3F2U0diazM1a0pmN0NRcWROMXc0Q01VQkJUcUg1ZTNpdmpVNkQ4dWd2OWhSU2dSYlJlbkM0dzNhaFhkTFZhaHdqZ2pYaFN1UUtNZE5kbjU1WTlUTlNhZ0JrdHdzJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAga2V5UGFpci5wcnYsXG4gICAgICAgICd4cHJ2OXMyMVpyUUgxNDNLMmdzTnBRamJOdTkxa2RHaTFOdVdlaThiWjVtWnVWazZtRlBuQnZteGI3TlNKUWRiWlczRkdwSzNZY243am9yQVhjRXpNdnZpR3RieUJ6NXRCcmpmbld5UXAzZzc1RksnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVW5zaWduZWQgU3dlZXAnLCAoKSA9PiB7XG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIG1vY2sucmVzZXQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciB0cnggZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oYmFzZUFkZHJIZXgsIGRlc3RpbmF0aW9uSGV4LCA5MDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQubm90RXF1YWwocmVzLmxlbmd0aCwgMCk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ3R4SGV4JykpO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICdmZWVJbmZvJykpO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbCh2YWx1ZS5hbW91bnQsIDkwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVjb3ZlciB0cnggZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcyB3aXRoIHNjYW4gcGFzc2VkIGFzIHZhbGlkIGludGVnZXIgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRBY2NvdW50QmFsYW5jZXNGcm9tTm9kZScsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNlQWRkcmVzc0JhbGFuY2UoMzAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb25IZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGRlc3RpbmF0aW9uSGV4ICYmIGFyZ3NbMV0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMl0gPT09IDkwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihiYXNlQWRkckhleCwgZGVzdGluYXRpb25IZXgsIDkwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHNjYW46ICcxMCcsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHhIZXgnKSk7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgJ2ZlZUluZm8nKSk7XG4gICAgICBjb25zdCByYXdEYXRhID0gSlNPTi5wYXJzZShyZXMudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhd0RhdGEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlLmFtb3VudCwgOTAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS50b19hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHJlY292ZXIgdHJ4IGZyb20gYmFzZSBhZGRyZXNzIHRvIHJlY292ZXJ5IGFkZHJlc3Mgd2l0aCBzY2FuIHBhc3NlZCBhcyB2YWxpZCBpbnRlZ2VyIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDMwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBkZXN0aW5hdGlvbkhleCAmJiBhcmdzWzFdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzJdID09PSA5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oYmFzZUFkZHJIZXgsIGRlc3RpbmF0aW9uSGV4LCA5MDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICAgIHNjYW46ICdhYmMnLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHNjYW5uaW5nIGZhY3RvcicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgdHJ4IGZyb20gcmVjZWl2ZSBhZGRyZXNzIHRvIGJhc2UgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzZUFkZHJlc3NCYWxhbmNlKDIwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSgxMDIxMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpcnN0UmVjZWl2ZUFkZHJlc3NIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgY29uc3QgYmFzZUFkZHJIZXggPSBVdGlscy5nZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3MoVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRCdWlsZFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBiYXNlQWRkckhleCAmJiBhcmdzWzFdID09PSBmaXJzdFJlY2VpdmVBZGRyZXNzSGV4ICYmIGFyZ3NbMl0gPT09IDEwMDAwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihmaXJzdFJlY2VpdmVBZGRyZXNzSGV4LCBiYXNlQWRkckhleCwgMTAwMDAwMDAwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBUZXN0UmVjb3ZlckRhdGEucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0eEhleCcpKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAnZmVlSW5mbycpKTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHJlcy50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUuYW1vdW50LCAxMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgdG9rZW4gZnJvbSBiYXNlIGFkZHJlc3MgdG8gcmVjb3ZlcnkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QWNjb3VudEJhbGFuY2VzRnJvbU5vZGUnLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBiYXNlQWRkcmVzc0JhbGFuY2UoMTAwMDAwMDAwLCBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzOiAnMTEwMDAwMDAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0VHJpZ2dlclNtYXJ0Q29udHJhY3RUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoU2FtcGxlUmF3VG9rZW5TZW5kVHhuKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogVGVzdFJlY292ZXJEYXRhLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6ICdURzNYWHlFeEJrUHA5bnpkYWpEWnNvekV1NEJrYVNKb3pzJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVGVzdFJlY292ZXJEYXRhLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXMucmVjb3ZlcnlBbW91bnQsIDExMDAwMDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy5mZWVJbmZvLmZlZSwgJzEwMDAwMDAwMCcpO1xuICAgICAgY29uc3QgZXhwaXJhdGlvbkR1cmF0aW9uID0gcmVzLnR4LnJhd19kYXRhLmV4cGlyYXRpb24gLSByZXMudHgucmF3X2RhdGEudGltZXN0YW1wO1xuICAgICAgYXNzZXJ0Lm9rKGV4cGlyYXRpb25EdXJhdGlvbiA+PSA4NjQwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLmFkZHJlc3NJbmZvLCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgcmF3RGF0YSA9IEpTT04ucGFyc2UocmVzLnR4SGV4KS5yYXdfZGF0YTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3RGF0YSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXdEYXRhLmNvbnRyYWN0WzBdLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmJhc2VBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5jb250cmFjdF9hZGRyZXNzKSwgJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdHJ4IGJhbGFuY2UgYXQgYmFzZSBhZGRyZXNzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGNvdmVyIHRva2VuIHNlbmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgYmFzZUFkZHJlc3NCYWxhbmNlKDEwMDAwMDAsIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFRHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenM6ICcxMTAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgICAgbW9jay5tZXRob2QoVHJ4LnByb3RvdHlwZSBhcyBhbnksICdnZXRUcmlnZ2VyU21hcnRDb250cmFjdFRyYW5zYWN0aW9uJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTYW1wbGVSYXdUb2tlblNlbmRUeG4pO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRlc3RSZWNvdmVyRGF0YS5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBcIkFtb3VudCBvZiBmdW5kcyB0byByZWNvdmVyIDEwMDAwMDAgaXMgbGVzcyB0aGFuIDEwMDAwMDAwMCBhbmQgd291bGRuJ3QgYmUgYWJsZSB0byBmdW5kIGEgdHJjMjAgc2VuZFwiLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgVW5zaWduZWQgQ29uc29saWRhdGlvbiBSZWNvdmVyaWVzJywgKCkgPT4ge1xuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBtb2NrLnJlc2V0KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHN0YXJ0aW5nU2NhbkluZGV4IGlzIG5vdCBnZSB0byAxJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgICAgdXNlcktleTogVGVzdFJlY292ZXJEYXRhLnVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgICAgc3RhcnRpbmdTY2FuSW5kZXg6IC0xLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAnSW52YWxpZCBzdGFydGluZyBvciBlbmRpbmcgaW5kZXggdG8gc2NhbiBmb3IgYWRkcmVzc2VzLiBzdGFydGluZ1NjYW5JbmRleDogLTEsIGVuZGluZ1NjYW5JbmRleDogMTkuJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgc2NhbiBmYWN0b3IgaXMgdG9vIGhpZ2gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4ucmVjb3ZlckNvbnNvbGlkYXRpb25zKHtcbiAgICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IFRlc3RSZWNvdmVyRGF0YS5iaXRnb0tleSxcbiAgICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMwMCxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0ludmFsaWQgc3RhcnRpbmcgb3IgZW5kaW5nIGluZGV4IHRvIHNjYW4gZm9yIGFkZHJlc3Nlcy4gc3RhcnRpbmdTY2FuSW5kZXg6IDEsIGVuZGluZ1NjYW5JbmRleDogMzAwLicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGNvbnNvbGlkYXRlIHJlY292ZXJpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDEwMjEwMDAwMCwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoNTAwMDAwMDAsIFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IGZpcnN0UmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gMTAwMDAwMDAwKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGlvblRyYW5zYWN0aW9uKGZpcnN0UmVjZWl2ZUFkZHJIZXgsIGJhc2VBZGRySGV4LCAxMDAwMDAwMDApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gc2Vjb25kUmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gNDc5MDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oc2Vjb25kUmVjZWl2ZUFkZHJIZXgsIGJhc2VBZGRySGV4LCA0NzkwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHNlY29uZFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBjb25zdCBiYXNlQWRkckhleCA9IFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyQ29uc29saWRhdGlvbnMoe1xuICAgICAgICB1c2VyS2V5OiBUZXN0UmVjb3ZlckRhdGEudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBUZXN0UmVjb3ZlckRhdGEuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogVGVzdFJlY292ZXJEYXRhLmJpdGdvS2V5LFxuICAgICAgICBzdGFydGluZ1NjYW5JbmRleDogMSxcbiAgICAgICAgZW5kaW5nU2NhbkluZGV4OiAzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5ub3RFcXVhbChyZXMubGVuZ3RoLCAwKTtcbiAgICAgIGFzc2VydC5vayhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCAndHJhbnNhY3Rpb25zJykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlcy50cmFuc2FjdGlvbnMubGVuZ3RoLCAyKTtcbiAgICAgIGNvbnN0IHR4bjEgPSByZXMudHJhbnNhY3Rpb25zWzBdO1xuICAgICAgY29uc3QgcmF3RGF0YTEgPSBKU09OLnBhcnNlKHR4bjEudHhIZXgpLnJhd19kYXRhO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdEYXRhMSwgJ2NvbnRyYWN0JykpO1xuICAgICAgY29uc3QgdmFsdWUxID0gcmF3RGF0YTEuY29udHJhY3RbMF0ucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHZhbHVlMS5hbW91bnQsIDEwMDAwMDAwMCk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUxLm93bmVyX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcyk7XG4gICAgICBhc3NlcnQuZXF1YWwoVXRpbHMuZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgodmFsdWUxLnRvX2FkZHJlc3MpLCBUZXN0UmVjb3ZlckRhdGEuYmFzZUFkZHJlc3MpO1xuICAgICAgY29uc3QgdHhuMiA9IHJlcy50cmFuc2FjdGlvbnNbMV07XG4gICAgICBjb25zdCByYXdEYXRhMiA9IEpTT04ucGFyc2UodHhuMi50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEyLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZTIgPSByYXdEYXRhMi5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUyLmFtb3VudCwgNDc5MDAwMDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlMi5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTIudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGNvbnNvbGlkYXRlIHRva2VuIHJlY292ZXJpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICByZWNlaXZlQWRkcmVzc0JhbGFuY2UoMjAyMTAwMDAwLCBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcywgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZDogJzExMDAwMDAwMDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuc2Vjb25kUmVjZWl2ZUFkZHJlc3MpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlY2VpdmVBZGRyZXNzQmFsYW5jZSg1MDAsIFRlc3RSZWNvdmVyRGF0YS5zZWNvbmRSZWNlaXZlQWRkcmVzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEJ1aWxkVHJhbnNhY3Rpb24nLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gPT09IGJhc2VBZGRySGV4ICYmIGFyZ3NbMV0gPT09IGZpcnN0UmVjZWl2ZUFkZHJIZXggJiYgYXJnc1syXSA9PT0gMTEwMDAwMDAwMCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRpb25UcmFuc2FjdGlvbihmaXJzdFJlY2VpdmVBZGRySGV4LCBiYXNlQWRkckhleCwgMTEwMDAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZCcsXG4gICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0cmFuc2FjdGlvbnMnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnRyYW5zYWN0aW9ucy5sZW5ndGgsIDEpO1xuICAgICAgY29uc3QgdHhuID0gcmVzLnRyYW5zYWN0aW9uc1swXTtcbiAgICAgIGNvbnN0IHJhd0RhdGEgPSBKU09OLnBhcnNlKHR4bi50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGEsICdjb250cmFjdCcpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3RGF0YS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHZhbHVlLmRhdGEsXG4gICAgICAgICdhOTA1OWNiYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMyNTQyMDI1NWMyYzVhMmRkNTRlZjY5ZjkyZWYyNjFlNmJkNDIxNmEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxOTBhYjAwJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZS5vd25lcl9hZGRyZXNzKSwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFV0aWxzLmdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KHZhbHVlLmNvbnRyYWN0X2FkZHJlc3MpLCAnVFNkWndOcXBIb2Z6UDZCc0JLR1FVV2RCZUpwaExtRjZpZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBza2lwIGJ1aWxkaW5nIGNvbnNvbGlkYXRlIHRyYW5zYWN0aW9uIGlmIGJhbGFuY2UgaXMgbG93ZXIgdGhhbiByZXNlcnZlZCBmZWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrLm1ldGhvZChUcngucHJvdG90eXBlIGFzIGFueSwgJ2dldEFjY291bnRCYWxhbmNlc0Zyb21Ob2RlJywgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdID09PSBUZXN0UmVjb3ZlckRhdGEuZmlyc3RSZWNlaXZlQWRkcmVzcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVjZWl2ZUFkZHJlc3NCYWxhbmNlKDEwMjEwMDAwMCwgVGVzdFJlY292ZXJEYXRhLmZpcnN0UmVjZWl2ZUFkZHJlc3MpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWNlaXZlQWRkcmVzc0JhbGFuY2UoMjAwMDAwMCwgVGVzdFJlY292ZXJEYXRhLnNlY29uZFJlY2VpdmVBZGRyZXNzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICAgIG1vY2subWV0aG9kKFRyeC5wcm90b3R5cGUgYXMgYW55LCAnZ2V0QnVpbGRUcmFuc2FjdGlvbicsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSA9PT0gYmFzZUFkZHJIZXggJiYgYXJnc1sxXSA9PT0gZmlyc3RSZWNlaXZlQWRkckhleCAmJiBhcmdzWzJdID09PSAxMDAwMDAwMDApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0aW9uVHJhbnNhY3Rpb24oZmlyc3RSZWNlaXZlQWRkckhleCwgYmFzZUFkZHJIZXgsIDEwMDAwMDAwMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaXJzdFJlY2VpdmVBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGNvbnN0IGJhc2VBZGRySGV4ID0gVXRpbHMuZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXJDb25zb2xpZGF0aW9ucyh7XG4gICAgICAgIHVzZXJLZXk6IFRlc3RSZWNvdmVyRGF0YS51c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXk6IFRlc3RSZWNvdmVyRGF0YS5iYWNrdXBLZXksXG4gICAgICAgIGJpdGdvS2V5OiBUZXN0UmVjb3ZlckRhdGEuYml0Z29LZXksXG4gICAgICAgIHN0YXJ0aW5nU2NhbkluZGV4OiAxLFxuICAgICAgICBlbmRpbmdTY2FuSW5kZXg6IDMsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKHJlcy5sZW5ndGgsIDApO1xuICAgICAgYXNzZXJ0Lm9rKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXMsICd0cmFuc2FjdGlvbnMnKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzLnRyYW5zYWN0aW9ucy5sZW5ndGgsIDEpO1xuICAgICAgY29uc3QgdHhuMSA9IHJlcy50cmFuc2FjdGlvbnNbMF07XG4gICAgICBjb25zdCByYXdEYXRhMSA9IEpTT04ucGFyc2UodHhuMS50eEhleCkucmF3X2RhdGE7XG4gICAgICBhc3NlcnQub2soT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd0RhdGExLCAnY29udHJhY3QnKSk7XG4gICAgICBjb25zdCB2YWx1ZTEgPSByYXdEYXRhMS5jb250cmFjdFswXS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICBhc3NlcnQuZXF1YWwodmFsdWUxLmFtb3VudCwgMTAwMDAwMDAwKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTEub3duZXJfYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5maXJzdFJlY2VpdmVBZGRyZXNzKTtcbiAgICAgIGFzc2VydC5lcXVhbChVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2YWx1ZTEudG9fYWRkcmVzcyksIFRlc3RSZWNvdmVyRGF0YS5iYXNlQWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1dhbGxldEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgcm9vdCBhZGRyZXNzIChpbmRleCAwKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgcmVjZWl2ZSBhZGRyZXNzIChpbmRleCA+IDApJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3MsXG4gICAgICAgIGtleWNoYWluczogdGVzdFdhbGxldERhdGEua2V5Y2hhaW5zLFxuICAgICAgICBpbmRleDogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3NJbmRleCxcbiAgICAgICAgY2hhaW46IDAsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIGluZGV4IGluIGNvaW5TcGVjaWZpYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgY29pblNwZWNpZmljOiB7IGluZGV4OiAwIH0sXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIHN0cmluZyBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RXYWxsZXREYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6ICcwJyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgYWRkcmVzcyBhdCBpbmRleCAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucmVjZWl2ZUFkZHJlc3MsIC8vIHdyb25nIGFkZHJlc3MgZm9yIGluZGV4IDBcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgYWRkcmVzcyBhdCByZWNlaXZlIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucm9vdEFkZHJlc3MsIC8vIHdyb25nIGFkZHJlc3MgZm9yIGluZGV4IDFcbiAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgIGluZGV4OiB0ZXN0V2FsbGV0RGF0YS5yZWNlaXZlQWRkcmVzc0luZGV4LFxuICAgICAgICBjaGFpbjogMCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogJ2ludmFsaWQtYWRkcmVzcycsXG4gICAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgYWRkcmVzczogaW52YWxpZC1hZGRyZXNzJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIG1pc3NpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IHRlc3RXYWxsZXREYXRhLmtleWNoYWlucyxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBvciBtaXNzaW5nIGluZGV4IGZvciBhZGRyZXNzIHZlcmlmaWNhdGlvbicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIGJpdGdvIGtleSBvbiByb290IGFkZHJlc3MgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdFdhbGxldERhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiB0ZXN0V2FsbGV0RGF0YS5rZXljaGFpbnMuc2xpY2UoMCwgMiksIC8vIG9ubHkgdXNlciBhbmQgYmFja3VwIGtleXNcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiAnQml0R28gcHVibGljIGtleSByZXF1aXJlZCBmb3Igcm9vdCBhZGRyZXNzIHZlcmlmaWNhdGlvbicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIHVzZXIga2V5IG9uIHJlY2VpdmUgYWRkcmVzcyB2ZXJpZmljYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0V2FsbGV0RGF0YS5yZWNlaXZlQWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLCAvLyBubyBrZXlzXG4gICAgICAgICAgaW5kZXg6IHRlc3RXYWxsZXREYXRhLnJlY2VpdmVBZGRyZXNzSW5kZXgsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogJ1VzZXIgcHVibGljIGtleSByZXF1aXJlZCBmb3IgcmVjZWl2ZSBhZGRyZXNzIHZlcmlmaWNhdGlvbicsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=