ETH Price: $2,273.71 (+0.11%)

Contract

0x2f17DDa094B0CD92cB4bEE986EB68f9C32902967
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve144275852022-03-21 4:32:02902 days ago1647837122IN
0x2f17DDa0...C32902967
0 ETH0.0012863427.60219028
Approve142904342022-02-27 20:34:10923 days ago1645994050IN
0x2f17DDa0...C32902967
0 ETH0.0011842648.69697577
Transfer142787492022-02-26 1:20:48925 days ago1645838448IN
0x2f17DDa0...C32902967
0 ETH0.0033639450.01620991
Approve142787292022-02-26 1:15:55925 days ago1645838155IN
0x2f17DDa0...C32902967
0 ETH0.0016938236.34589109
Approve142786642022-02-26 1:04:52925 days ago1645837492IN
0x2f17DDa0...C32902967
0 ETH0.0029990164.35235397
Approve142786612022-02-26 1:03:52925 days ago1645837432IN
0x2f17DDa0...C32902967
0 ETH0.0026693557.27863037
Approve142786542022-02-26 1:01:51925 days ago1645837311IN
0x2f17DDa0...C32902967
0 ETH0.0026995957.92759583
Approve142786372022-02-26 0:59:23925 days ago1645837163IN
0x2f17DDa0...C32902967
0 ETH0.0031398567.37442465
Approve142786322022-02-26 0:58:04925 days ago1645837084IN
0x2f17DDa0...C32902967
0 ETH0.0039191484.09641918
Remove Limits142786302022-02-26 0:57:44925 days ago1645837064IN
0x2f17DDa0...C32902967
0 ETH0.0025138885.80972165
Approve142786292022-02-26 0:56:22925 days ago1645836982IN
0x2f17DDa0...C32902967
0 ETH0.0035839676.90412667
Approve142786282022-02-26 0:56:14925 days ago1645836974IN
0x2f17DDa0...C32902967
0 ETH0.0038496882.60591152
Approve142786272022-02-26 0:55:59925 days ago1645836959IN
0x2f17DDa0...C32902967
0 ETH0.00699045150
Approve142786262022-02-26 0:55:51925 days ago1645836951IN
0x2f17DDa0...C32902967
0 ETH0.0039011383.70997369
Approve142786252022-02-26 0:54:32925 days ago1645836872IN
0x2f17DDa0...C32902967
0 ETH0.0034963275.02361529
Approve142786252022-02-26 0:54:32925 days ago1645836872IN
0x2f17DDa0...C32902967
0 ETH0.01631105350
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.003115766.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.003115766.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.00539925115.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.00539925115.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.00539925115.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.00539925115.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.00539925115.85628238
Approve142786242022-02-26 0:54:11925 days ago1645836851IN
0x2f17DDa0...C32902967
0 ETH0.00539925115.85628238
Approve142786232022-02-26 0:54:01925 days ago1645836841IN
0x2f17DDa0...C32902967
0 ETH0.0028215360.54411631
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
144275872022-03-21 4:32:41902 days ago1647837161
0x2f17DDa0...C32902967
0.00132553 ETH
144275872022-03-21 4:32:41902 days ago1647837161
0x2f17DDa0...C32902967
0.000525 ETH
144275872022-03-21 4:32:41902 days ago1647837161
0x2f17DDa0...C32902967
0.00080052 ETH
144275872022-03-21 4:32:41902 days ago1647837161
0x2f17DDa0...C32902967
0.00694337 ETH
144275872022-03-21 4:32:41902 days ago1647837161
0x2f17DDa0...C32902967
0.00799338 ETH
142787532022-02-26 1:21:26925 days ago1645838486
0x2f17DDa0...C32902967
0.0031753 ETH
142787532022-02-26 1:21:26925 days ago1645838486
0x2f17DDa0...C32902967
0.0031753 ETH
142787532022-02-26 1:21:26925 days ago1645838486
0x2f17DDa0...C32902967
0.00068042 ETH
142787532022-02-26 1:21:26925 days ago1645838486
0x2f17DDa0...C32902967
0.00703104 ETH
142787502022-02-26 1:20:54925 days ago1645838454
0x2f17DDa0...C32902967
0.00312529 ETH
142787502022-02-26 1:20:54925 days ago1645838454
0x2f17DDa0...C32902967
0.00312529 ETH
142787502022-02-26 1:20:54925 days ago1645838454
0x2f17DDa0...C32902967
0.0006697 ETH
142787502022-02-26 1:20:54925 days ago1645838454
0x2f17DDa0...C32902967
0.00692028 ETH
142787412022-02-26 1:19:08925 days ago1645838348
0x2f17DDa0...C32902967
0.00399721 ETH
142787412022-02-26 1:19:08925 days ago1645838348
0x2f17DDa0...C32902967
0.00399721 ETH
142787412022-02-26 1:19:08925 days ago1645838348
0x2f17DDa0...C32902967
0.00127635 ETH
142787412022-02-26 1:19:08925 days ago1645838348
0x2f17DDa0...C32902967
0.00927078 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00406484 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00406484 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00087103 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00900072 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00411971 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00411971 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00088279 ETH
142786862022-02-26 1:08:13925 days ago1645837693
0x2f17DDa0...C32902967
0.00912223 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FUCKPUTIN

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-26
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-22
 *https://t.me/FPUTIN1
 *Я тебе люблю Ukraine
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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");

        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);
    }

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract FUCKPUTIN is ERC20, Ownable {
    // Variables
    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public MarketingAddress;
    address public DevelopmentAddress;

    bool private swapEnabled = false;
    bool private limitsEnabled = true;
    bool private tradingEnabled = false;
    bool private transferDelayEnabled = true;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    uint256 public tradingEnabledBlock = 0;
    uint256 private justicePeriod = 0;
    uint256 private swapTokensAtAmount;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDevelopment;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private automatedMarketMakerPairs;
    mapping (address => uint256) private _holderLastTransferTimestamp; 
    mapping (address => uint256) public _lockedWallets;
    mapping (address => bool) public _evil;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event EvilPurged(address guiltyName);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedSwapTokensAtAmount(uint256 newAmount);
    event UpdatedMarketingAddress(address indexed newWallet);
    event UpdatedDevelopmentAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event TransferForeignToken(address token, uint256 amount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("FUCK PUTIN", "FPUTIN") {
        address newOwner = msg.sender;
        
        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 totalSupply = 100000000000 * 10**18;
        maxBuyAmount = totalSupply * 8/1000;
        maxSellAmount = totalSupply * 1/100;
        maxWalletAmount = totalSupply * 2/100;
        swapTokensAtAmount = totalSupply * 1 / 4000;

        buyMarketingFee = 0;
        buyLiquidityFee = 3;
        buyDevelopmentFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;

        sellMarketingFee = 7;
        sellLiquidityFee = 3;
        sellDevelopmentFee = 7;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

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

        MarketingAddress = address(newOwner);
        DevelopmentAddress = address(newOwner);
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // Exclude an address from the max transaction amount
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if (!isEx) {
            require(updAds != uniswapV2Pair, "Cannot remove Uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    // Exclude an address from transaction fees
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    // Designate AMM pair 
    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

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

    // Liquidity add helper function
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    // Swap native token for ETH
    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);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // Transfer tokens
    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(amount > 0, "Amount must be greater than 0");
        require(_lockedWallets[from] < block.timestamp, "Lock active");
        require(!_evil[from], "Guilty");
        
        // Check if limits are in place
        if (limitsEnabled) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)) {
                if (!tradingEnabled) {
                    require(from != address(uniswapV2Router) && from != address(uniswapV2Pair), "Trading is not active");
                }

                if (transferDelayEnabled) {
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 1 && _holderLastTransferTimestamp[to] < block.number - 1, "_transfer:: Transfer Delay enabled. Try again later");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Exceeds max wallet");
                } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell");
                } else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount + balanceOf(to) <= maxWalletAmount, "Exceeds max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        // Check if threshold has been reached for contract to sell for liquidity, marketing and development
        if (canSwap && swapEnabled && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapBack();
        }
        
        // Transfer tokens for buy and sell, wallet transfers excluded
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees = 0;
            uint256 penaltyAmount = 0;
            if (block.number - tradingEnabledBlock <= justicePeriod && automatedMarketMakerPairs[from]) {
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, MarketingAddress, penaltyAmount);
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                if (block.number - tradingEnabledBlock - justicePeriod == 1) {
                    _evil[to] = true;
                    emit EvilPurged(to);
                }
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
            } else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
            }

            if (fees > 0) {    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }
        super._transfer(from, to, amount);
    }

    // Enable trading and assign values of arguments to variables
    function enableTrading(uint256 blocks) external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        require(blocks <= 5, "Must be less than 5 blocks");
        tradingEnabled = true;
        swapEnabled = true;
        tradingEnabledBlock = block.number;
        justicePeriod = blocks;
        emit EnabledTrading();
    }
    
    // Remove trading limits
    function removeLimits() external onlyOwner {
        limitsEnabled = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // Disable transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    // Pass judgement on the guilty
    function passJudgement(address[] memory names) external onlyOwner {
        for (uint i = 0; i < names.length; i++) {
            _evil[names[i]] = true;
        }
    }

    // Reverse guilty verdict
    function reverseJudgement(address[] memory names) external onlyOwner {
        for (uint i = 0; i < names.length; i++) {
            _evil[names[i]] = false;
        }
    }

    // Lock wallet from transferring out for given time
    function lockTokens(address[] memory wallets, uint256[] memory numDays) external onlyOwner {
        require(wallets.length == numDays.length, "Arrays must be the same length");
        require(wallets.length < 200, "Can only lock 200 wallets per txn due to gas limits");
        for (uint i = 0; i < wallets.length; i++) {
            require(balanceOf(wallets[i]) > 0, "No tokens");
            require(_lockedWallets[wallets[i]] < block.timestamp, "Already locked");
            _lockedWallets[wallets[i]] = block.timestamp + numDays[i] * 1 days;
        }
    }

    // Update max buy amount
    function updateMaxBuyAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1 / 1000) / 10**18, "Max buy amount lower than 0.1%");
        maxBuyAmount = newAmount * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    // Update max sell amount
    function updateMaxSellAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1 / 1000) / 10**18, "Max sell amount lower than 0.1%");
        maxSellAmount = newAmount * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    // Update max wallet amount
    function updateMaxWalletAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 3 / 1000) / 10**18, "Max wallet amount lower than 0.3%");
        maxWalletAmount = newAmount * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // Update token threshold for when the contract sells for liquidity, marketing and development
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= (totalSupply() * 1 / 100000) / 10**18, "Threshold lower than 0.001% total supply"); 
  	    require(newAmount <= (totalSupply() * 1 / 1000) / 10**18, "Threshold higher than 0.1% total supply");
  	    swapTokensAtAmount = newAmount * (10**18);
        emit UpdatedSwapTokensAtAmount(swapTokensAtAmount);
  	}
    
    // Transfer given number of tokens to given address
    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "Arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); 
        for (uint256 i = 0; i < wallets.length; i++) {
            _transfer(msg.sender, wallets[i], amountsInTokens[i] * 10**18);
        }
    }

    // Update fees on buys
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developmentFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 9, "Must keep fees at 9% or less");
    }

    // Update fees on sells
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developmentFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 18, "Must keep fees at 18% or less");
    }
    
    // Contract sells
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        bool success;
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDevelopment = ethBalance * tokensForDevelopment / (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing + ethForDevelopment;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(DevelopmentAddress).call{value: ethForDevelopment}("");
        (success,) = address(MarketingAddress).call{value: address(this).balance}("");
    }

    // Withdraw unnecessary tokens
    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // Withdraw stuck ETH
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    // Designate marketing wallet address
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        MarketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    // Designate development wallet address
    function setDevelopmentAddress(address _developmentAddress) external onlyOwner {
        require(_developmentAddress != address(0), "_developmentAddress address cannot be 0");
        DevelopmentAddress = payable(_developmentAddress);
        emit UpdatedDevelopmentAddress(_developmentAddress);
    }
}

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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"guiltyName","type":"address"}],"name":"EvilPurged","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevelopmentAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSwapTokensAtAmount","type":"event"},{"inputs":[],"name":"DevelopmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_evil","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lockedWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"numDays","type":"uint256[]"}],"name":"lockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":[{"internalType":"address[]","name":"names","type":"address[]"}],"name":"passJudgement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"names","type":"address[]"}],"name":"reverseJudgement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"_developmentAddress","type":"address"}],"name":"setDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526007805463ffffffff60a01b19166201000160a81b1790556000600b819055600c553480156200003357600080fd5b50604080518082018252600a815269232aa1a590282aaa24a760b11b60208083019182528351808501909452600684526523282aaa24a760d11b908401528151919291620000849160039162000767565b5080516200009a90600490602084019062000767565b5050506000620000af6200040460201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620041dc833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010f81600162000408565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200015a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018091906200080d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f491906200080d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026891906200080d565b6001600160a01b031660a0819052620002839060016200046b565b6c01431e0fae6d7217caa00000006103e8620002a182600862000855565b620002ad919062000877565b6008556064620002bf82600162000855565b620002cb919062000877565b6009556064620002dd82600262000855565b620002e9919062000877565b600a55610fa0620002fc82600162000855565b62000308919062000877565b600d556000600f8190556003601081905560118290556200032a90826200089a565b6200033691906200089a565b600e55600760138190556003601481905560158290556200035890826200089a565b6200036491906200089a565b6012556200037483600162000408565b6200038130600162000408565b6200039061dead600162000408565b6200039d836001620004d7565b620003aa306001620004d7565b620003b961dead6001620004d7565b600680546001600160a01b0385166001600160a01b03199182168117909255600780549091169091179055620003f0838262000585565b620003fb836200066a565b505050620008f2565b3390565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601b60205260409020805460ff19168215151790556200049b828262000408565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005265760405162461bcd60e51b81526020600482018190526024820152600080516020620041bc83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200051d565b8060026000828254620005f191906200089a565b90915550506001600160a01b03821660009081526020819052604081208054839290620006209084906200089a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006b55760405162461bcd60e51b81526020600482018190526024820152600080516020620041bc83398151915260448201526064016200051d565b6001600160a01b0381166200071c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200051d565b6005546040516001600160a01b03808416921690600080516020620041dc83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200077590620008b5565b90600052602060002090601f016020900481019282620007995760008555620007e4565b82601f10620007b457805160ff1916838001178555620007e4565b82800160010185558215620007e4579182015b82811115620007e4578251825591602001919060010190620007c7565b50620007f2929150620007f6565b5090565b5b80821115620007f25760008155600101620007f7565b6000602082840312156200082057600080fd5b81516001600160a01b03811681146200083857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200087257620008726200083f565b500290565b6000826200089557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008b057620008b06200083f565b500190565b600181811c90821680620008ca57607f821691505b60208210811415620008ec57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161385762000965600039600081816104fb015281816111cd015281816117100152818161230301526123cd01526000818161037c015281816122c60152818161239001528181612fae01528181613067015281816130a30152818161311d015261317a01526138576000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063c3e9c34f116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092e578063f2fde38b14610944578063f5648a4f14610964578063f63743421461097957600080fd5b8063dd62ed3e146108b3578063e884f260146108f9578063ec238a811461090e57600080fd5b8063c3e9c34f146107ed578063c96fd36d1461081d578063d1a0c9461461083d578063d257b34f1461085d578063d85ba0631461087d578063dc3f0d0f1461089357600080fd5b8063a457c2d711610149578063b204141111610123578063b204141114610777578063c02466681461078d578063c17b5b8c146107ad578063c18bc195146107cd57600080fd5b8063a457c2d714610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b80638da5cb5b1461066b578063906e9dd01461068957806392136913146106a9578063930a6d07146106bf57806395d89b41146106ec5780639a7a23d61461070157600080fd5b806349bd5a5e1161024f5780637571336a116102085780638095d564116101e25780638095d564146105f557806382aa7c68146106155780638366e79a1461063557806388e765ff1461065557600080fd5b80637571336a146105a9578063764556dc146105c95780637bce5a04146105df57600080fd5b806349bd5a5e146104e957806366d602ae1461051d5780636a486a8e1461053357806370a0823114610549578063715018a61461057f578063751039fc1461059457600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce5671461046d5780633547800a146104895780633936e8b9146104a957806339509351146104c957600080fd5b806323b872dd1461040d57806329b1c15c1461042d5780632be32b611461044d57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806318a94cf1146103d55780632307b441146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098f565b60405161033191906131f1565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461325e565b610a21565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506002545b604051908152602001610331565b3480156103e157600080fd5b506103c760155481565b3480156103f757600080fd5b5061040b610406366004613369565b610a37565b005b34801561041957600080fd5b5061035a610428366004613424565b610b9e565b34801561043957600080fd5b5061040b610448366004613465565b610c48565b34801561045957600080fd5b5061040b610468366004613489565b610d21565b34801561047957600080fd5b5060405160128152602001610331565b34801561049557600080fd5b5061040b6104a4366004613369565b610e1c565b3480156104b557600080fd5b5060065461039e906001600160a01b031681565b3480156104d557600080fd5b5061035a6104e436600461325e565b611088565b3480156104f557600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052957600080fd5b506103c760095481565b34801561053f57600080fd5b506103c760125481565b34801561055557600080fd5b506103c7610564366004613465565b6001600160a01b031660009081526020819052604090205490565b34801561058b57600080fd5b5061040b6110c4565b3480156105a057600080fd5b5061040b611138565b3480156105b557600080fd5b5061040b6105c43660046134b0565b61119c565b3480156105d557600080fd5b506103c7600b5481565b3480156105eb57600080fd5b506103c7600f5481565b34801561060157600080fd5b5061040b6106103660046134e9565b611288565b34801561062157600080fd5b5061040b610630366004613489565b61132b565b34801561064157600080fd5b5061035a610650366004613515565b61144c565b34801561066157600080fd5b506103c760085481565b34801561067757600080fd5b506005546001600160a01b031661039e565b34801561069557600080fd5b5061040b6106a4366004613465565b6115fd565b3480156106b557600080fd5b506103c760135481565b3480156106cb57600080fd5b506103c76106da366004613465565b601d6020526000908152604090205481565b3480156106f857600080fd5b506103246116d5565b34801561070d57600080fd5b5061040b61071c3660046134b0565b6116e4565b34801561072d57600080fd5b5061035a61073c36600461325e565b6117c4565b34801561074d57600080fd5b5061035a61075c36600461325e565b61185d565b34801561076d57600080fd5b506103c7600a5481565b34801561078357600080fd5b506103c760115481565b34801561079957600080fd5b5061040b6107a83660046134b0565b61186a565b3480156107b957600080fd5b5061040b6107c83660046134e9565b6118f3565b3480156107d957600080fd5b5061040b6107e8366004613489565b611994565b3480156107f957600080fd5b5061035a610808366004613465565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b5061040b610838366004613543565b611a92565b34801561084957600080fd5b5060075461039e906001600160a01b031681565b34801561086957600080fd5b5061040b610878366004613489565b611b24565b34801561088957600080fd5b506103c7600e5481565b34801561089f57600080fd5b5061040b6108ae366004613489565b611cbd565b3480156108bf57600080fd5b506103c76108ce366004613515565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090557600080fd5b5061040b611db1565b34801561091a57600080fd5b5061040b610929366004613543565b611dea565b34801561093a57600080fd5b506103c760105481565b34801561095057600080fd5b5061040b61095f366004613465565b611e7c565b34801561097057600080fd5b5061040b611f67565b34801561098557600080fd5b506103c760145481565b60606003805461099e90613580565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613580565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e338484611fde565b50600192915050565b6005546001600160a01b03163314610a6a5760405162461bcd60e51b8152600401610a61906135bb565b60405180910390fd5b8051825114610abb5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610b2b5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a61565b60005b8251811015610b9957610b8733848381518110610b4d57610b4d6135f0565b6020026020010151848481518110610b6757610b676135f0565b6020026020010151670de0b6b3a7640000610b82919061361c565b612102565b80610b918161363b565b915050610b2e565b505050565b6000610bab848484612102565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a61565b610c3d8533858403611fde565b506001949350505050565b6005546001600160a01b03163314610c725760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116610cd85760405162461bcd60e51b815260206004820152602760248201527f5f646576656c6f706d656e744164647265737320616464726573732063616e6e60448201526606f7420626520360cc1b6064820152608401610a61565b600780546001600160a01b0319166001600160a01b0383169081179091556040517e9301a7a046a65d0304006b0bfee72798e7e8c804b21a3d33e0838d87680e9d90600090a250565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8610d6060025490565b610d6b90600161361c565b610d759190613656565b610d7f9190613656565b811015610dce5760405162461bcd60e51b815260206004820152601e60248201527f4d61782062757920616d6f756e74206c6f776572207468616e20302e312500006044820152606401610a61565b610de081670de0b6b3a764000061361c565b60088190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a61906135bb565b8051825114610e975760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610f045760405162461bcd60e51b815260206004820152603360248201527f43616e206f6e6c79206c6f636b203230302077616c6c657473207065722074786044820152726e2064756520746f20676173206c696d69747360681b6064820152608401610a61565b60005b8251811015610b99576000610f4a848381518110610f2757610f276135f0565b60200260200101516001600160a01b031660009081526020819052604090205490565b11610f835760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a61565b42601d6000858481518110610f9a57610f9a6135f0565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054106110015760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b1bd8dad95960921b6044820152606401610a61565b818181518110611013576110136135f0565b602002602001015162015180611029919061361c565b6110339042613678565b601d6000858481518110611049576110496135f0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806110809061363b565b915050610f07565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2e9185906110bf908690613678565b611fde565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a61906135bb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111625760405162461bcd60e51b8152600401610a61906135bb565b6007805462ff00ff60a81b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a61906135bb565b8061125d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561125d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a61565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112b25760405162461bcd60e51b8152600401610a61906135bb565b600f83905560108290556011819055806112cc8385613678565b6112d69190613678565b600e81905560091015610b995760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203925206f72206c657373000000006044820152606401610a61565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610a61906135bb565b600754600160b01b900460ff16156113af5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a61565b60058111156114005760405162461bcd60e51b815260206004820152601a60248201527f4d757374206265206c657373207468616e203520626c6f636b730000000000006044820152606401610a61565b6007805462ff00ff60a01b19166201000160a01b17905543600b55600c8190556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114795760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b0383166114cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613690565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136a9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a61565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b60606004805461099e90613580565b6005546001600160a01b0316331461170e5760405162461bcd60e51b8152600401610a61906135bb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156117b65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a61565b6117c08282612b28565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a61565b6118533385858403611fde565b5060019392505050565b6000610a2e338484612102565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610a61906135bb565b601383905560148290556015819055806119378385613678565b6119419190613678565b60128181551015610b995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313825206f72206c6573730000006044820152606401610a61565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e86119d360025490565b6119de90600361361c565b6119e89190613656565b6119f29190613656565b811015611a4b5760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c657420616d6f756e74206c6f776572207468616e20302e336044820152602560f81b6064820152608401610a61565b611a5d81670de0b6b3a764000061361c565b600a8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e11565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576001601e6000848481518110611ae057611ae06135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b1c8161363b565b915050611abf565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a7640000620186a0611b6460025490565b611b6f90600161361c565b611b799190613656565b611b839190613656565b811015611be35760405162461bcd60e51b815260206004820152602860248201527f5468726573686f6c64206c6f776572207468616e20302e3030312520746f74616044820152676c20737570706c7960c01b6064820152608401610a61565b670de0b6b3a76400006103e8611bf860025490565b611c0390600161361c565b611c0d9190613656565b611c179190613656565b811115611c765760405162461bcd60e51b815260206004820152602760248201527f5468726573686f6c6420686967686572207468616e20302e312520746f74616c60448201526620737570706c7960c81b6064820152608401610a61565b611c8881670de0b6b3a764000061361c565b600d8190556040519081527f6d2120e4008cf6f7ae5156e6e187d00ab7959b8a693490358ec2da589a6bd36490602001610e11565b6005546001600160a01b03163314611ce75760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8611cfc60025490565b611d0790600161361c565b611d119190613656565b611d1b9190613656565b811015611d6a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782073656c6c20616d6f756e74206c6f776572207468616e20302e3125006044820152606401610a61565b611d7c81670de0b6b3a764000061361c565b60098190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e11565b6005546001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a61906135bb565b6007805460ff60b81b19169055565b6005546001600160a01b03163314611e145760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576000601e6000848481518110611e3857611e386135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e748161363b565b915050611e17565b6005546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116611f0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a61565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f915760405162461bcd60e51b8152600401610a61906135bb565b604051600090339047908381818185875af1925050503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b50505050565b6001600160a01b0383166120405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a61565b6001600160a01b0382166120a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a61565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121285760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b03821661214e5760405162461bcd60e51b8152600401610a619061370b565b6000811161219e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a61565b6001600160a01b0383166000908152601d602052604090205442116121f35760405162461bcd60e51b815260206004820152600b60248201526a4c6f636b2061637469766560a81b6044820152606401610a61565b6001600160a01b0383166000908152601e602052604090205460ff16156122455760405162461bcd60e51b81526020600482015260066024820152654775696c747960d01b6044820152606401610a61565b600754600160a81b900460ff161561274d576005546001600160a01b0384811691161480159061228357506005546001600160a01b03838116911614155b801561229757506001600160a01b03821615155b80156122ae57506001600160a01b03821661dead14155b1561274d57600754600160b01b900460ff1661237c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415801561233857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b61237c5760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b6044820152606401610a61565b600754600160b81b900460ff16156124dd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415801561240257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156124dd5761241260014361374e565b326000908152601c6020526040902054108015612450575061243560014361374e565b6001600160a01b0383166000908152601c6020526040902054105b6124b85760405162461bcd60e51b815260206004820152603360248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527232b217102a393c9030b3b0b4b7103630ba32b960691b6064820152608401610a61565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff16801561251e57506001600160a01b0382166000908152601a602052604090205460ff16155b156125f3576008548111156125855760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152666d61782062757960c81b6064820152608401610a61565b600a546001600160a01b0383166000908152602081905260409020546125ab9083613678565b11156125ee5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b61274d565b6001600160a01b0382166000908152601b602052604090205460ff16801561263457506001600160a01b0383166000908152601a602052604090205460ff16155b1561269d576009548111156125ee5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015268081b585e081cd95b1b60ba1b6064820152608401610a61565b6001600160a01b0382166000908152601a602052604090205460ff161580156126df57506001600160a01b0383166000908152601a602052604090205460ff16155b1561274d57600a546001600160a01b03831660009081526020819052604090205461270a9083613678565b111561274d5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b30600090815260208190526040902054600d548110801590819061277a5750600754600160a01b900460ff165b801561279f57506001600160a01b0385166000908152601b602052604090205460ff16155b80156127c457506001600160a01b03851660009081526019602052604090205460ff16155b80156127e957506001600160a01b03841660009081526019602052604090205460ff16155b156127f6576127f6612b92565b6001600160a01b03851660009081526019602052604090205460ff1615801561283857506001600160a01b03841660009081526019602052604090205460ff16155b15612b1657600080600c54600b5443612851919061374e565b1115801561287757506001600160a01b0387166000908152601b602052604090205460ff165b156128b357606461288986606361361c565b6128939190613656565b6006549091506128ae9088906001600160a01b031683612d9f565b612aec565b6001600160a01b0387166000908152601b602052604090205460ff1680156128dd57506000600e54115b15612a0f57600c54600b546128f2904361374e565b6128fc919061374e565b6001141561295c576001600160a01b0386166000818152601e6020908152604091829020805460ff1916600117905590519182527fed275327edb02428d527ce974537501dfa0184b6cd668977aa732bdfd3f3504b910160405180910390a15b6064600e548661296c919061361c565b6129769190613656565b9150600e5460105483612989919061361c565b6129939190613656565b601760008282546129a49190613678565b9091555050600e54600f546129b9908461361c565b6129c39190613656565b601660008282546129d49190613678565b9091555050600e546011546129e9908461361c565b6129f39190613656565b60186000828254612a049190613678565b90915550612aec9050565b6001600160a01b0386166000908152601b602052604090205460ff168015612a3957506000601254115b15612aec57606460125486612a4e919061361c565b612a589190613656565b915060125460145483612a6b919061361c565b612a759190613656565b60176000828254612a869190613678565b9091555050601254601354612a9b908461361c565b612aa59190613656565b60166000828254612ab69190613678565b9091555050601254601554612acb908461361c565b612ad59190613656565b60186000828254612ae69190613678565b90915550505b8115612afd57612afd873084612d9f565b612b078183613678565b612b11908661374e565b945050505b612b21858585612d9f565b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055612b568282612ef4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601854601654601754612bb99190613678565b612bc39190613678565b9050811580612bd0575080155b15612bd9575050565b600d54612be790600a61361c565b821115612bff57600d54612bfc90600a61361c565b91505b60008060028360175486612c13919061361c565b612c1d9190613656565b612c279190613656565b9050612c3b612c36828661374e565b612f57565b60175447908190600090612c5190600290613656565b612c5b908761374e565b601654612c68908561361c565b612c729190613656565b905060006002601754612c859190613656565b612c8f908861374e565b601854612c9c908661361c565b612ca69190613656565b9050612cb28183613678565b612cbc908461374e565b60006017819055601681905560185592508415801590612cdc5750600083115b15612ceb57612ceb8584613117565b6007546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50506006546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b5050505050505050505050565b6001600160a01b038316612dc55760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b038216612deb5760405162461bcd60e51b8152600401610a619061370b565b6001600160a01b03831660009081526020819052604090205481811015612e635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a61565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e9a908490613678565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8c57612f8c6135f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190613765565b81600181518110613041576130416135f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061308c307f000000000000000000000000000000000000000000000000000000000000000084611fde565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906130e1908590600090869030904290600401613782565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050505050565b613142307f000000000000000000000000000000000000000000000000000000000000000084611fde565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156131cc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2191906137f3565b600060208083528351808285015260005b8181101561321e57858101830151858201604001528201613202565b81811115613230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461325b57600080fd5b50565b6000806040838503121561327157600080fd5b823561327c81613246565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c9576132c961328a565b604052919050565b600067ffffffffffffffff8211156132eb576132eb61328a565b5060051b60200190565b600082601f83011261330657600080fd5b8135602061331b613316836132d1565b6132a0565b82815260059290921b8401810191818101908684111561333a57600080fd5b8286015b8481101561335e57803561335181613246565b835291830191830161333e565b509695505050505050565b6000806040838503121561337c57600080fd5b823567ffffffffffffffff8082111561339457600080fd5b6133a0868387016132f5565b93506020915081850135818111156133b757600080fd5b85019050601f810186136133ca57600080fd5b80356133d8613316826132d1565b81815260059190911b820183019083810190888311156133f757600080fd5b928401925b82841015613415578335825292840192908401906133fc565b80955050505050509250929050565b60008060006060848603121561343957600080fd5b833561344481613246565b9250602084013561345481613246565b929592945050506040919091013590565b60006020828403121561347757600080fd5b813561348281613246565b9392505050565b60006020828403121561349b57600080fd5b5035919050565b801515811461325b57600080fd5b600080604083850312156134c357600080fd5b82356134ce81613246565b915060208301356134de816134a2565b809150509250929050565b6000806000606084860312156134fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561352857600080fd5b823561353381613246565b915060208301356134de81613246565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b613578848285016132f5565b949350505050565b600181811c9082168061359457607f821691505b602082108114156135b557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561363657613636613606565b500290565b600060001982141561364f5761364f613606565b5060010190565b60008261367357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561368b5761368b613606565b500190565b6000602082840312156136a257600080fd5b5051919050565b6000602082840312156136bb57600080fd5b8151613482816134a2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561376057613760613606565b500390565b60006020828403121561377757600080fd5b815161348281613246565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d25784516001600160a01b0316835293830193918301916001016137ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220432fcafe9ea7e066dda5c15df54afdadba92b33aa249bf17d74a2665f90dbd3f64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638da5cb5b11610190578063c3e9c34f116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092e578063f2fde38b14610944578063f5648a4f14610964578063f63743421461097957600080fd5b8063dd62ed3e146108b3578063e884f260146108f9578063ec238a811461090e57600080fd5b8063c3e9c34f146107ed578063c96fd36d1461081d578063d1a0c9461461083d578063d257b34f1461085d578063d85ba0631461087d578063dc3f0d0f1461089357600080fd5b8063a457c2d711610149578063b204141111610123578063b204141114610777578063c02466681461078d578063c17b5b8c146107ad578063c18bc195146107cd57600080fd5b8063a457c2d714610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b80638da5cb5b1461066b578063906e9dd01461068957806392136913146106a9578063930a6d07146106bf57806395d89b41146106ec5780639a7a23d61461070157600080fd5b806349bd5a5e1161024f5780637571336a116102085780638095d564116101e25780638095d564146105f557806382aa7c68146106155780638366e79a1461063557806388e765ff1461065557600080fd5b80637571336a146105a9578063764556dc146105c95780637bce5a04146105df57600080fd5b806349bd5a5e146104e957806366d602ae1461051d5780636a486a8e1461053357806370a0823114610549578063715018a61461057f578063751039fc1461059457600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce5671461046d5780633547800a146104895780633936e8b9146104a957806339509351146104c957600080fd5b806323b872dd1461040d57806329b1c15c1461042d5780632be32b611461044d57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806318a94cf1146103d55780632307b441146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098f565b60405161033191906131f1565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461325e565b610a21565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506002545b604051908152602001610331565b3480156103e157600080fd5b506103c760155481565b3480156103f757600080fd5b5061040b610406366004613369565b610a37565b005b34801561041957600080fd5b5061035a610428366004613424565b610b9e565b34801561043957600080fd5b5061040b610448366004613465565b610c48565b34801561045957600080fd5b5061040b610468366004613489565b610d21565b34801561047957600080fd5b5060405160128152602001610331565b34801561049557600080fd5b5061040b6104a4366004613369565b610e1c565b3480156104b557600080fd5b5060065461039e906001600160a01b031681565b3480156104d557600080fd5b5061035a6104e436600461325e565b611088565b3480156104f557600080fd5b5061039e7f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe81565b34801561052957600080fd5b506103c760095481565b34801561053f57600080fd5b506103c760125481565b34801561055557600080fd5b506103c7610564366004613465565b6001600160a01b031660009081526020819052604090205490565b34801561058b57600080fd5b5061040b6110c4565b3480156105a057600080fd5b5061040b611138565b3480156105b557600080fd5b5061040b6105c43660046134b0565b61119c565b3480156105d557600080fd5b506103c7600b5481565b3480156105eb57600080fd5b506103c7600f5481565b34801561060157600080fd5b5061040b6106103660046134e9565b611288565b34801561062157600080fd5b5061040b610630366004613489565b61132b565b34801561064157600080fd5b5061035a610650366004613515565b61144c565b34801561066157600080fd5b506103c760085481565b34801561067757600080fd5b506005546001600160a01b031661039e565b34801561069557600080fd5b5061040b6106a4366004613465565b6115fd565b3480156106b557600080fd5b506103c760135481565b3480156106cb57600080fd5b506103c76106da366004613465565b601d6020526000908152604090205481565b3480156106f857600080fd5b506103246116d5565b34801561070d57600080fd5b5061040b61071c3660046134b0565b6116e4565b34801561072d57600080fd5b5061035a61073c36600461325e565b6117c4565b34801561074d57600080fd5b5061035a61075c36600461325e565b61185d565b34801561076d57600080fd5b506103c7600a5481565b34801561078357600080fd5b506103c760115481565b34801561079957600080fd5b5061040b6107a83660046134b0565b61186a565b3480156107b957600080fd5b5061040b6107c83660046134e9565b6118f3565b3480156107d957600080fd5b5061040b6107e8366004613489565b611994565b3480156107f957600080fd5b5061035a610808366004613465565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b5061040b610838366004613543565b611a92565b34801561084957600080fd5b5060075461039e906001600160a01b031681565b34801561086957600080fd5b5061040b610878366004613489565b611b24565b34801561088957600080fd5b506103c7600e5481565b34801561089f57600080fd5b5061040b6108ae366004613489565b611cbd565b3480156108bf57600080fd5b506103c76108ce366004613515565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090557600080fd5b5061040b611db1565b34801561091a57600080fd5b5061040b610929366004613543565b611dea565b34801561093a57600080fd5b506103c760105481565b34801561095057600080fd5b5061040b61095f366004613465565b611e7c565b34801561097057600080fd5b5061040b611f67565b34801561098557600080fd5b506103c760145481565b60606003805461099e90613580565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613580565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e338484611fde565b50600192915050565b6005546001600160a01b03163314610a6a5760405162461bcd60e51b8152600401610a61906135bb565b60405180910390fd5b8051825114610abb5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610b2b5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a61565b60005b8251811015610b9957610b8733848381518110610b4d57610b4d6135f0565b6020026020010151848481518110610b6757610b676135f0565b6020026020010151670de0b6b3a7640000610b82919061361c565b612102565b80610b918161363b565b915050610b2e565b505050565b6000610bab848484612102565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a61565b610c3d8533858403611fde565b506001949350505050565b6005546001600160a01b03163314610c725760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116610cd85760405162461bcd60e51b815260206004820152602760248201527f5f646576656c6f706d656e744164647265737320616464726573732063616e6e60448201526606f7420626520360cc1b6064820152608401610a61565b600780546001600160a01b0319166001600160a01b0383169081179091556040517e9301a7a046a65d0304006b0bfee72798e7e8c804b21a3d33e0838d87680e9d90600090a250565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8610d6060025490565b610d6b90600161361c565b610d759190613656565b610d7f9190613656565b811015610dce5760405162461bcd60e51b815260206004820152601e60248201527f4d61782062757920616d6f756e74206c6f776572207468616e20302e312500006044820152606401610a61565b610de081670de0b6b3a764000061361c565b60088190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a61906135bb565b8051825114610e975760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610f045760405162461bcd60e51b815260206004820152603360248201527f43616e206f6e6c79206c6f636b203230302077616c6c657473207065722074786044820152726e2064756520746f20676173206c696d69747360681b6064820152608401610a61565b60005b8251811015610b99576000610f4a848381518110610f2757610f276135f0565b60200260200101516001600160a01b031660009081526020819052604090205490565b11610f835760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a61565b42601d6000858481518110610f9a57610f9a6135f0565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054106110015760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b1bd8dad95960921b6044820152606401610a61565b818181518110611013576110136135f0565b602002602001015162015180611029919061361c565b6110339042613678565b601d6000858481518110611049576110496135f0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806110809061363b565b915050610f07565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2e9185906110bf908690613678565b611fde565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a61906135bb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111625760405162461bcd60e51b8152600401610a61906135bb565b6007805462ff00ff60a81b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a61906135bb565b8061125d577f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316826001600160a01b0316141561125d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a61565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112b25760405162461bcd60e51b8152600401610a61906135bb565b600f83905560108290556011819055806112cc8385613678565b6112d69190613678565b600e81905560091015610b995760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203925206f72206c657373000000006044820152606401610a61565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610a61906135bb565b600754600160b01b900460ff16156113af5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a61565b60058111156114005760405162461bcd60e51b815260206004820152601a60248201527f4d757374206265206c657373207468616e203520626c6f636b730000000000006044820152606401610a61565b6007805462ff00ff60a01b19166201000160a01b17905543600b55600c8190556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114795760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b0383166114cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613690565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136a9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a61565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b60606004805461099e90613580565b6005546001600160a01b0316331461170e5760405162461bcd60e51b8152600401610a61906135bb565b7f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316826001600160a01b031614156117b65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a61565b6117c08282612b28565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a61565b6118533385858403611fde565b5060019392505050565b6000610a2e338484612102565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610a61906135bb565b601383905560148290556015819055806119378385613678565b6119419190613678565b60128181551015610b995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313825206f72206c6573730000006044820152606401610a61565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e86119d360025490565b6119de90600361361c565b6119e89190613656565b6119f29190613656565b811015611a4b5760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c657420616d6f756e74206c6f776572207468616e20302e336044820152602560f81b6064820152608401610a61565b611a5d81670de0b6b3a764000061361c565b600a8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e11565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576001601e6000848481518110611ae057611ae06135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b1c8161363b565b915050611abf565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a7640000620186a0611b6460025490565b611b6f90600161361c565b611b799190613656565b611b839190613656565b811015611be35760405162461bcd60e51b815260206004820152602860248201527f5468726573686f6c64206c6f776572207468616e20302e3030312520746f74616044820152676c20737570706c7960c01b6064820152608401610a61565b670de0b6b3a76400006103e8611bf860025490565b611c0390600161361c565b611c0d9190613656565b611c179190613656565b811115611c765760405162461bcd60e51b815260206004820152602760248201527f5468726573686f6c6420686967686572207468616e20302e312520746f74616c60448201526620737570706c7960c81b6064820152608401610a61565b611c8881670de0b6b3a764000061361c565b600d8190556040519081527f6d2120e4008cf6f7ae5156e6e187d00ab7959b8a693490358ec2da589a6bd36490602001610e11565b6005546001600160a01b03163314611ce75760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8611cfc60025490565b611d0790600161361c565b611d119190613656565b611d1b9190613656565b811015611d6a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782073656c6c20616d6f756e74206c6f776572207468616e20302e3125006044820152606401610a61565b611d7c81670de0b6b3a764000061361c565b60098190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e11565b6005546001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a61906135bb565b6007805460ff60b81b19169055565b6005546001600160a01b03163314611e145760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576000601e6000848481518110611e3857611e386135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e748161363b565b915050611e17565b6005546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116611f0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a61565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f915760405162461bcd60e51b8152600401610a61906135bb565b604051600090339047908381818185875af1925050503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b50505050565b6001600160a01b0383166120405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a61565b6001600160a01b0382166120a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a61565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121285760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b03821661214e5760405162461bcd60e51b8152600401610a619061370b565b6000811161219e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a61565b6001600160a01b0383166000908152601d602052604090205442116121f35760405162461bcd60e51b815260206004820152600b60248201526a4c6f636b2061637469766560a81b6044820152606401610a61565b6001600160a01b0383166000908152601e602052604090205460ff16156122455760405162461bcd60e51b81526020600482015260066024820152654775696c747960d01b6044820152606401610a61565b600754600160a81b900460ff161561274d576005546001600160a01b0384811691161480159061228357506005546001600160a01b03838116911614155b801561229757506001600160a01b03821615155b80156122ae57506001600160a01b03821661dead14155b1561274d57600754600160b01b900460ff1661237c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b03161415801561233857507f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316836001600160a01b031614155b61237c5760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b6044820152606401610a61565b600754600160b81b900460ff16156124dd577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b03161415801561240257507f0000000000000000000000006e7e72852e1abf1b5b3f514137b294341aef7cbe6001600160a01b0316826001600160a01b031614155b156124dd5761241260014361374e565b326000908152601c6020526040902054108015612450575061243560014361374e565b6001600160a01b0383166000908152601c6020526040902054105b6124b85760405162461bcd60e51b815260206004820152603360248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527232b217102a393c9030b3b0b4b7103630ba32b960691b6064820152608401610a61565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff16801561251e57506001600160a01b0382166000908152601a602052604090205460ff16155b156125f3576008548111156125855760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152666d61782062757960c81b6064820152608401610a61565b600a546001600160a01b0383166000908152602081905260409020546125ab9083613678565b11156125ee5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b61274d565b6001600160a01b0382166000908152601b602052604090205460ff16801561263457506001600160a01b0383166000908152601a602052604090205460ff16155b1561269d576009548111156125ee5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015268081b585e081cd95b1b60ba1b6064820152608401610a61565b6001600160a01b0382166000908152601a602052604090205460ff161580156126df57506001600160a01b0383166000908152601a602052604090205460ff16155b1561274d57600a546001600160a01b03831660009081526020819052604090205461270a9083613678565b111561274d5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b30600090815260208190526040902054600d548110801590819061277a5750600754600160a01b900460ff165b801561279f57506001600160a01b0385166000908152601b602052604090205460ff16155b80156127c457506001600160a01b03851660009081526019602052604090205460ff16155b80156127e957506001600160a01b03841660009081526019602052604090205460ff16155b156127f6576127f6612b92565b6001600160a01b03851660009081526019602052604090205460ff1615801561283857506001600160a01b03841660009081526019602052604090205460ff16155b15612b1657600080600c54600b5443612851919061374e565b1115801561287757506001600160a01b0387166000908152601b602052604090205460ff165b156128b357606461288986606361361c565b6128939190613656565b6006549091506128ae9088906001600160a01b031683612d9f565b612aec565b6001600160a01b0387166000908152601b602052604090205460ff1680156128dd57506000600e54115b15612a0f57600c54600b546128f2904361374e565b6128fc919061374e565b6001141561295c576001600160a01b0386166000818152601e6020908152604091829020805460ff1916600117905590519182527fed275327edb02428d527ce974537501dfa0184b6cd668977aa732bdfd3f3504b910160405180910390a15b6064600e548661296c919061361c565b6129769190613656565b9150600e5460105483612989919061361c565b6129939190613656565b601760008282546129a49190613678565b9091555050600e54600f546129b9908461361c565b6129c39190613656565b601660008282546129d49190613678565b9091555050600e546011546129e9908461361c565b6129f39190613656565b60186000828254612a049190613678565b90915550612aec9050565b6001600160a01b0386166000908152601b602052604090205460ff168015612a3957506000601254115b15612aec57606460125486612a4e919061361c565b612a589190613656565b915060125460145483612a6b919061361c565b612a759190613656565b60176000828254612a869190613678565b9091555050601254601354612a9b908461361c565b612aa59190613656565b60166000828254612ab69190613678565b9091555050601254601554612acb908461361c565b612ad59190613656565b60186000828254612ae69190613678565b90915550505b8115612afd57612afd873084612d9f565b612b078183613678565b612b11908661374e565b945050505b612b21858585612d9f565b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055612b568282612ef4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601854601654601754612bb99190613678565b612bc39190613678565b9050811580612bd0575080155b15612bd9575050565b600d54612be790600a61361c565b821115612bff57600d54612bfc90600a61361c565b91505b60008060028360175486612c13919061361c565b612c1d9190613656565b612c279190613656565b9050612c3b612c36828661374e565b612f57565b60175447908190600090612c5190600290613656565b612c5b908761374e565b601654612c68908561361c565b612c729190613656565b905060006002601754612c859190613656565b612c8f908861374e565b601854612c9c908661361c565b612ca69190613656565b9050612cb28183613678565b612cbc908461374e565b60006017819055601681905560185592508415801590612cdc5750600083115b15612ceb57612ceb8584613117565b6007546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50506006546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b5050505050505050505050565b6001600160a01b038316612dc55760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b038216612deb5760405162461bcd60e51b8152600401610a619061370b565b6001600160a01b03831660009081526020819052604090205481811015612e635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a61565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e9a908490613678565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8c57612f8c6135f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190613765565b81600181518110613041576130416135f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061308c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fde565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906130e1908590600090869030904290600401613782565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050505050565b613142307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fde565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156131cc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2191906137f3565b600060208083528351808285015260005b8181101561321e57858101830151858201604001528201613202565b81811115613230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461325b57600080fd5b50565b6000806040838503121561327157600080fd5b823561327c81613246565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c9576132c961328a565b604052919050565b600067ffffffffffffffff8211156132eb576132eb61328a565b5060051b60200190565b600082601f83011261330657600080fd5b8135602061331b613316836132d1565b6132a0565b82815260059290921b8401810191818101908684111561333a57600080fd5b8286015b8481101561335e57803561335181613246565b835291830191830161333e565b509695505050505050565b6000806040838503121561337c57600080fd5b823567ffffffffffffffff8082111561339457600080fd5b6133a0868387016132f5565b93506020915081850135818111156133b757600080fd5b85019050601f810186136133ca57600080fd5b80356133d8613316826132d1565b81815260059190911b820183019083810190888311156133f757600080fd5b928401925b82841015613415578335825292840192908401906133fc565b80955050505050509250929050565b60008060006060848603121561343957600080fd5b833561344481613246565b9250602084013561345481613246565b929592945050506040919091013590565b60006020828403121561347757600080fd5b813561348281613246565b9392505050565b60006020828403121561349b57600080fd5b5035919050565b801515811461325b57600080fd5b600080604083850312156134c357600080fd5b82356134ce81613246565b915060208301356134de816134a2565b809150509250929050565b6000806000606084860312156134fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561352857600080fd5b823561353381613246565b915060208301356134de81613246565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b613578848285016132f5565b949350505050565b600181811c9082168061359457607f821691505b602082108114156135b557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561363657613636613606565b500290565b600060001982141561364f5761364f613606565b5060010190565b60008261367357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561368b5761368b613606565b500190565b6000602082840312156136a257600080fd5b5051919050565b6000602082840312156136bb57600080fd5b8151613482816134a2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561376057613760613606565b500390565b60006020828403121561377757600080fd5b815161348281613246565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d25784516001600160a01b0316835293830193918301916001016137ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220432fcafe9ea7e066dda5c15df54afdadba92b33aa249bf17d74a2665f90dbd3f64736f6c634300080b0033

