@bitgo/sdk-coin-stx 1.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.eslintignore +5 -0
  2. package/.mocharc.yml +8 -0
  3. package/CHANGELOG.md +11 -0
  4. package/LICENSE +191 -0
  5. package/README.md +30 -0
  6. package/dist/src/index.d.ts +5 -0
  7. package/dist/src/index.d.ts.map +1 -0
  8. package/dist/src/index.js +30 -0
  9. package/dist/src/lib/abstractContractBuilder.d.ts +19 -0
  10. package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -0
  11. package/dist/src/lib/abstractContractBuilder.js +70 -0
  12. package/dist/src/lib/constants.d.ts +8 -0
  13. package/dist/src/lib/constants.d.ts.map +1 -0
  14. package/dist/src/lib/constants.js +19 -0
  15. package/dist/src/lib/contractBuilder.d.ts +33 -0
  16. package/dist/src/lib/contractBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/contractBuilder.js +116 -0
  18. package/dist/src/lib/iface.d.ts +48 -0
  19. package/dist/src/lib/iface.d.ts.map +1 -0
  20. package/dist/src/lib/iface.js +3 -0
  21. package/dist/src/lib/index.d.ts +6 -0
  22. package/dist/src/lib/index.d.ts.map +1 -0
  23. package/dist/src/lib/index.js +33 -0
  24. package/dist/src/lib/keyPair.d.ts +55 -0
  25. package/dist/src/lib/keyPair.d.ts.map +1 -0
  26. package/dist/src/lib/keyPair.js +140 -0
  27. package/dist/src/lib/sendmanyBuilder.d.ts +23 -0
  28. package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -0
  29. package/dist/src/lib/sendmanyBuilder.js +75 -0
  30. package/dist/src/lib/transaction.d.ts +49 -0
  31. package/dist/src/lib/transaction.d.ts.map +1 -0
  32. package/dist/src/lib/transaction.js +225 -0
  33. package/dist/src/lib/transactionBuilder.d.ts +86 -0
  34. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  35. package/dist/src/lib/transactionBuilder.js +263 -0
  36. package/dist/src/lib/transactionBuilderFactory.d.ts +30 -0
  37. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  38. package/dist/src/lib/transactionBuilderFactory.js +81 -0
  39. package/dist/src/lib/transferBuilder.d.ts +30 -0
  40. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  41. package/dist/src/lib/transferBuilder.js +99 -0
  42. package/dist/src/lib/utils.d.ts +207 -0
  43. package/dist/src/lib/utils.d.ts.map +1 -0
  44. package/dist/src/lib/utils.js +503 -0
  45. package/dist/src/stx.d.ts +56 -0
  46. package/dist/src/stx.d.ts.map +1 -0
  47. package/dist/src/stx.js +196 -0
  48. package/dist/src/tstx.d.ts +16 -0
  49. package/dist/src/tstx.d.ts.map +1 -0
  50. package/dist/src/tstx.js +24 -0
  51. package/dist/src/types.d.ts +34 -0
  52. package/dist/src/types.d.ts.map +1 -0
  53. package/dist/src/types.js +3 -0
  54. package/package.json +62 -0
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Transaction = void 0;
7
+ const transactions_1 = require("@stacks/transactions");
8
+ const sdk_core_1 = require("@bitgo/sdk-core");
9
+ const utils_1 = require("./utils");
10
+ const bn_js_1 = __importDefault(require("bn.js"));
11
+ class Transaction extends sdk_core_1.BaseTransaction {
12
+ constructor(_coinConfig) {
13
+ super(_coinConfig);
14
+ }
15
+ /** @inheritdoc */
16
+ canSign(key) {
17
+ return true;
18
+ }
19
+ async sign(keyPair, sigHash) {
20
+ var _a;
21
+ const keyPairs = keyPair instanceof Array ? keyPair : [keyPair];
22
+ const signer = new transactions_1.TransactionSigner(this._stxTransaction);
23
+ signer.checkOversign = false;
24
+ signer.sigHash = (_a = sigHash !== null && sigHash !== void 0 ? sigHash : this._sigHash) !== null && _a !== void 0 ? _a : this._stxTransaction.verifyBegin();
25
+ for (const kp of keyPairs) {
26
+ const keys = kp.getKeys(kp.getCompressed());
27
+ if (!keys.prv) {
28
+ throw new sdk_core_1.SigningError('Missing private key');
29
+ }
30
+ const privKey = transactions_1.createStacksPrivateKey(keys.prv);
31
+ signer.signOrigin(privKey);
32
+ this._sigHash = signer.sigHash;
33
+ }
34
+ }
35
+ async appendOrigin(pubKeyString) {
36
+ const pubKeyStrings = pubKeyString instanceof Array ? pubKeyString : [pubKeyString];
37
+ const signer = new transactions_1.TransactionSigner(this._stxTransaction);
38
+ pubKeyStrings.forEach((pubKey) => {
39
+ signer.appendOrigin(transactions_1.createStacksPublicKey(pubKey));
40
+ });
41
+ }
42
+ async signWithSignatures(signature, isMultiSig) {
43
+ if (!signature) {
44
+ throw new sdk_core_1.SigningError('Missing signatures');
45
+ }
46
+ const signatures = signature instanceof Array ? signature : [signature];
47
+ if (!isMultiSig) {
48
+ this._stxTransaction = this._stxTransaction.createTxWithSignature(signatures[0].data);
49
+ }
50
+ else {
51
+ const authFields = signatures.map((sig) => transactions_1.createTransactionAuthField(transactions_1.PubKeyEncoding.Compressed, sig));
52
+ this._stxTransaction.auth.spendingCondition.fields = this._stxTransaction.auth.spendingCondition.fields.concat(authFields);
53
+ }
54
+ if (signatures.length > 0) {
55
+ this._sigHash = signatures[signatures.length - 1].sigHash;
56
+ }
57
+ }
58
+ get signature() {
59
+ if (this._stxTransaction && this._stxTransaction.auth.spendingCondition) {
60
+ if (transactions_1.isSingleSig(this._stxTransaction.auth.spendingCondition)) {
61
+ return [this._stxTransaction.auth.spendingCondition.signature.data];
62
+ }
63
+ else {
64
+ const signatures = [];
65
+ this._stxTransaction.auth.spendingCondition.fields.forEach((field) => {
66
+ if (field.contents.type === transactions_1.StacksMessageType.MessageSignature) {
67
+ signatures.push(field.contents.data);
68
+ }
69
+ });
70
+ return signatures;
71
+ }
72
+ }
73
+ return [];
74
+ }
75
+ /** @inheritdoc */
76
+ toJson() {
77
+ if (!this._stxTransaction) {
78
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
79
+ }
80
+ const result = {
81
+ id: this._stxTransaction.txid(),
82
+ fee: this._stxTransaction.auth.getFee().toString(10),
83
+ from: utils_1.getTxSenderAddress(this._stxTransaction),
84
+ nonce: this.getNonce(),
85
+ payload: this.getPayloadData(),
86
+ };
87
+ return result;
88
+ }
89
+ getPayloadData() {
90
+ if (this._stxTransaction.payload.payloadType === transactions_1.PayloadType.TokenTransfer) {
91
+ const payload = this._stxTransaction.payload;
92
+ const txPayload = {
93
+ payloadType: transactions_1.PayloadType.TokenTransfer,
94
+ // result.payload.memo will be padded with \u0000 up to
95
+ // MEMO_MAX_LENGTH_BYTES as defined in @stacks/transactions
96
+ memo: utils_1.unpadMemo(payload.memo.content),
97
+ to: transactions_1.addressToString({
98
+ type: transactions_1.StacksMessageType.Address,
99
+ version: payload.recipient.address.version,
100
+ hash160: payload.recipient.address.hash160.toString(),
101
+ }),
102
+ amount: payload.amount.toString(),
103
+ };
104
+ return txPayload;
105
+ }
106
+ else if (this._stxTransaction.payload.payloadType === transactions_1.PayloadType.ContractCall) {
107
+ const payload = this._stxTransaction.payload;
108
+ const contractPayload = {
109
+ payloadType: transactions_1.PayloadType.ContractCall,
110
+ contractAddress: transactions_1.addressToString(payload.contractAddress),
111
+ contractName: payload.contractName.content,
112
+ functionName: payload.functionName.content,
113
+ functionArgs: payload.functionArgs.map(utils_1.stringifyCv),
114
+ };
115
+ return contractPayload;
116
+ }
117
+ else {
118
+ throw new sdk_core_1.NotSupported('payload type not supported');
119
+ }
120
+ }
121
+ /**
122
+ * Return the length of a transaction. This is needed to calculate
123
+ * the transaction fee.
124
+ *
125
+ * @returns {number} size in bytes of the serialized transaction
126
+ */
127
+ transactionSize() {
128
+ return this._stxTransaction.serialize().length;
129
+ }
130
+ toBroadcastFormat() {
131
+ if (!this._stxTransaction) {
132
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
133
+ }
134
+ return this._stxTransaction.serialize().toString('hex');
135
+ }
136
+ get stxTransaction() {
137
+ return this._stxTransaction;
138
+ }
139
+ set stxTransaction(t) {
140
+ this._stxTransaction = t;
141
+ }
142
+ getNonce() {
143
+ if (this._stxTransaction.auth.spendingCondition) {
144
+ return Number(this._stxTransaction.auth.spendingCondition.nonce);
145
+ }
146
+ else {
147
+ throw new sdk_core_1.InvalidTransactionError('spending condition is null');
148
+ }
149
+ }
150
+ /**
151
+ * Sets this transaction payload
152
+ *
153
+ * @param rawTransaction
154
+ */
155
+ fromRawTransaction(rawTransaction) {
156
+ const raw = utils_1.removeHexPrefix(rawTransaction);
157
+ try {
158
+ this._stxTransaction = transactions_1.deserializeTransaction(transactions_1.BufferReader.fromBuffer(Buffer.from(raw, 'hex')));
159
+ }
160
+ catch (e) {
161
+ throw new sdk_core_1.ParseTransactionError('Error parsing the raw transaction');
162
+ }
163
+ this.loadInputsAndOutputs();
164
+ }
165
+ /**
166
+ * Set the transaction type
167
+ *
168
+ * @param {TransactionType} transactionType The transaction type to be set
169
+ */
170
+ setTransactionType(transactionType) {
171
+ this._type = transactionType;
172
+ }
173
+ /**
174
+ * Load the input and output data on this transaction using the transaction json
175
+ * if there are outputs.
176
+ */
177
+ loadInputsAndOutputs() {
178
+ const txJson = this.toJson();
179
+ if (txJson.payload.payloadType === transactions_1.PayloadType.TokenTransfer) {
180
+ if (txJson.payload.to && txJson.payload.amount) {
181
+ this._outputs = [
182
+ {
183
+ address: txJson.payload.to,
184
+ value: txJson.payload.amount,
185
+ coin: this._coinConfig.name,
186
+ },
187
+ ];
188
+ this._inputs = [
189
+ {
190
+ address: txJson.from,
191
+ value: txJson.payload.amount,
192
+ coin: this._coinConfig.name,
193
+ },
194
+ ];
195
+ }
196
+ }
197
+ else if (txJson.payload.payloadType === transactions_1.PayloadType.ContractCall) {
198
+ if (txJson.payload.contractAddress === this._coinConfig.network.sendmanymemoContractAddress) {
199
+ const sendParams = utils_1.functionArgsToSendParams(this.stxTransaction.payload.functionArgs);
200
+ const coin = this._coinConfig.name;
201
+ const sum = sendParams.reduce((current, next) => current.add(new bn_js_1.default(next.amount)), new bn_js_1.default(0));
202
+ this._outputs = sendParams.map((sendParam) => ({ address: sendParam.address, value: sendParam.amount, coin }));
203
+ this._inputs = [{ address: txJson.from, value: sum.toString(), coin }];
204
+ }
205
+ else {
206
+ this._outputs = [
207
+ {
208
+ address: txJson.payload.contractAddress,
209
+ value: '0',
210
+ coin: this._coinConfig.name,
211
+ },
212
+ ];
213
+ this._inputs = [
214
+ {
215
+ address: txJson.from,
216
+ value: '0',
217
+ coin: this._coinConfig.name,
218
+ },
219
+ ];
220
+ }
221
+ }
222
+ }
223
+ }
224
+ exports.Transaction = Transaction;
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHVEQWM4QjtBQUU5Qiw4Q0FReUI7QUFFekIsbUNBQWdIO0FBR2hILGtEQUEyQjtBQUUzQixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUs5QyxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBNEIsRUFBRSxPQUFnQjs7UUFDdkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksZ0NBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxJQUFJLENBQUMsUUFBUSxtQ0FBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hGLEtBQUssTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsTUFBTSxJQUFJLHVCQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUMvQztZQUNELE1BQU0sT0FBTyxHQUFHLHFDQUFzQixD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QUMsQ0FBQyxDQUFDO2dCQUMvRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDeEU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRztvQkFDZDt3QkFDRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlO3dCQUN2QyxLQUFLLEVBQUUsR0FBRzt3QkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO3FCQUM1QjtpQkFDRixDQUFDO2dCQUVGLElBQUksQ0FBQyxPQUFPLEdBQUc7b0JBQ2I7d0JBQ0UsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNwQixLQUFLLEVBQUUsR0FBRzt3QkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO3FCQUM1QjtpQkFDRixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7Q0FDRjtBQW5PRCxrQ0FtT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhZGRyZXNzVG9TdHJpbmcsXG4gIEJ1ZmZlclJlYWRlcixcbiAgY3JlYXRlU3RhY2tzUHJpdmF0ZUtleSxcbiAgY3JlYXRlU3RhY2tzUHVibGljS2V5LFxuICBjcmVhdGVUcmFuc2FjdGlvbkF1dGhGaWVsZCxcbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbixcbiAgaXNTaW5nbGVTaWcsXG4gIE11bHRpU2lnU3BlbmRpbmdDb25kaXRpb24sXG4gIFBheWxvYWRUeXBlLFxuICBQdWJLZXlFbmNvZGluZyxcbiAgU3RhY2tzTWVzc2FnZVR5cGUsXG4gIFN0YWNrc1RyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblNpZ25lcixcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgU3RhY2tzTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIE5vdFN1cHBvcnRlZCxcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFNpZ25hdHVyZURhdGEsIFN0YWNrc0NvbnRyYWN0UGF5bG9hZCwgU3RhY2tzVHJhbnNhY3Rpb25QYXlsb2FkLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGZ1bmN0aW9uQXJnc1RvU2VuZFBhcmFtcywgZ2V0VHhTZW5kZXJBZGRyZXNzLCByZW1vdmVIZXhQcmVmaXgsIHN0cmluZ2lmeUN2LCB1bnBhZE1lbW8gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQ29udHJhY3RDYWxsUGF5bG9hZCB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zL2Rpc3QvcGF5bG9hZCc7XG5pbXBvcnQgQmlnTnVtIGZyb20gJ2JuLmpzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfc3R4VHJhbnNhY3Rpb246IFN0YWNrc1RyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfc2lnSGFzaDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyW10gfCBLZXlQYWlyLCBzaWdIYXNoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qga2V5UGFpcnMgPSBrZXlQYWlyIGluc3RhbmNlb2YgQXJyYXkgPyBrZXlQYWlyIDogW2tleVBhaXJdO1xuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBUcmFuc2FjdGlvblNpZ25lcih0aGlzLl9zdHhUcmFuc2FjdGlvbik7XG4gICAgc2lnbmVyLmNoZWNrT3ZlcnNpZ24gPSBmYWxzZTtcbiAgICBzaWduZXIuc2lnSGFzaCA9IHNpZ0hhc2ggPz8gdGhpcy5fc2lnSGFzaCA/PyB0aGlzLl9zdHhUcmFuc2FjdGlvbi52ZXJpZnlCZWdpbigpO1xuICAgIGZvciAoY29uc3Qga3Agb2Yga2V5UGFpcnMpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBrcC5nZXRLZXlzKGtwLmdldENvbXByZXNzZWQoKSk7XG4gICAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByaXZLZXkgPSBjcmVhdGVTdGFja3NQcml2YXRlS2V5KGtleXMucHJ2KTtcbiAgICAgIHNpZ25lci5zaWduT3JpZ2luKHByaXZLZXkpO1xuICAgICAgdGhpcy5fc2lnSGFzaCA9IHNpZ25lci5zaWdIYXNoO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFwcGVuZE9yaWdpbihwdWJLZXlTdHJpbmc6IHN0cmluZ1tdIHwgc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHViS2V5U3RyaW5ncyA9IHB1YktleVN0cmluZyBpbnN0YW5jZW9mIEFycmF5ID8gcHViS2V5U3RyaW5nIDogW3B1YktleVN0cmluZ107XG4gICAgY29uc3Qgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lciA9IG5ldyBUcmFuc2FjdGlvblNpZ25lcih0aGlzLl9zdHhUcmFuc2FjdGlvbik7XG4gICAgcHViS2V5U3RyaW5ncy5mb3JFYWNoKChwdWJLZXkpID0+IHtcbiAgICAgIHNpZ25lci5hcHBlbmRPcmlnaW4oY3JlYXRlU3RhY2tzUHVibGljS2V5KHB1YktleSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2lnbldpdGhTaWduYXR1cmVzKHNpZ25hdHVyZTogU2lnbmF0dXJlRGF0YVtdIHwgU2lnbmF0dXJlRGF0YSwgaXNNdWx0aVNpZzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2lnbmF0dXJlKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHNpZ25hdHVyZXMnKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlcyA9IHNpZ25hdHVyZSBpbnN0YW5jZW9mIEFycmF5ID8gc2lnbmF0dXJlIDogW3NpZ25hdHVyZV07XG5cbiAgICBpZiAoIWlzTXVsdGlTaWcpIHtcbiAgICAgIHRoaXMuX3N0eFRyYW5zYWN0aW9uID0gdGhpcy5fc3R4VHJhbnNhY3Rpb24uY3JlYXRlVHhXaXRoU2lnbmF0dXJlKHNpZ25hdHVyZXNbMF0uZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGF1dGhGaWVsZHMgPSBzaWduYXR1cmVzLm1hcCgoc2lnKSA9PiBjcmVhdGVUcmFuc2FjdGlvbkF1dGhGaWVsZChQdWJLZXlFbmNvZGluZy5Db21wcmVzc2VkLCBzaWcpKTtcbiAgICAgICh0aGlzLl9zdHhUcmFuc2FjdGlvbi5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uIGFzIE11bHRpU2lnU3BlbmRpbmdDb25kaXRpb24pLmZpZWxkcyA9IChcbiAgICAgICAgdGhpcy5fc3R4VHJhbnNhY3Rpb24uYXV0aC5zcGVuZGluZ0NvbmRpdGlvbiBhcyBNdWx0aVNpZ1NwZW5kaW5nQ29uZGl0aW9uXG4gICAgICApLmZpZWxkcy5jb25jYXQoYXV0aEZpZWxkcyk7XG4gICAgfVxuICAgIGlmIChzaWduYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ0hhc2ggPSBzaWduYXR1cmVzW3NpZ25hdHVyZXMubGVuZ3RoIC0gMV0uc2lnSGFzaDtcbiAgICB9XG4gIH1cblxuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5fc3R4VHJhbnNhY3Rpb24gJiYgdGhpcy5fc3R4VHJhbnNhY3Rpb24uYXV0aC5zcGVuZGluZ0NvbmRpdGlvbikge1xuICAgICAgaWYgKGlzU2luZ2xlU2lnKHRoaXMuX3N0eFRyYW5zYWN0aW9uLmF1dGguc3BlbmRpbmdDb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5fc3R4VHJhbnNhY3Rpb24uYXV0aC5zcGVuZGluZ0NvbmRpdGlvbi5zaWduYXR1cmUuZGF0YV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaWduYXR1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICB0aGlzLl9zdHhUcmFuc2FjdGlvbi5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5jb250ZW50cy50eXBlID09PSBTdGFja3NNZXNzYWdlVHlwZS5NZXNzYWdlU2lnbmF0dXJlKSB7XG4gICAgICAgICAgICBzaWduYXR1cmVzLnB1c2goZmllbGQuY29udGVudHMuZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N0eFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLl9zdHhUcmFuc2FjdGlvbi50eGlkKCksXG4gICAgICBmZWU6IHRoaXMuX3N0eFRyYW5zYWN0aW9uLmF1dGguZ2V0RmVlKCkudG9TdHJpbmcoMTApLFxuICAgICAgZnJvbTogZ2V0VHhTZW5kZXJBZGRyZXNzKHRoaXMuX3N0eFRyYW5zYWN0aW9uKSxcbiAgICAgIG5vbmNlOiB0aGlzLmdldE5vbmNlKCksXG4gICAgICBwYXlsb2FkOiB0aGlzLmdldFBheWxvYWREYXRhKCksXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXlsb2FkRGF0YSgpOiBTdGFja3NUcmFuc2FjdGlvblBheWxvYWQgfCBTdGFja3NDb250cmFjdFBheWxvYWQge1xuICAgIGlmICh0aGlzLl9zdHhUcmFuc2FjdGlvbi5wYXlsb2FkLnBheWxvYWRUeXBlID09PSBQYXlsb2FkVHlwZS5Ub2tlblRyYW5zZmVyKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5fc3R4VHJhbnNhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IHR4UGF5bG9hZDogU3RhY2tzVHJhbnNhY3Rpb25QYXlsb2FkID0ge1xuICAgICAgICBwYXlsb2FkVHlwZTogUGF5bG9hZFR5cGUuVG9rZW5UcmFuc2ZlcixcbiAgICAgICAgLy8gcmVzdWx0LnBheWxvYWQubWVtbyB3aWxsIGJlIHBhZGRlZCB3aXRoIFxcdTAwMDAgdXAgdG9cbiAgICAgICAgLy8gTUVNT19NQVhfTEVOR1RIX0JZVEVTIGFzIGRlZmluZWQgaW4gQHN0YWNrcy90cmFuc2FjdGlvbnNcbiAgICAgICAgbWVtbzogdW5wYWRNZW1vKHBheWxvYWQubWVtby5jb250ZW50KSxcbiAgICAgICAgdG86IGFkZHJlc3NUb1N0cmluZyh7XG4gICAgICAgICAgdHlwZTogU3RhY2tzTWVzc2FnZVR5cGUuQWRkcmVzcyxcbiAgICAgICAgICB2ZXJzaW9uOiBwYXlsb2FkLnJlY2lwaWVudC5hZGRyZXNzLnZlcnNpb24sXG4gICAgICAgICAgaGFzaDE2MDogcGF5bG9hZC5yZWNpcGllbnQuYWRkcmVzcy5oYXNoMTYwLnRvU3RyaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBhbW91bnQ6IHBheWxvYWQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHR4UGF5bG9hZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3N0eFRyYW5zYWN0aW9uLnBheWxvYWQucGF5bG9hZFR5cGUgPT09IFBheWxvYWRUeXBlLkNvbnRyYWN0Q2FsbCkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuX3N0eFRyYW5zYWN0aW9uLnBheWxvYWQ7XG4gICAgICBjb25zdCBjb250cmFjdFBheWxvYWQ6IFN0YWNrc0NvbnRyYWN0UGF5bG9hZCA9IHtcbiAgICAgICAgcGF5bG9hZFR5cGU6IFBheWxvYWRUeXBlLkNvbnRyYWN0Q2FsbCxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBhZGRyZXNzVG9TdHJpbmcocGF5bG9hZC5jb250cmFjdEFkZHJlc3MpLFxuICAgICAgICBjb250cmFjdE5hbWU6IHBheWxvYWQuY29udHJhY3ROYW1lLmNvbnRlbnQsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogcGF5bG9hZC5mdW5jdGlvbk5hbWUuY29udGVudCxcbiAgICAgICAgZnVuY3Rpb25BcmdzOiBwYXlsb2FkLmZ1bmN0aW9uQXJncy5tYXAoc3RyaW5naWZ5Q3YpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBjb250cmFjdFBheWxvYWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ3BheWxvYWQgdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIGEgdHJhbnNhY3Rpb24uICBUaGlzIGlzIG5lZWRlZCB0byBjYWxjdWxhdGVcbiAgICogdGhlIHRyYW5zYWN0aW9uIGZlZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gc2l6ZSBpbiBieXRlcyBvZiB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgdHJhbnNhY3Rpb25TaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0eFRyYW5zYWN0aW9uLnNlcmlhbGl6ZSgpLmxlbmd0aDtcbiAgfVxuXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdHhUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N0eFRyYW5zYWN0aW9uLnNlcmlhbGl6ZSgpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIGdldCBzdHhUcmFuc2FjdGlvbigpOiBTdGFja3NUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0eFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0IHN0eFRyYW5zYWN0aW9uKHQ6IFN0YWNrc1RyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fc3R4VHJhbnNhY3Rpb24gPSB0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb25jZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9zdHhUcmFuc2FjdGlvbi5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHRoaXMuX3N0eFRyYW5zYWN0aW9uLmF1dGguc3BlbmRpbmdDb25kaXRpb24ubm9uY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ3NwZW5kaW5nIGNvbmRpdGlvbiBpcyBudWxsJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByYXcgPSByZW1vdmVIZXhQcmVmaXgocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9zdHhUcmFuc2FjdGlvbiA9IGRlc2VyaWFsaXplVHJhbnNhY3Rpb24oQnVmZmVyUmVhZGVyLmZyb21CdWZmZXIoQnVmZmVyLmZyb20ocmF3LCAnaGV4JykpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFcnJvciBwYXJzaW5nIHRoZSByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldFxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbiB1c2luZyB0aGUgdHJhbnNhY3Rpb24ganNvblxuICAgKiBpZiB0aGVyZSBhcmUgb3V0cHV0cy5cbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHR4SnNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgaWYgKHR4SnNvbi5wYXlsb2FkLnBheWxvYWRUeXBlID09PSBQYXlsb2FkVHlwZS5Ub2tlblRyYW5zZmVyKSB7XG4gICAgICBpZiAodHhKc29uLnBheWxvYWQudG8gJiYgdHhKc29uLnBheWxvYWQuYW1vdW50KSB7XG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdHhKc29uLnBheWxvYWQudG8sXG4gICAgICAgICAgICB2YWx1ZTogdHhKc29uLnBheWxvYWQuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5faW5wdXRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHR4SnNvbi5mcm9tLFxuICAgICAgICAgICAgdmFsdWU6IHR4SnNvbi5wYXlsb2FkLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHhKc29uLnBheWxvYWQucGF5bG9hZFR5cGUgPT09IFBheWxvYWRUeXBlLkNvbnRyYWN0Q2FsbCkge1xuICAgICAgaWYgKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcyA9PT0gKHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBTdGFja3NOZXR3b3JrKS5zZW5kbWFueW1lbW9Db250cmFjdEFkZHJlc3MpIHtcbiAgICAgICAgY29uc3Qgc2VuZFBhcmFtcyA9IGZ1bmN0aW9uQXJnc1RvU2VuZFBhcmFtcygodGhpcy5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQpLmZ1bmN0aW9uQXJncyk7XG4gICAgICAgIGNvbnN0IGNvaW4gPSB0aGlzLl9jb2luQ29uZmlnLm5hbWU7XG4gICAgICAgIGNvbnN0IHN1bTogQmlnTnVtID0gc2VuZFBhcmFtcy5yZWR1Y2UoKGN1cnJlbnQsIG5leHQpID0+IGN1cnJlbnQuYWRkKG5ldyBCaWdOdW0obmV4dC5hbW91bnQpKSwgbmV3IEJpZ051bSgwKSk7XG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBzZW5kUGFyYW1zLm1hcCgoc2VuZFBhcmFtKSA9PiAoeyBhZGRyZXNzOiBzZW5kUGFyYW0uYWRkcmVzcywgdmFsdWU6IHNlbmRQYXJhbS5hbW91bnQsIGNvaW4gfSkpO1xuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbeyBhZGRyZXNzOiB0eEpzb24uZnJvbSwgdmFsdWU6IHN1bS50b1N0cmluZygpLCBjb2luIH1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5faW5wdXRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHR4SnNvbi5mcm9tLFxuICAgICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,86 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
+ import { StacksNetwork } from '@stacks/network';
4
+ import { BaseAddress, BaseFee, BaseKey, BaseTransactionBuilder } from '@bitgo/sdk-core';
5
+ import { Transaction } from './transaction';
6
+ import { KeyPair } from './keyPair';
7
+ import { SignatureData } from './iface';
8
+ export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
9
+ private _transaction;
10
+ protected _anchorMode: number;
11
+ protected _fee: BaseFee;
12
+ protected _nonce: number;
13
+ protected _memo: string;
14
+ protected _numberSignatures: number;
15
+ protected _multiSignerKeyPairs: KeyPair[];
16
+ protected _signatures: SignatureData[];
17
+ protected _network: StacksNetwork;
18
+ protected _fromPubKeys: string[];
19
+ constructor(_coinConfig: Readonly<CoinConfig>);
20
+ /**
21
+ * Initialize the transaction builder fields using the decoded transaction data
22
+ *
23
+ * @param {Transaction} tx the transaction data
24
+ */
25
+ initBuilder(tx: Transaction): void;
26
+ /** @inheritdoc */
27
+ protected fromImplementation(rawTransaction: string): Transaction;
28
+ /** @inheritdoc */
29
+ protected buildImplementation(): Promise<Transaction>;
30
+ private getSignature;
31
+ private getPrivateKey;
32
+ /** @inheritdoc */
33
+ protected signImplementation(key: BaseKey): Transaction;
34
+ /** @inheritdoc */
35
+ protected get transaction(): Transaction;
36
+ /** @inheritdoc */
37
+ protected set transaction(transaction: Transaction);
38
+ /**
39
+ * Validates that the given key is not already in this._multiSignerKeyPairs
40
+ *
41
+ * @param {BaseKey} key - The key to check
42
+ */
43
+ private checkDuplicatedKeys;
44
+ /**
45
+ * Set the transaction fees
46
+ *
47
+ * @param {BaseFee} fee The maximum gas to pay
48
+ * @returns {TransactionBuilder} This transaction builder
49
+ */
50
+ fee(fee: BaseFee): this;
51
+ nonce(n: number): this;
52
+ fromPubKey(senderPubKey: string | string[]): this;
53
+ /**
54
+ * Set the memo
55
+ *
56
+ * @param {string} memo
57
+ * @returns {TransactionBuilder} This transaction builder
58
+ */
59
+ memo(memo: string): this;
60
+ /**
61
+ * Set the number of signatures for multi-sig
62
+ *
63
+ * @param {number} numSigns
64
+ * @returns {TransactionBuilder} This transaction builder
65
+ */
66
+ numberSignatures(numSigns: number): this;
67
+ /** @inheritdoc */
68
+ validateAddress(address: BaseAddress, addressFormat?: string): void;
69
+ /** @inheritdoc */
70
+ validateKey(key: BaseKey): void;
71
+ /** @inheritdoc */
72
+ validateRawTransaction(rawTransaction: string): void;
73
+ /** @inheritdoc */
74
+ validateTransaction(transaction?: Transaction): void;
75
+ /** @inheritdoc */
76
+ validateValue(value: BigNumber): void;
77
+ /**
78
+ * Validates that the fee field is defined
79
+ */
80
+ private validateFee;
81
+ /**
82
+ * Validates that nonce is defined
83
+ */
84
+ private validateNonce;
85
+ }
86
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAe,MAAM,gBAAgB,CAAC;AAarE,OAAO,EAAE,aAAa,EAAgC,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,sBAAsB,EAOvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIxC,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;IAC1C,SAAS,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC;IAClC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAW7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IA2ClC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAYjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAwB3D,OAAO,CAAC,YAAY,CAC8B;IAClD,OAAO,CAAC,aAAa,CACoF;IAEzG,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAmBvD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAMvB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAajD;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOxC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAO/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAKpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,aAAa;CAUtB"}