@bitgo-beta/utxo-lib 8.0.3-beta.59 → 8.0.3-beta.590

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 (209) hide show
  1. package/dist/src/address.d.ts +0 -1
  2. package/dist/src/address.d.ts.map +1 -1
  3. package/dist/src/address.js +10 -10
  4. package/dist/src/addressFormat.d.ts +1 -2
  5. package/dist/src/addressFormat.d.ts.map +1 -1
  6. package/dist/src/addressFormat.js +21 -26
  7. package/dist/src/bitgo/Musig2.d.ts +0 -1
  8. package/dist/src/bitgo/Musig2.d.ts.map +1 -1
  9. package/dist/src/bitgo/Musig2.js +42 -42
  10. package/dist/src/bitgo/PsbtUtil.d.ts +17 -1
  11. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
  12. package/dist/src/bitgo/PsbtUtil.js +62 -8
  13. package/dist/src/bitgo/Unspent.d.ts +2 -3
  14. package/dist/src/bitgo/Unspent.d.ts.map +1 -1
  15. package/dist/src/bitgo/Unspent.js +14 -15
  16. package/dist/src/bitgo/UtxoPsbt.d.ts +16 -5
  17. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  18. package/dist/src/bitgo/UtxoPsbt.js +118 -76
  19. package/dist/src/bitgo/UtxoTransaction.d.ts +0 -1
  20. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
  21. package/dist/src/bitgo/UtxoTransaction.js +11 -11
  22. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -1
  23. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/bitgo/UtxoTransactionBuilder.js +1 -1
  25. package/dist/src/bitgo/bitcoincash/address.d.ts +0 -1
  26. package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -1
  27. package/dist/src/bitgo/bitcoincash/address.js +11 -12
  28. package/dist/src/bitgo/bitcoincash/index.js +6 -2
  29. package/dist/src/bitgo/dash/DashPsbt.d.ts +0 -1
  30. package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -1
  31. package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -1
  32. package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -1
  33. package/dist/src/bitgo/dash/DashTransaction.js +3 -3
  34. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -1
  35. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -1
  36. package/dist/src/bitgo/dash/DashTransactionBuilder.js +1 -1
  37. package/dist/src/bitgo/dash/index.js +6 -2
  38. package/dist/src/bitgo/index.d.ts +3 -1
  39. package/dist/src/bitgo/index.d.ts.map +1 -1
  40. package/dist/src/bitgo/index.js +9 -3
  41. package/dist/src/bitgo/keyutil.d.ts +9 -1
  42. package/dist/src/bitgo/keyutil.d.ts.map +1 -1
  43. package/dist/src/bitgo/keyutil.js +25 -4
  44. package/dist/src/bitgo/legacysafe/index.d.ts +14 -0
  45. package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
  46. package/dist/src/bitgo/legacysafe/index.js +60 -0
  47. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +0 -1
  48. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -1
  49. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -2
  50. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
  51. package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
  52. package/dist/src/bitgo/litecoin/index.js +6 -2
  53. package/dist/src/bitgo/nonStandardHalfSigned.js +2 -3
  54. package/dist/src/bitgo/outputScripts.d.ts +7 -7
  55. package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
  56. package/dist/src/bitgo/outputScripts.js +46 -31
  57. package/dist/src/bitgo/parseInput.d.ts +11 -8
  58. package/dist/src/bitgo/parseInput.d.ts.map +1 -1
  59. package/dist/src/bitgo/parseInput.js +30 -15
  60. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -1
  61. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
  62. package/dist/src/bitgo/psbt/fromHalfSigned.js +7 -8
  63. package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -1
  64. package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -1
  65. package/dist/src/bitgo/psbt/scriptTypes.js +5 -6
  66. package/dist/src/bitgo/signature.d.ts +2 -3
  67. package/dist/src/bitgo/signature.d.ts.map +1 -1
  68. package/dist/src/bitgo/signature.js +25 -17
  69. package/dist/src/bitgo/tnumber.js +2 -3
  70. package/dist/src/bitgo/transaction.d.ts +13 -1
  71. package/dist/src/bitgo/transaction.d.ts.map +1 -1
  72. package/dist/src/bitgo/transaction.js +49 -23
  73. package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
  74. package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
  75. package/dist/src/bitgo/transactionAmounts.js +32 -0
  76. package/dist/src/bitgo/types.d.ts +8 -2
  77. package/dist/src/bitgo/types.d.ts.map +1 -1
  78. package/dist/src/bitgo/types.js +12 -4
  79. package/dist/src/bitgo/wallet/Psbt.d.ts +48 -19
  80. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  81. package/dist/src/bitgo/wallet/Psbt.js +141 -40
  82. package/dist/src/bitgo/wallet/Unspent.d.ts +23 -16
  83. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
  84. package/dist/src/bitgo/wallet/Unspent.js +67 -62
  85. package/dist/src/bitgo/wallet/WalletKeys.d.ts +1 -2
  86. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
  87. package/dist/src/bitgo/wallet/WalletKeys.js +3 -3
  88. package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
  89. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
  90. package/dist/src/bitgo/wallet/WalletOutput.js +67 -27
  91. package/dist/src/bitgo/wallet/WalletScripts.js +4 -5
  92. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
  93. package/dist/src/bitgo/wallet/chains.d.ts +3 -3
  94. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
  95. package/dist/src/bitgo/wallet/chains.js +10 -10
  96. package/dist/src/bitgo/wallet/index.d.ts +2 -0
  97. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  98. package/dist/src/bitgo/wallet/index.js +8 -2
  99. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
  100. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
  101. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +86 -0
  102. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
  103. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
  104. package/dist/src/bitgo/wallet/psbt/RootNodes.js +125 -0
  105. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +1 -2
  106. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -1
  107. package/dist/src/bitgo/zcash/ZcashBufferutils.js +15 -15
  108. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -2
  109. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  110. package/dist/src/bitgo/zcash/ZcashPsbt.js +8 -15
  111. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +3 -2
  112. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
  113. package/dist/src/bitgo/zcash/ZcashTransaction.js +30 -20
  114. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -1
  115. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -1
  116. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +6 -4
  117. package/dist/src/bitgo/zcash/address.d.ts +0 -1
  118. package/dist/src/bitgo/zcash/address.d.ts.map +1 -1
  119. package/dist/src/bitgo/zcash/address.js +7 -8
  120. package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -2
  121. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
  122. package/dist/src/bitgo/zcash/hashZip0244.js +9 -10
  123. package/dist/src/bitgo/zcash/index.js +6 -2
  124. package/dist/src/classify.d.ts +0 -1
  125. package/dist/src/classify.d.ts.map +1 -1
  126. package/dist/src/classify.js +5 -5
  127. package/dist/src/index.js +6 -2
  128. package/dist/src/networks.d.ts +2 -2
  129. package/dist/src/networks.d.ts.map +1 -1
  130. package/dist/src/networks.js +67 -21
  131. package/dist/src/noble_ecc.d.ts +7 -7
  132. package/dist/src/noble_ecc.d.ts.map +1 -1
  133. package/dist/src/noble_ecc.js +4 -4
  134. package/dist/src/payments/p2tr.js +3 -4
  135. package/dist/src/payments/p2tr_ns.js +2 -3
  136. package/dist/src/taproot.d.ts +1 -2
  137. package/dist/src/taproot.d.ts.map +1 -1
  138. package/dist/src/taproot.js +19 -19
  139. package/dist/src/templates/multisig/input.d.ts +0 -1
  140. package/dist/src/templates/multisig/input.d.ts.map +1 -1
  141. package/dist/src/templates/multisig/input.js +2 -3
  142. package/dist/src/templates/multisig/output.d.ts +0 -1
  143. package/dist/src/templates/multisig/output.d.ts.map +1 -1
  144. package/dist/src/templates/multisig/output.js +2 -3
  145. package/dist/src/templates/nulldata.d.ts +0 -1
  146. package/dist/src/templates/nulldata.d.ts.map +1 -1
  147. package/dist/src/templates/nulldata.js +3 -3
  148. package/dist/src/templates/pubkey/input.d.ts +0 -1
  149. package/dist/src/templates/pubkey/input.d.ts.map +1 -1
  150. package/dist/src/templates/pubkey/input.js +2 -3
  151. package/dist/src/templates/pubkey/output.d.ts +0 -1
  152. package/dist/src/templates/pubkey/output.d.ts.map +1 -1
  153. package/dist/src/templates/pubkey/output.js +2 -3
  154. package/dist/src/templates/pubkeyhash/input.d.ts +0 -1
  155. package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -1
  156. package/dist/src/templates/pubkeyhash/input.js +2 -3
  157. package/dist/src/templates/pubkeyhash/output.d.ts +0 -1
  158. package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -1
  159. package/dist/src/templates/pubkeyhash/output.js +2 -3
  160. package/dist/src/templates/scripthash/input.d.ts +0 -1
  161. package/dist/src/templates/scripthash/input.d.ts.map +1 -1
  162. package/dist/src/templates/scripthash/input.js +2 -3
  163. package/dist/src/templates/scripthash/output.d.ts +0 -1
  164. package/dist/src/templates/scripthash/output.d.ts.map +1 -1
  165. package/dist/src/templates/scripthash/output.js +2 -3
  166. package/dist/src/templates/taproot/input.d.ts +0 -1
  167. package/dist/src/templates/taproot/input.d.ts.map +1 -1
  168. package/dist/src/templates/taproot/input.js +2 -3
  169. package/dist/src/templates/taproot/output.d.ts +0 -1
  170. package/dist/src/templates/taproot/output.d.ts.map +1 -1
  171. package/dist/src/templates/taproot/output.js +2 -3
  172. package/dist/src/templates/taprootnofn/input.d.ts +0 -1
  173. package/dist/src/templates/taprootnofn/input.d.ts.map +1 -1
  174. package/dist/src/templates/taprootnofn/input.js +2 -3
  175. package/dist/src/templates/taprootnofn/output.d.ts +0 -1
  176. package/dist/src/templates/taprootnofn/output.d.ts.map +1 -1
  177. package/dist/src/templates/taprootnofn/output.js +2 -3
  178. package/dist/src/templates/witnesscommitment/output.d.ts +0 -1
  179. package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -1
  180. package/dist/src/templates/witnesscommitment/output.js +4 -5
  181. package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -1
  182. package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -1
  183. package/dist/src/templates/witnesspubkeyhash/input.js +2 -3
  184. package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -1
  185. package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -1
  186. package/dist/src/templates/witnesspubkeyhash/output.js +2 -3
  187. package/dist/src/templates/witnessscripthash/input.d.ts +0 -1
  188. package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -1
  189. package/dist/src/templates/witnessscripthash/input.js +2 -3
  190. package/dist/src/templates/witnessscripthash/output.d.ts +0 -1
  191. package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -1
  192. package/dist/src/templates/witnessscripthash/output.js +2 -3
  193. package/dist/src/testutil/index.js +6 -2
  194. package/dist/src/testutil/keys.d.ts +4 -1
  195. package/dist/src/testutil/keys.d.ts.map +1 -1
  196. package/dist/src/testutil/keys.js +22 -8
  197. package/dist/src/testutil/mock.d.ts +1 -2
  198. package/dist/src/testutil/mock.d.ts.map +1 -1
  199. package/dist/src/testutil/mock.js +21 -21
  200. package/dist/src/testutil/psbt.d.ts +39 -15
  201. package/dist/src/testutil/psbt.d.ts.map +1 -1
  202. package/dist/src/testutil/psbt.js +53 -39
  203. package/dist/src/testutil/transaction.d.ts +15 -6
  204. package/dist/src/testutil/transaction.d.ts.map +1 -1
  205. package/dist/src/testutil/transaction.js +26 -26
  206. package/dist/src/transaction_builder.d.ts +0 -1
  207. package/dist/src/transaction_builder.d.ts.map +1 -1
  208. package/dist/src/transaction_builder.js +12 -17
  209. package/package.json +7 -7
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Contains helper methods for getting and sorting root nodes from a PSBT.
3
+ */
4
+ import { UtxoPsbt } from '../../UtxoPsbt';
5
+ import { Triple } from '../../types';
6
+ import { BIP32Interface } from 'bip32';
7
+ /**
8
+ * Error thrown when no multi-sig input is found in a PSBT.
9
+ * */
10
+ export declare class ErrorNoMultiSigInputFound extends Error {
11
+ constructor(message: string);
12
+ }
13
+ /**
14
+ * Retrieves unsorted root BIP32Interface nodes from a PSBT if available.
15
+ * @param psbt - The PSBT from which to extract the global Xpubs.
16
+ * @returns An array of BIP32Interface objects or undefined if not available.
17
+ */
18
+ export declare function getUnsortedRootNodes(psbt: UtxoPsbt): Triple<BIP32Interface> | undefined;
19
+ /**
20
+ * Sorts given root nodes based on the script compatibility with the PSBT's multi-sig inputs.
21
+ * @param psbt - The PSBT containing multi-sig inputs.
22
+ * @param rootNodes - Array of root nodes to sort.
23
+ * @returns An array of BIP32Interface objects in the order that matches the multi-sig script.
24
+ */
25
+ export declare function sortRootNodes(psbt: UtxoPsbt, rootNodes: Triple<BIP32Interface>): Triple<BIP32Interface>;
26
+ /**
27
+ * Retrieves sorted root nodes from a PSBT, ensuring they are ordered according to script compatibility.
28
+ * @param psbt - The PSBT to extract and sort root nodes from.
29
+ * @returns An array of sorted BIP32Interface root nodes.
30
+ */
31
+ export declare function getSortedRootNodes(psbt: UtxoPsbt): Triple<BIP32Interface>;
32
+ //# sourceMappingURL=RootNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootNodes.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/wallet/psbt/RootNodes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAY,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgB,cAAc,EAAE,MAAM,OAAO,CAAC;AASrD;;KAEK;AACL,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,SAAS,CAMvF;AAkGD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAKvG;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAIzE"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * Contains helper methods for getting and sorting root nodes from a PSBT.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ErrorNoMultiSigInputFound = void 0;
7
+ exports.getUnsortedRootNodes = getUnsortedRootNodes;
8
+ exports.sortRootNodes = sortRootNodes;
9
+ exports.getSortedRootNodes = getSortedRootNodes;
10
+ const assert = require("assert");
11
+ const bs58check = require("bs58check");
12
+ const types_1 = require("../../types");
13
+ const bip32_1 = require("bip32");
14
+ const noble_ecc_1 = require("../../../noble_ecc");
15
+ const outputScripts_1 = require("../../outputScripts");
16
+ const transaction_1 = require("../../transaction");
17
+ const Psbt_1 = require("../Psbt");
18
+ /**
19
+ * Error thrown when no multi-sig input is found in a PSBT.
20
+ * */
21
+ class ErrorNoMultiSigInputFound extends Error {
22
+ constructor(message) {
23
+ super(message);
24
+ }
25
+ }
26
+ exports.ErrorNoMultiSigInputFound = ErrorNoMultiSigInputFound;
27
+ /**
28
+ * Retrieves unsorted root BIP32Interface nodes from a PSBT if available.
29
+ * @param psbt - The PSBT from which to extract the global Xpubs.
30
+ * @returns An array of BIP32Interface objects or undefined if not available.
31
+ */
32
+ function getUnsortedRootNodes(psbt) {
33
+ var _a;
34
+ const bip32s = (_a = psbt.data.globalMap.globalXpub) === null || _a === void 0 ? void 0 : _a.map((xpub) => (0, bip32_1.BIP32Factory)(noble_ecc_1.ecc).fromBase58(bs58check.encode(xpub.extendedPubkey)));
35
+ assert(!bip32s || (0, types_1.isTriple)(bip32s), `Invalid globalXpubs in PSBT. Expected 3 or none. Got ${bip32s === null || bip32s === void 0 ? void 0 : bip32s.length}`);
36
+ return bip32s;
37
+ }
38
+ /**
39
+ * Determines if the given public keys' permutation matches a specified script.
40
+ * @param params - Object containing public keys, permutation, script public key, script type, and network.
41
+ * @returns A boolean indicating if the permutation matches the script.
42
+ */
43
+ function matchesScript({ pubKeys, perm, scriptPubKey, parsedScriptType, network, }) {
44
+ const pubKeysPerm = [pubKeys[perm[0]], pubKeys[perm[1]], pubKeys[perm[2]]];
45
+ const scriptTypes = (0, Psbt_1.toScriptType2Of3s)(parsedScriptType);
46
+ return scriptTypes.some((scriptType) => (0, outputScripts_1.createOutputScript2of3)(pubKeysPerm, scriptType, network).scriptPubKey.equals(scriptPubKey));
47
+ }
48
+ /**
49
+ * Finds the correct order of public keys to match a given script.
50
+ * @param pubKeys - Array of public keys involved in the script.
51
+ * @param scriptPubKey - The script public key to match against.
52
+ * @param parsedScriptType - The parsed script type.
53
+ * @param network - Bitcoin network.
54
+ * @returns The order of public keys that match the script.
55
+ */
56
+ function findSortOrderOfPubKeys(pubKeys, scriptPubKey, parsedScriptType, network) {
57
+ const permutations = [
58
+ [0, 1, 2],
59
+ [0, 2, 1],
60
+ [1, 0, 2],
61
+ [1, 2, 0],
62
+ [2, 0, 1],
63
+ [2, 1, 0],
64
+ ];
65
+ const order = permutations.find((perm) => matchesScript({ pubKeys, perm, scriptPubKey, parsedScriptType, network }));
66
+ assert(order, 'Could not find sort order of multi sig public keys');
67
+ return order;
68
+ }
69
+ /**
70
+ * Extracts multi-sig input data, including script type, script public key, and derivation path, from the first relevant PSBT input.
71
+ * @param psbt - The PSBT to extract data from.
72
+ * @returns An object containing the parsed script type, script public key, and derivation path.
73
+ */
74
+ function getFirstMultiSigInputData(psbt) {
75
+ function getScriptPubKey(input, prevOutIndex) {
76
+ var _a, _b;
77
+ const scriptPubKey = (_b = (_a = input.witnessUtxo) === null || _a === void 0 ? void 0 : _a.script) !== null && _b !== void 0 ? _b : (input.nonWitnessUtxo
78
+ ? (0, transaction_1.createTransactionFromBuffer)(input.nonWitnessUtxo, psbt.network, { amountType: 'bigint' }).outs[prevOutIndex]
79
+ .script
80
+ : undefined);
81
+ assert(scriptPubKey, 'Input scriptPubKey can not be found');
82
+ return scriptPubKey;
83
+ }
84
+ function getDerivationPath(input) {
85
+ var _a;
86
+ const bip32Dv = (_a = input === null || input === void 0 ? void 0 : input.bip32Derivation) !== null && _a !== void 0 ? _a : input === null || input === void 0 ? void 0 : input.tapBip32Derivation;
87
+ assert(bip32Dv === null || bip32Dv === void 0 ? void 0 : bip32Dv.length, 'Input Bip32Derivation can not be found');
88
+ return bip32Dv[0].path;
89
+ }
90
+ const txInputs = psbt.txInputs;
91
+ for (let i = 0; i < psbt.data.inputs.length; i++) {
92
+ const input = psbt.data.inputs[i];
93
+ const parsedScriptType = (0, Psbt_1.getPsbtInputScriptType)(input);
94
+ if (parsedScriptType === 'p2shP2pk') {
95
+ continue;
96
+ }
97
+ const scriptPubKey = getScriptPubKey(input, txInputs[i].index);
98
+ const derivationPath = getDerivationPath(input);
99
+ return { parsedScriptType, scriptPubKey, derivationPath };
100
+ }
101
+ throw new ErrorNoMultiSigInputFound('No multi sig input found');
102
+ }
103
+ /**
104
+ * Sorts given root nodes based on the script compatibility with the PSBT's multi-sig inputs.
105
+ * @param psbt - The PSBT containing multi-sig inputs.
106
+ * @param rootNodes - Array of root nodes to sort.
107
+ * @returns An array of BIP32Interface objects in the order that matches the multi-sig script.
108
+ */
109
+ function sortRootNodes(psbt, rootNodes) {
110
+ const { parsedScriptType, scriptPubKey, derivationPath } = getFirstMultiSigInputData(psbt);
111
+ const pubKeys = rootNodes.map((rootNode) => rootNode.derivePath(derivationPath).publicKey);
112
+ const order = findSortOrderOfPubKeys(pubKeys, scriptPubKey, parsedScriptType, psbt.network);
113
+ return order.map((i) => rootNodes[i]);
114
+ }
115
+ /**
116
+ * Retrieves sorted root nodes from a PSBT, ensuring they are ordered according to script compatibility.
117
+ * @param psbt - The PSBT to extract and sort root nodes from.
118
+ * @returns An array of sorted BIP32Interface root nodes.
119
+ */
120
+ function getSortedRootNodes(psbt) {
121
+ const unsortedRootNodes = getUnsortedRootNodes(psbt);
122
+ assert(unsortedRootNodes, 'Could not find root nodes in PSBT');
123
+ return sortRootNodes(psbt, unsortedRootNodes);
124
+ }
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdE5vZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9wc2J0L1Jvb3ROb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQThCSCxvREFNQztBQXdHRCxzQ0FLQztBQU9ELGdEQUlDO0FBMUpELGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFHdkMsdUNBQStDO0FBQy9DLGlDQUFxRDtBQUNyRCxrREFBbUQ7QUFHbkQsdURBQTZEO0FBRTdELG1EQUFnRTtBQUNoRSxrQ0FBb0U7QUFFcEU7O0tBRUs7QUFDTCxNQUFhLHlCQUEwQixTQUFRLEtBQUs7SUFDbEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCw4REFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFjOztJQUNqRCxNQUFNLE1BQU0sR0FBRyxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsMENBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDMUQsSUFBQSxvQkFBWSxFQUFDLGVBQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUN2RSxDQUFDO0lBQ0YsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUEsZ0JBQVEsRUFBQyxNQUFNLENBQUMsRUFBRSx3REFBd0QsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUcsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUNyQixPQUFPLEVBQ1AsSUFBSSxFQUNKLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxHQU9SO0lBQ0MsTUFBTSxX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LENBQUMsQ0FBQztJQUNyRCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUMvRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250YWlucyBoZWxwZXIgbWV0aG9kcyBmb3IgZ2V0dGluZyBhbmQgc29ydGluZyByb290IG5vZGVzIGZyb20gYSBQU0JULlxuICovXG5cbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgYnM1OGNoZWNrIGZyb20gJ2JzNThjaGVjayc7XG5cbmltcG9ydCB7IFV0eG9Qc2J0IH0gZnJvbSAnLi4vLi4vVXR4b1BzYnQnO1xuaW1wb3J0IHsgaXNUcmlwbGUsIFRyaXBsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJJUDMyRmFjdG9yeSwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdiaXAzMic7XG5pbXBvcnQgeyBlY2MgYXMgZWNjTGliIH0gZnJvbSAnLi4vLi4vLi4vbm9ibGVfZWNjJztcbmltcG9ydCB7IFBhcnNlZFNjcmlwdFR5cGUyT2YzIH0gZnJvbSAnLi4vLi4vcGFyc2VJbnB1dCc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vLi4vLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyB9IGZyb20gJy4uLy4uL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHsgUHNidElucHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRQc2J0SW5wdXRTY3JpcHRUeXBlLCB0b1NjcmlwdFR5cGUyT2YzcyB9IGZyb20gJy4uL1BzYnQnO1xuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIG5vIG11bHRpLXNpZyBpbnB1dCBpcyBmb3VuZCBpbiBhIFBTQlQuXG4gKiAqL1xuZXhwb3J0IGNsYXNzIEVycm9yTm9NdWx0aVNpZ0lucHV0Rm91bmQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHVuc29ydGVkIHJvb3QgQklQMzJJbnRlcmZhY2Ugbm9kZXMgZnJvbSBhIFBTQlQgaWYgYXZhaWxhYmxlLlxuICogQHBhcmFtIHBzYnQgLSBUaGUgUFNCVCBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGdsb2JhbCBYcHVicy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEJJUDMySW50ZXJmYWNlIG9iamVjdHMgb3IgdW5kZWZpbmVkIGlmIG5vdCBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbnNvcnRlZFJvb3ROb2Rlcyhwc2J0OiBVdHhvUHNidCk6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4gfCB1bmRlZmluZWQge1xuICBjb25zdCBiaXAzMnMgPSBwc2J0LmRhdGEuZ2xvYmFsTWFwLmdsb2JhbFhwdWI/Lm1hcCgoeHB1YikgPT5cbiAgICBCSVAzMkZhY3RvcnkoZWNjTGliKS5mcm9tQmFzZTU4KGJzNThjaGVjay5lbmNvZGUoeHB1Yi5leHRlbmRlZFB1YmtleSkpXG4gICk7XG4gIGFzc2VydCghYmlwMzJzIHx8IGlzVHJpcGxlKGJpcDMycyksIGBJbnZhbGlkIGdsb2JhbFhwdWJzIGluIFBTQlQuIEV4cGVjdGVkIDMgb3Igbm9uZS4gR290ICR7YmlwMzJzPy5sZW5ndGh9YCk7XG4gIHJldHVybiBiaXAzMnM7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gcHVibGljIGtleXMnIHBlcm11dGF0aW9uIG1hdGNoZXMgYSBzcGVjaWZpZWQgc2NyaXB0LlxuICogQHBhcmFtIHBhcmFtcyAtIE9iamVjdCBjb250YWluaW5nIHB1YmxpYyBrZXlzLCBwZXJtdXRhdGlvbiwgc2NyaXB0IHB1YmxpYyBrZXksIHNjcmlwdCB0eXBlLCBhbmQgbmV0d29yay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBwZXJtdXRhdGlvbiBtYXRjaGVzIHRoZSBzY3JpcHQuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTY3JpcHQoe1xuICBwdWJLZXlzLFxuICBwZXJtLFxuICBzY3JpcHRQdWJLZXksXG4gIHBhcnNlZFNjcmlwdFR5cGUsXG4gIG5ldHdvcmssXG59OiB7XG4gIHB1YktleXM6IEJ1ZmZlcltdO1xuICBwZXJtOiBUcmlwbGU8bnVtYmVyPjtcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIHBhcnNlZFNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzO1xuICBuZXR3b3JrOiBOZXR3b3JrO1xufSk6IGJvb2xlYW4ge1xuICBjb25zdCBwdWJLZXlzUGVybTogVHJpcGxlPEJ1ZmZlcj4gPSBbcHViS2V5c1twZXJtWzBdXSwgcHViS2V5c1twZXJtWzFdXSwgcHViS2V5c1twZXJtWzJdXV07XG4gIGNvbnN0IHNjcmlwdFR5cGVzID0gdG9TY3JpcHRUeXBlMk9mM3MocGFyc2VkU2NyaXB0VHlwZSk7XG4gIHJldHVybiBzY3JpcHRUeXBlcy5zb21lKChzY3JpcHRUeXBlKSA9PlxuICAgIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMocHViS2V5c1Blcm0sIHNjcmlwdFR5cGUsIG5ldHdvcmspLnNjcmlwdFB1YktleS5lcXVhbHMoc2NyaXB0UHViS2V5KVxuICApO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBjb3JyZWN0IG9yZGVyIG9mIHB1YmxpYyBrZXlzIHRvIG1hdGNoIGEgZ2l2ZW4gc2NyaXB0LlxuICogQHBhcmFtIHB1YktleXMgLSBBcnJheSBvZiBwdWJsaWMga2V5cyBpbnZvbHZlZCBpbiB0aGUgc2NyaXB0LlxuICogQHBhcmFtIHNjcmlwdFB1YktleSAtIFRoZSBzY3JpcHQgcHVibGljIGtleSB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHBhcnNlZFNjcmlwdFR5cGUgLSBUaGUgcGFyc2VkIHNjcmlwdCB0eXBlLlxuICogQHBhcmFtIG5ldHdvcmsgLSBCaXRjb2luIG5ldHdvcmsuXG4gKiBAcmV0dXJucyBUaGUgb3JkZXIgb2YgcHVibGljIGtleXMgdGhhdCBtYXRjaCB0aGUgc2NyaXB0LlxuICovXG5mdW5jdGlvbiBmaW5kU29ydE9yZGVyT2ZQdWJLZXlzKFxuICBwdWJLZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXIsXG4gIHBhcnNlZFNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzLFxuICBuZXR3b3JrOiBOZXR3b3JrXG4pOiBUcmlwbGU8bnVtYmVyPiB7XG4gIGNvbnN0IHBlcm11dGF0aW9uczogQXJyYXk8VHJpcGxlPG51bWJlcj4+ID0gW1xuICAgIFswLCAxLCAyXSxcbiAgICBbMCwgMiwgMV0sXG4gICAgWzEsIDAsIDJdLFxuICAgIFsxLCAyLCAwXSxcbiAgICBbMiwgMCwgMV0sXG4gICAgWzIsIDEsIDBdLFxuICBdO1xuXG4gIGNvbnN0IG9yZGVyID0gcGVybXV0YXRpb25zLmZpbmQoKHBlcm0pID0+IG1hdGNoZXNTY3JpcHQoeyBwdWJLZXlzLCBwZXJtLCBzY3JpcHRQdWJLZXksIHBhcnNlZFNjcmlwdFR5cGUsIG5ldHdvcmsgfSkpO1xuICBhc3NlcnQob3JkZXIsICdDb3VsZCBub3QgZmluZCBzb3J0IG9yZGVyIG9mIG11bHRpIHNpZyBwdWJsaWMga2V5cycpO1xuICByZXR1cm4gb3JkZXI7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgbXVsdGktc2lnIGlucHV0IGRhdGEsIGluY2x1ZGluZyBzY3JpcHQgdHlwZSwgc2NyaXB0IHB1YmxpYyBrZXksIGFuZCBkZXJpdmF0aW9uIHBhdGgsIGZyb20gdGhlIGZpcnN0IHJlbGV2YW50IFBTQlQgaW5wdXQuXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIHRvIGV4dHJhY3QgZGF0YSBmcm9tLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBzY3JpcHQgdHlwZSwgc2NyaXB0IHB1YmxpYyBrZXksIGFuZCBkZXJpdmF0aW9uIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0TXVsdGlTaWdJbnB1dERhdGEocHNidDogVXR4b1BzYnQpOiB7XG4gIHBhcnNlZFNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzO1xuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcjtcbiAgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbn0ge1xuICBmdW5jdGlvbiBnZXRTY3JpcHRQdWJLZXkoaW5wdXQ6IFBzYnRJbnB1dCwgcHJldk91dEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzY3JpcHRQdWJLZXkgPVxuICAgICAgaW5wdXQud2l0bmVzc1V0eG8/LnNjcmlwdCA/P1xuICAgICAgKGlucHV0Lm5vbldpdG5lc3NVdHhvXG4gICAgICAgID8gY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGlucHV0Lm5vbldpdG5lc3NVdHhvLCBwc2J0Lm5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSkub3V0c1twcmV2T3V0SW5kZXhdXG4gICAgICAgICAgICAuc2NyaXB0XG4gICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQoc2NyaXB0UHViS2V5LCAnSW5wdXQgc2NyaXB0UHViS2V5IGNhbiBub3QgYmUgZm91bmQnKTtcbiAgICByZXR1cm4gc2NyaXB0UHViS2V5O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVyaXZhdGlvblBhdGgoaW5wdXQ6IFBzYnRJbnB1dCkge1xuICAgIGNvbnN0IGJpcDMyRHYgPSBpbnB1dD8uYmlwMzJEZXJpdmF0aW9uID8/IGlucHV0Py50YXBCaXAzMkRlcml2YXRpb247XG4gICAgYXNzZXJ0KGJpcDMyRHY/Lmxlbmd0aCwgJ0lucHV0IEJpcDMyRGVyaXZhdGlvbiBjYW4gbm90IGJlIGZvdW5kJyk7XG4gICAgcmV0dXJuIGJpcDMyRHZbMF0ucGF0aDtcbiAgfVxuXG4gIGNvbnN0IHR4SW5wdXRzID0gcHNidC50eElucHV0cztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpbnB1dCA9IHBzYnQuZGF0YS5pbnB1dHNbaV07XG4gICAgY29uc3QgcGFyc2VkU2NyaXB0VHlwZSA9IGdldFBzYnRJbnB1dFNjcmlwdFR5cGUoaW5wdXQpO1xuICAgIGlmIChwYXJzZWRTY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2NyaXB0UHViS2V5ID0gZ2V0U2NyaXB0UHViS2V5KGlucHV0LCB0eElucHV0c1tpXS5pbmRleCk7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSBnZXREZXJpdmF0aW9uUGF0aChpbnB1dCk7XG4gICAgcmV0dXJuIHsgcGFyc2VkU2NyaXB0VHlwZSwgc2NyaXB0UHViS2V5LCBkZXJpdmF0aW9uUGF0aCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yTm9NdWx0aVNpZ0lucHV0Rm91bmQoJ05vIG11bHRpIHNpZyBpbnB1dCBmb3VuZCcpO1xufVxuXG4vKipcbiAqIFNvcnRzIGdpdmVuIHJvb3Qgbm9kZXMgYmFzZWQgb24gdGhlIHNjcmlwdCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFBTQlQncyBtdWx0aS1zaWcgaW5wdXRzLlxuICogQHBhcmFtIHBzYnQgLSBUaGUgUFNCVCBjb250YWluaW5nIG11bHRpLXNpZyBpbnB1dHMuXG4gKiBAcGFyYW0gcm9vdE5vZGVzIC0gQXJyYXkgb2Ygcm9vdCBub2RlcyB0byBzb3J0LlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgQklQMzJJbnRlcmZhY2Ugb2JqZWN0cyBpbiB0aGUgb3JkZXIgdGhhdCBtYXRjaGVzIHRoZSBtdWx0aS1zaWcgc2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFJvb3ROb2Rlcyhwc2J0OiBVdHhvUHNidCwgcm9vdE5vZGVzOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiB7XG4gIGNvbnN0IHsgcGFyc2VkU2NyaXB0VHlwZSwgc2NyaXB0UHViS2V5LCBkZXJpdmF0aW9uUGF0aCB9ID0gZ2V0Rmlyc3RNdWx0aVNpZ0lucHV0RGF0YShwc2J0KTtcbiAgY29uc3QgcHViS2V5cyA9IHJvb3ROb2Rlcy5tYXAoKHJvb3ROb2RlKSA9PiByb290Tm9kZS5kZXJpdmVQYXRoKGRlcml2YXRpb25QYXRoKS5wdWJsaWNLZXkpIGFzIFRyaXBsZTxCdWZmZXI+O1xuICBjb25zdCBvcmRlciA9IGZpbmRTb3J0T3JkZXJPZlB1YktleXMocHViS2V5cywgc2NyaXB0UHViS2V5LCBwYXJzZWRTY3JpcHRUeXBlLCBwc2J0Lm5ldHdvcmspO1xuICByZXR1cm4gb3JkZXIubWFwKChpKSA9PiByb290Tm9kZXNbaV0pIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT47XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHNvcnRlZCByb290IG5vZGVzIGZyb20gYSBQU0JULCBlbnN1cmluZyB0aGV5IGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byBzY3JpcHQgY29tcGF0aWJpbGl0eS5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gZXh0cmFjdCBhbmQgc29ydCByb290IG5vZGVzIGZyb20uXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzb3J0ZWQgQklQMzJJbnRlcmZhY2Ugcm9vdCBub2Rlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRlZFJvb3ROb2Rlcyhwc2J0OiBVdHhvUHNidCk6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4ge1xuICBjb25zdCB1bnNvcnRlZFJvb3ROb2RlcyA9IGdldFVuc29ydGVkUm9vdE5vZGVzKHBzYnQpO1xuICBhc3NlcnQodW5zb3J0ZWRSb290Tm9kZXMsICdDb3VsZCBub3QgZmluZCByb290IG5vZGVzIGluIFBTQlQnKTtcbiAgcmV0dXJuIHNvcnRSb290Tm9kZXMocHNidCwgdW5zb3J0ZWRSb290Tm9kZXMpO1xufVxuIl19
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  /**
3
2
  * Transaction (de)serialization helpers.
4
3
  * Only supports full transparent transactions without shielded inputs or outputs.
@@ -9,7 +8,7 @@
9
8
  import { TxInput, TxOutput } from 'bitcoinjs-lib';
10
9
  import { BufferReader, BufferWriter } from 'bitcoinjs-lib/src/bufferutils';
11
10
  import { ZcashTransaction } from './ZcashTransaction';
12
- export declare const VALUE_INT64_ZERO: Buffer;
11
+ export declare const VALUE_INT64_ZERO: Buffer<ArrayBuffer>;
13
12
  export declare function readInputs(bufferReader: BufferReader): TxInput[];
14
13
  export declare function readOutputs<TNumber extends number | bigint>(bufferReader: BufferReader, amountType?: 'number' | 'bigint'): TxOutput<TNumber>[];
15
14
  export declare function readEmptyVector(bufferReader: BufferReader): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ZcashBufferutils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashBufferutils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAA+B,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAEvE,wBAAgB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,EAAE,CAahE;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzD,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAUrB;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAKhE;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAOvE;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIxE;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIvE;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIzE;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,IAAI,CAyBN;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,IAAI,CAaN;AAED,wBAAgB,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAQ5E;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GACxB,IAAI,CAWN;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxD,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC5B,IAAI,CAoBN;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxD,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC5B,IAAI,CAYN"}
1
+ {"version":3,"file":"ZcashBufferutils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashBufferutils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAA+B,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,eAAO,MAAM,gBAAgB,qBAAyC,CAAC;AAEvE,wBAAgB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,EAAE,CAahE;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzD,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAUrB;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAKhE;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAOvE;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIxE;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIvE;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIzE;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,IAAI,CAyBN;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,IAAI,CAaN;AAED,wBAAgB,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAQ5E;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GACxB,IAAI,CAWN;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxD,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC5B,IAAI,CAoBN;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxD,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC5B,IAAI,CAYN"}
@@ -1,6 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toBufferV5 = exports.toBufferV4 = exports.writeOutputs = exports.writeInputs = exports.fromBufferV5 = exports.fromBufferV4 = exports.writeEmptySamplingBundle = exports.readEmptySaplingBundle = exports.writeEmptyOrchardBundle = exports.readEmptyOrchardBundle = exports.readEmptyVector = exports.readOutputs = exports.readInputs = exports.VALUE_INT64_ZERO = void 0;
3
+ exports.VALUE_INT64_ZERO = void 0;
4
+ exports.readInputs = readInputs;
5
+ exports.readOutputs = readOutputs;
6
+ exports.readEmptyVector = readEmptyVector;
7
+ exports.readEmptyOrchardBundle = readEmptyOrchardBundle;
8
+ exports.writeEmptyOrchardBundle = writeEmptyOrchardBundle;
9
+ exports.readEmptySaplingBundle = readEmptySaplingBundle;
10
+ exports.writeEmptySamplingBundle = writeEmptySamplingBundle;
11
+ exports.fromBufferV4 = fromBufferV4;
12
+ exports.fromBufferV5 = fromBufferV5;
13
+ exports.writeInputs = writeInputs;
14
+ exports.writeOutputs = writeOutputs;
15
+ exports.toBufferV4 = toBufferV4;
16
+ exports.toBufferV5 = toBufferV5;
4
17
  const ZcashTransaction_1 = require("./ZcashTransaction");
5
18
  exports.VALUE_INT64_ZERO = Buffer.from('0000000000000000', 'hex');
6
19
  function readInputs(bufferReader) {
@@ -17,7 +30,6 @@ function readInputs(bufferReader) {
17
30
  }
18
31
  return ins;
19
32
  }
20
- exports.readInputs = readInputs;
21
33
  function readOutputs(bufferReader, amountType = 'number') {
22
34
  const voutLen = bufferReader.readVarInt();
23
35
  const outs = [];
@@ -29,14 +41,12 @@ function readOutputs(bufferReader, amountType = 'number') {
29
41
  }
30
42
  return outs;
31
43
  }
32
- exports.readOutputs = readOutputs;
33
44
  function readEmptyVector(bufferReader) {
34
45
  const n = bufferReader.readVarInt();
35
46
  if (n !== 0) {
36
47
  throw new ZcashTransaction_1.UnsupportedTransactionError(`expected empty vector`);
37
48
  }
38
49
  }
39
- exports.readEmptyVector = readEmptyVector;
40
50
  function readEmptyOrchardBundle(bufferReader) {
41
51
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/orchard.h#L66
42
52
  // https://github.com/zcash/librustzcash/blob/edcde252de221d4851f1e5145306c2caf95453bc/zcash_primitives/src/transaction/components/orchard.rs#L36
@@ -45,25 +55,21 @@ function readEmptyOrchardBundle(bufferReader) {
45
55
  throw new ZcashTransaction_1.UnsupportedTransactionError(`expected byte 0x00`);
46
56
  }
47
57
  }
48
- exports.readEmptyOrchardBundle = readEmptyOrchardBundle;
49
58
  function writeEmptyOrchardBundle(bufferWriter) {
50
59
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/orchard.h#L66
51
60
  // https://github.com/zcash/librustzcash/blob/edcde252de221d4851f1e5145306c2caf95453bc/zcash_primitives/src/transaction/components/orchard.rs#L201
52
61
  bufferWriter.writeUInt8(0);
53
62
  }
54
- exports.writeEmptyOrchardBundle = writeEmptyOrchardBundle;
55
63
  function readEmptySaplingBundle(bufferReader) {
56
64
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L283
57
65
  readEmptyVector(bufferReader) /* vSpendsSapling */;
