@bitgo/sdk-core 38.10.0 → 38.12.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.
Files changed (113) hide show
  1. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +10 -1
  2. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  4. package/dist/src/bitgo/bitgoBase.d.ts +2 -2
  5. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  6. package/dist/src/bitgo/bitgoBase.js +1 -1
  7. package/dist/src/bitgo/keychain/iKeychains.d.ts +7 -3
  8. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  9. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  10. package/dist/src/bitgo/keychain/keychains.d.ts +2 -2
  11. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  12. package/dist/src/bitgo/keychain/keychains.js +17 -8
  13. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +67 -0
  14. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
  15. package/dist/src/bitgo/safe/derivableEd25519Pub.js +156 -0
  16. package/dist/src/bitgo/safe/index.d.ts +1 -0
  17. package/dist/src/bitgo/safe/index.d.ts.map +1 -1
  18. package/dist/src/bitgo/safe/index.js +2 -1
  19. package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
  20. package/dist/src/bitgo/safe/safe.js +3 -1
  21. package/dist/src/bitgo/safe/safeDerivation.d.ts +19 -4
  22. package/dist/src/bitgo/safe/safeDerivation.d.ts.map +1 -1
  23. package/dist/src/bitgo/safe/safeDerivation.js +60 -17
  24. package/dist/src/bitgo/staking/iStakingWallet.d.ts +1 -1
  25. package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
  26. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +12 -1
  27. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -1
  28. package/dist/src/bitgo/tss/bitgoPubKeys.js +22 -2
  29. package/dist/src/bitgo/tss/common.d.ts +2 -1
  30. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  31. package/dist/src/bitgo/tss/common.js +1 -1
  32. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  33. package/dist/src/bitgo/utils/mpcUtils.js +16 -1
  34. package/dist/src/bitgo/utils/opengpgUtils.d.ts +1 -0
  35. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  36. package/dist/src/bitgo/utils/opengpgUtils.js +5 -1
  37. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +6 -2
  38. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  39. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +32 -7
  40. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +12 -0
  41. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  42. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  43. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  44. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +5 -1
  45. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +11 -0
  46. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  47. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +33 -6
  48. package/dist/src/bitgo/utils/tss/index.d.ts +2 -0
  49. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  50. package/dist/src/bitgo/utils/tss/index.js +4 -2
  51. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +1 -1
  52. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
  53. package/dist/src/bitgo/utils/tss/recipientUtils.js +4 -3
  54. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts +29 -0
  55. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts.map +1 -0
  56. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.js +126 -0
  57. package/dist/src/bitgo/utils/tss/redpallas/index.d.ts +4 -0
  58. package/dist/src/bitgo/utils/tss/redpallas/index.d.ts.map +1 -0
  59. package/dist/src/bitgo/utils/tss/redpallas/index.js +20 -0
  60. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +27 -0
  61. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  62. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.js +43 -0
  63. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts +45 -0
  64. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -0
  65. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.js +55 -0
  66. package/dist/src/bitgo/utils/tss/signableConsistency.d.ts +12 -0
  67. package/dist/src/bitgo/utils/tss/signableConsistency.d.ts.map +1 -0
  68. package/dist/src/bitgo/utils/tss/signableConsistency.js +9 -0
  69. package/dist/src/bitgo/wallet/BuildParams.d.ts +1 -0
  70. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  71. package/dist/src/bitgo/wallet/BuildParams.js +3 -1
  72. package/dist/src/bitgo/wallet/iWallet.d.ts +22 -0
  73. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  74. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  75. package/dist/src/bitgo/wallet/safeKeychain.d.ts +2 -2
  76. package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
  77. package/dist/src/bitgo/wallet/safeKeychain.js +9 -9
  78. package/dist/src/bitgo/wallet/wallet.d.ts +5 -1
  79. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  80. package/dist/src/bitgo/wallet/wallet.js +30 -10
  81. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  82. package/dist/src/bitgo/wallet/wallets.js +150 -87
  83. package/dist/src/index.d.ts +1 -1
  84. package/dist/src/index.d.ts.map +1 -1
  85. package/dist/src/index.js +3 -2
  86. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts +2 -0
  87. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
  88. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +122 -0
  89. package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +145 -0
  90. package/dist/test/unit/bitgo/safe/safe.js +16 -1
  91. package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts +2 -0
  92. package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  93. package/dist/test/unit/bitgo/tss/bitgoPubKeys.js +66 -0
  94. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts +2 -0
  95. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts.map +1 -0
  96. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.js +106 -0
  97. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +38 -1
  98. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +14 -1
  99. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +2 -0
  100. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  101. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.js +80 -0
  102. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts +2 -0
  103. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts.map +1 -0
  104. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.js +279 -0
  105. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts +2 -0
  106. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts.map +1 -0
  107. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.js +111 -0
  108. package/dist/test/unit/bitgo/wallet/BuildParams.js +13 -1
  109. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +83 -4
  110. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +33 -13
  111. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +8 -3
  112. package/dist/tsconfig.tsbuildinfo +1 -1
  113. package/package.json +7 -7
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const sinon = __importStar(require("sinon"));
41
+ const mpcUtils_1 = require("../../../../src/bitgo/utils/mpcUtils");
42
+ const src_1 = require("../../../../src");
43
+ class TestMpcUtils extends mpcUtils_1.MpcUtils {
44
+ createKeychains() {
45
+ return Promise.reject(new Error('unused'));
46
+ }
47
+ }
48
+ describe('populateIntent wrapApprove / wrap', function () {
49
+ const reqId = new src_1.RequestTracer();
50
+ let mpcUtils;
51
+ let coin;
52
+ beforeEach(function () {
53
+ const mockBitgo = { getEnv: sinon.stub().returns('test') };
54
+ coin = {
55
+ getChain: () => 'hteth',
56
+ getFamily: () => 'eth',
57
+ isEVM: () => true,
58
+ supportsTss: () => true,
59
+ };
60
+ mpcUtils = new TestMpcUtils(mockBitgo, coin);
61
+ });
62
+ afterEach(function () {
63
+ sinon.restore();
64
+ });
65
+ it('flattens wrapParams onto wrapApprove intent', function () {
66
+ const wrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
67
+ const feeOptions = { maxFeePerGas: 3000000000, maxPriorityFeePerGas: 2000000000 };
68
+ const intent = mpcUtils.populateIntent(coin, {
69
+ reqId,
70
+ intentType: 'wrapApprove',
71
+ wrapParams,
72
+ feeOptions,
73
+ });
74
+ assert_1.default.strictEqual(intent.intentType, 'wrapApprove');
75
+ assert_1.default.strictEqual(intent.tokenName, wrapParams.tokenName);
76
+ assert_1.default.strictEqual(intent.amount, wrapParams.amount);
77
+ assert_1.default.deepStrictEqual(intent.feeOptions, feeOptions);
78
+ assert_1.default.strictEqual(intent.recipients, undefined);
79
+ });
80
+ it('flattens wrapParams onto wrap intent', function () {
81
+ const wrapParams = { tokenName: 'hteth:cusdt', amount: '1000000' };
82
+ const intent = mpcUtils.populateIntent(coin, {
83
+ reqId,
84
+ intentType: 'wrap',
85
+ wrapParams,
86
+ });
87
+ assert_1.default.strictEqual(intent.intentType, 'wrap');
88
+ assert_1.default.strictEqual(intent.tokenName, wrapParams.tokenName);
89
+ assert_1.default.strictEqual(intent.amount, wrapParams.amount);
90
+ assert_1.default.strictEqual(intent.recipients, undefined);
91
+ });
92
+ it('requires wrapParams for wrapApprove', function () {
93
+ assert_1.default.throws(() => mpcUtils.populateIntent(coin, {
94
+ reqId,
95
+ intentType: 'wrapApprove',
96
+ }), /wrapParams/);
97
+ });
98
+ it('rejects non-positive wrapParams.amount', function () {
99
+ assert_1.default.throws(() => mpcUtils.populateIntent(coin, {
100
+ reqId,
101
+ intentType: 'wrapApprove',
102
+ wrapParams: { tokenName: 'hteth:cusdt', amount: '0' },
103
+ }), /wrapParams.amount/);
104
+ });
105
+ });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBjVXRpbHMud3JhcEFwcHJvdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvbXBjVXRpbHMud3JhcEFwcHJvdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNkNBQStCO0FBRy9CLG1FQUFnRTtBQUNoRSx5Q0FBZ0Q7QUFFaEQsTUFBTSxZQUFhLFNBQVEsbUJBQVE7SUFDakMsZUFBZTtRQUNiLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFhLEVBQUUsQ0FBQztJQUNsQyxJQUFJLFFBQXNCLENBQUM7SUFDM0IsSUFBSSxJQUFlLENBQUM7SUFFcEIsVUFBVSxDQUFDO1FBQ1QsTUFBTSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBMEIsQ0FBQztRQUNuRixJQUFJLEdBQUc7WUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTztZQUN2QixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztZQUN0QixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNqQixXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtTQUNBLENBQUM7UUFDMUIsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtRQUNoRCxNQUFNLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUVsRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtZQUMzQyxLQUFLO1lBQ0wsVUFBVSxFQUFFLGFBQWE7WUFDekIsVUFBVTtZQUNWLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFFSCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtRQUN6QyxNQUFNLFVBQVUsR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRW5FLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQzNDLEtBQUs7WUFDTCxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1FBQ3hDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUNILFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQzVCLEtBQUs7WUFDTCxVQUFVLEVBQUUsYUFBYTtTQUMxQixDQUFDLEVBQ0osWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtRQUMzQyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtZQUM1QixLQUFLO1lBQ0wsVUFBVSxFQUFFLGFBQWE7WUFDekIsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO1NBQ3RELENBQUMsRUFDSixtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBJQmFzZUNvaW4sIEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBNcGNVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9tcGNVdGlscyc7XG5pbXBvcnQgeyBSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjJztcblxuY2xhc3MgVGVzdE1wY1V0aWxzIGV4dGVuZHMgTXBjVXRpbHMge1xuICBjcmVhdGVLZXljaGFpbnMoKTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndW51c2VkJykpO1xuICB9XG59XG5cbmRlc2NyaWJlKCdwb3B1bGF0ZUludGVudCB3cmFwQXBwcm92ZSAvIHdyYXAnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgbGV0IG1wY1V0aWxzOiBUZXN0TXBjVXRpbHM7XG4gIGxldCBjb2luOiBJQmFzZUNvaW47XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbW9ja0JpdGdvID0geyBnZXRFbnY6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0JykgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBjb2luID0ge1xuICAgICAgZ2V0Q2hhaW46ICgpID0+ICdodGV0aCcsXG4gICAgICBnZXRGYW1pbHk6ICgpID0+ICdldGgnLFxuICAgICAgaXNFVk06ICgpID0+IHRydWUsXG4gICAgICBzdXBwb3J0c1RzczogKCkgPT4gdHJ1ZSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuICAgIG1wY1V0aWxzID0gbmV3IFRlc3RNcGNVdGlscyhtb2NrQml0Z28sIGNvaW4pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ2ZsYXR0ZW5zIHdyYXBQYXJhbXMgb250byB3cmFwQXBwcm92ZSBpbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd3JhcFBhcmFtcyA9IHsgdG9rZW5OYW1lOiAnaHRldGg6Y3VzZHQnLCBhbW91bnQ6ICcxMDAwMDAwJyB9O1xuICAgIGNvbnN0IGZlZU9wdGlvbnMgPSB7IG1heEZlZVBlckdhczogMzAwMDAwMDAwMCwgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDIwMDAwMDAwMDAgfTtcblxuICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGNvaW4sIHtcbiAgICAgIHJlcUlkLFxuICAgICAgaW50ZW50VHlwZTogJ3dyYXBBcHByb3ZlJyxcbiAgICAgIHdyYXBQYXJhbXMsXG4gICAgICBmZWVPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGludGVudC5pbnRlbnRUeXBlLCAnd3JhcEFwcHJvdmUnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW50ZW50LnRva2VuTmFtZSwgd3JhcFBhcmFtcy50b2tlbk5hbWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnRlbnQuYW1vdW50LCB3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChpbnRlbnQuZmVlT3B0aW9ucywgZmVlT3B0aW9ucyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGludGVudC5yZWNpcGllbnRzLCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdCgnZmxhdHRlbnMgd3JhcFBhcmFtcyBvbnRvIHdyYXAgaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdyYXBQYXJhbXMgPSB7IHRva2VuTmFtZTogJ2h0ZXRoOmN1c2R0JywgYW1vdW50OiAnMTAwMDAwMCcgfTtcblxuICAgIGNvbnN0IGludGVudCA9IG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGNvaW4sIHtcbiAgICAgIHJlcUlkLFxuICAgICAgaW50ZW50VHlwZTogJ3dyYXAnLFxuICAgICAgd3JhcFBhcmFtcyxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnRlbnQuaW50ZW50VHlwZSwgJ3dyYXAnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW50ZW50LnRva2VuTmFtZSwgd3JhcFBhcmFtcy50b2tlbk5hbWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnRlbnQuYW1vdW50LCB3cmFwUGFyYW1zLmFtb3VudCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGludGVudC5yZWNpcGllbnRzLCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdCgncmVxdWlyZXMgd3JhcFBhcmFtcyBmb3Igd3JhcEFwcHJvdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIG1wY1V0aWxzLnBvcHVsYXRlSW50ZW50KGNvaW4sIHtcbiAgICAgICAgICByZXFJZCxcbiAgICAgICAgICBpbnRlbnRUeXBlOiAnd3JhcEFwcHJvdmUnLFxuICAgICAgICB9KSxcbiAgICAgIC93cmFwUGFyYW1zL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG5vbi1wb3NpdGl2ZSB3cmFwUGFyYW1zLmFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgbXBjVXRpbHMucG9wdWxhdGVJbnRlbnQoY29pbiwge1xuICAgICAgICAgIHJlcUlkLFxuICAgICAgICAgIGludGVudFR5cGU6ICd3cmFwQXBwcm92ZScsXG4gICAgICAgICAgd3JhcFBhcmFtczogeyB0b2tlbk5hbWU6ICdodGV0aDpjdXNkdCcsIGFtb3VudDogJzAnIH0sXG4gICAgICAgIH0pLFxuICAgICAgL3dyYXBQYXJhbXMuYW1vdW50L1xuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=