PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-polygon/dist/test/unit/transactionBuilder

Просмотр файла: walletInitialization.js

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const should_1 = __importDefault(require("should"));
const sdk_core_1 = require("@bitgo/sdk-core");
const src_1 = require("../../../src");
const testData = __importStar(require("../../resources"));
const getBuilder_1 = require("../../getBuilder");
const statics_1 = require("@bitgo/statics");
describe('Polygon wallet initialization', function () {
    let txBuilder;
    const initTxBuilder = () => {
        txBuilder = new src_1.TransactionBuilder(statics_1.coins.get('tpolygon'));
        txBuilder.fee({
            fee: '10000000000',
            gasLimit: '6800000',
        });
        txBuilder.counter(1);
        txBuilder.type(sdk_core_1.TransactionType.WalletInitialization);
        txBuilder.walletVersion(1);
        txBuilder.contract(testData.WALLET_FACTORY_ADDRESS);
        txBuilder.salt('0x0');
    };
    describe('should build', () => {
        it('an init transaction', async () => {
            initTxBuilder();
            txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
            txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
            txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
            txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
            const tx = await txBuilder.build();
            tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
            const txJson = tx.toJson();
            txJson.gasLimit.should.equal('6800000');
            txJson.gasPrice.should.equal('10000000000');
            should_1.default.equal(txJson.nonce, 1);
            should_1.default.equal(txJson.chainId, '0x13882');
            should_1.default.equal(tx.toBroadcastFormat(), testData.TX_BROADCAST);
        });
        it('a signed init transaction from serialized', async () => {
            const newTxBuilder = new src_1.TransactionBuilder(statics_1.coins.get('tpolygon'));
            newTxBuilder.from(testData.TX_BROADCAST);
            const newTx = await newTxBuilder.build();
            should_1.default.equal(newTx.toBroadcastFormat(), testData.TX_BROADCAST);
            should_1.default.equal(newTx.id, '0x9c955e671f05f8e4e909757675f535bdbcdb95cc66fbb4e897146dec20383303');
            const txJson = newTx.toJson();
            should_1.default.exist(txJson.v);
            should_1.default.exist(txJson.r);
            should_1.default.exist(txJson.s);
            should_1.default.exist(txJson.from);
        });
        it('a wallet initialization transaction with nonce 0', async () => {
            initTxBuilder();
            txBuilder.counter(0);
            txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
            txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
            txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
            txBuilder.sign({ key: testData.PRIVATE_KEY_1 });
            const tx = await txBuilder.build();
            tx.type.should.equal(sdk_core_1.TransactionType.WalletInitialization);
            const txJson = tx.toJson();
            txJson.gasLimit.should.equal('6800000');
            txJson.gasPrice.should.equal('10000000000');
            should_1.default.equal(txJson.nonce, 0);
            should_1.default.equal(txJson.chainId, '0x13882');
        });
        it('an unsigned init transaction from serialized with 0-prefixed address', async () => {
            initTxBuilder();
            txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
            txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
            txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
            const tx = await txBuilder.build();
            const serialized = tx.toBroadcastFormat();
            const newTxBuilder = new src_1.TransactionBuilder(statics_1.coins.get('tpolygon'));
            newTxBuilder.from(serialized);
            const newTx = await newTxBuilder.build();
            should_1.default.equal(newTx.toBroadcastFormat(), serialized);
        });
        it('an unsigned init transaction from serialized', async () => {
            initTxBuilder();
            txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
            txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
            txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
            const tx = await txBuilder.build();
            const serialized = tx.toBroadcastFormat();
            const newTxBuilder = new src_1.TransactionBuilder(statics_1.coins.get('tpolygon'));
            newTxBuilder.from(serialized);
            const newTx = await newTxBuilder.build();
            should_1.default.equal(newTx.toBroadcastFormat(), serialized);
        });
        it('an unsigned transaction with final v check', async () => {
            initTxBuilder();
            txBuilder.owner('0xe6c43626f11312de29b0011fa9da71ea3bba0e9f');
            txBuilder.owner('0x78caeb4527170e52f54d936e4eef6f83250e01bb');
            txBuilder.owner('0xb1938215967408fff7c59c77ae5e5283b55c8e26');
            const tx = await txBuilder.build();
            should_1.default.equal(tx.toJson().v, '0x027127');
        });
        it('wallet deployment transaction for recovery', async () => {
            const txBuilder = (0, getBuilder_1.getBuilder)('tpolygon');
            txBuilder.type(sdk_core_1.TransactionType.RecoveryWalletDeployment);
            txBuilder.data(testData.RECOVERY_WALLET_BYTE_CODE);
            txBuilder.fee({
                eip1559: {
                    maxFeePerGas: '100',
                    maxPriorityFeePerGas: '10',
                },
                fee: '100',
                gasLimit: '10000',
            });
            txBuilder.counter(1);
            const tx = await txBuilder.build();
            const txJson = tx.toJson();
            should_1.default.equal(txJson._type, 'EIP1559');
            should_1.default.equal(txJson.gasLimit, '10000');
            should_1.default.exists(tx.toBroadcastFormat());
        });
        it('fail when data is not passed recovery', async () => {
            const txBuilder = (0, getBuilder_1.getBuilder)('tpolygon');
            txBuilder.type(sdk_core_1.TransactionType.RecoveryWalletDeployment);
            txBuilder.fee({
                eip1559: {
                    maxFeePerGas: '100',
                    maxPriorityFeePerGas: '10',
                },
                fee: '100',
                gasLimit: '10000',
            });
            txBuilder.counter(1);
            await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract call data field');
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3dhbGxldEluaXRpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDhDQUFrRDtBQUNsRCxzQ0FBa0Q7QUFDbEQsMERBQTRDO0FBQzVDLGlEQUE4QztBQUM5Qyw0Q0FBdUM7QUFFdkMsUUFBUSxDQUFDLCtCQUErQixFQUFFO0lBQ3hDLElBQUksU0FBNkIsQ0FBQztJQUNsQyxNQUFNLGFBQWEsR0FBRyxHQUFTLEVBQUU7UUFDL0IsU0FBUyxHQUFHLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzFELFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDWixHQUFHLEVBQUUsYUFBYTtZQUNsQixRQUFRLEVBQUUsU0FBUztTQUNwQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1FBQzVCLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuQyxhQUFhLEVBQUUsQ0FBQztZQUVoQixTQUFTLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENB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Q0gsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9nZXRCdWlsZGVyJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5kZXNjcmliZSgnUG9seWdvbiB3YWxsZXQgaW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgY29uc3QgaW5pdFR4QnVpbGRlciA9ICgpOiB2b2lkID0+IHtcbiAgICB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHBvbHlnb24nKSk7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzY4MDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgdHhCdWlsZGVyLndhbGxldFZlcnNpb24oMSk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRlc3REYXRhLldBTExFVF9GQUNUT1JZX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5zYWx0KCcweDAnKTtcbiAgfTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGJ1aWxkJywgKCkgPT4ge1xuICAgIGl0KCdhbiBpbml0IHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuXG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVlfMSB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmdhc0xpbWl0LnNob3VsZC5lcXVhbCgnNjgwMDAwMCcpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24ubm9uY2UsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5jaGFpbklkLCAnMHgxMzg4MicpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlRYX0JST0FEQ0FTVCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzaWduZWQgaW5pdCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHBvbHlnb24nKSk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5UWF9CUk9BRENBU1QpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5UWF9CUk9BRENBU1QpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LmlkLCAnMHg5Yzk1NWU2NzFmMDVmOGU0ZTkwOTc1NzY3NWY1MzViZGJjZGI5NWNjNjZmYmI0ZTg5NzE0NmRlYzIwMzgzMzAzJyk7XG4gICAgICBjb25zdCB0eEpzb24gPSBuZXdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24udik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnIpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5zKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZnJvbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB3YWxsZXQgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gd2l0aCBub25jZSAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMCk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4ZTZjNDM2MjZmMTEzMTJkZTI5YjAwMTFmYTlkYTcxZWEzYmJhMGU5ZicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweDc4Y2FlYjQ1MjcxNzBlNTJmNTRkOTM2ZTRlZWY2ZjgzMjUwZTAxYmInKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhiMTkzODIxNTk2NzQwOGZmZjdjNTljNzdhZTVlNTI4M2I1NWM4ZTI2Jyk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVlfMSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzY4MDAwMDAnKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZS5zaG91bGQuZXF1YWwoJzEwMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uY2hhaW5JZCwgJzB4MTM4ODInKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiB1bnNpZ25lZCBpbml0IHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCB3aXRoIDAtcHJlZml4ZWQgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHhlNmM0MzYyNmYxMTMxMmRlMjliMDAxMWZhOWRhNzFlYTNiYmEwZTlmJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4NzhjYWViNDUyNzE3MGU1MmY1NGQ5MzZlNGVlZjZmODMyNTBlMDFiYicpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGIxOTM4MjE1OTY3NDA4ZmZmN2M1OWM3N2FlNWU1MjgzYjU1YzhlMjYnKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQoJ3Rwb2x5Z29uJykpO1xuICAgICAgbmV3VHhCdWlsZGVyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCBuZXdUeCA9IGF3YWl0IG5ld1R4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHNlcmlhbGl6ZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIHVuc2lnbmVkIGluaXQgdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGU2YzQzNjI2ZjExMzEyZGUyOWIwMDExZmE5ZGE3MWVhM2JiYTBlOWYnKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHg3OGNhZWI0NTI3MTcwZTUyZjU0ZDkzNmU0ZWVmNmY4MzI1MGUwMWJiJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4YjE5MzgyMTU5Njc0MDhmZmY3YzU5Yzc3YWU1ZTUyODNiNTVjOGUyNicpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgndHBvbHlnb24nKSk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gd2l0aCBmaW5hbCB2IGNoZWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm93bmVyKCcweGU2YzQzNjI2ZjExMzEyZGUyOWIwMDExZmE5ZGE3MWVhM2JiYTBlOWYnKTtcbiAgICAgIHR4QnVpbGRlci5vd25lcignMHg3OGNhZWI0NTI3MTcwZTUyZjU0ZDkzNmU0ZWVmNmY4MzI1MGUwMWJiJyk7XG4gICAgICB0eEJ1aWxkZXIub3duZXIoJzB4YjE5MzgyMTU5Njc0MDhmZmY3YzU5Yzc3YWU1ZTUyODNiNTVjOGUyNicpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS52LCAnMHgwMjcxMjcnKTtcbiAgICB9KTtcblxuICAgIGl0KCd3YWxsZXQgZGVwbG95bWVudCB0cmFuc2FjdGlvbiBmb3IgcmVjb3ZlcnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0cG9seWdvbicpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5SZWNvdmVyeVdhbGxldERlcGxveW1lbnQpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEodGVzdERhdGEuUkVDT1ZFUllfV0FMTEVUX0JZVEVfQ09ERSk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgIG1heEZlZVBlckdhczogJzEwMCcsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZTogJzEwMCcsXG4gICAgICAgIGdhc0xpbWl0OiAnMTAwMDAnLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uX3R5cGUsICdFSVAxNTU5Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmdhc0xpbWl0LCAnMTAwMDAnKTtcbiAgICAgIHNob3VsZC5leGlzdHModHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbCB3aGVuIGRhdGEgaXMgbm90IHBhc3NlZCByZWNvdmVyeScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ3Rwb2x5Z29uJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlJlY292ZXJ5V2FsbGV0RGVwbG95bWVudCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgIG1heEZlZVBlckdhczogJzEwMCcsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZTogJzEwMCcsXG4gICAgICAgIGdhc0xpbWl0OiAnMTAwMDAnLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgY29udHJhY3QgY2FsbCBkYXRhIGZpZWxkJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!