ETH Price: $3,456.49 (-1.87%)
Gas: 3 Gwei

Token

OpenMind (OMND)
 

Overview

Max Total Supply

1,000,000 OMND

Holders

579

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,699.276881257453058928 OMND

Value
$0.00
0xc858a5ae8bd20c7ae73823f0fb760bcf7cf06d58
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:
OMND

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-21
*/

/**

OpenMind — Vanguard of AI with ChatGPT-4o on Ethereum!
Discover the future of AI with OpenMind, the pioneering platform integrating OpenAI's latest GPT-4o model with the power of Ethereum.

APP: https://t.me/openmind_eth_bot
Website: https://openmind.software
Twitter: https://x.com/OpenMindERC20
TG:  https://t.me/OpenMindERC20
                                                                                                   
**/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.23;

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 OMND is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

    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 = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    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 marketerWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    constructor() ERC20("OpenMind", unicode"OMND") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 5;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 5;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTx = 10_000 * 1e18;
        maxWallets = 10_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 1) / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketerWallet = address(0xc17e92f038d077a48ad6f3E2bBF438E9231a7DdE);
        DevsWallet = address(0xc17e92f038d077a48ad6f3E2bBF438E9231a7DdE);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

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

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

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    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 updatemarketerWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevsWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, DevsWallet);
        DevsWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    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(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

        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] && !_isExcludedmaxTx[to]) {
                    require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTx[from]) {
                    require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
                }
                else if (!_isExcludedmaxTx[to]) {
                    require(amount + balanceOf(to) <= maxWallets, "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);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    } 

    function swapTokensForEth(uint256 tokenAmount) private {
        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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarkets + tokensForDev;
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarkets = 0;
        tokensForDev = 0;

        (success, ) = address(DevsWallet).call{value: ethForDev}("");
        (success, ) = address(marketerWallet).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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","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":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":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","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":[],"name":"buyDevFee","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":"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":"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":"excludeFrommaxTx","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"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":"sellDevFee","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":"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarkets","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":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff02191690831515021790555034801562000077575f80fd5b506040518060400160405280600881526020017f4f70656e4d696e640000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f4d4e44000000000000000000000000000000000000000000000000000000008152508160039081620000f5919062000d20565b50806004908162000107919062000d20565b5050506200012a6200011e6200059460201b60201c565b6200059b60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001558160016200065e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000e69565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000285919062000e69565b6040518363ffffffff1660e01b8152600401620002a492919062000eaa565b6020604051808303815f875af1158015620002c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000e69565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200035a60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065e60201b60201c565b6200038e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074560201b60201c565b5f600590505f80600590505f8069d3c21bcecceda1000000905069021e19e0c9bab240000060098190555069021e19e0c9bab2400000600b81905550612710600182620003dc919062000f02565b620003e8919062000f79565b600a8190555084601081905550836011819055506011546010546200040e919062000fb0565b600f81905550826013819055508160148190555060145460135462000434919062000fb0565b60128190555073c17e92f038d077a48ad6f3e2bbf438e9231a7dde60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c17e92f038d077a48ad6f3e2bbf438e9231a7dde60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000504620004f6620007e360201b60201c565b60016200080b60201b60201c565b620005173060016200080b60201b60201c565b6200052c61dead60016200080b60201b60201c565b6200054e62000540620007e360201b60201c565b60016200065e60201b60201c565b620005613060016200065e60201b60201c565b6200057661dead60016200065e60201b60201c565b6200058833826200094260201b60201c565b50505050505062001139565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066e6200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000694620007e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e49062001048565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081b6200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000841620007e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200089a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008919062001048565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000936919062001084565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009aa90620010ed565b60405180910390fd5b620009c65f838362000ab260201b60201c565b8060025f828254620009d9919062000fb0565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a2d919062000fb0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a9391906200111e565b60405180910390a362000aae5f838362000ab760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3857607f821691505b60208210810362000b4e5762000b4d62000af3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b75565b62000bbe868362000b75565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c0862000c0262000bfc8462000bd6565b62000bdf565b62000bd6565b9050919050565b5f819050919050565b62000c238362000be8565b62000c3b62000c328262000c0f565b84845462000b81565b825550505050565b5f90565b62000c5162000c43565b62000c5e81848462000c18565b505050565b5b8181101562000c855762000c795f8262000c47565b60018101905062000c64565b5050565b601f82111562000cd45762000c9e8162000b54565b62000ca98462000b66565b8101602085101562000cb9578190505b62000cd162000cc88562000b66565b83018262000c63565b50505b505050565b5f82821c905092915050565b5f62000cf65f198460080262000cd9565b1980831691505092915050565b5f62000d10838362000ce5565b9150826002028217905092915050565b62000d2b8262000abc565b67ffffffffffffffff81111562000d475762000d4662000ac6565b5b62000d53825462000b20565b62000d6082828562000c89565b5f60209050601f83116001811462000d96575f841562000d81578287015190505b62000d8d858262000d03565b86555062000dfc565b601f19841662000da68662000b54565b5f5b8281101562000dcf5784890151825560018201915060208501945060208101905062000da8565b8683101562000def578489015162000deb601f89168262000ce5565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e338262000e08565b9050919050565b62000e458162000e27565b811462000e50575f80fd5b50565b5f8151905062000e638162000e3a565b92915050565b5f6020828403121562000e815762000e8062000e04565b5b5f62000e908482850162000e53565b91505092915050565b62000ea48162000e27565b82525050565b5f60408201905062000ebf5f83018562000e99565b62000ece602083018462000e99565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f0e8262000bd6565b915062000f1b8362000bd6565b925082820262000f2b8162000bd6565b9150828204841483151762000f455762000f4462000ed5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f858262000bd6565b915062000f928362000bd6565b92508262000fa55762000fa462000f4c565b5b828204905092915050565b5f62000fbc8262000bd6565b915062000fc98362000bd6565b925082820190508082111562000fe45762000fe362000ed5565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200103060208362000fea565b91506200103d8262000ffa565b602082019050919050565b5f6020820190508181035f830152620010618162001022565b9050919050565b5f8115159050919050565b6200107e8162001068565b82525050565b5f602082019050620010995f83018462001073565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010d5601f8362000fea565b9150620010e2826200109f565b602082019050919050565b5f6020820190508181035f8301526200110681620010c7565b9050919050565b620011188162000bd6565b82525050565b5f602082019050620011335f8301846200110d565b92915050565b608051614f166200116e5f395f8181610df7015281816129fa0152818161349801528181613577015261359e0152614f165ff3fe60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613bba565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c34565b610dd8565b6040516103ad9190613c8c565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613d00565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d28565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d41565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d41565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d6c565b611040565b60405161048d9190613c8c565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613dcb565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d28565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613dcb565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613dff565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c34565b61116b565b6040516105719190613c8c565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613dcb565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c8c565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613e18565b611249565b6040516106019190613c8c565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d28565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e6d565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d28565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c8c565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613e18565b611478565b60405161070b9190613d28565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d28565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c8c565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d28565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613dcb565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d28565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613eab565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613bba565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e6d565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d28565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d28565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d28565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c34565b611923565b60405161093d9190613c8c565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613dcb565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c34565b611a2e565b6040516109a39190613c8c565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613e18565b611a4b565b6040516109df9190613c8c565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d41565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613e18565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c8c565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e6d565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ed6565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c8c565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d41565b611f00565b604051610b0f9190613c8c565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d28565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f3a565b61205a565b604051610b759190613d28565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d28565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613e18565b6120e2565b604051610bdb9190613c8c565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c8c565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613e18565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613e18565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fc2565b60405180910390fd5b8160138190555080601481905550601454601354610cf8919061400d565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b9061408a565b60405180910390fd5b5050565b606060038054610d57906140d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140d5565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fc2565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe9190614105565b610ec89190614173565b610ed29190614173565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141ed565b60405180910390fd5b670de0b6b3a764000081610f289190614105565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fc2565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd9190614105565b610fd79190614173565b610fe19190614173565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a9061427b565b60405180910390fd5b670de0b6b3a7640000816110379190614105565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614309565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611203919061400d565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fc2565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fc2565b60405180910390fd5b816010819055508060118190555060115460105461140f919061400d565b600f81905550604b600f54111561145b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114529061408a565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fc2565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fc2565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fc2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fc2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140d5565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140d5565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fc2565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614397565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190614425565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061448d565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fc2565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fc2565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c8c565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fc2565b60405180910390fd5b8360108190555082601181905550601154601054611e32919061400d565b600f819055508160138190555080601481905550601454601354611e56919061400d565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061408a565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf9061408a565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fc2565b60405180910390fd5b620186a06001611f8b610e19565b611f959190614105565b611f9f9190614173565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061451b565b60405180910390fd5b6103e86005611fee610e19565b611ff89190614105565b6120029190614173565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906145a9565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fc2565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fc2565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fc2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614637565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614753565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d28565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126699061486f565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148d7565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061493f565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c906149a7565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a5b565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614ae9565b60405180910390fd5b600b54612c5d83611478565b82612c68919061400d565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b51565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bdf565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff919061400d565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b51565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e9190614105565b6131289190614173565b60165f828254613138919061400d565b92505081905550601254601354826131509190614105565b61315a9190614173565b60155f82825461316a919061400d565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d9190614105565b6132179190614173565b60165f828254613227919061400d565b92505081905550600f546010548261323f9190614105565b6132499190614173565b60155f828254613259919061400d565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614bfd565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c30565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c9e565b8160018151811061353757613536614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614db9565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137019061486f565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e81565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613826919061400d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d28565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c0919061400d565b90505f8083036138d257505050613a70565b6014600a546138e19190614105565b8311156138fa576014600a546138f79190614105565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614ecc565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614ecc565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f9190614105565b905092915050565b5f8183613a949190614173565b905092915050565b505050565b505050565b5f8183613ab39190614bfd565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b67578082015181840152602081019050613b4c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b8c82613b30565b613b968185613b3a565b9350613ba6818560208601613b4a565b613baf81613b72565b840191505092915050565b5f6020820190508181035f830152613bd28184613b82565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c0382613bda565b9050919050565b613c1381613bf9565b8114613c1d575f80fd5b50565b5f81359050613c2e81613c0a565b92915050565b5f8060408385031215613c4a57613c49613abb565b5b5f613c5785828601613c20565b9250506020613c6885828601613ade565b9150509250929050565b5f8115159050919050565b613c8681613c72565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b5f819050919050565b5f613cc8613cc3613cbe84613bda565b613ca5565b613bda565b9050919050565b5f613cd982613cae565b9050919050565b5f613cea82613ccf565b9050919050565b613cfa81613ce0565b82525050565b5f602082019050613d135f830184613cf1565b92915050565b613d2281613abf565b82525050565b5f602082019050613d3b5f830184613d19565b92915050565b5f60208284031215613d5657613d55613abb565b5b5f613d6384828501613ade565b91505092915050565b5f805f60608486031215613d8357613d82613abb565b5b5f613d9086828701613c20565b9350506020613da186828701613c20565b9250506040613db286828701613ade565b9150509250925092565b613dc581613bf9565b82525050565b5f602082019050613dde5f830184613dbc565b92915050565b5f60ff82169050919050565b613df981613de4565b82525050565b5f602082019050613e125f830184613df0565b92915050565b5f60208284031215613e2d57613e2c613abb565b5b5f613e3a84828501613c20565b91505092915050565b613e4c81613c72565b8114613e56575f80fd5b50565b5f81359050613e6781613e43565b92915050565b5f8060408385031215613e8357613e82613abb565b5b5f613e9085828601613c20565b9250506020613ea185828601613e59565b9150509250929050565b5f60208284031215613ec057613ebf613abb565b5b5f613ecd84828501613e59565b91505092915050565b5f805f8060808587031215613eee57613eed613abb565b5b5f613efb87828801613ade565b9450506020613f0c87828801613ade565b9350506040613f1d87828801613ade565b9250506060613f2e87828801613ade565b91505092959194509250565b5f8060408385031215613f5057613f4f613abb565b5b5f613f5d85828601613c20565b9250506020613f6e85828601613c20565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613fac602083613b3a565b9150613fb782613f78565b602082019050919050565b5f6020820190508181035f830152613fd981613fa0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61401782613abf565b915061402283613abf565b925082820190508082111561403a57614039613fe0565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f614074601d83613b3a565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140ec57607f821691505b6020821081036140ff576140fe6140a8565b5b50919050565b5f61410f82613abf565b915061411a83613abf565b925082820261412881613abf565b9150828204841483151761413f5761413e613fe0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61417d82613abf565b915061418883613abf565b92508261419857614197614146565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141d7602083613b3a565b91506141e2826141a3565b602082019050919050565b5f6020820190508181035f830152614204816141cb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f614265602583613b3a565b91506142708261420b565b604082019050919050565b5f6020820190508181035f83015261429281614259565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142f3602883613b3a565b91506142fe82614299565b604082019050919050565b5f6020820190508181035f830152614320816142e7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614381603983613b3a565b915061438c82614327565b604082019050919050565b5f6020820190508181035f8301526143ae81614375565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61440f602583613b3a565b915061441a826143b5565b604082019050919050565b5f6020820190508181035f83015261443c81614403565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f614477600c83613b3a565b915061448282614443565b602082019050919050565b5f6020820190508181035f8301526144a48161446b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614505603583613b3a565b9150614510826144ab565b604082019050919050565b5f6020820190508181035f830152614532816144f9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614593603483613b3a565b915061459e82614539565b604082019050919050565b5f6020820190508181035f8301526145c081614587565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614621602683613b3a565b915061462c826145c7565b604082019050919050565b5f6020820190508181035f83015261464e81614615565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6146af602483613b3a565b91506146ba82614655565b604082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61473d602283613b3a565b9150614748826146e3565b604082019050919050565b5f6020820190508181035f83015261476a81614731565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147cb602583613b3a565b91506147d682614771565b604082019050919050565b5f6020820190508181035f8301526147f8816147bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614859602383613b3a565b9150614864826147ff565b604082019050919050565b5f6020820190508181035f8301526148868161484d565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148c1601183613b3a565b91506148cc8261488d565b602082019050919050565b5f6020820190508181035f8301526148ee816148b5565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614929600f83613b3a565b9150614934826148f5565b602082019050919050565b5f6020820190508181035f8301526149568161491d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614991601683613b3a565b915061499c8261495d565b602082019050919050565b5f6020820190508181035f8301526149be81614985565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a45604983613b3a565b9150614a50826149c5565b606082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ad3602683613b3a565b9150614ade82614a79565b604082019050919050565b5f6020820190508181035f830152614b0081614ac7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b3b601383613b3a565b9150614b4682614b07565b602082019050919050565b5f6020820190508181035f830152614b6881614b2f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614bc9602783613b3a565b9150614bd482614b6f565b604082019050919050565b5f6020820190508181035f830152614bf681614bbd565b9050919050565b5f614c0782613abf565b9150614c1283613abf565b9250828203905081811115614c2a57614c29613fe0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c9881613c0a565b92915050565b5f60208284031215614cb357614cb2613abb565b5b5f614cc084828501614c8a565b91505092915050565b5f819050919050565b5f614cec614ce7614ce284614cc9565b613ca5565b613abf565b9050919050565b614cfc81614cd2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d3481613bf9565b82525050565b5f614d458383614d2b565b60208301905092915050565b5f602082019050919050565b5f614d6782614d02565b614d718185614d0c565b9350614d7c83614d1c565b805f5b83811015614dac578151614d938882614d3a565b9750614d9e83614d51565b925050600181019050614d7f565b5085935050505092915050565b5f60a082019050614dcc5f830188613d19565b614dd96020830187614cf3565b8181036040830152614deb8186614d5d565b9050614dfa6060830185613dbc565b614e076080830184613d19565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e6b602683613b3a565b9150614e7682614e11565b604082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b5f81905092915050565b50565b5f614eb75f83614e9f565b9150614ec282614ea9565b5f82019050919050565b5f614ed682614eac565b915081905091905056fea2646970667358221220e92f95da3f75a5ba6ce274e7019fe2f460e7cd70e9fa8a0b7f6f8f43b3227abe64736f6c63430008170033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613bba565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c34565b610dd8565b6040516103ad9190613c8c565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613d00565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d28565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d41565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d41565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d6c565b611040565b60405161048d9190613c8c565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613dcb565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d28565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613dcb565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613dff565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c34565b61116b565b6040516105719190613c8c565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613dcb565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c8c565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613e18565b611249565b6040516106019190613c8c565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d28565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e6d565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d28565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c8c565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613e18565b611478565b60405161070b9190613d28565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d28565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c8c565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d28565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613dcb565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d28565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613eab565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613bba565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e6d565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d28565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d28565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d28565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c34565b611923565b60405161093d9190613c8c565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613dcb565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c34565b611a2e565b6040516109a39190613c8c565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613e18565b611a4b565b6040516109df9190613c8c565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d41565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613e18565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c8c565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e6d565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ed6565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c8c565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d41565b611f00565b604051610b0f9190613c8c565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d28565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f3a565b61205a565b604051610b759190613d28565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d28565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613e18565b6120e2565b604051610bdb9190613c8c565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c8c565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613e18565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613e18565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fc2565b60405180910390fd5b8160138190555080601481905550601454601354610cf8919061400d565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b9061408a565b60405180910390fd5b5050565b606060038054610d57906140d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140d5565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fc2565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe9190614105565b610ec89190614173565b610ed29190614173565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141ed565b60405180910390fd5b670de0b6b3a764000081610f289190614105565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fc2565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd9190614105565b610fd79190614173565b610fe19190614173565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a9061427b565b60405180910390fd5b670de0b6b3a7640000816110379190614105565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614309565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611203919061400d565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fc2565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fc2565b60405180910390fd5b816010819055508060118190555060115460105461140f919061400d565b600f81905550604b600f54111561145b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114529061408a565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fc2565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fc2565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fc2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fc2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140d5565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140d5565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fc2565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614397565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190614425565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061448d565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fc2565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fc2565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c8c565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fc2565b60405180910390fd5b8360108190555082601181905550601154601054611e32919061400d565b600f819055508160138190555080601481905550601454601354611e56919061400d565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061408a565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf9061408a565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fc2565b60405180910390fd5b620186a06001611f8b610e19565b611f959190614105565b611f9f9190614173565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061451b565b60405180910390fd5b6103e86005611fee610e19565b611ff89190614105565b6120029190614173565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906145a9565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fc2565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fc2565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fc2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614637565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614753565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d28565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126699061486f565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148d7565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061493f565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c906149a7565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a5b565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614ae9565b60405180910390fd5b600b54612c5d83611478565b82612c68919061400d565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b51565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bdf565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff919061400d565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b51565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e9190614105565b6131289190614173565b60165f828254613138919061400d565b92505081905550601254601354826131509190614105565b61315a9190614173565b60155f82825461316a919061400d565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d9190614105565b6132179190614173565b60165f828254613227919061400d565b92505081905550600f546010548261323f9190614105565b6132499190614173565b60155f828254613259919061400d565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614bfd565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c30565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c9e565b8160018151811061353757613536614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614db9565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137019061486f565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e81565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613826919061400d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d28565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c0919061400d565b90505f8083036138d257505050613a70565b6014600a546138e19190614105565b8311156138fa576014600a546138f79190614105565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614ecc565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614ecc565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f9190614105565b905092915050565b5f8183613a949190614173565b905092915050565b505050565b505050565b5f8183613ab39190614bfd565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b67578082015181840152602081019050613b4c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b8c82613b30565b613b968185613b3a565b9350613ba6818560208601613b4a565b613baf81613b72565b840191505092915050565b5f6020820190508181035f830152613bd28184613b82565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c0382613bda565b9050919050565b613c1381613bf9565b8114613c1d575f80fd5b50565b5f81359050613c2e81613c0a565b92915050565b5f8060408385031215613c4a57613c49613abb565b5b5f613c5785828601613c20565b9250506020613c6885828601613ade565b9150509250929050565b5f8115159050919050565b613c8681613c72565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b5f819050919050565b5f613cc8613cc3613cbe84613bda565b613ca5565b613bda565b9050919050565b5f613cd982613cae565b9050919050565b5f613cea82613ccf565b9050919050565b613cfa81613ce0565b82525050565b5f602082019050613d135f830184613cf1565b92915050565b613d2281613abf565b82525050565b5f602082019050613d3b5f830184613d19565b92915050565b5f60208284031215613d5657613d55613abb565b5b5f613d6384828501613ade565b91505092915050565b5f805f60608486031215613d8357613d82613abb565b5b5f613d9086828701613c20565b9350506020613da186828701613c20565b9250506040613db286828701613ade565b9150509250925092565b613dc581613bf9565b82525050565b5f602082019050613dde5f830184613dbc565b92915050565b5f60ff82169050919050565b613df981613de4565b82525050565b5f602082019050613e125f830184613df0565b92915050565b5f60208284031215613e2d57613e2c613abb565b5b5f613e3a84828501613c20565b91505092915050565b613e4c81613c72565b8114613e56575f80fd5b50565b5f81359050613e6781613e43565b92915050565b5f8060408385031215613e8357613e82613abb565b5b5f613e9085828601613c20565b9250506020613ea185828601613e59565b9150509250929050565b5f60208284031215613ec057613ebf613abb565b5b5f613ecd84828501613e59565b91505092915050565b5f805f8060808587031215613eee57613eed613abb565b5b5f613efb87828801613ade565b9450506020613f0c87828801613ade565b9350506040613f1d87828801613ade565b9250506060613f2e87828801613ade565b91505092959194509250565b5f8060408385031215613f5057613f4f613abb565b5b5f613f5d85828601613c20565b9250506020613f6e85828601613c20565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613fac602083613b3a565b9150613fb782613f78565b602082019050919050565b5f6020820190508181035f830152613fd981613fa0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61401782613abf565b915061402283613abf565b925082820190508082111561403a57614039613fe0565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f614074601d83613b3a565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140ec57607f821691505b6020821081036140ff576140fe6140a8565b5b50919050565b5f61410f82613abf565b915061411a83613abf565b925082820261412881613abf565b9150828204841483151761413f5761413e613fe0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61417d82613abf565b915061418883613abf565b92508261419857614197614146565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141d7602083613b3a565b91506141e2826141a3565b602082019050919050565b5f6020820190508181035f830152614204816141cb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f614265602583613b3a565b91506142708261420b565b604082019050919050565b5f6020820190508181035f83015261429281614259565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142f3602883613b3a565b91506142fe82614299565b604082019050919050565b5f6020820190508181035f830152614320816142e7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614381603983613b3a565b915061438c82614327565b604082019050919050565b5f6020820190508181035f8301526143ae81614375565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61440f602583613b3a565b915061441a826143b5565b604082019050919050565b5f6020820190508181035f83015261443c81614403565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f614477600c83613b3a565b915061448282614443565b602082019050919050565b5f6020820190508181035f8301526144a48161446b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614505603583613b3a565b9150614510826144ab565b604082019050919050565b5f6020820190508181035f830152614532816144f9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614593603483613b3a565b915061459e82614539565b604082019050919050565b5f6020820190508181035f8301526145c081614587565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614621602683613b3a565b915061462c826145c7565b604082019050919050565b5f6020820190508181035f83015261464e81614615565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6146af602483613b3a565b91506146ba82614655565b604082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61473d602283613b3a565b9150614748826146e3565b604082019050919050565b5f6020820190508181035f83015261476a81614731565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147cb602583613b3a565b91506147d682614771565b604082019050919050565b5f6020820190508181035f8301526147f8816147bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614859602383613b3a565b9150614864826147ff565b604082019050919050565b5f6020820190508181035f8301526148868161484d565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148c1601183613b3a565b91506148cc8261488d565b602082019050919050565b5f6020820190508181035f8301526148ee816148b5565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614929600f83613b3a565b9150614934826148f5565b602082019050919050565b5f6020820190508181035f8301526149568161491d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614991601683613b3a565b915061499c8261495d565b602082019050919050565b5f6020820190508181035f8301526149be81614985565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a45604983613b3a565b9150614a50826149c5565b606082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ad3602683613b3a565b9150614ade82614a79565b604082019050919050565b5f6020820190508181035f830152614b0081614ac7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b3b601383613b3a565b9150614b4682614b07565b602082019050919050565b5f6020820190508181035f830152614b6881614b2f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614bc9602783613b3a565b9150614bd482614b6f565b604082019050919050565b5f6020820190508181035f830152614bf681614bbd565b9050919050565b5f614c0782613abf565b9150614c1283613abf565b9250828203905081811115614c2a57614c29613fe0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c9881613c0a565b92915050565b5f60208284031215614cb357614cb2613abb565b5b5f614cc084828501614c8a565b91505092915050565b5f819050919050565b5f614cec614ce7614ce284614cc9565b613ca5565b613abf565b9050919050565b614cfc81614cd2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d3481613bf9565b82525050565b5f614d458383614d2b565b60208301905092915050565b5f602082019050919050565b5f614d6782614d02565b614d718185614d0c565b9350614d7c83614d1c565b805f5b83811015614dac578151614d938882614d3a565b9750614d9e83614d51565b925050600181019050614d7f565b5085935050505092915050565b5f60a082019050614dcc5f830188613d19565b614dd96020830187614cf3565b8181036040830152614deb8186614d5d565b9050614dfa6060830185613dbc565b614e076080830184613d19565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e6b602683613b3a565b9150614e7682614e11565b604082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b5f81905092915050565b50565b5f614eb75f83614e9f565b9150614ec282614ea9565b5f82019050919050565b5f614ed682614eac565b915081905091905056fea2646970667358221220e92f95da3f75a5ba6ce274e7019fe2f460e7cd70e9fa8a0b7f6f8f43b3227abe64736f6c63430008170033

Deployed Bytecode Sourcemap

15407:13179:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21410:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3104:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4018:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15481:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3425:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19714:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19967:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4195:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15574:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15803:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15702;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3324:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4695:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15539:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15837:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22812:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16343:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20234:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21091:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16236:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15917:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3541:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1226:103;;;;;;;;;;;;;:::i;:::-;;15736:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18937:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16166:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18817:112;;;;;;;;;;;;;:::i;:::-;;1003:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16271:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20385:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3212:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21926:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16203:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16381:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16309:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4918:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15666:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3676:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16585:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26939:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22643:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15877:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21736:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20493:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16083:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19209:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16132:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3859:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15763:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16528:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19066:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22434:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21410:318;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21548:13:::1;21529:16;:32;;;;21585:7;21572:10;:20;;;;21638:10;;21619:16;;:29;;;;:::i;:::-;21603:13;:45;;;;21684:2;21667:13;;:19;;21659:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21410:318:::0;;:::o;3104:100::-;3158:13;3191:5;3184:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3104:100;:::o;4018:169::-;4101:4;4118:39;4127:12;:10;:12::i;:::-;4141:7;4150:6;4118:8;:39::i;:::-;4175:4;4168:11;;4018:169;;;;:::o;15481:51::-;;;:::o;3425:108::-;3486:7;3513:12;;3506:19;;3425:108;:::o;19714:245::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19851:4:::1;19843;19838:1;19822:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19821:26;;;;:::i;:::-;19820:35;;;;:::i;:::-;19810:6;:45;;19788:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;19944:6;19934;:17;;;;:::i;:::-;19926:5;:25;;;;19714:245:::0;:::o;19967:259::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20108:4:::1;20100;20095:1;20079:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20078:26;;;;:::i;:::-;20077:35;;;;:::i;:::-;20067:6;:45;;20045:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;20211:6;20201;:17;;;;:::i;:::-;20188:10;:30;;;;19967:259:::0;:::o;4195:492::-;4335:4;4352:36;4362:6;4370:9;4381:6;4352:9;:36::i;:::-;4401:24;4428:11;:19;4440:6;4428:19;;;;;;;;;;;;;;;:33;4448:12;:10;:12::i;:::-;4428:33;;;;;;;;;;;;;;;;4401:60;;4500:6;4480:16;:26;;4472:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4587:57;4596:6;4604:12;:10;:12::i;:::-;4637:6;4618:16;:25;4587:8;:57::i;:::-;4675:4;4668:11;;;4195:492;;;;;:::o;15574:53::-;15620:6;15574:53;:::o;15803:25::-;;;;:::o;15702:::-;;;;;;;;;;;;;:::o;3324:93::-;3382:5;3407:2;3400:9;;3324:93;:::o;4695:215::-;4783:4;4800:80;4809:12;:10;:12::i;:::-;4823:7;4869:10;4832:11;:25;4844:12;:10;:12::i;:::-;4832:25;;;;;;;;;;;;;;;:34;4858:7;4832:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4800:8;:80::i;:::-;4898:4;4891:11;;4695:215;;;;:::o;15539:28::-;;;;;;;;;;;;;:::o;15837:33::-;;;;;;;;;;;;;:::o;22812:126::-;22878:4;22902:19;:28;22922:7;22902:28;;;;;;;;;;;;;;;;;;;;;;;;;22895:35;;22812:126;;;:::o;16343:31::-;;;;:::o;20234:143::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20365:4:::1;20338:16;:24;20355:6;20338:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20234:143:::0;;:::o;21091:311::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21227:13:::1;21209:15;:31;;;;21263:7;21251:9;:19;;;;21314:9;;21296:15;;:27;;;;:::i;:::-;21281:12;:42;;;;21358:2;21342:12;;:18;;21334:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21091:311:::0;;:::o;16236:28::-;;;;:::o;15917:31::-;;;;;;;;;;;;;:::o;3541:127::-;3615:7;3642:9;:18;3652:7;3642:18;;;;;;;;;;;;;;;;3635:25;;3541:127;;;:::o;1226:103::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1291:30:::1;1318:1;1291:18;:30::i;:::-;1226:103::o:0;15736:20::-;;;;:::o;18937:121::-;18989:4;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19023:5:::1;19006:14;;:22;;;;;;;;;;;;;;;;;;19046:4;19039:11;;18937:121:::0;:::o;16166:30::-;;;;:::o;18817:112::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18888:4:::1;18872:13;;:20;;;;;;;;;;;;;;;;;;18917:4;18903:11;;:18;;;;;;;;;;;;;;;;;;18817:112::o:0;1003:87::-;1049:7;1076:6;;;;;;;;;;;1069:13;;1003:87;:::o;16271:31::-;;;;:::o;20385:100::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20470:7:::1;20456:11;;:21;;;;;;;;;;;;;;;;;;20385:100:::0;:::o;3212:104::-;3268:13;3301:7;3294:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3212:104;:::o;21926:304::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22070:13:::1;;;;;;;;;;;22062:21;;:4;:21;;::::0;22040:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22181:41;22210:4;22216:5;22181:28;:41::i;:::-;21926:304:::0;;:::o;16203:24::-;;;;:::o;16381:27::-;;;;:::o;16309:25::-;;;;:::o;4918:413::-;5011:4;5028:24;5055:11;:25;5067:12;:10;:12::i;:::-;5055:25;;;;;;;;;;;;;;;:34;5081:7;5055:34;;;;;;;;;;;;;;;;5028:61;;5128:15;5108:16;:35;;5100:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5221:67;5230:12;:10;:12::i;:::-;5244:7;5272:15;5253:16;:34;5221:8;:67::i;:::-;5319:4;5312:11;;;4918:413;;;;:::o;15666:29::-;;;;;;;;;;;;;:::o;3676:175::-;3762:4;3779:42;3789:12;:10;:12::i;:::-;3803:9;3814:6;3779:9;:42::i;:::-;3839:4;3832:11;;3676:175;;;;:::o;16585:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26939:222::-;27019:14;;;;;;;;;;;27003:30;;:12;:10;:12::i;:::-;:30;;;26995:39;;;;;;27063:24;27081:4;27063:9;:24::i;:::-;27053:6;:34;;:48;;;;;27100:1;27091:6;:10;27053:48;27045:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27129:24;27146:6;27129:16;:24::i;:::-;26939:222;:::o;22643:161::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22752:10:::1;;;;;;;;;;;22723:40;;22741:9;22723:40;;;;;;;;;;;;22787:9;22774:10;;:22;;;;;;;;;;;;;;;;;;22643:161:::0;:::o;15877:33::-;;;;;;;;;;;;;:::o;21736:182::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21852:8:::1;21821:19;:28;21841:7;21821:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21892:7;21876:34;;;21901:8;21876:34;;;;;;:::i;:::-;;;;;;;;21736:182:::0;;:::o;20493:590::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20692:16:::1;20674:15;:34;;;;20731:10;20719:9;:22;;;;20785:9;;20767:15;;:27;;;;:::i;:::-;20752:12;:42;;;;20824:17;20805:16;:36;;;;20865:11;20852:10;:24;;;;20922:10;;20903:16;;:29;;;;:::i;:::-;20887:13;:45;;;;20967:2;20951:12;;:18;;20943:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21039:2;21022:13;;:19;;21014:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20493:590:::0;;;;:::o;16083:40::-;;;;;;;;;;;;;:::o;19209:497::-;19317:4;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19396:6:::1;19391:1;19375:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19374:28;;;;:::i;:::-;19361:9;:41;;19339:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19551:4;19546:1;19530:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19529:26;;;;:::i;:::-;19516:9;:39;;19494:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19667:9;19646:18;:30;;;;19694:4;19687:11;;19209:497:::0;;;:::o;16132:27::-;;;;:::o;3859:151::-;3948:7;3975:11;:18;3987:5;3975:18;;;;;;;;;;;;;;;:27;3994:7;3975:27;;;;;;;;;;;;;;;;3968:34;;3859:151;;;;:::o;15763:33::-;;;;:::o;16528:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;19066:135::-;19126:4;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19166:5:::1;19143:20;;:28;;;;;;;;;;;;;;;;;;19189:4;19182:11;;19066:135:::0;:::o;22434:201::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22567:14:::1;;;;;;;;;;;22526:56;;22548:17;22526:56;;;;;;;;;;;;22610:17;22593:14;;:34;;;;;;;;;;;;;;;;;;22434:201:::0;:::o;1337:::-;1149:12;:10;:12::i;:::-;1138:23;;:7;:5;:7::i;:::-;:23;;;1130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1446:1:::1;1426:22;;:8;:22;;::::0;1418:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1502:28;1521:8;1502:18;:28::i;:::-;1337:201:::0;:::o;549:98::-;602:7;629:10;622:17;;549:98;:::o;7086:380::-;7239:1;7222:19;;:5;:19;;;7214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7320:1;7301:21;;:7;:21;;;7293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7404:6;7374:11;:18;7386:5;7374:18;;;;;;;;;;;;;;;:27;7393:7;7374:27;;;;;;;;;;;;;;;:36;;;;7442:7;7426:32;;7435:5;7426:32;;;7451:6;7426:32;;;;;;:::i;:::-;;;;;;;;7086:380;;;:::o;22996:3820::-;23144:1;23128:18;;:4;:18;;;23120:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23221:1;23207:16;;:2;:16;;;23199:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23283:12;:18;23296:4;23283:18;;;;;;;;;;;;;;;;;;;;;;;;;23282:19;23274:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23343:12;:16;23356:2;23343:16;;;;;;;;;;;;;;;;;;;;;;;;;23342:17;23334:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23406:1;23396:6;:11;23392:93;;23424:28;23440:4;23446:2;23450:1;23424:15;:28::i;:::-;23467:7;;23392:93;23501:14;;;;;;;;;;;23497:1666;;;23544:7;:5;:7::i;:::-;23536:15;;:4;:15;;;;:49;;;;;23578:7;:5;:7::i;:::-;23572:13;;:2;:13;;;;23536:49;:86;;;;;23620:1;23606:16;;:2;:16;;;;23536:86;:128;;;;;23657:6;23643:21;;:2;:21;;;;23536:128;:158;;;;;23686:8;;;;;;;;;;;23685:9;23536:158;23532:1620;;;23720:13;;;;;;;;;;;23715:150;;23766:19;:25;23786:4;23766:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23795:19;:23;23815:2;23795:23;;;;;;;;;;;;;;;;;;;;;;;;;23766:52;23758:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23715:150;24021:20;;;;;;;;;;;24017:425;;;24076:7;:5;:7::i;:::-;24070:13;;:2;:13;;;;:47;;;;;24101:15;24087:30;;:2;:30;;;;24070:47;:79;;;;;24135:13;;;;;;;;;;;24121:28;;:2;:28;;;;24070:79;24066:357;;;24228:12;24186:28;:39;24215:9;24186:39;;;;;;;;;;;;;;;;:54;24178:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24387:12;24345:28;:39;24374:9;24345:39;;;;;;;;;;;;;;;:54;;;;24066:357;24017:425;24494:25;:31;24520:4;24494:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24530:16;:20;24547:2;24530:20;;;;;;;;;;;;;;;;;;;;;;;;;24529:21;24494:56;24490:647;;;24593:5;;24583:6;:15;;24575:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24698:10;;24681:13;24691:2;24681:9;:13::i;:::-;24672:6;:22;;;;:::i;:::-;:36;;24664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24490:647;;;24808:25;:29;24834:2;24808:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24842:16;:22;24859:4;24842:22;;;;;;;;;;;;;;;;;;;;;;;;;24841:23;24808:56;24804:333;;;24907:5;;24897:6;:15;;24889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24804:333;;;25004:16;:20;25021:2;25004:20;;;;;;;;;;;;;;;;;;;;;;;;;24999:138;;25083:10;;25066:13;25076:2;25066:9;:13::i;:::-;25057:6;:22;;;;:::i;:::-;:36;;25049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24999:138;24804:333;24490:647;23532:1620;23497:1666;25175:28;25206:24;25224:4;25206:9;:24::i;:::-;25175:55;;25241:12;25280:18;;25256:20;:42;;25241:57;;25315:7;:35;;;;;25339:11;;;;;;;;;;;25315:35;:61;;;;;25368:8;;;;;;;;;;;25367:9;25315:61;:110;;;;;25394:25;:31;25420:4;25394:31;;;;;;;;;;;;;;;;;;;;;;;;;25393:32;25315:110;:153;;;;;25443:19;:25;25463:4;25443:25;;;;;;;;;;;;;;;;;;;;;;;;;25442:26;25315:153;:194;;;;;25486:19;:23;25506:2;25486:23;;;;;;;;;;;;;;;;;;;;;;;;;25485:24;25315:194;25311:302;;;25537:4;25526:8;;:15;;;;;;;;;;;;;;;;;;25558:10;:8;:10::i;:::-;25596:5;25585:8;;:16;;;;;;;;;;;;;;;;;;25311:302;25625:12;25641:8;;;;;;;;;;;25640:9;25625:24;;25751:19;:25;25771:4;25751:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25780:19;:23;25800:2;25780:23;;;;;;;;;;;;;;;;;;;;;;;;;25751:52;25747:100;;;25830:5;25820:15;;25747:100;25859:12;25964:7;25960:803;;;26016:25;:29;26042:2;26016:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26065:1;26049:13;;:17;26016:50;26012:602;;;26094:34;26124:3;26094:25;26105:13;;26094:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26087:41;;26185:13;;26171:10;;26164:4;:17;;;;:::i;:::-;26163:35;;;;:::i;:::-;26147:12;;:51;;;;;;;:::i;:::-;;;;;;;;26265:13;;26245:16;;26238:4;:23;;;;:::i;:::-;26237:41;;;;:::i;:::-;26217:16;;:61;;;;;;;:::i;:::-;;;;;;;;26012:602;;;26340:25;:31;26366:4;26340:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26390:1;26375:12;;:16;26340:51;26336:278;;;26419:33;26448:3;26419:24;26430:12;;26419:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26412:40;;26508:12;;26495:9;;26488:4;:16;;;;:::i;:::-;26487:33;;;;:::i;:::-;26471:12;;:49;;;;;;;:::i;:::-;;;;;;;;26586:12;;26567:15;;26560:4;:22;;;;:::i;:::-;26559:39;;;;:::i;:::-;26539:16;;:59;;;;;;;:::i;:::-;;;;;;;;26336:278;26012:602;26641:1;26634:4;:8;26630:91;;;26663:42;26679:4;26693;26700;26663:15;:42::i;:::-;26630:91;26747:4;26737:14;;;;;:::i;:::-;;;25960:803;26775:33;26791:4;26797:2;26801:6;26775:15;:33::i;:::-;23109:3707;;;;22996:3820;;;;:::o;1546:191::-;1620:16;1639:6;;;;;;;;;;;1620:25;;1665:8;1656:6;;:17;;;;;;;;;;;;;;;;;;1720:8;1689:40;;1710:8;1689:40;;;;;;;;;;;;1609:128;1546:191;:::o;22238:188::-;22355:5;22321:25;:31;22347:4;22321:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22412:5;22378:40;;22406:4;22378:40;;;;;;;;;;;;22238:188;;:::o;27170:529::-;27236:21;27274:1;27260:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27236:40;;27305:4;27287;27292:1;27287:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27331:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27321:4;27326:1;27321:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27366:62;27383:4;27398:15;27416:11;27366:8;:62::i;:::-;27467:15;:66;;;27548:11;27574:1;27618:4;27645;27665:15;27467:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27225:474;27170:529;:::o;5339:733::-;5497:1;5479:20;;:6;:20;;;5471:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5581:1;5560:23;;:9;:23;;;5552:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5636:47;5657:6;5665:9;5676:6;5636:20;:47::i;:::-;5696:21;5720:9;:17;5730:6;5720:17;;;;;;;;;;;;;;;;5696:41;;5773:6;5756:13;:23;;5748:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5894:6;5878:13;:22;5858:9;:17;5868:6;5858:17;;;;;;;;;;;;;;;:42;;;;5946:6;5922:9;:20;5932:9;5922:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5987:9;5970:35;;5979:6;5970:35;;;5998:6;5970:35;;;;;;:::i;:::-;;;;;;;;6018:46;6038:6;6046:9;6057:6;6018:19;:46::i;:::-;5460:612;5339:733;;;:::o;27707:876::-;27746:23;27772:24;27790:4;27772:9;:24::i;:::-;27746:50;;27807:25;27854:12;;27835:16;;:31;;;;:::i;:::-;27807:59;;27877:12;27925:1;27906:15;:20;27902:59;;27943:7;;;;;27902:59;28016:2;27995:18;;:23;;;;:::i;:::-;27977:15;:41;27973:115;;;28074:2;28053:18;;:23;;;;:::i;:::-;28035:41;;27973:115;28100:25;28128:21;28100:49;;28160:33;28177:15;28160:16;:33::i;:::-;28206:18;28227:44;28253:17;28227:21;:25;;:44;;;;:::i;:::-;28206:65;;28282:17;28302:51;28335:17;28302:28;28317:12;;28302:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28282:71;;28385:1;28366:16;:20;;;;28412:1;28397:12;:16;;;;28448:10;;;;;;;;;;;28440:24;;28472:9;28440:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28426:60;;;;;28519:14;;;;;;;;;;;28511:28;;28548:21;28511:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28497:78;;;;;27735:848;;;;;;27707:876;:::o;9092:98::-;9150:7;9181:1;9177;:5;;;;:::i;:::-;9170:12;;9092:98;;;;:::o;9198:::-;9256:7;9287:1;9283;:5;;;;:::i;:::-;9276:12;;9198:98;;;;:::o;7474:125::-;;;;:::o;7607:124::-;;;;:::o;8986:98::-;9044:7;9075:1;9071;:5;;;;:::i;:::-;9064:12;;8986:98;;;;:::o;88:117:1:-;197:1;194;187: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:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:765::-;8483:6;8491;8499;8507;8556:3;8544:9;8535:7;8531:23;8527:33;8524:120;;;8563:79;;:::i;:::-;8524:120;8683:1;8708:53;8753:7;8744:6;8733:9;8729:22;8708:53;:::i;:::-;8698:63;;8654:117;8810:2;8836:53;8881:7;8872:6;8861:9;8857:22;8836:53;:::i;:::-;8826:63;;8781:118;8938:2;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8909:118;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8397:765;;;;;;;:::o;9168:474::-;9236:6;9244;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9390:117;9546:2;9572:53;9617:7;9608:6;9597:9;9593:22;9572:53;:::i;:::-;9562:63;;9517:118;9168:474;;;;;:::o;9648:182::-;9788:34;9784:1;9776:6;9772:14;9765:58;9648:182;:::o;9836:366::-;9978:3;9999:67;10063:2;10058:3;9999:67;:::i;:::-;9992:74;;10075:93;10164:3;10075:93;:::i;:::-;10193:2;10188:3;10184:12;10177:19;;9836:366;;;:::o;10208:419::-;10374:4;10412:2;10401:9;10397:18;10389:26;;10461:9;10455:4;10451:20;10447:1;10436:9;10432:17;10425:47;10489:131;10615:4;10489:131;:::i;:::-;10481:139;;10208:419;;;:::o;10633:180::-;10681:77;10678:1;10671:88;10778:4;10775:1;10768:15;10802:4;10799:1;10792:15;10819:191;10859:3;10878:20;10896:1;10878:20;:::i;:::-;10873:25;;10912:20;10930:1;10912:20;:::i;:::-;10907:25;;10955:1;10952;10948:9;10941:16;;10976:3;10973:1;10970:10;10967:36;;;10983:18;;:::i;:::-;10967:36;10819:191;;;;:::o;11016:179::-;11156:31;11152:1;11144:6;11140:14;11133:55;11016:179;:::o;11201:366::-;11343:3;11364:67;11428:2;11423:3;11364:67;:::i;:::-;11357:74;;11440:93;11529:3;11440:93;:::i;:::-;11558:2;11553:3;11549:12;11542:19;;11201:366;;;:::o;11573:419::-;11739:4;11777:2;11766:9;11762:18;11754:26;;11826:9;11820:4;11816:20;11812:1;11801:9;11797:17;11790:47;11854:131;11980:4;11854:131;:::i;:::-;11846:139;;11573:419;;;:::o;11998:180::-;12046:77;12043:1;12036:88;12143:4;12140:1;12133:15;12167:4;12164:1;12157:15;12184:320;12228:6;12265:1;12259:4;12255:12;12245:22;;12312:1;12306:4;12302:12;12333:18;12323:81;;12389:4;12381:6;12377:17;12367:27;;12323:81;12451:2;12443:6;12440:14;12420:18;12417:38;12414:84;;12470:18;;:::i;:::-;12414:84;12235:269;12184:320;;;:::o;12510:410::-;12550:7;12573:20;12591:1;12573:20;:::i;:::-;12568:25;;12607:20;12625:1;12607:20;:::i;:::-;12602:25;;12662:1;12659;12655:9;12684:30;12702:11;12684:30;:::i;:::-;12673:41;;12863:1;12854:7;12850:15;12847:1;12844:22;12824:1;12817:9;12797:83;12774:139;;12893:18;;:::i;:::-;12774:139;12558:362;12510:410;;;;:::o;12926:180::-;12974:77;12971:1;12964:88;13071:4;13068:1;13061:15;13095:4;13092:1;13085:15;13112:185;13152:1;13169:20;13187:1;13169:20;:::i;:::-;13164:25;;13203:20;13221:1;13203:20;:::i;:::-;13198:25;;13242:1;13232:35;;13247:18;;:::i;:::-;13232:35;13289:1;13286;13282:9;13277:14;;13112:185;;;;:::o;13303:182::-;13443:34;13439:1;13431:6;13427:14;13420:58;13303:182;:::o;13491:366::-;13633:3;13654:67;13718:2;13713:3;13654:67;:::i;:::-;13647:74;;13730:93;13819:3;13730:93;:::i;:::-;13848:2;13843:3;13839:12;13832:19;;13491:366;;;:::o;13863:419::-;14029:4;14067:2;14056:9;14052:18;14044:26;;14116:9;14110:4;14106:20;14102:1;14091:9;14087:17;14080:47;14144:131;14270:4;14144:131;:::i;:::-;14136:139;;13863:419;;;:::o;14288:224::-;14428:34;14424:1;14416:6;14412:14;14405:58;14497:7;14492:2;14484:6;14480:15;14473:32;14288:224;:::o;14518:366::-;14660:3;14681:67;14745:2;14740:3;14681:67;:::i;:::-;14674:74;;14757:93;14846:3;14757:93;:::i;:::-;14875:2;14870:3;14866:12;14859:19;;14518:366;;;:::o;14890:419::-;15056:4;15094:2;15083:9;15079:18;15071:26;;15143:9;15137:4;15133:20;15129:1;15118:9;15114:17;15107:47;15171:131;15297:4;15171:131;:::i;:::-;15163:139;;14890:419;;;:::o;15315:227::-;15455:34;15451:1;15443:6;15439:14;15432:58;15524:10;15519:2;15511:6;15507:15;15500:35;15315:227;:::o;15548:366::-;15690:3;15711:67;15775:2;15770:3;15711:67;:::i;:::-;15704:74;;15787:93;15876:3;15787:93;:::i;:::-;15905:2;15900:3;15896:12;15889:19;;15548:366;;;:::o;15920:419::-;16086:4;16124:2;16113:9;16109:18;16101:26;;16173:9;16167:4;16163:20;16159:1;16148:9;16144:17;16137:47;16201:131;16327:4;16201:131;:::i;:::-;16193:139;;15920:419;;;:::o;16345:244::-;16485:34;16481:1;16473:6;16469:14;16462:58;16554:27;16549:2;16541:6;16537:15;16530:52;16345:244;:::o;16595:366::-;16737:3;16758:67;16822:2;16817:3;16758:67;:::i;:::-;16751:74;;16834:93;16923:3;16834:93;:::i;:::-;16952:2;16947:3;16943:12;16936:19;;16595:366;;;:::o;16967:419::-;17133:4;17171:2;17160:9;17156:18;17148:26;;17220:9;17214:4;17210:20;17206:1;17195:9;17191:17;17184:47;17248:131;17374:4;17248:131;:::i;:::-;17240:139;;16967:419;;;:::o;17392:224::-;17532:34;17528:1;17520:6;17516:14;17509:58;17601:7;17596:2;17588:6;17584:15;17577:32;17392:224;:::o;17622:366::-;17764:3;17785:67;17849:2;17844:3;17785:67;:::i;:::-;17778:74;;17861:93;17950:3;17861:93;:::i;:::-;17979:2;17974:3;17970:12;17963:19;;17622:366;;;:::o;17994:419::-;18160:4;18198:2;18187:9;18183:18;18175:26;;18247:9;18241:4;18237:20;18233:1;18222:9;18218:17;18211:47;18275:131;18401:4;18275:131;:::i;:::-;18267:139;;17994:419;;;:::o;18419:162::-;18559:14;18555:1;18547:6;18543:14;18536:38;18419:162;:::o;18587:366::-;18729:3;18750:67;18814:2;18809:3;18750:67;:::i;:::-;18743:74;;18826:93;18915:3;18826:93;:::i;:::-;18944:2;18939:3;18935:12;18928:19;;18587:366;;;:::o;18959:419::-;19125:4;19163:2;19152:9;19148:18;19140:26;;19212:9;19206:4;19202:20;19198:1;19187:9;19183:17;19176:47;19240:131;19366:4;19240:131;:::i;:::-;19232:139;;18959:419;;;:::o;19384:240::-;19524:34;19520:1;19512:6;19508:14;19501:58;19593:23;19588:2;19580:6;19576:15;19569:48;19384:240;:::o;19630:366::-;19772:3;19793:67;19857:2;19852:3;19793:67;:::i;:::-;19786:74;;19869:93;19958:3;19869:93;:::i;:::-;19987:2;19982:3;19978:12;19971:19;;19630:366;;;:::o;20002:419::-;20168:4;20206:2;20195:9;20191:18;20183:26;;20255:9;20249:4;20245:20;20241:1;20230:9;20226:17;20219:47;20283:131;20409:4;20283:131;:::i;:::-;20275:139;;20002:419;;;:::o;20427:239::-;20567:34;20563:1;20555:6;20551:14;20544:58;20636:22;20631:2;20623:6;20619:15;20612:47;20427:239;:::o;20672:366::-;20814:3;20835:67;20899:2;20894:3;20835:67;:::i;:::-;20828:74;;20911:93;21000:3;20911:93;:::i;:::-;21029:2;21024:3;21020:12;21013:19;;20672:366;;;:::o;21044:419::-;21210:4;21248:2;21237:9;21233:18;21225:26;;21297:9;21291:4;21287:20;21283:1;21272:9;21268:17;21261:47;21325:131;21451:4;21325:131;:::i;:::-;21317:139;;21044:419;;;:::o;21469:225::-;21609:34;21605:1;21597:6;21593:14;21586:58;21678:8;21673:2;21665:6;21661:15;21654:33;21469:225;:::o;21700:366::-;21842:3;21863:67;21927:2;21922:3;21863:67;:::i;:::-;21856:74;;21939:93;22028:3;21939:93;:::i;:::-;22057:2;22052:3;22048:12;22041:19;;21700:366;;;:::o;22072:419::-;22238:4;22276:2;22265:9;22261:18;22253:26;;22325:9;22319:4;22315:20;22311:1;22300:9;22296:17;22289:47;22353:131;22479:4;22353:131;:::i;:::-;22345:139;;22072:419;;;:::o;22497:223::-;22637:34;22633:1;22625:6;22621:14;22614:58;22706:6;22701:2;22693:6;22689:15;22682:31;22497:223;:::o;22726:366::-;22868:3;22889:67;22953:2;22948:3;22889:67;:::i;:::-;22882:74;;22965:93;23054:3;22965:93;:::i;:::-;23083:2;23078:3;23074:12;23067:19;;22726:366;;;:::o;23098:419::-;23264:4;23302:2;23291:9;23287:18;23279:26;;23351:9;23345:4;23341:20;23337:1;23326:9;23322:17;23315:47;23379:131;23505:4;23379:131;:::i;:::-;23371:139;;23098:419;;;:::o;23523:221::-;23663:34;23659:1;23651:6;23647:14;23640:58;23732:4;23727:2;23719:6;23715:15;23708:29;23523:221;:::o;23750:366::-;23892:3;23913:67;23977:2;23972:3;23913:67;:::i;:::-;23906:74;;23989:93;24078:3;23989:93;:::i;:::-;24107:2;24102:3;24098:12;24091:19;;23750:366;;;:::o;24122:419::-;24288:4;24326:2;24315:9;24311:18;24303:26;;24375:9;24369:4;24365:20;24361:1;24350:9;24346:17;24339:47;24403:131;24529:4;24403:131;:::i;:::-;24395:139;;24122:419;;;:::o;24547:224::-;24687:34;24683:1;24675:6;24671:14;24664:58;24756:7;24751:2;24743:6;24739:15;24732:32;24547:224;:::o;24777:366::-;24919:3;24940:67;25004:2;24999:3;24940:67;:::i;:::-;24933:74;;25016:93;25105:3;25016:93;:::i;:::-;25134:2;25129:3;25125:12;25118:19;;24777:366;;;:::o;25149:419::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25402:9;25396:4;25392:20;25388:1;25377:9;25373:17;25366:47;25430:131;25556:4;25430:131;:::i;:::-;25422:139;;25149:419;;;:::o;25574:222::-;25714:34;25710:1;25702:6;25698:14;25691:58;25783:5;25778:2;25770:6;25766:15;25759:30;25574:222;:::o;25802:366::-;25944:3;25965:67;26029:2;26024:3;25965:67;:::i;:::-;25958:74;;26041:93;26130:3;26041:93;:::i;:::-;26159:2;26154:3;26150:12;26143:19;;25802:366;;;:::o;26174:419::-;26340:4;26378:2;26367:9;26363:18;26355:26;;26427:9;26421:4;26417:20;26413:1;26402:9;26398:17;26391:47;26455:131;26581:4;26455:131;:::i;:::-;26447:139;;26174:419;;;:::o;26599:167::-;26739:19;26735:1;26727:6;26723:14;26716:43;26599:167;:::o;26772:366::-;26914:3;26935:67;26999:2;26994:3;26935:67;:::i;:::-;26928:74;;27011:93;27100:3;27011:93;:::i;:::-;27129:2;27124:3;27120:12;27113:19;;26772:366;;;:::o;27144:419::-;27310:4;27348:2;27337:9;27333:18;27325:26;;27397:9;27391:4;27387:20;27383:1;27372:9;27368:17;27361:47;27425:131;27551:4;27425:131;:::i;:::-;27417:139;;27144:419;;;:::o;27569:165::-;27709:17;27705:1;27697:6;27693:14;27686:41;27569:165;:::o;27740:366::-;27882:3;27903:67;27967:2;27962:3;27903:67;:::i;:::-;27896:74;;27979:93;28068:3;27979:93;:::i;:::-;28097:2;28092:3;28088:12;28081:19;;27740:366;;;:::o;28112:419::-;28278:4;28316:2;28305:9;28301:18;28293:26;;28365:9;28359:4;28355:20;28351:1;28340:9;28336:17;28329:47;28393:131;28519:4;28393:131;:::i;:::-;28385:139;;28112:419;;;:::o;28537:172::-;28677:24;28673:1;28665:6;28661:14;28654:48;28537:172;:::o;28715:366::-;28857:3;28878:67;28942:2;28937:3;28878:67;:::i;:::-;28871:74;;28954:93;29043:3;28954:93;:::i;:::-;29072:2;29067:3;29063:12;29056:19;;28715:366;;;:::o;29087:419::-;29253:4;29291:2;29280:9;29276:18;29268:26;;29340:9;29334:4;29330:20;29326:1;29315:9;29311:17;29304:47;29368:131;29494:4;29368:131;:::i;:::-;29360:139;;29087:419;;;:::o;29512:297::-;29652:34;29648:1;29640:6;29636:14;29629:58;29721:34;29716:2;29708:6;29704:15;29697:59;29790:11;29785:2;29777:6;29773:15;29766:36;29512:297;:::o;29815:366::-;29957:3;29978:67;30042:2;30037:3;29978:67;:::i;:::-;29971:74;;30054:93;30143:3;30054:93;:::i;:::-;30172:2;30167:3;30163:12;30156:19;;29815:366;;;:::o;30187:419::-;30353:4;30391:2;30380:9;30376:18;30368:26;;30440:9;30434:4;30430:20;30426:1;30415:9;30411:17;30404:47;30468:131;30594:4;30468:131;:::i;:::-;30460:139;;30187:419;;;:::o;30612:225::-;30752:34;30748:1;30740:6;30736:14;30729:58;30821:8;30816:2;30808:6;30804:15;30797:33;30612:225;:::o;30843:366::-;30985:3;31006:67;31070:2;31065:3;31006:67;:::i;:::-;30999:74;;31082:93;31171:3;31082:93;:::i;:::-;31200:2;31195:3;31191:12;31184:19;;30843:366;;;:::o;31215:419::-;31381:4;31419:2;31408:9;31404:18;31396:26;;31468:9;31462:4;31458:20;31454:1;31443:9;31439:17;31432:47;31496:131;31622:4;31496:131;:::i;:::-;31488:139;;31215:419;;;:::o;31640:169::-;31780:21;31776:1;31768:6;31764:14;31757:45;31640:169;:::o;31815:366::-;31957:3;31978:67;32042:2;32037:3;31978:67;:::i;:::-;31971:74;;32054:93;32143:3;32054:93;:::i;:::-;32172:2;32167:3;32163:12;32156:19;;31815:366;;;:::o;32187:419::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:226::-;32752:34;32748:1;32740:6;32736:14;32729:58;32821:9;32816:2;32808:6;32804:15;32797:34;32612:226;:::o;32844:366::-;32986:3;33007:67;33071:2;33066:3;33007:67;:::i;:::-;33000:74;;33083:93;33172:3;33083:93;:::i;:::-;33201:2;33196:3;33192:12;33185:19;;32844:366;;;:::o;33216:419::-;33382:4;33420:2;33409:9;33405:18;33397:26;;33469:9;33463:4;33459:20;33455:1;33444:9;33440:17;33433:47;33497:131;33623:4;33497:131;:::i;:::-;33489:139;;33216:419;;;:::o;33641:194::-;33681:4;33701:20;33719:1;33701:20;:::i;:::-;33696:25;;33735:20;33753:1;33735:20;:::i;:::-;33730:25;;33779:1;33776;33772:9;33764:17;;33803:1;33797:4;33794:11;33791:37;;;33808:18;;:::i;:::-;33791:37;33641:194;;;;:::o;33841:180::-;33889:77;33886:1;33879:88;33986:4;33983:1;33976:15;34010:4;34007:1;34000:15;34027:180;34075:77;34072:1;34065:88;34172:4;34169:1;34162:15;34196:4;34193:1;34186:15;34213:143;34270:5;34301:6;34295:13;34286:22;;34317:33;34344:5;34317:33;:::i;:::-;34213:143;;;;:::o;34362:351::-;34432:6;34481:2;34469:9;34460:7;34456:23;34452:32;34449:119;;;34487:79;;:::i;:::-;34449:119;34607:1;34632:64;34688:7;34679:6;34668:9;34664:22;34632:64;:::i;:::-;34622:74;;34578:128;34362:351;;;;:::o;34719:85::-;34764:7;34793:5;34782:16;;34719:85;;;:::o;34810:158::-;34868:9;34901:61;34919:42;34928:32;34954:5;34928:32;:::i;:::-;34919:42;:::i;:::-;34901:61;:::i;:::-;34888:74;;34810:158;;;:::o;34974:147::-;35069:45;35108:5;35069:45;:::i;:::-;35064:3;35057:58;34974:147;;:::o;35127:114::-;35194:6;35228:5;35222:12;35212:22;;35127:114;;;:::o;35247:184::-;35346:11;35380:6;35375:3;35368:19;35420:4;35415:3;35411:14;35396:29;;35247:184;;;;:::o;35437:132::-;35504:4;35527:3;35519:11;;35557:4;35552:3;35548:14;35540:22;;35437:132;;;:::o;35575:108::-;35652:24;35670:5;35652:24;:::i;:::-;35647:3;35640:37;35575:108;;:::o;35689:179::-;35758:10;35779:46;35821:3;35813:6;35779:46;:::i;:::-;35857:4;35852:3;35848:14;35834:28;;35689:179;;;;:::o;35874:113::-;35944:4;35976;35971:3;35967:14;35959:22;;35874:113;;;:::o;36023:732::-;36142:3;36171:54;36219:5;36171:54;:::i;:::-;36241:86;36320:6;36315:3;36241:86;:::i;:::-;36234:93;;36351:56;36401:5;36351:56;:::i;:::-;36430:7;36461:1;36446:284;36471:6;36468:1;36465:13;36446:284;;;36547:6;36541:13;36574:63;36633:3;36618:13;36574:63;:::i;:::-;36567:70;;36660:60;36713:6;36660:60;:::i;:::-;36650:70;;36506:224;36493:1;36490;36486:9;36481:14;;36446:284;;;36450:14;36746:3;36739:10;;36147:608;;;36023:732;;;;:::o;36761:831::-;37024:4;37062:3;37051:9;37047:19;37039:27;;37076:71;37144:1;37133:9;37129:17;37120:6;37076:71;:::i;:::-;37157:80;37233:2;37222:9;37218:18;37209:6;37157:80;:::i;:::-;37284:9;37278:4;37274:20;37269:2;37258:9;37254:18;37247:48;37312:108;37415:4;37406:6;37312:108;:::i;:::-;37304:116;;37430:72;37498:2;37487:9;37483:18;37474:6;37430:72;:::i;:::-;37512:73;37580:3;37569:9;37565:19;37556:6;37512:73;:::i;:::-;36761:831;;;;;;;;:::o;37598:225::-;37738:34;37734:1;37726:6;37722:14;37715:58;37807:8;37802:2;37794:6;37790:15;37783:33;37598:225;:::o;37829:366::-;37971:3;37992:67;38056:2;38051:3;37992:67;:::i;:::-;37985:74;;38068:93;38157:3;38068:93;:::i;:::-;38186:2;38181:3;38177:12;38170:19;;37829:366;;;:::o;38201:419::-;38367:4;38405:2;38394:9;38390:18;38382:26;;38454:9;38448:4;38444:20;38440:1;38429:9;38425:17;38418:47;38482:131;38608:4;38482:131;:::i;:::-;38474:139;;38201:419;;;:::o;38626:147::-;38727:11;38764:3;38749:18;;38626:147;;;;:::o;38779:114::-;;:::o;38899:398::-;39058:3;39079:83;39160:1;39155:3;39079:83;:::i;:::-;39072:90;;39171:93;39260:3;39171:93;:::i;:::-;39289:1;39284:3;39280:11;39273:18;;38899:398;;;:::o;39303:379::-;39487:3;39509:147;39652:3;39509:147;:::i;:::-;39502:154;;39673:3;39666:10;;39303:379;;;:::o

Swarm Source

ipfs://e92f95da3f75a5ba6ce274e7019fe2f460e7cd70e9fa8a0b7f6f8f43b3227abe
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.