PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-coin-trx/dist/src/lib
Просмотр файла: wrappedBuilder.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.WrappedBuilder = void 0;
const sdk_core_1 = require("@bitgo/sdk-core");
const transactionBuilder_1 = require("./transactionBuilder");
const keyPair_1 = require("./keyPair");
const utils_1 = require("./utils");
const enum_1 = require("./enum");
const contractCallBuilder_1 = require("./contractCallBuilder");
const tokenTransferBuilder_1 = require("./tokenTransferBuilder");
const freezeBalanceTxBuilder_1 = require("./freezeBalanceTxBuilder");
const voteWitnessTxBuilder_1 = require("./voteWitnessTxBuilder");
const unfreezeBalanceTxBuilder_1 = require("./unfreezeBalanceTxBuilder");
const withdrawExpireUnfreezeTxBuilder_1 = require("./withdrawExpireUnfreezeTxBuilder");
const withdrawBuilder_1 = require("./withdrawBuilder");
const delegateResourceTxBuilder_1 = require("./delegateResourceTxBuilder");
const undelegateResourceTxBuilder_1 = require("./undelegateResourceTxBuilder");
/**
* Wrapped Builder class
* This builder is created to maintain compatibility with the current uses of account-lib
* It has an instance of Transaction Builder or Contract Call Builder as required.
*/
class WrappedBuilder extends transactionBuilder_1.TransactionBuilder {
constructor(_coinConfig) {
super(_coinConfig);
// defaults to old builder
this._builder = new transactionBuilder_1.TransactionBuilder(_coinConfig);
}
/**
* Returns a specific builder to create a contract call transaction
*
* @param {Transaction} [tx] The transaction to initialize builder
* @returns {ContractCallBuilder} The specific contract call builder
*/
getContractCallBuilder(tx) {
return this.initializeBuilder(tx, new contractCallBuilder_1.ContractCallBuilder(this._coinConfig));
}
getTransactionBuilder(tx) {
return this.initializeBuilder(tx, new transactionBuilder_1.TransactionBuilder(this._coinConfig));
}
getTokenTransferBuilder(tx) {
return this.initializeBuilder(tx, new tokenTransferBuilder_1.TokenTransferBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create a freeze balance transaction
*
* @param {TransactionReceipt} transaction - The transaction to initialize builder
* @returns {FreezeBalanceTxBuilder} The specific freeze balance builder
*/
getFreezeBalanceV2TxBuilder(tx) {
return this.initializeBuilder(tx, new freezeBalanceTxBuilder_1.FreezeBalanceTxBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create a vote witness transaction
*
* @param {TransactionReceipt} transaction - The transaction to initialize builder
* @returns {VoteWitnessTxBuilder} The specific vote witness builder
*/
getVoteWitnessTxBuilder(tx) {
return this.initializeBuilder(tx, new voteWitnessTxBuilder_1.VoteWitnessTxBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create an unfreeze balance transaction
*
* @param {Transaction} [tx] The transaction to initialize builder
* @returns {UnfreezeBalanceTxBuilder} The specific unfreeze builder
*/
getUnfreezeBalanceV2TxBuilder(tx) {
return this.initializeBuilder(tx, new unfreezeBalanceTxBuilder_1.UnfreezeBalanceTxBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create a withdraw expire unfreeze transaction
*
* @param {Transaction} [tx] The transaction to initialize builder
* @returns {WithdrawExpireUnfreezeTxBuilder} The specific withdraw builder
*/
getWithdrawExpireUnfreezeTxBuilder(tx) {
return this.initializeBuilder(tx, new withdrawExpireUnfreezeTxBuilder_1.WithdrawExpireUnfreezeTxBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create a withdraw balance transaction
*
* @param {Transaction} [tx] The transaction to initialize builder
* @returns {WithdrawBalanceTxBuilder} The specific withdraw balance builder
*/
getWithdrawBalanceTxBuilder(tx) {
return this.initializeBuilder(tx, new withdrawBuilder_1.WithdrawBalanceTxBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create a delegate resource transaction
*
* @param {TransactionReceipt | string} [tx] The transaction to initialize builder
* @returns {DelegateResourceTxBuilder} The specific delegate resource builder
*/
getDelegateResourceTxBuilder(tx) {
return this.initializeBuilder(tx, new delegateResourceTxBuilder_1.DelegateResourceTxBuilder(this._coinConfig));
}
/**
* Returns a specific builder to create a undelegate resource transaction
*
* @param {TransactionReceipt | string} [tx] The transaction to initialize builder
* @returns {UndelegateResourceTxBuilder} The specific delegate resource builder
*/
getUnDelegateResourceTxBuilder(tx) {
return this.initializeBuilder(tx, new undelegateResourceTxBuilder_1.UndelegateResourceTxBuilder(this._coinConfig));
}
initializeBuilder(tx, builder) {
if (tx) {
builder.initBuilder(tx);
}
return builder;
}
/** @inheritdoc */
extendValidTo(extensionMs) {
this._builder.extendValidTo(extensionMs);
}
/** @inheritdoc */
sign(key) {
this._builder.sign(key);
}
/** @inheritdoc */
async build() {
return this._builder.build();
}
/** @inheritdoc */
from(raw) {
this.validateRawTransaction(raw);
const rawDataHex = this.getTxReceipt(raw);
const decodedTx = (0, utils_1.decodeTransaction)(rawDataHex);
const contractType = decodedTx.contractType;
switch (contractType) {
case enum_1.ContractType.Transfer:
case enum_1.ContractType.AccountPermissionUpdate:
this._builder = this.getTransactionBuilder(raw);
return this._builder;
case enum_1.ContractType.TriggerSmartContract:
return this.getContractCallBuilder(raw);
case enum_1.ContractType.FreezeBalanceV2:
return this.getFreezeBalanceV2TxBuilder(raw);
case enum_1.ContractType.VoteWitness:
return this.getVoteWitnessTxBuilder(raw);
case enum_1.ContractType.UnfreezeBalanceV2:
return this.getUnfreezeBalanceV2TxBuilder(raw);
case enum_1.ContractType.WithdrawExpireUnfreeze:
return this.getWithdrawExpireUnfreezeTxBuilder(raw);
case enum_1.ContractType.WithdrawBalance:
return this.getWithdrawBalanceTxBuilder(raw);
case enum_1.ContractType.DelegateResourceContract:
return this.getDelegateResourceTxBuilder(raw);
case enum_1.ContractType.UnDelegateResourceContract:
return this.getUnDelegateResourceTxBuilder(raw);
default:
throw new sdk_core_1.InvalidTransactionError('Invalid transaction type: ' + contractType);
}
}
/**
* Get the raw data hex from a raw transaction
*
* @param {string | { [key: string]: any }} raw the raw transaction as a string or as an object
* @returns {string} the raw data hex
*/
getTxReceipt(raw) {
return raw['raw_data_hex'] || this.getTxReceipt(JSON.parse(raw));
}
/** @inheritdoc */
validateAddress(address) {
this._builder.validateAddress(address);
}
/** @inheritdoc */
validateKey(key) {
try {
new keyPair_1.KeyPair({ prv: key.key });
}
catch (err) {
throw new Error('The provided key is not valid');
}
}
/** @inheritdoc */
validateRawTransaction(rawTransaction) {
this._builder.validateRawTransaction(rawTransaction);
}
/** @inheritdoc */
validateTransaction(transaction) {
this._builder.validateTransaction(transaction);
}
/** @inheritdoc */
validateValue(value) {
this._builder.validateValue(value);
}
}
exports.WrappedBuilder = WrappedBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dyYXBwZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDhDQUFvRjtBQUdwRiw2REFBMEQ7QUFDMUQsdUNBQW9DO0FBQ3BDLG1DQUE0QztBQUM1QyxpQ0FBc0M7QUFDdEMsK0RBQTREO0FBRTVELGlFQUE4RDtBQUM5RCxxRUFBa0U7QUFDbEUsaUVBQThEO0FBQzlELHlFQUFzRTtBQUN0RSx1RkFBb0Y7QUFDcEYsdURBQTZEO0FBQzdELDJFQUF3RTtBQUN4RSwrRUFBNEU7QUFFNUU7Ozs7R0FJRztBQUNILE1BQWEsY0FBZSxTQUFRLHVDQUFrQjtJQUdwRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHVDQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHNCQUFzQixDQUFDLEVBQWdDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLHlDQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUFnQztRQUNwRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsdUJBQXVCLENBQUMsRUFBZ0M7UUFDdEQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksMkNBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkJBQTJCLENBQUMs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QztJQUVELGtCQUFrQjtJQUNsQixXQUFXLENBQUMsR0FBWTtRQUN0QixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFDRCxrQkFBa0I7SUFDbEIsc0JBQXNCLENBQUMsY0FBbUI7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXdCO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBNUxELHdDQTRMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24sIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgZGVjb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IENvbnRyYWN0VHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBDb250cmFjdENhbGxCdWlsZGVyIH0gZnJvbSAnLi9jb250cmFjdENhbGxCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUmVjZWlwdCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Rva2VuVHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXIgfSBmcm9tICcuL2ZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXInO1xuaW1wb3J0IHsgVm90ZVdpdG5lc3NUeEJ1aWxkZXIgfSBmcm9tICcuL3ZvdGVXaXRuZXNzVHhCdWlsZGVyJztcbmltcG9ydCB7IFVuZnJlZXplQmFsYW5jZVR4QnVpbGRlciB9IGZyb20gJy4vdW5mcmVlemVCYWxhbmNlVHhCdWlsZGVyJztcbmltcG9ydCB7IFdpdGhkcmF3RXhwaXJlVW5mcmVlemVUeEJ1aWxkZXIgfSBmcm9tICcuL3dpdGhkcmF3RXhwaXJlVW5mcmVlemVUeEJ1aWxkZXInO1xuaW1wb3J0IHsgV2l0aGRyYXdCYWxhbmNlVHhCdWlsZGVyIH0gZnJvbSAnLi93aXRoZHJhd0J1aWxkZXInO1xuaW1wb3J0IHsgRGVsZWdhdGVSZXNvdXJjZVR4QnVpbGRlciB9IGZyb20gJy4vZGVsZWdhdGVSZXNvdXJjZVR4QnVpbGRlcic7XG5pbXBvcnQgeyBVbmRlbGVnYXRlUmVzb3VyY2VUeEJ1aWxkZXIgfSBmcm9tICcuL3VuZGVsZWdhdGVSZXNvdXJjZVR4QnVpbGRlcic7XG5cbi8qKlxuICogV3JhcHBlZCBCdWlsZGVyIGNsYXNzXG4gKiBUaGlzIGJ1aWxkZXIgaXMgY3JlYXRlZCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGN1cnJlbnQgdXNlcyBvZiBhY2NvdW50LWxpYlxuICogSXQgaGFzIGFuIGluc3RhbmNlIG9mIFRyYW5zYWN0aW9uIEJ1aWxkZXIgb3IgQ29udHJhY3QgQ2FsbCBCdWlsZGVyIGFzIHJlcXVpcmVkLlxuICovXG5leHBvcnQgY2xhc3MgV3JhcHBlZEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF9idWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIC8vIGRlZmF1bHRzIHRvIG9sZCBidWlsZGVyXG4gICAgdGhpcy5fYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzcGVjaWZpYyBidWlsZGVyIHRvIGNyZWF0ZSBhIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW3R4XSBUaGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSBidWlsZGVyXG4gICAqIEByZXR1cm5zIHtDb250cmFjdENhbGxCdWlsZGVyfSBUaGUgc3BlY2lmaWMgY29udHJhY3QgY2FsbCBidWlsZGVyXG4gICAqL1xuICBnZXRDb250cmFjdENhbGxCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogQ29udHJhY3RDYWxsQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBDb250cmFjdENhbGxCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiBUb2tlblRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUb2tlblRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgZnJlZXplIGJhbGFuY2UgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHR9IHRyYW5zYWN0aW9uIC0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7RnJlZXplQmFsYW5jZVR4QnVpbGRlcn0gVGhlIHNwZWNpZmljIGZyZWV6ZSBiYWxhbmNlIGJ1aWxkZXJcbiAgICovXG4gIGdldEZyZWV6ZUJhbGFuY2VWMlR4QnVpbGRlcih0eD86IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IEZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRnJlZXplQmFsYW5jZVR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgdm90ZSB3aXRuZXNzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25SZWNlaXB0fSB0cmFuc2FjdGlvbiAtIFRoZSB0cmFuc2FjdGlvbiB0byBpbml0aWFsaXplIGJ1aWxkZXJcbiAgICogQHJldHVybnMge1ZvdGVXaXRuZXNzVHhCdWlsZGVyfSBUaGUgc3BlY2lmaWMgdm90ZSB3aXRuZXNzIGJ1aWxkZXJcbiAgICovXG4gIGdldFZvdGVXaXRuZXNzVHhCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVm90ZVdpdG5lc3NUeEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVm90ZVdpdG5lc3NUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzcGVjaWZpYyBidWlsZGVyIHRvIGNyZWF0ZSBhbiB1bmZyZWV6ZSBiYWxhbmNlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IFt0eF0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7VW5mcmVlemVCYWxhbmNlVHhCdWlsZGVyfSBUaGUgc3BlY2lmaWMgdW5mcmVlemUgYnVpbGRlclxuICAgKi9cbiAgZ2V0VW5mcmVlemVCYWxhbmNlVjJUeEJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiBVbmZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVW5mcmVlemVCYWxhbmNlVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3BlY2lmaWMgYnVpbGRlciB0byBjcmVhdGUgYSB3aXRoZHJhdyBleHBpcmUgdW5mcmVlemUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gW3R4XSBUaGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSBidWlsZGVyXG4gICAqIEByZXR1cm5zIHtXaXRoZHJhd0V4cGlyZVVuZnJlZXplVHhCdWlsZGVyfSBUaGUgc3BlY2lmaWMgd2l0aGRyYXcgYnVpbGRlclxuICAgKi9cbiAgZ2V0V2l0aGRyYXdFeHBpcmVVbmZyZWV6ZVR4QnVpbGRlcih0eD86IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IFdpdGhkcmF3RXhwaXJlVW5mcmVlemVUeEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZVR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgd2l0aGRyYXcgYmFsYW5jZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSBbdHhdIFRoZSB0cmFuc2FjdGlvbiB0byBpbml0aWFsaXplIGJ1aWxkZXJcbiAgICogQHJldHVybnMge1dpdGhkcmF3QmFsYW5jZVR4QnVpbGRlcn0gVGhlIHNwZWNpZmljIHdpdGhkcmF3IGJhbGFuY2UgYnVpbGRlclxuICAgKi9cbiAgZ2V0V2l0aGRyYXdCYWxhbmNlVHhCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogV2l0aGRyYXdCYWxhbmNlVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFdpdGhkcmF3QmFsYW5jZVR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgZGVsZWdhdGUgcmVzb3VyY2UgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmd9IFt0eF0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7RGVsZWdhdGVSZXNvdXJjZVR4QnVpbGRlcn0gVGhlIHNwZWNpZmljIGRlbGVnYXRlIHJlc291cmNlIGJ1aWxkZXJcbiAgICovXG4gIGdldERlbGVnYXRlUmVzb3VyY2VUeEJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiBEZWxlZ2F0ZVJlc291cmNlVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IERlbGVnYXRlUmVzb3VyY2VUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzcGVjaWZpYyBidWlsZGVyIHRvIGNyZWF0ZSBhIHVuZGVsZWdhdGUgcmVzb3VyY2UgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmd9IFt0eF0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7VW5kZWxlZ2F0ZVJlc291cmNlVHhCdWlsZGVyfSBUaGUgc3BlY2lmaWMgZGVsZWdhdGUgcmVzb3VyY2UgYnVpbGRlclxuICAgKi9cbiAgZ2V0VW5EZWxlZ2F0ZVJlc291cmNlVHhCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVW5kZWxlZ2F0ZVJlc291cmNlVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFVuZGVsZWdhdGVSZXNvdXJjZVR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCdWlsZGVyPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI+KHR4OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGJ1aWxkZXI6IFQpOiBUIHtcbiAgICBpZiAodHgpIHtcbiAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpIHtcbiAgICB0aGlzLl9idWlsZGVyLmV4dGVuZFZhbGlkVG8oZXh0ZW5zaW9uTXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHNpZ24oa2V5OiBCYXNlS2V5KSB7XG4gICAgdGhpcy5fYnVpbGRlci5zaWduKGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fYnVpbGRlci5idWlsZCgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20ocmF3OiBhbnkpIHtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3KTtcbiAgICBjb25zdCByYXdEYXRhSGV4ID0gdGhpcy5nZXRUeFJlY2VpcHQocmF3KTtcbiAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGVUcmFuc2FjdGlvbihyYXdEYXRhSGV4KTtcbiAgICBjb25zdCBjb250cmFjdFR5cGUgPSBkZWNvZGVkVHguY29udHJhY3RUeXBlO1xuICAgIHN3aXRjaCAoY29udHJhY3RUeXBlKSB7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5UcmFuc2ZlcjpcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlOlxuICAgICAgICB0aGlzLl9idWlsZGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIocmF3KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkZXI7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5UcmlnZ2VyU21hcnRDb250cmFjdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udHJhY3RDYWxsQnVpbGRlcihyYXcpO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuRnJlZXplQmFsYW5jZVYyOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcmVlemVCYWxhbmNlVjJUeEJ1aWxkZXIocmF3KTtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlZvdGVXaXRuZXNzOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWb3RlV2l0bmVzc1R4QnVpbGRlcihyYXcpO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVW5mcmVlemVCYWxhbmNlVjI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVuZnJlZXplQmFsYW5jZVYyVHhCdWlsZGVyKHJhdyk7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5XaXRoZHJhd0V4cGlyZVVuZnJlZXplOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRXaXRoZHJhd0V4cGlyZVVuZnJlZXplVHhCdWlsZGVyKHJhdyk7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5XaXRoZHJhd0JhbGFuY2U6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFdpdGhkcmF3QmFsYW5jZVR4QnVpbGRlcihyYXcpO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OlxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWxlZ2F0ZVJlc291cmNlVHhCdWlsZGVyKHJhdyk7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5EZWxlZ2F0ZVJlc291cmNlVHhCdWlsZGVyKHJhdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gdHlwZTogJyArIGNvbnRyYWN0VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmF3IGRhdGEgaGV4IGZyb20gYSByYXcgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9fSByYXcgdGhlIHJhdyB0cmFuc2FjdGlvbiBhcyBhIHN0cmluZyBvciBhcyBhbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHJhdyBkYXRhIGhleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUeFJlY2VpcHQocmF3OiBzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmF3WydyYXdfZGF0YV9oZXgnXSB8fCB0aGlzLmdldFR4UmVjZWlwdChKU09OLnBhcnNlKHJhdyBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBub3QgdmFsaWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9idWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2J1aWxkZXIudmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!