@bitgo/abstract-utxo 10.19.4 → 10.20.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 (98) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +7 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +23 -11
  4. package/dist/cjs/src/transaction/decode.d.ts +2 -1
  5. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  6. package/dist/cjs/src/transaction/decode.js +5 -1
  7. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +32 -2
  8. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  9. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +71 -18
  10. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +7 -1
  11. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  12. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -1
  13. package/dist/cjs/src/transaction/fixedScript/index.d.ts +1 -1
  14. package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -1
  15. package/dist/cjs/src/transaction/fixedScript/index.js +4 -2
  16. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +3 -3
  17. package/dist/cjs/src/transaction/index.d.ts +2 -0
  18. package/dist/cjs/src/transaction/index.d.ts.map +1 -1
  19. package/dist/cjs/src/transaction/index.js +6 -2
  20. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  21. package/dist/cjs/src/transaction/signTransaction.js +11 -2
  22. package/dist/cjs/src/transaction/types.d.ts +1 -0
  23. package/dist/cjs/src/transaction/types.d.ts.map +1 -1
  24. package/dist/cjs/src/transaction/types.js +1 -1
  25. package/dist/cjs/test/integration/impl/bch/bch.d.ts +1 -1
  26. package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -1
  27. package/dist/cjs/test/integration/impl/bch/bch.js +12 -10
  28. package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts +2 -0
  29. package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts.map +1 -0
  30. package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +99 -0
  31. package/dist/cjs/test/unit/customSigner.d.ts +1 -2
  32. package/dist/cjs/test/unit/customSigner.d.ts.map +1 -1
  33. package/dist/cjs/test/unit/customSigner.js +7 -9
  34. package/dist/cjs/test/unit/impl/bch/unit/bch.js +41 -108
  35. package/dist/cjs/test/unit/impl/bcha/unit/index.js +13 -19
  36. package/dist/cjs/test/unit/impl/bsv/unit/index.js +9 -7
  37. package/dist/cjs/test/unit/impl/btg/unit/index.js +8 -4
  38. package/dist/cjs/test/unit/impl/dash/unit/index.js +9 -7
  39. package/dist/cjs/test/unit/impl/doge/unit/index.js +9 -7
  40. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +1 -1
  41. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -1
  42. package/dist/cjs/test/unit/impl/zec/unit/index.js +9 -8
  43. package/dist/cjs/test/unit/keychains.d.ts +1 -1
  44. package/dist/cjs/test/unit/keychains.d.ts.map +1 -1
  45. package/dist/cjs/test/unit/keychains.js +2 -3
  46. package/dist/cjs/test/unit/postProcessPrebuild.d.ts +1 -1
  47. package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -1
  48. package/dist/cjs/test/unit/postProcessPrebuild.js +7 -4
  49. package/dist/cjs/test/unit/prebuildAndSign.js +3 -5
  50. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +1 -1
  51. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -1
  52. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +5 -6
  53. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
  54. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +1 -1
  55. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -1
  56. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +32 -29
  57. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +65 -1
  58. package/dist/cjs/test/unit/transaction.js +12 -12
  59. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
  60. package/dist/cjs/test/unit/txFormat.js +25 -10
  61. package/dist/cjs/test/unit/util/assert.d.ts +3 -0
  62. package/dist/cjs/test/unit/util/assert.d.ts.map +1 -0
  63. package/dist/cjs/test/unit/util/assert.js +24 -0
  64. package/dist/cjs/test/unit/util/fixtures.d.ts +1 -2
  65. package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -1
  66. package/dist/cjs/test/unit/util/fixtures.js +8 -5
  67. package/dist/cjs/test/unit/util/index.d.ts +1 -0
  68. package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
  69. package/dist/cjs/test/unit/util/index.js +2 -1
  70. package/dist/cjs/test/unit/wallet.d.ts +1 -1
  71. package/dist/cjs/test/unit/wallet.d.ts.map +1 -1
  72. package/dist/cjs/test/unit/wallet.js +15 -12
  73. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  74. package/dist/esm/abstractUtxoCoin.d.ts +7 -1
  75. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  76. package/dist/esm/abstractUtxoCoin.js +24 -12
  77. package/dist/esm/transaction/decode.d.ts +2 -1
  78. package/dist/esm/transaction/decode.d.ts.map +1 -1
  79. package/dist/esm/transaction/decode.js +4 -1
  80. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +32 -2
  81. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  82. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +69 -18
  83. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +7 -1
  84. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  85. package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -1
  86. package/dist/esm/transaction/fixedScript/index.d.ts +1 -1
  87. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -1
  88. package/dist/esm/transaction/fixedScript/index.js +2 -2
  89. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +3 -3
  90. package/dist/esm/transaction/index.d.ts +2 -0
  91. package/dist/esm/transaction/index.d.ts.map +1 -1
  92. package/dist/esm/transaction/index.js +3 -1
  93. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  94. package/dist/esm/transaction/signTransaction.js +13 -4
  95. package/dist/esm/transaction/types.d.ts +1 -0
  96. package/dist/esm/transaction/types.d.ts.map +1 -1
  97. package/dist/esm/transaction/types.js +1 -1
  98. package/package.json +9 -9
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- require("should");
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
4
7
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
5
8
  const src_1 = require("../../../src");
