@bitgo-beta/sdk-coin-avaxp 3.5.10-beta.294 → 3.5.10-beta.296
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/permissionlessValidatorTxBuilder.js +6 -6
- package/dist/src/lib/transactionBuilder.d.ts +11 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +20 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +17 -11
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +9 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -229,7 +229,7 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
|
|
|
229
229
|
this._endTime = this.transaction._endTime;
|
|
230
230
|
// not sorted addresses
|
|
231
231
|
this._rawAddresses = output.outputOwners.addrs.map((a) => avalanchejs_1.utils.hexToBuffer(a.toHex()));
|
|
232
|
-
this.transaction._fromAddresses = output.outputOwners.addrs.
|
|
232
|
+
this.transaction._fromAddresses = output.outputOwners.addrs.map((a) => avalanchejs_1.utils.hexToBuffer(a.toHex()));
|
|
233
233
|
this.transaction._stakeAmount = permissionlessValidatorTx.stake[0].output.amount();
|
|
234
234
|
this.transaction._utxos = (0, utxoEngine_1.recoverUtxos)(permissionlessValidatorTx.getInputs());
|
|
235
235
|
return this;
|
|
@@ -342,10 +342,10 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
|
|
|
342
342
|
throw new sdk_core_1.BuildTransactionError(`Utxo outputs get ${currentTotal.toString()} and ${totalTarget.toString()} is required`);
|
|
343
343
|
}
|
|
344
344
|
else if (currentTotal >= totalTarget) {
|
|
345
|
-
const stakeOutput = new avalanchejs_1.avaxSerial.TransferableOutput(assetId, new avalanchejs_1.TransferOutput(new avalanchejs_1.BigIntPr(totalTarget), new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), this.transaction._fromAddresses.sort().map((a) => avalanchejs_1.Address.fromBytes(a)[0]))));
|
|
345
|
+
const stakeOutput = new avalanchejs_1.avaxSerial.TransferableOutput(assetId, new avalanchejs_1.TransferOutput(new avalanchejs_1.BigIntPr(totalTarget), new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses].sort().map((a) => avalanchejs_1.Address.fromBytes(a)[0]))));
|
|
346
346
|
stakeOutputs.push(stakeOutput);
|
|
347
347
|
if (currentTotal >= totalTarget) {
|
|
348
|
-
const changeOutput = new avalanchejs_1.avaxSerial.TransferableOutput(assetId, new avalanchejs_1.TransferOutput(new avalanchejs_1.BigIntPr(currentTotal - totalTarget), new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), this.transaction._fromAddresses.sort().map((a) => avalanchejs_1.Address.fromBytes(a)[0]))));
|
|
348
|
+
const changeOutput = new avalanchejs_1.avaxSerial.TransferableOutput(assetId, new avalanchejs_1.TransferOutput(new avalanchejs_1.BigIntPr(currentTotal - totalTarget), new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses].sort().map((a) => avalanchejs_1.Address.fromBytes(a)[0]))));
|
|
349
349
|
changeOutputs.push(changeOutput);
|
|
350
350
|
}
|
|
351
351
|
}
|
|
@@ -365,12 +365,12 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
|
|
|
365
365
|
);
|
|
366
366
|
const subnetValidator = avalanchejs_1.pvmSerial.SubnetValidator.fromNative(this._nodeID, this._startTime, this._endTime, BigInt(1e9), avalanchejs_1.networkIDs.PrimaryNetworkID);
|
|
367
367
|
const signer = new avalanchejs_1.pvmSerial.Signer(new avalanchejs_1.pvmSerial.ProofOfPossession(avalanchejs_1.utils.hexToBuffer(this._blsPublicKey), avalanchejs_1.utils.hexToBuffer(this._blsSignature)));
|
|
368
|
-
const outputOwners = new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), this.transaction._fromAddresses.sort().map((a) => avalanchejs_1.Address.fromBytes(a)[0]));
|
|
368
|
+
const outputOwners = new avalanchejs_1.OutputOwners(new avalanchejs_1.BigIntPr(this.transaction._locktime), new avalanchejs_1.Int(this.transaction._threshold), [...this.transaction._fromAddresses].sort().map((a) => avalanchejs_1.Address.fromBytes(a)[0]));
|
|
369
369
|
// TODO(CR-1073): check this value
|
|
370
370
|
// Shares 10,000 times percentage of reward taken from delegators
|
|
371
371
|
// https://docs.avax.network/reference/avalanchego/p-chain/txn-format#unsigned-add-validator-tx
|
|
372
372
|
const shares = new avalanchejs_1.Int(1e4 * 20);
|
|
373
|
-
const addressMaps = this.transaction._fromAddresses
|
|
373
|
+
const addressMaps = [...this.transaction._fromAddresses]
|
|
374
374
|
.sort()
|
|
375
375
|
.map((address) => new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(address), 0]]));
|
|
376
376
|
this.transaction.setTransaction(new avalanchejs_1.UnsignedTx(new avalanchejs_1.pvmSerial.AddPermissionlessValidatorTx(baseTx, subnetValidator, signer, stakeOutputs, outputOwners, outputOwners, shares), utxos, new avalanchejs_1.utils.AddressMaps(addressMaps), credentials));
|
|
@@ -422,4 +422,4 @@ class PermissionlessValidatorTxBuilder extends transactionBuilder_1.TransactionB
|
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
exports.PermissionlessValidatorTxBuilder = PermissionlessValidatorTxBuilder;
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQWtCNEI7QUFDNUIsbURBUThCO0FBRzlCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBWXRFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBaEJiLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBaUIsRUFBRSxDQUFDO1FBT2pDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBUzlCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUEyQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFB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Q0FBQyxXQUF5QjtRQUMzQyx3RUFBd0U7SUFDMUUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztDQUNGO0FBemlCRCw0RUF5aUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRkcmVzcyxcbiAgYXZheFNlcmlhbCxcbiAgdXRpbHMgYXMgQXZheFV0aWxzLFxuICBCaWdJbnRQcixcbiAgQ3JlZGVudGlhbCxcbiAgSWQsXG4gIElucHV0LFxuICBJbnQsXG4gIG5ldHdvcmtJRHMsXG4gIE91dHB1dE93bmVycyxcbiAgcHZtU2VyaWFsLFxuICBUcmFuc2ZlcklucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgVHlwZVN5bWJvbHMsXG4gIFVuc2lnbmVkVHgsXG4gIFV0eG8sXG4gIHV0aWxzIGFzIGF2YXhVdGlscyxcbn0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRCTFNQdWJsaWNLZXksXG4gIGlzVmFsaWRCTFNTaWduYXR1cmUsXG4gIE5vdFN1cHBvcnRlZCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgcmVjb3ZlclV0eG9zIH0gZnJvbSAnLi91dHhvRW5naW5lJztcblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHVibGljIF9zaWduZXI6IEtleVBhaXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3Jhd0FkZHJlc3NlczogVWludDhBcnJheVtdID0gW107XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50O1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQ7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgY29uc3QgbmV0d29yayA9IGNvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrO1xuICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gQmlnSW50KG5ldHdvcmsubWluU3Rha2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcjtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbG9ja3RpbWVcbiAgICogQHBhcmFtIGxvY2t0aW1lXG4gICAqL1xuICB2YWxpZGF0ZUxvY2t0aW1lKGxvY2t0aW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAobG9ja3RpbWUgPCBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgZGVsZWdhdGlvbiBmZWUgaXMgYXQgbGVhc3QgdGhlIG1pbkRlbGVnYXRpb25GZWVcbiAgICogQHBhcmFtIGRlbGVnYXRpb25GZWVSYXRlIG51bWJlclxuICAgKi9cbiAgdmFsaWRhdGVEZWxlZ2F0aW9uRmVlUmF0ZShkZWxlZ2F0aW9uRmVlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGRlbGVnYXRpb25GZWVSYXRlIDwgTnVtYmVyKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluRGVsZWdhdGlvbkZlZSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBEZWxlZ2F0aW9uIGZlZSBjYW5ub3QgYmUgbGVzcyB0aGFuICR7dGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5EZWxlZ2F0aW9uRmVlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBVVFhPIGhhcyBleHBlY3RlZCBmaWVsZHMuXG4gICAqIEBwYXJhbSBVVFhPXG4gICAqL1xuICB2YWxpZGF0ZVV0eG8odmFsdWU6IERlY29kZWRVdHhvT2JqKTogdm9pZCB7XG4gICAgWydvdXRwdXRJRCcsICdhbW91bnQnLCAndHhpZCcsICdvdXRwdXRpZHgnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFV0eG9zIHJlcXVpcmVkICR7ZmllbGR9YCk7XG4gICAgfSk7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIEFkZHJlc3NlcyB3aGVyZSByZXdhcmQgc2hvdWxkIGJlIGRlcG9zaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gYWRkcmVzcyAtIHNpbmdsZSBhZGRyZXNzIG9yIGFycmF5IG9mIGFkZHJlc3NlcyB0byByZWNlaXZlIHJld2FyZHNcbiAgICovXG4gIHJld2FyZEFkZHJlc3NlcyhhZGRyZXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHJld2FyZEFkZHJlc3NlcyA9IGFkZHJlc3MgaW5zdGFuY2VvZiBBcnJheSA/IGFkZHJlc3MgOiBbYWRkcmVzc107XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fcmV3YXJkQWRkcmVzc2VzID0gcmV3YXJkQWRkcmVzc2VzLm1hcCh1dGlscy5wYXJzZUFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBtYW5hZ2VyID0gQXZheFV0aWxzLmdldE1hbmFnZXJGb3JWTSgnUFZNJyk7XG4gICAgY29uc3QgW2NvZGVjLCByZXN0XSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKEF2YXhVdGlscy5oZXhUb0J1ZmZlcihyYXdUcmFuc2FjdGlvbikpO1xuICAgIGNvbnN0IHR4ID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4PihyZXN0KVswXTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5idWlsZEF2YXhUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICBpZiAodGhpcy5oYXNTaWduZXIoKSkge1xuICAgICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX3NpZ25lcikge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLnNpZ24oa2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBub2RlSURcbiAgICovXG4gIG5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVOb2RlSUQobm9kZUlEKTtcbiAgICB0aGlzLl9ub2RlSUQgPSBub2RlSUQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGJsc1B1YmxpY0tleVxuICAgKi9cbiAgYmxzUHVibGljS2V5KGJsc1B1YmxpY0tleTogc3RyaW5nKTogdGhpcyB7XG4gICAgaXNWYWxpZEJMU1B1YmxpY0tleShibHNQdWJsaWNLZXkpO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IGJsc1B1YmxpY0tleTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYmxzU2lnbmF0dXJlXG4gICAqL1xuICBibHNTaWduYXR1cmUoYmxzU2lnbmF0dXJlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpc1ZhbGlkQkxTU2lnbmF0dXJlKGJsc1NpZ25hdHVyZSk7XG4gICAgdGhpcy5fYmxzU2lnbmF0dXJlID0gYmxzU2lnbmF0dXJlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2t0aW1lIGlzIGEgbG9uZyB0aGF0IGNvbnRhaW5zIHRoZSB1bml4IHRpbWVzdGFtcCB0aGF0IHRoaXMgb3V0cHV0IGNhbiBiZSBzcGVudCBhZnRlci5cbiAgICogVGhlIHVuaXggdGltZXN0YW1wIGlzIHNwZWNpZmljIHRvIHRoZSBzZWNvbmQuXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgbG9ja3RpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVMb2NrdGltZShCaWdJbnQodmFsdWUpKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgZGVsZWdhdGlvbkZlZVJhdGVcbiAgICogQHBhcmFtIHZhbHVlIG51bWJlclxuICAgKi9cbiAgZGVsZWdhdGlvbkZlZVJhdGUodmFsdWU6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVEZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGFydCB0aW1lIG9mIHN0YWtpbmcgcGVyaW9kXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgc3RhcnRUaW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIGVuZCB0aW1lIG9mIHN0YWtpbmcgcGVyaW9kXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgZW5kVGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fZW5kVGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzdGFrZUFtb3VudCh2YWx1ZTogYmlnaW50IHwgc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdmFsdWVCaWdJbnQgPSB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gdmFsdWUgOiBCaWdJbnQodmFsdWUpO1xuICAgIHRoaXMudmFsaWRhdGVTdGFrZUFtb3VudCh2YWx1ZUJpZ0ludCk7XG4gICAgdGhpcy5fc3Rha2VBbW91bnQgPSB2YWx1ZUJpZ0ludDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSBjb3JyZWN0IE5vZGVJRCBpcyB1c2VkXG4gICAqIEBwYXJhbSBub2RlSURcbiAgICovXG4gIHZhbGlkYXRlTm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFub2RlSUQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgbm9kZUlEJyk7XG4gICAgfVxuICAgIGlmIChub2RlSUQuc2xpY2UoMCwgNikgIT09ICdOb2RlSUQnKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIE5vZGVJRCB0YWcnKTtcbiAgICB9XG4gICAgaWYgKCEoQXZheFV0aWxzLmJhc2U1OC5kZWNvZGUobm9kZUlELnNsaWNlKDcpKS5sZW5ndGggPT09IDI0KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogTm9kZUlEIGlzIG5vdCBpbiBjYjU4IGZvcm1hdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzdGFrZSBkdXJhdGlvblxuICAgKiBAcGFyYW0gc3RhcnRUaW1lXG4gICAqIEBwYXJhbSBlbmRUaW1lXG4gICAqL1xuICB2YWxpZGF0ZVN0YWtlRHVyYXRpb24oc3RhcnRUaW1lOiBiaWdpbnQsIGVuZFRpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChlbmRUaW1lIDwgc3RhcnRUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgZGF0ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGRhdGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc3Rha2UgYW1vdW50XG4gICAqIEBwYXJhbSBhbW91bnRcbiAgICovXG4gIHZhbGlkYXRlU3Rha2VBbW91bnQoYW1vdW50OiBiaWdpbnQpOiB2b2lkIHtcbiAgICBjb25zdCBtaW5TdGFrZSA9IEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pblN0YWtlKTtcbiAgICBpZiAoYW1vdW50IDwgbWluU3Rha2UpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pbmltdW0gc3Rha2luZyBhbW91bnQgaXMgJyArIE51bWJlcihtaW5TdGFrZSkgLyAxMDAwMDAwMDAwICsgJyBBVkFYLicpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggPSAodHggYXMgVW5zaWduZWRUeCkudHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LmJhc2VUeC5vdXRwdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF0ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgIGlmIChvdXRwdXRzWzBdLmdldEFzc2V0SWQoKSAhPT0gdGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXNzZXQgSUQgb2YgdGhlIG91dHB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibHNQdWJsaWNLZXkgPSBBdmF4VXRpbHMuYnVmZmVyVG9IZXgoXG4gICAgICAocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zaWduZXIgYXMgcHZtU2VyaWFsLlNpZ25lcikucHJvb2YucHVibGljS2V5XG4gICAgKTtcbiAgICB0aGlzLl9ibHNQdWJsaWNLZXkgPSB0aGlzLnRyYW5zYWN0aW9uLl9ibHNQdWJsaWNLZXk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxzU2lnbmF0dXJlID0gQXZheFV0aWxzLmJ1ZmZlclRvSGV4KFxuICAgICAgKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc2lnbmVyIGFzIHB2bVNlcmlhbC5TaWduZXIpLnByb29mLnNpZ25hdHVyZVxuICAgICk7XG4gICAgdGhpcy5fYmxzU2lnbmF0dXJlID0gdGhpcy50cmFuc2FjdGlvbi5fYmxzU2lnbmF0dXJlO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBvdXRwdXQub3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0Lm91dHB1dE93bmVycy50aHJlc2hvbGQudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ub2RlSUQgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3Iubm9kZUlkLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5fbm9kZUlEID0gdGhpcy50cmFuc2FjdGlvbi5fbm9kZUlEO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZSA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5zdGFydFRpbWUudmFsdWUoKTtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRyYW5zYWN0aW9uLl9zdGFydFRpbWU7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZSA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5lbmRUaW1lLnZhbHVlKCk7XG4gICAgdGhpcy5fZW5kVGltZSA9IHRoaXMudHJhbnNhY3Rpb24uX2VuZFRpbWU7XG4gICAgLy8gbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICB0aGlzLl9yYXdBZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gQXZheFV0aWxzLmhleFRvQnVmZmVyKGEudG9IZXgoKSkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLnNvcnQoKS5tYXAoKGEpID0+IEF2YXhVdGlscy5oZXhUb0J1ZmZlcihhLnRvSGV4KCkpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9zdGFrZUFtb3VudCA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3Rha2VbMF0ub3V0cHV0LmFtb3VudCgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gcmVjb3ZlclV0eG9zKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguZ2V0SW5wdXRzKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eXBlOiBUeXBlU3ltYm9scyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlID09PSBUeXBlU3ltYm9scy5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4OiBUeCk6IHR4IGlzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4IHtcbiAgICByZXR1cm4gUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuX3R5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmNlIGFkZHJlc3NlcyBpbiBvdXRwdXRzIGdldCByZW9yZGVyZWQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHNpZ25hdHVyZXNcbiAgICogYXJlIGFkZGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAqIFRvIGZpbmQgdGhlIHBvc2l0aW9uLCB3ZSB1c2UgdGhlIG91dHB1dCdzIGFkZHJlc3NlcyB0byBjcmVhdGUgdGhlXG4gICAqIHNpZ25hdHVyZUlkeCBpbiB0aGUgb3JkZXIgbmVlZGVkIChpLmUuIFt1c2VyLCBiaXRnbywgYmFja3VwXSlcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZVV0eG9zKCk6IHtcbiAgICBpbnB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBzdGFrZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W107XG4gICAgY2hhbmdlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXTtcbiAgICB1dHhvczogVXR4b1tdO1xuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gIH0ge1xuICAgIGNvbnN0IGlucHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dFtdID0gW107XG4gICAgY29uc3Qgc3Rha2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdID0gW107XG4gICAgY29uc3QgY2hhbmdlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IHV0eG9zOiBVdHhvW10gPSBbXTtcblxuICAgIGxldCBjdXJyZW50VG90YWwgPSBCaWdJbnQoMCk7XG5cbiAgICAvLyBkZWxlZ2F0aW5nIGFuZCB2YWxpZGF0aW5nIGhhdmUgbm8gZmVlc1xuICAgIGNvbnN0IHRvdGFsVGFyZ2V0ID0gdGhpcy5fc3Rha2VBbW91bnQudmFsdWVPZigpO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3Jhd0FkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX3Jhd0FkZHJlc3NlcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBmcm9tQWRkcmVzc2VzIHRvIHN0cmluZ1xuICAgIC8vIFRoZSBvcmRlciBvZiBmcm9tQWRkcmVzc2VzIGlzIGRldGVybWluZWQgYnkgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuICAgIC8vIFdoZW4gYnVpbGRpbmcgZnJvbSBwYXJhbXMsIHRoZSBvcmRlciBpcyBbdXNlciwgYml0Z28sIGJhY2t1cF1cbiAgICAvLyBUaGUgb3JkZXIgZnJvbSB0eCBoZXggaXMgW2JpdGdvLCBiYWNrdXAsIHVzZXJdXG4gICAgY29uc3QgYml0Z29BZGRyZXNzZXMgPSB0aGlzLl9yYXdBZGRyZXNzZXMubWFwKChiKSA9PlxuICAgICAgYXZheFV0aWxzLmZvcm1hdCh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmFsaWFzLCB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmhycCwgYilcbiAgICApO1xuXG4gICAgLy8gaWYgd2UgYXJlIGluIE9WQywgbm9uZSBvZiB0aGUgdXR4b3Mgd2lsbCBoYXZlIGFkZHJlc3NlcyBzaW5jZSB0aGV5IGNvbWUgZnJvbVxuICAgIC8vIGRlc2VyaWFsaXplZCBpbnB1dHMgKHdoaWNoIGRvbid0IGhhdmUgYWRkcmVzc2VzKSwgbm90IHRoZSBJTVNcbiAgICBjb25zdCBidWlsZE91dHB1dHMgPVxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbMF0uYWRkcmVzc2VzLmxlbmd0aCAhPT0gMCB8fCB0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1swXS5hZGRyZXNzZXNJbmRleD8ubGVuZ3RoICE9PSAwO1xuXG4gICAgY29uc3QgYXNzZXRJZCA9IElkLmZyb21TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MuZm9yRWFjaCgodXR4bywgaW5kZXgpID0+IHtcbiAgICAgIC8vIHZhbGlkYXRlIHRoZSB1dHhvc1xuICAgICAgaWYgKCF1dHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1V0eG8gaXMgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICAvLyBhZGRyZXNzZXNJbmRleCBzaG91bGQgbmV2ZSBoYXZlIGEgbWlzbWF0Y2hcbiAgICAgIGlmICh1dHhvLmFkZHJlc3Nlc0luZGV4Py5pbmNsdWRlcygtMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWRkcmVzc2VzIGFyZSBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1dHhvLnRocmVzaG9sZCA8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUaHJlc2hvbGQgaXMgaW5jb25zaXN0ZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpdEdvQWRkcmVzc01hcE9uQ2hhaW4gPSBuZXcgTWFwKCk7XG4gICAgICBjb25zdCBvbkNoYWluQWRkcmVzc01hcEJpdGdvID0gbmV3IE1hcCgpO1xuXG4gICAgICAvLyBpbiBXUCwgb3V0cHV0LmFkZHJlc3Nlc0luZGV4IGlzIGVtcHR5LCBzbyBmaWxsIGl0XG4gICAgICBpZiAoIXV0eG8uYWRkcmVzc2VzSW5kZXggfHwgdXR4by5hZGRyZXNzZXNJbmRleC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdXR4by5hZGRyZXNzZXNJbmRleCA9IGJpdGdvQWRkcmVzc2VzLm1hcCgoYSkgPT4gdXR4by5hZGRyZXNzZXMuaW5kZXhPZihhKSk7XG4gICAgICB9XG4gICAgICB1dHhvLmFkZHJlc3Nlcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgIGJpdEdvQWRkcmVzc01hcE9uQ2hhaW4uc2V0KGJpdGdvQWRkcmVzc2VzLmluZGV4T2YoYSksIGEpO1xuICAgICAgICBvbkNoYWluQWRkcmVzc01hcEJpdGdvLnNldChhLCB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH0pO1xuICAgICAgLy8gaW4gT1ZDLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZGVmaW5lZCBjb3JyZWN0bHkgZnJvbSB0aGUgcHJldmlvdXMgaXRlcmF0aW9uXG5cbiAgICAgIGlmICh1dHhvLm91dHB1dElEID09PSBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0KSB7XG4gICAgICAgIGNvbnN0IHV0eG9BbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgICAvLyBlaXRoZXIgdXNlciAoMCkgb3IgcmVjb3ZlcnkgKDIpXG4gICAgICAgIC8vIE9uIHJlZ3VsYXIgbW9kZTogW3VzZXIsIGJpdGdvXSAoaS5lLiBbMCwgMV0pXG4gICAgICAgIC8vIE9uIHJlY292ZXJ5IG1vZGU6IFtiYWNrdXAsIGJpdGdvXSAoaS5lLiBbMiwgMV0pXG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSB0aGlzLnJlY292ZXJTaWduZXIgPyAyIDogMDtcbiAgICAgICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICAgICAgY3VycmVudFRvdGFsID0gY3VycmVudFRvdGFsICsgdXR4b0Ftb3VudDtcblxuICAgICAgICBjb25zdCB1dHhvSWQgPSBhdmF4U2VyaWFsLlVUWE9JRC5mcm9tTmF0aXZlKHV0eG8udHhpZCwgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSk7XG5cbiAgICAgICAgbGV0IGFkZHJlc3Nlc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleCAmJiBvbkNoYWluQWRkcmVzc01hcEJpdGdvLnNpemUgPT09IDApIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleCA9IFsuLi51dHhvLmFkZHJlc3Nlc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKG9uQ2hhaW5BZGRyZXNzTWFwQml0Z28uZ2V0KGJpdEdvQWRkcmVzc01hcE9uQ2hhaW4uZ2V0KGJpdGdvSW5kZXgpKSk7XG4gICAgICAgICAgYWRkcmVzc2VzSW5kZXgucHVzaChvbkNoYWluQWRkcmVzc01hcEJpdGdvLmdldChiaXRHb0FkZHJlc3NNYXBPbkNoYWluLmdldChmaXJzdEluZGV4KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dHMgPSBuZXcgVHJhbnNmZXJJbnB1dChcbiAgICAgICAgICBuZXcgQmlnSW50UHIodXR4b0Ftb3VudCksXG4gICAgICAgICAgbmV3IElucHV0KFsuLi5hZGRyZXNzZXNJbmRleF0uc29ydCgpLm1hcCgobnVtKSA9PiBuZXcgSW50KG51bSkpKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnB1dCA9IG5ldyBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0KHV0eG9JZCwgYXNzZXRJZCwgdHJhbnNmZXJJbnB1dHMpO1xuICAgICAgICB1dHhvcy5wdXNoKG5ldyBVdHhvKHV0eG9JZCwgYXNzZXRJZCwgdHJhbnNmZXJJbnB1dHMpKTtcblxuICAgICAgICBpbnB1dHMucHVzaChpbnB1dCk7XG4gICAgICAgIGlmIChidWlsZE91dHB1dHMpIHtcbiAgICAgICAgICAvLyBGb3IgdGhlIGJpdGdvIHNpZ25hdHVyZSB3ZSBjcmVhdGUgYW4gZW1wdHkgc2lnbmF0dXJlXG4gICAgICAgICAgLy8gRm9yIHRoZSB1c2VyL2JhY2t1cCBzaWduYXR1cmUgd2Ugc3RvcmUgdGhlIGFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSBrZXlcbiAgICAgICAgICAvLyBpZiB1c2VyL2JhY2t1cCA+IGJpdGdvXG4gICAgICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCB1dHhvLmFkZHJlc3Nlc0luZGV4W2ZpcnN0SW5kZXhdKSB7XG4gICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChbXG4gICAgICAgICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSgnJykudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKHRoaXMuX3Jhd0FkZHJlc3Nlc1tmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKHRoaXMuX3Jhd0FkZHJlc3Nlc1tmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKCcnKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVE9ETyhDUi0xMDczKTogdmVyaWZ5IHRoaXMgZWxzZSBjYXNlIGZvciBPVkNcbiAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKFxuICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoXG4gICAgICAgICAgICAgIGFkZHJlc3Nlc0luZGV4Lm1hcCgoaSkgPT4gdXRpbHMuY3JlYXRlTmV3U2lnKEJ1ZmZlckF2YXguZnJvbSh0aGlzLl9yYXdBZGRyZXNzZXNbaV0pLnRvU3RyaW5nKCdoZXgnKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGJ1aWxkT3V0cHV0cykge1xuICAgICAgaWYgKGN1cnJlbnRUb3RhbCA8IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgYFV0eG8gb3V0cHV0cyBnZXQgJHtjdXJyZW50VG90YWwudG9TdHJpbmcoKX0gYW5kICR7dG90YWxUYXJnZXQudG9TdHJpbmcoKX0gaXMgcmVxdWlyZWRgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUb3RhbCA+PSB0b3RhbFRhcmdldCkge1xuICAgICAgICBjb25zdCBzdGFrZU91dHB1dCA9IG5ldyBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dChcbiAgICAgICAgICBhc3NldElkLFxuICAgICAgICAgIG5ldyBUcmFuc2Zlck91dHB1dChcbiAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0b3RhbFRhcmdldCksXG4gICAgICAgICAgICBuZXcgT3V0cHV0T3duZXJzKFxuICAgICAgICAgICAgICBuZXcgQmlnSW50UHIodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUpLFxuICAgICAgICAgICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMuc29ydCgpLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBzdGFrZU91dHB1dHMucHVzaChzdGFrZU91dHB1dCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUb3RhbCA+PSB0b3RhbFRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IG5ldyBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dChcbiAgICAgICAgICAgIGFzc2V0SWQsXG4gICAgICAgICAgICBuZXcgVHJhbnNmZXJPdXRwdXQoXG4gICAgICAgICAgICAgIG5ldyBCaWdJbnRQcihjdXJyZW50VG90YWwgLSB0b3RhbFRhcmdldCksXG4gICAgICAgICAgICAgIG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgICAgICAgICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5zb3J0KCkubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY2hhbmdlT3V0cHV0cy5wdXNoKGNoYW5nZU91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmluYWxDcmVkZW50aWFscyA9IHRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgPz8gY3JlZGVudGlhbHM7XG4gICAgaW5wdXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICBhdmF4VXRpbHMuYnVmZmVyVG9IZXgoYS51dHhvSUQudHhJRC50b0J5dGVzKCkpLmxvY2FsZUNvbXBhcmUoYXZheFV0aWxzLmJ1ZmZlclRvSGV4KGIudXR4b0lELnR4SUQudG9CeXRlcygpKSlcbiAgICApO1xuICAgIHJldHVybiB7IGlucHV0cywgc3Rha2VPdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCB1dHhvcywgY3JlZGVudGlhbHM6IGZpbmFsQ3JlZGVudGlhbHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgYWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvblxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRBdmF4VHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVN0YWtlRHVyYXRpb24odGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lLCB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lKTtcbiAgICBjb25zdCB7IGlucHV0cywgc3Rha2VPdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCB1dHhvcywgY3JlZGVudGlhbHMgfSA9IHRoaXMuY2FsY3VsYXRlVXR4b3MoKTtcbiAgICBjb25zdCBiYXNlVHggPSBhdmF4U2VyaWFsLkJhc2VUeC5mcm9tTmF0aXZlKFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELFxuICAgICAgY2hhbmdlT3V0cHV0cyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG5ldyBVaW50OEFycmF5KCkgLy8gZGVmYXVsdCBlbXB0eSBtZW1vXG4gICAgKTtcblxuICAgIGNvbnN0IHN1Ym5ldFZhbGlkYXRvciA9IHB2bVNlcmlhbC5TdWJuZXRWYWxpZGF0b3IuZnJvbU5hdGl2ZShcbiAgICAgIHRoaXMuX25vZGVJRCxcbiAgICAgIHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgIHRoaXMuX2VuZFRpbWUsXG4gICAgICBCaWdJbnQoMWU5KSxcbiAgICAgIG5ldHdvcmtJRHMuUHJpbWFyeU5ldHdvcmtJRFxuICAgICk7XG5cbiAgICBjb25zdCBzaWduZXIgPSBuZXcgcHZtU2VyaWFsLlNpZ25lcihcbiAgICAgIG5ldyBwdm1TZXJpYWwuUHJvb2ZPZlBvc3Nlc3Npb24oXG4gICAgICAgIEF2YXhVdGlscy5oZXhUb0J1ZmZlcih0aGlzLl9ibHNQdWJsaWNLZXkpLFxuICAgICAgICBBdmF4VXRpbHMuaGV4VG9CdWZmZXIodGhpcy5fYmxzU2lnbmF0dXJlKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSBuZXcgT3V0cHV0T3duZXJzKFxuICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMuc29ydCgpLm1hcCgoYSkgPT4gQWRkcmVzcy5mcm9tQnl0ZXMoYSlbMF0pXG4gICAgKTtcblxuICAgIC8vIFRPRE8oQ1ItMTA3Myk6IGNoZWNrIHRoaXMgdmFsdWVcbiAgICAvLyAgU2hhcmVzIDEwLDAwMCB0aW1lcyBwZXJjZW50YWdlIG9mIHJld2FyZCB0YWtlbiBmcm9tIGRlbGVnYXRvcnNcbiAgICAvLyAgaHR0cHM6Ly9kb2NzLmF2YXgubmV0d29yay9yZWZlcmVuY2UvYXZhbGFuY2hlZ28vcC1jaGFpbi90eG4tZm9ybWF0I3Vuc2lnbmVkLWFkZC12YWxpZGF0b3ItdHhcbiAgICBjb25zdCBzaGFyZXMgPSBuZXcgSW50KDFlNCAqIDIwKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc1xuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcCgoYWRkcmVzcykgPT4gbmV3IEF2YXhVdGlscy5BZGRyZXNzTWFwKFtbbmV3IEFkZHJlc3MoYWRkcmVzcyksIDBdXSkpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihcbiAgICAgIG5ldyBVbnNpZ25lZFR4KFxuICAgICAgICBuZXcgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgoXG4gICAgICAgICAgYmFzZVR4LFxuICAgICAgICAgIHN1Ym5ldFZhbGlkYXRvcixcbiAgICAgICAgICBzaWduZXIsXG4gICAgICAgICAgc3Rha2VPdXRwdXRzLFxuICAgICAgICAgIG91dHB1dE93bmVycyxcbiAgICAgICAgICBvdXRwdXRPd25lcnMsXG4gICAgICAgICAgc2hhcmVzXG4gICAgICAgICksXG4gICAgICAgIHV0eG9zLFxuICAgICAgICBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSxcbiAgICAgICAgY3JlZGVudGlhbHNcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oeyBrZXkgfTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXIucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICBoYXNTaWduZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3NpZ25lci5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KHsga2V5IH06IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBpZiAoIW5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIGluIGFueSBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQWtCNEI7QUFDNUIsbURBUThCO0FBRzlCLHlDQUFpRDtBQUVqRCxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBRXBDLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFDNUIsNkNBQTRDO0FBRTVDLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQWtCO0lBWXRFOzs7T0FHRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBaEJiLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBaUIsRUFBRSxDQUFDO1FBT2pDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBUzlCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUEyQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFB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QUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUF5QjtRQUMzQyx3RUFBd0U7SUFDMUUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztDQUNGO0FBemlCRCw0RUF5aUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRkcmVzcyxcbiAgYXZheFNlcmlhbCxcbiAgdXRpbHMgYXMgQXZheFV0aWxzLFxuICBCaWdJbnRQcixcbiAgQ3JlZGVudGlhbCxcbiAgSWQsXG4gIElucHV0LFxuICBJbnQsXG4gIG5ldHdvcmtJRHMsXG4gIE91dHB1dE93bmVycyxcbiAgcHZtU2VyaWFsLFxuICBUcmFuc2ZlcklucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgVHlwZVN5bWJvbHMsXG4gIFVuc2lnbmVkVHgsXG4gIFV0eG8sXG4gIHV0aWxzIGFzIGF2YXhVdGlscyxcbn0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRCTFNQdWJsaWNLZXksXG4gIGlzVmFsaWRCTFNTaWduYXR1cmUsXG4gIE5vdFN1cHBvcnRlZCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgcmVjb3ZlclV0eG9zIH0gZnJvbSAnLi91dHhvRW5naW5lJztcblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHVibGljIF9zaWduZXI6IEtleVBhaXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3Jhd0FkZHJlc3NlczogVWludDhBcnJheVtdID0gW107XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50O1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQ7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgY29uc3QgbmV0d29yayA9IGNvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrO1xuICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gQmlnSW50KG5ldHdvcmsubWluU3Rha2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcjtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbG9ja3RpbWVcbiAgICogQHBhcmFtIGxvY2t0aW1lXG4gICAqL1xuICB2YWxpZGF0ZUxvY2t0aW1lKGxvY2t0aW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAobG9ja3RpbWUgPCBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgZGVsZWdhdGlvbiBmZWUgaXMgYXQgbGVhc3QgdGhlIG1pbkRlbGVnYXRpb25GZWVcbiAgICogQHBhcmFtIGRlbGVnYXRpb25GZWVSYXRlIG51bWJlclxuICAgKi9cbiAgdmFsaWRhdGVEZWxlZ2F0aW9uRmVlUmF0ZShkZWxlZ2F0aW9uRmVlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGRlbGVnYXRpb25GZWVSYXRlIDwgTnVtYmVyKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsubWluRGVsZWdhdGlvbkZlZSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBEZWxlZ2F0aW9uIGZlZSBjYW5ub3QgYmUgbGVzcyB0aGFuICR7dGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5taW5EZWxlZ2F0aW9uRmVlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBVVFhPIGhhcyBleHBlY3RlZCBmaWVsZHMuXG4gICAqIEBwYXJhbSBVVFhPXG4gICAqL1xuICB2YWxpZGF0ZVV0eG8odmFsdWU6IERlY29kZWRVdHhvT2JqKTogdm9pZCB7XG4gICAgWydvdXRwdXRJRCcsICdhbW91bnQnLCAndHhpZCcsICdvdXRwdXRpZHgnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFV0eG9zIHJlcXVpcmVkICR7ZmllbGR9YCk7XG4gICAgfSk7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIEFkZHJlc3NlcyB3aGVyZSByZXdhcmQgc2hvdWxkIGJlIGRlcG9zaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gYWRkcmVzcyAtIHNpbmdsZSBhZGRyZXNzIG9yIGFycmF5IG9mIGFkZHJlc3NlcyB0byByZWNlaXZlIHJld2FyZHNcbiAgICovXG4gIHJld2FyZEFkZHJlc3NlcyhhZGRyZXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHJld2FyZEFkZHJlc3NlcyA9IGFkZHJlc3MgaW5zdGFuY2VvZiBBcnJheSA/IGFkZHJlc3MgOiBbYWRkcmVzc107XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fcmV3YXJkQWRkcmVzc2VzID0gcmV3YXJkQWRkcmVzc2VzLm1hcCh1dGlscy5wYXJzZUFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBtYW5hZ2VyID0gQXZheFV0aWxzLmdldE1hbmFnZXJGb3JWTSgnUFZNJyk7XG4gICAgY29uc3QgW2NvZGVjLCByZXN0XSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKEF2YXhVdGlscy5oZXhUb0J1ZmZlcihyYXdUcmFuc2FjdGlvbikpO1xuICAgIGNvbnN0IHR4ID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4PihyZXN0KVswXTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5idWlsZEF2YXhUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICBpZiAodGhpcy5oYXNTaWduZXIoKSkge1xuICAgICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX3NpZ25lcikge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLnNpZ24oa2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBub2RlSURcbiAgICovXG4gIG5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVOb2RlSUQobm9kZUlEKTtcbiAgICB0aGlzLl9ub2RlSUQgPSBub2RlSUQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGJsc1B1YmxpY0tleVxuICAgKi9cbiAgYmxzUHVibGljS2V5KGJsc1B1YmxpY0tleTogc3RyaW5nKTogdGhpcyB7XG4gICAgaXNWYWxpZEJMU1B1YmxpY0tleShibHNQdWJsaWNLZXkpO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IGJsc1B1YmxpY0tleTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYmxzU2lnbmF0dXJlXG4gICAqL1xuICBibHNTaWduYXR1cmUoYmxzU2lnbmF0dXJlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpc1ZhbGlkQkxTU2lnbmF0dXJlKGJsc1NpZ25hdHVyZSk7XG4gICAgdGhpcy5fYmxzU2lnbmF0dXJlID0gYmxzU2lnbmF0dXJlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2t0aW1lIGlzIGEgbG9uZyB0aGF0IGNvbnRhaW5zIHRoZSB1bml4IHRpbWVzdGFtcCB0aGF0IHRoaXMgb3V0cHV0IGNhbiBiZSBzcGVudCBhZnRlci5cbiAgICogVGhlIHVuaXggdGltZXN0YW1wIGlzIHNwZWNpZmljIHRvIHRoZSBzZWNvbmQuXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgbG9ja3RpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVMb2NrdGltZShCaWdJbnQodmFsdWUpKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgZGVsZWdhdGlvbkZlZVJhdGVcbiAgICogQHBhcmFtIHZhbHVlIG51bWJlclxuICAgKi9cbiAgZGVsZWdhdGlvbkZlZVJhdGUodmFsdWU6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVEZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGFydCB0aW1lIG9mIHN0YWtpbmcgcGVyaW9kXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgc3RhcnRUaW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIGVuZCB0aW1lIG9mIHN0YWtpbmcgcGVyaW9kXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgZW5kVGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fZW5kVGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzdGFrZUFtb3VudCh2YWx1ZTogYmlnaW50IHwgc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdmFsdWVCaWdJbnQgPSB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gdmFsdWUgOiBCaWdJbnQodmFsdWUpO1xuICAgIHRoaXMudmFsaWRhdGVTdGFrZUFtb3VudCh2YWx1ZUJpZ0ludCk7XG4gICAgdGhpcy5fc3Rha2VBbW91bnQgPSB2YWx1ZUJpZ0ludDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSBjb3JyZWN0IE5vZGVJRCBpcyB1c2VkXG4gICAqIEBwYXJhbSBub2RlSURcbiAgICovXG4gIHZhbGlkYXRlTm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFub2RlSUQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgbm9kZUlEJyk7XG4gICAgfVxuICAgIGlmIChub2RlSUQuc2xpY2UoMCwgNikgIT09ICdOb2RlSUQnKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIE5vZGVJRCB0YWcnKTtcbiAgICB9XG4gICAgaWYgKCEoQXZheFV0aWxzLmJhc2U1OC5kZWNvZGUobm9kZUlELnNsaWNlKDcpKS5sZW5ndGggPT09IDI0KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogTm9kZUlEIGlzIG5vdCBpbiBjYjU4IGZvcm1hdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzdGFrZSBkdXJhdGlvblxuICAgKiBAcGFyYW0gc3RhcnRUaW1lXG4gICAqIEBwYXJhbSBlbmRUaW1lXG4gICAqL1xuICB2YWxpZGF0ZVN0YWtlRHVyYXRpb24oc3RhcnRUaW1lOiBiaWdpbnQsIGVuZFRpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChlbmRUaW1lIDwgc3RhcnRUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgZGF0ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGRhdGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc3Rha2UgYW1vdW50XG4gICAqIEBwYXJhbSBhbW91bnRcbiAgICovXG4gIHZhbGlkYXRlU3Rha2VBbW91bnQoYW1vdW50OiBiaWdpbnQpOiB2b2lkIHtcbiAgICBjb25zdCBtaW5TdGFrZSA9IEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLm1pblN0YWtlKTtcbiAgICBpZiAoYW1vdW50IDwgbWluU3Rha2UpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pbmltdW0gc3Rha2luZyBhbW91bnQgaXMgJyArIE51bWJlcihtaW5TdGFrZSkgLyAxMDAwMDAwMDAwICsgJyBBVkFYLicpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggPSAodHggYXMgVW5zaWduZWRUeCkudHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LmJhc2VUeC5vdXRwdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF0ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgIGlmIChvdXRwdXRzWzBdLmdldEFzc2V0SWQoKSAhPT0gdGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXNzZXQgSUQgb2YgdGhlIG91dHB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibHNQdWJsaWNLZXkgPSBBdmF4VXRpbHMuYnVmZmVyVG9IZXgoXG4gICAgICAocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zaWduZXIgYXMgcHZtU2VyaWFsLlNpZ25lcikucHJvb2YucHVibGljS2V5XG4gICAgKTtcbiAgICB0aGlzLl9ibHNQdWJsaWNLZXkgPSB0aGlzLnRyYW5zYWN0aW9uLl9ibHNQdWJsaWNLZXk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxzU2lnbmF0dXJlID0gQXZheFV0aWxzLmJ1ZmZlclRvSGV4KFxuICAgICAgKHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc2lnbmVyIGFzIHB2bVNlcmlhbC5TaWduZXIpLnByb29mLnNpZ25hdHVyZVxuICAgICk7XG4gICAgdGhpcy5fYmxzU2lnbmF0dXJlID0gdGhpcy50cmFuc2FjdGlvbi5fYmxzU2lnbmF0dXJlO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBvdXRwdXQub3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0Lm91dHB1dE93bmVycy50aHJlc2hvbGQudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ub2RlSUQgPSBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LnN1Ym5ldFZhbGlkYXRvci52YWxpZGF0b3Iubm9kZUlkLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5fbm9kZUlEID0gdGhpcy50cmFuc2FjdGlvbi5fbm9kZUlEO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3N0YXJ0VGltZSA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5zdGFydFRpbWUudmFsdWUoKTtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRyYW5zYWN0aW9uLl9zdGFydFRpbWU7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZW5kVGltZSA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguc3VibmV0VmFsaWRhdG9yLnZhbGlkYXRvci5lbmRUaW1lLnZhbHVlKCk7XG4gICAgdGhpcy5fZW5kVGltZSA9IHRoaXMudHJhbnNhY3Rpb24uX2VuZFRpbWU7XG4gICAgLy8gbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICB0aGlzLl9yYXdBZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gQXZheFV0aWxzLmhleFRvQnVmZmVyKGEudG9IZXgoKSkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gQXZheFV0aWxzLmhleFRvQnVmZmVyKGEudG9IZXgoKSkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3N0YWtlQW1vdW50ID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5zdGFrZVswXS5vdXRwdXQuYW1vdW50KCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSByZWNvdmVyVXR4b3MocGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5nZXRJbnB1dHMoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR5cGU6IFR5cGVTeW1ib2xzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGUgPT09IFR5cGVTeW1ib2xzLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHg6IFR4KTogdHggaXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgge1xuICAgIHJldHVybiBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlci52ZXJpZnlUeFR5cGUoKHR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KS5fdHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogU2luY2UgYWRkcmVzc2VzIGluIG91dHB1dHMgZ2V0IHJlb3JkZXJlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgc2lnbmF0dXJlc1xuICAgKiBhcmUgYWRkZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICogVG8gZmluZCB0aGUgcG9zaXRpb24sIHdlIHVzZSB0aGUgb3V0cHV0J3MgYWRkcmVzc2VzIHRvIGNyZWF0ZSB0aGVcbiAgICogc2lnbmF0dXJlSWR4IGluIHRoZSBvcmRlciBuZWVkZWQgKGkuZS4gW3VzZXIsIGJpdGdvLCBiYWNrdXBdKVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FsY3VsYXRlVXR4b3MoKToge1xuICAgIGlucHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVJbnB1dFtdO1xuICAgIHN0YWtlT3V0cHV0czogYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXRbXTtcbiAgICBjaGFuZ2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdO1xuICAgIHV0eG9zOiBVdHhvW107XG4gICAgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXTtcbiAgfSB7XG4gICAgY29uc3QgaW5wdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBzdGFrZU91dHB1dHM6IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0W10gPSBbXTtcbiAgICBjb25zdCBjaGFuZ2VPdXRwdXRzOiBhdmF4U2VyaWFsLlRyYW5zZmVyYWJsZU91dHB1dFtdID0gW107XG4gICAgY29uc3QgdXR4b3M6IFV0eG9bXSA9IFtdO1xuXG4gICAgbGV0IGN1cnJlbnRUb3RhbCA9IEJpZ0ludCgwKTtcblxuICAgIC8vIGRlbGVnYXRpbmcgYW5kIHZhbGlkYXRpbmcgaGF2ZSBubyBmZWVzXG4gICAgY29uc3QgdG90YWxUYXJnZXQgPSB0aGlzLl9zdGFrZUFtb3VudC52YWx1ZU9mKCk7XG5cbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdID0gW107XG5cbiAgICBpZiAodGhpcy5fcmF3QWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcmF3QWRkcmVzc2VzID0gWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGZyb21BZGRyZXNzZXMgdG8gc3RyaW5nXG4gICAgLy8gVGhlIG9yZGVyIG9mIGZyb21BZGRyZXNzZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc291cmNlIG9mIHRoZSBkYXRhXG4gICAgLy8gV2hlbiBidWlsZGluZyBmcm9tIHBhcmFtcywgdGhlIG9yZGVyIGlzIFt1c2VyLCBiaXRnbywgYmFja3VwXVxuICAgIC8vIFRoZSBvcmRlciBmcm9tIHR4IGhleCBpcyBbYml0Z28sIGJhY2t1cCwgdXNlcl1cbiAgICBjb25zdCBiaXRnb0FkZHJlc3NlcyA9IHRoaXMuX3Jhd0FkZHJlc3Nlcy5tYXAoKGIpID0+XG4gICAgICBhdmF4VXRpbHMuZm9ybWF0KHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCBiKVxuICAgICk7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gT1ZDLCBub25lIG9mIHRoZSB1dHhvcyB3aWxsIGhhdmUgYWRkcmVzc2VzIHNpbmNlIHRoZXkgY29tZSBmcm9tXG4gICAgLy8gZGVzZXJpYWxpemVkIGlucHV0cyAod2hpY2ggZG9uJ3QgaGF2ZSBhZGRyZXNzZXMpLCBub3QgdGhlIElNU1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0cyA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1swXS5hZGRyZXNzZXMubGVuZ3RoICE9PSAwIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zWzBdLmFkZHJlc3Nlc0luZGV4Py5sZW5ndGggIT09IDA7XG5cbiAgICBjb25zdCBhc3NldElkID0gSWQuZnJvbVN0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5mb3JFYWNoKCh1dHhvLCBpbmRleCkgPT4ge1xuICAgICAgLy8gdmFsaWRhdGUgdGhlIHV0eG9zXG4gICAgICBpZiAoIXV0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVXR4byBpcyB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZHJlc3Nlc0luZGV4IHNob3VsZCBuZXZlIGhhdmUgYSBtaXNtYXRjaFxuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXg/LmluY2x1ZGVzKC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBZGRyZXNzZXMgYXJlIGluY29uc2lzdGVudCcpO1xuICAgICAgfVxuICAgICAgaWYgKHV0eG8udGhyZXNob2xkIDwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RocmVzaG9sZCBpcyBpbmNvbnNpc3RlbnQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYml0R29BZGRyZXNzTWFwT25DaGFpbiA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbnN0IG9uQ2hhaW5BZGRyZXNzTWFwQml0Z28gPSBuZXcgTWFwKCk7XG5cbiAgICAgIC8vIGluIFdQLCBvdXRwdXQuYWRkcmVzc2VzSW5kZXggaXMgZW1wdHksIHNvIGZpbGwgaXRcbiAgICAgIGlmICghdXR4by5hZGRyZXNzZXNJbmRleCB8fCB1dHhvLmFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB1dHhvLmFkZHJlc3Nlc0luZGV4ID0gYml0Z29BZGRyZXNzZXMubWFwKChhKSA9PiB1dHhvLmFkZHJlc3Nlcy5pbmRleE9mKGEpKTtcbiAgICAgIH1cbiAgICAgIHV0eG8uYWRkcmVzc2VzLmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgYml0R29BZGRyZXNzTWFwT25DaGFpbi5zZXQoYml0Z29BZGRyZXNzZXMuaW5kZXhPZihhKSwgYSk7XG4gICAgICAgIG9uQ2hhaW5BZGRyZXNzTWFwQml0Z28uc2V0KGEsIHV0eG8uYWRkcmVzc2VzLmluZGV4T2YoYSkpO1xuICAgICAgfSk7XG4gICAgICAvLyBpbiBPVkMsIG91dHB1dC5hZGRyZXNzZXNJbmRleCBpcyBkZWZpbmVkIGNvcnJlY3RseSBmcm9tIHRoZSBwcmV2aW91cyBpdGVyYXRpb25cblxuICAgICAgaWYgKHV0eG8ub3V0cHV0SUQgPT09IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQpIHtcbiAgICAgICAgY29uc3QgdXR4b0Ftb3VudCA9IEJpZ0ludCh1dHhvLmFtb3VudCk7XG4gICAgICAgIC8vIGVpdGhlciB1c2VyICgwKSBvciByZWNvdmVyeSAoMilcbiAgICAgICAgLy8gT24gcmVndWxhciBtb2RlOiBbdXNlciwgYml0Z29dIChpLmUuIFswLCAxXSlcbiAgICAgICAgLy8gT24gcmVjb3ZlcnkgbW9kZTogW2JhY2t1cCwgYml0Z29dIChpLmUuIFsyLCAxXSlcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IHRoaXMucmVjb3ZlclNpZ25lciA/IDIgOiAwO1xuICAgICAgICBjb25zdCBiaXRnb0luZGV4ID0gMTtcblxuICAgICAgICBjdXJyZW50VG90YWwgPSBjdXJyZW50VG90YWwgKyB1dHhvQW1vdW50O1xuXG4gICAgICAgIGNvbnN0IHV0eG9JZCA9IGF2YXhTZXJpYWwuVVRYT0lELmZyb21OYXRpdmUodXR4by50eGlkLCBOdW1iZXIodXR4by5vdXRwdXRpZHgpKTtcblxuICAgICAgICBsZXQgYWRkcmVzc2VzSW5kZXg6IG51bWJlcltdID0gW107XG4gICAgICAgIGlmICh1dHhvLmFkZHJlc3Nlc0luZGV4ICYmIG9uQ2hhaW5BZGRyZXNzTWFwQml0Z28uc2l6ZSA9PT0gMCkge1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4ID0gWy4uLnV0eG8uYWRkcmVzc2VzSW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3Nlc0luZGV4LnB1c2gob25DaGFpbkFkZHJlc3NNYXBCaXRnby5nZXQoYml0R29BZGRyZXNzTWFwT25DaGFpbi5nZXQoYml0Z29JbmRleCkpKTtcbiAgICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKG9uQ2hhaW5BZGRyZXNzTWFwQml0Z28uZ2V0KGJpdEdvQWRkcmVzc01hcE9uQ2hhaW4uZ2V0KGZpcnN0SW5kZXgpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2ZlcklucHV0cyA9IG5ldyBUcmFuc2ZlcklucHV0KFxuICAgICAgICAgIG5ldyBCaWdJbnRQcih1dHhvQW1vdW50KSxcbiAgICAgICAgICBuZXcgSW5wdXQoWy4uLmFkZHJlc3Nlc0luZGV4XS5zb3J0KCkubWFwKChudW0pID0+IG5ldyBJbnQobnVtKSkpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlSW5wdXQodXR4b0lkLCBhc3NldElkLCB0cmFuc2ZlcklucHV0cyk7XG4gICAgICAgIHV0eG9zLnB1c2gobmV3IFV0eG8odXR4b0lkLCBhc3NldElkLCB0cmFuc2ZlcklucHV0cykpO1xuXG4gICAgICAgIGlucHV0cy5wdXNoKGlucHV0KTtcbiAgICAgICAgaWYgKGJ1aWxkT3V0cHV0cykge1xuICAgICAgICAgIC8vIEZvciB0aGUgYml0Z28gc2lnbmF0dXJlIHdlIGNyZWF0ZSBhbiBlbXB0eSBzaWduYXR1cmVcbiAgICAgICAgICAvLyBGb3IgdGhlIHVzZXIvYmFja3VwIHNpZ25hdHVyZSB3ZSBzdG9yZSB0aGUgYWRkcmVzcyB0aGF0IG1hdGNoZXMgdGhlIGtleVxuICAgICAgICAgIC8vIGlmIHVzZXIvYmFja3VwID4gYml0Z29cbiAgICAgICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA8IHV0eG8uYWRkcmVzc2VzSW5kZXhbZmlyc3RJbmRleF0pIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBDcmVkZW50aWFsKFtcbiAgICAgICAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKCcnKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhCdWZmZXJBdmF4LmZyb20odGhpcy5fcmF3QWRkcmVzc2VzW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChcbiAgICAgICAgICAgICAgbmV3IENyZWRlbnRpYWwoW1xuICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhCdWZmZXJBdmF4LmZyb20odGhpcy5fcmF3QWRkcmVzc2VzW2ZpcnN0SW5kZXhdKS50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZyhCdWZmZXJBdmF4LmZyb20oJycpLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUT0RPKENSLTEwNzMpOiB2ZXJpZnkgdGhpcyBlbHNlIGNhc2UgZm9yIE9WQ1xuICAgICAgICAgIGNyZWRlbnRpYWxzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3JlZGVudGlhbChcbiAgICAgICAgICAgICAgYWRkcmVzc2VzSW5kZXgubWFwKChpKSA9PiB1dGlscy5jcmVhdGVOZXdTaWcoQnVmZmVyQXZheC5mcm9tKHRoaXMuX3Jhd0FkZHJlc3Nlc1tpXSkudG9TdHJpbmcoJ2hleCcpKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYnVpbGRPdXRwdXRzKSB7XG4gICAgICBpZiAoY3VycmVudFRvdGFsIDwgdG90YWxUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgVXR4byBvdXRwdXRzIGdldCAke2N1cnJlbnRUb3RhbC50b1N0cmluZygpfSBhbmQgJHt0b3RhbFRhcmdldC50b1N0cmluZygpfSBpcyByZXF1aXJlZGBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRvdGFsID49IHRvdGFsVGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN0YWtlT3V0cHV0ID0gbmV3IGF2YXhTZXJpYWwuVHJhbnNmZXJhYmxlT3V0cHV0KFxuICAgICAgICAgIGFzc2V0SWQsXG4gICAgICAgICAgbmV3IFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgICAgbmV3IEJpZ0ludFByKHRvdGFsVGFyZ2V0KSxcbiAgICAgICAgICAgIG5ldyBPdXRwdXRPd25lcnMoXG4gICAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgICAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgWy4uLnRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXNdLnNvcnQoKS5tYXAoKGEpID0+IEFkZHJlc3MuZnJvbUJ5dGVzKGEpWzBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgc3Rha2VPdXRwdXRzLnB1c2goc3Rha2VPdXRwdXQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50VG90YWwgPj0gdG90YWxUYXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBuZXcgYXZheFNlcmlhbC5UcmFuc2ZlcmFibGVPdXRwdXQoXG4gICAgICAgICAgICBhc3NldElkLFxuICAgICAgICAgICAgbmV3IFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgICAgICBuZXcgQmlnSW50UHIoY3VycmVudFRvdGFsIC0gdG90YWxUYXJnZXQpLFxuICAgICAgICAgICAgICBuZXcgT3V0cHV0T3duZXJzKFxuICAgICAgICAgICAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICAgICAgICAgICAgbmV3IEludCh0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpLFxuICAgICAgICAgICAgICAgIFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXS5zb3J0KCkubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY2hhbmdlT3V0cHV0cy5wdXNoKGNoYW5nZU91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmluYWxDcmVkZW50aWFscyA9IHRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgPz8gY3JlZGVudGlhbHM7XG4gICAgaW5wdXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICBhdmF4VXRpbHMuYnVmZmVyVG9IZXgoYS51dHhvSUQudHhJRC50b0J5dGVzKCkpLmxvY2FsZUNvbXBhcmUoYXZheFV0aWxzLmJ1ZmZlclRvSGV4KGIudXR4b0lELnR4SUQudG9CeXRlcygpKSlcbiAgICApO1xuICAgIHJldHVybiB7IGlucHV0cywgc3Rha2VPdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCB1dHhvcywgY3JlZGVudGlhbHM6IGZpbmFsQ3JlZGVudGlhbHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgYWRkIHZhbGlkYXRvciB0cmFuc2FjdGlvblxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRBdmF4VHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVN0YWtlRHVyYXRpb24odGhpcy50cmFuc2FjdGlvbi5fc3RhcnRUaW1lLCB0aGlzLnRyYW5zYWN0aW9uLl9lbmRUaW1lKTtcbiAgICBjb25zdCB7IGlucHV0cywgc3Rha2VPdXRwdXRzLCBjaGFuZ2VPdXRwdXRzLCB1dHhvcywgY3JlZGVudGlhbHMgfSA9IHRoaXMuY2FsY3VsYXRlVXR4b3MoKTtcbiAgICBjb25zdCBiYXNlVHggPSBhdmF4U2VyaWFsLkJhc2VUeC5mcm9tTmF0aXZlKFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELFxuICAgICAgY2hhbmdlT3V0cHV0cyxcbiAgICAgIGlucHV0cyxcbiAgICAgIG5ldyBVaW50OEFycmF5KCkgLy8gZGVmYXVsdCBlbXB0eSBtZW1vXG4gICAgKTtcblxuICAgIGNvbnN0IHN1Ym5ldFZhbGlkYXRvciA9IHB2bVNlcmlhbC5TdWJuZXRWYWxpZGF0b3IuZnJvbU5hdGl2ZShcbiAgICAgIHRoaXMuX25vZGVJRCxcbiAgICAgIHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgIHRoaXMuX2VuZFRpbWUsXG4gICAgICBCaWdJbnQoMWU5KSxcbiAgICAgIG5ldHdvcmtJRHMuUHJpbWFyeU5ldHdvcmtJRFxuICAgICk7XG5cbiAgICBjb25zdCBzaWduZXIgPSBuZXcgcHZtU2VyaWFsLlNpZ25lcihcbiAgICAgIG5ldyBwdm1TZXJpYWwuUHJvb2ZPZlBvc3Nlc3Npb24oXG4gICAgICAgIEF2YXhVdGlscy5oZXhUb0J1ZmZlcih0aGlzLl9ibHNQdWJsaWNLZXkpLFxuICAgICAgICBBdmF4VXRpbHMuaGV4VG9CdWZmZXIodGhpcy5fYmxzU2lnbmF0dXJlKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSBuZXcgT3V0cHV0T3duZXJzKFxuICAgICAgbmV3IEJpZ0ludFByKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lKSxcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSxcbiAgICAgIFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXS5zb3J0KCkubWFwKChhKSA9PiBBZGRyZXNzLmZyb21CeXRlcyhhKVswXSlcbiAgICApO1xuXG4gICAgLy8gVE9ETyhDUi0xMDczKTogY2hlY2sgdGhpcyB2YWx1ZVxuICAgIC8vICBTaGFyZXMgMTAsMDAwIHRpbWVzIHBlcmNlbnRhZ2Ugb2YgcmV3YXJkIHRha2VuIGZyb20gZGVsZWdhdG9yc1xuICAgIC8vICBodHRwczovL2RvY3MuYXZheC5uZXR3b3JrL3JlZmVyZW5jZS9hdmFsYW5jaGVnby9wLWNoYWluL3R4bi1mb3JtYXQjdW5zaWduZWQtYWRkLXZhbGlkYXRvci10eFxuICAgIGNvbnN0IHNoYXJlcyA9IG5ldyBJbnQoMWU0ICogMjApO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSBbLi4udGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc11cbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGFkZHJlc3MpID0+IG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcChbW25ldyBBZGRyZXNzKGFkZHJlc3MpLCAwXV0pKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24oXG4gICAgICBuZXcgVW5zaWduZWRUeChcbiAgICAgICAgbmV3IHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KFxuICAgICAgICAgIGJhc2VUeCxcbiAgICAgICAgICBzdWJuZXRWYWxpZGF0b3IsXG4gICAgICAgICAgc2lnbmVyLFxuICAgICAgICAgIHN0YWtlT3V0cHV0cyxcbiAgICAgICAgICBvdXRwdXRPd25lcnMsXG4gICAgICAgICAgb3V0cHV0T3duZXJzLFxuICAgICAgICAgIHNoYXJlc1xuICAgICAgICApLFxuICAgICAgICB1dHhvcyxcbiAgICAgICAgbmV3IEF2YXhVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksXG4gICAgICAgIGNyZWRlbnRpYWxzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy5fc2lnbmVyLnB1c2gobmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgaGFzU2lnbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaWduZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zaWduZXIubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleSh7IGtleSB9OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgaWYgKCFuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvbiBUcmFuc2FjdGlvbiBpbiBhbnkgZm9ybWF0XG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB1dGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICAvLyB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigndmFsaWRhdGVUcmFuc2FjdGlvbiBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -30,12 +30,23 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
30
30
|
* @param values
|
|
31
31
|
*/
|
|
32
32
|
validateUtxos(values: DecodedUtxoObj[]): void;
|
|
33
|
+
/**
|
|
34
|
+
* Validates locktime
|
|
35
|
+
* @param locktime
|
|
36
|
+
*/
|
|
37
|
+
validateLocktime(locktime: bigint): void;
|
|
33
38
|
/**
|
|
34
39
|
* Threshold is an int that names the number of unique signatures required to spend the output.
|
|
35
40
|
* Must be less than or equal to the length of Addresses.
|
|
36
41
|
* @param {number} value
|
|
37
42
|
*/
|
|
38
43
|
threshold(value: number): this;
|
|
44
|
+
/**
|
|
45
|
+
* Locktime is a long that contains the unix timestamp that this output can be spent after.
|
|
46
|
+
* The unix timestamp is specific to the second.
|
|
47
|
+
* @param value
|
|
48
|
+
*/
|
|
49
|
+
locktime(value: string | number): this;
|
|
39
50
|
/**
|
|
40
51
|
* When using recovery key must be set here
|
|
41
52
|
* TODO: STLX-17317 recovery key signing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,aAAa,UAAS;IACzB,OAAO,EAAE,OAAO,EAAE,CAAM;gBAEnB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAazB;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAMzC;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,aAAa,UAAS;IACzB,OAAO,EAAE,OAAO,EAAE,CAAM;gBAEnB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAazB;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAMzC;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAO7C;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOxC;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMtC;;;;OAIG;IACH,WAAW,CAAC,aAAa,UAAO,GAAG,IAAI;IAKvC;;;OAGG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAMjD;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAcpC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;CASlE"}
|
|
@@ -60,6 +60,15 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
60
60
|
}
|
|
61
61
|
values.forEach(this.validateUtxo);
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Validates locktime
|
|
65
|
+
* @param locktime
|
|
66
|
+
*/
|
|
67
|
+
validateLocktime(locktime) {
|
|
68
|
+
if (!locktime || locktime < BigInt(0)) {
|
|
69
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
63
72
|
// endregion
|
|
64
73
|
/**
|
|
65
74
|
* Threshold is an int that names the number of unique signatures required to spend the output.
|
|
@@ -71,6 +80,16 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
71
80
|
this._transaction._threshold = value;
|
|
72
81
|
return this;
|
|
73
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Locktime is a long that contains the unix timestamp that this output can be spent after.
|
|
85
|
+
* The unix timestamp is specific to the second.
|
|
86
|
+
* @param value
|
|
87
|
+
*/
|
|
88
|
+
locktime(value) {
|
|
89
|
+
this.validateLocktime(BigInt(value));
|
|
90
|
+
this._transaction._locktime = BigInt(value);
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
74
93
|
/**
|
|
75
94
|
* When using recovery key must be set here
|
|
76
95
|
* TODO: STLX-17317 recovery key signing
|
|
@@ -116,4 +135,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
116
135
|
}
|
|
117
136
|
}
|
|
118
137
|
exports.TransactionBuilder = TransactionBuilder;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQXNFO0FBQ3RFLG1EQUFxRjtBQUlyRiwrQ0FBNEM7QUFDNUMsb0RBQTRCO0FBRTVCLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUtyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUpYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFJN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQU07UUFDaEIsTUFBTSxNQUFNLEdBQUssRUFBaUIsQ0FBQyxFQUE2QyxDQUFDLE1BQU0sQ0FBQztRQUN4RixJQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ3pELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9EO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsS0FBcUI7UUFDaEMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGtCQUFrQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxNQUF3QjtRQUNwQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVk7SUFFWjs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxZQUFZLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsS0FBdUI7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsMEJBQTBCO0lBRTFCLGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyx1QkFBUyxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ2xDLHVCQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQzVDLENBQUM7UUFDRixtR0FBbUc7UUFDbkcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBMUhELGdEQTBIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF2bVNlcmlhbCwgcHZtU2VyaWFsLCBVbnNpZ25lZFR4IH0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgcmVjb3ZlclNpZ25lciA9IGZhbHNlO1xuICBwdWJsaWMgX3NpZ25lcjogS2V5UGFpcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIGl0c2VsZlxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgY29uc3QgYmFzZVR4ID0gKCh0eCBhcyBVbnNpZ25lZFR4KS50eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuYmFzZVR4O1xuICAgIGlmIChcbiAgICAgIGJhc2VUeC5OZXR3b3JrSWQudmFsdWUoKSAhPT0gdGhpcy5fdHJhbnNhY3Rpb24uX25ldHdvcmtJRCB8fFxuICAgICAgYmFzZVR4LkJsb2NrY2hhaW5JZC52YWx1ZSgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgb3IgYmxvY2tjaGFpbiBpcyBub3QgZXF1YWxzJyk7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRocmVzaG9sZFxuICAgKiBAcGFyYW0gdGhyZXNob2xkXG4gICAqL1xuICB2YWxpZGF0ZVRocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhyZXNob2xkIHx8IHRocmVzaG9sZCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogdGhyZXNob2xkIG11c3QgYmUgc2V0IHRvIDInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIFVUWE8gaGFzIGV4cGVjdGVkIGZpZWxkcy5cbiAgICogQHBhcmFtIFVUWE9cbiAgICovXG4gIHZhbGlkYXRlVXR4byh2YWx1ZTogRGVjb2RlZFV0eG9PYmopOiB2b2lkIHtcbiAgICBbJ291dHB1dElEJywgJ2Ftb3VudCcsICd0eGlkJywgJ291dHB1dGlkeCddLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVXR4b3MgcmVxdWlyZWQgJHtmaWVsZH1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgbGlzdCBvZiBVVFhPUyBpcyBlbXB0eSBhbmQgY2hlY2sgZWFjaCBVVFhPLlxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqL1xuICB2YWxpZGF0ZVV0eG9zKHZhbHVlczogRGVjb2RlZFV0eG9PYmpbXSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFwiVXR4b3MgY2FuJ3QgYmUgZW1wdHkgYXJyYXlcIik7XG4gICAgfVxuICAgIHZhbHVlcy5mb3JFYWNoKHRoaXMudmFsaWRhdGVVdHhvKTtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogVGhyZXNob2xkIGlzIGFuIGludCB0aGF0IG5hbWVzIHRoZSBudW1iZXIgb2YgdW5pcXVlIHNpZ25hdHVyZXMgcmVxdWlyZWQgdG8gc3BlbmQgdGhlIG91dHB1dC5cbiAgICogTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiBBZGRyZXNzZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgdGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVGhyZXNob2xkKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2luZyByZWNvdmVyeSBrZXkgbXVzdCBiZSBzZXQgaGVyZVxuICAgKiBUT0RPOiBTVExYLTE3MzE3IHJlY292ZXJ5IGtleSBzaWduaW5nXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1bcmVjb3ZlclNpZ25lcj10cnVlXSB3aGV0aGVyIGl0J3MgcmVjb3Zlcnkgc2lnbmVyXG4gICAqL1xuICByZWNvdmVyTW9kZShyZWNvdmVyU2lnbmVyID0gdHJ1ZSk6IHRoaXMge1xuICAgIHRoaXMucmVjb3ZlclNpZ25lciA9IHJlY292ZXJTaWduZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZnJvbVB1YktleSBpcyBhIGxpc3Qgb2YgdW5pcXVlIGFkZHJlc3NlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHByaXZhdGUga2V5cyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNwZW5kIHRoaXMgb3V0cHV0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHNlbmRlclB1YktleVxuICAgKi9cbiAgZnJvbVB1YktleShzZW5kZXJQdWJLZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcHViS2V5cyA9IHNlbmRlclB1YktleSBpbnN0YW5jZW9mIEFycmF5ID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBwdWJLZXlzLm1hcCh1dGlscy5wYXJzZUFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgVVRYTyByZXF1aXJlZCBhcyBpbnB1dHMuXG4gICAqIEEgVVRYTyBpcyBhIHN0YW5kYWxvbmUgcmVwcmVzZW50YXRpb24gb2YgYSB0cmFuc2FjdGlvbiBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RGVjb2RlZFV0eG9PYmpbXX0gbGlzdCBvZiBVVFhPU1xuICAgKi9cbiAgdXR4b3ModmFsdWU6IERlY29kZWRVdHhvT2JqW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVXR4b3ModmFsdWUpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl91dHhvcyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gVE9ETyhDUi0xMDczKTpcbiAgLy8gSW1wbGVtZW50OlxuICAvLyAgYnVpbGRJbXBsZW1lbnRhdGlvblxuICAvLyAgc2lnbkltcGxlbWVudGF0aW9uXG4gIC8vICBnZXQgdHJhbnNhY3Rpb25cbiAgLy8gIHNldCB0cmFuc2FjdGlvblxuICAvLyAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgW3R4XSA9IHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LmZyb21CeXRlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4JyksXG4gICAgICBhdm1TZXJpYWwuZ2V0QVZNTWFuYWdlcigpLmdldERlZmF1bHRDb2RlYygpXG4gICAgKTtcbiAgICAvLyBUT0RPKENSLTEwNzMpOiBjaGVjayBpZiBpbml0QnVpbGRlciBjYW4gb25seSB1c2UgVW5zaWduZWRUeCBhbmQgcHZtU2VyaWFsLkJhc2VUeCBpcyBub3QgcmVxdWlyZWRcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cbn1cbiJdfQ==
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQXNFO0FBQ3RFLG1EQUFxRjtBQUlyRiwrQ0FBNEM7QUFDNUMsb0RBQTRCO0FBRTVCLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUtyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUpYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFJN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQU07UUFDaEIsTUFBTSxNQUFNLEdBQUssRUFBaUIsQ0FBQyxFQUE2QyxDQUFDLE1BQU0sQ0FBQztRQUN4RixJQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ3pELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9EO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRjtJQUNI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LFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUEvSUQsZ0RBK0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXZtU2VyaWFsLCBwdm1TZXJpYWwsIFVuc2lnbmVkVHggfSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciwgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHB1YmxpYyBfc2lnbmVyOiBLZXlQYWlyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgaXRzZWxmXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHggPSAoKHR4IGFzIFVuc2lnbmVkVHgpLnR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KS5iYXNlVHg7XG4gICAgaWYgKFxuICAgICAgYmFzZVR4Lk5ldHdvcmtJZC52YWx1ZSgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fbmV0d29ya0lEIHx8XG4gICAgICBiYXNlVHguQmxvY2tjaGFpbklkLnZhbHVlKCkgIT09IHRoaXMuX3RyYW5zYWN0aW9uLl9ibG9ja2NoYWluSURcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayBvciBibG9ja2NoYWluIGlzIG5vdCBlcXVhbHMnKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGhyZXNob2xkXG4gICAqIEBwYXJhbSB0aHJlc2hvbGRcbiAgICovXG4gIHZhbGlkYXRlVGhyZXNob2xkKHRocmVzaG9sZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aHJlc2hvbGQgfHwgdGhyZXNob2xkICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiB0aHJlc2hvbGQgbXVzdCBiZSBzZXQgdG8gMicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgVVRYTyBoYXMgZXhwZWN0ZWQgZmllbGRzLlxuICAgKiBAcGFyYW0gVVRYT1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHZhbHVlOiBEZWNvZGVkVXR4b09iaik6IHZvaWQge1xuICAgIFsnb3V0cHV0SUQnLCAnYW1vdW50JywgJ3R4aWQnLCAnb3V0cHV0aWR4J10uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGlmICghdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVdHhvcyByZXF1aXJlZCAke2ZpZWxkfWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBsaXN0IG9mIFVUWE9TIGlzIGVtcHR5IGFuZCBjaGVjayBlYWNoIFVUWE8uXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICovXG4gIHZhbGlkYXRlVXR4b3ModmFsdWVzOiBEZWNvZGVkVXR4b09ialtdKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXCJVdHhvcyBjYW4ndCBiZSBlbXB0eSBhcnJheVwiKTtcbiAgICB9XG4gICAgdmFsdWVzLmZvckVhY2godGhpcy52YWxpZGF0ZVV0eG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBsb2NrdGltZVxuICAgKiBAcGFyYW0gbG9ja3RpbWVcbiAgICovXG4gIHZhbGlkYXRlTG9ja3RpbWUobG9ja3RpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmICghbG9ja3RpbWUgfHwgbG9ja3RpbWUgPCBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIFRocmVzaG9sZCBpcyBhbiBpbnQgdGhhdCBuYW1lcyB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBzaWduYXR1cmVzIHJlcXVpcmVkIHRvIHNwZW5kIHRoZSBvdXRwdXQuXG4gICAqIE11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgQWRkcmVzc2VzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICovXG4gIHRocmVzaG9sZCh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVRocmVzaG9sZCh2YWx1ZSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2t0aW1lIGlzIGEgbG9uZyB0aGF0IGNvbnRhaW5zIHRoZSB1bml4IHRpbWVzdGFtcCB0aGF0IHRoaXMgb3V0cHV0IGNhbiBiZSBzcGVudCBhZnRlci5cbiAgICogVGhlIHVuaXggdGltZXN0YW1wIGlzIHNwZWNpZmljIHRvIHRoZSBzZWNvbmQuXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgbG9ja3RpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVMb2NrdGltZShCaWdJbnQodmFsdWUpKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgcmVjb3Zlcnkga2V5IG11c3QgYmUgc2V0IGhlcmVcbiAgICogVE9ETzogU1RMWC0xNzMxNyByZWNvdmVyeSBrZXkgc2lnbmluZ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59W3JlY292ZXJTaWduZXI9dHJ1ZV0gd2hldGhlciBpdCdzIHJlY292ZXJ5IHNpZ25lclxuICAgKi9cbiAgcmVjb3Zlck1vZGUocmVjb3ZlclNpZ25lciA9IHRydWUpOiB0aGlzIHtcbiAgICB0aGlzLnJlY292ZXJTaWduZXIgPSByZWNvdmVyU2lnbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIGZyb21QdWJLZXkgaXMgYSBsaXN0IG9mIHVuaXF1ZSBhZGRyZXNzZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBwcml2YXRlIGtleXMgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVuZCB0aGlzIG91dHB1dFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBzZW5kZXJQdWJLZXlcbiAgICovXG4gIGZyb21QdWJLZXkoc2VuZGVyUHViS2V5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHB1YktleXMgPSBzZW5kZXJQdWJLZXkgaW5zdGFuY2VvZiBBcnJheSA/IHNlbmRlclB1YktleSA6IFtzZW5kZXJQdWJLZXldO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gcHViS2V5cy5tYXAodXRpbHMucGFyc2VBZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIFVUWE8gcmVxdWlyZWQgYXMgaW5wdXRzLlxuICAgKiBBIFVUWE8gaXMgYSBzdGFuZGFsb25lIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJhbnNhY3Rpb24gb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RlY29kZWRVdHhvT2JqW119IGxpc3Qgb2YgVVRYT1NcbiAgICovXG4gIHV0eG9zKHZhbHVlOiBEZWNvZGVkVXR4b09ialtdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVV0eG9zKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdXR4b3MgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFRPRE8oQ1ItMTA3Myk6XG4gIC8vIEltcGxlbWVudDpcbiAgLy8gIGJ1aWxkSW1wbGVtZW50YXRpb25cbiAgLy8gIHNpZ25JbXBsZW1lbnRhdGlvblxuICAvLyAgZ2V0IHRyYW5zYWN0aW9uXG4gIC8vICBzZXQgdHJhbnNhY3Rpb25cbiAgLy8gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb25cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IFt0eF0gPSBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5mcm9tQnl0ZXMoXG4gICAgICBCdWZmZXIuZnJvbShyYXdUcmFuc2FjdGlvbiwgJ2hleCcpLFxuICAgICAgYXZtU2VyaWFsLmdldEFWTU1hbmFnZXIoKS5nZXREZWZhdWx0Q29kZWMoKVxuICAgICk7XG4gICAgLy8gVE9ETyhDUi0xMDczKTogY2hlY2sgaWYgaW5pdEJ1aWxkZXIgY2FuIG9ubHkgdXNlIFVuc2lnbmVkVHggYW5kIHB2bVNlcmlhbC5CYXNlVHggaXMgbm90IHJlcXVpcmVkXG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAgB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAoB,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,aAAa,UAAS;gBACpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,4BAA4B;
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAgB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAoB,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,aAAa,UAAS;gBACpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,4BAA4B;IAuFpE,kBAAkB;IAClB,kBAAkB,IAAI,4BAA4B;IAIlD;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;;;OAIG;IACH,mCAAmC,IAAI,gCAAgC;IAIvE;;;;OAIG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC,kBAAkB;IAClB,8BAA8B,IAAI,4BAA4B;CAG/D"}
|
|
@@ -54,11 +54,21 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
54
54
|
const [codec, txBytes] = manager.getCodecFromBuffer(avalanchejs_1.utils.hexToBuffer(raw));
|
|
55
55
|
const unpackedTx = codec.UnpackPrefix(txBytes);
|
|
56
56
|
// A signed transaction includes 4 bytes for the number of credentials as an Int type that is not known by the codec
|
|
57
|
-
// We
|
|
57
|
+
// We'll skip those 4 bytes, instead we'll loop until we've parsed all credentials
|
|
58
58
|
// @see https://docs.avax.network/reference/avalanchego/p-chain/txn-format#signed-transaction-example
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
const credentials = [];
|
|
60
|
+
let credentialBytes = unpackedTx[1].slice(4);
|
|
61
|
+
let moreCredentials = true;
|
|
62
|
+
do {
|
|
63
|
+
try {
|
|
64
|
+
const [credential, rest] = codec.UnpackPrefix(credentialBytes);
|
|
65
|
+
credentials.push(credential);
|
|
66
|
+
credentialBytes = rest;
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
moreCredentials = false;
|
|
70
|
+
}
|
|
71
|
+
} while (credentialBytes.length > 0 && moreCredentials);
|
|
62
72
|
const unpacked = codec.UnpackPrefix(txBytes);
|
|
63
73
|
const permissionlessValidatorTx = unpacked[0];
|
|
64
74
|
const outputs = permissionlessValidatorTx.baseTx.outputs;
|
|
@@ -67,12 +77,8 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
67
77
|
throw new Error('The Asset ID of the output does not match the transaction');
|
|
68
78
|
}
|
|
69
79
|
const fromAddresses = output.outputOwners.addrs.map((a) => avalanchejs_1.utils.hexToBuffer(a.toHex()));
|
|
70
|
-
const addressMaps = [
|
|
71
|
-
|
|
72
|
-
new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(fromAddresses[0]), 0]]),
|
|
73
|
-
new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(fromAddresses[1]), 0]]),
|
|
74
|
-
];
|
|
75
|
-
tx = new avalanchejs_1.UnsignedTx(unpacked[0], [], new avalanchejs_1.utils.AddressMaps(addressMaps), [credential1, credential2]);
|
|
80
|
+
const addressMaps = fromAddresses.map((a) => new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(a), 0]]));
|
|
81
|
+
tx = new avalanchejs_1.UnsignedTx(unpacked[0], [], new avalanchejs_1.utils.AddressMaps(addressMaps), credentials);
|
|
76
82
|
}
|
|
77
83
|
catch (e) {
|
|
78
84
|
throw new Error('The transaction type is not recognized as an old PVM or old EVM transaction. Additionally, parsing of the new PVM AddPermissionlessValidatorTx type failed.');
|
|
@@ -164,4 +170,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
164
170
|
}
|
|
165
171
|
}
|
|
166
172
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBb0g7QUFDcEgsbURBQW1GO0FBRW5GLHlDQUFpRDtBQUNqRCxpREFBc0Q7QUFDdEQsK0RBQTZEO0FBRTdELDZEQUEwRDtBQUMxRCx1REFBb0Q7QUFDcEQsNkRBQTBEO0FBQzFELHVEQUFvRDtBQUNwRCx5RkFBc0Y7QUFFdEYsb0RBQTRCO0FBQzVCLDZEQUEwRDtBQUUxRCxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUUxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBR2hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLEdBQVc7O1FBQ2QsZUFBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFrQixLQUFLLENBQUM7UUFDcEMsSUFBSSxrQkFBa0IsR0FBa0UsU0FBUyxDQUFDO1FBQ2xHLElBQUksRUFBOEIsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUk7WUFDRixFQUFFLEdBQUcsSUFBSSxlQUFLLEVBQUUsQ0FBQztZQUNqQixrREFBa0Q7WUFDbEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE0QixDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRixNQUFNLElBQUksS0FBSyxDQUFD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QUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw4QkFBOEI7UUFDNUIsTUFBTSxJQUFJLHVCQUFZLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUF4SkQsOERBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzcywgdXRpbHMgYXMgQXZheFV0aWxzLCBDcmVkZW50aWFsLCBwdm1TZXJpYWwsIFRyYW5zZmVyT3V0cHV0LCBVbnNpZ25lZFR4IH0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBdmFsYW5jaGVOZXR3b3JrLCBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgeyBUeCBhcyBFVk1UeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvZXZtJztcbmltcG9ydCB7IFR4IGFzIFBWTVR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB7IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2RlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgfSBmcm9tICcuL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4vdmFsaWRhdG9yVHhCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHwgRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGxldCB0eFNvdXJjZTogJ0VWTScgfCAnUFZNJyA9ICdQVk0nO1xuICAgIGxldCB0cmFuc2FjdGlvbkJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlciB8IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHR4OiBQVk1UeCB8IEVWTVR4IHwgVW5zaWduZWRUeDtcbiAgICBjb25zdCByYXdOb0hleCA9IHV0aWxzLnJlbW92ZUhleFByZWZpeChyYXcpO1xuICAgIHRyeSB7XG4gICAgICB0eCA9IG5ldyBQVk1UeCgpO1xuICAgICAgLy8gY291bGQgdGhyb3cgYW4gZXJyb3IgaWYgYSB0eFR5cGUgZG9lc24ndCBtYXRjaC5cbiAgICAgIHR4LmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHJhd05vSGV4LCAnaGV4JykpO1xuXG4gICAgICBpZiAoIXV0aWxzLmlzVHJhbnNhY3Rpb25PZih0eCwgKHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrKS5ibG9ja2NoYWluSUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBwbGF0Zm9ybXZtIG9sZCBmbG93Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHhTb3VyY2UgPSAnRVZNJztcbiAgICAgICAgdHggPSBuZXcgRVZNVHgoKTtcbiAgICAgICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3Tm9IZXgsICdoZXgnKSk7XG5cbiAgICAgICAgaWYgKCF1dGlscy5pc1RyYW5zYWN0aW9uT2YodHgsICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuY0NoYWluQmxvY2tjaGFpbklEKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBuZXR3b3JrIG9yIEMgY2hhaW4gRVZNJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0eFNvdXJjZSA9ICdQVk0nO1xuICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IGJlY2F1c2Ugb3RoZXIgUFZNIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYmVpbmcgZGV0ZWN0ZWQgaW4gdGhlIG5ldyBTREtcbiAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gQXZheFV0aWxzLmdldE1hbmFnZXJGb3JWTSgnUFZNJyk7XG4gICAgICAgICAgY29uc3QgW2NvZGVjLCB0eEJ5dGVzXSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKEF2YXhVdGlscy5oZXhUb0J1ZmZlcihyYXcpKTtcbiAgICAgICAgICBjb25zdCB1bnBhY2tlZFR4ID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4Pih0eEJ5dGVzKTtcbiAgICAgICAgICAvLyBBIHNpZ25lZCB0cmFuc2FjdGlvbiBpbmNsdWRlcyA0IGJ5dGVzIGZvciB0aGUgbnVtYmVyIG9mIGNyZWRlbnRpYWxzIGFzIGFuIEludCB0eXBlIHRoYXQgaXMgbm90IGtub3duIGJ5IHRoZSBjb2RlY1xuICAgICAgICAgIC8vIFdlIGNhbiBza2lwIHRob3NlIDQgYnl0ZXMgYmVjYXVzZSB3ZSBrbm93IG51bWJlciBvZiBjcmVkZW50aWFscyBpcyAyXG4gICAgICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXZheC5uZXR3b3JrL3JlZmVyZW5jZS9hdmFsYW5jaGVnby9wLWNoYWluL3R4bi1mb3JtYXQjc2lnbmVkLXRyYW5zYWN0aW9uLWV4YW1wbGVcbiAgICAgICAgICBjb25zdCBjcmVkZW50aWFsQnl0ZXMgPSB1bnBhY2tlZFR4WzFdLnNsaWNlKDQpO1xuICAgICAgICAgIGNvbnN0IFtjcmVkZW50aWFsMSwgY3JlZGVudGlhbDJCeXRlc10gPSBjb2RlYy5VbnBhY2tQcmVmaXg8Q3JlZGVudGlhbD4oY3JlZGVudGlhbEJ5dGVzKTtcbiAgICAgICAgICBjb25zdCBbY3JlZGVudGlhbDJdID0gY29kZWMuVW5wYWNrUHJlZml4PENyZWRlbnRpYWw+KGNyZWRlbnRpYWwyQnl0ZXMpO1xuXG4gICAgICAgICAgY29uc3QgdW5wYWNrZWQgPSBjb2RlYy5VbnBhY2tQcmVmaXg8cHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg+KHR4Qnl0ZXMpO1xuICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggPSB1bnBhY2tlZFswXSBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgICAgICAgICBjb25zdCBvdXRwdXRzID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5iYXNlVHgub3V0cHV0cztcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgICAgICBpZiAob3V0cHV0c1swXS5nZXRBc3NldElkKCkgIT09ICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuYXZheEFzc2V0SUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZyb21BZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gQXZheFV0aWxzLmhleFRvQnVmZmVyKGEudG9IZXgoKSkpO1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gW1xuICAgICAgICAgICAgbmV3IEF2YXhVdGlscy5BZGRyZXNzTWFwKFtbbmV3IEFkZHJlc3MoZnJvbUFkZHJlc3Nlc1syXSksIDBdXSksXG4gICAgICAgICAgICBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhmcm9tQWRkcmVzc2VzWzBdKSwgMF1dKSxcbiAgICAgICAgICAgIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcChbW25ldyBBZGRyZXNzKGZyb21BZGRyZXNzZXNbMV0pLCAwXV0pLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdHggPSBuZXcgVW5zaWduZWRUeCh1bnBhY2tlZFswXSwgW10sIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCBbY3JlZGVudGlhbDEsIGNyZWRlbnRpYWwyXSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnVGhlIHRyYW5zYWN0aW9uIHR5cGUgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gb2xkIFBWTSBvciBvbGQgRVZNIHRyYW5zYWN0aW9uLiBBZGRpdGlvbmFsbHksIHBhcnNpbmcgb2YgdGhlIG5ldyBQVk0gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB0eXBlIGZhaWxlZC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eFNvdXJjZSA9PT0gJ1BWTScpIHtcbiAgICAgIGlmICgodHggYXMgVW5zaWduZWRUeCk/LnR4Py5fdHlwZSAmJiBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlci52ZXJpZnlUeFR5cGUoKHR4IGFzIFVuc2lnbmVkVHgpLnR4Ll90eXBlKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKCkuaW5pdEJ1aWxkZXIodHgpO1xuICAgICAgfSBlbHNlIGlmIChWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0VmFsaWRhdG9yQnVpbGRlcigpLmluaXRCdWlsZGVyKHR4IGFzIFBWTVR4KTtcbiAgICAgIH0gZWxzZSBpZiAoRXhwb3J0VHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgUFZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEJ1aWxkZXIoKS5pbml0QnVpbGRlcih0eCBhcyBQVk1UeCk7XG4gICAgICB9IGVsc2UgaWYgKEltcG9ydFR4QnVpbGRlci52ZXJpZnlUeFR5cGUoKHR4IGFzIFBWTVR4KS5nZXRVbnNpZ25lZFR4KCkuZ2V0VHJhbnNhY3Rpb24oKSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRJbXBvcnRCdWlsZGVyKCkuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHhTb3VyY2UgPT09ICdFVk0nKSB7XG4gICAgICBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgRVZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEltcG9ydEluQ0J1aWxkZXIoKS5pbml0QnVpbGRlcih0eCBhcyBFVk1UeCk7XG4gICAgICB9IGVsc2UgaWYgKEV4cG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUoKHR4IGFzIEVWTVR4KS5nZXRVbnNpZ25lZFR4KCkuZ2V0VHJhbnNhY3Rpb24oKSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRFeHBvcnRJbkNCdWlsZGVyKCkuaW5pdEJ1aWxkZXIodHggYXMgRVZNVHgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb25CdWlsZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIoKTogRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNmZXIgaXMgbm90IHN1cHBvcnRlZCBpbiBQIENoYWluJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBWYWxpZGF0b3IgYnVpbGRlclxuICAgKlxuICAgKiBAcmV0dXJucyB7VmFsaWRhdG9yVHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0VmFsaWRhdG9yQnVpbGRlcigpOiBWYWxpZGF0b3JUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgUGVybWlzc2lvbmxlc3MgVmFsaWRhdG9yIGJ1aWxkZXJcbiAgICpcbiAgICogQHJldHVybnMge1Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKTogUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtFeHBvcnRUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRFeHBvcnRCdWlsZGVyKCk6IEV4cG9ydFR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBFeHBvcnRUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtJbXBvcnRUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRJbXBvcnRCdWlsZGVyKCk6IEltcG9ydFR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGluIEMgY2hhaW4gQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0ltcG9ydEluQ1R4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEltcG9ydEluQ0J1aWxkZXIoKTogSW1wb3J0SW5DVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydEluQ1R4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgaW4gQyBjaGFpbiBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7RXhwb3J0SW5DVHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0RXhwb3J0SW5DQnVpbGRlcigpOiBFeHBvcnRJbkNUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRXhwb3J0SW5DVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiBEZXByZWNhdGVkVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdXYWxsZXQgaW5pdGlhbGl6YXRpb24gaXMgbm90IG5lZWRlZCcpO1xuICB9XG59XG4iXX0=
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBb0g7QUFDcEgsbURBQW1GO0FBRW5GLHlDQUFpRDtBQUNqRCxpREFBc0Q7QUFDdEQsK0RBQTZEO0FBRTdELDZEQUEwRDtBQUMxRCx1REFBb0Q7QUFDcEQsNkRBQTBEO0FBQzFELHVEQUFvRDtBQUNwRCx5RkFBc0Y7QUFFdEYsb0RBQTRCO0FBQzVCLDZEQUEwRDtBQUUxRCxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUUxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBR2hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLEdBQVc7O1FBQ2QsZUFBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFrQixLQUFLLENBQUM7UUFDcEMsSUFBSSxrQkFBa0IsR0FBa0UsU0FBUyxDQUFDO1FBQ2xHLElBQUksRUFBOEIsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUk7WUFDRixFQUFFLEdBQUcsSUFBSSxlQUFLLEVBQUUsQ0FBQztZQUNqQixrREFBa0Q7WUFDbEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE0QixDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRixNQUFNLElBQUksS0FBSyxDQUFD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Q0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDhCQUE4QjtRQUM1QixNQUFNLElBQUksdUJBQVksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7Q0FDRjtBQTdKRCw4REE2SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzLCB1dGlscyBhcyBBdmF4VXRpbHMsIENyZWRlbnRpYWwsIHB2bVNlcmlhbCwgVHJhbnNmZXJPdXRwdXQsIFVuc2lnbmVkVHggfSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIE5vdFN1cHBvcnRlZCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCB7IFR4IGFzIEVWTVR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9ldm0nO1xuaW1wb3J0IHsgVHggYXMgUFZNVHggfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9hcGlzL3BsYXRmb3Jtdm0nO1xuaW1wb3J0IHsgRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vZGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBFeHBvcnRJbkNUeEJ1aWxkZXIgfSBmcm9tICcuL2V4cG9ydEluQ1R4QnVpbGRlcic7XG5pbXBvcnQgeyBFeHBvcnRUeEJ1aWxkZXIgfSBmcm9tICcuL2V4cG9ydFR4QnVpbGRlcic7XG5pbXBvcnQgeyBJbXBvcnRJbkNUeEJ1aWxkZXIgfSBmcm9tICcuL2ltcG9ydEluQ1R4QnVpbGRlcic7XG5pbXBvcnQgeyBJbXBvcnRUeEJ1aWxkZXIgfSBmcm9tICcuL2ltcG9ydFR4QnVpbGRlcic7XG5pbXBvcnQgeyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4vcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVmFsaWRhdG9yVHhCdWlsZGVyIH0gZnJvbSAnLi92YWxpZGF0b3JUeEJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIgfCBEZXByZWNhdGVkVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB1dGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhdyk7XG4gICAgbGV0IHR4U291cmNlOiAnRVZNJyB8ICdQVk0nID0gJ1BWTSc7XG4gICAgbGV0IHRyYW5zYWN0aW9uQnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyIHwgRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgdHg6IFBWTVR4IHwgRVZNVHggfCBVbnNpZ25lZFR4O1xuICAgIGNvbnN0IHJhd05vSGV4ID0gdXRpbHMucmVtb3ZlSGV4UHJlZml4KHJhdyk7XG4gICAgdHJ5IHtcbiAgICAgIHR4ID0gbmV3IFBWTVR4KCk7XG4gICAgICAvLyBjb3VsZCB0aHJvdyBhbiBlcnJvciBpZiBhIHR4VHlwZSBkb2Vzbid0IG1hdGNoLlxuICAgICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3Tm9IZXgsICdoZXgnKSk7XG5cbiAgICAgIGlmICghdXRpbHMuaXNUcmFuc2FjdGlvbk9mKHR4LCAodGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmspLmJsb2NrY2hhaW5JRCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyBub3QgYSB0cmFuc2FjdGlvbiBvZiB0aGlzIHBsYXRmb3Jtdm0gb2xkIGZsb3cnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0eFNvdXJjZSA9ICdFVk0nO1xuICAgICAgICB0eCA9IG5ldyBFVk1UeCgpO1xuICAgICAgICB0eC5mcm9tQnVmZmVyKEJ1ZmZlckF2YXguZnJvbShyYXdOb0hleCwgJ2hleCcpKTtcblxuICAgICAgICBpZiAoIXV0aWxzLmlzVHJhbnNhY3Rpb25PZih0eCwgKHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrKS5jQ2hhaW5CbG9ja2NoYWluSUQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyBub3QgYSB0cmFuc2FjdGlvbiBvZiB0aGlzIG5ldHdvcmsgb3IgQyBjaGFpbiBFVk0nKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHR4U291cmNlID0gJ1BWTSc7XG4gICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgdGhlIGxhc3QgYmVjYXVzZSBvdGhlciBQVk0gZnVuY3Rpb25zIGFyZSBzdGlsbCBiZWluZyBkZXRlY3RlZCBpbiB0aGUgbmV3IFNES1xuICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBBdmF4VXRpbHMuZ2V0TWFuYWdlckZvclZNKCdQVk0nKTtcbiAgICAgICAgICBjb25zdCBbY29kZWMsIHR4Qnl0ZXNdID0gbWFuYWdlci5nZXRDb2RlY0Zyb21CdWZmZXIoQXZheFV0aWxzLmhleFRvQnVmZmVyKHJhdykpO1xuICAgICAgICAgIGNvbnN0IHVucGFja2VkVHggPSBjb2RlYy5VbnBhY2tQcmVmaXg8cHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg+KHR4Qnl0ZXMpO1xuICAgICAgICAgIC8vIEEgc2lnbmVkIHRyYW5zYWN0aW9uIGluY2x1ZGVzIDQgYnl0ZXMgZm9yIHRoZSBudW1iZXIgb2YgY3JlZGVudGlhbHMgYXMgYW4gSW50IHR5cGUgdGhhdCBpcyBub3Qga25vd24gYnkgdGhlIGNvZGVjXG4gICAgICAgICAgLy8gV2UnbGwgc2tpcCB0aG9zZSA0IGJ5dGVzLCBpbnN0ZWFkIHdlJ2xsIGxvb3AgdW50aWwgd2UndmUgcGFyc2VkIGFsbCBjcmVkZW50aWFsc1xuICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF2YXgubmV0d29yay9yZWZlcmVuY2UvYXZhbGFuY2hlZ28vcC1jaGFpbi90eG4tZm9ybWF0I3NpZ25lZC10cmFuc2FjdGlvbi1leGFtcGxlXG4gICAgICAgICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IFtdO1xuICAgICAgICAgIGxldCBjcmVkZW50aWFsQnl0ZXMgPSB1bnBhY2tlZFR4WzFdLnNsaWNlKDQpO1xuICAgICAgICAgIGxldCBtb3JlQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtjcmVkZW50aWFsLCByZXN0XSA9IGNvZGVjLlVucGFja1ByZWZpeDxDcmVkZW50aWFsPihjcmVkZW50aWFsQnl0ZXMpO1xuICAgICAgICAgICAgICBjcmVkZW50aWFscy5wdXNoKGNyZWRlbnRpYWwpO1xuICAgICAgICAgICAgICBjcmVkZW50aWFsQnl0ZXMgPSByZXN0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBtb3JlQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IHdoaWxlIChjcmVkZW50aWFsQnl0ZXMubGVuZ3RoID4gMCAmJiBtb3JlQ3JlZGVudGlhbHMpO1xuXG4gICAgICAgICAgY29uc3QgdW5wYWNrZWQgPSBjb2RlYy5VbnBhY2tQcmVmaXg8cHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg+KHR4Qnl0ZXMpO1xuICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggPSB1bnBhY2tlZFswXSBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeDtcbiAgICAgICAgICBjb25zdCBvdXRwdXRzID0gcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5iYXNlVHgub3V0cHV0cztcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgICAgICBpZiAob3V0cHV0c1swXS5nZXRBc3NldElkKCkgIT09ICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuYXZheEFzc2V0SUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZyb21BZGRyZXNzZXMgPSBvdXRwdXQub3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYSkgPT4gQXZheFV0aWxzLmhleFRvQnVmZmVyKGEudG9IZXgoKSkpO1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+IG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcChbW25ldyBBZGRyZXNzKGEpLCAwXV0pKTtcbiAgICAgICAgICB0eCA9IG5ldyBVbnNpZ25lZFR4KHVucGFja2VkWzBdLCBbXSwgbmV3IEF2YXhVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUaGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBvbGQgUFZNIG9yIG9sZCBFVk0gdHJhbnNhY3Rpb24uIEFkZGl0aW9uYWxseSwgcGFyc2luZyBvZiB0aGUgbmV3IFBWTSBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4IHR5cGUgZmFpbGVkLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR4U291cmNlID09PSAnUFZNJykge1xuICAgICAgaWYgKCh0eCBhcyBVbnNpZ25lZFR4KT8udHg/Ll90eXBlICYmIFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgVW5zaWduZWRUeCkudHguX3R5cGUpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKS5pbml0QnVpbGRlcih0eCk7XG4gICAgICB9IGVsc2UgaWYgKFZhbGlkYXRvclR4QnVpbGRlci52ZXJpZnlUeFR5cGUoKHR4IGFzIFBWTVR4KS5nZXRVbnNpZ25lZFR4KCkuZ2V0VHJhbnNhY3Rpb24oKSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRWYWxpZGF0b3JCdWlsZGVyKCkuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfSBlbHNlIGlmIChFeHBvcnRUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0RXhwb3J0QnVpbGRlcigpLmluaXRCdWlsZGVyKHR4IGFzIFBWTVR4KTtcbiAgICAgIH0gZWxzZSBpZiAoSW1wb3J0VHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgUFZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEltcG9ydEJ1aWxkZXIoKS5pbml0QnVpbGRlcih0eCBhcyBQVk1UeCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eFNvdXJjZSA9PT0gJ0VWTScpIHtcbiAgICAgIGlmIChJbXBvcnRJbkNUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBFVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5DQnVpbGRlcigpLmluaXRCdWlsZGVyKHR4IGFzIEVWTVR4KTtcbiAgICAgIH0gZWxzZSBpZiAoRXhwb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgRVZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluQ0J1aWxkZXIoKS5pbml0QnVpbGRlcih0eCBhcyBFVk1UeCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbkJ1aWxkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25CdWlsZGVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcigpOiBEZXByZWNhdGVkVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2ZlciBpcyBub3Qgc3VwcG9ydGVkIGluIFAgQ2hhaW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIFZhbGlkYXRvciBidWlsZGVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtWYWxpZGF0b3JUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRWYWxpZGF0b3JCdWlsZGVyKCk6IFZhbGlkYXRvclR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBQZXJtaXNzaW9ubGVzcyBWYWxpZGF0b3IgYnVpbGRlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpOiBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0V4cG9ydFR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEV4cG9ydEJ1aWxkZXIoKTogRXhwb3J0VHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0ltcG9ydFR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEltcG9ydEJ1aWxkZXIoKTogSW1wb3J0VHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgaW4gQyBjaGFpbiBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7SW1wb3J0SW5DVHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0SW1wb3J0SW5DQnVpbGRlcigpOiBJbXBvcnRJbkNUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0SW5DVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtFeHBvcnRJbkNUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRFeHBvcnRJbkNCdWlsZGVyKCk6IEV4cG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBFeHBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1dhbGxldCBpbml0aWFsaXphdGlvbiBpcyBub3QgbmVlZGVkJyk7XG4gIH1cbn1cbiJdfQ==
|