@bitgo/sdk-core 38.20.0 → 38.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/src/bitgo/environments.d.ts +5 -0
  2. package/dist/src/bitgo/environments.d.ts.map +1 -1
  3. package/dist/src/bitgo/environments.js +2 -1
  4. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +33 -4
  5. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
  6. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +71 -4
  7. package/dist/src/bitgo/utils/index.d.ts +1 -0
  8. package/dist/src/bitgo/utils/index.d.ts.map +1 -1
  9. package/dist/src/bitgo/utils/index.js +2 -1
  10. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  11. package/dist/src/bitgo/utils/mpcUtils.js +2 -1
  12. package/dist/src/bitgo/utils/siws.d.ts +17 -0
  13. package/dist/src/bitgo/utils/siws.d.ts.map +1 -0
  14. package/dist/src/bitgo/utils/siws.js +171 -0
  15. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +5 -0
  16. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  17. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +12 -1
  18. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +7 -0
  19. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  20. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  21. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +5 -0
  22. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  23. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +8 -1
  24. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  25. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  26. package/dist/src/bitgo/utils/tss/index.js +2 -1
  27. package/dist/src/bitgo/utils/tss/keyVerification.d.ts +45 -0
  28. package/dist/src/bitgo/utils/tss/keyVerification.d.ts.map +1 -0
  29. package/dist/src/bitgo/utils/tss/keyVerification.js +192 -0
  30. package/dist/src/bitgo/wallet/iWallet.d.ts +16 -0
  31. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  32. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  33. package/dist/src/bitgo/wallet/wallet.d.ts +21 -1
  34. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  35. package/dist/src/bitgo/wallet/wallet.js +39 -1
  36. package/dist/test/unit/bitgo/safe/rootCoin.d.ts +2 -0
  37. package/dist/test/unit/bitgo/safe/rootCoin.d.ts.map +1 -0
  38. package/dist/test/unit/bitgo/safe/rootCoin.js +13 -0
  39. package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.js +69 -1
  40. package/dist/test/unit/bitgo/utils/siws.d.ts +2 -0
  41. package/dist/test/unit/bitgo/utils/siws.d.ts.map +1 -0
  42. package/dist/test/unit/bitgo/utils/siws.js +206 -0
  43. package/dist/test/unit/bitgo/utils/tss/keyVerification.d.ts +2 -0
  44. package/dist/test/unit/bitgo/utils/tss/keyVerification.d.ts.map +1 -0
  45. package/dist/test/unit/bitgo/utils/tss/keyVerification.js +229 -0
  46. package/dist/test/unit/bitgo/wallet/walletVerifyKey.d.ts +2 -0
  47. package/dist/test/unit/bitgo/wallet/walletVerifyKey.d.ts.map +1 -0
  48. package/dist/test/unit/bitgo/wallet/walletVerifyKey.js +160 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +6 -6
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rootCoin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rootCoin.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/safe/rootCoin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const statics_1 = require("@bitgo/statics");
4
+ const rootCoin_1 = require("../../../../src/bitgo/safe/rootCoin");
5
+ describe('SAFE_ROOT_SLOTS', function () {
6
+ it('should match the slot ordinals served from statics, in order', function () {
7
+ // typed as Record<RootKeyType, number>, so a slot missing from statics is a compile error
8
+ const ordinals = statics_1.SAFE_ROOT_SLOT_ORDINALS;
9
+ rootCoin_1.SAFE_ROOT_SLOTS.map((slot) => ordinals[slot]).should.deepEqual(rootCoin_1.SAFE_ROOT_SLOTS.map((_, i) => i + 1));
10
+ Object.keys(statics_1.SAFE_ROOT_SLOT_ORDINALS).should.deepEqual(rootCoin_1.SAFE_ROOT_SLOTS);
11
+ });
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdENvaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9yb290Q29pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRDQUF5RDtBQUV6RCxrRUFBc0U7QUFFdEUsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLEVBQUUsQ0FBQyw4REFBOEQsRUFBRTtRQUNqRSwwRkFBMEY7UUFDMUYsTUFBTSxRQUFRLEdBQWdDLGlDQUF1QixDQUFDO1FBQ3RFLDBCQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLDBCQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsMEJBQWUsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTQUZFX1JPT1RfU0xPVF9PUkRJTkFMUyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB0eXBlIHsgUm9vdEtleVR5cGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNBRkVfUk9PVF9TTE9UUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL3Jvb3RDb2luJztcblxuZGVzY3JpYmUoJ1NBRkVfUk9PVF9TTE9UUycsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ3Nob3VsZCBtYXRjaCB0aGUgc2xvdCBvcmRpbmFscyBzZXJ2ZWQgZnJvbSBzdGF0aWNzLCBpbiBvcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB0eXBlZCBhcyBSZWNvcmQ8Um9vdEtleVR5cGUsIG51bWJlcj4sIHNvIGEgc2xvdCBtaXNzaW5nIGZyb20gc3RhdGljcyBpcyBhIGNvbXBpbGUgZXJyb3JcbiAgICBjb25zdCBvcmRpbmFsczogUmVjb3JkPFJvb3RLZXlUeXBlLCBudW1iZXI+ID0gU0FGRV9ST09UX1NMT1RfT1JESU5BTFM7XG4gICAgU0FGRV9ST09UX1NMT1RTLm1hcCgoc2xvdCkgPT4gb3JkaW5hbHNbc2xvdF0pLnNob3VsZC5kZWVwRXF1YWwoU0FGRV9ST09UX1NMT1RTLm1hcCgoXywgaSkgPT4gaSArIDEpKTtcbiAgICBPYmplY3Qua2V5cyhTQUZFX1JPT1RfU0xPVF9PUkRJTkFMUykuc2hvdWxkLmRlZXBFcXVhbChTQUZFX1JPT1RfU0xPVFMpO1xuICB9KTtcbn0pO1xuIl19
@@ -169,6 +169,74 @@ describe('RedPallas MPS DSG helper functions', function () {
169
169
  };
170
170
  await assert.rejects((0, redpallasMPCv2_1.verifyPeerMessageRoundThree)(round3Output, bitgoGpgPubKey));
171
171
  });
172
+ // ── Rerand (must run before every DSG, same 2 parties) ──────────────────────
173
+ it('getRerandShareRoundOne should build a valid rerand round-1 share for the user', async function () {
174
+ const share = await (0, redpallasMPCv2_1.getRerandShareRoundOne)(userPayload(1), userGpgPrivKey);
175
+ assert.strictEqual(share.from, src_1.SignatureShareType.USER);
176
+ assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
177
+ const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2RerandShareRound1Input, JSON.parse(share.share), 'RedpallasMPCv2RerandShareRound1Input');
178
+ assert.strictEqual(parsed.type, 'round1Input');
179
+ assert.ok(parsed.data.msg1.message, 'msg1.message should be set');
180
+ assert.ok(parsed.data.msg1.signature, 'msg1.signature should be set');
181
+ });
182
+ it('getRerandShareRoundOne should build a valid rerand round-1 share for the backup', async function () {
183
+ const share = await (0, redpallasMPCv2_1.getRerandShareRoundOne)(backupPayload(1), backupGpgPrivKey, typesMPCv2_1.MPCv2PartiesEnum.BACKUP);
184
+ assert.strictEqual(share.from, src_1.SignatureShareType.BACKUP);
185
+ assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
186
+ });
187
+ it('verifyPeerRerandMessageRoundOne should verify a valid BitGo rerand round-1 message', async function () {
188
+ const bitgoSignedMsg1 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(1).payload), bitgoGpgPrivKey);
189
+ const round1Output = {
190
+ type: 'round1Output',
191
+ data: { msg1: bitgoSignedMsg1 },
192
+ };
193
+ const result = await (0, redpallasMPCv2_1.verifyPeerRerandMessageRoundOne)(round1Output, bitgoGpgPubKey);
194
+ assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
195
+ assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(1).payload));
196
+ });
197
+ it('verifyPeerRerandMessageRoundOne should throw on a tampered rerand round-1 message', async function () {
198
+ const round1Output = {
199
+ type: 'round1Output',
200
+ data: {
201
+ msg1: {
202
+ message: Buffer.from('tampered').toString('base64'),
203
+ signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
204
+ },
205
+ },
206
+ };
207
+ await assert.rejects((0, redpallasMPCv2_1.verifyPeerRerandMessageRoundOne)(round1Output, bitgoGpgPubKey));
208
+ });
209
+ it('getRerandShareRoundTwo should build a valid rerand round-2 share for the user', async function () {
210
+ const share = await (0, redpallasMPCv2_1.getRerandShareRoundTwo)(userPayload(2), userGpgPrivKey);
211
+ assert.strictEqual(share.from, src_1.SignatureShareType.USER);
212
+ assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
213
+ const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2RerandShareRound2Input, JSON.parse(share.share), 'RedpallasMPCv2RerandShareRound2Input');
214
+ assert.strictEqual(parsed.type, 'round2Input');
215
+ assert.ok(parsed.data.msg2.message, 'msg2.message should be set');
216
+ assert.ok(parsed.data.msg2.signature, 'msg2.signature should be set');
217
+ });
218
+ it('verifyPeerRerandMessageRoundTwo should verify a valid BitGo rerand round-2 message', async function () {
219
+ const bitgoSignedMsg2 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(2).payload), bitgoGpgPrivKey);
220
+ const round2Output = {
221
+ type: 'round2Output',
222
+ data: { msg2: bitgoSignedMsg2 },
223
+ };
224
+ const result = await (0, redpallasMPCv2_1.verifyPeerRerandMessageRoundTwo)(round2Output, bitgoGpgPubKey);
225
+ assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
226
+ assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(2).payload));
227
+ });
228
+ it('verifyPeerRerandMessageRoundTwo should throw on a tampered rerand round-2 message', async function () {
229
+ const round2Output = {
230
+ type: 'round2Output',
231
+ data: {
232
+ msg2: {
233
+ message: Buffer.from('tampered').toString('base64'),
234
+ signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
235
+ },
236
+ },
237
+ };
238
+ await assert.rejects((0, redpallasMPCv2_1.verifyPeerRerandMessageRoundTwo)(round2Output, bitgoGpgPubKey));
239
+ });
172
240
  // ── Envelope round-trip via the independent RedPallas MPS comms layer ───────
