@bitgo/sdk-core 5.2.0 → 6.0.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 (63) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/src/account-lib/mpc/curves/baseCurve.d.ts +1 -1
  3. package/dist/src/account-lib/mpc/curves/baseCurve.d.ts.map +1 -1
  4. package/dist/src/account-lib/mpc/curves/baseCurve.js +1 -1
  5. package/dist/src/account-lib/mpc/curves/ed25519.d.ts +1 -0
  6. package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -1
  7. package/dist/src/account-lib/mpc/curves/ed25519.js +4 -1
  8. package/dist/src/account-lib/mpc/index.d.ts +1 -1
  9. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  10. package/dist/src/account-lib/mpc/index.js +3 -2
  11. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +13 -3
  12. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  13. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +277 -44
  14. package/dist/src/account-lib/mpc/tss/ecdsa/index.d.ts +1 -0
  15. package/dist/src/account-lib/mpc/tss/ecdsa/index.d.ts.map +1 -1
  16. package/dist/src/account-lib/mpc/tss/ecdsa/index.js +3 -2
  17. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +63 -0
  18. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -0
  19. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +279 -0
  20. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +79 -4
  21. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  22. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  23. package/dist/src/account-lib/mpc/tss/index.d.ts +2 -2
  24. package/dist/src/account-lib/mpc/tss/index.d.ts.map +1 -1
  25. package/dist/src/account-lib/mpc/tss/index.js +3 -2
  26. package/dist/src/bitgo/keychain/iKeychains.d.ts +1 -0
  27. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  28. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  29. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  30. package/dist/src/bitgo/keychain/keychains.js +5 -2
  31. package/dist/src/bitgo/tss/common.d.ts +12 -1
  32. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  33. package/dist/src/bitgo/tss/common.js +30 -2
  34. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +5 -5
  35. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  36. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +152 -20
  37. package/dist/src/bitgo/tss/ecdsa/types.d.ts +2 -0
  38. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  39. package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
  40. package/dist/src/bitgo/utils/opengpgUtils.d.ts +8 -2
  41. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  42. package/dist/src/bitgo/utils/opengpgUtils.js +31 -8
  43. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +2 -2
  44. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  45. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +4 -3
  46. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +7 -1
  47. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  48. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  49. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +18 -12
  50. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  51. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +92 -61
  52. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +3 -3
  53. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  54. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  55. package/dist/src/bitgo/wallet/iWallet.d.ts +1 -1
  56. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  57. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  58. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  59. package/dist/src/bitgo/wallet/wallet.js +5 -2
  60. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  61. package/dist/src/bitgo/wallet/wallets.js +7 -1
  62. package/dist/tsconfig.tsbuildinfo +83 -58
  63. package/package.json +5 -4
@@ -97,7 +97,7 @@ async function createUserSignShare(xShare, yShare) {
97
97
  if (yShare.i !== types_2.ShareKeyPosition.USER || yShare.j !== types_2.ShareKeyPosition.BITGO) {
98
98
  throw new Error('Invalid YShare provided for sign');
99
99
  }
100
- return MPC.signShare(xShare, yShare);
100
+ return await MPC.signShare(xShare, yShare);
101
101
  }
102
102
  exports.createUserSignShare = createUserSignShare;
103
103
  /**
@@ -249,11 +249,11 @@ exports.getBitgoToUserLatestShare = getBitgoToUserLatestShare;
249
249
  * @param keyShare - TSS key share of the party preparing exchange materials
250
250
  * @param recipientIndex - index of the recipient (1, 2, or 3)
251
251
  * @param recipientGpgPublicArmor - recipient's public gpg key in armor format
252
- * @param gpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
252
+ * @param senderGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
253
253
  * @param isbs58Encoded - is bs58 encoded or not
254
254
  * @returns encrypted N Share
255
255
  */
