PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/avalanche/typings/tests/utils

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const bn_js_1 = __importDefault(require("bn.js"));
const buffer_1 = require("buffer/");
const avm_1 = require("src/apis/avm");
const common_1 = require("src/common");
const utils_1 = require("../../src/utils");
const utils_2 = require("../../src/utils");
const serialization = utils_1.Serialization.getInstance();
describe("Serialization", () => {
    const address = "X-avax1wst8jt3z3fm9ce0z6akj3266zmgccdp03hjlaj";
    const nodeID = "NodeID-MFrZFVCXPv5iCn6M9K6XduxGTYp891xXZ";
    const privateKey = "PrivateKey-ewoqjP7PxY4yr3iLTpLisriqt94hdyDFNgchSxGGztUrTXtNN";
    const cb58 = "2eNy1mUFdmaxXNj1eQHUe7Np4gju9sJsEtWQ4MX3ToiNKuADed";
    const base64 = "ZnJvbSBzbm93Zmxha2UgdG8gQXZhbGFuY2hl";
    const hex = "66726f6d20736e6f77666c616b6520746f204176616c616e636865";
    const decimalString = "12345";
    const num = 12345;
    const utf8 = "from snowflake to Avalanche";
    const bn = new bn_js_1.default(9000);
    const name = "BaseTx";
    const denomination = buffer_1.Buffer.alloc(1);
    const chainID = "X";
    const hrp = (0, utils_2.getPreferredHRP)(1);
    test("instance of", () => {
        expect(serialization).toBeInstanceOf(utils_1.Serialization);
    });
    describe("typeToBuffer && bufferToType", () => {
        let t;
        let buf;
        test("BN", () => {
            t = "BN";
            const bn = new bn_js_1.default(9000);
            buf = serialization.typeToBuffer(bn, t);
            const b = serialization.bufferToType(buf, t);
            expect(bn.toString()).toEqual(b.toString());
        });
        test("bech32", () => {
            t = "bech32";
            buf = serialization.typeToBuffer(address, t);
            const bech32 = serialization.bufferToType(buf, t, hrp, chainID);
            expect(bech32).toEqual(address);
        });
        test("nodeID", () => {
            t = "nodeID";
            buf = serialization.typeToBuffer(nodeID, t);
            const n = serialization.bufferToType(buf, t);
            expect(nodeID).toEqual(n);
        });
        test("privateKey", () => {
            t = "privateKey";
            buf = serialization.typeToBuffer(privateKey, t);
            const p = serialization.bufferToType(buf, t);
            expect(privateKey).toEqual(p);
        });
        test("cb58", () => {
            t = "cb58";
            buf = serialization.typeToBuffer(cb58, t);
            const c = serialization.bufferToType(buf, t);
            expect(cb58).toEqual(c);
        });
        test("base58", () => {
            t = "cb58";
            buf = serialization.typeToBuffer(cb58, t);
            const c = serialization.bufferToType(buf, t);
            expect(cb58).toEqual(c);
        });
        test("base64", () => {
            t = "base64";
            buf = serialization.typeToBuffer(base64, t);
            const b64 = serialization.bufferToType(buf, t);
            expect(base64).toEqual(b64);
        });
        test("hex", () => {
            t = "hex";
            buf = serialization.typeToBuffer(hex, t);
            const h = serialization.bufferToType(buf, t);
            expect(hex).toEqual(h);
        });
        test("decimalString", () => {
            t = "decimalString";
            buf = serialization.typeToBuffer(decimalString, t);
            const d = serialization.bufferToType(buf, t);
            expect(decimalString).toEqual(d);
        });
        test("number", () => {
            t = "number";
            buf = serialization.typeToBuffer(num, t);
            const nu = serialization.bufferToType(buf, t);
            expect(num).toEqual(nu);
        });
        test("utf8", () => {
            t = "utf8";
            buf = serialization.typeToBuffer(utf8, t);
            const u = serialization.bufferToType(buf, t);
            expect(utf8).toEqual(u);
        });
    });
    describe("encoder && decoder", () => {
        const encoding = "hex";
        test("BN", () => {
            const str = serialization.encoder(bn, encoding, "BN", "BN");
            const decoded = serialization.decoder(str, encoding, "BN", "BN");
            expect(bn.toString()).toEqual(decoded.toString());
        });
        test("bech32", () => {
            const str = serialization.encoder(address, encoding, "bech32", "bech32");
            const decoded = serialization.decoder(str, encoding, "bech32", "bech32", hrp, chainID);
            expect(address).toEqual(decoded);
        });
        test("nodeID", () => {
            const str = serialization.encoder(nodeID, encoding, "nodeID", "nodeID");
            const decoded = serialization.decoder(str, encoding, "nodeID", "nodeID");
            expect(nodeID).toEqual(decoded);
        });
        test("privateKey", () => {
            const str = serialization.encoder(privateKey, encoding, "privateKey", "privateKey");
            const decoded = serialization.decoder(str, encoding, "privateKey", "privateKey");
            expect(privateKey).toEqual(decoded);
        });
        test("cb58", () => {
            const str = serialization.encoder(cb58, encoding, "cb58", "cb58");
            const decoded = serialization.decoder(str, encoding, "cb58", "cb58");
            expect(cb58).toEqual(decoded);
        });
        test("base58", () => {
            const str = serialization.encoder(cb58, encoding, "base58", "base58");
            const decoded = serialization.decoder(str, encoding, "base58", "base58");
            expect(cb58).toEqual(decoded);
        });
        test("base64", () => {
            const str = serialization.encoder(base64, encoding, "base64", "base64");
            const decoded = serialization.decoder(str, encoding, "base64", "base64");
            expect(base64).toEqual(decoded);
        });
        test("hex", () => {
            const str = serialization.encoder(hex, encoding, "hex", "hex");
            const decoded = serialization.decoder(str, encoding, "hex", "hex");
            expect(hex).toEqual(decoded);
        });
        test("utf8", () => {
            const str = serialization.encoder(name, encoding, "utf8", "utf8");
            const decoded = serialization.decoder(str, encoding, "utf8", "utf8");
            expect(name).toBe(decoded);
        });
        test("decimalString", () => {
            const str = serialization.encoder(decimalString, encoding, "decimalString", "decimalString");
            const decoded = serialization.decoder(str, encoding, "decimalString", "decimalString");
            expect(decimalString).toBe(decoded);
        });
        test("number", () => {
            const str = serialization.encoder(num, encoding, "number", "number");
            const decoded = serialization.decoder(str, encoding, "number", "number");
            expect(num).toBe(decoded);
        });
        test("Buffer", () => {
            const str = serialization.encoder(denomination, encoding, "Buffer", "decimalString", 1);
            const decoded = serialization.decoder(str, encoding, "decimalString", "Buffer", 1);
            expect(denomination.toString("hex")).toBe(decoded.toString("hex"));
        });
    });
    describe("serialize && deserialize", () => {
        const networkID = 1337;
        const m = "2Zc54v4ek37TEwu4LiV3j41PUMRd6acDDU3ZCVSxE7X";
        const mHex = "66726f6d20736e6f77666c616b6520746f206176616c616e636865";
        const memo = serialization.typeToBuffer(m, "cb58");
        const cChainID = "2CA6j5zYzasynPsFeNoqWkmTCt3VScMvXUZHbfDJ8k3oGzAPtU";
        const cChainIDHex = "9d0775f450604bd2fbc49ce0c5c1c6dfeb2dc2acb8c92c26eeae6e6df4502b19";
        const hex = "hex";
        const cb58 = "cb58";
        const utf8 = "utf8";
        const amount = new bn_js_1.default(0);
        const amountHex = "0000000000000000";
        const bytes = "0000000000000000000000000000000000000000";
        const xAddress = "X-avax1pdurs53v6vtue9sw7am9ayjqh9mcnqe9s80sgn";
        const xAddressHex = "0b7838522cd317cc960ef7765e9240b977898325";
        const address = "X-local18jma8ppw3nhx5r4ap8clazz0dps7rv5u00z96u";
        const bech32 = "bech32";
        const addressBuf = serialization.typeToBuffer(address, bech32);
        const threshold = 1;
        const thresholdHex = "00000001";
        const minters = [xAddress];
        const assetID = serialization.typeToBuffer(cChainID, cb58);
        const assetidHex = "9d0775f450604bd2fbc49ce0c5c1c6dfeb2dc2acb8c92c26eeae6e6df4502b19";
        const payload = buffer_1.Buffer.from("From snowflake to Avalanche");
        const groupIDHex = "00003039";
        const payloadHex = "46726f6d20736e6f77666c616b6520746f204176616c616e636865";
        const locktime = new bn_js_1.default(0);
        const locktimeHex = "0000000000000000";
        describe("AVM", () => {
            const blockchainIDCB58 = serialization.typeToBuffer(utils_1.Defaults.network[12345]["X"].blockchainID, cb58);
            const blockchainIDHex = "d891ad56056d9c01f18f43f58b5c784ad07a4a49cf3d1f11623804b5cba2c6bf";
            const defaultNetworkIDHex = "00000001";
            const localNetworkIDHex = "00000539";
            const outs = [];
            const ins = [];
            const vm = "AVM";
            const groupID = 12345;
            test("GenesisAsset", () => {
                const assetAlias = "asset1";
                const name = "asset1";
                const symbol = "MFCA";
                const nameHex = serialization.encoder(name, hex, utf8, utf8);
                const symbolHex = serialization.encoder(symbol, hex, utf8, utf8);
                const denomination = 1;
                const vcapSecpOutput = new avm_1.SECPTransferOutput(amount, [addressBuf], locktime, threshold);
                const initialStates = new avm_1.InitialStates();
                initialStates.addOutput(vcapSecpOutput);
                const genesisasset = new avm_1.GenesisAsset(assetAlias, name, symbol, denomination, initialStates, memo);
                const genesisasset2 = new avm_1.GenesisAsset();
                const notes = "AVM GenesisAsset";
                const serialized = serialization.serialize(genesisasset, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("GenesisAsset");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["networkID"]).toBe(defaultNetworkIDHex);
                expect(serialized.fields["name"]).toBe(nameHex);
                expect(serialized.fields["symbol"]).toBe(symbolHex);
                expect(serialized.fields["denomination"]).toBe("01");
                expect(serialized.fields["memo"]).toBe(mHex);
                serialization.deserialize(serialized, genesisasset2);
                expect(genesisasset2.getTypeName()).toBe("GenesisAsset");
                expect(genesisasset2.getTypeID()).toBeUndefined();
                expect(genesisasset2.getCodecID()).toBeUndefined();
                expect(genesisasset2.getBlockchainID().toString(hex)).toBe("1010101010101010101010101010101010101010101010101010101010101010");
                expect(genesisasset2.getNetworkID()).toBe(utils_1.DefaultNetworkID);
                expect(genesisasset2.getOuts()).toStrictEqual([]);
                expect(genesisasset2.getIns()).toStrictEqual([]);
                expect(genesisasset2.getAssetAlias()).toBe(assetAlias);
                expect(genesisasset2.getName()).toBe(name);
                expect(genesisasset2.getSymbol()).toBe(symbol);
                expect(genesisasset2.getDenomination()).toBe(denomination);
                expect(serialization.bufferToType(genesisasset2.getMemo(), cb58)).toBe(m);
                expect(genesisasset2.toBuffer().toString(hex)).toBe(genesisasset.toBuffer().toString(hex));
                expect(genesisasset2.toString()).toBe(genesisasset.toString());
            });
            test("BaseTx", () => {
                const basetx = new avm_1.BaseTx(networkID, blockchainIDCB58, outs, ins, memo);
                const basetx2 = new avm_1.BaseTx();
                const notes = "AVM BaseTx";
                const serialized = serialization.serialize(basetx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("BaseTx");
                expect(serialized.fields["_typeID"]).toBe(0);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["blockchainID"]).toBe(blockchainIDHex);
                expect(serialized.fields["networkID"]).toBe(localNetworkIDHex);
                expect(serialized.fields["outs"]).toStrictEqual([]);
                expect(serialized.fields["ins"]).toStrictEqual([]);
                expect(serialized.fields["memo"]).toBe(mHex);
                serialization.deserialize(serialized, basetx2);
                expect(basetx2.getTypeName()).toBe("BaseTx");
                expect(basetx2.getTypeID()).toBe(0);
                expect(basetx2.getCodecID()).toBe(0);
                expect(basetx2.getBlockchainID().toString(hex)).toBe(blockchainIDHex);
                expect(basetx2.getNetworkID()).toBe(networkID);
                expect(basetx2.getOuts()).toStrictEqual([]);
                expect(basetx2.getIns()).toStrictEqual([]);
                expect(serialization.bufferToType(basetx2.getMemo(), cb58)).toBe(m);
                expect(basetx2.toBuffer().toString(hex)).toBe(basetx.toBuffer().toString(hex));
                expect(basetx2.toString()).toBe(basetx.toString());
            });
            test("CreateAssetTx", () => {
                const name = "Test Token";
                const nameHex = "5465737420546f6b656e";
                const symbol = "TEST";
                const symbolHex = "54455354";
                const denomination = 1;
                const denominationHex = "01";
                const initialState = new avm_1.InitialStates();
                const createassettx = new avm_1.CreateAssetTx(networkID, blockchainIDCB58, outs, ins, memo, name, symbol, denomination, initialState);
                const createassettx2 = new avm_1.CreateAssetTx();
                const notes = "AVM CreateAssetTx";
                const serialized = serialization.serialize(createassettx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("CreateAssetTx");
                expect(serialized.fields["_typeID"]).toBe(1);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["blockchainID"]).toBe(blockchainIDHex);
                expect(serialized.fields["networkID"]).toBe(localNetworkIDHex);
                expect(serialized.fields["outs"]).toStrictEqual([]);
                expect(serialized.fields["ins"]).toStrictEqual([]);
                expect(serialized.fields["memo"]).toBe(mHex);
                expect(serialized.fields["name"]).toBe(nameHex);
                expect(serialized.fields["symbol"]).toBe(symbolHex);
                expect(serialized.fields["denomination"]).toBe(denominationHex);
                serialization.deserialize(serialized, createassettx2);
                expect(createassettx2.getTypeName()).toBe("CreateAssetTx");
                expect(createassettx2.getTypeID()).toBe(1);
                expect(createassettx2.getCodecID()).toBe(0);
                expect(createassettx2.getBlockchainID().toString(hex)).toBe(blockchainIDHex);
                expect(createassettx2.getNetworkID()).toBe(networkID);
                expect(createassettx2.getOuts()).toStrictEqual([]);
                expect(createassettx2.getIns()).toStrictEqual([]);
                expect(createassettx2.getName()).toBe(name);
                expect(createassettx2.getSymbol()).toBe(symbol);
                expect(createassettx2.getDenomination()).toBe(denomination);
                expect(serialization.bufferToType(createassettx2.getMemo(), cb58)).toBe(m);
                expect(createassettx2.toBuffer().toString(hex)).toBe(createassettx.toBuffer().toString(hex));
                expect(createassettx2.toString()).toBe(createassettx.toString());
            });
            test("OperationTx", () => {
                const ops = [];
                const operationtx = new avm_1.OperationTx(networkID, blockchainIDCB58, outs, ins, memo, ops);
                const operationtx2 = new avm_1.OperationTx();
                const notes = "AVM OperationTx";
                const serialized = serialization.serialize(operationtx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("OperationTx");
                expect(serialized.fields["_typeID"]).toBe(2);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["blockchainID"]).toBe(blockchainIDHex);
                expect(serialized.fields["networkID"]).toBe(localNetworkIDHex);
                expect(serialized.fields["outs"]).toStrictEqual([]);
                expect(serialized.fields["ins"]).toStrictEqual([]);
                expect(serialized.fields["memo"]).toBe(mHex);
                expect(serialized.fields["ops"]).toStrictEqual([]);
                serialization.deserialize(serialized, operationtx2);
                expect(operationtx2.getTypeName()).toBe("OperationTx");
                expect(operationtx2.getTypeID()).toBe(2);
                expect(operationtx2.getCodecID()).toBe(0);
                expect(operationtx2.getBlockchainID().toString(hex)).toBe(blockchainIDHex);
                expect(operationtx2.getNetworkID()).toBe(networkID);
                expect(operationtx2.getOuts()).toStrictEqual([]);
                expect(operationtx2.getIns()).toStrictEqual([]);
                expect(operationtx2.getOperations()).toStrictEqual([]);
                expect(serialization.bufferToType(operationtx2.getMemo(), cb58)).toBe(m);
                expect(operationtx2.toBuffer().toString(hex)).toBe(operationtx.toBuffer().toString(hex));
                expect(operationtx2.toString()).toBe(operationtx.toString());
            });
            test("ImportTx", () => {
                const sourceChain = serialization.typeToBuffer(cChainID, cb58);
                const importIns = [];
                const importtx = new avm_1.ImportTx(networkID, blockchainIDCB58, outs, ins, memo, sourceChain, importIns);
                const importtx2 = new avm_1.ImportTx();
                const notes = "AVM ImportTx";
                const serialized = serialization.serialize(importtx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("ImportTx");
                expect(serialized.fields["_typeID"]).toBe(3);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["blockchainID"]).toBe(blockchainIDHex);
                expect(serialized.fields["networkID"]).toBe(localNetworkIDHex);
                expect(serialized.fields["outs"]).toStrictEqual([]);
                expect(serialized.fields["ins"]).toStrictEqual([]);
                expect(serialized.fields["memo"]).toBe(mHex);
                expect(serialized.fields["sourceChain"]).toBe(cChainIDHex);
                expect(serialized.fields["importIns"]).toStrictEqual([]);
                serialization.deserialize(serialized, importtx2);
                expect(importtx2.getTypeName()).toBe("ImportTx");
                expect(importtx2.getTypeID()).toBe(3);
                expect(importtx2.getCodecID()).toBe(0);
                expect(importtx2.getBlockchainID().toString(hex)).toBe(blockchainIDHex);
                expect(importtx2.getNetworkID()).toBe(networkID);
                expect(importtx2.getOuts()).toStrictEqual([]);
                expect(importtx2.getIns()).toStrictEqual([]);
                expect(importtx2.getSourceChain().toString(hex)).toBe(sourceChain.toString(hex));
                expect(importtx2.getImportInputs()).toStrictEqual([]);
                expect(serialization.bufferToType(importtx2.getMemo(), cb58)).toBe(m);
                expect(importtx2.toBuffer().toString(hex)).toBe(importtx.toBuffer().toString(hex));
                expect(importtx2.toString()).toBe(importtx.toString());
            });
            test("ExportTx", () => {
                const destinationChain = serialization.typeToBuffer(cChainID, cb58);
                const exportOuts = [];
                const exporttx = new avm_1.ExportTx(networkID, blockchainIDCB58, outs, ins, memo, destinationChain, exportOuts);
                const exporttx2 = new avm_1.ExportTx();
                const notes = "AVM ExportTx";
                const serialized = serialization.serialize(exporttx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("ExportTx");
                expect(serialized.fields["_typeID"]).toBe(4);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["blockchainID"]).toBe(blockchainIDHex);
                expect(serialized.fields["networkID"]).toBe(localNetworkIDHex);
                expect(serialized.fields["outs"]).toStrictEqual([]);
                expect(serialized.fields["ins"]).toStrictEqual([]);
                expect(serialized.fields["memo"]).toBe(mHex);
                expect(serialized.fields["destinationChain"]).toBe(cChainIDHex);
                expect(serialized.fields["exportOuts"]).toStrictEqual([]);
                serialization.deserialize(serialized, exporttx2);
                expect(exporttx2.getTypeName()).toBe("ExportTx");
                expect(exporttx2.getTypeID()).toBe(4);
                expect(exporttx2.getCodecID()).toBe(0);
                expect(exporttx2.getBlockchainID().toString(hex)).toBe(blockchainIDHex);
                expect(exporttx2.getNetworkID()).toBe(networkID);
                expect(exporttx2.getOuts()).toStrictEqual([]);
                expect(exporttx2.getIns()).toStrictEqual([]);
                expect(exporttx2.getDestinationChain().toString(hex)).toBe(destinationChain.toString(hex));
                expect(exporttx2.getExportOutputs()).toStrictEqual([]);
                expect(serialization.bufferToType(exporttx2.getMemo(), cb58)).toBe(m);
                expect(exporttx2.toBuffer().toString(hex)).toBe(exporttx.toBuffer().toString(hex));
                expect(exporttx2.toString()).toBe(exporttx.toString());
            });
            test("SECPCredential", () => {
                const sigArray = [];
                const secpcredential = new avm_1.SECPCredential(sigArray);
                const secpcredential2 = new avm_1.SECPCredential();
                const notes = "AVM SECPCredential";
                const serialized = serialization.serialize(secpcredential, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("SECPCredential");
                expect(serialized.fields["_typeID"]).toBe(9);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["sigArray"]).toStrictEqual([]);
                serialization.deserialize(serialized, secpcredential2);
                expect(secpcredential2.getTypeName()).toBe("SECPCredential");
                expect(secpcredential2.getTypeID()).toBe(9);
                expect(secpcredential2.getCodecID()).toBe(0);
                expect(secpcredential2.getCredentialID()).toBe(9);
                expect(secpcredential2.toBuffer().toString(hex)).toBe(secpcredential.toBuffer().toString(hex));
                expect(secpcredential2.toString()).toBe(secpcredential.toString());
            });
            test("NFTCredential", () => {
                const sigArray = [];
                const nftcredential = new avm_1.NFTCredential(sigArray);
                const nftcredential2 = new avm_1.NFTCredential();
                const notes = "AVM NFTCredential";
                const serialized = serialization.serialize(nftcredential, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("NFTCredential");
                expect(serialized.fields["_typeID"]).toBe(14);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["sigArray"]).toStrictEqual([]);
                serialization.deserialize(serialized, nftcredential2);
                expect(nftcredential2.getTypeName()).toBe("NFTCredential");
                expect(nftcredential2.getTypeID()).toBe(14);
                expect(nftcredential2.getCodecID()).toBe(0);
                expect(nftcredential2.getCredentialID()).toBe(14);
                expect(nftcredential2.toBuffer().toString(hex)).toBe(nftcredential.toBuffer().toString(hex));
                expect(nftcredential2.toString()).toBe(nftcredential.toString());
            });
            test("InitialStates", () => {
                const initialStates = new avm_1.InitialStates();
                const initialStates2 = new avm_1.InitialStates();
                const notes = "AVM InitialStates";
                const serialized = serialization.serialize(initialStates, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("InitialStates");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["fxs"]).toStrictEqual({});
                serialization.deserialize(serialized, initialStates2);
                expect(initialStates2.getTypeName()).toBe("InitialStates");
                expect(initialStates2.getTypeID()).toBeUndefined();
                expect(initialStates2.getCodecID()).toBeUndefined();
                expect(initialStates2.toBuffer().toString(hex)).toBe(initialStates.toBuffer().toString(hex));
                expect(initialStates2.toString()).toBe(initialStates.toString());
            });
            test("SECPTransferInput", () => {
                const secptransferinput = new avm_1.SECPTransferInput();
                const secptransferinput2 = new avm_1.SECPTransferInput();
                const notes = "AVM SECPTransferInput";
                const serialized = serialization.serialize(secptransferinput, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("SECPTransferInput");
                expect(serialized.fields["_typeID"]).toBe(5);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["sigIdxs"]).toStrictEqual([]);
                expect(serialized.fields["amount"]).toBe(amountHex);
                serialization.deserialize(serialized, secptransferinput2);
                expect(secptransferinput2.getTypeName()).toBe("SECPTransferInput");
                expect(secptransferinput2.getTypeID()).toBe(5);
                expect(secptransferinput2.getCodecID()).toBe(0);
                expect(secptransferinput2.getAmount().toString()).toBe(amount.toString());
                expect(secptransferinput2.getSigIdxs()).toStrictEqual([]);
                expect(secptransferinput2.toBuffer().toString(hex)).toBe(secptransferinput.toBuffer().toString(hex));
                expect(secptransferinput2.toString()).toBe(secptransferinput.toString());
            });
            test("MinterSet", () => {
                const minterset = new avm_1.MinterSet(threshold, minters);
                const minterset2 = new avm_1.MinterSet();
                const notes = "AVM MinterSet";
                const serialized = serialization.serialize(minterset, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("MinterSet");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["threshold"]).toBe(thresholdHex);
                expect(serialized.fields["minters"]).toStrictEqual([xAddressHex]);
                serialization.deserialize(serialized, minterset2);
                expect(minterset2.getTypeName()).toBe("MinterSet");
                expect(minterset2.getTypeID()).toBeUndefined();
                expect(minterset2.getCodecID()).toBeUndefined();
                expect(minterset2.getThreshold()).toBe(threshold);
                expect(minterset2.getMinters()).toStrictEqual([
                    serialization.typeToBuffer(xAddressHex, hex)
                ]);
            });
            test("TransferableOperation", () => {
                const secpmintoutput = new avm_1.SECPMintOutput();
                const transferOutput = new avm_1.SECPTransferOutput();
                const utxoids = [];
                const secpmintoperation = new avm_1.SECPMintOperation(secpmintoutput, transferOutput);
                const transferableoperation = new avm_1.TransferableOperation(assetID, utxoids, secpmintoperation);
                const transferableoperation2 = new avm_1.TransferableOperation();
                const notes = "AVM TransferableOperation";
                const serialized = serialization.serialize(transferableoperation, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("TransferableOperation");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["assetID"]).toBe(assetidHex);
                expect(serialized.fields["utxoIDs"]).toStrictEqual([]);
                serialization.deserialize(serialized, transferableoperation2);
                expect(transferableoperation2.getTypeName()).toBe("TransferableOperation");
                expect(transferableoperation2.getTypeID()).toBeUndefined();
                expect(transferableoperation2.getCodecID()).toBeUndefined();
                expect(transferableoperation2.getAssetID().toString(hex)).toBe(assetID.toString(hex));
                expect(transferableoperation2.getUTXOIDs()).toStrictEqual([]);
                expect(transferableoperation2.toBuffer().toString(hex)).toBe(transferableoperation.toBuffer().toString(hex));
                expect(transferableoperation2.toString()).toBe(transferableoperation.toString());
            });
            test("SECPMintOperation", () => {
                const secpmintoutput = new avm_1.SECPMintOutput();
                const secptransferoutput = new avm_1.SECPTransferOutput();
                const secpmintoperation = new avm_1.SECPMintOperation(secpmintoutput, secptransferoutput);
                const secpmintoperation2 = new avm_1.SECPMintOperation();
                const notes = "AVM SECPMintOperation";
                const serialized = serialization.serialize(secpmintoperation, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("SECPMintOperation");
                expect(serialized.fields["_typeID"]).toBe(8);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["sigIdxs"]).toStrictEqual([]);
                serialization.deserialize(serialized, secpmintoperation2);
                expect(secpmintoperation2.getTypeName()).toBe("SECPMintOperation");
                expect(secpmintoperation2.getTypeID()).toBe(8);
                expect(secpmintoperation2.getCodecID()).toBe(0);
                expect(secpmintoperation2.getSigIdxs()).toStrictEqual([]);
                expect(secpmintoperation2.toBuffer().toString(hex)).toBe(secpmintoperation.toBuffer().toString(hex));
                expect(secpmintoperation2.toString()).toBe(secpmintoperation.toString());
            });
            test("NFTMintOperation", () => {
                // TODO - fix this type mismatch
                // Error - Serializable.deserialize: _typeName mismatch -- expected: OutputOwners -- received: NFTMintOutput
                // const nftmintoutput: NFTMintOutput = new NFTMintOutput()
                // const nftmintoperation: NFTMintOperation = new NFTMintOperation(groupID, payload, [nftmintoutput])
                // const nftmintoperation2: NFTMintOperation = new NFTMintOperation()
                // const notes: string = "AVM NFTMintOperation"
                // const serialized: Serialized = serialization.serialize(nftmintoperation, vm, hex, notes)
                // expect(serialized.vm).toBe(vm)
                // expect(serialized.encoding).toBe(hex)
                // expect(serialized.notes).toBe(notes)
                // expect(serialized.fields["_typeName"]).toBe("NFTMintOperation")
                // expect(serialized.fields["_typeID"]).toBe(12)
                // expect(serialized.fields["_codecID"]).toBe(0)
                // expect(serialized.fields["sigIdxs"]).toStrictEqual([])
                // expect(serialized.fields["groupID"]).toBe(groupIDHex)
                // expect(serialized.fields["payload"]).toBe(payloadHex)
                // serialization.deserialize(serialized, nftmintoperation2)
                // expect(nftmintoperation2.getTypeName()).toBe("NFTMintOperation")
                // expect(nftmintoperation2.getTypeID()).toBe(12)
                // expect(nftmintoperation2.getCodecID()).toBe(0)
                // expect(nftmintoperation2.getSigIdxs()).toStrictEqual([])
                // expect(nftmintoperation2.getGroupID()).toBe(groupIDHex)
                // expect(nftmintoperation2.getPayload().toString("hex")).toBe(payload.toString("hex"))
                // expect(nftmintoperation2.toBuffer().toString("hex")).toBe(nftmintoperation.toBuffer().toString("hex"))
                // expect(nftmintoperation2.toString()).toBe(nftmintoperation.toString())
            });
            test("NFTTransferOperation", () => {
                const nfttransferoutput = new avm_1.NFTTransferOutput(groupID, payload);
                const nfttransferoperation = new avm_1.NFTTransferOperation(nfttransferoutput);
                const nfttransferoperation2 = new avm_1.NFTTransferOperation();
                const notes = "AVM NFTTransferOperation";
                const serialized = serialization.serialize(nfttransferoperation, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("NFTTransferOperation");
                expect(serialized.fields["_typeID"]).toBe(13);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["sigIdxs"]).toStrictEqual([]);
                serialization.deserialize(serialized, nfttransferoperation2);
                expect(nfttransferoperation2.getTypeName()).toBe("NFTTransferOperation");
                expect(nfttransferoperation2.getTypeID()).toBe(13);
                expect(nfttransferoperation2.getCodecID()).toBe(0);
                expect(nfttransferoperation2.getOperationID()).toBe(13);
                expect(nfttransferoperation2.getCredentialID()).toBe(14);
                expect(nfttransferoperation2.getOutput().toBuffer().toString(hex)).toBe(nfttransferoutput.toBuffer().toString(hex));
                expect(nfttransferoperation2.getSigIdxs()).toStrictEqual([]);
                expect(nfttransferoperation2.toBuffer().toString(hex)).toBe(nfttransferoperation.toBuffer().toString(hex));
                expect(nfttransferoperation2.toString()).toBe(nfttransferoperation.toString());
            });
            test("UTXOID", () => {
                const bsize = "00000024";
                const size = 36;
                const bytes = "000000000000000000000000000000000000000000000000000000000000000000000000";
                const utxoid = new avm_1.UTXOID();
                const utxoid2 = new avm_1.UTXOID();
                const notes = "AVM UTXOID";
                const serialized = serialization.serialize(utxoid, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("UTXOID");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["bsize"]).toBe(bsize);
                expect(serialized.fields["bytes"]).toBe(bytes);
                serialization.deserialize(serialized, utxoid2);
                expect(utxoid2.getTypeName()).toBe("UTXOID");
                expect(utxoid2.getTypeID()).toBeUndefined();
                expect(utxoid2.getCodecID()).toBeUndefined();
                expect(utxoid2.getSize()).toBe(size);
                expect(utxoid2.toBuffer().toString(hex)).toBe(utxoid.toBuffer().toString(hex));
                expect(utxoid2.toString()).toBe(utxoid2.toString());
            });
            test("TransferableOutput", () => {
                const secpmintoutput = new avm_1.SECPMintOutput();
                const transferableoutput = new avm_1.TransferableOutput(assetID, secpmintoutput);
                const transferableoutput2 = new avm_1.TransferableOutput();
                const notes = "AVM TransferableOutput";
                const serialized = serialization.serialize(transferableoutput, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("TransferableOutput");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["assetID"]).toBe(assetidHex);
                serialization.deserialize(serialized, transferableoutput2);
                expect(transferableoutput2.getTypeName()).toBe("TransferableOutput");
                expect(transferableoutput2.getTypeID()).toBeUndefined();
                expect(transferableoutput2.getCodecID()).toBeUndefined();
                expect(transferableoutput2.getAssetID().toString(hex)).toBe(assetID.toString(hex));
                expect(transferableoutput2.toBuffer().toString(hex)).toBe(transferableoutput.toBuffer().toString(hex));
                expect(transferableoutput2.toString()).toBe(transferableoutput.toString());
            });
            test("SECPTransferOutput", () => {
                const secptransferoutput = new avm_1.SECPTransferOutput();
                const secptransferoutput2 = new avm_1.SECPTransferOutput();
                const notes = "AVM SECPTransferOutput";
                const serialized = serialization.serialize(secptransferoutput, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("SECPTransferOutput");
                expect(serialized.fields["_typeID"]).toBe(7);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["locktime"]).toBe(locktimeHex);
                expect(serialized.fields["threshold"]).toBe(thresholdHex);
                expect(serialized.fields["addresses"]).toStrictEqual([]);
                expect(serialized.fields["amount"]).toBe(amountHex);
                serialization.deserialize(serialized, secptransferoutput2);
                expect(secptransferoutput2.getTypeName()).toBe("SECPTransferOutput");
                expect(secptransferoutput2.getTypeID()).toBe(7);
                expect(secptransferoutput2.getCodecID()).toBe(0);
                expect(secptransferoutput2.getLocktime().toString()).toBe(locktime.toString());
                expect(secptransferoutput2.getThreshold()).toBe(threshold);
                expect(secptransferoutput2.getAddresses()).toStrictEqual([]);
                expect(secptransferoutput2.getAmount().toString()).toStrictEqual(amount.toString());
                expect(secptransferoutput2.toBuffer().toString(hex)).toBe(secptransferoutput.toBuffer().toString(hex));
                expect(secptransferoutput2.toString()).toBe(secptransferoutput.toString());
            });
            test("SECPMintOutput", () => {
                const secpmintoutput = new avm_1.SECPMintOutput();
                const secpmintoutput2 = new avm_1.SECPMintOutput();
                const notes = "AVM SECPMintOutput";
                const serialized = serialization.serialize(secpmintoutput, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("SECPMintOutput");
                expect(serialized.fields["_typeID"]).toBe(6);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["locktime"]).toBe(locktimeHex);
                expect(serialized.fields["threshold"]).toBe(thresholdHex);
                expect(serialized.fields["addresses"]).toStrictEqual([]);
                serialization.deserialize(serialized, secpmintoutput2);
                expect(secpmintoutput2.getTypeName()).toBe("SECPMintOutput");
                expect(secpmintoutput2.getTypeID()).toBe(6);
                expect(secpmintoutput2.getCodecID()).toBe(0);
                expect(secpmintoutput2.getLocktime().toString()).toBe(locktime.toString());
                expect(secpmintoutput2.getThreshold()).toBe(threshold);
                expect(secpmintoutput2.getAddresses()).toStrictEqual([]);
                expect(secpmintoutput2.toBuffer().toString(hex)).toBe(secpmintoutput.toBuffer().toString(hex));
                expect(secpmintoutput2.toString()).toBe(secpmintoutput.toString());
            });
            test("NFTMintOutput", () => {
                const nftmintoutput = new avm_1.NFTMintOutput(groupID);
                const nftmintoutput2 = new avm_1.NFTMintOutput();
                const notes = "AVM NFTMintOutput";
                const serialized = serialization.serialize(nftmintoutput, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("NFTMintOutput");
                expect(serialized.fields["_typeID"]).toBe(10);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["locktime"]).toBe(locktimeHex);
                expect(serialized.fields["threshold"]).toBe(thresholdHex);
                expect(serialized.fields["addresses"]).toStrictEqual([]);
                expect(serialized.fields["groupID"]).toBe(groupIDHex);
                serialization.deserialize(serialized, nftmintoutput2);
                expect(nftmintoutput2.getTypeName()).toBe("NFTMintOutput");
                expect(nftmintoutput2.getTypeID()).toBe(10);
                expect(nftmintoutput2.getCodecID()).toBe(0);
                expect(nftmintoutput2.getLocktime().toString()).toBe(locktime.toString());
                expect(nftmintoutput2.getThreshold()).toBe(threshold);
                expect(nftmintoutput2.getAddresses()).toStrictEqual([]);
                expect(nftmintoutput2.getGroupID()).toBe(groupID);
                expect(nftmintoutput2.toBuffer().toString(hex)).toBe(nftmintoutput.toBuffer().toString(hex));
                expect(nftmintoutput2.toString()).toBe(nftmintoutput.toString());
            });
            test("NFTTransferOutput", () => {
                const nfttransferoutput = new avm_1.NFTTransferOutput(groupID, payload);
                const nfttransferoutput2 = new avm_1.NFTTransferOutput();
                const notes = "AVM NFTTransferOutput";
                const serialized = serialization.serialize(nfttransferoutput, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("NFTTransferOutput");
                expect(serialized.fields["_typeID"]).toBe(11);
                expect(serialized.fields["_codecID"]).toBe(0);
                expect(serialized.fields["locktime"]).toBe(locktimeHex);
                expect(serialized.fields["threshold"]).toBe(thresholdHex);
                expect(serialized.fields["addresses"]).toStrictEqual([]);
                expect(serialized.fields["groupID"]).toBe(groupIDHex);
                expect(serialized.fields["payload"]).toBe(payloadHex);
                serialization.deserialize(serialized, nfttransferoutput2);
                expect(nfttransferoutput2.getTypeName()).toBe("NFTTransferOutput");
                expect(nfttransferoutput2.getTypeID()).toBe(11);
                expect(nfttransferoutput2.getCodecID()).toBe(0);
                expect(nfttransferoutput2.getLocktime().toString()).toBe(locktime.toString());
                expect(nfttransferoutput2.getThreshold()).toBe(threshold);
                expect(nfttransferoutput2.getAddresses()).toStrictEqual([]);
                expect(nfttransferoutput2.getGroupID()).toBe(groupID);
                expect(nfttransferoutput2.getPayload().toString(hex)).toBe(payloadHex);
                expect(nfttransferoutput2.toBuffer().toString(hex)).toBe(nfttransferoutput.toBuffer().toString(hex));
                expect(nfttransferoutput2.toString()).toBe(nfttransferoutput.toString());
            });
            test("UnsignedTx", () => {
                const basetx = new avm_1.BaseTx(networkID, blockchainIDCB58, outs, ins, memo);
                const unsignedtx = new avm_1.UnsignedTx(basetx);
                const unsignedtx2 = new avm_1.UnsignedTx();
                const notes = "AVM UnsignedTx";
                const serialized = serialization.serialize(unsignedtx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("UnsignedTx");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                serialization.deserialize(serialized, unsignedtx2);
                expect(unsignedtx2.getTypeName()).toBe("UnsignedTx");
                expect(unsignedtx2.getTypeID()).toBeUndefined();
                // TODO - StandardUnsignedTx is setting codecID to 0
                // Bring this inline w/ the new codecID patterns
                // expect(unsignedtx2.getCodecID()).toBeUndefined()
                expect(unsignedtx2.toBuffer().toString(hex)).toBe(unsignedtx.toBuffer().toString(hex));
                expect(unsignedtx2.toString()).toBe(unsignedtx.toString());
            });
            test("Tx", () => {
                const basetx = new avm_1.BaseTx(networkID, blockchainIDCB58, outs, ins, memo);
                const unsignedtx = new avm_1.UnsignedTx(basetx);
                const tx = new avm_1.Tx(unsignedtx);
                const tx2 = new avm_1.Tx();
                const notes = "AVM Tx";
                const serialized = serialization.serialize(tx, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("Tx");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["credentials"]).toStrictEqual([]);
                serialization.deserialize(serialized, tx2);
                expect(tx2.getTypeName()).toBe("Tx");
                expect(tx2.getTypeID()).toBeUndefined();
                expect(tx2.getCodecID()).toBeUndefined();
                expect(tx2.getCredentials()).toStrictEqual([]);
                expect(tx2.toBuffer().toString(hex)).toBe(tx.toBuffer().toString(hex));
                expect(tx2.toString()).toBe(tx.toString());
            });
            test("UTXO", () => {
                const codecID = 0;
                const txID = serialization.typeToBuffer(cChainID, cb58);
                const txidHex = "9d0775f450604bd2fbc49ce0c5c1c6dfeb2dc2acb8c92c26eeae6e6df4502b19";
                const outputidx = 0;
                const outputidxHex = "00000000";
                const assetID = serialization.typeToBuffer(cChainID, cb58);
                const nfttransferoutput = new avm_1.NFTTransferOutput(groupID, payload);
                const utxo = new avm_1.UTXO(codecID, txID, outputidx, assetID, nfttransferoutput);
                const utxo2 = new avm_1.UTXO();
                const notes = "AVM UTXO";
                const serialized = serialization.serialize(utxo, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("UTXO");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["txid"]).toBe(txidHex);
                expect(serialized.fields["outputidx"]).toBe(outputidxHex);
                expect(serialized.fields["assetID"]).toBe(assetidHex);
                serialization.deserialize(serialized, utxo2);
                expect(utxo2.getTypeName()).toBe("UTXO");
                expect(utxo2.getTypeID()).toBeUndefined();
                // TODO - StandardUnsignedTx is setting codecID to 0
                // Bring this inline w/ the new codecID patterns
                // expect(utxo2.getCodecID()).toBeUndefined()
                expect(utxo2.getTxID().toString(hex)).toBe(txidHex);
                expect(utxo2.getOutputIdx().toString(hex)).toBe(outputidxHex);
                expect(utxo2.getAssetID().toString(hex)).toBe(assetID.toString(hex));
                expect(utxo2.toBuffer().toString(hex)).toBe(utxo.toBuffer().toString(hex));
                expect(utxo2.toString()).toBe(utxo.toString());
            });
            test("UTXOSet", () => {
                const utxoset = new avm_1.UTXOSet();
                const utxoset2 = new avm_1.UTXOSet();
                const notes = "AVM UTXOSet";
                const serialized = serialization.serialize(utxoset, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("UTXOSet");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["utxos"]).toStrictEqual({});
                expect(serialized.fields["addressUTXOs"]).toStrictEqual({});
                serialization.deserialize(serialized, utxoset2);
                expect(utxoset2.getTypeName()).toBe("UTXOSet");
                expect(utxoset2.getTypeID()).toBeUndefined();
                expect(utxoset2.getCodecID()).toBeUndefined();
                expect(utxoset2.getAllUTXOs()).toStrictEqual([]);
                expect(utxoset2.getAllUTXOStrings()).toStrictEqual([]);
                expect(utxoset2.getAddresses()).toStrictEqual([]);
            });
            test("Address", () => {
                const bsize = "00000014";
                const address = new common_1.Address();
                const address2 = new common_1.Address();
                const notes = "Address";
                const serialized = serialization.serialize(address, vm, hex, notes);
                expect(serialized.vm).toBe(vm);
                expect(serialized.encoding).toBe(hex);
                expect(serialized.notes).toBe(notes);
                expect(serialized.fields["_typeName"]).toBe("Address");
                expect(serialized.fields["_typeID"]).toBeNull();
                expect(serialized.fields["_codecID"]).toBeNull();
                expect(serialized.fields["bsize"]).toBe(bsize);
                expect(serialized.fields["bytes"]).toBe(bytes);
                serialization.deserialize(serialized, address2);
                expect(address2.getTypeName()).toBe("Address");
                expect(address2.getTypeID()).toBeUndefined();
                expect(address2.getCodecID()).toBeUndefined();
                expect(address2.toBuffer().toString(hex)).toBe(address.toBuffer().toString(hex));
                expect(address2.toString()).toBe(address.toString());
            });
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdHMvdXRpbHMvc2VyaWFsaXphdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXNCO0FBQ3RCLG9DQUFnQztBQUNoQyxzQ0EyQnFCO0FBQ3JCLHVDQUEyRDtBQUMzRCwyQ0FNd0I7QUFDeEIsMkNBQWlEO0FBRWpELE1BQU0sYUFBYSxHQUFrQixxQkFBYSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBRWhFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBUyxFQUFFO0lBQ25DLE1BQU0sT0FBTyxHQUFXLCtDQUErQyxDQUFBO0lBQ3ZFLE1BQU0sTUFBTSxHQUFXLDBDQUEwQyxDQUFBO0lBQ2pFLE1BQU0sVUFBVSxHQUNkLDhEQUE4RCxDQUFBO0lBQ2hFLE1BQU0sSUFBSSxHQUFXLG9EQUFvRCxDQUFBO0lBQ3pFLE1BQU0sTUFBTSxHQUFXLHNDQUFzQyxDQUFBO0lBQzdELE1BQU0sR0FBRyxHQUFXLHdEQUF3RCxDQUFBO0lBQzVFLE1BQU0sYUFBYSxHQUFXLE9BQU8sQ0FBQTtJQUNyQyxNQUFNLEdBQUcsR0FBVyxLQUFLLENBQUE7SUFDekIsTUFBTSxJQUFJLEdBQVcsNkJBQTZCLENBQUE7SUFDbEQsTUFBTSxFQUFFLEdBQU8sSUFBSSxlQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0IsTUFBTSxJQUFJLEdBQVcsUUFBUSxDQUFBO0lBQzdCLE1BQU0sWUFBWSxHQUFXLGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUMsTUFBTSxPQUFPLEdBQVcsR0FBRyxDQUFBO0lBQzNCLE1BQU0sR0FBRyxHQUFRLElBQUEsdUJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUVuQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQVMsRUFBRTtRQUM3QixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsY0FBYyxDQUFDLHFC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QUFDLFFBQVEsRUFBRSxDQUFBO2dCQUMvQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUNoRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTlDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUMvQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUM5QyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7Z0JBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtnQkFDN0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzVDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ2pDLENBQUE7Z0JBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUN0RCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCTiBmcm9tIFwiYm4uanNcIlxuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcImJ1ZmZlci9cIlxuaW1wb3J0IHtcbiAgQmFzZVR4LFxuICBDcmVhdGVBc3NldFR4LFxuICBFeHBvcnRUeCxcbiAgR2VuZXNpc0Fzc2V0LFxuICBJbXBvcnRUeCxcbiAgSW5pdGlhbFN0YXRlcyxcbiAgTWludGVyU2V0LFxuICBORlRDcmVkZW50aWFsLFxuICBORlRNaW50T3BlcmF0aW9uLFxuICBORlRNaW50T3V0cHV0LFxuICBORlRUcmFuc2Zlck9wZXJhdGlvbixcbiAgTkZUVHJhbnNmZXJPdXRwdXQsXG4gIE9wZXJhdGlvblR4LFxuICBTRUNQQ3JlZGVudGlhbCxcbiAgU0VDUE1pbnRPcGVyYXRpb24sXG4gIFNFQ1BNaW50T3V0cHV0LFxuICBTRUNQVHJhbnNmZXJJbnB1dCxcbiAgU0VDUFRyYW5zZmVyT3V0cHV0LFxuICBUcmFuc2ZlcmFibGVJbnB1dCxcbiAgVHJhbnNmZXJhYmxlT3BlcmF0aW9uLFxuICBUcmFuc2ZlcmFibGVPdXRwdXQsXG4gIFR4LFxuICBVbnNpZ25lZFR4LFxuICBVVFhPLFxuICBVVFhPSUQsXG4gIFVUWE9TZXRcbn0gZnJvbSBcInNyYy9hcGlzL2F2bVwiXG5pbXBvcnQgeyBBZGRyZXNzLCBTZXJpYWxpemVkLCBTaWduYXR1cmUgfSBmcm9tIFwic3JjL2NvbW1vblwiXG5pbXBvcnQge1xuICBEZWZhdWx0TmV0d29ya0lELFxuICBEZWZhdWx0cyxcbiAgU2VyaWFsaXphdGlvbixcbiAgU2VyaWFsaXplZEVuY29kaW5nLFxuICBTZXJpYWxpemVkVHlwZVxufSBmcm9tIFwiLi4vLi4vc3JjL3V0aWxzXCJcbmltcG9ydCB7IGdldFByZWZlcnJlZEhSUCB9IGZyb20gXCIuLi8uLi9zcmMvdXRpbHNcIlxuXG5jb25zdCBzZXJpYWxpemF0aW9uOiBTZXJpYWxpemF0aW9uID0gU2VyaWFsaXphdGlvbi5nZXRJbnN0YW5jZSgpXG5cbmRlc2NyaWJlKFwiU2VyaWFsaXphdGlvblwiLCAoKTogdm9pZCA9PiB7XG4gIGNvbnN0IGFkZHJlc3M6IHN0cmluZyA9IFwiWC1hdmF4MXdzdDhqdDN6M2ZtOWNlMHo2YWtqMzI2NnptZ2NjZHAwM2hqbGFqXCJcbiAgY29uc3Qgbm9kZUlEOiBzdHJpbmcgPSBcIk5vZGVJRC1NRnJaRlZDWFB2NWlDbjZNOUs2WGR1eEdUWXA4OTF4WFpcIlxuICBjb25zdCBwcml2YXRlS2V5OiBzdHJpbmcgPVxuICAgIFwiUHJpdmF0ZUtleS1ld29xalA3UHhZNHlyM2lMVHBMaXNyaXF0OTRoZHlERk5nY2hTeEdHenRVclRYdE5OXCJcbiAgY29uc3QgY2I1ODogc3RyaW5nID0gXCIyZU55MW1VRmRtYXhYTmoxZVFIVWU3TnA0Z2p1OXNKc0V0V1E0TVgzVG9pTkt1QURlZFwiXG4gIGNvbnN0IGJhc2U2NDogc3RyaW5nID0gXCJabkp2YlNCemJtOTNabXhoYTJVZ2RHOGdRWFpoYkdGdVkyaGxcIlxuICBjb25zdCBoZXg6IHN0cmluZyA9IFwiNjY3MjZmNmQyMDczNmU2Zjc3NjY2YzYxNmI2NTIwNzQ2ZjIwNDE3NjYxNmM2MTZlNjM2ODY1XCJcbiAgY29uc3QgZGVjaW1hbFN0cmluZzogc3RyaW5nID0gXCIxMjM0NVwiXG4gIGNvbnN0IG51bTogbnVtYmVyID0gMTIzNDVcbiAgY29uc3QgdXRmODogc3RyaW5nID0gXCJmcm9tIHNub3dmbGFrZSB0byBBdmFsYW5jaGVcIlxuICBjb25zdCBibjogQk4gPSBuZXcgQk4oOTAwMClcbiAgY29uc3QgbmFtZTogc3RyaW5nID0gXCJCYXNlVHhcIlxuICBjb25zdCBkZW5vbWluYXRpb246IEJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxKVxuICBjb25zdCBjaGFpbklEOiBzdHJpbmcgPSBcIlhcIlxuICBjb25zdCBocnA6IGFueSA9IGdldFByZWZlcnJlZEhSUCgxKVxuXG4gIHRlc3QoXCJpbnN0YW5jZSBvZlwiLCAoKTogdm9pZCA9PiB7XG4gICAgZXhwZWN0KHNlcmlhbGl6YXRpb24pLnRvQmVJbnN0YW5jZU9mKFNlcmlhbGl6YXRpb24pXG4gIH0pXG5cbiAgZGVzY3JpYmUoXCJ0eXBlVG9CdWZmZXIgJiYgYnVmZmVyVG9UeXBlXCIsICgpOiB2b2lkID0+IHtcbiAgICBsZXQgdDogU2VyaWFsaXplZFR5cGVcbiAgICBsZXQgYnVmOiBCdWZmZXJcbiAgICB0ZXN0KFwiQk5cIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgdCA9IFwiQk5cIlxuICAgICAgY29uc3QgYm46IEJOID0gbmV3IEJOKDkwMDApXG4gICAgICBidWYgPSBzZXJpYWxpemF0aW9uLnR5cGVUb0J1ZmZlcihibiwgdClcbiAgICAgIGNvbnN0IGI6IEJOID0gc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUoYnVmLCB0KVxuICAgICAgZXhwZWN0KGJuLnRvU3RyaW5nKCkpLnRvRXF1YWwoYi50b1N0cmluZygpKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiYmVjaDMyXCIsICgpOiB2b2lkID0+IHtcbiAgICAgIHQgPSBcImJlY2gzMlwiXG4gICAgICBidWYgPSBzZXJpYWxpemF0aW9uLnR5cGVUb0J1ZmZlcihhZGRyZXNzLCB0KVxuICAgICAgY29uc3QgYmVjaDMyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmJ1ZmZlclRvVHlwZShidWYsIHQsIGhycCwgY2hhaW5JRClcbiAgICAgIGV4cGVjdChiZWNoMzIpLnRvRXF1YWwoYWRkcmVzcylcbiAgICB9KVxuXG4gICAgdGVzdChcIm5vZGVJRFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICB0ID0gXCJub2RlSURcIlxuICAgICAgYnVmID0gc2VyaWFsaXphdGlvbi50eXBlVG9CdWZmZXIobm9kZUlELCB0KVxuICAgICAgY29uc3Qgbjogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUoYnVmLCB0KVxuICAgICAgZXhwZWN0KG5vZGVJRCkudG9FcXVhbChuKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwicHJpdmF0ZUtleVwiLCAoKTogdm9pZCA9PiB7XG4gICAgICB0ID0gXCJwcml2YXRlS2V5XCJcbiAgICAgIGJ1ZiA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKHByaXZhdGVLZXksIHQpXG4gICAgICBjb25zdCBwOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmJ1ZmZlclRvVHlwZShidWYsIHQpXG4gICAgICBleHBlY3QocHJpdmF0ZUtleSkudG9FcXVhbChwKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiY2I1OFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICB0ID0gXCJjYjU4XCJcbiAgICAgIGJ1ZiA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKGNiNTgsIHQpXG4gICAgICBjb25zdCBjOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmJ1ZmZlclRvVHlwZShidWYsIHQpXG4gICAgICBleHBlY3QoY2I1OCkudG9FcXVhbChjKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiYmFzZTU4XCIsICgpOiB2b2lkID0+IHtcbiAgICAgIHQgPSBcImNiNThcIlxuICAgICAgYnVmID0gc2VyaWFsaXphdGlvbi50eXBlVG9CdWZmZXIoY2I1OCwgdClcbiAgICAgIGNvbnN0IGM6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uYnVmZmVyVG9UeXBlKGJ1ZiwgdClcbiAgICAgIGV4cGVjdChjYjU4KS50b0VxdWFsKGMpXG4gICAgfSlcblxuICAgIHRlc3QoXCJiYXNlNjRcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgdCA9IFwiYmFzZTY0XCJcbiAgICAgIGJ1ZiA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKGJhc2U2NCwgdClcbiAgICAgIGNvbnN0IGI2NDogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUoYnVmLCB0KVxuICAgICAgZXhwZWN0KGJhc2U2NCkudG9FcXVhbChiNjQpXG4gICAgfSlcblxuICAgIHRlc3QoXCJoZXhcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgdCA9IFwiaGV4XCJcbiAgICAgIGJ1ZiA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKGhleCwgdClcbiAgICAgIGNvbnN0IGg6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uYnVmZmVyVG9UeXBlKGJ1ZiwgdClcbiAgICAgIGV4cGVjdChoZXgpLnRvRXF1YWwoaClcbiAgICB9KVxuXG4gICAgdGVzdChcImRlY2ltYWxTdHJpbmdcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgdCA9IFwiZGVjaW1hbFN0cmluZ1wiXG4gICAgICBidWYgPSBzZXJpYWxpemF0aW9uLnR5cGVUb0J1ZmZlcihkZWNpbWFsU3RyaW5nLCB0KVxuICAgICAgY29uc3QgZDogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUoYnVmLCB0KVxuICAgICAgZXhwZWN0KGRlY2ltYWxTdHJpbmcpLnRvRXF1YWwoZClcbiAgICB9KVxuXG4gICAgdGVzdChcIm51bWJlclwiLCAoKTogdm9pZCA9PiB7XG4gICAgICB0ID0gXCJudW1iZXJcIlxuICAgICAgYnVmID0gc2VyaWFsaXphdGlvbi50eXBlVG9CdWZmZXIobnVtLCB0KVxuICAgICAgY29uc3QgbnU6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uYnVmZmVyVG9UeXBlKGJ1ZiwgdClcbiAgICAgIGV4cGVjdChudW0pLnRvRXF1YWwobnUpXG4gICAgfSlcblxuICAgIHRlc3QoXCJ1dGY4XCIsICgpOiB2b2lkID0+IHtcbiAgICAgIHQgPSBcInV0ZjhcIlxuICAgICAgYnVmID0gc2VyaWFsaXphdGlvbi50eXBlVG9CdWZmZXIodXRmOCwgdClcbiAgICAgIGNvbnN0IHU6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uYnVmZmVyVG9UeXBlKGJ1ZiwgdClcbiAgICAgIGV4cGVjdCh1dGY4KS50b0VxdWFsKHUpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZShcImVuY29kZXIgJiYgZGVjb2RlclwiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZW5jb2Rpbmc6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCJcbiAgICB0ZXN0KFwiQk5cIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmVuY29kZXIoYm4sIGVuY29kaW5nLCBcIkJOXCIsIFwiQk5cIilcbiAgICAgIGNvbnN0IGRlY29kZWQ6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihzdHIsIGVuY29kaW5nLCBcIkJOXCIsIFwiQk5cIilcbiAgICAgIGV4cGVjdChibi50b1N0cmluZygpKS50b0VxdWFsKGRlY29kZWQudG9TdHJpbmcoKSlcbiAgICB9KVxuXG4gICAgdGVzdChcImJlY2gzMlwiLCAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBzdHI6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZW5jb2RlcihcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwiYmVjaDMyXCIsXG4gICAgICAgIFwiYmVjaDMyXCJcbiAgICAgIClcbiAgICAgIGNvbnN0IGRlY29kZWQ6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgXCJiZWNoMzJcIixcbiAgICAgICAgXCJiZWNoMzJcIixcbiAgICAgICAgaHJwLFxuICAgICAgICBjaGFpbklEXG4gICAgICApXG4gICAgICBleHBlY3QoYWRkcmVzcykudG9FcXVhbChkZWNvZGVkKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwibm9kZUlEXCIsICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5lbmNvZGVyKFxuICAgICAgICBub2RlSUQsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcIm5vZGVJRFwiLFxuICAgICAgICBcIm5vZGVJRFwiXG4gICAgICApXG4gICAgICBjb25zdCBkZWNvZGVkOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmRlY29kZXIoXG4gICAgICAgIHN0cixcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwibm9kZUlEXCIsXG4gICAgICAgIFwibm9kZUlEXCJcbiAgICAgIClcbiAgICAgIGV4cGVjdChub2RlSUQpLnRvRXF1YWwoZGVjb2RlZClcbiAgICB9KVxuXG4gICAgdGVzdChcInByaXZhdGVLZXlcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmVuY29kZXIoXG4gICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcInByaXZhdGVLZXlcIixcbiAgICAgICAgXCJwcml2YXRlS2V5XCJcbiAgICAgIClcbiAgICAgIGNvbnN0IGRlY29kZWQ6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgXCJwcml2YXRlS2V5XCIsXG4gICAgICAgIFwicHJpdmF0ZUtleVwiXG4gICAgICApXG4gICAgICBleHBlY3QocHJpdmF0ZUtleSkudG9FcXVhbChkZWNvZGVkKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiY2I1OFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBzdHI6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZW5jb2RlcihjYjU4LCBlbmNvZGluZywgXCJjYjU4XCIsIFwiY2I1OFwiKVxuICAgICAgY29uc3QgZGVjb2RlZDogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5kZWNvZGVyKFxuICAgICAgICBzdHIsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcImNiNThcIixcbiAgICAgICAgXCJjYjU4XCJcbiAgICAgIClcbiAgICAgIGV4cGVjdChjYjU4KS50b0VxdWFsKGRlY29kZWQpXG4gICAgfSlcblxuICAgIHRlc3QoXCJiYXNlNThcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmVuY29kZXIoXG4gICAgICAgIGNiNTgsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcImJhc2U1OFwiLFxuICAgICAgICBcImJhc2U1OFwiXG4gICAgICApXG4gICAgICBjb25zdCBkZWNvZGVkOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmRlY29kZXIoXG4gICAgICAgIHN0cixcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwiYmFzZTU4XCIsXG4gICAgICAgIFwiYmFzZTU4XCJcbiAgICAgIClcbiAgICAgIGV4cGVjdChjYjU4KS50b0VxdWFsKGRlY29kZWQpXG4gICAgfSlcblxuICAgIHRlc3QoXCJiYXNlNjRcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmVuY29kZXIoXG4gICAgICAgIGJhc2U2NCxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwiYmFzZTY0XCIsXG4gICAgICAgIFwiYmFzZTY0XCJcbiAgICAgIClcbiAgICAgIGNvbnN0IGRlY29kZWQ6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgXCJiYXNlNjRcIixcbiAgICAgICAgXCJiYXNlNjRcIlxuICAgICAgKVxuICAgICAgZXhwZWN0KGJhc2U2NCkudG9FcXVhbChkZWNvZGVkKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiaGV4XCIsICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5lbmNvZGVyKGhleCwgZW5jb2RpbmcsIFwiaGV4XCIsIFwiaGV4XCIpXG4gICAgICBjb25zdCBkZWNvZGVkOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmRlY29kZXIoc3RyLCBlbmNvZGluZywgXCJoZXhcIiwgXCJoZXhcIilcbiAgICAgIGV4cGVjdChoZXgpLnRvRXF1YWwoZGVjb2RlZClcbiAgICB9KVxuXG4gICAgdGVzdChcInV0ZjhcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmVuY29kZXIobmFtZSwgZW5jb2RpbmcsIFwidXRmOFwiLCBcInV0ZjhcIilcbiAgICAgIGNvbnN0IGRlY29kZWQ6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgXCJ1dGY4XCIsXG4gICAgICAgIFwidXRmOFwiXG4gICAgICApXG4gICAgICBleHBlY3QobmFtZSkudG9CZShkZWNvZGVkKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiZGVjaW1hbFN0cmluZ1wiLCAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBzdHI6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZW5jb2RlcihcbiAgICAgICAgZGVjaW1hbFN0cmluZyxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwiZGVjaW1hbFN0cmluZ1wiLFxuICAgICAgICBcImRlY2ltYWxTdHJpbmdcIlxuICAgICAgKVxuICAgICAgY29uc3QgZGVjb2RlZDogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5kZWNvZGVyKFxuICAgICAgICBzdHIsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcImRlY2ltYWxTdHJpbmdcIixcbiAgICAgICAgXCJkZWNpbWFsU3RyaW5nXCJcbiAgICAgIClcbiAgICAgIGV4cGVjdChkZWNpbWFsU3RyaW5nKS50b0JlKGRlY29kZWQpXG4gICAgfSlcblxuICAgIHRlc3QoXCJudW1iZXJcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSBzZXJpYWxpemF0aW9uLmVuY29kZXIoXG4gICAgICAgIG51bSxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIFwibnVtYmVyXCIsXG4gICAgICAgIFwibnVtYmVyXCJcbiAgICAgIClcbiAgICAgIGNvbnN0IGRlY29kZWQ6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZGVjb2RlcihcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgXCJudW1iZXJcIlxuICAgICAgKVxuICAgICAgZXhwZWN0KG51bSkudG9CZShkZWNvZGVkKVxuICAgIH0pXG5cbiAgICB0ZXN0KFwiQnVmZmVyXCIsICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHN0cjogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5lbmNvZGVyKFxuICAgICAgICBkZW5vbWluYXRpb24sXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcIkJ1ZmZlclwiLFxuICAgICAgICBcImRlY2ltYWxTdHJpbmdcIixcbiAgICAgICAgMVxuICAgICAgKVxuICAgICAgY29uc3QgZGVjb2RlZDogQnVmZmVyID0gc2VyaWFsaXphdGlvbi5kZWNvZGVyKFxuICAgICAgICBzdHIsXG4gICAgICAgIGVuY29kaW5nLFxuICAgICAgICBcImRlY2ltYWxTdHJpbmdcIixcbiAgICAgICAgXCJCdWZmZXJcIixcbiAgICAgICAgMVxuICAgICAgKVxuICAgICAgZXhwZWN0KGRlbm9taW5hdGlvbi50b1N0cmluZyhcImhleFwiKSkudG9CZShkZWNvZGVkLnRvU3RyaW5nKFwiaGV4XCIpKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoXCJzZXJpYWxpemUgJiYgZGVzZXJpYWxpemVcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG5ldHdvcmtJRDogbnVtYmVyID0gMTMzN1xuICAgIGNvbnN0IG06IHN0cmluZyA9IFwiMlpjNTR2NGVrMzdURXd1NExpVjNqNDFQVU1SZDZhY0REVTNaQ1ZTeEU3WFwiXG4gICAgY29uc3QgbUhleDogc3RyaW5nID1cbiAgICAgIFwiNjY3MjZmNmQyMDczNmU2Zjc3NjY2YzYxNmI2NTIwNzQ2ZjIwNjE3NjYxNmM2MTZlNjM2ODY1XCJcbiAgICBjb25zdCBtZW1vOiBCdWZmZXIgPSBzZXJpYWxpemF0aW9uLnR5cGVUb0J1ZmZlcihtLCBcImNiNThcIilcbiAgICBjb25zdCBjQ2hhaW5JRDogc3RyaW5nID1cbiAgICAgIFwiMkNBNmo1ell6YXN5blBzRmVOb3FXa21UQ3QzVlNjTXZYVVpIYmZESjhrM29HekFQdFVcIlxuICAgIGNvbnN0IGNDaGFpbklESGV4OiBzdHJpbmcgPVxuICAgICAgXCI5ZDA3NzVmNDUwNjA0YmQyZmJjNDljZTBjNWMxYzZkZmViMmRjMmFjYjhjOTJjMjZlZWFlNmU2ZGY0NTAyYjE5XCJcbiAgICBjb25zdCBoZXg6IFNlcmlhbGl6ZWRFbmNvZGluZyA9IFwiaGV4XCJcbiAgICBjb25zdCBjYjU4OiBTZXJpYWxpemVkRW5jb2RpbmcgPSBcImNiNThcIlxuICAgIGNvbnN0IHV0Zjg6IFNlcmlhbGl6ZWRUeXBlID0gXCJ1dGY4XCJcbiAgICBjb25zdCBhbW91bnQ6IEJOID0gbmV3IEJOKDApXG4gICAgY29uc3QgYW1vdW50SGV4OiBzdHJpbmcgPSBcIjAwMDAwMDAwMDAwMDAwMDBcIlxuICAgIGNvbnN0IGJ5dGVzOiBzdHJpbmcgPSBcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIlxuICAgIGNvbnN0IHhBZGRyZXNzOiBzdHJpbmcgPSBcIlgtYXZheDFwZHVyczUzdjZ2dHVlOXN3N2FtOWF5anFoOW1jbnFlOXM4MHNnblwiXG4gICAgY29uc3QgeEFkZHJlc3NIZXg6IHN0cmluZyA9IFwiMGI3ODM4NTIyY2QzMTdjYzk2MGVmNzc2NWU5MjQwYjk3Nzg5ODMyNVwiXG4gICAgY29uc3QgYWRkcmVzczogc3RyaW5nID0gXCJYLWxvY2FsMThqbWE4cHB3M25oeDVyNGFwOGNsYXp6MGRwczdydjV1MDB6OTZ1XCJcbiAgICBjb25zdCBiZWNoMzI6IFNlcmlhbGl6ZWRUeXBlID0gXCJiZWNoMzJcIlxuICAgIGNvbnN0IGFkZHJlc3NCdWY6IEJ1ZmZlciA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKGFkZHJlc3MsIGJlY2gzMilcbiAgICBjb25zdCB0aHJlc2hvbGQ6IG51bWJlciA9IDFcbiAgICBjb25zdCB0aHJlc2hvbGRIZXg6IHN0cmluZyA9IFwiMDAwMDAwMDFcIlxuICAgIGNvbnN0IG1pbnRlcnM6IHN0cmluZ1tdID0gW3hBZGRyZXNzXVxuICAgIGNvbnN0IGFzc2V0SUQ6IEJ1ZmZlciA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKGNDaGFpbklELCBjYjU4KVxuICAgIGNvbnN0IGFzc2V0aWRIZXg6IHN0cmluZyA9XG4gICAgICBcIjlkMDc3NWY0NTA2MDRiZDJmYmM0OWNlMGM1YzFjNmRmZWIyZGMyYWNiOGM5MmMyNmVlYWU2ZTZkZjQ1MDJiMTlcIlxuICAgIGNvbnN0IHBheWxvYWQ6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFwiRnJvbSBzbm93Zmxha2UgdG8gQXZhbGFuY2hlXCIpXG4gICAgY29uc3QgZ3JvdXBJREhleDogc3RyaW5nID0gXCIwMDAwMzAzOVwiXG4gICAgY29uc3QgcGF5bG9hZEhleDogc3RyaW5nID1cbiAgICAgIFwiNDY3MjZmNmQyMDczNmU2Zjc3NjY2YzYxNmI2NTIwNzQ2ZjIwNDE3NjYxNmM2MTZlNjM2ODY1XCJcbiAgICBjb25zdCBsb2NrdGltZTogQk4gPSBuZXcgQk4oMClcbiAgICBjb25zdCBsb2NrdGltZUhleDogc3RyaW5nID0gXCIwMDAwMDAwMDAwMDAwMDAwXCJcblxuICAgIGRlc2NyaWJlKFwiQVZNXCIsICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrY2hhaW5JRENCNTg6IEJ1ZmZlciA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKFxuICAgICAgICBEZWZhdWx0cy5uZXR3b3JrWzEyMzQ1XVtcIlhcIl0uYmxvY2tjaGFpbklELFxuICAgICAgICBjYjU4XG4gICAgICApXG4gICAgICBjb25zdCBibG9ja2NoYWluSURIZXg6IHN0cmluZyA9XG4gICAgICAgIFwiZDg5MWFkNTYwNTZkOWMwMWYxOGY0M2Y1OGI1Yzc4NGFkMDdhNGE0OWNmM2QxZjExNjIzODA0YjVjYmEyYzZiZlwiXG4gICAgICBjb25zdCBkZWZhdWx0TmV0d29ya0lESGV4OiBzdHJpbmcgPSBcIjAwMDAwMDAxXCJcbiAgICAgIGNvbnN0IGxvY2FsTmV0d29ya0lESGV4OiBzdHJpbmcgPSBcIjAwMDAwNTM5XCJcbiAgICAgIGNvbnN0IG91dHM6IFRyYW5zZmVyYWJsZU91dHB1dFtdID0gW11cbiAgICAgIGNvbnN0IGluczogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdXG4gICAgICBjb25zdCB2bTogc3RyaW5nID0gXCJBVk1cIlxuICAgICAgY29uc3QgZ3JvdXBJRDogbnVtYmVyID0gMTIzNDVcblxuICAgICAgdGVzdChcIkdlbmVzaXNBc3NldFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGFzc2V0QWxpYXM6IHN0cmluZyA9IFwiYXNzZXQxXCJcbiAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gXCJhc3NldDFcIlxuICAgICAgICBjb25zdCBzeW1ib2w6IHN0cmluZyA9IFwiTUZDQVwiXG4gICAgICAgIGNvbnN0IG5hbWVIZXg6IHN0cmluZyA9IHNlcmlhbGl6YXRpb24uZW5jb2RlcihuYW1lLCBoZXgsIHV0ZjgsIHV0ZjgpXG4gICAgICAgIGNvbnN0IHN5bWJvbEhleDogc3RyaW5nID0gc2VyaWFsaXphdGlvbi5lbmNvZGVyKHN5bWJvbCwgaGV4LCB1dGY4LCB1dGY4KVxuICAgICAgICBjb25zdCBkZW5vbWluYXRpb246IG51bWJlciA9IDFcbiAgICAgICAgY29uc3QgdmNhcFNlY3BPdXRwdXQgPSBuZXcgU0VDUFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICBbYWRkcmVzc0J1Zl0sXG4gICAgICAgICAgbG9ja3RpbWUsXG4gICAgICAgICAgdGhyZXNob2xkXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlczogSW5pdGlhbFN0YXRlcyA9IG5ldyBJbml0aWFsU3RhdGVzKClcbiAgICAgICAgaW5pdGlhbFN0YXRlcy5hZGRPdXRwdXQodmNhcFNlY3BPdXRwdXQpXG4gICAgICAgIGNvbnN0IGdlbmVzaXNhc3NldDogR2VuZXNpc0Fzc2V0ID0gbmV3IEdlbmVzaXNBc3NldChcbiAgICAgICAgICBhc3NldEFsaWFzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3ltYm9sLFxuICAgICAgICAgIGRlbm9taW5hdGlvbixcbiAgICAgICAgICBpbml0aWFsU3RhdGVzLFxuICAgICAgICAgIG1lbW9cbiAgICAgICAgKVxuICAgICAgICBjb25zdCBnZW5lc2lzYXNzZXQyOiBHZW5lc2lzQXNzZXQgPSBuZXcgR2VuZXNpc0Fzc2V0KClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIEdlbmVzaXNBc3NldFwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICBnZW5lc2lzYXNzZXQsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIkdlbmVzaXNBc3NldFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm5ldHdvcmtJRFwiXSkudG9CZShkZWZhdWx0TmV0d29ya0lESGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJuYW1lXCJdKS50b0JlKG5hbWVIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInN5bWJvbFwiXSkudG9CZShzeW1ib2xIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImRlbm9taW5hdGlvblwiXSkudG9CZShcIjAxXCIpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm1lbW9cIl0pLnRvQmUobUhleClcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIGdlbmVzaXNhc3NldDIpXG4gICAgICAgIGV4cGVjdChnZW5lc2lzYXNzZXQyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJHZW5lc2lzQXNzZXRcIilcbiAgICAgICAgZXhwZWN0KGdlbmVzaXNhc3NldDIuZ2V0VHlwZUlEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QoZ2VuZXNpc2Fzc2V0Mi5nZXRDb2RlY0lEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QoZ2VuZXNpc2Fzc2V0Mi5nZXRCbG9ja2NoYWluSUQoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMFwiXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGdlbmVzaXNhc3NldDIuZ2V0TmV0d29ya0lEKCkpLnRvQmUoRGVmYXVsdE5ldHdvcmtJRClcbiAgICAgICAgZXhwZWN0KGdlbmVzaXNhc3NldDIuZ2V0T3V0cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QoZ2VuZXNpc2Fzc2V0Mi5nZXRJbnMoKSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KGdlbmVzaXNhc3NldDIuZ2V0QXNzZXRBbGlhcygpKS50b0JlKGFzc2V0QWxpYXMpXG4gICAgICAgIGV4cGVjdChnZW5lc2lzYXNzZXQyLmdldE5hbWUoKSkudG9CZShuYW1lKVxuICAgICAgICBleHBlY3QoZ2VuZXNpc2Fzc2V0Mi5nZXRTeW1ib2woKSkudG9CZShzeW1ib2wpXG4gICAgICAgIGV4cGVjdChnZW5lc2lzYXNzZXQyLmdldERlbm9taW5hdGlvbigpKS50b0JlKGRlbm9taW5hdGlvbilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6YXRpb24uYnVmZmVyVG9UeXBlKGdlbmVzaXNhc3NldDIuZ2V0TWVtbygpLCBjYjU4KSkudG9CZShcbiAgICAgICAgICBtXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGdlbmVzaXNhc3NldDIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIGdlbmVzaXNhc3NldC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QoZ2VuZXNpc2Fzc2V0Mi50b1N0cmluZygpKS50b0JlKGdlbmVzaXNhc3NldC50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIkJhc2VUeFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2V0eDogQmFzZVR4ID0gbmV3IEJhc2VUeChcbiAgICAgICAgICBuZXR3b3JrSUQsXG4gICAgICAgICAgYmxvY2tjaGFpbklEQ0I1OCxcbiAgICAgICAgICBvdXRzLFxuICAgICAgICAgIGlucyxcbiAgICAgICAgICBtZW1vXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgYmFzZXR4MjogQmFzZVR4ID0gbmV3IEJhc2VUeCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBCYXNlVHhcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgYmFzZXR4LFxuICAgICAgICAgIHZtLFxuICAgICAgICAgIGhleCxcbiAgICAgICAgICBub3Rlc1xuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLnZtKS50b0JlKHZtKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5lbmNvZGluZykudG9CZShoZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLm5vdGVzKS50b0JlKG5vdGVzKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZU5hbWVcIl0pLnRvQmUoXCJCYXNlVHhcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZSgwKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZSgwKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJibG9ja2NoYWluSURcIl0pLnRvQmUoYmxvY2tjaGFpbklESGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJuZXR3b3JrSURcIl0pLnRvQmUobG9jYWxOZXR3b3JrSURIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm91dHNcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImluc1wiXSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wibWVtb1wiXSkudG9CZShtSGV4KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgYmFzZXR4MilcbiAgICAgICAgZXhwZWN0KGJhc2V0eDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIkJhc2VUeFwiKVxuICAgICAgICBleHBlY3QoYmFzZXR4Mi5nZXRUeXBlSUQoKSkudG9CZSgwKVxuICAgICAgICBleHBlY3QoYmFzZXR4Mi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KGJhc2V0eDIuZ2V0QmxvY2tjaGFpbklEKCkudG9TdHJpbmcoaGV4KSkudG9CZShibG9ja2NoYWluSURIZXgpXG4gICAgICAgIGV4cGVjdChiYXNldHgyLmdldE5ldHdvcmtJRCgpKS50b0JlKG5ldHdvcmtJRClcbiAgICAgICAgZXhwZWN0KGJhc2V0eDIuZ2V0T3V0cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QoYmFzZXR4Mi5nZXRJbnMoKSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6YXRpb24uYnVmZmVyVG9UeXBlKGJhc2V0eDIuZ2V0TWVtbygpLCBjYjU4KSkudG9CZShtKVxuICAgICAgICBleHBlY3QoYmFzZXR4Mi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgYmFzZXR4LnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdChiYXNldHgyLnRvU3RyaW5nKCkpLnRvQmUoYmFzZXR4LnRvU3RyaW5nKCkpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiQ3JlYXRlQXNzZXRUeFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IFwiVGVzdCBUb2tlblwiXG4gICAgICAgIGNvbnN0IG5hbWVIZXg6IHN0cmluZyA9IFwiNTQ2NTczNzQyMDU0NmY2YjY1NmVcIlxuICAgICAgICBjb25zdCBzeW1ib2w6IHN0cmluZyA9IFwiVEVTVFwiXG4gICAgICAgIGNvbnN0IHN5bWJvbEhleDogc3RyaW5nID0gXCI1NDQ1NTM1NFwiXG4gICAgICAgIGNvbnN0IGRlbm9taW5hdGlvbjogbnVtYmVyID0gMVxuICAgICAgICBjb25zdCBkZW5vbWluYXRpb25IZXg6IHN0cmluZyA9IFwiMDFcIlxuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGU6IEluaXRpYWxTdGF0ZXMgPSBuZXcgSW5pdGlhbFN0YXRlcygpXG4gICAgICAgIGNvbnN0IGNyZWF0ZWFzc2V0dHg6IENyZWF0ZUFzc2V0VHggPSBuZXcgQ3JlYXRlQXNzZXRUeChcbiAgICAgICAgICBuZXR3b3JrSUQsXG4gICAgICAgICAgYmxvY2tjaGFpbklEQ0I1OCxcbiAgICAgICAgICBvdXRzLFxuICAgICAgICAgIGlucyxcbiAgICAgICAgICBtZW1vLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3ltYm9sLFxuICAgICAgICAgIGRlbm9taW5hdGlvbixcbiAgICAgICAgICBpbml0aWFsU3RhdGVcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBjcmVhdGVhc3NldHR4MjogQ3JlYXRlQXNzZXRUeCA9IG5ldyBDcmVhdGVBc3NldFR4KClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIENyZWF0ZUFzc2V0VHhcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgY3JlYXRlYXNzZXR0eCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiQ3JlYXRlQXNzZXRUeFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlKDEpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImJsb2NrY2hhaW5JRFwiXSkudG9CZShibG9ja2NoYWluSURIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm5ldHdvcmtJRFwiXSkudG9CZShsb2NhbE5ldHdvcmtJREhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wib3V0c1wiXSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiaW5zXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJtZW1vXCJdKS50b0JlKG1IZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm5hbWVcIl0pLnRvQmUobmFtZUhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wic3ltYm9sXCJdKS50b0JlKHN5bWJvbEhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiZGVub21pbmF0aW9uXCJdKS50b0JlKGRlbm9taW5hdGlvbkhleClcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIGNyZWF0ZWFzc2V0dHgyKVxuICAgICAgICBleHBlY3QoY3JlYXRlYXNzZXR0eDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIkNyZWF0ZUFzc2V0VHhcIilcbiAgICAgICAgZXhwZWN0KGNyZWF0ZWFzc2V0dHgyLmdldFR5cGVJRCgpKS50b0JlKDEpXG4gICAgICAgIGV4cGVjdChjcmVhdGVhc3NldHR4Mi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KGNyZWF0ZWFzc2V0dHgyLmdldEJsb2NrY2hhaW5JRCgpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgYmxvY2tjaGFpbklESGV4XG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGNyZWF0ZWFzc2V0dHgyLmdldE5ldHdvcmtJRCgpKS50b0JlKG5ldHdvcmtJRClcbiAgICAgICAgZXhwZWN0KGNyZWF0ZWFzc2V0dHgyLmdldE91dHMoKSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KGNyZWF0ZWFzc2V0dHgyLmdldElucygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QoY3JlYXRlYXNzZXR0eDIuZ2V0TmFtZSgpKS50b0JlKG5hbWUpXG4gICAgICAgIGV4cGVjdChjcmVhdGVhc3NldHR4Mi5nZXRTeW1ib2woKSkudG9CZShzeW1ib2wpXG4gICAgICAgIGV4cGVjdChjcmVhdGVhc3NldHR4Mi5nZXREZW5vbWluYXRpb24oKSkudG9CZShkZW5vbWluYXRpb24pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemF0aW9uLmJ1ZmZlclRvVHlwZShjcmVhdGVhc3NldHR4Mi5nZXRNZW1vKCksIGNiNTgpKS50b0JlKFxuICAgICAgICAgIG1cbiAgICAgICAgKVxuICAgICAgICBleHBlY3QoY3JlYXRlYXNzZXR0eDIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIGNyZWF0ZWFzc2V0dHgudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGNyZWF0ZWFzc2V0dHgyLnRvU3RyaW5nKCkpLnRvQmUoY3JlYXRlYXNzZXR0eC50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIk9wZXJhdGlvblR4XCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgb3BzOiBUcmFuc2ZlcmFibGVPcGVyYXRpb25bXSA9IFtdXG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbnR4OiBPcGVyYXRpb25UeCA9IG5ldyBPcGVyYXRpb25UeChcbiAgICAgICAgICBuZXR3b3JrSUQsXG4gICAgICAgICAgYmxvY2tjaGFpbklEQ0I1OCxcbiAgICAgICAgICBvdXRzLFxuICAgICAgICAgIGlucyxcbiAgICAgICAgICBtZW1vLFxuICAgICAgICAgIG9wc1xuICAgICAgICApXG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbnR4MjogT3BlcmF0aW9uVHggPSBuZXcgT3BlcmF0aW9uVHgoKVxuICAgICAgICBjb25zdCBub3Rlczogc3RyaW5nID0gXCJBVk0gT3BlcmF0aW9uVHhcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgb3BlcmF0aW9udHgsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIk9wZXJhdGlvblR4XCIpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlSURcIl0pLnRvQmUoMilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiYmxvY2tjaGFpbklEXCJdKS50b0JlKGJsb2NrY2hhaW5JREhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wibmV0d29ya0lEXCJdKS50b0JlKGxvY2FsTmV0d29ya0lESGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJvdXRzXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJpbnNcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm1lbW9cIl0pLnRvQmUobUhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wib3BzXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgb3BlcmF0aW9udHgyKVxuICAgICAgICBleHBlY3Qob3BlcmF0aW9udHgyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJPcGVyYXRpb25UeFwiKVxuICAgICAgICBleHBlY3Qob3BlcmF0aW9udHgyLmdldFR5cGVJRCgpKS50b0JlKDIpXG4gICAgICAgIGV4cGVjdChvcGVyYXRpb250eDIuZ2V0Q29kZWNJRCgpKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChvcGVyYXRpb250eDIuZ2V0QmxvY2tjaGFpbklEKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICBibG9ja2NoYWluSURIZXhcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qob3BlcmF0aW9udHgyLmdldE5ldHdvcmtJRCgpKS50b0JlKG5ldHdvcmtJRClcbiAgICAgICAgZXhwZWN0KG9wZXJhdGlvbnR4Mi5nZXRPdXRzKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChvcGVyYXRpb250eDIuZ2V0SW5zKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChvcGVyYXRpb250eDIuZ2V0T3BlcmF0aW9ucygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUob3BlcmF0aW9udHgyLmdldE1lbW8oKSwgY2I1OCkpLnRvQmUobSlcbiAgICAgICAgZXhwZWN0KG9wZXJhdGlvbnR4Mi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgb3BlcmF0aW9udHgudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KG9wZXJhdGlvbnR4Mi50b1N0cmluZygpKS50b0JlKG9wZXJhdGlvbnR4LnRvU3RyaW5nKCkpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiSW1wb3J0VHhcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzb3VyY2VDaGFpbjogQnVmZmVyID0gc2VyaWFsaXphdGlvbi50eXBlVG9CdWZmZXIoY0NoYWluSUQsIGNiNTgpXG4gICAgICAgIGNvbnN0IGltcG9ydEluczogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdXG4gICAgICAgIGNvbnN0IGltcG9ydHR4OiBJbXBvcnRUeCA9IG5ldyBJbXBvcnRUeChcbiAgICAgICAgICBuZXR3b3JrSUQsXG4gICAgICAgICAgYmxvY2tjaGFpbklEQ0I1OCxcbiAgICAgICAgICBvdXRzLFxuICAgICAgICAgIGlucyxcbiAgICAgICAgICBtZW1vLFxuICAgICAgICAgIHNvdXJjZUNoYWluLFxuICAgICAgICAgIGltcG9ydEluc1xuICAgICAgICApXG4gICAgICAgIGNvbnN0IGltcG9ydHR4MjogSW1wb3J0VHggPSBuZXcgSW1wb3J0VHgoKVxuICAgICAgICBjb25zdCBub3Rlczogc3RyaW5nID0gXCJBVk0gSW1wb3J0VHhcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgaW1wb3J0dHgsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIkltcG9ydFR4XCIpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlSURcIl0pLnRvQmUoMylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiYmxvY2tjaGFpbklEXCJdKS50b0JlKGJsb2NrY2hhaW5JREhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wibmV0d29ya0lEXCJdKS50b0JlKGxvY2FsTmV0d29ya0lESGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJvdXRzXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJpbnNcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm1lbW9cIl0pLnRvQmUobUhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wic291cmNlQ2hhaW5cIl0pLnRvQmUoY0NoYWluSURIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImltcG9ydEluc1wiXSkudG9TdHJpY3RFcXVhbChbXSlcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIGltcG9ydHR4MilcbiAgICAgICAgZXhwZWN0KGltcG9ydHR4Mi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiSW1wb3J0VHhcIilcbiAgICAgICAgZXhwZWN0KGltcG9ydHR4Mi5nZXRUeXBlSUQoKSkudG9CZSgzKVxuICAgICAgICBleHBlY3QoaW1wb3J0dHgyLmdldENvZGVjSUQoKSkudG9CZSgwKVxuICAgICAgICBleHBlY3QoaW1wb3J0dHgyLmdldEJsb2NrY2hhaW5JRCgpLnRvU3RyaW5nKGhleCkpLnRvQmUoYmxvY2tjaGFpbklESGV4KVxuICAgICAgICBleHBlY3QoaW1wb3J0dHgyLmdldE5ldHdvcmtJRCgpKS50b0JlKG5ldHdvcmtJRClcbiAgICAgICAgZXhwZWN0KGltcG9ydHR4Mi5nZXRPdXRzKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChpbXBvcnR0eDIuZ2V0SW5zKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChpbXBvcnR0eDIuZ2V0U291cmNlQ2hhaW4oKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHNvdXJjZUNoYWluLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QoaW1wb3J0dHgyLmdldEltcG9ydElucHV0cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUoaW1wb3J0dHgyLmdldE1lbW8oKSwgY2I1OCkpLnRvQmUobSlcbiAgICAgICAgZXhwZWN0KGltcG9ydHR4Mi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgaW1wb3J0dHgudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGltcG9ydHR4Mi50b1N0cmluZygpKS50b0JlKGltcG9ydHR4LnRvU3RyaW5nKCkpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiRXhwb3J0VHhcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbkNoYWluOiBCdWZmZXIgPSBzZXJpYWxpemF0aW9uLnR5cGVUb0J1ZmZlcihcbiAgICAgICAgICBjQ2hhaW5JRCxcbiAgICAgICAgICBjYjU4XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgZXhwb3J0T3V0czogVHJhbnNmZXJhYmxlT3V0cHV0W10gPSBbXVxuICAgICAgICBjb25zdCBleHBvcnR0eDogRXhwb3J0VHggPSBuZXcgRXhwb3J0VHgoXG4gICAgICAgICAgbmV0d29ya0lELFxuICAgICAgICAgIGJsb2NrY2hhaW5JRENCNTgsXG4gICAgICAgICAgb3V0cyxcbiAgICAgICAgICBpbnMsXG4gICAgICAgICAgbWVtbyxcbiAgICAgICAgICBkZXN0aW5hdGlvbkNoYWluLFxuICAgICAgICAgIGV4cG9ydE91dHNcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBleHBvcnR0eDI6IEV4cG9ydFR4ID0gbmV3IEV4cG9ydFR4KClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIEV4cG9ydFR4XCJcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICAgIGV4cG9ydHR4LFxuICAgICAgICAgIHZtLFxuICAgICAgICAgIGhleCxcbiAgICAgICAgICBub3Rlc1xuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLnZtKS50b0JlKHZtKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5lbmNvZGluZykudG9CZShoZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLm5vdGVzKS50b0JlKG5vdGVzKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZU5hbWVcIl0pLnRvQmUoXCJFeHBvcnRUeFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlKDQpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImJsb2NrY2hhaW5JRFwiXSkudG9CZShibG9ja2NoYWluSURIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm5ldHdvcmtJRFwiXSkudG9CZShsb2NhbE5ldHdvcmtJREhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wib3V0c1wiXSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiaW5zXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJtZW1vXCJdKS50b0JlKG1IZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImRlc3RpbmF0aW9uQ2hhaW5cIl0pLnRvQmUoY0NoYWluSURIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImV4cG9ydE91dHNcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCBleHBvcnR0eDIpXG4gICAgICAgIGV4cGVjdChleHBvcnR0eDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIkV4cG9ydFR4XCIpXG4gICAgICAgIGV4cGVjdChleHBvcnR0eDIuZ2V0VHlwZUlEKCkpLnRvQmUoNClcbiAgICAgICAgZXhwZWN0KGV4cG9ydHR4Mi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KGV4cG9ydHR4Mi5nZXRCbG9ja2NoYWluSUQoKS50b1N0cmluZyhoZXgpKS50b0JlKGJsb2NrY2hhaW5JREhleClcbiAgICAgICAgZXhwZWN0KGV4cG9ydHR4Mi5nZXROZXR3b3JrSUQoKSkudG9CZShuZXR3b3JrSUQpXG4gICAgICAgIGV4cGVjdChleHBvcnR0eDIuZ2V0T3V0cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QoZXhwb3J0dHgyLmdldElucygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QoZXhwb3J0dHgyLmdldERlc3RpbmF0aW9uQ2hhaW4oKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIGRlc3RpbmF0aW9uQ2hhaW4udG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdChleHBvcnR0eDIuZ2V0RXhwb3J0T3V0cHV0cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXphdGlvbi5idWZmZXJUb1R5cGUoZXhwb3J0dHgyLmdldE1lbW8oKSwgY2I1OCkpLnRvQmUobSlcbiAgICAgICAgZXhwZWN0KGV4cG9ydHR4Mi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgZXhwb3J0dHgudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGV4cG9ydHR4Mi50b1N0cmluZygpKS50b0JlKGV4cG9ydHR4LnRvU3RyaW5nKCkpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiU0VDUENyZWRlbnRpYWxcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzaWdBcnJheTogU2lnbmF0dXJlW10gPSBbXVxuICAgICAgICBjb25zdCBzZWNwY3JlZGVudGlhbDogU0VDUENyZWRlbnRpYWwgPSBuZXcgU0VDUENyZWRlbnRpYWwoc2lnQXJyYXkpXG4gICAgICAgIGNvbnN0IHNlY3BjcmVkZW50aWFsMjogU0VDUENyZWRlbnRpYWwgPSBuZXcgU0VDUENyZWRlbnRpYWwoKVxuICAgICAgICBjb25zdCBub3Rlczogc3RyaW5nID0gXCJBVk0gU0VDUENyZWRlbnRpYWxcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgc2VjcGNyZWRlbnRpYWwsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIlNFQ1BDcmVkZW50aWFsXCIpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlSURcIl0pLnRvQmUoOSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wic2lnQXJyYXlcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCBzZWNwY3JlZGVudGlhbDIpXG4gICAgICAgIGV4cGVjdChzZWNwY3JlZGVudGlhbDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIlNFQ1BDcmVkZW50aWFsXCIpXG4gICAgICAgIGV4cGVjdChzZWNwY3JlZGVudGlhbDIuZ2V0VHlwZUlEKCkpLnRvQmUoOSlcbiAgICAgICAgZXhwZWN0KHNlY3BjcmVkZW50aWFsMi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlY3BjcmVkZW50aWFsMi5nZXRDcmVkZW50aWFsSUQoKSkudG9CZSg5KVxuICAgICAgICBleHBlY3Qoc2VjcGNyZWRlbnRpYWwyLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICBzZWNwY3JlZGVudGlhbC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VjcGNyZWRlbnRpYWwyLnRvU3RyaW5nKCkpLnRvQmUoc2VjcGNyZWRlbnRpYWwudG9TdHJpbmcoKSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJORlRDcmVkZW50aWFsXCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgc2lnQXJyYXk6IFNpZ25hdHVyZVtdID0gW11cbiAgICAgICAgY29uc3QgbmZ0Y3JlZGVudGlhbDogTkZUQ3JlZGVudGlhbCA9IG5ldyBORlRDcmVkZW50aWFsKHNpZ0FycmF5KVxuICAgICAgICBjb25zdCBuZnRjcmVkZW50aWFsMjogTkZUQ3JlZGVudGlhbCA9IG5ldyBORlRDcmVkZW50aWFsKClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIE5GVENyZWRlbnRpYWxcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgbmZ0Y3JlZGVudGlhbCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiTkZUQ3JlZGVudGlhbFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlKDE0KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZSgwKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJzaWdBcnJheVwiXSkudG9TdHJpY3RFcXVhbChbXSlcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIG5mdGNyZWRlbnRpYWwyKVxuICAgICAgICBleHBlY3QobmZ0Y3JlZGVudGlhbDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIk5GVENyZWRlbnRpYWxcIilcbiAgICAgICAgZXhwZWN0KG5mdGNyZWRlbnRpYWwyLmdldFR5cGVJRCgpKS50b0JlKDE0KVxuICAgICAgICBleHBlY3QobmZ0Y3JlZGVudGlhbDIuZ2V0Q29kZWNJRCgpKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChuZnRjcmVkZW50aWFsMi5nZXRDcmVkZW50aWFsSUQoKSkudG9CZSgxNClcbiAgICAgICAgZXhwZWN0KG5mdGNyZWRlbnRpYWwyLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICBuZnRjcmVkZW50aWFsLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdChuZnRjcmVkZW50aWFsMi50b1N0cmluZygpKS50b0JlKG5mdGNyZWRlbnRpYWwudG9TdHJpbmcoKSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJJbml0aWFsU3RhdGVzXCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlczogSW5pdGlhbFN0YXRlcyA9IG5ldyBJbml0aWFsU3RhdGVzKClcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlczI6IEluaXRpYWxTdGF0ZXMgPSBuZXcgSW5pdGlhbFN0YXRlcygpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBJbml0aWFsU3RhdGVzXCJcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICAgIGluaXRpYWxTdGF0ZXMsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIkluaXRpYWxTdGF0ZXNcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJmeHNcIl0pLnRvU3RyaWN0RXF1YWwoe30pXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCBpbml0aWFsU3RhdGVzMilcbiAgICAgICAgZXhwZWN0KGluaXRpYWxTdGF0ZXMyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJJbml0aWFsU3RhdGVzXCIpXG4gICAgICAgIGV4cGVjdChpbml0aWFsU3RhdGVzMi5nZXRUeXBlSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdChpbml0aWFsU3RhdGVzMi5nZXRDb2RlY0lEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QoaW5pdGlhbFN0YXRlczIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIGluaXRpYWxTdGF0ZXMudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KGluaXRpYWxTdGF0ZXMyLnRvU3RyaW5nKCkpLnRvQmUoaW5pdGlhbFN0YXRlcy50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIlNFQ1BUcmFuc2ZlcklucHV0XCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgc2VjcHRyYW5zZmVyaW5wdXQ6IFNFQ1BUcmFuc2ZlcklucHV0ID0gbmV3IFNFQ1BUcmFuc2ZlcklucHV0KClcbiAgICAgICAgY29uc3Qgc2VjcHRyYW5zZmVyaW5wdXQyOiBTRUNQVHJhbnNmZXJJbnB1dCA9IG5ldyBTRUNQVHJhbnNmZXJJbnB1dCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBTRUNQVHJhbnNmZXJJbnB1dFwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICBzZWNwdHJhbnNmZXJpbnB1dCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiU0VDUFRyYW5zZmVySW5wdXRcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZSg1KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZSgwKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJzaWdJZHhzXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJhbW91bnRcIl0pLnRvQmUoYW1vdW50SGV4KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgc2VjcHRyYW5zZmVyaW5wdXQyKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyaW5wdXQyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJTRUNQVHJhbnNmZXJJbnB1dFwiKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyaW5wdXQyLmdldFR5cGVJRCgpKS50b0JlKDUpXG4gICAgICAgIGV4cGVjdChzZWNwdHJhbnNmZXJpbnB1dDIuZ2V0Q29kZWNJRCgpKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChzZWNwdHJhbnNmZXJpbnB1dDIuZ2V0QW1vdW50KCkudG9TdHJpbmcoKSkudG9CZShcbiAgICAgICAgICBhbW91bnQudG9TdHJpbmcoKVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZWNwdHJhbnNmZXJpbnB1dDIuZ2V0U2lnSWR4cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyaW5wdXQyLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICBzZWNwdHJhbnNmZXJpbnB1dC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyaW5wdXQyLnRvU3RyaW5nKCkpLnRvQmUoc2VjcHRyYW5zZmVyaW5wdXQudG9TdHJpbmcoKSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJNaW50ZXJTZXRcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBtaW50ZXJzZXQ6IE1pbnRlclNldCA9IG5ldyBNaW50ZXJTZXQodGhyZXNob2xkLCBtaW50ZXJzKVxuICAgICAgICBjb25zdCBtaW50ZXJzZXQyOiBNaW50ZXJTZXQgPSBuZXcgTWludGVyU2V0KClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIE1pbnRlclNldFwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICBtaW50ZXJzZXQsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIk1pbnRlclNldFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInRocmVzaG9sZFwiXSkudG9CZSh0aHJlc2hvbGRIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIm1pbnRlcnNcIl0pLnRvU3RyaWN0RXF1YWwoW3hBZGRyZXNzSGV4XSlcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIG1pbnRlcnNldDIpXG4gICAgICAgIGV4cGVjdChtaW50ZXJzZXQyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJNaW50ZXJTZXRcIilcbiAgICAgICAgZXhwZWN0KG1pbnRlcnNldDIuZ2V0VHlwZUlEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QobWludGVyc2V0Mi5nZXRDb2RlY0lEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QobWludGVyc2V0Mi5nZXRUaHJlc2hvbGQoKSkudG9CZSh0aHJlc2hvbGQpXG4gICAgICAgIGV4cGVjdChtaW50ZXJzZXQyLmdldE1pbnRlcnMoKSkudG9TdHJpY3RFcXVhbChbXG4gICAgICAgICAgc2VyaWFsaXphdGlvbi50eXBlVG9CdWZmZXIoeEFkZHJlc3NIZXgsIGhleClcbiAgICAgICAgXSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJUcmFuc2ZlcmFibGVPcGVyYXRpb25cIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzZWNwbWludG91dHB1dDogU0VDUE1pbnRPdXRwdXQgPSBuZXcgU0VDUE1pbnRPdXRwdXQoKVxuICAgICAgICBjb25zdCB0cmFuc2Zlck91dHB1dDogU0VDUFRyYW5zZmVyT3V0cHV0ID0gbmV3IFNFQ1BUcmFuc2Zlck91dHB1dCgpXG4gICAgICAgIGNvbnN0IHV0eG9pZHM6IHN0cmluZ1tdID0gW11cbiAgICAgICAgY29uc3Qgc2VjcG1pbnRvcGVyYXRpb246IFNFQ1BNaW50T3BlcmF0aW9uID0gbmV3IFNFQ1BNaW50T3BlcmF0aW9uKFxuICAgICAgICAgIHNlY3BtaW50b3V0cHV0LFxuICAgICAgICAgIHRyYW5zZmVyT3V0cHV0XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgdHJhbnNmZXJhYmxlb3BlcmF0aW9uOiBUcmFuc2ZlcmFibGVPcGVyYXRpb24gPVxuICAgICAgICAgIG5ldyBUcmFuc2ZlcmFibGVPcGVyYXRpb24oYXNzZXRJRCwgdXR4b2lkcywgc2VjcG1pbnRvcGVyYXRpb24pXG4gICAgICAgIGNvbnN0IHRyYW5zZmVyYWJsZW9wZXJhdGlvbjI6IFRyYW5zZmVyYWJsZU9wZXJhdGlvbiA9XG4gICAgICAgICAgbmV3IFRyYW5zZmVyYWJsZU9wZXJhdGlvbigpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBUcmFuc2ZlcmFibGVPcGVyYXRpb25cIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgdHJhbnNmZXJhYmxlb3BlcmF0aW9uLFxuICAgICAgICAgIHZtLFxuICAgICAgICAgIGhleCxcbiAgICAgICAgICBub3Rlc1xuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLnZtKS50b0JlKHZtKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5lbmNvZGluZykudG9CZShoZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLm5vdGVzKS50b0JlKG5vdGVzKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZU5hbWVcIl0pLnRvQmUoXCJUcmFuc2ZlcmFibGVPcGVyYXRpb25cIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJhc3NldElEXCJdKS50b0JlKGFzc2V0aWRIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInV0eG9JRHNcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCB0cmFuc2ZlcmFibGVvcGVyYXRpb24yKVxuICAgICAgICBleHBlY3QodHJhbnNmZXJhYmxlb3BlcmF0aW9uMi5nZXRUeXBlTmFtZSgpKS50b0JlKFxuICAgICAgICAgIFwiVHJhbnNmZXJhYmxlT3BlcmF0aW9uXCJcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QodHJhbnNmZXJhYmxlb3BlcmF0aW9uMi5nZXRUeXBlSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0cmFuc2ZlcmFibGVvcGVyYXRpb24yLmdldENvZGVjSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0cmFuc2ZlcmFibGVvcGVyYXRpb24yLmdldEFzc2V0SUQoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIGFzc2V0SUQudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdCh0cmFuc2ZlcmFibGVvcGVyYXRpb24yLmdldFVUWE9JRHMoKSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHRyYW5zZmVyYWJsZW9wZXJhdGlvbjIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHRyYW5zZmVyYWJsZW9wZXJhdGlvbi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QodHJhbnNmZXJhYmxlb3BlcmF0aW9uMi50b1N0cmluZygpKS50b0JlKFxuICAgICAgICAgIHRyYW5zZmVyYWJsZW9wZXJhdGlvbi50b1N0cmluZygpXG4gICAgICAgIClcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJTRUNQTWludE9wZXJhdGlvblwiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3BtaW50b3V0cHV0OiBTRUNQTWludE91dHB1dCA9IG5ldyBTRUNQTWludE91dHB1dCgpXG4gICAgICAgIGNvbnN0IHNlY3B0cmFuc2Zlcm91dHB1dDogU0VDUFRyYW5zZmVyT3V0cHV0ID0gbmV3IFNFQ1BUcmFuc2Zlck91dHB1dCgpXG4gICAgICAgIGNvbnN0IHNlY3BtaW50b3BlcmF0aW9uOiBTRUNQTWludE9wZXJhdGlvbiA9IG5ldyBTRUNQTWludE9wZXJhdGlvbihcbiAgICAgICAgICBzZWNwbWludG91dHB1dCxcbiAgICAgICAgICBzZWNwdHJhbnNmZXJvdXRwdXRcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzZWNwbWludG9wZXJhdGlvbjI6IFNFQ1BNaW50T3BlcmF0aW9uID0gbmV3IFNFQ1BNaW50T3BlcmF0aW9uKClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIFNFQ1BNaW50T3BlcmF0aW9uXCJcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICAgIHNlY3BtaW50b3BlcmF0aW9uLFxuICAgICAgICAgIHZtLFxuICAgICAgICAgIGhleCxcbiAgICAgICAgICBub3Rlc1xuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLnZtKS50b0JlKHZtKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5lbmNvZGluZykudG9CZShoZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLm5vdGVzKS50b0JlKG5vdGVzKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZU5hbWVcIl0pLnRvQmUoXCJTRUNQTWludE9wZXJhdGlvblwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlKDgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInNpZ0lkeHNcIl0pLnRvU3RyaWN0RXF1YWwoW10pXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCBzZWNwbWludG9wZXJhdGlvbjIpXG4gICAgICAgIGV4cGVjdChzZWNwbWludG9wZXJhdGlvbjIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIlNFQ1BNaW50T3BlcmF0aW9uXCIpXG4gICAgICAgIGV4cGVjdChzZWNwbWludG9wZXJhdGlvbjIuZ2V0VHlwZUlEKCkpLnRvQmUoOClcbiAgICAgICAgZXhwZWN0KHNlY3BtaW50b3BlcmF0aW9uMi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlY3BtaW50b3BlcmF0aW9uMi5nZXRTaWdJZHhzKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChzZWNwbWludG9wZXJhdGlvbjIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHNlY3BtaW50b3BlcmF0aW9uLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZWNwbWludG9wZXJhdGlvbjIudG9TdHJpbmcoKSkudG9CZShzZWNwbWludG9wZXJhdGlvbi50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIk5GVE1pbnRPcGVyYXRpb25cIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICAvLyBUT0RPIC0gZml4IHRoaXMgdHlwZSBtaXNtYXRjaFxuICAgICAgICAvLyBFcnJvciAtIFNlcmlhbGl6YWJsZS5kZXNlcmlhbGl6ZTogX3R5cGVOYW1lIG1pc21hdGNoIC0tIGV4cGVjdGVkOiBPdXRwdXRPd25lcnMgLS0gcmVjZWl2ZWQ6IE5GVE1pbnRPdXRwdXRcbiAgICAgICAgLy8gY29uc3QgbmZ0bWludG91dHB1dDogTkZUTWludE91dHB1dCA9IG5ldyBORlRNaW50T3V0cHV0KClcbiAgICAgICAgLy8gY29uc3QgbmZ0bWludG9wZXJhdGlvbjogTkZUTWludE9wZXJhdGlvbiA9IG5ldyBORlRNaW50T3BlcmF0aW9uKGdyb3VwSUQsIHBheWxvYWQsIFtuZnRtaW50b3V0cHV0XSlcbiAgICAgICAgLy8gY29uc3QgbmZ0bWludG9wZXJhdGlvbjI6IE5GVE1pbnRPcGVyYXRpb24gPSBuZXcgTkZUTWludE9wZXJhdGlvbigpXG4gICAgICAgIC8vIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBORlRNaW50T3BlcmF0aW9uXCJcbiAgICAgICAgLy8gY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKG5mdG1pbnRvcGVyYXRpb24sIHZtLCBoZXgsIG5vdGVzKVxuICAgICAgICAvLyBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgLy8gZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICAvLyBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgLy8gZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiTkZUTWludE9wZXJhdGlvblwiKVxuICAgICAgICAvLyBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlKDEyKVxuICAgICAgICAvLyBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZSgwKVxuICAgICAgICAvLyBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJzaWdJZHhzXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICAvLyBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJncm91cElEXCJdKS50b0JlKGdyb3VwSURIZXgpXG4gICAgICAgIC8vIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInBheWxvYWRcIl0pLnRvQmUocGF5bG9hZEhleClcbiAgICAgICAgLy8gc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCBuZnRtaW50b3BlcmF0aW9uMilcbiAgICAgICAgLy8gZXhwZWN0KG5mdG1pbnRvcGVyYXRpb24yLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJORlRNaW50T3BlcmF0aW9uXCIpXG4gICAgICAgIC8vIGV4cGVjdChuZnRtaW50b3BlcmF0aW9uMi5nZXRUeXBlSUQoKSkudG9CZSgxMilcbiAgICAgICAgLy8gZXhwZWN0KG5mdG1pbnRvcGVyYXRpb24yLmdldENvZGVjSUQoKSkudG9CZSgwKVxuICAgICAgICAvLyBleHBlY3QobmZ0bWludG9wZXJhdGlvbjIuZ2V0U2lnSWR4cygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICAvLyBleHBlY3QobmZ0bWludG9wZXJhdGlvbjIuZ2V0R3JvdXBJRCgpKS50b0JlKGdyb3VwSURIZXgpXG4gICAgICAgIC8vIGV4cGVjdChuZnRtaW50b3BlcmF0aW9uMi5nZXRQYXlsb2FkKCkudG9TdHJpbmcoXCJoZXhcIikpLnRvQmUocGF5bG9hZC50b1N0cmluZyhcImhleFwiKSlcbiAgICAgICAgLy8gZXhwZWN0KG5mdG1pbnRvcGVyYXRpb24yLnRvQnVmZmVyKCkudG9TdHJpbmcoXCJoZXhcIikpLnRvQmUobmZ0bWludG9wZXJhdGlvbi50b0J1ZmZlcigpLnRvU3RyaW5nKFwiaGV4XCIpKVxuICAgICAgICAvLyBleHBlY3QobmZ0bWludG9wZXJhdGlvbjIudG9TdHJpbmcoKSkudG9CZShuZnRtaW50b3BlcmF0aW9uLnRvU3RyaW5nKCkpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiTkZUVHJhbnNmZXJPcGVyYXRpb25cIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBuZnR0cmFuc2Zlcm91dHB1dDogTkZUVHJhbnNmZXJPdXRwdXQgPSBuZXcgTkZUVHJhbnNmZXJPdXRwdXQoXG4gICAgICAgICAgZ3JvdXBJRCxcbiAgICAgICAgICBwYXlsb2FkXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbmZ0dHJhbnNmZXJvcGVyYXRpb246IE5GVFRyYW5zZmVyT3BlcmF0aW9uID1cbiAgICAgICAgICBuZXcgTkZUVHJhbnNmZXJPcGVyYXRpb24obmZ0dHJhbnNmZXJvdXRwdXQpXG4gICAgICAgIGNvbnN0IG5mdHRyYW5zZmVyb3BlcmF0aW9uMjogTkZUVHJhbnNmZXJPcGVyYXRpb24gPVxuICAgICAgICAgIG5ldyBORlRUcmFuc2Zlck9wZXJhdGlvbigpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBORlRUcmFuc2Zlck9wZXJhdGlvblwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICBuZnR0cmFuc2Zlcm9wZXJhdGlvbixcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiTkZUVHJhbnNmZXJPcGVyYXRpb25cIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZSgxMylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wic2lnSWR4c1wiXSkudG9TdHJpY3RFcXVhbChbXSlcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIG5mdHRyYW5zZmVyb3BlcmF0aW9uMilcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3BlcmF0aW9uMi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiTkZUVHJhbnNmZXJPcGVyYXRpb25cIilcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3BlcmF0aW9uMi5nZXRUeXBlSUQoKSkudG9CZSgxMylcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3BlcmF0aW9uMi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3BlcmF0aW9uMi5nZXRPcGVyYXRpb25JRCgpKS50b0JlKDEzKVxuICAgICAgICBleHBlY3QobmZ0dHJhbnNmZXJvcGVyYXRpb24yLmdldENyZWRlbnRpYWxJRCgpKS50b0JlKDE0KVxuICAgICAgICBleHBlY3QobmZ0dHJhbnNmZXJvcGVyYXRpb24yLmdldE91dHB1dCgpLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICBuZnR0cmFuc2Zlcm91dHB1dC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QobmZ0dHJhbnNmZXJvcGVyYXRpb24yLmdldFNpZ0lkeHMoKSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3BlcmF0aW9uMi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgbmZ0dHJhbnNmZXJvcGVyYXRpb24udG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3BlcmF0aW9uMi50b1N0cmluZygpKS50b0JlKFxuICAgICAgICAgIG5mdHRyYW5zZmVyb3BlcmF0aW9uLnRvU3RyaW5nKClcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIlVUWE9JRFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGJzaXplOiBzdHJpbmcgPSBcIjAwMDAwMDI0XCJcbiAgICAgICAgY29uc3Qgc2l6ZTogbnVtYmVyID0gMzZcbiAgICAgICAgY29uc3QgYnl0ZXM6IHN0cmluZyA9XG4gICAgICAgICAgXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIlxuICAgICAgICBjb25zdCB1dHhvaWQ6IFVUWE9JRCA9IG5ldyBVVFhPSUQoKVxuICAgICAgICBjb25zdCB1dHhvaWQyOiBVVFhPSUQgPSBuZXcgVVRYT0lEKClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIFVUWE9JRFwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICB1dHhvaWQsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIlVUWE9JRFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImJzaXplXCJdKS50b0JlKGJzaXplKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJieXRlc1wiXSkudG9CZShieXRlcylcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIHV0eG9pZDIpXG4gICAgICAgIGV4cGVjdCh1dHhvaWQyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJVVFhPSURcIilcbiAgICAgICAgZXhwZWN0KHV0eG9pZDIuZ2V0VHlwZUlEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QodXR4b2lkMi5nZXRDb2RlY0lEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QodXR4b2lkMi5nZXRTaXplKCkpLnRvQmUoc2l6ZSlcbiAgICAgICAgZXhwZWN0KHV0eG9pZDIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHV0eG9pZC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QodXR4b2lkMi50b1N0cmluZygpKS50b0JlKHV0eG9pZDIudG9TdHJpbmcoKSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJUcmFuc2ZlcmFibGVPdXRwdXRcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzZWNwbWludG91dHB1dDogU0VDUE1pbnRPdXRwdXQgPSBuZXcgU0VDUE1pbnRPdXRwdXQoKVxuICAgICAgICBjb25zdCB0cmFuc2ZlcmFibGVvdXRwdXQ6IFRyYW5zZmVyYWJsZU91dHB1dCA9IG5ldyBUcmFuc2ZlcmFibGVPdXRwdXQoXG4gICAgICAgICAgYXNzZXRJRCxcbiAgICAgICAgICBzZWNwbWludG91dHB1dFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHRyYW5zZmVyYWJsZW91dHB1dDI6IFRyYW5zZmVyYWJsZU91dHB1dCA9IG5ldyBUcmFuc2ZlcmFibGVPdXRwdXQoKVxuICAgICAgICBjb25zdCBub3Rlczogc3RyaW5nID0gXCJBVk0gVHJhbnNmZXJhYmxlT3V0cHV0XCJcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICAgIHRyYW5zZmVyYWJsZW91dHB1dCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiVHJhbnNmZXJhYmxlT3V0cHV0XCIpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlSURcIl0pLnRvQmVOdWxsKClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmVOdWxsKClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiYXNzZXRJRFwiXSkudG9CZShhc3NldGlkSGV4KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgdHJhbnNmZXJhYmxlb3V0cHV0MilcbiAgICAgICAgZXhwZWN0KHRyYW5zZmVyYWJsZW91dHB1dDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIlRyYW5zZmVyYWJsZU91dHB1dFwiKVxuICAgICAgICBleHBlY3QodHJhbnNmZXJhYmxlb3V0cHV0Mi5nZXRUeXBlSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0cmFuc2ZlcmFibGVvdXRwdXQyLmdldENvZGVjSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0cmFuc2ZlcmFibGVvdXRwdXQyLmdldEFzc2V0SUQoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIGFzc2V0SUQudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdCh0cmFuc2ZlcmFibGVvdXRwdXQyLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICB0cmFuc2ZlcmFibGVvdXRwdXQudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHRyYW5zZmVyYWJsZW91dHB1dDIudG9TdHJpbmcoKSkudG9CZShcbiAgICAgICAgICB0cmFuc2ZlcmFibGVvdXRwdXQudG9TdHJpbmcoKVxuICAgICAgICApXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiU0VDUFRyYW5zZmVyT3V0cHV0XCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgc2VjcHRyYW5zZmVyb3V0cHV0OiBTRUNQVHJhbnNmZXJPdXRwdXQgPSBuZXcgU0VDUFRyYW5zZmVyT3V0cHV0KClcbiAgICAgICAgY29uc3Qgc2VjcHRyYW5zZmVyb3V0cHV0MjogU0VDUFRyYW5zZmVyT3V0cHV0ID0gbmV3IFNFQ1BUcmFuc2Zlck91dHB1dCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBTRUNQVHJhbnNmZXJPdXRwdXRcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgc2VjcHRyYW5zZmVyb3V0cHV0LFxuICAgICAgICAgIHZtLFxuICAgICAgICAgIGhleCxcbiAgICAgICAgICBub3Rlc1xuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLnZtKS50b0JlKHZtKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5lbmNvZGluZykudG9CZShoZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLm5vdGVzKS50b0JlKG5vdGVzKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZU5hbWVcIl0pLnRvQmUoXCJTRUNQVHJhbnNmZXJPdXRwdXRcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZSg3KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZSgwKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJsb2NrdGltZVwiXSkudG9CZShsb2NrdGltZUhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1widGhyZXNob2xkXCJdKS50b0JlKHRocmVzaG9sZEhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiYWRkcmVzc2VzXCJdKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJhbW91bnRcIl0pLnRvQmUoYW1vdW50SGV4KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgc2VjcHRyYW5zZmVyb3V0cHV0MilcbiAgICAgICAgZXhwZWN0KHNlY3B0cmFuc2Zlcm91dHB1dDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIlNFQ1BUcmFuc2Zlck91dHB1dFwiKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyb3V0cHV0Mi5nZXRUeXBlSUQoKSkudG9CZSg3KVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyb3V0cHV0Mi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlY3B0cmFuc2Zlcm91dHB1dDIuZ2V0TG9ja3RpbWUoKS50b1N0cmluZygpKS50b0JlKFxuICAgICAgICAgIGxvY2t0aW1lLnRvU3RyaW5nKClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyb3V0cHV0Mi5nZXRUaHJlc2hvbGQoKSkudG9CZSh0aHJlc2hvbGQpXG4gICAgICAgIGV4cGVjdChzZWNwdHJhbnNmZXJvdXRwdXQyLmdldEFkZHJlc3NlcygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyb3V0cHV0Mi5nZXRBbW91bnQoKS50b1N0cmluZygpKS50b1N0cmljdEVxdWFsKFxuICAgICAgICAgIGFtb3VudC50b1N0cmluZygpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlY3B0cmFuc2Zlcm91dHB1dDIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHNlY3B0cmFuc2Zlcm91dHB1dC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VjcHRyYW5zZmVyb3V0cHV0Mi50b1N0cmluZygpKS50b0JlKFxuICAgICAgICAgIHNlY3B0cmFuc2Zlcm91dHB1dC50b1N0cmluZygpXG4gICAgICAgIClcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJTRUNQTWludE91dHB1dFwiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3BtaW50b3V0cHV0OiBTRUNQTWludE91dHB1dCA9IG5ldyBTRUNQTWludE91dHB1dCgpXG4gICAgICAgIGNvbnN0IHNlY3BtaW50b3V0cHV0MjogU0VDUE1pbnRPdXRwdXQgPSBuZXcgU0VDUE1pbnRPdXRwdXQoKVxuICAgICAgICBjb25zdCBub3Rlczogc3RyaW5nID0gXCJBVk0gU0VDUE1pbnRPdXRwdXRcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgc2VjcG1pbnRvdXRwdXQsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIlNFQ1BNaW50T3V0cHV0XCIpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlSURcIl0pLnRvQmUoNilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wibG9ja3RpbWVcIl0pLnRvQmUobG9ja3RpbWVIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInRocmVzaG9sZFwiXSkudG9CZSh0aHJlc2hvbGRIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImFkZHJlc3Nlc1wiXSkudG9TdHJpY3RFcXVhbChbXSlcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIHNlY3BtaW50b3V0cHV0MilcbiAgICAgICAgZXhwZWN0KHNlY3BtaW50b3V0cHV0Mi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiU0VDUE1pbnRPdXRwdXRcIilcbiAgICAgICAgZXhwZWN0KHNlY3BtaW50b3V0cHV0Mi5nZXRUeXBlSUQoKSkudG9CZSg2KVxuICAgICAgICBleHBlY3Qoc2VjcG1pbnRvdXRwdXQyLmdldENvZGVjSUQoKSkudG9CZSgwKVxuICAgICAgICBleHBlY3Qoc2VjcG1pbnRvdXRwdXQyLmdldExvY2t0aW1lKCkudG9TdHJpbmcoKSkudG9CZShcbiAgICAgICAgICBsb2NrdGltZS50b1N0cmluZygpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlY3BtaW50b3V0cHV0Mi5nZXRUaHJlc2hvbGQoKSkudG9CZSh0aHJlc2hvbGQpXG4gICAgICAgIGV4cGVjdChzZWNwbWludG91dHB1dDIuZ2V0QWRkcmVzc2VzKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdChzZWNwbWludG91dHB1dDIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHNlY3BtaW50b3V0cHV0LnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdChzZWNwbWludG91dHB1dDIudG9TdHJpbmcoKSkudG9CZShzZWNwbWludG91dHB1dC50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIk5GVE1pbnRPdXRwdXRcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBuZnRtaW50b3V0cHV0OiBORlRNaW50T3V0cHV0ID0gbmV3IE5GVE1pbnRPdXRwdXQoZ3JvdXBJRClcbiAgICAgICAgY29uc3QgbmZ0bWludG91dHB1dDI6IE5GVE1pbnRPdXRwdXQgPSBuZXcgTkZUTWludE91dHB1dCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBORlRNaW50T3V0cHV0XCJcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICAgIG5mdG1pbnRvdXRwdXQsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIk5GVE1pbnRPdXRwdXRcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZSgxMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wibG9ja3RpbWVcIl0pLnRvQmUobG9ja3RpbWVIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInRocmVzaG9sZFwiXSkudG9CZSh0aHJlc2hvbGRIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImFkZHJlc3Nlc1wiXSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiZ3JvdXBJRFwiXSkudG9CZShncm91cElESGV4KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgbmZ0bWludG91dHB1dDIpXG4gICAgICAgIGV4cGVjdChuZnRtaW50b3V0cHV0Mi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiTkZUTWludE91dHB1dFwiKVxuICAgICAgICBleHBlY3QobmZ0bWludG91dHB1dDIuZ2V0VHlwZUlEKCkpLnRvQmUoMTApXG4gICAgICAgIGV4cGVjdChuZnRtaW50b3V0cHV0Mi5nZXRDb2RlY0lEKCkpLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KG5mdG1pbnRvdXRwdXQyLmdldExvY2t0aW1lKCkudG9TdHJpbmcoKSkudG9CZShcbiAgICAgICAgICBsb2NrdGltZS50b1N0cmluZygpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KG5mdG1pbnRvdXRwdXQyLmdldFRocmVzaG9sZCgpKS50b0JlKHRocmVzaG9sZClcbiAgICAgICAgZXhwZWN0KG5mdG1pbnRvdXRwdXQyLmdldEFkZHJlc3NlcygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QobmZ0bWludG91dHB1dDIuZ2V0R3JvdXBJRCgpKS50b0JlKGdyb3VwSUQpXG4gICAgICAgIGV4cGVjdChuZnRtaW50b3V0cHV0Mi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgbmZ0bWludG91dHB1dC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QobmZ0bWludG91dHB1dDIudG9TdHJpbmcoKSkudG9CZShuZnRtaW50b3V0cHV0LnRvU3RyaW5nKCkpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiTkZUVHJhbnNmZXJPdXRwdXRcIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBuZnR0cmFuc2Zlcm91dHB1dDogTkZUVHJhbnNmZXJPdXRwdXQgPSBuZXcgTkZUVHJhbnNmZXJPdXRwdXQoXG4gICAgICAgICAgZ3JvdXBJRCxcbiAgICAgICAgICBwYXlsb2FkXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbmZ0dHJhbnNmZXJvdXRwdXQyOiBORlRUcmFuc2Zlck91dHB1dCA9IG5ldyBORlRUcmFuc2Zlck91dHB1dCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBORlRUcmFuc2Zlck91dHB1dFwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICBuZnR0cmFuc2Zlcm91dHB1dCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiTkZUVHJhbnNmZXJPdXRwdXRcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZSgxMSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX2NvZGVjSURcIl0pLnRvQmUoMClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wibG9ja3RpbWVcIl0pLnRvQmUobG9ja3RpbWVIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInRocmVzaG9sZFwiXSkudG9CZSh0aHJlc2hvbGRIZXgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImFkZHJlc3Nlc1wiXSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiZ3JvdXBJRFwiXSkudG9CZShncm91cElESGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJwYXlsb2FkXCJdKS50b0JlKHBheWxvYWRIZXgpXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCBuZnR0cmFuc2Zlcm91dHB1dDIpXG4gICAgICAgIGV4cGVjdChuZnR0cmFuc2Zlcm91dHB1dDIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIk5GVFRyYW5zZmVyT3V0cHV0XCIpXG4gICAgICAgIGV4cGVjdChuZnR0cmFuc2Zlcm91dHB1dDIuZ2V0VHlwZUlEKCkpLnRvQmUoMTEpXG4gICAgICAgIGV4cGVjdChuZnR0cmFuc2Zlcm91dHB1dDIuZ2V0Q29kZWNJRCgpKS50b0JlKDApXG4gICAgICAgIGV4cGVjdChuZnR0cmFuc2Zlcm91dHB1dDIuZ2V0TG9ja3RpbWUoKS50b1N0cmluZygpKS50b0JlKFxuICAgICAgICAgIGxvY2t0aW1lLnRvU3RyaW5nKClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QobmZ0dHJhbnNmZXJvdXRwdXQyLmdldFRocmVzaG9sZCgpKS50b0JlKHRocmVzaG9sZClcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3V0cHV0Mi5nZXRBZGRyZXNzZXMoKSkudG9TdHJpY3RFcXVhbChbXSlcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3V0cHV0Mi5nZXRHcm91cElEKCkpLnRvQmUoZ3JvdXBJRClcbiAgICAgICAgZXhwZWN0KG5mdHRyYW5zZmVyb3V0cHV0Mi5nZXRQYXlsb2FkKCkudG9TdHJpbmcoaGV4KSkudG9CZShwYXlsb2FkSGV4KVxuICAgICAgICBleHBlY3QobmZ0dHJhbnNmZXJvdXRwdXQyLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICBuZnR0cmFuc2Zlcm91dHB1dC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QobmZ0dHJhbnNmZXJvdXRwdXQyLnRvU3RyaW5nKCkpLnRvQmUobmZ0dHJhbnNmZXJvdXRwdXQudG9TdHJpbmcoKSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJVbnNpZ25lZFR4XCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgYmFzZXR4OiBCYXNlVHggPSBuZXcgQmFzZVR4KFxuICAgICAgICAgIG5ldHdvcmtJRCxcbiAgICAgICAgICBibG9ja2NoYWluSURDQjU4LFxuICAgICAgICAgIG91dHMsXG4gICAgICAgICAgaW5zLFxuICAgICAgICAgIG1lbW9cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB1bnNpZ25lZHR4OiBVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoYmFzZXR4KVxuICAgICAgICBjb25zdCB1bnNpZ25lZHR4MjogVW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIFVuc2lnbmVkVHhcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgdW5zaWduZWR0eCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiVW5zaWduZWRUeFwiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlTnVsbCgpXG5cbiAgICAgICAgc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShzZXJpYWxpemVkLCB1bnNpZ25lZHR4MilcbiAgICAgICAgZXhwZWN0KHVuc2lnbmVkdHgyLmdldFR5cGVOYW1lKCkpLnRvQmUoXCJVbnNpZ25lZFR4XCIpXG4gICAgICAgIGV4cGVjdCh1bnNpZ25lZHR4Mi5nZXRUeXBlSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIC8vIFRPRE8gLSBTdGFuZGFyZFVuc2lnbmVkVHggaXMgc2V0dGluZyBjb2RlY0lEIHRvIDBcbiAgICAgICAgLy8gQnJpbmcgdGhpcyBpbmxpbmUgdy8gdGhlIG5ldyBjb2RlY0lEIHBhdHRlcm5zXG4gICAgICAgIC8vIGV4cGVjdCh1bnNpZ25lZHR4Mi5nZXRDb2RlY0lEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QodW5zaWduZWR0eDIudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpKS50b0JlKFxuICAgICAgICAgIHVuc2lnbmVkdHgudG9CdWZmZXIoKS50b1N0cmluZyhoZXgpXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHVuc2lnbmVkdHgyLnRvU3RyaW5nKCkpLnRvQmUodW5zaWduZWR0eC50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIlR4XCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgYmFzZXR4OiBCYXNlVHggPSBuZXcgQmFzZVR4KFxuICAgICAgICAgIG5ldHdvcmtJRCxcbiAgICAgICAgICBibG9ja2NoYWluSURDQjU4LFxuICAgICAgICAgIG91dHMsXG4gICAgICAgICAgaW5zLFxuICAgICAgICAgIG1lbW9cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB1bnNpZ25lZHR4OiBVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoYmFzZXR4KVxuICAgICAgICBjb25zdCB0eDogVHggPSBuZXcgVHgodW5zaWduZWR0eClcbiAgICAgICAgY29uc3QgdHgyOiBUeCA9IG5ldyBUeCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBUeFwiXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShcbiAgICAgICAgICB0eCxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiVHhcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJjcmVkZW50aWFsc1wiXSkudG9TdHJpY3RFcXVhbChbXSlcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIHR4MilcbiAgICAgICAgZXhwZWN0KHR4Mi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiVHhcIilcbiAgICAgICAgZXhwZWN0KHR4Mi5nZXRUeXBlSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0eDIuZ2V0Q29kZWNJRCgpKS50b0JlVW5kZWZpbmVkKClcbiAgICAgICAgZXhwZWN0KHR4Mi5nZXRDcmVkZW50aWFscygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QodHgyLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZSh0eC50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpXG4gICAgICAgIGV4cGVjdCh0eDIudG9TdHJpbmcoKSkudG9CZSh0eC50b1N0cmluZygpKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIlVUWE9cIiwgKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBjb2RlY0lEOiBudW1iZXIgPSAwXG4gICAgICAgIGNvbnN0IHR4SUQ6IEJ1ZmZlciA9IHNlcmlhbGl6YXRpb24udHlwZVRvQnVmZmVyKGNDaGFpbklELCBjYjU4KVxuICAgICAgICBjb25zdCB0eGlkSGV4OiBzdHJpbmcgPVxuICAgICAgICAgIFwiOWQwNzc1ZjQ1MDYwNGJkMmZiYzQ5Y2UwYzVjMWM2ZGZlYjJkYzJhY2I4YzkyYzI2ZWVhZTZlNmRmNDUwMmIxOVwiXG4gICAgICAgIGNvbnN0IG91dHB1dGlkeDogbnVtYmVyID0gMFxuICAgICAgICBjb25zdCBvdXRwdXRpZHhIZXg6IHN0cmluZyA9IFwiMDAwMDAwMDBcIlxuICAgICAgICBjb25zdCBhc3NldElEOiBCdWZmZXIgPSBzZXJpYWxpemF0aW9uLnR5cGVUb0J1ZmZlcihjQ2hhaW5JRCwgY2I1OClcbiAgICAgICAgY29uc3QgbmZ0dHJhbnNmZXJvdXRwdXQ6IE5GVFRyYW5zZmVyT3V0cHV0ID0gbmV3IE5GVFRyYW5zZmVyT3V0cHV0KFxuICAgICAgICAgIGdyb3VwSUQsXG4gICAgICAgICAgcGF5bG9hZFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHV0eG86IFVUWE8gPSBuZXcgVVRYTyhcbiAgICAgICAgICBjb2RlY0lELFxuICAgICAgICAgIHR4SUQsXG4gICAgICAgICAgb3V0cHV0aWR4LFxuICAgICAgICAgIGFzc2V0SUQsXG4gICAgICAgICAgbmZ0dHJhbnNmZXJvdXRwdXRcbiAgICAgICAgKVxuICAgICAgICBjb25zdCB1dHhvMjogVVRYTyA9IG5ldyBVVFhPKClcbiAgICAgICAgY29uc3Qgbm90ZXM6IHN0cmluZyA9IFwiQVZNIFVUWE9cIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgdXR4byxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiVVRYT1wiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcInR4aWRcIl0pLnRvQmUodHhpZEhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wib3V0cHV0aWR4XCJdKS50b0JlKG91dHB1dGlkeEhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiYXNzZXRJRFwiXSkudG9CZShhc3NldGlkSGV4KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgdXR4bzIpXG4gICAgICAgIGV4cGVjdCh1dHhvMi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiVVRYT1wiKVxuICAgICAgICBleHBlY3QodXR4bzIuZ2V0VHlwZUlEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICAvLyBUT0RPIC0gU3RhbmRhcmRVbnNpZ25lZFR4IGlzIHNldHRpbmcgY29kZWNJRCB0byAwXG4gICAgICAgIC8vIEJyaW5nIHRoaXMgaW5saW5lIHcvIHRoZSBuZXcgY29kZWNJRCBwYXR0ZXJuc1xuICAgICAgICAvLyBleHBlY3QodXR4bzIuZ2V0Q29kZWNJRCgpKS50b0JlVW5kZWZpbmVkKClcbiAgICAgICAgZXhwZWN0KHV0eG8yLmdldFR4SUQoKS50b1N0cmluZyhoZXgpKS50b0JlKHR4aWRIZXgpXG4gICAgICAgIGV4cGVjdCh1dHhvMi5nZXRPdXRwdXRJZHgoKS50b1N0cmluZyhoZXgpKS50b0JlKG91dHB1dGlkeEhleClcbiAgICAgICAgZXhwZWN0KHV0eG8yLmdldEFzc2V0SUQoKS50b1N0cmluZyhoZXgpKS50b0JlKGFzc2V0SUQudG9TdHJpbmcoaGV4KSlcbiAgICAgICAgZXhwZWN0KHV0eG8yLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KSkudG9CZShcbiAgICAgICAgICB1dHhvLnRvQnVmZmVyKCkudG9TdHJpbmcoaGV4KVxuICAgICAgICApXG4gICAgICAgIGV4cGVjdCh1dHhvMi50b1N0cmluZygpKS50b0JlKHV0eG8udG9TdHJpbmcoKSlcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJVVFhPU2V0XCIsICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgdXR4b3NldDogVVRYT1NldCA9IG5ldyBVVFhPU2V0KClcbiAgICAgICAgY29uc3QgdXR4b3NldDI6IFVUWE9TZXQgPSBuZXcgVVRYT1NldCgpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFWTSBVVFhPU2V0XCJcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICAgIHV0eG9zZXQsXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgaGV4LFxuICAgICAgICAgIG5vdGVzXG4gICAgICAgIClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQudm0pLnRvQmUodm0pXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmVuY29kaW5nKS50b0JlKGhleClcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQubm90ZXMpLnRvQmUobm90ZXMpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl90eXBlTmFtZVwiXSkudG9CZShcIlVUWE9TZXRcIilcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfY29kZWNJRFwiXSkudG9CZU51bGwoKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJ1dHhvc1wiXSkudG9TdHJpY3RFcXVhbCh7fSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiYWRkcmVzc1VUWE9zXCJdKS50b1N0cmljdEVxdWFsKHt9KVxuXG4gICAgICAgIHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc2VyaWFsaXplZCwgdXR4b3NldDIpXG4gICAgICAgIGV4cGVjdCh1dHhvc2V0Mi5nZXRUeXBlTmFtZSgpKS50b0JlKFwiVVRYT1NldFwiKVxuICAgICAgICBleHBlY3QodXR4b3NldDIuZ2V0VHlwZUlEKCkpLnRvQmVVbmRlZmluZWQoKVxuICAgICAgICBleHBlY3QodXR4b3NldDIuZ2V0Q29kZWNJRCgpKS50b0JlVW5kZWZpbmVkKClcbiAgICAgICAgZXhwZWN0KHV0eG9zZXQyLmdldEFsbFVUWE9zKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICAgIGV4cGVjdCh1dHhvc2V0Mi5nZXRBbGxVVFhPU3RyaW5ncygpKS50b1N0cmljdEVxdWFsKFtdKVxuICAgICAgICBleHBlY3QodXR4b3NldDIuZ2V0QWRkcmVzc2VzKCkpLnRvU3RyaWN0RXF1YWwoW10pXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiQWRkcmVzc1wiLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGJzaXplOiBzdHJpbmcgPSBcIjAwMDAwMDE0XCJcbiAgICAgICAgY29uc3QgYWRkcmVzczogQWRkcmVzcyA9IG5ldyBBZGRyZXNzKClcbiAgICAgICAgY29uc3QgYWRkcmVzczI6IEFkZHJlc3MgPSBuZXcgQWRkcmVzcygpXG4gICAgICAgIGNvbnN0IG5vdGVzOiBzdHJpbmcgPSBcIkFkZHJlc3NcIlxuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkID0gc2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICB2bSxcbiAgICAgICAgICBoZXgsXG4gICAgICAgICAgbm90ZXNcbiAgICAgICAgKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC52bSkudG9CZSh2bSlcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZW5jb2RpbmcpLnRvQmUoaGV4KVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5ub3RlcykudG9CZShub3RlcylcbiAgICAgICAgZXhwZWN0KHNlcmlhbGl6ZWQuZmllbGRzW1wiX3R5cGVOYW1lXCJdKS50b0JlKFwiQWRkcmVzc1wiKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJfdHlwZUlEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcIl9jb2RlY0lEXCJdKS50b0JlTnVsbCgpXG4gICAgICAgIGV4cGVjdChzZXJpYWxpemVkLmZpZWxkc1tcImJzaXplXCJdKS50b0JlKGJzaXplKVxuICAgICAgICBleHBlY3Qoc2VyaWFsaXplZC5maWVsZHNbXCJieXRlc1wiXSkudG9CZShieXRlcylcblxuICAgICAgICBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQsIGFkZHJlc3MyKVxuICAgICAgICBleHBlY3QoYWRkcmVzczIuZ2V0VHlwZU5hbWUoKSkudG9CZShcIkFkZHJlc3NcIilcbiAgICAgICAgZXhwZWN0KGFkZHJlc3MyLmdldFR5cGVJRCgpKS50b0JlVW5kZWZpbmVkKClcbiAgICAgICAgZXhwZWN0KGFkZHJlc3MyLmdldENvZGVjSUQoKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdChhZGRyZXNzMi50b0J1ZmZlcigpLnRvU3RyaW5nKGhleCkpLnRvQmUoXG4gICAgICAgICAgYWRkcmVzcy50b0J1ZmZlcigpLnRvU3RyaW5nKGhleClcbiAgICAgICAgKVxuICAgICAgICBleHBlY3QoYWRkcmVzczIudG9TdHJpbmcoKSkudG9CZShhZGRyZXNzLnRvU3RyaW5nKCkpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59KVxuIl19

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


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