58
66
  readEmptyVector(bufferReader) /* vOutputsSapling */;
59
67
  }
60
- exports.readEmptySaplingBundle = readEmptySaplingBundle;
61
68
  function writeEmptySamplingBundle(bufferWriter) {
62
69
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L283
63
70
  bufferWriter.writeVarInt(0) /* vSpendsSapling */;
64
71
  bufferWriter.writeVarInt(0) /* vOutputsSapling */;
65
72
  }
66
- exports.writeEmptySamplingBundle = writeEmptySamplingBundle;
67
73
  function fromBufferV4(bufferReader, tx, amountType = 'number') {
68
74
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L855-L857
69
75
  tx.ins = readInputs(bufferReader);
@@ -86,7 +92,6 @@ function fromBufferV4(bufferReader, tx, amountType = 'number') {
86
92
  readEmptyVector(bufferReader) /* vJoinSplit */;
87
93
  }
88
94
  }
89
- exports.fromBufferV4 = fromBufferV4;
90
95
  function fromBufferV5(bufferReader, tx, amountType = 'number') {
91
96
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L815
92
97
  tx.consensusBranchId = bufferReader.readUInt32();
@@ -99,7 +104,6 @@ function fromBufferV5(bufferReader, tx, amountType = 'number') {
99
104
  readEmptySaplingBundle(bufferReader);
100
105
  readEmptyOrchardBundle(bufferReader);
101
106
  }
102
- exports.fromBufferV5 = fromBufferV5;
103
107
  function writeInputs(bufferWriter, ins) {
104
108
  bufferWriter.writeVarInt(ins.length);
105
109
  ins.forEach(function (txIn) {
@@ -109,7 +113,6 @@ function writeInputs(bufferWriter, ins) {
109
113
  bufferWriter.writeUInt32(txIn.sequence);
110
114
  });
111
115
  }
112
- exports.writeInputs = writeInputs;
113
116
  function writeOutputs(bufferWriter, outs) {
114
117
  bufferWriter.writeVarInt(outs.length);
115
118
  outs.forEach(function (txOut) {
@@ -122,7 +125,6 @@ function writeOutputs(bufferWriter, outs) {
122
125
  bufferWriter.writeVarSlice(txOut.script);
123
126
  });
124
127
  }
125
- exports.writeOutputs = writeOutputs;
126
128
  function toBufferV4(bufferWriter, tx) {
127
129
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L1083
128
130
  writeInputs(bufferWriter, tx.ins);
@@ -140,7 +142,6 @@ function toBufferV4(bufferWriter, tx) {
140
142
  bufferWriter.writeVarInt(0); // joinsSplits length
141
143
  }
142
144
  }
143
- exports.toBufferV4 = toBufferV4;
144
145
  function toBufferV5(bufferWriter, tx) {
145
146
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L825-L826
146
147
  bufferWriter.writeUInt32(tx.consensusBranchId);
@@ -153,5 +154,4 @@ function toBufferV5(bufferWriter, tx) {
153
154
  // https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L1081
154
155
  writeEmptyOrchardBundle(bufferWriter);
155
156
  }
156
- exports.toBufferV5 = toBufferV5;
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hCdWZmZXJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby96Y2FzaC9aY2FzaEJ1ZmZlcnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLHlEQUFtRjtBQUV0RSxRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFdkUsU0FBZ0IsVUFBVSxDQUFDLFlBQTBCO0lBQ25ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsSUFBSSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEtBQUssRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFO1lBQ25DLFFBQVEsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFiRCxnQ0FhQztBQUVELFNBQWdCLFdBQVcsQ0FDekIsWUFBMEIsRUFDMUIsYUFBa0MsUUFBUTtJQUUxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQXdCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDUixLQUFLLEVBQUUs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QUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLFlBQVksQ0FBVSxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDLGdGQUFnRjtJQUNoRix3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxnRkFBZ0Y7SUFDaEYsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQWZELGdDQWVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbiAoZGUpc2VyaWFsaXphdGlvbiBoZWxwZXJzLlxuICogT25seSBzdXBwb3J0cyBmdWxsIHRyYW5zcGFyZW50IHRyYW5zYWN0aW9ucyB3aXRob3V0IHNoaWVsZGVkIGlucHV0cyBvciBvdXRwdXRzLlxuICpcbiAqIFJlZmVyZW5jZXM6XG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w3NzFcbiAqL1xuaW1wb3J0IHsgVHhJbnB1dCwgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IEJ1ZmZlclJlYWRlciwgQnVmZmVyV3JpdGVyIH0gZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvYnVmZmVydXRpbHMnO1xuXG5pbXBvcnQgeyBVbnN1cHBvcnRlZFRyYW5zYWN0aW9uRXJyb3IsIFpjYXNoVHJhbnNhY3Rpb24gfSBmcm9tICcuL1pjYXNoVHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgVkFMVUVfSU5UNjRfWkVSTyA9IEJ1ZmZlci5mcm9tKCcwMDAwMDAwMDAwMDAwMDAwJywgJ2hleCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZElucHV0cyhidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcik6IFR4SW5wdXRbXSB7XG4gIGNvbnN0IHZpbkxlbiA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gIGNvbnN0IGluczogVHhJbnB1dFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmluTGVuOyArK2kpIHtcbiAgICBpbnMucHVzaCh7XG4gICAgICBoYXNoOiBidWZmZXJSZWFkZXIucmVhZFNsaWNlKDMyKSxcbiAgICAgIGluZGV4OiBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpLFxuICAgICAgc2NyaXB0OiBidWZmZXJSZWFkZXIucmVhZFZhclNsaWNlKCksXG4gICAgICBzZXF1ZW5jZTogYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKSxcbiAgICAgIHdpdG5lc3M6IFtdLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3V0cHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogVHhPdXRwdXQ8VE51bWJlcj5bXSB7XG4gIGNvbnN0IHZvdXRMZW4gPSBidWZmZXJSZWFkZXIucmVhZFZhckludCgpO1xuICBjb25zdCBvdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdm91dExlbjsgKytpKSB7XG4gICAgb3V0cy5wdXNoKHtcbiAgICAgIHZhbHVlOiAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBidWZmZXJSZWFkZXIucmVhZFVJbnQ2NEJpZ0ludCgpIDogYnVmZmVyUmVhZGVyLnJlYWRVSW50NjQoKSkgYXMgVE51bWJlcixcbiAgICAgIHNjcmlwdDogYnVmZmVyUmVhZGVyLnJlYWRWYXJTbGljZSgpLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogdm9pZCB7XG4gIGNvbnN0IG4gPSBidWZmZXJSZWFkZXIucmVhZFZhckludCgpO1xuICBpZiAobiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFRyYW5zYWN0aW9uRXJyb3IoYGV4cGVjdGVkIGVtcHR5IHZlY3RvcmApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRW1wdHlPcmNoYXJkQnVuZGxlKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy9vcmNoYXJkLmgjTDY2XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC9saWJydXN0emNhc2gvYmxvYi9lZGNkZTI1MmRlMjIxZDQ4NTFmMWU1MTQ1MzA2YzJjYWY5NTQ1M2JjL3pjYXNoX3ByaW1pdGl2ZXMvc3JjL3RyYW5zYWN0aW9uL2NvbXBvbmVudHMvb3JjaGFyZC5ycyNMMzZcbiAgY29uc3QgdiA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDgoKTtcbiAgaWYgKHYgIT09IDB4MDApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRUcmFuc2FjdGlvbkVycm9yKGBleHBlY3RlZCBieXRlIDB4MDBgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyV3JpdGVyOiBCdWZmZXJXcml0ZXIpOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL29yY2hhcmQuaCNMNjZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL2xpYnJ1c3R6Y2FzaC9ibG9iL2VkY2RlMjUyZGUyMjFkNDg1MWYxZTUxNDUzMDZjMmNhZjk1NDUzYmMvemNhc2hfcHJpbWl0aXZlcy9zcmMvdHJhbnNhY3Rpb24vY29tcG9uZW50cy9vcmNoYXJkLnJzI0wyMDFcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDgoMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRW1wdHlTYXBsaW5nQnVuZGxlKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wyODNcbiAgcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcikgLyogdlNwZW5kc1NhcGxpbmcgKi87XG4gIHJlYWRFbXB0eVZlY3RvcihidWZmZXJSZWFkZXIpIC8qIHZPdXRwdXRzU2FwbGluZyAqLztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRW1wdHlTYW1wbGluZ0J1bmRsZShidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMMjgzXG4gIGJ1ZmZlcldyaXRlci53cml0ZVZhckludCgwKSAvKiB2U3BlbmRzU2FwbGluZyAqLztcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApIC8qIHZPdXRwdXRzU2FwbGluZyAqLztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21CdWZmZXJWNDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIsXG4gIHR4OiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODU1LUw4NTdcbiAgdHguaW5zID0gcmVhZElucHV0cyhidWZmZXJSZWFkZXIpO1xuICB0eC5vdXRzID0gcmVhZE91dHB1dHM8VE51bWJlcj4oYnVmZmVyUmVhZGVyLCBhbW91bnRUeXBlKTtcbiAgdHgubG9ja3RpbWUgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuXG4gIGlmICh0eC5pc092ZXJ3aW50ZXJDb21wYXRpYmxlKCkpIHtcbiAgICB0eC5leHBpcnlIZWlnaHQgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuICB9XG5cbiAgaWYgKHR4LmlzU2FwbGluZ0NvbXBhdGlibGUoKSkge1xuICAgIGNvbnN0IHZhbHVlQmFsYW5jZSA9IGJ1ZmZlclJlYWRlci5yZWFkU2xpY2UoOCk7XG4gICAgaWYgKCF2YWx1ZUJhbGFuY2UuZXF1YWxzKFZBTFVFX0lOVDY0X1pFUk8pKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVHJhbnNhY3Rpb25FcnJvcihgdmFsdWVCYWxhbmNlIG11c3QgYmUgemVyb2ApO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4NjNcbiAgICByZWFkRW1wdHlTYXBsaW5nQnVuZGxlKGJ1ZmZlclJlYWRlcik7XG4gIH1cblxuICBpZiAodHguc3VwcG9ydHNKb2luU3BsaXRzKCkpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODY5XG4gICAgcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcikgLyogdkpvaW5TcGxpdCAqLztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUJ1ZmZlclY1PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcixcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4MTVcbiAgdHguY29uc2Vuc3VzQnJhbmNoSWQgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuICB0eC5sb2NrdGltZSA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gIHR4LmV4cGlyeUhlaWdodCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDgyOFxuICB0eC5pbnMgPSByZWFkSW5wdXRzKGJ1ZmZlclJlYWRlcik7XG4gIHR4Lm91dHMgPSByZWFkT3V0cHV0czxUTnVtYmVyPihidWZmZXJSZWFkZXIsIGFtb3VudFR5cGUpO1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4MzVcbiAgcmVhZEVtcHR5U2FwbGluZ0J1bmRsZShidWZmZXJSZWFkZXIpO1xuICByZWFkRW1wdHlPcmNoYXJkQnVuZGxlKGJ1ZmZlclJlYWRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUlucHV0cyhidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlciwgaW5zOiBUeElucHV0W10pOiB2b2lkIHtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KGlucy5sZW5ndGgpO1xuICBpbnMuZm9yRWFjaChmdW5jdGlvbiAodHhJbikge1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHR4SW4uaGFzaCk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4SW4uaW5kZXgpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhclNsaWNlKHR4SW4uc2NyaXB0KTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5zZXF1ZW5jZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcixcbiAgb3V0czogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogdm9pZCB7XG4gIGJ1ZmZlcldyaXRlci53cml0ZVZhckludChvdXRzLmxlbmd0aCk7XG4gIG91dHMuZm9yRWFjaChmdW5jdGlvbiAodHhPdXQpIHtcbiAgICBpZiAoKHR4T3V0IGFzIGFueSkudmFsdWVCdWZmZXIpIHtcbiAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKCh0eE91dCBhcyBhbnkpLnZhbHVlQnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDY0KHR4T3V0LnZhbHVlKTtcbiAgICB9XG5cbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZSh0eE91dC5zY3JpcHQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQnVmZmVyVjQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLFxuICB0eDogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wxMDgzXG4gIHdyaXRlSW5wdXRzKGJ1ZmZlcldyaXRlciwgdHguaW5zKTtcbiAgd3JpdGVPdXRwdXRzPFROdW1iZXI+KGJ1ZmZlcldyaXRlciwgdHgub3V0cyk7XG5cbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmxvY2t0aW1lKTtcblxuICBpZiAodHguaXNPdmVyd2ludGVyQ29tcGF0aWJsZSgpKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmV4cGlyeUhlaWdodCk7XG4gIH1cblxuICBpZiAodHguaXNTYXBsaW5nQ29tcGF0aWJsZSgpKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UoVkFMVUVfSU5UNjRfWkVSTyk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApOyAvLyB2U2hpZWxkZWRTcGVuZExlbmd0aFxuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhckludCgwKTsgLy8gdlNoaWVsZGVkT3V0cHV0TGVuZ3RoXG4gIH1cblxuICBpZiAodHguc3VwcG9ydHNKb2luU3BsaXRzKCkpIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoMCk7IC8vIGpvaW5zU3BsaXRzIGxlbmd0aFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0J1ZmZlclY1PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcixcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj5cbik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODI1LUw4MjZcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmNvbnNlbnN1c0JyYW5jaElkKTtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmxvY2t0aW1lKTtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmV4cGlyeUhlaWdodCk7XG4gIHdyaXRlSW5wdXRzKGJ1ZmZlcldyaXRlciwgdHguaW5zKTtcbiAgd3JpdGVPdXRwdXRzPFROdW1iZXI+KGJ1ZmZlcldyaXRlciwgdHgub3V0cyk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDEwNjNcbiAgd3JpdGVFbXB0eVNhbXBsaW5nQnVuZGxlKGJ1ZmZlcldyaXRlcik7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wxMDgxXG4gIHdyaXRlRW1wdHlPcmNoYXJkQnVuZGxlKGJ1ZmZlcldyaXRlcik7XG59XG4iXX0=
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hCdWZmZXJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby96Y2FzaC9aY2FzaEJ1ZmZlcnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLGdDQWFDO0FBRUQsa0NBYUM7QUFFRCwwQ0FLQztBQUVELHdEQU9DO0FBRUQsMERBSUM7QUFFRCx3REFJQztBQUVELDREQUlDO0FBRUQsb0NBNkJDO0FBRUQsb0NBaUJDO0FBRUQsa0NBUUM7QUFFRCxvQ0FjQztBQUVELGdDQXVCQztBQUVELGdDQWVDO0FBeExELHlEQUFtRjtBQUV0RSxRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFdkUsU0FBZ0IsVUFBVSxDQUFDLFlBQTBCO0lBQ25ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDaEMsTUFBTSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDbkMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUN6QixZQUEwQixFQUMxQixhQUFrQyxRQUFRO0lBRTFDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FB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LENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO0lBQ3BELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUN4QixZQUEwQixFQUMxQixFQUE2QjtJQUU3QixvRkFBb0Y7SUFDcEYsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxZQUFZLENBQVUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3QyxnRkFBZ0Y7SUFDaEYsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsZ0ZBQWdGO0lBQ2hGLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zYWN0aW9uIChkZSlzZXJpYWxpemF0aW9uIGhlbHBlcnMuXG4gKiBPbmx5IHN1cHBvcnRzIGZ1bGwgdHJhbnNwYXJlbnQgdHJhbnNhY3Rpb25zIHdpdGhvdXQgc2hpZWxkZWQgaW5wdXRzIG9yIG91dHB1dHMuXG4gKlxuICogUmVmZXJlbmNlczpcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDc3MVxuICovXG5pbXBvcnQgeyBUeElucHV0LCBUeE91dHB1dCB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgQnVmZmVyUmVhZGVyLCBCdWZmZXJXcml0ZXIgfSBmcm9tICdiaXRjb2luanMtbGliL3NyYy9idWZmZXJ1dGlscyc7XG5cbmltcG9ydCB7IFVuc3VwcG9ydGVkVHJhbnNhY3Rpb25FcnJvciwgWmNhc2hUcmFuc2FjdGlvbiB9IGZyb20gJy4vWmNhc2hUcmFuc2FjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBWQUxVRV9JTlQ2NF9aRVJPID0gQnVmZmVyLmZyb20oJzAwMDAwMDAwMDAwMDAwMDAnLCAnaGV4Jyk7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSW5wdXRzKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogVHhJbnB1dFtdIHtcbiAgY29uc3QgdmluTGVuID0gYnVmZmVyUmVhZGVyLnJlYWRWYXJJbnQoKTtcbiAgY29uc3QgaW5zOiBUeElucHV0W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aW5MZW47ICsraSkge1xuICAgIGlucy5wdXNoKHtcbiAgICAgIGhhc2g6IGJ1ZmZlclJlYWRlci5yZWFkU2xpY2UoMzIpLFxuICAgICAgaW5kZXg6IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCksXG4gICAgICBzY3JpcHQ6IGJ1ZmZlclJlYWRlci5yZWFkVmFyU2xpY2UoKSxcbiAgICAgIHNlcXVlbmNlOiBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpLFxuICAgICAgd2l0bmVzczogW10sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcixcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiBUeE91dHB1dDxUTnVtYmVyPltdIHtcbiAgY29uc3Qgdm91dExlbiA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gIGNvbnN0IG91dHM6IFR4T3V0cHV0PFROdW1iZXI+W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2b3V0TGVuOyArK2kpIHtcbiAgICBvdXRzLnB1c2goe1xuICAgICAgdmFsdWU6IChhbW91bnRUeXBlID09PSAnYmlnaW50JyA/IGJ1ZmZlclJlYWRlci5yZWFkVUludDY0QmlnSW50KCkgOiBidWZmZXJSZWFkZXIucmVhZFVJbnQ2NCgpKSBhcyBUTnVtYmVyLFxuICAgICAgc2NyaXB0OiBidWZmZXJSZWFkZXIucmVhZFZhclNsaWNlKCksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRW1wdHlWZWN0b3IoYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIpOiB2b2lkIHtcbiAgY29uc3QgbiA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gIGlmIChuICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVHJhbnNhY3Rpb25FcnJvcihgZXhwZWN0ZWQgZW1wdHkgdmVjdG9yYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIpOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL29yY2hhcmQuaCNMNjZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL2xpYnJ1c3R6Y2FzaC9ibG9iL2VkY2RlMjUyZGUyMjFkNDg1MWYxZTUxNDUzMDZjMmNhZjk1NDUzYmMvemNhc2hfcHJpbWl0aXZlcy9zcmMvdHJhbnNhY3Rpb24vY29tcG9uZW50cy9vcmNoYXJkLnJzI0wzNlxuICBjb25zdCB2ID0gYnVmZmVyUmVhZGVyLnJlYWRVSW50OCgpO1xuICBpZiAodiAhPT0gMHgwMCkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFRyYW5zYWN0aW9uRXJyb3IoYGV4cGVjdGVkIGJ5dGUgMHgwMGApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUVtcHR5T3JjaGFyZEJ1bmRsZShidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvb3JjaGFyZC5oI0w2NlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvbGlicnVzdHpjYXNoL2Jsb2IvZWRjZGUyNTJkZTIyMWQ0ODUxZjFlNTE0NTMwNmMyY2FmOTU0NTNiYy96Y2FzaF9wcmltaXRpdmVzL3NyYy90cmFuc2FjdGlvbi9jb21wb25lbnRzL29yY2hhcmQucnMjTDIwMVxuICBidWZmZXJXcml0ZXIud3JpdGVVSW50OCgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRFbXB0eVNhcGxpbmdCdW5kbGUoYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIpOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDI4M1xuICByZWFkRW1wdHlWZWN0b3IoYnVmZmVyUmVhZGVyKSAvKiB2U3BlbmRzU2FwbGluZyAqLztcbiAgcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcikgLyogdk91dHB1dHNTYXBsaW5nICovO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVFbXB0eVNhbXBsaW5nQnVuZGxlKGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wyODNcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApIC8qIHZTcGVuZHNTYXBsaW5nICovO1xuICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoMCkgLyogdk91dHB1dHNTYXBsaW5nICovO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUJ1ZmZlclY0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcixcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4NTUtTDg1N1xuICB0eC5pbnMgPSByZWFkSW5wdXRzKGJ1ZmZlclJlYWRlcik7XG4gIHR4Lm91dHMgPSByZWFkT3V0cHV0czxUTnVtYmVyPihidWZmZXJSZWFkZXIsIGFtb3VudFR5cGUpO1xuICB0eC5sb2NrdGltZSA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG5cbiAgaWYgKHR4LmlzT3ZlcndpbnRlckNvbXBhdGlibGUoKSkge1xuICAgIHR4LmV4cGlyeUhlaWdodCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gIH1cblxuICBpZiAodHguaXNTYXBsaW5nQ29tcGF0aWJsZSgpKSB7XG4gICAgY29uc3QgdmFsdWVCYWxhbmNlID0gYnVmZmVyUmVhZGVyLnJlYWRTbGljZSg4KTtcbiAgICBpZiAoIXZhbHVlQmFsYW5jZS5lcXVhbHMoVkFMVUVfSU5UNjRfWkVSTykpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRUcmFuc2FjdGlvbkVycm9yKGB2YWx1ZUJhbGFuY2UgbXVzdCBiZSB6ZXJvYCk7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDg2M1xuICAgIHJlYWRFbXB0eVNhcGxpbmdCdW5kbGUoYnVmZmVyUmVhZGVyKTtcbiAgfVxuXG4gIGlmICh0eC5zdXBwb3J0c0pvaW5TcGxpdHMoKSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4NjlcbiAgICByZWFkRW1wdHlWZWN0b3IoYnVmZmVyUmVhZGVyKSAvKiB2Sm9pblNwbGl0ICovO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQnVmZmVyVjU8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyLFxuICB0eDogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDgxNVxuICB0eC5jb25zZW5zdXNCcmFuY2hJZCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gIHR4LmxvY2t0aW1lID0gYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKTtcbiAgdHguZXhwaXJ5SGVpZ2h0ID0gYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODI4XG4gIHR4LmlucyA9IHJlYWRJbnB1dHMoYnVmZmVyUmVhZGVyKTtcbiAgdHgub3V0cyA9IHJlYWRPdXRwdXRzPFROdW1iZXI+KGJ1ZmZlclJlYWRlciwgYW1vdW50VHlwZSk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDgzNVxuICByZWFkRW1wdHlTYXBsaW5nQnVuZGxlKGJ1ZmZlclJlYWRlcik7XG4gIHJlYWRFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyUmVhZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlSW5wdXRzKGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLCBpbnM6IFR4SW5wdXRbXSk6IHZvaWQge1xuICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoaW5zLmxlbmd0aCk7XG4gIGlucy5mb3JFYWNoKGZ1bmN0aW9uICh0eEluKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UodHhJbi5oYXNoKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5pbmRleCk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFyU2xpY2UodHhJbi5zY3JpcHQpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMih0eEluLnNlcXVlbmNlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU91dHB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLFxuICBvdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdXG4pOiB2b2lkIHtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KG91dHMubGVuZ3RoKTtcbiAgb3V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0eE91dCkge1xuICAgIGlmICgodHhPdXQgYXMgYW55KS52YWx1ZUJ1ZmZlcikge1xuICAgICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UoKHR4T3V0IGFzIGFueSkudmFsdWVCdWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50NjQodHhPdXQudmFsdWUpO1xuICAgIH1cblxuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhclNsaWNlKHR4T3V0LnNjcmlwdCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9CdWZmZXJWNDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgYnVmZmVyV3JpdGVyOiBCdWZmZXJXcml0ZXIsXG4gIHR4OiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDEwODNcbiAgd3JpdGVJbnB1dHMoYnVmZmVyV3JpdGVyLCB0eC5pbnMpO1xuICB3cml0ZU91dHB1dHM8VE51bWJlcj4oYnVmZmVyV3JpdGVyLCB0eC5vdXRzKTtcblxuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHgubG9ja3RpbWUpO1xuXG4gIGlmICh0eC5pc092ZXJ3aW50ZXJDb21wYXRpYmxlKCkpIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHguZXhwaXJ5SGVpZ2h0KTtcbiAgfVxuXG4gIGlmICh0eC5pc1NhcGxpbmdDb21wYXRpYmxlKCkpIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVTbGljZShWQUxVRV9JTlQ2NF9aRVJPKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoMCk7IC8vIHZTaGllbGRlZFNwZW5kTGVuZ3RoXG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApOyAvLyB2U2hpZWxkZWRPdXRwdXRMZW5ndGhcbiAgfVxuXG4gIGlmICh0eC5zdXBwb3J0c0pvaW5TcGxpdHMoKSkge1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhckludCgwKTsgLy8gam9pbnNTcGxpdHMgbGVuZ3RoXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQnVmZmVyVjU8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLFxuICB0eDogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4MjUtTDgyNlxuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHguY29uc2Vuc3VzQnJhbmNoSWQpO1xuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHgubG9ja3RpbWUpO1xuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHguZXhwaXJ5SGVpZ2h0KTtcbiAgd3JpdGVJbnB1dHMoYnVmZmVyV3JpdGVyLCB0eC5pbnMpO1xuICB3cml0ZU91dHB1dHM8VE51bWJlcj4oYnVmZmVyV3JpdGVyLCB0eC5vdXRzKTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMMTA2M1xuICB3cml0ZUVtcHR5U2FtcGxpbmdCdW5kbGUoYnVmZmVyV3JpdGVyKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDEwODFcbiAgd3JpdGVFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyV3JpdGVyKTtcbn1cbiJdfQ==
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { PsbtOpts, UtxoPsbt } from '../UtxoPsbt';
3
2
  import { ZcashTransaction } from './ZcashTransaction';
4
3
  import { Network, Signer } from '../../';
@@ -27,7 +26,6 @@ export declare class ZcashPsbt extends UtxoPsbt<ZcashTransaction<bigint>> {
27
26
  setDefaultsForVersion(network: Network, version: number): void;
28
27
  signInput(inputIndex: number, keyPair: Signer, sighashTypes?: number[]): this;
29
28
  validateSignaturesOfInput(inputIndex: number, validator: ValidateSigFunction, pubkey?: Buffer): boolean;
30
- private withUnsafeSignNonSegwitTrue;
31
29
  private setPropertyCheckSignatures;
32
30
  setConsensusBranchId(consensusBranchId: number): void;
33
31
  setVersionGroupId(versionGroupId: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ZcashPsbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashPsbt.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAGL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAW7D,qBAAa,SAAU,SAAQ,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAIlG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS;IAO7D;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAqCrF;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAelB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI;IAOpD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsB9D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7E,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAIvG,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,0BAA0B;IAQlC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAKrD,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CAI5C"}
1
+ {"version":3,"file":"ZcashPsbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAGL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAW7D,qBAAa,SAAU,SAAQ,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAIlG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS;IAO7D;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAqCrF;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAelB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI;IAOpD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB9D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7E,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAIvG,OAAO,CAAC,0BAA0B;IAQlC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAKrD,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CAI5C"}
@@ -69,7 +69,7 @@ class ZcashPsbt extends UtxoPsbt_1.UtxoPsbt {
69
69
  * the transaction.
70
70
  */
71
71
  toBuffer() {
72
- if (this.tx.version === 5 || this.tx.version === ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU5) {
72
+ if (this.tx.version === 5 || this.tx.version >= ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU5) {
73
73
  return super.toBuffer();
74
74
  }
75
75
  const value = Buffer.alloc(4);
@@ -93,35 +93,28 @@ class ZcashPsbt extends UtxoPsbt_1.UtxoPsbt {
93
93
  case 4:
94
94
  case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_CANOPY:
95
95
  case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU5:
96
+ case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU6:
96
97
  this.setVersion(4);
97
98
  break;
98
99
  case 5:
99
100
  case ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU5:
101
+ case ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU6:
100
102
  this.setVersion(5);
101
103
  break;
102
104
  default:
103
105
  throw new Error(`invalid version ${version}`);
104
106
  }
105
- this.tx.versionGroupId = ZcashTransaction_1.getDefaultVersionGroupIdForVersion(version);
106
- this.tx.consensusBranchId = ZcashTransaction_1.getDefaultConsensusBranchIdForVersion(network, version);
107
+ this.tx.versionGroupId = (0, ZcashTransaction_1.getDefaultVersionGroupIdForVersion)(version);
108
+ this.tx.consensusBranchId = (0, ZcashTransaction_1.getDefaultConsensusBranchIdForVersion)(network, version);
107
109
  }
108
110
  // For Zcash transactions, we do not have to have non-witness UTXO data for non-segwit
109
111
  // transactions because zcash hashes the value directly. Thus, it is unnecessary to have
110
112
  // the previous transaction hash on the unspent.
111
113
  signInput(inputIndex, keyPair, sighashTypes) {
112
- return this.withUnsafeSignNonSegwitTrue(super.signInput.bind(this, inputIndex, keyPair, sighashTypes));
114
+ return (0, PsbtUtil_1.withUnsafeNonSegwit)(this, super.signInput.bind(this, inputIndex, keyPair, sighashTypes));
113
115
  }
114
116
  validateSignaturesOfInput(inputIndex, validator, pubkey) {
115
- return this.withUnsafeSignNonSegwitTrue(super.validateSignaturesOfInput.bind(this, inputIndex, validator, pubkey));
116
- }
117
- withUnsafeSignNonSegwitTrue(fn) {
118
- this.__CACHE.__UNSAFE_SIGN_NONSEGWIT = true;
119
- try {
120
- return fn();
121
- }
122
- finally {
123
- this.__CACHE.__UNSAFE_SIGN_NONSEGWIT = false;
124
- }
117
+ return (0, PsbtUtil_1.withUnsafeNonSegwit)(this, super.validateSignaturesOfInput.bind(this, inputIndex, validator, pubkey));
125
118
  }
126
119
  setPropertyCheckSignatures(propName, value) {
127
120
  if (this.tx[propName] === value) {
@@ -144,4 +137,4 @@ class ZcashPsbt extends UtxoPsbt_1.UtxoPsbt {
144
137
  }
145
138
  }
146
139
  exports.ZcashPsbt = ZcashPsbt;
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3pjYXNoL1pjYXNoUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBaUQ7QUFDakQseURBSTRCO0FBQzVCLDhCQUEwRDtBQUMxRCxtQ0FBMEM7QUFDMUMsaURBQWlEO0FBRWpELDBDQUFpRjtBQUNqRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUEyQixDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0NBQXFCLENBQUMsdUJBQXVCLENBQUM7Q0FDekQsQ0FBQyxDQUFDO0FBRUgsTUFBYSxTQUFVLFNBQVEsbUJBQWtDO0lBQ3JELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7UUFDckUsT0FBTyxtQ0FBZ0IsQ0FBQyxVQUFVLENBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBYyxFQUFFLElBQWU7UUFDL0MsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsSUFBSSxFQUNKLElBQUksSUFBSSxJQUFJLGFBQVEsQ0FBQyxJQUFJLG1CQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxtQ0FBZ0IsQ0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYyxFQUFFLElBQWM7O1FBQzlDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBYyxDQUFDO1FBRXpELCtDQUErQztRQUMvQyxJQUFJLGlCQUFpQixHQUF1QixTQUFTLENBQUM7UUFDdEQsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO2dCQUN2QyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDMUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDdkIsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLG1DQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQzdDLEtBQUssbUNBQWdCLENBQUMsbUJBQW1CO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUU7b0JBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztpQkFDL0Y7Z0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQzVFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLHVCQUF1QixDQUM3QyxDQUFDO2dCQUVGLHlGQUF5RjtnQkFDekYsdURBQXVEO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLG1DQUFnQixDQUFDLG1CQUFtQjtnQkFDdkMsSUFBSSxpQkFBaUIsRUFBRTtvQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO2lCQUNqRztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN6RTtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxtQ0FBZ0IsQ0FBQyxtQkFBbUIsRUFBRTtZQUNyRixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN6QjtRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRTtZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFlLEVBQUUsVUFBVSxHQUFHLElBQUk7UUFDM0MsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBZ0IsRUFBRSxPQUFlO1FBQ3JELFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLG1DQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQzdDLEtBQUssbUNBQWdCLENBQUMsbUJBQW1CO2dCQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNO1lBQ1IsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLG1DQUFnQixDQUFDLG1CQUFtQjtnQkFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsR0FBRyxxREFBa0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixHQUFHLHdEQUFxQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsc0ZBQXNGO0lBQ3RGLHdGQUF3RjtJQUN4RixnREFBZ0Q7SUFDaEQsU0FBUyxDQUFDLFVBQWtCLEVBQUUsT0FBZSxFQUFFLFlBQXVCO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVELHlCQUF5QixDQUFDLFVBQWtCLEVBQUUsU0FBOEIsRUFBRSxNQUFlO1FBQzNGLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRU8sMkJBQTJCLENBQUksRUFBVztRQUMvQyxJQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUNyRCxJQUFJO1lBQ0YsT0FBTyxFQUFFLEVBQUUsQ0FBQztTQUNiO2dCQUFTO1lBQ1AsSUFBWSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsUUFBd0MsRUFBRSxLQUFjO1FBQ3pGLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxpQkFBeUI7UUFDNUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsY0FBc0I7UUFDdEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsWUFBb0I7UUFDbEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUFsSkQsOEJBa0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHNidE9wdHMsIFV0eG9Qc2J0IH0gZnJvbSAnLi4vVXR4b1BzYnQnO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdENvbnNlbnN1c0JyYW5jaElkRm9yVmVyc2lvbixcbiAgZ2V0RGVmYXVsdFZlcnNpb25Hcm91cElkRm9yVmVyc2lvbixcbiAgWmNhc2hUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9aY2FzaFRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE5ldHdvcmssIFBzYnRUcmFuc2FjdGlvbiwgU2lnbmVyIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IFBzYnQgYXMgUHNidEJhc2UgfSBmcm9tICdiaXAxNzQnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvdHlwZXMnO1xuaW1wb3J0IHsgVmFsaWRhdGVTaWdGdW5jdGlvbiB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL3BzYnQnO1xuaW1wb3J0IHsgUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLCBQU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIgfSBmcm9tICcuLi9Qc2J0VXRpbCc7XG5jb25zdCB0eXBlZm9yY2UgPSByZXF1aXJlKCd0eXBlZm9yY2UnKTtcblxuY29uc3QgQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVkgPSBCdWZmZXIuY29uY2F0KFtcbiAgQnVmZmVyLm9mKDB4ZmMpLFxuICBCdWZmZXIub2YoMHgwNSksXG4gIEJ1ZmZlci5mcm9tKFBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUiksXG4gIEJ1ZmZlci5vZihQcm9wcmlldGFyeUtleVN1YnR5cGUuWkVDX0NPTlNFTlNVU19CUkFOQ0hfSUQpLFxuXSk7XG5cbmV4cG9ydCBjbGFzcyBaY2FzaFBzYnQgZXh0ZW5kcyBVdHhvUHNidDxaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyB0cmFuc2FjdGlvbkZyb21CdWZmZXIoYnVmZmVyOiBCdWZmZXIsIG5ldHdvcms6IE5ldHdvcmspOiBaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICAgIHJldHVybiBaY2FzaFRyYW5zYWN0aW9uLmZyb21CdWZmZXI8YmlnaW50PihidWZmZXIsIGZhbHNlLCAnYmlnaW50JywgbmV0d29yayk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUHNidChvcHRzOiBQc2J0T3B0cywgZGF0YT86IFBzYnRCYXNlKTogWmNhc2hQc2J0IHtcbiAgICByZXR1cm4gbmV3IFpjYXNoUHNidChcbiAgICAgIG9wdHMsXG4gICAgICBkYXRhIHx8IG5ldyBQc2J0QmFzZShuZXcgUHNidFRyYW5zYWN0aW9uKHsgdHg6IG5ldyBaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4ob3B0cy5uZXR3b3JrKSB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHZlcnNpb24gPCA1IG9mIFpjYXNoIHRyYW5zYWN0aW9ucywgdGhlIGNvbnNlbnN1cyBicmFuY2ggSUQgaXMgbm90IHNlcmlhbGl6ZWQgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAqIHdoZXJlYXMgaW4gdmVyc2lvbiA1IGl0IGlzLiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgbGVzcyB0aGFuIGEgdmVyc2lvbiA1LCBzZXQgdGhlIGNvbnNlbnN1cyBicmFuY2ggaWRcbiAgICogaW4gdGhlIGdsb2JhbCBtYXAgaW4gdGhlIHBzYnQuIElmIGl0IGlzIGEgdmVyc2lvbiA1IHRyYW5zYWN0aW9uLCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgY29uc2Vuc3VzXG4gICAqIGJyYW5jaCBpZCBpcyBzZXQgaW4gdGhlIHBzYnQgKGJlY2F1c2UgaXQgc2hvdWxkIGJlIG9uIHRoZSB0cmFuc2FjdGlvbiBhbHJlYWR5KS5cbiAgICogQHBhcmFtIGJ1ZmZlciBQc2J0IGJ1ZmZlclxuICAgKiBAcGFyYW0gb3B0cyBvcHRpb25zXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb3B0czogUHNidE9wdHMpOiBVdHhvUHNidDxaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgICBjb25zdCBwc2J0ID0gc3VwZXIuZnJvbUJ1ZmZlcihidWZmZXIsIG9wdHMpIGFzIFpjYXNoUHNidDtcblxuICAgIC8vIFJlYWQgYGNvbnNlbnN1c0JyYW5jaElkYCBmcm9tIHRoZSBnbG9iYWwtbWFwXG4gICAgbGV0IGNvbnNlbnN1c0JyYW5jaElkOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscz8uZm9yRWFjaCgoeyBrZXksIHZhbHVlIH0sIGkpID0+IHtcbiAgICAgIGlmIChrZXkuZXF1YWxzKENPTlNFTlNVU19CUkFOQ0hfSURfS0VZKSkge1xuICAgICAgICBjb25zZW5zdXNCcmFuY2hJZCA9IHZhbHVlLnJlYWRVaW50MzJMRSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN3aXRjaCAocHNidC50eC52ZXJzaW9uKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX0NBTk9QWTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfTlU1OlxuICAgICAgICBpZiAoIWNvbnNlbnN1c0JyYW5jaElkIHx8ICFwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBjb25zZW5zdXMgYnJhbmNoIGlkIG9uIHBzYnQgZm9yIHZlcnNpb24gNCBaY2FzaCB0cmFuc2FjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHBzYnQudHguY29uc2Vuc3VzQnJhbmNoSWQgPSBjb25zZW5zdXNCcmFuY2hJZDtcbiAgICAgICAgcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscyA9IHBzYnQuZGF0YS5nbG9iYWxNYXAudW5rbm93bktleVZhbHMuZmlsdGVyKFxuICAgICAgICAgICh7IGtleSB9KSA9PiBrZXkgIT09IENPTlNFTlNVU19CUkFOQ0hfSURfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRGVsZXRlIGNvbnNlbnN1c0JyYW5jaElkIGZyb20gZ2xvYmFsTWFwIHNvIHRoYXQgaWYgd2Ugd2VyZSB0byBzZXJpYWxpemUgdGhlIHBzYnQgYWdhaW5cbiAgICAgICAgLy8gd2Ugd291bGQgbm90IGFkZCBhIGR1cGxpY2F0ZSBrZXkgaW50byB0aGUgZ2xvYmFsIG1hcFxuICAgICAgICBwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnBvcCgpO1xuICAgICAgICByZXR1cm4gcHNidDtcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1OlxuICAgICAgICBpZiAoY29uc2Vuc3VzQnJhbmNoSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGNvbnNlbnN1cyBicmFuY2ggaWQgaW4gcHNidCBnbG9iYWwtbWFwIGZvciB2ZXJzaW9uIDUgWmNhc2ggdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHNidDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdmVyc2lvbiAke3BzYnQudHgudmVyc2lvbn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgaXQgaXMgYSB2ZXJzaW9uIDQgdHJhbnNhY3Rpb24sIGFkZCB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZCB0b1xuICAgKiB0aGUgZ2xvYmFsIG1hcC4gSWYgaXQgaXMgYSB2ZXJzaW9uIDUgdHJhbnNhY3Rpb24sIGp1c3QgcmV0dXJuIHRoZVxuICAgKiBidWZmZXIgYmVjYXVzZSB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZCBpcyBhbHJlYWR5IHNlcmlhbGl6ZWQgaW5cbiAgICogdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgdG9CdWZmZXIoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy50eC52ZXJzaW9uID09PSA1IHx8IHRoaXMudHgudmVyc2lvbiA9PT0gWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1KSB7XG4gICAgICByZXR1cm4gc3VwZXIudG9CdWZmZXIoKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgdmFsdWUud3JpdGVVaW50MzJMRSh0aGlzLnR4LmNvbnNlbnN1c0JyYW5jaElkKTtcbiAgICB0aGlzLmFkZFVua25vd25LZXlWYWxUb0dsb2JhbCh7IGtleTogQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVksIHZhbHVlIH0pO1xuICAgIGlmICghdGhpcy5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgYWRkaW5nIGNvbnNlbnN1cyBicmFuY2ggaWQgdG8gdW5rbm93bktleVZhbHMnKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZiA9IHN1cGVyLnRvQnVmZmVyKCk7XG4gICAgdGhpcy5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscy5wb3AoKTtcbiAgICByZXR1cm4gYnVmZjtcbiAgfVxuXG4gIHNldFZlcnNpb24odmVyc2lvbjogbnVtYmVyLCBvdmVyd2ludGVyID0gdHJ1ZSk6IHRoaXMge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIHZlcnNpb24pO1xuICAgIHRoaXMudHgub3ZlcndpbnRlcmVkID0gb3ZlcndpbnRlciA/IDEgOiAwO1xuICAgIHRoaXMudHgudmVyc2lvbiA9IHZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREZWZhdWx0c0ZvclZlcnNpb24obmV0d29yazogTmV0d29yaywgdmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX0NBTk9QWTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfTlU1OlxuICAgICAgICB0aGlzLnNldFZlcnNpb24oNCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTU6XG4gICAgICAgIHRoaXMuc2V0VmVyc2lvbig1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdmVyc2lvbiAke3ZlcnNpb259YCk7XG4gICAgfVxuXG4gICAgdGhpcy50eC52ZXJzaW9uR3JvdXBJZCA9IGdldERlZmF1bHRWZXJzaW9uR3JvdXBJZEZvclZlcnNpb24odmVyc2lvbik7XG4gICAgdGhpcy50eC5jb25zZW5zdXNCcmFuY2hJZCA9IGdldERlZmF1bHRDb25zZW5zdXNCcmFuY2hJZEZvclZlcnNpb24obmV0d29yaywgdmVyc2lvbik7XG4gIH1cblxuICAvLyBGb3IgWmNhc2ggdHJhbnNhY3Rpb25zLCB3ZSBkbyBub3QgaGF2ZSB0byBoYXZlIG5vbi13aXRuZXNzIFVUWE8gZGF0YSBmb3Igbm9uLXNlZ3dpdFxuICAvLyB0cmFuc2FjdGlvbnMgYmVjYXVzZSB6Y2FzaCBoYXNoZXMgdGhlIHZhbHVlIGRpcmVjdGx5LiBUaHVzLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBoYXZlXG4gIC8vIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYXNoIG9uIHRoZSB1bnNwZW50LlxuICBzaWduSW5wdXQoaW5wdXRJbmRleDogbnVtYmVyLCBrZXlQYWlyOiBTaWduZXIsIHNpZ2hhc2hUeXBlcz86IG51bWJlcltdKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFVuc2FmZVNpZ25Ob25TZWd3aXRUcnVlKHN1cGVyLnNpZ25JbnB1dC5iaW5kKHRoaXMsIGlucHV0SW5kZXgsIGtleVBhaXIsIHNpZ2hhc2hUeXBlcykpO1xuICB9XG5cbiAgdmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dChpbnB1dEluZGV4OiBudW1iZXIsIHZhbGlkYXRvcjogVmFsaWRhdGVTaWdGdW5jdGlvbiwgcHVia2V5PzogQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFVuc2FmZVNpZ25Ob25TZWd3aXRUcnVlKHN1cGVyLnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXQuYmluZCh0aGlzLCBpbnB1dEluZGV4LCB2YWxpZGF0b3IsIHB1YmtleSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoVW5zYWZlU2lnbk5vblNlZ3dpdFRydWU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICAodGhpcyBhcyBhbnkpLl9fQ0FDSEUuX19VTlNBRkVfU0lHTl9OT05TRUdXSVQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgKHRoaXMgYXMgYW55KS5fX0NBQ0hFLl9fVU5TQUZFX1NJR05fTk9OU0VHV0lUID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcyhwcm9wTmFtZToga2V5b2YgWmNhc2hUcmFuc2FjdGlvbjxiaWdpbnQ+LCB2YWx1ZTogdW5rbm93bikge1xuICAgIGlmICh0aGlzLnR4W3Byb3BOYW1lXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja0ZvclNpZ25hdHVyZXMocHJvcE5hbWUpO1xuICAgIHRoaXMudHhbcHJvcE5hbWVdID0gdmFsdWUgYXMgYW55O1xuICB9XG5cbiAgc2V0Q29uc2Vuc3VzQnJhbmNoSWQoY29uc2Vuc3VzQnJhbmNoSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgICB0aGlzLnNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKCdjb25zZW5zdXNCcmFuY2hJZCcsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgfVxuXG4gIHNldFZlcnNpb25Hcm91cElkKHZlcnNpb25Hcm91cElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCB2ZXJzaW9uR3JvdXBJZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcygndmVyc2lvbkdyb3VwSWQnLCB2ZXJzaW9uR3JvdXBJZCk7XG4gIH1cblxuICBzZXRFeHBpcnlIZWlnaHQoZXhwaXJ5SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBleHBpcnlIZWlnaHQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMoJ2V4cGlyeUhlaWdodCcsIGV4cGlyeUhlaWdodCk7XG4gIH1cbn1cbiJdfQ==
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3pjYXNoL1pjYXNoUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBaUQ7QUFDakQseURBSTRCO0FBQzVCLDhCQUEwRDtBQUMxRCxtQ0FBMEM7QUFDMUMsaURBQWlEO0FBRWpELDBDQUFzRztBQUN0RyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUEyQixDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0NBQXFCLENBQUMsdUJBQXVCLENBQUM7Q0FDekQsQ0FBQyxDQUFDO0FBRUgsTUFBYSxTQUFVLFNBQVEsbUJBQWtDO0lBQ3JELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7UUFDckUsT0FBTyxtQ0FBZ0IsQ0FBQyxVQUFVLENBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBYyxFQUFFLElBQWU7UUFDL0MsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsSUFBSSxFQUNKLElBQUksSUFBSSxJQUFJLGFBQVEsQ0FBQyxJQUFJLG1CQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxtQ0FBZ0IsQ0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYyxFQUFFLElBQWM7O1FBQzlD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QyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUEzSUQsOEJBMklDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHNidE9wdHMsIFV0eG9Qc2J0IH0gZnJvbSAnLi4vVXR4b1BzYnQnO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdENvbnNlbnN1c0JyYW5jaElkRm9yVmVyc2lvbixcbiAgZ2V0RGVmYXVsdFZlcnNpb25Hcm91cElkRm9yVmVyc2lvbixcbiAgWmNhc2hUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9aY2FzaFRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE5ldHdvcmssIFBzYnRUcmFuc2FjdGlvbiwgU2lnbmVyIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IFBzYnQgYXMgUHNidEJhc2UgfSBmcm9tICdiaXAxNzQnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvdHlwZXMnO1xuaW1wb3J0IHsgVmFsaWRhdGVTaWdGdW5jdGlvbiB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL3BzYnQnO1xuaW1wb3J0IHsgUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLCBQU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIsIHdpdGhVbnNhZmVOb25TZWd3aXQgfSBmcm9tICcuLi9Qc2J0VXRpbCc7XG5jb25zdCB0eXBlZm9yY2UgPSByZXF1aXJlKCd0eXBlZm9yY2UnKTtcblxuY29uc3QgQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVkgPSBCdWZmZXIuY29uY2F0KFtcbiAgQnVmZmVyLm9mKDB4ZmMpLFxuICBCdWZmZXIub2YoMHgwNSksXG4gIEJ1ZmZlci5mcm9tKFBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUiksXG4gIEJ1ZmZlci5vZihQcm9wcmlldGFyeUtleVN1YnR5cGUuWkVDX0NPTlNFTlNVU19CUkFOQ0hfSUQpLFxuXSk7XG5cbmV4cG9ydCBjbGFzcyBaY2FzaFBzYnQgZXh0ZW5kcyBVdHhvUHNidDxaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyB0cmFuc2FjdGlvbkZyb21CdWZmZXIoYnVmZmVyOiBCdWZmZXIsIG5ldHdvcms6IE5ldHdvcmspOiBaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICAgIHJldHVybiBaY2FzaFRyYW5zYWN0aW9uLmZyb21CdWZmZXI8YmlnaW50PihidWZmZXIsIGZhbHNlLCAnYmlnaW50JywgbmV0d29yayk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUHNidChvcHRzOiBQc2J0T3B0cywgZGF0YT86IFBzYnRCYXNlKTogWmNhc2hQc2J0IHtcbiAgICByZXR1cm4gbmV3IFpjYXNoUHNidChcbiAgICAgIG9wdHMsXG4gICAgICBkYXRhIHx8IG5ldyBQc2J0QmFzZShuZXcgUHNidFRyYW5zYWN0aW9uKHsgdHg6IG5ldyBaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4ob3B0cy5uZXR3b3JrKSB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHZlcnNpb24gPCA1IG9mIFpjYXNoIHRyYW5zYWN0aW9ucywgdGhlIGNvbnNlbnN1cyBicmFuY2ggSUQgaXMgbm90IHNlcmlhbGl6ZWQgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAqIHdoZXJlYXMgaW4gdmVyc2lvbiA1IGl0IGlzLiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgbGVzcyB0aGFuIGEgdmVyc2lvbiA1LCBzZXQgdGhlIGNvbnNlbnN1cyBicmFuY2ggaWRcbiAgICogaW4gdGhlIGdsb2JhbCBtYXAgaW4gdGhlIHBzYnQuIElmIGl0IGlzIGEgdmVyc2lvbiA1IHRyYW5zYWN0aW9uLCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgY29uc2Vuc3VzXG4gICAqIGJyYW5jaCBpZCBpcyBzZXQgaW4gdGhlIHBzYnQgKGJlY2F1c2UgaXQgc2hvdWxkIGJlIG9uIHRoZSB0cmFuc2FjdGlvbiBhbHJlYWR5KS5cbiAgICogQHBhcmFtIGJ1ZmZlciBQc2J0IGJ1ZmZlclxuICAgKiBAcGFyYW0gb3B0cyBvcHRpb25zXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb3B0czogUHNidE9wdHMpOiBVdHhvUHNidDxaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgICBjb25zdCBwc2J0ID0gc3VwZXIuZnJvbUJ1ZmZlcihidWZmZXIsIG9wdHMpIGFzIFpjYXNoUHNidDtcblxuICAgIC8vIFJlYWQgYGNvbnNlbnN1c0JyYW5jaElkYCBmcm9tIHRoZSBnbG9iYWwtbWFwXG4gICAgbGV0IGNvbnNlbnN1c0JyYW5jaElkOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscz8uZm9yRWFjaCgoeyBrZXksIHZhbHVlIH0sIGkpID0+IHtcbiAgICAgIGlmIChrZXkuZXF1YWxzKENPTlNFTlNVU19CUkFOQ0hfSURfS0VZKSkge1xuICAgICAgICBjb25zZW5zdXNCcmFuY2hJZCA9IHZhbHVlLnJlYWRVaW50MzJMRSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN3aXRjaCAocHNidC50eC52ZXJzaW9uKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX0NBTk9QWTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfTlU1OlxuICAgICAgICBpZiAoIWNvbnNlbnN1c0JyYW5jaElkIHx8ICFwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBjb25zZW5zdXMgYnJhbmNoIGlkIG9uIHBzYnQgZm9yIHZlcnNpb24gNCBaY2FzaCB0cmFuc2FjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHBzYnQudHguY29uc2Vuc3VzQnJhbmNoSWQgPSBjb25zZW5zdXNCcmFuY2hJZDtcbiAgICAgICAgcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscyA9IHBzYnQuZGF0YS5nbG9iYWxNYXAudW5rbm93bktleVZhbHMuZmlsdGVyKFxuICAgICAgICAgICh7IGtleSB9KSA9PiBrZXkgIT09IENPTlNFTlNVU19CUkFOQ0hfSURfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRGVsZXRlIGNvbnNlbnN1c0JyYW5jaElkIGZyb20gZ2xvYmFsTWFwIHNvIHRoYXQgaWYgd2Ugd2VyZSB0byBzZXJpYWxpemUgdGhlIHBzYnQgYWdhaW5cbiAgICAgICAgLy8gd2Ugd291bGQgbm90IGFkZCBhIGR1cGxpY2F0ZSBrZXkgaW50byB0aGUgZ2xvYmFsIG1hcFxuICAgICAgICBwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnBvcCgpO1xuICAgICAgICByZXR1cm4gcHNidDtcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1OlxuICAgICAgICBpZiAoY29uc2Vuc3VzQnJhbmNoSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGNvbnNlbnN1cyBicmFuY2ggaWQgaW4gcHNidCBnbG9iYWwtbWFwIGZvciB2ZXJzaW9uIDUgWmNhc2ggdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHNidDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdmVyc2lvbiAke3BzYnQudHgudmVyc2lvbn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgaXQgaXMgYSB2ZXJzaW9uIDQgdHJhbnNhY3Rpb24sIGFkZCB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZCB0b1xuICAgKiB0aGUgZ2xvYmFsIG1hcC4gSWYgaXQgaXMgYSB2ZXJzaW9uIDUgdHJhbnNhY3Rpb24sIGp1c3QgcmV0dXJuIHRoZVxuICAgKiBidWZmZXIgYmVjYXVzZSB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZCBpcyBhbHJlYWR5IHNlcmlhbGl6ZWQgaW5cbiAgICogdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgdG9CdWZmZXIoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy50eC52ZXJzaW9uID09PSA1IHx8IHRoaXMudHgudmVyc2lvbiA+PSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTUpIHtcbiAgICAgIHJldHVybiBzdXBlci50b0J1ZmZlcigpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICB2YWx1ZS53cml0ZVVpbnQzMkxFKHRoaXMudHguY29uc2Vuc3VzQnJhbmNoSWQpO1xuICAgIHRoaXMuYWRkVW5rbm93bktleVZhbFRvR2xvYmFsKHsga2V5OiBDT05TRU5TVVNfQlJBTkNIX0lEX0tFWSwgdmFsdWUgfSk7XG4gICAgaWYgKCF0aGlzLmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCBhZGRpbmcgY29uc2Vuc3VzIGJyYW5jaCBpZCB0byB1bmtub3duS2V5VmFscycpO1xuICAgIH1cbiAgICBjb25zdCBidWZmID0gc3VwZXIudG9CdWZmZXIoKTtcbiAgICB0aGlzLmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnBvcCgpO1xuICAgIHJldHVybiBidWZmO1xuICB9XG5cbiAgc2V0VmVyc2lvbih2ZXJzaW9uOiBudW1iZXIsIG92ZXJ3aW50ZXIgPSB0cnVlKTogdGhpcyB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgdmVyc2lvbik7XG4gICAgdGhpcy50eC5vdmVyd2ludGVyZWQgPSBvdmVyd2ludGVyID8gMSA6IDA7XG4gICAgdGhpcy50eC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldERlZmF1bHRzRm9yVmVyc2lvbihuZXR3b3JrOiBOZXR3b3JrLCB2ZXJzaW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfQ0FOT1BZOlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9OVTU6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX05VNjpcbiAgICAgICAgdGhpcy5zZXRWZXJzaW9uKDQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTY6XG4gICAgICAgIHRoaXMuc2V0VmVyc2lvbig1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdmVyc2lvbiAke3ZlcnNpb259YCk7XG4gICAgfVxuXG4gICAgdGhpcy50eC52ZXJzaW9uR3JvdXBJZCA9IGdldERlZmF1bHRWZXJzaW9uR3JvdXBJZEZvclZlcnNpb24odmVyc2lvbik7XG4gICAgdGhpcy50eC5jb25zZW5zdXNCcmFuY2hJZCA9IGdldERlZmF1bHRDb25zZW5zdXNCcmFuY2hJZEZvclZlcnNpb24obmV0d29yaywgdmVyc2lvbik7XG4gIH1cblxuICAvLyBGb3IgWmNhc2ggdHJhbnNhY3Rpb25zLCB3ZSBkbyBub3QgaGF2ZSB0byBoYXZlIG5vbi13aXRuZXNzIFVUWE8gZGF0YSBmb3Igbm9uLXNlZ3dpdFxuICAvLyB0cmFuc2FjdGlvbnMgYmVjYXVzZSB6Y2FzaCBoYXNoZXMgdGhlIHZhbHVlIGRpcmVjdGx5LiBUaHVzLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBoYXZlXG4gIC8vIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYXNoIG9uIHRoZSB1bnNwZW50LlxuICBzaWduSW5wdXQoaW5wdXRJbmRleDogbnVtYmVyLCBrZXlQYWlyOiBTaWduZXIsIHNpZ2hhc2hUeXBlcz86IG51bWJlcltdKTogdGhpcyB7XG4gICAgcmV0dXJuIHdpdGhVbnNhZmVOb25TZWd3aXQodGhpcywgc3VwZXIuc2lnbklucHV0LmJpbmQodGhpcywgaW5wdXRJbmRleCwga2V5UGFpciwgc2lnaGFzaFR5cGVzKSk7XG4gIH1cblxuICB2YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0KGlucHV0SW5kZXg6IG51bWJlciwgdmFsaWRhdG9yOiBWYWxpZGF0ZVNpZ0Z1bmN0aW9uLCBwdWJrZXk/OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2l0aFVuc2FmZU5vblNlZ3dpdCh0aGlzLCBzdXBlci52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0LmJpbmQodGhpcywgaW5wdXRJbmRleCwgdmFsaWRhdG9yLCBwdWJrZXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMocHJvcE5hbWU6IGtleW9mIFpjYXNoVHJhbnNhY3Rpb248YmlnaW50PiwgdmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAodGhpcy50eFtwcm9wTmFtZV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tGb3JTaWduYXR1cmVzKHByb3BOYW1lKTtcbiAgICB0aGlzLnR4W3Byb3BOYW1lXSA9IHZhbHVlIGFzIGFueTtcbiAgfVxuXG4gIHNldENvbnNlbnN1c0JyYW5jaElkKGNvbnNlbnN1c0JyYW5jaElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBjb25zZW5zdXNCcmFuY2hJZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcygnY29uc2Vuc3VzQnJhbmNoSWQnLCBjb25zZW5zdXNCcmFuY2hJZCk7XG4gIH1cblxuICBzZXRWZXJzaW9uR3JvdXBJZCh2ZXJzaW9uR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgdmVyc2lvbkdyb3VwSWQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMoJ3ZlcnNpb25Hcm91cElkJywgdmVyc2lvbkdyb3VwSWQpO1xuICB9XG5cbiAgc2V0RXhwaXJ5SGVpZ2h0KGV4cGlyeUhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgZXhwaXJ5SGVpZ2h0KTtcbiAgICB0aGlzLnNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKCdleHBpcnlIZWlnaHQnLCBleHBpcnlIZWlnaHQpO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,6 @@
1
- /// <reference types="node" />
2
1
  import { networks } from '../../networks';
3
2
  import { UtxoTransaction } from '../UtxoTransaction';
4
- export declare type ZcashNetwork = typeof networks.zcash | typeof networks.zcashTest;
3
+ export type ZcashNetwork = typeof networks.zcash | typeof networks.zcashTest;
5
4
  export declare class UnsupportedTransactionError extends Error {
6
5
  constructor(message: string);
7
6
  }
@@ -14,7 +13,9 @@ export declare class ZcashTransaction<TNumber extends number | bigint = number>
14
13
  static VERSION_SAPLING: number;
15
14
  static VERSION4_BRANCH_CANOPY: number;
16
15
  static VERSION4_BRANCH_NU5: number;
16
+ static VERSION4_BRANCH_NU6: number;
17
17
  static VERSION5_BRANCH_NU5: number;
18
+ static VERSION5_BRANCH_NU6: number;
18
19
  overwintered: number;
19
20
  versionGroupId: number;
20
21
  expiryHeight: number;
@@ -1 +1 @@
1
- {"version":3,"file":"ZcashTransaction.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashTransaction.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAgB,MAAM,oBAAoB,CAAC;AAMnE,oBAAY,YAAY,GAAG,OAAO,QAAQ,CAAC,KAAK,GAAG,OAAO,QAAQ,CAAC,SAAS,CAAC;AAY7E,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAG5B;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBpG;AAED,qBAAa,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAiBnF,OAAO,EAAE,YAAY;IAhBxC,MAAM,CAAC,0BAA0B,SAAK;IACtC,MAAM,CAAC,kBAAkB,SAAK;IAC9B,MAAM,CAAC,eAAe,SAAK;IAE3B,MAAM,CAAC,sBAAsB,SAAO;IACpC,MAAM,CAAC,mBAAmB,SAAO;IACjC,MAAM,CAAC,mBAAmB,SAAO;IAGjC,YAAY,SAAK;IAEjB,cAAc,SAAK;IAEnB,YAAY,SAAK;IACjB,iBAAiB,EAAE,MAAM,CAAC;gBAEP,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAgBlH,MAAM,CAAC,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACxD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EACnB,UAAU,GAAE,QAAQ,GAAG,QAAmB,EAC1C,OAAO,CAAC,EAAE,YAAY,GACrB,gBAAgB,CAAC,OAAO,CAAC;IAmC5B,MAAM,CAAC,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,gBAAgB,CAAC,OAAO,CAAC;IAQ5B,UAAU,IAAI,MAAM;IA8BpB,mBAAmB,IAAI,OAAO;IAI9B,sBAAsB,IAAI,OAAO;IAIjC,kBAAkB,IAAI,OAAO;IAI7B;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAcxC;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBzC;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IA4BzD;;;;;;;OAOG;IACH,yBAAyB,CACvB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,GACf,MAAM;IAsFT,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM;IAyBpD,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;IAUrC,KAAK,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC;CAGtG"}
1
+ {"version":3,"file":"ZcashTransaction.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashTransaction.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAgB,MAAM,oBAAoB,CAAC;AAMnE,MAAM,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC,KAAK,GAAG,OAAO,QAAQ,CAAC,SAAS,CAAC;AAa7E,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAG5B;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBpG;AAED,qBAAa,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAmBnF,OAAO,EAAE,YAAY;IAlBxC,MAAM,CAAC,0BAA0B,SAAK;IACtC,MAAM,CAAC,kBAAkB,SAAK;IAC9B,MAAM,CAAC,eAAe,SAAK;IAE3B,MAAM,CAAC,sBAAsB,SAAO;IACpC,MAAM,CAAC,mBAAmB,SAAO;IACjC,MAAM,CAAC,mBAAmB,SAAO;IACjC,MAAM,CAAC,mBAAmB,SAAO;IACjC,MAAM,CAAC,mBAAmB,SAAO;IAGjC,YAAY,SAAK;IAEjB,cAAc,SAAK;IAEnB,YAAY,SAAK;IACjB,iBAAiB,EAAE,MAAM,CAAC;gBAEP,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAgBlH,MAAM,CAAC,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACxD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EACnB,UAAU,GAAE,QAAQ,GAAG,QAAmB,EAC1C,OAAO,CAAC,EAAE,YAAY,GACrB,gBAAgB,CAAC,OAAO,CAAC;IAmC5B,MAAM,CAAC,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,gBAAgB,CAAC,OAAO,CAAC;IAQ5B,UAAU,IAAI,MAAM;IA8BpB,mBAAmB,IAAI,OAAO;IAI9B,sBAAsB,IAAI,OAAO;IAIjC,kBAAkB,IAAI,OAAO;IAI7B;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAcxC;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBzC;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IA4BzD;;;;;;;OAOG;IACH,yBAAyB,CACvB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,GACf,MAAM;IAsFT,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM;IAyBpD,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM;IAUrC,KAAK,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC;CAGtG"}