6
9
  const util_1 = require("../util");
@@ -51,13 +54,13 @@ describe('formatBackupKeyRecoveryResult', function () {
51
54
  recoveryDestination,
52
55
  unspents,
53
56
  });
54
- result.should.have.property('txHex');
55
- result.should.have.property('txInfo');
56
- result.should.have.property('feeInfo');
57
- result.should.have.property('coin');
58
- result.coin.should.equal(coin.getChain());
57
+ (0, util_1.assertHasProperty)(result, 'txHex');
58
+ (0, util_1.assertHasProperty)(result, 'txInfo');
59
+ (0, util_1.assertHasProperty)(result, 'feeInfo');
60
+ (0, util_1.assertHasProperty)(result, 'coin');
61
+ strict_1.default.strictEqual(result.coin, coin.getChain());
59
62
  const txBuf = Buffer.from(result.txHex, 'hex');
60
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(true);
63
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), true);
61
64
  });
62
65
  it('matches fixture', async function () {
63
66
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -67,7 +70,7 @@ describe('formatBackupKeyRecoveryResult', function () {
67
70
  unspents,
68
71
  });
69
72
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-unsigned', result);
70
- (0, util_1.shouldEqualJSON)(result, fixture);
73
+ (0, util_1.assertEqualJSON)(result, fixture);
71
74
  });
72
75
  });
73
76
  describe('KRS recovery with keyternal (legacy format)', function () {
@@ -88,14 +91,14 @@ describe('formatBackupKeyRecoveryResult', function () {
88
91
  backupKey: 'test-backup-key',
89
92
  unspents,
90
93
  });
91
- result.should.have.property('transactionHex');
92
- result.should.have.property('coin');
93
- result.should.have.property('backupKey');
94
- result.should.have.property('recoveryAmount');
95
- result.should.have.property('inputs');
96
- result.backupKey.should.equal('test-backup-key');
94
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
95
+ (0, util_1.assertHasProperty)(result, 'coin');
96
+ (0, util_1.assertHasProperty)(result, 'backupKey');
97
+ (0, util_1.assertHasProperty)(result, 'recoveryAmount');
98
+ (0, util_1.assertHasProperty)(result, 'inputs');
99
+ strict_1.default.strictEqual(result.backupKey, 'test-backup-key');
97
100
  const txBuf = Buffer.from(result.transactionHex, 'hex');
98
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(false);
101
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), false);
99
102
  });
100
103
  it('matches fixture', async function () {
101
104
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -107,7 +110,7 @@ describe('formatBackupKeyRecoveryResult', function () {
107
110
  unspents,
108
111
  });
109
112
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-krs-keyternal', result);
110
- (0, util_1.shouldEqualJSON)(result, fixture);
113
+ (0, util_1.assertEqualJSON)(result, fixture);
111
114
  });
112
115
  });
113
116
  describe('KRS recovery with dai (PSBT format)', function () {
@@ -128,14 +131,14 @@ describe('formatBackupKeyRecoveryResult', function () {
128
131
  backupKey: 'test-backup-key',
129
132
  unspents,
130
133
  });
131
- result.should.have.property('transactionHex');
132
- result.should.have.property('coin');
133
- result.should.have.property('backupKey');
134
- result.should.have.property('recoveryAmount');
135
- result.backupKey.should.equal('test-backup-key');
134
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
135
+ (0, util_1.assertHasProperty)(result, 'coin');
136
+ (0, util_1.assertHasProperty)(result, 'backupKey');
137
+ (0, util_1.assertHasProperty)(result, 'recoveryAmount');
138
+ strict_1.default.strictEqual(result.backupKey, 'test-backup-key');
136
139
  const txBuf = Buffer.from(result.transactionHex, 'hex');
137
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(true);
138
- (result.inputs === undefined).should.equal(true);
140
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), true);
141
+ strict_1.default.strictEqual(result.inputs, undefined);
139
142
  });
140
143
  it('matches fixture', async function () {
141
144
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -147,7 +150,7 @@ describe('formatBackupKeyRecoveryResult', function () {
147
150
  unspents,
148
151
  });
149
152
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-krs-dai', result);
150
- (0, util_1.shouldEqualJSON)(result, fixture);
153
+ (0, util_1.assertEqualJSON)(result, fixture);
151
154
  });
152
155
  });
153
156
  describe('full recovery (user + backup signatures)', function () {
@@ -166,10 +169,10 @@ describe('formatBackupKeyRecoveryResult', function () {
166
169
  recoveryDestination,
167
170
  unspents,
168
171
  });
169
- result.should.have.property('transactionHex');
170
- result.should.have.property('inputs');
172
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
173
+ (0, util_1.assertHasProperty)(result, 'inputs');
171
174
  const txBuf = Buffer.from(result.transactionHex, 'hex');
172
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(false);
175
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), false);
173
176
  });
174
177
  it('matches fixture', async function () {
175
178
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -179,8 +182,8 @@ describe('formatBackupKeyRecoveryResult', function () {
179
182
  unspents,
180
183
  });
181
184
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-fullySigned', result);
182
- (0, util_1.shouldEqualJSON)(result, fixture);
185
+ (0, util_1.assertEqualJSON)(result, fixture);
183
186
  });
