@bitgo-beta/sdk-coin-stx 1.4.3-alpha.42 → 1.4.3-alpha.421

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 (74) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +24 -9
  4. package/dist/src/lib/abstractContractBuilder.js +2 -2
  5. package/dist/src/lib/constants.d.ts +2 -1
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +5 -3
  8. package/dist/src/lib/contractBuilder.js +10 -10
  9. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts +62 -0
  10. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -0
  11. package/dist/src/lib/fungibleTokenTransferBuilder.js +131 -0
  12. package/dist/src/lib/iface.d.ts +56 -0
  13. package/dist/src/lib/iface.d.ts.map +1 -1
  14. package/dist/src/lib/iface.js +1 -1
  15. package/dist/src/lib/index.js +23 -9
  16. package/dist/src/lib/keyPair.js +18 -19
  17. package/dist/src/lib/sendmanyBuilder.js +11 -11
  18. package/dist/src/lib/transaction.d.ts.map +1 -1
  19. package/dist/src/lib/transaction.js +31 -15
  20. package/dist/src/lib/transactionBuilder.js +12 -12
  21. package/dist/src/lib/transactionBuilderFactory.d.ts +2 -0
  22. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  23. package/dist/src/lib/transactionBuilderFactory.js +9 -2
  24. package/dist/src/lib/transferBuilder.js +4 -4
  25. package/dist/src/lib/utils.d.ts +25 -2
  26. package/dist/src/lib/utils.d.ts.map +1 -1
  27. package/dist/src/lib/utils.js +141 -62
  28. package/dist/src/register.d.ts.map +1 -1
  29. package/dist/src/register.js +5 -1
  30. package/dist/src/sip10Token.d.ts +22 -0
  31. package/dist/src/sip10Token.d.ts.map +1 -0
  32. package/dist/src/sip10Token.js +128 -0
  33. package/dist/src/stx.d.ts +146 -2
  34. package/dist/src/stx.d.ts.map +1 -1
  35. package/dist/src/stx.js +420 -11
  36. package/dist/src/tstx.js +1 -1
  37. package/dist/test/fixtures.d.ts +119 -0
  38. package/dist/test/fixtures.d.ts.map +1 -0
  39. package/dist/test/fixtures.js +147 -0
  40. package/dist/test/unit/keyPair.d.ts +2 -0
  41. package/dist/test/unit/keyPair.d.ts.map +1 -0
  42. package/dist/test/unit/keyPair.js +144 -0
  43. package/dist/test/unit/resources.d.ts +97 -0
  44. package/dist/test/unit/resources.d.ts.map +1 -0
  45. package/dist/test/unit/resources.js +144 -0
  46. package/dist/test/unit/sip10Token.d.ts +2 -0
  47. package/dist/test/unit/sip10Token.d.ts.map +1 -0
  48. package/dist/test/unit/sip10Token.js +374 -0
  49. package/dist/test/unit/stx.d.ts +2 -0
  50. package/dist/test/unit/stx.d.ts.map +1 -0
  51. package/dist/test/unit/stx.js +470 -0
  52. package/dist/test/unit/transaction.d.ts +2 -0
  53. package/dist/test/unit/transaction.d.ts.map +1 -0
  54. package/dist/test/unit/transaction.js +83 -0
  55. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
  56. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
  57. package/dist/test/unit/transactionBuilder/contractBuilder.js +421 -0
  58. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
  59. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
  60. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +187 -0
  61. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
  62. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
  63. package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
  64. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  65. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  66. package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
  67. package/dist/test/unit/util.d.ts +2 -0
  68. package/dist/test/unit/util.d.ts.map +1 -0
  69. package/dist/test/unit/util.js +326 -0
  70. package/dist/tsconfig.tsbuildinfo +1 -0
  71. package/package.json +13 -11
  72. package/.eslintignore +0 -5
  73. package/.mocharc.yml +0 -8
  74. package/CHANGELOG.md +0 -107
