ETH Price: $2,484.51 (-0.59%)

Token

ERC20 ***
 

Overview

Max Total Supply

100,000,000 ERC20 ***

Holders

517

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,433.969058821277936039 ERC20 ***

Value
$0.00
0x183d63ab9c95f9fe5c4ac2d6f0231b5b50c138a0
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Text2VidAI

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-12
*/

/*


Telegram: https://t.me/Text2VidAI
Website:  https://Text2VidAI.com
Twitter: https://twitter.com/Text2Vid
*/

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract Text2VidAI is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public operationsWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event operationsWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Text2VidAI", "T2V") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // launch buy fees
        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 10;
        uint256 _buyOperationsFee = 10;
        
        // launch sell fees
        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 10;
        uint256 _sellOperationsFee = 10;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransaction = 3_000_000 * 1e18; // 2% max transaction at launch
        maxWallet = 3_000_000 * 1e18; // 2% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingWallet = address(0x25AC9222289C5d58428Bf235010692b80E3DF30B); 
        developmentWallet = address(0xC9438A7603A89cCF80e9e5Fb564383e6a89F333d); 
        liquidityWallet = address(0x229759B0702D6eC64cCBcd2fEf05B4F8b157481e); 
        operationsWallet = address(0x229759B0702D6eC64cCBcd2fEf05B4F8b157481e);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 50);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 50); 
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatemarketingWallet(address newmarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newmarketingWallet, marketingWallet);
        marketingWallet = newmarketingWallet;
    }

    function updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateliquidityWallet(address newliquidityWallet) external onlyOwner {
        emit liquidityWalletUpdated(newliquidityWallet, liquidityWallet);
        liquidityWallet = newliquidityWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blocked[from], "Sniper");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function blacklistSnipers(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"blacklistSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newliquidityWallet","type":"address"}],"name":"updateliquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600a81526020017f54657874325669644149000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f543256000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000c2f565b5080600490805190602001906200017092919062000c2f565b5050506200019362000187620006ef60201b60201c565b620006f760201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd816001620007bd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000d49565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000d49565b6040518363ffffffff1660e01b81526004016200032092919062000d8c565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000d49565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a0516001620007bd60201b60201c565b620003c360a0516001620008a760201b60201c565b6000600a9050600080600a90506000600a90506000600a9050600080600a90506000600a905060006a52b7d2dcc80cd2e400000090506a027b46536c66c8e3000000600b819055506a027b46536c66c8e3000000600d819055506127106005826200042f919062000df2565b6200043b919062000e82565b600c819055508860148190555087601581905550866016819055508560178190555060175460165460155460145462000475919062000eba565b62000481919062000eba565b6200048d919062000eba565b6013819055508460198190555083601a8190555082601b8190555081601c81905550601c54601b54601a54601954620004c7919062000eba565b620004d3919062000eba565b620004df919062000eba565b6018819055507325ac9222289c5d58428bf235010692b80e3df30b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c9438a7603a89ccf80e9e5fb564383e6a89f333d600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073229759b0702d6ec64ccbcd2fef05b4f8b157481e600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073229759b0702d6ec64ccbcd2fef05b4f8b157481e600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200065b6200064d6200094860201b60201c565b60016200097260201b60201c565b6200066e3060016200097260201b60201c565b6200068361dead60016200097260201b60201c565b620006a5620006976200094860201b60201c565b6001620007bd60201b60201c565b620006b8306001620007bd60201b60201c565b620006cd61dead6001620007bd60201b60201c565b620006df338262000aac60201b60201c565b50505050505050505050620010d9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007cd620006ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007f36200094860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200084c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008439062000f78565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000982620006ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009a86200094860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f89062000f78565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000aa0919062000fb7565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b169062001024565b60405180910390fd5b62000b336000838362000c2560201b60201c565b806002600082825462000b47919062000eba565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b9e919062000eba565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c05919062001057565b60405180910390a362000c216000838362000c2a60201b60201c565b5050565b505050565b505050565b82805462000c3d90620010a3565b90600052602060002090601f01602090048101928262000c61576000855562000cad565b82601f1062000c7c57805160ff191683800117855562000cad565b8280016001018555821562000cad579182015b8281111562000cac57825182559160200191906001019062000c8f565b5b50905062000cbc919062000cc0565b5090565b5b8082111562000cdb57600081600090555060010162000cc1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d118262000ce4565b9050919050565b62000d238162000d04565b811462000d2f57600080fd5b50565b60008151905062000d438162000d18565b92915050565b60006020828403121562000d625762000d6162000cdf565b5b600062000d728482850162000d32565b91505092915050565b62000d868162000d04565b82525050565b600060408201905062000da3600083018562000d7b565b62000db2602083018462000d7b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dff8262000db9565b915062000e0c8362000db9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e485762000e4762000dc3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e8f8262000db9565b915062000e9c8362000db9565b92508262000eaf5762000eae62000e53565b5b828204905092915050565b600062000ec78262000db9565b915062000ed48362000db9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f0c5762000f0b62000dc3565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f6060208362000f17565b915062000f6d8262000f28565b602082019050919050565b6000602082019050818103600083015262000f938162000f51565b9050919050565b60008115159050919050565b62000fb18162000f9a565b82525050565b600060208201905062000fce600083018462000fa6565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200100c601f8362000f17565b9150620010198262000fd4565b602082019050919050565b600060208201905081810360008301526200103f8162000ffd565b9050919050565b620010518162000db9565b82525050565b60006020820190506200106e600083018462001046565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010bc57607f821691505b60208210811415620010d357620010d262001074565b5b50919050565b60805160a051615b3f6200113e600039600081816114c8015281816117ea01528181611f5601526130550152600081816110e801528181612ffd015281816142310152818161431201528181614339015281816143d501526143fc0152615b3f6000f3fe6080604052600436106103c75760003560e01c8063924de9b7116101f2578063d46980161161010d578063ef8700e5116100a0578063f887ea401161006f578063f887ea4014610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063ef8700e514610dd1578063f11a24d314610dfc578063f2fde38b14610e27578063f637434214610e50576103ce565b8063e2f45605116100dc578063e2f4560514610d15578063e596219514610d40578063e7ad9fcd14610d7d578063e884f26014610da6576103ce565b8063d469801614610c45578063d85ba06314610c70578063dd62ed3e14610c9b578063e1bc339414610cd8576103ce565b8063bbc0c74211610185578063c3f70b5211610154578063c3f70b5214610b89578063c79c04fd14610bb4578063c876d0b914610bdd578063d257b34f14610c08576103ce565b8063bbc0c74214610ae1578063bff7816914610b0c578063c024666814610b35578063c04a541414610b5e576103ce565b8063a457c2d7116101c1578063a457c2d7146109ff578063a9059cbb14610a3c578063b204141114610a79578063b62496f514610aa4576103ce565b8063924de9b71461095957806392aa37731461098257806395d89b41146109ab5780639a7a23d6146109d6576103ce565b80634f77f6c0116102e2578063715018a6116102755780637bce5a04116102445780637bce5a04146108c15780638a8c523c146108ec5780638da5cb5b14610903578063921369131461092e576103ce565b8063715018a61461082b578063751039fc146108425780637571336a1461086d57806375f0a87414610896576103ce565b80636aebf627116102b15780636aebf627146107715780636af1972d1461079a5780636ddd1713146107c357806370a08231146107ee576103ce565b80634f77f6c0146106b35780634fbee193146106de5780635a139dd41461071b5780636a486a8e14610746576103ce565b80631f3fed8f1161035a578063313ce56711610329578063313ce567146105f5578063395093511461062057806349bd5a5e1461065d5780634a62bb6514610688576103ce565b80631f3fed8f1461053957806323b872dd1461056457806327c8f835146105a15780632e6ed7ef146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee91906147e8565b611333565b005b34801561060157600080fd5b5061060a611411565b604051610617919061486b565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190614651565b61141a565b60405161065491906146ac565b60405180910390f35b34801561066957600080fd5b506106726114c6565b60405161067f91906147cd565b60405180910390f35b34801561069457600080fd5b5061069d6114ea565b6040516106aa91906146ac565b60405180910390f35b3480156106bf57600080fd5b506106c86114fd565b6040516106d59190614750565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190614886565b611503565b60405161071291906146ac565b60405180910390f35b34801561072757600080fd5b50610730611559565b60405161073d9190614750565b60405180910390f35b34801561075257600080fd5b5061075b61155f565b6040516107689190614750565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190614886565b611565565b005b3480156107a657600080fd5b506107c160048036038101906107bc9190614944565b6116a1565b005b3480156107cf57600080fd5b506107d86118b0565b6040516107e591906146ac565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190614886565b6118c3565b6040516108229190614750565b60405180910390f35b34801561083757600080fd5b5061084061190b565b005b34801561084e57600080fd5b50610857611993565b60405161086491906146ac565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f91906149a4565b611a33565b005b3480156108a257600080fd5b506108ab611b0a565b6040516108b891906147cd565b60405180910390f35b3480156108cd57600080fd5b506108d6611b30565b6040516108e39190614750565b60405180910390f35b3480156108f857600080fd5b50610901611b36565b005b34801561090f57600080fd5b50610918611c41565b60405161092591906147cd565b60405180910390f35b34801561093a57600080fd5b50610943611c6b565b6040516109509190614750565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b91906149e4565b611c71565b005b34801561098e57600080fd5b506109a960048036038101906109a49190614886565b611d0a565b005b3480156109b757600080fd5b506109c0611e46565b6040516109cd91906145d1565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f891906149a4565b611ed8565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190614651565b611ff1565b604051610a3391906146ac565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614651565b6120dc565b604051610a7091906146ac565b60405180910390f35b348015610a8557600080fd5b50610a8e6120fa565b604051610a9b9190614750565b60405180910390f35b348015610ab057600080fd5b50610acb6004803603810190610ac69190614886565b612100565b604051610ad891906146ac565b60405180910390f35b348015610aed57600080fd5b50610af6612120565b604051610b0391906146ac565b60405180910390f35b348015610b1857600080fd5b50610b336004803603810190610b2e9190614886565b612133565b005b348015610b4157600080fd5b50610b5c6004803603810190610b5791906149a4565b61226f565b005b348015610b6a57600080fd5b50610b73612394565b604051610b8091906147cd565b60405180910390f35b348015610b9557600080fd5b50610b9e6123ba565b604051610bab9190614750565b60405180910390f35b348015610bc057600080fd5b50610bdb6004803603810190610bd69190614886565b6123c0565b005b348015610be957600080fd5b50610bf26124fc565b604051610bff91906146ac565b60405180910390f35b348015610c1457600080fd5b50610c2f6004803603810190610c2a919061450b565b61250f565b604051610c3c91906146ac565b60405180910390f35b348015610c5157600080fd5b50610c5a612664565b604051610c6791906147cd565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c929190614750565b60405180910390f35b348015610ca757600080fd5b50610cc26004803603810190610cbd9190614a11565b612690565b604051610ccf9190614750565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa9190614886565b612717565b604051610d0c91906146ac565b60405180910390f35b348015610d2157600080fd5b50610d2a612737565b604051610d379190614750565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614886565b61273d565b604051610d7491906146ac565b60405180910390f35b348015610d8957600080fd5b50610da46004803603810190610d9f91906147e8565b61275d565b005b348015610db257600080fd5b50610dbb61283b565b604051610dc891906146ac565b60405180910390f35b348015610ddd57600080fd5b50610de66128db565b604051610df39190614750565b60405180910390f35b348015610e0857600080fd5b50610e116128e1565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e4e6004803603810190610e499190614886565b6128e7565b005b348015610e5c57600080fd5b50610e656129df565b604051610e729190614750565b60405180910390f35b348015610e8757600080fd5b50610e906129e5565b604051610e9d91906147cd565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c41565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c41565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b601d5481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c41565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546113e19190614dbd565b6113eb9190614dbd565b6113f59190614dbd565b6013819055506032601354111561140b57600080fd5b50505050565b60006012905090565b60006114bc611427612a3d565b848460016000611435612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b79190614dbd565b612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b61156d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661158b611c41565b73ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116a9612a3d565b73ffffffffffffffffffffffffffffffffffffffff166116c7611c41565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614a9d565b60405180910390fd5b60005b838390508110156118aa5760008484838181106117405761173f614e13565b5b90506020020160208101906117559190614886565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156117e15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561183957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156118965782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806118a290614e42565b915050611720565b50505050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611913612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611931611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614a9d565b60405180910390fd5b611991600061399d565b565b600061199d612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119bb611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a3b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a59611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b3e612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b5c611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf990614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611c79612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611c97611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d12612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d30611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e5590614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8190614c67565b8015611ece5780601f10611ea357610100808354040283529160200191611ece565b820191906000526020600020905b815481529060010190602001808311611eb157829003601f168201915b5050505050905090565b611ee0612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611efe611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614a9d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90614f69565b60405180910390fd5b611fed8282613a63565b5050565b60008060016000612000612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b490614ffb565b60405180910390fd5b6120d16120c8612a3d565b85858403612a45565b600191505092915050565b60006120f06120e9612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b61213b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612159611c41565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612277612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612295611c41565b73ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161238891906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6123c8612a3d565b73ffffffffffffffffffffffffffffffffffffffff166123e6611c41565b73ffffffffffffffffffffffffffffffffffffffff161461243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b6000612519612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612537611c41565b73ffffffffffffffffffffffffffffffffffffffff161461258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614a9d565b60405180910390fd5b620186a0600161259b61110a565b6125a59190614aec565b6125af9190614b75565b8210156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e89061508d565b60405180910390fd5b6103e860056125fe61110a565b6126089190614aec565b6126129190614b75565b821115612654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264b9061511f565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b612765612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612783611c41565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a5460195461280b9190614dbd565b6128159190614dbd565b61281f9190614dbd565b6018819055506032601854111561283557600080fd5b50505050565b6000612845612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612863611c41565b73ffffffffffffffffffffffffffffffffffffffff16146128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b6128ef612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661290d611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295a90614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906151b1565b60405180910390fd5b6129dc8161399d565b50565b601a5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118c3565b826132749190614dbd565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118c3565b826134149190614dbd565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118c3565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614dbd565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614dbd565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614dbd565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614dbd565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614dbd565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614dbd565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614dbd565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614dbd565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614dbd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118c3565b90506000602054601f54601d54601e54613daa9190614dbd565b613db49190614dbd565b613dbe9190614dbd565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614e13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614e13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b60008060008060808587031215614802576148016144cb565b5b6000614810878288016144f6565b9450506020614821878288016144f6565b9350506040614832878288016144f6565b9250506060614843878288016144f6565b91505092959194509250565b600060ff82169050919050565b6148658161484f565b82525050565b6000602082019050614880600083018461485c565b92915050565b60006020828403121561489c5761489b6144cb565b5b60006148aa8482850161463c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126148d8576148d76148b3565b5b8235905067ffffffffffffffff8111156148f5576148f46148b8565b5b602083019150836020820283011115614911576149106148bd565b5b9250929050565b61492181614691565b811461492c57600080fd5b50565b60008135905061493e81614918565b92915050565b60008060006040848603121561495d5761495c6144cb565b5b600084013567ffffffffffffffff81111561497b5761497a6144d0565b5b614987868287016148c2565b9350935050602061499a8682870161492f565b9150509250925092565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da8582860161492f565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a088482850161492f565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b6000614dc8826144d5565b9150614dd3836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0857614e07614abd565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e4d826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e8057614e7f614abd565b5b600182019050919050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e697065720000000000000000000000000000000000000000000000000000600082015250565b600061544f600683614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea264697066735822122000e3eaceed094025acce64d2227536c7c7b61668dcd5a7360d147076dafd8b0e64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063924de9b7116101f2578063d46980161161010d578063ef8700e5116100a0578063f887ea401161006f578063f887ea4014610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063ef8700e514610dd1578063f11a24d314610dfc578063f2fde38b14610e27578063f637434214610e50576103ce565b8063e2f45605116100dc578063e2f4560514610d15578063e596219514610d40578063e7ad9fcd14610d7d578063e884f26014610da6576103ce565b8063d469801614610c45578063d85ba06314610c70578063dd62ed3e14610c9b578063e1bc339414610cd8576103ce565b8063bbc0c74211610185578063c3f70b5211610154578063c3f70b5214610b89578063c79c04fd14610bb4578063c876d0b914610bdd578063d257b34f14610c08576103ce565b8063bbc0c74214610ae1578063bff7816914610b0c578063c024666814610b35578063c04a541414610b5e576103ce565b8063a457c2d7116101c1578063a457c2d7146109ff578063a9059cbb14610a3c578063b204141114610a79578063b62496f514610aa4576103ce565b8063924de9b71461095957806392aa37731461098257806395d89b41146109ab5780639a7a23d6146109d6576103ce565b80634f77f6c0116102e2578063715018a6116102755780637bce5a04116102445780637bce5a04146108c15780638a8c523c146108ec5780638da5cb5b14610903578063921369131461092e576103ce565b8063715018a61461082b578063751039fc146108425780637571336a1461086d57806375f0a87414610896576103ce565b80636aebf627116102b15780636aebf627146107715780636af1972d1461079a5780636ddd1713146107c357806370a08231146107ee576103ce565b80634f77f6c0146106b35780634fbee193146106de5780635a139dd41461071b5780636a486a8e14610746576103ce565b80631f3fed8f1161035a578063313ce56711610329578063313ce567146105f5578063395093511461062057806349bd5a5e1461065d5780634a62bb6514610688576103ce565b80631f3fed8f1461053957806323b872dd1461056457806327c8f835146105a15780632e6ed7ef146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee91906147e8565b611333565b005b34801561060157600080fd5b5061060a611411565b604051610617919061486b565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190614651565b61141a565b60405161065491906146ac565b60405180910390f35b34801561066957600080fd5b506106726114c6565b60405161067f91906147cd565b60405180910390f35b34801561069457600080fd5b5061069d6114ea565b6040516106aa91906146ac565b60405180910390f35b3480156106bf57600080fd5b506106c86114fd565b6040516106d59190614750565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190614886565b611503565b60405161071291906146ac565b60405180910390f35b34801561072757600080fd5b50610730611559565b60405161073d9190614750565b60405180910390f35b34801561075257600080fd5b5061075b61155f565b6040516107689190614750565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190614886565b611565565b005b3480156107a657600080fd5b506107c160048036038101906107bc9190614944565b6116a1565b005b3480156107cf57600080fd5b506107d86118b0565b6040516107e591906146ac565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190614886565b6118c3565b6040516108229190614750565b60405180910390f35b34801561083757600080fd5b5061084061190b565b005b34801561084e57600080fd5b50610857611993565b60405161086491906146ac565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f91906149a4565b611a33565b005b3480156108a257600080fd5b506108ab611b0a565b6040516108b891906147cd565b60405180910390f35b3480156108cd57600080fd5b506108d6611b30565b6040516108e39190614750565b60405180910390f35b3480156108f857600080fd5b50610901611b36565b005b34801561090f57600080fd5b50610918611c41565b60405161092591906147cd565b60405180910390f35b34801561093a57600080fd5b50610943611c6b565b6040516109509190614750565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b91906149e4565b611c71565b005b34801561098e57600080fd5b506109a960048036038101906109a49190614886565b611d0a565b005b3480156109b757600080fd5b506109c0611e46565b6040516109cd91906145d1565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f891906149a4565b611ed8565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190614651565b611ff1565b604051610a3391906146ac565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614651565b6120dc565b604051610a7091906146ac565b60405180910390f35b348015610a8557600080fd5b50610a8e6120fa565b604051610a9b9190614750565b60405180910390f35b348015610ab057600080fd5b50610acb6004803603810190610ac69190614886565b612100565b604051610ad891906146ac565b60405180910390f35b348015610aed57600080fd5b50610af6612120565b604051610b0391906146ac565b60405180910390f35b348015610b1857600080fd5b50610b336004803603810190610b2e9190614886565b612133565b005b348015610b4157600080fd5b50610b5c6004803603810190610b5791906149a4565b61226f565b005b348015610b6a57600080fd5b50610b73612394565b604051610b8091906147cd565b60405180910390f35b348015610b9557600080fd5b50610b9e6123ba565b604051610bab9190614750565b60405180910390f35b348015610bc057600080fd5b50610bdb6004803603810190610bd69190614886565b6123c0565b005b348015610be957600080fd5b50610bf26124fc565b604051610bff91906146ac565b60405180910390f35b348015610c1457600080fd5b50610c2f6004803603810190610c2a919061450b565b61250f565b604051610c3c91906146ac565b60405180910390f35b348015610c5157600080fd5b50610c5a612664565b604051610c6791906147cd565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c929190614750565b60405180910390f35b348015610ca757600080fd5b50610cc26004803603810190610cbd9190614a11565b612690565b604051610ccf9190614750565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa9190614886565b612717565b604051610d0c91906146ac565b60405180910390f35b348015610d2157600080fd5b50610d2a612737565b604051610d379190614750565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614886565b61273d565b604051610d7491906146ac565b60405180910390f35b348015610d8957600080fd5b50610da46004803603810190610d9f91906147e8565b61275d565b005b348015610db257600080fd5b50610dbb61283b565b604051610dc891906146ac565b60405180910390f35b348015610ddd57600080fd5b50610de66128db565b604051610df39190614750565b60405180910390f35b348015610e0857600080fd5b50610e116128e1565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e4e6004803603810190610e499190614886565b6128e7565b005b348015610e5c57600080fd5b50610e656129df565b604051610e729190614750565b60405180910390f35b348015610e8757600080fd5b50610e906129e5565b604051610e9d91906147cd565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c41565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c41565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b601d5481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c41565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546113e19190614dbd565b6113eb9190614dbd565b6113f59190614dbd565b6013819055506032601354111561140b57600080fd5b50505050565b60006012905090565b60006114bc611427612a3d565b848460016000611435612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114b79190614dbd565b612a45565b6001905092915050565b7f00000000000000000000000048051c11c60497431291bea0092d80616d0af62a81565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b61156d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661158b611c41565b73ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116a9612a3d565b73ffffffffffffffffffffffffffffffffffffffff166116c7611c41565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614a9d565b60405180910390fd5b60005b838390508110156118aa5760008484838181106117405761173f614e13565b5b90506020020160208101906117559190614886565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156117e15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561183957507f00000000000000000000000048051c11c60497431291bea0092d80616d0af62a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156118965782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806118a290614e42565b915050611720565b50505050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611913612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611931611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614a9d565b60405180910390fd5b611991600061399d565b565b600061199d612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119bb611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a3b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a59611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b3e612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b5c611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf990614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611c79612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611c97611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d12612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d30611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e5590614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8190614c67565b8015611ece5780601f10611ea357610100808354040283529160200191611ece565b820191906000526020600020905b815481529060010190602001808311611eb157829003601f168201915b5050505050905090565b611ee0612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611efe611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614a9d565b60405180910390fd5b7f00000000000000000000000048051c11c60497431291bea0092d80616d0af62a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90614f69565b60405180910390fd5b611fed8282613a63565b5050565b60008060016000612000612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b490614ffb565b60405180910390fd5b6120d16120c8612a3d565b85858403612a45565b600191505092915050565b60006120f06120e9612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b61213b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612159611c41565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612277612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612295611c41565b73ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161238891906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6123c8612a3d565b73ffffffffffffffffffffffffffffffffffffffff166123e6611c41565b73ffffffffffffffffffffffffffffffffffffffff161461243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b6000612519612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612537611c41565b73ffffffffffffffffffffffffffffffffffffffff161461258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614a9d565b60405180910390fd5b620186a0600161259b61110a565b6125a59190614aec565b6125af9190614b75565b8210156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e89061508d565b60405180910390fd5b6103e860056125fe61110a565b6126089190614aec565b6126129190614b75565b821115612654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264b9061511f565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b612765612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612783611c41565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a5460195461280b9190614dbd565b6128159190614dbd565b61281f9190614dbd565b6018819055506032601854111561283557600080fd5b50505050565b6000612845612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612863611c41565b73ffffffffffffffffffffffffffffffffffffffff16146128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b6128ef612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661290d611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295a90614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906151b1565b60405180910390fd5b6129dc8161399d565b50565b601a5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f00000000000000000000000048051c11c60497431291bea0092d80616d0af62a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118c3565b826132749190614dbd565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118c3565b826134149190614dbd565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118c3565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614dbd565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614dbd565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614dbd565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614dbd565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614dbd565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614dbd565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614dbd565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614dbd565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614dbd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118c3565b90506000602054601f54601d54601e54613daa9190614dbd565b613db49190614dbd565b613dbe9190614dbd565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614e13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614e13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b60008060008060808587031215614802576148016144cb565b5b6000614810878288016144f6565b9450506020614821878288016144f6565b9350506040614832878288016144f6565b9250506060614843878288016144f6565b91505092959194509250565b600060ff82169050919050565b6148658161484f565b82525050565b6000602082019050614880600083018461485c565b92915050565b60006020828403121561489c5761489b6144cb565b5b60006148aa8482850161463c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126148d8576148d76148b3565b5b8235905067ffffffffffffffff8111156148f5576148f46148b8565b5b602083019150836020820283011115614911576149106148bd565b5b9250929050565b61492181614691565b811461492c57600080fd5b50565b60008135905061493e81614918565b92915050565b60008060006040848603121561495d5761495c6144cb565b5b600084013567ffffffffffffffff81111561497b5761497a6144d0565b5b614987868287016148c2565b9350935050602061499a8682870161492f565b9150509250925092565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da8582860161492f565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a088482850161492f565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b6000614dc8826144d5565b9150614dd3836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e0857614e07614abd565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e4d826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e8057614e7f614abd565b5b600182019050919050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e697065720000000000000000000000000000000000000000000000000000600082015250565b600061544f600683614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea264697066735822122000e3eaceed094025acce64d2227536c7c7b61668dcd5a7360d147076dafd8b0e64736f6c634300080a0033