184
187
  });
185
188
  });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFFaEIsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FRaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVB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QyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0LCBoYXNQc2J0TWFnaWMgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMsXG4gIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24sXG4gIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0LFxuICBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5pbXBvcnQge1xuICBjcmVhdGVXYXNtV2FsbGV0S2V5cyxcbiAgZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICBnZXRGaXh0dXJlLFxuICBnZXRXYWxsZXRBZGRyZXNzLFxuICBzaG91bGRFcXVhbEpTT04sXG4gIHRvVW5zcGVudCxcbiAgdXR4b0NvaW5zLFxufSBmcm9tICcuLi91dGlsJztcblxuLy8gVXNlIHRidGMgZm9yIGFsbCB0ZXN0cyAtIGZvcm1hdHRpbmcgbG9naWMgZG9lc24ndCB2YXJ5IGJ5IGNvaW5cbmNvbnN0IGNvaW4gPSB1dHhvQ29pbnMuZmluZCgoYykgPT4gYy5nZXRDaGFpbigpID09PSAndGJ0YycpITtcbmNvbnN0IHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJyBhcyBjb25zdDtcblxuLy8gR2V0IGRlZmF1bHQgd2FzbSB3YWxsZXQga2V5cyAoeHB1YnMgYW5kIHhwcml2cylcbmNvbnN0IHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCB4cHVicywgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuLyoqXG4gKiBCdWlsZCBzaWduaW5nIGtleXMgdHJpcGxlIHdpdGggc3BlY2lmaWVkIG5ldXRlciBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25pbmdLZXlzKG9wdGlvbnM6IHsgbmV1dGVyVXNlcj86IGJvb2xlYW47IG5ldXRlckJhY2t1cD86IGJvb2xlYW4gfSk6IFRyaXBsZTxCSVAzMj4ge1xuICByZXR1cm4gW1xuICAgIG9wdGlvbnMubmV1dGVyVXNlciA/IHhwdWJzWzBdIDogeHByaXZzWzBdLFxuICAgIG9wdGlvbnMubmV1dGVyQmFja3VwID8geHB1YnNbMV0gOiB4cHJpdnNbMV0sXG4gICAgeHB1YnNbMl0sIC8vIGJpdGdvIGlzIGFsd2F5cyB4cHViXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRlc3RVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiBbXG4gICAgdG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpIH0sIDAsIGNvaW4ubmFtZSwgZGVmYXVsdFdhc21XYWxsZXRLZXlzKSxcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICBdO1xufVxuXG4vKipcbiAqIENsb25lIGEgUFNCVCAtIG5lY2Vzc2FyeSBiZWNhdXNlIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0IG11dGF0ZXMgd2hlbiBmaW5hbGl6aW5nLlxuICovXG5mdW5jdGlvbiBjbG9uZVBzYnQocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgY29pbi5uYW1lKTtcbn1cblxuZGVzY3JpYmUoJ2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHdhbGxldEtleXM6IGV4dGVybmFsV2FsbGV0IH0gPSBjcmVhdGVXYXNtV2FsbGV0S2V5cygnZXh0ZXJuYWwnKTtcbiAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9IGdldFdhbGxldEFkZHJlc3MoY29pbi5uYW1lLCBleHRlcm5hbFdhbGxldCk7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IDEwMDtcblxuICBkZXNjcmliZSgndW5zaWduZWQgc3dlZXAgKG5vIHNpZ25hdHVyZXMpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IHRydWUsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SGV4Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SW5mbycpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWVJbmZvJyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvaW4nKTtcbiAgICAgIHJlc3VsdC5jb2luIS5zaG91bGQuZXF1YWwoY29pbi5nZXRDaGFpbigpKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHhIZXgsICdoZXgnKTtcbiAgICAgIGhhc1BzYnRNYWdpYyh0eEJ1Zikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LXVuc2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIHNob3VsZEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGgga2V5dGVybmFsIChsZWdhY3kgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGxlZ2FjeSB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pbicpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdiYWNrdXBLZXknKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjb3ZlcnlBbW91bnQnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW5wdXRzJyk7XG4gICAgICByZXN1bHQuYmFja3VwS2V5IS5zaG91bGQuZXF1YWwoJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGhhc1BzYnRNYWdpYyh0eEJ1Zikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWtycy1rZXl0ZXJuYWwnLCByZXN1bHQpO1xuICAgICAgc2hvdWxkRXF1YWxKU09OKHJlc3VsdCwgZml4dHVyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLUlMgcmVjb3Zlcnkgd2l0aCBkYWkgKFBTQlQgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAnZGFpJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvaW4nKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwS2V5Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY292ZXJ5QW1vdW50Jyk7XG4gICAgICByZXN1bHQuYmFja3VwS2V5IS5zaG91bGQuZXF1YWwoJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGhhc1BzYnRNYWdpYyh0eEJ1Zikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgKHJlc3VsdC5pbnB1dHMgPT09IHVuZGVmaW5lZCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3Zlcnkta3JzLWRhaScsIHJlc3VsdCk7XG4gICAgICBzaG91bGRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Z1bGwgcmVjb3ZlcnkgKHVzZXIgKyBiYWNrdXAgc2lnbmF0dXJlcyknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogZmFsc2UgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW5wdXRzJyk7XG5cbiAgICAgIGNvbnN0IHR4QnVmID0gQnVmZmVyLmZyb20ocmVzdWx0LnRyYW5zYWN0aW9uSGV4ISwgJ2hleCcpO1xuICAgICAgaGFzUHNidE1hZ2ljKHR4QnVmKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWZ1bGx5U2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIHNob3VsZEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFHeEMsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FTaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJ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LEVBQUUscUJBQXFCO2dCQUNqQyxJQUFJLEVBQUUsV0FBVztnQkFDakIsbUJBQW1CO2dCQUNuQixRQUFRO2FBQ1QsQ0FBb0MsQ0FBQztZQUV0QyxJQUFBLHdCQUFpQixFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLElBQUEsd0JBQWlCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUE2QixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xFLFVBQVUsRUFBRSxxQkFBcUI7Z0JBQ2pDLElBQUksRUFBRSxXQUFXO2dCQUNqQixtQkFBbUI7Z0JBQ25CLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsaUJBQVUsRUFBQyxJQUFJLEVBQUUsOENBQThDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0YsSUFBQSxzQkFBZSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyxcbiAgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbixcbiAgZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQsXG4gIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgYXNzZXJ0SGFzUHJvcGVydHksXG4gIGNyZWF0ZVdhc21XYWxsZXRLZXlzLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGdldEZpeHR1cmUsXG4gIGdldFdhbGxldEFkZHJlc3MsXG4gIHRvVW5zcGVudCxcbiAgdXR4b0NvaW5zLFxufSBmcm9tICcuLi91dGlsJztcblxuLy8gVXNlIHRidGMgZm9yIGFsbCB0ZXN0cyAtIGZvcm1hdHRpbmcgbG9naWMgZG9lc24ndCB2YXJ5IGJ5IGNvaW5cbmNvbnN0IGNvaW4gPSB1dHhvQ29pbnMuZmluZCgoYykgPT4gYy5nZXRDaGFpbigpID09PSAndGJ0YycpITtcbmNvbnN0IHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJyBhcyBjb25zdDtcblxuLy8gR2V0IGRlZmF1bHQgd2FzbSB3YWxsZXQga2V5cyAoeHB1YnMgYW5kIHhwcml2cylcbmNvbnN0IHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCB4cHVicywgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuLyoqXG4gKiBCdWlsZCBzaWduaW5nIGtleXMgdHJpcGxlIHdpdGggc3BlY2lmaWVkIG5ldXRlciBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25pbmdLZXlzKG9wdGlvbnM6IHsgbmV1dGVyVXNlcj86IGJvb2xlYW47IG5ldXRlckJhY2t1cD86IGJvb2xlYW4gfSk6IFRyaXBsZTxCSVAzMj4ge1xuICByZXR1cm4gW1xuICAgIG9wdGlvbnMubmV1dGVyVXNlciA/IHhwdWJzWzBdIDogeHByaXZzWzBdLFxuICAgIG9wdGlvbnMubmV1dGVyQmFja3VwID8geHB1YnNbMV0gOiB4cHJpdnNbMV0sXG4gICAgeHB1YnNbMl0sIC8vIGJpdGdvIGlzIGFsd2F5cyB4cHViXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRlc3RVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiBbXG4gICAgdG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpIH0sIDAsIGNvaW4ubmFtZSwgZGVmYXVsdFdhc21XYWxsZXRLZXlzKSxcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICBdO1xufVxuXG4vKipcbiAqIENsb25lIGEgUFNCVCAtIG5lY2Vzc2FyeSBiZWNhdXNlIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0IG11dGF0ZXMgd2hlbiBmaW5hbGl6aW5nLlxuICovXG5mdW5jdGlvbiBjbG9uZVBzYnQocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgY29pbi5uYW1lKTtcbn1cblxuZGVzY3JpYmUoJ2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHdhbGxldEtleXM6IGV4dGVybmFsV2FsbGV0IH0gPSBjcmVhdGVXYXNtV2FsbGV0S2V5cygnZXh0ZXJuYWwnKTtcbiAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9IGdldFdhbGxldEFkZHJlc3MoY29pbi5uYW1lLCBleHRlcm5hbFdhbGxldCk7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IDEwMDtcblxuICBkZXNjcmliZSgndW5zaWduZWQgc3dlZXAgKG5vIHNpZ25hdHVyZXMpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IHRydWUsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvO1xuXG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0eEhleCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHhJbmZvJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdmZWVJbmZvJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNvaW4hLCBjb2luLmdldENoYWluKCkpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50eEhleCwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc1BzYnRNYWdpYyh0eEJ1ZiksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LXVuc2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGgga2V5dGVybmFsIChsZWdhY3kgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGxlZ2FjeSB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdiYWNrdXBLZXknKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3JlY292ZXJ5QW1vdW50Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdpbnB1dHMnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuYmFja3VwS2V5ISwgJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAna2V5dGVybmFsJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGNvaW4sICdyZWNvdmVyeS9mb3JtYXRCYWNrdXBLZXlSZWNvdmVyeS1rcnMta2V5dGVybmFsJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGggZGFpIChQU0JUIGZvcm1hdCknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBQU0JUIGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2NvaW4nKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2JhY2t1cEtleScpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAncmVjb3ZlcnlBbW91bnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuYmFja3VwS2V5ISwgJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCB0cnVlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaW5wdXRzLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3Zlcnkta3JzLWRhaScsIHJlc3VsdCk7XG4gICAgICBhc3NlcnRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Z1bGwgcmVjb3ZlcnkgKHVzZXIgKyBiYWNrdXAgc2lnbmF0dXJlcyknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogZmFsc2UgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdpbnB1dHMnKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHJhbnNhY3Rpb25IZXghLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzUHNidE1hZ2ljKHR4QnVmKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWZ1bGx5U2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -104,10 +104,35 @@ function describeTransactionWith(acidTest) {
104
104
  break;
105
105
  }