@@ -0,0 +1,374 @@
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 lodash_1 = __importDefault(require("lodash"));
40
+ const nock_1 = __importDefault(require("nock"));
41
+ const sdk_api_1 = require("@bitgo-beta/sdk-api");
42
+ const sdk_test_1 = require("@bitgo-beta/sdk-test");
43
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
44
+ const src_1 = require("../../src");
45
+ const testData = __importStar(require("../fixtures"));
46
+ const assert_1 = __importDefault(require("assert"));
47
+ describe('Sip10Token:', function () {
48
+ const sip10TokenName = 'tstx:tsip6dp';
49
+ let bitgo;
50
+ let basecoin;
51
+ let newTxPrebuild;
52
+ let newTxParams;
53
+ let wallet;
54
+ const txPreBuild = {
55
+ txHex: testData.txForExplainFungibleTokenTransfer,
56
+ txInfo: {},
57
+ };
58
+ const txParams = {
59
+ recipients: testData.recipients,
60
+ };
61
+ const memo = {
62
+ type: '',
63
+ value: '1',
64
+ };
65
+ before(function () {
66
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
67
+ env: 'mock',
68
+ });
69
+ bitgo.initializeTestVars();
70
+ src_1.Sip10Token.createTokenConstructors().forEach(({ name, coinConstructor }) => {
71
+ bitgo.safeRegister(name, coinConstructor);
72
+ });
73
+ newTxPrebuild = () => {
74
+ return lodash_1.default.cloneDeep(txPreBuild);
75
+ };
76
+ newTxParams = () => {
77
+ return lodash_1.default.cloneDeep(txParams);
78
+ };
79
+ basecoin = bitgo.coin(sip10TokenName);
80
+ wallet = new sdk_core_1.Wallet(bitgo, basecoin, {});
81
+ });
82
+ describe('Verify Transaction', function () {
83
+ it('should succeed to verify transaction', async function () {
84
+ const txPrebuild = newTxPrebuild();
85
+ const txParams = newTxParams();
86
+ txParams.memo = memo;
87
+ const verification = {};
88
+ const isTransactionVerified = await basecoin.verifyTransaction({
89
+ txParams,
90
+ txPrebuild,
91
+ verification,
92
+ wallet,
93
+ });
94
+ isTransactionVerified.should.equal(true);
95
+ });
96
+ it('should succeed to verify transaction when recipients amount are numbers', async function () {
97
+ const txPrebuild = newTxPrebuild();
98
+ const txParamsWithNumberAmounts = newTxParams();
99
+ txParamsWithNumberAmounts.recipients = txParamsWithNumberAmounts.recipients.map(({ address, amount, memo, tokenName }) => {
100
+ return { address, amount: Number(amount), memo, tokenName };
101
+ });
102
+ txParamsWithNumberAmounts.memo = memo;
103
+ const verification = {};
104
+ const isTransactionVerified = await basecoin.verifyTransaction({
105
+ txParams: txParamsWithNumberAmounts,
106
+ txPrebuild,
107
+ verification,
108
+ wallet,
109
+ });
110
+ isTransactionVerified.should.equal(true);
111
+ });
112
+ it('should succeed to verify when memo is passed', async function () {
113
+ const txPrebuild = newTxPrebuild();
114
+ txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithMemoId10;
115
+ const txParams = newTxParams();
116
+ const verification = {};
117
+ txParams.memo = {
118
+ type: '',
119
+ value: '10',
120
+ };
121
+ const isTransactionVerified = await basecoin.verifyTransaction({
122
+ txParams: txParams,
123
+ txPrebuild,
124
+ verification,
125
+ wallet,
126
+ });
127
+ isTransactionVerified.should.equal(true);
128
+ });
129
+ it('should succeed to verify when memo is zero', async function () {
130
+ const txPrebuild = newTxPrebuild();
131
+ const txParams = newTxParams();
132
+ txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithMemoZero;
133
+ txParams.memo = {
134
+ type: '',
135
+ value: '0',
136
+ };
137
+ const verification = {};
138
+ const isTransactionVerified = await basecoin.verifyTransaction({
139
+ txParams: txParams,
140
+ txPrebuild,
141
+ verification,
142
+ wallet,
143
+ });
144
+ isTransactionVerified.should.equal(true);
145
+ });
146
+ it('should succeed to verify when memo is passed inside recipient address', async function () {
147
+ const txPrebuild = newTxPrebuild();
148
+ const txParams = newTxParams();
149
+ txParams.recipients[0].address = 'SN2NN1JP9AEP5BVE19RNJ6T2MP7NDGRZYST1VDF3M?memoId=10';
150
+ txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithMemoId10;
151
+ const verification = {};
152
+ const isTransactionVerified = await basecoin.verifyTransaction({
153
+ txParams: txParams,
154
+ txPrebuild,
155
+ verification,
156
+ wallet,
157
+ });
158
+ isTransactionVerified.should.equal(true);
159
+ });
160
+ it('should succeed to verify when memo is not passed', async function () {
161
+ const txPrebuild = newTxPrebuild();
162
+ const txParams = newTxParams();
163
+ txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithoutMemo;
164
+ const verification = {};
165
+ const isTransactionVerified = await basecoin.verifyTransaction({
166
+ txParams: txParams,
167
+ txPrebuild,
168
+ verification,
169
+ wallet,
170
+ });
171
+ isTransactionVerified.should.equal(true);
172
+ });
173
+ it('should fail to verify transaction with no recipients', async function () {
174
+ const txPrebuild = {};
175
+ const txParams = newTxParams();
176
+ txParams.recipients = [];
177
+ await basecoin
178
+ .verifyTransaction({
179
+ txParams,
180
+ txPrebuild,
181
+ wallet,
182
+ })
183
+ .should.rejectedWith('missing required tx prebuild property txHex');
184
+ });
185
+ it('should fail when more than 1 recipients are passed', async function () {
186
+ const txPrebuild = newTxPrebuild();
187
+ const txParams = newTxParams();
188
+ txParams.recipients.push({
189
+ address: 'SN2NN1JP9AEP5BVE19RNJ6T2MP7NDGRZYST1VDF3N',
190
+ amount: '10000',
191
+ memo: '1',
192
+ tokenName: 'tsip6dp-token',
193
+ });
194
+ await basecoin
195
+ .verifyTransaction({
196
+ txParams,
197
+ txPrebuild,
198
+ wallet,
199
+ })
200
+ .should.rejectedWith("tstx:tsip6dp doesn't support sending to more than 1 destination address within a single transaction. Try again, using only a single recipient.");
201
+ });
202
+ it('should fail to verify transaction with wrong address', async function () {
203
+ const txPrebuild = newTxPrebuild();
204
+ const txParams = newTxParams();
205
+ txParams.recipients[0].address = 'SN2NN1JP9AEP5BVE19RNJ6T2MP7NDGRZYST1VDF3N';
206
+ const verification = {};
207
+ await basecoin
208
+ .verifyTransaction({
209
+ txParams,
210
+ txPrebuild,
211
+ verification,
212
+ wallet,
213
+ })
214
+ .should.rejectedWith('Tx outputs does not match with expected txParams recipients');
215
+ });
216
+ it('should fail to verify transaction with wrong amount', async function () {
217
+ const txPrebuild = newTxPrebuild();
218
+ const txParams = newTxParams();
219
+ txParams.recipients[0].amount = '100';
220
+ const verification = {};
221
+ await basecoin
222
+ .verifyTransaction({
223
+ txParams,
224
+ txPrebuild,
225
+ verification,
226
+ wallet,
227
+ })
228
+ .should.rejectedWith('Tx outputs does not match with expected txParams recipients');
229
+ });
230
+ it('should fail to verify transaction with wrong memo', async function () {
231
+ const txPrebuild = newTxPrebuild();
232
+ const txParams = newTxParams();
233
+ txParams.recipients[0].memo = '2';
234
+ const verification = {};
235
+ await basecoin
236
+ .verifyTransaction({
237
+ txParams,
238
+ txPrebuild,
239
+ verification,
240
+ wallet,
241
+ })
242
+ .should.rejectedWith('Tx memo does not match with expected txParams recipient memo');
243
+ });
244
+ it('should fail to verify transaction with wrong token', async function () {
245
+ const txPrebuild = newTxPrebuild();
246
+ const txParams = newTxParams();
247
+ txParams.recipients[0].tokenName = 'tstx:tsip8dp';
248
+ const verification = {};
249
+ await basecoin
250
+ .verifyTransaction({
251
+ txParams,
252
+ txPrebuild,
253
+ verification,
254
+ wallet,
255
+ })
256
+ .should.rejectedWith('Tx outputs does not match with expected txParams recipients');
257
+ });
258
+ });
259
+ describe('Recover Transaction SIP10', () => {
260
+ before(function () {
261
+ nock_1.default.enableNetConnect();
262
+ });
263
+ beforeEach(function () {
264
+ nock_1.default.cleanAll();
265
+ });
266
+ after(function () {
267
+ nock_1.default.disableNetConnect();
268
+ });
269
+ it('should build a signed token recover transaction when private key data is passed', async () => {
270
+ const rootAddress = testData.HOT_WALLET_ROOT_ADDRESS;
271
+ (0, nock_1.default)(`https://api.testnet.hiro.so`)
272
+ .get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
273
+ .reply(200, testData.ACCOUNT_BALANCE_RESPONSE);
274
+ (0, nock_1.default)('https://api.testnet.hiro.so')
275
+ .get(`/extended/v2/addresses/${rootAddress}/balances/ft/${testData.STX_TOKEN_ASSET_ID}`)
276
+ .reply(200, testData.TOKEN_BALANCE_RESPONSE);
277
+ (0, nock_1.default)(`https://api.testnet.hiro.so`)
278
+ .get(`/extended/v1/address/${rootAddress}/nonces`)
279
+ .reply(200, testData.ACCOUNT_NONCE_RESPONSE);
280
+ (0, nock_1.default)(`https://api.testnet.hiro.so`, { allowUnmocked: true })
281
+ .post(`/v2/fees/transaction`, testData.FEE_ESTIMATION_TOKEN_REQUEST)
282
+ .reply(200, testData.FEE_ESTIMATION_TOKEN_RESPONSE);
283
+ const recoveryOptions = {
284
+ backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
285
+ userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
286
+ rootAddress: rootAddress,
287
+ recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
288
+ bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
289
+ walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
290
+ contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token',
291
+ };
292
+ const response = await basecoin.recover(recoveryOptions);
293
+ response.should.have.property('txHex');
294
+ assert_1.default.deepEqual(response.txHex, testData.HOT_WALLET_TOKEN_RECOVERY_TX_HEX, 'tx hex not matching!');
295
+ });
296
+ it('should build an unsigned token transaction when public keys are passed', async () => {
297
+ const rootAddress = testData.COLD_WALLET_ROOT_ADDRESS;
298
+ (0, nock_1.default)(`https://api.testnet.hiro.so`)
299
+ .get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
300
+ .reply(200, testData.ACCOUNT_BALANCE_RESPONSE);
301
+ (0, nock_1.default)('https://api.testnet.hiro.so')
302
+ .get(`/extended/v2/addresses/${rootAddress}/balances/ft/${testData.STX_TOKEN_ASSET_ID}`)
303
+ .reply(200, testData.TOKEN_BALANCE_RESPONSE);
304
+ (0, nock_1.default)(`https://api.testnet.hiro.so`, { allowUnmocked: true })
305
+ .get(`/extended/v1/address/${rootAddress}/nonces`)
306
+ .reply(200, testData.ACCOUNT_NONCE_RESPONSE);
307
+ const feeEstimateRequest = testData.FEE_ESTIMATION_TOKEN_REQUEST;
308
+ feeEstimateRequest.transaction_payload =
309
+ '021a1500a1c42f0c11bfe3893f479af18904677685be0d747369703664702d746f6b656e087472616e73666572000000040100000000000000000000000005f5e10005159f2f1aff6fa0062e1f7fa6096133e75f47a7e8f7051a1500a1c42f0c11bfe3893f479af18904677685be09';
310
+ (0, nock_1.default)(`https://api.testnet.hiro.so`)
311
+ .post(`/v2/fees/transaction`, feeEstimateRequest)
312
+ .reply(200, testData.FEE_ESTIMATION_TOKEN_RESPONSE);
313
+ const recoveryOptions = {
314
+ backupKey: testData.COLD_WALLET_PUBLIC_KEY_INFO.BACKUP_KEY,
315
+ userKey: testData.COLD_WALLET_PUBLIC_KEY_INFO.USER_KEY,
316
+ rootAddress: rootAddress,
317
+ recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
318
+ bitgoKey: testData.COLD_WALLET_PUBLIC_KEY_INFO.BITGO_PUB_KEY,
319
+ contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token',
320
+ };
321
+ const response = (await basecoin.recover(recoveryOptions));
322
+ response.should.have.property('txHex');
323
+ response.should.have.property('coin');
324
+ response.should.have.property('feeInfo');
325
+ assert_1.default.deepEqual(response.txHex, testData.COLD_WALLET_TOKEN_UNSIGNED_SWEEP_TX_HEX, 'tx hex not matching!');
326
+ assert_1.default.deepEqual(response.coin, 'tstx:tsip6dp', 'coin not matching!');
327
+ });
328
+ it('should fail with insufficient balance when native stx balance is lower than fee for sip10', async () => {
329
+ const rootAddress = testData.HOT_WALLET_ROOT_ADDRESS;
330
+ const accountBalance = JSON.parse(JSON.stringify(testData.ACCOUNT_BALANCE_RESPONSE));
331
+ accountBalance.balance = '100'; // set balance lower than fee
332
+ (0, nock_1.default)(`https://api.testnet.hiro.so`)
333
+ .get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
334
+ .reply(200, accountBalance);
335
+ (0, nock_1.default)('https://api.testnet.hiro.so')
336
+ .get(`/extended/v2/addresses/${rootAddress}/balances/ft/${testData.STX_TOKEN_ASSET_ID}`)
337
+ .reply(200, testData.TOKEN_BALANCE_RESPONSE);
338
+ (0, nock_1.default)(`https://api.testnet.hiro.so`)
339
+ .get(`/extended/v1/address/${rootAddress}/nonces`)
340
+ .reply(200, testData.ACCOUNT_NONCE_RESPONSE);
341
+ const feeRequestBody = testData.FEE_ESTIMATION_TOKEN_REQUEST;
342
+ feeRequestBody.transaction_payload =
343
+ '021a1500a1c42f0c11bfe3893f479af18904677685be0d747369703664702d746f6b656e087472616e73666572000000040100000000000000000000000005f5e100051549857eb4b6dd4fee08c3ec04e3d0ed04ef67d324051a1500a1c42f0c11bfe3893f479af18904677685be09';
344
+ (0, nock_1.default)(`https://api.testnet.hiro.so`, { allowUnmocked: true })
345
+ .post(`/v2/fees/transaction`, feeRequestBody)
346
+ .reply(200, testData.FEE_ESTIMATION_TOKEN_RESPONSE);
347
+ const recoveryOptions = {
348
+ backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
349
+ userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
350
+ rootAddress: rootAddress,
351
+ recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
352
+ bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
353
+ walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
354
+ contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token',
355
+ };
356
+ await basecoin.recover(recoveryOptions).should.rejectedWith('insufficient balance to build the transaction');
357
+ });
358
+ it('should fail when only contract address is passed', async () => {
359
+ const recoveryOptions = {
360
+ backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
361
+ userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
362
+ rootAddress: testData.HOT_WALLET_ROOT_ADDRESS,
363
+ recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
364
+ bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
365
+ walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
366
+ contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH',
367
+ };
368
+ await basecoin
369
+ .recover(recoveryOptions)
370
+ .should.rejectedWith('invalid contract id, please provide it in the form (contractAddress.contractName)');
371
+ });
372
+ });
373
+ });
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lwMTBUb2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9zaXAxMFRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQXVCO0FBQ3ZCLGdEQUF3QjtBQUN4QixpREFBK0M7QUFDL0MsbURBQStEO0FBQy9ELG1EQUEyRTtBQUUzRSxtQ0FBdUM7QUFDdkMsc0RBQXdDO0FBRXhDLG9EQUE0QjtBQUU1QixRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN0QyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFvQixDQUFDO0lBQ3pCLElBQUksYUFBdUUsQ0FBQztJQUM1RSxJQUFJLFdBQXVFLENBQUM7SUFDNUUsSUFBSSxNQUFjLENBQUM7SUFFbkIsTUFBTSxVQUFVLEdBQUc7UUFDakIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxpQ0FBaUM7UUFDakQsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUc7UUFDZixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7S0FDaEMsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHO1FBQ1gsSUFBSSxFQUFFLEVBQUU7UUFDUixLQUFLLEVBQUUsR0FBRztLQUNYLENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLGdCQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1lBQ3pFLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUs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UUFBUSxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhO2dCQUN6RCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCO2dCQUNyRSxVQUFVLEVBQUUsd0RBQXdEO2FBQ3JFLENBQUM7WUFDRixNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQy9HLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sZUFBZSxHQUFvQjtnQkFDdkMsU0FBUyxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVO2dCQUN2RCxPQUFPLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLFFBQVE7Z0JBQ25ELFdBQVcsRUFBRSxRQUFRLENBQUMsdUJBQXVCO2dCQUM3QyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsdUJBQXVCO2dCQUNyRCxRQUFRLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLGFBQWE7Z0JBQ3pELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUI7Z0JBQ3JFLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQsQ0FBQztZQUNGLE1BQU0sUUFBUTtpQkFDWCxPQUFPLENBQUMsZUFBZSxDQUFDO2lCQUN4QixNQUFNLENBQUMsWUFBWSxDQUFDLG1GQUFtRixDQUFDLENBQUM7UUFDOUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBXYWxsZXQsIE1lbW8gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IFNpcDEwVG9rZW4gfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0IHsgUmVjb3ZlcnlJbmZvLCBSZWNvdmVyeU9wdGlvbnMsIFJlY292ZXJ5VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ1NpcDEwVG9rZW46JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzaXAxMFRva2VuTmFtZSA9ICd0c3R4OnRzaXA2ZHAnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luOiBTaXAxMFRva2VuO1xuICBsZXQgbmV3VHhQcmVidWlsZDogKCkgPT4geyB0eEhleDogc3RyaW5nOyB0eEluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIGxldCBuZXdUeFBhcmFtczogKCkgPT4geyByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTsgbWVtbz86IE1lbW8gfTtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuXG4gIGNvbnN0IHR4UHJlQnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpbkZ1bmdpYmxlVG9rZW5UcmFuc2ZlcixcbiAgICB0eEluZm86IHt9LFxuICB9O1xuXG4gIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgIHJlY2lwaWVudHM6IHRlc3REYXRhLnJlY2lwaWVudHMsXG4gIH07XG5cbiAgY29uc3QgbWVtbyA9IHtcbiAgICB0eXBlOiAnJyxcbiAgICB2YWx1ZTogJzEnLFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIFNpcDEwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9KTtcbiAgICBuZXdUeFByZWJ1aWxkID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UHJlQnVpbGQpO1xuICAgIH07XG4gICAgbmV3VHhQYXJhbXMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQYXJhbXMpO1xuICAgIH07XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKHNpcDEwVG9rZW5OYW1lKSBhcyBTaXAxMFRva2VuO1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5tZW1vID0gbWVtbztcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHMgPSB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHMubWFwKFxuICAgICAgICAoeyBhZGRyZXNzLCBhbW91bnQsIG1lbW8sIHRva2VuTmFtZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgYWRkcmVzcywgYW1vdW50OiBOdW1iZXIoYW1vdW50KSwgbWVtbywgdG9rZW5OYW1lIH07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLm1lbW8gPSBtZW1vO1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB3aGVuIG1lbW8gaXMgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPSB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRoTWVtb0lkMTA7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIHR4UGFyYW1zLm1lbW8gPSB7XG4gICAgICAgIHR5cGU6ICcnLFxuICAgICAgICB2YWx1ZTogJzEwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHdoZW4gbWVtbyBpcyB6ZXJvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPSB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRoTWVtb1plcm87XG4gICAgICB0eFBhcmFtcy5tZW1vID0ge1xuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgd2hlbiBtZW1vIGlzIHBhc3NlZCBpbnNpZGUgcmVjaXBpZW50IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5hZGRyZXNzID0gJ1NOMk5OMUpQOUFFUDVCVkUxOVJOSjZUMk1QN05ER1JaWVNUMVZERjNNP21lbW9JZD0xMCc7XG4gICAgICB0eFByZWJ1aWxkLnR4SGV4ID0gdGVzdERhdGEudHhGb3JFeHBsYWluRnVuZ2libGVUb2tlblRyYW5zZmVyV2l0aE1lbW9JZDEwO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHdoZW4gbWVtbyBpcyBub3QgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPSB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRob3V0TWVtbztcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIG5vIHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge307XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzID0gW107XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gbW9yZSB0aGFuIDEgcmVjaXBpZW50cyBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6ICdTTjJOTjFKUDlBRVA1QlZFMTlSTko2VDJNUDdOREdSWllTVDFWREYzTicsXG4gICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgbWVtbzogJzEnLFxuICAgICAgICB0b2tlbk5hbWU6ICd0c2lwNmRwLXRva2VuJyxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgXCJ0c3R4OnRzaXA2ZHAgZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcgdG8gbW9yZSB0aGFuIDEgZGVzdGluYXRpb24gYWRkcmVzcyB3aXRoaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRyeSBhZ2FpbiwgdXNpbmcgb25seSBhIHNpbmdsZSByZWNpcGllbnQuXCJcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdTTjJOTjFKUDlBRVA1QlZFMTlSTko2VDJNUDdOREdSWllTVDFWREYzTic7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnMTAwJztcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5tZW1vID0gJzInO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ1R4IG1lbW8gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQgbWVtbycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0udG9rZW5OYW1lID0gJ3RzdHg6dHNpcDhkcCc7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXIgVHJhbnNhY3Rpb24gU0lQMTAnLCAoKSA9PiB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZW5hYmxlTmV0Q29ubmVjdCgpO1xuICAgIH0pO1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgdG9rZW4gcmVjb3ZlciB0cmFuc2FjdGlvbiB3aGVuIHByaXZhdGUga2V5IGRhdGEgaXMgcGFzc2VkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zbycpXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvZnQvJHt0ZXN0RGF0YS5TVFhfVE9LRU5fQVNTRVRfSUR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuVE9LRU5fQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9UT0tFTl9SRVFVRVNUKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9UT0tFTl9SRVNQT05TRSk7XG5cbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLldBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgICBjb250cmFjdElkOiAnU1RBRzE4RTQ1VzYxM0ZaM0g0Wk1GNlFISDQyNkVYTTVRVFNBVldZSC50c2lwNmRwLXRva2VuJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZTogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuSE9UX1dBTExFVF9UT0tFTl9SRUNPVkVSWV9UWF9IRVgsICd0eCBoZXggbm90IG1hdGNoaW5nIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCB0b2tlbiB0cmFuc2FjdGlvbiB3aGVuIHB1YmxpYyBrZXlzIGFyZSBwYXNzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkNPTERfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zbycpXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvZnQvJHt0ZXN0RGF0YS5TVFhfVE9LRU5fQVNTRVRfSUR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuVE9LRU5fQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gLCB7IGFsbG93VW5tb2NrZWQ6IHRydWUgfSlcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YxL2FkZHJlc3MvJHtyb290QWRkcmVzc30vbm9uY2VzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9OT05DRV9SRVNQT05TRSk7XG4gICAgICBjb25zdCBmZWVFc3RpbWF0ZVJlcXVlc3QgPSB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9UT0tFTl9SRVFVRVNUO1xuICAgICAgZmVlRXN0aW1hdGVSZXF1ZXN0LnRyYW5zYWN0aW9uX3BheWxvYWQgPVxuICAgICAgICAnMDIxYTE1MDBhMWM0MmYwYzExYmZlMzg5M2Y0NzlhZjE4OTA0Njc3Njg1YmUwZDc0NzM2OTcwMzY2NDcwMmQ3NDZmNmI2NTZlMDg3NDcyNjE2ZTczNjY2NTcyMDAwMDAwMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ZjVlMTAwMDUxNTlmMmYxYWZmNmZhMDA2MmUxZjdmYTYwOTYxMzNlNzVmNDdhN2U4ZjcwNTFhMTUwMGExYzQyZjBjMTFiZmUzODkzZjQ3OWFmMTg5MDQ2Nzc2ODViZTA5JztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5wb3N0KGAvdjIvZmVlcy90cmFuc2FjdGlvbmAsIGZlZUVzdGltYXRlUmVxdWVzdClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fVE9LRU5fUkVTUE9OU0UpO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICAgIGNvbnRyYWN0SWQ6ICdTVEFHMThFNDVXNjEzRlozSDRaTUY2UUhINDI2RVhNNVFUU0FWV1lILnRzaXA2ZHAtdG9rZW4nLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpKSBhcyBSZWNvdmVyeUluZm87XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb2luJyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlSW5mbycpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuQ09MRF9XQUxMRVRfVE9LRU5fVU5TSUdORURfU1dFRVBfVFhfSEVYLCAndHggaGV4IG5vdCBtYXRjaGluZyEnKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UuY29pbiwgJ3RzdHg6dHNpcDZkcCcsICdjb2luIG5vdCBtYXRjaGluZyEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBiYWxhbmNlIHdoZW4gbmF0aXZlIHN0eCBiYWxhbmNlIGlzIGxvd2VyIHRoYW4gZmVlIGZvciBzaXAxMCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBjb25zdCBhY2NvdW50QmFsYW5jZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKSk7XG4gICAgICBhY2NvdW50QmFsYW5jZS5iYWxhbmNlID0gJzEwMCc7IC8vIHNldCBiYWxhbmNlIGxvd2VyIHRoYW4gZmVlXG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSgyMDAsIGFjY291bnRCYWxhbmNlKTtcbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zbycpXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvZnQvJHt0ZXN0RGF0YS5TVFhfVE9LRU5fQVNTRVRfSUR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuVE9LRU5fQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IGZlZVJlcXVlc3RCb2R5ID0gdGVzdERhdGEuRkVFX0VTVElNQVRJT05fVE9LRU5fUkVRVUVTVDtcbiAgICAgIGZlZVJlcXVlc3RCb2R5LnRyYW5zYWN0aW9uX3BheWxvYWQgPVxuICAgICAgICAnMDIxYTE1MDBhMWM0MmYwYzExYmZlMzg5M2Y0NzlhZjE4OTA0Njc3Njg1YmUwZDc0NzM2OTcwMzY2NDcwMmQ3NDZmNmI2NTZlMDg3NDcyNjE2ZTczNjY2NTcyMDAwMDAwMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ZjVlMTAwMDUxNTQ5ODU3ZWI0YjZkZDRmZWUwOGMzZWMwNGUzZDBlZDA0ZWY2N2QzMjQwNTFhMTUwMGExYzQyZjBjMTFiZmUzODkzZjQ3OWFmMTg5MDQ2Nzc2ODViZTA5JztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCBmZWVSZXF1ZXN0Qm9keSlcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fVE9LRU5fUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICAgIGNvbnRyYWN0SWQ6ICdTVEFHMThFNDVXNjEzRlozSDRaTUY2UUhINDI2RVhNNVFUU0FWV1lILnRzaXA2ZHAtdG9rZW4nLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdpbnN1ZmZpY2llbnQgYmFsYW5jZSB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIG9ubHkgY29udHJhY3QgYWRkcmVzcyBpcyBwYXNzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgICAgY29udHJhY3RJZDogJ1NUQUcxOEU0NVc2MTNGWjNINFpNRjZRSEg0MjZFWE01UVRTQVZXWUgnLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ2ludmFsaWQgY29udHJhY3QgaWQsIHBsZWFzZSBwcm92aWRlIGl0IGluIHRoZSBmb3JtIChjb250cmFjdEFkZHJlc3MuY29udHJhY3ROYW1lKScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../../test/unit/stx.ts"],"names":[],"mappings":""}