@bitgo/account-lib 2.19.0-rc.16 → 2.19.0-rc.20

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 (37) hide show
  1. package/dist/browser/bitgo-account-lib.js +1 -1
  2. package/dist/package.json +7 -7
  3. package/dist/src/coin/near/constants.d.ts +2 -0
  4. package/dist/src/coin/near/constants.d.ts.map +1 -1
  5. package/dist/src/coin/near/constants.js +3 -1
  6. package/dist/src/coin/near/stakingActivateBuilder.d.ts +1 -1
  7. package/dist/src/coin/near/stakingActivateBuilder.d.ts.map +1 -1
  8. package/dist/src/coin/near/stakingActivateBuilder.js +2 -2
  9. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts +32 -0
  10. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts.map +1 -0
  11. package/dist/src/coin/near/stakingDeactivateBuilder.js +158 -0
  12. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts +32 -0
  13. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts.map +1 -0
  14. package/dist/src/coin/near/stakingWithdrawBuilder.js +158 -0
  15. package/dist/src/coin/near/transaction.d.ts +7 -0
  16. package/dist/src/coin/near/transaction.d.ts.map +1 -1
  17. package/dist/src/coin/near/transaction.js +50 -8
  18. package/dist/src/coin/near/transactionBuilderFactory.d.ts +4 -0
  19. package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +1 -1
  20. package/dist/src/coin/near/transactionBuilderFactory.js +13 -1
  21. package/dist/src/mpc/curves.d.ts +28 -13
  22. package/dist/src/mpc/curves.d.ts.map +1 -1
  23. package/dist/src/mpc/curves.js +56 -59
  24. package/dist/src/mpc/hdTree.d.ts +24 -0
  25. package/dist/src/mpc/hdTree.d.ts.map +1 -0
  26. package/dist/src/mpc/hdTree.js +143 -0
  27. package/dist/src/mpc/shamir.d.ts +25 -6
  28. package/dist/src/mpc/shamir.d.ts.map +1 -1
  29. package/dist/src/mpc/shamir.js +41 -45
  30. package/dist/src/mpc/tss.d.ts +57 -28
  31. package/dist/src/mpc/tss.d.ts.map +1 -1
  32. package/dist/src/mpc/tss.js +260 -175
  33. package/dist/src/mpc/util.d.ts +7 -0
  34. package/dist/src/mpc/util.d.ts.map +1 -0
  35. package/dist/src/mpc/util.js +38 -0
  36. package/package.json +7 -7
  37. package/LICENSE +0 -191
@@ -76,181 +76,266 @@ Object.defineProperty(exports, "__esModule", { value: true });
76
76
  * 5. After the signers broadcast their g-shares, the final signature can be re-constructed independently.
77
77
  */
78
78
  var assert = require('assert');
79
- var curves_1 = __importDefault(require("./curves"));
80
- var js_sha512_1 = require("js-sha512");
81
- var shamir_1 = __importDefault(require("./shamir"));
82
79
  var crypto_1 = require("crypto");
