@bitgo-beta/sdk-coin-flrp 1.0.1-beta.352 → 1.0.1-beta.354
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/lib/ImportInCTxBuilder.d.ts +1 -11
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInCTxBuilder.js +45 -48
- package/dist/test/resources/transactionData/importInC.js +6 -6
- package/dist/test/unit/lib/importInCTxBuilder.js +96 -89
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -34,17 +34,7 @@ export declare class ImportInCTxBuilder extends AtomicInCTransactionBuilder {
|
|
|
34
34
|
amount: bigint;
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
* Matches AVAXP's costImportTx formula:
|
|
39
|
-
* - Base byte cost: transactionSize * txBytesGas (1 gas per byte)
|
|
40
|
-
* - Per-input cost: numInputs * costPerSignature (1000 per signature) * threshold
|
|
41
|
-
* - Fixed fee: 10000
|
|
42
|
-
*
|
|
43
|
-
* This returns cost "units" to be multiplied by feeRate, matching AVAXP's approach:
|
|
44
|
-
* AVAXP: fee = feeRate.muln(costImportTx(tx))
|
|
45
|
-
* FLRP: fee = feeRate * calculateImportCost(tx)
|
|
46
|
-
*
|
|
47
|
-
* @param tx The ImportTx to calculate the cost for
|
|
37
|
+
* @param unsignedTx The UnsignedTx to calculate the cost for (includes ImportTx, AddressMaps, and Credentials)
|
|
48
38
|
* @returns The total cost units
|
|
49
39
|
*/
|
|
50
40
|
private calculateImportCost;
|
|
@@ -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,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAGL,UAAU,EAIV,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ImportInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInCTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAGL,UAAU,EAIV,iBAAiB,EAGlB,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;IAwH9E,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;IAgFvC;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,IAAI;QACxB,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB;IAqDD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAiBrB"}
|
|
@@ -48,15 +48,6 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
48
48
|
const totalOutputAmount = output.amount.value();
|
|
49
49
|
// Calculate fee based on input/output difference
|
|
50
50
|
const fee = totalInputAmount - totalOutputAmount;
|
|
51
|
-
// Calculate cost units using the same method as buildFlareTransaction
|
|
52
|
-
const feeSize = this.calculateImportCost(baseTx);
|
|
53
|
-
// Use integer division to ensure feeRate can be converted back to BigInt
|
|
54
|
-
const feeRate = Math.floor(Number(fee) / feeSize);
|
|
55
|
-
this.transaction._fee = {
|
|
56
|
-
fee: fee.toString(),
|
|
57
|
-
feeRate: feeRate,
|
|
58
|
-
size: feeSize,
|
|
59
|
-
};
|
|
60
51
|
// Use credentials passed from TransactionBuilderFactory (properly extracted using codec)
|
|
61
52
|
const credentials = parsedCredentials || [];
|
|
62
53
|
const hasCredentials = credentials.length > 0;
|
|
@@ -68,6 +59,26 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
68
59
|
const firstInput = inputs[0];
|
|
69
60
|
const inputThreshold = firstInput.sigIndicies().length || this.transaction._threshold;
|
|
70
61
|
this.transaction._threshold = inputThreshold;
|
|
62
|
+
// Create a temporary UnsignedTx for accurate fee size calculation
|
|
63
|
+
// This includes the full structure (ImportTx, AddressMaps, Credentials)
|
|
64
|
+
const tempAddressMap = new flarejs_1.utils.AddressMap();
|
|
65
|
+
for (let i = 0; i < inputThreshold; i++) {
|
|
66
|
+
if (this.transaction._fromAddresses && this.transaction._fromAddresses[i]) {
|
|
67
|
+
tempAddressMap.set(new flarejs_1.Address(this.transaction._fromAddresses[i]), i);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const tempAddressMaps = new flarejs_1.utils.AddressMaps([tempAddressMap]);
|
|
71
|
+
const tempCredentials = credentials.length > 0 ? credentials : [new flarejs_1.Credential(Array(inputThreshold).fill(utils_1.default.createNewSig('')))];
|
|
72
|
+
const tempUnsignedTx = new flarejs_1.UnsignedTx(baseTx, [], tempAddressMaps, tempCredentials);
|
|
73
|
+
// Calculate cost units using the full UnsignedTx structure
|
|
74
|
+
const feeSize = this.calculateImportCost(tempUnsignedTx);
|
|
75
|
+
// Use integer division to ensure feeRate can be converted back to BigInt
|
|
76
|
+
const feeRate = Math.floor(Number(fee) / feeSize);
|
|
77
|
+
this.transaction._fee = {
|
|
78
|
+
fee: fee.toString(),
|
|
79
|
+
feeRate: feeRate,
|
|
80
|
+
size: feeSize,
|
|
81
|
+
};
|
|
71
82
|
// Create AddressMaps based on signature slot order (matching credential order), not sorted addresses
|
|
72
83
|
// This matches the approach used in credentials: addressesIndex determines signature order
|
|
73
84
|
// AddressMaps should map addresses to signature slots in the same order as credentials
|
|
@@ -139,11 +150,20 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
139
150
|
}
|
|
140
151
|
const { inputs, amount, credentials } = this.createInputs();
|
|
141
152
|
// Calculate import cost units (matching AVAXP's costImportTx approach)
|
|
142
|
-
// Create a temporary
|
|
153
|
+
// Create a temporary UnsignedTx with full amount to calculate fee size
|
|
154
|
+
// This includes the full structure (ImportTx, AddressMaps, Credentials) for accurate size calculation
|
|
143
155
|
const tempOutput = new flarejs_1.evmSerial.Output(new flarejs_1.Address(this.transaction._to[0]), new flarejs_1.BigIntPr(amount), new flarejs_1.Id(new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'))));
|
|
144
156
|
const tempImportTx = new flarejs_1.evmSerial.ImportTx(new flarejs_1.Int(this.transaction._networkID), new flarejs_1.Id(new Uint8Array(Buffer.from(this.transaction._blockchainID, 'hex'))), new flarejs_1.Id(new Uint8Array(this._externalChainId)), inputs, [tempOutput]);
|
|
145
|
-
//
|
|
146
|
-
const
|
|
157
|
+
// Create AddressMaps for fee calculation (same as final transaction)
|
|
158
|
+
const firstUtxo = this.transaction._utxos[0];
|
|
159
|
+
const tempAddressMap = firstUtxo
|
|
160
|
+
? this.createAddressMapForUtxo(firstUtxo, this.transaction._threshold)
|
|
161
|
+
: new flarejs_1.utils.AddressMap();
|
|
162
|
+
const tempAddressMaps = new flarejs_1.utils.AddressMaps([tempAddressMap]);
|
|
163
|
+
// Create temporary UnsignedTx with full structure for accurate fee calculation
|
|
164
|
+
const tempUnsignedTx = new flarejs_1.UnsignedTx(tempImportTx, [], tempAddressMaps, credentials);
|
|
165
|
+
// Calculate feeSize once using full UnsignedTx (matching AVAXP approach)
|
|
166
|
+
const feeSize = this.calculateImportCost(tempUnsignedTx);
|
|
147
167
|
const feeRate = BigInt(this.transaction._fee.feeRate);
|
|
148
168
|
const fee = feeRate * BigInt(feeSize);
|
|
149
169
|
// Validate that we have enough funds to cover the fee
|
|
@@ -156,18 +176,9 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
156
176
|
const output = new flarejs_1.evmSerial.Output(new flarejs_1.Address(this.transaction._to[0]), new flarejs_1.BigIntPr(amount - fee), new flarejs_1.Id(new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'))));
|
|
157
177
|
// Create the import transaction
|
|
158
178
|
const importTx = new flarejs_1.evmSerial.ImportTx(new flarejs_1.Int(this.transaction._networkID), new flarejs_1.Id(new Uint8Array(Buffer.from(this.transaction._blockchainID, 'hex'))), new flarejs_1.Id(new Uint8Array(this._externalChainId)), inputs, [output]);
|
|
159
|
-
//
|
|
160
|
-
// This matches the approach used in credentials: addressesIndex determines signature order
|
|
161
|
-
// AddressMaps should map addresses to signature slots in the same order as credentials
|
|
162
|
-
// For C-chain imports, we typically have one input, so use the first UTXO
|
|
163
|
-
// Use centralized method for AddressMap creation
|
|
164
|
-
const firstUtxo = this.transaction._utxos[0];
|
|
165
|
-
const addressMap = firstUtxo
|
|
166
|
-
? this.createAddressMapForUtxo(firstUtxo, this.transaction._threshold)
|
|
167
|
-
: new flarejs_1.utils.AddressMap();
|
|
168
|
-
const addressMaps = new flarejs_1.utils.AddressMaps([addressMap]);
|
|
179
|
+
// Reuse the AddressMaps already calculated for fee calculation
|
|
169
180
|
const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], // Empty UTXOs array, will be filled during processing
|
|
170
|
-
|
|
181
|
+
tempAddressMaps, credentials);
|
|
171
182
|
this.transaction.setTransaction(unsignedTx);
|
|
172
183
|
}
|
|
173
184
|
/**
|
|
@@ -217,35 +228,21 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
217
228
|
};
|
|
218
229
|
}
|
|
219
230
|
/**
|
|
220
|
-
*
|
|
221
|
-
* Matches AVAXP's costImportTx formula:
|
|
222
|
-
* - Base byte cost: transactionSize * txBytesGas (1 gas per byte)
|
|
223
|
-
* - Per-input cost: numInputs * costPerSignature (1000 per signature) * threshold
|
|
224
|
-
* - Fixed fee: 10000
|
|
225
|
-
*
|
|
226
|
-
* This returns cost "units" to be multiplied by feeRate, matching AVAXP's approach:
|
|
227
|
-
* AVAXP: fee = feeRate.muln(costImportTx(tx))
|
|
228
|
-
* FLRP: fee = feeRate * calculateImportCost(tx)
|
|
229
|
-
*
|
|
230
|
-
* @param tx The ImportTx to calculate the cost for
|
|
231
|
+
* @param unsignedTx The UnsignedTx to calculate the cost for (includes ImportTx, AddressMaps, and Credentials)
|
|
231
232
|
* @returns The total cost units
|
|
232
233
|
*/
|
|
233
|
-
calculateImportCost(
|
|
234
|
-
const
|
|
235
|
-
const txBytes = tx.toBytes(codec);
|
|
236
|
-
// Base byte cost: 1 gas per byte (matching AVAX txBytesGas)
|
|
234
|
+
calculateImportCost(unsignedTx) {
|
|
235
|
+
const signedTxBytes = unsignedTx.getSignedTx().toBytes();
|
|
237
236
|
const txBytesGas = 1;
|
|
238
|
-
let bytesCost =
|
|
239
|
-
// Per-input cost: costPerSignature (1000) per signature
|
|
237
|
+
let bytesCost = signedTxBytes.length * txBytesGas;
|
|
240
238
|
const costPerSignature = 1000;
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
239
|
+
const importTx = unsignedTx.getTx();
|
|
240
|
+
importTx.importedInputs.forEach((input) => {
|
|
241
|
+
const inCost = costPerSignature * input.sigIndicies().length;
|
|
242
|
+
bytesCost += inCost;
|
|
243
|
+
});
|
|
246
244
|
const fixedFee = 10000;
|
|
247
|
-
|
|
248
|
-
return totalCost;
|
|
245
|
+
return bytesCost + fixedFee;
|
|
249
246
|
}
|
|
250
247
|
/**
|
|
251
248
|
* Recover UTXOs from imported inputs
|
|
@@ -268,4 +265,4 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
268
265
|
}
|
|
269
266
|
}
|
|
270
267
|
exports.ImportInCTxBuilder = ImportInCTxBuilder;
|
|
271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLCtFQUE0RTtBQUM1RSxtREFXK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxRQUFnQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU0sRUFBRSxRQUFpQixFQUFFLGlCQUFnQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxFQUF3QixDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCw0RUFBNEU7UUFDNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENB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QUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDdEMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3RELGVBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pHO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBblZELGdEQW1WQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBldm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIENyZWRlbnRpYWwsXG4gIEJpZ0ludFByLFxuICBJbnQsXG4gIElkLFxuICBUcmFuc2ZlcmFibGVJbnB1dCxcbiAgQWRkcmVzcyxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgYXZtU2VyaWFsLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5DVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEMtY2hhaW4gYWRkcmVzcyB3aG8gaXMgdGFyZ2V0IG9mIHRoZSBpbXBvcnQuXG4gICAqIEFkZHJlc3MgZm9ybWF0IGlzIGV0aCBsaWtlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjQWRkcmVzc1xuICAgKi9cbiAgdG8oY0FkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvID0gW3V0aWxzLnBhcnNlQWRkcmVzcyhjQWRkcmVzcyldO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUeCwgcmF3Qnl0ZXM/OiBCdWZmZXIsIHBhcnNlZENyZWRlbnRpYWxzPzogQ3JlZGVudGlhbFtdKTogdGhpcyB7XG4gICAgY29uc3QgYmFzZVR4ID0gdHggYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUoYmFzZVR4Ll90eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIC8vIFRoZSBvdXRwdXRzIGlzIGEgc2luZ2xlIEMtQ2hhaW4gYWRkcmVzcyByZXN1bHQuXG4gICAgLy8gSXQncyBleHBlY3RlZCB0byBoYXZlIG9ubHkgb25lIG91dHB1dCB0byB0aGUgZGVzdGluYXRpb24gQy1DaGFpbiBhZGRyZXNzLlxuICAgIGNvbnN0IG91dHB1dHMgPSBiYXNlVHguT3V0cztcbiAgICBpZiAob3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbiBoYXZlIG9uZSBvdXRwdXQnKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcblxuICAgIGlmIChCdWZmZXIuZnJvbShvdXRwdXQuYXNzZXRJZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSAhPT0gdGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NldElEIGFyZSBub3QgZXF1YWxzJyk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvID0gW0J1ZmZlci5mcm9tKG91dHB1dC5hZGRyZXNzLnRvQnl0ZXMoKSldO1xuXG4gICAgY29uc3QgaW5wdXRzID0gYmFzZVR4LmltcG9ydGVkSW5wdXRzO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdGhpcy5yZWNvdmVyVXR4b3MoaW5wdXRzKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBpbnB1dCBhbmQgb3V0cHV0IGFtb3VudHNcbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW5wdXRzLnJlZHVjZSgodCwgaSkgPT4gdCArIGkuYW1vdW50KCksIEJpZ0ludCgwKSk7XG4gICAgY29uc3QgdG90YWxPdXRwdXRBbW91bnQgPSBvdXRwdXQuYW1vdW50LnZhbHVlKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZmVlIGJhc2VkIG9uIGlucHV0L291dHB1dCBkaWZmZXJlbmNlXG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudCAtIHRvdGFsT3V0cHV0QW1vdW50O1xuICAgIC8vIENhbGN1bGF0ZSBjb3N0IHVuaXRzIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBidWlsZEZsYXJlVHJhbnNhY3Rpb25cbiAgICBjb25zdCBmZWVTaXplID0gdGhpcy5jYWxjdWxhdGVJbXBvcnRDb3N0KGJhc2VUeCk7XG4gICAgLy8gVXNlIGludGVnZXIgZGl2aXNpb24gdG8gZW5zdXJlIGZlZVJhdGUgY2FuIGJlIGNvbnZlcnRlZCBiYWNrIHRvIEJpZ0ludFxuICAgIGNvbnN0IGZlZVJhdGUgPSBNYXRoLmZsb29yKE51bWJlcihmZWUpIC8gZmVlU2l6ZSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUgPSB7XG4gICAgICBmZWU6IGZlZS50b1N0cmluZygpLFxuICAgICAgZmVlUmF0ZTogZmVlUmF0ZSxcbiAgICAgIHNpemU6IGZlZVNpemUsXG4gICAgfTtcblxuICAgIC8vIFVzZSBjcmVkZW50aWFscyBwYXNzZWQgZnJvbSBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IChwcm9wZXJseSBleHRyYWN0ZWQgdXNpbmcgY29kZWMpXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBwYXJzZWRDcmVkZW50aWFscyB8fCBbXTtcbiAgICBjb25zdCBoYXNDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBJZiBpdCdzIGEgc2lnbmVkIHRyYW5zYWN0aW9uLCBzdG9yZSB0aGUgb3JpZ2luYWwgcmF3IGJ5dGVzIHRvIHByZXNlcnZlIGV4YWN0IGZvcm1hdFxuICAgIGlmIChoYXNDcmVkZW50aWFscyAmJiByYXdCeXRlcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fcmF3U2lnbmVkQnl0ZXMgPSByYXdCeXRlcztcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHRocmVzaG9sZCBmcm9tIGZpcnN0IGlucHV0J3Mgc2lnSW5kaWNpZXMgKG51bWJlciBvZiByZXF1aXJlZCBzaWduYXR1cmVzKVxuICAgIGNvbnN0IGZpcnN0SW5wdXQgPSBpbnB1dHNbMF07XG4gICAgY29uc3QgaW5wdXRUaHJlc2hvbGQgPSBmaXJzdElucHV0LnNpZ0luZGljaWVzKCkubGVuZ3RoIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBpbnB1dFRocmVzaG9sZDtcblxuICAgIC8vIENyZWF0ZSBBZGRyZXNzTWFwcyBiYXNlZCBvbiBzaWduYXR1cmUgc2xvdCBvcmRlciAobWF0Y2hpbmcgY3JlZGVudGlhbCBvcmRlciksIG5vdCBzb3J0ZWQgYWRkcmVzc2VzXG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBhcHByb2FjaCB1c2VkIGluIGNyZWRlbnRpYWxzOiBhZGRyZXNzZXNJbmRleCBkZXRlcm1pbmVzIHNpZ25hdHVyZSBvcmRlclxuICAgIC8vIEFkZHJlc3NNYXBzIHNob3VsZCBtYXAgYWRkcmVzc2VzIHRvIHNpZ25hdHVyZSBzbG90cyBpbiB0aGUgc2FtZSBvcmRlciBhcyBjcmVkZW50aWFsc1xuICAgIC8vIElmIF9mcm9tQWRkcmVzc2VzIGlzIGF2YWlsYWJsZSwgY3JlYXRlIEFkZHJlc3NNYXAgYmFzZWQgb24gVVRYTyBvcmRlciAobWF0Y2hpbmcgY3JlZGVudGlhbCBvcmRlcilcbiAgICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBtYXBwaW5nIGp1c3QgdGhlIG91dHB1dCBhZGRyZXNzXG4gICAgY29uc3QgZmlyc3RVdHhvID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbMF07XG4gICAgbGV0IGFkZHJlc3NNYXA6IEZsYXJlVXRpbHMuQWRkcmVzc01hcDtcbiAgICBpZiAoXG4gICAgICBmaXJzdFV0eG8gJiZcbiAgICAgIGZpcnN0VXR4by5hZGRyZXNzZXMgJiZcbiAgICAgIGZpcnN0VXR4by5hZGRyZXNzZXMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyAmJlxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPj0gdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkXG4gICAgKSB7XG4gICAgICAvLyBVc2UgY2VudHJhbGl6ZWQgbWV0aG9kIGZvciBBZGRyZXNzTWFwIGNyZWF0aW9uXG4gICAgICBhZGRyZXNzTWFwID0gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byhmaXJzdFV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrOiBtYXAgb3V0cHV0IGFkZHJlc3MgdG8gc2xvdCAwIChmb3IgQy1jaGFpbiBpbXBvcnRzLCBvdXRwdXQgaXMgdGhlIGRlc3RpbmF0aW9uKVxuICAgICAgLy8gT3IgbWFwIGFkZHJlc3NlcyBzZXF1ZW50aWFsbHkgaWYgX2Zyb21BZGRyZXNzZXMgaXMgYXZhaWxhYmxlIGJ1dCBVVFhPIGFkZHJlc3NlcyBhcmUgbm90XG4gICAgICBhZGRyZXNzTWFwID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcCgpO1xuICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgJiYgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPj0gdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMuc2xpY2UoMCwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKS5mb3JFYWNoKChhZGRyLCBpKSA9PiB7XG4gICAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3MoYWRkciksIGkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExhc3QgcmVzb3J0OiBtYXAgb3V0cHV0IGFkZHJlc3NcbiAgICAgICAgY29uc3QgdG9BZGRyZXNzID0gbmV3IEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MudG9CeXRlcygpKTtcbiAgICAgICAgYWRkcmVzc01hcC5zZXQodG9BZGRyZXNzLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKFthZGRyZXNzTWFwXSk7XG5cbiAgICAvLyBXaGVuIGNyZWRlbnRpYWxzIHdlcmUgZXh0cmFjdGVkLCB1c2UgdGhlbSBkaXJlY3RseSB0byBwcmVzZXJ2ZSBleGlzdGluZyBzaWduYXR1cmVzXG4gICAgLy8gRm9yIGluaXRCdWlsZGVyLCBfZnJvbUFkZHJlc3NlcyBtYXkgbm90IGJlIHNldCB5ZXQsIHNvIHVzZSBhbGwgemVyb3MgZm9yIGNyZWRlbnRpYWwgc2xvdHNcbiAgICBsZXQgdHhDcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIGlmIChjcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICB0eENyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBlbXB0eSBjcmVkZW50aWFsIHdpdGggdGhyZXNob2xkIG51bWJlciBvZiBzaWduYXR1cmUgc2xvdHMgKGFsbCB6ZXJvcylcbiAgICAgIGNvbnN0IGVtcHR5U2lnbmF0dXJlczogUmV0dXJuVHlwZTx0eXBlb2YgdXRpbHMuY3JlYXRlTmV3U2lnPltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgZW1wdHlTaWduYXR1cmVzLnB1c2godXRpbHMuY3JlYXRlTmV3U2lnKCcnKSk7XG4gICAgICB9XG4gICAgICB0eENyZWRlbnRpYWxzID0gW25ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcyldO1xuICAgIH1cblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChiYXNlVHgsIFtdLCBhZGRyZXNzTWFwcywgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHhuVHlwZSA9PT0gRmxhcmVUcmFuc2FjdGlvblR5cGUuRXZtSW1wb3J0VHg7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltcG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUodHhuVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGltcG9ydCBpbiBDLWNoYWluIHRyYW5zYWN0aW9uXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gaWYgdHggaGFzIGNyZWRlbnRpYWxzIG9yIHdhcyBhbHJlYWR5IHJlY292ZXJlZCBmcm9tIHJhdywgdHggc2hvdWxkbid0IGNoYW5nZVxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmhhc0NyZWRlbnRpYWxzKSByZXR1cm47XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uX3RvLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0byBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWVSYXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZlZSByYXRlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpbnB1dHMsIGFtb3VudCwgY3JlZGVudGlhbHMgfSA9IHRoaXMuY3JlYXRlSW5wdXRzKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgaW1wb3J0IGNvc3QgdW5pdHMgKG1hdGNoaW5nIEFWQVhQJ3MgY29zdEltcG9ydFR4IGFwcHJvYWNoKVxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSB0cmFuc2FjdGlvbiB3aXRoIGZ1bGwgYW1vdW50IHRvIGNhbGN1bGF0ZSBmZWUgc2l6ZVxuICAgIGNvbnN0IHRlbXBPdXRwdXQgPSBuZXcgZXZtU2VyaWFsLk91dHB1dChcbiAgICAgIG5ldyBBZGRyZXNzKHRoaXMudHJhbnNhY3Rpb24uX3RvWzBdKSxcbiAgICAgIG5ldyBCaWdJbnRQcihhbW91bnQpLFxuICAgICAgbmV3IElkKG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSkpXG4gICAgKTtcbiAgICBjb25zdCB0ZW1wSW1wb3J0VHggPSBuZXcgZXZtU2VyaWFsLkltcG9ydFR4KFxuICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrSUQpLFxuICAgICAgbmV3IElkKG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCwgJ2hleCcpKSksXG4gICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkodGhpcy5fZXh0ZXJuYWxDaGFpbklkKSksXG4gICAgICBpbnB1dHMsXG4gICAgICBbdGVtcE91dHB1dF1cbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGZlZVNpemUgb25jZSB1c2luZyBmdWxsIGFtb3VudCAobWF0Y2hpbmcgQVZBWFAgYXBwcm9hY2gpXG4gICAgY29uc3QgZmVlU2l6ZSA9IHRoaXMuY2FsY3VsYXRlSW1wb3J0Q29zdCh0ZW1wSW1wb3J0VHgpO1xuICAgIGNvbnN0IGZlZVJhdGUgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZVJhdGUpO1xuICAgIGNvbnN0IGZlZSA9IGZlZVJhdGUgKiBCaWdJbnQoZmVlU2l6ZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGZ1bmRzIHRvIGNvdmVyIHRoZSBmZWVcbiAgICBpZiAoYW1vdW50IDw9IGZlZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEluc3VmZmljaWVudCBmdW5kczogaGF2ZSAke2Ftb3VudC50b1N0cmluZygpfSwgbmVlZCBtb3JlIHRoYW4gJHtmZWUudG9TdHJpbmcoKX0gZm9yIGZlZWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IGZlZS50b1N0cmluZygpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5zaXplID0gZmVlU2l6ZTtcblxuICAgIC8vIENyZWF0ZSBFVk0gb3V0cHV0IHVzaW5nIHByb3BlciBGbGFyZUpTIGNsYXNzIHdpdGggYW1vdW50IG1pbnVzIGZlZVxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBldm1TZXJpYWwuT3V0cHV0KFxuICAgICAgbmV3IEFkZHJlc3ModGhpcy50cmFuc2FjdGlvbi5fdG9bMF0pLFxuICAgICAgbmV3IEJpZ0ludFByKGFtb3VudCAtIGZlZSksXG4gICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKSlcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBpbXBvcnQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCBpbXBvcnRUeCA9IG5ldyBldm1TZXJpYWwuSW1wb3J0VHgoXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmtJRCksXG4gICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELCAnaGV4JykpKSxcbiAgICAgIG5ldyBJZChuZXcgVWludDhBcnJheSh0aGlzLl9leHRlcm5hbENoYWluSWQpKSxcbiAgICAgIGlucHV0cyxcbiAgICAgIFtvdXRwdXRdXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBBZGRyZXNzTWFwcyBiYXNlZCBvbiBzaWduYXR1cmUgc2xvdCBvcmRlciAobWF0Y2hpbmcgY3JlZGVudGlhbCBvcmRlciksIG5vdCBzb3J0ZWQgYWRkcmVzc2VzXG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBhcHByb2FjaCB1c2VkIGluIGNyZWRlbnRpYWxzOiBhZGRyZXNzZXNJbmRleCBkZXRlcm1pbmVzIHNpZ25hdHVyZSBvcmRlclxuICAgIC8vIEFkZHJlc3NNYXBzIHNob3VsZCBtYXAgYWRkcmVzc2VzIHRvIHNpZ25hdHVyZSBzbG90cyBpbiB0aGUgc2FtZSBvcmRlciBhcyBjcmVkZW50aWFsc1xuICAgIC8vIEZvciBDLWNoYWluIGltcG9ydHMsIHdlIHR5cGljYWxseSBoYXZlIG9uZSBpbnB1dCwgc28gdXNlIHRoZSBmaXJzdCBVVFhPXG4gICAgLy8gVXNlIGNlbnRyYWxpemVkIG1ldGhvZCBmb3IgQWRkcmVzc01hcCBjcmVhdGlvblxuICAgIGNvbnN0IGZpcnN0VXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdO1xuICAgIGNvbnN0IGFkZHJlc3NNYXAgPSBmaXJzdFV0eG9cbiAgICAgID8gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byhmaXJzdFV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZClcbiAgICAgIDogbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcCgpO1xuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoW2FkZHJlc3NNYXBdKTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChcbiAgICAgIGltcG9ydFR4LFxuICAgICAgW10sIC8vIEVtcHR5IFVUWE9zIGFycmF5LCB3aWxsIGJlIGZpbGxlZCBkdXJpbmcgcHJvY2Vzc2luZ1xuICAgICAgYWRkcmVzc01hcHMsXG4gICAgICBjcmVkZW50aWFsc1xuICAgICk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBpbnB1dHMgZnJvbSBVVFhPc1xuICAgKiBAcmV0dXJuIHtcbiAgICogICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICogICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gICAqICAgICBhbW91bnQ6IGJpZ2ludDtcbiAgICogfVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUlucHV0cygpOiB7XG4gICAgaW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdO1xuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gICAgYW1vdW50OiBiaWdpbnQ7XG4gIH0ge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMuc2xpY2UoKTtcbiAgICBpZiAodGhpcy5yZWNvdmVyU2lnbmVyKSB7XG4gICAgICAvLyBzd2l0Y2ggZmlyc3QgYW5kIGxhc3Qgc2lnbmVyXG4gICAgICBjb25zdCB0bXAgPSBzZW5kZXIucG9wKCk7XG4gICAgICBzZW5kZXIucHVzaChzZW5kZXJbMF0pO1xuICAgICAgaWYgKHRtcCkge1xuICAgICAgICBzZW5kZXJbMF0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsQW1vdW50ID0gQmlnSW50KDApO1xuICAgIGNvbnN0IGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IEJpZ0ludCh1dHhvLmFtb3VudCk7XG4gICAgICB0b3RhbEFtb3VudCArPSBhbW91bnQ7XG5cbiAgICAgIC8vIENyZWF0ZSBzaWduYXR1cmUgaW5kaWNlcyBmb3IgdGhyZXNob2xkXG4gICAgICBjb25zdCBzaWdJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7IGkrKykge1xuICAgICAgICBzaWdJbmRpY2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBmcm9tTmF0aXZlIHRvIGNyZWF0ZSBUcmFuc2ZlcmFibGVJbnB1dCAoc2FtZSBwYXR0ZXJuIGFzIEltcG9ydEluUFR4QnVpbGRlcilcbiAgICAgIC8vIGZyb21OYXRpdmUgZXhwZWN0cyBjYjU4LWVuY29kZWQgc3RyaW5ncyBmb3IgdHhJZCBhbmQgYXNzZXRJZFxuICAgICAgY29uc3QgdHhJZENiNTggPSB1dHhvLnR4aWQ7IC8vIEFscmVhZHkgY2I1OCBlbmNvZGVkXG4gICAgICBjb25zdCBhc3NldElkQ2I1OCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJhYmxlSW5wdXQgPSBUcmFuc2ZlcmFibGVJbnB1dC5mcm9tTmF0aXZlKFxuICAgICAgICB0eElkQ2I1OCxcbiAgICAgICAgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSxcbiAgICAgICAgYXNzZXRJZENiNTgsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgc2lnSW5kaWNlc1xuICAgICAgKTtcblxuICAgICAgaW5wdXRzLnB1c2godHJhbnNmZXJhYmxlSW5wdXQpO1xuXG4gICAgICAvLyBDcmVhdGUgY3JlZGVudGlhbCB3aXRoIGVtcHR5IHNpZ25hdHVyZXMgZm9yIHNsb3QgaWRlbnRpZmljYXRpb25cbiAgICAgIC8vIE1hdGNoIGF2YXhwIGJlaGF2aW9yOiBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYT1xuICAgICAgLy8gVXNlIGNlbnRyYWxpemVkIG1ldGhvZCBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICAgICAgY3JlZGVudGlhbHMucHVzaCh0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0cyxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW1wb3J0IGNvc3QgZm9yIEMtY2hhaW4gaW1wb3J0IHRyYW5zYWN0aW9uc1xuICAgKiBNYXRjaGVzIEFWQVhQJ3MgY29zdEltcG9ydFR4IGZvcm11bGE6XG4gICAqIC0gQmFzZSBieXRlIGNvc3Q6IHRyYW5zYWN0aW9uU2l6ZSAqIHR4Qnl0ZXNHYXMgKDEgZ2FzIHBlciBieXRlKVxuICAgKiAtIFBlci1pbnB1dCBjb3N0OiBudW1JbnB1dHMgKiBjb3N0UGVyU2lnbmF0dXJlICgxMDAwIHBlciBzaWduYXR1cmUpICogdGhyZXNob2xkXG4gICAqIC0gRml4ZWQgZmVlOiAxMDAwMFxuICAgKlxuICAgKiBUaGlzIHJldHVybnMgY29zdCBcInVuaXRzXCIgdG8gYmUgbXVsdGlwbGllZCBieSBmZWVSYXRlLCBtYXRjaGluZyBBVkFYUCdzIGFwcHJvYWNoOlxuICAgKiBBVkFYUDogZmVlID0gZmVlUmF0ZS5tdWxuKGNvc3RJbXBvcnRUeCh0eCkpXG4gICAqIEZMUlA6ICBmZWUgPSBmZWVSYXRlICogY2FsY3VsYXRlSW1wb3J0Q29zdCh0eClcbiAgICpcbiAgICogQHBhcmFtIHR4IFRoZSBJbXBvcnRUeCB0byBjYWxjdWxhdGUgdGhlIGNvc3QgZm9yXG4gICAqIEByZXR1cm5zIFRoZSB0b3RhbCBjb3N0IHVuaXRzXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUltcG9ydENvc3QodHg6IGV2bVNlcmlhbC5JbXBvcnRUeCk6IG51bWJlciB7XG4gICAgY29uc3QgY29kZWMgPSBhdm1TZXJpYWwuZ2V0QVZNTWFuYWdlcigpLmdldERlZmF1bHRDb2RlYygpO1xuICAgIGNvbnN0IHR4Qnl0ZXMgPSB0eC50b0J5dGVzKGNvZGVjKTtcblxuICAgIC8vIEJhc2UgYnl0ZSBjb3N0OiAxIGdhcyBwZXIgYnl0ZSAobWF0Y2hpbmcgQVZBWCB0eEJ5dGVzR2FzKVxuICAgIGNvbnN0IHR4Qnl0ZXNHYXMgPSAxO1xuICAgIGxldCBieXRlc0Nvc3QgPSB0eEJ5dGVzLmxlbmd0aCAqIHR4Qnl0ZXNHYXM7XG5cbiAgICAvLyBQZXItaW5wdXQgY29zdDogY29zdFBlclNpZ25hdHVyZSAoMTAwMCkgcGVyIHNpZ25hdHVyZVxuICAgIGNvbnN0IGNvc3RQZXJTaWduYXR1cmUgPSAxMDAwO1xuICAgIGNvbnN0IG51bUlucHV0cyA9IHR4LmltcG9ydGVkSW5wdXRzLmxlbmd0aDtcbiAgICBjb25zdCBudW1TaWduYXR1cmVzID0gdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkOyAvLyBFYWNoIGlucHV0IHJlcXVpcmVzIHRocmVzaG9sZCBzaWduYXR1cmVzXG4gICAgY29uc3QgaW5wdXRDb3N0ID0gbnVtSW5wdXRzICogY29zdFBlclNpZ25hdHVyZSAqIG51bVNpZ25hdHVyZXM7XG4gICAgYnl0ZXNDb3N0ICs9IGlucHV0Q29zdDtcblxuICAgIC8vIEZpeGVkIGZlZSBjb21wb25lbnRcbiAgICBjb25zdCBmaXhlZEZlZSA9IDEwMDAwO1xuICAgIGNvbnN0IHRvdGFsQ29zdCA9IGJ5dGVzQ29zdCArIGZpeGVkRmVlO1xuXG4gICAgcmV0dXJuIHRvdGFsQ29zdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB0eGlkID0gaW5wdXQudXR4b0lELnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBvdXRwdXRpZHggPSBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnRvU3RyaW5nKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgICBhbW91bnQ6IGlucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odHhpZCwgJ2hleCcpKSxcbiAgICAgICAgb3V0cHV0aWR4OiBvdXRwdXRpZHgsXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhZGRyZXNzZXM6IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PlxuICAgICAgICAgIHV0aWxzLmFkZHJlc3NUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmhycCwgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcywgQnVmZmVyLmZyb20oYWRkcikpXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLCtFQUE0RTtBQUM1RSxtREFVK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxRQUFnQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU0sRUFBRSxRQUFpQixFQUFFLGlCQUFnQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxFQUF3QixDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCw0RUFBNEU7UUFDNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENB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Q0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWhWRCxnREFnVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgZXZtU2VyaWFsLFxuICBVbnNpZ25lZFR4LFxuICBDcmVkZW50aWFsLFxuICBCaWdJbnRQcixcbiAgSW50LFxuICBJZCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIEFkZHJlc3MsXG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgRmxhcmVUcmFuc2FjdGlvblR5cGUsIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRJbkNUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQy1jaGFpbiBhZGRyZXNzIHdobyBpcyB0YXJnZXQgb2YgdGhlIGltcG9ydC5cbiAgICogQWRkcmVzcyBmb3JtYXQgaXMgZXRoIGxpa2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNBZGRyZXNzXG4gICAqL1xuICB0byhjQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBbdXRpbHMucGFyc2VBZGRyZXNzKGNBZGRyZXNzKV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuSW1wb3J0O1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4LCByYXdCeXRlcz86IEJ1ZmZlciwgcGFyc2VkQ3JlZGVudGlhbHM/OiBDcmVkZW50aWFsW10pOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHggPSB0eCBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShiYXNlVHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG91dHB1dHMgaXMgYSBzaW5nbGUgQy1DaGFpbiBhZGRyZXNzIHJlc3VsdC5cbiAgICAvLyBJdCdzIGV4cGVjdGVkIHRvIGhhdmUgb25seSBvbmUgb3V0cHV0IHRvIHRoZSBkZXN0aW5hdGlvbiBDLUNoYWluIGFkZHJlc3MuXG4gICAgY29uc3Qgb3V0cHV0cyA9IGJhc2VUeC5PdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIG91dHB1dCcpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdO1xuXG4gICAgaWYgKEJ1ZmZlci5mcm9tKG91dHB1dC5hc3NldElkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fzc2V0SUQgYXJlIG5vdCBlcXVhbHMnKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBbQnVmZmVyLmZyb20ob3V0cHV0LmFkZHJlc3MudG9CeXRlcygpKV07XG5cbiAgICBjb25zdCBpbnB1dHMgPSBiYXNlVHguaW1wb3J0ZWRJbnB1dHM7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhpbnB1dHMpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRvdGFsIGlucHV0IGFuZCBvdXRwdXQgYW1vdW50c1xuICAgIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKCh0LCBpKSA9PiB0ICsgaS5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCB0b3RhbE91dHB1dEFtb3VudCA9IG91dHB1dC5hbW91bnQudmFsdWUoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBmZWUgYmFzZWQgb24gaW5wdXQvb3V0cHV0IGRpZmZlcmVuY2VcbiAgICBjb25zdCBmZWUgPSB0b3RhbElucHV0QW1vdW50IC0gdG90YWxPdXRwdXRBbW91bnQ7XG5cbiAgICAvLyBVc2UgY3JlZGVudGlhbHMgcGFzc2VkIGZyb20gVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSAocHJvcGVybHkgZXh0cmFjdGVkIHVzaW5nIGNvZGVjKVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgLy8gSWYgaXQncyBhIHNpZ25lZCB0cmFuc2FjdGlvbiwgc3RvcmUgdGhlIG9yaWdpbmFsIHJhdyBieXRlcyB0byBwcmVzZXJ2ZSBleGFjdCBmb3JtYXRcbiAgICBpZiAoaGFzQ3JlZGVudGlhbHMgJiYgcmF3Qnl0ZXMpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3Jhd1NpZ25lZEJ5dGVzID0gcmF3Qnl0ZXM7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCB0aHJlc2hvbGQgZnJvbSBmaXJzdCBpbnB1dCdzIHNpZ0luZGljaWVzIChudW1iZXIgb2YgcmVxdWlyZWQgc2lnbmF0dXJlcylcbiAgICBjb25zdCBmaXJzdElucHV0ID0gaW5wdXRzWzBdO1xuICAgIGNvbnN0IGlucHV0VGhyZXNob2xkID0gZmlyc3RJbnB1dC5zaWdJbmRpY2llcygpLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gaW5wdXRUaHJlc2hvbGQ7XG5cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgVW5zaWduZWRUeCBmb3IgYWNjdXJhdGUgZmVlIHNpemUgY2FsY3VsYXRpb25cbiAgICAvLyBUaGlzIGluY2x1ZGVzIHRoZSBmdWxsIHN0cnVjdHVyZSAoSW1wb3J0VHgsIEFkZHJlc3NNYXBzLCBDcmVkZW50aWFscylcbiAgICBjb25zdCB0ZW1wQWRkcmVzc01hcCA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VGhyZXNob2xkOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzICYmIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbaV0pIHtcbiAgICAgICAgdGVtcEFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNbaV0pLCBpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGVtcEFkZHJlc3NNYXBzID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoW3RlbXBBZGRyZXNzTWFwXSk7XG4gICAgY29uc3QgdGVtcENyZWRlbnRpYWxzID1cbiAgICAgIGNyZWRlbnRpYWxzLmxlbmd0aCA+IDAgPyBjcmVkZW50aWFscyA6IFtuZXcgQ3JlZGVudGlhbChBcnJheShpbnB1dFRocmVzaG9sZCkuZmlsbCh1dGlscy5jcmVhdGVOZXdTaWcoJycpKSldO1xuICAgIGNvbnN0IHRlbXBVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoYmFzZVR4LCBbXSwgdGVtcEFkZHJlc3NNYXBzLCB0ZW1wQ3JlZGVudGlhbHMpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGNvc3QgdW5pdHMgdXNpbmcgdGhlIGZ1bGwgVW5zaWduZWRUeCBzdHJ1Y3R1cmVcbiAgICBjb25zdCBmZWVTaXplID0gdGhpcy5jYWxjdWxhdGVJbXBvcnRDb3N0KHRlbXBVbnNpZ25lZFR4KTtcbiAgICAvLyBVc2UgaW50ZWdlciBkaXZpc2lvbiB0byBlbnN1cmUgZmVlUmF0ZSBjYW4gYmUgY29udmVydGVkIGJhY2sgdG8gQmlnSW50XG4gICAgY29uc3QgZmVlUmF0ZSA9IE1hdGguZmxvb3IoTnVtYmVyKGZlZSkgLyBmZWVTaXplKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZSA9IHtcbiAgICAgIGZlZTogZmVlLnRvU3RyaW5nKCksXG4gICAgICBmZWVSYXRlOiBmZWVSYXRlLFxuICAgICAgc2l6ZTogZmVlU2l6ZSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIEFkZHJlc3NNYXBzIGJhc2VkIG9uIHNpZ25hdHVyZSBzbG90IG9yZGVyIChtYXRjaGluZyBjcmVkZW50aWFsIG9yZGVyKSwgbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGFwcHJvYWNoIHVzZWQgaW4gY3JlZGVudGlhbHM6IGFkZHJlc3Nlc0luZGV4IGRldGVybWluZXMgc2lnbmF0dXJlIG9yZGVyXG4gICAgLy8gQWRkcmVzc01hcHMgc2hvdWxkIG1hcCBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNyZWRlbnRpYWxzXG4gICAgLy8gSWYgX2Zyb21BZGRyZXNzZXMgaXMgYXZhaWxhYmxlLCBjcmVhdGUgQWRkcmVzc01hcCBiYXNlZCBvbiBVVFhPIG9yZGVyIChtYXRjaGluZyBjcmVkZW50aWFsIG9yZGVyKVxuICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIG1hcHBpbmcganVzdCB0aGUgb3V0cHV0IGFkZHJlc3NcbiAgICBjb25zdCBmaXJzdFV0eG8gPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1swXTtcbiAgICBsZXQgYWRkcmVzc01hcDogRmxhcmVVdGlscy5BZGRyZXNzTWFwO1xuICAgIGlmIChcbiAgICAgIGZpcnN0VXR4byAmJlxuICAgICAgZmlyc3RVdHhvLmFkZHJlc3NlcyAmJlxuICAgICAgZmlyc3RVdHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzICYmXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLmxlbmd0aCA+PSB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGRcbiAgICApIHtcbiAgICAgIC8vIFVzZSBjZW50cmFsaXplZCBtZXRob2QgZm9yIEFkZHJlc3NNYXAgY3JlYXRpb25cbiAgICAgIGFkZHJlc3NNYXAgPSB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKGZpcnN0VXR4bywgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2s6IG1hcCBvdXRwdXQgYWRkcmVzcyB0byBzbG90IDAgKGZvciBDLWNoYWluIGltcG9ydHMsIG91dHB1dCBpcyB0aGUgZGVzdGluYXRpb24pXG4gICAgICAvLyBPciBtYXAgYWRkcmVzc2VzIHNlcXVlbnRpYWxseSBpZiBfZnJvbUFkZHJlc3NlcyBpcyBhdmFpbGFibGUgYnV0IFVUWE8gYWRkcmVzc2VzIGFyZSBub3RcbiAgICAgIGFkZHJlc3NNYXAgPSBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwKCk7XG4gICAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyAmJiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLmxlbmd0aCA+PSB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5zbGljZSgwLCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLmZvckVhY2goKGFkZHIsIGkpID0+IHtcbiAgICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhhZGRyKSwgaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGFzdCByZXNvcnQ6IG1hcCBvdXRwdXQgYWRkcmVzc1xuICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSBuZXcgQWRkcmVzcyhvdXRwdXQuYWRkcmVzcy50b0J5dGVzKCkpO1xuICAgICAgICBhZGRyZXNzTWFwLnNldCh0b0FkZHJlc3MsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoW2FkZHJlc3NNYXBdKTtcblxuICAgIC8vIFdoZW4gY3JlZGVudGlhbHMgd2VyZSBleHRyYWN0ZWQsIHVzZSB0aGVtIGRpcmVjdGx5IHRvIHByZXNlcnZlIGV4aXN0aW5nIHNpZ25hdHVyZXNcbiAgICAvLyBGb3IgaW5pdEJ1aWxkZXIsIF9mcm9tQWRkcmVzc2VzIG1heSBub3QgYmUgc2V0IHlldCwgc28gdXNlIGFsbCB6ZXJvcyBmb3IgY3JlZGVudGlhbCBzbG90c1xuICAgIGxldCB0eENyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHR4Q3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGVtcHR5IGNyZWRlbnRpYWwgd2l0aCB0aHJlc2hvbGQgbnVtYmVyIG9mIHNpZ25hdHVyZSBzbG90cyAoYWxsIHplcm9zKVxuICAgICAgY29uc3QgZW1wdHlTaWduYXR1cmVzOiBSZXR1cm5UeXBlPHR5cGVvZiB1dGlscy5jcmVhdGVOZXdTaWc+W10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRUaHJlc2hvbGQ7IGkrKykge1xuICAgICAgICBlbXB0eVNpZ25hdHVyZXMucHVzaCh1dGlscy5jcmVhdGVOZXdTaWcoJycpKTtcbiAgICAgIH1cbiAgICAgIHR4Q3JlZGVudGlhbHMgPSBbbmV3IENyZWRlbnRpYWwoZW1wdHlTaWduYXR1cmVzKV07XG4gICAgfVxuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGJhc2VUeCwgW10sIGFkZHJlc3NNYXBzLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Fdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IGluIEMtY2hhaW4gdHJhbnNhY3Rpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBpZiB0eCBoYXMgY3JlZGVudGlhbHMgb3Igd2FzIGFscmVhZHkgcmVjb3ZlcmVkIGZyb20gcmF3LCB0eCBzaG91bGRuJ3QgY2hhbmdlXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fdG8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZVJhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmVlIHJhdGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlucHV0cywgYW1vdW50LCBjcmVkZW50aWFscyB9ID0gdGhpcy5jcmVhdGVJbnB1dHMoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBpbXBvcnQgY29zdCB1bml0cyAobWF0Y2hpbmcgQVZBWFAncyBjb3N0SW1wb3J0VHggYXBwcm9hY2gpXG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IFVuc2lnbmVkVHggd2l0aCBmdWxsIGFtb3VudCB0byBjYWxjdWxhdGUgZmVlIHNpemVcbiAgICAvLyBUaGlzIGluY2x1ZGVzIHRoZSBmdWxsIHN0cnVjdHVyZSAoSW1wb3J0VHgsIEFkZHJlc3NNYXBzLCBDcmVkZW50aWFscykgZm9yIGFjY3VyYXRlIHNpemUgY2FsY3VsYXRpb25cbiAgICBjb25zdCB0ZW1wT3V0cHV0ID0gbmV3IGV2bVNlcmlhbC5PdXRwdXQoXG4gICAgICBuZXcgQWRkcmVzcyh0aGlzLnRyYW5zYWN0aW9uLl90b1swXSksXG4gICAgICBuZXcgQmlnSW50UHIoYW1vdW50KSxcbiAgICAgIG5ldyBJZChuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpKVxuICAgICk7XG4gICAgY29uc3QgdGVtcEltcG9ydFR4ID0gbmV3IGV2bVNlcmlhbC5JbXBvcnRUeChcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lEKSxcbiAgICAgIG5ldyBJZChuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsICdoZXgnKSkpLFxuICAgICAgbmV3IElkKG5ldyBVaW50OEFycmF5KHRoaXMuX2V4dGVybmFsQ2hhaW5JZCkpLFxuICAgICAgaW5wdXRzLFxuICAgICAgW3RlbXBPdXRwdXRdXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBBZGRyZXNzTWFwcyBmb3IgZmVlIGNhbGN1bGF0aW9uIChzYW1lIGFzIGZpbmFsIHRyYW5zYWN0aW9uKVxuICAgIGNvbnN0IGZpcnN0VXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdO1xuICAgIGNvbnN0IHRlbXBBZGRyZXNzTWFwID0gZmlyc3RVdHhvXG4gICAgICA/IHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8oZmlyc3RVdHhvLCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpXG4gICAgICA6IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoKTtcbiAgICBjb25zdCB0ZW1wQWRkcmVzc01hcHMgPSBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhbdGVtcEFkZHJlc3NNYXBdKTtcblxuICAgIC8vIENyZWF0ZSB0ZW1wb3JhcnkgVW5zaWduZWRUeCB3aXRoIGZ1bGwgc3RydWN0dXJlIGZvciBhY2N1cmF0ZSBmZWUgY2FsY3VsYXRpb25cbiAgICBjb25zdCB0ZW1wVW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KHRlbXBJbXBvcnRUeCwgW10sIHRlbXBBZGRyZXNzTWFwcywgY3JlZGVudGlhbHMpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGZlZVNpemUgb25jZSB1c2luZyBmdWxsIFVuc2lnbmVkVHggKG1hdGNoaW5nIEFWQVhQIGFwcHJvYWNoKVxuICAgIGNvbnN0IGZlZVNpemUgPSB0aGlzLmNhbGN1bGF0ZUltcG9ydENvc3QodGVtcFVuc2lnbmVkVHgpO1xuICAgIGNvbnN0IGZlZVJhdGUgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZVJhdGUpO1xuICAgIGNvbnN0IGZlZSA9IGZlZVJhdGUgKiBCaWdJbnQoZmVlU2l6ZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGZ1bmRzIHRvIGNvdmVyIHRoZSBmZWVcbiAgICBpZiAoYW1vdW50IDw9IGZlZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEluc3VmZmljaWVudCBmdW5kczogaGF2ZSAke2Ftb3VudC50b1N0cmluZygpfSwgbmVlZCBtb3JlIHRoYW4gJHtmZWUudG9TdHJpbmcoKX0gZm9yIGZlZWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IGZlZS50b1N0cmluZygpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5zaXplID0gZmVlU2l6ZTtcblxuICAgIC8vIENyZWF0ZSBFVk0gb3V0cHV0IHVzaW5nIHByb3BlciBGbGFyZUpTIGNsYXNzIHdpdGggYW1vdW50IG1pbnVzIGZlZVxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBldm1TZXJpYWwuT3V0cHV0KFxuICAgICAgbmV3IEFkZHJlc3ModGhpcy50cmFuc2FjdGlvbi5fdG9bMF0pLFxuICAgICAgbmV3IEJpZ0ludFByKGFtb3VudCAtIGZlZSksXG4gICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKSlcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBpbXBvcnQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCBpbXBvcnRUeCA9IG5ldyBldm1TZXJpYWwuSW1wb3J0VHgoXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmtJRCksXG4gICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELCAnaGV4JykpKSxcbiAgICAgIG5ldyBJZChuZXcgVWludDhBcnJheSh0aGlzLl9leHRlcm5hbENoYWluSWQpKSxcbiAgICAgIGlucHV0cyxcbiAgICAgIFtvdXRwdXRdXG4gICAgKTtcblxuICAgIC8vIFJldXNlIHRoZSBBZGRyZXNzTWFwcyBhbHJlYWR5IGNhbGN1bGF0ZWQgZm9yIGZlZSBjYWxjdWxhdGlvblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChcbiAgICAgIGltcG9ydFR4LFxuICAgICAgW10sIC8vIEVtcHR5IFVUWE9zIGFycmF5LCB3aWxsIGJlIGZpbGxlZCBkdXJpbmcgcHJvY2Vzc2luZ1xuICAgICAgdGVtcEFkZHJlc3NNYXBzLFxuICAgICAgY3JlZGVudGlhbHNcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgaW5wdXRzIGZyb20gVVRYT3NcbiAgICogQHJldHVybiB7XG4gICAqICAgICBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAqICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgKiAgICAgYW1vdW50OiBiaWdpbnQ7XG4gICAqIH1cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbnB1dHMoKToge1xuICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIGFtb3VudDogYmlnaW50O1xuICB9IHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLnNsaWNlKCk7XG4gICAgaWYgKHRoaXMucmVjb3ZlclNpZ25lcikge1xuICAgICAgLy8gc3dpdGNoIGZpcnN0IGFuZCBsYXN0IHNpZ25lclxuICAgICAgY29uc3QgdG1wID0gc2VuZGVyLnBvcCgpO1xuICAgICAgc2VuZGVyLnB1c2goc2VuZGVyWzBdKTtcbiAgICAgIGlmICh0bXApIHtcbiAgICAgICAgc2VuZGVyWzBdID0gdG1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0b3RhbEFtb3VudCA9IEJpZ0ludCgwKTtcbiAgICBjb25zdCBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdID0gW107XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5mb3JFYWNoKCh1dHhvKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgdG90YWxBbW91bnQgKz0gYW1vdW50O1xuXG4gICAgICAvLyBDcmVhdGUgc2lnbmF0dXJlIGluZGljZXMgZm9yIHRocmVzaG9sZFxuICAgICAgY29uc3Qgc2lnSW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgc2lnSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgZnJvbU5hdGl2ZSB0byBjcmVhdGUgVHJhbnNmZXJhYmxlSW5wdXQgKHNhbWUgcGF0dGVybiBhcyBJbXBvcnRJblBUeEJ1aWxkZXIpXG4gICAgICAvLyBmcm9tTmF0aXZlIGV4cGVjdHMgY2I1OC1lbmNvZGVkIHN0cmluZ3MgZm9yIHR4SWQgYW5kIGFzc2V0SWRcbiAgICAgIGNvbnN0IHR4SWRDYjU4ID0gdXR4by50eGlkOyAvLyBBbHJlYWR5IGNiNTggZW5jb2RlZFxuICAgICAgY29uc3QgYXNzZXRJZENiNTggPSB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHRyYW5zZmVyYWJsZUlucHV0ID0gVHJhbnNmZXJhYmxlSW5wdXQuZnJvbU5hdGl2ZShcbiAgICAgICAgdHhJZENiNTgsXG4gICAgICAgIE51bWJlcih1dHhvLm91dHB1dGlkeCksXG4gICAgICAgIGFzc2V0SWRDYjU4LFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIHNpZ0luZGljZXNcbiAgICAgICk7XG5cbiAgICAgIGlucHV0cy5wdXNoKHRyYW5zZmVyYWJsZUlucHV0KTtcblxuICAgICAgLy8gQ3JlYXRlIGNyZWRlbnRpYWwgd2l0aCBlbXB0eSBzaWduYXR1cmVzIGZvciBzbG90IGlkZW50aWZpY2F0aW9uXG4gICAgICAvLyBNYXRjaCBhdmF4cCBiZWhhdmlvcjogZHluYW1pYyBvcmRlcmluZyBiYXNlZCBvbiBhZGRyZXNzZXNJbmRleCBmcm9tIFVUWE9cbiAgICAgIC8vIFVzZSBjZW50cmFsaXplZCBtZXRob2QgZm9yIGNyZWRlbnRpYWwgY3JlYXRpb25cbiAgICAgIGNyZWRlbnRpYWxzLnB1c2godGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHMsXG4gICAgICBjcmVkZW50aWFscyxcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zaWduZWRUeCBUaGUgVW5zaWduZWRUeCB0byBjYWxjdWxhdGUgdGhlIGNvc3QgZm9yIChpbmNsdWRlcyBJbXBvcnRUeCwgQWRkcmVzc01hcHMsIGFuZCBDcmVkZW50aWFscylcbiAgICogQHJldHVybnMgVGhlIHRvdGFsIGNvc3QgdW5pdHNcbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlSW1wb3J0Q29zdCh1bnNpZ25lZFR4OiBVbnNpZ25lZFR4KTogbnVtYmVyIHtcbiAgICBjb25zdCBzaWduZWRUeEJ5dGVzID0gdW5zaWduZWRUeC5nZXRTaWduZWRUeCgpLnRvQnl0ZXMoKTtcbiAgICBjb25zdCB0eEJ5dGVzR2FzID0gMTtcbiAgICBsZXQgYnl0ZXNDb3N0ID0gc2lnbmVkVHhCeXRlcy5sZW5ndGggKiB0eEJ5dGVzR2FzO1xuICAgIGNvbnN0IGNvc3RQZXJTaWduYXR1cmUgPSAxMDAwO1xuICAgIGNvbnN0IGltcG9ydFR4ID0gdW5zaWduZWRUeC5nZXRUeCgpIGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICBpbXBvcnRUeC5pbXBvcnRlZElucHV0cy5mb3JFYWNoKChpbnB1dDogVHJhbnNmZXJhYmxlSW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IGluQ29zdCA9IGNvc3RQZXJTaWduYXR1cmUgKiBpbnB1dC5zaWdJbmRpY2llcygpLmxlbmd0aDtcbiAgICAgIGJ5dGVzQ29zdCArPSBpbkNvc3Q7XG4gICAgfSk7XG4gICAgY29uc3QgZml4ZWRGZWUgPSAxMDAwMDtcbiAgICByZXR1cm4gYnl0ZXNDb3N0ICsgZml4ZWRGZWU7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0c1xuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBkZWNvZGVkIFVUWE8gb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvdmVyVXR4b3MoaW1wb3J0ZWRJbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICByZXR1cm4gaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdHhpZCA9IGlucHV0LnV0eG9JRC50b1N0cmluZygpO1xuICAgICAgY29uc3Qgb3V0cHV0aWR4ID0gaW5wdXQudXR4b0lELm91dHB1dElkeC50b1N0cmluZygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHR4aWQsICdoZXgnKSksXG4gICAgICAgIG91dHB1dGlkeDogb3V0cHV0aWR4LFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgYWRkcmVzc2VzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT5cbiAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIEJ1ZmZlci5mcm9tKGFkZHIpKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IMPORT_IN_C = void 0;
|
|
4
4
|
exports.IMPORT_IN_C = {
|
|
5
|
-
txhash: '
|
|
6
|
-
unsignedHex: '
|
|
5
|
+
txhash: '5wgxtB8tSyS2MNroAQgs8fA9sDUWCwrGJG88b77xUm1po685Q',
|
|
6
|
+
unsignedHex: '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d6587f058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd0000000100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e158100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ea9607a',
|
|
7
7
|
halfSignedSignature: '0xd365ef7ce45aebc4e81bc03f600867f515cebb25c4a0e8e1f06d9fe0a00d41fd2efac6c6df392e5f92e271c57486e39425537da7cafbb085cd1bd21aff06955d00',
|
|
8
|
-
halfSigntxHex: '
|
|
9
|
-
fullSigntxHex: '
|
|
8
|
+
halfSigntxHex: '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d6587f058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000010000000900000002e0c6d38e404ebeb08417a49c6c227e8c6ec5fd0c6a49d74eafa280cb8c6e19fe4d230834a0a3af5c3a49f3aefa9fc5f3d1be234aa8625f878634c9c079e58086010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196ceb32',
|
|
9
|
+
fullSigntxHex: '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d6587f058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000010000000900000002e0c6d38e404ebeb08417a49c6c227e8c6ec5fd0c6a49d74eafa280cb8c6e19fe4d230834a0a3af5c3a49f3aefa9fc5f3d1be234aa8625f878634c9c079e5808601ecb60f57234c5e852add6fbbf90f2c8613b4b1a520aefe6f7e78b5e21155d1f131107cf9177764c8dda5936e1dd8d5846ea9b7c016e3811565ab8b48776a15a100bb68cc63',
|
|
10
10
|
fullSignedSignature: '0x70d2ca9711622142610ddd347e482cbe5dc45aeafe66876bb82bfd57581300045b8457d804cc1b8f2efc10401367e5919b1912ee26d2d48c06cf82dc3f146acd00',
|
|
11
11
|
outputs: [
|
|
12
12
|
{
|
|
@@ -36,9 +36,9 @@ exports.IMPORT_IN_C = {
|
|
|
36
36
|
to: '0x17Dbd11B9dD1c9bE337353db7C14f9fb3662E5B5',
|
|
37
37
|
sourceChainId: 'vE8M98mEQH6wk56sStD1ML8HApTgSqfJZLk9gQ3Fsd4i6m3Bi',
|
|
38
38
|
threshold: 2,
|
|
39
|
-
fee: '
|
|
39
|
+
fee: '550',
|
|
40
40
|
locktime: 0,
|
|
41
41
|
INVALID_CHAIN_ID: 'wrong chain id',
|
|
42
42
|
VALID_C_CHAIN_ID: 'yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp',
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5DLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2ltcG9ydEluQy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFdBQVcsR0FBRztJQUN6QixNQUFNLEVBQUUsbURBQW1EO0lBQzNELFdBQVcsRUFDVCw0dkJBQTR2QjtJQUM5dkIsbUJBQW1CLEVBQ2pCLHNJQUFzSTtJQUN4SSxhQUFhLEVBQ1gsNHZCQUE0dkI7SUFDOXZCLGFBQWEsRUFDWCw0dkJBQTR2QjtJQUM5dkIsbUJBQW1CLEVBQ2pCLHNJQUFzSTtJQUV4SSxPQUFPLEVBQUU7UUFDUDtZQUNFLFFBQVEsRUFBRSxDQUFDO1lBQ1gsTUFBTSxFQUFFLFdBQVc7WUFDbkIsSUFBSSxFQUFFLG9EQUFvRDtZQUMxRCxTQUFTLEVBQUUsR0FBRztZQUNkLFNBQVMsRUFBRTtnQkFDVCw0Q0FBNEM7Z0JBQzVDLDRDQUE0QztnQkFDNUMsNENBQTRDO2FBQzdDO1lBQ0QsU0FBUyxFQUFFLENBQUM7U0FDYjtLQUNGO0lBQ0QsTUFBTSxFQUFFLFdBQVc7SUFDbkIsVUFBVSxFQUFFO1FBQ1YsaURBQWlEO1FBQ2pELGlEQUFpRDtRQUNqRCxpREFBaUQ7S0FDbEQ7SUFDRCxXQUFXLEVBQUU7UUFDWCxrRUFBa0U7UUFDbEUsa0VBQWtFO1FBQ2xFLGtFQUFrRTtLQUNuRTtJQUNELEVBQUUsRUFBRSw0Q0FBNEM7SUFDaEQsYUFBYSxFQUFFLG1EQUFtRDtJQUNsRSxTQUFTLEVBQUUsQ0FBQztJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsUUFBUSxFQUFFLENBQUM7SUFDWCxnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsZ0JBQWdCLEVBQUUsbURBQW1EO0NBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgSU1QT1JUX0lOX0MgPSB7XG4gIHR4aGFzaDogJzV3Z3h0Qjh0U3lTMk1Ocm9BUWdzOGZBOXNEVVdDd3JHSkc4OGI3N3hVbTFwbzY4NVEnLFxuICB1bnNpZ25lZEhleDpcbiAgICAnMHgwMDAwMDAwMDAwMDAwMDAwMDA3Mjc4ZGI1YzMwYmVkMDRjMDVjZTIwOTE3OTgxMjg1MGJiYjNmZTZkNDZkN2VlZjM3NDRkODE0YzBkYTU1NTI0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmY2VhMWMwZTJjYjdlM2Q3N2M5OTNlYjc0ZWUwNWQ5OGMyNDMyNWRlZDE5MThlOGEwNTk1Yzk2YTc4OWUyZjc5MDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDUwMDAwMDAwMDFkY2Q2NTAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDExN2RiZDExYjlkZDFjOWJlMzM3MzUzZGI3YzE0ZjlmYjM2NjJlNWI1MDAwMDAwMDAxZDY1ODdmMDU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzI5YmU3ZDAxY2QzZWJhYWU2NjU0ZDczMjdkZDlmMTdhMmUxNTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdlYTk2MDdhJyxcbiAgaGFsZlNpZ25lZFNpZ25hdHVyZTpcbiAgICAnMHhkMzY1ZWY3Y2U0NWFlYmM0ZTgxYmMwM2Y2MDA4NjdmNTE1Y2ViYjI1YzRhMGU4ZTFmMDZkOWZlMGEwMGQ0MWZkMmVmYWM2YzZkZjM5MmU1ZjkyZTI3MWM1NzQ4NmUzOTQyNTUzN2RhN2NhZmJiMDg1Y2QxYmQyMWFmZjA2OTU1ZDAwJyxcbiAgaGFsZlNpZ250eEhleDpcbiAgICAnMHgwMDAwMDAwMDAwMDAwMDAwMDA3Mjc4ZGI1YzMwYmVkMDRjMDVjZTIwOTE3OTgxMjg1MGJiYjNmZTZkNDZkN2VlZjM3NDRkODE0YzBkYTU1NTI0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmY2VhMWMwZTJjYjdlM2Q3N2M5OTNlYjc0ZWUwNWQ5OGMyNDMyNWRlZDE5MThlOGEwNTk1Yzk2YTc4OWUyZjc5MDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDUwMDAwMDAwMDFkY2Q2NTAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDExN2RiZDExYjlkZDFjOWJlMzM3MzUzZGI3YzE0ZjlmYjM2NjJlNWI1MDAwMDAwMDAxZDY1ODdmMDU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDJlMGM2ZDM4ZTQwNGViZWIwODQxN2E0OWM2YzIyN2U4YzZlYzVmZDBjNmE0OWQ3NGVhZmEyODBjYjhjNmUxOWZlNGQyMzA4MzRhMGEzYWY1YzNhNDlmM2FlZmE5ZmM1ZjNkMWJlMjM0YWE4NjI1Zjg3ODYzNGM5YzA3OWU1ODA4NjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5NmNlYjMyJyxcbiAgZnVsbFNpZ250eEhleDpcbiAgICAnMHgwMDAwMDAwMDAwMDAwMDAwMDA3Mjc4ZGI1YzMwYmVkMDRjMDVjZTIwOTE3OTgxMjg1MGJiYjNmZTZkNDZkN2VlZjM3NDRkODE0YzBkYTU1NTI0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmY2VhMWMwZTJjYjdlM2Q3N2M5OTNlYjc0ZWUwNWQ5OGMyNDMyNWRlZDE5MThlOGEwNTk1Yzk2YTc4OWUyZjc5MDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDUwMDAwMDAwMDFkY2Q2NTAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDExN2RiZDExYjlkZDFjOWJlMzM3MzUzZGI3YzE0ZjlmYjM2NjJlNWI1MDAwMDAwMDAxZDY1ODdmMDU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDJlMGM2ZDM4ZTQwNGViZWIwODQxN2E0OWM2YzIyN2U4YzZlYzVmZDBjNmE0OWQ3NGVhZmEyODBjYjhjNmUxOWZlNGQyMzA4MzRhMGEzYWY1YzNhNDlmM2FlZmE5ZmM1ZjNkMWJlMjM0YWE4NjI1Zjg3ODYzNGM5YzA3OWU1ODA4NjAxZWNiNjBmNTcyMzRjNWU4NTJhZGQ2ZmJiZjkwZjJjODYxM2I0YjFhNTIwYWVmZTZmN2U3OGI1ZTIxMTU1ZDFmMTMxMTA3Y2Y5MTc3NzY0YzhkZGE1OTM2ZTFkZDhkNTg0NmVhOWI3YzAxNmUzODExNTY1YWI4YjQ4Nzc2YTE1YTEwMGJiNjhjYzYzJyxcbiAgZnVsbFNpZ25lZFNpZ25hdHVyZTpcbiAgICAnMHg3MGQyY2E5NzExNjIyMTQyNjEwZGRkMzQ3ZTQ4MmNiZTVkYzQ1YWVhZmU2Njg3NmJiODJiZmQ1NzU4MTMwMDA0NWI4NDU3ZDgwNGNjMWI4ZjJlZmMxMDQwMTM2N2U1OTE5YjE5MTJlZTI2ZDJkNDhjMDZjZjgyZGMzZjE0NmFjZDAwJyxcblxuICBvdXRwdXRzOiBbXG4gICAge1xuICAgICAgb3V0cHV0SUQ6IDAsXG4gICAgICBhbW91bnQ6ICc1MDAwMDAwMDAnLFxuICAgICAgdHhpZDogJzJ2UE14OFA2M2FkZ0JhZTdHQVdGeDdxdkpEd1JtTW5EQ3lLZGRIUkJYV2h5c2pYNEJQJyxcbiAgICAgIG91dHB1dGlkeDogJzEnLFxuICAgICAgYWRkcmVzc2VzOiBbXG4gICAgICAgICcweDMzMjliZTdkMDFjZDNlYmFhZTY2NTRkNzMyN2RkOWYxN2EyZTE1ODEnLFxuICAgICAgICAnMHg3ZTkxOGE1ZTgwODNhZTRjOWYyZjBlZDc3MDU1YzI0YmYzNjY1MDAxJyxcbiAgICAgICAgJzB4YzczMjQ0MzdjOTZjN2M4YTZhMTUyZGEyMzg1YzFkYjVjM2FiMWY5MScsXG4gICAgICBdLFxuICAgICAgdGhyZXNob2xkOiAyLFxuICAgIH0sXG4gIF0sXG4gIGFtb3VudDogJzUwMDAwMDAwMCcsXG4gIHBBZGRyZXNzZXM6IFtcbiAgICAnUC1jb3N0d28xeHY1bXVsZ3BlNWx0NHRueDJudG55bHdlNzlhenU5dnBqYTZsdXQnLFxuICAgICdQLWNvc3R3bzEwNmdjNWg1cXN3aHllOGUwcG10aHE0d3pmMGVrdjVxcHBzcnZwdScsXG4gICAgJ1AtY29zdHdvMWN1ZXlnZDdmZDM3ZzU2czQ5azNyc2hxYWtocDZrOHUzYWR6dDZtJyxcbiAgXSxcbiAgcHJpdmF0ZUtleXM6IFtcbiAgICAnMjZhMzhlNTQzYmNiNmNmYTUyZDJiNzhkNGMzMTMzMGQzOGY1ZTg0ZGNkYjBiZTFkZjcyNzIyZDMzZTRjMTk0MCcsXG4gICAgJ2VmNTc2ODkyZGQ1ODJkOTM5MTRhM2RiYTNiNzdjYzRlMzJlNDcwYzMyZjQxMjc4MTczNDU0NzNhYWU3MTlkMTQnLFxuICAgICdhNDA4NTgzZThiYTA5YmM2MTljMmNkZDhmODlmMDk4MzlmZGRmNmYzOTI5ZGVmMjUyNTFmMWFhMjY2ZmY3ZDI0JyxcbiAgXSxcbiAgdG86ICcweDE3RGJkMTFCOWREMWM5YkUzMzczNTNkYjdDMTRmOWZiMzY2MkU1QjUnLFxuICBzb3VyY2VDaGFpbklkOiAndkU4TTk4bUVRSDZ3azU2c1N0RDFNTDhIQXBUZ1NxZkpaTGs5Z1EzRnNkNGk2bTNCaScsXG4gIHRocmVzaG9sZDogMixcbiAgZmVlOiAnNTUwJyxcbiAgbG9ja3RpbWU6IDAsXG4gIElOVkFMSURfQ0hBSU5fSUQ6ICd3cm9uZyBjaGFpbiBpZCcsXG4gIFZBTElEX0NfQ0hBSU5fSUQ6ICd5SDhEN1RoTkpreG10a3V2MmpnQmE0UDFSbjNRcHI0cFByN1FZTmZjZG9TNms2SFdwJyxcbn07XG4iXX0=
|