@bitgo/sdk-core 38.5.1 → 38.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bitgo/errors.d.ts +2 -0
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +5 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts +11 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts +5 -2
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +8 -5
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +8 -1
- package/dist/src/bitgo/trading/network/network.d.ts +1 -1
- package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/network.js +5 -10
- package/dist/src/bitgo/trading/network/types.d.ts +1 -1
- package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/types.js +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +1 -7
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -30
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +7 -6
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +8 -9
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +3 -2
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +9 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +29 -8
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.js +13 -0
- package/dist/src/bitgo/utils/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/utils/wallet.js +3 -3
- package/dist/src/bitgo/wallet/iWallets.d.ts +11 -4
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +23 -4
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +22 -31
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +16 -12
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/network.test.js +136 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +2 -53
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +187 -11
- package/dist/test/unit/bitgo/utils/wallet.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/wallet.js +55 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +24 -1
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +35 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -33,7 +33,7 @@ describe('recipientUtils', function () {
|
|
|
33
33
|
'defiDeposit',
|
|
34
34
|
'defiWithdraw',
|
|
35
35
|
'contractCall',
|
|
36
|
-
// Staking
|
|
36
|
+
// Staking — 'delegate' also covers SOL solDelegateIntent
|
|
37
37
|
'delegate',
|
|
38
38
|
'undelegate',
|
|
39
39
|
'switchValidator',
|
|
@@ -55,6 +55,10 @@ describe('recipientUtils', function () {
|
|
|
55
55
|
// Avalanche / Flare cross-chain atomic imports
|
|
56
56
|
'import',
|
|
57
57
|
'importtoc',
|
|
58
|
+
// SOL: deactivate stake account (solDeactivateIntent)
|
|
59
|
+
'deactivate',
|
|
60
|
+
// SOL: authorize stake account (solAuthorizeIntent)
|
|
61
|
+
'authorize',
|
|
58
62
|
];
|
|
59
63
|
expected.forEach((t) => assert_1.default.ok(recipientUtils_1.NO_RECIPIENT_TX_TYPES.has(t), `${t} should be in NO_RECIPIENT_TX_TYPES`));
|
|
60
64
|
assert_1.default.strictEqual(recipientUtils_1.NO_RECIPIENT_TX_TYPES.size, expected.length);
|
|
@@ -76,12 +80,7 @@ describe('recipientUtils', function () {
|
|
|
76
80
|
const txRequest = makeTxRequest({
|
|
77
81
|
intent: {
|
|
78
82
|
intentType: 'payment',
|
|
79
|
-
recipients: [
|
|
80
|
-
{
|
|
81
|
-
address: { address: '0xabc' },
|
|
82
|
-
amount: { value: '500', symbol: 'eth' },
|
|
83
|
-
},
|
|
84
|
-
],
|
|
83
|
+
recipients: [{ address: { address: '0xabc' }, amount: { value: '500', symbol: 'eth' } }],
|
|
85
84
|
},
|
|
86
85
|
});
|
|
87
86
|
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
@@ -90,9 +89,7 @@ describe('recipientUtils', function () {
|
|
|
90
89
|
assert_1.default.strictEqual(result.recipients?.[0].amount, '500');
|
|
91
90
|
});
|
|
92
91
|
it('resolves txType from intent.intentType when txParams.type is absent', function () {
|
|
93
|
-
const txRequest = makeTxRequest({
|
|
94
|
-
intent: { intentType: 'consolidate' },
|
|
95
|
-
});
|
|
92
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'consolidate' } });
|
|
96
93
|
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
97
94
|
assert_1.default.strictEqual(result.type, 'consolidate');
|
|
98
95
|
});
|
|
@@ -107,6 +104,7 @@ describe('recipientUtils', function () {
|
|
|
107
104
|
'pledge',
|
|
108
105
|
'import',
|
|
109
106
|
'importtoc',
|
|
107
|
+
'deactivate',
|
|
110
108
|
]) {
|
|
111
109
|
const txRequest = makeTxRequest();
|
|
112
110
|
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, { type: txType }));
|
|
@@ -167,6 +165,184 @@ describe('recipientUtils', function () {
|
|
|
167
165
|
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, txParams);
|
|
168
166
|
assert_1.default.strictEqual(result.recipients?.[0].address, '0xcaller');
|
|
169
167
|
});
|
|
168
|
+
it('preserves data field from intent recipients', function () {
|
|
169
|
+
const txRequest = makeTxRequest({
|
|
170
|
+
intent: {
|
|
171
|
+
intentType: 'payment',
|
|
172
|
+
recipients: [{ address: { address: '0xabc' }, amount: { value: '100', symbol: 'eth' }, data: '0xdeadbeef' }],
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
176
|
+
assert_1.default.strictEqual(result.recipients?.[0].data, '0xdeadbeef');
|
|
177
|
+
});
|
|
178
|
+
describe('tokenName preservation regression tests', function () {
|
|
179
|
+
it('preserves tokenName from amount.symbol when it differs from chainName', function () {
|
|
180
|
+
const txRequest = makeTxRequest({
|
|
181
|
+
intent: {
|
|
182
|
+
intentType: 'payment',
|
|
183
|
+
recipients: [
|
|
184
|
+
{
|
|
185
|
+
address: { address: 'UserWalletAddress111111111111111111111111111' },
|
|
186
|
+
amount: { value: '1000000', symbol: 'tsol:usdc' },
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
192
|
+
assert_1.default.strictEqual(result.recipients?.length, 1);
|
|
193
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'tsol:usdc');
|
|
194
|
+
});
|
|
195
|
+
it('does NOT set tokenName when symbol equals chainName (native SOL transfer)', function () {
|
|
196
|
+
const txRequest = makeTxRequest({
|
|
197
|
+
intent: {
|
|
198
|
+
intentType: 'payment',
|
|
199
|
+
recipients: [
|
|
200
|
+
{
|
|
201
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
202
|
+
amount: { value: '5000000000', symbol: 'tsol' },
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
208
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, undefined);
|
|
209
|
+
});
|
|
210
|
+
it('prefers tokenData.tokenName over amount.symbol (uses distinct values to verify)', function () {
|
|
211
|
+
const txRequest = makeTxRequest({
|
|
212
|
+
intent: {
|
|
213
|
+
intentType: 'payment',
|
|
214
|
+
recipients: [
|
|
215
|
+
{
|
|
216
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
217
|
+
amount: { value: '500000', symbol: 'tsol:usdc-alt' },
|
|
218
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '500000', tokenName: 'canonical-token-name' },
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
224
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'canonical-token-name');
|
|
225
|
+
});
|
|
226
|
+
it('falls back to amount.symbol when tokenData.tokenName is absent', function () {
|
|
227
|
+
const txRequest = makeTxRequest({
|
|
228
|
+
intent: {
|
|
229
|
+
intentType: 'payment',
|
|
230
|
+
recipients: [
|
|
231
|
+
{
|
|
232
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
233
|
+
amount: { value: '200000', symbol: 'sol:usdc' },
|
|
234
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '200000' },
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'sol');
|
|
240
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'sol:usdc');
|
|
241
|
+
});
|
|
242
|
+
it('falls back to amount.symbol when tokenData.tokenName is empty string', function () {
|
|
243
|
+
const txRequest = makeTxRequest({
|
|
244
|
+
intent: {
|
|
245
|
+
intentType: 'payment',
|
|
246
|
+
recipients: [
|
|
247
|
+
{
|
|
248
|
+
address: { address: 'RecipientAddress111111111111111111111111111' },
|
|
249
|
+
amount: { value: '100000', symbol: 'tsol:usdc' },
|
|
250
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '100000', tokenName: '' },
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
256
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'tsol:usdc');
|
|
257
|
+
});
|
|
258
|
+
it('does NOT set tokenName when chainName is absent (legacy ECDSA callers, no tokenData)', function () {
|
|
259
|
+
const txRequest = makeTxRequest({
|
|
260
|
+
intent: {
|
|
261
|
+
intentType: 'payment',
|
|
262
|
+
recipients: [{ address: { address: '0xabc' }, amount: { value: '100', symbol: 'eth' } }],
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
266
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, undefined);
|
|
267
|
+
assert_1.default.strictEqual(result.recipients?.[0].address, '0xabc');
|
|
268
|
+
});
|
|
269
|
+
it('preserves tokenData.tokenName when chainName is absent (legacy ECDSA with tokenData)', function () {
|
|
270
|
+
const txRequest = makeTxRequest({
|
|
271
|
+
intent: {
|
|
272
|
+
intentType: 'transferToken',
|
|
273
|
+
recipients: [
|
|
274
|
+
{
|
|
275
|
+
address: { address: '0xabc' },
|
|
276
|
+
amount: { value: '1000', symbol: 'erc20:usdc' },
|
|
277
|
+
tokenData: { tokenType: 'fungible', tokenQuantity: '1000', tokenName: 'eth:usdc' },
|
|
278
|
+
},
|
|
279
|
+
],
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
283
|
+
assert_1.default.strictEqual(result.recipients?.[0].tokenName, 'eth:usdc');
|
|
284
|
+
});
|
|
285
|
+
it('sendMany tsol:usdc: does not throw and preserves tokenName in full round-trip', function () {
|
|
286
|
+
const txRequest = makeTxRequest({
|
|
287
|
+
intent: {
|
|
288
|
+
intentType: 'payment',
|
|
289
|
+
recipients: [
|
|
290
|
+
{
|
|
291
|
+
address: { address: 'SolUserWallet1111111111111111111111111111111' },
|
|
292
|
+
amount: { value: '2000000', symbol: 'tsol:usdc' },
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
address: { address: 'SolUserWallet2222222222222222222222222222222' },
|
|
296
|
+
amount: { value: '3000000', symbol: 'tsol:usdc' },
|
|
297
|
+
},
|
|
298
|
+
],
|
|
299
|
+
},
|
|
300
|
+
});
|
|
301
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
302
|
+
assert_1.default.strictEqual(result.recipients?.length, 2);
|
|
303
|
+
result.recipients.forEach((r) => assert_1.default.strictEqual(r.tokenName, 'tsol:usdc'));
|
|
304
|
+
assert_1.default.strictEqual(result.recipients[0].amount, '2000000');
|
|
305
|
+
assert_1.default.strictEqual(result.recipients[1].amount, '3000000');
|
|
306
|
+
});
|
|
307
|
+
it('handles mixed native + token recipients correctly', function () {
|
|
308
|
+
const txRequest = makeTxRequest({
|
|
309
|
+
intent: {
|
|
310
|
+
intentType: 'payment',
|
|
311
|
+
recipients: [
|
|
312
|
+
{
|
|
313
|
+
address: { address: 'SolNative111111111111111111111111111111111' },
|
|
314
|
+
amount: { value: '1000000000', symbol: 'tsol' },
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
address: { address: 'SolToken111111111111111111111111111111111' },
|
|
318
|
+
amount: { value: '500000', symbol: 'tsol:usdc' },
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}, 'tsol');
|
|
324
|
+
assert_1.default.strictEqual(result.recipients[0].tokenName, undefined);
|
|
325
|
+
assert_1.default.strictEqual(result.recipients[1].tokenName, 'tsol:usdc');
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('SOL no-recipient intent types', function () {
|
|
329
|
+
it('does not throw for "delegate" (solDelegateIntent)', function () {
|
|
330
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'delegate' } });
|
|
331
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
332
|
+
});
|
|
333
|
+
it('does not throw for "deactivate" (solDeactivateIntent)', function () {
|
|
334
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'deactivate' } });
|
|
335
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
336
|
+
});
|
|
337
|
+
it('does not throw for "authorize" (solAuthorizeIntent)', function () {
|
|
338
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'authorize' } });
|
|
339
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
340
|
+
});
|
|
341
|
+
it('throws for stakingAuthorize — must be validated at coin layer', function () {
|
|
342
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'stakingAuthorize' } });
|
|
343
|
+
assert_1.default.throws(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}), errors_1.InvalidTransactionError);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
170
346
|
});
|
|
171
347
|
});
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNGQUFvSDtBQUNwSCw0REFBMEU7QUFHMUUsU0FBUyxhQUFhLENBQUMsWUFBZ0MsRUFBRTtJQUN2RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEdBQUcsU0FBUztLQUNXLENBQUM7QUFDNUIsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxXQUFXO2dCQUNYLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsVUFBVTtnQkFDVixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxjQUFjO2dCQUNkLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixZQUFZO2dCQUNaLGlCQUFpQjtnQkFDakIsT0FBTztnQkFDUCxTQUFTO2dCQUNULG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQixlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsV0FBVztnQkFDWCxPQUFPO2dCQUNQLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQjtnQkFDaEIsd0JBQXdCO2dCQUN4QixlQUFlO2dCQUNmLFFBQVE7Z0JBQ1IsK0NBQStDO2dCQUMvQyxRQUFRO2dCQUNSLFdBQVc7YUFDWixDQUFDO1lBQ0YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsc0NBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7WUFDNUcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsc0NBQXFCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDekUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxzQ0FBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDBCQUEwQixFQUFFO1FBQ25DLEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdELGdCQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFO1lBQzNELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDOUIsTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRSxTQUFTO29CQUNyQixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTs0QkFDN0IsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO3lCQUN4QztxQkFDRjtpQkFDSzthQUNULENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRTtZQUN4RSxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUM7Z0JBQzlCLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQVM7YUFDN0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx5Q0FBd0IsRUFBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtZQUNwQyxLQUFLLE1BQU0sTUFBTSxJQUFJO2dCQUNuQixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxVQUFVO2dCQUNWLE9BQU87Z0JBQ1AsZUFBZTtnQkFDZixRQUFRO2dCQUNSLFFBQVE7Z0JBQ1IsV0FBVzthQUNaLEVBQUUsQ0FBQztnQkFDRixNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx5Q0FBd0IsRUFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25GLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrRkFBa0YsRUFBRTtZQUNyRix3RUFBd0U7WUFDeEUsc0VBQXNFO1lBQ3RFLHdFQUF3RTtZQUN4RSwwRUFBMEU7WUFDMUUsS0FBSyxNQUFNLFVBQVUsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVGQUF1RixFQUFFO1lBQzFGLDhFQUE4RTtZQUM5RSx3RUFBd0U7WUFDeEUsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFO1lBQ3hFLE1BQU0sU0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQzlELGdDQUF1QixFQUN2QixrREFBa0QsQ0FDbkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELE1BQU0sU0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLGdDQUF1QixDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUM5QixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFTO2FBQy9FLENBQUMsQ0FBQztZQUNILGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUU7WUFDbkUsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUM5QixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFTO2FBQy9FLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDOUIsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQVM7YUFDM0UsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx5Q0FBd0IsRUFBQyxTQUFTLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUM7Z0JBQzlCLE1BQU0sRUFBRTtvQkFDTixVQUFVLEVBQUUsU0FBUztvQkFDckIsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztpQkFDckY7YUFDVCxDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUEseUNBQXdCLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgTk9fUkVDSVBJRU5UX1RYX1RZUEVTLCByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2Vycm9ycyc7XG5pbXBvcnQgeyBUeFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2Jhc2VUeXBlcyc7XG5cbmZ1bmN0aW9uIG1ha2VUeFJlcXVlc3Qob3ZlcnJpZGVzOiBQYXJ0aWFsPFR4UmVxdWVzdD4gPSB7fSk6IFR4UmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgdHhSZXF1ZXN0SWQ6ICd0ZXN0LXR4LXJlcXVlc3QtaWQnLFxuICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgIGludGVudDogdW5kZWZpbmVkLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcbn1cblxuZGVzY3JpYmUoJ3JlY2lwaWVudFV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnTk9fUkVDSVBJRU5UX1RYX1RZUEVTJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdjb250YWlucyBhbGwgZXhwZWN0ZWQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICAgICAgLy8gRUNEU0EgRVZNXG4gICAgICAgICdhY2NlbGVyYXRpb24nLFxuICAgICAgICAnZmlsbE5vbmNlJyxcbiAgICAgICAgJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAndG9rZW5BcHByb3ZhbCcsXG4gICAgICAgICdjb25zb2xpZGF0ZScsXG4gICAgICAgICdicmlkZ2VGdW5kcycsXG4gICAgICAgICdlbmFibGVUb2tlbicsXG4gICAgICAgICdlbmFibGV0b2tlbicsXG4gICAgICAgICdkaXNhYmxldG9rZW4nLFxuICAgICAgICAnY3VzdG9tVHgnLFxuICAgICAgICAnZGVmaUFwcHJvdmUnLFxuICAgICAgICAnZGVmaURlcG9zaXQnLFxuICAgICAgICAnZGVmaVdpdGhkcmF3JyxcbiAgICAgICAgJ2NvbnRyYWN0Q2FsbCcsXG4gICAgICAgIC8vIFN0YWtpbmdcbiAgICAgICAgJ2RlbGVnYXRlJyxcbiAgICAgICAgJ3VuZGVsZWdhdGUnLFxuICAgICAgICAnc3dpdGNoVmFsaWRhdG9yJyxcbiAgICAgICAgJ3N0YWtlJyxcbiAgICAgICAgJ3Vuc3Rha2UnLFxuICAgICAgICAnc3Rha2VXaXRoQ2FsbERhdGEnLFxuICAgICAgICAndW5zdGFrZVdpdGhDYWxsRGF0YScsXG4gICAgICAgICd0cmFuc2ZlclN0YWtlJyxcbiAgICAgICAgJ2luY3JlYXNlU3Rha2UnLFxuICAgICAgICAnZ29VbnN0YWtlJyxcbiAgICAgICAgJ2NsYWltJyxcbiAgICAgICAgJ3N0YWtlQ2xhaW1SZXdhcmRzJyxcbiAgICAgICAgJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAndHJhbnNmZXJBY2NlcHQnLFxuICAgICAgICAndHJhbnNmZXJSZWplY3QnLFxuICAgICAgICAndHJhbnNmZXJPZmZlcldpdGhkcmF3bicsXG4gICAgICAgICdjYW50b25Db21tYW5kJyxcbiAgICAgICAgJ3BsZWRnZScsXG4gICAgICAgIC8vIEF2YWxhbmNoZSAvIEZsYXJlIGNyb3NzLWNoYWluIGF0b21pYyBpbXBvcnRzXG4gICAgICAgICdpbXBvcnQnLFxuICAgICAgICAnaW1wb3J0dG9jJyxcbiAgICAgIF07XG4gICAgICBleHBlY3RlZC5mb3JFYWNoKCh0KSA9PiBhc3NlcnQub2soTk9fUkVDSVBJRU5UX1RYX1RZUEVTLmhhcyh0KSwgYCR7dH0gc2hvdWxkIGJlIGluIE5PX1JFQ0lQSUVOVF9UWF9UWVBFU2ApKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChOT19SRUNJUElFTlRfVFhfVFlQRVMuc2l6ZSwgZXhwZWN0ZWQubGVuZ3RoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBjb250YWluIHZhbHVlLXRyYW5zZmVyIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgWydwYXltZW50JywgJ2Zhbm91dCcsICd2b3RlJywgJ2RlZmktZGVwb3NpdCcsICdkZWZpLXJlZGVlbSddLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKCFOT19SRUNJUElFTlRfVFhfVFlQRVMuaGFzKHQpLCBgJHt0fSBtdXN0IE5PVCBiZSBpbiBOT19SRUNJUElFTlRfVFhfVFlQRVNgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdwYXNzZXMgdGhyb3VnaCB0eFBhcmFtcy5yZWNpcGllbnRzIHdoZW4gcHJlc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcxMDAnIH1dIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB0eFBhcmFtcyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzLCB0eFBhcmFtcy5yZWNpcGllbnRzKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWxscyBiYWNrIHRvIGludGVudC5yZWNpcGllbnRzIHdoZW4gdHhQYXJhbXMgaGFzIG5vbmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sXG4gICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzUwMCcsIHN5bWJvbDogJ2V0aCcgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8ubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0uYW1vdW50LCAnNTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVzb2x2ZXMgdHhUeXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgd2hlbiB0eFBhcmFtcy50eXBlIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC50eXBlLCAnY29uc29saWRhdGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgZXhlbXB0IHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCB0eFR5cGUgb2YgW1xuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgJ2NvbnRyYWN0Q2FsbCcsXG4gICAgICAgICdkZWxlZ2F0ZScsXG4gICAgICAgICdzdGFrZScsXG4gICAgICAgICdjcmVhdGVBY2NvdW50JyxcbiAgICAgICAgJ3BsZWRnZScsXG4gICAgICAgICdpbXBvcnQnLFxuICAgICAgICAnaW1wb3J0dG9jJyxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHsgdHlwZTogdHhUeXBlIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgQXZhbGFuY2hlIGNyb3NzLWNoYWluIGltcG9ydHMgcmVzb2x2ZWQgZnJvbSBpbnRlbnQuaW50ZW50VHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFAtY2hhaW4gYW5kIEMtY2hhaW4gaW1wb3J0IGludGVudHMgbGVnaXRpbWF0ZWx5IGNhcnJ5IG5vIHJlY2lwaWVudHMg4oCUXG4gICAgICAvLyB0aGUgd2FsbGV0IGltcG9ydHMgaXRzIG93biBVVFhPcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhlXG4gICAgICAvLyB3YWxsZXQgaXRzZWxmLiBUaGUgaW50ZW50VHlwZSBsaXZlcyBvbmx5IG9uIHRoZSBpbnRlbnQgKHR4UGFyYW1zLnR5cGVcbiAgICAgIC8vIGlzIHVuc2V0IG9uIHRoZSBNUEMgc2lnbmluZyBjYWxsKSBzbyB0aGUgZ3VhcmQgbXVzdCByZWFkIGl0IGZyb20gdGhlcmUuXG4gICAgICBmb3IgKGNvbnN0IGludGVudFR5cGUgb2YgWydpbXBvcnQnLCAnaW1wb3J0dG9jJ10pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlIH0gYXMgYW55IH0pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIFBhc2NhbENhc2UgYnV0IGludGVudC5pbnRlbnRUeXBlIGlzIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHNpZ25UcmFuc2FjdGlvblRzcyBwYXNzZXMgdHhQcmVidWlsZC5idWlsZFBhcmFtcyBhcyB0eFBhcmFtcy4gUHJlYnVpbGQgdXNlc1xuICAgICAgLy8gdHlwZTogJ0ltcG9ydCcgd2hpbGUgV1Agc3RvcmVzIGludGVudFR5cGU6ICdpbXBvcnQnIG9uIHRoZSB0eFJlcXVlc3QuXG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdpbXBvcnQnLCByZWNpcGllbnRzOiBbXSB9IGFzIGFueSB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgeyB0eXBlOiAnSW1wb3J0JywgcmVjaXBpZW50czogW10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBmb3IgdW5rbm93biB0eXBlcyB3aXRoIG5vIHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHR5cGU6ICdwYXltZW50JyB9KSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICdzaG91bGQgdGhyb3cgZm9yIHBheW1lbnQgdHlwZSB3aXRoIG5vIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHR4UGFyYW1zIGlzIHVuZGVmaW5lZCBhbmQgbm8gaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB1bmRlZmluZWQpLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBpbnRlbnQgaGFzIHN0YWtpbmdSZXF1ZXN0SWQgKHN0YWtpbmcgYnlwYXNzKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTEyMycgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHN0YWtpbmdSZXF1ZXN0SWQgZnJvbSBpbnRlbnQgaW50byBlZmZlY3RpdmVUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTQ1NicgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuc3Rha2luZ1JlcXVlc3RJZCwgJ3N0YWtpbmctcmVxLTQ1NicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBzdGFraW5nUmVxdWVzdElkIGluIHR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVsZWdhdGUnLCBzdGFraW5nUmVxdWVzdElkOiAnZnJvbS1pbnRlbnQnIH0gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHN0YWtpbmdSZXF1ZXN0SWQ6ICdmcm9tLWNhbGxlcicgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnN0YWtpbmdSZXF1ZXN0SWQsICdmcm9tLWNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZWZlcnMgdHhQYXJhbXMucmVjaXBpZW50cyBvdmVyIGludGVudC5yZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGludGVudCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnOTk5Jywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGNhbGxlcicsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGNhbGxlcicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
348
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNGQUFvSDtBQUNwSCw0REFBMEU7QUFHMUUsU0FBUyxhQUFhLENBQUMsWUFBZ0MsRUFBRTtJQUN2RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEdBQUcsU0FBUztLQUNXLENBQUM7QUFDNUIsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxXQUFXO2dCQUNYLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsVUFBVTtnQkFDVixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxjQUFjO2dCQUNkLHlEQUF5RDtnQkFDekQsVUFBVTtnQkFDVixZQUFZO2dCQUNaLGlCQUFpQjtnQkFDakIsT0FBTztnQkFDUCxTQUFTO2dCQUNULG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQixlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsV0FBVztnQkFDWCxPQUFPO2dCQUNQLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQjtnQkFDaEIsd0JBQXdCO2dCQUN4QixlQUFlO2dCQUNmLFFBQVE7Z0JBQ1IsK0NBQStDO2dCQUMvQyxRQUFRO2dCQUNSLFdBQVc7Z0JBQ1gsc0RBQXNEO2dCQUN0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SCxFQUFFLENBQUMsK0RBQStELEVBQUU7Z0JBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBUyxFQUFFLENBQUMsQ0FBQztnQkFDdkYsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx5Q0FBd0IsRUFBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsZ0NBQXVCLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE5PX1JFQ0lQSUVOVF9UWF9UWVBFUywgcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9yZWNpcGllbnRVdGlscyc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby9lcnJvcnMnO1xuaW1wb3J0IHsgVHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVHlwZXMnO1xuXG5mdW5jdGlvbiBtYWtlVHhSZXF1ZXN0KG92ZXJyaWRlczogUGFydGlhbDxUeFJlcXVlc3Q+ID0ge30pOiBUeFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIHR4UmVxdWVzdElkOiAndGVzdC10eC1yZXF1ZXN0LWlkJyxcbiAgICB3YWxsZXRJZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICBpbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG59XG5cbmRlc2NyaWJlKCdyZWNpcGllbnRVdGlscycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ05PX1JFQ0lQSUVOVF9UWF9UWVBFUycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY29udGFpbnMgYWxsIGV4cGVjdGVkIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgICAgIC8vIEVDRFNBIEVWTVxuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2ZpbGxOb25jZScsXG4gICAgICAgICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAnY29uc29saWRhdGUnLFxuICAgICAgICAnYnJpZGdlRnVuZHMnLFxuICAgICAgICAnZW5hYmxlVG9rZW4nLFxuICAgICAgICAnZW5hYmxldG9rZW4nLFxuICAgICAgICAnZGlzYWJsZXRva2VuJyxcbiAgICAgICAgJ2N1c3RvbVR4JyxcbiAgICAgICAgJ2RlZmlBcHByb3ZlJyxcbiAgICAgICAgJ2RlZmlEZXBvc2l0JyxcbiAgICAgICAgJ2RlZmlXaXRoZHJhdycsXG4gICAgICAgICdjb250cmFjdENhbGwnLFxuICAgICAgICAvLyBTdGFraW5nIOKAlCAnZGVsZWdhdGUnIGFsc28gY292ZXJzIFNPTCBzb2xEZWxlZ2F0ZUludGVudFxuICAgICAgICAnZGVsZWdhdGUnLFxuICAgICAgICAndW5kZWxlZ2F0ZScsXG4gICAgICAgICdzd2l0Y2hWYWxpZGF0b3InLFxuICAgICAgICAnc3Rha2UnLFxuICAgICAgICAndW5zdGFrZScsXG4gICAgICAgICdzdGFrZVdpdGhDYWxsRGF0YScsXG4gICAgICAgICd1bnN0YWtlV2l0aENhbGxEYXRhJyxcbiAgICAgICAgJ3RyYW5zZmVyU3Rha2UnLFxuICAgICAgICAnaW5jcmVhc2VTdGFrZScsXG4gICAgICAgICdnb1Vuc3Rha2UnLFxuICAgICAgICAnY2xhaW0nLFxuICAgICAgICAnc3Rha2VDbGFpbVJld2FyZHMnLFxuICAgICAgICAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICd0cmFuc2ZlckFjY2VwdCcsXG4gICAgICAgICd0cmFuc2ZlclJlamVjdCcsXG4gICAgICAgICd0cmFuc2Zlck9mZmVyV2l0aGRyYXduJyxcbiAgICAgICAgJ2NhbnRvbkNvbW1hbmQnLFxuICAgICAgICAncGxlZGdlJyxcbiAgICAgICAgLy8gQXZhbGFuY2hlIC8gRmxhcmUgY3Jvc3MtY2hhaW4gYXRvbWljIGltcG9ydHNcbiAgICAgICAgJ2ltcG9ydCcsXG4gICAgICAgICdpbXBvcnR0b2MnLFxuICAgICAgICAvLyBTT0w6IGRlYWN0aXZhdGUgc3Rha2UgYWNjb3VudCAoc29sRGVhY3RpdmF0ZUludGVudClcbiAgICAgICAgJ2RlYWN0aXZhdGUnLFxuICAgICAgICAvLyBTT0w6IGF1dGhvcml6ZSBzdGFrZSBhY2NvdW50IChzb2xBdXRob3JpemVJbnRlbnQpXG4gICAgICAgICdhdXRob3JpemUnLFxuICAgICAgXTtcbiAgICAgIGV4cGVjdGVkLmZvckVhY2goKHQpID0+IGFzc2VydC5vayhOT19SRUNJUElFTlRfVFhfVFlQRVMuaGFzKHQpLCBgJHt0fSBzaG91bGQgYmUgaW4gTk9fUkVDSVBJRU5UX1RYX1RZUEVTYCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKE5PX1JFQ0lQSUVOVF9UWF9UWVBFUy5zaXplLCBleHBlY3RlZC5sZW5ndGgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGNvbnRhaW4gdmFsdWUtdHJhbnNmZXIgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBbJ3BheW1lbnQnLCAnZmFub3V0JywgJ3ZvdGUnLCAnZGVmaS1kZXBvc2l0JywgJ2RlZmktcmVkZWVtJ10uZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBhc3NlcnQub2soIU5PX1JFQ0lQSUVOVF9UWF9UWVBFUy5oYXModCksIGAke3R9IG11c3QgTk9UIGJlIGluIE5PX1JFQ0lQSUVOVF9UWF9UWVBFU2ApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Bhc3NlcyB0aHJvdWdoIHR4UGFyYW1zLnJlY2lwaWVudHMgd2hlbiBwcmVzZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGFiYycsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHMsIHR4UGFyYW1zLnJlY2lwaWVudHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gaW50ZW50LnJlY2lwaWVudHMgd2hlbiB0eFBhcmFtcyBoYXMgbm9uZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sIGFtb3VudDogeyB2YWx1ZTogJzUwMCcsIHN5bWJvbDogJ2V0aCcgfSB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8ubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0uYW1vdW50LCAnNTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVzb2x2ZXMgdHhUeXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgd2hlbiB0eFBhcmFtcy50eXBlIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoeyBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudHlwZSwgJ2NvbnNvbGlkYXRlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIGV4ZW1wdCB0eXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgdHhUeXBlIG9mIFtcbiAgICAgICAgJ2FjY2VsZXJhdGlvbicsXG4gICAgICAgICdjb25zb2xpZGF0ZScsXG4gICAgICAgICdjb250cmFjdENhbGwnLFxuICAgICAgICAnZGVsZWdhdGUnLFxuICAgICAgICAnc3Rha2UnLFxuICAgICAgICAnY3JlYXRlQWNjb3VudCcsXG4gICAgICAgICdwbGVkZ2UnLFxuICAgICAgICAnaW1wb3J0JyxcbiAgICAgICAgJ2ltcG9ydHRvYycsXG4gICAgICAgICdkZWFjdGl2YXRlJyxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHsgdHlwZTogdHhUeXBlIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgQXZhbGFuY2hlIGNyb3NzLWNoYWluIGltcG9ydHMgcmVzb2x2ZWQgZnJvbSBpbnRlbnQuaW50ZW50VHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFAtY2hhaW4gYW5kIEMtY2hhaW4gaW1wb3J0IGludGVudHMgbGVnaXRpbWF0ZWx5IGNhcnJ5IG5vIHJlY2lwaWVudHMg4oCUXG4gICAgICAvLyB0aGUgd2FsbGV0IGltcG9ydHMgaXRzIG93biBVVFhPcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhlXG4gICAgICAvLyB3YWxsZXQgaXRzZWxmLiBUaGUgaW50ZW50VHlwZSBsaXZlcyBvbmx5IG9uIHRoZSBpbnRlbnQgKHR4UGFyYW1zLnR5cGVcbiAgICAgIC8vIGlzIHVuc2V0IG9uIHRoZSBNUEMgc2lnbmluZyBjYWxsKSBzbyB0aGUgZ3VhcmQgbXVzdCByZWFkIGl0IGZyb20gdGhlcmUuXG4gICAgICBmb3IgKGNvbnN0IGludGVudFR5cGUgb2YgWydpbXBvcnQnLCAnaW1wb3J0dG9jJ10pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlIH0gYXMgYW55IH0pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIFBhc2NhbENhc2UgYnV0IGludGVudC5pbnRlbnRUeXBlIGlzIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHNpZ25UcmFuc2FjdGlvblRzcyBwYXNzZXMgdHhQcmVidWlsZC5idWlsZFBhcmFtcyBhcyB0eFBhcmFtcy4gUHJlYnVpbGQgdXNlc1xuICAgICAgLy8gdHlwZTogJ0ltcG9ydCcgd2hpbGUgV1Agc3RvcmVzIGludGVudFR5cGU6ICdpbXBvcnQnIG9uIHRoZSB0eFJlcXVlc3QuXG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdpbXBvcnQnLCByZWNpcGllbnRzOiBbXSB9IGFzIGFueSB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgeyB0eXBlOiAnSW1wb3J0JywgcmVjaXBpZW50czogW10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBmb3IgdW5rbm93biB0eXBlcyB3aXRoIG5vIHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHR5cGU6ICdwYXltZW50JyB9KSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICdzaG91bGQgdGhyb3cgZm9yIHBheW1lbnQgdHlwZSB3aXRoIG5vIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHR4UGFyYW1zIGlzIHVuZGVmaW5lZCBhbmQgbm8gaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB1bmRlZmluZWQpLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBpbnRlbnQgaGFzIHN0YWtpbmdSZXF1ZXN0SWQgKHN0YWtpbmcgYnlwYXNzKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTEyMycgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHN0YWtpbmdSZXF1ZXN0SWQgZnJvbSBpbnRlbnQgaW50byBlZmZlY3RpdmVUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTQ1NicgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuc3Rha2luZ1JlcXVlc3RJZCwgJ3N0YWtpbmctcmVxLTQ1NicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBzdGFraW5nUmVxdWVzdElkIGluIHR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVsZWdhdGUnLCBzdGFraW5nUmVxdWVzdElkOiAnZnJvbS1pbnRlbnQnIH0gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHN0YWtpbmdSZXF1ZXN0SWQ6ICdmcm9tLWNhbGxlcicgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnN0YWtpbmdSZXF1ZXN0SWQsICdmcm9tLWNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZWZlcnMgdHhQYXJhbXMucmVjaXBpZW50cyBvdmVyIGludGVudC5yZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGludGVudCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnOTk5Jywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGNhbGxlcicsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZXNlcnZlcyBkYXRhIGZpZWxkIGZyb20gaW50ZW50IHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHsgYWRkcmVzczogJzB4YWJjJyB9LCBhbW91bnQ6IHsgdmFsdWU6ICcxMDAnLCBzeW1ib2w6ICdldGgnIH0sIGRhdGE6ICcweGRlYWRiZWVmJyB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmRhdGEsICcweGRlYWRiZWVmJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndG9rZW5OYW1lIHByZXNlcnZhdGlvbiByZWdyZXNzaW9uIHRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3ByZXNlcnZlcyB0b2tlbk5hbWUgZnJvbSBhbW91bnQuc3ltYm9sIHdoZW4gaXQgZGlmZmVycyBmcm9tIGNoYWluTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdVc2VyV2FsbGV0QWRkcmVzczExMTExMTExMTExMTExMTExMTExMTExMTExMScgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICcxMDAwMDAwJywgc3ltYm9sOiAndHNvbDp1c2RjJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9LCAndHNvbCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/Lmxlbmd0aCwgMSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLnRva2VuTmFtZSwgJ3Rzb2w6dXNkYycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIE5PVCBzZXQgdG9rZW5OYW1lIHdoZW4gc3ltYm9sIGVxdWFscyBjaGFpbk5hbWUgKG5hdGl2ZSBTT0wgdHJhbnNmZXIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHsgYWRkcmVzczogJ1JlY2lwaWVudEFkZHJlc3MxMTExMTExMTExMTExMTExMTExMTExMTExMTEnIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnNTAwMDAwMDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30sICd0c29sJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLnRva2VuTmFtZSwgdW5kZWZpbmVkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncHJlZmVycyB0b2tlbkRhdGEudG9rZW5OYW1lIG92ZXIgYW1vdW50LnN5bWJvbCAodXNlcyBkaXN0aW5jdCB2YWx1ZXMgdG8gdmVyaWZ5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdSZWNpcGllbnRBZGRyZXNzMTExMTExMTExMTExMTExMTExMTExMTExMTExJyB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzUwMDAwMCcsIHN5bWJvbDogJ3Rzb2w6dXNkYy1hbHQnIH0sXG4gICAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7IHRva2VuVHlwZTogJ2Z1bmdpYmxlJywgdG9rZW5RdWFudGl0eTogJzUwMDAwMCcsIHRva2VuTmFtZTogJ2Nhbm9uaWNhbC10b2tlbi1uYW1lJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9LCAndHNvbCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/LlswXS50b2tlbk5hbWUsICdjYW5vbmljYWwtdG9rZW4tbmFtZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdmYWxscyBiYWNrIHRvIGFtb3VudC5zeW1ib2wgd2hlbiB0b2tlbkRhdGEudG9rZW5OYW1lIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdSZWNpcGllbnRBZGRyZXNzMTExMTExMTExMTExMTExMTExMTExMTExMTExJyB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzIwMDAwMCcsIHN5bWJvbDogJ3NvbDp1c2RjJyB9LFxuICAgICAgICAgICAgICAgIHRva2VuRGF0YTogeyB0b2tlblR5cGU6ICdmdW5naWJsZScsIHRva2VuUXVhbnRpdHk6ICcyMDAwMDAnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30sICdzb2wnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0udG9rZW5OYW1lLCAnc29sOnVzZGMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZmFsbHMgYmFjayB0byBhbW91bnQuc3ltYm9sIHdoZW4gdG9rZW5EYXRhLnRva2VuTmFtZSBpcyBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnUmVjaXBpZW50QWRkcmVzczExMTExMTExMTExMTExMTExMTExMTExMTExMScgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICcxMDAwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0sXG4gICAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7IHRva2VuVHlwZTogJ2Z1bmdpYmxlJywgdG9rZW5RdWFudGl0eTogJzEwMDAwMCcsIHRva2VuTmFtZTogJycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSwgJ3Rzb2wnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0udG9rZW5OYW1lLCAndHNvbDp1c2RjJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgTk9UIHNldCB0b2tlbk5hbWUgd2hlbiBjaGFpbk5hbWUgaXMgYWJzZW50IChsZWdhY3kgRUNEU0EgY2FsbGVycywgbm8gdG9rZW5EYXRhKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGFiYycgfSwgYW1vdW50OiB7IHZhbHVlOiAnMTAwJywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/LlswXS50b2tlbk5hbWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdwcmVzZXJ2ZXMgdG9rZW5EYXRhLnRva2VuTmFtZSB3aGVuIGNoYWluTmFtZSBpcyBhYnNlbnQgKGxlZ2FjeSBFQ0RTQSB3aXRoIHRva2VuRGF0YSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICAgIGludGVudDoge1xuICAgICAgICAgICAgaW50ZW50VHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnMTAwMCcsIHN5bWJvbDogJ2VyYzIwOnVzZGMnIH0sXG4gICAgICAgICAgICAgICAgdG9rZW5EYXRhOiB7IHRva2VuVHlwZTogJ2Z1bmdpYmxlJywgdG9rZW5RdWFudGl0eTogJzEwMDAnLCB0b2tlbk5hbWU6ICdldGg6dXNkYycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLnRva2VuTmFtZSwgJ2V0aDp1c2RjJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3NlbmRNYW55IHRzb2w6dXNkYzogZG9lcyBub3QgdGhyb3cgYW5kIHByZXNlcnZlcyB0b2tlbk5hbWUgaW4gZnVsbCByb3VuZC10cmlwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHsgYWRkcmVzczogJ1NvbFVzZXJXYWxsZXQxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyB9LFxuICAgICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzIwMDAwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdTb2xVc2VyV2FsbGV0MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMicgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICczMDAwMDAwJywgc3ltYm9sOiAndHNvbDp1c2RjJyB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9LCAndHNvbCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHM/Lmxlbmd0aCwgMik7XG4gICAgICAgIHJlc3VsdC5yZWNpcGllbnRzIS5mb3JFYWNoKChyKSA9PiBhc3NlcnQuc3RyaWN0RXF1YWwoci50b2tlbk5hbWUsICd0c29sOnVzZGMnKSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cyFbMF0uYW1vdW50LCAnMjAwMDAwMCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHMhWzFdLmFtb3VudCwgJzMwMDAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaGFuZGxlcyBtaXhlZCBuYXRpdmUgKyB0b2tlbiByZWNpcGllbnRzIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdTb2xOYXRpdmUxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnIH0sXG4gICAgICAgICAgICAgICAgYW1vdW50OiB7IHZhbHVlOiAnMTAwMDAwMDAwMCcsIHN5bWJvbDogJ3Rzb2wnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiB7IGFkZHJlc3M6ICdTb2xUb2tlbjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScgfSxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHsgdmFsdWU6ICc1MDAwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30sICd0c29sJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cyFbMF0udG9rZW5OYW1lLCB1bmRlZmluZWQpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnJlY2lwaWVudHMhWzFdLnRva2VuTmFtZSwgJ3Rzb2w6dXNkYycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnU09MIG5vLXJlY2lwaWVudCBpbnRlbnQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIFwiZGVsZWdhdGVcIiAoc29sRGVsZWdhdGVJbnRlbnQpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdkZWxlZ2F0ZScgfSBhcyBhbnkgfSk7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIFwiZGVhY3RpdmF0ZVwiIChzb2xEZWFjdGl2YXRlSW50ZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVhY3RpdmF0ZScgfSBhcyBhbnkgfSk7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgdGhyb3cgZm9yIFwiYXV0aG9yaXplXCIgKHNvbEF1dGhvcml6ZUludGVudCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoeyBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2F1dGhvcml6ZScgfSBhcyBhbnkgfSk7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndGhyb3dzIGZvciBzdGFraW5nQXV0aG9yaXplIOKAlCBtdXN0IGJlIHZhbGlkYXRlZCBhdCBjb2luIGxheWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdzdGFraW5nQXV0aG9yaXplJyB9IGFzIGFueSB9KTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7fSksIEludmFsaWRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/utils/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("should");
|
|
37
|
+
const bs58 = __importStar(require("bs58"));
|
|
38
|
+
const wallet_1 = require("../../../../src/bitgo/utils/wallet");
|
|
39
|
+
describe('generateRandomPassword', () => {
|
|
40
|
+
it('returns a decodable base58 string of numWords * 4 bytes', () => {
|
|
41
|
+
for (const numWords of [1, 5, 10, 32]) {
|
|
42
|
+
const pwd = (0, wallet_1.generateRandomPassword)(numWords);
|
|
43
|
+
const decoded = bs58.decode(pwd);
|
|
44
|
+
decoded.length.should.equal(numWords * 4);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('produces distinct outputs on repeated calls', () => {
|
|
48
|
+
const samples = new Set();
|
|
49
|
+
for (let i = 0; i < 100; i++) {
|
|
50
|
+
samples.add((0, wallet_1.generateRandomPassword)(5));
|
|
51
|
+
}
|
|
52
|
+
samples.size.should.equal(100);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUNoQiwyQ0FBNkI7QUFDN0IsK0RBQTRFO0FBRTVFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtRQUNqRSxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFBLCtCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwrQkFBc0IsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3dhbGxldCc7XG5cbmRlc2NyaWJlKCdnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkJywgKCkgPT4ge1xuICBpdCgncmV0dXJucyBhIGRlY29kYWJsZSBiYXNlNTggc3RyaW5nIG9mIG51bVdvcmRzICogNCBieXRlcycsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IG51bVdvcmRzIG9mIFsxLCA1LCAxMCwgMzJdKSB7XG4gICAgICBjb25zdCBwd2QgPSBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkKG51bVdvcmRzKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBiczU4LmRlY29kZShwd2QpO1xuICAgICAgZGVjb2RlZC5sZW5ndGguc2hvdWxkLmVxdWFsKG51bVdvcmRzICogNCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgncHJvZHVjZXMgZGlzdGluY3Qgb3V0cHV0cyBvbiByZXBlYXRlZCBjYWxscycsICgpID0+IHtcbiAgICBjb25zdCBzYW1wbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykge1xuICAgICAgc2FtcGxlcy5hZGQoZ2VuZXJhdGVSYW5kb21QYXNzd29yZCg1KSk7XG4gICAgfVxuICAgIHNhbXBsZXMuc2l6ZS5zaG91bGQuZXF1YWwoMTAwKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -39,5 +39,28 @@ describe('wallet options codecs with encryptionVersion', () => {
|
|
|
39
39
|
it('GenerateGoAccountWalletOptionsCodec works without encryptionVersion', () => {
|
|
40
40
|
assert_1.default.ok((0, Either_1.isRight)(iWallets_1.GenerateGoAccountWalletOptionsCodec.decode(goAccountBase)));
|
|
41
41
|
});
|
|
42
|
+
it('GenerateGoAccountWalletOptionsCodec accepts password fields when user key signing is disabled', () => {
|
|
43
|
+
assert_1.default.ok((0, Either_1.isRight)(iWallets_1.GenerateGoAccountWalletOptionsCodec.decode({
|
|
44
|
+
...goAccountBase,
|
|
45
|
+
userKeySigningRequired: false,
|
|
46
|
+
})));
|
|
47
|
+
});
|
|
48
|
+
it('GenerateGoAccountWalletOptionsCodec accepts omitted password fields when user key signing is disabled', () => {
|
|
49
|
+
assert_1.default.ok((0, Either_1.isRight)(iWallets_1.GenerateGoAccountWalletOptionsCodec.decode({
|
|
50
|
+
label: 'test',
|
|
51
|
+
enterprise: 'ent',
|
|
52
|
+
type: 'trading',
|
|
53
|
+
userKeySigningRequired: false,
|
|
54
|
+
})));
|
|
55
|
+
});
|
|
56
|
+
it('GenerateGoAccountWalletOptionsCodec rejects a single password field when user key signing is disabled', () => {
|
|
57
|
+
assert_1.default.ok((0, Either_1.isLeft)(iWallets_1.GenerateGoAccountWalletOptionsCodec.decode({
|
|
58
|
+
label: 'test',
|
|
59
|
+
passphrase: 'pass',
|
|
60
|
+
enterprise: 'ent',
|
|
61
|
+
type: 'trading',
|
|
62
|
+
userKeySigningRequired: false,
|
|
63
|
+
})));
|
|
64
|
+
});
|
|
42
65
|
});
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0T3B0aW9uc0NvZGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0T3B0aW9uc0NvZGVjcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1Qix5Q0FBK0M7QUFFL0Msb0VBRytDO0FBRS9DLFFBQVEsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7SUFDNUQsTUFBTSxhQUFhLEdBQUc7UUFDcEIsS0FBSyxFQUFFLE1BQU07UUFDYixVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsS0FBSztRQUNqQixzQkFBc0IsRUFBRSxNQUFNO1FBQzlCLE9BQU8sRUFBRSxrQkFBMkI7S0FDckMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHO1FBQ3BCLEtBQUssRUFBRSxNQUFNO1FBQ2IsVUFBVSxFQUFFLE1BQU07UUFDbEIsVUFBVSxFQUFFLEtBQUs7UUFDakIsc0JBQXNCLEVBQUUsTUFBTTtRQUM5QixJQUFJLEVBQUUsU0FBa0I7S0FDekIsQ0FBQztJQUVGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7UUFDMUUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsSUFBQSxnQkFBTyxFQUFDLDhDQUFtQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtRQUMxRSxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFBLGVBQU0sRUFBQyw4Q0FBbUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7UUFDN0UsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsSUFBQSxnQkFBTyxFQUFDLDhDQUFtQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1FBQzFFLGdCQUFNLENBQUMsRUFBRSxDQUFDLElBQUEsZ0JBQU8sRUFBQyw4Q0FBbUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7UUFDMUUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsSUFBQSxlQUFNLEVBQUMsOENBQW1DLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1FBQzdFLGdCQUFNLENBQUMsRUFBRSxDQUFDLElBQUEsZ0JBQU8sRUFBQyw4Q0FBbUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtGQUErRixFQUFFLEdBQUcsRUFBRTtRQUN2RyxnQkFBTSxDQUFDLEVBQUUsQ0FDUCxJQUFBLGdCQUFPLEVBQ0wsOENBQW1DLENBQUMsTUFBTSxDQUFDO1lBQ3pDLEdBQUcsYUFBYTtZQUNoQixzQkFBc0IsRUFBRSxLQUFLO1NBQzlCLENBQUMsQ0FDSCxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1R0FBdUcsRUFBRSxHQUFHLEVBQUU7UUFDL0csZ0JBQU0sQ0FBQyxFQUFFLENBQ1AsSUFBQSxnQkFBTyxFQUNMLDhDQUFtQyxDQUFDLE1BQU0sQ0FBQztZQUN6QyxLQUFLLEVBQUUsTUFBTTtZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2Ysc0JBQXNCLEVBQUUsS0FBSztTQUM5QixDQUFDLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUdBQXVHLEVBQUUsR0FBRyxFQUFFO1FBQy9HLGdCQUFNLENBQUMsRUFBRSxDQUNQLElBQUEsZUFBTSxFQUNKLDhDQUFtQyxDQUFDLE1BQU0sQ0FBQztZQUN6QyxLQUFLLEVBQUUsTUFBTTtZQUNiLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2Ysc0JBQXNCLEVBQUUsS0FBSztTQUM5QixDQUFDLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGlzUmlnaHQsIGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5cbmltcG9ydCB7XG4gIEdlbmVyYXRlTGlnaHRuaW5nV2FsbGV0T3B0aW9uc0NvZGVjLFxuICBHZW5lcmF0ZUdvQWNjb3VudFdhbGxldE9wdGlvbnNDb2RlYyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9pV2FsbGV0cyc7XG5cbmRlc2NyaWJlKCd3YWxsZXQgb3B0aW9ucyBjb2RlY3Mgd2l0aCBlbmNyeXB0aW9uVmVyc2lvbicsICgpID0+IHtcbiAgY29uc3QgbGlnaHRuaW5nQmFzZSA9IHtcbiAgICBsYWJlbDogJ3Rlc3QnLFxuICAgIHBhc3NwaHJhc2U6ICdwYXNzJyxcbiAgICBlbnRlcnByaXNlOiAnZW50JyxcbiAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAnY29kZScsXG4gICAgc3ViVHlwZTogJ2xpZ2h0bmluZ0N1c3RvZHknIGFzIGNvbnN0LFxuICB9O1xuXG4gIGNvbnN0IGdvQWNjb3VudEJhc2UgPSB7XG4gICAgbGFiZWw6ICd0ZXN0JyxcbiAgICBwYXNzcGhyYXNlOiAncGFzcycsXG4gICAgZW50ZXJwcmlzZTogJ2VudCcsXG4gICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ2NvZGUnLFxuICAgIHR5cGU6ICd0cmFkaW5nJyBhcyBjb25zdCxcbiAgfTtcblxuICBpdCgnR2VuZXJhdGVMaWdodG5pbmdXYWxsZXRPcHRpb25zQ29kZWMgYWNjZXB0cyBlbmNyeXB0aW9uVmVyc2lvbjogMicsICgpID0+IHtcbiAgICBhc3NlcnQub2soaXNSaWdodChHZW5lcmF0ZUxpZ2h0bmluZ1dhbGxldE9wdGlvbnNDb2RlYy5kZWNvZGUoeyAuLi5saWdodG5pbmdCYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KSkpO1xuICB9KTtcblxuICBpdCgnR2VuZXJhdGVMaWdodG5pbmdXYWxsZXRPcHRpb25zQ29kZWMgcmVqZWN0cyBlbmNyeXB0aW9uVmVyc2lvbjogMycsICgpID0+IHtcbiAgICBhc3NlcnQub2soaXNMZWZ0KEdlbmVyYXRlTGlnaHRuaW5nV2FsbGV0T3B0aW9uc0NvZGVjLmRlY29kZSh7IC4uLmxpZ2h0bmluZ0Jhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAzIH0pKSk7XG4gIH0pO1xuXG4gIGl0KCdHZW5lcmF0ZUxpZ2h0bmluZ1dhbGxldE9wdGlvbnNDb2RlYyB3b3JrcyB3aXRob3V0IGVuY3J5cHRpb25WZXJzaW9uJywgKCkgPT4ge1xuICAgIGFzc2VydC5vayhpc1JpZ2h0KEdlbmVyYXRlTGlnaHRuaW5nV2FsbGV0T3B0aW9uc0NvZGVjLmRlY29kZShsaWdodG5pbmdCYXNlKSkpO1xuICB9KTtcblxuICBpdCgnR2VuZXJhdGVHb0FjY291bnRXYWxsZXRPcHRpb25zQ29kZWMgYWNjZXB0cyBlbmNyeXB0aW9uVmVyc2lvbjogMicsICgpID0+IHtcbiAgICBhc3NlcnQub2soaXNSaWdodChHZW5lcmF0ZUdvQWNjb3VudFdhbGxldE9wdGlvbnNDb2RlYy5kZWNvZGUoeyAuLi5nb0FjY291bnRCYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KSkpO1xuICB9KTtcblxuICBpdCgnR2VuZXJhdGVHb0FjY291bnRXYWxsZXRPcHRpb25zQ29kZWMgcmVqZWN0cyBlbmNyeXB0aW9uVmVyc2lvbjogMycsICgpID0+IHtcbiAgICBhc3NlcnQub2soaXNMZWZ0KEdlbmVyYXRlR29BY2NvdW50V2FsbGV0T3B0aW9uc0NvZGVjLmRlY29kZSh7IC4uLmdvQWNjb3VudEJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAzIH0pKSk7XG4gIH0pO1xuXG4gIGl0KCdHZW5lcmF0ZUdvQWNjb3VudFdhbGxldE9wdGlvbnNDb2RlYyB3b3JrcyB3aXRob3V0IGVuY3J5cHRpb25WZXJzaW9uJywgKCkgPT4ge1xuICAgIGFzc2VydC5vayhpc1JpZ2h0KEdlbmVyYXRlR29BY2NvdW50V2FsbGV0T3B0aW9uc0NvZGVjLmRlY29kZShnb0FjY291bnRCYXNlKSkpO1xuICB9KTtcblxuICBpdCgnR2VuZXJhdGVHb0FjY291bnRXYWxsZXRPcHRpb25zQ29kZWMgYWNjZXB0cyBwYXNzd29yZCBmaWVsZHMgd2hlbiB1c2VyIGtleSBzaWduaW5nIGlzIGRpc2FibGVkJywgKCkgPT4ge1xuICAgIGFzc2VydC5vayhcbiAgICAgIGlzUmlnaHQoXG4gICAgICAgIEdlbmVyYXRlR29BY2NvdW50V2FsbGV0T3B0aW9uc0NvZGVjLmRlY29kZSh7XG4gICAgICAgICAgLi4uZ29BY2NvdW50QmFzZSxcbiAgICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuICBpdCgnR2VuZXJhdGVHb0FjY291bnRXYWxsZXRPcHRpb25zQ29kZWMgYWNjZXB0cyBvbWl0dGVkIHBhc3N3b3JkIGZpZWxkcyB3aGVuIHVzZXIga2V5IHNpZ25pbmcgaXMgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgaXNSaWdodChcbiAgICAgICAgR2VuZXJhdGVHb0FjY291bnRXYWxsZXRPcHRpb25zQ29kZWMuZGVjb2RlKHtcbiAgICAgICAgICBsYWJlbDogJ3Rlc3QnLFxuICAgICAgICAgIGVudGVycHJpc2U6ICdlbnQnLFxuICAgICAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuICBpdCgnR2VuZXJhdGVHb0FjY291bnRXYWxsZXRPcHRpb25zQ29kZWMgcmVqZWN0cyBhIHNpbmdsZSBwYXNzd29yZCBmaWVsZCB3aGVuIHVzZXIga2V5IHNpZ25pbmcgaXMgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgaXNMZWZ0KFxuICAgICAgICBHZW5lcmF0ZUdvQWNjb3VudFdhbGxldE9wdGlvbnNDb2RlYy5kZWNvZGUoe1xuICAgICAgICAgIGxhYmVsOiAndGVzdCcsXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3MnLFxuICAgICAgICAgIGVudGVycHJpc2U6ICdlbnQnLFxuICAgICAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -48,7 +48,7 @@ describe('Wallets - GoAccount (OFC trading) wallet creation', function () {
|
|
|
48
48
|
beforeEach(function () {
|
|
49
49
|
mockKeychains = {
|
|
50
50
|
create: sinon.stub().returns({ pub: userPub, prv: userPrv }),
|
|
51
|
-
add: sinon.stub().
|
|
51
|
+
add: sinon.stub().callsFake(async (params) => ({ id: 'user-key-id', ...params })),
|
|
52
52
|
};
|
|
53
53
|
const mockWalletData = { id: 'wallet-id', keys: ['user-key-id'] };
|
|
54
54
|
postChain = {
|
|
@@ -78,7 +78,7 @@ describe('Wallets - GoAccount (OFC trading) wallet creation', function () {
|
|
|
78
78
|
sinon.restore();
|
|
79
79
|
});
|
|
80
80
|
it('should forward userKeySigningRequired: false in coinSpecific when provided', async function () {
|
|
81
|
-
await wallets.generateWallet({
|
|
81
|
+
const result = await wallets.generateWallet({
|
|
82
82
|
label: 'Test OFC Wallet',
|
|
83
83
|
passphrase: 'test-passphrase',
|
|
84
84
|
enterprise: 'enterprise-123',
|
|
@@ -90,6 +90,10 @@ describe('Wallets - GoAccount (OFC trading) wallet creation', function () {
|
|
|
90
90
|
const sentParams = postChain.send.firstCall.args[0];
|
|
91
91
|
sentParams.should.have.property('coinSpecific');
|
|
92
92
|
sentParams.coinSpecific.should.have.property('userKeySigningRequired', false);
|
|
93
|
+
const keychainParams = mockKeychains.add.firstCall.args[0];
|
|
94
|
+
keychainParams.should.have.property('encryptedPrv', `encrypted:test-passphrase:${userPrv}`);
|
|
95
|
+
keychainParams.should.have.property('originalPasscodeEncryptionCode', 'pce-code');
|
|
96
|
+
result.should.have.property('encryptedWalletPassphrase', 'encrypted:pce-code:test-passphrase');
|
|
93
97
|
});
|
|
94
98
|
it('should forward userKeySigningRequired: true in coinSpecific when explicitly set', async function () {
|
|
95
99
|
await wallets.generateWallet({
|
|
@@ -114,5 +118,33 @@ describe('Wallets - GoAccount (OFC trading) wallet creation', function () {
|
|
|
114
118
|
const sentParams = postChain.send.firstCall.args[0];
|
|
115
119
|
sentParams.should.not.have.property('coinSpecific');
|
|
116
120
|
});
|
|
121
|
+
it('should generate a public-only user key when user key signing is disabled and password fields are omitted', async function () {
|
|
122
|
+
const result = await wallets.generateWallet({
|
|
123
|
+
label: 'Passwordless OFC Wallet',
|
|
124
|
+
enterprise: 'enterprise-123',
|
|
125
|
+
type: 'trading',
|
|
126
|
+
userKeySigningRequired: false,
|
|
127
|
+
});
|
|
128
|
+
assert.ok(mockKeychains.add.calledOnce, 'user key should be uploaded once');
|
|
129
|
+
const keychainParams = mockKeychains.add.firstCall.args[0];
|
|
130
|
+
keychainParams.should.have.property('pub', userPub);
|
|
131
|
+
keychainParams.should.not.have.property('encryptedPrv');
|
|
132
|
+
keychainParams.should.not.have.property('originalPasscodeEncryptionCode');
|
|
133
|
+
assert.ok(postChain.send.calledOnce, 'POST /wallet/add should be called once');
|
|
134
|
+
postChain.send.firstCall.args[0].coinSpecific.should.have.property('userKeySigningRequired', false);
|
|
135
|
+
result.should.not.have.property('encryptedWalletPassphrase');
|
|
136
|
+
result.should.not.have.property('warning');
|
|
137
|
+
});
|
|
138
|
+
it('should reject passwordless generation when only one password field is supplied', async function () {
|
|
139
|
+
await assert.rejects(wallets.generateWallet({
|
|
140
|
+
label: 'Passwordless OFC Wallet',
|
|
141
|
+
enterprise: 'enterprise-123',
|
|
142
|
+
type: 'trading',
|
|
143
|
+
userKeySigningRequired: false,
|
|
144
|
+
passphrase: 'partial-password-input',
|
|
145
|
+
}), /error\(s\) parsing generate go account request params/);
|
|
146
|
+
assert.strictEqual(mockKeychains.add.called, false);
|
|
147
|
+
assert.strictEqual(postChain.send.called, false);
|
|
148
|
+
});
|
|
117
149
|
});
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c0dvQWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0c0dvQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBQ2hCLGtFQUErRDtBQUUvRCxRQUFRLENBQUMsbURBQW1ELEVBQUU7SUFDNUQsSUFBSSxPQUFnQixDQUFDO0lBQ3JCLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGFBQWtCLENBQUM7SUFDdkIsSUFBSSxTQUFjLENBQUM7SUFFbkIsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQ1gsaUhBQWlILENBQUM7SUFFcEgsVUFBVSxDQUFDO1FBQ1QsYUFBYSxHQUFHO1lBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM1RCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7U0FDL0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBRWxFLFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyQixNQUFNLEVBQUUsS0FB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QUFLO1FBQzlFLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUMzQixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixzQkFBc0IsRUFBRSxVQUFVO1lBQ2xDLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3dhbGxldHMnO1xuXG5kZXNjcmliZSgnV2FsbGV0cyAtIEdvQWNjb3VudCAoT0ZDIHRyYWRpbmcpIHdhbGxldCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldHM6IFdhbGxldHM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgbGV0IG1vY2tCYXNlQ29pbjogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55O1xuICBsZXQgcG9zdENoYWluOiBhbnk7XG5cbiAgY29uc3QgdXNlclBydiA9ICd4cHJ2U29tZVVzZXJQcml2YXRlS2V5JztcbiAgY29uc3QgdXNlclB1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNGdFhnUzVzWUpBQnFxRzlZTG1DNFExUmRhcDlnU0U4TnF0d3liR2hlUFkyZ1oyOUVTRmpxSm9DdTFSdXBqZThZdEdxc2VmRDI2NVRNZzd1c1VERmRwNlcxRUdNY2V0OCc7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0tleWNoYWlucyA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLnJldHVybnMoeyBwdWI6IHVzZXJQdWIsIHBydjogdXNlclBydiB9KSxcbiAgICAgIGFkZDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6ICd1c2VyLWtleS1pZCcsIHB1YjogdXNlclB1YiwgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXREYXRhID0geyBpZDogJ3dhbGxldC1pZCcsIGtleXM6IFsndXNlci1rZXktaWQnXSB9O1xuXG4gICAgcG9zdENoYWluID0ge1xuICAgICAgc2VuZDogc2lub24uc3R1YigpLFxuICAgIH07XG4gICAgcG9zdENoYWluLnNlbmQucmV0dXJucyh7XG4gICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrV2FsbGV0RGF0YSksXG4gICAgfSk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCkucmV0dXJucyhwb3N0Q2hhaW4pLFxuICAgICAgZW5jcnlwdDogc2lub25cbiAgICAgICAgLnN0dWIoKVxuICAgICAgICAuY2FsbHNGYWtlKFxuICAgICAgICAgIGFzeW5jICh7IHBhc3N3b3JkLCBpbnB1dCB9OiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gYGVuY3J5cHRlZDoke3Bhc3N3b3JkfToke2lucHV0fWBcbiAgICAgICAgKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0RmFtaWx5OiBzaW5vbi5zdHViKCkucmV0dXJucygnb2ZjJyksXG4gICAgICBnZXRDaGFpbjogc2lub24uc3R1YigpLnJldHVybnMoJ29mYycpLFxuICAgICAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ29uY2hhaW4nKSxcbiAgICAgIHN1cHBvcnRzVHNzOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tLZXljaGFpbnMpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL3Rlc3QvdXJsJyksXG4gICAgfTtcblxuICAgIHdhbGxldHMgPSBuZXcgV2FsbGV0cyhtb2NrQml0R28sIG1vY2tCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcndhcmQgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UgaW4gY29pblNwZWNpZmljIHdoZW4gcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICBsYWJlbDogJ1Rlc3QgT0ZDIFdhbGxldCcsXG4gICAgICBwYXNzcGhyYXNlOiAndGVzdC1wYXNzcGhyYXNlJyxcbiAgICAgIGVudGVycHJpc2U6ICdlbnRlcnByaXNlLTEyMycsXG4gICAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiAncGNlLWNvZGUnLFxuICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQub2socG9zdENoYWluLnNlbmQuY2FsbGVkT25jZSwgJ1BPU1QgL3dhbGxldC9hZGQgc2hvdWxkIGJlIGNhbGxlZCBvbmNlJyk7XG4gICAgY29uc3Qgc2VudFBhcmFtcyA9IHBvc3RDaGFpbi5zZW5kLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIHNlbnRQYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvaW5TcGVjaWZpYycpO1xuICAgIHNlbnRQYXJhbXMuY29pblNwZWNpZmljLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyS2V5U2lnbmluZ1JlcXVpcmVkJywgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZvcndhcmQgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogdHJ1ZSBpbiBjb2luU3BlY2lmaWMgd2hlbiBleHBsaWNpdGx5IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnVGVzdCBPRkMgV2FsbGV0JyxcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0LXBhc3NwaHJhc2UnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwY2UtY29kZScsXG4gICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VudFBhcmFtcyA9IHBvc3RDaGFpbi5zZW5kLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIHNlbnRQYXJhbXMuY29pblNwZWNpZmljLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyS2V5U2lnbmluZ1JlcXVpcmVkJywgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgb21pdCBjb2luU3BlY2lmaWMgd2hlbiB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkIGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnVGVzdCBPRkMgV2FsbGV0JyxcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0LXBhc3NwaHJhc2UnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwY2UtY29kZScsXG4gICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZW50UGFyYW1zID0gcG9zdENoYWluLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgc2VudFBhcmFtcy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2NvaW5TcGVjaWZpYycpO1xuICB9KTtcbn0pO1xuIl19
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c0dvQWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0c0dvQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBQ2hCLGtFQUErRDtBQUUvRCxRQUFRLENBQUMsbURBQW1ELEVBQUU7SUFDNUQsSUFBSSxPQUFnQixDQUFDO0lBQ3JCLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGFBQWtCLENBQUM7SUFDdkIsSUFBSSxTQUFjLENBQUM7SUFFbkIsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQ1gsaUhBQWlILENBQUM7SUFFcEgsVUFBVSxDQUFDO1FBQ1QsYUFBYSxHQUFHO1lBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM1RCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDbEYsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBRWxFLFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNy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QUN4RCxDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3dhbGxldHMnO1xuXG5kZXNjcmliZSgnV2FsbGV0cyAtIEdvQWNjb3VudCAoT0ZDIHRyYWRpbmcpIHdhbGxldCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldHM6IFdhbGxldHM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgbGV0IG1vY2tCYXNlQ29pbjogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55O1xuICBsZXQgcG9zdENoYWluOiBhbnk7XG5cbiAgY29uc3QgdXNlclBydiA9ICd4cHJ2U29tZVVzZXJQcml2YXRlS2V5JztcbiAgY29uc3QgdXNlclB1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNGdFhnUzVzWUpBQnFxRzlZTG1DNFExUmRhcDlnU0U4TnF0d3liR2hlUFkyZ1oyOUVTRmpxSm9DdTFSdXBqZThZdEdxc2VmRDI2NVRNZzd1c1VERmRwNlcxRUdNY2V0OCc7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0tleWNoYWlucyA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLnJldHVybnMoeyBwdWI6IHVzZXJQdWIsIHBydjogdXNlclBydiB9KSxcbiAgICAgIGFkZDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiAoeyBpZDogJ3VzZXIta2V5LWlkJywgLi4ucGFyYW1zIH0pKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja1dhbGxldERhdGEgPSB7IGlkOiAnd2FsbGV0LWlkJywga2V5czogWyd1c2VyLWtleS1pZCddIH07XG5cbiAgICBwb3N0Q2hhaW4gPSB7XG4gICAgICBzZW5kOiBzaW5vbi5zdHViKCksXG4gICAgfTtcbiAgICBwb3N0Q2hhaW4uc2VuZC5yZXR1cm5zKHtcbiAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tXYWxsZXREYXRhKSxcbiAgICB9KTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHBvc3RDaGFpbiksXG4gICAgICBlbmNyeXB0OiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoXG4gICAgICAgICAgYXN5bmMgKHsgcGFzc3dvcmQsIGlucHV0IH06IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBgZW5jcnlwdGVkOiR7cGFzc3dvcmR9OiR7aW5wdXR9YFxuICAgICAgICApLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdvZmMnKSxcbiAgICAgIGdldENoYWluOiBzaW5vbi5zdHViKCkucmV0dXJucygnb2ZjJyksXG4gICAgICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlOiBzaW5vbi5zdHViKCkucmV0dXJucygnb25jaGFpbicpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCcvdGVzdC91cmwnKSxcbiAgICB9O1xuXG4gICAgd2FsbGV0cyA9IG5ldyBXYWxsZXRzKG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yd2FyZCB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSBpbiBjb2luU3BlY2lmaWMgd2hlbiBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnVGVzdCBPRkMgV2FsbGV0JyxcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0LXBhc3NwaHJhc2UnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwY2UtY29kZScsXG4gICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5vayhwb3N0Q2hhaW4uc2VuZC5jYWxsZWRPbmNlLCAnUE9TVCAvd2FsbGV0L2FkZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UnKTtcbiAgICBjb25zdCBzZW50UGFyYW1zID0gcG9zdENoYWluLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgc2VudFBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pblNwZWNpZmljJyk7XG4gICAgc2VudFBhcmFtcy5jb2luU3BlY2lmaWMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXlTaWduaW5nUmVxdWlyZWQnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBrZXljaGFpblBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGtleWNoYWluUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRQcnYnLCBgZW5jcnlwdGVkOnRlc3QtcGFzc3BocmFzZToke3VzZXJQcnZ9YCk7XG4gICAga2V5Y2hhaW5QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZScsICdwY2UtY29kZScpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZScsICdlbmNyeXB0ZWQ6cGNlLWNvZGU6dGVzdC1wYXNzcGhyYXNlJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yd2FyZCB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlIGluIGNvaW5TcGVjaWZpYyB3aGVuIGV4cGxpY2l0bHkgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgbGFiZWw6ICdUZXN0IE9GQyBXYWxsZXQnLFxuICAgICAgcGFzc3BocmFzZTogJ3Rlc3QtcGFzc3BocmFzZScsXG4gICAgICBlbnRlcnByaXNlOiAnZW50ZXJwcmlzZS0xMjMnLFxuICAgICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BjZS1jb2RlJyxcbiAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZW50UGFyYW1zID0gcG9zdENoYWluLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgc2VudFBhcmFtcy5jb2luU3BlY2lmaWMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXlTaWduaW5nUmVxdWlyZWQnLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvbWl0IGNvaW5TcGVjaWZpYyB3aGVuIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgbGFiZWw6ICdUZXN0IE9GQyBXYWxsZXQnLFxuICAgICAgcGFzc3BocmFzZTogJ3Rlc3QtcGFzc3BocmFzZScsXG4gICAgICBlbnRlcnByaXNlOiAnZW50ZXJwcmlzZS0xMjMnLFxuICAgICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BjZS1jb2RlJyxcbiAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbnRQYXJhbXMgPSBwb3N0Q2hhaW4uc2VuZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICBzZW50UGFyYW1zLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnY29pblNwZWNpZmljJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBwdWJsaWMtb25seSB1c2VyIGtleSB3aGVuIHVzZXIga2V5IHNpZ25pbmcgaXMgZGlzYWJsZWQgYW5kIHBhc3N3b3JkIGZpZWxkcyBhcmUgb21pdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnUGFzc3dvcmRsZXNzIE9GQyBXYWxsZXQnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKG1vY2tLZXljaGFpbnMuYWRkLmNhbGxlZE9uY2UsICd1c2VyIGtleSBzaG91bGQgYmUgdXBsb2FkZWQgb25jZScpO1xuICAgIGNvbnN0IGtleWNoYWluUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAga2V5Y2hhaW5QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicsIHVzZXJQdWIpO1xuICAgIGtleWNoYWluUGFyYW1zLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2Jyk7XG4gICAga2V5Y2hhaW5QYXJhbXMuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUnKTtcblxuICAgIGFzc2VydC5vayhwb3N0Q2hhaW4uc2VuZC5jYWxsZWRPbmNlLCAnUE9TVCAvd2FsbGV0L2FkZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UnKTtcbiAgICBwb3N0Q2hhaW4uc2VuZC5maXJzdENhbGwuYXJnc1swXS5jb2luU3BlY2lmaWMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXlTaWduaW5nUmVxdWlyZWQnLCBmYWxzZSk7XG4gICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZScpO1xuICAgIHJlc3VsdC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dhcm5pbmcnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgcGFzc3dvcmRsZXNzIGdlbmVyYXRpb24gd2hlbiBvbmx5IG9uZSBwYXNzd29yZCBmaWVsZCBpcyBzdXBwbGllZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgICBsYWJlbDogJ1Bhc3N3b3JkbGVzcyBPRkMgV2FsbGV0JyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgcGFzc3BocmFzZTogJ3BhcnRpYWwtcGFzc3dvcmQtaW5wdXQnLFxuICAgICAgfSksXG4gICAgICAvZXJyb3JcXChzXFwpIHBhcnNpbmcgZ2VuZXJhdGUgZ28gYWNjb3VudCByZXF1ZXN0IHBhcmFtcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1vY2tLZXljaGFpbnMuYWRkLmNhbGxlZCwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwb3N0Q2hhaW4uc2VuZC5jYWxsZWQsIGZhbHNlKTtcbiAgfSk7XG59KTtcbiJdfQ==
|