106
106
  }
107
+ // verify new fields are present and stringified
108
+ strict_1.default.strictEqual(typeof wasmExplanation.inputAmount, 'string');
109
+ strict_1.default.ok(Array.isArray(wasmExplanation.inputs));
110
+ strict_1.default.ok(wasmExplanation.inputs.length > 0);
111
+ for (const input of wasmExplanation.inputs) {
112
+ strict_1.default.strictEqual(typeof input.address, 'string');
113
+ strict_1.default.strictEqual(typeof input.value, 'string');
114
+ }
107
115
  });
108
116
  if (acidTest.network !== utxolib.networks.bitcoin) {
109
117
  return;
110
118
  }
119
+ it('explainPsbtWasmBigInt returns bigint amounts and inputs array', function () {
120
+ const result = (0, fixedScript_1.explainPsbtWasmBigInt)(wasmPsbt, walletXpubs, {
121
+ replayProtection: { publicKeys: [acidTest.getReplayProtectionPublicKey()] },
122
+ });
123
+ strict_1.default.strictEqual(typeof result.fee, 'bigint');
124
+ strict_1.default.strictEqual(typeof result.outputAmount, 'bigint');
125
+ strict_1.default.strictEqual(typeof result.changeAmount, 'bigint');
126
+ strict_1.default.strictEqual(typeof result.inputAmount, 'bigint');
127
+ strict_1.default.ok(result.inputs.length > 0);
128
+ for (const input of result.inputs) {
129
+ strict_1.default.strictEqual(typeof input.address, 'string');
130
+ strict_1.default.strictEqual(typeof input.value, 'bigint');
131
+ }
132
+ const sumInputs = result.inputs.reduce((s, i) => s + i.value, 0n);
133
+ strict_1.default.strictEqual(result.inputAmount, sumInputs);
134
+ strict_1.default.strictEqual(result.fee, result.inputAmount - result.outputAmount - result.changeAmount - result.customChangeAmount);
135
+ });
111
136
  // extended test suite for bitcoin
