@bitgo/sdk-coin-flrp 1.6.0 → 1.6.2
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.
- package/dist/src/flrp.d.ts +1 -1
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +3 -3
- package/dist/src/lib/ExportInCTxBuilder.d.ts +5 -13
- package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInCTxBuilder.js +24 -62
- package/dist/src/lib/ExportInPTxBuilder.d.ts +2 -25
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInPTxBuilder.js +37 -213
- package/dist/src/lib/ImportInCTxBuilder.d.ts +1 -19
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInCTxBuilder.js +56 -132
- package/dist/src/lib/ImportInPTxBuilder.d.ts +13 -12
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInPTxBuilder.js +83 -155
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -6
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +1 -14
- package/dist/src/lib/atomicTransactionBuilder.d.ts +35 -17
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +105 -138
- package/dist/src/lib/iface.d.ts +31 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +9 -2
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -2
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +1 -7
- package/dist/src/lib/transaction.d.ts +10 -6
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +13 -15
- package/dist/src/lib/transactionBuilder.d.ts +24 -16
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +46 -28
- package/dist/src/lib/utils.d.ts +40 -8
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +81 -10
- package/dist/test/resources/account.d.ts +30 -0
- package/dist/test/resources/account.d.ts.map +1 -1
- package/dist/test/resources/account.js +27 -2
- package/dist/test/resources/transactionData/exportInC.d.ts +30 -0
- package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -1
- package/dist/test/resources/transactionData/exportInC.js +32 -8
- package/dist/test/resources/transactionData/exportInP.d.ts +39 -48
- package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -1
- package/dist/test/resources/transactionData/exportInP.js +70 -109
- package/dist/test/resources/transactionData/importInC.d.ts +39 -10
- package/dist/test/resources/transactionData/importInC.d.ts.map +1 -1
- package/dist/test/resources/transactionData/importInC.js +102 -25
- package/dist/test/resources/transactionData/importInP.d.ts +46 -15
- package/dist/test/resources/transactionData/importInP.d.ts.map +1 -1
- package/dist/test/resources/transactionData/importInP.js +65 -39
- package/dist/test/unit/flrp.js +18 -18
- package/dist/test/unit/lib/exportInCTxBuilder.js +59 -32
- package/dist/test/unit/lib/exportInPTxBuilder.js +50 -85
- package/dist/test/unit/lib/importInCTxBuilder.js +470 -10
- package/dist/test/unit/lib/importInPTxBuilder.js +56 -37
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -1
- package/dist/test/unit/lib/signFlowTestSuit.js +1 -7
- package/dist/test/unit/lib/transactionBuilderFactory.js +2 -2
- package/dist/test/unit/lib/utils.js +139 -45
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
|
@@ -22,23 +22,11 @@ class ExportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
22
22
|
get transactionType() {
|
|
23
23
|
return sdk_core_1.TransactionType.Export;
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Amount is a bigint that specifies the quantity of the asset that this output owns. Must be positive.
|
|
27
|
-
* @param {bigint | string} amount The withdrawal amount
|
|
28
|
-
*/
|
|
29
|
-
amount(value) {
|
|
30
|
-
const valueBigInt = typeof value === 'string' ? BigInt(value) : value;
|
|
31
|
-
this.validateAmount(valueBigInt);
|
|
32
|
-
this._amount = valueBigInt;
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
25
|
initBuilder(tx, rawBytes, parsedCredentials) {
|
|
36
26
|
const exportTx = tx;
|
|
37
27
|
if (!this.verifyTxType(exportTx._type)) {
|
|
38
28
|
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
39
29
|
}
|
|
40
|
-
// The exportedOutputs is a TransferableOutput array.
|
|
41
|
-
// It's expected to have only one output with the addresses of the sender.
|
|
42
30
|
const outputs = exportTx.outs;
|
|
43
31
|
if (outputs.length !== 1) {
|
|
44
32
|
throw new sdk_core_1.BuildTransactionError('Transaction can have one external output');
|
|
@@ -50,72 +38,34 @@ class ExportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
50
38
|
throw new Error('The Asset ID of the output does not match the transaction');
|
|
51
39
|
}
|
|
52
40
|
const outputOwners = outputTransfer.outputOwners;
|
|
53
|
-
// Set locktime from output
|
|
54
41
|
this.transaction._locktime = outputOwners.locktime.value();
|
|
55
|
-
// Set threshold from output
|
|
56
42
|
this.transaction._threshold = outputOwners.threshold.value();
|
|
57
|
-
// Convert output addresses to buffers and set as fromAddresses
|
|
58
43
|
this.transaction._fromAddresses = outputOwners.addrs.map((addr) => Buffer.from(addr.toBytes()));
|
|
59
|
-
// Set external chain ID from the destination chain
|
|
60
44
|
this._externalChainId = Buffer.from(exportTx.destination.toBytes());
|
|
61
|
-
|
|
62
|
-
this._amount = outputTransfer.amount();
|
|
63
|
-
// Recover UTXOs from base tx inputs
|
|
45
|
+
this.transaction._amount = outputTransfer.amount();
|
|
64
46
|
this.transaction._utxos = this.recoverUtxos([...exportTx.baseTx.inputs]);
|
|
65
|
-
// Calculate and set fee from input/output difference
|
|
66
47
|
const totalInputAmount = exportTx.baseTx.inputs.reduce((sum, input) => sum + input.amount(), BigInt(0));
|
|
67
48
|
const changeOutputAmount = exportTx.baseTx.outputs.reduce((sum, out) => {
|
|
68
49
|
const transferOut = out.output;
|
|
69
50
|
return sum + transferOut.amount();
|
|
70
51
|
}, BigInt(0));
|
|
71
|
-
const fee = totalInputAmount - changeOutputAmount - this._amount;
|
|
52
|
+
const fee = totalInputAmount - changeOutputAmount - this.transaction._amount;
|
|
72
53
|
this.transaction._fee.fee = fee.toString();
|
|
73
|
-
// Use credentials passed from TransactionBuilderFactory (properly extracted using codec)
|
|
74
54
|
const credentials = parsedCredentials || [];
|
|
75
55
|
const hasCredentials = credentials.length > 0;
|
|
76
|
-
// If there are credentials, store the original bytes to preserve exact format
|
|
77
56
|
if (rawBytes && hasCredentials) {
|
|
78
57
|
this.transaction._rawSignedBytes = rawBytes;
|
|
79
58
|
}
|
|
80
|
-
// Create proper UnsignedTx wrapper with credentials
|
|
81
|
-
const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b));
|
|
82
|
-
// When credentials were extracted, use them directly to preserve existing signatures
|
|
83
|
-
// Otherwise, create empty credentials with dynamic ordering based on addressesIndex
|
|
84
|
-
// Match avaxp behavior: order depends on UTXO address positions
|
|
85
59
|
const txCredentials = credentials.length > 0
|
|
86
60
|
? credentials
|
|
87
61
|
: exportTx.baseTx.inputs.map((input, inputIdx) => {
|
|
88
62
|
const transferInput = input.input;
|
|
89
63
|
const inputThreshold = transferInput.sigIndicies().length || this.transaction._threshold;
|
|
90
|
-
// Get UTXO for this input to determine addressesIndex
|
|
91
64
|
const utxo = this.transaction._utxos[inputIdx];
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const bitgoIndex = 1;
|
|
95
|
-
// If UTXO has addresses, compute dynamic ordering
|
|
96
|
-
if (utxo && utxo.addresses && utxo.addresses.length > 0) {
|
|
97
|
-
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
98
|
-
const addressesIndex = this.transaction._fromAddresses.map((a) => utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0));
|
|
99
|
-
// Dynamic ordering based on addressesIndex
|
|
100
|
-
let sigSlots;
|
|
101
|
-
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
102
|
-
// Bitgo comes first: [zeros, userAddress]
|
|
103
|
-
sigSlots = [
|
|
104
|
-
utils_1.default.createNewSig(''),
|
|
105
|
-
utils_1.default.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')),
|
|
106
|
-
];
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// User comes first: [userAddress, zeros]
|
|
110
|
-
sigSlots = [
|
|
111
|
-
utils_1.default.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')),
|
|
112
|
-
utils_1.default.createNewSig(''),
|
|
113
|
-
];
|
|
114
|
-
}
|
|
115
|
-
return new flarejs_1.Credential(sigSlots);
|
|
65
|
+
if (inputThreshold === this.transaction._threshold) {
|
|
66
|
+
return this.createCredentialForUtxo(utxo, this.transaction._threshold);
|
|
116
67
|
}
|
|
117
68
|
else {
|
|
118
|
-
// Fallback: use all zeros if no UTXO addresses available
|
|
119
69
|
const sigSlots = [];
|
|
120
70
|
for (let i = 0; i < inputThreshold; i++) {
|
|
121
71
|
sigSlots.push(utils_1.default.createNewSig(''));
|
|
@@ -123,16 +73,7 @@ class ExportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
123
73
|
return new flarejs_1.Credential(sigSlots);
|
|
124
74
|
}
|
|
125
75
|
});
|
|
126
|
-
|
|
127
|
-
// Each address map contains all addresses mapped to their indices
|
|
128
|
-
const addressMaps = txCredentials.map(() => {
|
|
129
|
-
const addressMap = new flarejs_1.utils.AddressMap();
|
|
130
|
-
sortedAddresses.forEach((addr, i) => {
|
|
131
|
-
addressMap.set(new flarejs_1.Address(addr), i);
|
|
132
|
-
});
|
|
133
|
-
return addressMap;
|
|
134
|
-
});
|
|
135
|
-
// Always create a new UnsignedTx with properly structured credentials
|
|
76
|
+
const addressMaps = txCredentials.map((credential, credIdx) => this.createAddressMapForUtxo(this.transaction._utxos[credIdx], this.transaction._threshold));
|
|
136
77
|
const unsignedTx = new flarejs_1.UnsignedTx(exportTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
137
78
|
this.transaction.setTransaction(unsignedTx);
|
|
138
79
|
return this;
|
|
@@ -147,159 +88,43 @@ class ExportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
147
88
|
* Build the export transaction for P-chain
|
|
148
89
|
* @protected
|
|
149
90
|
*/
|
|
150
|
-
buildFlareTransaction() {
|
|
151
|
-
// if tx has credentials, tx shouldn't change
|
|
91
|
+
async buildFlareTransaction() {
|
|
152
92
|
if (this.transaction.hasCredentials)
|
|
153
93
|
return;
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const targetAmount = this._amount + fee;
|
|
158
|
-
// Verify we have enough funds
|
|
159
|
-
if (totalAmount < targetAmount) {
|
|
160
|
-
throw new sdk_core_1.BuildTransactionError(`Insufficient funds: have ${totalAmount}, need ${targetAmount}`);
|
|
94
|
+
const feeState = this.transaction._feeState;
|
|
95
|
+
if (!feeState) {
|
|
96
|
+
throw new sdk_core_1.BuildTransactionError('Fee state is required');
|
|
161
97
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
inputs, // inputs
|
|
165
|
-
new flarejs_1.Bytes(new Uint8Array(0)) // empty memo
|
|
166
|
-
);
|
|
167
|
-
// Create the P-chain export transaction using pvmSerial.ExportTx
|
|
168
|
-
const exportTx = new flarejs_1.pvmSerial.ExportTx(baseTx, new flarejs_1.Id(this._externalChainId), // destinationChain (C-chain)
|
|
169
|
-
this.exportedOutputs() // exportedOutputs
|
|
170
|
-
);
|
|
171
|
-
// Create address maps for signing - one per input/credential
|
|
172
|
-
const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b));
|
|
173
|
-
const addressMaps = credentials.map(() => {
|
|
174
|
-
const addressMap = new flarejs_1.utils.AddressMap();
|
|
175
|
-
sortedAddresses.forEach((addr, i) => {
|
|
176
|
-
addressMap.set(new flarejs_1.Address(addr), i);
|
|
177
|
-
});
|
|
178
|
-
return addressMap;
|
|
179
|
-
});
|
|
180
|
-
// Create unsigned transaction
|
|
181
|
-
const unsignedTx = new flarejs_1.UnsignedTx(exportTx, [], // Empty UTXOs array
|
|
182
|
-
new flarejs_1.utils.AddressMaps(addressMaps), credentials);
|
|
183
|
-
this.transaction.setTransaction(unsignedTx);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Create inputs from UTXOs for P-chain export
|
|
187
|
-
* Only selects enough UTXOs to cover the target amount (amount + fee)
|
|
188
|
-
* @returns inputs, change outputs, credentials, and total amount
|
|
189
|
-
*/
|
|
190
|
-
createExportInputs() {
|
|
191
|
-
const sender = [...this.transaction._fromAddresses];
|
|
192
|
-
if (this.recoverSigner) {
|
|
193
|
-
// switch first and last signer
|
|
194
|
-
const tmp = sender.pop();
|
|
195
|
-
sender.push(sender[0]);
|
|
196
|
-
if (tmp) {
|
|
197
|
-
sender[0] = tmp;
|
|
198
|
-
}
|
|
98
|
+
if (!this.transaction._context) {
|
|
99
|
+
throw new sdk_core_1.BuildTransactionError('context is required');
|
|
199
100
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
let totalAmount = BigInt(0);
|
|
203
|
-
const inputs = [];
|
|
204
|
-
const credentials = [];
|
|
205
|
-
// Change output threshold is always 1 (matching Flare protocol behavior)
|
|
206
|
-
// This allows easier spending of change while maintaining security for export outputs
|
|
207
|
-
const changeOutputThreshold = 1;
|
|
208
|
-
// Only consume enough UTXOs to cover the target amount (in array order)
|
|
209
|
-
// Inputs will be sorted after selection
|
|
210
|
-
for (const utxo of this.transaction._utxos) {
|
|
211
|
-
// Stop if we already have enough
|
|
212
|
-
if (totalAmount >= targetAmount) {
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
const amount = BigInt(utxo.amount);
|
|
216
|
-
totalAmount += amount;
|
|
217
|
-
// Use the UTXO's own threshold for signature indices
|
|
218
|
-
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
219
|
-
// Create signature indices for the UTXO's threshold
|
|
220
|
-
const sigIndices = [];
|
|
221
|
-
for (let i = 0; i < utxoThreshold; i++) {
|
|
222
|
-
sigIndices.push(i);
|
|
223
|
-
}
|
|
224
|
-
// Use fromNative to create TransferableInput
|
|
225
|
-
const txIdCb58 = utxo.txid; // Already cb58 encoded
|
|
226
|
-
const assetIdCb58 = utils_1.default.cb58Encode(Buffer.from(this.transaction._assetId, 'hex'));
|
|
227
|
-
const transferableInput = flarejs_1.TransferableInput.fromNative(txIdCb58, Number(utxo.outputidx), assetIdCb58, amount, sigIndices);
|
|
228
|
-
inputs.push(transferableInput);
|
|
229
|
-
// Create credential with empty signatures for slot identification
|
|
230
|
-
// Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO
|
|
231
|
-
const hasAddresses = this.transaction._fromAddresses && this.transaction._fromAddresses.length >= this.transaction._threshold;
|
|
232
|
-
if (!hasAddresses) {
|
|
233
|
-
// If addresses not available, use all zeros
|
|
234
|
-
const emptySignatures = sigIndices.map(() => utils_1.default.createNewSig(''));
|
|
235
|
-
credentials.push(new flarejs_1.Credential(emptySignatures));
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
// Compute addressesIndex: position of each _fromAddresses in UTXO's address list
|
|
239
|
-
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
240
|
-
const addressesIndex = this.transaction._fromAddresses.map((a) => utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0));
|
|
241
|
-
// either user (0) or recovery (2)
|
|
242
|
-
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
243
|
-
const bitgoIndex = 1;
|
|
244
|
-
// Dynamic ordering based on addressesIndex
|
|
245
|
-
let emptySignatures;
|
|
246
|
-
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
247
|
-
// Bitgo comes first in signature order: [zeros, userAddress]
|
|
248
|
-
emptySignatures = [
|
|
249
|
-
utils_1.default.createNewSig(''),
|
|
250
|
-
utils_1.default.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')),
|
|
251
|
-
];
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
// User comes first in signature order: [userAddress, zeros]
|
|
255
|
-
emptySignatures = [
|
|
256
|
-
utils_1.default.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')),
|
|
257
|
-
utils_1.default.createNewSig(''),
|
|
258
|
-
];
|
|
259
|
-
}
|
|
260
|
-
credentials.push(new flarejs_1.Credential(emptySignatures));
|
|
261
|
-
}
|
|
101
|
+
if (this.transaction._amount === undefined) {
|
|
102
|
+
throw new sdk_core_1.BuildTransactionError('amount is required');
|
|
262
103
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
const changeAmount = totalAmount - this._amount - fee;
|
|
266
|
-
if (changeAmount > BigInt(0)) {
|
|
267
|
-
const assetIdBytes = new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'));
|
|
268
|
-
// Create OutputOwners with the P-chain addresses (sorted by byte value as per AVAX protocol)
|
|
269
|
-
// Use threshold=1 for change outputs (matching Flare protocol behavior)
|
|
270
|
-
const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b));
|
|
271
|
-
const outputOwners = new flarejs_1.OutputOwners(new flarejs_1.BigIntPr(this.transaction._locktime), new flarejs_1.Int(changeOutputThreshold), sortedAddresses.map((addr) => new flarejs_1.Address(addr)));
|
|
272
|
-
const transferOutput = new flarejs_1.TransferOutput(new flarejs_1.BigIntPr(changeAmount), outputOwners);
|
|
273
|
-
const changeOutput = new flarejs_1.TransferableOutput(new flarejs_1.Id(assetIdBytes), transferOutput);
|
|
274
|
-
changeOutputs.push(changeOutput);
|
|
104
|
+
if (!this.transaction._utxos || this.transaction._utxos.length === 0) {
|
|
105
|
+
throw new sdk_core_1.BuildTransactionError('UTXOs are required');
|
|
275
106
|
}
|
|
276
|
-
//
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const assetIdBytes = new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'));
|
|
298
|
-
// Create OutputOwners with sorted addresses
|
|
299
|
-
const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b));
|
|
300
|
-
const outputOwners = new flarejs_1.OutputOwners(new flarejs_1.BigIntPr(this.transaction._locktime), new flarejs_1.Int(this.transaction._threshold), sortedAddresses.map((addr) => new flarejs_1.Address(addr)));
|
|
301
|
-
const output = new flarejs_1.TransferOutput(new flarejs_1.BigIntPr(this._amount), outputOwners);
|
|
302
|
-
return [new flarejs_1.TransferableOutput(new flarejs_1.Id(assetIdBytes), output)];
|
|
107
|
+
// Convert decoded UTXOs to native FlareJS Utxo objects
|
|
108
|
+
const assetIdCb58 = utils_1.default.cb58Encode(Buffer.from(this.transaction._assetId, 'hex'));
|
|
109
|
+
const nativeUtxos = utils_1.default.decodedToUtxos(this.transaction._utxos, assetIdCb58);
|
|
110
|
+
const totalUtxoAmount = nativeUtxos.reduce((sum, utxo) => {
|
|
111
|
+
const output = utxo.output;
|
|
112
|
+
return sum + output.amount();
|
|
113
|
+
}, BigInt(0));
|
|
114
|
+
if (totalUtxoAmount < this.transaction._amount) {
|
|
115
|
+
throw new sdk_core_1.BuildTransactionError(`Insufficient UTXO balance: have ${totalUtxoAmount.toString()} nFLR, need at least ${this.transaction._amount.toString()} nFLR (plus fee)`);
|
|
116
|
+
}
|
|
117
|
+
const assetId = utils_1.default.flareIdString(this.transaction._assetId).toString();
|
|
118
|
+
const fromAddresses = this.transaction._fromAddresses.map((addr) => Buffer.from(addr));
|
|
119
|
+
const transferableOutput = flarejs_1.TransferableOutput.fromNative(assetId, this.transaction._amount, fromAddresses, this.transaction._locktime, this.transaction._threshold);
|
|
120
|
+
const exportTx = flarejs_1.pvm.e.newExportTx({
|
|
121
|
+
feeState,
|
|
122
|
+
fromAddressesBytes: this.transaction._fromAddresses.map((addr) => Buffer.from(addr)),
|
|
123
|
+
destinationChainId: this.transaction._network.cChainBlockchainID,
|
|
124
|
+
outputs: [transferableOutput],
|
|
125
|
+
utxos: nativeUtxos,
|
|
126
|
+
}, this.transaction._context);
|
|
127
|
+
this.transaction.setTransaction(exportTx);
|
|
303
128
|
}
|
|
304
129
|
/**
|
|
305
130
|
* Recover UTXOs from inputs
|
|
@@ -309,7 +134,6 @@ class ExportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
309
134
|
recoverUtxos(inputs) {
|
|
310
135
|
return inputs.map((input) => {
|
|
311
136
|
const utxoId = input.utxoID;
|
|
312
|
-
// Get the threshold from the input's sigIndices length
|
|
313
137
|
const transferInput = input.input;
|
|
314
138
|
const inputThreshold = transferInput.sigIndicies().length;
|
|
315
139
|
return {
|
|
@@ -324,4 +148,4 @@ class ExportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
324
148
|
}
|
|
325
149
|
}
|
|
326
150
|
exports.ExportInPTxBuilder = ExportInPTxBuilder;
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9FeHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFnQitCO0FBQy9CLG9EQUE0QjtBQUM1QixtQ0FBOEY7QUFFOUYsTUFBYSxrQkFBbUIsU0FBUSxtREFBd0I7SUFHOUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsMkJBQTJCO1FBQzNCLDRDQUE0QztRQUM1QyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2Rix3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUM3RyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQXNCO1FBQzNCLE1BQU0sV0FBVyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxX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SUc7SUFDSyxZQUFZLENBQUMsTUFBMkI7UUFDOUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM1Qix1REFBdUQ7WUFDdkQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQXNCLENBQUM7WUFDbkQsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUMxRCxPQUFPO2dCQUNMLFFBQVEsRUFBRSxpQ0FBeUI7Z0JBQ25DLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUNqQyxJQUFJLEVBQUUsZUFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUM5QyxTQUFTLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDeEQsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3RELGVBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pHO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBOVpELGdEQThaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIHB2bVNlcmlhbCxcbiAgYXZheFNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgQmlnSW50UHIsXG4gIEludCxcbiAgSWQsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBUcmFuc2ZlcmFibGVPdXRwdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIEFkZHJlc3MsXG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBPdXRwdXRPd25lcnMsXG4gIENyZWRlbnRpYWwsXG4gIEJ5dGVzLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgRXhwb3J0SW5QVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfYW1vdW50OiBiaWdpbnQ7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIC8vIEZvciBFeHBvcnQgRlJPTSBQLWNoYWluOlxuICAgIC8vIC0gZXh0ZXJuYWwgY2hhaW4gKGRlc3RpbmF0aW9uKSBpcyBDLWNoYWluXG4gICAgLy8gLSBibG9ja2NoYWluIElEIChzb3VyY2UpIGlzIFAtY2hhaW5cbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKTtcbiAgICAvLyBQLWNoYWluIGJsb2NrY2hhaW4gSUQgKGZyb20gbmV0d29yayBjb25maWcgLSBkZWNvZGUgZnJvbSBjYjU4IHRvIGhleClcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQgPSBCdWZmZXIuZnJvbSh1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYmxvY2tjaGFpbklEKSkudG9TdHJpbmcoXG4gICAgICAnaGV4J1xuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuRXhwb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFtb3VudCBpcyBhIGJpZ2ludCB0aGF0IHNwZWNpZmllcyB0aGUgcXVhbnRpdHkgb2YgdGhlIGFzc2V0IHRoYXQgdGhpcyBvdXRwdXQgb3ducy4gTXVzdCBiZSBwb3NpdGl2ZS5cbiAgICogQHBhcmFtIHtiaWdpbnQgfCBzdHJpbmd9IGFtb3VudCBUaGUgd2l0aGRyYXdhbCBhbW91bnRcbiAgICovXG4gIGFtb3VudCh2YWx1ZTogYmlnaW50IHwgc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdmFsdWVCaWdJbnQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gQmlnSW50KHZhbHVlKSA6IHZhbHVlO1xuICAgIHRoaXMudmFsaWRhdGVBbW91bnQodmFsdWVCaWdJbnQpO1xuICAgIHRoaXMuX2Ftb3VudCA9IHZhbHVlQmlnSW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4LCByYXdCeXRlcz86IEJ1ZmZlciwgcGFyc2VkQ3JlZGVudGlhbHM/OiBDcmVkZW50aWFsW10pOiB0aGlzIHtcbiAgICBjb25zdCBleHBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5FeHBvcnRUeDtcblxuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUoZXhwb3J0VHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4cG9ydGVkT3V0cHV0cyBpcyBhIFRyYW5zZmVyYWJsZU91dHB1dCBhcnJheS5cbiAgICAvLyBJdCdzIGV4cGVjdGVkIHRvIGhhdmUgb25seSBvbmUgb3V0cHV0IHdpdGggdGhlIGFkZHJlc3NlcyBvZiB0aGUgc2VuZGVyLlxuICAgIGNvbnN0IG91dHB1dHMgPSBleHBvcnRUeC5vdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07XG4gICAgY29uc3Qgb3V0cHV0VHJhbnNmZXIgPSBvdXRwdXQub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgIGNvbnN0IGFzc2V0SWQgPSBvdXRwdXQuYXNzZXRJZC50b0J5dGVzKCk7XG4gICAgaWYgKEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKGFzc2V0SWQpLCBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dE93bmVycyA9IG91dHB1dFRyYW5zZmVyLm91dHB1dE93bmVycztcblxuICAgIC8vIFNldCBsb2NrdGltZSBmcm9tIG91dHB1dFxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG5cbiAgICAvLyBTZXQgdGhyZXNob2xkIGZyb20gb3V0cHV0XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuXG4gICAgLy8gQ29udmVydCBvdXRwdXQgYWRkcmVzc2VzIHRvIGJ1ZmZlcnMgYW5kIHNldCBhcyBmcm9tQWRkcmVzc2VzXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IG91dHB1dE93bmVycy5hZGRycy5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIudG9CeXRlcygpKSk7XG5cbiAgICAvLyBTZXQgZXh0ZXJuYWwgY2hhaW4gSUQgZnJvbSB0aGUgZGVzdGluYXRpb24gY2hhaW5cbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSBCdWZmZXIuZnJvbShleHBvcnRUeC5kZXN0aW5hdGlvbi50b0J5dGVzKCkpO1xuXG4gICAgLy8gU2V0IGFtb3VudCBmcm9tIGV4cG9ydGVkIG91dHB1dFxuICAgIHRoaXMuX2Ftb3VudCA9IG91dHB1dFRyYW5zZmVyLmFtb3VudCgpO1xuXG4gICAgLy8gUmVjb3ZlciBVVFhPcyBmcm9tIGJhc2UgdHggaW5wdXRzXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhbLi4uZXhwb3J0VHguYmFzZVR4LmlucHV0c10pO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZCBzZXQgZmVlIGZyb20gaW5wdXQvb3V0cHV0IGRpZmZlcmVuY2VcbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gZXhwb3J0VHguYmFzZVR4LmlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIGlucHV0LmFtb3VudCgpLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IGNoYW5nZU91dHB1dEFtb3VudCA9IGV4cG9ydFR4LmJhc2VUeC5vdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXQpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZmVyT3V0ID0gb3V0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgIHJldHVybiBzdW0gKyB0cmFuc2Zlck91dC5hbW91bnQoKTtcbiAgICB9LCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IGZlZSA9IHRvdGFsSW5wdXRBbW91bnQgLSBjaGFuZ2VPdXRwdXRBbW91bnQgLSB0aGlzLl9hbW91bnQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IGZlZS50b1N0cmluZygpO1xuXG4gICAgLy8gVXNlIGNyZWRlbnRpYWxzIHBhc3NlZCBmcm9tIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgKHByb3Blcmx5IGV4dHJhY3RlZCB1c2luZyBjb2RlYylcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlZENyZWRlbnRpYWxzIHx8IFtdO1xuICAgIGNvbnN0IGhhc0NyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMubGVuZ3RoID4gMDtcblxuICAgIC8vIElmIHRoZXJlIGFyZSBjcmVkZW50aWFscywgc3RvcmUgdGhlIG9yaWdpbmFsIGJ5dGVzIHRvIHByZXNlcnZlIGV4YWN0IGZvcm1hdFxuICAgIGlmIChyYXdCeXRlcyAmJiBoYXNDcmVkZW50aWFscykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fcmF3U2lnbmVkQnl0ZXMgPSByYXdCeXRlcztcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcHJvcGVyIFVuc2lnbmVkVHggd3JhcHBlciB3aXRoIGNyZWRlbnRpYWxzXG4gICAgY29uc3Qgc29ydGVkQWRkcmVzc2VzID0gWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdLnNvcnQoKGEsIGIpID0+IEJ1ZmZlci5jb21wYXJlKGEsIGIpKTtcblxuICAgIC8vIFdoZW4gY3JlZGVudGlhbHMgd2VyZSBleHRyYWN0ZWQsIHVzZSB0aGVtIGRpcmVjdGx5IHRvIHByZXNlcnZlIGV4aXN0aW5nIHNpZ25hdHVyZXNcbiAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSBlbXB0eSBjcmVkZW50aWFscyB3aXRoIGR5bmFtaWMgb3JkZXJpbmcgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXhcbiAgICAvLyBNYXRjaCBhdmF4cCBiZWhhdmlvcjogb3JkZXIgZGVwZW5kcyBvbiBVVFhPIGFkZHJlc3MgcG9zaXRpb25zXG4gICAgY29uc3QgdHhDcmVkZW50aWFscyA9XG4gICAgICBjcmVkZW50aWFscy5sZW5ndGggPiAwXG4gICAgICAgID8gY3JlZGVudGlhbHNcbiAgICAgICAgOiBleHBvcnRUeC5iYXNlVHguaW5wdXRzLm1hcCgoaW5wdXQsIGlucHV0SWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VGhyZXNob2xkID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG5cbiAgICAgICAgICAgIC8vIEdldCBVVFhPIGZvciB0aGlzIGlucHV0IHRvIGRldGVybWluZSBhZGRyZXNzZXNJbmRleFxuICAgICAgICAgICAgY29uc3QgdXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zW2lucHV0SWR4XTtcblxuICAgICAgICAgICAgLy8gZWl0aGVyIHVzZXIgKDApIG9yIHJlY292ZXJ5ICgyKVxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IHRoaXMucmVjb3ZlclNpZ25lciA/IDIgOiAwO1xuICAgICAgICAgICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICAgICAgICAgIC8vIElmIFVUWE8gaGFzIGFkZHJlc3NlcywgY29tcHV0ZSBkeW5hbWljIG9yZGVyaW5nXG4gICAgICAgICAgICBpZiAodXR4byAmJiB1dHhvLmFkZHJlc3NlcyAmJiB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHV0eG9BZGRyZXNzZXMgPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+XG4gICAgICAgICAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgLy8gRHluYW1pYyBvcmRlcmluZyBiYXNlZCBvbiBhZGRyZXNzZXNJbmRleFxuICAgICAgICAgICAgICBsZXQgc2lnU2xvdHM6IFJldHVyblR5cGU8dHlwZW9mIHV0aWxzLmNyZWF0ZU5ld1NpZz5bXTtcbiAgICAgICAgICAgICAgaWYgKGFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdIDwgYWRkcmVzc2VzSW5kZXhbZmlyc3RJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAvLyBCaXRnbyBjb21lcyBmaXJzdDogW3plcm9zLCB1c2VyQWRkcmVzc11cbiAgICAgICAgICAgICAgICBzaWdTbG90cyA9IFtcbiAgICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZygnJyksXG4gICAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKFxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBVc2VyIGNvbWVzIGZpcnN0OiBbdXNlckFkZHJlc3MsIHplcm9zXVxuICAgICAgICAgICAgICAgIHNpZ1Nsb3RzID0gW1xuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhcbiAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc1tmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbChzaWdTbG90cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBGYWxsYmFjazogdXNlIGFsbCB6ZXJvcyBpZiBubyBVVFhPIGFkZHJlc3NlcyBhdmFpbGFibGVcbiAgICAgICAgICAgICAgY29uc3Qgc2lnU2xvdHM6IFJldHVyblR5cGU8dHlwZW9mIHV0aWxzLmNyZWF0ZU5ld1NpZz5bXSA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzaWdTbG90cy5wdXNoKHV0aWxzLmNyZWF0ZU5ld1NpZygnJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbChzaWdTbG90cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYWRkcmVzcyBtYXBzIGZvciBzaWduaW5nIC0gb25lIHBlciBpbnB1dC9jcmVkZW50aWFsXG4gICAgLy8gRWFjaCBhZGRyZXNzIG1hcCBjb250YWlucyBhbGwgYWRkcmVzc2VzIG1hcHBlZCB0byB0aGVpciBpbmRpY2VzXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0eENyZWRlbnRpYWxzLm1hcCgoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzTWFwID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcCgpO1xuICAgICAgc29ydGVkQWRkcmVzc2VzLmZvckVhY2goKGFkZHIsIGkpID0+IHtcbiAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3MoYWRkciksIGkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWRkcmVzc01hcDtcbiAgICB9KTtcblxuICAgIC8vIEFsd2F5cyBjcmVhdGUgYSBuZXcgVW5zaWduZWRUeCB3aXRoIHByb3Blcmx5IHN0cnVjdHVyZWQgY3JlZGVudGlhbHNcbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoZXhwb3J0VHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIHR4Q3JlZGVudGlhbHMpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR4blR5cGUgPT09IEZsYXJlVHJhbnNhY3Rpb25UeXBlLlB2bUV4cG9ydFR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBFeHBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4blR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBleHBvcnQgdHJhbnNhY3Rpb24gZm9yIFAtY2hhaW5cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBpZiB0eCBoYXMgY3JlZGVudGlhbHMsIHR4IHNob3VsZG4ndCBjaGFuZ2VcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5oYXNDcmVkZW50aWFscykgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBpbnB1dHMsIGNoYW5nZU91dHB1dHMsIGNyZWRlbnRpYWxzLCB0b3RhbEFtb3VudCB9ID0gdGhpcy5jcmVhdGVFeHBvcnRJbnB1dHMoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBmZWUgZnJvbSB0cmFuc2FjdGlvbiBmZWUgc2V0dGluZ3NcbiAgICBjb25zdCBmZWUgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5mZWUuZmVlKTtcbiAgICBjb25zdCB0YXJnZXRBbW91bnQgPSB0aGlzLl9hbW91bnQgKyBmZWU7XG5cbiAgICAvLyBWZXJpZnkgd2UgaGF2ZSBlbm91Z2ggZnVuZHNcbiAgICBpZiAodG90YWxBbW91bnQgPCB0YXJnZXRBbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEluc3VmZmljaWVudCBmdW5kczogaGF2ZSAke3RvdGFsQW1vdW50fSwgbmVlZCAke3RhcmdldEFtb3VudH1gKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIEJhc2VUeCBmb3IgdGhlIFAtY2hhaW4gZXhwb3J0IHRyYW5zYWN0aW9uXG4gICAgY29uc3QgYmFzZVR4ID0gbmV3IGF2YXhTZXJpYWwuQmFzZVR4KFxuICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrSUQpLFxuICAgICAgbmV3IElkKEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCwgJ2hleCcpKSxcbiAgICAgIGNoYW5nZU91dHB1dHMsIC8vIGNoYW5nZSBvdXRwdXRzXG4gICAgICBpbnB1dHMsIC8vIGlucHV0c1xuICAgICAgbmV3IEJ5dGVzKG5ldyBVaW50OEFycmF5KDApKSAvLyBlbXB0eSBtZW1vXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgUC1jaGFpbiBleHBvcnQgdHJhbnNhY3Rpb24gdXNpbmcgcHZtU2VyaWFsLkV4cG9ydFR4XG4gICAgY29uc3QgZXhwb3J0VHggPSBuZXcgcHZtU2VyaWFsLkV4cG9ydFR4KFxuICAgICAgYmFzZVR4LFxuICAgICAgbmV3IElkKHRoaXMuX2V4dGVybmFsQ2hhaW5JZCksIC8vIGRlc3RpbmF0aW9uQ2hhaW4gKEMtY2hhaW4pXG4gICAgICB0aGlzLmV4cG9ydGVkT3V0cHV0cygpIC8vIGV4cG9ydGVkT3V0cHV0c1xuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgYWRkcmVzcyBtYXBzIGZvciBzaWduaW5nIC0gb25lIHBlciBpbnB1dC9jcmVkZW50aWFsXG4gICAgY29uc3Qgc29ydGVkQWRkcmVzc2VzID0gWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdLnNvcnQoKGEsIGIpID0+IEJ1ZmZlci5jb21wYXJlKGEsIGIpKTtcbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IGNyZWRlbnRpYWxzLm1hcCgoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzTWFwID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcCgpO1xuICAgICAgc29ydGVkQWRkcmVzc2VzLmZvckVhY2goKGFkZHIsIGkpID0+IHtcbiAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3MoYWRkciksIGkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWRkcmVzc01hcDtcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChcbiAgICAgIGV4cG9ydFR4LFxuICAgICAgW10sIC8vIEVtcHR5IFVUWE9zIGFycmF5XG4gICAgICBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksXG4gICAgICBjcmVkZW50aWFsc1xuICAgICk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBpbnB1dHMgZnJvbSBVVFhPcyBmb3IgUC1jaGFpbiBleHBvcnRcbiAgICogT25seSBzZWxlY3RzIGVub3VnaCBVVFhPcyB0byBjb3ZlciB0aGUgdGFyZ2V0IGFtb3VudCAoYW1vdW50ICsgZmVlKVxuICAgKiBAcmV0dXJucyBpbnB1dHMsIGNoYW5nZSBvdXRwdXRzLCBjcmVkZW50aWFscywgYW5kIHRvdGFsIGFtb3VudFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUV4cG9ydElucHV0cygpOiB7XG4gICAgaW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdO1xuICAgIGNoYW5nZU91dHB1dHM6IFRyYW5zZmVyYWJsZU91dHB1dFtdO1xuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gICAgdG90YWxBbW91bnQ6IGJpZ2ludDtcbiAgfSB7XG4gICAgY29uc3Qgc2VuZGVyID0gWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdO1xuICAgIGlmICh0aGlzLnJlY292ZXJTaWduZXIpIHtcbiAgICAgIC8vIHN3aXRjaCBmaXJzdCBhbmQgbGFzdCBzaWduZXJcbiAgICAgIGNvbnN0IHRtcCA9IHNlbmRlci5wb3AoKTtcbiAgICAgIHNlbmRlci5wdXNoKHNlbmRlclswXSk7XG4gICAgICBpZiAodG1wKSB7XG4gICAgICAgIHNlbmRlclswXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmZWUgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5mZWUuZmVlKTtcbiAgICBjb25zdCB0YXJnZXRBbW91bnQgPSB0aGlzLl9hbW91bnQgKyBmZWU7XG5cbiAgICBsZXQgdG90YWxBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgY29uc3QgaW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdID0gW107XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IFtdO1xuXG4gICAgLy8gQ2hhbmdlIG91dHB1dCB0aHJlc2hvbGQgaXMgYWx3YXlzIDEgKG1hdGNoaW5nIEZsYXJlIHByb3RvY29sIGJlaGF2aW9yKVxuICAgIC8vIFRoaXMgYWxsb3dzIGVhc2llciBzcGVuZGluZyBvZiBjaGFuZ2Ugd2hpbGUgbWFpbnRhaW5pbmcgc2VjdXJpdHkgZm9yIGV4cG9ydCBvdXRwdXRzXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0VGhyZXNob2xkID0gMTtcblxuICAgIC8vIE9ubHkgY29uc3VtZSBlbm91Z2ggVVRYT3MgdG8gY292ZXIgdGhlIHRhcmdldCBhbW91bnQgKGluIGFycmF5IG9yZGVyKVxuICAgIC8vIElucHV0cyB3aWxsIGJlIHNvcnRlZCBhZnRlciBzZWxlY3Rpb25cbiAgICBmb3IgKGNvbnN0IHV0eG8gb2YgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MpIHtcbiAgICAgIC8vIFN0b3AgaWYgd2UgYWxyZWFkeSBoYXZlIGVub3VnaFxuICAgICAgaWYgKHRvdGFsQW1vdW50ID49IHRhcmdldEFtb3VudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgYW1vdW50ID0gQmlnSW50KHV0eG8uYW1vdW50KTtcbiAgICAgIHRvdGFsQW1vdW50ICs9IGFtb3VudDtcblxuICAgICAgLy8gVXNlIHRoZSBVVFhPJ3Mgb3duIHRocmVzaG9sZCBmb3Igc2lnbmF0dXJlIGluZGljZXNcbiAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG5cbiAgICAgIC8vIENyZWF0ZSBzaWduYXR1cmUgaW5kaWNlcyBmb3IgdGhlIFVUWE8ncyB0aHJlc2hvbGRcbiAgICAgIGNvbnN0IHNpZ0luZGljZXM6IG51bWJlcltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHV0eG9UaHJlc2hvbGQ7IGkrKykge1xuICAgICAgICBzaWdJbmRpY2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBmcm9tTmF0aXZlIHRvIGNyZWF0ZSBUcmFuc2ZlcmFibGVJbnB1dFxuICAgICAgY29uc3QgdHhJZENiNTggPSB1dHhvLnR4aWQ7IC8vIEFscmVhZHkgY2I1OCBlbmNvZGVkXG4gICAgICBjb25zdCBhc3NldElkQ2I1OCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJhYmxlSW5wdXQgPSBUcmFuc2ZlcmFibGVJbnB1dC5mcm9tTmF0aXZlKFxuICAgICAgICB0eElkQ2I1OCxcbiAgICAgICAgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSxcbiAgICAgICAgYXNzZXRJZENiNTgsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgc2lnSW5kaWNlc1xuICAgICAgKTtcblxuICAgICAgaW5wdXRzLnB1c2godHJhbnNmZXJhYmxlSW5wdXQpO1xuXG4gICAgICAvLyBDcmVhdGUgY3JlZGVudGlhbCB3aXRoIGVtcHR5IHNpZ25hdHVyZXMgZm9yIHNsb3QgaWRlbnRpZmljYXRpb25cbiAgICAgIC8vIE1hdGNoIGF2YXhwIGJlaGF2aW9yOiBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYT1xuICAgICAgY29uc3QgaGFzQWRkcmVzc2VzID1cbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyAmJiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLmxlbmd0aCA+PSB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG5cbiAgICAgIGlmICghaGFzQWRkcmVzc2VzKSB7XG4gICAgICAgIC8vIElmIGFkZHJlc3NlcyBub3QgYXZhaWxhYmxlLCB1c2UgYWxsIHplcm9zXG4gICAgICAgIGNvbnN0IGVtcHR5U2lnbmF0dXJlcyA9IHNpZ0luZGljZXMubWFwKCgpID0+IHV0aWxzLmNyZWF0ZU5ld1NpZygnJykpO1xuICAgICAgICBjcmVkZW50aWFscy5wdXNoKG5ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29tcHV0ZSBhZGRyZXNzZXNJbmRleDogcG9zaXRpb24gb2YgZWFjaCBfZnJvbUFkZHJlc3NlcyBpbiBVVFhPJ3MgYWRkcmVzcyBsaXN0XG4gICAgICAgIGNvbnN0IHV0eG9BZGRyZXNzZXMgPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+XG4gICAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZWl0aGVyIHVzZXIgKDApIG9yIHJlY292ZXJ5ICgyKVxuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICAgIGNvbnN0IGJpdGdvSW5kZXggPSAxO1xuXG4gICAgICAgIC8vIER5bmFtaWMgb3JkZXJpbmcgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXhcbiAgICAgICAgbGV0IGVtcHR5U2lnbmF0dXJlczogUmV0dXJuVHlwZTx0eXBlb2YgdXRpbHMuY3JlYXRlTmV3U2lnPltdO1xuICAgICAgICBpZiAoYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCBhZGRyZXNzZXNJbmRleFtmaXJzdEluZGV4XSkge1xuICAgICAgICAgIC8vIEJpdGdvIGNvbWVzIGZpcnN0IGluIHNpZ25hdHVyZSBvcmRlcjogW3plcm9zLCB1c2VyQWRkcmVzc11cbiAgICAgICAgICBlbXB0eVNpZ25hdHVyZXMgPSBbXG4gICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoJycpLFxuICAgICAgICAgICAgdXRpbHMuY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlciBjb21lcyBmaXJzdCBpbiBzaWduYXR1cmUgb3JkZXI6IFt1c2VyQWRkcmVzcywgemVyb3NdXG4gICAgICAgICAgZW1wdHlTaWduYXR1cmVzID0gW1xuICAgICAgICAgICAgdXRpbHMuY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNyZWRlbnRpYWxzLnB1c2gobmV3IENyZWRlbnRpYWwoZW1wdHlTaWduYXR1cmVzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGNoYW5nZSBvdXRwdXQgaWYgdGhlcmUgaXMgcmVtYWluaW5nIGFtb3VudCBhZnRlciBleHBvcnQgYW5kIGZlZVxuICAgIGNvbnN0IGNoYW5nZU91dHB1dHM6IFRyYW5zZmVyYWJsZU91dHB1dFtdID0gW107XG4gICAgY29uc3QgY2hhbmdlQW1vdW50ID0gdG90YWxBbW91bnQgLSB0aGlzLl9hbW91bnQgLSBmZWU7XG5cbiAgICBpZiAoY2hhbmdlQW1vdW50ID4gQmlnSW50KDApKSB7XG4gICAgICBjb25zdCBhc3NldElkQnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpO1xuXG4gICAgICAvLyBDcmVhdGUgT3V0cHV0T3duZXJzIHdpdGggdGhlIFAtY2hhaW4gYWRkcmVzc2VzIChzb3J0ZWQgYnkgYnl0ZSB2YWx1ZSBhcyBwZXIgQVZBWCBwcm90b2NvbClcbiAgICAgIC8vIFVzZSB0aHJlc2hvbGQ9MSBmb3IgY2hhbmdlIG91dHB1dHMgKG1hdGNoaW5nIEZsYXJlIHByb3RvY29sIGJlaGF2aW9yKVxuICAgICAgY29uc3Qgc29ydGVkQWRkcmVzc2VzID0gWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdLnNvcnQoKGEsIGIpID0+IEJ1ZmZlci5jb21wYXJlKGEsIGIpKTtcbiAgICAgIGNvbnN0IG91dHB1dE93bmVycyA9IG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgIG5ldyBJbnQoY2hhbmdlT3V0cHV0VGhyZXNob2xkKSxcbiAgICAgICAgc29ydGVkQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gbmV3IEFkZHJlc3MoYWRkcikpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmFuc2Zlck91dHB1dCA9IG5ldyBUcmFuc2Zlck91dHB1dChuZXcgQmlnSW50UHIoY2hhbmdlQW1vdW50KSwgb3V0cHV0T3duZXJzKTtcbiAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IG5ldyBUcmFuc2ZlcmFibGVPdXRwdXQobmV3IElkKGFzc2V0SWRCeXRlcyksIHRyYW5zZmVyT3V0cHV0KTtcbiAgICAgIGNoYW5nZU91dHB1dHMucHVzaChjaGFuZ2VPdXRwdXQpO1xuICAgIH1cblxuICAgIC8vIFNvcnQgaW5wdXRzIGxleGljb2dyYXBoaWNhbGx5IGJ5IHR4aWQgKEF2YWxhbmNoZSBwcm90b2NvbCByZXF1aXJlbWVudClcbiAgICBjb25zdCBzb3J0ZWRJbnB1dHNXaXRoQ3JlZGVudGlhbHMgPSBpbnB1dHNcbiAgICAgIC5tYXAoKGlucHV0LCBpKSA9PiAoeyBpbnB1dCwgY3JlZGVudGlhbDogY3JlZGVudGlhbHNbaV0gfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhVHhJZCA9IEJ1ZmZlci5mcm9tKGEuaW5wdXQudXR4b0lELnR4SUQudG9CeXRlcygpKTtcbiAgICAgICAgY29uc3QgYlR4SWQgPSBCdWZmZXIuZnJvbShiLmlucHV0LnV0eG9JRC50eElELnRvQnl0ZXMoKSk7XG4gICAgICAgIHJldHVybiBCdWZmZXIuY29tcGFyZShhVHhJZCwgYlR4SWQpO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzOiBzb3J0ZWRJbnB1dHNXaXRoQ3JlZGVudGlhbHMubWFwKCh4KSA9PiB4LmlucHV0KSxcbiAgICAgIGNoYW5nZU91dHB1dHMsXG4gICAgICBjcmVkZW50aWFsczogc29ydGVkSW5wdXRzV2l0aENyZWRlbnRpYWxzLm1hcCgoeCkgPT4geC5jcmVkZW50aWFsKSxcbiAgICAgIHRvdGFsQW1vdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBFeHBvcnRlZE91dHB1dHMgd2hlcmUgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGFyZSB0aGUgc2VuZGVyLlxuICAgKiBMYXRlciBhbiBpbXBvcnRUeCBzaG91bGQgY29tcGxldGUgdGhlIG9wZXJhdGlvbnMgc2lnbmluZyB3aXRoIHRoZSBzYW1lIGtleXMuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBleHBvcnRlZE91dHB1dHMoKTogVHJhbnNmZXJhYmxlT3V0cHV0W10ge1xuICAgIGNvbnN0IGFzc2V0SWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSk7XG5cbiAgICAvLyBDcmVhdGUgT3V0cHV0T3duZXJzIHdpdGggc29ydGVkIGFkZHJlc3Nlc1xuICAgIGNvbnN0IHNvcnRlZEFkZHJlc3NlcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXS5zb3J0KChhLCBiKSA9PiBCdWZmZXIuY29tcGFyZShhLCBiKSk7XG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gbmV3IE91dHB1dE93bmVycyhcbiAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICBzb3J0ZWRBZGRyZXNzZXMubWFwKChhZGRyKSA9PiBuZXcgQWRkcmVzcyhhZGRyKSlcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFRyYW5zZmVyT3V0cHV0KG5ldyBCaWdJbnRQcih0aGlzLl9hbW91bnQpLCBvdXRwdXRPd25lcnMpO1xuXG4gICAgcmV0dXJuIFtuZXcgVHJhbnNmZXJhYmxlT3V0cHV0KG5ldyBJZChhc3NldElkQnl0ZXMpLCBvdXRwdXQpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW5wdXRzXG4gICAqIEBwYXJhbSBpbnB1dHMgQXJyYXkgb2YgVHJhbnNmZXJhYmxlSW5wdXRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZGVjb2RlZCBVVFhPIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgcmVjb3ZlclV0eG9zKGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIHJldHVybiBpbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdXR4b0lkID0gaW5wdXQudXR4b0lEO1xuICAgICAgLy8gR2V0IHRoZSB0aHJlc2hvbGQgZnJvbSB0aGUgaW5wdXQncyBzaWdJbmRpY2VzIGxlbmd0aFxuICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dCA9IGlucHV0LmlucHV0IGFzIFRyYW5zZmVySW5wdXQ7XG4gICAgICBjb25zdCBpbnB1dFRocmVzaG9sZCA9IHRyYW5zZmVySW5wdXQuc2lnSW5kaWNpZXMoKS5sZW5ndGg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHV0eG9JZC50eElELnRvQnl0ZXMoKSkpLFxuICAgICAgICBvdXRwdXRpZHg6IHV0eG9JZC5vdXRwdXRJZHgudmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgICB0aHJlc2hvbGQ6IGlucHV0VGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgYWRkcmVzc2VzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT5cbiAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIEJ1ZmZlci5mcm9tKGFkZHIpKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9FeHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFVK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQiwyQkFBMkI7UUFDM0IsNENBQTRDO1FBQzVDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQzdHLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBTSxFQUFFLFFBQWlCLEVBQUUsaUJBQWdDO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLEVBQXdCLENBQUM7UUFFMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLHVCQUFZLENBQUMscUVBQXFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLE9B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QUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRTtnQkFDOUMsU0FBUyxFQUFFLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQ3hELFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN0RCxlQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpMRCxnREFpTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBOb3RTdXBwb3J0ZWQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBwdm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBUcmFuc2ZlcmFibGVPdXRwdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBDcmVkZW50aWFsLFxuICBwdm0sXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgRmxhcmVUcmFuc2FjdGlvblR5cGUsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRJblBUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgLy8gRm9yIEV4cG9ydCBGUk9NIFAtY2hhaW46XG4gICAgLy8gLSBleHRlcm5hbCBjaGFpbiAoZGVzdGluYXRpb24pIGlzIEMtY2hhaW5cbiAgICAvLyAtIGJsb2NrY2hhaW4gSUQgKHNvdXJjZSkgaXMgUC1jaGFpblxuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQpO1xuICAgIC8vIFAtY2hhaW4gYmxvY2tjaGFpbiBJRCAoZnJvbSBuZXR3b3JrIGNvbmZpZyAtIGRlY29kZSBmcm9tIGNiNTggdG8gaGV4KVxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpKS50b1N0cmluZyhcbiAgICAgICdoZXgnXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgsIHJhd0J5dGVzPzogQnVmZmVyLCBwYXJzZWRDcmVkZW50aWFscz86IENyZWRlbnRpYWxbXSk6IHRoaXMge1xuICAgIGNvbnN0IGV4cG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkV4cG9ydFR4O1xuXG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShleHBvcnRUeC5fdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0cyA9IGV4cG9ydFR4Lm91dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcbiAgICBjb25zdCBvdXRwdXRUcmFuc2ZlciA9IG91dHB1dC5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgY29uc3QgYXNzZXRJZCA9IG91dHB1dC5hc3NldElkLnRvQnl0ZXMoKTtcbiAgICBpZiAoQnVmZmVyLmNvbXBhcmUoQnVmZmVyLmZyb20oYXNzZXRJZCksIEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSkgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gb3V0cHV0VHJhbnNmZXIub3V0cHV0T3duZXJzO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXRPd25lcnMuYWRkcnMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGV4cG9ydFR4LmRlc3RpbmF0aW9uLnRvQnl0ZXMoKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYW1vdW50ID0gb3V0cHV0VHJhbnNmZXIuYW1vdW50KCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhbLi4uZXhwb3J0VHguYmFzZVR4LmlucHV0c10pO1xuXG4gICAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGV4cG9ydFR4LmJhc2VUeC5pbnB1dHMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBjaGFuZ2VPdXRwdXRBbW91bnQgPSBleHBvcnRUeC5iYXNlVHgub3V0cHV0cy5yZWR1Y2UoKHN1bSwgb3V0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2Zlck91dCA9IG91dC5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgICByZXR1cm4gc3VtICsgdHJhbnNmZXJPdXQuYW1vdW50KCk7XG4gICAgfSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBmZWUgPSB0b3RhbElucHV0QW1vdW50IC0gY2hhbmdlT3V0cHV0QW1vdW50IC0gdGhpcy50cmFuc2FjdGlvbi5fYW1vdW50O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSBmZWUudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHJhd0J5dGVzICYmIGhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPVxuICAgICAgY3JlZGVudGlhbHMubGVuZ3RoID4gMFxuICAgICAgICA/IGNyZWRlbnRpYWxzXG4gICAgICAgIDogZXhwb3J0VHguYmFzZVR4LmlucHV0cy5tYXAoKGlucHV0LCBpbnB1dElkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dCA9IGlucHV0LmlucHV0IGFzIFRyYW5zZmVySW5wdXQ7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFRocmVzaG9sZCA9IHRyYW5zZmVySW5wdXQuc2lnSW5kaWNpZXMoKS5sZW5ndGggfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuXG4gICAgICAgICAgICBjb25zdCB1dHhvID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbaW5wdXRJZHhdO1xuXG4gICAgICAgICAgICBpZiAoaW5wdXRUaHJlc2hvbGQgPT09IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2lnU2xvdHM6IFJldHVyblR5cGU8dHlwZW9mIHV0aWxzLmNyZWF0ZU5ld1NpZz5bXSA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzaWdTbG90cy5wdXNoKHV0aWxzLmNyZWF0ZU5ld1NpZygnJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbChzaWdTbG90cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHR4Q3JlZGVudGlhbHMubWFwKChjcmVkZW50aWFsLCBjcmVkSWR4KSA9PlxuICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1tjcmVkSWR4XSwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKVxuICAgICk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoZXhwb3J0VHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIHR4Q3JlZGVudGlhbHMpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1FeHBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRXhwb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZXhwb3J0IHRyYW5zYWN0aW9uIGZvciBQLWNoYWluXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcblxuICAgIGNvbnN0IGZlZVN0YXRlID0gdGhpcy50cmFuc2FjdGlvbi5fZmVlU3RhdGU7XG4gICAgaWYgKCFmZWVTdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIHN0YXRlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignY29udGV4dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fYW1vdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2Ftb3VudCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3V0eG9zIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBkZWNvZGVkIFVUWE9zIHRvIG5hdGl2ZSBGbGFyZUpTIFV0eG8gb2JqZWN0c1xuICAgIGNvbnN0IGFzc2V0SWRDYjU4ID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpO1xuICAgIGNvbnN0IG5hdGl2ZVV0eG9zID0gdXRpbHMuZGVjb2RlZFRvVXR4b3ModGhpcy50cmFuc2FjdGlvbi5fdXR4b3MsIGFzc2V0SWRDYjU4KTtcblxuICAgIGNvbnN0IHRvdGFsVXR4b0Ftb3VudCA9IG5hdGl2ZVV0eG9zLnJlZHVjZSgoc3VtLCB1dHhvKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB1dHhvLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgIHJldHVybiBzdW0gKyBvdXRwdXQuYW1vdW50KCk7XG4gICAgfSwgQmlnSW50KDApKTtcblxuICAgIGlmICh0b3RhbFV0eG9BbW91bnQgPCB0aGlzLnRyYW5zYWN0aW9uLl9hbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnN1ZmZpY2llbnQgVVRYTyBiYWxhbmNlOiBoYXZlICR7dG90YWxVdHhvQW1vdW50LnRvU3RyaW5nKCl9IG5GTFIsIG5lZWQgYXQgbGVhc3QgJHt0aGlzLnRyYW5zYWN0aW9uLl9hbW91bnQudG9TdHJpbmcoKX0gbkZMUiAocGx1cyBmZWUpYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldElkID0gdXRpbHMuZmxhcmVJZFN0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZyb21BZGRyZXNzZXMgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkcikpO1xuICAgIGNvbnN0IHRyYW5zZmVyYWJsZU91dHB1dCA9IFRyYW5zZmVyYWJsZU91dHB1dC5mcm9tTmF0aXZlKFxuICAgICAgYXNzZXRJZCxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Ftb3VudCxcbiAgICAgIGZyb21BZGRyZXNzZXMsXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZFxuICAgICk7XG5cbiAgICBjb25zdCBleHBvcnRUeCA9IHB2bS5lLm5ld0V4cG9ydFR4KFxuICAgICAge1xuICAgICAgICBmZWVTdGF0ZSxcbiAgICAgICAgZnJvbUFkZHJlc3Nlc0J5dGVzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkcikpLFxuICAgICAgICBkZXN0aW5hdGlvbkNoYWluSWQ6IHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklELFxuICAgICAgICBvdXRwdXRzOiBbdHJhbnNmZXJhYmxlT3V0cHV0XSxcbiAgICAgICAgdXR4b3M6IG5hdGl2ZVV0eG9zLFxuICAgICAgfSxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHRcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihleHBvcnRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGlucHV0c1xuICAgKiBAcGFyYW0gaW5wdXRzIEFycmF5IG9mIFRyYW5zZmVyYWJsZUlucHV0XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICByZXR1cm4gaW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHV0eG9JZCA9IGlucHV0LnV0eG9JRDtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5wdXQgPSBpbnB1dC5pbnB1dCBhcyBUcmFuc2ZlcklucHV0O1xuICAgICAgY29uc3QgaW5wdXRUaHJlc2hvbGQgPSB0cmFuc2ZlcklucHV0LnNpZ0luZGljaWVzKCkubGVuZ3RoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0SUQ6IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsXG4gICAgICAgIGFtb3VudDogaW5wdXQuYW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgICAgdHhpZDogdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbSh1dHhvSWQudHhJRC50b0J5dGVzKCkpKSxcbiAgICAgICAgb3V0cHV0aWR4OiB1dHhvSWQub3V0cHV0SWR4LnZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgdGhyZXNob2xkOiBpbnB1dFRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+XG4gICAgICAgICAgdXRpbHMuYWRkcmVzc1RvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmFsaWFzLCBCdWZmZXIuZnJvbShhZGRyKSlcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
2
|
import { TransactionType } from '@bitgo/sdk-core';
|
|
3
3
|
import { AtomicInCTransactionBuilder } from './atomicInCTransactionBuilder';
|
|
4
|
-
import { Credential
|
|
4
|
+
import { Credential } from '@flarenetwork/flarejs';
|
|
5
5
|
import { Tx } from './iface';
|
|
6
6
|
export declare class ImportInCTxBuilder extends AtomicInCTransactionBuilder {
|
|
7
7
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
@@ -20,24 +20,6 @@ export declare class ImportInCTxBuilder extends AtomicInCTransactionBuilder {
|
|
|
20
20
|
* @protected
|
|
21
21
|
*/
|
|
22
22
|
protected buildFlareTransaction(): void;
|
|
23
|
-
/**
|
|
24
|
-
* Create inputs from UTXOs
|
|
25
|
-
* @return {
|
|
26
|
-
* inputs: TransferableInput[];
|
|
27
|
-
* credentials: Credential[];
|
|
28
|
-
* amount: bigint;
|
|
29
|
-
* }
|
|
30
|
-
*/
|
|
31
|
-
protected createInputs(): {
|
|
32
|
-
inputs: TransferableInput[];
|
|
33
|
-
credentials: Credential[];
|
|
34
|
-
amount: bigint;
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Calculate the fee size for the transaction
|
|
38
|
-
* For C-chain imports, the feeRate is treated as an absolute fee value
|
|
39
|
-
*/
|
|
40
|
-
private calculateFeeSize;
|
|
41
23
|
/**
|
|
42
24
|
* Recover UTXOs from imported inputs
|
|
43
25
|
* @param importedInputs Array of transferable inputs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInCTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAuC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAGL,UAAU,
|
|
1
|
+
{"version":3,"file":"ImportInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInCTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAuC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAGL,UAAU,EAMX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAmE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE9F,qBAAa,kBAAmB,SAAQ,2BAA2B;gBACrD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;OAIG;IACH,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK1B,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI;IAiF9E,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAsDvC;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAiBrB"}
|