UNPKG

bitgo

Version:
839 lines • 136 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GlobalCoinFactory = void 0;
exports.registerCoinConstructors = registerCoinConstructors;
exports.getCoinConstructor = getCoinConstructor;
exports.getTokenConstructor = getTokenConstructor;
/**
 * @prettier
 */
const sdk_coin_ada_1 = require("@bitgo/sdk-coin-ada");
const sdk_coin_algo_1 = require("@bitgo/sdk-coin-algo");
const sdk_coin_canton_1 = require("@bitgo/sdk-coin-canton");
const sdk_coin_bcha_1 = require("@bitgo/sdk-coin-bcha");
const sdk_coin_pearl_1 = require("@bitgo/sdk-coin-pearl");
const sdk_coin_hbar_1 = require("@bitgo/sdk-coin-hbar");
const sdk_coin_near_1 = require("@bitgo/sdk-coin-near");
const sdk_coin_sol_1 = require("@bitgo/sdk-coin-sol");
const sdk_coin_trx_1 = require("@bitgo/sdk-coin-trx");
const sdk_core_1 = require("@bitgo/sdk-core");
const sdk_coin_evm_1 = require("@bitgo/sdk-coin-evm");
const statics_1 = require("@bitgo/statics");
const coins_1 = require("./coins");
function registerCoinConstructors(coinFactory, coinMap = statics_1.coins) {
    coinFactory.register('ada', coins_1.Ada.createInstance);
    coinFactory.register('algo', coins_1.Algo.createInstance);
    coinFactory.register('apechain', coins_1.Apechain.createInstance);
    coinFactory.register('apt', coins_1.Apt.createInstance);
    coinFactory.register('arbeth', coins_1.Arbeth.createInstance);
    coinFactory.register('asi', coins_1.Asi.createInstance);
    coinFactory.register('atom', coins_1.Atom.createInstance);
    coinFactory.register('avaxc', coins_1.AvaxC.createInstance);
    coinFactory.register('avaxp', coins_1.AvaxP.createInstance);
    coinFactory.register('baby', coins_1.Baby.createInstance);
    coinFactory.register('bch', coins_1.Bch.createInstance);
    coinFactory.register('bcha', sdk_coin_bcha_1.Bcha.createInstance);
    coinFactory.register('bera', coins_1.Bera.createInstance);
    coinFactory.register('bld', coins_1.Bld.createInstance);
    coinFactory.register('bsc', coins_1.Bsc.createInstance);
    coinFactory.register('bsv', coins_1.Bsv.createInstance);
    coinFactory.register('btc', coins_1.Btc.createInstance);
    coinFactory.register('btg', coins_1.Btg.createInstance);
    coinFactory.register('canton', coins_1.Canton.createInstance);
    coinFactory.register('celo', coins_1.Celo.createInstance);
    coinFactory.register('coredao', coins_1.Coredao.createInstance);
    coinFactory.register('coreum', coins_1.Coreum.createInstance);
    coinFactory.register('cronos', coins_1.Cronos.createInstance);
    coinFactory.register('cspr', coins_1.Cspr.createInstance);
    coinFactory.register('dash', coins_1.Dash.createInstance);
    coinFactory.register('doge', coins_1.Doge.createInstance);
    coinFactory.register('dot', coins_1.Dot.createInstance);
    coinFactory.register('eos', coins_1.Eos.createInstance);
    coinFactory.register('etc', coins_1.Etc.createInstance);
    coinFactory.register('eth', coins_1.Eth.createInstance);
    coinFactory.register('ethw', coins_1.Ethw.createInstance);
    coinFactory.register('baseeth', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('opbnb', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('fantom', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('cotieth', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('og', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('tog', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('topbnb', coins_1.TethLikeCoin.createInstance);
    coinFactory.register('tfantom', coins_1.TethLikeCoin.createInstance);
    coinFactory.register('tcotieth', coins_1.TethLikeCoin.createInstance);
    coinFactory.register('tbaseeth', coins_1.TethLikeCoin.createInstance);
    for (const fiatCoin of coins_1.allFiatCoins) {
        coinFactory.register(fiatCoin.chain, coins_1.Fiat.createConstructor(fiatCoin));
    }
    coinFactory.register('flr', coins_1.Flr.createInstance);
    coinFactory.register('flrp', coins_1.Flrp.createInstance);
    coinFactory.register('gteth', coins_1.Gteth.createInstance);
    coinFactory.register('hash', coins_1.Hash.createInstance);
    coinFactory.register('hbar', coins_1.Hbar.createInstance);
    coinFactory.register('hteth', coins_1.Hteth.createInstance);
    coinFactory.register('lnbtc', coins_1.Lnbtc.createInstance);
    coinFactory.register('ltc', coins_1.Ltc.createInstance);
    coinFactory.register('mon', coins_1.Mon.createInstance);
    coinFactory.register('icp', coins_1.Icp.createInstance);
    coinFactory.register('initia', coins_1.Initia.createInstance);
    coinFactory.register('injective', coins_1.Injective.createInstance);
    coinFactory.register('iota', coins_1.Iota.createInstance);
    coinFactory.register('islm', coins_1.Islm.createInstance);
    coinFactory.register('kaspa', coins_1.Kaspa.createInstance);
    coinFactory.register('near', sdk_coin_near_1.Near.createInstance);
    coinFactory.register('oas', coins_1.Oas.createInstance);
    coinFactory.register('ofc', coins_1.Ofc.createInstance);
    coinFactory.register('opeth', coins_1.Opeth.createInstance);
    coinFactory.register('osmo', coins_1.Osmo.createInstance);
    coinFactory.register('pearl', sdk_coin_pearl_1.Pearl.createInstance);
    coinFactory.register('polygon', coins_1.Polygon.createInstance);
    coinFactory.register('polyx', coins_1.Polyx.createInstance);
    coinFactory.register('rbtc', coins_1.Rbtc.createInstance);
    coinFactory.register('thorchain:rune', coins_1.Rune.createInstance);
    coinFactory.register('sei', coins_1.Sei.createInstance);
    coinFactory.register('sepeth', coins_1.Sepeth.createInstance);
    coinFactory.register('sgb', coins_1.Sgb.createInstance);
    coinFactory.register('sol', coins_1.Sol.createInstance);
    coinFactory.register('soneium', coins_1.Soneium.createInstance);
    coinFactory.register('starknet', coins_1.Starknet.createInstance);
    coinFactory.register('stx', coins_1.Stx.createInstance);
    coinFactory.register('sui', coins_1.Sui.createInstance);
    coinFactory.register('susd', coins_1.Susd.createInstance);
    coinFactory.register('tao', coins_1.Tao.createInstance);
    coinFactory.register('tempo', coins_1.Tempo.createInstance);
    coinFactory.register('tia', coins_1.Tia.createInstance);
    coinFactory.register('ton', coins_1.Ton.createInstance);
    coinFactory.register('talgo', coins_1.Talgo.createInstance);
    coinFactory.register('tapechain', coins_1.Tapechain.createInstance);
    coinFactory.register('tapt', coins_1.Tapt.createInstance);
    coinFactory.register('tarbeth', coins_1.Tarbeth.createInstance);
    coinFactory.register('tada', coins_1.Tada.createInstance);
    coinFactory.register('tasi', coins_1.Tasi.createInstance);
    coinFactory.register('tatom', coins_1.Tatom.createInstance);
    coinFactory.register('tavaxc', coins_1.TavaxC.createInstance);
    coinFactory.register('tavaxp', coins_1.TavaxP.createInstance);
    coinFactory.register('tbaby', coins_1.Tbaby.createInstance);
    coinFactory.register('tbch', coins_1.Tbch.createInstance);
    coinFactory.register('tbcha', sdk_coin_bcha_1.Tbcha.createInstance);
    coinFactory.register('tbera', coins_1.Tbera.createInstance);
    coinFactory.register('tbld', coins_1.Tbld.createInstance);
    coinFactory.register('tbsc', coins_1.Tbsc.createInstance);
    coinFactory.register('tbsv', coins_1.Tbsv.createInstance);
    coinFactory.register('tbtc', coins_1.Tbtc.createInstance);
    coinFactory.register('tbtcsig', coins_1.Tbtcsig.createInstance);
    coinFactory.register('tbtc4', coins_1.Tbtc4.createInstance);
    coinFactory.register('tbtcbgsig', coins_1.Tbtcbgsig.createInstance);
    coinFactory.register('tcanton', coins_1.Tcanton.createInstance);
    coinFactory.register('tcelo', coins_1.Tcelo.createInstance);
    coinFactory.register('tcoredao', coins_1.Tcoredao.createInstance);
    coinFactory.register('tcoreum', coins_1.Tcoreum.createInstance);
    coinFactory.register('tcronos', coins_1.Tcronos.createInstance);
    coinFactory.register('tcspr', coins_1.Tcspr.createInstance);
    coinFactory.register('tdash', coins_1.Tdash.createInstance);
    coinFactory.register('tdoge', coins_1.Tdoge.createInstance);
    coinFactory.register('tdot', coins_1.Tdot.createInstance);
    coinFactory.register('teos', coins_1.Teos.createInstance);
    coinFactory.register('tetc', coins_1.Tetc.createInstance);
    coinFactory.register('teth', coins_1.Teth.createInstance);
    coinFactory.register('tflr', coins_1.Tflr.createInstance);
    coinFactory.register('tflrp', coins_1.Flrp.createInstance);
    coinFactory.register('tmon', coins_1.Tmon.createInstance);
    coinFactory.register('thash', coins_1.Thash.createInstance);
    coinFactory.register('thbar', coins_1.Thbar.createInstance);
    coinFactory.register('ticp', coins_1.Ticp.createInstance);
    coinFactory.register('tinitia', coins_1.Tinitia.createInstance);
    coinFactory.register('tinjective', coins_1.Tinjective.createInstance);
    coinFactory.register('tiota', coins_1.Iota.createInstance);
    coinFactory.register('tislm', coins_1.Tislm.createInstance);
    coinFactory.register('tkaspa', coins_1.Kaspa.createInstance);
    coinFactory.register('tlnbtc', coins_1.Tlnbtc.createInstance);
    coinFactory.register('tltc', coins_1.Tltc.createInstance);
    coinFactory.register('tnear', sdk_coin_near_1.TNear.createInstance);
    coinFactory.register('toas', coins_1.Toas.createInstance);
    coinFactory.register('topeth', coins_1.Topeth.createInstance);
    coinFactory.register('tosmo', coins_1.Tosmo.createInstance);
    coinFactory.register('tpearl', sdk_coin_pearl_1.Tpearl.createInstance);
    coinFactory.register('tpolygon', coins_1.Tpolygon.createInstance);
    coinFactory.register('tpolyx', coins_1.Tpolyx.createInstance);
    coinFactory.register('trbtc', coins_1.Trbtc.createInstance);
    coinFactory.register('tsgb', coins_1.Tsgb.createInstance);
    coinFactory.register('tthorchain:rune', coins_1.Trune.createInstance);
    coinFactory.register('trx', coins_1.Trx.createInstance);
    coinFactory.register('tsei', coins_1.Tsei.createInstance);
    coinFactory.register('tsol', coins_1.Tsol.createInstance);
    coinFactory.register('tsoneium', coins_1.Tsoneium.createInstance);
    coinFactory.register('tstarknet', coins_1.Starknet.createInstance);
    coinFactory.register('tstx', coins_1.Tstx.createInstance);
    coinFactory.register('tstt', coins_1.Tstt.createInstance);
    coinFactory.register('tsui', coins_1.Tsui.createInstance);
    coinFactory.register('tsusd', coins_1.Tsusd.createInstance);
    coinFactory.register('ttao', coins_1.Ttao.createInstance);
    coinFactory.register('ttempo', coins_1.Ttempo.createInstance);
    coinFactory.register('ttia', coins_1.Ttia.createInstance);
    coinFactory.register('tton', coins_1.Tton.createInstance);
    coinFactory.register('ttrx', coins_1.Ttrx.createInstance);
    coinFactory.register('tvet', coins_1.Tvet.createInstance);
    coinFactory.register('txdc', coins_1.Txdc.createInstance);
    coinFactory.register('txlm', coins_1.Txlm.createInstance);
    coinFactory.register('txrp', coins_1.Txrp.createInstance);
    coinFactory.register('txtz', coins_1.Txtz.createInstance);
    coinFactory.register('tzec', coins_1.Tzec.createInstance);
    coinFactory.register('tzeta', coins_1.Tzeta.createInstance);
    coinFactory.register('tzketh', coins_1.Tzketh.createInstance);
    coinFactory.register('twemix', coins_1.Twemix.createInstance);
    coinFactory.register('tworld', coins_1.Tworld.createInstance);
    coinFactory.register('vet', coins_1.Vet.createInstance);
    coinFactory.register('xdc', coins_1.Xdc.createInstance);
    coinFactory.register('xlm', coins_1.Xlm.createInstance);
    coinFactory.register('xrp', coins_1.Xrp.createInstance);
    coinFactory.register('xtz', coins_1.Xtz.createInstance);
    coinFactory.register('wemix', coins_1.Wemix.createInstance);
    coinFactory.register('world', coins_1.World.createInstance);
    coinFactory.register('zec', coins_1.Zec.createInstance);
    coinFactory.register('zeta', coins_1.Zeta.createInstance);
    coinFactory.register('zketh', coins_1.Zketh.createInstance);
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_EVM_SDK))
        .forEach((coin) => {
        coinFactory.register(coin.name, coins_1.EvmCoin.createInstance);
    });
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_COSMOS_SDK))
        .forEach((coin) => {
        coinFactory.register(coin.name, coins_1.CosmosSharedCoin.createInstance);
    });
    const tokens = (0, statics_1.getFormattedTokens)(coinMap);
    coins_1.Erc20Token.createTokenConstructors([...tokens.bitcoin.eth.tokens, ...tokens.testnet.eth.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.Erc721Token.createTokenConstructors([...tokens.bitcoin.eth.nfts, ...tokens.testnet.eth.nfts]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.Erc7984Token.createTokenConstructors([
        ...tokens.bitcoin.eth.confidentialTokens,
        ...tokens.testnet.eth.confidentialTokens,
    ]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.StellarToken.createTokenConstructors([...tokens.bitcoin.xlm.tokens, ...tokens.testnet.xlm.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    for (const ofcToken of [...tokens.bitcoin.ofc.tokens, ...tokens.testnet.ofc.tokens]) {
        const tokenConstructor = coins_1.OfcToken.createTokenConstructor(ofcToken);
        coinFactory.register(ofcToken.type, tokenConstructor);
    }
    coins_1.CeloToken.createTokenConstructors([...tokens.bitcoin.celo.tokens, ...tokens.testnet.celo.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.BscToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.EosToken.createTokenConstructors([...tokens.bitcoin.eos.tokens, ...tokens.testnet.eos.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_algo_1.AlgoToken.createTokenConstructors([...tokens.bitcoin.algo.tokens, ...tokens.testnet.algo.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.AvaxCToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.PolygonToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.SoneiumToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.ArbethToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.OpethToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.ZkethToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.BeraToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.CoredaoToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.WorldToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_sol_1.SolToken.createTokenConstructors([...tokens.bitcoin.sol.tokens, ...tokens.testnet.sol.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_canton_1.CantonToken.createTokenConstructors([...tokens.bitcoin.canton.tokens, ...tokens.testnet.canton.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_hbar_1.HbarToken.createTokenConstructors([...tokens.bitcoin.hbar.tokens, ...tokens.testnet.hbar.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_trx_1.TrxToken.createTokenConstructors([...tokens.bitcoin.trx.tokens, ...tokens.testnet.trx.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_ada_1.AdaToken.createTokenConstructors([...tokens.bitcoin.ada.tokens, ...tokens.testnet.ada.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.SuiToken.createTokenConstructors([...tokens.bitcoin.sui.tokens, ...tokens.testnet.sui.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.TaoToken.createTokenConstructors([...tokens.bitcoin.tao.tokens, ...tokens.testnet.tao.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.Tip20Token.createTokenConstructors([...tokens.bitcoin.tempo.tokens, ...tokens.testnet.tempo.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.PolyxToken.createTokenConstructors([...tokens.bitcoin.polyx.tokens, ...tokens.testnet.polyx.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.XrpToken.createTokenConstructors([...tokens.bitcoin.xrp.tokens, ...tokens.testnet.xrp.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.XrpMptToken.createTokenConstructors([...tokens.bitcoin.xrp.mptTokens, ...tokens.testnet.xrp.mptTokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.AptToken.createTokenConstructors([...tokens.bitcoin.apt.tokens, ...tokens.testnet.apt.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.Sip10Token.createTokenConstructors([...tokens.bitcoin.stx.tokens, ...tokens.testnet.stx.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    sdk_coin_near_1.Nep141Token.createTokenConstructors([...tokens.bitcoin.near.tokens, ...tokens.testnet.near.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.HashToken.createTokenConstructors([...tokens.bitcoin.cosmos.tokens, ...tokens.testnet.cosmos.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.JettonToken.createTokenConstructors([...tokens.bitcoin.ton.tokens, ...tokens.testnet.ton.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.VetToken.createTokenConstructors().forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.FlrToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.MonToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.XdcToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    // Generic ERC20 token registration for coins with SUPPORTS_ERC20 feature
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SUPPORTS_ERC20) && !coin.isToken)
        .forEach((coin) => {
        const coinNames = {
            Mainnet: `${coin.name}`,
            Testnet: `t${coin.name}`,
        };
        sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructors(coinNames).forEach(({ name, coinConstructor }) => {
            coinFactory.register(name, coinConstructor);
        });
    });
    // Generic ERC721 token registration for coins with SUPPORTS_ERC721 feature
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SUPPORTS_ERC721) && !coin.isToken)
        .forEach((coin) => {
        const coinNames = {
            Mainnet: `${coin.name}`,
            Testnet: `t${coin.name}`,
        };
        sdk_coin_evm_1.EthLikeErc721Token.createTokenConstructors(coinNames).forEach(({ name, coinConstructor }) => {
            coinFactory.register(name, coinConstructor);
        });
    });
}
function getCoinConstructor(coinName) {
    const evmCoins = statics_1.coins.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_EVM_SDK));
    const cosmosSharedCoins = statics_1.coins.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_COSMOS_SDK));
    if (evmCoins.has(coinName)) {
        return coins_1.EvmCoin.createInstance;
    }
    if (cosmosSharedCoins.has(coinName)) {
        return coins_1.CosmosSharedCoin.createInstance;
    }
    switch (coinName) {
        case 'ada':
            return coins_1.Ada.createInstance;
        case 'algo':
            return coins_1.Algo.createInstance;
        case 'apechain':
            return coins_1.Apechain.createInstance;
        case 'apt':
            return coins_1.Apt.createInstance;
        case 'arbeth':
            return coins_1.Arbeth.createInstance;
        case 'asi':
            return coins_1.Asi.createInstance;
        case 'atom':
            return coins_1.Atom.createInstance;
        case 'avaxc':
            return coins_1.AvaxC.createInstance;
        case 'avaxp':
            return coins_1.AvaxP.createInstance;
        case 'baby':
            return coins_1.Baby.createInstance;
        case 'bch':
            return coins_1.Bch.createInstance;
        case 'bcha':
            return sdk_coin_bcha_1.Bcha.createInstance;
        case 'bera':
            return coins_1.Bera.createInstance;
        case 'bld':
            return coins_1.Bld.createInstance;
        case 'bsc':
            return coins_1.Bsc.createInstance;
        case 'bsv':
            return coins_1.Bsv.createInstance;
        case 'btc':
            return coins_1.Btc.createInstance;
        case 'btg':
            return coins_1.Btg.createInstance;
        case 'canton':
            return coins_1.Canton.createInstance;
        case 'celo':
            return coins_1.Celo.createInstance;
        case 'coredao':
            return coins_1.Coredao.createInstance;
        case 'coreum':
            return coins_1.Coreum.createInstance;
        case 'cronos':
            return coins_1.Cronos.createInstance;
        case 'cspr':
            return coins_1.Cspr.createInstance;
        case 'dash':
            return coins_1.Dash.createInstance;
        case 'doge':
            return coins_1.Doge.createInstance;
        case 'dot':
            return coins_1.Dot.createInstance;
        case 'eos':
            return coins_1.Eos.createInstance;
        case 'etc':
            return coins_1.Etc.createInstance;
        case 'eth':
            return coins_1.Eth.createInstance;
        case 'ethw':
            return coins_1.Ethw.createInstance;
        case 'baseeth':
            return coins_1.EthLikeCoin.createInstance;
        case 'opbnb':
            return coins_1.EthLikeCoin.createInstance;
        case 'fantom':
            return coins_1.EthLikeCoin.createInstance;
        case 'cotieth':
            return coins_1.EthLikeCoin.createInstance;
        case 'tbaseeth':
            return coins_1.TethLikeCoin.createInstance;
        case 'topbnb':
            return coins_1.TethLikeCoin.createInstance;
        case 'tfantom':
            return coins_1.TethLikeCoin.createInstance;
        case 'tcotieth':
            return coins_1.TethLikeCoin.createInstance;
        case 'flr':
            return coins_1.Flr.createInstance;
        case 'flrp':
            return coins_1.Flrp.createInstance;
        case 'gteth':
            return coins_1.Gteth.createInstance;
        case 'hash':
            return coins_1.Hash.createInstance;
        case 'hbar':
            return coins_1.Hbar.createInstance;
        case 'hteth':
            return coins_1.Hteth.createInstance;
        case 'lnbtc':
            return coins_1.Lnbtc.createInstance;
        case 'ltc':
            return coins_1.Ltc.createInstance;
        case 'mon':
            return coins_1.Mon.createInstance;
        case 'icp':
            return coins_1.Icp.createInstance;
        case 'initia':
            return coins_1.Initia.createInstance;
        case 'injective':
            return coins_1.Injective.createInstance;
        case 'iota':
            return coins_1.Iota.createInstance;
        case 'islm':
            return coins_1.Islm.createInstance;
        case 'kaspa':
            return coins_1.Kaspa.createInstance;
        case 'near':
            return sdk_coin_near_1.Near.createInstance;
        case 'oas':
            return coins_1.Oas.createInstance;
        case 'ofc':
            return coins_1.Ofc.createInstance;
        case 'opeth':
            return coins_1.Opeth.createInstance;
        case 'osmo':
            return coins_1.Osmo.createInstance;
        case 'pearl':
            return sdk_coin_pearl_1.Pearl.createInstance;
        case 'polygon':
            return coins_1.Polygon.createInstance;
        case 'polyx':
            return coins_1.Polyx.createInstance;
        case 'rbtc':
            return coins_1.Rbtc.createInstance;
        case 'thorchain:rune':
            return coins_1.Rune.createInstance;
        case 'sei':
            return coins_1.Sei.createInstance;
        case 'sepeth':
            return coins_1.Sepeth.createInstance;
        case 'sgb':
            return coins_1.Sgb.createInstance;
        case 'sol':
            return coins_1.Sol.createInstance;
        case 'soneium':
            return coins_1.Soneium.createInstance;
        case 'starknet':
            return coins_1.Starknet.createInstance;
        case 'stx':
            return coins_1.Stx.createInstance;
        case 'sui':
            return coins_1.Sui.createInstance;
        case 'susd':
            return coins_1.Susd.createInstance;
        case 'tao':
            return coins_1.Tao.createInstance;
        case 'tempo':
            return coins_1.Tempo.createInstance;
        case 'tia':
            return coins_1.Tia.createInstance;
        case 'ton':
            return coins_1.Ton.createInstance;
        case 'talgo':
            return coins_1.Talgo.createInstance;
        case 'tapechain':
            return coins_1.Tapechain.createInstance;
        case 'tapt':
            return coins_1.Tapt.createInstance;
        case 'tarbeth':
            return coins_1.Tarbeth.createInstance;
        case 'tada':
            return coins_1.Tada.createInstance;
        case 'tasi':
            return coins_1.Tasi.createInstance;
        case 'tatom':
            return coins_1.Tatom.createInstance;
        case 'tavaxc':
            return coins_1.TavaxC.createInstance;
        case 'tavaxp':
            return coins_1.TavaxP.createInstance;
        case 'tbaby':
            return coins_1.Tbaby.createInstance;
        case 'tbch':
            return coins_1.Tbch.createInstance;
        case 'tbcha':
            return sdk_coin_bcha_1.Tbcha.createInstance;
        case 'tbera':
            return coins_1.Tbera.createInstance;
        case 'tbld':
            return coins_1.Tbld.createInstance;
        case 'tbsc':
            return coins_1.Tbsc.createInstance;
        case 'tbsv':
            return coins_1.Tbsv.createInstance;
        case 'tbtc':
            return coins_1.Tbtc.createInstance;
        case 'tbtcsig':
            return coins_1.Tbtcsig.createInstance;
        case 'tbtc4':
            return coins_1.Tbtc4.createInstance;
        case 'tbtcbgsig':
            return coins_1.Tbtcbgsig.createInstance;
        case 'tcanton':
            return coins_1.Tcanton.createInstance;
        case 'tcelo':
            return coins_1.Tcelo.createInstance;
        case 'tcoredao':
            return coins_1.Tcoredao.createInstance;
        case 'tcoreum':
            return coins_1.Tcoreum.createInstance;
        case 'tcronos':
            return coins_1.Tcronos.createInstance;
        case 'tcspr':
            return coins_1.Tcspr.createInstance;
        case 'tdash':
            return coins_1.Tdash.createInstance;
        case 'tdoge':
            return coins_1.Tdoge.createInstance;
        case 'tdot':
            return coins_1.Tdot.createInstance;
        case 'teos':
            return coins_1.Teos.createInstance;
        case 'tetc':
            return coins_1.Tetc.createInstance;
        case 'teth':
            return coins_1.Teth.createInstance;
        case 'tflr':
            return coins_1.Tflr.createInstance;
        case 'tflrp':
            return coins_1.Flrp.createInstance;
        case 'tmon':
            return coins_1.Tmon.createInstance;
        case 'thash':
            return coins_1.Thash.createInstance;
        case 'thbar':
            return coins_1.Thbar.createInstance;
        case 'ticp':
            return coins_1.Ticp.createInstance;
        case 'tinitia':
            return coins_1.Tinitia.createInstance;
        case 'tinjective':
            return coins_1.Tinjective.createInstance;
        case 'tiota':
            return coins_1.Iota.createInstance;
        case 'tislm':
            return coins_1.Tislm.createInstance;
        case 'tkaspa':
            return coins_1.Kaspa.createInstance;
        case 'tlnbtc':
            return coins_1.Tlnbtc.createInstance;
        case 'tltc':
            return coins_1.Tltc.createInstance;
        case 'tnear':
            return sdk_coin_near_1.TNear.createInstance;
        case 'toas':
            return coins_1.Toas.createInstance;
        case 'topeth':
            return coins_1.Topeth.createInstance;
        case 'tosmo':
            return coins_1.Tosmo.createInstance;
        case 'tpearl':
            return sdk_coin_pearl_1.Tpearl.createInstance;
        case 'tpolygon':
            return coins_1.Tpolygon.createInstance;
        case 'tpolyx':
            return coins_1.Tpolyx.createInstance;
        case 'trbtc':
            return coins_1.Trbtc.createInstance;
        case 'tsgb':
            return coins_1.Tsgb.createInstance;
        case 'tthorchain:rune':
            return coins_1.Trune.createInstance;
        case 'trx':
            return coins_1.Trx.createInstance;
        case 'tsei':
            return coins_1.Tsei.createInstance;
        case 'tsol':
            return coins_1.Tsol.createInstance;
        case 'tsoneium':
            return coins_1.Tsoneium.createInstance;
        case 'tstarknet':
            return coins_1.Starknet.createInstance;
        case 'tstx':
            return coins_1.Tstx.createInstance;
        case 'tstt':
            return coins_1.Tstt.createInstance;
        case 'tsui':
            return coins_1.Tsui.createInstance;
        case 'tsusd':
            return coins_1.Tsusd.createInstance;
        case 'ttao':
            return coins_1.Ttao.createInstance;
        case 'ttempo':
            return coins_1.Ttempo.createInstance;
        case 'ttia':
            return coins_1.Ttia.createInstance;
        case 'tton':
            return coins_1.Tton.createInstance;
        case 'ttrx':
            return coins_1.Ttrx.createInstance;
        case 'tvet':
            return coins_1.Tvet.createInstance;
        case 'txdc':
            return coins_1.Txdc.createInstance;
        case 'txlm':
            return coins_1.Txlm.createInstance;
        case 'txrp':
            return coins_1.Txrp.createInstance;
        case 'txtz':
            return coins_1.Txtz.createInstance;
        case 'tzec':
            return coins_1.Tzec.createInstance;
        case 'tzeta':
            return coins_1.Tzeta.createInstance;
        case 'tzketh':
            return coins_1.Tzketh.createInstance;
        case 'twemix':
            return coins_1.Twemix.createInstance;
        case 'tworld':
            return coins_1.Tworld.createInstance;
        case 'vet':
            return coins_1.Vet.createInstance;
        case 'xdc':
            return coins_1.Xdc.createInstance;
        case 'xlm':
            return coins_1.Xlm.createInstance;
        case 'xrp':
            return coins_1.Xrp.createInstance;
        case 'xtz':
            return coins_1.Xtz.createInstance;
        case 'wemix':
            return coins_1.Wemix.createInstance;
        case 'world':
            return coins_1.World.createInstance;
        case 'zec':
            return coins_1.Zec.createInstance;
        case 'zeta':
            return coins_1.Zeta.createInstance;
        case 'zketh':
            return coins_1.Zketh.createInstance;
        default: {
            const fiatConfig = coins_1.allFiatCoins.find((c) => c.chain === coinName);
            if (fiatConfig) {
                return coins_1.Fiat.createConstructor(fiatConfig);
            }
            return undefined;
        }
    }
}
function getTokenConstructor(tokenConfig) {
    const coin = statics_1.coins.get(tokenConfig.coin);
    if ('network' in tokenConfig &&
        tokenConfig.network === 'Mainnet' &&
        coin?.features.includes(statics_1.CoinFeature.SUPPORTS_ERC20)) {
        return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, {
            Mainnet: tokenConfig.coin,
            Testnet: `t${tokenConfig.coin}`,
        });
    }
    if ('network' in tokenConfig &&
        tokenConfig.network === 'Mainnet' &&
        coin?.features.includes(statics_1.CoinFeature.SUPPORTS_ERC721)) {
        return sdk_coin_evm_1.EthLikeErc721Token.createTokenConstructor(tokenConfig, {
            Mainnet: tokenConfig.coin,
            Testnet: `t${tokenConfig.coin}`,
        });
    }
    switch (tokenConfig.coin) {
        case 'eth':
        case 'hteth': {
            const staticCoin = statics_1.coins.get(tokenConfig.type);
            if (staticCoin instanceof statics_1.Erc7984Coin) {
                return coins_1.Erc7984Token.createTokenConstructor(tokenConfig);
            }
            else if (tokenConfig.type.includes('erc721')) {
                return coins_1.Erc721Token.createTokenConstructor(tokenConfig);
            }
            else {
                return coins_1.Erc20Token.createTokenConstructor(tokenConfig);
            }
        }
        case 'xlm':
        case 'txlm':
            return coins_1.StellarToken.createTokenConstructor(tokenConfig);
        case 'ofc':
            return coins_1.OfcToken.createTokenConstructor(tokenConfig);
        case 'celo':
        case 'tcelo':
            return coins_1.CeloToken.createTokenConstructor(tokenConfig);
        case 'bsc':
        case 'tbsc':
            return coins_1.BscToken.createTokenConstructor(tokenConfig);
        case 'eos':
        case 'teos':
            return coins_1.EosToken.createTokenConstructor(tokenConfig);
        case 'algo':
        case 'talgo':
            return sdk_coin_algo_1.AlgoToken.createTokenConstructor(tokenConfig);
        case 'avaxc':
        case 'tavaxc':
            return coins_1.AvaxCToken.createTokenConstructor(tokenConfig);
        case 'polygon':
        case 'tpolygon':
            return coins_1.PolygonToken.createTokenConstructor(tokenConfig);
        case 'soneium':
        case 'tsoneium':
            return coins_1.SoneiumToken.createTokenConstructor(tokenConfig);
        case 'arbeth':
        case 'tarbeth':
            return coins_1.ArbethToken.createTokenConstructor(tokenConfig);
        case 'opeth':
        case 'topeth':
            return coins_1.OpethToken.createTokenConstructor(tokenConfig);
        case 'zketh':
        case 'tzketh':
            return coins_1.ZkethToken.createTokenConstructor(tokenConfig);
        case 'bera':
        case 'tbera':
            return coins_1.BeraToken.createTokenConstructor(tokenConfig);
        case 'baseeth':
        case 'tbaseeth':
            const coinNames = { Mainnet: 'baseeth', Testnet: 'tbaseeth' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        case 'opbnb':
        case 'topbnb':
            const opbnbCoinNames = { Mainnet: 'opbnb', Testnet: 'topbnb' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, opbnbCoinNames);
        case 'coredao':
        case 'tcoredao':
            return coins_1.CoredaoToken.createTokenConstructor(tokenConfig);
        case 'world':
        case 'tworld':
            return coins_1.WorldToken.createTokenConstructor(tokenConfig);
        case 'sol':
        case 'tsol':
            return sdk_coin_sol_1.SolToken.createTokenConstructor(tokenConfig);
        case 'hbar':
        case 'thbar':
            return sdk_coin_hbar_1.HbarToken.createTokenConstructor(tokenConfig);
        case 'trx':
        case 'ttrx':
            return sdk_coin_trx_1.TrxToken.createTokenConstructor(tokenConfig);
        case 'ada':
        case 'tada':
            return sdk_coin_ada_1.AdaToken.createTokenConstructor(tokenConfig);
        case 'sui':
        case 'tsui':
            return coins_1.SuiToken.createTokenConstructor(tokenConfig);
        case 'tao':
        case 'ttao':
            return coins_1.TaoToken.createTokenConstructor(tokenConfig);
        case 'tempo':
        case 'ttempo':
            return coins_1.Tip20Token.createTokenConstructor(tokenConfig);
        case 'polyx':
        case 'tpolyx':
            return coins_1.PolyxToken.createTokenConstructor(tokenConfig);
        case 'xrp':
        case 'txrp':
            if ('canTransfer' in tokenConfig) {
                return coins_1.XrpMptToken.createTokenConstructor(tokenConfig);
            }
            return coins_1.XrpToken.createTokenConstructor(tokenConfig);
        case 'apt':
        case 'tapt':
            return coins_1.AptToken.createTokenConstructor(tokenConfig);
        case 'flow':
        case 'tflow': {
            const coinNames = { Mainnet: 'flow', Testnet: 'tflow' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        }
        case 'seievm':
        case 'tseievm': {
            const coinNames = { Mainnet: 'seievm', Testnet: 'tseievm' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        }
        case 'lineaeth':
        case 'tlineaeth': {
            const coinNames = { Mainnet: 'lineaeth', Testnet: 'tlineaeth' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        }
        case 'stx':
        case 'tstx':
            return coins_1.Sip10Token.createTokenConstructor(tokenConfig);
        case 'near':
        case 'tnear':
            return sdk_coin_near_1.Nep141Token.createTokenConstructor(tokenConfig);
        case 'vet':
        case 'tvet':
            return coins_1.VetToken.createTokenConstructor(tokenConfig);
        case 'hash':
        case 'thash':
            return coins_1.HashToken.createTokenConstructor(tokenConfig);
        case 'flr':
        case 'tflr':
            return coins_1.FlrToken.createTokenConstructor(tokenConfig);
        case 'ton':
        case 'tton':
            return coins_1.JettonToken.createTokenConstructor(tokenConfig);
        case 'mon':
        case 'tmon':
            return coins_1.MonToken.createTokenConstructor(tokenConfig);
        case 'xdc':
        case 'txdc':
            return coins_1.XdcToken.createTokenConstructor(tokenConfig);
        case 'canton':
        case 'tcanton':
            return sdk_coin_canton_1.CantonToken.createTokenConstructor(tokenConfig);
        default:
            return undefined;
    }
}
exports.GlobalCoinFactory = new sdk_core_1.CoinFactory();
registerCoinConstructors(exports.GlobalCoinFactory);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbkZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdjIvY29pbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNk9BLDREQXNZQztBQUVELGdEQThWQztBQUVELGtEQXVLQztBQTVuQ0Q7O0dBRUc7QUFDSCxzREFBK0M7QUFDL0Msd0RBQWlEO0FBQ2pELDREQUFxRDtBQUNyRCx3REFBbUQ7QUFDbkQsMERBQXNEO0FBQ3RELHdEQUFpRDtBQUNqRCx3REFBZ0U7QUFDaEUsc0RBQStDO0FBQy9DLHNEQUErQztBQUMvQyw4Q0FBK0Q7QUFDL0Qsc0RBQTRFO0FBRTVFLDRDQWlDd0I7QUFDeEIsbUNBMExpQjtBQUVqQixTQUFnQix3QkFBd0IsQ0FBQyxXQUF3QixFQUFFLFVBQW1CLGVBQUs7SUFDekYsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxjQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsV0FBVyxDQUFDLFFBQVEs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QUMsV0FBVyxFQUFFLGdCQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0QsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxjQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxX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Q0FDM0UsQ0FBQztJQUVGLGdCQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNwRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGdCQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNwRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGtCQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUMxRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGtCQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUMxRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGdCQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNwRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLG1CQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUM3RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGdCQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNwRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGtCQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN0RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLDJCQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN6RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGlCQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUMzRyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLG1CQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN2RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FDM0UsQ0FBQztJQUVGLGdCQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxF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QUFDLENBQUM7UUFDeEUsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU87WUFDVixPQUFPLGlCQUFTLENBQUMsc0JBQXNCLENBQUMsV0FBZ0MsQ0FBQyxDQUFDO1FBQzVFLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxnQkFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQWlDLENBQUMsQ0FBQztRQUM1RSxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTTtZQUNULE9BQU8sbUJBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFnQyxDQUFDLENBQUM7UUFDOUUsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE1BQU07WUFDVCxPQUFPLGdCQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBaUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxnQkFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQWlDLENBQUMsQ0FBQztRQUM1RSxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssU0FBUztZQUNaLE9BQU8sNkJBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFnQyxDQUFDLENBQUM7UUFDOUU7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsaUJBQWlCLEdBQWdCLElBQUksc0JBQVcsRUFBRSxDQUFDO0FBRWhFLHdCQUF3QixDQUFDLHlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBBZGFUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1hZGEnO1xuaW1wb3J0IHsgQWxnb1Rva2VuIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLWFsZ28nO1xuaW1wb3J0IHsgQ2FudG9uVG9rZW4gfSBmcm9tICdAYml0Z28vc2RrLWNvaW4tY2FudG9uJztcbmltcG9ydCB7IEJjaGEsIFRiY2hhIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLWJjaGEnO1xuaW1wb3J0IHsgUGVhcmwsIFRwZWFybCB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1wZWFybCc7XG5pbXBvcnQgeyBIYmFyVG9rZW4gfSBmcm9tICdAYml0Z28vc2RrLWNvaW4taGJhcic7XG5pbXBvcnQgeyBOZWFyLCBUTmVhciwgTmVwMTQxVG9rZW4gfSBmcm9tICdAYml0Z28vc2RrLWNvaW4tbmVhcic7XG5pbXBvcnQgeyBTb2xUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1zb2wnO1xuaW1wb3J0IHsgVHJ4VG9rZW4gfSBmcm9tICdAYml0Z28vc2RrLWNvaW4tdHJ4JztcbmltcG9ydCB7IENvaW5GYWN0b3J5LCBDb2luQ29uc3RydWN0b3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRXRoTGlrZUVyYzIwVG9rZW4sIEV0aExpa2VFcmM3MjFUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1ldm0nO1xuXG5pbXBvcnQge1xuICBDb2luTWFwLFxuICBjb2lucyxcbiAgZ2V0Rm9ybWF0dGVkVG9rZW5zLFxuICBUb2tlbkNvbmZpZyxcbiAgRXJjMjBUb2tlbkNvbmZpZyxcbiAgU3RlbGxhclRva2VuQ29uZmlnLFxuICBPZmNUb2tlbkNvbmZpZyxcbiAgQ2Vsb1Rva2VuQ29uZmlnLFxuICBFdGhMaWtlVG9rZW5Db25maWcsXG4gIEVvc1Rva2VuQ29uZmlnLFxuICBBdmF4Y1Rva2VuQ29uZmlnLFxuICBTb2xUb2tlbkNvbmZpZyxcbiAgSGJhclRva2VuQ29uZmlnLFxuICBBZGFUb2tlbkNvbmZpZyxcbiAgQWxnb1Rva2VuQ29uZmlnLFxuICBUcnhUb2tlbkNvbmZpZyxcbiAgWHJwTXB0VG9rZW5Db25maWcsXG4gIFhycFRva2VuQ29uZmlnLFxuICBTdWlUb2tlbkNvbmZpZyxcbiAgQXB0VG9rZW5Db25maWcsXG4gIFNpcDEwVG9rZW5Db25maWcsXG4gIENvaW5GZWF0dXJlLFxuICBOZXAxNDFUb2tlbkNvbmZpZyxcbiAgQ29zbW9zVG9rZW5Db25maWcsXG4gIFZldFRva2VuQ29uZmlnLFxuICBUYW9Ub2tlbkNvbmZpZyxcbiAgVGlwMjBUb2tlbkNvbmZpZyxcbiAgUG9seXhUb2tlbkNvbmZpZyxcbiAgSmV0dG9uVG9rZW5Db25maWcsXG4gIENhbnRvblRva2VuQ29uZmlnLFxuICBFcmM3OTg0VG9rZW5Db25maWcsXG4gIEVyYzc5ODRDb2luLFxufSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQge1xuICBBZGEsXG4gIEFsZ28sXG4gIEFwZWNoYWluLFxuICBBcHQsXG4gIEFwdFRva2VuLFxuICBBcmJldGgsXG4gIEFyYmV0aFRva2VuLFxuICBBc2ksXG4gIEF0b20sXG4gIEF2YXhDLFxuICBBdmF4Q1Rva2VuLFxuICBBdmF4UCxcbiAgQmFieSxcbiAgQmNoLFxuICBCZXJhLFxuICBCZXJhVG9rZW4sXG4gIEJsZCxcbiAgQnNjLFxuICBCc2NUb2tlbixcbiAgQnN2LFxuICBCdGMsXG4gIEJ0ZyxcbiAgQ2FudG9uLFxuICBDZWxvLFxuICBDZWxvVG9rZW4sXG4gIENvcmVkYW8sXG4gIENvcmVkYW9Ub2tlbixcbiAgQ29zbW9zU2hhcmVkQ29pbixcbiAgQ29yZXVtLFxuICBDcm9ub3MsXG4gIENzcHIsXG4gIERhc2gsXG4gIERvZ2UsXG4gIERvdCxcbiAgRW9zLFxuICBFb3NUb2tlbixcbiAgRXJjMjBUb2tlbixcbiAgRXJjNzIxVG9rZW4sXG4gIEVyYzc5ODRUb2tlbixcbiAgRXRjLFxuICBFdGgsXG4gIEV0aHcsXG4gIEV0aExpa2VDb2luLFxuICBFdm1Db2luLFxuICBGbHIsXG4gIEZscnAsXG4gIEZsclRva2VuLFxuICBIYXNoVG9rZW4sXG4gIE1vblRva2VuLFxuICBUZXRoTGlrZUNvaW4sXG4gIEZpYXQsXG4gIGFsbEZpYXRDb2lucyxcbiAgR3RldGgsXG4gIEhhc2gsXG4gIEhiYXIsXG4gIEh0ZXRoLFxuICBJY3AsXG4gIEluaXRpYSxcbiAgSW5qZWN0aXZlLFxuICBJb3RhLFxuICBJc2xtLFxuICBKZXR0b25Ub2tlbixcbiAgS2FzcGEsXG4gIExuYnRjLFxuICBMdGMsXG4gIE1vbixcbiAgT2ZjLFxuICBPYXMsXG4gIE9mY1Rva2VuLFxuICBPcGV0aCxcbiAgT3BldGhUb2tlbixcbiAgT3NtbyxcbiAgUG9seWdvbixcbiAgUG9seWdvblRva2VuLFxuICBQb2x5eCxcbiAgUG9seXhUb2tlbixcbiAgUnVuZSxcbiAgUmJ0YyxcbiAgU2VpLFxuICBTZXBldGgsXG4gIFNnYixcbiAgU2lwMTBUb2tlbixcbiAgU29sLFxuICBTb25laXVtLFxuICBTb25laXVtVG9rZW4sXG4gIFN0YXJrbmV0LFxuICBTdGVsbGFyVG9rZW4sXG4gIFN0eCxcbiAgU3VpLFxuICBTdWlUb2tlbixcbiAgU3VzZCxcbiAgVGFvLFxuICBUYW9Ub2tlbixcbiAgVGVtcG8sXG4gIFRpcDIwVG9rZW4sXG4gIFRvbixcbiAgVGFkYSxcbiAgVGFsZ28sXG4gIFRhcGVjaGFpbixcbiAgVGFwdCxcbiAgVGFyYmV0aCxcbiAgVGFzaSxcbiAgVGF0b20sXG4gIFRhdmF4QyxcbiAgVGF2YXhQLFxuICBUYmFieSxcbiAgVGJjaCxcbiAgVGJlcmEsXG4gIFRibGQsXG4gIFRic2MsXG4gIFRic3YsXG4gIFRidGMsXG4gIFRidGNzaWcsXG4gIFRidGM0LFxuICBUYnRjYmdzaWcsXG4gIFRjYW50b24sXG4gIFRjZWxvLFxuICBUY29yZWRhbyxcbiAgVGNvcmV1bSxcbiAgVGNyb25vcyxcbiAgVGNzcHIsXG4gIFRkYXNoLFxuICBUZG9nZSxcbiAgVGRvdCxcbiAgVGVvcyxcbiAgVGV0YyxcbiAgVGV0aCxcbiAgVGZscixcbiAgVG1vbixcbiAgVGhhc2gsXG4gIFRoYmFyLFxuICBUaWEsXG4gIFRpY3AsXG4gIFRpbml0aWEsXG4gIFRpbmplY3RpdmUsXG4gIFRpc2xtLFxuICBUbG5idGMsXG4gIFRsdGMsXG4gIFRvYXMsXG4gIFRvc21vLFxuICBUb3BldGgsXG4gIFRwb2x5Z29uLFxuICBUcG9seXgsXG4gIFRyYnRjLFxuICBUcnVuZSxcbiAgVHJ4LFxuICBUc2diLFxuICBUc2VpLFxuICBUc29sLFxuICBUc29uZWl1bSxcbiAgVHN0eCxcbiAgVHN0dCxcbiAgVHN1aSxcbiAgVHN1c2QsXG4gIFR3ZW1peCxcbiAgVHdvcmxkLFxuICBUdGFvLFxuICBUdGVtcG8sXG4gIFR0aWEsXG4gIFR0b24sXG4gIFR0cngsXG4gIFR2ZXQsXG4gIFR4bG0sXG4gIFR4ZGMsXG4gIFR4cnAsXG4gIFR4dHosXG4gIFR6ZWMsXG4gIFR6ZXRhLFxuICBUemtldGgsXG4gIFZldCxcbiAgV2VtaXgsXG4gIFdvcmxkLFxuICBXb3JsZFRva2VuLFxuICBYZGMsXG4gIFhkY1Rva2VuLFxuICBYbG0sXG4gIFhycCxcbiAgWHJwTXB0VG9rZW4sXG4gIFhycFRva2VuLFxuICBYdHosXG4gIFplYyxcbiAgWmV0YSxcbiAgWmtldGgsXG4gIFprZXRoVG9rZW4sXG4gIFZldFRva2VuLFxufSBmcm9tICcuL2NvaW5zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29pbkNvbnN0cnVjdG9ycyhjb2luRmFjdG9yeTogQ29pbkZhY3RvcnksIGNvaW5NYXA6IENvaW5NYXAgPSBjb2lucyk6IHZvaWQge1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYWRhJywgQWRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2FsZ28nLCBBbGdvLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2FwZWNoYWluJywgQXBlY2hhaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYXB0JywgQXB0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2FyYmV0aCcsIEFyYmV0aC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdhc2knLCBBc2kuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYXRvbScsIEF0b20uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYXZheGMnLCBBdmF4Qy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdhdmF4cCcsIEF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2JhYnknLCBCYWJ5LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2JjaCcsIEJjaC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdiY2hhJywgQmNoYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdiZXJhJywgQmVyYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdibGQnLCBCbGQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYnNjJywgQnNjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2JzdicsIEJzdi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdidGMnLCBCdGMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYnRnJywgQnRnLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2NhbnRvbicsIENhbnRvbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdjZWxvJywgQ2Vsby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdjb3JlZGFvJywgQ29yZWRhby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdjb3JldW0nLCBDb3JldW0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignY3Jvbm9zJywgQ3Jvbm9zLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2NzcHInLCBDc3ByLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2Rhc2gnLCBEYXNoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2RvZ2UnLCBEb2dlLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2RvdCcsIERvdC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdlb3MnLCBFb3MuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignZXRjJywgRXRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2V0aCcsIEV0aC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdldGh3JywgRXRody5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdiYXNlZXRoJywgRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignb3BibmInLCBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdmYW50b20nLCBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdjb3RpZXRoJywgRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignb2cnLCBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0b2cnLCBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0b3BibmInLCBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGZhbnRvbScsIFRldGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0Y290aWV0aCcsIFRldGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YmFzZWV0aCcsIFRldGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGZvciAoY29uc3QgZmlhdENvaW4gb2YgYWxsRmlhdENvaW5zKSB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIoZmlhdENvaW4uY2hhaW4sIEZpYXQuY3JlYXRlQ29uc3RydWN0b3IoZmlhdENvaW4pKTtcbiAgfVxuICBjb2luRmFjdG9yeS5yZWdpc3RlcignZmxyJywgRmxyLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2ZscnAnLCBGbHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2d0ZXRoJywgR3RldGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaGFzaCcsIEhhc2guY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaGJhcicsIEhiYXIuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaHRldGgnLCBIdGV0aC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdsbmJ0YycsIExuYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2x0YycsIEx0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdtb24nLCBNb24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2luaXRpYScsIEluaXRpYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdpbmplY3RpdmUnLCBJbmplY3RpdmUuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaW90YScsIElvdGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaXNsbScsIElzbG0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcigna2FzcGEnLCBLYXNwYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCduZWFyJywgTmVhci5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdvYXMnLCBPYXMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignb2ZjJywgT2ZjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ29wZXRoJywgT3BldGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignb3NtbycsIE9zbW8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigncGVhcmwnLCBQZWFybC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdwb2x5Z29uJywgUG9seWdvbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdwb2x5eCcsIFBvbHl4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3JidGMnLCBSYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rob3JjaGFpbjpydW5lJywgUnVuZS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdzZWknLCBTZWkuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc2VwZXRoJywgU2VwZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3NnYicsIFNnYi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdzb2wnLCBTb2wuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc29uZWl1bScsIFNvbmVpdW0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc3RhcmtuZXQnLCBTdGFya25ldC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdzdHgnLCBTdHguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc3VpJywgU3VpLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3N1c2QnLCBTdXNkLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhbycsIFRhby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZW1wbycsIFRlbXBvLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RpYScsIFRpYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0b24nLCBUb24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGFsZ28nLCBUYWxnby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YXBlY2hhaW4nLCBUYXBlY2hhaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGFwdCcsIFRhcHQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGFyYmV0aCcsIFRhcmJldGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGFkYScsIFRhZGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGFzaScsIFRhc2kuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGF0b20nLCBUYXRvbS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YXZheGMnLCBUYXZheEMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGF2YXhwJywgVGF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RiYWJ5JywgVGJhYnkuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGJjaCcsIFRiY2guY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGJjaGEnLCBUYmNoYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YmVyYScsIFRiZXJhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RibGQnLCBUYmxkLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Ric2MnLCBUYnNjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Ric3YnLCBUYnN2LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RidGMnLCBUYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RidGNzaWcnLCBUYnRjc2lnLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RidGM0JywgVGJ0YzQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGJ0Y2Jnc2lnJywgVGJ0Y2Jnc2lnLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RjYW50b24nLCBUY2FudG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RjZWxvJywgVGNlbG8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGNvcmVkYW8nLCBUY29yZWRhby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0Y29yZXVtJywgVGNvcmV1bS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0Y3Jvbm9zJywgVGNyb25vcy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0Y3NwcicsIFRjc3ByLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RkYXNoJywgVGRhc2guY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGRvZ2UnLCBUZG9nZS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZG90JywgVGRvdC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZW9zJywgVGVvcy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZXRjJywgVGV0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZXRoJywgVGV0aC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZmxyJywgVGZsci5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZmxycCcsIEZscnAuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndG1vbicsIFRtb24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGhhc2gnLCBUaGFzaC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0aGJhcicsIFRoYmFyLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RpY3AnLCBUaWNwLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rpbml0aWEnLCBUaW5pdGlhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RpbmplY3RpdmUnLCBUaW5qZWN0aXZlLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rpb3RhJywgSW90YS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0aXNsbScsIFRpc2xtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RrYXNwYScsIEthc3BhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RsbmJ0YycsIFRsbmJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0bHRjJywgVGx0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0bmVhcicsIFROZWFyLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RvYXMnLCBUb2FzLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RvcGV0aCcsIFRvcGV0aC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0b3NtbycsIFRvc21vLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RwZWFybCcsIFRwZWFybC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0cG9seWdvbicsIFRwb2x5Z29uLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rwb2x5eCcsIFRwb2x5eC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0cmJ0YycsIFRyYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzZ2InLCBUc2diLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R0aG9yY2hhaW46cnVuZScsIFRydW5lLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RyeCcsIFRyeC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0c2VpJywgVHNlaS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0c29sJywgVHNvbC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0c29uZWl1bScsIFRzb25laXVtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzdGFya25ldCcsIFN0YXJrbmV0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzdHgnLCBUc3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzdHQnLCBUc3R0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzdWknLCBUc3VpLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzdXNkJywgVHN1c2QuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHRhbycsIFR0YW8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHRlbXBvJywgVHRlbXBvLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R0aWEnLCBUdGlhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R0b24nLCBUdG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R0cngnLCBUdHJ4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R2ZXQnLCBUdmV0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R4ZGMnLCBUeGRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R4bG0nLCBUeGxtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R4cnAnLCBUeHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R4dHonLCBUeHR6LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R6ZWMnLCBUemVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R6ZXRhJywgVHpldGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHprZXRoJywgVHprZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R3ZW1peCcsIFR3ZW1peC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0d29ybGQnLCBUd29ybGQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndmV0JywgVmV0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3hkYycsIFhkYy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd4bG0nLCBYbG0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigneHJwJywgWHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3h0eicsIFh0ei5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd3ZW1peCcsIFdlbWl4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3dvcmxkJywgV29ybGQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignemVjJywgWmVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3pldGEnLCBaZXRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3prZXRoJywgWmtldGguY3JlYXRlSW5zdGFuY2UpO1xuXG4gIGNvaW5zXG4gICAgLmZpbHRlcigoY29pbikgPT4gY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfRVZNX1NESykpXG4gICAgLmZvckVhY2goKGNvaW4pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKGNvaW4ubmFtZSwgRXZtQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgfSk7XG5cbiAgY29pbnNcbiAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNIQVJFRF9DT1NNT1NfU0RLKSlcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIoY29pbi5uYW1lLCBDb3Ntb3NTaGFyZWRDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB9KTtcblxuICBjb25zdCB0b2tlbnMgPSBnZXRGb3JtYXR0ZWRUb2tlbnMoY29pbk1hcCk7XG5cbiAgRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uZXRoLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuZXRoLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIEVyYzcyMVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5ldGgubmZ0cywgLi4udG9rZW5zLnRlc3RuZXQuZXRoLm5mdHNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgKTtcblxuICBFcmM3OTg0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoW1xuICAgIC4uLnRva2Vucy5iaXRjb2luLmV0aC5jb25maWRlbnRpYWxUb2tlbnMsXG4gICAgLi4udG9rZW5zLnRlc3RuZXQuZXRoLmNvbmZpZGVudGlhbFRva2VucyxcbiAgXSkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIFN0ZWxsYXJUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4ueGxtLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQueGxtLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIGZvciAoY29uc3Qgb2ZjVG9rZW4gb2YgWy4uLnRva2Vucy5iaXRjb2luLm9mYy50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0Lm9mYy50b2tlbnNdKSB7XG4gICAgY29uc3QgdG9rZW5Db25zdHJ1Y3RvciA9IE9mY1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3Iob2ZjVG9rZW4pO1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG9mY1Rva2VuLnR5cGUsIHRva2VuQ29uc3RydWN0b3IpO1xuICB9XG5cbiAgQ2Vsb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5jZWxvLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuY2Vsby50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgKTtcblxuICBCc2NUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBFb3NUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uZW9zLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuZW9zLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIEFsZ29Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uYWxnby50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LmFsZ28udG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICk7XG5cbiAgQXZheENUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBQb2x5Z29uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgU29uZWl1bVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIEFyYmV0aFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIE9wZXRoVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgWmtldGhUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBCZXJhVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgQ29yZWRhb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIFdvcmxkVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgU29sVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLnNvbC50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnNvbC50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgKTtcblxuICBDYW50b25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uY2FudG9uLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuY2FudG9uLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIEhiYXJUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uaGJhci50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LmhiYXIudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICk7XG5cbiAgVHJ4VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLnRyeC50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnRyeC50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgKTtcblxuICBBZGFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uYWRhLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuYWRhLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBTdWlUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uc3VpLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuc3VpLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBUYW9Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4udGFvLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQudGFvLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBUaXAyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi50ZW1wby50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnRlbXBvLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBQb2x5eFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5wb2x5eC50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnBvbHl4LnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBYcnBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4ueHJwLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQueHJwLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBYcnBNcHRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4ueHJwLm1wdFRva2VucywgLi4udG9rZW5zLnRlc3RuZXQueHJwLm1wdFRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBBcHRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uYXB0LnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuYXB0LnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBTaXAxMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5zdHgudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5zdHgudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIE5lcDE0MVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5uZWFyLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQubmVhci50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpXG4gICk7XG5cbiAgSGFzaFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5jb3Ntb3MudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5jb3Ntb3MudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIEpldHRvblRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi50b24udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC50b24udG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFZldFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT5cbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpXG4gICk7XG5cbiAgRmxyVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgTW9uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgWGRjVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgLy8gR2VuZXJpYyBFUkMyMCB0b2tlbiByZWdpc3RyYXRpb24gZm9yIGNvaW5zIHdpdGggU1VQUE9SVFNfRVJDMjAgZmVhdHVyZVxuICBjb2luc1xuICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDMjApICYmICFjb2luLmlzVG9rZW4pXG4gICAgLmZvckVhY2goKGNvaW4pID0+IHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lcyA9IHtcbiAgICAgICAgTWFpbm5ldDogYCR7Y29pbi5uYW1lfWAsXG4gICAgICAgIFRlc3RuZXQ6IGB0JHtjb2luLm5hbWV9YCxcbiAgICAgIH07XG5cbiAgICAgIEV0aExpa2VFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKGNvaW5OYW1lcykuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgLy8gR2VuZXJpYyBFUkM3MjEgdG9rZW4gcmVnaXN0cmF0aW9uIGZvciBjb2lucyB3aXRoIFNVUFBPUlRTX0VSQzcyMSBmZWF0dXJlXG4gIGNvaW5zXG4gICAgLmZpbHRlcigoY29pbikgPT4gY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TVVBQT1JUU19FUkM3MjEpICYmICFjb2luLmlzVG9rZW4pXG4gICAgLmZvckVhY2goKGNvaW4pID0+IHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lcyA9IHtcbiAgICAgICAgTWFpbm5ldDogYCR7Y29pbi5uYW1lfWAsXG4gICAgICAgIFRlc3RuZXQ6IGB0JHtjb2luLm5hbWV9YCxcbiAgICAgIH07XG5cbiAgICAgIEV0aExpa2VFcmM3MjFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhjb2luTmFtZXMpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29pbkNvbnN0cnVjdG9yKGNvaW5OYW1lOiBzdHJpbmcpOiBDb2luQ29uc3RydWN0b3IgfCB1bmRlZmluZWQge1xuICBjb25zdCBldm1Db2lucyA9IGNvaW5zLmZpbHRlcigoY29pbikgPT4gY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfRVZNX1NESykpO1xuICBjb25zdCBjb3Ntb3NTaGFyZWRDb2lucyA9IGNvaW5zLmZpbHRlcigoY29pbikgPT4gY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfQ09TTU9TX1NESykpO1xuICBpZiAoZXZtQ29pbnMuaGFzKGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBFdm1Db2luLmNyZWF0ZUluc3RhbmNlO1xuICB9XG4gIGlmIChjb3Ntb3NTaGFyZWRDb2lucy5oYXMoY29pbk5hbWUpKSB7XG4gICAgcmV0dXJuIENvc21vc1NoYXJlZENvaW4uY3JlYXRlSW5zdGFuY2U7XG4gIH1cbiAgc3dpdGNoIChjb2luTmFtZSkge1xuICAgIGNhc2UgJ2FkYSc6XG4gICAgICByZXR1cm4gQWRhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2FsZ28nOlxuICAgICAgcmV0dXJuIEFsZ28uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXBlY2hhaW4nOlxuICAgICAgcmV0dXJuIEFwZWNoYWluLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2FwdCc6XG4gICAgICByZXR1cm4gQXB0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2FyYmV0aCc6XG4gICAgICByZXR1cm4gQXJiZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2FzaSc6XG4gICAgICByZXR1cm4gQXNpLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2F0b20nOlxuICAgICAgcmV0dXJuIEF0b20uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXZheGMnOlxuICAgICAgcmV0dXJuIEF2YXhDLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2F2YXhwJzpcbiAgICAgIHJldHVybiBBdmF4UC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdiYWJ5JzpcbiAgICAgIHJldHVybiBCYWJ5LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2JjaCc6XG4gICAgICByZXR1cm4gQmNoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2JjaGEnOlxuICAgICAgcmV0dXJuIEJjaGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYmVyYSc6XG4gICAgICByZXR1cm4gQmVyYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdibGQnOlxuICAgICAgcmV0dXJuIEJsZC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdic2MnOlxuICAgICAgcmV0dXJuIEJzYy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdic3YnOlxuICAgICAgcmV0dXJuIEJzdi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdidGMnOlxuICAgICAgcmV0dXJuIEJ0Yy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdidGcnOlxuICAgICAgcmV0dXJuIEJ0Zy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdjYW50b24nOlxuICAgICAgcmV0dXJuIENhbnRvbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdjZWxvJzpcbiAgICAgIHJldHVybiBDZWxvLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2NvcmVkYW8nOlxuICAgICAgcmV0dXJuIENvcmVkYW8uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnY29yZXVtJzpcbiAgICAgIHJldHVybiBDb3JldW0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnY3Jvbm9zJzpcbiAgICAgIHJldHVybiBDcm9ub3MuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnY3Nwcic6XG4gICAgICByZXR1cm4gQ3Nwci5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdkYXNoJzpcbiAgICAgIHJldHVybiBEYXNoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2RvZ2UnOlxuICAgICAgcmV0dXJuIERvZ2UuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZG90JzpcbiAgICAgIHJldHVybiBEb3QuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZW9zJzpcbiAgICAgIHJldHVybiBFb3MuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZXRjJzpcbiAgICAgIHJldHVybiBFdGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZXRoJzpcbiAgICAgIHJldHVybiBFdGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZXRodyc6XG4gICAgICByZXR1cm4gRXRody5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdiYXNlZXRoJzpcbiAgICAgIHJldHVybiBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdvcGJuYic6XG4gICAgICByZXR1cm4gRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZmFudG9tJzpcbiAgICAgIHJldHVybiBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdjb3RpZXRoJzpcbiAgICAgIHJldHVybiBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YmFzZWV0aCc6XG4gICAgICByZXR1cm4gVGV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RvcGJuYic6XG4gICAgICByZXR1cm4gVGV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RmYW50b20nOlxuICAgICAgcmV0dXJuIFRldGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0Y290aWV0aCc6XG4gICAgICByZXR1cm4gVGV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2Zscic6XG4gICAgICByZXR1cm4gRmxyLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2ZscnAnOlxuICAgICAgcmV0dXJuIEZscnAuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZ3RldGgnOlxuICAgICAgcmV0dXJuIEd0ZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgcmV0dXJuIEhhc2guY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaGJhcic6XG4gICAgICByZXR1cm4gSGJhci5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdodGV0aCc6XG4gICAgICByZXR1cm4gSHRldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnbG5idGMnOlxuICAgICAgcmV0dXJuIExuYnRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2x0Yyc6XG4gICAgICByZXR1cm4gTHRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ21vbic6XG4gICAgICByZXR1cm4gTW9uLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2ljcCc6XG4gICAgICByZXR1cm4gSWNwLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2luaXRpYSc6XG4gICAgICByZXR1cm4gSW5pdGlhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2luamVjdGl2ZSc6XG4gICAgICByZXR1cm4gSW5qZWN0aXZlLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2lvdGEnOlxuICAgICAgcmV0dXJuIElvdGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaXNsbSc6XG4gICAgICByZXR1cm4gSXNsbS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdrYXNwYSc6XG4gICAgICByZXR1cm4gS2FzcGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnbmVhcic6XG4gICAgICByZXR1cm4gTmVhci5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdvYXMnOlxuICAgICAgcmV0dXJuIE9hcy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdvZmMnOlxuICAgICAgcmV0dXJuIE9mYy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdvcGV0aCc6XG4gICAgICByZXR1cm4gT3BldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnb3Ntbyc6XG4gICAgICByZXR1cm4gT3Ntby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdwZWFybCc6XG4gICAgICByZXR1cm4gUGVhcmwuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAncG9seWdvbic6XG4gICAgICByZXR1cm4gUG9seWdvbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdwb2x5eCc6XG4gICAgICByZXR1cm4gUG9seXguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAncmJ0Yyc6XG4gICAgICByZXR1cm4gUmJ0Yy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aG9yY2hhaW46cnVuZSc6XG4gICAgICByZXR1cm4gUnVuZS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzZWknOlxuICAgICAgcmV0dXJuIFNlaS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzZXBldGgnOlxuICAgICAgcmV0dXJuIFNlcGV0aC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzZ2InOlxuICAgICAgcmV0dXJuIFNnYi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzb2wnOlxuICAgICAgcmV0dXJuIFNvbC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzb25laXVtJzpcbiAgICAgIHJldHVybiBTb25laXVtLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3N0YXJrbmV0JzpcbiAgICAgIHJldHVybiBTdGFya25ldC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzdHgnOlxuICAgICAgcmV0dXJuIFN0eC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzdWknOlxuICAgICAgcmV0dXJuIFN1aS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdzdXNkJzpcbiAgICAgIHJldHVybiBTdXNkLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rhbyc6XG4gICAgICByZXR1cm4gVGFvLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RlbXBvJzpcbiAgICAgIHJldHVybiBUZW1wby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aWEnOlxuICAgICAgcmV0dXJuIFRpYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0b24nOlxuICAgICAgcmV0dXJuIFRvbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YWxnbyc6XG4gICAgICByZXR1cm4gVGFsZ28uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGFwZWNoYWluJzpcbiAgICAgIHJldHVybiBUYXBlY2hhaW4uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGFwdCc6XG4gICAgICByZXR1cm4gVGFwdC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXJiZXRoJzpcbiAgICAgIHJldHVybiBUYXJiZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RhZGEnOlxuICAgICAgcmV0dXJuIFRhZGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGFzaSc6XG4gICAgICByZXR1cm4gVGFzaS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXRvbSc6XG4gICAgICByZXR1cm4gVGF0b20uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGF2YXhjJzpcbiAgICAgIHJldHVybiBUYXZheEMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGF2YXhwJzpcbiAgICAgIHJldHVybiBUYXZheFAuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJhYnknOlxuICAgICAgcmV0dXJuIFRiYWJ5LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RiY2gnOlxuICAgICAgcmV0dXJuIFRiY2guY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJjaGEnOlxuICAgICAgcmV0dXJuIFRiY2hhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RiZXJhJzpcbiAgICAgIHJldHVybiBUYmVyYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YmxkJzpcbiAgICAgIHJldHVybiBUYmxkLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Ric2MnOlxuICAgICAgcmV0dXJuIFRic2MuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJzdic6XG4gICAgICByZXR1cm4gVGJzdi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YnRjJzpcbiAgICAgIHJldHVybiBUYnRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgICAgcmV0dXJuIFRidGNzaWcuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgICAgcmV0dXJuIFRidGM0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICByZXR1cm4gVGJ0Y2Jnc2lnLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RjYW50b24nOlxuICAgICAgcmV0dXJuIFRjYW50b24uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGNlbG8nOlxuICAgICAgcmV0dXJuIFRjZWxvLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rjb3JlZGFvJzpcbiAgICAgIHJldHVybiBUY29yZWRhby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0Y29yZXVtJzpcbiAgICAgIHJldHVybiBUY29yZXVtLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rjcm9ub3MnOlxuICAgICAgcmV0dXJuIFRjcm9ub3MuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGNzcHInOlxuICAgICAgcmV0dXJuIFRjc3ByLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RkYXNoJzpcbiAgICAgIHJldHVybiBUZGFzaC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0ZG9nZSc6XG4gICAgICByZXR1cm4gVGRvZ2UuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGRvdCc6XG4gICAgICByZXR1cm4gVGRvdC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0ZW9zJzpcbiAgICAgIHJldHVybiBUZW9zLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RldGMnOlxuICAgICAgcmV0dXJuIFRldGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGV0aCc6XG4gICAgICByZXR1cm4gVGV0aC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0ZmxyJzpcbiAgICAgIHJldHVybiBUZmxyLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RmbHJwJzpcbiAgICAgIHJldHVybiBGbHJwLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rtb24nOlxuICAgICAgcmV0dXJuIFRtb24uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGhhc2gnOlxuICAgICAgcmV0dXJuIFRoYXNoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RoYmFyJzpcbiAgICAgIHJldHVybiBUaGJhci5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aWNwJzpcbiAgICAgIHJldHVybiBUaWNwLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rpbml0aWEnOlxuICAgICAgcmV0dXJuIFRpbml0aWEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGluamVjdGl2ZSc6XG4gICAgICByZXR1cm4gVGluamVjdGl2ZS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aW90YSc6XG4gICAgICByZXR1cm4gSW90YS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aXNsbSc6XG4gICAgICByZXR1cm4gVGlzbG0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGthc3BhJzpcbiAgICAgIHJldHVybiBLYXNwYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0bG5idGMnOlxuICAgICAgcmV0dXJuIFRsbmJ0Yy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0bHRjJzpcbiAgICAgIHJldHVybiBUbHRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RuZWFyJzpcbiAgICAgIHJldHVybiBUTmVhci5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0b2FzJzpcbiAgICAgIHJldHVybiBUb2FzLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RvcGV0aCc6XG4gICAgICByZXR1cm4gVG9wZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rvc21vJzpcbiAgICAgIHJldHVybiBUb3Ntby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0cGVhcmwnOlxuICAgICAgcmV0dXJuIFRwZWFybC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0cG9seWdvbic6XG4gICAgICByZXR1cm4gVHBvbHlnb24uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHBvbHl4JzpcbiAgICAgIHJldHVybiBUcG9seXguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHJidGMnOlxuICAgICAgcmV0dXJuIFRyYnRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RzZ2InOlxuICAgICAgcmV0dXJuIFRzZ2IuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHRob3JjaGFpbjpydW5lJzpcbiAgICAgIHJldHVybiBUcnVuZS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0cngnOlxuICAgICAgcmV0dXJuIFRyeC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0c2VpJzpcbiAgICAgIHJldHVybiBUc2VpLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rzb2wnOlxuICAgICAgcmV0dXJuIFRzb2wuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHNvbmVpdW0nOlxuICAgICAgcmV0dXJuIFRzb25laXVtLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RzdGFya25ldCc6XG4gICAgICByZXR1cm4gU3RhcmtuZXQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHN0eCc6XG4gICAgICByZXR1cm4gVHN0eC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0c3R0JzpcbiAgICAgIHJldHVybiBUc3R0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RzdWknOlxuICAgICAgcmV0dXJuIFRzdWkuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHN1c2QnOlxuICAgICAgcmV0dXJuIFRzdXNkLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R0YW8nOlxuICAgICAgcmV0dXJuIFR0YW8uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHRlbXBvJzpcbiAgICAgIHJldHVybiBUdGVtcG8uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHRpYSc6XG4gICAgICByZXR1cm4gVHRpYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0dG9uJzpcbiAgICAgIHJldHVybiBUdG9uLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R0cngnOlxuICAgICAgcmV0dXJuIFR0cnguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHZldCc6XG4gICAgICByZXR1cm4gVHZldC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0eGRjJzpcbiAgICAgIHJldHVybiBUeGRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R4bG0nOlxuICAgICAgcmV0dXJuIFR4bG0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHhycCc6XG4gICAgICByZXR1cm4gVHhycC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0eHR6JzpcbiAgICAgIHJldHVybiBUeHR6LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R6ZWMnOlxuICAgICAgcmV0dXJuIFR6ZWMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHpldGEnOlxuICAgICAgcmV0dXJuIFR6ZXRhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R6a2V0aCc6XG4gICAgICByZXR1cm4gVHprZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R3ZW1peCc6XG4gICAgICByZXR1cm4gVHdlbWl4LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R3b3JsZCc6XG4gICAgICByZXR1cm4gVHdvcmxkLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3ZldCc6XG4gICAgICByZXR1cm4gVmV0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3hkYyc6XG4gICAgICByZXR1cm4gWGRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3hsbSc6XG4gICAgICByZXR1cm4gWGxtLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3hycCc6XG4gICAgICByZXR1cm4gWHJwLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3h0eic6XG4gICAgICByZXR1cm4gWHR6LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3dlbWl4JzpcbiAgICAgIHJldHVybiBXZW1peC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd3b3JsZCc6XG4gICAgICByZXR1cm4gV29ybGQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnemVjJzpcbiAgICAgIHJldHVybiBaZWMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnemV0YSc6XG4gICAgICByZXR1cm4gWmV0YS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd6a2V0aCc6XG4gICAgICByZXR1cm4gWmtldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgZmlhdENvbmZpZyA9IGFsbEZpYXRDb2lucy5maW5kKChjKSA9PiBjLmNoYWluID09PSBjb2luTmFtZSk7XG4gICAgICBpZiAoZmlhdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmlhdC5jcmVhdGVDb25zdHJ1Y3RvcihmaWF0Q29uZmlnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnOiBUb2tlbkNvbmZpZyk6IENvaW5Db25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQodG9rZW5Db25maWcuY29pbik7XG5cbiAgaWYgKFxuICAgICduZXR3b3JrJyBpbiB0b2tlbkNvbmZpZyAmJlxuICAgIHRva2VuQ29uZmlnLm5ldHdvcmsgPT09ICdNYWlubmV0JyAmJlxuICAgIGNvaW4/LmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzIwKVxuICApIHtcbiAgICByZXR1cm4gRXRoTGlrZUVyYzIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFdGhMaWtlVG9rZW5Db25maWcsIHtcbiAgICAgIE1haW5uZXQ6IHRva2VuQ29uZmlnLmNvaW4sXG4gICAgICBUZXN0bmV0OiBgdCR7dG9rZW5Db25maWcuY29pbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKFxuICAgICduZXR3b3JrJyBpbiB0b2tlbkNvbmZpZyAmJlxuICAgIHRva2VuQ29uZmlnLm5ldHdvcmsgPT09ICdNYWlubmV0JyAmJlxuICAgIGNvaW4/LmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzcyMSlcbiAgKSB7XG4gICAgcmV0dXJuIEV0aExpa2VFcmM3MjFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZywge1xuICAgICAgTWFpbm5ldDogdG9rZW5Db25maWcuY29pbixcbiAgICAgIFRlc3RuZXQ6IGB0JHt0b2tlbkNvbmZpZy5jb2lufWAsXG4gICAgfSk7XG4gIH1cblxuICBzd2l0Y2ggKHRva2VuQ29uZmlnLmNvaW4pIHtcbiAgICBjYXNlICdldGgnOlxuICAgIGNhc2UgJ2h0ZXRoJzoge1xuICAgICAgY29uc3Qgc3RhdGljQ29pbiA9IGNvaW5zLmdldCh0b2tlbkNvbmZpZy50eXBlKTtcbiAgICAgIGlmIChzdGF0aWNDb2luIGluc3RhbmNlb2YgRXJjNzk4NENvaW4pIHtcbiAgICAgICAgcmV0dXJuIEVyYzc5ODRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEVyYzc5ODRUb2tlbkNvbmZpZyk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuQ29uZmlnLnR5cGUuaW5jbHVkZXMoJ2VyYzcyMScpKSB7XG4gICAgICAgIHJldHVybiBFcmM3MjFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEVyYzIwVG9rZW5Db25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlICd4bG0nOlxuICAgIGNhc2UgJ3R4bG0nOlxuICAgICAgcmV0dXJuIFN0ZWxsYXJUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFN0ZWxsYXJUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnb2ZjJzpcbiAgICAgIHJldHVybiBPZmNUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIE9mY1Rva2VuQ29uZmlnKTtcbiAgICBjYXNlICdjZWxvJzpcbiAgICBjYXNlICd0Y2Vsbyc6XG4gICAgICByZXR1cm4gQ2Vsb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgQ2Vsb1Rva2VuQ29uZmlnKTtcbiAgICBjYXNlICdic2MnOlxuICAgIGNhc2UgJ3Ric2MnOlxuICAgICAgcmV0dXJuIEJzY1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXJjMjBUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnZW9zJzpcbiAgICBjYXNlICd0ZW9zJzpcbiAgICAgIHJldHVybiBFb3NUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEVvc1Rva2VuQ29uZmlnKTtcbiAgICBjYXNlICdhbGdvJzpcbiAgICBjYXNlICd0YWxnbyc6XG4gICAgICByZXR1cm4gQWxnb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgQWxnb1Rva2VuQ29uZmlnKTtcbiAgICBjYXNlICdhdmF4Yyc6XG4gICAgY2FzZSAndGF2YXhjJzpcbiAgICAgIHJldHVybiBBdmF4Q1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgQXZheGNUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAncG9seWdvbic6XG4gICAgY2FzZSAndHBvbHlnb24nOlxuICAgICAgcmV0dXJuIFBvbHlnb25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnc29uZWl1bSc6XG4gICAgY2FzZSAndHNvbmVpdW0nOlxuICAgICAgcmV0dXJuIFNvbmVpdW1Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnYXJiZXRoJzpcbiAgICBjYXNlICd0YXJiZXRoJzpcbiAgICAgIHJldHVybiBBcmJldGhUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnb3BldGgnOlxuICAgIGNhc2UgJ3RvcGV0aCc6XG4gICAgICByZXR1cm4gT3BldGhUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnemtldGgnOlxuICAgIGNhc2UgJ3R6a2V0aCc6XG4gICAgICByZXR1cm4gWmtldGhUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnYmVyYSc6XG4gICAgY2FzZSAndGJlcmEnOlxuICAgICAgcmV0dXJuIEJlcmFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnYmFzZWV0aCc6XG4gICAgY2FzZSAndGJhc2VldGgnOlxuICAgICAgY29uc3QgY29pbk5hbWVzID0geyBNYWlubmV0OiAnYmFzZWV0aCcsIFRlc3RuZXQ6ICd0YmFzZWV0aCcgfTtcbiAgICAgIHJldHVybiBFdGhMaWtlRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZywgY29pbk5hbWVzKTtcbiAgICBjYXNlICdvcGJuYic6XG4gICAgY2FzZSAndG9wYm5iJzpcbiAgICAgIGNvbnN0IG9wYm5iQ29pbk5hbWVzID0geyBNYWlubmV0OiAnb3BibmInLCBUZXN0bmV0OiAndG9wYm5iJyB9O1xuICAgICAgcmV0dXJuIEV0aExpa2VFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnLCBvcGJuYkNvaW5OYW1lcyk7XG4gICAgY2FzZSAnY29yZWRhbyc6XG4gICAgY2FzZSAndGNvcmVkYW8nOlxuICAgICAgcmV0dXJuIENvcmVkYW9Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnd29ybGQnOlxuICAgIGNhc2UgJ3R3b3JsZCc6XG4gICAgICByZXR1cm4gV29ybGRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnc29sJzpcbiAgICBjYXNlICd0c29sJzpcbiAgICAgIHJldHVybiBTb2xUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFNvbFRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdoYmFyJzpcbiAgICBjYXNlICd0aGJhcic6XG4gICAgICByZXR1cm4gSGJhclRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgSGJhclRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd0cngnOlxuICAgIGNhc2UgJ3R0cngnOlxuICAgICAgcmV0dXJuIFRyeFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgVHJ4VG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2FkYSc6XG4gICAgY2FzZSAndGFkYSc6XG4gICAgICByZXR1cm4gQWRhVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBBZGFUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnc3VpJzpcbiAgICBjYXNlICd0c3VpJzpcbiAgICAgIHJldHVybiBTdWlUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFN1aVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd0YW8nOlxuICAgIGNhc2UgJ3R0YW8nOlxuICAgICAgcmV0dXJuIFRhb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgVGFvVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ3RlbXBvJzpcbiAgICBjYXNlICd0dGVtcG8nOlxuICAgICAgcmV0dXJuIFRpcDIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBUaXAyMFRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdwb2x5eCc6XG4gICAgY2FzZSAndHBvbHl4JzpcbiAgICAgIHJldHVybiBQb2x5eFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgUG9seXhUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAneHJwJzpcbiAgICBjYXNlICd0eHJwJzpcbiAgICAgIGlmICgnY2FuVHJhbnNmZXInIGluIHRva2VuQ29uZmlnKSB7XG4gICAgICAgIHJldHVybiBYcnBNcHRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFhycE1wdFRva2VuQ29uZmlnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBYcnBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFhycFRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdhcHQnOlxuICAgIGNhc2UgJ3RhcHQnOlxuICAgICAgcmV0dXJuIEFwdFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgQXB0VG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2Zsb3cnOlxuICAgIGNhc2UgJ3RmbG93Jzoge1xuICAgICAgY29uc3QgY29pbk5hbWVzID0geyBNYWlubmV0OiAnZmxvdycsIFRlc3RuZXQ6ICd0ZmxvdycgfTtcbiAgICAgIHJldHVybiBFdGhMaWtlRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZywgY29pbk5hbWVzKTtcbiAgICB9XG4gICAgY2FzZSAnc2VpZXZtJzpcbiAgICBjYXNlICd0c2VpZXZtJzoge1xuICAgICAgY29uc3QgY29pbk5hbWVzID0geyBNYWlubmV0OiAnc2VpZXZtJywgVGVzdG5ldDogJ3RzZWlldm0nIH07XG4gICAgICByZXR1cm4gRXRoTGlrZUVyYzIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFdGhMaWtlVG9rZW5Db25maWcsIGNvaW5OYW1lcyk7XG4gICAgfVxuICAgIGNhc2UgJ2xpbmVhZXRoJzpcbiAgICBjYXNlICd0bGluZWFldGgnOiB7XG4gICAgICBjb25zdCBjb2luTmFtZXMgPSB7IE1haW5uZXQ6ICdsaW5lYWV0aCcsIFRlc3RuZXQ6ICd0bGluZWFldGgnIH07XG4gICAgICByZXR1cm4gRXRoTGlrZUVyYzIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFdGhMaWtlVG9rZW5Db25maWcsIGNvaW5OYW1lcyk7XG4gICAgfVxuICAgIGNhc2UgJ3N0eCc6XG4gICAgY2FzZSAndHN0eCc6XG4gICAgICByZXR1cm4gU2lwMTBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFNpcDEwVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ25lYXInOlxuICAgIGNhc2UgJ3RuZWFyJzpcbiAgICAgIHJldHVybiBOZXAxNDFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIE5lcDE0MVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd2ZXQnOlxuICAgIGNhc2UgJ3R2ZXQnOlxuICAgICAgcmV0dXJuIFZldFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgVmV0VG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2hhc2gnOlxuICAgIGNhc2UgJ3RoYXNoJzpcbiAgICAgIHJldHVybiBIYXNoVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBDb3Ntb3NUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnZmxyJzpcbiAgICBjYXNlICd0ZmxyJzpcbiAgICAgIHJldHVybiBGbHJUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAndG9uJzpcbiAgICBjYXNlICd0dG9uJzpcbiAgICAgIHJldHVybiBKZXR0b25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEpldHRvblRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdtb24nOlxuICAgIGNhc2UgJ3Rtb24nOlxuICAgICAgcmV0dXJuIE1vblRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd4ZGMnOlxuICAgIGNhc2UgJ3R4ZGMnOlxuICAgICAgcmV0dXJuIFhkY1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdjYW50b24nOlxuICAgIGNhc2UgJ3RjYW50b24nOlxuICAgICAgcmV0dXJuIENhbnRvblRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgQ2FudG9uVG9rZW5Db25maWcpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBHbG9iYWxDb2luRmFjdG9yeTogQ29pbkZhY3RvcnkgPSBuZXcgQ29pbkZhY3RvcnkoKTtcblxucmVnaXN0ZXJDb2luQ29uc3RydWN0b3JzKEdsb2JhbENvaW5GYWN0b3J5KTtcbiJdfQ==