173
241
  it('a share built by getSignatureShareRoundOne verifies against RedPallasMPSComms directly', async function () {
174
242
  const share = await (0, redpallasMPCv2_1.getSignatureShareRoundOne)(userPayload(1), userGpgPrivKey);
@@ -178,4 +246,4 @@ describe('RedPallas MPS DSG helper functions', function () {
178
246
  assert.deepStrictEqual(rawBytes, Buffer.from(userPayload(1).payload));
179
247
  });
180
248
  });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcGFsbGFzTVBDdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHNzL3JlZHBhbGxhcy9yZWRwYWxsYXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isb0RBQTBFO0FBQzFFLHNEQU82QjtBQUM3Qiw0Q0FBOEU7QUFDOUUsMEZBTytEO0FBQy9ELGtFQUF3RTtBQUN4RSw4RUFBaUY7QUFDakYsb0ZBQXVGO0FBRXZGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxJQUFJLGNBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFBZ0MsQ0FBQztJQUNyQyxJQUFJLGVBQStCLENBQUM7SUFDcEMsSUFBSSxjQUF1QixDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtRQUMzQixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUM7S0FDcEUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNO1FBQzdCLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0tBQ3RFLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSztRQUM1QixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFB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QUFDO1FBRUYsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUEsNENBQTJCLEVBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFFSCwrRUFBK0U7SUFFL0UsRUFBRSxDQUFDLHdGQUF3RixFQUFFLEtBQUs7UUFDaEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDBDQUF5QixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHdCQUFlLEVBQzVCLHNEQUF1QyxFQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDdkIseUNBQXlDLENBQzFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSwrQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUzRixNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IFJlZFBhbGxhc01QU0NvbW1zLCBSZWRQYWxsYXNNUFNUeXBlcyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzT3V0cHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvcmVkcGFsbGFzL3JlZHBhbGxhc01QQ3YyJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS90eXBlc01QQ3YyJztcblxuZGVzY3JpYmUoJ1JlZFBhbGxhcyBNUFMgRFNHIGhlbHBlciBmdW5jdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1c2VyR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiYWNrdXBHcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcbiAgbGV0IGJpdGdvR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1B1YktleTogcGdwLktleTtcblxuICBjb25zdCB1c2VyUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShgdXNlci1yb3VuZC0ke3JvdW5kfS1wYXlsb2FkYCkpLFxuICB9KTtcbiAgY29uc3QgYmFja3VwUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGBiYWNrdXAtcm91bmQtJHtyb3VuZH0tcGF5bG9hZGApKSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oYGJpdGdvLXJvdW5kLSR7cm91bmR9LXBheWxvYWRgKSksXG4gIH0pO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgR1BHIGtleSBwYWlycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcblxuICAgIHVzZXJHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiYWNrdXBHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgdXNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKHVzZXJQYXlsb2FkKDEpLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0xIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgxKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTEgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMToge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVHdvIHNob3VsZCBidWlsZCBhIHZhbGlkIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0yIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cyOiBiaXRnb1NpZ25lZE1zZzIgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgyKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMjoge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMyBzaGFyZSBmb3IgdGhlIGJhY2t1cCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDMpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDMpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDNPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQzT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMzogYml0Z29TaWduZWRNc2czIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZShyb3VuZDNPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgzKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUgc2hvdWxkIHRocm93IG9uIGEgdGFtcGVyZWQgcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kM091dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDNPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2czOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUocm91bmQzT3V0cHV0LCBiaXRnb0dwZ1B1YktleSkpO1xuICB9KTtcblxuICAvLyDilIDilIAgRW52ZWxvcGUgcm91bmQtdHJpcCB2aWEgdGhlIGluZGVwZW5kZW50IFJlZFBhbGxhcyBNUFMgY29tbXMgbGF5ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2Egc2hhcmUgYnVpbHQgYnkgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSB2ZXJpZmllcyBhZ2FpbnN0IFJlZFBhbGxhc01QU0NvbW1zIGRpcmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSh1c2VyUGF5bG9hZCgxKSwgdXNlckdwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuXG4gICAgY29uc3QgdXNlckdwZ1B1YktleSA9IHVzZXJHcGdQcml2S2V5LnRvUHVibGljKCk7XG4gICAgY29uc3QgcmF3Qnl0ZXMgPSBhd2FpdCBSZWRQYWxsYXNNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBhcnNlZC5kYXRhLm1zZzEsIHVzZXJHcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyYXdCeXRlcywgQnVmZmVyLmZyb20odXNlclBheWxvYWQoMSkucGF5bG9hZCkpO1xuICB9KTtcbn0pO1xuIl19
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcGFsbGFzTVBDdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHNzL3JlZHBhbGxhcy9yZWRwYWxsYXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isb0RBQTBFO0FBQzFFLHNEQVc2QjtBQUM3Qiw0Q0FBOEU7QUFDOUUsMEZBVytEO0FBQy9ELGtFQUF3RTtBQUN4RSw4RUFBaUY7QUFDakYsb0ZBQXVGO0FBRXZGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxJQUFJLGNBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFBZ0MsQ0FBQztJQUNyQyxJQUFJLGVBQStCLENBQUM7SUFDcEMsSUFBSSxjQUF1QixDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtRQUMzQixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUM7S0FDcEUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNO1FBQzdCLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0tBQ3RFLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSztRQUM1QixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssVUFBVSxDQUFDLENBQUM7S0FDckUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEtBQUs7UUFDcEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFBLGlDQUFrQixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFBLGlDQUFrQixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBQSxpQ0FBa0IsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxjQUFjLEdBQUcsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLGVBQWUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkYsY0FBYyxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztJQUVILCtFQUErRTtJQUUvRSxFQUFFLENBQUMsMkVBQTJFLEVBQUUsS0FBSztRQUNuRixNQUFNLEtBQUssR0FBeUIsTUFBTSxJQUFBLDBDQUF5QixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVwRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsd0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLHdCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZELE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQWUsRUFDNUIsc0RBQXVDLEVBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUN2Qix5Q0FBeUMsQ0FDMUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkVBQTZFLEVBQUUsS0FBSztRQUNyRixNQUFNLEtBQUssR0FBeUIsTUFBTSxJQUFBLDBDQUF5QixFQUNqRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLGdCQUFnQixFQUNoQiw2QkFBZ0IsQ0FBQyxNQUFNLENBQ3hCLENBQUM7UUFFRixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsd0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLHdCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEtBQUs7UUFDL0UsTUFBTSxlQUFlLEdBQUcsTUFBTSwrQkFBaUIsQ0FBQyxvQkFBb0IsQ0FDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQ3BDLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUE2QztZQUM3RCxJQUFJLEVBQUUsY0FBYztZQUNwQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1NBQ2hDLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsMENBQXlCLEVBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTdFLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0VBQXNFLEVBQUUsS0FBSztRQUM5RSxNQUFNLFlBQVksR0FBNkM7WUFDN0QsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO29CQUNuRCxTQUFTLEVBQUUseUVBQXlFO2lCQUNyRjthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFBLDBDQUF5QixFQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBRUgsK0VBQStFO0lBRS9FLEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1FBQ25GLE1BQU0sS0FBSyxHQUF5QixNQUFNLElBQUEsMENBQXlCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXBHLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSx3QkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsd0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBZSxFQUM1QixzREFBdUMsRUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ3ZCLHlDQUF5QyxDQUMxQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUN4RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLO1FBQy9FLE1BQU0sZUFBZSxHQUFHLE1BQU0sK0JBQWlCLENBQUMsb0JBQW9CLENBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxlQUFlLENBQ2hCLENBQUM7UUFDRixNQUFNLFlBQVksR0FBNkM7WUFDN0QsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtTQUNoQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDBDQUF5QixFQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU3RSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEtBQUs7UUFDOUUsTUFBTSxZQUFZLEdBQTZDO1lBQzdELElBQUksRUFBRSxjQUFjO1lBQ3BCLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztvQkFDbkQsU0FBUyxFQUFFLHlFQUF5RTtpQkFDckY7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBQSwwQ0FBeUIsRUFBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztJQUVILCtFQUErRTtJQUUvRSxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztRQUN2RixNQUFNLEtBQUssR0FBeUIsTUFBTSxJQUFBLDRDQUEyQixFQUNuRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLGdCQUFnQixFQUNoQiw2QkFBZ0IsQ0FBQyxNQUFNLENBQ3hCLENBQUM7UUFFRixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsd0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLHdCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZELE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQWUsRUFDNUIsc0RBQXVDLEVBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUN2Qix5Q0FBeUMsQ0FDMUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSztRQUNqRixNQUFNLGVBQWUsR0FBRyxNQUFNLCtCQUFpQixDQUFDLG9CQUFvQixDQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDcEMsZUFBZSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQTZDO1lBQzdELElBQUksRUFBRSxjQUFjO1lBQ3BCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7U0FDaEMsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSw0Q0FBMkIsRUFBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFL0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLDZCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLO1FBQ2hGLE1BQU0sWUFBWSxHQUE2QztZQUM3RCxJQUFJLEVBQUUsY0FBYztZQUNwQixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7b0JBQ25ELFNBQVMsRUFBRSx5RUFBeUU7aUJBQ3JGO2FBQ0Y7U0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUEsNENBQTJCLEVBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFFSCwrRUFBK0U7SUFFL0UsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEtBQUs7UUFDdkYsTUFBTSxLQUFLLEdBQXlCLE1BQU0sSUFBQSx1Q0FBc0IsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFakcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLHdCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSx3QkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHdCQUFlLEVBQzVCLG1EQUFvQyxFQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDdkIsc0NBQXNDLENBQ3ZDLENBQUM7UUFDRixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNsRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlGQUFpRixFQUFFLEtBQUs7UUFDekYsTUFBTSxLQUFLLEdBQXlCLE1BQU0sSUFBQSx1Q0FBc0IsRUFDOUQsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUNoQixnQkFBZ0IsRUFDaEIsNkJBQWdCLENBQUMsTUFBTSxDQUN4QixDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLHdCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSx3QkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxLQUFLO1FBQzVGLE1BQU0sZUFBZSxHQUFHLE1BQU0sK0JBQWlCLENBQUMsb0JBQW9CLENBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxlQUFlLENBQ2hCLENBQUM7UUFDRixNQUFNLFlBQVksR0FBMEM7WUFDMUQsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtTQUNoQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdEQUErQixFQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVuRixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEtBQUs7UUFDM0YsTUFBTSxZQUFZLEdBQTBDO1lBQzFELElBQUksRUFBRSxjQUFjO1lBQ3BCLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztvQkFDbkQsU0FBUyxFQUFFLHlFQUF5RTtpQkFDckY7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBQSxnREFBK0IsRUFBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxLQUFLO1FBQ3ZGLE1BQU0sS0FBSyxHQUF5QixNQUFNLElBQUEsdUNBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWpHLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSx3QkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsd0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBZSxFQUM1QixtREFBb0MsRUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ3ZCLHNDQUFzQyxDQUN2QyxDQUFDO1FBQ0YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUN4RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvRkFBb0YsRUFBRSxLQUFLO1FBQzVGLE1BQU0sZUFBZSxHQUFHLE1BQU0sK0JBQWlCLENBQUMsb0JBQW9CLENBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxlQUFlLENBQ2hCLENBQUM7UUFDRixNQUFNLFlBQVksR0FBMEM7WUFDMUQsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtTQUNoQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdEQUErQixFQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVuRixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEtBQUs7UUFDM0YsTUFBTSxZQUFZLEdBQTBDO1lBQzFELElBQUksRUFBRSxjQUFjO1lBQ3BCLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztvQkFDbkQsU0FBUyxFQUFFLHlFQUF5RTtpQkFDckY7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBQSxnREFBK0IsRUFBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztJQUVILCtFQUErRTtJQUUvRSxFQUFFLENBQUMsd0ZBQXdGLEVBQUUsS0FBSztRQUNoRyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsMENBQXlCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQWUsRUFDNUIsc0RBQXVDLEVBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUN2Qix5Q0FBeUMsQ0FDMUMsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLCtCQUFpQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTNGLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgUmVkUGFsbGFzTVBTQ29tbXMsIFJlZFBhbGxhc01QU1R5cGVzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7XG4gIFJlZHBhbGxhc01QQ3YyUmVyYW5kU2hhcmVSb3VuZDFJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMU91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMklucHV0LFxuICBSZWRwYWxsYXNNUEN2MlJlcmFuZFNoYXJlUm91bmQyT3V0cHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzT3V0cHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgZ2V0UmVyYW5kU2hhcmVSb3VuZE9uZSxcbiAgZ2V0UmVyYW5kU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlLFxuICB2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvcmVkcGFsbGFzL3JlZHBhbGxhc01QQ3YyJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS90eXBlc01QQ3YyJztcblxuZGVzY3JpYmUoJ1JlZFBhbGxhcyBNUFMgRFNHIGhlbHBlciBmdW5jdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1c2VyR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiYWNrdXBHcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcbiAgbGV0IGJpdGdvR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1B1YktleTogcGdwLktleTtcblxuICBjb25zdCB1c2VyUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShgdXNlci1yb3VuZC0ke3JvdW5kfS1wYXlsb2FkYCkpLFxuICB9KTtcbiAgY29uc3QgYmFja3VwUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGBiYWNrdXAtcm91bmQtJHtyb3VuZH0tcGF5bG9hZGApKSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oYGJpdGdvLXJvdW5kLSR7cm91bmR9LXBheWxvYWRgKSksXG4gIH0pO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgR1BHIGtleSBwYWlycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcblxuICAgIHVzZXJHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiYWNrdXBHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgdXNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKHVzZXJQYXlsb2FkKDEpLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0xIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgxKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTEgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMToge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVHdvIHNob3VsZCBidWlsZCBhIHZhbGlkIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0yIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cyOiBiaXRnb1NpZ25lZE1zZzIgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgyKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMjoge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMyBzaGFyZSBmb3IgdGhlIGJhY2t1cCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDMpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDMpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDNPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQzT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMzogYml0Z29TaWduZWRNc2czIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZShyb3VuZDNPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgzKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUgc2hvdWxkIHRocm93IG9uIGEgdGFtcGVyZWQgcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kM091dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDNPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2czOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUocm91bmQzT3V0cHV0LCBiaXRnb0dwZ1B1YktleSkpO1xuICB9KTtcblxuICAvLyDilIDilIAgUmVyYW5kIChtdXN0IHJ1biBiZWZvcmUgZXZlcnkgRFNHLCBzYW1lIDIgcGFydGllcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2dldFJlcmFuZFNoYXJlUm91bmRPbmUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcmVyYW5kIHJvdW5kLTEgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFJlcmFuZFNoYXJlUm91bmRPbmUodXNlclBheWxvYWQoMSksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMUlucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMUlucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQxSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMS5tZXNzYWdlLCAnbXNnMS5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMS5zaWduYXR1cmUsICdtc2cxLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCdnZXRSZXJhbmRTaGFyZVJvdW5kT25lIHNob3VsZCBidWlsZCBhIHZhbGlkIHJlcmFuZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFJlcmFuZFNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByZXJhbmQgcm91bmQtMSBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMSA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDEpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyUmVyYW5kU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMTogYml0Z29TaWduZWRNc2cxIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJSZXJhbmRNZXNzYWdlUm91bmRPbmUocm91bmQxT3V0cHV0LCBiaXRnb0dwZ1B1YktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmZyb20sIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVzdWx0LnBheWxvYWQpLCBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCkpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlclJlcmFuZE1lc3NhZ2VSb3VuZE9uZSBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCByZXJhbmQgcm91bmQtMSBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2cxOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kT25lKHJvdW5kMU91dHB1dCwgYml0Z29HcGdQdWJLZXkpKTtcbiAgfSk7XG5cbiAgaXQoJ2dldFJlcmFuZFNoYXJlUm91bmRUd28gc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcmVyYW5kIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFJlcmFuZFNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByZXJhbmQgcm91bmQtMiBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMiA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDIpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyUmVyYW5kU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMjogYml0Z29TaWduZWRNc2cyIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJSZXJhbmRNZXNzYWdlUm91bmRUd28ocm91bmQyT3V0cHV0LCBiaXRnb0dwZ1B1YktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmZyb20sIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVzdWx0LnBheWxvYWQpLCBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCkpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlclJlcmFuZE1lc3NhZ2VSb3VuZFR3byBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCByZXJhbmQgcm91bmQtMiBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2cyOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kVHdvKHJvdW5kMk91dHB1dCwgYml0Z29HcGdQdWJLZXkpKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIEVudmVsb3BlIHJvdW5kLXRyaXAgdmlhIHRoZSBpbmRlcGVuZGVudCBSZWRQYWxsYXMgTVBTIGNvbW1zIGxheWVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdhIHNoYXJlIGJ1aWx0IGJ5IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUgdmVyaWZpZXMgYWdhaW5zdCBSZWRQYWxsYXNNUFNDb21tcyBkaXJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZSA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUodXNlclBheWxvYWQoMSksIHVzZXJHcGdQcml2S2V5KTtcbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQnXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJHcGdQdWJLZXkgPSB1c2VyR3BnUHJpdktleS50b1B1YmxpYygpO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXJzZWQuZGF0YS5tc2cxLCB1c2VyR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmF3Qnl0ZXMsIEJ1ZmZlci5mcm9tKHVzZXJQYXlsb2FkKDEpLnBheWxvYWQpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=siws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siws.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/utils/siws.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("should");
4
+ const src_1 = require("../../../../src");
5
+ describe('SIWS message validation', () => {
6
+ const SIWS_ADDRESS = '8knfAmJm9BmaX9mZWjAdHBcYPYp3LmuykRQnGwkWQCyj';
7
+ const siwsHeader = (domain) => `${domain} wants you to sign in with your Solana account:`;
8
+ const buildSiws = (overrides = {}) => {
9
+ const domain = overrides.domain ?? 'hastra.io';
10
+ const lines = [
11
+ `${domain} wants you to sign in with your Solana account:`,
12
+ overrides.address ?? SIWS_ADDRESS,
13
+ '',
14
+ ];
15
+ if (overrides.statement !== undefined && overrides.statement !== null) {
16
+ lines.push(overrides.statement, '');
17
+ }
18
+ const fields = [
19
+ `URI: https://${domain}`,
20
+ `Version: ${overrides.version ?? '1'}`,
21
+ `Chain ID: ${overrides.chainId ?? 'mainnet'}`,
22
+ `Nonce: ${overrides.nonce ?? '31a6bab5'}`,
23
+ `Issued At: ${overrides.issuedAt ?? '2026-09-21T10:00:00Z'}`,
24
+ ];
25
+ if (overrides.expirationTime) {
26
+ fields.push(`Expiration Time: ${overrides.expirationTime}`);
27
+ }
28
+ if (overrides.notBefore) {
29
+ fields.push(`Not Before: ${overrides.notBefore}`);
30
+ }
31
+ if (overrides.requestId) {
32
+ fields.push(`Request ID: ${overrides.requestId}`);
33
+ }
34
+ if (overrides.resources) {
35
+ fields.push('Resources:', ...overrides.resources.map((r) => `- ${r}`));
36
+ }
37
+ if (overrides.omit) {
38
+ const omit = overrides.omit;
39
+ for (const o of omit) {
40
+ const i = fields.findIndex((f) => f.startsWith(o));
41
+ if (i >= 0) {
42
+ fields.splice(i, 1);
43
+ }
44
+ }
45
+ }
46
+ lines.push(...fields, ...(overrides.extraLines ?? []));
47
+ return lines.join('\n') + (overrides.trailingNewlines ? '\n' : '');
48
+ };
49
+ describe('valid messages', () => {
50
+ it('accepts a SIWS message with statement and resources', () => {
51
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ statement: `You are proving you own ${SIWS_ADDRESS}.`, resources: ['https://privy.io'] }))).should.not.throw();
52
+ });
53
+ it('accepts a SIWS message without statement', () => {
54
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ domain: 'example.com' }))).should.not.throw();
55
+ });
56
+ it('accepts a SIWS message with all optional fields', () => {
57
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({
58
+ domain: 'example.com',
59
+ statement: 'I am the wallet owner.',
60
+ expirationTime: '2026-09-28T10:00:00Z',
61
+ notBefore: '2026-09-21T09:00:00Z',
62
+ requestId: '31a6bab5-1',
63
+ resources: ['https://a.example.com', 'https://b.example.com'],
64
+ }))).should.not.throw();
65
+ });
66
+ it('accepts a multibyte utf-8 statement, solana: chain id and fractional seconds', () => {
67
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({
68
+ domain: 'example.com',
69
+ statement: 'こんにちは、Тестовое сообщение',
70
+ chainId: 'solana:mainnet',
71
+ issuedAt: '2026-09-21T10:00:00.500Z',
72
+ }))).should.not.throw();
73
+ });
74
+ it('accepts trailing newlines and a +05:30 offset', () => {
75
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({
76
+ domain: 'example.com',
77
+ chainId: 'testnet',
78
+ issuedAt: '2026-09-21T10:00:00+05:30',
79
+ trailingNewlines: true,
80
+ }))).should.not.throw();
81
+ });
82
+ it('accepts the minimal template (header and address only)', () => {
83
+ (() => (0, src_1.validateSiwsMessage)([siwsHeader('example.com'), SIWS_ADDRESS].join('\n'))).should.not.throw();
84
+ (() => (0, src_1.validateSiwsMessage)([siwsHeader('example.com'), SIWS_ADDRESS].join('\n') + '\n')).should.not.throw();
85
+ });
86
+ it('accepts a statement with no fields', () => {
87
+ (() => (0, src_1.validateSiwsMessage)([siwsHeader('example.com'), SIWS_ADDRESS, '', 'I am the wallet owner.'].join('\n'))).should.not.throw();
88
+ });
89
+ it('accepts a statement with a lone Nonce field (partner shape)', () => {
90
+ (() => (0, src_1.validateSiwsMessage)([
91
+ siwsHeader('app.decibel.trade'),
92
+ SIWS_ADDRESS,
93
+ '',
94
+ 'Please confirm you explicitly initiated this request from app.decibel.trade.',
95
+ '',
96
+ 'Nonce: 0x50ead22afd6ffd976',
97
+ ].join('\n'))).should.not.throw();
98
+ });
99
+ it('accepts any subset of advanced fields in canonical order', () => {
100
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Version:'] }))).should.not.throw();
101
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Chain ID:'] }))).should.not.throw();
102
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Nonce:'] }))).should.not.throw();
103
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Issued At:'] }))).should.not.throw();
104
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['URI:', 'Version:', 'Chain ID:', 'Issued At:'] }))).should.not.throw();
105
+ });
106
+ });
107
+ describe('rejections', () => {
108
+ const rejects = (message) => (() => (0, src_1.validateSiwsMessage)(message)).should.throw(/not a valid SIWS message/);
109
+ it('rejects an empty message', () => {
110
+ rejects('');
111
+ });
112
+ it('rejects plain text', () => {
113
+ rejects('Hello from dapp');
114
+ });
115
+ it('rejects JSON', () => {
116
+ rejects('{"action":"login"}');
117
+ });
118
+ it('rejects a wrong skeleton', () => {
119
+ rejects('example.com login:\n' +
120
+ SIWS_ADDRESS +
121
+ '\n\nVersion: 1\nChain ID: mainnet\nNonce: 31a6bab5\nIssued At: 2026-09-21T10:00:00Z');
122
+ });
123
+ it('rejects invalid field values', () => {
124
+ rejects(buildSiws({ version: '2' }));
125
+ rejects(buildSiws({ chainId: 'polygon' }));
126
+ rejects(buildSiws({ nonce: 'abc' }));
127
+ rejects(buildSiws({ nonce: '31a6 bab5!' }));
128
+ rejects(buildSiws({ issuedAt: '2026-09-21 10:00:00Z' }));
129
+ rejects(buildSiws({ issuedAt: '2026-09-21T10:00:61Z' }));
130
+ rejects(buildSiws({ issuedAt: '2026-09-21T24:00:00Z' }));
131
+ rejects(buildSiws({ issuedAt: '2026-09-21T10:00:00+24:00' }));
132
+ });
133
+ it('rejects out-of-order fields', () => {
134
+ const message = [
135
+ 'hastra.io wants you to sign in with your Solana account:',
136
+ SIWS_ADDRESS,
137
+ '',
138
+ 'Nonce: 31a6bab5',
139
+ 'Version: 1',
140
+ 'Chain ID: mainnet',
141
+ 'Issued At: 2026-09-21T10:00:00Z',
142
+ ].join('\n');
143
+ rejects(message);
144
+ });
145
+ it('rejects a stray line after the fields section', () => {
146
+ rejects(buildSiws({ extraLines: ['stray line'] }));
147
+ });
148
+ it('rejects an unknown field label after the fields section starts', () => {
149
+ rejects(buildSiws({ extraLines: ['Unknown Field: value'] }));
150
+ rejects(buildSiws({ extraLines: ['Version2: 1'] }));
151
+ rejects([
152
+ 'hastra.io wants you to sign in with your Solana account:',
153
+ SIWS_ADDRESS,
154
+ '',
155
+ 'Version: 1',
156
+ 'Unknown: x',
157
+ 'Chain ID: mainnet',
158
+ ].join('\n'));
159
+ });
160
+ it('rejects an unknown field label after the blank line that opens the fields section', () => {
161
+ rejects([
162
+ 'hastra.io wants you to sign in with your Solana account:',
163
+ SIWS_ADDRESS,
164
+ '',
165
+ 'I am the wallet owner.',
166
+ '',
167
+ 'Unknown: x',
168
+ ].join('\n'));
169
+ });
170
+ it('rejects a field label that appears twice', () => {
171
+ rejects([
172
+ 'hastra.io wants you to sign in with your Solana account:',
173
+ SIWS_ADDRESS,
174
+ '',
175
+ 'Nonce: 31a6bab5',
176
+ 'Nonce: 31a6bab5',
177
+ ].join('\n'));
178
+ });
179
+ it('rejects an invalid address line', () => {
180
+ rejects(buildSiws({ address: 'short' }));
181
+ rejects(buildSiws({ address: '0OIl-invalid-base58-characters-000000000000000000' }));
182
+ });
183
+ it('rejects a valued Resources line', () => {
184
+ rejects(buildSiws({ resources: [] }).replace('Resources:', 'Resources: https://x.example.com'));
185
+ });
186
+ it('rejects a blank line inside the fields section', () => {
187
+ const message = [
188
+ 'hastra.io wants you to sign in with your Solana account:',
189
+ SIWS_ADDRESS,
190
+ '',
191
+ 'Version: 1',
192
+ '',
193
+ 'Chain ID: mainnet',
194
+ 'Nonce: 31a6bab5',
195
+ 'Issued At: 2026-09-21T10:00:00Z',
196
+ ].join('\n');
197
+ rejects(message);
198
+ });
199
+ });
200
+ describe('utf-8 strictness', () => {
201
+ it('rejects lone surrogates that Buffer.from would mangle to U+FFFD', () => {
202
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ statement: 'bad \uD800 statement' }))).should.throw(/message is not valid UTF-8/);
203
+ });
204
+ });
205
+ });
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l3cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy9zaXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWdCO0FBQ2hCLHlDQUFzRDtBQUV0RCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLDhDQUE4QyxDQUFDO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFVLEVBQUUsQ0FBQyxHQUFHLE1BQU0saURBQWlELENBQUM7SUFFMUcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxZQUFxQyxFQUFFLEVBQVUsRUFBRTtRQUNwRSxNQUFNLE1BQU0sR0FBSSxTQUFTLENBQUMsTUFBaUIsSUFBSSxXQUFXLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLE1BQU0saURBQWlEO1lBQ3pELFNBQVMsQ0FBQyxPQUFrQixJQUFJLFlBQVk7WUFDN0MsRUFBRTtTQUNILENBQUM7UUFDRixJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUc7WUFDYixnQkFBZ0IsTUFBTSxFQUFFO1lBQ3hCLFlBQVksU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUU7WUFDdEMsYUFBYSxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtZQUM3QyxVQUFVLFNBQVMsQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFO1lBQ3pDLGNBQWMsU0FBUyxDQUFDLFFBQVEsSUFBSSxzQkFBc0IsRUFBRTtTQUM3RCxDQUFDO1FBQ0YsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0IsTUFB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IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IHZhbGlkYXRlU2l3c01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnU0lXUyBtZXNzYWdlIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IFNJV1NfQUREUkVTUyA9ICc4a25mQW1KbTlCbWFYOW1aV2pBZEhCY1lQWXAzTG11eWtSUW5Hd2tXUUN5aic7XG4gIGNvbnN0IHNpd3NIZWFkZXIgPSAoZG9tYWluOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCR7ZG9tYWlufSB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6YDtcblxuICBjb25zdCBidWlsZFNpd3MgPSAob3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBkb21haW4gPSAob3ZlcnJpZGVzLmRvbWFpbiBhcyBzdHJpbmcpID8/ICdoYXN0cmEuaW8nO1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYCR7ZG9tYWlufSB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6YCxcbiAgICAgIChvdmVycmlkZXMuYWRkcmVzcyBhcyBzdHJpbmcpID8/IFNJV1NfQUREUkVTUyxcbiAgICAgICcnLFxuICAgIF07XG4gICAgaWYgKG92ZXJyaWRlcy5zdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvdmVycmlkZXMuc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKG92ZXJyaWRlcy5zdGF0ZW1lbnQgYXMgc3RyaW5nLCAnJyk7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgIGBVUkk6IGh0dHBzOi8vJHtkb21haW59YCxcbiAgICAgIGBWZXJzaW9uOiAke292ZXJyaWRlcy52ZXJzaW9uID8/ICcxJ31gLFxuICAgICAgYENoYWluIElEOiAke292ZXJyaWRlcy5jaGFpbklkID8/ICdtYWlubmV0J31gLFxuICAgICAgYE5vbmNlOiAke292ZXJyaWRlcy5ub25jZSA/PyAnMzFhNmJhYjUnfWAsXG4gICAgICBgSXNzdWVkIEF0OiAke292ZXJyaWRlcy5pc3N1ZWRBdCA/PyAnMjAyNi0wOS0yMVQxMDowMDowMFonfWAsXG4gICAgXTtcbiAgICBpZiAob3ZlcnJpZGVzLmV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBmaWVsZHMucHVzaChgRXhwaXJhdGlvbiBUaW1lOiAke292ZXJyaWRlcy5leHBpcmF0aW9uVGltZX1gKTtcbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlcy5ub3RCZWZvcmUpIHtcbiAgICAgIGZpZWxkcy5wdXNoKGBOb3QgQmVmb3JlOiAke292ZXJyaWRlcy5ub3RCZWZvcmV9YCk7XG4gICAgfVxuICAgIGlmIChvdmVycmlkZXMucmVxdWVzdElkKSB7XG4gICAgICBmaWVsZHMucHVzaChgUmVxdWVzdCBJRDogJHtvdmVycmlkZXMucmVxdWVzdElkfWApO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVzLnJlc291cmNlcykge1xuICAgICAgZmllbGRzLnB1c2goJ1Jlc291cmNlczonLCAuLi4ob3ZlcnJpZGVzLnJlc291cmNlcyBhcyBzdHJpbmdbXSkubWFwKChyKSA9PiBgLSAke3J9YCkpO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVzLm9taXQpIHtcbiAgICAgIGNvbnN0IG9taXQgPSBvdmVycmlkZXMub21pdCBhcyBzdHJpbmdbXTtcbiAgICAgIGZvciAoY29uc3QgbyBvZiBvbWl0KSB7XG4gICAgICAgIGNvbnN0IGkgPSBmaWVsZHMuZmluZEluZGV4KChmKSA9PiBmLnN0YXJ0c1dpdGgobykpO1xuICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgZmllbGRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsaW5lcy5wdXNoKC4uLmZpZWxkcywgLi4uKChvdmVycmlkZXMuZXh0cmFMaW5lcyBhcyBzdHJpbmdbXSkgPz8gW10pKTtcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJykgKyAob3ZlcnJpZGVzLnRyYWlsaW5nTmV3bGluZXMgPyAnXFxuJyA6ICcnKTtcbiAgfTtcblxuICBkZXNjcmliZSgndmFsaWQgbWVzc2FnZXMnLCAoKSA9PiB7XG4gICAgaXQoJ2FjY2VwdHMgYSBTSVdTIG1lc3NhZ2Ugd2l0aCBzdGF0ZW1lbnQgYW5kIHJlc291cmNlcycsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIGJ1aWxkU2l3cyh7IHN0YXRlbWVudDogYFlvdSBhcmUgcHJvdmluZyB5b3Ugb3duICR7U0lXU19BRERSRVNTfS5gLCByZXNvdXJjZXM6IFsnaHR0cHM6Ly9wcml2eS5pbyddIH0pXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgU0lXUyBtZXNzYWdlIHdpdGhvdXQgc3RhdGVtZW50JywgKCkgPT4ge1xuICAgICAgKCgpID0+IHZhbGlkYXRlU2l3c01lc3NhZ2UoYnVpbGRTaXdzKHsgZG9tYWluOiAnZXhhbXBsZS5jb20nIH0pKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgYSBTSVdTIG1lc3NhZ2Ugd2l0aCBhbGwgb3B0aW9uYWwgZmllbGRzJywgKCkgPT4ge1xuICAgICAgKCgpID0+XG4gICAgICAgIHZhbGlkYXRlU2l3c01lc3NhZ2UoXG4gICAgICAgICAgYnVpbGRTaXdzKHtcbiAgICAgICAgICAgIGRvbWFpbjogJ2V4YW1wbGUuY29tJyxcbiAgICAgICAgICAgIHN0YXRlbWVudDogJ0kgYW0gdGhlIHdhbGxldCBvd25lci4nLFxuICAgICAgICAgICAgZXhwaXJhdGlvblRpbWU6ICcyMDI2LTA5LTI4VDEwOjAwOjAwWicsXG4gICAgICAgICAgICBub3RCZWZvcmU6ICcyMDI2LTA5LTIxVDA5OjAwOjAwWicsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICczMWE2YmFiNS0xJyxcbiAgICAgICAgICAgIHJlc291cmNlczogWydodHRwczovL2EuZXhhbXBsZS5jb20nLCAnaHR0cHM6Ly9iLmV4YW1wbGUuY29tJ10sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgYSBtdWx0aWJ5dGUgdXRmLTggc3RhdGVtZW50LCBzb2xhbmE6IGNoYWluIGlkIGFuZCBmcmFjdGlvbmFsIHNlY29uZHMnLCAoKSA9PiB7XG4gICAgICAoKCkgPT5cbiAgICAgICAgdmFsaWRhdGVTaXdzTWVzc2FnZShcbiAgICAgICAgICBidWlsZFNpd3Moe1xuICAgICAgICAgICAgZG9tYWluOiAnZXhhbXBsZS5jb20nLFxuICAgICAgICAgICAgc3RhdGVtZW50OiAn44GT44KT44Gr44Gh44Gv44CB0KLQtdGB0YLQvtCy0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUnLFxuICAgICAgICAgICAgY2hhaW5JZDogJ3NvbGFuYTptYWlubmV0JyxcbiAgICAgICAgICAgIGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDowMC41MDBaJyxcbiAgICAgICAgICB9KVxuICAgICAgICApKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0cyB0cmFpbGluZyBuZXdsaW5lcyBhbmQgYSArMDU6MzAgb2Zmc2V0JywgKCkgPT4ge1xuICAgICAgKCgpID0+XG4gICAgICAgIHZhbGlkYXRlU2l3c01lc3NhZ2UoXG4gICAgICAgICAgYnVpbGRTaXdzKHtcbiAgICAgICAgICAgIGRvbWFpbjogJ2V4YW1wbGUuY29tJyxcbiAgICAgICAgICAgIGNoYWluSWQ6ICd0ZXN0bmV0JyxcbiAgICAgICAgICAgIGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDowMCswNTozMCcsXG4gICAgICAgICAgICB0cmFpbGluZ05ld2xpbmVzOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIHRoZSBtaW5pbWFsIHRlbXBsYXRlIChoZWFkZXIgYW5kIGFkZHJlc3Mgb25seSknLCAoKSA9PiB7XG4gICAgICAoKCkgPT4gdmFsaWRhdGVTaXdzTWVzc2FnZShbc2l3c0hlYWRlcignZXhhbXBsZS5jb20nKSwgU0lXU19BRERSRVNTXS5qb2luKCdcXG4nKSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKFtzaXdzSGVhZGVyKCdleGFtcGxlLmNvbScpLCBTSVdTX0FERFJFU1NdLmpvaW4oJ1xcbicpICsgJ1xcbicpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0cyBhIHN0YXRlbWVudCB3aXRoIG5vIGZpZWxkcycsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIFtzaXdzSGVhZGVyKCdleGFtcGxlLmNvbScpLCBTSVdTX0FERFJFU1MsICcnLCAnSSBhbSB0aGUgd2FsbGV0IG93bmVyLiddLmpvaW4oJ1xcbicpXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgc3RhdGVtZW50IHdpdGggYSBsb25lIE5vbmNlIGZpZWxkIChwYXJ0bmVyIHNoYXBlKScsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHNpd3NIZWFkZXIoJ2FwcC5kZWNpYmVsLnRyYWRlJyksXG4gICAgICAgICAgICBTSVdTX0FERFJFU1MsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICdQbGVhc2UgY29uZmlybSB5b3UgZXhwbGljaXRseSBpbml0aWF0ZWQgdGhpcyByZXF1ZXN0IGZyb20gYXBwLmRlY2liZWwudHJhZGUuJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgJ05vbmNlOiAweDUwZWFkMjJhZmQ2ZmZkOTc2JyxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGFueSBzdWJzZXQgb2YgYWR2YW5jZWQgZmllbGRzIGluIGNhbm9uaWNhbCBvcmRlcicsICgpID0+IHtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKGJ1aWxkU2l3cyh7IG9taXQ6IFsnVmVyc2lvbjonXSB9KSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKGJ1aWxkU2l3cyh7IG9taXQ6IFsnQ2hhaW4gSUQ6J10gfSkpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICAoKCkgPT4gdmFsaWRhdGVTaXdzTWVzc2FnZShidWlsZFNpd3MoeyBvbWl0OiBbJ05vbmNlOiddIH0pKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgKCgpID0+IHZhbGlkYXRlU2l3c01lc3NhZ2UoYnVpbGRTaXdzKHsgb21pdDogWydJc3N1ZWQgQXQ6J10gfSkpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICAoKCkgPT5cbiAgICAgICAgdmFsaWRhdGVTaXdzTWVzc2FnZShidWlsZFNpd3MoeyBvbWl0OiBbJ1VSSTonLCAnVmVyc2lvbjonLCAnQ2hhaW4gSUQ6JywgJ0lzc3VlZCBBdDonXSB9KSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlamVjdGlvbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVqZWN0cyA9IChtZXNzYWdlOiBzdHJpbmcpID0+ICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKG1lc3NhZ2UpKS5zaG91bGQudGhyb3coL25vdCBhIHZhbGlkIFNJV1MgbWVzc2FnZS8pO1xuXG4gICAgaXQoJ3JlamVjdHMgYW4gZW1wdHkgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIHJlamVjdHMoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgcGxhaW4gdGV4dCcsICgpID0+IHtcbiAgICAgIHJlamVjdHMoJ0hlbGxvIGZyb20gZGFwcCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgSlNPTicsICgpID0+IHtcbiAgICAgIHJlamVjdHMoJ3tcImFjdGlvblwiOlwibG9naW5cIn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgd3Jvbmcgc2tlbGV0b24nLCAoKSA9PiB7XG4gICAgICByZWplY3RzKFxuICAgICAgICAnZXhhbXBsZS5jb20gbG9naW46XFxuJyArXG4gICAgICAgICAgU0lXU19BRERSRVNTICtcbiAgICAgICAgICAnXFxuXFxuVmVyc2lvbjogMVxcbkNoYWluIElEOiBtYWlubmV0XFxuTm9uY2U6IDMxYTZiYWI1XFxuSXNzdWVkIEF0OiAyMDI2LTA5LTIxVDEwOjAwOjAwWidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBpbnZhbGlkIGZpZWxkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgdmVyc2lvbjogJzInIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgY2hhaW5JZDogJ3BvbHlnb24nIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgbm9uY2U6ICdhYmMnIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgbm9uY2U6ICczMWE2IGJhYjUhJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGlzc3VlZEF0OiAnMjAyNi0wOS0yMSAxMDowMDowMFonIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgaXNzdWVkQXQ6ICcyMDI2LTA5LTIxVDEwOjAwOjYxWicgfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBpc3N1ZWRBdDogJzIwMjYtMDktMjFUMjQ6MDA6MDBaJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDowMCsyNDowMCcgfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgb3V0LW9mLW9yZGVyIGZpZWxkcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgIFNJV1NfQUREUkVTUyxcbiAgICAgICAgJycsXG4gICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICAnVmVyc2lvbjogMScsXG4gICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICdJc3N1ZWQgQXQ6IDIwMjYtMDktMjFUMTA6MDA6MDBaJyxcbiAgICAgIF0uam9pbignXFxuJyk7XG4gICAgICByZWplY3RzKG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzdHJheSBsaW5lIGFmdGVyIHRoZSBmaWVsZHMgc2VjdGlvbicsICgpID0+IHtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgZXh0cmFMaW5lczogWydzdHJheSBsaW5lJ10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYW4gdW5rbm93biBmaWVsZCBsYWJlbCBhZnRlciB0aGUgZmllbGRzIHNlY3Rpb24gc3RhcnRzJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBleHRyYUxpbmVzOiBbJ1Vua25vd24gRmllbGQ6IHZhbHVlJ10gfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBleHRyYUxpbmVzOiBbJ1ZlcnNpb24yOiAxJ10gfSkpO1xuICAgICAgcmVqZWN0cyhcbiAgICAgICAgW1xuICAgICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgICAgU0lXU19BRERSRVNTLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdWZXJzaW9uOiAxJyxcbiAgICAgICAgICAnVW5rbm93bjogeCcsXG4gICAgICAgICAgJ0NoYWluIElEOiBtYWlubmV0JyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIHVua25vd24gZmllbGQgbGFiZWwgYWZ0ZXIgdGhlIGJsYW5rIGxpbmUgdGhhdCBvcGVucyB0aGUgZmllbGRzIHNlY3Rpb24nLCAoKSA9PiB7XG4gICAgICByZWplY3RzKFxuICAgICAgICBbXG4gICAgICAgICAgJ2hhc3RyYS5pbyB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6JyxcbiAgICAgICAgICBTSVdTX0FERFJFU1MsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ0kgYW0gdGhlIHdhbGxldCBvd25lci4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdVbmtub3duOiB4JyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgZmllbGQgbGFiZWwgdGhhdCBhcHBlYXJzIHR3aWNlJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhcbiAgICAgICAgW1xuICAgICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgICAgU0lXU19BRERSRVNTLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYW4gaW52YWxpZCBhZGRyZXNzIGxpbmUnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGFkZHJlc3M6ICdzaG9ydCcgfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBhZGRyZXNzOiAnME9JbC1pbnZhbGlkLWJhc2U1OC1jaGFyYWN0ZXJzLTAwMDAwMDAwMDAwMDAwMDAwMCcgfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSB2YWx1ZWQgUmVzb3VyY2VzIGxpbmUnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IHJlc291cmNlczogW10gfSkucmVwbGFjZSgnUmVzb3VyY2VzOicsICdSZXNvdXJjZXM6IGh0dHBzOi8veC5leGFtcGxlLmNvbScpKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgYmxhbmsgbGluZSBpbnNpZGUgdGhlIGZpZWxkcyBzZWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IFtcbiAgICAgICAgJ2hhc3RyYS5pbyB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6JyxcbiAgICAgICAgU0lXU19BRERSRVNTLFxuICAgICAgICAnJyxcbiAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ0NoYWluIElEOiBtYWlubmV0JyxcbiAgICAgICAgJ05vbmNlOiAzMWE2YmFiNScsXG4gICAgICAgICdJc3N1ZWQgQXQ6IDIwMjYtMDktMjFUMTA6MDA6MDBaJyxcbiAgICAgIF0uam9pbignXFxuJyk7XG4gICAgICByZWplY3RzKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXRmLTggc3RyaWN0bmVzcycsICgpID0+IHtcbiAgICBpdCgncmVqZWN0cyBsb25lIHN1cnJvZ2F0ZXMgdGhhdCBCdWZmZXIuZnJvbSB3b3VsZCBtYW5nbGUgdG8gVStGRkZEJywgKCkgPT4ge1xuICAgICAgKCgpID0+IHZhbGlkYXRlU2l3c01lc3NhZ2UoYnVpbGRTaXdzKHsgc3RhdGVtZW50OiAnYmFkIFxcdUQ4MDAgc3RhdGVtZW50JyB9KSkpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL21lc3NhZ2UgaXMgbm90IHZhbGlkIFVURi04L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=keyVerification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyVerification.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bitgo/utils/tss/keyVerification.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}