112
137
  it('returns custom change outputs when parameter is set', function () {
113
138
  const wasmExplanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, walletXpubs, {
@@ -126,4 +151,43 @@ function describeTransactionWith(acidTest) {
126
151
  describe('explainPsbt(Wasm)', function () {
127
152
  utxo_lib_1.testutil.AcidTest.suite().forEach((test) => describeTransactionWith(test));
128
153
  });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMseURBQTJDO0FBQzNDLDhDQUEyQztBQUMzQyxnREFBNkQ7QUFHN0QseUVBQXVGO0FBQ3ZGLGlEQUFvRDtBQUVwRCxTQUFTLHVCQUF1QixDQUFDLFFBQTJCO0lBQzFELFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMzQixJQUFJLElBQTRCLENBQUM7UUFDakMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksV0FBMkIsQ0FBQztRQUNoQyxJQUFJLHVCQUFtRCxDQUFDO1FBQ3hELElBQUksUUFBcUMsQ0FBQztRQUMxQyxJQUFJLGNBQXNDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUEsbUJBQVcsRUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsY0FBYyxHQUFHLElBQUEseUJBQVcsRUFBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRTtnQkFDOUUsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDLENBQUM7WUFDSCxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsQ0FBQztZQUNwQixXQUFXLEdBQUcsUUFB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QWUsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLGdCQUFNLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7SUFDNUIsbUJBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZXhwbGFpblBzYnQsIGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKGFjaWRUZXN0OiB0ZXN0dXRpbC5BY2lkVGVzdCkge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbiAgICBsZXQgcHNidEJ5dGVzOiBCdWZmZXI7XG4gICAgbGV0IHdhbGxldFhwdWJzOiBUcmlwbGU8c3RyaW5nPjtcbiAgICBsZXQgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuICAgIGxldCB3YXNtUHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCByZWZFeHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBnZXRDb2luTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIHJlZkV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQocHNidCwgeyBwdWJzOiBhY2lkVGVzdC5yb290V2FsbGV0S2V5cyB9LCBjb2luTmFtZSwge1xuICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHBzYnRCeXRlcyA9IHBzYnQudG9CdWZmZXIoKTtcbiAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIGFzc2VydChuZXR3b3JrTmFtZSk7XG4gICAgICB3YWxsZXRYcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzID0gYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0Qnl0ZXMsIG5ldHdvcmtOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlcyBmb3IgZXhwbGFpblBzYnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBub3RlOiBgb3V0cHV0c2AgbWVhbnMgZXh0ZXJuYWwgb3V0cHV0cyBoZXJlXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmRXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZkV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCBhY2lkVGVzdC5vdXRwdXRzLmxlbmd0aCAtIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZkV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzE4MDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgYWNpZFRlc3Qub3V0cHV0cy5sZW5ndGggLSAzKTtcbiAgICAgIHJlZkV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjaGFuZ2UuYW1vdW50LCAnOTAwJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgY2hhbmdlLmFkZHJlc3MsICdzdHJpbmcnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgc3VwcG9ydCBjdXN0b20gY2hhbmdlIG91dHB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgY29uc3QgY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24gPSBleHBsYWluUHNidChcbiAgICAgICAgcHNidCxcbiAgICAgICAgeyBwdWJzOiBhY2lkVGVzdC5yb290V2FsbGV0S2V5cywgY3VzdG9tQ2hhbmdlUHViczogYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzIH0sXG4gICAgICAgIGNvaW5OYW1lLFxuICAgICAgICB7IHN0cmljdDogdHJ1ZSB9XG4gICAgICApO1xuICAgICAgYXNzZXJ0Lm9rKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCByZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIHJlZkV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoIC0gMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnOTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGV4cGxhaW5Qc2J0V2FzbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21FeHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbSh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlZkV4cGxhbmF0aW9uKSkge1xuICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHJlZkV4cGxhbmF0aW9uW2tleV07XG4gICAgICAgIGNvbnN0IHdhc21WYWx1ZSA9IHdhc21FeHBsYW5hdGlvbltrZXldO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgJ2Rpc3BsYXlPcmRlcic6XG4gICAgICAgICAgY2FzZSAnaW5wdXRTaWduYXR1cmVzJzpcbiAgICAgICAgICBjYXNlICdzaWduYXR1cmVzJzpcbiAgICAgICAgICAgIC8vIHRoZXNlIGFyZSBkZXByZWNhdGVkIGZpZWxkcyB0aGF0IHdlIHdhbnQgdG8gZ2V0IHJpZCBvZlxuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtVmFsdWUsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtVmFsdWUsIHJlZlZhbHVlLCBgbWlzbWF0Y2ggZm9yIGtleSAke2tleX1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWNpZFRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXh0ZW5kZWQgdGVzdCBzdWl0ZSBmb3IgYml0Y29pblxuXG4gICAgaXQoJ3JldHVybnMgY3VzdG9tIGNoYW5nZSBvdXRwdXRzIHdoZW4gcGFyYW1ldGVyIGlzIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21FeHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbSh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21DaGFuZ2VXYWxsZXRYcHVicyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnOTAwJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5kZXNjcmliZSgnZXhwbGFpblBzYnQoV2FzbSknLCBmdW5jdGlvbiAoKSB7XG4gIHRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKCkuZm9yRWFjaCgodGVzdCkgPT4gZGVzY3JpYmVUcmFuc2FjdGlvbldpdGgodGVzdCkpO1xufSk7XG4iXX0=
154
+ describe('aggregateTransactionExplanations', function () {
155
+ utxo_lib_1.testutil.AcidTest.suite()
156
+ .filter((t) => t.network === utxolib.networks.bitcoin)
157
+ .forEach((acidTest) => {
158
+ describe(acidTest.name, function () {
159
+ let exp;
160
+ before('prepare', function () {
161
+ const psbtBytes = acidTest.createPsbt().toBuffer();
162
+ const networkName = utxolib.getNetworkName(acidTest.network);
163
+ (0, strict_1.default)(networkName);
164
+ const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbtBytes, networkName);
165
+ const walletXpubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
166
+ exp = (0, fixedScript_1.explainPsbtWasmBigInt)(wasmPsbt, walletXpubs, {
167
+ replayProtection: { publicKeys: [acidTest.getReplayProtectionPublicKey()] },
168
+ });
169
+ });
170
+ it('aggregating a single explanation is identity', function () {
171
+ const agg = (0, fixedScript_1.aggregateTransactionExplanations)([exp]);
172
+ strict_1.default.strictEqual(agg.inputCount, exp.inputs.length);
173
+ strict_1.default.strictEqual(agg.outputCount, exp.outputs.length);
174
+ strict_1.default.strictEqual(agg.changeOutputCount, exp.changeOutputs.length);
175
+ strict_1.default.strictEqual(agg.inputAmount, exp.inputAmount);
176
+ strict_1.default.strictEqual(agg.outputAmount, exp.outputAmount);
177
+ strict_1.default.strictEqual(agg.changeAmount, exp.changeAmount);
178
+ strict_1.default.strictEqual(agg.fee, exp.fee);
179
+ });
180
+ it('aggregating two identical explanations doubles all counts and amounts', function () {
181
+ const agg = (0, fixedScript_1.aggregateTransactionExplanations)([exp, exp]);
182
+ strict_1.default.strictEqual(agg.inputCount, exp.inputs.length * 2);
183
+ strict_1.default.strictEqual(agg.outputCount, exp.outputs.length * 2);
184
+ strict_1.default.strictEqual(agg.changeOutputCount, exp.changeOutputs.length * 2);
185
+ strict_1.default.strictEqual(agg.inputAmount, exp.inputAmount * 2n);
186
+ strict_1.default.strictEqual(agg.outputAmount, exp.outputAmount * 2n);
187
+ strict_1.default.strictEqual(agg.changeAmount, exp.changeAmount * 2n);
188
+ strict_1.default.strictEqual(agg.fee, exp.fee * 2n);
189
+ });
190
+ });
191
+ });
192
+ });
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMseURBQTJDO0FBQzNDLDhDQUEyQztBQUMzQyxnREFBNkQ7QUFHN0QseUVBTWlEO0FBQ2pELGlEQUFvRDtBQUVwRCxTQUFTLHVCQUF1QixDQUFDLFFBQTJCO0lBQzFELFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMzQixJQUFJLElBQTRCLENBQUM7UUFDakMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksV0FBMkIsQ0FBQztRQUNoQyxJQUFJLHVCQUFtRCxDQUFDO1FBQ3hELElBQUksUUFBcUMsQ0FBQztRQUMxQyxJQUFJLGNBQXNDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUEsbUJBQVcsRUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsY0FBYyxHQUFHLElBQUEseUJBQVcsRUFBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRTtnQkFDOUUsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDLENBQUM7WUFDSCxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsQ0FBQztZQUNwQixXQUFXLEdBQUcsUUFB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Z0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzFELGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IHRlc3R1dGlsIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0LCBUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBleHBsYWluUHNidCxcbiAgZXhwbGFpblBzYnRXYXNtLFxuICBleHBsYWluUHNidFdhc21CaWdJbnQsXG4gIGFnZ3JlZ2F0ZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25zLFxuICB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb25CaWdJbnQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKGFjaWRUZXN0OiB0ZXN0dXRpbC5BY2lkVGVzdCkge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbiAgICBsZXQgcHNidEJ5dGVzOiBCdWZmZXI7XG4gICAgbGV0IHdhbGxldFhwdWJzOiBUcmlwbGU8c3RyaW5nPjtcbiAgICBsZXQgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuICAgIGxldCB3YXNtUHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCByZWZFeHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBnZXRDb2luTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIHJlZkV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQocHNidCwgeyBwdWJzOiBhY2lkVGVzdC5yb290V2FsbGV0S2V5cyB9LCBjb2luTmFtZSwge1xuICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHBzYnRCeXRlcyA9IHBzYnQudG9CdWZmZXIoKTtcbiAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIGFzc2VydChuZXR3b3JrTmFtZSk7XG4gICAgICB3YWxsZXRYcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzID0gYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0Qnl0ZXMsIG5ldHdvcmtOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlcyBmb3IgZXhwbGFpblBzYnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBub3RlOiBgb3V0cHV0c2AgbWVhbnMgZXh0ZXJuYWwgb3V0cHV0cyBoZXJlXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmRXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZkV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCBhY2lkVGVzdC5vdXRwdXRzLmxlbmd0aCAtIDMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZkV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzE4MDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgYWNpZFRlc3Qub3V0cHV0cy5sZW5ndGggLSAzKTtcbiAgICAgIHJlZkV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjaGFuZ2UuYW1vdW50LCAnOTAwJyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgY2hhbmdlLmFkZHJlc3MsICdzdHJpbmcnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgc3VwcG9ydCBjdXN0b20gY2hhbmdlIG91dHB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgY29uc3QgY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24gPSBleHBsYWluUHNidChcbiAgICAgICAgcHNidCxcbiAgICAgICAgeyBwdWJzOiBhY2lkVGVzdC5yb290V2FsbGV0S2V5cywgY3VzdG9tQ2hhbmdlUHViczogYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzIH0sXG4gICAgICAgIGNvaW5OYW1lLFxuICAgICAgICB7IHN0cmljdDogdHJ1ZSB9XG4gICAgICApO1xuICAgICAgYXNzZXJ0Lm9rKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCByZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIHJlZkV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoIC0gMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnOTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGV4cGxhaW5Qc2J0V2FzbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21FeHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbSh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlZkV4cGxhbmF0aW9uKSkge1xuICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHJlZkV4cGxhbmF0aW9uW2tleV07XG4gICAgICAgIGNvbnN0IHdhc21WYWx1ZSA9IHdhc21FeHBsYW5hdGlvbltrZXldO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgJ2Rpc3BsYXlPcmRlcic6XG4gICAgICAgICAgY2FzZSAnaW5wdXRTaWduYXR1cmVzJzpcbiAgICAgICAgICBjYXNlICdzaWduYXR1cmVzJzpcbiAgICAgICAgICAgIC8vIHRoZXNlIGFyZSBkZXByZWNhdGVkIGZpZWxkcyB0aGF0IHdlIHdhbnQgdG8gZ2V0IHJpZCBvZlxuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtVmFsdWUsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtVmFsdWUsIHJlZlZhbHVlLCBgbWlzbWF0Y2ggZm9yIGtleSAke2tleX1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHZlcmlmeSBuZXcgZmllbGRzIGFyZSBwcmVzZW50IGFuZCBzdHJpbmdpZmllZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiB3YXNtRXhwbGFuYXRpb24uaW5wdXRBbW91bnQsICdzdHJpbmcnKTtcbiAgICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KHdhc21FeHBsYW5hdGlvbi5pbnB1dHMpKTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uaW5wdXRzLmxlbmd0aCA+IDApO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB3YXNtRXhwbGFuYXRpb24uaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LnZhbHVlLCAnc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWNpZFRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXQoJ2V4cGxhaW5Qc2J0V2FzbUJpZ0ludCByZXR1cm5zIGJpZ2ludCBhbW91bnRzIGFuZCBpbnB1dHMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBleHBsYWluUHNidFdhc21CaWdJbnQod2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKV0gfSxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuZmVlLCAnYmlnaW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdC5vdXRwdXRBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LmNoYW5nZUFtb3VudCwgJ2JpZ2ludCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiByZXN1bHQuaW5wdXRBbW91bnQsICdiaWdpbnQnKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuaW5wdXRzLmxlbmd0aCA+IDApO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaW5wdXQuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGlucHV0LnZhbHVlLCAnYmlnaW50Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdW1JbnB1dHMgPSByZXN1bHQuaW5wdXRzLnJlZHVjZSgocywgaSkgPT4gcyArIGkudmFsdWUsIDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaW5wdXRBbW91bnQsIHN1bUlucHV0cyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIHJlc3VsdC5mZWUsXG4gICAgICAgIHJlc3VsdC5pbnB1dEFtb3VudCAtIHJlc3VsdC5vdXRwdXRBbW91bnQgLSByZXN1bHQuY2hhbmdlQW1vdW50IC0gcmVzdWx0LmN1c3RvbUNoYW5nZUFtb3VudFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIGV4dGVuZGVkIHRlc3Qgc3VpdGUgZm9yIGJpdGNvaW5cblxuICAgIGl0KCdyZXR1cm5zIGN1c3RvbSBjaGFuZ2Ugb3V0cHV0cyB3aGVuIHBhcmFtZXRlciBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlV2FsbGV0WHB1YnMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vayh3YXNtRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21FeHBsYW5hdGlvbi5jdXN0b21DaGFuZ2VPdXRwdXRzWzBdLmFtb3VudCwgJzkwMCcpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ2V4cGxhaW5Qc2J0KFdhc20pJywgZnVuY3Rpb24gKCkge1xuICB0ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpLmZvckVhY2goKHRlc3QpID0+IGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKHRlc3QpKTtcbn0pO1xuXG5kZXNjcmliZSgnYWdncmVnYXRlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIHRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKClcbiAgICAuZmlsdGVyKCh0KSA9PiB0Lm5ldHdvcmsgPT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbilcbiAgICAuZm9yRWFjaCgoYWNpZFRlc3QpID0+IHtcbiAgICAgIGRlc2NyaWJlKGFjaWRUZXN0Lm5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGV4cDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbkJpZ0ludDtcblxuICAgICAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcHNidEJ5dGVzID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpLnRvQnVmZmVyKCk7XG4gICAgICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgICAgIGFzc2VydChuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnRCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgIGNvbnN0IHdhbGxldFhwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgICAgIGV4cCA9IGV4cGxhaW5Qc2J0V2FzbUJpZ0ludCh3YXNtUHNidCwgd2FsbGV0WHB1YnMsIHtcbiAgICAgICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKV0gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FnZ3JlZ2F0aW5nIGEgc2luZ2xlIGV4cGxhbmF0aW9uIGlzIGlkZW50aXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0ZVRyYW5zYWN0aW9uRXhwbGFuYXRpb25zKFtleHBdKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0Q291bnQsIGV4cC5pbnB1dHMubGVuZ3RoKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLm91dHB1dENvdW50LCBleHAub3V0cHV0cy5sZW5ndGgpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuY2hhbmdlT3V0cHV0Q291bnQsIGV4cC5jaGFuZ2VPdXRwdXRzLmxlbmd0aCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5pbnB1dEFtb3VudCwgZXhwLmlucHV0QW1vdW50KTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLm91dHB1dEFtb3VudCwgZXhwLm91dHB1dEFtb3VudCk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VBbW91bnQsIGV4cC5jaGFuZ2VBbW91bnQpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuZmVlLCBleHAuZmVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FnZ3JlZ2F0aW5nIHR3byBpZGVudGljYWwgZXhwbGFuYXRpb25zIGRvdWJsZXMgYWxsIGNvdW50cyBhbmQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhZ2cgPSBhZ2dyZWdhdGVUcmFuc2FjdGlvbkV4cGxhbmF0aW9ucyhbZXhwLCBleHBdKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWdnLmlucHV0Q291bnQsIGV4cC5pbnB1dHMubGVuZ3RoICogMik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5vdXRwdXRDb3VudCwgZXhwLm91dHB1dHMubGVuZ3RoICogMik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5jaGFuZ2VPdXRwdXRDb3VudCwgZXhwLmNoYW5nZU91dHB1dHMubGVuZ3RoICogMik7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZy5pbnB1dEFtb3VudCwgZXhwLmlucHV0QW1vdW50ICogMm4pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cub3V0cHV0QW1vdW50LCBleHAub3V0cHV0QW1vdW50ICogMm4pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuY2hhbmdlQW1vdW50LCBleHAuY2hhbmdlQW1vdW50ICogMm4pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2cuZmVlLCBleHAuZmVlICogMm4pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4iXX0=