Deployed Bytecode Sourcemap

9435:17876:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4073:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:169;;;;;;;;;;-1:-1:-1;4987:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;4987:169:0;1072:187:1;9497:43:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1446:32:1;;;1428:51;;1416:2;1401:18;9497:43:0;1264:221:1;4394:108:0;;;;;;;;;;-1:-1:-1;4482:12:0;;4394:108;;;1636:25:1;;;1624:2;1609:18;4394:108:0;1490:177:1;10332:33:0;;;;;;;;;;;;;;;;23151:450;;;;;;;;;;-1:-1:-1;23151:450:0;;;;;:::i;:::-;;:::i;:::-;;5164:492;;;;;;;;;;-1:-1:-1;5164:492:0;;;;;:::i;:::-;;:::i;27003:305::-;;;;;;;;;;-1:-1:-1;27003:305:0;;;;;:::i;:::-;;:::i;21642:271::-;;;;;;;;;;-1:-1:-1;21642:271:0;;;;;:::i;:::-;;:::i;4293:93::-;;;;;;;;;;-1:-1:-1;4293:93:0;;4376:2;5197:36:1;;5185:2;5170:18;4293:93:0;5055:184:1;21031:573:0;;;;;;;;;;-1:-1:-1;21031:573:0;;;;;:::i;:::-;;:::i;9592:31::-;;;;;;;;;;-1:-1:-1;9592:31:0;;;;-1:-1:-1;;;;;9592:31:0;;;5664:215;;;;;;;;;;-1:-1:-1;5664:215:0;;;;;:::i;:::-;;:::i;9547:38::-;;;;;;;;;;;;;;;9876:28;;;;;;;;;;;;;;;;10221;;;;;;;;;;;;;;;;4510:127;;;;;;;;;;-1:-1:-1;4510:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4611:18:0;4584:7;4611:18;;;;;;;;;;;;4510:127;8154:150;;;;;;;;;;;;;:::i;20238:153::-;;;;;;;;;;;;;:::i;13468:269::-;;;;;;;;;;-1:-1:-1;13468:269:0;;;;;:::i;:::-;;:::i;9948:38::-;;;;;;;;;;;;;;;;10108:30;;;;;;;;;;;;;;;;23637:399;;;;;;;;;;-1:-1:-1;23637:399:0;;;;;:::i;:::-;;:::i;19836:360::-;;;;;;;;;;-1:-1:-1;19836:360:0;;;;;:::i;:::-;;:::i;26034:381::-;;;;;;;;;;-1:-1:-1;26034:381:0;;;;;:::i;:::-;;:::i;9842:27::-;;;;;;;;;;;;;;;;7940:79;;;;;;;;;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;8005:6:0;7940:79;;26661:289;;;;;;;;;;-1:-1:-1;26661:289:0;;;;;:::i;:::-;;:::i;10256:31::-;;;;;;;;;;;;;;;;10770:50;;;;;;;;;;-1:-1:-1;10770:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;4181:104;;;;;;;;;;;;;:::i;14227:244::-;;;;;;;;;;-1:-1:-1;14227:244:0;;;;;:::i;:::-;;:::i;5887:413::-;;;;;;;;;;-1:-1:-1;5887:413:0;;;;;:::i;:::-;;:::i;4645:175::-;;;;;;;;;;-1:-1:-1;4645:175:0;;;;;:::i;:::-;;:::i;9911:30::-;;;;;;;;;;;;;;;;10182:32;;;;;;;;;;;;;;;;14009:182;;;;;;;;;;-1:-1:-1;14009:182:0;;;;;:::i;:::-;;:::i;24073:410::-;;;;;;;;;;-1:-1:-1;24073:410:0;;;;;:::i;:::-;;:::i;22273:286::-;;;;;;;;;;-1:-1:-1;22273:286:0;;;;;:::i;:::-;;:::i;10827:38::-;;;;;;;;;;-1:-1:-1;10827:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20577:173;;;;;;;;;;-1:-1:-1;20577:173:0;;;;;:::i;:::-;;:::i;9630:33::-;;;;;;;;;;-1:-1:-1;9630:33:0;;;;-1:-1:-1;;;;;9630:33:0;;;22667:415;;;;;;;;;;-1:-1:-1;22667:415:0;;;;;:::i;:::-;;:::i;10074:27::-;;;;;;;;;;;;;;;;21956:276;;;;;;;;;;-1:-1:-1;21956:276:0;;;;;:::i;:::-;;:::i;4828:151::-;;;;;;;;;;-1:-1:-1;4828:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4944:18:0;;;4917:7;4944:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4828:151;20434:98;;;;;;;;;;;;;:::i;20789:177::-;;;;;;;;;;-1:-1:-1;20789:177:0;;;;;:::i;:::-;;:::i;10145:30::-;;;;;;;;;;;;;;;;8312:244;;;;;;;;;;-1:-1:-1;8312:244:0;;;;;:::i;:::-;;:::i;26450:160::-;;;;;;;;;;;;;:::i;10294:31::-;;;;;;;;;;;;;;;;4073:100;4127:13;4160:5;4153:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4073:100;:::o;4987:169::-;5070:4;5087:39;302:10;5110:7;5119:6;5087:8;:39::i;:::-;-1:-1:-1;5144:4:0;4987:169;;;;:::o;23151:450::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;;;;;;;;;23293:15:::1;:22;23275:7;:14;:40;23267:83;;;::::0;-1:-1:-1;;;23267:83:0;;7977:2:1;23267:83:0::1;::::0;::::1;7959:21:1::0;8016:2;7996:18;;;7989:30;8055:32;8035:18;;;8028:60;8105:18;;23267:83:0::1;7775:354:1::0;23267:83:0::1;23386:3;23369:7;:14;:20;23361:87;;;::::0;-1:-1:-1;;;23361:87:0;;8336:2:1;23361:87:0::1;::::0;::::1;8318:21:1::0;8375:2;8355:18;;;8348:30;8414:34;8394:18;;;8387:62;-1:-1:-1;;;8465:18:1;;;8458:52;8527:19;;23361:87:0::1;8134:418:1::0;23361:87:0::1;23465:9;23460:134;23484:7;:14;23480:1;:18;23460:134;;;23520:62;23530:10;23542:7;23550:1;23542:10;;;;;;;;:::i;:::-;;;;;;;23554:15;23570:1;23554:18;;;;;;;;:::i;:::-;;;;;;;23575:6;23554:27;;;;:::i;:::-;23520:9;:62::i;:::-;23500:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23460:134;;;;23151:450:::0;;:::o;5164:492::-;5304:4;5321:36;5331:6;5339:9;5350:6;5321:9;:36::i;:::-;-1:-1:-1;;;;;5397:19:0;;5370:24;5397:19;;;:11;:19;;;;;;;;302:10;5397:33;;;;;;;;5449:26;;;;5441:79;;;;-1:-1:-1;;;5441:79:0;;9336:2:1;5441:79:0;;;9318:21:1;9375:2;9355:18;;;9348:30;9414:34;9394:18;;;9387:62;-1:-1:-1;;;9465:18:1;;;9458:38;9513:19;;5441:79:0;9134:404:1;5441:79:0;5556:57;5565:6;302:10;5606:6;5587:16;:25;5556:8;:57::i;:::-;-1:-1:-1;5644:4:0;;5164:492;-1:-1:-1;;;;5164:492:0:o;27003:305::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27101:33:0;::::1;27093:85;;;::::0;-1:-1:-1;;;27093:85:0;;9745:2:1;27093:85:0::1;::::0;::::1;9727:21:1::0;9784:2;9764:18;;;9757:30;9823:34;9803:18;;;9796:62;-1:-1:-1;;;9874:18:1;;;9867:37;9921:19;;27093:85:0::1;9543:403:1::0;27093:85:0::1;27189:18;:49:::0;;-1:-1:-1;;;;;;27189:49:0::1;-1:-1:-1::0;;;;;27189:49:0;::::1;::::0;;::::1;::::0;;;27254:46:::1;::::0;::::1;::::0;-1:-1:-1;;27254:46:0::1;27003:305:::0;:::o;21642:271::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;21769:6:::1;21761:4;21741:13;4482:12:::0;;;4394:108;21741:13:::1;:17;::::0;21757:1:::1;21741:17;:::i;:::-;:24;;;;:::i;:::-;21740:35;;;;:::i;:::-;21727:9;:48;;21719:91;;;::::0;-1:-1:-1;;;21719:91:0;;10375:2:1;21719:91:0::1;::::0;::::1;10357:21:1::0;10414:2;10394:18;;;10387:30;10453:32;10433:18;;;10426:60;10503:18;;21719:91:0::1;10173:354:1::0;21719:91:0::1;21836:20;:9:::0;21849:6:::1;21836:20;:::i;:::-;21821:12;:35:::0;;;21872:33:::1;::::0;1636:25:1;;;21872:33:0::1;::::0;1624:2:1;1609:18;21872:33:0::1;;;;;;;;21642:271:::0;:::o;21031:573::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;21159:7:::1;:14;21141:7;:14;:32;21133:75;;;::::0;-1:-1:-1;;;21133:75:0;;7977:2:1;21133:75:0::1;::::0;::::1;7959:21:1::0;8016:2;7996:18;;;7989:30;8055:32;8035:18;;;8028:60;8105:18;;21133:75:0::1;7775:354:1::0;21133:75:0::1;21244:3;21227:7;:14;:20;21219:84;;;::::0;-1:-1:-1;;;21219:84:0;;10734:2:1;21219:84:0::1;::::0;::::1;10716:21:1::0;10773:2;10753:18;;;10746:30;10812:34;10792:18;;;10785:62;-1:-1:-1;;;10863:18:1;;;10856:49;10922:19;;21219:84:0::1;10532:415:1::0;21219:84:0::1;21319:6;21314:283;21335:7;:14;21331:1;:18;21314:283;;;21403:1;21379:21;21389:7;21397:1;21389:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4611:18:0;4584:7;4611:18;;;;;;;;;;;;4510:127;21379:21:::1;:25;21371:47;;;::::0;-1:-1:-1;;;21371:47:0;;11154:2:1;21371:47:0::1;::::0;::::1;11136:21:1::0;11193:1;11173:18;;;11166:29;-1:-1:-1;;;11211:18:1;;;11204:39;11260:18;;21371:47:0::1;10952:332:1::0;21371:47:0::1;21470:15;21441:14;:26;21456:7;21464:1;21456:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21441:26:0::1;-1:-1:-1::0;;;;;21441:26:0::1;;;;;;;;;;;;;:44;21433:71;;;::::0;-1:-1:-1;;;21433:71:0;;11491:2:1;21433:71:0::1;::::0;::::1;11473:21:1::0;11530:2;11510:18;;;11503:30;-1:-1:-1;;;11549:18:1;;;11542:44;11603:18;;21433:71:0::1;11289:338:1::0;21433:71:0::1;21566:7;21574:1;21566:10;;;;;;;;:::i;:::-;;;;;;;21579:6;21566:19;;;;:::i;:::-;21548:37;::::0;:15:::1;:37;:::i;:::-;21519:14;:26;21534:7;21542:1;21534:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21519:26:0::1;-1:-1:-1::0;;;;;21519:26:0::1;;;;;;;;;;;;:66;;;;21351:3;;;;;:::i;:::-;;;;21314:283;;5664:215:::0;302:10;5752:4;5801:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5801:34:0;;;;;;;;;;5752:4;;5769:80;;5792:7;;5801:47;;5838:10;;5801:47;:::i;:::-;5769:8;:80::i;8154:150::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;8247:6:::1;::::0;8226:40:::1;::::0;8263:1:::1;::::0;-1:-1:-1;;;;;8247:6:0::1;::::0;8226:40:::1;::::0;8263:1;;8226:40:::1;8277:6;:19:::0;;-1:-1:-1;;;;;;8277:19:0::1;::::0;;8154:150::o;20238:153::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20292:13:::1;:21:::0;;-1:-1:-1;;;;20324:28:0;;;20368:15:::1;::::0;::::1;::::0;20308:5:::1;::::0;20368:15:::1;20238:153::o:0;13468:269::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;13565:4:::1;13560:113;;13604:13;-1:-1:-1::0;;;;;13594:23:0::1;:6;-1:-1:-1::0;;;;;13594:23:0::1;;;13586:75;;;::::0;-1:-1:-1;;;13586:75:0;;11967:2:1;13586:75:0::1;::::0;::::1;11949:21:1::0;12006:2;11986:18;;;11979:30;12045:34;12025:18;;;12018:62;-1:-1:-1;;;12096:18:1;;;12089:37;12143:19;;13586:75:0::1;11765:403:1::0;13586:75:0::1;-1:-1:-1::0;;;;;13683:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;13683:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13468:269::o;23637:399::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;23761:15:::1;:31:::0;;;23803:15:::1;:31:::0;;;23845:17:::1;:35:::0;;;23865:15;23906:33:::1;23821:13:::0;23779;23906:33:::1;:::i;:::-;:53;;;;:::i;:::-;23891:12;:68:::0;;;23994:1:::1;-1:-1:-1::0;23978:17:0::1;23970:58;;;::::0;-1:-1:-1;;;23970:58:0;;12375:2:1;23970:58:0::1;::::0;::::1;12357:21:1::0;12414:2;12394:18;;;12387:30;12453;12433:18;;;12426:58;12501:18;;23970:58:0::1;12173:352:1::0;19836:360:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;19914:14:::1;::::0;-1:-1:-1;;;19914:14:0;::::1;;;19913:15;19905:51;;;::::0;-1:-1:-1;;;19905:51:0;;12732:2:1;19905:51:0::1;::::0;::::1;12714:21:1::0;12771:2;12751:18;;;12744:30;12810:25;12790:18;;;12783:53;12853:18;;19905:51:0::1;12530:347:1::0;19905:51:0::1;19985:1;19975:6;:11;;19967:50;;;::::0;-1:-1:-1;;;19967:50:0;;13084:2:1;19967:50:0::1;::::0;::::1;13066:21:1::0;13123:2;13103:18;;;13096:30;13162:28;13142:18;;;13135:56;13208:18;;19967:50:0::1;12882:350:1::0;19967:50:0::1;20028:14;:21:::0;;-1:-1:-1;;;;20060:18:0;-1:-1:-1;;;20060:18:0;;;20111:12:::1;20089:19;:34:::0;20134:13:::1;:22:::0;;;20172:16:::1;::::0;::::1;::::0;-1:-1:-1;;20172:16:0::1;19836:360:::0;:::o;26034:381::-;8067:6;;26121:10;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26152:20:0;::::1;26144:59;;;::::0;-1:-1:-1;;;26144:59:0;;13439:2:1;26144:59:0::1;::::0;::::1;13421:21:1::0;13478:2;13458:18;;;13451:30;13517:28;13497:18;;;13490:56;13563:18;;26144:59:0::1;13237:350:1::0;26144:59:0::1;26241:39;::::0;-1:-1:-1;;;26241:39:0;;26274:4:::1;26241:39;::::0;::::1;1428:51:1::0;26214:24:0::1;::::0;-1:-1:-1;;;;;26241:24:0;::::1;::::0;::::1;::::0;1401:18:1;;26241:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26299:46;::::0;-1:-1:-1;;;26299:46:0;;-1:-1:-1;;;;;13973:32:1;;;26299:46:0::1;::::0;::::1;13955:51:1::0;14022:18;;;14015:34;;;26214:66:0;;-1:-1:-1;26299:23:0;;::::1;::::0;::::1;::::0;13928:18:1;;26299:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26361;::::0;;-1:-1:-1;;;;;13973:32:1;;13955:51;;14037:2;14022:18;;14015:34;;;26291:54:0;;-1:-1:-1;26361:46:0::1;::::0;13928:18:1;26361:46:0::1;;;;;;;26133:282;26034:381:::0;;;;:::o;26661:289::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26755:31:0;::::1;26747:81;;;::::0;-1:-1:-1;;;26747:81:0;;14512:2:1;26747:81:0::1;::::0;::::1;14494:21:1::0;14551:2;14531:18;;;14524:30;14590:34;14570:18;;;14563:62;-1:-1:-1;;;14641:18:1;;;14634:35;14686:19;;26747:81:0::1;14310:401:1::0;26747:81:0::1;26839:16;:45:::0;;-1:-1:-1;;;;;;26839:45:0::1;-1:-1:-1::0;;;;;26839:45:0;::::1;::::0;;::::1;::::0;;;26900:42:::1;::::0;::::1;::::0;-1:-1:-1;;26900:42:0::1;26661:289:::0;:::o;4181:104::-;4237:13;4270:7;4263:14;;;;;:::i;14227:244::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;14336:13:::1;-1:-1:-1::0;;;;;14328:21:0::1;:4;-1:-1:-1::0;;;;;14328:21:0::1;;;14320:91;;;::::0;-1:-1:-1;;;14320:91:0;;14918:2:1;14320:91:0::1;::::0;::::1;14900:21:1::0;14957:2;14937:18;;;14930:30;14996:34;14976:18;;;14969:62;15067:27;15047:18;;;15040:55;15112:19;;14320:91:0::1;14716:421:1::0;14320:91:0::1;14422:41;14451:4;14457:5;14422:28;:41::i;:::-;14227:244:::0;;:::o;5887:413::-;302:10;5980:4;6024:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6024:34:0;;;;;;;;;;6077:35;;;;6069:85;;;;-1:-1:-1;;;6069:85:0;;15344:2:1;6069:85:0;;;15326:21:1;15383:2;15363:18;;;15356:30;15422:34;15402:18;;;15395:62;-1:-1:-1;;;15473:18:1;;;15466:35;15518:19;;6069:85:0;15142:401:1;6069:85:0;6190:67;302:10;6213:7;6241:15;6222:16;:34;6190:8;:67::i;:::-;-1:-1:-1;6288:4:0;;5887:413;-1:-1:-1;;;5887:413:0:o;4645:175::-;4731:4;4748:42;302:10;4772:9;4783:6;4748:9;:42::i;14009:182::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14094:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14094:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14149:34;;1212:41:1;;;14149:34:0::1;::::0;1185:18:1;14149:34:0::1;;;;;;;14009:182:::0;;:::o;24073:410::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;24198:16:::1;:32:::0;;;24241:16:::1;:32:::0;;;24284:18:::1;:36:::0;;;24305:15;24347:35:::1;24260:13:::0;24217;24347:35:::1;:::i;:::-;:56;;;;:::i;:::-;24331:13;:72:::0;;;-1:-1:-1;24422:19:0::1;24414:61;;;::::0;-1:-1:-1;;;24414:61:0;;15750:2:1;24414:61:0::1;::::0;::::1;15732:21:1::0;15789:2;15769:18;;;15762:30;15828:31;15808:18;;;15801:59;15877:18;;24414:61:0::1;15548:353:1::0;22273:286:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;22403:6:::1;22395:4;22375:13;4482:12:::0;;;4394:108;22375:13:::1;:17;::::0;22391:1:::1;22375:17;:::i;:::-;:24;;;;:::i;:::-;22374:35;;;;:::i;:::-;22361:9;:48;;22353:94;;;::::0;-1:-1:-1;;;22353:94:0;;16108:2:1;22353:94:0::1;::::0;::::1;16090:21:1::0;16147:2;16127:18;;;16120:30;16186:34;16166:18;;;16159:62;-1:-1:-1;;;16237:18:1;;;16230:31;16278:19;;22353:94:0::1;15906:397:1::0;22353:94:0::1;22476:20;:9:::0;22489:6:::1;22476:20;:::i;:::-;22458:15;:38:::0;;;22512:39:::1;::::0;1636:25:1;;;22512:39:0::1;::::0;1624:2:1;1609:18;22512:39:0::1;1490:177:1::0;20577:173:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20659:6:::1;20654:89;20675:5;:12;20671:1;:16;20654:89;;;20727:4;20709:5;:15;20715:5;20721:1;20715:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20709:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20709:15:0;:22;;-1:-1:-1;;20709:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20689:3;::::1;::::0;::::1;:::i;:::-;;;;20654:89;;22667:415:::0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;22801:6:::1;22791;22771:13;4482:12:::0;;;4394:108;22771:13:::1;:17;::::0;22787:1:::1;22771:17;:::i;:::-;:26;;;;:::i;:::-;22770:37;;;;:::i;:::-;22757:9;:50;;22749:103;;;::::0;-1:-1:-1;;;22749:103:0;;16510:2:1;22749:103:0::1;::::0;::::1;16492:21:1::0;16549:2;16529:18;;;16522:30;16588:34;16568:18;;;16561:62;-1:-1:-1;;;16639:18:1;;;16632:38;16687:19;;22749:103:0::1;16308:404:1::0;22749:103:0::1;22913:6;22905:4;22885:13;4482:12:::0;;;4394:108;22885:13:::1;:17;::::0;22901:1:::1;22885:17;:::i;:::-;:24;;;;:::i;:::-;22884:35;;;;:::i;:::-;22871:9;:48;;22863:100;;;::::0;-1:-1:-1;;;22863:100:0;;16919:2:1;22863:100:0::1;::::0;::::1;16901:21:1::0;16958:2;16938:18;;;16931:30;16997:34;16977:18;;;16970:62;-1:-1:-1;;;17048:18:1;;;17041:37;17095:19;;22863:100:0::1;16717:403:1::0;22863:100:0::1;22994:20;:9:::0;23007:6:::1;22994:20;:::i;:::-;22973:18;:41:::0;;;23030:45:::1;::::0;1636:25:1;;;23030:45:0::1;::::0;1624:2:1;1609:18;23030:45:0::1;1490:177:1::0;21956:276:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;22084:6:::1;22076:4;22056:13;4482:12:::0;;;4394:108;22056:13:::1;:17;::::0;22072:1:::1;22056:17;:::i;:::-;:24;;;;:::i;:::-;22055:35;;;;:::i;:::-;22042:9;:48;;22034:92;;;::::0;-1:-1:-1;;;22034:92:0;;17327:2:1;22034:92:0::1;::::0;::::1;17309:21:1::0;17366:2;17346:18;;;17339:30;17405:33;17385:18;;;17378:61;17456:18;;22034:92:0::1;17125:355:1::0;22034:92:0::1;22153:20;:9:::0;22166:6:::1;22153:20;:::i;:::-;22137:13;:36:::0;;;22189:35:::1;::::0;1636:25:1;;;22189:35:0::1;::::0;1624:2:1;1609:18;22189:35:0::1;1490:177:1::0;20434:98:0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20496:20:::1;:28:::0;;-1:-1:-1;;;;20496:28:0::1;::::0;;20434:98::o;20789:177::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;20874:6:::1;20869:90;20890:5;:12;20886:1;:16;20869:90;;;20942:5;20924;:15;20930:5;20936:1;20930:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20924:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20924:15:0;:23;;-1:-1:-1;;20924:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20904:3;::::1;::::0;::::1;:::i;:::-;;;;20869:90;;8312:244:::0;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8401:22:0;::::1;8393:73;;;::::0;-1:-1:-1;;;8393:73:0;;17687:2:1;8393:73:0::1;::::0;::::1;17669:21:1::0;17726:2;17706:18;;;17699:30;17765:34;17745:18;;;17738:62;-1:-1:-1;;;17816:18:1;;;17809:36;17862:19;;8393:73:0::1;17485:402:1::0;8393:73:0::1;8503:6;::::0;8482:38:::1;::::0;-1:-1:-1;;;;;8482:38:0;;::::1;::::0;8503:6:::1;::::0;8482:38:::1;::::0;8503:6:::1;::::0;8482:38:::1;8531:6;:17:::0;;-1:-1:-1;;;;;;8531:17:0::1;-1:-1:-1::0;;;;;8531:17:0;;;::::1;::::0;;;::::1;::::0;;8312:244::o;26450:160::-;8067:6;;-1:-1:-1;;;;;8067:6:0;302:10;8067:22;8059:67;;;;-1:-1:-1;;;8059:67:0;;;;;;;:::i;:::-;26544:58:::1;::::0;26508:12:::1;::::0;26552:10:::1;::::0;26576:21:::1;::::0;26508:12;26544:58;26508:12;26544:58;26576:21;26552:10;26544:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26450:160:0:o;7229:380::-;-1:-1:-1;;;;;7365:19:0;;7357:68;;;;-1:-1:-1;;;7357:68:0;;18304:2:1;7357:68:0;;;18286:21:1;18343:2;18323:18;;;18316:30;18382:34;18362:18;;;18355:62;-1:-1:-1;;;18433:18:1;;;18426:34;18477:19;;7357:68:0;18102:400:1;7357:68:0;-1:-1:-1;;;;;7444:21:0;;7436:68;;;;-1:-1:-1;;;7436:68:0;;18709:2:1;7436:68:0;;;18691:21:1;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;-1:-1:-1;;;18838:18:1;;;18831:32;18880:19;;7436:68:0;18507:398:1;7436:68:0;-1:-1:-1;;;;;7517:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7569:32;;1636:25:1;;;7569:32:0;;1609:18:1;7569:32:0;;;;;;;7229:380;;;:::o;15674:4087::-;-1:-1:-1;;;;;15772:18:0;;15764:68;;;;-1:-1:-1;;;15764:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15851:16:0;;15843:64;;;;-1:-1:-1;;;15843:64:0;;;;;;;:::i;:::-;15935:1;15926:6;:10;15918:52;;;;-1:-1:-1;;;15918:52:0;;19922:2:1;15918:52:0;;;19904:21:1;19961:2;19941:18;;;19934:30;20000:31;19980:18;;;19973:59;20049:18;;15918:52:0;19720:353:1;15918:52:0;-1:-1:-1;;;;;15989:20:0;;;;;;:14;:20;;;;;;16012:15;-1:-1:-1;15981:62:0;;;;-1:-1:-1;;;15981:62:0;;20280:2:1;15981:62:0;;;20262:21:1;20319:2;20299:18;;;20292:30;-1:-1:-1;;;20338:18:1;;;20331:41;20389:18;;15981:62:0;20078:335:1;15981:62:0;-1:-1:-1;;;;;16063:11:0;;;;;;:5;:11;;;;;;;;16062:12;16054:31;;;;-1:-1:-1;;;16054:31:0;;20620:2:1;16054:31:0;;;20602:21:1;20659:1;20639:18;;;20632:29;-1:-1:-1;;;20677:18:1;;;20670:36;20723:18;;16054:31:0;20418:329:1;16054:31:0;16151:13;;-1:-1:-1;;;16151:13:0;;;;16147:1582;;;8005:6;;-1:-1:-1;;;;;16185:15:0;;;8005:6;;16185:15;;;;:32;;-1:-1:-1;8005:6:0;;-1:-1:-1;;;;;16204:13:0;;;8005:6;;16204:13;;16185:32;:52;;;;-1:-1:-1;;;;;;16221:16:0;;;;16185:52;:77;;;;-1:-1:-1;;;;;;16241:21:0;;16255:6;16241:21;;16185:77;16181:1537;;;16288:14;;-1:-1:-1;;;16288:14:0;;;;16283:164;;16351:15;-1:-1:-1;;;;;16335:32:0;:4;-1:-1:-1;;;;;16335:32:0;;;:66;;;;;16387:13;-1:-1:-1;;;;;16371:30:0;:4;-1:-1:-1;;;;;16371:30:0;;;16335:66;16327:100;;;;-1:-1:-1;;;16327:100:0;;20954:2:1;16327:100:0;;;20936:21:1;20993:2;20973:18;;;20966:30;-1:-1:-1;;;21012:18:1;;;21005:51;21073:18;;16327:100:0;20752:345:1;16327:100:0;16471:20;;-1:-1:-1;;;16471:20:0;;;;16467:519;;;16534:15;-1:-1:-1;;;;;16520:30:0;:2;-1:-1:-1;;;;;16520:30:0;;;:62;;;;;16568:13;-1:-1:-1;;;;;16554:28:0;:2;-1:-1:-1;;;;;16554:28:0;;;16520:62;16516:451;;;16661:16;16676:1;16661:12;:16;:::i;:::-;16648:9;16619:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;16716:16:0;16731:1;16716:12;:16;:::i;:::-;-1:-1:-1;;;;;16681:32:0;;;;;;:28;:32;;;;;;:51;16619:113;16611:177;;;;-1:-1:-1;;;16611:177:0;;21434:2:1;16611:177:0;;;21416:21:1;21473:2;21453:18;;;21446:30;21512:34;21492:18;;;21485:62;-1:-1:-1;;;21563:18:1;;;21556:49;21622:19;;16611:177:0;21232:415:1;16611:177:0;16844:9;16815:39;;;;:28;:39;;;;;;16857:12;16815:54;;;;-1:-1:-1;;;;;16896:32:0;;;;;;:47;16516:451;-1:-1:-1;;;;;17010:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;17046:35:0;;;;;;:31;:35;;;;;;;;17045:36;17010:71;17006:697;;;17124:12;;17114:6;:22;;17106:74;;;;-1:-1:-1;;;17106:74:0;;21854:2:1;17106:74:0;;;21836:21:1;21893:2;21873:18;;;21866:30;21932:34;21912:18;;;21905:62;-1:-1:-1;;;21983:18:1;;;21976:37;22030:19;;17106:74:0;21652:403:1;17106:74:0;17237:15;;-1:-1:-1;;;;;4611:18:0;;4584:7;4611:18;;;;;;;;;;;17211:22;;:6;:22;:::i;:::-;:41;;17203:72;;;;-1:-1:-1;;;17203:72:0;;22262:2:1;17203:72:0;;;22244:21:1;22301:2;22281:18;;;22274:30;-1:-1:-1;;;22320:18:1;;;22313:48;22378:18;;17203:72:0;22060:342:1;17203:72:0;17006:697;;;-1:-1:-1;;;;;17305:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;17339:37:0;;;;;;:31;:37;;;;;;;;17338:38;17305:71;17301:402;;;17419:13;;17409:6;:23;;17401:77;;;;-1:-1:-1;;;17401:77:0;;22609:2:1;17401:77:0;;;22591:21:1;22648:2;22628:18;;;22621:30;22687:34;22667:18;;;22660:62;-1:-1:-1;;;22738:18:1;;;22731:39;22787:19;;17401:77:0;22407:405:1;17301:402:0;-1:-1:-1;;;;;17509:35:0;;;;;;:31;:35;;;;;;;;17508:36;:78;;;;-1:-1:-1;;;;;;17549:37:0;;;;;;:31;:37;;;;;;;;17548:38;17508:78;17504:199;;;17645:15;;-1:-1:-1;;;;;4611:18:0;;4584:7;4611:18;;;;;;;;;;;17619:22;;:6;:22;:::i;:::-;:41;;17611:72;;;;-1:-1:-1;;;17611:72:0;;22262:2:1;17611:72:0;;;22244:21:1;22301:2;22281:18;;;22274:30;-1:-1:-1;;;22320:18:1;;;22313:48;22378:18;;17611:72:0;22060:342:1;17611:72:0;17790:4;17741:28;4611:18;;;;;;;;;;;17846;;17822:42;;;;;;;17989:22;;-1:-1:-1;18000:11:0;;-1:-1:-1;;;18000:11:0;;;;17989:22;:58;;;;-1:-1:-1;;;;;;18016:31:0;;;;;;:25;:31;;;;;;;;18015:32;17989:58;:88;;;;-1:-1:-1;;;;;;18052:25:0;;;;;;:19;:25;;;;;;;;18051:26;17989:88;:116;;;;-1:-1:-1;;;;;;18082:23:0;;;;;;:19;:23;;;;;;;;18081:24;17989:116;17985:159;;;18122:10;:8;:10::i;:::-;-1:-1:-1;;;;;18241:25:0;;;;;;:19;:25;;;;;;;;18240:26;:54;;;;-1:-1:-1;;;;;;18271:23:0;;;;;;:19;:23;;;;;;;;18270:24;18240:54;18236:1474;;;18311:12;18342:21;18424:13;;18401:19;;18386:12;:34;;;;:::i;:::-;:51;;:86;;;;-1:-1:-1;;;;;;18441:31:0;;;;;;:25;:31;;;;;;;;18386:86;18382:1153;;;18523:3;18509:11;:6;18518:2;18509:11;:::i;:::-;:17;;;;:::i;:::-;18567:16;;18493:33;;-1:-1:-1;18545:54:0;;18561:4;;-1:-1:-1;;;;;18567:16:0;18493:33;18545:15;:54::i;:::-;18382:1153;;;-1:-1:-1;;;;;18625:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;18675:1;18660:12;;:16;18625:51;18621:914;;;18738:13;;18716:19;;18701:34;;:12;:34;:::i;:::-;:50;;;;:::i;:::-;18755:1;18701:55;18697:162;;;-1:-1:-1;;;;;18781:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;18781:16:0;18793:4;18781:16;;;18825:14;;1428:51:1;;;18825:14:0;;1401:18:1;18825:14:0;;;;;;;18697:162;18905:3;18890:12;;18881:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;18874:34;;18971:12;;18953:15;;18946:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;18924:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;19049:12:0;;19031:15;;19024:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;19002:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;19131:12:0;;19111:17;;19104:24;;:4;:24;:::i;:::-;:39;;;;:::i;:::-;19080:20;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;18621:914:0;;-1:-1:-1;18621:914:0;;-1:-1:-1;;;;;19169:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;19218:1;19202:13;;:17;19169:50;19165:370;;;19272:3;19256:13;;19247:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;19240:35;;19342:13;;19323:16;;19316:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;19294:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19422:13:0;;19403:16;;19396:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;19374:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19506:13:0;;19485:18;;19478:25;;:4;:25;:::i;:::-;:41;;;;:::i;:::-;19454:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;19165:370:0;19555:8;;19551:95;;19588:42;19604:4;19618;19625;19588:15;:42::i;:::-;19678:20;19685:13;19678:4;:20;:::i;:::-;19668:30;;;;:::i;:::-;;;18296:1414;;18236:1474;19720:33;19736:4;19742:2;19746:6;19720:15;:33::i;:::-;15753:4008;;15674:4087;;;:::o;14479:236::-;-1:-1:-1;;;;;14562:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;14562:39:0;;;;;;;14612;14562:31;:39;14612:26;:39::i;:::-;14667:40;;;;;;-1:-1:-1;;;;;14667:40:0;;;;;;;;14479:236;;:::o;24518:1472::-;24601:4;24557:23;4611:18;;;;;;;;;;;24557:50;;24618:25;24688:20;;24667:18;;24646;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;24618:90;-1:-1:-1;24733:20:0;;;:46;;-1:-1:-1;24757:22:0;;24733:46;24729:85;;;24796:7;;24518:1472::o;24729:85::-;24848:18;;:23;;24869:2;24848:23;:::i;:::-;24830:15;:41;24826:115;;;24906:18;;:23;;24927:2;24906:23;:::i;:::-;24888:41;;24826:115;24953:12;24976:23;25061:1;25041:17;25020:18;;25002:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24976:86;-1:-1:-1;25083:51:0;25100:33;24976:86;25100:15;:33;:::i;:::-;25083:16;:51::i;:::-;25338:18;;25177:21;;;;25156:18;;25338:22;;25359:1;;25338:22;:::i;:::-;25317:44;;:17;:44;:::i;:::-;25295:18;;25282:31;;:10;:31;:::i;:::-;:80;;;;:::i;:::-;25256:106;;25373:25;25480:1;25459:18;;:22;;;;:::i;:::-;25438:44;;:17;:44;:::i;:::-;25414:20;;25401:33;;:10;:33;:::i;:::-;:82;;;;:::i;:::-;25373:110;-1:-1:-1;25515:35:0;25373:110;25515:15;:35;:::i;:::-;25496:54;;;;:::i;:::-;25596:1;25575:18;:22;;;25608:18;:22;;;25641:20;:24;25496:54;-1:-1:-1;25690:19:0;;;;;:42;;;25731:1;25713:15;:19;25690:42;25686:121;;;25749:46;25762:15;25779;25749:12;:46::i;:::-;25840:18;;25832:62;;-1:-1:-1;;;;;25840:18:0;;;;25872:17;;25832:62;;;;25872:17;25840:18;25832:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25926:16:0;;25918:64;;25819:75;;-1:-1:-1;;;;;;25926:16:0;;25956:21;;25918:64;;;;25956:21;25926:16;25918:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24518:1472:0:o;6308:614::-;-1:-1:-1;;;;;6448:20:0;;6440:70;;;;-1:-1:-1;;;6440:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6529:23:0;;6521:71;;;;-1:-1:-1;;;6521:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6629:17:0;;6605:21;6629:17;;;;;;;;;;;6665:23;;;;6657:74;;;;-1:-1:-1;;;6657:74:0;;23019:2:1;6657:74:0;;;23001:21:1;23058:2;23038:18;;;23031:30;23097:34;23077:18;;;23070:62;-1:-1:-1;;;23148:18:1;;;23141:36;23194:19;;6657:74:0;22817:402:1;6657:74:0;-1:-1:-1;;;;;6767:17:0;;;:9;:17;;;;;;;;;;;6787:22;;;6767:42;;6831:20;;;;;;;;:30;;6803:6;;6767:9;6831:30;;6803:6;;6831:30;:::i;:::-;;;;;;;;6896:9;-1:-1:-1;;;;;6879:35:0;6888:6;-1:-1:-1;;;;;6879:35:0;;6907:6;6879:35;;;;1636:25:1;;1624:2;1609:18;;1490:177;6879:35:0;;;;;;;;6429:493;6308:614;;;:::o;13745:207::-;-1:-1:-1;;;;;13833:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;13833:52:0;;;;;;;;;;13901:43;;23392:51:1;;;23459:18;;;23452:50;13901:43:0;;23365:18:1;13901:43:0;;;;;;;13745:207;;:::o;15171:471::-;15261:16;;;15275:1;15261:16;;;;;;;;15237:21;;15261:16;;;;;;;;;;-1:-1:-1;15261:16:0;15237:40;;15306:4;15288;15293:1;15288:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15288:23:0;;;-1:-1:-1;;;;;15288:23:0;;;;;15332:15;-1:-1:-1;;;;;15332:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15322:4;15327:1;15322:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;15322:32:0;;;-1:-1:-1;;;;;15322:32:0;;;;;15365:62;15382:4;15397:15;15415:11;15365:8;:62::i;:::-;15438:196;;-1:-1:-1;;;15438:196:0;;-1:-1:-1;;;;;15438:15:0;:66;;;;:196;;15519:11;;15545:1;;15561:4;;15588;;15608:15;;15438:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15226:416;15171:471;:::o;14761:368::-;14842:62;14859:4;14874:15;14892:11;14842:8;:62::i;:::-;14915:206;;-1:-1:-1;;;14915:206:0;;14987:4;14915:206;;;25095:34:1;25145:18;;;25138:34;;;15033:1:0;25188:18:1;;;25181:34;;;25231:18;;;25224:34;15073:6:0;25274:19:1;;;25267:44;15095:15:0;25327:19:1;;;25320:35;14915:15:0;-1:-1:-1;;;;;14915:31:0;;;;14954:9;;25029:19:1;;14915:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1672:127::-;1733:10;1728:3;1724:20;1721:1;1714:31;1764:4;1761:1;1754:15;1788:4;1785:1;1778:15;1804:275;1875:2;1869:9;1940:2;1921:13;;-1:-1:-1;;1917:27:1;1905:40;;1975:18;1960:34;;1996:22;;;1957:62;1954:88;;;2022:18;;:::i;:::-;2058:2;2051:22;1804:275;;-1:-1:-1;1804:275:1:o;2084:183::-;2144:4;2177:18;2169:6;2166:30;2163:56;;;2199:18;;:::i;:::-;-1:-1:-1;2244:1:1;2240:14;2256:4;2236:25;;2084:183::o;2272:737::-;2326:5;2379:3;2372:4;2364:6;2360:17;2356:27;2346:55;;2397:1;2394;2387:12;2346:55;2433:6;2420:20;2459:4;2483:60;2499:43;2539:2;2499:43;:::i;:::-;2483:60;:::i;:::-;2577:15;;;2663:1;2659:10;;;;2647:23;;2643:32;;;2608:12;;;;2687:15;;;2684:35;;;2715:1;2712;2705:12;2684:35;2751:2;2743:6;2739:15;2763:217;2779:6;2774:3;2771:15;2763:217;;;2859:3;2846:17;2876:31;2901:5;2876:31;:::i;:::-;2920:18;;2958:12;;;;2796;;2763:217;;;-1:-1:-1;2998:5:1;2272:737;-1:-1:-1;;;;;;2272:737:1:o;3014:1138::-;3132:6;3140;3193:2;3181:9;3172:7;3168:23;3164:32;3161:52;;;3209:1;3206;3199:12;3161:52;3249:9;3236:23;3278:18;3319:2;3311:6;3308:14;3305:34;;;3335:1;3332;3325:12;3305:34;3358:61;3411:7;3402:6;3391:9;3387:22;3358:61;:::i;:::-;3348:71;;3438:2;3428:12;;3493:2;3482:9;3478:18;3465:32;3522:2;3512:8;3509:16;3506:36;;;3538:1;3535;3528:12;3506:36;3561:24;;;-1:-1:-1;3616:4:1;3608:13;;3604:27;-1:-1:-1;3594:55:1;;3645:1;3642;3635:12;3594:55;3681:2;3668:16;3704:60;3720:43;3760:2;3720:43;:::i;3704:60::-;3798:15;;;3880:1;3876:10;;;;3868:19;;3864:28;;;3829:12;;;;3904:19;;;3901:39;;;3936:1;3933;3926:12;3901:39;3960:11;;;;3980:142;3996:6;3991:3;3988:15;3980:142;;;4062:17;;4050:30;;4013:12;;;;4100;;;;3980:142;;;4141:5;4131:15;;;;;;;3014:1138;;;;;:::o;4157:456::-;4234:6;4242;4250;4303:2;4291:9;4282:7;4278:23;4274:32;4271:52;;;4319:1;4316;4309:12;4271:52;4358:9;4345:23;4377:31;4402:5;4377:31;:::i;:::-;4427:5;-1:-1:-1;4484:2:1;4469:18;;4456:32;4497:33;4456:32;4497:33;:::i;:::-;4157:456;;4549:7;;-1:-1:-1;;;4603:2:1;4588:18;;;;4575:32;;4157:456::o;4618:247::-;4677:6;4730:2;4718:9;4709:7;4705:23;4701:32;4698:52;;;4746:1;4743;4736:12;4698:52;4785:9;4772:23;4804:31;4829:5;4804:31;:::i;:::-;4854:5;4618:247;-1:-1:-1;;;4618:247:1:o;4870:180::-;4929:6;4982:2;4970:9;4961:7;4957:23;4953:32;4950:52;;;4998:1;4995;4988:12;4950:52;-1:-1:-1;5021:23:1;;4870:180;-1:-1:-1;4870:180:1:o;5452:118::-;5538:5;5531:13;5524:21;5517:5;5514:32;5504:60;;5560:1;5557;5550:12;5575:382;5640:6;5648;5701:2;5689:9;5680:7;5676:23;5672:32;5669:52;;;5717:1;5714;5707:12;5669:52;5756:9;5743:23;5775:31;5800:5;5775:31;:::i;:::-;5825:5;-1:-1:-1;5882:2:1;5867:18;;5854:32;5895:30;5854:32;5895:30;:::i;:::-;5944:7;5934:17;;;5575:382;;;;;:::o;5962:316::-;6039:6;6047;6055;6108:2;6096:9;6087:7;6083:23;6079:32;6076:52;;;6124:1;6121;6114:12;6076:52;-1:-1:-1;;6147:23:1;;;6217:2;6202:18;;6189:32;;-1:-1:-1;6268:2:1;6253:18;;;6240:32;;5962:316;-1:-1:-1;5962:316:1:o;6283:388::-;6351:6;6359;6412:2;6400:9;6391:7;6387:23;6383:32;6380:52;;;6428:1;6425;6418:12;6380:52;6467:9;6454:23;6486:31;6511:5;6486:31;:::i;:::-;6536:5;-1:-1:-1;6593:2:1;6578:18;;6565:32;6606:33;6565:32;6606:33;:::i;6676:348::-;6760:6;6813:2;6801:9;6792:7;6788:23;6784:32;6781:52;;;6829:1;6826;6819:12;6781:52;6869:9;6856:23;6902:18;6894:6;6891:30;6888:50;;;6934:1;6931;6924:12;6888:50;6957:61;7010:7;7001:6;6990:9;6986:22;6957:61;:::i;:::-;6947:71;6676:348;-1:-1:-1;;;;6676:348:1:o;7029:380::-;7108:1;7104:12;;;;7151;;;7172:61;;7226:4;7218:6;7214:17;7204:27;;7172:61;7279:2;7271:6;7268:14;7248:18;7245:38;7242:161;;;7325:10;7320:3;7316:20;7313:1;7306:31;7360:4;7357:1;7350:15;7388:4;7385:1;7378:15;7242:161;;7029:380;;;:::o;7414:356::-;7616:2;7598:21;;;7635:18;;;7628:30;7694:34;7689:2;7674:18;;7667:62;7761:2;7746:18;;7414:356::o;8557:127::-;8618:10;8613:3;8609:20;8606:1;8599:31;8649:4;8646:1;8639:15;8673:4;8670:1;8663:15;8689:127;8750:10;8745:3;8741:20;8738:1;8731:31;8781:4;8778:1;8771:15;8805:4;8802:1;8795:15;8821:168;8861:7;8927:1;8923;8919:6;8915:14;8912:1;8909:21;8904:1;8897:9;8890:17;8886:45;8883:71;;;8934:18;;:::i;:::-;-1:-1:-1;8974:9:1;;8821:168::o;8994:135::-;9033:3;-1:-1:-1;;9054:17:1;;9051:43;;;9074:18;;:::i;:::-;-1:-1:-1;9121:1:1;9110:13;;8994:135::o;9951:217::-;9991:1;10017;10007:132;;10061:10;10056:3;10052:20;10049:1;10042:31;10096:4;10093:1;10086:15;10124:4;10121:1;10114:15;10007:132;-1:-1:-1;10153:9:1;;9951:217::o;11632:128::-;11672:3;11703:1;11699:6;11696:1;11693:13;11690:39;;;11709:18;;:::i;:::-;-1:-1:-1;11745:9:1;;11632:128::o;13592:184::-;13662:6;13715:2;13703:9;13694:7;13690:23;13686:32;13683:52;;;13731:1;13728;13721:12;13683:52;-1:-1:-1;13754:16:1;;13592:184;-1:-1:-1;13592:184:1:o;14060:245::-;14127:6;14180:2;14168:9;14159:7;14155:23;14151:32;14148:52;;;14196:1;14193;14186:12;14148:52;14228:9;14222:16;14247:28;14269:5;14247:28;:::i;18910:401::-;19112:2;19094:21;;;19151:2;19131:18;;;19124:30;19190:34;19185:2;19170:18;;19163:62;-1:-1:-1;;;19256:2:1;19241:18;;19234:35;19301:3;19286:19;;18910:401::o;19316:399::-;19518:2;19500:21;;;19557:2;19537:18;;;19530:30;19596:34;19591:2;19576:18;;19569:62;-1:-1:-1;;;19662:2:1;19647:18;;19640:33;19705:3;19690:19;;19316:399::o;21102:125::-;21142:4;21170:1;21167;21164:8;21161:34;;;21175:18;;:::i;:::-;-1:-1:-1;21212:9:1;;21102:125::o;23513:251::-;23583:6;23636:2;23624:9;23615:7;23611:23;23607:32;23604:52;;;23652:1;23649;23642:12;23604:52;23684:9;23678:16;23703:31;23728:5;23703:31;:::i;23769:980::-;24031:4;24079:3;24068:9;24064:19;24110:6;24099:9;24092:25;24136:2;24174:6;24169:2;24158:9;24154:18;24147:34;24217:3;24212:2;24201:9;24197:18;24190:31;24241:6;24276;24270:13;24307:6;24299;24292:22;24345:3;24334:9;24330:19;24323:26;;24384:2;24376:6;24372:15;24358:29;;24405:1;24415:195;24429:6;24426:1;24423:13;24415:195;;;24494:13;;-1:-1:-1;;;;;24490:39:1;24478:52;;24585:15;;;;24550:12;;;;24526:1;24444:9;24415:195;;;-1:-1:-1;;;;;;;24666:32:1;;;;24661:2;24646:18;;24639:60;-1:-1:-1;;;24730:3:1;24715:19;24708:35;24627:3;23769:980;-1:-1:-1;;;23769:980:1:o;25366:306::-;25454:6;25462;25470;25523:2;25511:9;25502:7;25498:23;25494:32;25491:52;;;25539:1;25536;25529:12;25491:52;25568:9;25562:16;25552:26;;25618:2;25607:9;25603:18;25597:25;25587:35;;25662:2;25651:9;25647:18;25641:25;25631:35;;25366:306;;;;;:::o

Swarm Source

ipfs://432fcafe9ea7e066dda5c15df54afdadba92b33aa249bf17d74a2665f90dbd3f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.