256
- async function encryptNShare(keyShare, recipientIndex, recipientGpgPublicArmor, gpgKey, isbs58Encoded = true) {
256
+ async function encryptNShare(keyShare, recipientIndex, recipientGpgPublicArmor, senderGpgKey, isbs58Encoded = true) {
257
257
  const nShare = keyShare.nShares[recipientIndex];
258
258
  if (!nShare) {
259
259
  throw new Error('Invalid recipient');
@@ -283,7 +283,7 @@ async function encryptNShare(keyShare, recipientIndex, recipientGpgPublicArmor,
283
283
  encryptedPrivateShare,
284
284
  n: nShare.n,
285
285
  vssProof: nShare.v,
286
- privateShareProof: await utils_1.createShareProof(gpgKey.privateKey, nShare.u, 'ecdsa'),
286
+ privateShareProof: await utils_1.createShareProof(senderGpgKey.privateKey, nShare.u, 'ecdsa'),
287
287
  };
288
288
  }
289
289
  exports.encryptNShare = encryptNShare;
@@ -314,18 +314,18 @@ exports.buildNShareFromAPIKeyShare = buildNShareFromAPIKeyShare;
314
314
  * @returns N share
315
315
  */
316
316
  async function decryptNShare(encryptedNShare, isbs58Encoded = true) {
317
- const bitgoPrivateKey = await pgp.readKey({ armoredKey: encryptedNShare.recipientPrivateArmor });
318
- const priv = (await pgp.decrypt({
317
+ const recipientPrivateKey = await pgp.readKey({ armoredKey: encryptedNShare.recipientPrivateArmor });
318
+ const prv = (await pgp.decrypt({
319
319
  message: await pgp.readMessage({ armoredMessage: encryptedNShare.nShare.encryptedPrivateShare }),
320
- decryptionKeys: [bitgoPrivateKey],
320
+ decryptionKeys: [recipientPrivateKey],
321
321
  })).data;
322
322
  let u;
323
323
  if (isbs58Encoded) {
324
- const privateShare = bs58_1.default.decode(priv).toString('hex');
324
+ const privateShare = bs58_1.default.decode(prv).toString('hex');
325
325
  u = privateShare.slice(92, 156);
326
326
  }
327
327
  else {
328
- u = priv.slice(0, 64);
328
+ u = prv.slice(0, 64);
329
329
  }
330
330
  const nShare = {
331
331
  i: encryptedNShare.nShare.i,
@@ -355,6 +355,18 @@ function validateSharesLength(shares, expectedLength, shareName) {
355
355
  throw new Error(`Invalid ${shareName} share`);
356
356
  }
357
357
  }
358
+ function validateOptionalValues(shares, start, end, shareName, valueName) {
359
+ let found = false;
360
+ for (let i = start; i < end; i++) {
361
+ if (shares[i]) {
362
+ found = true;
363
+ }
364
+ else if (found) {
365
+ throw new Error(`Inconsistent optional ${valueName} value in ${shareName} share`);
366
+ }
367
+ }
368
+ return found;
369
+ }
358
370
  /**
359
371
  * parses K share from signature share record
360
372
  * @param share - signature share record
@@ -362,12 +374,28 @@ function validateSharesLength(shares, expectedLength, shareName) {
362
374
  */
363
375
  function parseKShare(share) {
364
376
  const shares = share.share.split(exports.delimeter);
365
- validateSharesLength(shares, 2, 'K');
377
+ validateSharesLength(shares, 11, 'K');
378
+ const hasProof = validateOptionalValues(shares, 5, 11, 'K', 'proof');
379
+ let proof;
380
+ if (hasProof) {
381
+ proof = {
382
+ z: shares[5],
383
+ u: shares[6],
384
+ w: shares[7],
385
+ s: shares[8],
386
+ s1: shares[9],
387
+ s2: shares[10],
388
+ };
389
+ }
366
390
  return {
367
391
  i: getParticipantIndex(share.to),
368
392
  j: getParticipantIndex(share.from),
369
393
  k: shares[0],
370
394
  n: shares[1],
395
+ ntilde: shares[2],
396
+ h1: shares[3],
397
+ h2: shares[4],
398
+ proof,
371
399
  };
372
400
  }
373
401
  exports.parseKShare = parseKShare;
@@ -377,10 +405,11 @@ exports.parseKShare = parseKShare;
377
405
  * @returns signature share record
378
406
  */
379
407
  function convertKShare(share) {
408
+ var _a, _b, _c, _d, _e, _f;
380
409
  return {
381
410
  to: getParticipantFromIndex(share.i),
382
411
  from: getParticipantFromIndex(share.j),
383
- share: `${share.k}${exports.delimeter}${share.n}`,
412
+ share: `${share.k}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${((_a = share.proof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.proof) === null || _b === void 0 ? void 0 : _b.u) || ''}${exports.delimeter}${((_c = share.proof) === null || _c === void 0 ? void 0 : _c.w) || ''}${exports.delimeter}${((_d = share.proof) === null || _d === void 0 ? void 0 : _d.s) || ''}${exports.delimeter}${((_e = share.proof) === null || _e === void 0 ? void 0 : _e.s1) || ''}${exports.delimeter}${((_f = share.proof) === null || _f === void 0 ? void 0 : _f.s2) || ''}`,
384
413
  };
385
414
  }
386
415
  exports.convertKShare = convertKShare;
@@ -391,7 +420,55 @@ exports.convertKShare = convertKShare;
391
420
  */
392
421
  function parseAShare(share) {
393
422
  const shares = share.share.split(exports.delimeter);
394
- validateSharesLength(shares, 4, 'A');
423
+ validateSharesLength(shares, 37, 'A');
424
+ const hasProof = validateOptionalValues(shares, 7, 13, 'A', 'proof');
425
+ const hasGammaProof = validateOptionalValues(shares, 13, 25, 'A', 'gammaProof');
426
+ const hasWProof = validateOptionalValues(shares, 25, 37, 'A', 'wProof');
427
+ let proof;
428
+ if (hasProof) {
429
+ proof = {
430
+ z: shares[7],
431
+ u: shares[8],
432
+ w: shares[9],
433
+ s: shares[10],
434
+ s1: shares[11],
435
+ s2: shares[12],
436
+ };
437
+ }
438
+ let gammaProof;
439
+ if (hasGammaProof) {
440
+ gammaProof = {
441
+ z: shares[13],
442
+ zprm: shares[14],
443
+ t: shares[15],
444
+ v: shares[16],
445
+ w: shares[17],
446
+ s: shares[18],
447
+ s1: shares[19],
448
+ s2: shares[20],
449
+ t1: shares[21],
450
+ t2: shares[22],
451
+ u: shares[23],
452
+ x: shares[24],
453
+ };
454
+ }
455
+ let wProof;
456
+ if (hasWProof) {
457
+ wProof = {
458
+ z: shares[25],
459
+ zprm: shares[26],
460
+ t: shares[27],
461
+ v: shares[28],
462
+ w: shares[29],
463
+ s: shares[30],
464
+ s1: shares[31],
465
+ s2: shares[32],
466
+ t1: shares[33],
467
+ t2: shares[34],
468
+ u: shares[35],
469
+ x: shares[36],
470
+ };
471
+ }
395
472
  return {
396
473
  i: getParticipantIndex(share.to),
397
474
  j: getParticipantIndex(share.from),
@@ -399,6 +476,12 @@ function parseAShare(share) {
399
476
  alpha: shares[1],
400
477
  mu: shares[2],
401
478
  n: shares[3],
479
+ ntilde: shares[4],
480
+ h1: shares[5],
481
+ h2: shares[6],
482
+ proof,
483
+ gammaProof,
484
+ wProof,
402
485
  };
403
486
  }
404
487
  exports.parseAShare = parseAShare;
@@ -408,10 +491,11 @@ exports.parseAShare = parseAShare;
408
491
  * @returns signature share record
409
492
  */
410
493
  function convertAShare(share) {
494
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
411
495
  return {
412
496
  to: getParticipantFromIndex(share.i),
413
497
  from: getParticipantFromIndex(share.j),
414
- share: `${share.k}${exports.delimeter}${share.alpha}${exports.delimeter}${share.mu}${exports.delimeter}${share.n}`,
498
+ share: `${share.k}${exports.delimeter}${share.alpha}${exports.delimeter}${share.mu}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${((_a = share.proof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.proof) === null || _b === void 0 ? void 0 : _b.u) || ''}${exports.delimeter}${((_c = share.proof) === null || _c === void 0 ? void 0 : _c.w) || ''}${exports.delimeter}${((_d = share.proof) === null || _d === void 0 ? void 0 : _d.s) || ''}${exports.delimeter}${((_e = share.proof) === null || _e === void 0 ? void 0 : _e.s1) || ''}${exports.delimeter}${((_f = share.proof) === null || _f === void 0 ? void 0 : _f.s2) || ''}${exports.delimeter}${((_g = share.gammaProof) === null || _g === void 0 ? void 0 : _g.z) || ''}${exports.delimeter}${((_h = share.gammaProof) === null || _h === void 0 ? void 0 : _h.zprm) || ''}${exports.delimeter}${((_j = share.gammaProof) === null || _j === void 0 ? void 0 : _j.t) || ''}${exports.delimeter}${((_k = share.gammaProof) === null || _k === void 0 ? void 0 : _k.v) || ''}${exports.delimeter}${((_l = share.gammaProof) === null || _l === void 0 ? void 0 : _l.w) || ''}${exports.delimeter}${((_m = share.gammaProof) === null || _m === void 0 ? void 0 : _m.s) || ''}${exports.delimeter}${((_o = share.gammaProof) === null || _o === void 0 ? void 0 : _o.s1) || ''}${exports.delimeter}${((_p = share.gammaProof) === null || _p === void 0 ? void 0 : _p.s2) || ''}${exports.delimeter}${((_q = share.gammaProof) === null || _q === void 0 ? void 0 : _q.t1) || ''}${exports.delimeter}${((_r = share.gammaProof) === null || _r === void 0 ? void 0 : _r.t2) || ''}${exports.delimeter}${((_s = share.gammaProof) === null || _s === void 0 ? void 0 : _s.u) || ''}${exports.delimeter}${((_t = share.gammaProof) === null || _t === void 0 ? void 0 : _t.x) || ''}${exports.delimeter}${((_u = share.wProof) === null || _u === void 0 ? void 0 : _u.z) || ''}${exports.delimeter}${((_v = share.wProof) === null || _v === void 0 ? void 0 : _v.zprm) || ''}${exports.delimeter}${((_w = share.wProof) === null || _w === void 0 ? void 0 : _w.t) || ''}${exports.delimeter}${((_x = share.wProof) === null || _x === void 0 ? void 0 : _x.v) || ''}${exports.delimeter}${((_y = share.wProof) === null || _y === void 0 ? void 0 : _y.w) || ''}${exports.delimeter}${((_z = share.wProof) === null || _z === void 0 ? void 0 : _z.s) || ''}${exports.delimeter}${((_0 = share.wProof) === null || _0 === void 0 ? void 0 : _0.s1) || ''}${exports.delimeter}${((_1 = share.wProof) === null || _1 === void 0 ? void 0 : _1.s2) || ''}${exports.delimeter}${((_2 = share.wProof) === null || _2 === void 0 ? void 0 : _2.t1) || ''}${exports.delimeter}${((_3 = share.wProof) === null || _3 === void 0 ? void 0 : _3.t2) || ''}${exports.delimeter}${((_4 = share.wProof) === null || _4 === void 0 ? void 0 : _4.u) || ''}${exports.delimeter}${((_5 = share.wProof) === null || _5 === void 0 ? void 0 : _5.x) || ''}`,
415
499
  };
416
500
  }
417
501
  exports.convertAShare = convertAShare;
@@ -422,12 +506,50 @@ exports.convertAShare = convertAShare;
422
506
  */
423
507
  function parseMuShare(share) {
424
508
  const shares = share.share.split(exports.delimeter);
425
- validateSharesLength(shares, 2, 'Mu');
509
+ validateSharesLength(shares, 26, 'Mu');
510
+ const hasGammaProof = validateOptionalValues(shares, 2, 14, 'Mu', 'gammaProof');
511
+ const hasWProof = validateOptionalValues(shares, 14, 26, 'Mu', 'wProof');
512
+ let gammaProof;
513
+ if (hasGammaProof) {
514
+ gammaProof = {
515
+ z: shares[2],
516
+ zprm: shares[3],
517
+ t: shares[4],
518
+ v: shares[5],
519
+ w: shares[6],
520
+ s: shares[7],
521
+ s1: shares[8],
522
+ s2: shares[9],
523
+ t1: shares[10],
524
+ t2: shares[11],
525
+ u: shares[12],
526
+ x: shares[13],
527
+ };
528
+ }
529
+ let wProof;
530
+ if (hasWProof) {
531
+ wProof = {
532
+ z: shares[14],
533
+ zprm: shares[15],
534
+ t: shares[16],
535
+ v: shares[17],
536
+ w: shares[18],
537
+ s: shares[19],
538
+ s1: shares[20],
539
+ s2: shares[21],
540
+ t1: shares[22],
541
+ t2: shares[23],
542
+ u: shares[24],
543
+ x: shares[25],
544
+ };
545
+ }
426
546
  return {
427
547
  i: getParticipantIndex(share.to),
428
548
  j: getParticipantIndex(share.from),
429
549
  alpha: shares[0],
430
550
  mu: shares[1],
551
+ gammaProof,
552
+ wProof,
431
553
  };
432
554
  }
433
555
  exports.parseMuShare = parseMuShare;
@@ -437,10 +559,11 @@ exports.parseMuShare = parseMuShare;
437
559
  * @returns signature share record
438
560
  */
439
561
  function convertMuShare(share) {
562
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
440
563
  return {
441
564
  to: getParticipantFromIndex(share.i),
442
565
  from: getParticipantFromIndex(share.j),
443
- share: `${share.alpha}${exports.delimeter}${share.mu}`,
566
+ share: `${share.alpha}${exports.delimeter}${share.mu}${exports.delimeter}${((_a = share.gammaProof) === null || _a === void 0 ? void 0 : _a.z) || ''}${exports.delimeter}${((_b = share.gammaProof) === null || _b === void 0 ? void 0 : _b.zprm) || ''}${exports.delimeter}${((_c = share.gammaProof) === null || _c === void 0 ? void 0 : _c.t) || ''}${exports.delimeter}${((_d = share.gammaProof) === null || _d === void 0 ? void 0 : _d.v) || ''}${exports.delimeter}${((_e = share.gammaProof) === null || _e === void 0 ? void 0 : _e.w) || ''}${exports.delimeter}${((_f = share.gammaProof) === null || _f === void 0 ? void 0 : _f.s) || ''}${exports.delimeter}${((_g = share.gammaProof) === null || _g === void 0 ? void 0 : _g.s1) || ''}${exports.delimeter}${((_h = share.gammaProof) === null || _h === void 0 ? void 0 : _h.s2) || ''}${exports.delimeter}${((_j = share.gammaProof) === null || _j === void 0 ? void 0 : _j.t1) || ''}${exports.delimeter}${((_k = share.gammaProof) === null || _k === void 0 ? void 0 : _k.t2) || ''}${exports.delimeter}${((_l = share.gammaProof) === null || _l === void 0 ? void 0 : _l.u) || ''}${exports.delimeter}${((_m = share.gammaProof) === null || _m === void 0 ? void 0 : _m.x) || ''}${exports.delimeter}${((_o = share.wProof) === null || _o === void 0 ? void 0 : _o.z) || ''}${exports.delimeter}${((_p = share.wProof) === null || _p === void 0 ? void 0 : _p.zprm) || ''}${exports.delimeter}${((_q = share.wProof) === null || _q === void 0 ? void 0 : _q.t) || ''}${exports.delimeter}${((_r = share.wProof) === null || _r === void 0 ? void 0 : _r.v) || ''}${exports.delimeter}${((_s = share.wProof) === null || _s === void 0 ? void 0 : _s.w) || ''}${exports.delimeter}${((_t = share.wProof) === null || _t === void 0 ? void 0 : _t.s) || ''}${exports.delimeter}${((_u = share.wProof) === null || _u === void 0 ? void 0 : _u.s1) || ''}${exports.delimeter}${((_v = share.wProof) === null || _v === void 0 ? void 0 : _v.s2) || ''}${exports.delimeter}${((_w = share.wProof) === null || _w === void 0 ? void 0 : _w.t1) || ''}${exports.delimeter}${((_x = share.wProof) === null || _x === void 0 ? void 0 : _x.t2) || ''}${exports.delimeter}${((_y = share.wProof) === null || _y === void 0 ? void 0 : _y.u) || ''}${exports.delimeter}${((_z = share.wProof) === null || _z === void 0 ? void 0 : _z.x) || ''}`,
444
567
  };
445
568
  }
446
569
  exports.convertMuShare = convertMuShare;
@@ -563,7 +686,7 @@ function convertBShare(share) {
563
686
  return {
564
687
  to: utils_1.SignatureShareType.BITGO,
565
688
  from: getParticipantFromIndex(share.i),
566
- share: `${share.beta}${exports.delimeter}${share.gamma}${exports.delimeter}${share.k}${exports.delimeter}${share.nu}${exports.delimeter}${share.w}${exports.delimeter}${share.y}${exports.delimeter}${share.l}${exports.delimeter}${share.m}${exports.delimeter}${share.n}`,
689
+ share: `${share.beta}${exports.delimeter}${share.gamma}${exports.delimeter}${share.k}${exports.delimeter}${share.nu}${exports.delimeter}${share.w}${exports.delimeter}${share.y}${exports.delimeter}${share.l}${exports.delimeter}${share.m}${exports.delimeter}${share.n}${exports.delimeter}${share.ntilde}${exports.delimeter}${share.h1}${exports.delimeter}${share.h2}${exports.delimeter}${share.ck}`,
567
690
  };
568
691
  }
569
692
  exports.convertBShare = convertBShare;
@@ -574,7 +697,7 @@ exports.convertBShare = convertBShare;
574
697
  */
575
698
  function parseBShare(share) {
576
699
  const shares = share.share.split(exports.delimeter);
577
- validateSharesLength(shares, 9, 'B');
700
+ validateSharesLength(shares, 13, 'B');
578
701
  return {
579
702
  i: getParticipantIndex(share.to),
580
703
  beta: shares[0],
@@ -586,6 +709,10 @@ function parseBShare(share) {
586
709
  l: shares[6],
587
710
  m: shares[7],
588
711
  n: shares[8],
712
+ ntilde: shares[9],
713
+ h1: shares[10],
714
+ h2: shares[11],
715
+ ck: shares[12],
589
716
  };
590
717
  }
591
718
  exports.parseBShare = parseBShare;
@@ -662,8 +789,13 @@ exports.getParticipantFromIndex = getParticipantFromIndex;
662
789
  */
663
790
  async function verifyWalletSignature(params) {
664
791
  const rawNotations = await common_1.commonVerifyWalletSignature(params);
665
- const publicShareRawNotationIndex = 2 + params.verifierIndex;
666
- assert_1.default(params.publicShare === Buffer.from(rawNotations[publicShareRawNotationIndex].value).toString(), 'bitgo share mismatch');
792
+ const publicUValueRawNotationIndex = 2 + params.verifierIndex;
793
+ // Derive public form of u-value
794
+ const publicUValue = utxo_lib_1.ecc.pointFromScalar(Buffer.from(params.decryptedShare.slice(0, 64), 'hex'), true);
795
+ assert_1.default(publicUValue !== null, 'null public u-value');
796
+ // Verify that the u value + chaincode is equal to the proof retrieved from the raw notations
797
+ assert_1.default(Buffer.from(publicUValue).toString('hex') + params.decryptedShare.slice(64) ===
798
+ Buffer.from(rawNotations[publicUValueRawNotationIndex].value).toString(), 'bitgo share mismatch');
667
799
  }
668
800
  exports.verifyWalletSignature = verifyWalletSignature;
669
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBdUQ7QUFDdkQsbUNBdUJpQjtBQUNqQix5Q0FBd0c7QUFDeEcsb0NBQTRDO0FBRzVDLHNDQUEwRjtBQUMxRixvREFBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLDhDQUF3QztBQUN4Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBR3hCLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLFFBQVEsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDaEMsS0FBSyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FB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UUFBUSxXQUFXLEVBQUU7UUFDbkIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxDQUFDLENBQUM7UUFDWCxLQUFLLFFBQVE7WUFDWCxPQUFPLENBQUMsQ0FBQztRQUNYLEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxDQUFDO1FBQ1g7WUFDRSxNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBQ3JDO0FBQ0gsQ0FBQztBQVhELGtEQVdDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQWE7SUFDbkQsUUFBUSxLQUFLLEVBQUU7UUFDYixLQUFLLENBQUM7WUFDSixPQUFPLDBCQUFrQixDQUFDLElBQUksQ0FBQztRQUNqQyxLQUFLLENBQUM7WUFDSixPQUFPLDBCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNuQyxLQUFLLENBQUM7WUFDSixPQUFPLDBCQUFrQixDQUFDLEtBQUssQ0FBQztRQUNsQztZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDO0FBWEQsMERBV0M7QUFFRDs7O0dBR0c7QUFDSSxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFRM0M7SUFDQyxNQUFNLFlBQVksR0FBRyxNQUFNLG9DQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFFN0QsZ0JBQU0sQ0FDSixNQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQzlGLHNCQUFzQixDQUN2QixDQUFDO0FBQ0osQ0FBQztBQWhCRCxzREFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY2RzYSB9IGZyb20gJy4vLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQge1xuICBEZWNyeXB0YWJsZU5TaGFyZSxcbiAgQ29tYmluZWRLZXksXG4gIFNpZ25pbmdNYXRlcmlhbCxcbiAgRW5jcnlwdGVkTlNoYXJlLFxuICBBU2hhcmUsXG4gIENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVCxcbiAgQ3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQsXG4gIERTaGFyZSxcbiAgR1NoYXJlLFxuICBLZXlTaGFyZSxcbiAgTlNoYXJlLFxuICBPU2hhcmUsXG4gIFNlbmRTaGFyZVR5cGUsXG4gIFNpZ25hdHVyZVNoYXJlLFxuICBTaWduU2hhcmUsXG4gIFdTaGFyZSxcbiAgWFNoYXJlLFxuICBZU2hhcmUsXG4gIFNlbmRTaGFyZVRvQml0Z29SVCxcbiAgUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIEJTaGFyZSxcbiAgU2lnbmF0dXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUsIFJlcXVlc3RUeXBlLCBjcmVhdGVTaGFyZVByb29mIH0gZnJvbSAnLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFyZUtleVBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtTaGFyZSwgTVVTaGFyZSwgU1NoYXJlIH0gZnJvbSAnLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgeyBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUsIGdldFR4UmVxdWVzdCwgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCBjcmVhdGVLZWNjYWtIYXNoIGZyb20gJ2tlY2Nhayc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyBwZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IEFwaUtleVNoYXJlIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuXG5jb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcblxuLyoqXG4gKiBDb21iaW5lcyBOU2hhcmVzIHRvIGNvbWJpbmUgdGhlIGZpbmFsIFRTUyBrZXlcbiAqIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFVzZXIgb3IgQmFja3VwIGtleSBzaW5jZSBpdCByZXF1aXJlcyB0aGUgY29tbW9uIGtleWNoYWluIGZyb20gQml0R28gZmlyc3RcbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlXG4gKiBAcGFyYW0gZW5jcnlwdGVkTlNoYXJlcyAtIGVuY3J5cHRlZCBOU2hhcmVzIHdpdGggaW5mb3JtYXRpb24gb24gaG93IHRvIGRlY3J5cHRcbiAqIEBwYXJhbSBjb21tb25LZXljaGFpbiAtIGV4cGVjdGVkIGNvbW1vbiBrZXljaGFpbiBvZiB0aGUgY29tYmluZWQga2V5XG4gKiBAcmV0dXJucyB7Q29tYmluZWRLZXl9IGNvbWJpbmVkIFRTUyBrZXlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbWJpbmVkS2V5KFxuICBrZXlTaGFyZTogS2V5U2hhcmUsXG4gIGVuY3J5cHRlZE5TaGFyZXM6IERlY3J5cHRhYmxlTlNoYXJlW10sXG4gIGNvbW1vbktleWNoYWluOiBzdHJpbmdcbik6IFByb21pc2U8Q29tYmluZWRLZXk+IHtcbiAgY29uc3QgblNoYXJlczogTlNoYXJlW10gPSBbXTtcblxuICBsZXQgYml0Z29OU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcbiAgbGV0IHVzZXJOU2hhcmU6IE5TaGFyZSB8IHVuZGVmaW5lZDtcbiAgbGV0IGJhY2t1cE5TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgZW5jcnlwdGVkTlNoYXJlIG9mIGVuY3J5cHRlZE5TaGFyZXMpIHtcbiAgICBjb25zdCBuU2hhcmUgPSBhd2FpdCBkZWNyeXB0TlNoYXJlKGVuY3J5cHRlZE5TaGFyZSwgZW5jcnlwdGVkTlNoYXJlLmlzYnM1OEVuY29kZWQpO1xuXG4gICAgc3dpdGNoIChlbmNyeXB0ZWROU2hhcmUublNoYXJlLmopIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdXNlck5TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGJhY2t1cE5TaGFyZSA9IG5TaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGJpdGdvTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOU2hhcmUgaW5kZXgnKTtcbiAgICB9XG5cbiAgICBuU2hhcmVzLnB1c2goblNoYXJlKTtcbiAgfVxuXG4gIGlmICghYml0Z29OU2hhcmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gTiBTaGFyZScpO1xuICB9XG5cbiAgY29uc3QgY29tYmluZWRLZXkgPSBNUEMua2V5Q29tYmluZShrZXlTaGFyZS5wU2hhcmUsIG5TaGFyZXMpO1xuICBpZiAoY29tYmluZWRLZXkueFNoYXJlLnkgKyBjb21iaW5lZEtleS54U2hhcmUuY2hhaW5jb2RlICE9PSBjb21tb25LZXljaGFpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25pbmdNYXRlcmlhbDogU2lnbmluZ01hdGVyaWFsID0ge1xuICAgIHBTaGFyZToga2V5U2hhcmUucFNoYXJlLFxuICAgIGJpdGdvTlNoYXJlLFxuICAgIGJhY2t1cE5TaGFyZSxcbiAgICB1c2VyTlNoYXJlLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2lnbmluZ01hdGVyaWFsLFxuICAgIGNvbW1vbktleWNoYWluLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFNpZ25TaGFyZSB3aXRoIFVzZXIgWFNoYXJlIGFuZCBZU2hhcmUgQ29ycmVzcG9uZGluZyB0byBCaXRHb1xuICogQHBhcmFtIHtYU2hhcmV9IHhTaGFyZSBVc2VyIHNlY3JldCB4U2hhcmVcbiAqIEBwYXJhbSB7WVNoYXJlfSB5U2hhcmUgWVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25TaGFyZT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnblNoYXJlKHhTaGFyZTogWFNoYXJlLCB5U2hhcmU6IFlTaGFyZSk6IFByb21pc2U8U2lnblNoYXJlPiB7XG4gIGlmICh4U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFhTaGFyZSwgWFNoYXJlIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoeVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCB5U2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBZU2hhcmUgcHJvdmlkZWQgZm9yIHNpZ24nKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25TaGFyZSh4U2hhcmUsIHlTaGFyZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgR2FtbWEgU2hhcmUgYW5kIE11U2hhcmUgd2l0aCBVc2VyIFdTaGFyZSBhbmQgQVNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7V1NoYXJlfSB3U2hhcmUgVXNlciBXU2hhcmVcbiAqIEBwYXJhbSB7QVNoYXJlfSBhU2hhcmUgQVNoYXJlIGZyb20gQml0Z29cbiAqIEByZXR1cm5zIHtQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKHdTaGFyZTogV1NoYXJlLCBhU2hhcmU6IEFTaGFyZSk6IFByb21pc2U8Q3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZVJUPiB7XG4gIGlmICh3U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICBpZiAoYVNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBhU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBBU2hhcmUsIGlzIG5vdCBmcm9tIEJpdGdvIHRvIFVzZXInKTtcbiAgfVxuXG4gIHJldHVybiBNUEMuc2lnbkNvbnZlcnQoeyB3U2hhcmUsIGFTaGFyZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBPbWljcm9uIFNoYXJlIGFuZCBEZWx0YSBzaGFyZSB3aXRoIHVzZXIgR1NoYXJlXG4gKiBAcGFyYW0ge0dTaGFyZX0gZ1NoYXJlIFVzZXIgR1NoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmUoZ1NoYXJlOiBHU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZVJUPiB7XG4gIGlmIChnU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEdTaGFyZSwgZG9lc24ndCBiZWxvbmcgdG8gdGhlIFVzZXJgKTtcbiAgfVxuICByZXR1cm4gTVBDLnNpZ25Db21iaW5lKHtcbiAgICBnU2hhcmU6IGdTaGFyZSxcbiAgICBzaWduSW5kZXg6IHtcbiAgICAgIGk6IFNoYXJlS2V5UG9zaXRpb24uQklUR08sXG4gICAgICBqOiBnU2hhcmUuaSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBTaWduYXR1cmUgU2hhcmUgd2l0aCBVc2VyIE9TaGFyZSBhbmQgRFNoYXJlIEZyb20gQml0R29cbiAqIEBwYXJhbSB7T1NoYXJlfSBvU2hhcmUgVXNlciBPU2hhcmVcbiAqIEBwYXJhbSB7RFNoYXJlfSBkU2hhcmUgRFNoYXJlIGZyb20gYml0Z29cbiAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlIG1lc3NhZ2UgdG8gcGVyZm9ybSBzaWduXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxjcmVhdGVVc2VyU2lnblNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICBvU2hhcmU6IE9TaGFyZSxcbiAgZFNoYXJlOiBEU2hhcmUsXG4gIG1lc3NhZ2U6IEJ1ZmZlclxuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZT4ge1xuICBpZiAob1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBPU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cblxuICBpZiAoZFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB8fCBkU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEU2hhcmUsIGRvZXNuJ3Qgc2VlbSB0byBiZSBmcm9tIEJpdEdvYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduKG1lc3NhZ2UsIG9TaGFyZSwgZFNoYXJlLCBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSk7XG59XG5cbmV4cG9ydCB0eXBlIE11RFNoYXJlID0geyBtdVNoYXJlOiBNVVNoYXJlOyBkU2hhcmU6IERTaGFyZTsgaTogU2hhcmVLZXlQb3NpdGlvbiB9O1xuXG4vKipcbiAqIFNlbmRzIFNoYXJlIFRvIEJpdGdvXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVkIChlaXRoZXIgdHggb3IgbWVzc2FnZSBmb3Igc2lnbmluZylcbiAqIEBwYXJhbSBzaGFyZVR5cGVcbiAqIEBwYXJhbSBzaGFyZVxuICogQHBhcmFtIHNpZ25lclNoYXJlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD59IC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTaGFyZVRvQml0Z28oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgc2hhcmVUeXBlOiBTZW5kU2hhcmVUeXBlLFxuICBzaGFyZTogU1NoYXJlIHwgTXVEU2hhcmUgfCBLU2hhcmUsXG4gIHNpZ25lclNoYXJlPzogc3RyaW5nXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBpZiAoc2hhcmVUeXBlICE9PSBTZW5kU2hhcmVUeXBlLlNTaGFyZSAmJiBzaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlLCBpcyBub3QgZnJvbSBVc2VyIHRvIEJpdGdvJyk7XG4gIH1cbiAgbGV0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZDtcbiAgbGV0IHJlc3BvbnNlRnJvbUJpdGdvOiBTZW5kU2hhcmVUb0JpdGdvUlQ7XG5cbiAgc3dpdGNoIChzaGFyZVR5cGUpIHtcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuS1NoYXJlOlxuICAgICAgYXNzZXJ0KHNpZ25lclNoYXJlLCBgc2lnbmVyIHNoYXJlIG11c3QgYmUgcHJlc2VudGApO1xuICAgICAgY29uc3Qga1NoYXJlID0gc2hhcmUgYXMgS1NoYXJlO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSBjb252ZXJ0S1NoYXJlKGtTaGFyZSk7XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUsIHJlcXVlc3RUeXBlLCBzaWduZXJTaGFyZSwgJ2VjZHNhJyk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IGF3YWl0IGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIFJlY2VpdmVkU2hhcmVUeXBlLkFTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuTVVTaGFyZTpcbiAgICAgIGNvbnN0IHNoYXJlVG9TZW5kID0gc2hhcmUgYXMgTXVEU2hhcmU7XG4gICAgICBjb25zdCBtdVNoYXJlUmVjb3JkID0gY29udmVydE11U2hhcmUoc2hhcmVUb1NlbmQubXVTaGFyZSk7XG4gICAgICBjb25zdCBkU2hhcmVSZWNvcmQgPSBjb252ZXJ0RFNoYXJlKHNoYXJlVG9TZW5kLmRTaGFyZSk7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IHtcbiAgICAgICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICAgICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmVUb1NlbmQuZFNoYXJlLmopLFxuICAgICAgICBzaGFyZTogYCR7bXVTaGFyZVJlY29yZC5zaGFyZX0ke3NlY29uZGFyeURlbGltZXRlcn0ke2RTaGFyZVJlY29yZC5zaGFyZX1gLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHNlbmRTaWduYXR1cmVTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBzaWduYXR1cmVTaGFyZSwgcmVxdWVzdFR5cGUsIHNpZ25lclNoYXJlLCAnZWNkc2EnKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gYXdhaXQgZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgICAgICAgYml0Z28sXG4gICAgICAgIHdhbGxldElkLFxuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlLFxuICAgICAgICByZXF1ZXN0VHlwZVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VuZFNoYXJlVHlwZS5TU2hhcmU6XG4gICAgICBjb25zdCBzU2hhcmUgPSBzaGFyZSBhcyBTU2hhcmU7XG4gICAgICBzaWduYXR1cmVTaGFyZSA9IGNvbnZlcnRTaWduYXR1cmVTaGFyZShzU2hhcmUsIDEsIDMpO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCByZXF1ZXN0VHlwZSwgc2lnbmVyU2hhcmUsICdlY2RzYScpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBzU2hhcmU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNoYXJlIGdpdmVuIHRvIHNlbmQnKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZUZyb21CaXRnbztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXRlc3QgdXNlcidzIHNoYXJlIGZyb20gYml0Z28gbmVlZGVkIHRvIGNvbnRpbnVlIHNpZ25pbmcgZmxvd1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1JlY2VpdmVkU2hhcmVUeXBlfSBzaGFyZVR5cGUgLSB0aGUgZXhjcGVjdGVkIHNoYXJlIHR5cGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD59IC0gc2hhcmUgZnJvbSBiaXRnbyB0byB1c2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaGFyZVR5cGU6IFJlY2VpdmVkU2hhcmVUeXBlLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGVcbik6IFByb21pc2U8U2VuZFNoYXJlVG9CaXRnb1JUPiB7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCk7XG4gIGxldCB1c2VyU2hhcmVzO1xuICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS50eDpcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zLCAndHJhbnNhY3Rpb25zIHJlcXVpcmVkIGFzIHBhcnQgb2YgdHhSZXF1ZXN0Jyk7XG4gICAgICB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlcXVlc3RUeXBlLm1lc3NhZ2U6XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0Lm1lc3NhZ2VzLCAnbWVzc2FnZXMgcmVxdWlyZWQgYXMgcGFydCBvZiB0eFJlcXVlc3QnKTtcbiAgICAgIHVzZXJTaGFyZXMgPSB0eFJlcXVlc3QubWVzc2FnZXNbMF0uc2lnbmF0dXJlU2hhcmVzO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKCF1c2VyU2hhcmVzIHx8ICF1c2VyU2hhcmVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBzaGFyZSBpcyBub3QgcHJlc2VudCcpO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVSZWNvcmQgPSB1c2VyU2hhcmVzW3VzZXJTaGFyZXMubGVuZ3RoIC0gMV07XG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlQVNoYXJlKHNoYXJlUmVjb3JkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuRFNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZURTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLlNpZ25hdHVyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VTaWduYXR1cmVTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNoYXJlIHJlY2VpdmVkJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBPdXRwdXQgaXMgaW4gYSBmb3JtYXQgdGhhdCBpcyB1c2FibGUgd2l0aGluIEJpdEdvJ3MgZWNvc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEBwYXJhbSByZWNpcGllbnRJbmRleCAtIGluZGV4IG9mIHRoZSByZWNpcGllbnQgKDEsIDIsIG9yIDMpXG4gKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgLSByZWNpcGllbnQncyBwdWJsaWMgZ3BnIGtleSBpbiBhcm1vciBmb3JtYXRcbiAqIEBwYXJhbSBncGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHVzZXIgYW5kIHNlcnZlclxuICogQHBhcmFtIGlzYnM1OEVuY29kZWQgLSBpcyBiczU4IGVuY29kZWQgb3Igbm90XG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdE5TaGFyZShcbiAga2V5U2hhcmU6IEtleVNoYXJlLFxuICByZWNpcGllbnRJbmRleDogbnVtYmVyLFxuICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICBncGdLZXk6IHBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICBpc2JzNThFbmNvZGVkID0gdHJ1ZVxuKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgY29uc3QgblNoYXJlID0ga2V5U2hhcmUublNoYXJlc1tyZWNpcGllbnRJbmRleF07XG4gIGlmICghblNoYXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY2lwaWVudCcpO1xuICB9XG5cbiAgY29uc3QgcHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS5wU2hhcmUueSwgJ2hleCcpLFxuICAgIEJ1ZmZlci5mcm9tKGtleVNoYXJlLnBTaGFyZS5jaGFpbmNvZGUsICdoZXgnKSxcbiAgXSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gIGxldCBwcml2YXRlU2hhcmU7XG4gIGlmIChpc2JzNThFbmNvZGVkKSB7XG4gICAgcHJpdmF0ZVNoYXJlID0gYmlwMzIuZnJvbVByaXZhdGVLZXkoQnVmZmVyLmZyb20oblNoYXJlLnUsICdoZXgnKSwgQnVmZmVyLmZyb20oblNoYXJlLmNoYWluY29kZSwgJ2hleCcpKS50b0Jhc2U1OCgpO1xuICB9IGVsc2Uge1xuICAgIHByaXZhdGVTaGFyZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKG5TaGFyZS51LCAnaGV4JyksIEJ1ZmZlci5mcm9tKG5TaGFyZS5jaGFpbmNvZGUsICdoZXgnKV0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuICBjb25zdCByZWNpcGllbnRQdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIH0pO1xuXG4gIGNvbnN0IGVuY3J5cHRlZFByaXZhdGVTaGFyZSA9IChhd2FpdCBwZ3AuZW5jcnlwdCh7XG4gICAgbWVzc2FnZTogYXdhaXQgcGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgdGV4dDogcHJpdmF0ZVNoYXJlLFxuICAgIH0pLFxuICAgIGVuY3J5cHRpb25LZXlzOiBbcmVjaXBpZW50UHVibGljS2V5XSxcbiAgfSkpIGFzIHN0cmluZztcblxuICByZXR1cm4ge1xuICAgIGk6IG5TaGFyZS5pLFxuICAgIGo6IG5TaGFyZS5qLFxuICAgIHB1YmxpY1NoYXJlLFxuICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICBuOiBuU2hhcmUubixcbiAgICB2c3NQcm9vZjogblNoYXJlLnYsXG4gICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGF3YWl0IGNyZWF0ZVNoYXJlUHJvb2YoZ3BnS2V5LnByaXZhdGVLZXksIG5TaGFyZS51LCAnZWNkc2EnKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhIE5TaGFyZSB0byBiZSBleGNoYW5nZWQgd2l0aCBvdGhlciBrZXkgaG9sZGVycy5cbiAqIEFuIEFQSSBrZXkgc2hhcmUgcmVjZWl2ZWQgZnJvbSBhIHRoaXJkIHBhcnR5IHNob3VsZCBhbHJlYWR5IGJlIGVuY3J5cHRlZFxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmUgb2YgdGhlIHBhcnR5IHByZXBhcmluZyBleGNoYW5nZSBtYXRlcmlhbHNcbiAqIEByZXR1cm5zIGVuY3J5cHRlZCBOIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE5TaGFyZUZyb21BUElLZXlTaGFyZShrZXlTaGFyZTogQXBpS2V5U2hhcmUpOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoa2V5U2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoa2V5U2hhcmUuZnJvbSksXG4gICAgcHVibGljU2hhcmU6IGtleVNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZToga2V5U2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgIG46IGtleVNoYXJlLm4gPz8gJycsIC8vIHRoaXMgaXMgbm90IGN1cnJlbnRseSBuZWVkZWQgZm9yIGtleSBjcmVhdGlvblxuICAgIC8vIFRPRE8gKEJHLTY1NDM0KSA6IG1ha2UgaXQgYXMgbWFuZGF0b3J5XG4gICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGtleVNoYXJlLnByaXZhdGVTaGFyZVByb29mID8/ICcnLFxuICAgIHZzc1Byb29mOiBrZXlTaGFyZS52c3NQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0cyBlbmNyeXB0ZWQgbiBzaGFyZVxuICogQHBhcmFtIGVuY3J5cHRlZE5TaGFyZSAtIGRlY3J5cHRhYmxlIG4gc2hhcmUgd2l0aCByZWNpcGllbnQgcHJpdmF0ZSBncGcga2V5IGFybW9yIGFuZCBzZW5kZXIgcHVibGljIGdwZyBrZXlcbiAqIEByZXR1cm5zIE4gc2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlOiBEZWNyeXB0YWJsZU5TaGFyZSwgaXNiczU4RW5jb2RlZCA9IHRydWUpOiBQcm9taXNlPE5TaGFyZT4ge1xuICBjb25zdCBiaXRnb1ByaXZhdGVLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGVuY3J5cHRlZE5TaGFyZS5yZWNpcGllbnRQcml2YXRlQXJtb3IgfSk7XG4gIGNvbnN0IHByaXYgPSAoXG4gICAgYXdhaXQgcGdwLmRlY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgcGdwLnJlYWRNZXNzYWdlKHsgYXJtb3JlZE1lc3NhZ2U6IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlIH0pLFxuICAgICAgZGVjcnlwdGlvbktleXM6IFtiaXRnb1ByaXZhdGVLZXkgYXMgcGdwLlByaXZhdGVLZXldLFxuICAgIH0pXG4gICkuZGF0YSBhcyBzdHJpbmc7XG5cbiAgbGV0IHU6IHN0cmluZztcbiAgaWYgKGlzYnM1OEVuY29kZWQpIHtcbiAgICBjb25zdCBwcml2YXRlU2hhcmUgPSBiczU4LmRlY29kZShwcml2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgdSA9IHByaXZhdGVTaGFyZS5zbGljZSg5MiwgMTU2KTtcbiAgfSBlbHNlIHtcbiAgICB1ID0gcHJpdi5zbGljZSgwLCA2NCk7XG4gIH1cblxuICBjb25zdCBuU2hhcmU6IE5TaGFyZSA9IHtcbiAgICBpOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmksXG4gICAgajogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qLFxuICAgIG46IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUubixcbiAgICB5OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDAsIDY2KSxcbiAgICB1OiB1LFxuICAgIGNoYWluY29kZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSg2NiwgMTMwKSxcbiAgICB2OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnZzc1Byb29mLFxuICB9O1xuXG4gIHJldHVybiBuU2hhcmU7XG59XG5cbi8qKlxuICogR2V0cyBwdWJsaWMga2V5IGZyb20gY29tbW9uIGtleSBjaGFpblxuICogQHBhcmFtIGNvbW1vbktleUNoYWluIC0gY29tbW9uIGtleSBjaGFpbiBvZiBlY2RzYSB0c3NcbiAqIEByZXR1cm5zIHB1YmxpYyBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0tleShjb21tb25LZXlDaGFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbW1vbktleUNoYWluLnNsaWNlKDAsIDY2KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGltZXRlciA9ICc6JztcbmV4cG9ydCBjb25zdCBzZWNvbmRhcnlEZWxpbWV0ZXIgPSAnLSc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlczogc3RyaW5nW10sIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXIsIHNoYXJlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChzaGFyZXMubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtzaGFyZU5hbWV9IHNoYXJlYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBwYXJzZXMgSyBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEsgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlS1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEtTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG5cbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnSycpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZXNbMF0sXG4gICAgbjogc2hhcmVzWzFdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgSyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBLIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S1NoYXJlKHNoYXJlOiBLU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUubn1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBBIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgQSBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogQVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCA0LCAnQScpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBrOiBzaGFyZXNbMF0sXG4gICAgYWxwaGE6IHNoYXJlc1sxXSxcbiAgICBtdTogc2hhcmVzWzJdLFxuICAgIG46IHNoYXJlc1szXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEEgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFTaGFyZShzaGFyZTogQVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLmFscGhhfSR7ZGVsaW1ldGVyfSR7c2hhcmUubXV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE11IHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTXUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBNVVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnTXUnKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgYWxwaGE6IHNoYXJlc1swXSxcbiAgICBtdTogc2hhcmVzWzFdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgTXUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gTXUgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNdVNoYXJlKHNoYXJlOiBNVVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogRFNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnRCcpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBkZWx0YTogc2hhcmVzWzBdLFxuICAgIEdhbW1hOiBzaGFyZXNbMV0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEQgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREU2hhcmUoc2hhcmU6IERTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuR2FtbWF9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgUyBhbmQgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIFMgYW5kIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU0RTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiB7IHNTaGFyZTogU2lnbmF0dXJlU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0ge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChzZWNvbmRhcnlEZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdTRCcpO1xuXG4gIHJldHVybiB7XG4gICAgc1NoYXJlOiBwYXJzZVNpZ25hdHVyZVNoYXJlKHsgdG86IHNoYXJlLnRvLCBmcm9tOiBzaGFyZS5mcm9tLCBzaGFyZTogc2hhcmVzWzBdIH0pLFxuICAgIGRTaGFyZTogcGFyc2VEU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMV0gfSksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBTIGFuZCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIFMgYW5kIEQgc2hhcmUgaW4gYSBvYmplY3RcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTRFNoYXJlKHNoYXJlOiB7IHNTaGFyZTogU1NoYXJlOyBkU2hhcmU6IERTaGFyZSB9KTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuZFNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5zU2hhcmUuUn0ke2RlbGltZXRlcn0ke3NoYXJlLnNTaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc1NoYXJlLnl9JHtzZWNvbmRhcnlEZWxpbWV0ZXJ9JHtzaGFyZS5kU2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5kU2hhcmUuR2FtbWF9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgc2lnbmF0dXJlIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IFNpZ25hdHVyZVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzLCAnU2lnbmF0dXJlJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBSOiBzaGFyZXNbMF0sXG4gICAgczogc2hhcmVzWzFdLFxuICAgIHk6IHNoYXJlc1syXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXRzIGNvbWJpbmVkIHNpZ25hdHVyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2lnbmF0dXJlIC0gY29tYmluZWQgc2lnbmF0dXJlIHNoYXJlXG4gKiBAcGFyYW0gdXNlckluZGV4IC0gdXNlciBpbmRleCwgZWl0aGVyIDEgKHVzZXIpIG9yIDIgKGJhY2t1cClcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDb21iaW5lZFNpZ25hdHVyZShzaWduYXR1cmU6IFNpZ25hdHVyZSwgdXNlckluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleCh1c2VySW5kZXgpLFxuICAgIHNoYXJlOiBgJHtzaWduYXR1cmUucmVjaWR9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUucn0ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS5zfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnl9YCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29tYmluZWRTaWduYXR1cmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogU2lnbmF0dXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzLCAnU2lnbmF0dXJlJyk7XG5cbiAgcmV0dXJuIHtcbiAgICByZWNpZDogTnVtYmVyKHNoYXJlc1swXSksXG4gICAgcjogc2hhcmVzWzFdLFxuICAgIHM6IHNoYXJlc1syXSxcbiAgICB5OiBzaGFyZXNbM10sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBzaWduYXR1cmUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gU2lnbmF0dXJlIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U2lnbmF0dXJlU2hhcmUoXG4gIHNoYXJlOiBTaWduYXR1cmVTaGFyZSxcbiAgc2VuZGVySW5kZXg6IG51bWJlcixcbiAgcmVjaXBpZW50SW5kZXg6IG51bWJlclxuKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChyZWNpcGllbnRJbmRleCksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2VuZGVySW5kZXgpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5SfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc30ke2RlbGltZXRlcn0ke3NoYXJlLnl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBCIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEIgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRCU2hhcmUoc2hhcmU6IEJTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5iZXRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUubnV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53fSR7ZGVsaW1ldGVyfSR7c2hhcmUueX0ke2RlbGltZXRlcn0ke3NoYXJlLmx9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tfSR7ZGVsaW1ldGVyfSR7c2hhcmUubn1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBCIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIEIgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBCIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBCU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDksICdCJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBiZXRhOiBzaGFyZXNbMF0sXG4gICAgZ2FtbWE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgbnU6IHNoYXJlc1szXSxcbiAgICB3OiBzaGFyZXNbNF0sXG4gICAgeTogc2hhcmVzWzVdLFxuICAgIGw6IHNoYXJlc1s2XSxcbiAgICBtOiBzaGFyZXNbN10sXG4gICAgbjogc2hhcmVzWzhdLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIE8gc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIE8gc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPU2hhcmUoc2hhcmU6IE9TaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5HYW1tYX0ke2RlbGltZXRlcn0ke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLm9taWNyb259JHtkZWxpbWV0ZXJ9JHtzaGFyZS55fWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE8gc2hhcmUgZnJvbSBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgTyBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE8gU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IE9TaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgNSwgJ08nKTtcblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIEdhbW1hOiBzaGFyZXNbMF0sXG4gICAgZGVsdGE6IHNoYXJlc1sxXSxcbiAgICBrOiBzaGFyZXNbMl0sXG4gICAgb21pY3Jvbjogc2hhcmVzWzNdLFxuICAgIHk6IHNoYXJlc1s0XSxcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIHBhcnRpY2lwYW50IGluZGV4XG4gKiBAcGFyYW0gcGFydGljaXBhbnQgLSBwYXJ0aWNpcGFudHMgKHVzZXIsIGJhY2t1cCwgb3IgYml0Z28pXG4gKiBAcmV0dXJucyBpbmRleCAoMSwgMiwgMHIgMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50SW5kZXgocGFydGljaXBhbnQ6ICd1c2VyJyB8ICdiYWNrdXAnIHwgJ2JpdGdvJyk6IG51bWJlciB7XG4gIHN3aXRjaCAocGFydGljaXBhbnQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2JhY2t1cCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdiaXRnbyc6XG4gICAgICByZXR1cm4gMztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoJ1Vua293biBwYXJ0aWNpcGFudCcpO1xuICB9XG59XG5cbi8qKlxuICogZ2V0cyBwYXJ0aWNpcGFudCBuYW1lIGJ5IGluZGV4XG4gKiBAcGFyYW0gaW5kZXggcGFydGljaXBhbnQgaW5kZXhcbiAqIEByZXR1cm5zIHBhcnRpY2lwYW50IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnRpY2lwYW50RnJvbUluZGV4KGluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVR5cGUge1xuICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR087XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXJ0aWNpcGFudCBpbmRleCAke2luZGV4fWApO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSB1LXZhbHVlIHdhbGxldCBzaWduYXR1cmVzIGZvciB0aGUgYml0Z28tdXNlciBhbmQgYml0Z28tYmFja3VwIHNoYXJlcy5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVdhbGxldFNpZ25hdHVyZShwYXJhbXM6IHtcbiAgd2FsbGV0U2lnbmF0dXJlOiBwZ3AuS2V5O1xuICBiaXRnb1B1YjogcGdwLktleTtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbiAgdXNlcktleUlkOiBzdHJpbmc7XG4gIGJhY2t1cEtleUlkOiBzdHJpbmc7XG4gIHB1YmxpY1NoYXJlOiBzdHJpbmc7XG4gIHZlcmlmaWVySW5kZXg6IDEgfCAyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByYXdOb3RhdGlvbnMgPSBhd2FpdCBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUocGFyYW1zKTtcbiAgY29uc3QgcHVibGljU2hhcmVSYXdOb3RhdGlvbkluZGV4ID0gMiArIHBhcmFtcy52ZXJpZmllckluZGV4O1xuXG4gIGFzc2VydChcbiAgICBwYXJhbXMucHVibGljU2hhcmUgPT09IEJ1ZmZlci5mcm9tKHJhd05vdGF0aW9uc1twdWJsaWNTaGFyZVJhd05vdGF0aW9uSW5kZXhdLnZhbHVlKS50b1N0cmluZygpLFxuICAgICdiaXRnbyBzaGFyZSBtaXNtYXRjaCdcbiAgKTtcbn1cbiJdfQ==
801
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBdUQ7QUFDdkQsbUNBeUJpQjtBQUNqQix5Q0FBd0c7QUFDeEcsb0NBQTRDO0FBRzVDLHNDQUEwRjtBQUMxRixvREFBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLDhDQUE2QztBQUM3Qyw2Q0FBK0I7QUFDL0IsZ0RBQXdCO0FBR3hCLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBSyxFQUFFLENBQUM7QUFFeEI7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFFBQWtCLEVBQ2xCLGdCQUFxQyxFQUNyQyxjQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksVUFBOEIsQ0FBQztJQUNuQyxJQUFJLFlBQWdDLENBQUM7SUFFckMsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLFFBQVEsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDaEMsS0FBSyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3BCLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0QjtJQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxFQUFFO1FBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztLQUNsRDtJQUVELE1BQU0sZUFBZSxHQUFvQjtRQUN2QyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDdkIsV0FBVztRQUNYLFlBQVk7UUFDWixVQUFVO0tBQ1gsQ0FBQztJQUVGLE9BQU87UUFDTCxlQUFlO1FBQ2YsY0FBYztLQUNmLENBQUM7QUFDSixDQUFDO0FBbkRELDhDQW1EQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxNQUFpQyxFQUNqQyxNQUFpQztJQUVqQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsSUFBSSxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztLQUN0RTtJQUVELElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyx3QkFBZ0IsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyx3QkFBZ0IsQ0FBQyxLQUFLLEVBQUU7UUFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsT0FBTyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFaRCxrREFZQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUFDLE1BQWMsRUFBRSxNQUFjO0lBQzVFLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyx3QkFBZ0IsQ0FBQyxJQUFJLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLEtBQUssRUFBRTtRQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7S0FDOUQ7SUFFRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBVEQsOERBU0M7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLDhCQUE4QixDQUFDLE1BQWM7SUFDakUsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLElBQUksRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDckIsTUFBTSxFQUFFLE1BQU07UUFDZCxTQUFTLEVBQUU7WUFDVCxDQUFDLEVBQUUsd0JBQWdCLENBQUMsS0FBSztZQUN6QixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDWjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFYRCx3RUFXQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsTUFBYyxFQUNkLE1BQWMsRUFDZCxPQUFlO0lBRWYsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLHdCQUFnQixDQUFDLElBQUksRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsS0FBSyxFQUFFO1FBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztLQUNsRTtJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFiRCw0REFhQztBQUlEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEtBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFdBQW1CLEVBQ25CLFdBQXdCLEVBQ3hCLFNBQXdCLEVBQ3hCLEtBQWlDLEVBQ2pDLFdBQW9CO0lBRXBCLElBQUksU0FBUyxLQUFLLHFCQUFhLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssd0JBQWdCLENBQUMsS0FBSyxFQUFFO1FBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztLQUM3RDtJQUNELElBQUksY0FBb0MsQ0FBQztJQUN6QyxJQUFJLGlCQUFxQyxDQUFDO0lBRTFDLFFBQVEsU0FBUyxFQUFFO1FBQ2pCLEtBQUsscUJBQWEsQ0FBQyxNQUFNO1lBQ3ZCLGdCQUFNLENBQUMsV0FBVyxFQUFFLDhCQUE4QixDQUFDLENBQUM7WUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBZSxDQUFDO1lBQy9CLGNBQWMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsTUFBTSwyQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRyxpQkFBaUIsR0FBRyxNQUFNLHlCQUF5QixDQUNqRCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCx5QkFBaUIsQ0FBQyxNQUFNLEVBQ3hCLFdBQVcsQ0FDWixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUsscUJBQWEsQ0FBQyxPQUFPO1lBQ3hCLE1BQU0sV0FBVyxHQUFHLEtBQWlCLENBQUM7WUFDdEMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELGNBQWMsR0FBRztnQkFDZixFQUFFLEVBQUUsMEJBQWtCLENBQUMsS0FBSztnQkFDNUIsSUFBSSxFQUFFLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxHQUFHLDBCQUFrQixHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUU7YUFDMUUsQ0FBQztZQUNGLE1BQU0sMkJBQWtCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDMUcsaUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FDakQsS0FBSyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gseUJBQWlCLENBQUMsTUFBTSxFQUN4QixXQUFXLENBQ1osQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHFCQUFhLENBQUMsTUFBTTtZQUN2QixNQUFNLE1BQU0sR0FBRyxLQUFlLENBQUM7WUFDL0IsY0FBYyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSwyQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7WUFDM0IsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBMURELDRDQTBEQztBQUVEOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUseUJBQXlCLENBQzdDLEtBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFdBQW1CLEVBQ25CLFNBQTRCLEVBQzVCLFdBQXdCO0lBRXhCLElBQUksaUJBQXFDLENBQUM7SUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxxQkFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkUsSUFBSSxVQUFVLENBQUM7SUFDZixRQUFRLFdBQVcsRUFBRTtRQUNuQixLQUFLLG1CQUFXLENBQUMsRUFBRTtZQUNqQixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsNENBQTRDLENBQUMsQ0FBQztZQUM3RSxVQUFVLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDdkQsTUFBTTtRQUNSLEtBQUssbUJBQVcsQ0FBQyxPQUFPO1lBQ3RCLGdCQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO1lBQ3JFLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUNuRCxNQUFNO0tBQ1Q7SUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDOUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLFNBQVMsRUFBRTtRQUNqQixLQUFLLHlCQUFpQixDQUFDLE1BQU07WUFDM0IsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLE1BQU07UUFDUixLQUFLLHlCQUFpQixDQUFDLE1BQU07WUFDM0IsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLE1BQU07UUFDUixLQUFLLHlCQUFpQixDQUFDLFNBQVM7WUFDOUIsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckQsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBeENELDhEQXdDQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxRQUFrQixFQUNsQixjQUFzQixFQUN0Qix1QkFBK0IsRUFDL0IsWUFBMkMsRUFDM0MsYUFBYSxHQUFHLElBQUk7SUFFcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RDO0lBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztLQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5CLElBQUksWUFBWSxDQUFDO0lBQ2pCLElBQUksYUFBYSxFQUFFO1FBQ2pCLFlBQVksR0FBRyxnQkFBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDcEg7U0FBTTtRQUNMLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3BIO0lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO0lBRXRGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDL0MsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUMvQixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDO1FBQ0YsY0FBYyxFQUFFLENBQUMsa0JBQWtCLENBQUM7S0FDckMsQ0FBQyxDQUFXLENBQUM7SUFFZCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ1gsV0FBVztRQUNYLHFCQUFxQjtRQUNyQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDWCxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEIsaUJBQWlCLEVBQUUsTUFBTSx3QkFBZ0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0tBQ3RGLENBQUM7QUFDSixDQUFDO0FBekNELHNDQXlDQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxRQUFxQjs7SUFDcEUsT0FBTztRQUNMLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3JDLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztRQUNqQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsWUFBWTtRQUM1QyxDQUFDLEVBQUUsTUFBQSxRQUFRLENBQUMsQ0FBQyxtQ0FBSSxFQUFFO1FBQ25CLHlDQUF5QztRQUN6QyxpQkFBaUIsRUFBRSxNQUFBLFFBQVEsQ0FBQyxpQkFBaUIsbUNBQUksRUFBRTtRQUNuRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7S0FDNUIsQ0FBQztBQUNKLENBQUM7QUFYRCxnRUFXQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUFDLGVBQWtDLEVBQUUsYUFBYSxHQUFHLElBQUk7SUFDMUYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNyRyxNQUFNLEdBQUcsR0FBRyxDQUNWLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNoQixPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRyxjQUFjLEVBQUUsQ0FBQyxtQkFBcUMsQ0FBQztLQUN4RCxDQUFDLENBQ0gsQ0FBQyxJQUFjLENBQUM7SUFFakIsSUFBSSxDQUFTLENBQUM7SUFDZCxJQUFJLGFBQWEsRUFBRTtRQUNqQixNQUFNLFlBQVksR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakM7U0FBTTtRQUNMLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN0QjtJQUVELE1BQU0sTUFBTSxHQUFXO1FBQ3JCLENBQUMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxDQUFDLEVBQUUsQ0FBQztRQUNKLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztRQUM1RCxDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRO0tBQ25DLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBNUJELHNDQTRCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixZQUFZLENBQUMsY0FBc0I7SUFDakQsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRkQsb0NBRUM7QUFFWSxRQUFBLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFFdEMsU0FBUyxvQkFBb0IsQ0FBQyxNQUFnQixFQUFFLGNBQXNCLEVBQUUsU0FBaUI7SUFDdkYsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLGNBQWMsRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsU0FBUyxRQUFRLENBQUMsQ0FBQztLQUMvQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE1BQWdCLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBRSxTQUFpQixFQUFFLFNBQWlCO0lBQ2hILElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNkO2FBQU0sSUFBSSxLQUFLLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsU0FBUyxhQUFhLFNBQVMsUUFBUSxDQUFDLENBQUM7U0FDbkY7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsS0FBMkI7SUFDckQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQVMsQ0FBQyxDQUFDO0lBRTVDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJFLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxRQUFRLEVBQUU7UUFDWixLQUFLLEdBQUc7WUFDTixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDZixDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixLQUFLO0tBQ04sQ0FBQztBQUNKLENBQUM7QUE1QkQsa0NBNEJDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUFhOztJQUN6QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUNuRyxLQUFLLENBQUMsRUFDUixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNoRixDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQ3BCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEVBQUU7S0FDOUcsQ0FBQztBQUNKLENBQUM7QUFWRCxzQ0FVQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsS0FBMkI7SUFDckQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQVMsQ0FBQyxDQUFDO0lBQzVDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sYUFBYSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRixNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFeEUsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFFBQVEsRUFBRTtRQUNaLEtBQUssR0FBRztZQUNOLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUNmLENBQUM7S0FDSDtJQUVELElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxhQUFhLEVBQUU7UUFDakIsVUFBVSxHQUFHO1lBQ1gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUNkLENBQUM7S0FDSDtJQUVELElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxTQUFTLEVBQUU7UUFDYixNQUFNLEdBQUc7WUFDUCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsT0FBTztRQUNMLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2xDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixLQUFLO1FBQ0wsVUFBVTtRQUNWLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQXJFRCxrQ0FxRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQWE7O0lBQ3pDLE9BQU87UUFDTCxFQUFFLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxpQkFBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGlCQUFTLEdBQ2xHLEtBQUssQ0FBQyxNQUNSLEdBQUcsaUJBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzNGLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFDcEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDaEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUN0RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsSUFBSSxLQUFJLEVBQzVCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzFGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDM0YsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUMxQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLEVBQUUsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUM1RixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQ3pCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3RGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxJQUFJLEtBQUksRUFDeEIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDbEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUNyQixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNuRixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLEVBQ3RCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQ3BGLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFDckIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxFQUFFO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBNUJELHNDQTRCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBMkI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQVMsQ0FBQyxDQUFDO0lBQzVDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV6RSxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksYUFBYSxFQUFFO1FBQ2pCLFVBQVUsR0FBRztZQUNYLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztTQUNkLENBQUM7S0FDSDtJQUVELElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxTQUFTLEVBQUU7UUFDYixNQUFNLEdBQUc7WUFDUCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ2QsQ0FBQztLQUNIO0lBRUQsT0FBTztRQUNMLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2IsVUFBVTtRQUNWLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQWxERCxvQ0FrREM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLEtBQWM7O0lBQzNDLE9BQU87UUFDTCxFQUFFLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLGlCQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzlGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxJQUFJLEtBQUksRUFDNUIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDMUYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUN6QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxVQUFVLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUMzRixDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQzFCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLFVBQVUsMENBQUUsRUFBRSxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQzVGLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFDekIsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsVUFBVSwwQ0FBRSxDQUFDLEtBQUksRUFBRSxHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FDdEYsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLElBQUksS0FBSSxFQUN4QixHQUFHLGlCQUFTLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxNQUFNLDBDQUFFLENBQUMsS0FBSSxFQUFFLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUNsRixDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQ3JCLEdBQUcsaUJBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsQ0FBQyxLQUFJLEVBQUUsR0FBRyxpQkFBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsTUFBTSwwQ0FBRSxFQUFFLEtBQUksRUFBRSxHQUFHLGlCQUFT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Q0osQ0FBQztBQXJCRCxzREFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFY2RzYSB9IGZyb20gJy4vLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQge1xuICBEZWNyeXB0YWJsZU5TaGFyZSxcbiAgQ29tYmluZWRLZXksXG4gIFNpZ25pbmdNYXRlcmlhbCxcbiAgRW5jcnlwdGVkTlNoYXJlLFxuICBBU2hhcmUsXG4gIENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVCxcbiAgQ3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQsXG4gIERTaGFyZSxcbiAgR1NoYXJlLFxuICBLZXlTaGFyZSxcbiAgTlNoYXJlLFxuICBPU2hhcmUsXG4gIFNlbmRTaGFyZVR5cGUsXG4gIFNpZ25hdHVyZVNoYXJlLFxuICBTaWduU2hhcmUsXG4gIFdTaGFyZSxcbiAgWFNoYXJlLFxuICBYU2hhcmVXaXRoTlRpbGRlLFxuICBZU2hhcmUsXG4gIFlTaGFyZVdpdGhOVGlsZGUsXG4gIFNlbmRTaGFyZVRvQml0Z29SVCxcbiAgUmVjZWl2ZWRTaGFyZVR5cGUsXG4gIEJTaGFyZSxcbiAgU2lnbmF0dXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUsIFJlcXVlc3RUeXBlLCBjcmVhdGVTaGFyZVByb29mIH0gZnJvbSAnLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFyZUtleVBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtTaGFyZSwgTVVTaGFyZSwgU1NoYXJlIH0gZnJvbSAnLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgeyBjb21tb25WZXJpZnlXYWxsZXRTaWduYXR1cmUsIGdldFR4UmVxdWVzdCwgc2VuZFNpZ25hdHVyZVNoYXJlIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCBjcmVhdGVLZWNjYWtIYXNoIGZyb20gJ2tlY2Nhayc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBiaXAzMiwgZWNjIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgQXBpS2V5U2hhcmUgfSBmcm9tICcuLi8uLi9rZXljaGFpbic7XG5cbmNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuXG4vKipcbiAqIENvbWJpbmVzIE5TaGFyZXMgdG8gY29tYmluZSB0aGUgZmluYWwgVFNTIGtleVxuICogVGhpcyBjYW4gb25seSBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgVXNlciBvciBCYWNrdXAga2V5IHNpbmNlIGl0IHJlcXVpcmVzIHRoZSBjb21tb24ga2V5Y2hhaW4gZnJvbSBCaXRHbyBmaXJzdFxuICpcbiAqIEBwYXJhbSBrZXlTaGFyZSAtIFRTUyBrZXkgc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmVzIC0gZW5jcnlwdGVkIE5TaGFyZXMgd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGVjcnlwdFxuICogQHBhcmFtIGNvbW1vbktleWNoYWluIC0gZXhwZWN0ZWQgY29tbW9uIGtleWNoYWluIG9mIHRoZSBjb21iaW5lZCBrZXlcbiAqIEByZXR1cm5zIHtDb21iaW5lZEtleX0gY29tYmluZWQgVFNTIGtleVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tYmluZWRLZXkoXG4gIGtleVNoYXJlOiBLZXlTaGFyZSxcbiAgZW5jcnlwdGVkTlNoYXJlczogRGVjcnlwdGFibGVOU2hhcmVbXSxcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZ1xuKTogUHJvbWlzZTxDb21iaW5lZEtleT4ge1xuICBjb25zdCBuU2hhcmVzOiBOU2hhcmVbXSA9IFtdO1xuXG4gIGxldCBiaXRnb05TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuICBsZXQgdXNlck5TaGFyZTogTlNoYXJlIHwgdW5kZWZpbmVkO1xuICBsZXQgYmFja3VwTlNoYXJlOiBOU2hhcmUgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBlbmNyeXB0ZWROU2hhcmUgb2YgZW5jcnlwdGVkTlNoYXJlcykge1xuICAgIGNvbnN0IG5TaGFyZSA9IGF3YWl0IGRlY3J5cHROU2hhcmUoZW5jcnlwdGVkTlNoYXJlLCBlbmNyeXB0ZWROU2hhcmUuaXNiczU4RW5jb2RlZCk7XG5cbiAgICBzd2l0Y2ggKGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUuaikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB1c2VyTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgYmFja3VwTlNoYXJlID0gblNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgYml0Z29OU2hhcmUgPSBuU2hhcmU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIE5TaGFyZSBpbmRleCcpO1xuICAgIH1cblxuICAgIG5TaGFyZXMucHVzaChuU2hhcmUpO1xuICB9XG5cbiAgaWYgKCFiaXRnb05TaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBOIFNoYXJlJyk7XG4gIH1cblxuICBjb25zdCBjb21iaW5lZEtleSA9IE1QQy5rZXlDb21iaW5lKGtleVNoYXJlLnBTaGFyZSwgblNoYXJlcyk7XG4gIGlmIChjb21iaW5lZEtleS54U2hhcmUueSArIGNvbWJpbmVkS2V5LnhTaGFyZS5jaGFpbmNvZGUgIT09IGNvbW1vbktleWNoYWluKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcpO1xuICB9XG5cbiAgY29uc3Qgc2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgcFNoYXJlOiBrZXlTaGFyZS5wU2hhcmUsXG4gICAgYml0Z29OU2hhcmUsXG4gICAgYmFja3VwTlNoYXJlLFxuICAgIHVzZXJOU2hhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduaW5nTWF0ZXJpYWwsXG4gICAgY29tbW9uS2V5Y2hhaW4sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU2lnblNoYXJlIHdpdGggVXNlciBYU2hhcmUgYW5kIFlTaGFyZSBDb3JyZXNwb25kaW5nIHRvIEJpdEdvXG4gKiBAcGFyYW0ge1hTaGFyZX0geFNoYXJlIFVzZXIgc2VjcmV0IHhTaGFyZVxuICogQHBhcmFtIHtZU2hhcmV9IHlTaGFyZSBZU2hhcmUgZnJvbSBCaXRnb1xuICogQHJldHVybnMge1Byb21pc2U8U2lnblNoYXJlPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJTaWduU2hhcmUoXG4gIHhTaGFyZTogWFNoYXJlIHwgWFNoYXJlV2l0aE5UaWxkZSxcbiAgeVNoYXJlOiBZU2hhcmUgfCBZU2hhcmVXaXRoTlRpbGRlXG4pOiBQcm9taXNlPFNpZ25TaGFyZT4ge1xuICBpZiAoeFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBYU2hhcmUsIFhTaGFyZSBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKHlTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgeVNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgWVNoYXJlIHByb3ZpZGVkIGZvciBzaWduJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IE1QQy5zaWduU2hhcmUoeFNoYXJlLCB5U2hhcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIEdhbW1hIFNoYXJlIGFuZCBNdVNoYXJlIHdpdGggVXNlciBXU2hhcmUgYW5kIEFTaGFyZSBGcm9tIEJpdEdvXG4gKiBAcGFyYW0ge1dTaGFyZX0gd1NoYXJlIFVzZXIgV1NoYXJlXG4gKiBAcGFyYW0ge0FTaGFyZX0gYVNoYXJlIEFTaGFyZSBmcm9tIEJpdGdvXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZSh3U2hhcmU6IFdTaGFyZSwgYVNoYXJlOiBBU2hhcmUpOiBQcm9taXNlPENyZWF0ZVVzZXJHYW1tYUFuZE11U2hhcmVSVD4ge1xuICBpZiAod1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBXU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cbiAgaWYgKGFTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgYVNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQVNoYXJlLCBpcyBub3QgZnJvbSBCaXRnbyB0byBVc2VyJyk7XG4gIH1cblxuICByZXR1cm4gTVBDLnNpZ25Db252ZXJ0KHsgd1NoYXJlLCBhU2hhcmUgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgT21pY3JvbiBTaGFyZSBhbmQgRGVsdGEgc2hhcmUgd2l0aCB1c2VyIEdTaGFyZVxuICogQHBhcmFtIHtHU2hhcmV9IGdTaGFyZSBVc2VyIEdTaGFyZVxuICogQHJldHVybnMge1Byb21pc2U8Q3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlUlQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlck9taWNyb25BbmREZWx0YVNoYXJlKGdTaGFyZTogR1NoYXJlKTogUHJvbWlzZTxDcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmVSVD4ge1xuICBpZiAoZ1NoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBHU2hhcmUsIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBVc2VyYCk7XG4gIH1cbiAgcmV0dXJuIE1QQy5zaWduQ29tYmluZSh7XG4gICAgZ1NoYXJlOiBnU2hhcmUsXG4gICAgc2lnbkluZGV4OiB7XG4gICAgICBpOiBTaGFyZUtleVBvc2l0aW9uLkJJVEdPLFxuICAgICAgajogZ1NoYXJlLmksXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgU2lnbmF0dXJlIFNoYXJlIHdpdGggVXNlciBPU2hhcmUgYW5kIERTaGFyZSBGcm9tIEJpdEdvXG4gKiBAcGFyYW0ge09TaGFyZX0gb1NoYXJlIFVzZXIgT1NoYXJlXG4gKiBAcGFyYW0ge0RTaGFyZX0gZFNoYXJlIERTaGFyZSBmcm9tIGJpdGdvXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZSBtZXNzYWdlIHRvIHBlcmZvcm0gc2lnblxuICogQHJldHVybnMge1Byb21pc2U8Y3JlYXRlVXNlclNpZ25TaGFyZVJUPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgb1NoYXJlOiBPU2hhcmUsXG4gIGRTaGFyZTogRFNoYXJlLFxuICBtZXNzYWdlOiBCdWZmZXJcbik6IFByb21pc2U8U2lnbmF0dXJlU2hhcmU+IHtcbiAgaWYgKG9TaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgT1NoYXJlLCBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVXNlcmApO1xuICB9XG5cbiAgaWYgKGRTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIgfHwgZFNoYXJlLmogIT09IFNoYXJlS2V5UG9zaXRpb24uQklUR08pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRFNoYXJlLCBkb2Vzbid0IHNlZW0gdG8gYmUgZnJvbSBCaXRHb2ApO1xuICB9XG4gIHJldHVybiBNUEMuc2lnbihtZXNzYWdlLCBvU2hhcmUsIGRTaGFyZSwgY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykpO1xufVxuXG5leHBvcnQgdHlwZSBNdURTaGFyZSA9IHsgbXVTaGFyZTogTVVTaGFyZTsgZFNoYXJlOiBEU2hhcmU7IGk6IFNoYXJlS2V5UG9zaXRpb24gfTtcblxuLyoqXG4gKiBTZW5kcyBTaGFyZSBUbyBCaXRnb1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkICAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0gcmVxdWVzdFR5cGUgLSB0aGUgdHlwZSBvZiByZXF1ZXN0IGJlaW5nIHN1Ym1pdHRlZCAoZWl0aGVyIHR4IG9yIG1lc3NhZ2UgZm9yIHNpZ25pbmcpXG4gKiBAcGFyYW0gc2hhcmVUeXBlXG4gKiBAcGFyYW0gc2hhcmVcbiAqIEBwYXJhbSBzaWduZXJTaGFyZVxuICogQHJldHVybnMge1Byb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+fSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kU2hhcmVUb0JpdGdvKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gIHNoYXJlVHlwZTogU2VuZFNoYXJlVHlwZSxcbiAgc2hhcmU6IFNTaGFyZSB8IE11RFNoYXJlIHwgS1NoYXJlLFxuICBzaWduZXJTaGFyZT86IHN0cmluZ1xuKTogUHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+IHtcbiAgaWYgKHNoYXJlVHlwZSAhPT0gU2VuZFNoYXJlVHlwZS5TU2hhcmUgJiYgc2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CSVRHTykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSwgaXMgbm90IGZyb20gVXNlciB0byBCaXRnbycpO1xuICB9XG4gIGxldCBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gIGxldCByZXNwb25zZUZyb21CaXRnbzogU2VuZFNoYXJlVG9CaXRnb1JUO1xuXG4gIHN3aXRjaCAoc2hhcmVUeXBlKSB7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLktTaGFyZTpcbiAgICAgIGFzc2VydChzaWduZXJTaGFyZSwgYHNpZ25lciBzaGFyZSBtdXN0IGJlIHByZXNlbnRgKTtcbiAgICAgIGNvbnN0IGtTaGFyZSA9IHNoYXJlIGFzIEtTaGFyZTtcbiAgICAgIHNpZ25hdHVyZVNoYXJlID0gY29udmVydEtTaGFyZShrU2hhcmUpO1xuICAgICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCByZXF1ZXN0VHlwZSwgc2lnbmVyU2hhcmUsICdlY2RzYScpO1xuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBhd2FpdCBnZXRCaXRnb1RvVXNlckxhdGVzdFNoYXJlKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBSZWNlaXZlZFNoYXJlVHlwZS5BU2hhcmUsXG4gICAgICAgIHJlcXVlc3RUeXBlXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZW5kU2hhcmVUeXBlLk1VU2hhcmU6XG4gICAgICBjb25zdCBzaGFyZVRvU2VuZCA9IHNoYXJlIGFzIE11RFNoYXJlO1xuICAgICAgY29uc3QgbXVTaGFyZVJlY29yZCA9IGNvbnZlcnRNdVNoYXJlKHNoYXJlVG9TZW5kLm11U2hhcmUpO1xuICAgICAgY29uc3QgZFNoYXJlUmVjb3JkID0gY29udmVydERTaGFyZShzaGFyZVRvU2VuZC5kU2hhcmUpO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSB7XG4gICAgICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlVG9TZW5kLmRTaGFyZS5qKSxcbiAgICAgICAgc2hhcmU6IGAke211U2hhcmVSZWNvcmQuc2hhcmV9JHtzZWNvbmRhcnlEZWxpbWV0ZXJ9JHtkU2hhcmVSZWNvcmQuc2hhcmV9YCxcbiAgICAgIH07XG4gICAgICBhd2FpdCBzZW5kU2lnbmF0dXJlU2hhcmUoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCwgc2lnbmF0dXJlU2hhcmUsIHJlcXVlc3RUeXBlLCBzaWduZXJTaGFyZSwgJ2VjZHNhJyk7XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IGF3YWl0IGdldEJpdGdvVG9Vc2VyTGF0ZXN0U2hhcmUoXG4gICAgICAgIGJpdGdvLFxuICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZSxcbiAgICAgICAgcmVxdWVzdFR5cGVcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNlbmRTaGFyZVR5cGUuU1NoYXJlOlxuICAgICAgY29uc3Qgc1NoYXJlID0gc2hhcmUgYXMgU1NoYXJlO1xuICAgICAgc2lnbmF0dXJlU2hhcmUgPSBjb252ZXJ0U2lnbmF0dXJlU2hhcmUoc1NoYXJlLCAxLCAzKTtcbiAgICAgIGF3YWl0IHNlbmRTaWduYXR1cmVTaGFyZShiaXRnbywgd2FsbGV0SWQsIHR4UmVxdWVzdElkLCBzaWduYXR1cmVTaGFyZSwgcmVxdWVzdFR5cGUsIHNpZ25lclNoYXJlLCAnZWNkc2EnKTtcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gc1NoYXJlO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTaGFyZSBnaXZlbiB0byBzZW5kJyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2VGcm9tQml0Z287XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGF0ZXN0IHVzZXIncyBzaGFyZSBmcm9tIGJpdGdvIG5lZWRlZCB0byBjb250aW51ZSBzaWduaW5nIGZsb3dcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZCAgKlxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHBhcmFtIHtSZWNlaXZlZFNoYXJlVHlwZX0gc2hhcmVUeXBlIC0gdGhlIGV4Y3BlY3RlZCBzaGFyZSB0eXBlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTZW5kU2hhcmVUb0JpdGdvUlQ+fSAtIHNoYXJlIGZyb20gYml0Z28gdG8gdXNlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Qml0Z29Ub1VzZXJMYXRlc3RTaGFyZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgc2hhcmVUeXBlOiBSZWNlaXZlZFNoYXJlVHlwZSxcbiAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlXG4pOiBQcm9taXNlPFNlbmRTaGFyZVRvQml0Z29SVD4ge1xuICBsZXQgcmVzcG9uc2VGcm9tQml0Z286IFNlbmRTaGFyZVRvQml0Z29SVDtcbiAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQpO1xuICBsZXQgdXNlclNoYXJlcztcbiAgc3dpdGNoIChyZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgUmVxdWVzdFR5cGUudHg6XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0LnRyYW5zYWN0aW9ucywgJ3RyYW5zYWN0aW9ucyByZXF1aXJlZCBhcyBwYXJ0IG9mIHR4UmVxdWVzdCcpO1xuICAgICAgdXNlclNoYXJlcyA9IHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZXF1ZXN0VHlwZS5tZXNzYWdlOlxuICAgICAgYXNzZXJ0KHR4UmVxdWVzdC5tZXNzYWdlcywgJ21lc3NhZ2VzIHJlcXVpcmVkIGFzIHBhcnQgb2YgdHhSZXF1ZXN0Jyk7XG4gICAgICB1c2VyU2hhcmVzID0gdHhSZXF1ZXN0Lm1lc3NhZ2VzWzBdLnNpZ25hdHVyZVNoYXJlcztcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdXNlclNoYXJlcyB8fCAhdXNlclNoYXJlcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZXIgc2hhcmUgaXMgbm90IHByZXNlbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHNoYXJlUmVjb3JkID0gdXNlclNoYXJlc1t1c2VyU2hhcmVzLmxlbmd0aCAtIDFdO1xuICBzd2l0Y2ggKHNoYXJlVHlwZSkge1xuICAgIGNhc2UgUmVjZWl2ZWRTaGFyZVR5cGUuQVNoYXJlOlxuICAgICAgcmVzcG9uc2VGcm9tQml0Z28gPSBwYXJzZUFTaGFyZShzaGFyZVJlY29yZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFJlY2VpdmVkU2hhcmVUeXBlLkRTaGFyZTpcbiAgICAgIHJlc3BvbnNlRnJvbUJpdGdvID0gcGFyc2VEU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBSZWNlaXZlZFNoYXJlVHlwZS5TaWduYXR1cmU6XG4gICAgICByZXNwb25zZUZyb21CaXRnbyA9IHBhcnNlU2lnbmF0dXJlU2hhcmUoc2hhcmVSZWNvcmQpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaGFyZSByZWNlaXZlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlRnJvbUJpdGdvO1xufVxuXG4vKipcbiAqIFByZXBhcmVzIGEgTlNoYXJlIHRvIGJlIGV4Y2hhbmdlZCB3aXRoIG90aGVyIGtleSBob2xkZXJzLlxuICogT3V0cHV0IGlzIGluIGEgZm9ybWF0IHRoYXQgaXMgdXNhYmxlIHdpdGhpbiBCaXRHbydzIGVjb3N5c3RlbS5cbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcGFyYW0gcmVjaXBpZW50SW5kZXggLSBpbmRleCBvZiB0aGUgcmVjaXBpZW50ICgxLCAyLCBvciAzKVxuICogQHBhcmFtIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIC0gcmVjaXBpZW50J3MgcHVibGljIGdwZyBrZXkgaW4gYXJtb3IgZm9ybWF0XG4gKiBAcGFyYW0gc2VuZGVyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAqIEBwYXJhbSBpc2JzNThFbmNvZGVkIC0gaXMgYnM1OCBlbmNvZGVkIG9yIG5vdFxuICogQHJldHVybnMgZW5jcnlwdGVkIE4gU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHROU2hhcmUoXG4gIGtleVNoYXJlOiBLZXlTaGFyZSxcbiAgcmVjaXBpZW50SW5kZXg6IG51bWJlcixcbiAgcmVjaXBpZW50R3BnUHVibGljQXJtb3I6IHN0cmluZyxcbiAgc2VuZGVyR3BnS2V5OiBwZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgaXNiczU4RW5jb2RlZCA9IHRydWVcbik6IFByb21pc2U8RW5jcnlwdGVkTlNoYXJlPiB7XG4gIGNvbnN0IG5TaGFyZSA9IGtleVNoYXJlLm5TaGFyZXNbcmVjaXBpZW50SW5kZXhdO1xuICBpZiAoIW5TaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZWNpcGllbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHB1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20oa2V5U2hhcmUucFNoYXJlLnksICdoZXgnKSxcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS5wU2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gIF0pLnRvU3RyaW5nKCdoZXgnKTtcblxuICBsZXQgcHJpdmF0ZVNoYXJlO1xuICBpZiAoaXNiczU4RW5jb2RlZCkge1xuICAgIHByaXZhdGVTaGFyZSA9IGJpcDMyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKG5TaGFyZS51LCAnaGV4JyksIEJ1ZmZlci5mcm9tKG5TaGFyZS5jaGFpbmNvZGUsICdoZXgnKSkudG9CYXNlNTgoKTtcbiAgfSBlbHNlIHtcbiAgICBwcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShuU2hhcmUudSwgJ2hleCcpLCBCdWZmZXIuZnJvbShuU2hhcmUuY2hhaW5jb2RlLCAnaGV4JyldKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgY29uc3QgcmVjaXBpZW50UHVibGljS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiByZWNpcGllbnRHcGdQdWJsaWNBcm1vciB9KTtcblxuICBjb25zdCBlbmNyeXB0ZWRQcml2YXRlU2hhcmUgPSAoYXdhaXQgcGdwLmVuY3J5cHQoe1xuICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgIHRleHQ6IHByaXZhdGVTaGFyZSxcbiAgICB9KSxcbiAgICBlbmNyeXB0aW9uS2V5czogW3JlY2lwaWVudFB1YmxpY0tleV0sXG4gIH0pKSBhcyBzdHJpbmc7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBuU2hhcmUuaSxcbiAgICBqOiBuU2hhcmUuaixcbiAgICBwdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmUsXG4gICAgbjogblNoYXJlLm4sXG4gICAgdnNzUHJvb2Y6IG5TaGFyZS52LFxuICAgIHByaXZhdGVTaGFyZVByb29mOiBhd2FpdCBjcmVhdGVTaGFyZVByb29mKHNlbmRlckdwZ0tleS5wcml2YXRlS2V5LCBuU2hhcmUudSwgJ2VjZHNhJyksXG4gIH07XG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBOU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBBbiBBUEkga2V5IHNoYXJlIHJlY2VpdmVkIGZyb20gYSB0aGlyZCBwYXJ0eSBzaG91bGQgYWxyZWFkeSBiZSBlbmNyeXB0ZWRcbiAqXG4gKiBAcGFyYW0ga2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcmV0dXJucyBlbmNyeXB0ZWQgTiBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGROU2hhcmVGcm9tQVBJS2V5U2hhcmUoa2V5U2hhcmU6IEFwaUtleVNoYXJlKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KGtleVNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KGtleVNoYXJlLmZyb20pLFxuICAgIHB1YmxpY1NoYXJlOiBrZXlTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IGtleVNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICBuOiBrZXlTaGFyZS5uID8/ICcnLCAvLyB0aGlzIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkIGZvciBrZXkgY3JlYXRpb25cbiAgICAvLyBUT0RPIChCRy02NTQzNCkgOiBtYWtlIGl0IGFzIG1hbmRhdG9yeVxuICAgIHByaXZhdGVTaGFyZVByb29mOiBrZXlTaGFyZS5wcml2YXRlU2hhcmVQcm9vZiA/PyAnJyxcbiAgICB2c3NQcm9vZjoga2V5U2hhcmUudnNzUHJvb2YsXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdHMgZW5jcnlwdGVkIG4gc2hhcmVcbiAqIEBwYXJhbSBlbmNyeXB0ZWROU2hhcmUgLSBkZWNyeXB0YWJsZSBuIHNoYXJlIHdpdGggcmVjaXBpZW50IHByaXZhdGUgZ3BnIGtleSBhcm1vciBhbmQgc2VuZGVyIHB1YmxpYyBncGcga2V5XG4gKiBAcmV0dXJucyBOIHNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0TlNoYXJlKGVuY3J5cHRlZE5TaGFyZTogRGVjcnlwdGFibGVOU2hhcmUsIGlzYnM1OEVuY29kZWQgPSB0cnVlKTogUHJvbWlzZTxOU2hhcmU+IHtcbiAgY29uc3QgcmVjaXBpZW50UHJpdmF0ZUtleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogZW5jcnlwdGVkTlNoYXJlLnJlY2lwaWVudFByaXZhdGVBcm1vciB9KTtcbiAgY29uc3QgcHJ2ID0gKFxuICAgIGF3YWl0IHBncC5kZWNyeXB0KHtcbiAgICAgIG1lc3NhZ2U6IGF3YWl0IHBncC5yZWFkTWVzc2FnZSh7IGFybW9yZWRNZXNzYWdlOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmVuY3J5cHRlZFByaXZhdGVTaGFyZSB9KSxcbiAgICAgIGRlY3J5cHRpb25LZXlzOiBbcmVjaXBpZW50UHJpdmF0ZUtleSBhcyBwZ3AuUHJpdmF0ZUtleV0sXG4gICAgfSlcbiAgKS5kYXRhIGFzIHN0cmluZztcblxuICBsZXQgdTogc3RyaW5nO1xuICBpZiAoaXNiczU4RW5jb2RlZCkge1xuICAgIGNvbnN0IHByaXZhdGVTaGFyZSA9IGJzNTguZGVjb2RlKHBydikudG9TdHJpbmcoJ2hleCcpO1xuICAgIHUgPSBwcml2YXRlU2hhcmUuc2xpY2UoOTIsIDE1Nik7XG4gIH0gZWxzZSB7XG4gICAgdSA9IHBydi5zbGljZSgwLCA2NCk7XG4gIH1cblxuICBjb25zdCBuU2hhcmU6IE5TaGFyZSA9IHtcbiAgICBpOiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLmksXG4gICAgajogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5qLFxuICAgIG46IGVuY3J5cHRlZE5TaGFyZS5uU2hhcmUubixcbiAgICB5OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDAsIDY2KSxcbiAgICB1OiB1LFxuICAgIGNoYWluY29kZTogZW5jcnlwdGVkTlNoYXJlLm5TaGFyZS5wdWJsaWNTaGFyZS5zbGljZSg2NiwgMTMwKSxcbiAgICB2OiBlbmNyeXB0ZWROU2hhcmUublNoYXJlLnZzc1Byb29mLFxuICB9O1xuXG4gIHJldHVybiBuU2hhcmU7XG59XG5cbi8qKlxuICogR2V0cyBwdWJsaWMga2V5IGZyb20gY29tbW9uIGtleSBjaGFpblxuICogQHBhcmFtIGNvbW1vbktleUNoYWluIC0gY29tbW9uIGtleSBjaGFpbiBvZiBlY2RzYSB0c3NcbiAqIEByZXR1cm5zIHB1YmxpYyBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0tleShjb21tb25LZXlDaGFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbW1vbktleUNoYWluLnNsaWNlKDAsIDY2KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGltZXRlciA9ICc6JztcbmV4cG9ydCBjb25zdCBzZWNvbmRhcnlEZWxpbWV0ZXIgPSAnLSc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlczogc3RyaW5nW10sIGV4cGVjdGVkTGVuZ3RoOiBudW1iZXIsIHNoYXJlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChzaGFyZXMubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtzaGFyZU5hbWV9IHNoYXJlYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXM6IHN0cmluZ1tdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgc2hhcmVOYW1lOiBzdHJpbmcsIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIGlmIChzaGFyZXNbaV0pIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29uc2lzdGVudCBvcHRpb25hbCAke3ZhbHVlTmFtZX0gdmFsdWUgaW4gJHtzaGFyZU5hbWV9IHNoYXJlYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuLyoqXG4gKiBwYXJzZXMgSyBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEsgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlS1NoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEtTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG5cbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAxMSwgJ0snKTtcbiAgY29uc3QgaGFzUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgNSwgMTEsICdLJywgJ3Byb29mJyk7XG5cbiAgbGV0IHByb29mO1xuICBpZiAoaGFzUHJvb2YpIHtcbiAgICBwcm9vZiA9IHtcbiAgICAgIHo6IHNoYXJlc1s1XSxcbiAgICAgIHU6IHNoYXJlc1s2XSxcbiAgICAgIHc6IHNoYXJlc1s3XSxcbiAgICAgIHM6IHNoYXJlc1s4XSxcbiAgICAgIHMxOiBzaGFyZXNbOV0sXG4gICAgICBzMjogc2hhcmVzWzEwXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBuOiBzaGFyZXNbMV0sXG4gICAgbnRpbGRlOiBzaGFyZXNbMl0sXG4gICAgaDE6IHNoYXJlc1szXSxcbiAgICBoMjogc2hhcmVzWzRdLFxuICAgIHByb29mLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgSyBzaGFyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2hhcmUgLSBLIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S1NoYXJlKHNoYXJlOiBLU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUubn0ke2RlbGltZXRlcn0ke3NoYXJlLm50aWxkZX0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5oMlxuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLnByb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnUgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8uczIgfHwgJyd9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgQSBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIEEgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IEFTaGFyZSB7XG4gIGNvbnN0IHNoYXJlcyA9IHNoYXJlLnNoYXJlLnNwbGl0KGRlbGltZXRlcik7XG4gIHZhbGlkYXRlU2hhcmVzTGVuZ3RoKHNoYXJlcywgMzcsICdBJyk7XG4gIGNvbnN0IGhhc1Byb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDcsIDEzLCAnQScsICdwcm9vZicpO1xuICBjb25zdCBoYXNHYW1tYVByb29mID0gdmFsaWRhdGVPcHRpb25hbFZhbHVlcyhzaGFyZXMsIDEzLCAyNSwgJ0EnLCAnZ2FtbWFQcm9vZicpO1xuICBjb25zdCBoYXNXUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMjUsIDM3LCAnQScsICd3UHJvb2YnKTtcblxuICBsZXQgcHJvb2Y7XG4gIGlmIChoYXNQcm9vZikge1xuICAgIHByb29mID0ge1xuICAgICAgejogc2hhcmVzWzddLFxuICAgICAgdTogc2hhcmVzWzhdLFxuICAgICAgdzogc2hhcmVzWzldLFxuICAgICAgczogc2hhcmVzWzEwXSxcbiAgICAgIHMxOiBzaGFyZXNbMTFdLFxuICAgICAgczI6IHNoYXJlc1sxMl0sXG4gICAgfTtcbiAgfVxuXG4gIGxldCBnYW1tYVByb29mO1xuICBpZiAoaGFzR2FtbWFQcm9vZikge1xuICAgIGdhbW1hUHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMTNdLFxuICAgICAgenBybTogc2hhcmVzWzE0XSxcbiAgICAgIHQ6IHNoYXJlc1sxNV0sXG4gICAgICB2OiBzaGFyZXNbMTZdLFxuICAgICAgdzogc2hhcmVzWzE3XSxcbiAgICAgIHM6IHNoYXJlc1sxOF0sXG4gICAgICBzMTogc2hhcmVzWzE5XSxcbiAgICAgIHMyOiBzaGFyZXNbMjBdLFxuICAgICAgdDE6IHNoYXJlc1syMV0sXG4gICAgICB0Mjogc2hhcmVzWzIyXSxcbiAgICAgIHU6IHNoYXJlc1syM10sXG4gICAgICB4OiBzaGFyZXNbMjRdLFxuICAgIH07XG4gIH1cblxuICBsZXQgd1Byb29mO1xuICBpZiAoaGFzV1Byb29mKSB7XG4gICAgd1Byb29mID0ge1xuICAgICAgejogc2hhcmVzWzI1XSxcbiAgICAgIHpwcm06IHNoYXJlc1syNl0sXG4gICAgICB0OiBzaGFyZXNbMjddLFxuICAgICAgdjogc2hhcmVzWzI4XSxcbiAgICAgIHc6IHNoYXJlc1syOV0sXG4gICAgICBzOiBzaGFyZXNbMzBdLFxuICAgICAgczE6IHNoYXJlc1szMV0sXG4gICAgICBzMjogc2hhcmVzWzMyXSxcbiAgICAgIHQxOiBzaGFyZXNbMzNdLFxuICAgICAgdDI6IHNoYXJlc1szNF0sXG4gICAgICB1OiBzaGFyZXNbMzVdLFxuICAgICAgeDogc2hhcmVzWzM2XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBqOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLmZyb20pLFxuICAgIGs6IHNoYXJlc1swXSxcbiAgICBhbHBoYTogc2hhcmVzWzFdLFxuICAgIG11OiBzaGFyZXNbMl0sXG4gICAgbjogc2hhcmVzWzNdLFxuICAgIG50aWxkZTogc2hhcmVzWzRdLFxuICAgIGgxOiBzaGFyZXNbNV0sXG4gICAgaDI6IHNoYXJlc1s2XSxcbiAgICBwcm9vZixcbiAgICBnYW1tYVByb29mLFxuICAgIHdQcm9vZixcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IEEgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gQSBzaGFyZVxuICogQHJldHVybnMgc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFTaGFyZShzaGFyZTogQVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUua30ke2RlbGltZXRlcn0ke3NoYXJlLmFscGhhfSR7ZGVsaW1ldGVyfSR7c2hhcmUubXV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ufSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5udGlsZGVcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5oMX0ke2RlbGltZXRlcn0ke3NoYXJlLmgyfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLnByb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LncgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5wcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUucHJvb2Y/LnMxIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUucHJvb2Y/LnMyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uenBybSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy53IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy5zMiB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/LnUgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy54IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy56IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnYgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ucyB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8uczEgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnQxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy54IHx8ICcnfWAsXG4gIH07XG59XG5cbi8qKlxuICogcGFyc2VzIE11IHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgTXUgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXVTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBNVVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyNiwgJ011Jyk7XG4gIGNvbnN0IGhhc0dhbW1hUHJvb2YgPSB2YWxpZGF0ZU9wdGlvbmFsVmFsdWVzKHNoYXJlcywgMiwgMTQsICdNdScsICdnYW1tYVByb29mJyk7XG4gIGNvbnN0IGhhc1dQcm9vZiA9IHZhbGlkYXRlT3B0aW9uYWxWYWx1ZXMoc2hhcmVzLCAxNCwgMjYsICdNdScsICd3UHJvb2YnKTtcblxuICBsZXQgZ2FtbWFQcm9vZjtcbiAgaWYgKGhhc0dhbW1hUHJvb2YpIHtcbiAgICBnYW1tYVByb29mID0ge1xuICAgICAgejogc2hhcmVzWzJdLFxuICAgICAgenBybTogc2hhcmVzWzNdLFxuICAgICAgdDogc2hhcmVzWzRdLFxuICAgICAgdjogc2hhcmVzWzVdLFxuICAgICAgdzogc2hhcmVzWzZdLFxuICAgICAgczogc2hhcmVzWzddLFxuICAgICAgczE6IHNoYXJlc1s4XSxcbiAgICAgIHMyOiBzaGFyZXNbOV0sXG4gICAgICB0MTogc2hhcmVzWzEwXSxcbiAgICAgIHQyOiBzaGFyZXNbMTFdLFxuICAgICAgdTogc2hhcmVzWzEyXSxcbiAgICAgIHg6IHNoYXJlc1sxM10sXG4gICAgfTtcbiAgfVxuXG4gIGxldCB3UHJvb2Y7XG4gIGlmIChoYXNXUHJvb2YpIHtcbiAgICB3UHJvb2YgPSB7XG4gICAgICB6OiBzaGFyZXNbMTRdLFxuICAgICAgenBybTogc2hhcmVzWzE1XSxcbiAgICAgIHQ6IHNoYXJlc1sxNl0sXG4gICAgICB2OiBzaGFyZXNbMTddLFxuICAgICAgdzogc2hhcmVzWzE4XSxcbiAgICAgIHM6IHNoYXJlc1sxOV0sXG4gICAgICBzMTogc2hhcmVzWzIwXSxcbiAgICAgIHMyOiBzaGFyZXNbMjFdLFxuICAgICAgdDE6IHNoYXJlc1syMl0sXG4gICAgICB0Mjogc2hhcmVzWzIzXSxcbiAgICAgIHU6IHNoYXJlc1syNF0sXG4gICAgICB4OiBzaGFyZXNbMjVdLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGk6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUudG8pLFxuICAgIGo6IGdldFBhcnRpY2lwYW50SW5kZXgoc2hhcmUuZnJvbSksXG4gICAgYWxwaGE6IHNoYXJlc1swXSxcbiAgICBtdTogc2hhcmVzWzFdLFxuICAgIGdhbW1hUHJvb2YsXG4gICAgd1Byb29mLFxuICB9O1xufVxuXG4vKipcbiAqIGNvbnZlcnQgTXUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gTXUgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNdVNoYXJlKHNoYXJlOiBNVVNoYXJlKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5qKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuYWxwaGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tdX0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnogfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLmdhbW1hUHJvb2Y/Lnpwcm0gfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8udiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8udyB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy5zMSB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUuZ2FtbWFQcm9vZj8uczIgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5nYW1tYVByb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLmdhbW1hUHJvb2Y/LnQyIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS5nYW1tYVByb29mPy51IHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWFQcm9vZj8ueCB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueiB8fCAnJ30ke2RlbGltZXRlcn0ke1xuICAgICAgc2hhcmUud1Byb29mPy56cHJtIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50IHx8ICcnfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy52IHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LncgfHwgJydcbiAgICB9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53UHJvb2Y/LnMxIHx8ICcnfSR7ZGVsaW1ldGVyfSR7XG4gICAgICBzaGFyZS53UHJvb2Y/LnMyIHx8ICcnXG4gICAgfSR7ZGVsaW1ldGVyfSR7c2hhcmUud1Byb29mPy50MSB8fCAnJ30ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8udDIgfHwgJyd9JHtkZWxpbWV0ZXJ9JHtcbiAgICAgIHNoYXJlLndQcm9vZj8udSB8fCAnJ1xuICAgIH0ke2RlbGltZXRlcn0ke3NoYXJlLndQcm9vZj8ueCB8fCAnJ31gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBEIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgRCBTaGFyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEU2hhcmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogRFNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAyLCAnRCcpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgajogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS5mcm9tKSxcbiAgICBkZWx0YTogc2hhcmVzWzBdLFxuICAgIEdhbW1hOiBzaGFyZXNbMV0sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEQgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREU2hhcmUoc2hhcmU6IERTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuaiksXG4gICAgc2hhcmU6IGAke3NoYXJlLmRlbHRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuR2FtbWF9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgUyBhbmQgRCBzaGFyZSBmcm9tIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIFMgYW5kIEQgU2hhcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU0RTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiB7IHNTaGFyZTogU2lnbmF0dXJlU2hhcmU7IGRTaGFyZTogRFNoYXJlIH0ge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChzZWNvbmRhcnlEZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDIsICdTRCcpO1xuXG4gIHJldHVybiB7XG4gICAgc1NoYXJlOiBwYXJzZVNpZ25hdHVyZVNoYXJlKHsgdG86IHNoYXJlLnRvLCBmcm9tOiBzaGFyZS5mcm9tLCBzaGFyZTogc2hhcmVzWzBdIH0pLFxuICAgIGRTaGFyZTogcGFyc2VEU2hhcmUoeyB0bzogc2hhcmUudG8sIGZyb206IHNoYXJlLmZyb20sIHNoYXJlOiBzaGFyZXNbMV0gfSksXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBTIGFuZCBEIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIFMgYW5kIEQgc2hhcmUgaW4gYSBvYmplY3RcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTRFNoYXJlKHNoYXJlOiB7IHNTaGFyZTogU1NoYXJlOyBkU2hhcmU6IERTaGFyZSB9KTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5kU2hhcmUuaSksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2hhcmUuZFNoYXJlLmopLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5zU2hhcmUuUn0ke2RlbGltZXRlcn0ke3NoYXJlLnNTaGFyZS5zfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc1NoYXJlLnl9JHtzZWNvbmRhcnlEZWxpbWV0ZXJ9JHtzaGFyZS5kU2hhcmUuZGVsdGF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5kU2hhcmUuR2FtbWF9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZXMgc2lnbmF0dXJlIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHJldHVybnMgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNoYXJlKHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCk6IFNpZ25hdHVyZVNoYXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzLCAnU2lnbmF0dXJlJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBSOiBzaGFyZXNbMF0sXG4gICAgczogc2hhcmVzWzFdLFxuICAgIHk6IHNoYXJlc1syXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXRzIGNvbWJpbmVkIHNpZ25hdHVyZSB0byBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKiBAcGFyYW0gc2lnbmF0dXJlIC0gY29tYmluZWQgc2lnbmF0dXJlIHNoYXJlXG4gKiBAcGFyYW0gdXNlckluZGV4IC0gdXNlciBpbmRleCwgZWl0aGVyIDEgKHVzZXIpIG9yIDIgKGJhY2t1cClcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDb21iaW5lZFNpZ25hdHVyZShzaWduYXR1cmU6IFNpZ25hdHVyZSwgdXNlckluZGV4OiBudW1iZXIpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleCh1c2VySW5kZXgpLFxuICAgIHNoYXJlOiBgJHtzaWduYXR1cmUucmVjaWR9JHtkZWxpbWV0ZXJ9JHtzaWduYXR1cmUucn0ke2RlbGltZXRlcn0ke3NpZ25hdHVyZS5zfSR7ZGVsaW1ldGVyfSR7c2lnbmF0dXJlLnl9YCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29tYmluZWRTaWduYXR1cmUoc2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkKTogU2lnbmF0dXJlIHtcbiAgY29uc3Qgc2hhcmVzID0gc2hhcmUuc2hhcmUuc3BsaXQoZGVsaW1ldGVyKTtcbiAgdmFsaWRhdGVTaGFyZXNMZW5ndGgoc2hhcmVzLCAzLCAnU2lnbmF0dXJlJyk7XG5cbiAgcmV0dXJuIHtcbiAgICByZWNpZDogTnVtYmVyKHNoYXJlc1swXSksXG4gICAgcjogc2hhcmVzWzFdLFxuICAgIHM6IHNoYXJlc1syXSxcbiAgICB5OiBzaGFyZXNbM10sXG4gIH07XG59XG5cbi8qKlxuICogY29udmVydCBzaWduYXR1cmUgc2hhcmUgdG8gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIC0gU2lnbmF0dXJlIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U2lnbmF0dXJlU2hhcmUoXG4gIHNoYXJlOiBTaWduYXR1cmVTaGFyZSxcbiAgc2VuZGVySW5kZXg6IG51bWJlcixcbiAgcmVjaXBpZW50SW5kZXg6IG51bWJlclxuKTogU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICByZXR1cm4ge1xuICAgIHRvOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChyZWNpcGllbnRJbmRleCksXG4gICAgZnJvbTogZ2V0UGFydGljaXBhbnRGcm9tSW5kZXgoc2VuZGVySW5kZXgpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5SfSR7ZGVsaW1ldGVyfSR7c2hhcmUuc30ke2RlbGltZXRlcn0ke3NoYXJlLnl9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBCIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSAtIEIgc2hhcmVcbiAqIEByZXR1cm5zIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRCU2hhcmUoc2hhcmU6IEJTaGFyZSk6IFNpZ25hdHVyZVNoYXJlUmVjb3JkIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIGZyb206IGdldFBhcnRpY2lwYW50RnJvbUluZGV4KHNoYXJlLmkpLFxuICAgIHNoYXJlOiBgJHtzaGFyZS5iZXRhfSR7ZGVsaW1ldGVyfSR7c2hhcmUuZ2FtbWF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5rfSR7ZGVsaW1ldGVyfSR7c2hhcmUubnV9JHtkZWxpbWV0ZXJ9JHtzaGFyZS53fSR7ZGVsaW1ldGVyfSR7c2hhcmUueX0ke2RlbGltZXRlcn0ke3NoYXJlLmx9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5tfSR7ZGVsaW1ldGVyfSR7c2hhcmUubn0ke2RlbGltZXRlcn0ke3NoYXJlLm50aWxkZX0ke2RlbGltZXRlcn0ke3NoYXJlLmgxfSR7ZGVsaW1ldGVyfSR7c2hhcmUuaDJ9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5ja31gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBCIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIEIgc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBCIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJTaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBCU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDEzLCAnQicpO1xuXG4gIHJldHVybiB7XG4gICAgaTogZ2V0UGFydGljaXBhbnRJbmRleChzaGFyZS50byksXG4gICAgYmV0YTogc2hhcmVzWzBdLFxuICAgIGdhbW1hOiBzaGFyZXNbMV0sXG4gICAgazogc2hhcmVzWzJdLFxuICAgIG51OiBzaGFyZXNbM10sXG4gICAgdzogc2hhcmVzWzRdLFxuICAgIHk6IHNoYXJlc1s1XSxcbiAgICBsOiBzaGFyZXNbNl0sXG4gICAgbTogc2hhcmVzWzddLFxuICAgIG46IHNoYXJlc1s4XSxcbiAgICBudGlsZGU6IHNoYXJlc1s5XSxcbiAgICBoMTogc2hhcmVzWzEwXSxcbiAgICBoMjogc2hhcmVzWzExXSxcbiAgICBjazogc2hhcmVzWzEyXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBPIHNoYXJlIHRvIHNpZ25hdHVyZSBzaGFyZSByZWNvcmRcbiAqIEBwYXJhbSBzaGFyZSBPIHNoYXJlXG4gKiBAcmV0dXJucyBzaWduYXR1cmUgc2hhcmUgcmVjb3JkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0T1NoYXJlKHNoYXJlOiBPU2hhcmUpOiBTaWduYXR1cmVTaGFyZVJlY29yZCB7XG4gIHJldHVybiB7XG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICBmcm9tOiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChzaGFyZS5pKSxcbiAgICBzaGFyZTogYCR7c2hhcmUuR2FtbWF9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5kZWx0YX0ke2RlbGltZXRlcn0ke3NoYXJlLmt9JHtkZWxpbWV0ZXJ9JHtzaGFyZS5vbWljcm9ufSR7ZGVsaW1ldGVyfSR7c2hhcmUueX1gLFxuICB9O1xufVxuXG4vKipcbiAqIHBhcnNlcyBPIHNoYXJlIGZyb20gc2lnbmF0dXJlIHNoYXJlIHJlY29yZFxuICogQHBhcmFtIHNoYXJlIE8gc2hhcmUgcmVjb3JkXG4gKiBAcmV0dXJucyBPIFNoYXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9TaGFyZShzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQpOiBPU2hhcmUge1xuICBjb25zdCBzaGFyZXMgPSBzaGFyZS5zaGFyZS5zcGxpdChkZWxpbWV0ZXIpO1xuICB2YWxpZGF0ZVNoYXJlc0xlbmd0aChzaGFyZXMsIDUsICdPJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpOiBnZXRQYXJ0aWNpcGFudEluZGV4KHNoYXJlLnRvKSxcbiAgICBHYW1tYTogc2hhcmVzWzBdLFxuICAgIGRlbHRhOiBzaGFyZXNbMV0sXG4gICAgazogc2hhcmVzWzJdLFxuICAgIG9taWNyb246IHNoYXJlc1szXSxcbiAgICB5OiBzaGFyZXNbNF0sXG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBwYXJ0aWNpcGFudCBpbmRleFxuICogQHBhcmFtIHBhcnRpY2lwYW50IC0gcGFydGljaXBhbnRzICh1c2VyLCBiYWNrdXAsIG9yIGJpdGdvKVxuICogQHJldHVybnMgaW5kZXggKDEsIDIsIDByIDMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJ0aWNpcGFudEluZGV4KHBhcnRpY2lwYW50OiAndXNlcicgfCAnYmFja3VwJyB8ICdiaXRnbycpOiBudW1iZXIge1xuICBzd2l0Y2ggKHBhcnRpY2lwYW50KSB7XG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICdiYWNrdXAnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAnYml0Z28nOlxuICAgICAgcmV0dXJuIDM7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKCdVbmtvd24gcGFydGljaXBhbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIGdldHMgcGFydGljaXBhbnQgbmFtZSBieSBpbmRleFxuICogQHBhcmFtIGluZGV4IHBhcnRpY2lwYW50IGluZGV4XG4gKiBAcmV0dXJucyBwYXJ0aWNpcGFudCBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJ0aWNpcGFudEZyb21JbmRleChpbmRleDogbnVtYmVyKTogU2lnbmF0dXJlU2hhcmVUeXBlIHtcbiAgc3dpdGNoIChpbmRleCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUjtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLkJBQ0tVUDtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGFydGljaXBhbnQgaW5kZXggJHtpbmRleH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgdS12YWx1ZSB3YWxsZXQgc2lnbmF0dXJlcyBmb3IgdGhlIGJpdGdvLXVzZXIgYW5kIGJpdGdvLWJhY2t1cCBzaGFyZXMuXG4gKiBAcGFyYW0gcGFyYW1zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlXYWxsZXRTaWduYXR1cmUocGFyYW1zOiB7XG4gIHdhbGxldFNpZ25hdHVyZTogcGdwLktleTtcbiAgYml0Z29QdWI6IHBncC5LZXk7XG4gIGNvbW1vbktleWNoYWluOiBzdHJpbmc7XG4gIHVzZXJLZXlJZDogc3RyaW5nO1xuICBiYWNrdXBLZXlJZDogc3RyaW5nO1xuICBkZWNyeXB0ZWRTaGFyZTogc3RyaW5nO1xuICB2ZXJpZmllckluZGV4OiAxIHwgMjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmF3Tm90YXRpb25zID0gYXdhaXQgY29tbW9uVmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHBhcmFtcyk7XG4gIGNvbnN0IHB1YmxpY1VWYWx1ZVJhd05vdGF0aW9uSW5kZXggPSAyICsgcGFyYW1zLnZlcmlmaWVySW5kZXg7XG5cbiAgLy8gRGVyaXZlIHB1YmxpYyBmb3JtIG9mIHUtdmFsdWVcbiAgY29uc3QgcHVibGljVVZhbHVlID0gZWNjLnBvaW50RnJvbVNjYWxhcihCdWZmZXIuZnJvbShwYXJhbXMuZGVjcnlwdGVkU2hhcmUuc2xpY2UoMCwgNjQpLCAnaGV4JyksIHRydWUpO1xuICBhc3NlcnQocHVibGljVVZhbHVlICE9PSBudWxsLCAnbnVsbCBwdWJsaWMgdS12YWx1ZScpO1xuICAvLyBWZXJpZnkgdGhhdCB0aGUgdSB2YWx1ZSArIGNoYWluY29kZSBpcyBlcXVhbCB0byB0aGUgcHJvb2YgcmV0cmlldmVkIGZyb20gdGhlIHJhdyBub3RhdGlvbnNcbiAgYXNzZXJ0KFxuICAgIEJ1ZmZlci5mcm9tKHB1YmxpY1VWYWx1ZSkudG9TdHJpbmcoJ2hleCcpICsgcGFyYW1zLmRlY3J5cHRlZFNoYXJlLnNsaWNlKDY0KSA9PT1cbiAgICAgIEJ1ZmZlci5mcm9tKHJhd05vdGF0aW9uc1twdWJsaWNVVmFsdWVSYXdOb3RhdGlvbkluZGV4XS52YWx1ZSkudG9TdHJpbmcoKSxcbiAgICAnYml0Z28gc2hhcmUgbWlzbWF0Y2gnXG4gICk7XG59XG4iXX0=
@@ -2,7 +2,9 @@ import { ECDSA } from './../../../account-lib/mpc/tss';
2
2
  export declare type NShare = ECDSA.NShare;
3
3
  export declare type KeyShare = ECDSA.KeyShare;
4
4
  export declare type XShare = ECDSA.XShare;
5
+ export declare type XShareWithNTilde = ECDSA.XShareWithNTilde;
5
6
  export declare type YShare = ECDSA.YShare;
7
+ export declare type YShareWithNTilde = ECDSA.YShareWithNTilde;
6
8
  export declare type SignShare = ECDSA.SignShareRT;
7
9
  export declare type KShare = ECDSA.KShare;
8
10
  export declare type WShare = ECDSA.WShare;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;AAC1C,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAAC;AAC9D,oBAAY,gCAAgC,GAAG,KAAK,CAAC,aAAa,CAAC;AACnE,oBAAY,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1C,oBAAY,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAElC,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,oBAAY,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,oBAAY,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IAEpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAGF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAGF,oBAAY,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAGF,oBAAY,eAAe,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;CAC3B,CAAC;AAEF,oBAAY,uBAAuB,GAAG;IACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oBAAY,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/tss/ecdsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AACtD,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AACtD,oBAAY,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;AAC1C,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAAC;AAC9D,oBAAY,gCAAgC,GAAG,KAAK,CAAC,aAAa,CAAC;AACnE,oBAAY,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1C,oBAAY,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAElC,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,oBAAY,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,oBAAY,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IAEpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAGF,oBAAY,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAGF,oBAAY,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAGF,oBAAY,eAAe,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;CAC3B,CAAC;AAEF,oBAAY,uBAAuB,GAAG;IACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,oBAAY,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}