PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-doge/dist/src
Просмотр файла: doge.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Doge = void 0;
const abstract_utxo_1 = require("@bitgo/abstract-utxo");
const utxo_lib_1 = require("@bitgo/utxo-lib");
function parseUnspents(unspents) {
return unspents.map((unspent) => {
if (typeof unspent.value === 'bigint') {
return unspent;
}
if ('valueString' in unspent) {
return { ...unspent, value: BigInt(unspent.valueString) };
}
if (typeof unspent.value === 'number') {
throw new Error(`received Unspent<number> where Unspent<bigint> or UnspentJSON was expected`);
}
throw new Error('invalid unspent');
});
}
function parseTransactionInfo(txInfo) {
if (txInfo.unspents) {
return { ...txInfo, unspents: parseUnspents(txInfo.unspents) };
}
return { ...txInfo, unspents: undefined };
}
function parseTransactionPrebuild(txPrebuild) {
if (txPrebuild?.txInfo) {
return { ...txPrebuild, txInfo: parseTransactionInfo(txPrebuild.txInfo) };
}
return txPrebuild;
}
class Doge extends abstract_utxo_1.AbstractUtxoCoin {
constructor(bitgo, network) {
super(bitgo, network || utxo_lib_1.networks.dogecoin, 'bigint');
}
static createInstance(bitgo) {
return new Doge(bitgo);
}
supportsBlockTarget() {
return true;
}
/* amountType is set in constructor. Functions below override the default TNumber of AbstractUtxoCoin to bigint */
/* postProcessPrebuild, isBitGoTaintedUnspent, verifyCustomChangeKeySignatures do not care whether they receive number or bigint */
createTransactionFromHex(hex) {
return super.createTransactionFromHex(hex);
}
async parseTransaction(params) {
return (await super.parseTransaction({
...params,
txPrebuild: parseTransactionPrebuild(params.txPrebuild),
})) /* cast to satisfy superclass signature */;
}
async verifyTransaction(params) {
return super.verifyTransaction({
...params,
txPrebuild: parseTransactionPrebuild(params.txPrebuild),
});
}
async signTransaction(params) {
return super.signTransaction({
...params,
txPrebuild: {
...params.txPrebuild,
txInfo: params.txPrebuild.txInfo === undefined ? undefined : parseTransactionInfo(params.txPrebuild.txInfo),
},
});
}
async explainTransaction(params) {
return super.explainTransaction({
...params,
txInfo: params.txInfo ? parseTransactionInfo(params.txInfo) : undefined,
});
}
async recoverFromWrongChain(params) {
return super.recoverFromWrongChain(params);
}
}
exports.Doge = Doge;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb2dlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQWM4QjtBQUU5Qiw4Q0FBa0Q7QUFNbEQsU0FBUyxhQUFhLENBQ3BCLFFBQWtEO0lBRWxELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQTZDLEVBQXlCLEVBQUU7UUFDM0YsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsT0FBTyxPQUFnQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLGFBQWEsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FDM0IsTUFBc0Q7SUFFdEQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQy9CLFVBQWtFO0lBRWxFLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sVUFBeUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsTUFBYSxJQUFLLFNBQVEsZ0NBQWdCO0lBQ3hDLFlBQVksS0FBZ0IsRUFBRSxPQUFxQjtRQUNqRCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxtQkFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0hBQWtIO0lBRWxILG1JQUFtSTtJQUVuSSx3QkFBd0IsQ0FBMkMsR0FBVztRQUM1RSxPQUFPLEtBQUssQ0FBQyx3QkFBd0IsQ0FBVSxHQUFHLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixNQUF3QztRQU14QyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7WUFDbkMsR0FBRyxNQUFNO1lBQ1QsVUFBVSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDeEQsQ0FBQyxDQUErQixDQUFDLDBDQUEwQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQ3JCLE1BRWlGO1FBRWpGLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQzdCLEdBQUcsTUFBTTtZQUNULFVBQVUsRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUNuQixNQUF1QztRQUV2QyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDM0IsR0FBRyxNQUFNO1lBQ1QsVUFBVSxFQUFFO2dCQUNWLEdBQUcsTUFBTSxDQUFDLFVBQVU7Z0JBQ3BCLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDNUc7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUN0QixNQUFtSDtRQUVuSCxPQUFPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUM5QixHQUFHLE1BQU07WUFDVCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLE1BQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUMvRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixNQUFvQztRQUVwQyxPQUFPLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUF2RUQsb0JBdUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWJzdHJhY3RVdHhvQ29pbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVXR4b05ldHdvcmssXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zLFxuICBUcmFuc2FjdGlvbkluZm8sXG4gIFRyYW5zYWN0aW9uUHJlYnVpbGQsXG59IGZyb20gJ0BiaXRnby9hYnN0cmFjdC11dHhvJztcbmltcG9ydCB7IEJhc2VDb2luLCBCaXRHb0Jhc2UsIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sIFNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpdGdvLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbnR5cGUgVW5zcGVudEpTT04gPSBiaXRnby5VbnNwZW50PG51bWJlcj4gJiB7IHZhbHVlU3RyaW5nOiBzdHJpbmcgfTtcbnR5cGUgVHJhbnNhY3Rpb25JbmZvSlNPTiA9IFRyYW5zYWN0aW9uSW5mbzxudW1iZXI+ICYgeyB1bnNwZW50czogVW5zcGVudEpTT05bXSB9O1xudHlwZSBUcmFuc2FjdGlvblByZWJ1aWxkSlNPTiA9IFRyYW5zYWN0aW9uUHJlYnVpbGQ8bnVtYmVyPiAmIHsgdHhJbmZvOiBUcmFuc2FjdGlvbkluZm9KU09OIH07XG5cbmZ1bmN0aW9uIHBhcnNlVW5zcGVudHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHVuc3BlbnRzOiBVbnNwZW50SlNPTltdIHwgYml0Z28uVW5zcGVudDxUTnVtYmVyPltdXG4pOiBiaXRnby5VbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiB1bnNwZW50cy5tYXAoKHVuc3BlbnQ6IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj4gfCBVbnNwZW50SlNPTik6IGJpdGdvLlVuc3BlbnQ8YmlnaW50PiA9PiB7XG4gICAgaWYgKHR5cGVvZiB1bnNwZW50LnZhbHVlID09PSAnYmlnaW50Jykge1xuICAgICAgcmV0dXJuIHVuc3BlbnQgYXMgYml0Z28uVW5zcGVudDxiaWdpbnQ+O1xuICAgIH1cbiAgICBpZiAoJ3ZhbHVlU3RyaW5nJyBpbiB1bnNwZW50KSB7XG4gICAgICByZXR1cm4geyAuLi51bnNwZW50LCB2YWx1ZTogQmlnSW50KHVuc3BlbnQudmFsdWVTdHJpbmcpIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdW5zcGVudC52YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVjZWl2ZWQgVW5zcGVudDxudW1iZXI+IHdoZXJlIFVuc3BlbnQ8YmlnaW50PiBvciBVbnNwZW50SlNPTiB3YXMgZXhwZWN0ZWRgKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVuc3BlbnQnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25JbmZvPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eEluZm86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPiB8IFRyYW5zYWN0aW9uSW5mb0pTT05cbik6IFRyYW5zYWN0aW9uSW5mbzxiaWdpbnQ+IHtcbiAgaWYgKHR4SW5mby51bnNwZW50cykge1xuICAgIHJldHVybiB7IC4uLnR4SW5mbywgdW5zcGVudHM6IHBhcnNlVW5zcGVudHModHhJbmZvLnVuc3BlbnRzKSB9O1xuICB9XG4gIHJldHVybiB7IC4uLnR4SW5mbywgdW5zcGVudHM6IHVuZGVmaW5lZCB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4gfCBUcmFuc2FjdGlvblByZWJ1aWxkSlNPTlxuKTogVHJhbnNhY3Rpb25QcmVidWlsZDxiaWdpbnQ+IHtcbiAgaWYgKHR4UHJlYnVpbGQ/LnR4SW5mbykge1xuICAgIHJldHVybiB7IC4uLnR4UHJlYnVpbGQsIHR4SW5mbzogcGFyc2VUcmFuc2FjdGlvbkluZm8odHhQcmVidWlsZC50eEluZm8pIH07XG4gIH1cbiAgcmV0dXJuIHR4UHJlYnVpbGQgYXMgVHJhbnNhY3Rpb25QcmVidWlsZDxiaWdpbnQ+O1xufVxuXG5leHBvcnQgY2xhc3MgRG9nZSBleHRlbmRzIEFic3RyYWN0VXR4b0NvaW4ge1xuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBuZXR3b3JrPzogVXR4b05ldHdvcmspIHtcbiAgICBzdXBlcihiaXRnbywgbmV0d29yayB8fCBuZXR3b3Jrcy5kb2dlY29pbiwgJ2JpZ2ludCcpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UpOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBEb2dlKGJpdGdvKTtcbiAgfVxuXG4gIHN1cHBvcnRzQmxvY2tUYXJnZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiBhbW91bnRUeXBlIGlzIHNldCBpbiBjb25zdHJ1Y3Rvci4gRnVuY3Rpb25zIGJlbG93IG92ZXJyaWRlIHRoZSBkZWZhdWx0IFROdW1iZXIgb2YgQWJzdHJhY3RVdHhvQ29pbiB0byBiaWdpbnQgKi9cblxuICAvKiBwb3N0UHJvY2Vzc1ByZWJ1aWxkLCBpc0JpdEdvVGFpbnRlZFVuc3BlbnQsIHZlcmlmeUN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgZG8gbm90IGNhcmUgd2hldGhlciB0aGV5IHJlY2VpdmUgbnVtYmVyIG9yIGJpZ2ludCAqL1xuXG4gIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihoZXg6IHN0cmluZyk6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHN1cGVyLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPihoZXgpO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IC8qXG4gICAgdGhlIGFjdHVhbCByZXR1cm4gdHlwZSBpcyBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPGJpZ2ludD4+LFxuICAgIGJ1dCB0aGUgc3VwZXJjbGFzcyBzaWduYXR1cmUgY3VycmVudGx5IHJlcXVpcmVzIFROdW1iZXJcbiAgICAgKi9cbiAgUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICAgIHJldHVybiAoYXdhaXQgc3VwZXIucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiBwYXJzZVRyYW5zYWN0aW9uUHJlYnVpbGQocGFyYW1zLnR4UHJlYnVpbGQpLFxuICAgIH0pKSBhcyBQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiAvKiBjYXN0IHRvIHNhdGlzZnkgc3VwZXJjbGFzcyBzaWduYXR1cmUgKi87XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihcbiAgICBwYXJhbXM6XG4gICAgICB8IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICAgICAgfCAoVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+ICYgeyB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkSlNPTiB9KVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gc3VwZXIudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgdHhQcmVidWlsZDogcGFyc2VUcmFuc2FjdGlvblByZWJ1aWxkKHBhcmFtcy50eFByZWJ1aWxkKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihcbiAgICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gc3VwZXIuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgLi4ucGFyYW1zLnR4UHJlYnVpbGQsXG4gICAgICAgIHR4SW5mbzogcGFyYW1zLnR4UHJlYnVpbGQudHhJbmZvID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwYXJzZVRyYW5zYWN0aW9uSW5mbyhwYXJhbXMudHhQcmVidWlsZC50eEluZm8pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihcbiAgICBwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gfCAoRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiAmIHsgdHhJbmZvOiBUcmFuc2FjdGlvbkluZm9KU09OIH0pXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIHJldHVybiBzdXBlci5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgdHhJbmZvOiBwYXJhbXMudHhJbmZvID8gcGFyc2VUcmFuc2FjdGlvbkluZm8ocGFyYW1zLnR4SW5mbyBhcyBUcmFuc2FjdGlvbkluZm9KU09OKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gYmlnaW50PihcbiAgICBwYXJhbXM6IFJlY292ZXJGcm9tV3JvbmdDaGFpbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICAgIHJldHVybiBzdXBlci5yZWNvdmVyRnJvbVdyb25nQ2hhaW4ocGFyYW1zKTtcbiAgfVxufVxuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!