83
- var lodash_1 = __importDefault(require("lodash"));
84
- var convertObjectHexToBuffer = function (object, keys) {
85
- var result = lodash_1.default.cloneDeep(object);
86
- keys.forEach(function (key) {
87
- result[key] = Buffer.from(object[key], 'hex');
88
- });
89
- return result;
90
- };
91
- var Eddsa = function () { return __awaiter(void 0, void 0, void 0, function () {
92
- var ed25519, shamir, keyShare, keyCombine, signShare, sign, signCombine, verify;
93
- return __generator(this, function (_a) {
94
- switch (_a.label) {
95
- case 0: return [4 /*yield*/, curves_1.default()];
96
- case 1:
97
- ed25519 = _a.sent();
98
- shamir = shamir_1.default(ed25519);
99
- keyShare = function (index, threshold, numShares) {
100
- assert(index > 0 && index <= numShares);
101
- var sk = crypto_1.randomBytes(32);
102
- var h = Buffer.from(js_sha512_1.sha512.digest(sk));
103
- var zeroBuffer = Buffer.alloc(64 - h.length);
104
- var combinedBuffer = Buffer.concat([zeroBuffer, h]);
105
- var uBuffer = combinedBuffer.slice(0, 32);
106
- uBuffer[0] &= 248;
107
- uBuffer[31] &= 63;
108
- uBuffer[31] |= 64;
109
- var zeroBuffer32 = Buffer.alloc(32);
110
- uBuffer = Buffer.concat([uBuffer, zeroBuffer32]);
111
- var u = Buffer.from(ed25519.scalarReduce(uBuffer));
112
- var y = Buffer.from(ed25519.basePointMult(u));
113
- var split_u = shamir.split(u, threshold, numShares);
114
- var prefixBuffer = combinedBuffer.subarray(32, combinedBuffer.length);
115
- prefixBuffer = Buffer.concat([zeroBuffer32, prefixBuffer]);
116
- var prefix = Buffer.from(ed25519.scalarReduce(prefixBuffer));
117
- var P_i = {
118
- i: index.toString(),
119
- y: y.toString('hex'),
120
- u: split_u[index.toString()].toString('hex'),
121
- prefix: prefix.toString('hex'),
122
- };
123
- var shares = {
124
- uShare: P_i,
125
- yShares: {},
126
- };
127
- for (var ind in split_u) {
128
- if (ind === index.toString()) {
129
- continue;
130
- }
131
- shares.yShares[ind] = {
132
- i: ind,
133
- j: P_i['i'],
134
- y: y.toString('hex'),
135
- u: split_u[ind].toString('hex'),
136
- };
137
- }
138
- return shares;
139
- };
140
- keyCombine = function (uShare, distributedShares) {
141
- // u-shares and y-shares required buffer format for curve functions
142
- var shares = __spreadArray([uShare], distributedShares).map(function (share) { return convertObjectHexToBuffer(share, ['y', 'u']); });
143
- var yShares = shares.map(function (share) { return share['y']; });
144
- var uShares = shares.map(function (share) { return share['u']; });
145
- var y = Buffer.from(yShares.reduce(function (partial, share) { return ed25519.pointAdd(partial, share); }));
146
- var x = Buffer.from(uShares.reduce(function (partial, share) { return ed25519.scalarAdd(partial, share); }));
147
- var P_i = {
148
- i: uShare['i'],
149
- y: y.toString('hex'),
150
- x: x.toString('hex'),
151
- prefix: uShare['prefix'],
152
- };
153
- var players = {
154
- pShare: P_i,
155
- jShares: {},
156
- };
157
- for (var ind = 0; ind < distributedShares.length; ind++) {
158
- var P_j = distributedShares[ind];
159
- players.jShares[P_j['j']] = {
160
- i: P_j['j'],
161
- j: P_i['i'],
162
- };
163
- }
164
- return players;
165
- };
166
- signShare = function (message, pShare, jShares) {
167
- // x-shares and y-shares required buffer format for curve functions
168
- var shares = __spreadArray([convertObjectHexToBuffer(pShare, ['x', 'y'])], jShares);
169
- var indices = shares.map(function (share) { return share['i']; });
170
- // use big endian for prefix
171
- var randomBuffer = crypto_1.randomBytes(32);
172
- var prefix_reference = Buffer.from(pShare['prefix'], 'hex');
173
- prefix_reference.reverse();
174
- var combinedBuffer = Buffer.concat([prefix_reference, message, randomBuffer]);
175
- // using big endian
176
- var digest = Buffer.from(js_sha512_1.sha512.digest(combinedBuffer));
177
- digest.reverse();
178
- var r = Buffer.from(ed25519.scalarReduce(digest));
179
- var R = Buffer.from(ed25519.basePointMult(r));
180
- var split_r = shamir.split(r, shares.length, shares.length, indices);
181
- var P_i = {
182
- i: pShare['i'],
183
- y: pShare['y'],
184
- x: pShare['x'],
185
- r: split_r[pShare['i']].toString('hex'),
186
- R: R.toString('hex'),
187
- };
188
- var resultShares = {
189
- xShare: P_i,
190
- rShares: {},
191
- };
192
- for (var ind = 0; ind < jShares.length; ind++) {
193
- var S_j = jShares[ind];
194
- resultShares.rShares[S_j['i']] = {
195
- i: S_j['i'],
196
- j: pShare['i'],
197
- r: split_r[S_j['i']].toString('hex'),
198
- R: R.toString('hex'),
199
- };
200
- }
201
- return resultShares;
202
- };
203
- sign = function (message, playerShare, distributedShares) {
204
- // x, y, r, R required buffer format for curve functions
205
- var shares = __spreadArray([playerShare], distributedShares).map(function (share) { return convertObjectHexToBuffer(share, ['R', 'r']); });
206
- var S_i = playerShare;
207
- var rShares = shares.map(function (share) { return share['R']; });
208
- var littleRShares = shares.map(function (share) { return share['r']; });
209
- var R = Buffer.from(rShares.reduce(function (partial, share) { return ed25519.pointAdd(partial, share); }));
210
- var r = Buffer.from(littleRShares.reduce(function (partial, share) { return ed25519.scalarAdd(partial, share); }));
211
- var combinedBuffer = Buffer.concat([R, Buffer.from(S_i['y'], 'hex'), message]);
212
- var digest = Buffer.from(js_sha512_1.sha512.digest(combinedBuffer));
213
- var k = Buffer.from(ed25519.scalarReduce(digest));
214
- var gamma = Buffer.from(ed25519.scalarAdd(r, ed25519.scalarMult(k, Buffer.from(S_i['x'], 'hex'))));
215
- var result = {
216
- i: playerShare['i'],
217
- y: playerShare['y'],
218
- gamma: gamma.toString('hex'),
219
- R: R.toString('hex'),
220
- };
221
- return result;
222
- };
223
- signCombine = function (shares) {
224
- shares = shares.map(function (share) { return convertObjectHexToBuffer(share, ['y', 'gamma', 'R']); });
225
- var keys = Object.keys(shares);
226
- var y = shares[keys[0]]['y'];
227
- var R = shares[keys[0]]['R'];
228
- var resultShares = {};
229
- for (var ind in shares) {
230
- var S_i = shares[ind];
231
- resultShares[S_i['i']] = S_i['gamma'];
232
- }
233
- var sigma = shamir.combine(resultShares);
234
- sigma = Buffer.from(sigma);
235
- var result = {
236
- y: y.toString('hex'),
237
- R: R.toString('hex'),
238
- sigma: sigma.toString('hex'),
239
- };
240
- return result;
241
- };
242
- verify = function (message, signature) {
243
- var publicKey = Buffer.from(signature['y'], 'hex');
244
- var signedMessage = Buffer.concat([
245
- Buffer.from(signature['R'], 'hex'),
246
- Buffer.from(signature['sigma'], 'hex'),
247
- message,
248
- ]);
249
- return Buffer.from(ed25519.verify(publicKey, signedMessage));
250
- };
251
- return [2 /*return*/, { keyShare: keyShare, keyCombine: keyCombine, signShare: signShare, sign: sign, signCombine: signCombine, verify: verify }];
80
+ var curves_1 = require("./curves");
81
+ var shamir_1 = __importDefault(require("./shamir"));
82
+ var util_1 = require("./util");
83
+ // 2^256
84
+ var base = BigInt('0x010000000000000000000000000000000000000000000000000000000000000000');
85
+ var Eddsa = /** @class */ (function () {
86
+ function Eddsa(hdTree) {
87
+ this.hdTree = hdTree;
88
+ }
89
+ Eddsa.initialize = function () {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ return __generator(this, function (_a) {
92
+ switch (_a.label) {
93
+ case 0:
94
+ if (!!Eddsa.initialized) return [3 /*break*/, 2];
95
+ return [4 /*yield*/, curves_1.Ed25519Curve.initialize()];
96
+ case 1:
97
+ _a.sent();
98
+ Eddsa.initialized = true;
99
+ _a.label = 2;
100
+ case 2: return [2 /*return*/];
101
+ }
102
+ });
103
+ });
104
+ };
105
+ Eddsa.prototype.keyShare = function (index, threshold, numShares) {
106
+ assert(index > 0 && index <= numShares);
107
+ var seedchain = crypto_1.randomBytes(64);
108
+ var seed = seedchain.slice(0, 32);
109
+ var chaincode = seedchain.slice(32);
110
+ var h = crypto_1.createHash('sha512').update(seed).digest();
111
+ var u = util_1.clamp(util_1.bigIntFromBufferLE(h.slice(0, 32)));
112
+ var y = Eddsa.curve.basePointMult(u);
113
+ var split_u = Eddsa.shamir.split(u, threshold, numShares);
114
+ var P_i = {
115
+ i: index,
116
+ t: threshold,
117
+ n: numShares,
118
+ y: util_1.bigIntToBufferLE(y, 32).toString('hex'),
119
+ seed: seed.toString('hex'),
120
+ chaincode: chaincode.toString('hex'),
121
+ };
122
+ var shares = {
123
+ uShare: P_i,
124
+ yShares: {},
125
+ };
126
+ for (var ind in split_u) {
127
+ var i = parseInt(ind, 10);
128
+ if (i === index) {
129
+ continue;
130
+ }
131
+ shares.yShares[i] = {
132
+ i: i,
133
+ j: P_i.i,
134
+ y: util_1.bigIntToBufferLE(y, 32).toString('hex'),
135
+ u: util_1.bigIntToBufferLE(split_u[ind], 32).toString('hex'),
136
+ chaincode: chaincode.toString('hex'),
137
+ };
252
138
  }
253
- });
254
- }); };
139
+ return shares;
140
+ };
141
+ Eddsa.prototype.keyCombine = function (uShare, yShares) {
142
+ var h = crypto_1.createHash('sha512').update(Buffer.from(uShare.seed, 'hex')).digest();
143
+ var u = util_1.clamp(util_1.bigIntFromBufferLE(h.slice(0, 32)));
144
+ var yValues = __spreadArray([uShare], yShares).map(function (share) { return util_1.bigIntFromBufferLE(Buffer.from(share.y, 'hex')); });
145
+ var y = yValues.reduce(function (partial, share) { return Eddsa.curve.pointAdd(partial, share); });
146
+ var chaincodes = __spreadArray([uShare], yShares).map(function (_a) {
147
+ var chaincode = _a.chaincode;
148
+ return util_1.bigIntFromBufferBE(Buffer.from(chaincode, 'hex'));
149
+ });
150
+ var chaincode = chaincodes.reduce(function (acc, chaincode) { return (acc + chaincode) % base; });
151
+ var P_i = {
152
+ i: uShare.i,
153
+ t: uShare.t,
154
+ n: uShare.n,
155
+ y: util_1.bigIntToBufferLE(y, 32).toString('hex'),
156
+ u: util_1.bigIntToBufferLE(u, 32).toString('hex'),
157
+ prefix: h.slice(32).toString('hex'),
158
+ chaincode: util_1.bigIntToBufferBE(chaincode, 32).toString('hex'),
159
+ };
160
+ var players = {
161
+ pShare: P_i,
162
+ jShares: {},
163
+ };
164
+ for (var ind = 0; ind < yShares.length; ind++) {
165
+ var P_j = yShares[ind];
166
+ players.jShares[P_j.j] = {
167
+ i: P_j.j,
168
+ j: P_i.i,
169
+ };
170
+ }
171
+ return players;
172
+ };
173
+ /**
174
+ * Derives a child public key from common keychain
175
+ *
176
+ * @param commonKeychain - common keychain as a hex string
177
+ * @param path - bip32 path
178
+ * @return {string} public key as a hex string
179
+ */
180
+ Eddsa.prototype.deriveUnhardened = function (commonKeychain, path) {
181
+ if (this.hdTree === undefined) {
182
+ throw new Error("Can't derive key without HDTree implementation");
183
+ }
184
+ var keychain = Buffer.from(commonKeychain, 'hex');
185
+ var derivedPublicKeychain = this.hdTree.publicDerive({
186
+ pk: util_1.bigIntFromBufferLE(keychain.slice(0, 32)),
187
+ chaincode: util_1.bigIntFromBufferBE(keychain.slice(32)),
188
+ }, path);
189
+ return util_1.bigIntToBufferLE(derivedPublicKeychain.pk, 32).toString('hex');
190
+ };
191
+ Eddsa.prototype.keyDerive = function (uShare, yShares, path) {
192
+ if (this.hdTree === undefined) {
193
+ throw new Error("Can't derive key without HDTree implementation");
194
+ }
195
+ var h = crypto_1.createHash('sha512').update(Buffer.from(uShare.seed, 'hex')).digest();
196
+ var yValues = __spreadArray([uShare], yShares).map(function (share) { return util_1.bigIntFromBufferLE(Buffer.from(share.y, 'hex')); });
197
+ var y = yValues.reduce(function (partial, share) { return Eddsa.curve.pointAdd(partial, share); });
198
+ var u = util_1.clamp(util_1.bigIntFromBufferLE(h.slice(0, 32)));
199
+ var prefix = util_1.bigIntFromBufferBE(h.slice(32));
200
+ var contribChaincode = util_1.bigIntFromBufferBE(Buffer.from(uShare.chaincode, 'hex'));
201
+ var chaincodes = __spreadArray([
202
+ contribChaincode
203
+ ], yShares.map(function (_a) {
204
+ var chaincode = _a.chaincode;
205
+ return util_1.bigIntFromBufferBE(Buffer.from(chaincode, 'hex'));
206
+ }));
207
+ var chaincode = chaincodes.reduce(function (acc, chaincode) { return (acc + chaincode) % base; });
208
+ // Derive subkey.
209
+ var subkey = this.hdTree.privateDerive({ pk: y, sk: u, prefix: prefix, chaincode: chaincode }, path);
210
+ // Calculate new public key contribution.
211
+ var contribY = Eddsa.curve.basePointMult(subkey.sk);
212
+ // Calculate new chaincode contribution.
213
+ var chaincodeDelta = (base + subkey.chaincode - chaincode) % base;
214
+ contribChaincode = (contribChaincode + chaincodeDelta) % base;
215
+ // Calculate new u values.
216
+ var split_u = Eddsa.shamir.split(subkey.sk, uShare.t, uShare.n);
217
+ var P_i = {
218
+ i: uShare.i,
219
+ t: uShare.t,
220
+ n: uShare.n,
221
+ y: util_1.bigIntToBufferLE(subkey.pk, 32).toString('hex'),
222
+ u: util_1.bigIntToBufferLE(subkey.sk, 32).toString('hex'),
223
+ prefix: util_1.bigIntToBufferBE(subkey.prefix, 32).toString('hex'),
224
+ chaincode: util_1.bigIntToBufferBE(subkey.chaincode, 32).toString('hex'),
225
+ };
226
+ var shares = {
227
+ pShare: P_i,
228
+ yShares: {},
229
+ };
230
+ for (var ind = 0; ind < yShares.length; ind++) {
231
+ var P_j = yShares[ind];
232
+ shares.yShares[P_j.j] = {
233
+ i: P_j.j,
234
+ j: P_i.i,
235
+ y: util_1.bigIntToBufferLE(contribY, 32).toString('hex'),
236
+ u: util_1.bigIntToBufferLE(split_u[P_j.i], 32).toString('hex'),
237
+ chaincode: util_1.bigIntToBufferBE(contribChaincode, 32).toString('hex'),
238
+ };
239
+ }
240
+ return shares;
241
+ };
242
+ Eddsa.prototype.signShare = function (message, pShare, jShares) {
243
+ var indices = __spreadArray([pShare], jShares).map(function (_a) {
244
+ var i = _a.i;
245
+ return i;
246
+ });
247
+ var split_u = Eddsa.shamir.split(util_1.bigIntFromBufferLE(Buffer.from(pShare.u, 'hex')), pShare.t, pShare.n);
248
+ // Generate nonce contribution.
249
+ var prefix = Buffer.from(pShare.prefix, 'hex');
250
+ var randomBuffer = crypto_1.randomBytes(32);
251
+ var digest = crypto_1.createHash('sha512')
252
+ .update(Buffer.concat([prefix, message, randomBuffer]))
253
+ .digest();
254
+ var r = Eddsa.curve.scalarReduce(util_1.bigIntFromBufferLE(digest));
255
+ var R = Eddsa.curve.basePointMult(r);
256
+ var split_r = Eddsa.shamir.split(r, indices.length, indices.length, indices);
257
+ var P_i = {
258
+ i: pShare.i,
259
+ y: pShare.y,
260
+ u: util_1.bigIntToBufferLE(split_u[pShare.i], 32).toString('hex'),
261
+ r: util_1.bigIntToBufferLE(split_r[pShare.i], 32).toString('hex'),
262
+ R: util_1.bigIntToBufferLE(R, 32).toString('hex'),
263
+ };
264
+ var resultShares = {
265
+ xShare: P_i,
266
+ rShares: {},
267
+ };
268
+ for (var ind = 0; ind < jShares.length; ind++) {
269
+ var S_j = jShares[ind];
270
+ resultShares.rShares[S_j.i] = {
271
+ i: S_j.i,
272
+ j: pShare.i,
273
+ u: util_1.bigIntToBufferLE(split_u[S_j.i], 32).toString('hex'),
274
+ r: util_1.bigIntToBufferLE(split_r[S_j.i], 32).toString('hex'),
275
+ R: util_1.bigIntToBufferLE(R, 32).toString('hex'),
276
+ };
277
+ }
278
+ return resultShares;
279
+ };
280
+ Eddsa.prototype.sign = function (message, playerShare, rShares, yShares) {
281
+ if (yShares === void 0) { yShares = []; }
282
+ var S_i = playerShare;
283
+ var uValues = __spreadArray(__spreadArray([playerShare], rShares), yShares).map(function (_a) {
284
+ var u = _a.u;
285
+ return util_1.bigIntFromBufferLE(Buffer.from(u, 'hex'));
286
+ });
287
+ var x = uValues.reduce(function (acc, u) { return Eddsa.curve.scalarAdd(acc, u); });
288
+ var RValues = __spreadArray([playerShare], rShares).map(function (_a) {
289
+ var R = _a.R;
290
+ return util_1.bigIntFromBufferLE(Buffer.from(R, 'hex'));
291
+ });
292
+ var R = RValues.reduce(function (partial, share) { return Eddsa.curve.pointAdd(partial, share); });
293
+ var rValues = __spreadArray([playerShare], rShares).map(function (_a) {
294
+ var r = _a.r;
295
+ return util_1.bigIntFromBufferLE(Buffer.from(r, 'hex'));
296
+ });
297
+ var r = rValues.reduce(function (partial, share) { return Eddsa.curve.scalarAdd(partial, share); });
298
+ var combinedBuffer = Buffer.concat([util_1.bigIntToBufferLE(R, 32), Buffer.from(S_i.y, 'hex'), message]);
299
+ var digest = crypto_1.createHash('sha512').update(combinedBuffer).digest();
300
+ var k = Eddsa.curve.scalarReduce(util_1.bigIntFromBufferLE(digest));
301
+ var gamma = Eddsa.curve.scalarAdd(r, Eddsa.curve.scalarMult(k, x));
302
+ var result = {
303
+ i: playerShare.i,
304
+ y: playerShare.y,
305
+ gamma: util_1.bigIntToBufferLE(gamma, 32).toString('hex'),
306
+ R: util_1.bigIntToBufferLE(R, 32).toString('hex'),
307
+ };
308
+ return result;
309
+ };
310
+ Eddsa.prototype.signCombine = function (shares) {
311
+ var y = shares[0].y;
312
+ var R = shares[0].R;
313
+ var resultShares = {};
314
+ for (var ind in shares) {
315
+ var S_i = shares[ind];
316
+ resultShares[S_i.i] = util_1.bigIntFromBufferLE(Buffer.from(S_i.gamma, 'hex'));
317
+ }
318
+ var sigma = Eddsa.shamir.combine(resultShares);
319
+ var result = {
320
+ y: y,
321
+ R: R,
322
+ sigma: util_1.bigIntToBufferLE(sigma, 32).toString('hex'),
323
+ };
324
+ return result;
325
+ };
326
+ Eddsa.prototype.verify = function (message, signature) {
327
+ var publicKey = util_1.bigIntFromBufferLE(Buffer.from(signature.y, 'hex'));
328
+ var signedMessage = Buffer.concat([
329
+ Buffer.from(signature.R, 'hex'),
330
+ Buffer.from(signature.sigma, 'hex'),
331
+ message,
332
+ ]);
333
+ return Eddsa.curve.verify(publicKey, signedMessage);
334
+ };
335
+ Eddsa.curve = new curves_1.Ed25519Curve();
336
+ Eddsa.shamir = new shamir_1.default(Eddsa.curve);
337
+ Eddsa.initialized = false;
338
+ return Eddsa;
339
+ }());
255
340
  exports.default = Eddsa;
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy90c3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsb0RBQW9DO0FBQ3BDLHVDQUFtQztBQUNuQyxvREFBOEI7QUFDOUIsaUNBQTBEO0FBQzFELGtEQUF1QjtBQUV2QixJQUFNLHdCQUF3QixHQUFHLFVBQUMsTUFBMkIsRUFBRSxJQUFjO0lBQzNFLElBQU0sTUFBTSxHQUFRLGdCQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBdUVGLElBQU0sS0FBSyxHQUFHOzs7O29CQUNJLHFCQUFNLGdCQUFZLEVBQUUsRUFBQTs7Z0JBQTlCLE9BQU8sR0FBRyxTQUFvQjtnQkFDOUIsTUFBTSxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXpCLFFBQVEsR0FBRyxVQUFDLEtBQWEsRUFBRSxTQUFpQixFQUFFLFNBQWlCO29CQUNuRSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7b0JBQ3hDLElBQU0sRUFBRSxHQUFHLG9CQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxJQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFB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QUFDO29CQUNyRCxJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO3dCQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUM7d0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQzt3QkFDdEMsT0FBTztxQkFDUixDQUFDLENBQUM7b0JBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELENBQUMsQ0FBQztnQkFFRixzQkFBTyxFQUFFLFFBQVEsVUFBQSxFQUFFLFVBQVUsWUFBQSxFQUFFLFNBQVMsV0FBQSxFQUFFLElBQUksTUFBQSxFQUFFLFdBQVcsYUFBQSxFQUFFLE1BQU0sUUFBQSxFQUFFLEVBQUM7OztLQUN2RSxDQUFDO0FBRUYsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBNUEMgdXNpbmcgdGhyZXNob2xkIHNpZ25hdHVyZSBzY2hlbWUgKFRTUykuIEl0IGNvbnRhaW5zXG4gKiBmdW5jdGlvbnMgZm9yIGtleSBnZW5lcmF0aW9uIGFuZCBtZXNzYWdlIHNpZ25pbmcgd2l0aCBFZERTQS5cbiAqXG4gKlxuICogPT09PT09PT09PT09PT09PT09PT09PVxuICogRWREU0EgS2V5IEdlbmVyYXRpb25cbiAqID09PT09PT09PT09PT09PT09PT09PT1cbiAqIDEuIEVhY2ggc2lnbmVyIGdlbmVyYXRlcyB0aGVpciBvd24ga2V5IHNoYXJlLCB3aGljaCBpbnZvbHZlcyBhIHByaXZhdGUgdS1zaGFyZSBhbmQgYSBwdWJsaWMgeS1zaGFyZS5cbiAqIDIuIFNpZ25lcnMgZGlzdHJpYnV0ZSB0aGVpciB5LXNoYXJlIHRvIG90aGVyIHNpZ25lcnMuXG4gKiAzLiBBZnRlciBleGNoYW5naW5nIHktc2hhcmVzIHRoZSBuZXh0IHBoYXNlIGlzIHRvIGNvbWJpbmUga2V5IHNoYXJlcy4gRWFjaCBzaWduZXIgY29tYmluZXMgdGhlaXIgdS1zaGFyZVxuICogICAgd2l0aCB0aGUgeS1zaGFyZXMgcmVjZWl2ZWQgZnJvbSBvdGhlciBzaWduZXJzIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgcC1zaGFyZSBmb3IgdGhlbXNlbHZlcy4gV2VcbiAqICAgIGFsc28gc2F2ZSBqLXNoYXJlcyBmb3Igb3RoZXIgc2lnbmVycy5cbiAqIDQuIEF0IHRoaXMgcG9pbnQgdGhlIHBsYXllcnMgZG8gbm90IGRpc3RyaWJ1dGUgYW55IHNoYXJlcyBhbmQgdGhlIGZpcnN0IHBoYXNlIG9mIHRoZVxuICogICAgc2lnbmluZyBwcm90b2NvbCBpcyBjb21wbGV0ZS5cbiAqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09XG4gKiBFZERTQSBTaWduaW5nXG4gKiA9PT09PT09PT09PT09PT09PT09PT09XG4gKiAxLiBUaGUgcGFydGllcyBmcm9tIGtleSBnZW5lcmF0aW9uIGRlY2lkZSB0aGV5IHdhbnQgdG8gc2lnbiBzb21ldGhpbmcuIFRoZXkgYmVnaW4gdGhlIHNpZ25pbmcgcHJvdG9jb2xcbiAqICAgIGJ5IGdlbmVyYXRpbmcgc2hhcmVzIG9mIGFuIGVwaGVtZXJhbCBrZXkuXG4gKlxuICogICAgYSkgRWFjaCBzaWduZXIgdXNlcyBoaXMgcC1zaGFyZSBhbmQgdGhlIGotc2hhcmVzIHN0b3JlZCBmb3Igb3RoZXIgcGxheWVycyB0byBnZW5lcmF0ZSBoaXMgc2lnbmluZyBzaGFyZS5cbiAqICAgIGIpIFRoaXMgcmVzdWx0cyBpbiBlYWNoIHNpZ25lciBoYXZpbmcgYSBwcml2YXRlIHgtc2hhcmUgYW5kIHB1YmxpYyByLXNoYXJlcy5cbiAqXG4gKiAyLiBTaWduZXJzIGRpc3RyaWJ1dGUgdGhlaXIgci1zaGFyZXMgdG8gb3RoZXIgc2lnbmVycy5cbiAqIDMuIEFmdGVyIGV4Y2hhbmdpbmcgci1zaGFyZXMsIGVhY2ggc2lnbmVyIHNpZ25zIHRoZWlyIHNoYXJlIG9mIHRoZSBlcGhlbWVyYWwga2V5IHVzaW5nIHRoZWlyIHByaXZhdGVcbiAqICAgIHgtc2hhcmUgd2l0aCB0aGUgci1zaGFyZXMgZnJvbSBvdGhlciBzaWduZXJzLlxuICogNC4gVGhpcyByZXN1bHRzIGluIGVhY2ggc2lnbmVyIGhhdmluZyBhIHB1YmxpYyBnLXNoYXJlIHdoaWNoIHRoZXkgc2VuZCB0byB0aGUgb3RoZXIgc2lnbmVycy5cbiAqIDUuIEFmdGVyIHRoZSBzaWduZXJzIGJyb2FkY2FzdCB0aGVpciBnLXNoYXJlcywgdGhlIGZpbmFsIHNpZ25hdHVyZSBjYW4gYmUgcmUtY29uc3RydWN0ZWQgaW5kZXBlbmRlbnRseS5cbiAqL1xuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG5pbXBvcnQgRWQyNTUxOUN1cnZlIGZyb20gJy4vY3VydmVzJztcbmltcG9ydCB7IHNoYTUxMiB9IGZyb20gJ2pzLXNoYTUxMic7XG5pbXBvcnQgU2hhbWlyIGZyb20gJy4vc2hhbWlyJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIGFzIGNyeXB0b1JhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IGNvbnZlcnRPYmplY3RIZXhUb0J1ZmZlciA9IChvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4sIGtleXM6IHN0cmluZ1tdKSA9PiB7XG4gIGNvbnN0IHJlc3VsdDogYW55ID0gXy5jbG9uZURlZXAob2JqZWN0KTtcbiAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICByZXN1bHRba2V5XSA9IEJ1ZmZlci5mcm9tKG9iamVjdFtrZXldLCAnaGV4Jyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuaW50ZXJmYWNlIFVTaGFyZSB7XG4gIGk6IHN0cmluZztcbiAgeTogc3RyaW5nO1xuICB1OiBzdHJpbmc7XG4gIHByZWZpeDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgWVNoYXJlIHtcbiAgaTogc3RyaW5nO1xuICBqOiBzdHJpbmc7XG4gIHk6IHN0cmluZztcbiAgdTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleVNoYXJlIHtcbiAgdVNoYXJlOiBVU2hhcmU7XG4gIHlTaGFyZXM6IFJlY29yZDxzdHJpbmcsIFlTaGFyZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUFNoYXJlIHtcbiAgaTogc3RyaW5nO1xuICB4OiBzdHJpbmc7XG4gIHk6IHN0cmluZztcbiAgcHJlZml4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlNoYXJlIHtcbiAgaTogc3RyaW5nO1xuICBqOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBLZXlDb21iaW5lIHtcbiAgcFNoYXJlOiBQU2hhcmU7XG4gIGpTaGFyZXM6IFJlY29yZDxzdHJpbmcsIEpTaGFyZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWFNoYXJlIHtcbiAgaTogc3RyaW5nO1xuICB5OiBzdHJpbmc7XG4gIHg6IHN0cmluZztcbiAgcjogc3RyaW5nO1xuICBSOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUlNoYXJlIHtcbiAgaTogc3RyaW5nO1xuICBqOiBzdHJpbmc7XG4gIHI6IHN0cmluZztcbiAgUjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25TaGFyZSB7XG4gIHhTaGFyZTogWFNoYXJlO1xuICByU2hhcmVzOiBSZWNvcmQ8c3RyaW5nLCBSU2hhcmU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdTaGFyZSB7XG4gIGk6IHN0cmluZztcbiAgeTogc3RyaW5nO1xuICBnYW1tYTogc3RyaW5nO1xuICBSOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTaWduYXR1cmUge1xuICB5OiBzdHJpbmc7XG4gIFI6IHN0cmluZztcbiAgc2lnbWE6IHN0cmluZztcbn1cblxuY29uc3QgRWRkc2EgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGVkMjU1MTkgPSBhd2FpdCBFZDI1NTE5Q3VydmUoKTtcbiAgY29uc3Qgc2hhbWlyID0gU2hhbWlyKGVkMjU1MTkpO1xuXG4gIGNvbnN0IGtleVNoYXJlID0gKGluZGV4OiBudW1iZXIsIHRocmVzaG9sZDogbnVtYmVyLCBudW1TaGFyZXM6IG51bWJlcik6IEtleVNoYXJlID0+IHtcbiAgICBhc3NlcnQoaW5kZXggPiAwICYmIGluZGV4IDw9IG51bVNoYXJlcyk7XG4gICAgY29uc3Qgc2sgPSBjcnlwdG9SYW5kb21CeXRlcygzMik7XG4gICAgY29uc3QgaCA9IEJ1ZmZlci5mcm9tKHNoYTUxMi5kaWdlc3Qoc2spKTtcbiAgICBjb25zdCB6ZXJvQnVmZmVyID0gQnVmZmVyLmFsbG9jKDY0IC0gaC5sZW5ndGgpO1xuICAgIGNvbnN0IGNvbWJpbmVkQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbemVyb0J1ZmZlciwgaF0pO1xuXG4gICAgbGV0IHVCdWZmZXIgPSBjb21iaW5lZEJ1ZmZlci5zbGljZSgwLCAzMik7XG4gICAgdUJ1ZmZlclswXSAmPSAyNDg7XG4gICAgdUJ1ZmZlclszMV0gJj0gNjM7XG4gICAgdUJ1ZmZlclszMV0gfD0gNjQ7XG5cbiAgICBjb25zdCB6ZXJvQnVmZmVyMzIgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgIHVCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFt1QnVmZmVyLCB6ZXJvQnVmZmVyMzJdKTtcbiAgICBjb25zdCB1ID0gQnVmZmVyLmZyb20oZWQyNTUxOS5zY2FsYXJSZWR1Y2UodUJ1ZmZlcikpO1xuICAgIGNvbnN0IHkgPSBCdWZmZXIuZnJvbShlZDI1NTE5LmJhc2VQb2ludE11bHQodSkpO1xuICAgIGNvbnN0IHNwbGl0X3UgPSBzaGFtaXIuc3BsaXQodSwgdGhyZXNob2xkLCBudW1TaGFyZXMpO1xuXG4gICAgbGV0IHByZWZpeEJ1ZmZlciA9IGNvbWJpbmVkQnVmZmVyLnN1YmFycmF5KDMyLCBjb21iaW5lZEJ1ZmZlci5sZW5ndGgpO1xuICAgIHByZWZpeEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3plcm9CdWZmZXIzMiwgcHJlZml4QnVmZmVyXSk7XG4gICAgY29uc3QgcHJlZml4ID0gQnVmZmVyLmZyb20oZWQyNTUxOS5zY2FsYXJSZWR1Y2UocHJlZml4QnVmZmVyKSk7XG5cbiAgICBjb25zdCBQX2k6IFVTaGFyZSA9IHtcbiAgICAgIGk6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICB5OiB5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHU6IHNwbGl0X3VbaW5kZXgudG9TdHJpbmcoKV0udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJlZml4OiBwcmVmaXgudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gICAgY29uc3Qgc2hhcmVzOiBLZXlTaGFyZSA9IHtcbiAgICAgIHVTaGFyZTogUF9pLFxuICAgICAgeVNoYXJlczoge30sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaW5kIGluIHNwbGl0X3UpIHtcbiAgICAgIGlmIChpbmQgPT09IGluZGV4LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzaGFyZXMueVNoYXJlc1tpbmRdID0ge1xuICAgICAgICBpOiBpbmQsXG4gICAgICAgIGo6IFBfaVsnaSddLFxuICAgICAgICB5OiB5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdTogc3BsaXRfdVtpbmRdLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzaGFyZXM7XG4gIH07XG4gIGNvbnN0IGtleUNvbWJpbmUgPSAodVNoYXJlOiBVU2hhcmUsIGRpc3RyaWJ1dGVkU2hhcmVzOiBZU2hhcmVbXSk6IEtleUNvbWJpbmUgPT4ge1xuICAgIC8vIHUtc2hhcmVzIGFuZCB5LXNoYXJlcyByZXF1aXJlZCBidWZmZXIgZm9ybWF0IGZvciBjdXJ2ZSBmdW5jdGlvbnNcbiAgICBjb25zdCBzaGFyZXMgPSBbdVNoYXJlLCAuLi5kaXN0cmlidXRlZFNoYXJlc10ubWFwKChzaGFyZSkgPT4gY29udmVydE9iamVjdEhleFRvQnVmZmVyKHNoYXJlLCBbJ3knLCAndSddKSk7XG4gICAgY29uc3QgeVNoYXJlcyA9IHNoYXJlcy5tYXAoKHNoYXJlKSA9PiBzaGFyZVsneSddKTtcbiAgICBjb25zdCB1U2hhcmVzID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IHNoYXJlWyd1J10pO1xuICAgIGNvbnN0IHkgPSBCdWZmZXIuZnJvbSh5U2hhcmVzLnJlZHVjZSgocGFydGlhbCwgc2hhcmUpID0+IGVkMjU1MTkucG9pbnRBZGQocGFydGlhbCwgc2hhcmUpKSk7XG4gICAgY29uc3QgeCA9IEJ1ZmZlci5mcm9tKHVTaGFyZXMucmVkdWNlKChwYXJ0aWFsLCBzaGFyZSkgPT4gZWQyNTUxOS5zY2FsYXJBZGQocGFydGlhbCwgc2hhcmUpKSk7XG5cbiAgICBjb25zdCBQX2k6IFBTaGFyZSA9IHtcbiAgICAgIGk6IHVTaGFyZVsnaSddLFxuICAgICAgeTogeS50b1N0cmluZygnaGV4JyksXG4gICAgICB4OiB4LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHByZWZpeDogdVNoYXJlWydwcmVmaXgnXSxcbiAgICB9O1xuICAgIGNvbnN0IHBsYXllcnM6IEtleUNvbWJpbmUgPSB7XG4gICAgICBwU2hhcmU6IFBfaSxcbiAgICAgIGpTaGFyZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBkaXN0cmlidXRlZFNoYXJlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCBQX2ogPSBkaXN0cmlidXRlZFNoYXJlc1tpbmRdO1xuICAgICAgcGxheWVycy5qU2hhcmVzW1BfalsnaiddXSA9IHtcbiAgICAgICAgaTogUF9qWydqJ10sXG4gICAgICAgIGo6IFBfaVsnaSddLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBsYXllcnM7XG4gIH07XG5cbiAgY29uc3Qgc2lnblNoYXJlID0gKG1lc3NhZ2U6IEJ1ZmZlciwgcFNoYXJlOiBQU2hhcmUsIGpTaGFyZXM6IEpTaGFyZVtdKTogU2lnblNoYXJlID0+IHtcbiAgICAvLyB4LXNoYXJlcyBhbmQgeS1zaGFyZXMgcmVxdWlyZWQgYnVmZmVyIGZvcm1hdCBmb3IgY3VydmUgZnVuY3Rpb25zXG4gICAgY29uc3Qgc2hhcmVzID0gW2NvbnZlcnRPYmplY3RIZXhUb0J1ZmZlcihwU2hhcmUsIFsneCcsICd5J10pLCAuLi5qU2hhcmVzXTtcbiAgICBjb25zdCBpbmRpY2VzID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IHNoYXJlWydpJ10pO1xuXG4gICAgLy8gdXNlIGJpZyBlbmRpYW4gZm9yIHByZWZpeFxuICAgIGNvbnN0IHJhbmRvbUJ1ZmZlciA9IGNyeXB0b1JhbmRvbUJ5dGVzKDMyKTtcbiAgICBjb25zdCBwcmVmaXhfcmVmZXJlbmNlID0gQnVmZmVyLmZyb20ocFNoYXJlWydwcmVmaXgnXSwgJ2hleCcpO1xuICAgIHByZWZpeF9yZWZlcmVuY2UucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGNvbWJpbmVkQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbcHJlZml4X3JlZmVyZW5jZSwgbWVzc2FnZSwgcmFuZG9tQnVmZmVyXSk7XG5cbiAgICAvLyB1c2luZyBiaWcgZW5kaWFuXG4gICAgY29uc3QgZGlnZXN0ID0gQnVmZmVyLmZyb20oc2hhNTEyLmRpZ2VzdChjb21iaW5lZEJ1ZmZlcikpO1xuICAgIGRpZ2VzdC5yZXZlcnNlKCk7XG5cbiAgICBjb25zdCByID0gQnVmZmVyLmZyb20oZWQyNTUxOS5zY2FsYXJSZWR1Y2UoZGlnZXN0KSk7XG4gICAgY29uc3QgUiA9IEJ1ZmZlci5mcm9tKGVkMjU1MTkuYmFzZVBvaW50TXVsdChyKSk7XG4gICAgY29uc3Qgc3BsaXRfciA9IHNoYW1pci5zcGxpdChyLCBzaGFyZXMubGVuZ3RoLCBzaGFyZXMubGVuZ3RoLCBpbmRpY2VzKTtcblxuICAgIGNvbnN0IFBfaTogWFNoYXJlID0ge1xuICAgICAgaTogcFNoYXJlWydpJ10sXG4gICAgICB5OiBwU2hhcmVbJ3knXSxcbiAgICAgIHg6IHBTaGFyZVsneCddLFxuICAgICAgcjogc3BsaXRfcltwU2hhcmVbJ2knXV0udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgUjogUi50b1N0cmluZygnaGV4JyksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdFNoYXJlczogU2lnblNoYXJlID0ge1xuICAgICAgeFNoYXJlOiBQX2ksXG4gICAgICByU2hhcmVzOiB7fSxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgalNoYXJlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCBTX2ogPSBqU2hhcmVzW2luZF07XG4gICAgICByZXN1bHRTaGFyZXMuclNoYXJlc1tTX2pbJ2knXV0gPSB7XG4gICAgICAgIGk6IFNfalsnaSddLFxuICAgICAgICBqOiBwU2hhcmVbJ2knXSxcbiAgICAgICAgcjogc3BsaXRfcltTX2pbJ2knXV0udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBSOiBSLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRTaGFyZXM7XG4gIH07XG5cbiAgY29uc3Qgc2lnbiA9IChtZXNzYWdlOiBCdWZmZXIsIHBsYXllclNoYXJlOiBYU2hhcmUsIGRpc3RyaWJ1dGVkU2hhcmVzOiBSU2hhcmVbXSk6IEdTaGFyZSA9PiB7XG4gICAgLy8geCwgeSwgciwgUiByZXF1aXJlZCBidWZmZXIgZm9ybWF0IGZvciBjdXJ2ZSBmdW5jdGlvbnNcbiAgICBjb25zdCBzaGFyZXMgPSBbcGxheWVyU2hhcmUsIC4uLmRpc3RyaWJ1dGVkU2hhcmVzXS5tYXAoKHNoYXJlKSA9PiBjb252ZXJ0T2JqZWN0SGV4VG9CdWZmZXIoc2hhcmUsIFsnUicsICdyJ10pKTtcbiAgICBjb25zdCBTX2kgPSBwbGF5ZXJTaGFyZTtcblxuICAgIGNvbnN0IHJTaGFyZXMgPSBzaGFyZXMubWFwKChzaGFyZSkgPT4gc2hhcmVbJ1InXSk7XG4gICAgY29uc3QgbGl0dGxlUlNoYXJlcyA9IHNoYXJlcy5tYXAoKHNoYXJlKSA9PiBzaGFyZVsnciddKTtcblxuICAgIGNvbnN0IFIgPSBCdWZmZXIuZnJvbShyU2hhcmVzLnJlZHVjZSgocGFydGlhbCwgc2hhcmUpID0+IGVkMjU1MTkucG9pbnRBZGQocGFydGlhbCwgc2hhcmUpKSk7XG4gICAgY29uc3QgciA9IEJ1ZmZlci5mcm9tKGxpdHRsZVJTaGFyZXMucmVkdWNlKChwYXJ0aWFsLCBzaGFyZSkgPT4gZWQyNTUxOS5zY2FsYXJBZGQocGFydGlhbCwgc2hhcmUpKSk7XG5cbiAgICBjb25zdCBjb21iaW5lZEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1IsIEJ1ZmZlci5mcm9tKFNfaVsneSddLCAnaGV4JyksIG1lc3NhZ2VdKTtcbiAgICBjb25zdCBkaWdlc3QgPSBCdWZmZXIuZnJvbShzaGE1MTIuZGlnZXN0KGNvbWJpbmVkQnVmZmVyKSk7XG4gICAgY29uc3QgayA9IEJ1ZmZlci5mcm9tKGVkMjU1MTkuc2NhbGFyUmVkdWNlKGRpZ2VzdCkpO1xuXG4gICAgY29uc3QgZ2FtbWEgPSBCdWZmZXIuZnJvbShlZDI1NTE5LnNjYWxhckFkZChyLCBlZDI1NTE5LnNjYWxhck11bHQoaywgQnVmZmVyLmZyb20oU19pWyd4J10sICdoZXgnKSkpKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBpOiBwbGF5ZXJTaGFyZVsnaSddLFxuICAgICAgeTogcGxheWVyU2hhcmVbJ3knXSxcbiAgICAgIGdhbW1hOiBnYW1tYS50b1N0cmluZygnaGV4JyksXG4gICAgICBSOiBSLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29uc3Qgc2lnbkNvbWJpbmUgPSAoc2hhcmVzOiBHU2hhcmVbXSk6IFNpZ25hdHVyZSA9PiB7XG4gICAgc2hhcmVzID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IGNvbnZlcnRPYmplY3RIZXhUb0J1ZmZlcihzaGFyZSwgWyd5JywgJ2dhbW1hJywgJ1InXSkpO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzaGFyZXMpO1xuICAgIGNvbnN0IHkgPSBzaGFyZXNba2V5c1swXV1bJ3knXTtcbiAgICBjb25zdCBSID0gc2hhcmVzW2tleXNbMF1dWydSJ107XG5cbiAgICBjb25zdCByZXN1bHRTaGFyZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGluZCBpbiBzaGFyZXMpIHtcbiAgICAgIGNvbnN0IFNfaSA9IHNoYXJlc1tpbmRdO1xuICAgICAgcmVzdWx0U2hhcmVzW1NfaVsnaSddXSA9IFNfaVsnZ2FtbWEnXTtcbiAgICB9XG4gICAgbGV0IHNpZ21hOiBCdWZmZXIgPSBzaGFtaXIuY29tYmluZShyZXN1bHRTaGFyZXMpO1xuICAgIHNpZ21hID0gQnVmZmVyLmZyb20oc2lnbWEpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHk6IHkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgUjogUi50b1N0cmluZygnaGV4JyksXG4gICAgICBzaWdtYTogc2lnbWEudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb25zdCB2ZXJpZnkgPSAobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IFNpZ25hdHVyZSk6IEJ1ZmZlciA9PiB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oc2lnbmF0dXJlWyd5J10sICdoZXgnKTtcbiAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShzaWduYXR1cmVbJ1InXSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlWydzaWdtYSddLCAnaGV4JyksXG4gICAgICBtZXNzYWdlLFxuICAgIF0pO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShlZDI1NTE5LnZlcmlmeShwdWJsaWNLZXksIHNpZ25lZE1lc3NhZ2UpKTtcbiAgfTtcblxuICByZXR1cm4geyBrZXlTaGFyZSwga2V5Q29tYmluZSwgc2lnblNoYXJlLCBzaWduLCBzaWduQ29tYmluZSwgdmVyaWZ5IH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGRzYTtcbiJdfQ==
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy90c3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsaUNBQWlEO0FBQ2pELG1DQUF3QztBQUN4QyxvREFBOEI7QUFFOUIsK0JBQTJHO0FBRTNHLFFBQVE7QUFDUixJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsc0VBQXNFLENBQUMsQ0FBQztBQW1GNUY7SUFjRSxlQUFZLE1BQWU7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQVhZLGdCQUFVLEdBQXZCOzs7Ozs2QkFDTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQWxCLHdCQUFrQjt3QkFDcEIscUJBQU0scUJBQVksQ0FBQyxVQUFVLEVBQUUsRUFBQTs7d0JBQS9CLFNBQStCLENBQUM7d0JBQ2hDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzs7Ozs7S0FFNUI7SUFRRCx3QkFBUSxHQUFSLFVBQVMsS0FBYSxFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUFDMUQsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLElBQU0sU0FBUyxHQUFHLG9CQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFNLENBQUMsR0FBRyxtQkFBVSxDQUFDLFFBQVEsQ0FB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LEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIE1QQyB1c2luZyB0aHJlc2hvbGQgc2lnbmF0dXJlIHNjaGVtZSAoVFNTKS4gSXQgY29udGFpbnNcbiAqIGZ1bmN0aW9ucyBmb3Iga2V5IGdlbmVyYXRpb24gYW5kIG1lc3NhZ2Ugc2lnbmluZyB3aXRoIEVkRFNBLlxuICpcbiAqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09XG4gKiBFZERTQSBLZXkgR2VuZXJhdGlvblxuICogPT09PT09PT09PT09PT09PT09PT09PVxuICogMS4gRWFjaCBzaWduZXIgZ2VuZXJhdGVzIHRoZWlyIG93biBrZXkgc2hhcmUsIHdoaWNoIGludm9sdmVzIGEgcHJpdmF0ZSB1LXNoYXJlIGFuZCBhIHB1YmxpYyB5LXNoYXJlLlxuICogMi4gU2lnbmVycyBkaXN0cmlidXRlIHRoZWlyIHktc2hhcmUgdG8gb3RoZXIgc2lnbmVycy5cbiAqIDMuIEFmdGVyIGV4Y2hhbmdpbmcgeS1zaGFyZXMgdGhlIG5leHQgcGhhc2UgaXMgdG8gY29tYmluZSBrZXkgc2hhcmVzLiBFYWNoIHNpZ25lciBjb21iaW5lcyB0aGVpciB1LXNoYXJlXG4gKiAgICB3aXRoIHRoZSB5LXNoYXJlcyByZWNlaXZlZCBmcm9tIG90aGVyIHNpZ25lcnMgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBwLXNoYXJlIGZvciB0aGVtc2VsdmVzLiBXZVxuICogICAgYWxzbyBzYXZlIGotc2hhcmVzIGZvciBvdGhlciBzaWduZXJzLlxuICogNC4gQXQgdGhpcyBwb2ludCB0aGUgcGxheWVycyBkbyBub3QgZGlzdHJpYnV0ZSBhbnkgc2hhcmVzIGFuZCB0aGUgZmlyc3QgcGhhc2Ugb2YgdGhlXG4gKiAgICBzaWduaW5nIHByb3RvY29sIGlzIGNvbXBsZXRlLlxuICpcbiAqID09PT09PT09PT09PT09PT09PT09PT1cbiAqIEVkRFNBIFNpZ25pbmdcbiAqID09PT09PT09PT09PT09PT09PT09PT1cbiAqIDEuIFRoZSBwYXJ0aWVzIGZyb20ga2V5IGdlbmVyYXRpb24gZGVjaWRlIHRoZXkgd2FudCB0byBzaWduIHNvbWV0aGluZy4gVGhleSBiZWdpbiB0aGUgc2lnbmluZyBwcm90b2NvbFxuICogICAgYnkgZ2VuZXJhdGluZyBzaGFyZXMgb2YgYW4gZXBoZW1lcmFsIGtleS5cbiAqXG4gKiAgICBhKSBFYWNoIHNpZ25lciB1c2VzIGhpcyBwLXNoYXJlIGFuZCB0aGUgai1zaGFyZXMgc3RvcmVkIGZvciBvdGhlciBwbGF5ZXJzIHRvIGdlbmVyYXRlIGhpcyBzaWduaW5nIHNoYXJlLlxuICogICAgYikgVGhpcyByZXN1bHRzIGluIGVhY2ggc2lnbmVyIGhhdmluZyBhIHByaXZhdGUgeC1zaGFyZSBhbmQgcHVibGljIHItc2hhcmVzLlxuICpcbiAqIDIuIFNpZ25lcnMgZGlzdHJpYnV0ZSB0aGVpciByLXNoYXJlcyB0byBvdGhlciBzaWduZXJzLlxuICogMy4gQWZ0ZXIgZXhjaGFuZ2luZyByLXNoYXJlcywgZWFjaCBzaWduZXIgc2lnbnMgdGhlaXIgc2hhcmUgb2YgdGhlIGVwaGVtZXJhbCBrZXkgdXNpbmcgdGhlaXIgcHJpdmF0ZVxuICogICAgeC1zaGFyZSB3aXRoIHRoZSByLXNoYXJlcyBmcm9tIG90aGVyIHNpZ25lcnMuXG4gKiA0LiBUaGlzIHJlc3VsdHMgaW4gZWFjaCBzaWduZXIgaGF2aW5nIGEgcHVibGljIGctc2hhcmUgd2hpY2ggdGhleSBzZW5kIHRvIHRoZSBvdGhlciBzaWduZXJzLlxuICogNS4gQWZ0ZXIgdGhlIHNpZ25lcnMgYnJvYWRjYXN0IHRoZWlyIGctc2hhcmVzLCB0aGUgZmluYWwgc2lnbmF0dXJlIGNhbiBiZSByZS1jb25zdHJ1Y3RlZCBpbmRlcGVuZGVudGx5LlxuICovXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzLCBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEVkMjU1MTlDdXJ2ZSB9IGZyb20gJy4vY3VydmVzJztcbmltcG9ydCBTaGFtaXIgZnJvbSAnLi9zaGFtaXInO1xuaW1wb3J0IEhEVHJlZSBmcm9tICcuL2hkVHJlZSc7XG5pbXBvcnQgeyBiaWdJbnRGcm9tQnVmZmVyTEUsIGJpZ0ludFRvQnVmZmVyTEUsIGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSwgY2xhbXAgfSBmcm9tICcuL3V0aWwnO1xuXG4vLyAyXjI1NlxuY29uc3QgYmFzZSA9IEJpZ0ludCgnMHgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnKTtcblxuZXhwb3J0IGludGVyZmFjZSBVU2hhcmUge1xuICBpOiBudW1iZXI7XG4gIHQ6IG51bWJlcjtcbiAgbjogbnVtYmVyO1xuICB5OiBzdHJpbmc7XG4gIHNlZWQ6IHN0cmluZztcbiAgY2hhaW5jb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgWVNoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG4gIHk6IHN0cmluZztcbiAgdTogc3RyaW5nO1xuICBjaGFpbmNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlTaGFyZSB7XG4gIHVTaGFyZTogVVNoYXJlO1xuICB5U2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBZU2hhcmU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgdDogbnVtYmVyO1xuICBuOiBudW1iZXI7XG4gIHk6IHN0cmluZztcbiAgdTogc3RyaW5nO1xuICBwcmVmaXg6IHN0cmluZztcbiAgY2hhaW5jb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSlNoYXJlIHtcbiAgaTogbnVtYmVyO1xuICBqOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBLZXlDb21iaW5lIHtcbiAgcFNoYXJlOiBQU2hhcmU7XG4gIGpTaGFyZXM6IFJlY29yZDxudW1iZXIsIEpTaGFyZT47XG59XG5cbmludGVyZmFjZSBTdWJrZXlTaGFyZSB7XG4gIHBTaGFyZTogUFNoYXJlO1xuICB5U2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBZU2hhcmU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFhTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgeTogc3RyaW5nO1xuICB1OiBzdHJpbmc7XG4gIHI6IHN0cmluZztcbiAgUjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgajogbnVtYmVyO1xuICB1OiBzdHJpbmc7XG4gIHI6IHN0cmluZztcbiAgUjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25TaGFyZSB7XG4gIHhTaGFyZTogWFNoYXJlO1xuICByU2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBSU2hhcmU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdTaGFyZSB7XG4gIGk6IG51bWJlcjtcbiAgeTogc3RyaW5nO1xuICBnYW1tYTogc3RyaW5nO1xuICBSOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTaWduYXR1cmUge1xuICB5OiBzdHJpbmc7XG4gIFI6IHN0cmluZztcbiAgc2lnbWE6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRkc2Ege1xuICBzdGF0aWMgY3VydmU6IEVkMjU1MTlDdXJ2ZSA9IG5ldyBFZDI1NTE5Q3VydmUoKTtcbiAgc3RhdGljIHNoYW1pcjogU2hhbWlyID0gbmV3IFNoYW1pcihFZGRzYS5jdXJ2ZSk7XG4gIHN0YXRpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghRWRkc2EuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGF3YWl0IEVkMjU1MTlDdXJ2ZS5pbml0aWFsaXplKCk7XG4gICAgICBFZGRzYS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGRUcmVlPzogSERUcmVlO1xuXG4gIGNvbnN0cnVjdG9yKGhkVHJlZT86IEhEVHJlZSkge1xuICAgIHRoaXMuaGRUcmVlID0gaGRUcmVlO1xuICB9XG5cbiAga2V5U2hhcmUoaW5kZXg6IG51bWJlciwgdGhyZXNob2xkOiBudW1iZXIsIG51bVNoYXJlczogbnVtYmVyKTogS2V5U2hhcmUge1xuICAgIGFzc2VydChpbmRleCA+IDAgJiYgaW5kZXggPD0gbnVtU2hhcmVzKTtcbiAgICBjb25zdCBzZWVkY2hhaW4gPSByYW5kb21CeXRlcyg2NCk7XG4gICAgY29uc3Qgc2VlZCA9IHNlZWRjaGFpbi5zbGljZSgwLCAzMik7XG4gICAgY29uc3QgY2hhaW5jb2RlID0gc2VlZGNoYWluLnNsaWNlKDMyKTtcbiAgICBjb25zdCBoID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlZWQpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHUgPSBjbGFtcChiaWdJbnRGcm9tQnVmZmVyTEUoaC5zbGljZSgwLCAzMikpKTtcbiAgICBjb25zdCB5ID0gRWRkc2EuY3VydmUuYmFzZVBvaW50TXVsdCh1KTtcbiAgICBjb25zdCBzcGxpdF91ID0gRWRkc2Euc2hhbWlyLnNwbGl0KHUsIHRocmVzaG9sZCwgbnVtU2hhcmVzKTtcblxuICAgIGNvbnN0IFBfaTogVVNoYXJlID0ge1xuICAgICAgaTogaW5kZXgsXG4gICAgICB0OiB0aHJlc2hvbGQsXG4gICAgICBuOiBudW1TaGFyZXMsXG4gICAgICB5OiBiaWdJbnRUb0J1ZmZlckxFKHksIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICBzZWVkOiBzZWVkLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIGNoYWluY29kZTogY2hhaW5jb2RlLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICAgIGNvbnN0IHNoYXJlczogS2V5U2hhcmUgPSB7XG4gICAgICB1U2hhcmU6IFBfaSxcbiAgICAgIHlTaGFyZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGluZCBpbiBzcGxpdF91KSB7XG4gICAgICBjb25zdCBpID0gcGFyc2VJbnQoaW5kLCAxMCk7XG4gICAgICBpZiAoaSA9PT0gaW5kZXgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzaGFyZXMueVNoYXJlc1tpXSA9IHtcbiAgICAgICAgaSxcbiAgICAgICAgajogUF9pLmksXG4gICAgICAgIHk6IGJpZ0ludFRvQnVmZmVyTEUoeSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdTogYmlnSW50VG9CdWZmZXJMRShzcGxpdF91W2luZF0sIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGNoYWluY29kZTogY2hhaW5jb2RlLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzaGFyZXM7XG4gIH1cblxuICBrZXlDb21iaW5lKHVTaGFyZTogVVNoYXJlLCB5U2hhcmVzOiBZU2hhcmVbXSk6IEtleUNvbWJpbmUge1xuICAgIGNvbnN0IGggPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoQnVmZmVyLmZyb20odVNoYXJlLnNlZWQsICdoZXgnKSkuZGlnZXN0KCk7XG4gICAgY29uc3QgdSA9IGNsYW1wKGJpZ0ludEZyb21CdWZmZXJMRShoLnNsaWNlKDAsIDMyKSkpO1xuICAgIGNvbnN0IHlWYWx1ZXMgPSBbdVNoYXJlLCAuLi55U2hhcmVzXS5tYXAoKHNoYXJlKSA9PiBiaWdJbnRGcm9tQnVmZmVyTEUoQnVmZmVyLmZyb20oc2hhcmUueSwgJ2hleCcpKSk7XG4gICAgY29uc3QgeSA9IHlWYWx1ZXMucmVkdWNlKChwYXJ0aWFsLCBzaGFyZSkgPT4gRWRkc2EuY3VydmUucG9pbnRBZGQocGFydGlhbCwgc2hhcmUpKTtcbiAgICBjb25zdCBjaGFpbmNvZGVzID0gW3VTaGFyZSwgLi4ueVNoYXJlc10ubWFwKCh7IGNoYWluY29kZSB9KSA9PiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oY2hhaW5jb2RlLCAnaGV4JykpKTtcbiAgICBjb25zdCBjaGFpbmNvZGUgPSBjaGFpbmNvZGVzLnJlZHVjZSgoYWNjLCBjaGFpbmNvZGUpID0+IChhY2MgKyBjaGFpbmNvZGUpICUgYmFzZSk7XG5cbiAgICBjb25zdCBQX2k6IFBTaGFyZSA9IHtcbiAgICAgIGk6IHVTaGFyZS5pLFxuICAgICAgdDogdVNoYXJlLnQsXG4gICAgICBuOiB1U2hhcmUubixcbiAgICAgIHk6IGJpZ0ludFRvQnVmZmVyTEUoeSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHU6IGJpZ0ludFRvQnVmZmVyTEUodSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHByZWZpeDogaC5zbGljZSgzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgY2hhaW5jb2RlOiBiaWdJbnRUb0J1ZmZlckJFKGNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICAgIGNvbnN0IHBsYXllcnM6IEtleUNvbWJpbmUgPSB7XG4gICAgICBwU2hhcmU6IFBfaSxcbiAgICAgIGpTaGFyZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB5U2hhcmVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgIGNvbnN0IFBfaiA9IHlTaGFyZXNbaW5kXTtcbiAgICAgIHBsYXllcnMualNoYXJlc1tQX2oual0gPSB7XG4gICAgICAgIGk6IFBfai5qLFxuICAgICAgICBqOiBQX2kuaSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBwbGF5ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZXMgYSBjaGlsZCBwdWJsaWMga2V5IGZyb20gY29tbW9uIGtleWNoYWluXG4gICAqXG4gICAqIEBwYXJhbSBjb21tb25LZXljaGFpbiAtIGNvbW1vbiBrZXljaGFpbiBhcyBhIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHBhdGggLSBiaXAzMiBwYXRoXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcHVibGljIGtleSBhcyBhIGhleCBzdHJpbmdcbiAgICovXG4gIGRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Y2hhaW46IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oZFRyZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZGVyaXZlIGtleSB3aXRob3V0IEhEVHJlZSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXljaGFpbiA9IEJ1ZmZlci5mcm9tKGNvbW1vbktleWNoYWluLCAnaGV4Jyk7XG5cbiAgICBjb25zdCBkZXJpdmVkUHVibGljS2V5Y2hhaW4gPSB0aGlzLmhkVHJlZS5wdWJsaWNEZXJpdmUoXG4gICAgICB7XG4gICAgICAgIHBrOiBiaWdJbnRGcm9tQnVmZmVyTEUoa2V5Y2hhaW4uc2xpY2UoMCwgMzIpKSxcbiAgICAgICAgY2hhaW5jb2RlOiBiaWdJbnRGcm9tQnVmZmVyQkUoa2V5Y2hhaW4uc2xpY2UoMzIpKSxcbiAgICAgIH0sXG4gICAgICBwYXRoLFxuICAgICk7XG5cbiAgICByZXR1cm4gYmlnSW50VG9CdWZmZXJMRShkZXJpdmVkUHVibGljS2V5Y2hhaW4ucGssIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICBrZXlEZXJpdmUodVNoYXJlOiBVU2hhcmUsIHlTaGFyZXM6IFlTaGFyZVtdLCBwYXRoOiBzdHJpbmcpOiBTdWJrZXlTaGFyZSB7XG4gICAgaWYgKHRoaXMuaGRUcmVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGRlcml2ZSBrZXkgd2l0aG91dCBIRFRyZWUgaW1wbGVtZW50YXRpb25cIik7XG4gICAgfVxuICAgIGNvbnN0IGggPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoQnVmZmVyLmZyb20odVNoYXJlLnNlZWQsICdoZXgnKSkuZGlnZXN0KCk7XG4gICAgY29uc3QgeVZhbHVlcyA9IFt1U2hhcmUsIC4uLnlTaGFyZXNdLm1hcCgoc2hhcmUpID0+IGJpZ0ludEZyb21CdWZmZXJMRShCdWZmZXIuZnJvbShzaGFyZS55LCAnaGV4JykpKTtcbiAgICBjb25zdCB5ID0geVZhbHVlcy5yZWR1Y2UoKHBhcnRpYWwsIHNoYXJlKSA9PiBFZGRzYS5jdXJ2ZS5wb2ludEFkZChwYXJ0aWFsLCBzaGFyZSkpO1xuICAgIGNvbnN0IHUgPSBjbGFtcChiaWdJbnRGcm9tQnVmZmVyTEUoaC5zbGljZSgwLCAzMikpKTtcbiAgICBjb25zdCBwcmVmaXggPSBiaWdJbnRGcm9tQnVmZmVyQkUoaC5zbGljZSgzMikpO1xuICAgIGxldCBjb250cmliQ2hhaW5jb2RlID0gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKHVTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSk7XG4gICAgY29uc3QgY2hhaW5jb2RlcyA9IFtcbiAgICAgIGNvbnRyaWJDaGFpbmNvZGUsXG4gICAgICAuLi55U2hhcmVzLm1hcCgoeyBjaGFpbmNvZGUgfSkgPT4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGNoYWluY29kZSwgJ2hleCcpKSksXG4gICAgXTtcbiAgICBjb25zdCBjaGFpbmNvZGUgPSBjaGFpbmNvZGVzLnJlZHVjZSgoYWNjLCBjaGFpbmNvZGUpID0+IChhY2MgKyBjaGFpbmNvZGUpICUgYmFzZSk7XG5cbiAgICAvLyBEZXJpdmUgc3Via2V5LlxuICAgIGNvbnN0IHN1YmtleSA9IHRoaXMuaGRUcmVlLnByaXZhdGVEZXJpdmUoeyBwazogeSwgc2s6IHUsIHByZWZpeCwgY2hhaW5jb2RlIH0sIHBhdGgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG5ldyBwdWJsaWMga2V5IGNvbnRyaWJ1dGlvbi5cbiAgICBjb25zdCBjb250cmliWSA9IEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoc3Via2V5LnNrKTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgY2hhaW5jb2RlIGNvbnRyaWJ1dGlvbi5cbiAgICBjb25zdCBjaGFpbmNvZGVEZWx0YSA9IChiYXNlICsgc3Via2V5LmNoYWluY29kZSAtIGNoYWluY29kZSkgJSBiYXNlO1xuICAgIGNvbnRyaWJDaGFpbmNvZGUgPSAoY29udHJpYkNoYWluY29kZSArIGNoYWluY29kZURlbHRhKSAlIGJhc2U7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHUgdmFsdWVzLlxuICAgIGNvbnN0IHNwbGl0X3UgPSBFZGRzYS5zaGFtaXIuc3BsaXQoc3Via2V5LnNrLCB1U2hhcmUudCwgdVNoYXJlLm4pO1xuXG4gICAgY29uc3QgUF9pOiBQU2hhcmUgPSB7XG4gICAgICBpOiB1U2hhcmUuaSxcbiAgICAgIHQ6IHVTaGFyZS50LFxuICAgICAgbjogdVNoYXJlLm4sXG4gICAgICB5OiBiaWdJbnRUb0J1ZmZlckxFKHN1YmtleS5waywgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHU6IGJpZ0ludFRvQnVmZmVyTEUoc3Via2V5LnNrLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJlZml4OiBiaWdJbnRUb0J1ZmZlckJFKHN1YmtleS5wcmVmaXgsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICBjaGFpbmNvZGU6IGJpZ0ludFRvQnVmZmVyQkUoc3Via2V5LmNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hhcmVzOiBTdWJrZXlTaGFyZSA9IHtcbiAgICAgIHBTaGFyZTogUF9pLFxuICAgICAgeVNoYXJlczoge30sXG4gICAgfTtcblxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHlTaGFyZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgY29uc3QgUF9qID0geVNoYXJlc1tpbmRdO1xuICAgICAgc2hhcmVzLnlTaGFyZXNbUF9qLmpdID0ge1xuICAgICAgICBpOiBQX2ouaixcbiAgICAgICAgajogUF9pLmksXG4gICAgICAgIHk6IGJpZ0ludFRvQnVmZmVyTEUoY29udHJpYlksIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHU6IGJpZ0ludFRvQnVmZmVyTEUoc3BsaXRfdVtQX2ouaV0sIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGNoYWluY29kZTogYmlnSW50VG9CdWZmZXJCRShjb250cmliQ2hhaW5jb2RlLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhcmVzO1xuICB9XG5cbiAgc2lnblNoYXJlKG1lc3NhZ2U6IEJ1ZmZlciwgcFNoYXJlOiBQU2hhcmUsIGpTaGFyZXM6IEpTaGFyZVtdKTogU2lnblNoYXJlIHtcbiAgICBjb25zdCBpbmRpY2VzID0gW3BTaGFyZSwgLi4ualNoYXJlc10ubWFwKCh7IGkgfSkgPT4gaSk7XG4gICAgY29uc3Qgc3BsaXRfdSA9IEVkZHNhLnNoYW1pci5zcGxpdChiaWdJbnRGcm9tQnVmZmVyTEUoQnVmZmVyLmZyb20ocFNoYXJlLnUsICdoZXgnKSksIHBTaGFyZS50LCBwU2hhcmUubik7XG5cbiAgICAvLyBHZW5lcmF0ZSBub25jZSBjb250cmlidXRpb24uXG4gICAgY29uc3QgcHJlZml4ID0gQnVmZmVyLmZyb20ocFNoYXJlLnByZWZpeCwgJ2hleCcpO1xuICAgIGNvbnN0IHJhbmRvbUJ1ZmZlciA9IHJhbmRvbUJ5dGVzKDMyKTtcbiAgICBjb25zdCBkaWdlc3QgPSBjcmVhdGVIYXNoKCdzaGE1MTInKVxuICAgICAgLnVwZGF0ZShCdWZmZXIuY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2UsIHJhbmRvbUJ1ZmZlcl0pKVxuICAgICAgLmRpZ2VzdCgpO1xuXG4gICAgY29uc3QgciA9IEVkZHNhLmN1cnZlLnNjYWxhclJlZHVjZShiaWdJbnRGcm9tQnVmZmVyTEUoZGlnZXN0KSk7XG4gICAgY29uc3QgUiA9IEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQocik7XG4gICAgY29uc3Qgc3BsaXRfciA9IEVkZHNhLnNoYW1pci5zcGxpdChyLCBpbmRpY2VzLmxlbmd0aCwgaW5kaWNlcy5sZW5ndGgsIGluZGljZXMpO1xuXG4gICAgY29uc3QgUF9pOiBYU2hhcmUgPSB7XG4gICAgICBpOiBwU2hhcmUuaSxcbiAgICAgIHk6IHBTaGFyZS55LFxuICAgICAgdTogYmlnSW50VG9CdWZmZXJMRShzcGxpdF91W3BTaGFyZS5pXSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHI6IGJpZ0ludFRvQnVmZmVyTEUoc3BsaXRfcltwU2hhcmUuaV0sIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgICBSOiBiaWdJbnRUb0J1ZmZlckxFKFIsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdFNoYXJlczogU2lnblNoYXJlID0ge1xuICAgICAgeFNoYXJlOiBQX2ksXG4gICAgICByU2hhcmVzOiB7fSxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgalNoYXJlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCBTX2ogPSBqU2hhcmVzW2luZF07XG4gICAgICByZXN1bHRTaGFyZXMuclNoYXJlc1tTX2ouaV0gPSB7XG4gICAgICAgIGk6IFNfai5pLFxuICAgICAgICBqOiBwU2hhcmUuaSxcbiAgICAgICAgdTogYmlnSW50VG9CdWZmZXJMRShzcGxpdF91W1Nfai5pXSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgcjogYmlnSW50VG9CdWZmZXJMRShzcGxpdF9yW1Nfai5pXSwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgUjogYmlnSW50VG9CdWZmZXJMRShSLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFNoYXJlcztcbiAgfVxuXG4gIHNpZ24obWVzc2FnZTogQnVmZmVyLCBwbGF5ZXJTaGFyZTogWFNoYXJlLCByU2hhcmVzOiBSU2hhcmVbXSwgeVNoYXJlczogWVNoYXJlW10gPSBbXSk6IEdTaGFyZSB7XG4gICAgY29uc3QgU19pID0gcGxheWVyU2hhcmU7XG5cbiAgICBjb25zdCB1VmFsdWVzID0gW3BsYXllclNoYXJlLCAuLi5yU2hhcmVzLCAuLi55U2hhcmVzXS5tYXAoKHsgdSB9KSA9PiBiaWdJbnRGcm9tQnVmZmVyTEUoQnVmZmVyLmZyb20odSwgJ2hleCcpKSk7XG4gICAgY29uc3QgeCA9IHVWYWx1ZXMucmVkdWNlKChhY2MsIHUpID0+IEVkZHNhLmN1cnZlLnNjYWxhckFkZChhY2MsIHUpKTtcblxuICAgIGNvbnN0IFJWYWx1ZXMgPSBbcGxheWVyU2hhcmUsIC4uLnJTaGFyZXNdLm1hcCgoeyBSIH0pID0+IGJpZ0ludEZyb21CdWZmZXJMRShCdWZmZXIuZnJvbShSLCAnaGV4JykpKTtcbiAgICBjb25zdCBSID0gUlZhbHVlcy5yZWR1Y2UoKHBhcnRpYWwsIHNoYXJlKSA9PiBFZGRzYS5jdXJ2ZS5wb2ludEFkZChwYXJ0aWFsLCBzaGFyZSkpO1xuXG4gICAgY29uc3QgclZhbHVlcyA9IFtwbGF5ZXJTaGFyZSwgLi4uclNoYXJlc10ubWFwKCh7IHIgfSkgPT4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHIsICdoZXgnKSkpO1xuICAgIGNvbnN0IHIgPSByVmFsdWVzLnJlZHVjZSgocGFydGlhbCwgc2hhcmUpID0+IEVkZHNhLmN1cnZlLnNjYWxhckFkZChwYXJ0aWFsLCBzaGFyZSkpO1xuXG4gICAgY29uc3QgY29tYmluZWRCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFtiaWdJbnRUb0J1ZmZlckxFKFIsIDMyKSwgQnVmZmVyLmZyb20oU19pLnksICdoZXgnKSwgbWVzc2FnZV0pO1xuICAgIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShjb21iaW5lZEJ1ZmZlcikuZGlnZXN0KCk7XG4gICAgY29uc3QgayA9IEVkZHNhLmN1cnZlLnNjYWxhclJlZHVjZShiaWdJbnRGcm9tQnVmZmVyTEUoZGlnZXN0KSk7XG5cbiAgICBjb25zdCBnYW1tYSA9IEVkZHNhLmN1cnZlLnNjYWxhckFkZChyLCBFZGRzYS5jdXJ2ZS5zY2FsYXJNdWx0KGssIHgpKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBpOiBwbGF5ZXJTaGFyZS5pLFxuICAgICAgeTogcGxheWVyU2hhcmUueSxcbiAgICAgIGdhbW1hOiBiaWdJbnRUb0J1ZmZlckxFKGdhbW1hLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgUjogYmlnSW50VG9CdWZmZXJMRShSLCAzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNpZ25Db21iaW5lKHNoYXJlczogR1NoYXJlW10pOiBTaWduYXR1cmUge1xuICAgIGNvbnN0IHkgPSBzaGFyZXNbMF0ueTtcbiAgICBjb25zdCBSID0gc2hhcmVzWzBdLlI7XG5cbiAgICBjb25zdCByZXN1bHRTaGFyZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGluZCBpbiBzaGFyZXMpIHtcbiAgICAgIGNvbnN0IFNfaSA9IHNoYXJlc1tpbmRdO1xuICAgICAgcmVzdWx0U2hhcmVzW1NfaS5pXSA9IGJpZ0ludEZyb21CdWZmZXJMRShCdWZmZXIuZnJvbShTX2kuZ2FtbWEsICdoZXgnKSk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ21hOiBiaWdpbnQgPSBFZGRzYS5zaGFtaXIuY29tYmluZShyZXN1bHRTaGFyZXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHksXG4gICAgICBSLFxuICAgICAgc2lnbWE6IGJpZ0ludFRvQnVmZmVyTEUoc2lnbWEsIDMyKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmVyaWZ5KG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBTaWduYXR1cmUpOiBCdWZmZXIge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IGJpZ0ludEZyb21CdWZmZXJMRShCdWZmZXIuZnJvbShzaWduYXR1cmUueSwgJ2hleCcpKTtcbiAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShzaWduYXR1cmUuUiwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlLnNpZ21hLCAnaGV4JyksXG4gICAgICBtZXNzYWdlLFxuICAgIF0pO1xuICAgIHJldHVybiBFZGRzYS5jdXJ2ZS52ZXJpZnkocHVibGljS2V5LCBzaWduZWRNZXNzYWdlKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" />
2
+ export declare function bigIntFromBufferLE(buf: Buffer): bigint;
3
+ export declare function bigIntToBufferLE(n: bigint, bytes?: number): Buffer;
4
+ export declare function bigIntFromBufferBE(buf: Buffer): bigint;
5
+ export declare function bigIntToBufferBE(n: bigint, bytes?: number): Buffer;
6
+ export declare function clamp(u: bigint): bigint;
7
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/mpc/util.ts"],"names":[],"mappings":";AAAA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clamp = exports.bigIntToBufferBE = exports.bigIntFromBufferBE = exports.bigIntToBufferLE = exports.bigIntFromBufferLE = void 0;
4
+ function bigIntFromBufferLE(buf) {
5
+ return BigInt('0x' + Buffer.from(buf).reverse().toString('hex'));
6
+ }
7
+ exports.bigIntFromBufferLE = bigIntFromBufferLE;
8
+ function bigIntToBufferLE(n, bytes) {
9
+ var v = n.toString(16);
10
+ v = '0'.slice(0, v.length % 2) + v;
11
+ var buf = Buffer.from(v, 'hex').reverse();
12
+ if (bytes && buf.length < bytes) {
13
+ return Buffer.concat([buf, Buffer.alloc(bytes - buf.length)]);
14
+ }
15
+ return buf;
16
+ }
17
+ exports.bigIntToBufferLE = bigIntToBufferLE;
18
+ function bigIntFromBufferBE(buf) {
19
+ return BigInt('0x' + buf.toString('hex'));
20
+ }
21
+ exports.bigIntFromBufferBE = bigIntFromBufferBE;
22
+ function bigIntToBufferBE(n, bytes) {
23
+ var v = n.toString(16);
24
+ v = '0'.slice(0, v.length % 2) + v;
25
+ var buf = Buffer.from(v, 'hex');
26
+ if (bytes && buf.length < bytes) {
27
+ return Buffer.concat([Buffer.alloc(bytes - buf.length), buf]);
28
+ }
29
+ return buf;
30
+ }
31
+ exports.bigIntToBufferBE = bigIntToBufferBE;
32
+ function clamp(u) {
33
+ u &= BigInt('0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8');
34
+ u |= BigInt('0x4000000000000000000000000000000000000000000000000000000000000000');
35
+ return u;
36
+ }
37
+ exports.clamp = clamp;
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tcGMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFGRCxnREFFQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLENBQVMsRUFBRSxLQUFjO0lBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLElBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzVDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFO1FBQy9CLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsNENBUUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUZELGdEQUVDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBUyxFQUFFLEtBQWM7SUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUU7UUFDL0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFSRCw0Q0FRQztBQUVELFNBQWdCLEtBQUssQ0FBQyxDQUFTO0lBQzdCLENBQUMsSUFBSSxNQUFNLENBQUMsb0VBQW9FLENBQUMsQ0FBQztJQUNsRixDQUFDLElBQUksTUFBTSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7SUFDbEYsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBSkQsc0JBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gYmlnSW50RnJvbUJ1ZmZlckxFKGJ1ZjogQnVmZmVyKTogYmlnaW50IHtcbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgQnVmZmVyLmZyb20oYnVmKS5yZXZlcnNlKCkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludFRvQnVmZmVyTEUobjogYmlnaW50LCBieXRlcz86IG51bWJlcik6IEJ1ZmZlciB7XG4gIGxldCB2ID0gbi50b1N0cmluZygxNik7XG4gIHYgPSAnMCcuc2xpY2UoMCwgdi5sZW5ndGggJSAyKSArIHY7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHYsICdoZXgnKS5yZXZlcnNlKCk7XG4gIGlmIChieXRlcyAmJiBidWYubGVuZ3RoIDwgYnl0ZXMpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBCdWZmZXIuYWxsb2MoYnl0ZXMgLSBidWYubGVuZ3RoKV0pO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyQkUoYnVmOiBCdWZmZXIpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KCcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludFRvQnVmZmVyQkUobjogYmlnaW50LCBieXRlcz86IG51bWJlcik6IEJ1ZmZlciB7XG4gIGxldCB2ID0gbi50b1N0cmluZygxNik7XG4gIHYgPSAnMCcuc2xpY2UoMCwgdi5sZW5ndGggJSAyKSArIHY7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHYsICdoZXgnKTtcbiAgaWYgKGJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBieXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtCdWZmZXIuYWxsb2MoYnl0ZXMgLSBidWYubGVuZ3RoKSwgYnVmXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHU6IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHUgJj0gQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjgnKTtcbiAgdSB8PSBCaWdJbnQoJzB4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICByZXR1cm4gdTtcbn1cbiJdfQ==