@bitgo-beta/sdk-coin-flrp 1.0.0-alpha.54 → 1.0.0-alpha.56
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/ExportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInPTxBuilder.js +23 -73
- package/dist/src/lib/ImportInCTxBuilder.d.ts +3 -3
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInCTxBuilder.js +89 -63
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInPTxBuilder.js +19 -72
- package/dist/src/lib/atomicTransactionBuilder.d.ts +21 -1
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +84 -1
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +4 -2
- package/dist/test/resources/transactionData/exportInC.js +2 -2
- package/dist/test/resources/transactionData/exportInP.js +4 -4
- package/dist/test/resources/transactionData/importInC.js +6 -6
- package/dist/test/resources/transactionData/importInP.js +2 -2
- package/dist/test/unit/flrp.js +1 -3
- package/dist/test/unit/lib/exportInCTxBuilder.js +9 -2
- package/dist/test/unit/lib/exportInPTxBuilder.js +169 -1
- package/dist/test/unit/lib/importInCTxBuilder.js +354 -1
- package/dist/test/unit/lib/importInPTxBuilder.js +203 -3
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -1
- package/dist/test/unit/lib/signFlowTestSuit.js +1 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -2,7 +2,8 @@ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
|
2
2
|
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
3
|
import { TransactionBuilder } from './transactionBuilder';
|
|
4
4
|
import { Transaction } from './transaction';
|
|
5
|
-
import { TransferableInput, Credential } from '@flarenetwork/flarejs';
|
|
5
|
+
import { TransferableInput, Credential, utils as FlareUtils } from '@flarenetwork/flarejs';
|
|
6
|
+
import { DecodedUtxoObj } from './iface';
|
|
6
7
|
export declare abstract class AtomicTransactionBuilder extends TransactionBuilder {
|
|
7
8
|
protected _externalChainId: Buffer;
|
|
8
9
|
protected recoverSigner: boolean;
|
|
@@ -55,5 +56,24 @@ export declare abstract class AtomicTransactionBuilder extends TransactionBuilde
|
|
|
55
56
|
* @param {string | bigint} feeValue - the fee value
|
|
56
57
|
*/
|
|
57
58
|
fee(feeValue: string | bigint): this;
|
|
59
|
+
/**
|
|
60
|
+
* Create credential with dynamic ordering based on addressesIndex from UTXO
|
|
61
|
+
* Matches avaxp behavior: signature order depends on UTXO address positions
|
|
62
|
+
* @param utxo - The UTXO to create credential for
|
|
63
|
+
* @param threshold - Number of signatures required
|
|
64
|
+
* @returns Credential with empty signatures ordered based on UTXO positions
|
|
65
|
+
* @protected
|
|
66
|
+
*/
|
|
67
|
+
protected createCredentialForUtxo(utxo: DecodedUtxoObj, threshold: number): Credential;
|
|
68
|
+
/**
|
|
69
|
+
* Create AddressMap based on signature slot order (matching credential order), not sorted addresses
|
|
70
|
+
* This matches the approach used in credentials: addressesIndex determines signature order
|
|
71
|
+
* AddressMaps should map addresses to signature slots in the same order as credentials
|
|
72
|
+
* @param utxo - The UTXO to create AddressMap for
|
|
73
|
+
* @param threshold - Number of signatures required
|
|
74
|
+
* @returns AddressMap that maps addresses to signature slots based on UTXO order
|
|
75
|
+
* @protected
|
|
76
|
+
*/
|
|
77
|
+
protected createAddressMapForUtxo(utxo: DecodedUtxoObj, threshold: number): FlareUtils.AddressMap;
|
|
58
78
|
}
|
|
59
79
|
//# sourceMappingURL=atomicTransactionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,iBAAiB,EAIjB,UAAU,EAEV,KAAK,IAAI,UAAU,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUzC,8BAAsB,wBAAyB,SAAQ,kBAAkB;IACvE,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,aAAa,UAAS;gBAEpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C;;;;;;;;;OASG;IACH,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;QAC3C,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC7B,WAAW,EAAE,UAAU,EAAE,CAAC;KAC3B;IAqJD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAY3D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,IAAI;IAEhD,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D;;;;;OAKG;IACH,SAAS,KAAK,QAAQ,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO/C;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMpC;;;;;;;OAOG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IAyCtF;;;;;;;;OAQG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU;CAmClG"}
|
|
@@ -201,6 +201,89 @@ class AtomicTransactionBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
201
201
|
this.transaction._fee.fee = fee;
|
|
202
202
|
return this;
|
|
203
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Create credential with dynamic ordering based on addressesIndex from UTXO
|
|
206
|
+
* Matches avaxp behavior: signature order depends on UTXO address positions
|
|
207
|
+
* @param utxo - The UTXO to create credential for
|
|
208
|
+
* @param threshold - Number of signatures required
|
|
209
|
+
* @returns Credential with empty signatures ordered based on UTXO positions
|
|
210
|
+
* @protected
|
|
211
|
+
*/
|
|
212
|
+
createCredentialForUtxo(utxo, threshold) {
|
|
213
|
+
const sender = this.transaction._fromAddresses;
|
|
214
|
+
const hasAddresses = sender && sender.length >= threshold;
|
|
215
|
+
if (!hasAddresses || !utxo.addresses || utxo.addresses.length === 0) {
|
|
216
|
+
// Fallback: use all zeros if no addresses available
|
|
217
|
+
const emptySignatures = [];
|
|
218
|
+
for (let i = 0; i < threshold; i++) {
|
|
219
|
+
emptySignatures.push(utils_1.default.createNewSig(''));
|
|
220
|
+
}
|
|
221
|
+
return new flarejs_1.Credential(emptySignatures);
|
|
222
|
+
}
|
|
223
|
+
// Compute addressesIndex: position of each _fromAddresses in UTXO's address list
|
|
224
|
+
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
225
|
+
const addressesIndex = sender.map((a) => utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0));
|
|
226
|
+
// either user (0) or recovery (2)
|
|
227
|
+
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
228
|
+
const bitgoIndex = 1;
|
|
229
|
+
// Dynamic ordering based on addressesIndex
|
|
230
|
+
let emptySignatures;
|
|
231
|
+
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
232
|
+
// Bitgo comes first in signature order: [zeros, userAddress]
|
|
233
|
+
emptySignatures = [
|
|
234
|
+
utils_1.default.createNewSig(''),
|
|
235
|
+
utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')),
|
|
236
|
+
];
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// User comes first in signature order: [userAddress, zeros]
|
|
240
|
+
emptySignatures = [
|
|
241
|
+
utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')),
|
|
242
|
+
utils_1.default.createNewSig(''),
|
|
243
|
+
];
|
|
244
|
+
}
|
|
245
|
+
return new flarejs_1.Credential(emptySignatures);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create AddressMap based on signature slot order (matching credential order), not sorted addresses
|
|
249
|
+
* This matches the approach used in credentials: addressesIndex determines signature order
|
|
250
|
+
* AddressMaps should map addresses to signature slots in the same order as credentials
|
|
251
|
+
* @param utxo - The UTXO to create AddressMap for
|
|
252
|
+
* @param threshold - Number of signatures required
|
|
253
|
+
* @returns AddressMap that maps addresses to signature slots based on UTXO order
|
|
254
|
+
* @protected
|
|
255
|
+
*/
|
|
256
|
+
createAddressMapForUtxo(utxo, threshold) {
|
|
257
|
+
const addressMap = new flarejs_1.utils.AddressMap();
|
|
258
|
+
const sender = this.transaction._fromAddresses;
|
|
259
|
+
// If UTXO has addresses, compute addressesIndex to determine signature order
|
|
260
|
+
if (utxo && utxo.addresses && utxo.addresses.length > 0 && sender && sender.length >= threshold) {
|
|
261
|
+
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
262
|
+
const addressesIndex = sender.map((a) => utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0));
|
|
263
|
+
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
264
|
+
const bitgoIndex = 1;
|
|
265
|
+
// Determine signature slot order based on addressesIndex (same logic as credentials)
|
|
266
|
+
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
267
|
+
// Bitgo comes first: slot 0 = bitgo, slot 1 = firstIndex
|
|
268
|
+
addressMap.set(new flarejs_1.Address(sender[bitgoIndex]), 0);
|
|
269
|
+
addressMap.set(new flarejs_1.Address(sender[firstIndex]), 1);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
// User/recovery comes first: slot 0 = firstIndex, slot 1 = bitgo
|
|
273
|
+
addressMap.set(new flarejs_1.Address(sender[firstIndex]), 0);
|
|
274
|
+
addressMap.set(new flarejs_1.Address(sender[bitgoIndex]), 1);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Fallback: map addresses sequentially if no UTXO addresses available
|
|
279
|
+
if (sender && sender.length >= threshold) {
|
|
280
|
+
sender.slice(0, threshold).forEach((addr, i) => {
|
|
281
|
+
addressMap.set(new flarejs_1.Address(addr), i);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return addressMap;
|
|
286
|
+
}
|
|
204
287
|
}
|
|
205
288
|
exports.AtomicTransactionBuilder = AtomicTransactionBuilder;
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsNkRBQTBEO0FBQzFELCtDQUE0QztBQUM1QyxtREFBNEY7QUFFNUYsb0RBQTRCO0FBUzVCLE1BQXNCLHdCQUF5QixTQUFRLHVDQUFrQjtJQUl2RSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDTyxpQkFBaUIsQ0FBQyxNQUFjO1FBS3hDLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxXQUEyQixDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4RSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QiwrQkFBK0I7WUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQztR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QztJQUNkLENBQUM7Q0FDRjtBQTNPRCw0REEyT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNmZXJhYmxlSW5wdXQsIEludCwgSWQsIFR5cGVTeW1ib2xzLCBDcmVkZW50aWFsIH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8vIEludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IGNhbiBwcm92aWRlIGFuIGFtb3VudFxuaW50ZXJmYWNlIEFtb3VudGVyIHtcbiAgX3R5cGU6IFR5cGVTeW1ib2xzO1xuICBhbW91bnQ6ICgpID0+IGJpZ2ludDtcbiAgdG9CeXRlczogKCkgPT4gVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfZXh0ZXJuYWxDaGFpbklkOiBCdWZmZXI7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSB0aGlzLmZpeGVkRmVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBpbnB1dHMgYW5kIG91dHB1dHMgZnJvbSBVVFhPc1xuICAgKiBAcGFyYW0ge2JpZ2ludH0gYW1vdW50IEFtb3VudCB0byB0cmFuc2ZlclxuICAgKiBAcmV0dXJuIHtcbiAgICogICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICogICAgIG91dHB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAqICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgKiB9XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbnB1dE91dHB1dChhbW91bnQ6IGJpZ2ludCk6IHtcbiAgICBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAgb3V0cHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICB9IHtcbiAgICBjb25zdCBzZW5kZXIgPSAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2Zyb21BZGRyZXNzZXMuc2xpY2UoKTtcbiAgICBpZiAodGhpcy5yZWNvdmVyU2lnbmVyKSB7XG4gICAgICAvLyBzd2l0Y2ggZmlyc3QgYW5kIGxhc3Qgc2lnbmVyXG4gICAgICBjb25zdCB0bXAgPSBzZW5kZXIucG9wKCk7XG4gICAgICBzZW5kZXIucHVzaChzZW5kZXJbMF0pO1xuICAgICAgaWYgKHRtcCkge1xuICAgICAgICBzZW5kZXJbMF0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsQW1vdW50ID0gQmlnSW50KDApO1xuICAgIGNvbnN0IGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdID0gW107XG5cbiAgICAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX3V0eG9zLmZvckVhY2goKHV0eG86IERlY29kZWRVdHhvT2JqKSA9PiB7XG4gICAgICBjb25zdCB1dHhvQW1vdW50ID0gQmlnSW50KHV0eG8uYW1vdW50KTtcbiAgICAgIHRvdGFsQW1vdW50ICs9IHV0eG9BbW91bnQ7XG5cbiAgICAgIC8vIENyZWF0ZSBpbnB1dFxuICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgIF90eXBlOiBUeXBlU3ltYm9scy5JbnB1dCxcbiAgICAgICAgYW1vdW50OiAoKSA9PiB1dHhvQW1vdW50LFxuICAgICAgICBzaWdJbmRpY2VzOiBzZW5kZXIubWFwKChfLCBpKSA9PiBpKSxcbiAgICAgICAgdG9CeXRlczogKCkgPT4gbmV3IFVpbnQ4QXJyYXkoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIENyZWF0ZSBhc3NldCB3aXRoIEFtb3VudGVyIGludGVyZmFjZVxuICAgICAgY29uc3QgYXNzZXRJZDogQW1vdW50ZXIgPSB7XG4gICAgICAgIF90eXBlOiBUeXBlU3ltYm9scy5CYXNlVHgsXG4gICAgICAgIGFtb3VudDogKCkgPT4gdXR4b0Ftb3VudCxcbiAgICAgICAgdG9CeXRlczogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oKHRoaXMudHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLl9hc3NldElkLCAnaGV4JykpO1xuICAgICAgICAgIHJldHVybiBieXRlcztcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIENyZWF0ZSBUcmFuc2ZlcmFibGVJbnB1dFxuICAgICAgY29uc3QgdHJhbnNmZXJhYmxlSW5wdXQgPSBuZXcgVHJhbnNmZXJhYmxlSW5wdXQoXG4gICAgICAgIHtcbiAgICAgICAgICBfdHlwZTogVHlwZVN5bWJvbHMuVVRYT0lELFxuICAgICAgICAgIHR4SUQ6IG5ldyBJZChuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh1dHhvLnR4aWQsICdoZXgnKSkpLFxuICAgICAgICAgIG91dHB1dElkeDogbmV3IEludChOdW1iZXIodXR4by5vdXRwdXRpZHgpKSxcbiAgICAgICAgICBJRDogKCkgPT4gdXR4by50eGlkLFxuICAgICAgICAgIHRvQnl0ZXM6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR4SWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHV0eG8udHhpZCwgJ2hleCcpKTtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dElkeEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgICAgICBuZXcgRGF0YVZpZXcob3V0cHV0SWR4Qnl0ZXMuYnVmZmVyKS5zZXRJbnQzMigwLCBOdW1iZXIodXR4by5vdXRwdXRpZHgpLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFt0eElkQnl0ZXMsIG91dHB1dElkeEJ5dGVzXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbmV3IElkKG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHV0eG8ub3V0cHV0aWR4LnRvU3RyaW5nKCkpKSksXG4gICAgICAgIGFzc2V0SWRcbiAgICAgICk7XG5cbiAgICAgIC8vIFNldCBpbnB1dCBwcm9wZXJ0aWVzXG4gICAgICBPYmplY3QuYXNzaWduKHRyYW5zZmVyYWJsZUlucHV0LCB7IGlucHV0IH0pO1xuICAgICAgaW5wdXRzLnB1c2godHJhbnNmZXJhYmxlSW5wdXQpO1xuXG4gICAgICAvLyBDcmVhdGUgY3JlZGVudGlhbCB3aXRoIGVtcHR5IHNpZ25hdHVyZXMgZm9yIHNsb3QgaWRlbnRpZmljYXRpb25cbiAgICAgIC8vIE1hdGNoIGF2YXhwIGJlaGF2aW9yOiBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYT1xuICAgICAgY29uc3QgaGFzQWRkcmVzc2VzID0gc2VuZGVyICYmIHNlbmRlci5sZW5ndGggPj0gKHRoaXMudHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLl90aHJlc2hvbGQ7XG5cbiAgICAgIGlmICghaGFzQWRkcmVzc2VzKSB7XG4gICAgICAgIC8vIElmIGFkZHJlc3NlcyBub3QgYXZhaWxhYmxlLCB1c2UgYWxsIHplcm9zXG4gICAgICAgIGNvbnN0IGVtcHR5U2lnbmF0dXJlcyA9IHNlbmRlci5tYXAoKCkgPT4gdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSk7XG4gICAgICAgIGNyZWRlbnRpYWxzLnB1c2gobmV3IENyZWRlbnRpYWwoZW1wdHlTaWduYXR1cmVzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb21wdXRlIGFkZHJlc3Nlc0luZGV4OiBwb3NpdGlvbiBvZiBlYWNoIF9mcm9tQWRkcmVzc2VzIGluIFVUWE8ncyBhZGRyZXNzIGxpc3RcbiAgICAgICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYTogc3RyaW5nKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYSkpO1xuICAgICAgICBjb25zdCBhZGRyZXNzZXNJbmRleCA9IHNlbmRlci5tYXAoKGEpID0+XG4gICAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZWl0aGVyIHVzZXIgKDApIG9yIHJlY292ZXJ5ICgyKVxuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICAgIGNvbnN0IGJpdGdvSW5kZXggPSAxO1xuXG4gICAgICAgIC8vIER5bmFtaWMgb3JkZXJpbmcgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXhcbiAgICAgICAgbGV0IGVtcHR5U2lnbmF0dXJlczogUmV0dXJuVHlwZTx0eXBlb2YgdXRpbHMuY3JlYXRlTmV3U2lnPltdO1xuICAgICAgICBpZiAoYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCBhZGRyZXNzZXNJbmRleFtmaXJzdEluZGV4XSkge1xuICAgICAgICAgIC8vIEJpdGdvIGNvbWVzIGZpcnN0IGluIHNpZ25hdHVyZSBvcmRlcjogW3plcm9zLCB1c2VyQWRkcmVzc11cbiAgICAgICAgICBlbXB0eVNpZ25hdHVyZXMgPSBbXG4gICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoJycpLFxuICAgICAgICAgICAgdXRpbHMuY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhCdWZmZXIuZnJvbShzZW5kZXJbZmlyc3RJbmRleF0pLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2VyIGNvbWVzIGZpcnN0IGluIHNpZ25hdHVyZSBvcmRlcjogW3VzZXJBZGRyZXNzLCB6ZXJvc11cbiAgICAgICAgICBlbXB0eVNpZ25hdHVyZXMgPSBbXG4gICAgICAgICAgICB1dGlscy5jcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKEJ1ZmZlci5mcm9tKHNlbmRlcltmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZygnJyksXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjcmVkZW50aWFscy5wdXNoKG5ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIG91dHB1dCBpZiB0aGVyZSBpcyBjaGFuZ2VcbiAgICBpZiAodG90YWxBbW91bnQgPiBhbW91bnQpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUFtb3VudCA9IHRvdGFsQW1vdW50IC0gYW1vdW50O1xuICAgICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgICBfdHlwZTogVHlwZVN5bWJvbHMuQmFzZVR4LFxuICAgICAgICBhbW91bnQ6ICgpID0+IGNoYW5nZUFtb3VudCxcbiAgICAgICAgYWRkcmVzc2VzOiBzZW5kZXIsXG4gICAgICAgIGxvY2t0aW1lOiAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2xvY2t0aW1lLFxuICAgICAgICB0aHJlc2hvbGQ6ICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fdGhyZXNob2xkLFxuICAgICAgICB0b0J5dGVzOiAoKSA9PiBuZXcgVWludDhBcnJheSgpLFxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIGFzc2V0IHdpdGggQW1vdW50ZXIgaW50ZXJmYWNlXG4gICAgICBjb25zdCBhc3NldElkOiBBbW91bnRlciA9IHtcbiAgICAgICAgX3R5cGU6IFR5cGVTeW1ib2xzLkJhc2VUeCxcbiAgICAgICAgYW1vdW50OiAoKSA9PiBjaGFuZ2VBbW91bnQsXG4gICAgICAgIHRvQnl0ZXM6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKCh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgVHJhbnNmZXJhYmxlT3V0cHV0XG4gICAgICBjb25zdCB0cmFuc2ZlcmFibGVPdXRwdXQgPSBuZXcgVHJhbnNmZXJhYmxlSW5wdXQoXG4gICAgICAgIHtcbiAgICAgICAgICBfdHlwZTogVHlwZVN5bWJvbHMuVVRYT0lELFxuICAgICAgICAgIHR4SUQ6IG5ldyBJZChuZXcgVWludDhBcnJheSgzMikpLFxuICAgICAgICAgIG91dHB1dElkeDogbmV3IEludCgwKSxcbiAgICAgICAgICBJRDogKCkgPT4gJycsXG4gICAgICAgICAgdG9CeXRlczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHhJZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0SWR4Qnl0ZXMgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFt0eElkQnl0ZXMsIG91dHB1dElkeEJ5dGVzXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbmV3IElkKG5ldyBVaW50OEFycmF5KFswXSkpLFxuICAgICAgICBhc3NldElkXG4gICAgICApO1xuXG4gICAgICAvLyBTZXQgb3V0cHV0IHByb3BlcnRpZXNcbiAgICAgIE9iamVjdC5hc3NpZ24odHJhbnNmZXJhYmxlT3V0cHV0LCB7IG91dHB1dCB9KTtcbiAgICAgIG91dHB1dHMucHVzaCh0cmFuc2ZlcmFibGVPdXRwdXQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHMsXG4gICAgICBvdXRwdXRzLFxuICAgICAgY3JlZGVudGlhbHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG4gICAgaWYgKHRoaXMuaGFzU2lnbmVyKCkpIHtcbiAgICAgIC8vIFNpZ24gc2VxdWVudGlhbGx5IHRvIGVuc3VyZSBwcm9wZXIgb3JkZXJcbiAgICAgIGZvciAoY29uc3Qga2V5UGFpciBvZiB0aGlzLl9zaWduZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbi5zaWduKGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIEZsYXJlIHRyYW5zYWN0aW9uLiBUcmFuc2FjdGlvbiBmaWVsZCBpcyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZTtcblxuICAvKipcbiAgICogRmVlIGlzIGZpeCBmb3IgQVZNIGF0b21pYyB0eC5cbiAgICpcbiAgICogQHJldHVybnMgbmV0d29yay50eEZlZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpeGVkRmVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsudHhGZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0XG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBjaGFpbiBpcyB0aGUgb25lIHNldCBmb3IgdGhlIGNvaW4gaW4gY29pbkNvbmZpZy5uZXR3b3JrLiBUaGUgZXh0ZXJuYWwgY2hhaW4gaXMgdGhlIG90aGVyIGNoYWluIGludm9sdmVkLlxuICAgKiBUaGUgZXh0ZXJuYWwgY2hhaW4gaWQgaXMgdGhlIHNvdXJjZSBvbiBpbXBvcnQgYW5kIHRoZSBkZXN0aW5hdGlvbiBvbiBleHBvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFpbklkIC0gaWQgb2YgdGhlIGV4dGVybmFsIGNoYWluXG4gICAqL1xuICBleHRlcm5hbENoYWluSWQoY2hhaW5JZDogc3RyaW5nIHwgQnVmZmVyKTogdGhpcyB7XG4gICAgY29uc3QgbmV3VGFyZ2V0Q2hhaW5JZCA9IHR5cGVvZiBjaGFpbklkID09PSAnc3RyaW5nJyA/IHV0aWxzLmNiNThEZWNvZGUoY2hhaW5JZCkgOiBCdWZmZXIuZnJvbShjaGFpbklkKTtcbiAgICB0aGlzLnZhbGlkYXRlQ2hhaW5JZChuZXdUYXJnZXRDaGFpbklkKTtcbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSBuZXdUYXJnZXRDaGFpbklkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gZmVlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgYmlnaW50fSBmZWVWYWx1ZSAtIHRoZSBmZWUgdmFsdWVcbiAgICovXG4gIGZlZShmZWVWYWx1ZTogc3RyaW5nIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgZmVlID0gdHlwZW9mIGZlZVZhbHVlID09PSAnc3RyaW5nJyA/IGZlZVZhbHVlIDogZmVlVmFsdWUudG9TdHJpbmcoKTtcbiAgICAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2ZlZS5mZWUgPSBmZWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsNkRBQTBEO0FBQzFELCtDQUE0QztBQUM1QyxtREFRK0I7QUFFL0Isb0RBQTRCO0FBUzVCLE1BQXNCLHdCQUF5QixTQUFRLHVDQUFrQjtJQUl2RSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDTyxpQkFBaUIsQ0FBQyxNQUFjO1FBS3hDLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxXQUEyQixDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4RSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QiwrQkFBK0I7WUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQztR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QUMsR0FBRyxDQUFDLElBQUksaUJBQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixzRUFBc0U7WUFDdEUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM3QyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQXpVRCw0REF5VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIEludCxcbiAgSWQsXG4gIFR5cGVTeW1ib2xzLFxuICBDcmVkZW50aWFsLFxuICBBZGRyZXNzLFxuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuLy8gSW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgY2FuIHByb3ZpZGUgYW4gYW1vdW50XG5pbnRlcmZhY2UgQW1vdW50ZXIge1xuICBfdHlwZTogVHlwZVN5bWJvbHM7XG4gIGFtb3VudDogKCkgPT4gYmlnaW50O1xuICB0b0J5dGVzOiAoKSA9PiBVaW50OEFycmF5O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9leHRlcm5hbENoYWluSWQ6IEJ1ZmZlcjtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IHRoaXMuZml4ZWRGZWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGlucHV0cyBhbmQgb3V0cHV0cyBmcm9tIFVUWE9zXG4gICAqIEBwYXJhbSB7YmlnaW50fSBhbW91bnQgQW1vdW50IHRvIHRyYW5zZmVyXG4gICAqIEByZXR1cm4ge1xuICAgKiAgICAgaW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdO1xuICAgKiAgICAgb3V0cHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICogICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gICAqIH1cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUlucHV0T3V0cHV0KGFtb3VudDogYmlnaW50KToge1xuICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBvdXRwdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdO1xuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gIH0ge1xuICAgIGNvbnN0IHNlbmRlciA9ICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fZnJvbUFkZHJlc3Nlcy5zbGljZSgpO1xuICAgIGlmICh0aGlzLnJlY292ZXJTaWduZXIpIHtcbiAgICAgIC8vIHN3aXRjaCBmaXJzdCBhbmQgbGFzdCBzaWduZXJcbiAgICAgIGNvbnN0IHRtcCA9IHNlbmRlci5wb3AoKTtcbiAgICAgIHNlbmRlci5wdXNoKHNlbmRlclswXSk7XG4gICAgICBpZiAodG1wKSB7XG4gICAgICAgIHNlbmRlclswXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdG90YWxBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgY29uc3QgaW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdID0gW107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcblxuICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fdXR4b3MuZm9yRWFjaCgodXR4bzogRGVjb2RlZFV0eG9PYmopID0+IHtcbiAgICAgIGNvbnN0IHV0eG9BbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgdG90YWxBbW91bnQgKz0gdXR4b0Ftb3VudDtcblxuICAgICAgLy8gQ3JlYXRlIGlucHV0XG4gICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgX3R5cGU6IFR5cGVTeW1ib2xzLklucHV0LFxuICAgICAgICBhbW91bnQ6ICgpID0+IHV0eG9BbW91bnQsXG4gICAgICAgIHNpZ0luZGljZXM6IHNlbmRlci5tYXAoKF8sIGkpID0+IGkpLFxuICAgICAgICB0b0J5dGVzOiAoKSA9PiBuZXcgVWludDhBcnJheSgpLFxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIGFzc2V0IHdpdGggQW1vdW50ZXIgaW50ZXJmYWNlXG4gICAgICBjb25zdCBhc3NldElkOiBBbW91bnRlciA9IHtcbiAgICAgICAgX3R5cGU6IFR5cGVTeW1ib2xzLkJhc2VUeCxcbiAgICAgICAgYW1vdW50OiAoKSA9PiB1dHhvQW1vdW50LFxuICAgICAgICB0b0J5dGVzOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSgodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2Fzc2V0SWQsICdoZXgnKSk7XG4gICAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIFRyYW5zZmVyYWJsZUlucHV0XG4gICAgICBjb25zdCB0cmFuc2ZlcmFibGVJbnB1dCA9IG5ldyBUcmFuc2ZlcmFibGVJbnB1dChcbiAgICAgICAge1xuICAgICAgICAgIF90eXBlOiBUeXBlU3ltYm9scy5VVFhPSUQsXG4gICAgICAgICAgdHhJRDogbmV3IElkKG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHV0eG8udHhpZCwgJ2hleCcpKSksXG4gICAgICAgICAgb3V0cHV0SWR4OiBuZXcgSW50KE51bWJlcih1dHhvLm91dHB1dGlkeCkpLFxuICAgICAgICAgIElEOiAoKSA9PiB1dHhvLnR4aWQsXG4gICAgICAgICAgdG9CeXRlczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHhJZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odXR4by50eGlkLCAnaGV4JykpO1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0SWR4Qnl0ZXMgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgIG5ldyBEYXRhVmlldyhvdXRwdXRJZHhCeXRlcy5idWZmZXIpLnNldEludDMyKDAsIE51bWJlcih1dHhvLm91dHB1dGlkeCksIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3R4SWRCeXRlcywgb3V0cHV0SWR4Qnl0ZXNdKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odXR4by5vdXRwdXRpZHgudG9TdHJpbmcoKSkpKSxcbiAgICAgICAgYXNzZXRJZFxuICAgICAgKTtcblxuICAgICAgLy8gU2V0IGlucHV0IHByb3BlcnRpZXNcbiAgICAgIE9iamVjdC5hc3NpZ24odHJhbnNmZXJhYmxlSW5wdXQsIHsgaW5wdXQgfSk7XG4gICAgICBpbnB1dHMucHVzaCh0cmFuc2ZlcmFibGVJbnB1dCk7XG5cbiAgICAgIC8vIENyZWF0ZSBjcmVkZW50aWFsIHdpdGggZW1wdHkgc2lnbmF0dXJlcyBmb3Igc2xvdCBpZGVudGlmaWNhdGlvblxuICAgICAgLy8gTWF0Y2ggYXZheHAgYmVoYXZpb3I6IGR5bmFtaWMgb3JkZXJpbmcgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXggZnJvbSBVVFhPXG4gICAgICBjb25zdCBoYXNBZGRyZXNzZXMgPSBzZW5kZXIgJiYgc2VuZGVyLmxlbmd0aCA+PSAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX3RocmVzaG9sZDtcblxuICAgICAgaWYgKCFoYXNBZGRyZXNzZXMpIHtcbiAgICAgICAgLy8gSWYgYWRkcmVzc2VzIG5vdCBhdmFpbGFibGUsIHVzZSBhbGwgemVyb3NcbiAgICAgICAgY29uc3QgZW1wdHlTaWduYXR1cmVzID0gc2VuZGVyLm1hcCgoKSA9PiB1dGlscy5jcmVhdGVOZXdTaWcoJycpKTtcbiAgICAgICAgY3JlZGVudGlhbHMucHVzaChuZXcgQ3JlZGVudGlhbChlbXB0eVNpZ25hdHVyZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENvbXB1dGUgYWRkcmVzc2VzSW5kZXg6IHBvc2l0aW9uIG9mIGVhY2ggX2Zyb21BZGRyZXNzZXMgaW4gVVRYTydzIGFkZHJlc3MgbGlzdFxuICAgICAgICBjb25zdCB1dHhvQWRkcmVzc2VzID0gdXR4by5hZGRyZXNzZXMubWFwKChhOiBzdHJpbmcpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gc2VuZGVyLm1hcCgoYSkgPT5cbiAgICAgICAgICB1dHhvQWRkcmVzc2VzLmZpbmRJbmRleCgodSkgPT4gQnVmZmVyLmNvbXBhcmUoQnVmZmVyLmZyb20odSksIEJ1ZmZlci5mcm9tKGEpKSA9PT0gMClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBlaXRoZXIgdXNlciAoMCkgb3IgcmVjb3ZlcnkgKDIpXG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSB0aGlzLnJlY292ZXJTaWduZXIgPyAyIDogMDtcbiAgICAgICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICAgICAgLy8gRHluYW1pYyBvcmRlcmluZyBiYXNlZCBvbiBhZGRyZXNzZXNJbmRleFxuICAgICAgICBsZXQgZW1wdHlTaWduYXR1cmVzOiBSZXR1cm5UeXBlPHR5cGVvZiB1dGlscy5jcmVhdGVOZXdTaWc+W107XG4gICAgICAgIGlmIChhZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA8IGFkZHJlc3Nlc0luZGV4W2ZpcnN0SW5kZXhdKSB7XG4gICAgICAgICAgLy8gQml0Z28gY29tZXMgZmlyc3QgaW4gc2lnbmF0dXJlIG9yZGVyOiBbemVyb3MsIHVzZXJBZGRyZXNzXVxuICAgICAgICAgIGVtcHR5U2lnbmF0dXJlcyA9IFtcbiAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZygnJyksXG4gICAgICAgICAgICB1dGlscy5jcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKEJ1ZmZlci5mcm9tKHNlbmRlcltmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFVzZXIgY29tZXMgZmlyc3QgaW4gc2lnbmF0dXJlIG9yZGVyOiBbdXNlckFkZHJlc3MsIHplcm9zXVxuICAgICAgICAgIGVtcHR5U2lnbmF0dXJlcyA9IFtcbiAgICAgICAgICAgIHV0aWxzLmNyZWF0ZUVtcHR5U2lnV2l0aEFkZHJlc3MoQnVmZmVyLmZyb20oc2VuZGVyW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNyZWRlbnRpYWxzLnB1c2gobmV3IENyZWRlbnRpYWwoZW1wdHlTaWduYXR1cmVzKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgb3V0cHV0IGlmIHRoZXJlIGlzIGNoYW5nZVxuICAgIGlmICh0b3RhbEFtb3VudCA+IGFtb3VudCkge1xuICAgICAgY29uc3QgY2hhbmdlQW1vdW50ID0gdG90YWxBbW91bnQgLSBhbW91bnQ7XG4gICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgIF90eXBlOiBUeXBlU3ltYm9scy5CYXNlVHgsXG4gICAgICAgIGFtb3VudDogKCkgPT4gY2hhbmdlQW1vdW50LFxuICAgICAgICBhZGRyZXNzZXM6IHNlbmRlcixcbiAgICAgICAgbG9ja3RpbWU6ICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fbG9ja3RpbWUsXG4gICAgICAgIHRocmVzaG9sZDogKHRoaXMudHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLl90aHJlc2hvbGQsXG4gICAgICAgIHRvQnl0ZXM6ICgpID0+IG5ldyBVaW50OEFycmF5KCksXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgYXNzZXQgd2l0aCBBbW91bnRlciBpbnRlcmZhY2VcbiAgICAgIGNvbnN0IGFzc2V0SWQ6IEFtb3VudGVyID0ge1xuICAgICAgICBfdHlwZTogVHlwZVN5bWJvbHMuQmFzZVR4LFxuICAgICAgICBhbW91bnQ6ICgpID0+IGNoYW5nZUFtb3VudCxcbiAgICAgICAgdG9CeXRlczogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oKHRoaXMudHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLl9hc3NldElkLCAnaGV4JykpO1xuICAgICAgICAgIHJldHVybiBieXRlcztcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIENyZWF0ZSBUcmFuc2ZlcmFibGVPdXRwdXRcbiAgICAgIGNvbnN0IHRyYW5zZmVyYWJsZU91dHB1dCA9IG5ldyBUcmFuc2ZlcmFibGVJbnB1dChcbiAgICAgICAge1xuICAgICAgICAgIF90eXBlOiBUeXBlU3ltYm9scy5VVFhPSUQsXG4gICAgICAgICAgdHhJRDogbmV3IElkKG5ldyBVaW50OEFycmF5KDMyKSksXG4gICAgICAgICAgb3V0cHV0SWR4OiBuZXcgSW50KDApLFxuICAgICAgICAgIElEOiAoKSA9PiAnJyxcbiAgICAgICAgICB0b0J5dGVzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eElkQnl0ZXMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRJZHhCeXRlcyA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3R4SWRCeXRlcywgb3V0cHV0SWR4Qnl0ZXNdKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoWzBdKSksXG4gICAgICAgIGFzc2V0SWRcbiAgICAgICk7XG5cbiAgICAgIC8vIFNldCBvdXRwdXQgcHJvcGVydGllc1xuICAgICAgT2JqZWN0LmFzc2lnbih0cmFuc2ZlcmFibGVPdXRwdXQsIHsgb3V0cHV0IH0pO1xuICAgICAgb3V0cHV0cy5wdXNoKHRyYW5zZmVyYWJsZU91dHB1dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0cyxcbiAgICAgIG91dHB1dHMsXG4gICAgICBjcmVkZW50aWFscyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICBpZiAodGhpcy5oYXNTaWduZXIoKSkge1xuICAgICAgLy8gU2lnbiBzZXF1ZW50aWFsbHkgdG8gZW5zdXJlIHByb3BlciBvcmRlclxuICAgICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX3NpZ25lcikge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLnNpZ24oa2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgRmxhcmUgdHJhbnNhY3Rpb24uIFRyYW5zYWN0aW9uIGZpZWxkIGlzIGNoYW5nZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBGZWUgaXMgZml4IGZvciBBVk0gYXRvbWljIHR4LlxuICAgKlxuICAgKiBAcmV0dXJucyBuZXR3b3JrLnR4RmVlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZml4ZWRGZWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay50eEZlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXRcbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGNoYWluIGlzIHRoZSBvbmUgc2V0IGZvciB0aGUgY29pbiBpbiBjb2luQ29uZmlnLm5ldHdvcmsuIFRoZSBleHRlcm5hbCBjaGFpbiBpcyB0aGUgb3RoZXIgY2hhaW4gaW52b2x2ZWQuXG4gICAqIFRoZSBleHRlcm5hbCBjaGFpbiBpZCBpcyB0aGUgc291cmNlIG9uIGltcG9ydCBhbmQgdGhlIGRlc3RpbmF0aW9uIG9uIGV4cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYWluSWQgLSBpZCBvZiB0aGUgZXh0ZXJuYWwgY2hhaW5cbiAgICovXG4gIGV4dGVybmFsQ2hhaW5JZChjaGFpbklkOiBzdHJpbmcgfCBCdWZmZXIpOiB0aGlzIHtcbiAgICBjb25zdCBuZXdUYXJnZXRDaGFpbklkID0gdHlwZW9mIGNoYWluSWQgPT09ICdzdHJpbmcnID8gdXRpbHMuY2I1OERlY29kZShjaGFpbklkKSA6IEJ1ZmZlci5mcm9tKGNoYWluSWQpO1xuICAgIHRoaXMudmFsaWRhdGVDaGFpbklkKG5ld1RhcmdldENoYWluSWQpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IG5ld1RhcmdldENoYWluSWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBmZWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBiaWdpbnR9IGZlZVZhbHVlIC0gdGhlIGZlZSB2YWx1ZVxuICAgKi9cbiAgZmVlKGZlZVZhbHVlOiBzdHJpbmcgfCBiaWdpbnQpOiB0aGlzIHtcbiAgICBjb25zdCBmZWUgPSB0eXBlb2YgZmVlVmFsdWUgPT09ICdzdHJpbmcnID8gZmVlVmFsdWUgOiBmZWVWYWx1ZS50b1N0cmluZygpO1xuICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fZmVlLmZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgY3JlZGVudGlhbCB3aXRoIGR5bmFtaWMgb3JkZXJpbmcgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXggZnJvbSBVVFhPXG4gICAqIE1hdGNoZXMgYXZheHAgYmVoYXZpb3I6IHNpZ25hdHVyZSBvcmRlciBkZXBlbmRzIG9uIFVUWE8gYWRkcmVzcyBwb3NpdGlvbnNcbiAgICogQHBhcmFtIHV0eG8gLSBUaGUgVVRYTyB0byBjcmVhdGUgY3JlZGVudGlhbCBmb3JcbiAgICogQHBhcmFtIHRocmVzaG9sZCAtIE51bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkXG4gICAqIEByZXR1cm5zIENyZWRlbnRpYWwgd2l0aCBlbXB0eSBzaWduYXR1cmVzIG9yZGVyZWQgYmFzZWQgb24gVVRYTyBwb3NpdGlvbnNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG86IERlY29kZWRVdHhvT2JqLCB0aHJlc2hvbGQ6IG51bWJlcik6IENyZWRlbnRpYWwge1xuICAgIGNvbnN0IHNlbmRlciA9ICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fZnJvbUFkZHJlc3NlcztcbiAgICBjb25zdCBoYXNBZGRyZXNzZXMgPSBzZW5kZXIgJiYgc2VuZGVyLmxlbmd0aCA+PSB0aHJlc2hvbGQ7XG5cbiAgICBpZiAoIWhhc0FkZHJlc3NlcyB8fCAhdXR4by5hZGRyZXNzZXMgfHwgdXR4by5hZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBGYWxsYmFjazogdXNlIGFsbCB6ZXJvcyBpZiBubyBhZGRyZXNzZXMgYXZhaWxhYmxlXG4gICAgICBjb25zdCBlbXB0eVNpZ25hdHVyZXM6IFJldHVyblR5cGU8dHlwZW9mIHV0aWxzLmNyZWF0ZU5ld1NpZz5bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHJlc2hvbGQ7IGkrKykge1xuICAgICAgICBlbXB0eVNpZ25hdHVyZXMucHVzaCh1dGlscy5jcmVhdGVOZXdTaWcoJycpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbChlbXB0eVNpZ25hdHVyZXMpO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgYWRkcmVzc2VzSW5kZXg6IHBvc2l0aW9uIG9mIGVhY2ggX2Zyb21BZGRyZXNzZXMgaW4gVVRYTydzIGFkZHJlc3MgbGlzdFxuICAgIGNvbnN0IHV0eG9BZGRyZXNzZXMgPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgY29uc3QgYWRkcmVzc2VzSW5kZXggPSBzZW5kZXIubWFwKChhKSA9PlxuICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgKTtcblxuICAgIC8vIGVpdGhlciB1c2VyICgwKSBvciByZWNvdmVyeSAoMilcbiAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICAvLyBEeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4XG4gICAgbGV0IGVtcHR5U2lnbmF0dXJlczogUmV0dXJuVHlwZTx0eXBlb2YgdXRpbHMuY3JlYXRlTmV3U2lnPltdO1xuICAgIGlmIChhZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA8IGFkZHJlc3Nlc0luZGV4W2ZpcnN0SW5kZXhdKSB7XG4gICAgICAvLyBCaXRnbyBjb21lcyBmaXJzdCBpbiBzaWduYXR1cmUgb3JkZXI6IFt6ZXJvcywgdXNlckFkZHJlc3NdXG4gICAgICBlbXB0eVNpZ25hdHVyZXMgPSBbXG4gICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZygnJyksXG4gICAgICAgIHV0aWxzLmNyZWF0ZUVtcHR5U2lnV2l0aEFkZHJlc3MoQnVmZmVyLmZyb20oc2VuZGVyW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlciBjb21lcyBmaXJzdCBpbiBzaWduYXR1cmUgb3JkZXI6IFt1c2VyQWRkcmVzcywgemVyb3NdXG4gICAgICBlbXB0eVNpZ25hdHVyZXMgPSBbXG4gICAgICAgIHV0aWxzLmNyZWF0ZUVtcHR5U2lnV2l0aEFkZHJlc3MoQnVmZmVyLmZyb20oc2VuZGVyW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoJycpLFxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIEFkZHJlc3NNYXAgYmFzZWQgb24gc2lnbmF0dXJlIHNsb3Qgb3JkZXIgKG1hdGNoaW5nIGNyZWRlbnRpYWwgb3JkZXIpLCBub3Qgc29ydGVkIGFkZHJlc3Nlc1xuICAgKiBUaGlzIG1hdGNoZXMgdGhlIGFwcHJvYWNoIHVzZWQgaW4gY3JlZGVudGlhbHM6IGFkZHJlc3Nlc0luZGV4IGRldGVybWluZXMgc2lnbmF0dXJlIG9yZGVyXG4gICAqIEFkZHJlc3NNYXBzIHNob3VsZCBtYXAgYWRkcmVzc2VzIHRvIHNpZ25hdHVyZSBzbG90cyBpbiB0aGUgc2FtZSBvcmRlciBhcyBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0gdXR4byAtIFRoZSBVVFhPIHRvIGNyZWF0ZSBBZGRyZXNzTWFwIGZvclxuICAgKiBAcGFyYW0gdGhyZXNob2xkIC0gTnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWRcbiAgICogQHJldHVybnMgQWRkcmVzc01hcCB0aGF0IG1hcHMgYWRkcmVzc2VzIHRvIHNpZ25hdHVyZSBzbG90cyBiYXNlZCBvbiBVVFhPIG9yZGVyXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvOiBEZWNvZGVkVXR4b09iaiwgdGhyZXNob2xkOiBudW1iZXIpOiBGbGFyZVV0aWxzLkFkZHJlc3NNYXAge1xuICAgIGNvbnN0IGFkZHJlc3NNYXAgPSBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwKCk7XG4gICAgY29uc3Qgc2VuZGVyID0gKHRoaXMudHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLl9mcm9tQWRkcmVzc2VzO1xuXG4gICAgLy8gSWYgVVRYTyBoYXMgYWRkcmVzc2VzLCBjb21wdXRlIGFkZHJlc3Nlc0luZGV4IHRvIGRldGVybWluZSBzaWduYXR1cmUgb3JkZXJcbiAgICBpZiAodXR4byAmJiB1dHhvLmFkZHJlc3NlcyAmJiB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwICYmIHNlbmRlciAmJiBzZW5kZXIubGVuZ3RoID49IHRocmVzaG9sZCkge1xuICAgICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcbiAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gc2VuZGVyLm1hcCgoYSkgPT5cbiAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICBjb25zdCBiaXRnb0luZGV4ID0gMTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHNpZ25hdHVyZSBzbG90IG9yZGVyIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IChzYW1lIGxvZ2ljIGFzIGNyZWRlbnRpYWxzKVxuICAgICAgaWYgKGFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdIDwgYWRkcmVzc2VzSW5kZXhbZmlyc3RJbmRleF0pIHtcbiAgICAgICAgLy8gQml0Z28gY29tZXMgZmlyc3Q6IHNsb3QgMCA9IGJpdGdvLCBzbG90IDEgPSBmaXJzdEluZGV4XG4gICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlcltiaXRnb0luZGV4XSksIDApO1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbZmlyc3RJbmRleF0pLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZXIvcmVjb3ZlcnkgY29tZXMgZmlyc3Q6IHNsb3QgMCA9IGZpcnN0SW5kZXgsIHNsb3QgMSA9IGJpdGdvXG4gICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlcltmaXJzdEluZGV4XSksIDApO1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbYml0Z29JbmRleF0pLCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2s6IG1hcCBhZGRyZXNzZXMgc2VxdWVudGlhbGx5IGlmIG5vIFVUWE8gYWRkcmVzc2VzIGF2YWlsYWJsZVxuICAgICAgaWYgKHNlbmRlciAmJiBzZW5kZXIubGVuZ3RoID49IHRocmVzaG9sZCkge1xuICAgICAgICBzZW5kZXIuc2xpY2UoMCwgdGhyZXNob2xkKS5mb3JFYWNoKChhZGRyLCBpKSA9PiB7XG4gICAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3MoYWRkciksIGkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkcmVzc01hcDtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACL,OAAO,EACP,eAAe,EACf,KAAK,EAGL,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,UAAU,EAOX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAA2C,MAAM,SAAS,CAAC;AACtH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,SAAK;IACf,SAAS,SAAa;IACtB,cAAc,EAAE,UAAU,EAAE,CAAM;IAClC,GAAG,EAAE,UAAU,EAAE,CAAM;IACvB,gBAAgB,EAAE,UAAU,EAAE,CAAM;IACpC,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAM;IAEnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE/B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAS5C,IAAI,SAAS,IAAI,MAAM,EAAE,CAKxB;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO;IAI5B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuF3C,iBAAiB,IAAI,MAAM;IAkB3B,MAAM,IAAI,MAAM;IAmBhB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CA6BpC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CA6BzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAW3B,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAI5B;;;OAGG;IACH,mBAAmB,IAAI,EAAE;IAIzB,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAO1D,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,EAAE,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACL,OAAO,EACP,eAAe,EACf,KAAK,EAGL,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,UAAU,EAOX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAA2C,MAAM,SAAS,CAAC;AACtH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,SAAK;IACf,SAAS,SAAa;IACtB,cAAc,EAAE,UAAU,EAAE,CAAM;IAClC,GAAG,EAAE,UAAU,EAAE,CAAM;IACvB,gBAAgB,EAAE,UAAU,EAAE,CAAM;IACpC,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAM;IAEnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE/B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAS5C,IAAI,SAAS,IAAI,MAAM,EAAE,CAKxB;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO;IAI5B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuF3C,iBAAiB,IAAI,MAAM;IAkB3B,MAAM,IAAI,MAAM;IAmBhB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CA6BpC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CA6BzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAW3B,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAI5B;;;OAGG;IACH,mBAAmB,IAAI,EAAE;IAIzB,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAO1D,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,EAAE,IAAI,MAAM,CAKf;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;IAED,IAAI,GAAG,IAAI,cAAc,CAExB;IAED;;OAEG;IACH,IAAI,sBAAsB,IAAI,OAAO,CAIpC;IAED,IAAI,OAAO,IAAI,KAAK,EAAE,CAwCrB;IAED,IAAI,aAAa,IAAI,KAAK,EAAE,CAmB3B;IAED,IAAI,MAAM,IAAI,KAAK,EAAE,CAsDpB;IAED,kBAAkB,IAAI,sBAAsB;CA0B7C"}
|
|
@@ -304,7 +304,9 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
304
304
|
return utils_1.default.sha256(this._flareTransaction.toBytes());
|
|
305
305
|
}
|
|
306
306
|
get id() {
|
|
307
|
-
const
|
|
307
|
+
const unsignedTx = this._flareTransaction;
|
|
308
|
+
const txBytes = unsignedTx.getSignedTx().toBytes();
|
|
309
|
+
const bufferArray = utils_1.default.sha256(txBytes);
|
|
308
310
|
return utils_1.default.cb58Encode(buffer_1.Buffer.from(bufferArray));
|
|
309
311
|
}
|
|
310
312
|
get fromAddresses() {
|
|
@@ -458,4 +460,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
458
460
|
}
|
|
459
461
|
}
|
|
460
462
|
exports.Transaction = Transaction;
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLG1EQVE4QjtBQUM5QixtREFTK0I7QUFDL0IsbUNBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxtQ0FBc0g7QUFFdEgsb0RBQTRCO0FBRTVCOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQWlCO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxlQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFTRDs7O0dBR0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQWlCO0lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsOEJBQThCO0lBQzlCLE9BQU8sWUFBWSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxVQUFvQjtJQUNyRCx1REFBdUQ7SUFDdkQsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsQ0FB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Q0FBQyxDQUFDO1lBQ3pGLFlBQVk7WUFDWixlQUFlO1lBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ2xCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyY0Qsa0NBcWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxhcmVOZXR3b3JrLCBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEVudHJ5LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFRyYW5zYWN0aW9uRmVlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxuICBDcmVkZW50aWFsLFxuICBwdm1TZXJpYWwsXG4gIGV2bVNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgc2VjcDI1NmsxLFxuICBFVk1VbnNpZ25lZFR4LFxuICBBZGRyZXNzLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIFR4LCBUeERhdGEsIEFERFJFU1NfU0VQQVJBVE9SLCBGbGFyZVRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc2lnbmF0dXJlIGlzIGVtcHR5IChmaXJzdCA5MCBoZXggY2hhcnMgYXJlIHplcm9zKVxuICogQHBhcmFtIHNpZ25hdHVyZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHlTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhc2lnbmF0dXJlICYmIHV0aWxzLnJlbW92ZUhleFByZWZpeChzaWduYXR1cmUpLnN0YXJ0c1dpdGgoJycucGFkU3RhcnQoOTAsICcwJykpO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3Igc2lnbmF0dXJlIHNsb3QgY2hlY2tpbmdcbiAqL1xuaW50ZXJmYWNlIENoZWNrU2lnbmF0dXJlIHtcbiAgKHNpZ25hdHVyZTogc3RyaW5nLCBhZGRyZXNzSGV4OiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlbXB0eSBzaWduYXR1cmUgaGFzIGFuIGVtYmVkZGVkIGFkZHJlc3MgKG5vbi16ZXJvIGJ5dGVzIGFmdGVyIHBvc2l0aW9uIDkwKVxuICogQHBhcmFtIHNpZ25hdHVyZSBIZXggc3RyaW5nIG9mIHRoZSBzaWduYXR1cmVcbiAqL1xuZnVuY3Rpb24gaGFzRW1iZWRkZWRBZGRyZXNzKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghaXNFbXB0eVNpZ25hdHVyZShzaWduYXR1cmUpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuU2lnID0gdXRpbHMucmVtb3ZlSGV4UHJlZml4KHNpZ25hdHVyZSk7XG4gIGlmIChjbGVhblNpZy5sZW5ndGggPCAxMzApIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZW1iZWRkZWRQYXJ0ID0gY2xlYW5TaWcuc3Vic3RyaW5nKDkwLCAxMzApO1xuICAvLyBDaGVjayBpZiBpdCdzIG5vdCBhbGwgemVyb3NcbiAgcmV0dXJuIGVtYmVkZGVkUGFydCAhPT0gJzAnLnJlcGVhdCg0MCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBzaWduYXR1cmUgc2xvdCBtYXRjaGVzIGEgZ2l2ZW4gYWRkcmVzcy5cbiAqIElmIHNpZ25hdHVyZXMgaGF2ZSBlbWJlZGRlZCBhZGRyZXNzZXMsIGl0IG1hdGNoZXMgYnkgYWRkcmVzcy5cbiAqIE90aGVyd2lzZSwgaXQganVzdCBmaW5kcyBlbXB0eSBzbG90cy5cbiAqIEBwYXJhbSBzaWduYXR1cmVzIEFycmF5IG9mIHNpZ25hdHVyZSBoZXggc3RyaW5nc1xuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdG9yU2lnbmF0dXJlKHNpZ25hdHVyZXM6IHN0cmluZ1tdKTogQ2hlY2tTaWduYXR1cmUge1xuICAvLyBDaGVjayBpZiBhbnkgZW1wdHkgc2lnbmF0dXJlIGhhcyBhbiBlbWJlZGRlZCBhZGRyZXNzXG4gIGNvbnN0IGhhc0VtYmVkZGVkQWRkcmVzc2VzID0gc2lnbmF0dXJlcy5zb21lKChzaWcpID0+IGlzRW1wdHlTaWduYXR1cmUoc2lnKSAmJiBoYXNFbWJlZGRlZEFkZHJlc3Moc2lnKSk7XG5cbiAgaWYgKGhhc0VtYmVkZGVkQWRkcmVzc2VzKSB7XG4gICAgLy8gTG9vayBmb3IgYWRkcmVzcyBlbWJlZGRlZCBpbiB0aGUgZW1wdHkgc2lnbmF0dXJlIChhZnRlciBwb3NpdGlvbiA5MClcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNpZzogc3RyaW5nLCBhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghaXNFbXB0eVNpZ25hdHVyZShzaWcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsZWFuU2lnID0gdXRpbHMucmVtb3ZlSGV4UHJlZml4KHNpZyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGVkQWRkciA9IGNsZWFuU2lnLnN1YnN0cmluZyg5MCwgMTMwKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZW1iZWRkZWRBZGRyID09PSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIExvb2sgZm9yIGFueSBlbXB0eSBzbG90IChubyBlbWJlZGRlZCBhZGRyZXNzZXMpXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzaWc6IHN0cmluZywgYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaXNFbXB0eVNpZ25hdHVyZShzaWcpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9mbGFyZVRyYW5zYWN0aW9uOiBUeDtcbiAgcHVibGljIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHB1YmxpYyBfbmV0d29yazogRmxhcmVOZXR3b3JrO1xuICBwdWJsaWMgX25ldHdvcmtJRDogbnVtYmVyO1xuICBwdWJsaWMgX2Fzc2V0SWQ6IHN0cmluZztcbiAgcHVibGljIF9ibG9ja2NoYWluSUQ6IHN0cmluZztcbiAgcHVibGljIF9ub2RlSUQ6IHN0cmluZztcbiAgcHVibGljIF9zdGFydFRpbWU6IGJpZ2ludDtcbiAgcHVibGljIF9lbmRUaW1lOiBiaWdpbnQ7XG4gIHB1YmxpYyBfc3Rha2VBbW91bnQ6IGJpZ2ludDtcbiAgcHVibGljIF90aHJlc2hvbGQgPSAyO1xuICBwdWJsaWMgX2xvY2t0aW1lID0gQmlnSW50KDApO1xuICBwdWJsaWMgX2Zyb21BZGRyZXNzZXM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICBwdWJsaWMgX3RvOiBVaW50OEFycmF5W10gPSBbXTtcbiAgcHVibGljIF9yZXdhcmRBZGRyZXNzZXM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICBwdWJsaWMgX3V0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW107IC8vIERlZmluZSBwcm9wZXIgdHlwZSBiYXNlZCBvbiBGbGFyZSdzIFVUWE8gc3RydWN0dXJlXG4gIHB1YmxpYyBfZmVlOiBQYXJ0aWFsPFRyYW5zYWN0aW9uRmVlPiA9IHt9O1xuICAvLyBTdG9yZSBvcmlnaW5hbCByYXcgc2lnbmVkIGJ5dGVzIHRvIHByZXNlcnZlIGV4YWN0IGZvcm1hdCB3aGVuIHJlLXNlcmlhbGl6aW5nXG4gIHB1YmxpYyBfcmF3U2lnbmVkQnl0ZXM6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX25ldHdvcmsgPSBjb2luQ29uZmlnLm5ldHdvcmsgYXMgRmxhcmVOZXR3b3JrO1xuICAgIC8vIERlY29kZSBjYjU4LWVuY29kZWQgYXNzZXQgSUQgdG8gaGV4IGZvciB1c2UgaW4gdHJhbnNhY3Rpb24gc2VyaWFsaXphdGlvblxuICAgIHRoaXMuX2Fzc2V0SWQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMuX25ldHdvcmsuYXNzZXRJZCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHRoaXMuX2Jsb2NrY2hhaW5JRCA9IHRoaXMuX25ldHdvcmsuYmxvY2tjaGFpbklEO1xuICAgIHRoaXMuX25ldHdvcmtJRCA9IHRoaXMuX25ldHdvcmsubmV0d29ya0lEO1xuICB9XG5cbiAgZ2V0IHNpZ25hdHVyZSgpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWRlbnRpYWxzWzBdLmdldFNpZ25hdHVyZXMoKS5maWx0ZXIoKHMpID0+ICFpc0VtcHR5U2lnbmF0dXJlKHMpKTtcbiAgfVxuXG4gIGdldCBjcmVkZW50aWFscygpOiBDcmVkZW50aWFsW10ge1xuICAgIHJldHVybiAodGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4KT8uY3JlZGVudGlhbHM7XG4gIH1cblxuICBnZXQgaGFzQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNyZWRlbnRpYWxzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbih7IGtleSB9OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzaWduKGtleVBhaXI6IEtleVBhaXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldFByaXZhdGVLZXkoKSBhcyBVaW50OEFycmF5O1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZmxhcmVUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbiB0byBzaWduJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNDcmVkZW50aWFscykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSBjcmVkZW50aWFscyB0byBzaWduJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgRVZNVW5zaWduZWRUeDtcbiAgICBjb25zdCB1bnNpZ25lZEJ5dGVzID0gdW5zaWduZWRUeC50b0J5dGVzKCk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gc2VjcDI1NmsxLmdldFB1YmxpY0tleShwcnYpO1xuXG4gICAgLy8gRGVyaXZlIGJvdGggRVZNIGFuZCBQLWNoYWluIGFkZHJlc3NlcyBmcm9tIHRoZSBwdWJsaWMga2V5XG4gICAgY29uc3QgZXZtQWRkcmVzc0hleCA9IG5ldyBBZGRyZXNzKHNlY3AyNTZrMS5wdWJsaWNLZXlUb0V0aEFkZHJlc3MocHVibGljS2V5KSkudG9IZXgoKTtcblxuICAgIC8vIFAtY2hhaW4gYWRkcmVzcyBkZXJpdmF0aW9uOiByaXBlbWQxNjAoc2hhMjU2KHB1YmxpY0tleSkpXG4gICAgY29uc3Qgc2hhMjU2SGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShwdWJsaWNLZXkpKS5kaWdlc3QoKTtcbiAgICBjb25zdCBwQ2hhaW5BZGRyZXNzQnVmZmVyID0gY3JlYXRlSGFzaCgncmlwZW1kMTYwJykudXBkYXRlKHNoYTI1Nkhhc2gpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHBDaGFpbkFkZHJlc3NIZXggPSBwQ2hhaW5BZGRyZXNzQnVmZmVyLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXAgPSB1bnNpZ25lZFR4LmdldEFkZHJlc3NlcygpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGJvdGggRVZNIGFuZCBQLWNoYWluIGFkZHJlc3MgZm9ybWF0c1xuICAgIGNvbnN0IGhhc01hdGNoaW5nQWRkcmVzcyA9IGFkZHJlc3NNYXAuc29tZSgoYWRkcikgPT4ge1xuICAgICAgY29uc3QgYWRkckhleCA9IEJ1ZmZlci5mcm9tKGFkZHIpLnRvU3RyaW5nKCdoZXgnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYWRkckhleCA9PT0gdXRpbHMucmVtb3ZlSGV4UHJlZml4KGV2bUFkZHJlc3NIZXgpLnRvTG93ZXJDYXNlKCkgfHwgYWRkckhleCA9PT0gcENoYWluQWRkcmVzc0hleC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2VjcDI1NmsxLnNpZ24odW5zaWduZWRCeXRlcywgcHJ2KTtcbiAgICBsZXQgc2lnbmF0dXJlU2V0ID0gZmFsc2U7XG5cbiAgICBpZiAoaGFzTWF0Y2hpbmdBZGRyZXNzKSB7XG4gICAgICAvLyBVc2UgYWRkcmVzcy1iYXNlZCBzbG90IG1hdGNoaW5nIChsaWtlIEFWQVgtUClcbiAgICAgIGxldCBjaGVja1NpZ246IENoZWNrU2lnbmF0dXJlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICBmb3IgKGNvbnN0IGNyZWRlbnRpYWwgb2YgdW5zaWduZWRUeC5jcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gY3JlZGVudGlhbC5nZXRTaWduYXR1cmVzKCk7XG4gICAgICAgIGlmIChjaGVja1NpZ24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNoZWNrU2lnbiA9IGdlbmVyYXRlU2VsZWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBzbG90IHRoYXQgbWF0Y2hlcyB0aGlzIGFkZHJlc3NcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgc2lnID0gc2lnbmF0dXJlc1tpXTtcbiAgICAgICAgICAvLyBUcnkgbWF0Y2hpbmcgd2l0aCBQLWNoYWluIGFkZHJlc3MgZmlyc3QsIHRoZW4gRVZNIGFkZHJlc3NcbiAgICAgICAgICBpZiAoY2hlY2tTaWduKHNpZywgcENoYWluQWRkcmVzc0hleCkgfHwgY2hlY2tTaWduKHNpZywgdXRpbHMucmVtb3ZlSGV4UHJlZml4KGV2bUFkZHJlc3NIZXgpLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjcmVkZW50aWFsLnNldFNpZ25hdHVyZShpLCBzaWduYXR1cmUpO1xuICAgICAgICAgICAgc2lnbmF0dXJlU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIENsZWFyIHJhdyBzaWduZWQgYnl0ZXMgc2luY2Ugd2UndmUgbW9kaWZpZWQgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICB0aGlzLl9yYXdTaWduZWRCeXRlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaWduYXR1cmVTZXQpIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBJZiBhZGRyZXNzLWJhc2VkIG1hdGNoaW5nIGRpZG4ndCB3b3JrIChlLmcuLCBJbXBvcnRJbkMgbG9hZGVkIGZyb20gdW5zaWduZWQgdHhcbiAgICAvLyB3aGVyZSBQLWNoYWluIGFkZHJlc3NlcyBhcmVuJ3QgaW4gYWRkcmVzc01hcHMpLCB0cnkgdG8gc2lnbiB0aGUgZmlyc3QgZW1wdHkgc2xvdC5cbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBlbXB0eSBjcmVkZW50aWFscyBidXQgc2lnbmVyIGFkZHJlc3MgaXNuJ3QgaW4gdGhlIG1hcC5cbiAgICBpZiAoIXNpZ25hdHVyZVNldCkge1xuICAgICAgZm9yIChjb25zdCBjcmVkZW50aWFsIG9mIHVuc2lnbmVkVHguY3JlZGVudGlhbHMpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGNyZWRlbnRpYWwuZ2V0U2lnbmF0dXJlcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpZ25hdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoaXNFbXB0eVNpZ25hdHVyZShzaWduYXR1cmVzW2ldKSkge1xuICAgICAgICAgICAgY3JlZGVudGlhbC5zZXRTaWduYXR1cmUoaSwgc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIHNpZ25hdHVyZVNldCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9yYXdTaWduZWRCeXRlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lnbmF0dXJlU2V0KSBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNpZ25hdHVyZVNldCkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTm8gbWF0Y2hpbmcgc2lnbmF0dXJlIHNsb3QgZm91bmQgZm9yIHRoaXMgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fZmxhcmVUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbiBkYXRhJyk7XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmUgdGhlIG9yaWdpbmFsIHJhdyBzaWduZWQgYnl0ZXMsIHVzZSB0aGVtIGRpcmVjdGx5IHRvIHByZXNlcnZlIGV4YWN0IGZvcm1hdFxuICAgIGlmICh0aGlzLl9yYXdTaWduZWRCeXRlcykge1xuICAgICAgcmV0dXJuIEZsYXJlVXRpbHMuYnVmZmVyVG9IZXgodGhpcy5fcmF3U2lnbmVkQnl0ZXMpO1xuICAgIH1cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gdGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4O1xuICAgIGNvbnN0IHNpZ25lZFR4Qnl0ZXMgPSB1bnNpZ25lZFR4LmdldFNpZ25lZFR4KCkudG9CeXRlcygpO1xuXG4gICAgLy8gQm90aCBQLWNoYWluIGFuZCBDLWNoYWluIHRyYW5zYWN0aW9ucyBpbmNsdWRlIGNoZWNrc3VtIChtYXRjaGluZyBhdmF4cCBiZWhhdmlvcilcbiAgICAvLyBhdmF4cCBQLWNoYWluOiB0cmFuc2FjdGlvbi50cyB1c2VzIGFkZENoZWNrc3VtKCkgZXhwbGljaXRseVxuICAgIC8vIGF2YXhwIEMtY2hhaW46IGRlcHJlY2F0ZWRUcmFuc2FjdGlvbi50cyB1c2VzIFR4LnRvU3RyaW5nSGV4KCkgd2hpY2ggaW50ZXJuYWxseSBhZGRzIGNoZWNrc3VtXG4gICAgY29uc3QgcmF3VHggPSBGbGFyZVV0aWxzLmJ1ZmZlclRvSGV4KHV0aWxzLmFkZENoZWNrc3VtKHNpZ25lZFR4Qnl0ZXMpKTtcbiAgICByZXR1cm4gcmF3VHg7XG4gIH1cblxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzLFxuICAgICAgZnJvbUFkZHJlc3NlczogdGhpcy5mcm9tQWRkcmVzc2VzLFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl90aHJlc2hvbGQsXG4gICAgICBsb2NrdGltZTogdGhpcy5fbG9ja3RpbWUudG9TdHJpbmcoKSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHNpZ25hdHVyZXM6IHRoaXMuc2lnbmF0dXJlLFxuICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRzLFxuICAgICAgY2hhbmdlT3V0cHV0czogdGhpcy5jaGFuZ2VPdXRwdXRzLFxuICAgICAgc291cmNlQ2hhaW46IHRoaXMuc291cmNlQ2hhaW4sXG4gICAgICBkZXN0aW5hdGlvbkNoYWluOiB0aGlzLmRlc3RpbmF0aW9uQ2hhaW4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBjaGFpbiBpZCBvciB1bmRlZmluZWQgaWYgaXQncyBub3QgYSBjcm9zcyBjaGFpbiB0cmFuc2Zlci5cbiAgICovXG4gIGdldCBzb3VyY2VDaGFpbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR4ID0gKHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUeCkuZ2V0VHgoKTtcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ6XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBDLWNoYWluIEltcG9ydDogc291cmNlIGlzIHRoZSBjaGFpbiB3ZSdyZSBpbXBvcnRpbmcgRlJPTSAoUC1jaGFpbilcbiAgICAgICAgICBjb25zdCBpbXBvcnRUeCA9IHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9ja2NoYWluSUR0b0FsaWFzKEJ1ZmZlci5mcm9tKGltcG9ydFR4LnNvdXJjZUNoYWluLnRvQnl0ZXMoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFAtY2hhaW4gSW1wb3J0OiBzb3VyY2UgaXMgdGhlIGNoYWluIHdlJ3JlIGltcG9ydGluZyBGUk9NIChDLWNoYWluKVxuICAgICAgICAgIGNvbnN0IHB2bUltcG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20ocHZtSW1wb3J0VHguc291cmNlQ2hhaW4udG9CeXRlcygpKSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluKSB7XG4gICAgICAgICAgLy8gQy1jaGFpbiBFeHBvcnQ6IHNvdXJjZSBpcyBDLWNoYWluICh0aGUgYmxvY2tjaGFpbiBJRClcbiAgICAgICAgICBjb25zdCBleHBvcnRUeCA9IHR4IGFzIGV2bVNlcmlhbC5FeHBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9ja2NoYWluSUR0b0FsaWFzKEJ1ZmZlci5mcm9tKGV4cG9ydFR4LmJsb2NrY2hhaW5JZC50b0J5dGVzKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQLWNoYWluIEV4cG9ydDogc291cmNlIGlzIFAtY2hhaW4gKHRoZSBibG9ja2NoYWluIElEIGZyb20gYmFzZVR4KVxuICAgICAgICAgIGNvbnN0IHB2bUV4cG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20ocHZtRXhwb3J0VHguYmFzZVR4LkJsb2NrY2hhaW5JZC50b0J5dGVzKCkpKTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc3RpbmF0aW9uIGNoYWluIGlkIG9yIHVuZGVmaW5lZCBpZiBpdCdzIG5vdCBhIGNyb3NzIGNoYWluIHRyYW5zZmVyLlxuICAgKi9cbiAgZ2V0IGRlc3RpbmF0aW9uQ2hhaW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0eCA9ICh0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHgpLmdldFR4KCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuSW1wb3J0OlxuICAgICAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluKSB7XG4gICAgICAgICAgLy8gQy1jaGFpbiBJbXBvcnQ6IGRlc3RpbmF0aW9uIGlzIEMtY2hhaW4gKHRoZSBibG9ja2NoYWluIElEKVxuICAgICAgICAgIGNvbnN0IGltcG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20oaW1wb3J0VHguYmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFAtY2hhaW4gSW1wb3J0OiBkZXN0aW5hdGlvbiBpcyBQLWNoYWluICh0aGUgYmxvY2tjaGFpbiBJRCBmcm9tIGJhc2VUeClcbiAgICAgICAgICBjb25zdCBwdm1JbXBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9ja2NoYWluSUR0b0FsaWFzKEJ1ZmZlci5mcm9tKHB2bUltcG9ydFR4LmJhc2VUeC5CbG9ja2NoYWluSWQudG9CeXRlcygpKSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluKSB7XG4gICAgICAgICAgLy8gQy1jaGFpbiBFeHBvcnQ6IGRlc3RpbmF0aW9uIGlzIFAtY2hhaW4gKHRoZSBkZXN0aW5hdGlvbiBjaGFpbilcbiAgICAgICAgICBjb25zdCBleHBvcnRUeCA9IHR4IGFzIGV2bVNlcmlhbC5FeHBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9ja2NoYWluSUR0b0FsaWFzKEJ1ZmZlci5mcm9tKGV4cG9ydFR4LmRlc3RpbmF0aW9uQ2hhaW4udG9CeXRlcygpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUC1jaGFpbiBFeHBvcnQ6IGRlc3RpbmF0aW9uIGlzIEMtY2hhaW4gKHRoZSBkZXN0aW5hdGlvbiBjaGFpbilcbiAgICAgICAgICBjb25zdCBwdm1FeHBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5FeHBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ibG9ja2NoYWluSUR0b0FsaWFzKEJ1ZmZlci5mcm9tKHB2bUV4cG9ydFR4LmRlc3RpbmF0aW9uLnRvQnl0ZXMoKSkpO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBibG9ja2NoYWluSWQgYnVmZmVyIHRvIHN0cmluZyBhbmQgcmV0dXJuIFAgb3IgQyBhbGlhcyBpZiBpdCBtYXRjaGVzIGFueSBvZiB0aG9zZSBjaGFpbnMuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBibG9ja2NoYWluSURCdWZmZXJcbiAgICogQHJldHVybiB7c3RyaW5nfSBibG9ja2NoYWluSUQgb3IgYWxpYXMgaWYgZXhpc3RzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBibG9ja2NoYWluSUR0b0FsaWFzKGJsb2NrY2hhaW5JREJ1ZmZlcjogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBibG9ja2NoYWluSWQgPSB1dGlscy5jYjU4RW5jb2RlKGJsb2NrY2hhaW5JREJ1ZmZlcik7XG4gICAgaWYgKGJsb2NrY2hhaW5JZCA9PT0gdGhpcy5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQpIHtcbiAgICAgIHJldHVybiAnQyc7XG4gICAgfVxuICAgIGlmIChibG9ja2NoYWluSWQgPT09IHRoaXMuX25ldHdvcmsuYmxvY2tjaGFpbklEKSB7XG4gICAgICByZXR1cm4gJ1AnO1xuICAgIH1cbiAgICByZXR1cm4gYmxvY2tjaGFpbklkO1xuICB9XG5cbiAgc2V0VHJhbnNhY3Rpb24odHg6IFR4KTogdm9pZCB7XG4gICAgdGhpcy5fZmxhcmVUcmFuc2FjdGlvbiA9IHR4IGFzIFVuc2lnbmVkVHg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIEZsYXJlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBGbGFyZSB0cmFuc2FjdGlvbiBvYmplY3RcbiAgICovXG4gIGdldEZsYXJlVHJhbnNhY3Rpb24oKTogVHgge1xuICAgIHJldHVybiB0aGlzLl9mbGFyZVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgaWYgKCFbVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yXS5pbmNsdWRlcyh0cmFuc2FjdGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyYW5zYWN0aW9uIHR5cGUgJHt0cmFuc2FjdGlvblR5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdXRpbHMuc2hhMjU2KCh0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHgpLnRvQnl0ZXMoKSk7XG4gIH1cblxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWZmZXJBcnJheSA9IHV0aWxzLnNoYTI1NigodGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4KS50b0J5dGVzKCkpO1xuICAgIHJldHVybiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKGJ1ZmZlckFycmF5KSk7XG4gIH1cblxuICBnZXQgZnJvbUFkZHJlc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb21BZGRyZXNzZXMubWFwKChhKSA9PiBGbGFyZVV0aWxzLmZvcm1hdCh0aGlzLl9uZXR3b3JrLmFsaWFzLCB0aGlzLl9uZXR3b3JrLmhycCwgYSkpO1xuICB9XG5cbiAgZ2V0IHJld2FyZEFkZHJlc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jld2FyZEFkZHJlc3Nlcy5tYXAoKGEpID0+IEZsYXJlVXRpbHMuZm9ybWF0KHRoaXMuX25ldHdvcmsuYWxpYXMsIHRoaXMuX25ldHdvcmsuaHJwLCBhKSk7XG4gIH1cblxuICBnZXQgZmVlKCk6IFRyYW5zYWN0aW9uRmVlIHtcbiAgICByZXR1cm4geyBmZWU6ICcwJywgLi4udGhpcy5fZmVlIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyBmb3IgQy1jaGFpbiAoRVZNIHRyYW5zYWN0aW9ucylcbiAgICovXG4gIGdldCBpc1RyYW5zYWN0aW9uRm9yQ0NoYWluKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHR4ID0gKHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUeCkuZ2V0VHgoKTtcbiAgICBjb25zdCB0eFR5cGUgPSAodHggYXMgeyBfdHlwZT86IHN0cmluZyB9KS5fdHlwZTtcbiAgICByZXR1cm4gdHhUeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Fdm1FeHBvcnRUeCB8fCB0eFR5cGUgPT09IEZsYXJlVHJhbnNhY3Rpb25UeXBlLkV2bUltcG9ydFR4O1xuICB9XG5cbiAgZ2V0IG91dHB1dHMoKTogRW50cnlbXSB7XG4gICAgY29uc3QgdHggPSAodGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4KS5nZXRUeCgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkltcG9ydDpcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2FjdGlvbkZvckNDaGFpbikge1xuICAgICAgICAgIC8vIEMtY2hhaW4gSW1wb3J0OiBvdXRwdXQgaXMgdG8gYSBDLWNoYWluIGFkZHJlc3NcbiAgICAgICAgICBjb25zdCBpbXBvcnRUeCA9IHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gaW1wb3J0VHguT3V0cy5tYXAoKG91dCkgPT4gKHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweCcgKyBCdWZmZXIuZnJvbShvdXQuYWRkcmVzcy50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICAgIHZhbHVlOiBvdXQuYW1vdW50LnZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUC1jaGFpbiBJbXBvcnQ6IG91dHB1dHMgYXJlIHRoZSBiYXNlVHgub3V0cHV0cyAoZGVzdGluYXRpb24gb24gUC1jaGFpbilcbiAgICAgICAgICBjb25zdCBwdm1JbXBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gcHZtSW1wb3J0VHguYmFzZVR4Lm91dHB1dHMubWFwKHV0aWxzLm1hcE91dHB1dFRvRW50cnkodGhpcy5fbmV0d29yaykpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkV4cG9ydDpcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2FjdGlvbkZvckNDaGFpbikge1xuICAgICAgICAgIC8vIEMtY2hhaW4gRXhwb3J0OiBleHBvcnRlZCBvdXRwdXRzIGdvIHRvIFAtY2hhaW5cbiAgICAgICAgICBjb25zdCBleHBvcnRUeCA9IHR4IGFzIGV2bVNlcmlhbC5FeHBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gZXhwb3J0VHguZXhwb3J0ZWRPdXRwdXRzLm1hcCh1dGlscy5tYXBPdXRwdXRUb0VudHJ5KHRoaXMuX25ldHdvcmspKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQLWNoYWluIEV4cG9ydDogZXhwb3J0ZWQgb3V0cHV0cyBnbyB0byBDLWNoYWluXG4gICAgICAgICAgY29uc3QgcHZtRXhwb3J0VHggPSB0eCBhcyBwdm1TZXJpYWwuRXhwb3J0VHg7XG4gICAgICAgICAgcmV0dXJuIHB2bUV4cG9ydFR4Lm91dHMubWFwKHV0aWxzLm1hcE91dHB1dFRvRW50cnkodGhpcy5fbmV0d29yaykpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICh0eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5ub2RlSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlOiAodHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3Iud2VpZ2h0LnRvSlNPTigpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBnZXQgY2hhbmdlT3V0cHV0cygpOiBFbnRyeVtdIHtcbiAgICBjb25zdCB0eCA9ICh0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHgpLmdldFR4KCk7XG5cbiAgICAvLyBDLWNoYWluIHRyYW5zYWN0aW9ucyBhbmQgSW1wb3J0IHRyYW5zYWN0aW9ucyBkb24ndCBoYXZlIGNoYW5nZSBvdXRwdXRzXG4gICAgaWYgKHRoaXMuaXNUcmFuc2FjdGlvbkZvckNDaGFpbiB8fCB0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICAvLyBQLWNoYWluIEV4cG9ydDogY2hhbmdlIG91dHB1dHMgYXJlIGluIGJhc2VUeC5vdXRwdXRzXG4gICAgICAgIHJldHVybiAodHggYXMgcHZtU2VyaWFsLkV4cG9ydFR4KS5iYXNlVHgub3V0cHV0cy5tYXAodXRpbHMubWFwT3V0cHV0VG9FbnRyeSh0aGlzLl9uZXR3b3JrKSk7XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yOlxuICAgICAgICByZXR1cm4gKHR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KS5iYXNlVHgub3V0cHV0cy5tYXAodXRpbHMubWFwT3V0cHV0VG9FbnRyeSh0aGlzLl9uZXR3b3JrKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBnZXQgaW5wdXRzKCk6IEVudHJ5W10ge1xuICAgIGNvbnN0IHR4ID0gKHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUeCkuZ2V0VHgoKTtcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ6XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBDLWNoYWluIEltcG9ydDogaW5wdXRzIGNvbWUgZnJvbSBQLWNoYWluIChpbXBvcnRlZElucHV0cylcbiAgICAgICAgICBjb25zdCBpbXBvcnRUeCA9IHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gaW1wb3J0VHguaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgICAgIGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKGlucHV0LnV0eG9JRC50eElELnRvQnl0ZXMoKSkpICsgJzonICsgaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLFxuICAgICAgICAgICAgYWRkcmVzczogdGhpcy5mcm9tQWRkcmVzc2VzLnNvcnQoKS5qb2luKEFERFJFU1NfU0VQQVJBVE9SKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQLWNoYWluIEltcG9ydDogaW5wdXRzIGFyZSBpbnMgKGltcG9ydGVkIGZyb20gQy1jaGFpbilcbiAgICAgICAgICBjb25zdCBwdm1JbXBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gcHZtSW1wb3J0VHguaW5zLm1hcCgoaW5wdXQpID0+ICh7XG4gICAgICAgICAgICBpZDogdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbShpbnB1dC51dHhvSUQudHhJRC50b0J5dGVzKCkpKSArICc6JyArIGlucHV0LnV0eG9JRC5vdXRwdXRJZHgudmFsdWUoKSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuZnJvbUFkZHJlc3Nlcy5zb3J0KCkuam9pbihBRERSRVNTX1NFUEFSQVRPUiksXG4gICAgICAgICAgICB2YWx1ZTogaW5wdXQuYW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluKSB7XG4gICAgICAgICAgLy8gQy1jaGFpbiBFeHBvcnQ6IGlucHV0cyBhcmUgZnJvbSBDLWNoYWluIChFVk0gaW5wdXRzKVxuICAgICAgICAgIGNvbnN0IGV4cG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiBleHBvcnRUeC5pbnMubWFwKChldm1JbnB1dCkgPT4gKHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcweCcgKyBCdWZmZXIuZnJvbShldm1JbnB1dC5hZGRyZXNzLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgdmFsdWU6IGV2bUlucHV0LmFtb3VudC52YWx1ZSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBub25jZTogTnVtYmVyKGV2bUlucHV0Lm5vbmNlLnZhbHVlKCkpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQLWNoYWluIEV4cG9ydDogaW5wdXRzIGFyZSBmcm9tIGJhc2VUeC5pbnB1dHNcbiAgICAgICAgICBjb25zdCBwdm1FeHBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5FeHBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gcHZtRXhwb3J0VHguYmFzZVR4LmlucHV0cy5tYXAoKGlucHV0KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQudXR4b0lELnR4SUQudG9CeXRlcygpKSkgKyAnOicgKyBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCksXG4gICAgICAgICAgICBhZGRyZXNzOiB0aGlzLmZyb21BZGRyZXNzZXMuc29ydCgpLmpvaW4oQUREUkVTU19TRVBBUkFUT1IpLFxuICAgICAgICAgICAgdmFsdWU6IGlucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgYmFzZVR4ID0gdHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gICAgICAgIGlmIChiYXNlVHguYmFzZVR4Py5pbnB1dHMpIHtcbiAgICAgICAgICByZXR1cm4gYmFzZVR4LmJhc2VUeC5pbnB1dHMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgICAgIGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKGlucHV0LnV0eG9JRC50eElELnRvQnl0ZXMoKSkpICsgJzonICsgaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLFxuICAgICAgICAgICAgYWRkcmVzczogdGhpcy5mcm9tQWRkcmVzc2VzLnNvcnQoKS5qb2luKEFERFJFU1NfU0VQQVJBVE9SKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHR4SnNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdpbnB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ3R5cGUnXTtcblxuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IHR4SnNvbi5vdXRwdXRzLnJlZHVjZSgocCwgbikgPT4gcCArIEJpZ0ludChuLnZhbHVlKSwgQmlnSW50KDApKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGNoYW5nZUFtb3VudCA9IHR4SnNvbi5jaGFuZ2VPdXRwdXRzLnJlZHVjZSgocCwgbikgPT4gcCArIEJpZ0ludChuLnZhbHVlKSwgQmlnSW50KDApKS50b1N0cmluZygpO1xuXG4gICAgbGV0IHJld2FyZEFkZHJlc3NlcztcbiAgICBpZiAoW1RyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcl0uaW5jbHVkZXModHhKc29uLnR5cGUpKSB7XG4gICAgICByZXdhcmRBZGRyZXNzZXMgPSB0aGlzLnJld2FyZEFkZHJlc3NlcztcbiAgICAgIGRpc3BsYXlPcmRlci5zcGxpY2UoNiwgMCwgJ3Jld2FyZEFkZHJlc3NlcycpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgaW5wdXRzOiB0eEpzb24uaW5wdXRzLFxuICAgICAgb3V0cHV0czogdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhZGRyZXNzOiBvLmFkZHJlc3MsIGFtb3VudDogby52YWx1ZSB9KSksXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiB0eEpzb24uY2hhbmdlT3V0cHV0cy5tYXAoKG8pID0+ICh7IGFkZHJlc3M6IG8uYWRkcmVzcywgYW1vdW50OiBvLnZhbHVlIH0pKSxcbiAgICAgIGNoYW5nZUFtb3VudCxcbiAgICAgIHJld2FyZEFkZHJlc3NlcyxcbiAgICAgIGZlZTogdGhpcy5mZWUsXG4gICAgICB0eXBlOiB0eEpzb24udHlwZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLG1EQVE4QjtBQUM5QixtREFTK0I7QUFDL0IsbUNBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxtQ0FBc0g7QUFFdEgsb0RBQTRCO0FBRTVCOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQWlCO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxlQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFTRDs7O0dBR0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQWlCO0lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsOEJBQThCO0lBQzlCLE9BQU8sWUFBWSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxVQUFvQjtJQUNyRCx1REFBdUQ7SUFDdkQsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsQ0FB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RSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDekYsWUFBWTtZQUNaLGVBQWU7WUFDZixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZjRCxrQ0F1Y0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFyZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVHJhbnNhY3Rpb25GZWUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG4gIENyZWRlbnRpYWwsXG4gIHB2bVNlcmlhbCxcbiAgZXZtU2VyaWFsLFxuICBVbnNpZ25lZFR4LFxuICBzZWNwMjU2azEsXG4gIEVWTVVuc2lnbmVkVHgsXG4gIEFkZHJlc3MsXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHgsIFR4RGF0YSwgQUREUkVTU19TRVBBUkFUT1IsIEZsYXJlVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzaWduYXR1cmUgaXMgZW1wdHkgKGZpcnN0IDkwIGhleCBjaGFycyBhcmUgemVyb3MpXG4gKiBAcGFyYW0gc2lnbmF0dXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNFbXB0eVNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gISFzaWduYXR1cmUgJiYgdXRpbHMucmVtb3ZlSGV4UHJlZml4KHNpZ25hdHVyZSkuc3RhcnRzV2l0aCgnJy5wYWRTdGFydCg5MCwgJzAnKSk7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBzaWduYXR1cmUgc2xvdCBjaGVja2luZ1xuICovXG5pbnRlcmZhY2UgQ2hlY2tTaWduYXR1cmUge1xuICAoc2lnbmF0dXJlOiBzdHJpbmcsIGFkZHJlc3NIZXg6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGVtcHR5IHNpZ25hdHVyZSBoYXMgYW4gZW1iZWRkZWQgYWRkcmVzcyAobm9uLXplcm8gYnl0ZXMgYWZ0ZXIgcG9zaXRpb24gOTApXG4gKiBAcGFyYW0gc2lnbmF0dXJlIEhleCBzdHJpbmcgb2YgdGhlIHNpZ25hdHVyZVxuICovXG5mdW5jdGlvbiBoYXNFbWJlZGRlZEFkZHJlc3Moc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFpc0VtcHR5U2lnbmF0dXJlKHNpZ25hdHVyZSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2xlYW5TaWcgPSB1dGlscy5yZW1vdmVIZXhQcmVmaXgoc2lnbmF0dXJlKTtcbiAgaWYgKGNsZWFuU2lnLmxlbmd0aCA8IDEzMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBlbWJlZGRlZFBhcnQgPSBjbGVhblNpZy5zdWJzdHJpbmcoOTAsIDEzMCk7XG4gIC8vIENoZWNrIGlmIGl0J3Mgbm90IGFsbCB6ZXJvc1xuICByZXR1cm4gZW1iZWRkZWRQYXJ0ICE9PSAnMCcucmVwZWF0KDQwKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHNpZ25hdHVyZSBzbG90IG1hdGNoZXMgYSBnaXZlbiBhZGRyZXNzLlxuICogSWYgc2lnbmF0dXJlcyBoYXZlIGVtYmVkZGVkIGFkZHJlc3NlcywgaXQgbWF0Y2hlcyBieSBhZGRyZXNzLlxuICogT3RoZXJ3aXNlLCBpdCBqdXN0IGZpbmRzIGVtcHR5IHNsb3RzLlxuICogQHBhcmFtIHNpZ25hdHVyZXMgQXJyYXkgb2Ygc2lnbmF0dXJlIGhleCBzdHJpbmdzXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlU2VsZWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlczogc3RyaW5nW10pOiBDaGVja1NpZ25hdHVyZSB7XG4gIC8vIENoZWNrIGlmIGFueSBlbXB0eSBzaWduYXR1cmUgaGFzIGFuIGVtYmVkZGVkIGFkZHJlc3NcbiAgY29uc3QgaGFzRW1iZWRkZWRBZGRyZXNzZXMgPSBzaWduYXR1cmVzLnNvbWUoKHNpZykgPT4gaXNFbXB0eVNpZ25hdHVyZShzaWcpICYmIGhhc0VtYmVkZGVkQWRkcmVzcyhzaWcpKTtcblxuICBpZiAoaGFzRW1iZWRkZWRBZGRyZXNzZXMpIHtcbiAgICAvLyBMb29rIGZvciBhZGRyZXNzIGVtYmVkZGVkIGluIHRoZSBlbXB0eSBzaWduYXR1cmUgKGFmdGVyIHBvc2l0aW9uIDkwKVxuICAgIHJldHVybiBmdW5jdGlvbiAoc2lnOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpc0VtcHR5U2lnbmF0dXJlKHNpZykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xlYW5TaWcgPSB1dGlscy5yZW1vdmVIZXhQcmVmaXgoc2lnKTtcbiAgICAgICAgY29uc3QgZW1iZWRkZWRBZGRyID0gY2xlYW5TaWcuc3Vic3RyaW5nKDkwLCAxMzApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBlbWJlZGRlZEFkZHIgPT09IGFkZHJlc3MudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gTG9vayBmb3IgYW55IGVtcHR5IHNsb3QgKG5vIGVtYmVkZGVkIGFkZHJlc3NlcylcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNpZzogc3RyaW5nLCBhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBpc0VtcHR5U2lnbmF0dXJlKHNpZyk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2ZsYXJlVHJhbnNhY3Rpb246IFR4O1xuICBwdWJsaWMgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHVibGljIF9uZXR3b3JrOiBGbGFyZU5ldHdvcms7XG4gIHB1YmxpYyBfbmV0d29ya0lEOiBudW1iZXI7XG4gIHB1YmxpYyBfYXNzZXRJZDogc3RyaW5nO1xuICBwdWJsaWMgX2Jsb2NrY2hhaW5JRDogc3RyaW5nO1xuICBwdWJsaWMgX25vZGVJRDogc3RyaW5nO1xuICBwdWJsaWMgX3N0YXJ0VGltZTogYmlnaW50O1xuICBwdWJsaWMgX2VuZFRpbWU6IGJpZ2ludDtcbiAgcHVibGljIF9zdGFrZUFtb3VudDogYmlnaW50O1xuICBwdWJsaWMgX3RocmVzaG9sZCA9IDI7XG4gIHB1YmxpYyBfbG9ja3RpbWUgPSBCaWdJbnQoMCk7XG4gIHB1YmxpYyBfZnJvbUFkZHJlc3NlczogVWludDhBcnJheVtdID0gW107XG4gIHB1YmxpYyBfdG86IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICBwdWJsaWMgX3Jld2FyZEFkZHJlc3NlczogVWludDhBcnJheVtdID0gW107XG4gIHB1YmxpYyBfdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXTsgLy8gRGVmaW5lIHByb3BlciB0eXBlIGJhc2VkIG9uIEZsYXJlJ3MgVVRYTyBzdHJ1Y3R1cmVcbiAgcHVibGljIF9mZWU6IFBhcnRpYWw8VHJhbnNhY3Rpb25GZWU+ID0ge307XG4gIC8vIFN0b3JlIG9yaWdpbmFsIHJhdyBzaWduZWQgYnl0ZXMgdG8gcHJlc2VydmUgZXhhY3QgZm9ybWF0IHdoZW4gcmUtc2VyaWFsaXppbmdcbiAgcHVibGljIF9yYXdTaWduZWRCeXRlczogQnVmZmVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbmV0d29yayA9IGNvaW5Db25maWcubmV0d29yayBhcyBGbGFyZU5ldHdvcms7XG4gICAgLy8gRGVjb2RlIGNiNTgtZW5jb2RlZCBhc3NldCBJRCB0byBoZXggZm9yIHVzZSBpbiB0cmFuc2FjdGlvbiBzZXJpYWxpemF0aW9uXG4gICAgdGhpcy5fYXNzZXRJZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy5fbmV0d29yay5hc3NldElkKS50b1N0cmluZygnaGV4Jyk7XG4gICAgdGhpcy5fYmxvY2tjaGFpbklEID0gdGhpcy5fbmV0d29yay5ibG9ja2NoYWluSUQ7XG4gICAgdGhpcy5fbmV0d29ya0lEID0gdGhpcy5fbmV0d29yay5uZXR3b3JrSUQ7XG4gIH1cblxuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuaGFzQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlZGVudGlhbHNbMF0uZ2V0U2lnbmF0dXJlcygpLmZpbHRlcigocykgPT4gIWlzRW1wdHlTaWduYXR1cmUocykpO1xuICB9XG5cbiAgZ2V0IGNyZWRlbnRpYWxzKCk6IENyZWRlbnRpYWxbXSB7XG4gICAgcmV0dXJuICh0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHgpPy5jcmVkZW50aWFscztcbiAgfVxuXG4gIGdldCBoYXNDcmVkZW50aWFscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY3JlZGVudGlhbHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKHsga2V5IH06IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0UHJpdmF0ZUtleSgpIGFzIFVpbnQ4QXJyYXk7XG4gICAgaWYgKCFwcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9mbGFyZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2VtcHR5IHRyYW5zYWN0aW9uIHRvIHNpZ24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2VtcHR5IGNyZWRlbnRpYWxzIHRvIHNpZ24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gdGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBFVk1VbnNpZ25lZFR4O1xuICAgIGNvbnN0IHVuc2lnbmVkQnl0ZXMgPSB1bnNpZ25lZFR4LnRvQnl0ZXMoKTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBzZWNwMjU2azEuZ2V0UHVibGljS2V5KHBydik7XG5cbiAgICAvLyBEZXJpdmUgYm90aCBFVk0gYW5kIFAtY2hhaW4gYWRkcmVzc2VzIGZyb20gdGhlIHB1YmxpYyBrZXlcbiAgICBjb25zdCBldm1BZGRyZXNzSGV4ID0gbmV3IEFkZHJlc3Moc2VjcDI1NmsxLnB1YmxpY0tleVRvRXRoQWRkcmVzcyhwdWJsaWNLZXkpKS50b0hleCgpO1xuXG4gICAgLy8gUC1jaGFpbiBhZGRyZXNzIGRlcml2YXRpb246IHJpcGVtZDE2MChzaGEyNTYocHVibGljS2V5KSlcbiAgICBjb25zdCBzaGEyNTZIYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHB1YmxpY0tleSkpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHBDaGFpbkFkZHJlc3NCdWZmZXIgPSBjcmVhdGVIYXNoKCdyaXBlbWQxNjAnKS51cGRhdGUoc2hhMjU2SGFzaCkuZGlnZXN0KCk7XG4gICAgY29uc3QgcENoYWluQWRkcmVzc0hleCA9IHBDaGFpbkFkZHJlc3NCdWZmZXIudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcCA9IHVuc2lnbmVkVHguZ2V0QWRkcmVzc2VzKCk7XG5cbiAgICAvLyBDaGVjayBmb3IgYm90aCBFVk0gYW5kIFAtY2hhaW4gYWRkcmVzcyBmb3JtYXRzXG4gICAgY29uc3QgaGFzTWF0Y2hpbmdBZGRyZXNzID0gYWRkcmVzc01hcC5zb21lKChhZGRyKSA9PiB7XG4gICAgICBjb25zdCBhZGRySGV4ID0gQnVmZmVyLmZyb20oYWRkcikudG9TdHJpbmcoJ2hleCcpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhZGRySGV4ID09PSB1dGlscy5yZW1vdmVIZXhQcmVmaXgoZXZtQWRkcmVzc0hleCkudG9Mb3dlckNhc2UoKSB8fCBhZGRySGV4ID09PSBwQ2hhaW5BZGRyZXNzSGV4LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbih1bnNpZ25lZEJ5dGVzLCBwcnYpO1xuICAgIGxldCBzaWduYXR1cmVTZXQgPSBmYWxzZTtcblxuICAgIGlmIChoYXNNYXRjaGluZ0FkZHJlc3MpIHtcbiAgICAgIC8vIFVzZSBhZGRyZXNzLWJhc2VkIHNsb3QgbWF0Y2hpbmcgKGxpa2UgQVZBWC1QKVxuICAgICAgbGV0IGNoZWNrU2lnbjogQ2hlY2tTaWduYXR1cmUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGZvciAoY29uc3QgY3JlZGVudGlhbCBvZiB1bnNpZ25lZFR4LmNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBjcmVkZW50aWFsLmdldFNpZ25hdHVyZXMoKTtcbiAgICAgICAgaWYgKGNoZWNrU2lnbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2hlY2tTaWduID0gZ2VuZXJhdGVTZWxlY3RvclNpZ25hdHVyZShzaWduYXR1cmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmQgdGhlIHNsb3QgdGhhdCBtYXRjaGVzIHRoaXMgYWRkcmVzc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpZ25hdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBzaWcgPSBzaWduYXR1cmVzW2ldO1xuICAgICAgICAgIC8vIFRyeSBtYXRjaGluZyB3aXRoIFAtY2hhaW4gYWRkcmVzcyBmaXJzdCwgdGhlbiBFVk0gYWRkcmVzc1xuICAgICAgICAgIGlmIChjaGVja1NpZ24oc2lnLCBwQ2hhaW5BZGRyZXNzSGV4KSB8fCBjaGVja1NpZ24oc2lnLCB1dGlscy5yZW1vdmVIZXhQcmVmaXgoZXZtQWRkcmVzc0hleCkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWwuc2V0U2lnbmF0dXJlKGksIHNpZ25hdHVyZSk7XG4gICAgICAgICAgICBzaWduYXR1cmVTZXQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gQ2xlYXIgcmF3IHNpZ25lZCBieXRlcyBzaW5jZSB3ZSd2ZSBtb2RpZmllZCB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgIHRoaXMuX3Jhd1NpZ25lZEJ5dGVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpZ25hdHVyZVNldCkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IElmIGFkZHJlc3MtYmFzZWQgbWF0Y2hpbmcgZGlkbid0IHdvcmsgKGUuZy4sIEltcG9ydEluQyBsb2FkZWQgZnJvbSB1bnNpZ25lZCB0eFxuICAgIC8vIHdoZXJlIFAtY2hhaW4gYWRkcmVzc2VzIGFyZW4ndCBpbiBhZGRyZXNzTWFwcyksIHRyeSB0byBzaWduIHRoZSBmaXJzdCBlbXB0eSBzbG90LlxuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGVtcHR5IGNyZWRlbnRpYWxzIGJ1dCBzaWduZXIgYWRkcmVzcyBpc24ndCBpbiB0aGUgbWFwLlxuICAgIGlmICghc2lnbmF0dXJlU2V0KSB7XG4gICAgICBmb3IgKGNvbnN0IGNyZWRlbnRpYWwgb2YgdW5zaWduZWRUeC5jcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gY3JlZGVudGlhbC5nZXRTaWduYXR1cmVzKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpc0VtcHR5U2lnbmF0dXJlKHNpZ25hdHVyZXNbaV0pKSB7XG4gICAgICAgICAgICBjcmVkZW50aWFsLnNldFNpZ25hdHVyZShpLCBzaWduYXR1cmUpO1xuICAgICAgICAgICAgc2lnbmF0dXJlU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3Jhd1NpZ25lZEJ5dGVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaWduYXR1cmVTZXQpIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc2lnbmF0dXJlU2V0KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdObyBtYXRjaGluZyBzaWduYXR1cmUgc2xvdCBmb3VuZCBmb3IgdGhpcyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9mbGFyZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uIGRhdGEnKTtcbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZSB0aGUgb3JpZ2luYWwgcmF3IHNpZ25lZCBieXRlcywgdXNlIHRoZW0gZGlyZWN0bHkgdG8gcHJlc2VydmUgZXhhY3QgZm9ybWF0XG4gICAgaWYgKHRoaXMuX3Jhd1NpZ25lZEJ5dGVzKSB7XG4gICAgICByZXR1cm4gRmxhcmVVdGlscy5idWZmZXJUb0hleCh0aGlzLl9yYXdTaWduZWRCeXRlcyk7XG4gICAgfVxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSB0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHg7XG4gICAgY29uc3Qgc2lnbmVkVHhCeXRlcyA9IHVuc2lnbmVkVHguZ2V0U2lnbmVkVHgoKS50b0J5dGVzKCk7XG5cbiAgICAvLyBCb3RoIFAtY2hhaW4gYW5kIEMtY2hhaW4gdHJhbnNhY3Rpb25zIGluY2x1ZGUgY2hlY2tzdW0gKG1hdGNoaW5nIGF2YXhwIGJlaGF2aW9yKVxuICAgIC8vIGF2YXhwIFAtY2hhaW46IHRyYW5zYWN0aW9uLnRzIHVzZXMgYWRkQ2hlY2tzdW0oKSBleHBsaWNpdGx5XG4gICAgLy8gYXZheHAgQy1jaGFpbjogZGVwcmVjYXRlZFRyYW5zYWN0aW9uLnRzIHVzZXMgVHgudG9TdHJpbmdIZXgoKSB3aGljaCBpbnRlcm5hbGx5IGFkZHMgY2hlY2tzdW1cbiAgICBjb25zdCByYXdUeCA9IEZsYXJlVXRpbHMuYnVmZmVyVG9IZXgodXRpbHMuYWRkQ2hlY2tzdW0oc2lnbmVkVHhCeXRlcykpO1xuICAgIHJldHVybiByYXdUeDtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fZmxhcmVUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbiBkYXRhJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGlucHV0czogdGhpcy5pbnB1dHMsXG4gICAgICBmcm9tQWRkcmVzc2VzOiB0aGlzLmZyb21BZGRyZXNzZXMsXG4gICAgICB0aHJlc2hvbGQ6IHRoaXMuX3RocmVzaG9sZCxcbiAgICAgIGxvY2t0aW1lOiB0aGlzLl9sb2NrdGltZS50b1N0cmluZygpLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgc2lnbmF0dXJlczogdGhpcy5zaWduYXR1cmUsXG4gICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiB0aGlzLmNoYW5nZU91dHB1dHMsXG4gICAgICBzb3VyY2VDaGFpbjogdGhpcy5zb3VyY2VDaGFpbixcbiAgICAgIGRlc3RpbmF0aW9uQ2hhaW46IHRoaXMuZGVzdGluYXRpb25DaGFpbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGNoYWluIGlkIG9yIHVuZGVmaW5lZCBpZiBpdCdzIG5vdCBhIGNyb3NzIGNoYWluIHRyYW5zZmVyLlxuICAgKi9cbiAgZ2V0IHNvdXJjZUNoYWluKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdHggPSAodGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4KS5nZXRUeCgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkltcG9ydDpcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2FjdGlvbkZvckNDaGFpbikge1xuICAgICAgICAgIC8vIEMtY2hhaW4gSW1wb3J0OiBzb3VyY2UgaXMgdGhlIGNoYWluIHdlJ3JlIGltcG9ydGluZyBGUk9NIChQLWNoYWluKVxuICAgICAgICAgIGNvbnN0IGltcG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20oaW1wb3J0VHguc291cmNlQ2hhaW4udG9CeXRlcygpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUC1jaGFpbiBJbXBvcnQ6IHNvdXJjZSBpcyB0aGUgY2hhaW4gd2UncmUgaW1wb3J0aW5nIEZST00gKEMtY2hhaW4pXG4gICAgICAgICAgY29uc3QgcHZtSW1wb3J0VHggPSB0eCBhcyBwdm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tjaGFpbklEdG9BbGlhcyhCdWZmZXIuZnJvbShwdm1JbXBvcnRUeC5zb3VyY2VDaGFpbi50b0J5dGVzKCkpKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQ6XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBDLWNoYWluIEV4cG9ydDogc291cmNlIGlzIEMtY2hhaW4gKHRoZSBibG9ja2NoYWluIElEKVxuICAgICAgICAgIGNvbnN0IGV4cG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20oZXhwb3J0VHguYmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFAtY2hhaW4gRXhwb3J0OiBzb3VyY2UgaXMgUC1jaGFpbiAodGhlIGJsb2NrY2hhaW4gSUQgZnJvbSBiYXNlVHgpXG4gICAgICAgICAgY29uc3QgcHZtRXhwb3J0VHggPSB0eCBhcyBwdm1TZXJpYWwuRXhwb3J0VHg7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tjaGFpbklEdG9BbGlhcyhCdWZmZXIuZnJvbShwdm1FeHBvcnRUeC5iYXNlVHguQmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkpO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzdGluYXRpb24gY2hhaW4gaWQgb3IgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IGEgY3Jvc3MgY2hhaW4gdHJhbnNmZXIuXG4gICAqL1xuICBnZXQgZGVzdGluYXRpb25DaGFpbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR4ID0gKHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUeCkuZ2V0VHgoKTtcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ6XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBDLWNoYWluIEltcG9ydDogZGVzdGluYXRpb24gaXMgQy1jaGFpbiAodGhlIGJsb2NrY2hhaW4gSUQpXG4gICAgICAgICAgY29uc3QgaW1wb3J0VHggPSB0eCBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tjaGFpbklEdG9BbGlhcyhCdWZmZXIuZnJvbShpbXBvcnRUeC5ibG9ja2NoYWluSWQudG9CeXRlcygpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUC1jaGFpbiBJbXBvcnQ6IGRlc3RpbmF0aW9uIGlzIFAtY2hhaW4gKHRoZSBibG9ja2NoYWluIElEIGZyb20gYmFzZVR4KVxuICAgICAgICAgIGNvbnN0IHB2bUltcG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20ocHZtSW1wb3J0VHguYmFzZVR4LkJsb2NrY2hhaW5JZC50b0J5dGVzKCkpKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQ6XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBDLWNoYWluIEV4cG9ydDogZGVzdGluYXRpb24gaXMgUC1jaGFpbiAodGhlIGRlc3RpbmF0aW9uIGNoYWluKVxuICAgICAgICAgIGNvbnN0IGV4cG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20oZXhwb3J0VHguZGVzdGluYXRpb25DaGFpbi50b0J5dGVzKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQLWNoYWluIEV4cG9ydDogZGVzdGluYXRpb24gaXMgQy1jaGFpbiAodGhlIGRlc3RpbmF0aW9uIGNoYWluKVxuICAgICAgICAgIGNvbnN0IHB2bUV4cG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrY2hhaW5JRHRvQWxpYXMoQnVmZmVyLmZyb20ocHZtRXhwb3J0VHguZGVzdGluYXRpb24udG9CeXRlcygpKSk7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIGJsb2NrY2hhaW5JZCBidWZmZXIgdG8gc3RyaW5nIGFuZCByZXR1cm4gUCBvciBDIGFsaWFzIGlmIGl0IG1hdGNoZXMgYW55IG9mIHRob3NlIGNoYWlucy5cbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJsb2NrY2hhaW5JREJ1ZmZlclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGJsb2NrY2hhaW5JRCBvciBhbGlhcyBpZiBleGlzdHMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJsb2NrY2hhaW5JRHRvQWxpYXMoYmxvY2tjaGFpbklEQnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJsb2NrY2hhaW5JZCA9IHV0aWxzLmNiNThFbmNvZGUoYmxvY2tjaGFpbklEQnVmZmVyKTtcbiAgICBpZiAoYmxvY2tjaGFpbklkID09PSB0aGlzLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCkge1xuICAgICAgcmV0dXJuICdDJztcbiAgICB9XG4gICAgaWYgKGJsb2NrY2hhaW5JZCA9PT0gdGhpcy5fbmV0d29yay5ibG9ja2NoYWluSUQpIHtcbiAgICAgIHJldHVybiAnUCc7XG4gICAgfVxuICAgIHJldHVybiBibG9ja2NoYWluSWQ7XG4gIH1cblxuICBzZXRUcmFuc2FjdGlvbih0eDogVHgpOiB2b2lkIHtcbiAgICB0aGlzLl9mbGFyZVRyYW5zYWN0aW9uID0gdHggYXMgVW5zaWduZWRUeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgRmxhcmUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMgVGhlIEZsYXJlIHRyYW5zYWN0aW9uIG9iamVjdFxuICAgKi9cbiAgZ2V0RmxhcmVUcmFuc2FjdGlvbigpOiBUeCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIVtUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JdLmluY2x1ZGVzKHRyYW5zYWN0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gdHlwZSAke3RyYW5zYWN0aW9uVHlwZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgIH1cbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiB1dGlscy5zaGEyNTYoKHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUeCkudG9CeXRlcygpKTtcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVuc2lnbmVkVHggPSB0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHg7XG4gICAgY29uc3QgdHhCeXRlcyA9IHVuc2lnbmVkVHguZ2V0U2lnbmVkVHgoKS50b0J5dGVzKCk7XG4gICAgY29uc3QgYnVmZmVyQXJyYXkgPSB1dGlscy5zaGEyNTYodHhCeXRlcyk7XG4gICAgcmV0dXJuIHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20oYnVmZmVyQXJyYXkpKTtcbiAgfVxuXG4gIGdldCBmcm9tQWRkcmVzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+IEZsYXJlVXRpbHMuZm9ybWF0KHRoaXMuX25ldHdvcmsuYWxpYXMsIHRoaXMuX25ldHdvcmsuaHJwLCBhKSk7XG4gIH1cblxuICBnZXQgcmV3YXJkQWRkcmVzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fcmV3YXJkQWRkcmVzc2VzLm1hcCgoYSkgPT4gRmxhcmVVdGlscy5mb3JtYXQodGhpcy5fbmV0d29yay5hbGlhcywgdGhpcy5fbmV0d29yay5ocnAsIGEpKTtcbiAgfVxuXG4gIGdldCBmZWUoKTogVHJhbnNhY3Rpb25GZWUge1xuICAgIHJldHVybiB7IGZlZTogJzAnLCAuLi50aGlzLl9mZWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHRyYW5zYWN0aW9uIGlzIGZvciBDLWNoYWluIChFVk0gdHJhbnNhY3Rpb25zKVxuICAgKi9cbiAgZ2V0IGlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdHggPSAodGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4KS5nZXRUeCgpO1xuICAgIGNvbnN0IHR4VHlwZSA9ICh0eCBhcyB7IF90eXBlPzogc3RyaW5nIH0pLl90eXBlO1xuICAgIHJldHVybiB0eFR5cGUgPT09IEZsYXJlVHJhbnNhY3Rpb25UeXBlLkV2bUV4cG9ydFR4IHx8IHR4VHlwZSA9PT0gRmxhcmVUcmFuc2FjdGlvblR5cGUuRXZtSW1wb3J0VHg7XG4gIH1cblxuICBnZXQgb3V0cHV0cygpOiBFbnRyeVtdIHtcbiAgICBjb25zdCB0eCA9ICh0aGlzLl9mbGFyZVRyYW5zYWN0aW9uIGFzIFVuc2lnbmVkVHgpLmdldFR4KCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuSW1wb3J0OlxuICAgICAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluKSB7XG4gICAgICAgICAgLy8gQy1jaGFpbiBJbXBvcnQ6IG91dHB1dCBpcyB0byBhIEMtY2hhaW4gYWRkcmVzc1xuICAgICAgICAgIGNvbnN0IGltcG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiBpbXBvcnRUeC5PdXRzLm1hcCgob3V0KSA9PiAoe1xuICAgICAgICAgICAgYWRkcmVzczogJzB4JyArIEJ1ZmZlci5mcm9tKG91dC5hZGRyZXNzLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgdmFsdWU6IG91dC5hbW91bnQudmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQLWNoYWluIEltcG9ydDogb3V0cHV0cyBhcmUgdGhlIGJhc2VUeC5vdXRwdXRzIChkZXN0aW5hdGlvbiBvbiBQLWNoYWluKVxuICAgICAgICAgIGNvbnN0IHB2bUltcG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiBwdm1JbXBvcnRUeC5iYXNlVHgub3V0cHV0cy5tYXAodXRpbHMubWFwT3V0cHV0VG9FbnRyeSh0aGlzLl9uZXR3b3JrKSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluKSB7XG4gICAgICAgICAgLy8gQy1jaGFpbiBFeHBvcnQ6IGV4cG9ydGVkIG91dHB1dHMgZ28gdG8gUC1jaGFpblxuICAgICAgICAgIGNvbnN0IGV4cG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiBleHBvcnRUeC5leHBvcnRlZE91dHB1dHMubWFwKHV0aWxzLm1hcE91dHB1dFRvRW50cnkodGhpcy5fbmV0d29yaykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFAtY2hhaW4gRXhwb3J0OiBleHBvcnRlZCBvdXRwdXRzIGdvIHRvIEMtY2hhaW5cbiAgICAgICAgICBjb25zdCBwdm1FeHBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5FeHBvcnRUeDtcbiAgICAgICAgICByZXR1cm4gcHZtRXhwb3J0VHgub3V0cy5tYXAodXRpbHMubWFwT3V0cHV0VG9FbnRyeSh0aGlzLl9uZXR3b3JrKSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3I6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogKHR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KS5zdWJuZXRWYWxpZGF0b3IudmFsaWRhdG9yLm5vZGVJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgdmFsdWU6ICh0eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci53ZWlnaHQudG9KU09OKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjaGFuZ2VPdXRwdXRzKCk6IEVudHJ5W10ge1xuICAgIGNvbnN0IHR4ID0gKHRoaXMuX2ZsYXJlVHJhbnNhY3Rpb24gYXMgVW5zaWduZWRUeCkuZ2V0VHgoKTtcblxuICAgIC8vIEMtY2hhaW4gdHJhbnNhY3Rpb25zIGFuZCBJbXBvcnQgdHJhbnNhY3Rpb25zIGRvbid0IGhhdmUgY2hhbmdlIG91dHB1dHNcbiAgICBpZiAodGhpcy5pc1RyYW5zYWN0aW9uRm9yQ0NoYWluIHx8IHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkltcG9ydCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQ6XG4gICAgICAgIC8vIFAtY2hhaW4gRXhwb3J0OiBjaGFuZ2Ugb3V0cHV0cyBhcmUgaW4gYmFzZVR4Lm91dHB1dHNcbiAgICAgICAgcmV0dXJuICh0eCBhcyBwdm1TZXJpYWwuRXhwb3J0VHgpLmJhc2VUeC5vdXRwdXRzLm1hcCh1dGlscy5tYXBPdXRwdXRUb0VudHJ5KHRoaXMuX25ldHdvcmspKTtcblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3I6XG4gICAgICAgIHJldHVybiAodHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLmJhc2VUeC5vdXRwdXRzLm1hcCh1dGlscy5tYXBPdXRwdXRUb0VudHJ5KHRoaXMuX25ldHdvcmspKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpbnB1dHMoKTogRW50cnlbXSB7XG4gICAgY29uc3QgdHggPSAodGhpcy5fZmxhcmVUcmFuc2FjdGlvbiBhcyBVbnNpZ25lZFR4KS5nZXRUeCgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkltcG9ydDpcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2FjdGlvbkZvckNDaGFpbikge1xuICAgICAgICAgIC8vIEMtY2hhaW4gSW1wb3J0OiBpbnB1dHMgY29tZSBmcm9tIFAtY2hhaW4gKGltcG9ydGVkSW5wdXRzKVxuICAgICAgICAgIGNvbnN0IGltcG9ydFR4ID0gdHggYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiBpbXBvcnRUeC5pbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQudXR4b0lELnR4SUQudG9CeXRlcygpKSkgKyAnOicgKyBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCksXG4gICAgICAgICAgICBhZGRyZXNzOiB0aGlzLmZyb21BZGRyZXNzZXMuc29ydCgpLmpvaW4oQUREUkVTU19TRVBBUkFUT1IpLFxuICAgICAgICAgICAgdmFsdWU6IGlucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFAtY2hhaW4gSW1wb3J0OiBpbnB1dHMgYXJlIGlucyAoaW1wb3J0ZWQgZnJvbSBDLWNoYWluKVxuICAgICAgICAgIGNvbnN0IHB2bUltcG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgICAgIHJldHVybiBwdm1JbXBvcnRUeC5pbnMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgICAgIGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKGlucHV0LnV0eG9JRC50eElELnRvQnl0ZXMoKSkpICsgJzonICsgaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLFxuICAgICAgICAgICAgYWRkcmVzczogdGhpcy5mcm9tQWRkcmVzc2VzLnNvcnQoKS5qb2luKEFERFJFU1NfU0VQQVJBVE9SKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQ6XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBDLWNoYWluIEV4cG9ydDogaW5wdXRzIGFyZSBmcm9tIEMtY2hhaW4gKEVWTSBpbnB1dHMpXG4gICAgICAgICAgY29uc3QgZXhwb3J0VHggPSB0eCBhcyBldm1TZXJpYWwuRXhwb3J0VHg7XG4gICAgICAgICAgcmV0dXJuIGV4cG9ydFR4Lmlucy5tYXAoKGV2bUlucHV0KSA9PiAoe1xuICAgICAgICAgICAgYWRkcmVzczogJzB4JyArIEJ1ZmZlci5mcm9tKGV2bUlucHV0LmFkZHJlc3MudG9CeXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgICB2YWx1ZTogZXZtSW5wdXQuYW1vdW50LnZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG5vbmNlOiBOdW1iZXIoZXZtSW5wdXQubm9uY2UudmFsdWUoKSksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFAtY2hhaW4gRXhwb3J0OiBpbnB1dHMgYXJlIGZyb20gYmFzZVR4LmlucHV0c1xuICAgICAgICAgIGNvbnN0IHB2bUV4cG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkV4cG9ydFR4O1xuICAgICAgICAgIHJldHVybiBwdm1FeHBvcnRUeC5iYXNlVHguaW5wdXRzLm1hcCgoaW5wdXQpID0+ICh7XG4gICAgICAgICAgICBpZDogdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbShpbnB1dC51dHhvSUQudHhJRC50b0J5dGVzKCkpKSArICc6JyArIGlucHV0LnV0eG9JRC5vdXRwdXRJZHgudmFsdWUoKSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuZnJvbUFkZHJlc3Nlcy5zb3J0KCkuam9pbihBRERSRVNTX1NFUEFSQVRPUiksXG4gICAgICAgICAgICB2YWx1ZTogaW5wdXQuYW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3I6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBiYXNlVHggPSB0eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgICAgICAgaWYgKGJhc2VUeC5iYXNlVHg/LmlucHV0cykge1xuICAgICAgICAgIHJldHVybiBiYXNlVHguYmFzZVR4LmlucHV0cy5tYXAoKGlucHV0KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQudXR4b0lELnR4SUQudG9CeXRlcygpKSkgKyAnOicgKyBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCksXG4gICAgICAgICAgICBhZGRyZXNzOiB0aGlzLmZyb21BZGRyZXNzZXMuc29ydCgpLmpvaW4oQUREUkVTU19TRVBBUkFUT1IpLFxuICAgICAgICAgICAgdmFsdWU6IGlucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgdHhKc29uID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ2lucHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAndHlwZSddO1xuXG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdHhKc29uLm91dHB1dHMucmVkdWNlKChwLCBuKSA9PiBwICsgQmlnSW50KG4udmFsdWUpLCBCaWdJbnQoMCkpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgY2hhbmdlQW1vdW50ID0gdHhKc29uLmNoYW5nZU91dHB1dHMucmVkdWNlKChwLCBuKSA9PiBwICsgQmlnSW50KG4udmFsdWUpLCBCaWdJbnQoMCkpLnRvU3RyaW5nKCk7XG5cbiAgICBsZXQgcmV3YXJkQWRkcmVzc2VzO1xuICAgIGlmIChbVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yXS5pbmNsdWRlcyh0eEpzb24udHlwZSkpIHtcbiAgICAgIHJld2FyZEFkZHJlc3NlcyA9IHRoaXMucmV3YXJkQWRkcmVzc2VzO1xuICAgICAgZGlzcGxheU9yZGVyLnNwbGljZSg2LCAwLCAncmV3YXJkQWRkcmVzc2VzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICBpbnB1dHM6IHR4SnNvbi5pbnB1dHMsXG4gICAgICBvdXRwdXRzOiB0eEpzb24ub3V0cHV0cy5tYXAoKG8pID0+ICh7IGFkZHJlc3M6IG8uYWRkcmVzcywgYW1vdW50OiBvLnZhbHVlIH0pKSxcbiAgICAgIG91dHB1dEFtb3VudCxcbiAgICAgIGNoYW5nZU91dHB1dHM6IHR4SnNvbi5jaGFuZ2VPdXRwdXRzLm1hcCgobykgPT4gKHsgYWRkcmVzczogby5hZGRyZXNzLCBhbW91bnQ6IG8udmFsdWUgfSkpLFxuICAgICAgY2hhbmdlQW1vdW50LFxuICAgICAgcmV3YXJkQWRkcmVzc2VzLFxuICAgICAgZmVlOiB0aGlzLmZlZSxcbiAgICAgIHR5cGU6IHR4SnNvbi50eXBlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -8,7 +8,7 @@ exports.EXPORT_IN_C = void 0;
|
|
|
8
8
|
// For round-trip tests to work, feeRate is calculated as: totalFee - fixedFee = -718250
|
|
9
9
|
// For build-from-scratch tests, the hex will differ as proper fees are now enforced.
|
|
10
10
|
exports.EXPORT_IN_C = {
|
|
11
|
-
txhash: '
|
|
11
|
+
txhash: '4AiWTT1uHFw6TDekeAGxcdrfgoaif9sjRG9J6wsmkVHH7fMkL',
|
|
12
12
|
unsignedHex: '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000128a05933dc76e4e6c25f35d5c9b2a58769700e760000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000090000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf0800000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f300000001000000090000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f54c610',
|
|
13
13
|
signedHex: '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000128a05933dc76e4e6c25f35d5c9b2a58769700e760000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000090000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf0800000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f300000001000000090000000133f126dee90108c473af9513ebd9eb1591a701b5dfc69041075b303b858fee0609ca9a60208b46f6836f0baf1a9fba740d97b65d45caae10470b5fa707eb45c900f9ed2052',
|
|
14
14
|
xPrivateKey: 'xprv9s21ZrQH143K2DW9jvDoAkVpRKi5V9XhZaVdoUcqoYPPQ9wRrLNT6VGgWBbRoSYB39Lak6kXgdTM9T3QokEi5n2JJ8EdggHLkZPX8eDiBu1',
|
|
@@ -36,4 +36,4 @@ exports.EXPORT_IN_C = {
|
|
|
36
36
|
fee: '1000000', // 1M nFLR as base feeRate, totalFee will be 2M (feeRate + fixedFee)
|
|
37
37
|
locktime: 0,
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5DLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2V4cG9ydEluQy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1RUFBdUU7QUFDdkUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSwrREFBK0Q7QUFDL0Qsd0ZBQXdGO0FBQ3hGLHFGQUFxRjtBQUN4RSxRQUFBLFdBQVcsR0FBRztJQUN6QixNQUFNLEVBQUUsbURBQW1EO0lBQzNELFdBQVcsRUFDVCxrc0JBQWtzQjtJQUNwc0IsU0FBUyxFQUNQLGtzQkFBa3NCO0lBQ3BzQixXQUFXLEVBQ1QsaUhBQWlIO0lBQ25ILFNBQVMsRUFBRTtRQUNULHNJQUFzSTtLQUN2STtJQUVELFVBQVUsRUFBRSxrRUFBa0U7SUFDOUUsU0FBUyxFQUFFLG9FQUFvRTtJQUMvRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWM7SUFDbEMsV0FBVyxFQUFFLDRDQUE0QztJQUN6RCxVQUFVLEVBQUU7UUFDVixpREFBaUQ7UUFDakQsaURBQWlEO1FBQ2pELGlEQUFpRDtLQUNsRDtJQUNELFdBQVcsRUFBRSxpREFBaUQ7SUFDOUQsYUFBYSxFQUFFO1FBQ2IsaURBQWlEO1FBQ2pELGlEQUFpRDtRQUNqRCxpREFBaUQ7S0FDbEQ7SUFDRCxhQUFhLEVBQUUsdUNBQXVDO0lBQ3RELEtBQUssRUFBRSxDQUFDO0lBQ1IsU0FBUyxFQUFFLENBQUM7SUFDWixHQUFHLEVBQUUsU0FBUyxFQUFFLG9FQUFvRTtJQUNwRixRQUFRLEVBQUUsQ0FBQztDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUZXN0IGRhdGEgZm9yIGJ1aWxkaW5nIGV4cG9ydCB0cmFuc2FjdGlvbnMgd2l0aCBtdWx0aXBsZSBQLWFkZHJlc3Nlc1xuLy8gTm90ZTogVGhpcyB0ZXN0IGRhdGEgd2FzIGNyZWF0ZWQgd2l0aCBsZWdhY3kgZmVlIGNhbGN1bGF0aW9uLlxuLy8gVGhlIGhleCBlbmNvZGVzIHRvdGFsRmVlID0gMjgxNzUwLCBidXQgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiB1c2VzOlxuLy8gdG90YWxGZWUgPSBmZWVSYXRlIChnYXMgZmVlKSArIGZpeGVkRmVlICgxMDAwMDAwIGltcG9ydCBmZWUpXG4vLyBGb3Igcm91bmQtdHJpcCB0ZXN0cyB0byB3b3JrLCBmZWVSYXRlIGlzIGNhbGN1bGF0ZWQgYXM6IHRvdGFsRmVlIC0gZml4ZWRGZWUgPSAtNzE4MjUwXG4vLyBGb3IgYnVpbGQtZnJvbS1zY3JhdGNoIHRlc3RzLCB0aGUgaGV4IHdpbGwgZGlmZmVyIGFzIHByb3BlciBmZWVzIGFyZSBub3cgZW5mb3JjZWQuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lOX0MgPSB7XG4gIHR4aGFzaDogJzRBaVdUVDF1SEZ3NlREZWtlQUd4Y2RyZmdvYWlmOXNqUkc5SjZ3c21rVkhIN2ZNa0wnLFxuICB1bnNpZ25lZEhleDpcbiAgICAnMHgwMDAwMDAwMDAwMDEwMDAwMDA3Mjc4ZGI1YzMwYmVkMDRjMDVjZTIwOTE3OTgxMjg1MGJiYjNmZTZkNDZkN2VlZjM3NDRkODE0YzBkYTU1NTI0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyOGEwNTkzM2RjNzZlNGU2YzI1ZjM1ZDVjOWIyYTU4NzY5NzAwZTc2MDAwMDAwMDAwMmZmM2QxNjU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwMDAwMDAwMDA5MDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDcwMDAwMDAwMDAyZmFmMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMxMmNiMzJlYWY5MjU1MzA2NGRiOThkMjcxYjU2Y2JhMDc5ZWM3OGY1YTZlMGMxYWJkMDEzMmY3MGVmYjc3ZTIyNzQ2MzdmZjMzNmEyOWE1N2MzODZkNThkMDlhOWFlNzdjZjFjZjA3YmYxYzlkZTQ0ZWJiMGM5ZjMwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOGY1NGM2MTAnLFxuICBzaWduZWRIZXg6XG4gICAgJzB4MDAwMDAwMDAwMDAxMDAwMDAwNzI3OGRiNWMzMGJlZDA0YzA1Y2UyMDkxNzk4MTI4NTBiYmIzZmU2ZDQ2ZDdlZWYzNzQ0ZDgxNGMwZGE1NTUyNDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjhhMDU5MzNkYzc2ZTRlNmMyNWYzNWQ1YzliMmE1ODc2OTcwMGU3NjAwMDAwMDAwMDJmZjNkMTY1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDAwMDAwMDAwOTAwMDAwMDAxNTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOTFlYWNhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDA3MDAwMDAwMDAwMmZhZjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMTJjYjMyZWFmOTI1NTMwNjRkYjk4ZDI3MWI1NmNiYTA3OWVjNzhmNWE2ZTBjMWFiZDAxMzJmNzBlZmI3N2UyMjc0NjM3ZmYzMzZhMjlhNTdjMzg2ZDU4ZDA5YTlhZTc3Y2YxY2YwN2JmMWM5ZGU0NGViYjBjOWYzMDAwMDAwMDEwMDAwMDAwOTAwMDAwMDAxMzNmMTI2ZGVlOTAxMDhjNDczYWY5NTEzZWJkOWViMTU5MWE3MDFiNWRmYzY5MDQxMDc1YjMwM2I4NThmZWUwNjA5Y2E5YTYwMjA4YjQ2ZjY4MzZmMGJhZjFhOWZiYTc0MGQ5N2I2NWQ0NWNhYWUxMDQ3MGI1ZmE3MDdlYjQ1YzkwMGY5ZWQyMDUyJyxcbiAgeFByaXZhdGVLZXk6XG4gICAgJ3hwcnY5czIxWnJRSDE0M0syRFc5anZEb0FrVnBSS2k1VjlYaFphVmRvVWNxb1lQUFE5d1JyTE5UNlZHZ1dCYlJvU1lCMzlMYWs2a1hnZFRNOVQzUW9rRWk1bjJKSjhFZGdnSExrWlBYOGVEaUJ1MScsXG4gIHNpZ25hdHVyZTogW1xuICAgICcweDMzZjEyNmRlZTkwMTA4YzQ3M2FmOTUxM2ViZDllYjE1OTFhNzAxYjVkZmM2OTA0MTA3NWIzMDNiODU4ZmVlMDYwOWNhOWE2MDIwOGI0NmY2ODM2ZjBiYWYxYTlmYmE3NDBkOTdiNjVkNDVjYWFlMTA0NzBiNWZhNzA3ZWI0NWM5MDAnLFxuICBdLFxuXG4gIHByaXZhdGVLZXk6ICcxNDk3NzkyOWE0ZTAwZTRhZjFjMzM1NDUyNDBhNmE1YTA4Y2EzMDM0MjE0NjE4ZjZiMDRiNzJiODA4ODNiZTNhJyxcbiAgcHVibGljS2V5OiAnMDMzY2ExODAxZjUxNDg0MDYzZjNiY2UwOTM0MTNjYTA2ZjdkOTFjNDRjMzg4M2Y2NDJlYjEwM2VkYTVlMGVhZWQzJyxcbiAgYW1vdW50OiAnNTAwMDAwMDAnLCAvLyAwLjAwMDA1IEZMUlxuICBjSGV4QWRkcmVzczogJzB4MjhBMDU5MzNkQzc2ZTRlNmMyNWYzNUQ1YzliMkE1ODc2OTcwMEU3NicsXG4gIHBBZGRyZXNzZXM6IFtcbiAgICAnUC1jb3N0d28xenQ5bjk2aGV5NGZzdm5kZTM1bjNrNGt0NXB1N2M3ODRkemV3emQnLFxuICAgICdQLWNvc3R3bzFjd3JkdHJnZjR4aDgwbmN1N3BhbHJqdzdnbjRtcGowbjRkeGdoaCcsXG4gICAgJ1AtY29zdHdvMTVtc3ZyMjdzenZoaHBtYWgwYzM4Z2NtbDd2bTI5eGpoN3RjZWs4JyxcbiAgXSxcbiAgbWFpbkFkZHJlc3M6ICdQLWNvc3R3bzFxMHNzc2htd3ozazc3azN2MHdrZnIwajY0ZHZoenphYWY5d2RocScsXG4gIGNvcmV0aEFkZHJlc3M6IFtcbiAgICAnQy1jb3N0d28xenQ5bjk2aGV5NGZzdm5kZTM1bjNrNGt0NXB1N2M3ODRkemV3emQnLFxuICAgICdDLWNvc3R3bzFjd3JkdHJnZjR4aDgwbmN1N3BhbHJqdzdnbjRtcGowbjRkeGdoaCcsXG4gICAgJ0MtY29zdHdvMTVtc3ZyMjdzenZoaHBtYWgwYzM4Z2NtbDd2bTI5eGpoN3RjZWs4JyxcbiAgXSxcbiAgdGFyZ2V0Q2hhaW5JZDogJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExTHBvWVknLFxuICBub25jZTogOSxcbiAgdGhyZXNob2xkOiAyLFxuICBmZWU6ICcxMDAwMDAwJywgLy8gMU0gbkZMUiBhcyBiYXNlIGZlZVJhdGUsIHRvdGFsRmVlIHdpbGwgYmUgMk0gKGZlZVJhdGUgKyBmaXhlZEZlZSlcbiAgbG9ja3RpbWU6IDAsXG59O1xuIl19
|