Deployed Bytecode Sourcemap

15133:18310:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21425:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2830:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3744:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15213:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3151:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16415:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16536;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21698:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16496:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3921:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15316:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22321:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3050:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4421:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15271:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15743:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16455:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24864:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16264:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16304:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24456:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29923:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15823:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3267:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;952:103;;;;;;;;;;;;;:::i;:::-;;20533:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21956:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15481:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16151;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20280:201;;;;;;;;;;;;;:::i;:::-;;729:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16339:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22213:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24648:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2938:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23535:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4644:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3402:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16225:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16786:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15783:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24043:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23345:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15518:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15634:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24259:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15989:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20920:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15557:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16117:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3585:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16720:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15670:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16069:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22827:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20715:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16576:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16188:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1063:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16377:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15376:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15710:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16618:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15594:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21425:265;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21564:4:::1;21556;21551:1;21535:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21534:26;;;;:::i;:::-;21533:35;;;;:::i;:::-;21523:6;:45;;21501:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21675:6;21665;:17;;;;:::i;:::-;21648:14;:34;;;;21425:265:::0;:::o;2830:100::-;2884:13;2917:5;2910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2830:100;:::o;3744:169::-;3827:4;3844:39;3853:12;:10;:12::i;:::-;3867:7;3876:6;3844:8;:39::i;:::-;3901:4;3894:11;;3744:169;;;;:::o;15213:51::-;;;:::o;3151:108::-;3212:7;3239:12;;3232:19;;3151:108;:::o;16415:33::-;;;;:::o;16536:::-;;;;:::o;21698:250::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21832:4:::1;21824;21819:1;21803:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21802:26;;;;:::i;:::-;21801:35;;;;:::i;:::-;21791:6;:45;;21769:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21933:6;21923;:17;;;;:::i;:::-;21911:9;:29;;;;21698:250:::0;:::o;16496:33::-;;;;:::o;3921:492::-;4061:4;4078:36;4088:6;4096:9;4107:6;4078:9;:36::i;:::-;4127:24;4154:11;:19;4166:6;4154:19;;;;;;;;;;;;;;;:33;4174:12;:10;:12::i;:::-;4154:33;;;;;;;;;;;;;;;;4127:60;;4226:6;4206:16;:26;;4198:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4313:57;4322:6;4330:12;:10;:12::i;:::-;4363:6;4344:16;:25;4313:8;:57::i;:::-;4401:4;4394:11;;;3921:492;;;;;:::o;15316:53::-;15362:6;15316:53;:::o;22321:498::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22530:13:::1;22512:15;:31;;;;22572:13;22554:15;:31;;;;22616:15;22596:17;:35;;;;22661:14;22642:16;:33;;;;22757:16;;22737:17;;22719:15;;22701;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;22686:12;:87;;;;22808:2;22792:12;;:18;;22784:27;;;::::0;::::1;;22321:498:::0;;;;:::o;3050:93::-;3108:5;3133:2;3126:9;;3050:93;:::o;4421:215::-;4509:4;4526:80;4535:12;:10;:12::i;:::-;4549:7;4595:10;4558:11;:25;4570:12;:10;:12::i;:::-;4558:25;;;;;;;;;;;;;;;:34;4584:7;4558:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4526:8;:80::i;:::-;4624:4;4617:11;;4421:215;;;;:::o;15271:38::-;;;:::o;15743:33::-;;;;;;;;;;;;;:::o;16455:32::-;;;;:::o;24864:126::-;24930:4;24954:19;:28;24974:7;24954:28;;;;;;;;;;;;;;;;;;;;;;;;;24947:35;;24864:126;;;:::o;16264:31::-;;;;:::o;16304:28::-;;;;:::o;24456:184::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24576:16:::1;;;;;;;;;;;24541:52;;24565:9;24541:52;;;;;;;;;;;;24623:9;24604:16;;:28;;;;;;;;;;;;;;;;;;24456:184:::0;:::o;29923:389::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30030:9:::1;30026:279;30046:8;;:15;;30044:1;:17;30026:279;;;30081:15;30099:8;;30108:1;30099:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30081:29;;30147:4;30128:24;;:7;:24;;;;:62;;;;;30184:6;;;;;;;;;;;30173:17;;:7;:17;;;;30128:62;:116;;;;;30230:13;30211:33;;:7;:33;;;;30128:116;30125:168;;;30282:11;30263:7;:16;30271:7;30263:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30125:168;30066:239;30062:3;;;;;:::i;:::-;;;;30026:279;;;;29923:389:::0;;;:::o;15823:31::-;;;;;;;;;;;;;:::o;3267:127::-;3341:7;3368:9;:18;3378:7;3368:18;;;;;;;;;;;;;;;;3361:25;;3267:127;;;:::o;952:103::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1017:30:::1;1044:1;1017:18;:30::i;:::-;952:103::o:0;20533:121::-;20585:4;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20619:5:::1;20602:14;;:22;;;;;;;;;;;;;;;;;;20642:4;20635:11;;20533:121:::0;:::o;21956:161::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22105:4:::1;22069:25;:33;22095:6;22069:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21956:161:::0;;:::o;15481:30::-;;;;;;;;;;;;;:::o;16151:::-;;;;:::o;20280:201::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20344:13:::1;;;;;;;;;;;20343:14;20335:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20403:4;20387:13;;:20;;;;;;;;;;;;;;;;;;20432:12;20418:11;:26;;;;20469:4;20455:11;;:18;;;;;;;;;;;;;;;;;;20280:201::o:0;729:87::-;775:7;802:6;;;;;;;;;;;795:13;;729:87;:::o;16339:31::-;;;;:::o;22213:100::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22298:7:::1;22284:11;;:21;;;;;;;;;;;;;;;;;;22213:100:::0;:::o;24648:208::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24785:15:::1;;;;;;;;;;;24742:59;;24765:18;24742:59;;;;;;;;;;;;24830:18;24812:15;;:36;;;;;;;;;;;;;;;;;;24648:208:::0;:::o;2938:104::-;2994:13;3027:7;3020:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2938:104;:::o;23535:304::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23679:13:::1;23671:21;;:4;:21;;;;23649:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23790:41;23819:4;23825:5;23790:28;:41::i;:::-;23535:304:::0;;:::o;4644:413::-;4737:4;4754:24;4781:11;:25;4793:12;:10;:12::i;:::-;4781:25;;;;;;;;;;;;;;;:34;4807:7;4781:34;;;;;;;;;;;;;;;;4754:61;;4854:15;4834:16;:35;;4826:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4947:67;4956:12;:10;:12::i;:::-;4970:7;4998:15;4979:16;:34;4947:8;:67::i;:::-;5045:4;5038:11;;;4644:413;;;;:::o;3402:175::-;3488:4;3505:42;3515:12;:10;:12::i;:::-;3529:9;3540:6;3505:9;:42::i;:::-;3565:4;3558:11;;3402:175;;;;:::o;16225:32::-;;;;:::o;16786:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15783:33::-;;;;;;;;;;;;;:::o;24043:208::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24180:15:::1;;;;;;;;;;;24137:59;;24160:18;24137:59;;;;;;;;;;;;24225:18;24207:15;;:36;;;;;;;;;;;;;;;;;;24043:208:::0;:::o;23345:182::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23461:8:::1;23430:19;:28;23450:7;23430:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23501:7;23485:34;;;23510:8;23485:34;;;;;;:::i;:::-;;;;;;;;23345:182:::0;;:::o;15518:32::-;;;;;;;;;;;;;:::o;15634:29::-;;;;:::o;24259:189::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24382:17:::1;;;;;;;;;;;24346:54;;24371:9;24346:54;;;;;;;;;;;;24431:9;24411:17;;:29;;;;;;;;;;;;;;;;;;24259:189:::0;:::o;15989:39::-;;;;;;;;;;;;;:::o;20920:497::-;21028:4;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21107:6:::1;21102:1;21086:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21085:28;;;;:::i;:::-;21072:9;:41;;21050:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21262:4;21257:1;21241:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21240:26;;;;:::i;:::-;21227:9;:39;;21205:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21378:9;21357:18;:30;;;;21405:4;21398:11;;20920:497:::0;;;:::o;15557:30::-;;;;;;;;;;;;;:::o;16117:27::-;;;;:::o;3585:151::-;3674:7;3701:11;:18;3713:5;3701:18;;;;;;;;;;;;;;;:27;3720:7;3701:27;;;;;;;;;;;;;;;;3694:34;;3585:151;;;;:::o;16720:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15670:33::-;;;;:::o;16069:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;22827:510::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23038:13:::1;23019:16;:32;;;;23081:13;23062:16;:32;;;;23126:15;23105:18;:36;;;;23172:14;23152:17;:34;;;;23272:17;;23251:18;;23232:16;;23213;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;23197:13;:92;;;;23325:2;23308:13;;:19;;23300:28;;;::::0;::::1;;22827:510:::0;;;;:::o;20715:135::-;20775:4;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20815:5:::1;20792:20;;:28;;;;;;;;;;;;;;;;;;20838:4;20831:11;;20715:135:::0;:::o;16576:35::-;;;;:::o;16188:30::-;;;;:::o;1063:201::-;875:12;:10;:12::i;:::-;864:23;;:7;:5;:7::i;:::-;:23;;;856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1172:1:::1;1152:22;;:8;:22;;;;1144:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1228:28;1247:8;1228:18;:28::i;:::-;1063:201:::0;:::o;16377:31::-;;;;:::o;15376:66::-;;;;;;;;;;;;;:::o;15710:24::-;;;;:::o;16618:34::-;;;;:::o;15594:31::-;;;;;;;;;;;;;:::o;275:98::-;328:7;355:10;348:17;;275:98;:::o;6812:380::-;6965:1;6948:19;;:5;:19;;;;6940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7046:1;7027:21;;:7;:21;;;;7019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7130:6;7100:11;:18;7112:5;7100:18;;;;;;;;;;;;;;;:27;7119:7;7100:27;;;;;;;;;;;;;;;:36;;;;7168:7;7152:32;;7161:5;7152:32;;;7177:6;7152:32;;;;;;:::i;:::-;;;;;;;;6812:380;;;:::o;24998:4917::-;25146:1;25130:18;;:4;:18;;;;25122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25223:1;25209:16;;:2;:16;;;;25201:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25285:7;:13;25293:4;25285:13;;;;;;;;;;;;;;;;;;;;;;;;;25284:14;25276:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;25336:1;25326:6;:11;25322:93;;;25354:28;25370:4;25376:2;25380:1;25354:15;:28::i;:::-;25397:7;;25322:93;25431:14;;;;;;;;;;;25427:2445;;;25492:7;:5;:7::i;:::-;25484:15;;:4;:15;;;;:49;;;;;25526:7;:5;:7::i;:::-;25520:13;;:2;:13;;;;25484:49;:86;;;;;25568:1;25554:16;;:2;:16;;;;25484:86;:128;;;;;25605:6;25591:21;;:2;:21;;;;25484:128;:158;;;;;25634:8;;;;;;;;;;;25633:9;25484:158;25462:2399;;;25682:13;;;;;;;;;;;25677:223;;25754:19;:25;25774:4;25754:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25783:19;:23;25803:2;25783:23;;;;;;;;;;;;;;;;;;;;;;;;;25754:52;25720:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25677:223;26056:20;;;;;;;;;;;26052:641;;;26137:7;:5;:7::i;:::-;26131:13;;:2;:13;;;;:72;;;;;26187:15;26173:30;;:2;:30;;;;26131:72;:129;;;;;26246:13;26232:28;;:2;:28;;;;26131:129;26101:573;;;26424:12;26349:28;:39;26378:9;26349:39;;;;;;;;;;;;;;;;:87;26311:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;26638:12;26596:28;:39;26625:9;26596:39;;;;;;;;;;;;;;;:54;;;;26101:573;26052:641;26767:25;:31;26793:4;26767:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26824:25;:29;26850:2;26824:29;;;;;;;;;;;;;;;;;;;;;;;;;26823:30;26767:86;26741:1105;;;26940:14;;26930:6;:24;;26896:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27136:9;;27119:13;27129:2;27119:9;:13::i;:::-;27110:6;:22;;;;:::i;:::-;:35;;27076:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26741:1105;;;27314:25;:29;27340:2;27314:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27369:25;:31;27395:4;27369:31;;;;;;;;;;;;;;;;;;;;;;;;;27368:32;27314:86;27288:558;;;27487:14;;27477:6;:24;;27443:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27288:558;;;27632:25;:29;27658:2;27632:29;;;;;;;;;;;;;;;;;;;;;;;;;27627:219;;27746:9;;27729:13;27739:2;27729:9;:13::i;:::-;27720:6;:22;;;;:::i;:::-;:35;;27686:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27627:219;27288:558;26741:1105;25462:2399;25427:2445;27884:28;27915:24;27933:4;27915:9;:24::i;:::-;27884:55;;27952:12;27991:18;;27967:20;:42;;27952:57;;28040:7;:35;;;;;28064:11;;;;;;;;;;;28040:35;:61;;;;;28093:8;;;;;;;;;;;28092:9;28040:61;:110;;;;;28119:25;:31;28145:4;28119:31;;;;;;;;;;;;;;;;;;;;;;;;;28118:32;28040:110;:153;;;;;28168:19;:25;28188:4;28168:25;;;;;;;;;;;;;;;;;;;;;;;;;28167:26;28040:153;:194;;;;;28211:19;:23;28231:2;28211:23;;;;;;;;;;;;;;;;;;;;;;;;;28210:24;28040:194;28022:326;;;28272:4;28261:8;;:15;;;;;;;;;;;;;;;;;;28293:10;:8;:10::i;:::-;28331:5;28320:8;;:16;;;;;;;;;;;;;;;;;;28022:326;28360:12;28376:8;;;;;;;;;;;28375:9;28360:24;;28486:19;:25;28506:4;28486:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28515:19;:23;28535:2;28515:23;;;;;;;;;;;;;;;;;;;;;;;;;28486:52;28482:100;;;28565:5;28555:15;;28482:100;28594:12;28699:7;28695:1167;;;28751:25;:29;28777:2;28751:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28800:1;28784:13;;:17;28751:50;28747:966;;;28829:34;28859:3;28829:25;28840:13;;28829:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28822:41;;28932:13;;28912:16;;28905:4;:23;;;;:::i;:::-;28904:41;;;;:::i;:::-;28882:18;;:63;;;;;;;:::i;:::-;;;;;;;;29018:13;;28996:18;;28989:4;:25;;;;:::i;:::-;28988:43;;;;:::i;:::-;28964:20;;:67;;;;;;;:::i;:::-;;;;;;;;29100:13;;29080:16;;29073:4;:23;;;;:::i;:::-;29072:41;;;;:::i;:::-;29050:18;;:63;;;;;;;:::i;:::-;;;;;;;;29184:13;;29163:17;;29156:4;:24;;;;:::i;:::-;29155:42;;;;:::i;:::-;29132:19;;:65;;;;;;;:::i;:::-;;;;;;;;28747:966;;;29259:25;:31;29285:4;29259:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29309:1;29294:12;;:16;29259:51;29255:458;;;29338:33;29367:3;29338:24;29349:12;;29338:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29331:40;;29439:12;;29420:15;;29413:4;:22;;;;:::i;:::-;29412:39;;;;:::i;:::-;29390:18;;:61;;;;;;;:::i;:::-;;;;;;;;29523:12;;29502:17;;29495:4;:24;;;;:::i;:::-;29494:41;;;;:::i;:::-;29470:20;;:65;;;;;;;:::i;:::-;;;;;;;;29603:12;;29584:15;;29577:4;:22;;;;:::i;:::-;29576:39;;;;:::i;:::-;29554:18;;:61;;;;;;;:::i;:::-;;;;;;;;29685:12;;29665:16;;29658:4;:23;;;;:::i;:::-;29657:40;;;;:::i;:::-;29634:19;;:63;;;;;;;:::i;:::-;;;;;;;;29255:458;28747:966;29740:1;29733:4;:8;29729:91;;;29762:42;29778:4;29792;29799;29762:15;:42::i;:::-;29729:91;29846:4;29836:14;;;;;:::i;:::-;;;28695:1167;29874:33;29890:4;29896:2;29900:6;29874:15;:33::i;:::-;25111:4804;;;;24998:4917;;;;:::o;1272:191::-;1346:16;1365:6;;;;;;;;;;;1346:25;;1391:8;1382:6;;:17;;;;;;;;;;;;;;;;;;1446:8;1415:40;;1436:8;1415:40;;;;;;;;;;;;1335:128;1272:191;:::o;23847:188::-;23964:5;23930:25;:31;23956:4;23930:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24021:5;23987:40;;24015:4;23987:40;;;;;;;;;;;;23847:188;;:::o;5065:733::-;5223:1;5205:20;;:6;:20;;;;5197:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5307:1;5286:23;;:9;:23;;;;5278:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5362:47;5383:6;5391:9;5402:6;5362:20;:47::i;:::-;5422:21;5446:9;:17;5456:6;5446:17;;;;;;;;;;;;;;;;5422:41;;5499:6;5482:13;:23;;5474:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5620:6;5604:13;:22;5584:9;:17;5594:6;5584:17;;;;;;;;;;;;;;;:42;;;;5672:6;5648:9;:20;5658:9;5648:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5713:9;5696:35;;5705:6;5696:35;;;5724:6;5696:35;;;;;;:::i;:::-;;;;;;;;5744:46;5764:6;5772:9;5783:6;5744:19;:46::i;:::-;5186:612;5065:733;;;:::o;31446:1994::-;31485:23;31511:24;31529:4;31511:9;:24::i;:::-;31485:50;;31546:25;31678:19;;31642:20;;31608:18;;31574;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;31546:151;;31708:12;31756:1;31737:15;:20;:46;;;;31782:1;31761:17;:22;31737:46;31733:85;;;31800:7;;;;;31733:85;31873:2;31852:18;;:23;;;;:::i;:::-;31834:15;:41;31830:115;;;31931:2;31910:18;;:23;;;;:::i;:::-;31892:41;;31830:115;32006:23;32093:1;32073:17;32051:18;;32033:15;:36;;;;:::i;:::-;32032:58;;;;:::i;:::-;:62;;;;:::i;:::-;32006:88;;32105:26;32134:36;32154:15;32134;:19;;:36;;;;:::i;:::-;32105:65;;32183:25;32211:21;32183:49;;32245:36;32262:18;32245:16;:36::i;:::-;32294:18;32315:44;32341:17;32315:21;:25;;:44;;;;:::i;:::-;32294:65;;32372:18;32393:57;32432:17;32393:34;32408:18;;32393:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;32372:78;;32461:25;32489:59;32530:17;32489:36;32504:20;;32489:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;32461:87;;32559:24;32586:58;32626:17;32586:35;32601:19;;32586:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;32559:85;;32657:23;32729:16;32709:17;32696:10;32683;:23;;;;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;32657:88;;32779:1;32758:18;:22;;;;32812:1;32791:18;:22;;;;32847:1;32824:20;:24;;;;32881:1;32859:19;:23;;;;32917:17;;;;;;;;;;;32909:31;;32948:17;32909:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32895:75;;;;;33005:1;32987:15;:19;:42;;;;;33028:1;33010:15;:19;32987:42;32983:278;;;33046:46;33059:15;33076;33046:12;:46::i;:::-;33112:137;33145:18;33182:15;33216:18;;33112:137;;;;;;;;:::i;:::-;;;;;;;;32983:278;33293:16;;;;;;;;;;;33285:30;;33323:16;33285:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33271:73;;;;;33377:15;;;;;;;;;;;33369:29;;33406:21;33369:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33355:77;;;;;31474:1966;;;;;;;;;;;31446:1994;:::o;8818:98::-;8876:7;8907:1;8903;:5;;;;:::i;:::-;8896:12;;8818:98;;;;:::o;8924:::-;8982:7;9013:1;9009;:5;;;;:::i;:::-;9002:12;;8924:98;;;;:::o;7200:125::-;;;;:::o;7333:124::-;;;;:::o;8712:98::-;8770:7;8801:1;8797;:5;;;;:::i;:::-;8790:12;;8712:98;;;;:::o;30320:589::-;30446:21;30484:1;30470:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30446:40;;30515:4;30497;30502:1;30497:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30541:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30531:4;30536:1;30531:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30576:62;30593:4;30608:15;30626:11;30576:8;:62::i;:::-;30677:15;:66;;;30758:11;30784:1;30828:4;30855;30875:15;30677:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30375:534;30320:589;:::o;30917:521::-;31065:62;31082:4;31097:15;31115:11;31065:8;:62::i;:::-;31170:15;:31;;;31209:9;31242:4;31262:11;31288:1;31331;31374:15;;;;;;;;;;;31404;31170:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30917:521;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:765::-;6222:6;6230;6238;6246;6295:3;6283:9;6274:7;6270:23;6266:33;6263:120;;;6302:79;;:::i;:::-;6263:120;6422:1;6447:53;6492:7;6483:6;6472:9;6468:22;6447:53;:::i;:::-;6437:63;;6393:117;6549:2;6575:53;6620:7;6611:6;6600:9;6596:22;6575:53;:::i;:::-;6565:63;;6520:118;6677:2;6703:53;6748:7;6739:6;6728:9;6724:22;6703:53;:::i;:::-;6693:63;;6648:118;6805:2;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6776:118;6136:765;;;;;;;:::o;6907:86::-;6942:7;6982:4;6975:5;6971:16;6960:27;;6907:86;;;:::o;6999:112::-;7082:22;7098:5;7082:22;:::i;:::-;7077:3;7070:35;6999:112;;:::o;7117:214::-;7206:4;7244:2;7233:9;7229:18;7221:26;;7257:67;7321:1;7310:9;7306:17;7297:6;7257:67;:::i;:::-;7117:214;;;;:::o;7337:329::-;7396:6;7445:2;7433:9;7424:7;7420:23;7416:32;7413:119;;;7451:79;;:::i;:::-;7413:119;7571:1;7596:53;7641:7;7632:6;7621:9;7617:22;7596:53;:::i;:::-;7586:63;;7542:117;7337:329;;;;:::o;7672:117::-;7781:1;7778;7771:12;7795:117;7904:1;7901;7894:12;7918:117;8027:1;8024;8017:12;8058:568;8131:8;8141:6;8191:3;8184:4;8176:6;8172:17;8168:27;8158:122;;8199:79;;:::i;:::-;8158:122;8312:6;8299:20;8289:30;;8342:18;8334:6;8331:30;8328:117;;;8364:79;;:::i;:::-;8328:117;8478:4;8470:6;8466:17;8454:29;;8532:3;8524:4;8516:6;8512:17;8502:8;8498:32;8495:41;8492:128;;;8539:79;;:::i;:::-;8492:128;8058:568;;;;;:::o;8632:116::-;8702:21;8717:5;8702:21;:::i;:::-;8695:5;8692:32;8682:60;;8738:1;8735;8728:12;8682:60;8632:116;:::o;8754:133::-;8797:5;8835:6;8822:20;8813:29;;8851:30;8875:5;8851:30;:::i;:::-;8754:133;;;;:::o;8893:698::-;8985:6;8993;9001;9050:2;9038:9;9029:7;9025:23;9021:32;9018:119;;;9056:79;;:::i;:::-;9018:119;9204:1;9193:9;9189:17;9176:31;9234:18;9226:6;9223:30;9220:117;;;9256:79;;:::i;:::-;9220:117;9369:80;9441:7;9432:6;9421:9;9417:22;9369:80;:::i;:::-;9351:98;;;;9147:312;9498:2;9524:50;9566:7;9557:6;9546:9;9542:22;9524:50;:::i;:::-;9514:60;;9469:115;8893:698;;;;;:::o;9597:468::-;9662:6;9670;9719:2;9707:9;9698:7;9694:23;9690:32;9687:119;;;9725:79;;:::i;:::-;9687:119;9845:1;9870:53;9915:7;9906:6;9895:9;9891:22;9870:53;:::i;:::-;9860:63;;9816:117;9972:2;9998:50;10040:7;10031:6;10020:9;10016:22;9998:50;:::i;:::-;9988:60;;9943:115;9597:468;;;;;:::o;10071:323::-;10127:6;10176:2;10164:9;10155:7;10151:23;10147:32;10144:119;;;10182:79;;:::i;:::-;10144:119;10302:1;10327:50;10369:7;10360:6;10349:9;10345:22;10327:50;:::i;:::-;10317:60;;10273:114;10071:323;;;;:::o;10400:474::-;10468:6;10476;10525:2;10513:9;10504:7;10500:23;10496:32;10493:119;;;10531:79;;:::i;:::-;10493:119;10651:1;10676:53;10721:7;10712:6;10701:9;10697:22;10676:53;:::i;:::-;10666:63;;10622:117;10778:2;10804:53;10849:7;10840:6;10829:9;10825:22;10804:53;:::i;:::-;10794:63;;10749:118;10400:474;;;;;:::o;10880:182::-;11020:34;11016:1;11008:6;11004:14;10997:58;10880:182;:::o;11068:366::-;11210:3;11231:67;11295:2;11290:3;11231:67;:::i;:::-;11224:74;;11307:93;11396:3;11307:93;:::i;:::-;11425:2;11420:3;11416:12;11409:19;;11068:366;;;:::o;11440:419::-;11606:4;11644:2;11633:9;11629:18;11621:26;;11693:9;11687:4;11683:20;11679:1;11668:9;11664:17;11657:47;11721:131;11847:4;11721:131;:::i;:::-;11713:139;;11440:419;;;:::o;11865:180::-;11913:77;11910:1;11903:88;12010:4;12007:1;12000:15;12034:4;12031:1;12024:15;12051:348;12091:7;12114:20;12132:1;12114:20;:::i;:::-;12109:25;;12148:20;12166:1;12148:20;:::i;:::-;12143:25;;12336:1;12268:66;12264:74;12261:1;12258:81;12253:1;12246:9;12239:17;12235:105;12232:131;;;12343:18;;:::i;:::-;12232:131;12391:1;12388;12384:9;12373:20;;12051:348;;;;:::o;12405:180::-;12453:77;12450:1;12443:88;12550:4;12547:1;12540:15;12574:4;12571:1;12564:15;12591:185;12631:1;12648:20;12666:1;12648:20;:::i;:::-;12643:25;;12682:20;12700:1;12682:20;:::i;:::-;12677:25;;12721:1;12711:35;;12726:18;;:::i;:::-;12711:35;12768:1;12765;12761:9;12756:14;;12591:185;;;;:::o;12782:228::-;12922:34;12918:1;12910:6;12906:14;12899:58;12991:11;12986:2;12978:6;12974:15;12967:36;12782:228;:::o;13016:366::-;13158:3;13179:67;13243:2;13238:3;13179:67;:::i;:::-;13172:74;;13255:93;13344:3;13255:93;:::i;:::-;13373:2;13368:3;13364:12;13357:19;;13016:366;;;:::o;13388:419::-;13554:4;13592:2;13581:9;13577:18;13569:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13669:131;13795:4;13669:131;:::i;:::-;13661:139;;13388:419;;;:::o;13813:180::-;13861:77;13858:1;13851:88;13958:4;13955:1;13948:15;13982:4;13979:1;13972:15;13999:320;14043:6;14080:1;14074:4;14070:12;14060:22;;14127:1;14121:4;14117:12;14148:18;14138:81;;14204:4;14196:6;14192:17;14182:27;;14138:81;14266:2;14258:6;14255:14;14235:18;14232:38;14229:84;;;14285:18;;:::i;:::-;14229:84;14050:269;13999:320;;;:::o;14325:223::-;14465:34;14461:1;14453:6;14449:14;14442:58;14534:6;14529:2;14521:6;14517:15;14510:31;14325:223;:::o;14554:366::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:419::-;15092:4;15130:2;15119:9;15115:18;15107:26;;15179:9;15173:4;15169:20;15165:1;15154:9;15150:17;15143:47;15207:131;15333:4;15207:131;:::i;:::-;15199:139;;14926:419;;;:::o;15351:227::-;15491:34;15487:1;15479:6;15475:14;15468:58;15560:10;15555:2;15547:6;15543:15;15536:35;15351:227;:::o;15584:366::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:419::-;16122:4;16160:2;16149:9;16145:18;16137:26;;16209:9;16203:4;16199:20;16195:1;16184:9;16180:17;16173:47;16237:131;16363:4;16237:131;:::i;:::-;16229:139;;15956:419;;;:::o;16381:305::-;16421:3;16440:20;16458:1;16440:20;:::i;:::-;16435:25;;16474:20;16492:1;16474:20;:::i;:::-;16469:25;;16628:1;16560:66;16556:74;16553:1;16550:81;16547:107;;;16634:18;;:::i;:::-;16547:107;16678:1;16675;16671:9;16664:16;;16381:305;;;;:::o;16692:180::-;16740:77;16737:1;16730:88;16837:4;16834:1;16827:15;16861:4;16858:1;16851:15;16878:233;16917:3;16940:24;16958:5;16940:24;:::i;:::-;16931:33;;16986:66;16979:5;16976:77;16973:103;;;17056:18;;:::i;:::-;16973:103;17103:1;17096:5;17092:13;17085:20;;16878:233;;;:::o;17117:164::-;17257:16;17253:1;17245:6;17241:14;17234:40;17117:164;:::o;17287:366::-;17429:3;17450:67;17514:2;17509:3;17450:67;:::i;:::-;17443:74;;17526:93;17615:3;17526:93;:::i;:::-;17644:2;17639:3;17635:12;17628:19;;17287:366;;;:::o;17659:419::-;17825:4;17863:2;17852:9;17848:18;17840:26;;17912:9;17906:4;17902:20;17898:1;17887:9;17883:17;17876:47;17940:131;18066:4;17940:131;:::i;:::-;17932:139;;17659:419;;;:::o;18084:244::-;18224:34;18220:1;18212:6;18208:14;18201:58;18293:27;18288:2;18280:6;18276:15;18269:52;18084:244;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:419::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18959:9;18953:4;18949:20;18945:1;18934:9;18930:17;18923:47;18987:131;19113:4;18987:131;:::i;:::-;18979:139;;18706:419;;;:::o;19131:224::-;19271:34;19267:1;19259:6;19255:14;19248:58;19340:7;19335:2;19327:6;19323:15;19316:32;19131:224;:::o;19361:366::-;19503:3;19524:67;19588:2;19583:3;19524:67;:::i;:::-;19517:74;;19600:93;19689:3;19600:93;:::i;:::-;19718:2;19713:3;19709:12;19702:19;;19361:366;;;:::o;19733:419::-;19899:4;19937:2;19926:9;19922:18;19914:26;;19986:9;19980:4;19976:20;19972:1;19961:9;19957:17;19950:47;20014:131;20140:4;20014:131;:::i;:::-;20006:139;;19733:419;;;:::o;20158:240::-;20298:34;20294:1;20286:6;20282:14;20275:58;20367:23;20362:2;20354:6;20350:15;20343:48;20158:240;:::o;20404:366::-;20546:3;20567:67;20631:2;20626:3;20567:67;:::i;:::-;20560:74;;20643:93;20732:3;20643:93;:::i;:::-;20761:2;20756:3;20752:12;20745:19;;20404:366;;;:::o;20776:419::-;20942:4;20980:2;20969:9;20965:18;20957:26;;21029:9;21023:4;21019:20;21015:1;21004:9;21000:17;20993:47;21057:131;21183:4;21057:131;:::i;:::-;21049:139;;20776:419;;;:::o;21201:239::-;21341:34;21337:1;21329:6;21325:14;21318:58;21410:22;21405:2;21397:6;21393:15;21386:47;21201:239;:::o;21446:366::-;21588:3;21609:67;21673:2;21668:3;21609:67;:::i;:::-;21602:74;;21685:93;21774:3;21685:93;:::i;:::-;21803:2;21798:3;21794:12;21787:19;;21446:366;;;:::o;21818:419::-;21984:4;22022:2;22011:9;22007:18;21999:26;;22071:9;22065:4;22061:20;22057:1;22046:9;22042:17;22035:47;22099:131;22225:4;22099:131;:::i;:::-;22091:139;;21818:419;;;:::o;22243:225::-;22383:34;22379:1;22371:6;22367:14;22360:58;22452:8;22447:2;22439:6;22435:15;22428:33;22243:225;:::o;22474:366::-;22616:3;22637:67;22701:2;22696:3;22637:67;:::i;:::-;22630:74;;22713:93;22802:3;22713:93;:::i;:::-;22831:2;22826:3;22822:12;22815:19;;22474:366;;;:::o;22846:419::-;23012:4;23050:2;23039:9;23035:18;23027:26;;23099:9;23093:4;23089:20;23085:1;23074:9;23070:17;23063:47;23127:131;23253:4;23127:131;:::i;:::-;23119:139;;22846:419;;;:::o;23271:223::-;23411:34;23407:1;23399:6;23395:14;23388:58;23480:6;23475:2;23467:6;23463:15;23456:31;23271:223;:::o;23500:366::-;23642:3;23663:67;23727:2;23722:3;23663:67;:::i;:::-;23656:74;;23739:93;23828:3;23739:93;:::i;:::-;23857:2;23852:3;23848:12;23841:19;;23500:366;;;:::o;23872:419::-;24038:4;24076:2;24065:9;24061:18;24053:26;;24125:9;24119:4;24115:20;24111:1;24100:9;24096:17;24089:47;24153:131;24279:4;24153:131;:::i;:::-;24145:139;;23872:419;;;:::o;24297:221::-;24437:34;24433:1;24425:6;24421:14;24414:58;24506:4;24501:2;24493:6;24489:15;24482:29;24297:221;:::o;24524:366::-;24666:3;24687:67;24751:2;24746:3;24687:67;:::i;:::-;24680:74;;24763:93;24852:3;24763:93;:::i;:::-;24881:2;24876:3;24872:12;24865:19;;24524:366;;;:::o;24896:419::-;25062:4;25100:2;25089:9;25085:18;25077:26;;25149:9;25143:4;25139:20;25135:1;25124:9;25120:17;25113:47;25177:131;25303:4;25177:131;:::i;:::-;25169:139;;24896:419;;;:::o;25321:224::-;25461:34;25457:1;25449:6;25445:14;25438:58;25530:7;25525:2;25517:6;25513:15;25506:32;25321:224;:::o;25551:366::-;25693:3;25714:67;25778:2;25773:3;25714:67;:::i;:::-;25707:74;;25790:93;25879:3;25790:93;:::i;:::-;25908:2;25903:3;25899:12;25892:19;;25551:366;;;:::o;25923:419::-;26089:4;26127:2;26116:9;26112:18;26104:26;;26176:9;26170:4;26166:20;26162:1;26151:9;26147:17;26140:47;26204:131;26330:4;26204:131;:::i;:::-;26196:139;;25923:419;;;:::o;26348:222::-;26488:34;26484:1;26476:6;26472:14;26465:58;26557:5;26552:2;26544:6;26540:15;26533:30;26348:222;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:156::-;27513:8;27509:1;27501:6;27497:14;27490:32;27373:156;:::o;27535:365::-;27677:3;27698:66;27762:1;27757:3;27698:66;:::i;:::-;27691:73;;27773:93;27862:3;27773:93;:::i;:::-;27891:2;27886:3;27882:12;27875:19;;27535:365;;;:::o;27906:419::-;28072:4;28110:2;28099:9;28095:18;28087:26;;28159:9;28153:4;28149:20;28145:1;28134:9;28130:17;28123:47;28187:131;28313:4;28187:131;:::i;:::-;28179:139;;27906:419;;;:::o;28331:172::-;28471:24;28467:1;28459:6;28455:14;28448:48;28331:172;:::o;28509:366::-;28651:3;28672:67;28736:2;28731:3;28672:67;:::i;:::-;28665:74;;28748:93;28837:3;28748:93;:::i;:::-;28866:2;28861:3;28857:12;28850:19;;28509:366;;;:::o;28881:419::-;29047:4;29085:2;29074:9;29070:18;29062:26;;29134:9;29128:4;29124:20;29120:1;29109:9;29105:17;29098:47;29162:131;29288:4;29162:131;:::i;:::-;29154:139;;28881:419;;;:::o;29306:297::-;29446:34;29442:1;29434:6;29430:14;29423:58;29515:34;29510:2;29502:6;29498:15;29491:59;29584:11;29579:2;29571:6;29567:15;29560:36;29306:297;:::o;29609:366::-;29751:3;29772:67;29836:2;29831:3;29772:67;:::i;:::-;29765:74;;29848:93;29937:3;29848:93;:::i;:::-;29966:2;29961:3;29957:12;29950:19;;29609:366;;;:::o;29981:419::-;30147:4;30185:2;30174:9;30170:18;30162:26;;30234:9;30228:4;30224:20;30220:1;30209:9;30205:17;30198:47;30262:131;30388:4;30262:131;:::i;:::-;30254:139;;29981:419;;;:::o;30406:234::-;30546:34;30542:1;30534:6;30530:14;30523:58;30615:17;30610:2;30602:6;30598:15;30591:42;30406:234;:::o;30646:366::-;30788:3;30809:67;30873:2;30868:3;30809:67;:::i;:::-;30802:74;;30885:93;30974:3;30885:93;:::i;:::-;31003:2;30998:3;30994:12;30987:19;;30646:366;;;:::o;31018:419::-;31184:4;31222:2;31211:9;31207:18;31199:26;;31271:9;31265:4;31261:20;31257:1;31246:9;31242:17;31235:47;31299:131;31425:4;31299:131;:::i;:::-;31291:139;;31018:419;;;:::o;31443:169::-;31583:21;31579:1;31571:6;31567:14;31560:45;31443:169;:::o;31618:366::-;31760:3;31781:67;31845:2;31840:3;31781:67;:::i;:::-;31774:74;;31857:93;31946:3;31857:93;:::i;:::-;31975:2;31970:3;31966:12;31959:19;;31618:366;;;:::o;31990:419::-;32156:4;32194:2;32183:9;32179:18;32171:26;;32243:9;32237:4;32233:20;32229:1;32218:9;32214:17;32207:47;32271:131;32397:4;32271:131;:::i;:::-;32263:139;;31990:419;;;:::o;32415:235::-;32555:34;32551:1;32543:6;32539:14;32532:58;32624:18;32619:2;32611:6;32607:15;32600:43;32415:235;:::o;32656:366::-;32798:3;32819:67;32883:2;32878:3;32819:67;:::i;:::-;32812:74;;32895:93;32984:3;32895:93;:::i;:::-;33013:2;33008:3;33004:12;32997:19;;32656:366;;;:::o;33028:419::-;33194:4;33232:2;33221:9;33217:18;33209:26;;33281:9;33275:4;33271:20;33267:1;33256:9;33252:17;33245:47;33309:131;33435:4;33309:131;:::i;:::-;33301:139;;33028:419;;;:::o;33453:191::-;33493:4;33513:20;33531:1;33513:20;:::i;:::-;33508:25;;33547:20;33565:1;33547:20;:::i;:::-;33542:25;;33586:1;33583;33580:8;33577:34;;;33591:18;;:::i;:::-;33577:34;33636:1;33633;33629:9;33621:17;;33453:191;;;;:::o;33650:225::-;33790:34;33786:1;33778:6;33774:14;33767:58;33859:8;33854:2;33846:6;33842:15;33835:33;33650:225;:::o;33881:366::-;34023:3;34044:67;34108:2;34103:3;34044:67;:::i;:::-;34037:74;;34120:93;34209:3;34120:93;:::i;:::-;34238:2;34233:3;34229:12;34222:19;;33881:366;;;:::o;34253:419::-;34419:4;34457:2;34446:9;34442:18;34434:26;;34506:9;34500:4;34496:20;34492:1;34481:9;34477:17;34470:47;34534:131;34660:4;34534:131;:::i;:::-;34526:139;;34253:419;;;:::o;34678:147::-;34779:11;34816:3;34801:18;;34678:147;;;;:::o;34831:114::-;;:::o;34951:398::-;35110:3;35131:83;35212:1;35207:3;35131:83;:::i;:::-;35124:90;;35223:93;35312:3;35223:93;:::i;:::-;35341:1;35336:3;35332:11;35325:18;;34951:398;;;:::o;35355:379::-;35539:3;35561:147;35704:3;35561:147;:::i;:::-;35554:154;;35725:3;35718:10;;35355:379;;;:::o;35740:442::-;35889:4;35927:2;35916:9;35912:18;35904:26;;35940:71;36008:1;35997:9;35993:17;35984:6;35940:71;:::i;:::-;36021:72;36089:2;36078:9;36074:18;36065:6;36021:72;:::i;:::-;36103;36171:2;36160:9;36156:18;36147:6;36103:72;:::i;:::-;35740:442;;;;;;:::o;36188:180::-;36236:77;36233:1;36226:88;36333:4;36330:1;36323:15;36357:4;36354:1;36347:15;36374:143;36431:5;36462:6;36456:13;36447:22;;36478:33;36505:5;36478:33;:::i;:::-;36374:143;;;;:::o;36523:351::-;36593:6;36642:2;36630:9;36621:7;36617:23;36613:32;36610:119;;;36648:79;;:::i;:::-;36610:119;36768:1;36793:64;36849:7;36840:6;36829:9;36825:22;36793:64;:::i;:::-;36783:74;;36739:128;36523:351;;;;:::o;36880:85::-;36925:7;36954:5;36943:16;;36880:85;;;:::o;36971:158::-;37029:9;37062:61;37080:42;37089:32;37115:5;37089:32;:::i;:::-;37080:42;:::i;:::-;37062:61;:::i;:::-;37049:74;;36971:158;;;:::o;37135:147::-;37230:45;37269:5;37230:45;:::i;:::-;37225:3;37218:58;37135:147;;:::o;37288:114::-;37355:6;37389:5;37383:12;37373:22;;37288:114;;;:::o;37408:184::-;37507:11;37541:6;37536:3;37529:19;37581:4;37576:3;37572:14;37557:29;;37408:184;;;;:::o;37598:132::-;37665:4;37688:3;37680:11;;37718:4;37713:3;37709:14;37701:22;;37598:132;;;:::o;37736:108::-;37813:24;37831:5;37813:24;:::i;:::-;37808:3;37801:37;37736:108;;:::o;37850:179::-;37919:10;37940:46;37982:3;37974:6;37940:46;:::i;:::-;38018:4;38013:3;38009:14;37995:28;;37850:179;;;;:::o;38035:113::-;38105:4;38137;38132:3;38128:14;38120:22;;38035:113;;;:::o;38184:732::-;38303:3;38332:54;38380:5;38332:54;:::i;:::-;38402:86;38481:6;38476:3;38402:86;:::i;:::-;38395:93;;38512:56;38562:5;38512:56;:::i;:::-;38591:7;38622:1;38607:284;38632:6;38629:1;38626:13;38607:284;;;38708:6;38702:13;38735:63;38794:3;38779:13;38735:63;:::i;:::-;38728:70;;38821:60;38874:6;38821:60;:::i;:::-;38811:70;;38667:224;38654:1;38651;38647:9;38642:14;;38607:284;;;38611:14;38907:3;38900:10;;38308:608;;;38184:732;;;;:::o;38922:831::-;39185:4;39223:3;39212:9;39208:19;39200:27;;39237:71;39305:1;39294:9;39290:17;39281:6;39237:71;:::i;:::-;39318:80;39394:2;39383:9;39379:18;39370:6;39318:80;:::i;:::-;39445:9;39439:4;39435:20;39430:2;39419:9;39415:18;39408:48;39473:108;39576:4;39567:6;39473:108;:::i;:::-;39465:116;;39591:72;39659:2;39648:9;39644:18;39635:6;39591:72;:::i;:::-;39673:73;39741:3;39730:9;39726:19;39717:6;39673:73;:::i;:::-;38922:831;;;;;;;;:::o;39759:807::-;40008:4;40046:3;40035:9;40031:19;40023:27;;40060:71;40128:1;40117:9;40113:17;40104:6;40060:71;:::i;:::-;40141:72;40209:2;40198:9;40194:18;40185:6;40141:72;:::i;:::-;40223:80;40299:2;40288:9;40284:18;40275:6;40223:80;:::i;:::-;40313;40389:2;40378:9;40374:18;40365:6;40313:80;:::i;:::-;40403:73;40471:3;40460:9;40456:19;40447:6;40403:73;:::i;:::-;40486;40554:3;40543:9;40539:19;40530:6;40486:73;:::i;:::-;39759:807;;;;;;;;;:::o;40572:143::-;40629:5;40660:6;40654:13;40645:22;;40676:33;40703:5;40676:33;:::i;:::-;40572:143;;;;:::o;40721:663::-;40809:6;40817;40825;40874:2;40862:9;40853:7;40849:23;40845:32;40842:119;;;40880:79;;:::i;:::-;40842:119;41000:1;41025:64;41081:7;41072:6;41061:9;41057:22;41025:64;:::i;:::-;41015:74;;40971:128;41138:2;41164:64;41220:7;41211:6;41200:9;41196:22;41164:64;:::i;:::-;41154:74;;41109:129;41277:2;41303:64;41359:7;41350:6;41339:9;41335:22;41303:64;:::i;:::-;41293:74;;41248:129;40721:663;;;;;:::o

Swarm Source

ipfs://00e3eaceed094025acce64d2227536c7c7b61668dcd5a7360d147076dafd8b0e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.