ETH Price: $2,036.21 (+4.36%)
 

Overview

Max Total Supply

101,000,000 POOCH

Holders

52

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OPTIMUSDOG

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-03-28
*/

/**

    Telegram    : https://t.me/OptimusDogPortal
    
    Twitter     : https://twitter.com/OptimusDog_

    Website     : https://www.optimusdog.com/

    Medium      : https://medium.com/@optimusdog

*/

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

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

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


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

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

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

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

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

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    mapping (address => bool) private _blacklist;

    bool private swapping;

    address public feeWallet;

    uint256 public swapTokensAtAmount;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyFee;

    uint256 public sellFee;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount; //exclude from max transaction


    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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


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

    event AutoNukeLP();

    event ManualNukeLP();
    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("Optimus Dog", "POOCH") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );


        uniswapV2Router = _uniswapV2Router;

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


        uint256 totalSupply = 101_000_000 * 1e18;

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        maxBuyAmount = (totalSupply * 2) / 100; // 2%
        maxSellAmount = (totalSupply * 2) / 100; // 2%
        maxWallet = (totalSupply * 2) / 100; // 2%

        buyFee = 10;
        sellFee = 30; 

        feeWallet = address(0x265225cbFDefA17507fF81e6A98E67F03212EE3d); // set as feewallet

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

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

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

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


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

    function updateBuyFees(
       uint256 _fee
    ) external onlyOwner {
        buyFee = _fee;
        require(_fee<100,"Cannot set fee more then 9%");
    }

    function updateSellFees(
        uint256 _fee
    ) external onlyOwner {
        sellFee = _fee;
        require(_fee<100,"Cannot set fee more then 9%");
    }

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

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        external
        onlyOwner
    {
        if (!isEx) {
            require(
                updAds != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatefeeWallet(address _feewallet)
        external
        onlyOwner
    {
        emit feeWalletUpdated(_feewallet, feeWallet);
        feeWallet = _feewallet;
    }

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[from] && !_blacklist[to], "You are a bot");

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
            }
        }
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    if (limitsInEffect){
                        require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    }
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    if (limitsInEffect){
                        require(
                            amount <= maxSellAmount,
                            "Sell transfer amount exceeds the max sell."
                        );
                    }
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFee > 0) {
                fees = amount.mul(sellFee).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFee > 0) {
                fees = amount.mul(buyFee).div(100);
            }

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

            amount -= fees;
        }

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

    function addBL(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function multiBL(address[] memory multiblacklist_) public onlyOwner {
        for (uint256 i = 0; i < multiblacklist_.length; i++) {
            _blacklist[multiblacklist_[i]] = true;
        }
    }

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

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

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


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0 ) {
            return;
        }

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);
        uint256 deltaETH = address(this).balance.sub(initialETHBalance);
        // transfer to fee wallet
        if (deltaETH > 0) {
            (success,) = feeWallet.call{value: deltaETH}("");
        }
        
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"addBL","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"multiblacklist_","type":"address[]"}],"name":"multiBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feewallet","type":"address"}],"name":"updatefeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f4f7074696d757320446f670000000000000000000000000000000000000000008152506040518060400160405280600581526020017f504f4f43480000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000c54565b5080600490816200010d919062000c54565b5050506200013062000124620004ef60201b60201c565b620004f760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef919062000da5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d919062000da5565b6040518363ffffffff1660e01b81526004016200029c92919062000de8565b6020604051808303816000875af1158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000da5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032a60a0516001620005bd60201b60201c565b6200033f60a05160016200065360201b60201c565b60006a538b94f896d9c085000000905061271060058262000361919062000e44565b6200036d919062000ebe565b600881905550606460028262000384919062000e44565b62000390919062000ebe565b6009819055506064600282620003a7919062000e44565b620003b3919062000ebe565b600a819055506064600282620003ca919062000e44565b620003d6919062000ebe565b600b81905550600a600f81905550601e60108190555073265225cbfdefa17507ff81e6a98e67f03212ee3d600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200046362000455620006f460201b60201c565b60016200071e60201b60201c565b620004763060016200071e60201b60201c565b6200048b61dead60016200071e60201b60201c565b620004ad6200049f620006f460201b60201c565b6001620005bd60201b60201c565b620004c0306001620005bd60201b60201c565b620004d561dead6001620005bd60201b60201c565b620004e733826200085860201b60201c565b5050620010bb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674682826040516200064792919062000f13565b60405180910390a15050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200072e620004ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000754620006f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a49062000fa1565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200084c919062000fc3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c19062001030565b60405180910390fd5b620008de60008383620009d060201b60201c565b8060026000828254620008f2919062001052565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000949919062001052565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009b091906200109e565b60405180910390a3620009cc60008383620009d560201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a5c57607f821691505b60208210810362000a725762000a7162000a14565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000adc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a9d565b62000ae8868362000a9d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b3562000b2f62000b298462000b00565b62000b0a565b62000b00565b9050919050565b6000819050919050565b62000b518362000b14565b62000b6962000b608262000b3c565b84845462000aaa565b825550505050565b600090565b62000b8062000b71565b62000b8d81848462000b46565b505050565b5b8181101562000bb55762000ba960008262000b76565b60018101905062000b93565b5050565b601f82111562000c045762000bce8162000a78565b62000bd98462000a8d565b8101602085101562000be9578190505b62000c0162000bf88562000a8d565b83018262000b92565b50505b505050565b600082821c905092915050565b600062000c296000198460080262000c09565b1980831691505092915050565b600062000c44838362000c16565b9150826002028217905092915050565b62000c5f82620009da565b67ffffffffffffffff81111562000c7b5762000c7a620009e5565b5b62000c87825462000a43565b62000c9482828562000bb9565b600060209050601f83116001811462000ccc576000841562000cb7578287015190505b62000cc3858262000c36565b86555062000d33565b601f19841662000cdc8662000a78565b60005b8281101562000d065784890151825560018201915060208501945060208101905062000cdf565b8683101562000d26578489015162000d22601f89168262000c16565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d6d8262000d40565b9050919050565b62000d7f8162000d60565b811462000d8b57600080fd5b50565b60008151905062000d9f8162000d74565b92915050565b60006020828403121562000dbe5762000dbd62000d3b565b5b600062000dce8482850162000d8e565b91505092915050565b62000de28162000d60565b82525050565b600060408201905062000dff600083018562000dd7565b62000e0e602083018462000dd7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e518262000b00565b915062000e5e8362000b00565b925082820262000e6e8162000b00565b9150828204841483151762000e885762000e8762000e15565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ecb8262000b00565b915062000ed88362000b00565b92508262000eeb5762000eea62000e8f565b5b828204905092915050565b60008115159050919050565b62000f0d8162000ef6565b82525050565b600060408201905062000f2a600083018562000dd7565b62000f39602083018462000f02565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f8960208362000f40565b915062000f968262000f51565b602082019050919050565b6000602082019050818103600083015262000fbc8162000f7a565b9050919050565b600060208201905062000fda600083018462000f02565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001018601f8362000f40565b9150620010258262000fe0565b602082019050919050565b600060208201905081810360008301526200104b8162001009565b9050919050565b60006200105f8262000b00565b91506200106c8362000b00565b925082820190508082111562001087576200108662000e15565b5b92915050565b620010988162000b00565b82525050565b6000602082019050620010b560008301846200108d565b92915050565b60805160a0516148f76200111260003960008181610df901528181611159015281816115a501526124c6015260008181610c120152818161246e0152818161326601528181613347015261336e01526148f76000f3fe6080604052600436106102605760003560e01c806388e765ff11610144578063c0246668116100b6578063e884f2601161007a578063e884f26014610933578063eba4c3331461095e578063f25f4b5614610987578063f2fde38b146109b2578063f8b45b05146109db578063fb1c379114610a0657610267565b8063c02466681461083a578063c876d0b914610863578063d257b34f1461088e578063dd62ed3e146108cb578063e2f456051461090857610267565b806395d89b411161010857806395d89b41146107045780639a7a23d61461072f578063a457c2d714610758578063a9059cbb14610795578063b62496f5146107d2578063bbc0c7421461080f57610267565b806388e765ff146106455780638a8c523c146106705780638da5cb5b1461068757806390a0bb35146106b2578063924de9b7146106db57610267565b806347062402116101dd5780636ddd1713116101a15780636ddd17131461054957806370a0823114610574578063715018a6146105b157806371fc4688146105c8578063751039fc146105f15780637571336a1461061c57610267565b8063470624021461046057806349bd5a5e1461048b5780634a62bb65146104b65780634fbee193146104e157806366d602ae1461051e57610267565b806318160ddd1161022457806318160ddd1461036557806323b872dd146103905780632b14ca56146103cd578063313ce567146103f8578063395093511461042357610267565b806306fdde031461026c578063095ea7b3146102975780630f822e80146102d457806310d5de53146102fd5780631694505e1461033a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2f565b60405161028e91906134aa565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613574565b610ac1565b6040516102cb91906135cf565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613732565b610adf565b005b34801561030957600080fd5b50610324600480360381019061031f919061377b565b610bf0565b60405161033191906135cf565b60405180910390f35b34801561034657600080fd5b5061034f610c10565b60405161035c9190613807565b60405180910390f35b34801561037157600080fd5b5061037a610c34565b6040516103879190613831565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b2919061384c565b610c3e565b6040516103c491906135cf565b60405180910390f35b3480156103d957600080fd5b506103e2610d36565b6040516103ef9190613831565b60405180910390f35b34801561040457600080fd5b5061040d610d3c565b60405161041a91906138bb565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613574565b610d45565b60405161045791906135cf565b60405180910390f35b34801561046c57600080fd5b50610475610df1565b6040516104829190613831565b60405180910390f35b34801561049757600080fd5b506104a0610df7565b6040516104ad91906138e5565b60405180910390f35b3480156104c257600080fd5b506104cb610e1b565b6040516104d891906135cf565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061377b565b610e2e565b60405161051591906135cf565b60405180910390f35b34801561052a57600080fd5b50610533610e84565b6040516105409190613831565b60405180910390f35b34801561055557600080fd5b5061055e610e8a565b60405161056b91906135cf565b60405180910390f35b34801561058057600080fd5b5061059b6004803603810190610596919061377b565b610e9d565b6040516105a89190613831565b60405180910390f35b3480156105bd57600080fd5b506105c6610ee5565b005b3480156105d457600080fd5b506105ef60048036038101906105ea9190613900565b610f6d565b005b3480156105fd57600080fd5b50610606611036565b60405161061391906135cf565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190613959565b6110d6565b005b34801561065157600080fd5b5061065a611241565b6040516106679190613831565b60405180910390f35b34801561067c57600080fd5b50610685611247565b005b34801561069357600080fd5b5061069c6112fb565b6040516106a991906138e5565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613959565b611325565b005b3480156106e757600080fd5b5061070260048036038101906106fd9190613999565b6113fc565b005b34801561071057600080fd5b50610719611495565b60405161072691906134aa565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190613959565b611527565b005b34801561076457600080fd5b5061077f600480360381019061077a9190613574565b61163f565b60405161078c91906135cf565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613574565b61172a565b6040516107c991906135cf565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061377b565b611748565b60405161080691906135cf565b60405180910390f35b34801561081b57600080fd5b50610824611768565b60405161083191906135cf565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c9190613959565b61177b565b005b34801561086f57600080fd5b506108786118a0565b60405161088591906135cf565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190613900565b6118b3565b6040516108c291906135cf565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed91906139c6565b611a08565b6040516108ff9190613831565b60405180910390f35b34801561091457600080fd5b5061091d611a8f565b60405161092a9190613831565b60405180910390f35b34801561093f57600080fd5b50610948611a95565b60405161095591906135cf565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190613900565b611b35565b005b34801561099357600080fd5b5061099c611bfe565b6040516109a991906138e5565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d4919061377b565b611c24565b005b3480156109e757600080fd5b506109f0611d1b565b6040516109fd9190613831565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a28919061377b565b611d21565b005b606060038054610a3e90613a35565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6a90613a35565b8015610ab75780601f10610a8c57610100808354040283529160200191610ab7565b820191906000526020600020905b815481529060010190602001808311610a9a57829003601f168201915b5050505050905090565b6000610ad5610ace611e5d565b8484611e65565b6001905092915050565b610ae7611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610b056112fb565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613ab2565b60405180910390fd5b60005b8151811015610bec57600160066000848481518110610b8057610b7f613ad2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610be490613b30565b915050610b5e565b5050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610c4b84848461202e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c96611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613bea565b60405180910390fd5b610d2a85610d22611e5d565b858403611e65565b60019150509392505050565b60105481565b60006012905090565b6000610de7610d52611e5d565b848460016000610d60611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de29190613c0a565b611e65565b6001905092915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eed611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610f0b6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5890613ab2565b60405180910390fd5b610f6b6000612ca2565b565b610f75611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610f936112fb565b73ffffffffffffffffffffffffffffffffffffffff1614610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090613ab2565b60405180910390fd5b80600f8190555060648110611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613c8a565b60405180910390fd5b50565b6000611040611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661105e6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90613ab2565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6110de611e5d565b73ffffffffffffffffffffffffffffffffffffffff166110fc6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613ab2565b60405180910390fd5b806111e6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc90613d1c565b60405180910390fd5b5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b61124f611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661126d6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613ab2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61132d611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661134b6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613ab2565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611404611e5d565b73ffffffffffffffffffffffffffffffffffffffff166114226112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90613ab2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546114a490613a35565b80601f01602080910402602001604051908101604052809291908181526020018280546114d090613a35565b801561151d5780601f106114f25761010080835404028352916020019161151d565b820191906000526020600020905b81548152906001019060200180831161150057829003601f168201915b5050505050905090565b61152f611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661154d6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613ab2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613dae565b60405180910390fd5b61163b8282612d68565b5050565b6000806001600061164e611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613e40565b60405180910390fd5b61171f611716611e5d565b85858403611e65565b600191505092915050565b600061173e611737611e5d565b848461202e565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611783611e5d565b73ffffffffffffffffffffffffffffffffffffffff166117a16112fb565b73ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613ab2565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161189491906135cf565b60405180910390a25050565b600e60009054906101000a900460ff1681565b60006118bd611e5d565b73ffffffffffffffffffffffffffffffffffffffff166118db6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613ab2565b60405180910390fd5b620186a0600161193f610c34565b6119499190613e60565b6119539190613ed1565b821015611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90613f74565b60405180910390fd5b6103e860056119a2610c34565b6119ac9190613e60565b6119b69190613ed1565b8211156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90614006565b60405180910390fd5b8160088190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6000611a9f611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611abd6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90613ab2565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611b3d611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611b5b6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613ab2565b60405180910390fd5b8060108190555060648110611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613c8a565b60405180910390fd5b50565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c2c611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611c4a6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9790613ab2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614098565b60405180910390fd5b611d1881612ca2565b50565b600b5481565b611d29611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611d476112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490613ab2565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb9061412a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a906141bc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120219190613831565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061424e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612103906142e0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b05750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e69061434c565b60405180910390fd5b600081036122085761220383836000612e09565b612c9d565b600c60009054906101000a900460ff16156125e3576122256112fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561229357506122636112fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122cc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612306575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231f5750600760009054906101000a900460ff16155b156125e257600c60019054906101000a900460ff1661241957601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d95750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906143b8565b60405180910390fd5b5b600e60009054906101000a900460ff16156125e1576124366112fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124bd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561251557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125e05743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614470565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126865750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561274357600c60009054906101000a900460ff16156126e6576009548111156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90614502565b60405180910390fd5b5b600b546126f283610e9d565b826126fd9190613c0a565b111561273e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127359061456e565b60405180910390fd5b6128f7565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127e65750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561284b57600c60009054906101000a900460ff161561284657600a54811115612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c90614600565b60405180910390fd5b5b6128f6565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128f557600b546128a883610e9d565b826128b39190613c0a565b11156128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb9061456e565b60405180910390fd5b5b5b5b600061290230610e9d565b9050600060085482101590508080156129275750600c60029054906101000a900460ff165b80156129405750600760009054906101000a900460ff16155b80156129965750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129ec5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a425750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a86576001600760006101000a81548160ff021916908315150217905550612a6a613088565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b3c5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b4657600090505b60008115612c8d57601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba957506000601054115b15612bdd57612bd66064612bc86010548861319190919063ffffffff16565b6131a790919063ffffffff16565b9050612c69565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c3857506000600f54115b15612c6857612c656064612c57600f548861319190919063ffffffff16565b6131a790919063ffffffff16565b90505b5b6000811115612c7e57612c7d873083612e09565b5b8085612c8a9190614620565b94505b612c98878787612e09565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6f9061424e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede906142e0565b60405180910390fd5b612ef28383836131bd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f906146c6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461300b9190613c0a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161306f9190613831565b60405180910390a36130828484846131c2565b50505050565b600061309330610e9d565b905060008082036130a557505061318f565b60146008546130b49190613e60565b8211156130cd5760146008546130ca9190613e60565b91505b60004790506130db836131c7565b60006130f0824761340490919063ffffffff16565b9050600081111561318a57600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161314190614717565b60006040518083038185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b5050809350505b505050505b565b6000818361319f9190613e60565b905092915050565b600081836131b59190613ed1565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156131e4576131e36135ef565b5b6040519080825280602002602001820160405280156132125781602001602082028036833780820191505090505b509050308160008151811061322a57613229613ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f39190614741565b8160018151811061330757613306613ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061336c307f000000000000000000000000000000000000000000000000000000000000000084611e65565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133ce959493929190614867565b600060405180830381600087803b1580156133e857600080fd5b505af11580156133fc573d6000803e3d6000fd5b505050505050565b600081836134129190614620565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613454578082015181840152602081019050613439565b60008484015250505050565b6000601f19601f8301169050919050565b600061347c8261341a565b6134868185613425565b9350613496818560208601613436565b61349f81613460565b840191505092915050565b600060208201905081810360008301526134c48184613471565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061350b826134e0565b9050919050565b61351b81613500565b811461352657600080fd5b50565b60008135905061353881613512565b92915050565b6000819050919050565b6135518161353e565b811461355c57600080fd5b50565b60008135905061356e81613548565b92915050565b6000806040838503121561358b5761358a6134d6565b5b600061359985828601613529565b92505060206135aa8582860161355f565b9150509250929050565b60008115159050919050565b6135c9816135b4565b82525050565b60006020820190506135e460008301846135c0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61362782613460565b810181811067ffffffffffffffff82111715613646576136456135ef565b5b80604052505050565b60006136596134cc565b9050613665828261361e565b919050565b600067ffffffffffffffff821115613685576136846135ef565b5b602082029050602081019050919050565b600080fd5b60006136ae6136a98461366a565b61364f565b905080838252602082019050602084028301858111156136d1576136d0613696565b5b835b818110156136fa57806136e68882613529565b8452602084019350506020810190506136d3565b5050509392505050565b600082601f830112613719576137186135ea565b5b813561372984826020860161369b565b91505092915050565b600060208284031215613748576137476134d6565b5b600082013567ffffffffffffffff811115613766576137656134db565b5b61377284828501613704565b91505092915050565b600060208284031215613791576137906134d6565b5b600061379f84828501613529565b91505092915050565b6000819050919050565b60006137cd6137c86137c3846134e0565b6137a8565b6134e0565b9050919050565b60006137df826137b2565b9050919050565b60006137f1826137d4565b9050919050565b613801816137e6565b82525050565b600060208201905061381c60008301846137f8565b92915050565b61382b8161353e565b82525050565b60006020820190506138466000830184613822565b92915050565b600080600060608486031215613865576138646134d6565b5b600061387386828701613529565b935050602061388486828701613529565b92505060406138958682870161355f565b9150509250925092565b600060ff82169050919050565b6138b58161389f565b82525050565b60006020820190506138d060008301846138ac565b92915050565b6138df81613500565b82525050565b60006020820190506138fa60008301846138d6565b92915050565b600060208284031215613916576139156134d6565b5b60006139248482850161355f565b91505092915050565b613936816135b4565b811461394157600080fd5b50565b6000813590506139538161392d565b92915050565b600080604083850312156139705761396f6134d6565b5b600061397e85828601613529565b925050602061398f85828601613944565b9150509250929050565b6000602082840312156139af576139ae6134d6565b5b60006139bd84828501613944565b91505092915050565b600080604083850312156139dd576139dc6134d6565b5b60006139eb85828601613529565b92505060206139fc85828601613529565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a4d57607f821691505b602082108103613a6057613a5f613a06565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a9c602083613425565b9150613aa782613a66565b602082019050919050565b60006020820190508181036000830152613acb81613a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b3b8261353e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b6d57613b6c613b01565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613bd4602883613425565b9150613bdf82613b78565b604082019050919050565b60006020820190508181036000830152613c0381613bc7565b9050919050565b6000613c158261353e565b9150613c208361353e565b9250828201905080821115613c3857613c37613b01565b5b92915050565b7f43616e6e6f742073657420666565206d6f7265207468656e2039250000000000600082015250565b6000613c74601b83613425565b9150613c7f82613c3e565b602082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000613d06602783613425565b9150613d1182613caa565b604082019050919050565b60006020820190508181036000830152613d3581613cf9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613d98603983613425565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613e2a602583613425565b9150613e3582613dce565b604082019050919050565b60006020820190508181036000830152613e5981613e1d565b9050919050565b6000613e6b8261353e565b9150613e768361353e565b9250828202613e848161353e565b91508282048414831517613e9b57613e9a613b01565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613edc8261353e565b9150613ee78361353e565b925082613ef757613ef6613ea2565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613f5e603583613425565b9150613f6982613f02565b604082019050919050565b60006020820190508181036000830152613f8d81613f51565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613ff0603483613425565b9150613ffb82613f94565b604082019050919050565b6000602082019050818103600083015261401f81613fe3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614082602683613425565b915061408d82614026565b604082019050919050565b600060208201905081810360008301526140b181614075565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614114602483613425565b915061411f826140b8565b604082019050919050565b6000602082019050818103600083015261414381614107565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a6602283613425565b91506141b18261414a565b604082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614238602583613425565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142ca602383613425565b91506142d58261426e565b604082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f596f7520617265206120626f7400000000000000000000000000000000000000600082015250565b6000614336600d83613425565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143a2601683613425565b91506143ad8261436c565b602082019050919050565b600060208201905081810360008301526143d181614395565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061445a604983613425565b9150614465826143d8565b606082019050919050565b600060208201905081810360008301526144898161444d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b60006144ec602883613425565b91506144f782614490565b604082019050919050565b6000602082019050818103600083015261451b816144df565b9050919050565b7f4d61782057616c6c657420457863656564656400000000000000000000000000600082015250565b6000614558601383613425565b915061456382614522565b602082019050919050565b600060208201905081810360008301526145878161454b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b60006145ea602a83613425565b91506145f58261458e565b604082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b600061462b8261353e565b91506146368361353e565b925082820390508181111561464e5761464d613b01565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146b0602683613425565b91506146bb82614654565b604082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b600081905092915050565b50565b60006147016000836146e6565b915061470c826146f1565b600082019050919050565b6000614722826146f4565b9150819050919050565b60008151905061473b81613512565b92915050565b600060208284031215614757576147566134d6565b5b60006147658482850161472c565b91505092915050565b6000819050919050565b600061479361478e6147898461476e565b6137a8565b61353e565b9050919050565b6147a381614778565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147de81613500565b82525050565b60006147f083836147d5565b60208301905092915050565b6000602082019050919050565b6000614814826147a9565b61481e81856147b4565b9350614829836147c5565b8060005b8381101561485a57815161484188826147e4565b975061484c836147fc565b92505060018101905061482d565b5085935050505092915050565b600060a08201905061487c6000830188613822565b614889602083018761479a565b818103604083015261489b8186614809565b90506148aa60608301856138d6565b6148b76080830184613822565b969550505050505056fea2646970667358221220f6a992e4ba222adcbc7d615207b96b6dab1fdbc4d1fad44e0074fbcfc4ad589c64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806388e765ff11610144578063c0246668116100b6578063e884f2601161007a578063e884f26014610933578063eba4c3331461095e578063f25f4b5614610987578063f2fde38b146109b2578063f8b45b05146109db578063fb1c379114610a0657610267565b8063c02466681461083a578063c876d0b914610863578063d257b34f1461088e578063dd62ed3e146108cb578063e2f456051461090857610267565b806395d89b411161010857806395d89b41146107045780639a7a23d61461072f578063a457c2d714610758578063a9059cbb14610795578063b62496f5146107d2578063bbc0c7421461080f57610267565b806388e765ff146106455780638a8c523c146106705780638da5cb5b1461068757806390a0bb35146106b2578063924de9b7146106db57610267565b806347062402116101dd5780636ddd1713116101a15780636ddd17131461054957806370a0823114610574578063715018a6146105b157806371fc4688146105c8578063751039fc146105f15780637571336a1461061c57610267565b8063470624021461046057806349bd5a5e1461048b5780634a62bb65146104b65780634fbee193146104e157806366d602ae1461051e57610267565b806318160ddd1161022457806318160ddd1461036557806323b872dd146103905780632b14ca56146103cd578063313ce567146103f8578063395093511461042357610267565b806306fdde031461026c578063095ea7b3146102975780630f822e80146102d457806310d5de53146102fd5780631694505e1461033a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a2f565b60405161028e91906134aa565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613574565b610ac1565b6040516102cb91906135cf565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613732565b610adf565b005b34801561030957600080fd5b50610324600480360381019061031f919061377b565b610bf0565b60405161033191906135cf565b60405180910390f35b34801561034657600080fd5b5061034f610c10565b60405161035c9190613807565b60405180910390f35b34801561037157600080fd5b5061037a610c34565b6040516103879190613831565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b2919061384c565b610c3e565b6040516103c491906135cf565b60405180910390f35b3480156103d957600080fd5b506103e2610d36565b6040516103ef9190613831565b60405180910390f35b34801561040457600080fd5b5061040d610d3c565b60405161041a91906138bb565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613574565b610d45565b60405161045791906135cf565b60405180910390f35b34801561046c57600080fd5b50610475610df1565b6040516104829190613831565b60405180910390f35b34801561049757600080fd5b506104a0610df7565b6040516104ad91906138e5565b60405180910390f35b3480156104c257600080fd5b506104cb610e1b565b6040516104d891906135cf565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061377b565b610e2e565b60405161051591906135cf565b60405180910390f35b34801561052a57600080fd5b50610533610e84565b6040516105409190613831565b60405180910390f35b34801561055557600080fd5b5061055e610e8a565b60405161056b91906135cf565b60405180910390f35b34801561058057600080fd5b5061059b6004803603810190610596919061377b565b610e9d565b6040516105a89190613831565b60405180910390f35b3480156105bd57600080fd5b506105c6610ee5565b005b3480156105d457600080fd5b506105ef60048036038101906105ea9190613900565b610f6d565b005b3480156105fd57600080fd5b50610606611036565b60405161061391906135cf565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190613959565b6110d6565b005b34801561065157600080fd5b5061065a611241565b6040516106679190613831565b60405180910390f35b34801561067c57600080fd5b50610685611247565b005b34801561069357600080fd5b5061069c6112fb565b6040516106a991906138e5565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613959565b611325565b005b3480156106e757600080fd5b5061070260048036038101906106fd9190613999565b6113fc565b005b34801561071057600080fd5b50610719611495565b60405161072691906134aa565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190613959565b611527565b005b34801561076457600080fd5b5061077f600480360381019061077a9190613574565b61163f565b60405161078c91906135cf565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613574565b61172a565b6040516107c991906135cf565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061377b565b611748565b60405161080691906135cf565b60405180910390f35b34801561081b57600080fd5b50610824611768565b60405161083191906135cf565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c9190613959565b61177b565b005b34801561086f57600080fd5b506108786118a0565b60405161088591906135cf565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190613900565b6118b3565b6040516108c291906135cf565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed91906139c6565b611a08565b6040516108ff9190613831565b60405180910390f35b34801561091457600080fd5b5061091d611a8f565b60405161092a9190613831565b60405180910390f35b34801561093f57600080fd5b50610948611a95565b60405161095591906135cf565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190613900565b611b35565b005b34801561099357600080fd5b5061099c611bfe565b6040516109a991906138e5565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d4919061377b565b611c24565b005b3480156109e757600080fd5b506109f0611d1b565b6040516109fd9190613831565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a28919061377b565b611d21565b005b606060038054610a3e90613a35565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6a90613a35565b8015610ab75780601f10610a8c57610100808354040283529160200191610ab7565b820191906000526020600020905b815481529060010190602001808311610a9a57829003601f168201915b5050505050905090565b6000610ad5610ace611e5d565b8484611e65565b6001905092915050565b610ae7611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610b056112fb565b73ffffffffffffffffffffffffffffffffffffffff1614610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613ab2565b60405180910390fd5b60005b8151811015610bec57600160066000848481518110610b8057610b7f613ad2565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610be490613b30565b915050610b5e565b5050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610c4b84848461202e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c96611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613bea565b60405180910390fd5b610d2a85610d22611e5d565b858403611e65565b60019150509392505050565b60105481565b60006012905090565b6000610de7610d52611e5d565b848460016000610d60611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de29190613c0a565b611e65565b6001905092915050565b600f5481565b7f0000000000000000000000003127228c35a596b113fc502294416c9c63752bdc81565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eed611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610f0b6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5890613ab2565b60405180910390fd5b610f6b6000612ca2565b565b610f75611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610f936112fb565b73ffffffffffffffffffffffffffffffffffffffff1614610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090613ab2565b60405180910390fd5b80600f8190555060648110611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613c8a565b60405180910390fd5b50565b6000611040611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661105e6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90613ab2565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6110de611e5d565b73ffffffffffffffffffffffffffffffffffffffff166110fc6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613ab2565b60405180910390fd5b806111e6577f0000000000000000000000003127228c35a596b113fc502294416c9c63752bdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc90613d1c565b60405180910390fd5b5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b61124f611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661126d6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613ab2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61132d611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661134b6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613ab2565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611404611e5d565b73ffffffffffffffffffffffffffffffffffffffff166114226112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90613ab2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546114a490613a35565b80601f01602080910402602001604051908101604052809291908181526020018280546114d090613a35565b801561151d5780601f106114f25761010080835404028352916020019161151d565b820191906000526020600020905b81548152906001019060200180831161150057829003601f168201915b5050505050905090565b61152f611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661154d6112fb565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613ab2565b60405180910390fd5b7f0000000000000000000000003127228c35a596b113fc502294416c9c63752bdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613dae565b60405180910390fd5b61163b8282612d68565b5050565b6000806001600061164e611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613e40565b60405180910390fd5b61171f611716611e5d565b85858403611e65565b600191505092915050565b600061173e611737611e5d565b848461202e565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611783611e5d565b73ffffffffffffffffffffffffffffffffffffffff166117a16112fb565b73ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613ab2565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161189491906135cf565b60405180910390a25050565b600e60009054906101000a900460ff1681565b60006118bd611e5d565b73ffffffffffffffffffffffffffffffffffffffff166118db6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613ab2565b60405180910390fd5b620186a0600161193f610c34565b6119499190613e60565b6119539190613ed1565b821015611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90613f74565b60405180910390fd5b6103e860056119a2610c34565b6119ac9190613e60565b6119b69190613ed1565b8211156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90614006565b60405180910390fd5b8160088190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6000611a9f611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611abd6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90613ab2565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611b3d611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611b5b6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613ab2565b60405180910390fd5b8060108190555060648110611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613c8a565b60405180910390fd5b50565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c2c611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611c4a6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9790613ab2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614098565b60405180910390fd5b611d1881612ca2565b50565b600b5481565b611d29611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611d476112fb565b73ffffffffffffffffffffffffffffffffffffffff1614611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490613ab2565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb9061412a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a906141bc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120219190613831565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061424e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612103906142e0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b05750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e69061434c565b60405180910390fd5b600081036122085761220383836000612e09565b612c9d565b600c60009054906101000a900460ff16156125e3576122256112fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561229357506122636112fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122cc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612306575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561231f5750600760009054906101000a900460ff16155b156125e257600c60019054906101000a900460ff1661241957601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d95750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f906143b8565b60405180910390fd5b5b600e60009054906101000a900460ff16156125e1576124366112fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124bd57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561251557507f0000000000000000000000003127228c35a596b113fc502294416c9c63752bdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125e05743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614470565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126865750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561274357600c60009054906101000a900460ff16156126e6576009548111156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90614502565b60405180910390fd5b5b600b546126f283610e9d565b826126fd9190613c0a565b111561273e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127359061456e565b60405180910390fd5b6128f7565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127e65750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561284b57600c60009054906101000a900460ff161561284657600a54811115612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c90614600565b60405180910390fd5b5b6128f6565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128f557600b546128a883610e9d565b826128b39190613c0a565b11156128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb9061456e565b60405180910390fd5b5b5b5b600061290230610e9d565b9050600060085482101590508080156129275750600c60029054906101000a900460ff165b80156129405750600760009054906101000a900460ff16155b80156129965750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129ec5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a425750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a86576001600760006101000a81548160ff021916908315150217905550612a6a613088565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b3c5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b4657600090505b60008115612c8d57601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba957506000601054115b15612bdd57612bd66064612bc86010548861319190919063ffffffff16565b6131a790919063ffffffff16565b9050612c69565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c3857506000600f54115b15612c6857612c656064612c57600f548861319190919063ffffffff16565b6131a790919063ffffffff16565b90505b5b6000811115612c7e57612c7d873083612e09565b5b8085612c8a9190614620565b94505b612c98878787612e09565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6f9061424e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede906142e0565b60405180910390fd5b612ef28383836131bd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f906146c6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461300b9190613c0a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161306f9190613831565b60405180910390a36130828484846131c2565b50505050565b600061309330610e9d565b905060008082036130a557505061318f565b60146008546130b49190613e60565b8211156130cd5760146008546130ca9190613e60565b91505b60004790506130db836131c7565b60006130f0824761340490919063ffffffff16565b9050600081111561318a57600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161314190614717565b60006040518083038185875af1925050503d806000811461317e576040519150601f19603f3d011682016040523d82523d6000602084013e613183565b606091505b5050809350505b505050505b565b6000818361319f9190613e60565b905092915050565b600081836131b59190613ed1565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156131e4576131e36135ef565b5b6040519080825280602002602001820160405280156132125781602001602082028036833780820191505090505b509050308160008151811061322a57613229613ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f39190614741565b8160018151811061330757613306613ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061336c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e65565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133ce959493929190614867565b600060405180830381600087803b1580156133e857600080fd5b505af11580156133fc573d6000803e3d6000fd5b505050505050565b600081836134129190614620565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613454578082015181840152602081019050613439565b60008484015250505050565b6000601f19601f8301169050919050565b600061347c8261341a565b6134868185613425565b9350613496818560208601613436565b61349f81613460565b840191505092915050565b600060208201905081810360008301526134c48184613471565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061350b826134e0565b9050919050565b61351b81613500565b811461352657600080fd5b50565b60008135905061353881613512565b92915050565b6000819050919050565b6135518161353e565b811461355c57600080fd5b50565b60008135905061356e81613548565b92915050565b6000806040838503121561358b5761358a6134d6565b5b600061359985828601613529565b92505060206135aa8582860161355f565b9150509250929050565b60008115159050919050565b6135c9816135b4565b82525050565b60006020820190506135e460008301846135c0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61362782613460565b810181811067ffffffffffffffff82111715613646576136456135ef565b5b80604052505050565b60006136596134cc565b9050613665828261361e565b919050565b600067ffffffffffffffff821115613685576136846135ef565b5b602082029050602081019050919050565b600080fd5b60006136ae6136a98461366a565b61364f565b905080838252602082019050602084028301858111156136d1576136d0613696565b5b835b818110156136fa57806136e68882613529565b8452602084019350506020810190506136d3565b5050509392505050565b600082601f830112613719576137186135ea565b5b813561372984826020860161369b565b91505092915050565b600060208284031215613748576137476134d6565b5b600082013567ffffffffffffffff811115613766576137656134db565b5b61377284828501613704565b91505092915050565b600060208284031215613791576137906134d6565b5b600061379f84828501613529565b91505092915050565b6000819050919050565b60006137cd6137c86137c3846134e0565b6137a8565b6134e0565b9050919050565b60006137df826137b2565b9050919050565b60006137f1826137d4565b9050919050565b613801816137e6565b82525050565b600060208201905061381c60008301846137f8565b92915050565b61382b8161353e565b82525050565b60006020820190506138466000830184613822565b92915050565b600080600060608486031215613865576138646134d6565b5b600061387386828701613529565b935050602061388486828701613529565b92505060406138958682870161355f565b9150509250925092565b600060ff82169050919050565b6138b58161389f565b82525050565b60006020820190506138d060008301846138ac565b92915050565b6138df81613500565b82525050565b60006020820190506138fa60008301846138d6565b92915050565b600060208284031215613916576139156134d6565b5b60006139248482850161355f565b91505092915050565b613936816135b4565b811461394157600080fd5b50565b6000813590506139538161392d565b92915050565b600080604083850312156139705761396f6134d6565b5b600061397e85828601613529565b925050602061398f85828601613944565b9150509250929050565b6000602082840312156139af576139ae6134d6565b5b60006139bd84828501613944565b91505092915050565b600080604083850312156139dd576139dc6134d6565b5b60006139eb85828601613529565b92505060206139fc85828601613529565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a4d57607f821691505b602082108103613a6057613a5f613a06565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a9c602083613425565b9150613aa782613a66565b602082019050919050565b60006020820190508181036000830152613acb81613a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b3b8261353e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b6d57613b6c613b01565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613bd4602883613425565b9150613bdf82613b78565b604082019050919050565b60006020820190508181036000830152613c0381613bc7565b9050919050565b6000613c158261353e565b9150613c208361353e565b9250828201905080821115613c3857613c37613b01565b5b92915050565b7f43616e6e6f742073657420666565206d6f7265207468656e2039250000000000600082015250565b6000613c74601b83613425565b9150613c7f82613c3e565b602082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000613d06602783613425565b9150613d1182613caa565b604082019050919050565b60006020820190508181036000830152613d3581613cf9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613d98603983613425565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613e2a602583613425565b9150613e3582613dce565b604082019050919050565b60006020820190508181036000830152613e5981613e1d565b9050919050565b6000613e6b8261353e565b9150613e768361353e565b9250828202613e848161353e565b91508282048414831517613e9b57613e9a613b01565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613edc8261353e565b9150613ee78361353e565b925082613ef757613ef6613ea2565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613f5e603583613425565b9150613f6982613f02565b604082019050919050565b60006020820190508181036000830152613f8d81613f51565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613ff0603483613425565b9150613ffb82613f94565b604082019050919050565b6000602082019050818103600083015261401f81613fe3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614082602683613425565b915061408d82614026565b604082019050919050565b600060208201905081810360008301526140b181614075565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614114602483613425565b915061411f826140b8565b604082019050919050565b6000602082019050818103600083015261414381614107565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a6602283613425565b91506141b18261414a565b604082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614238602583613425565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142ca602383613425565b91506142d58261426e565b604082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f596f7520617265206120626f7400000000000000000000000000000000000000600082015250565b6000614336600d83613425565b915061434182614300565b602082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143a2601683613425565b91506143ad8261436c565b602082019050919050565b600060208201905081810360008301526143d181614395565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061445a604983613425565b9150614465826143d8565b606082019050919050565b600060208201905081810360008301526144898161444d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b60006144ec602883613425565b91506144f782614490565b604082019050919050565b6000602082019050818103600083015261451b816144df565b9050919050565b7f4d61782057616c6c657420457863656564656400000000000000000000000000600082015250565b6000614558601383613425565b915061456382614522565b602082019050919050565b600060208201905081810360008301526145878161454b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b60006145ea602a83613425565b91506145f58261458e565b604082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b600061462b8261353e565b91506146368361353e565b925082820390508181111561464e5761464d613b01565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146b0602683613425565b91506146bb82614654565b604082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b600081905092915050565b50565b60006147016000836146e6565b915061470c826146f1565b600082019050919050565b6000614722826146f4565b9150819050919050565b60008151905061473b81613512565b92915050565b600060208284031215614757576147566134d6565b5b60006147658482850161472c565b91505092915050565b6000819050919050565b600061479361478e6147898461476e565b6137a8565b61353e565b9050919050565b6147a381614778565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147de81613500565b82525050565b60006147f083836147d5565b60208301905092915050565b6000602082019050919050565b6000614814826147a9565b61481e81856147b4565b9350614829836147c5565b8060005b8381101561485a57815161484188826147e4565b975061484c836147fc565b92505060018101905061482d565b5085935050505092915050565b600060a08201905061487c6000830188613822565b614889602083018761479a565b818103604083015261489b8186614809565b90506148aa60608301856138d6565b6148b76080830184613822565b969550505050505056fea2646970667358221220f6a992e4ba222adcbc7d615207b96b6dab1fdbc4d1fad44e0074fbcfc4ad589c64736f6c63430008110033

Deployed Bytecode Sourcemap

21017:12805:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8248:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32362:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22007:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21097:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7201:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8429:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21836:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7043:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8933:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21806:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21155:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21460:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27655:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21392:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21540:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7372:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1655:103;;;;;;;;;;;;;:::i;:::-;;25847:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24757:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26607:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21358:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24593:112;;;;;;;;;;;;;:::i;:::-;;1004:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32230:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25739:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6927:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26956:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9159:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7712:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22261:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21500:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26188:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21758:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25144:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7950:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21316:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24939:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26016:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21283:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1913:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21427:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27464:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6708:100;6762:13;6795:5;6788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6708:100;:::o;8248:169::-;8331:4;8348:39;8357:12;:10;:12::i;:::-;8371:7;8380:6;8348:8;:39::i;:::-;8405:4;8398:11;;8248:169;;;;:::o;32362:203::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32446:9:::1;32441:117;32465:15;:22;32461:1;:26;32441:117;;;32542:4;32509:10;:30;32520:15;32536:1;32520:18;;;;;;;;:::i;:::-;;;;;;;;32509:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32489:3;;;;;:::i;:::-;;;;32441:117;;;;32362:203:::0;:::o;22007:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;21097:51::-;;;:::o;7201:108::-;7262:7;7289:12;;7282:19;;7201:108;:::o;8429:492::-;8569:4;8586:36;8596:6;8604:9;8615:6;8586:9;:36::i;:::-;8635:24;8662:11;:19;8674:6;8662:19;;;;;;;;;;;;;;;:33;8682:12;:10;:12::i;:::-;8662:33;;;;;;;;;;;;;;;;8635:60;;8734:6;8714:16;:26;;8706:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8821:57;8830:6;8838:12;:10;:12::i;:::-;8871:6;8852:16;:25;8821:8;:57::i;:::-;8909:4;8902:11;;;8429:492;;;;;:::o;21836:22::-;;;;:::o;7043:93::-;7101:5;7126:2;7119:9;;7043:93;:::o;8933:215::-;9021:4;9038:80;9047:12;:10;:12::i;:::-;9061:7;9107:10;9070:11;:25;9082:12;:10;:12::i;:::-;9070:25;;;;;;;;;;;;;;;:34;9096:7;9070:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9038:8;:80::i;:::-;9136:4;9129:11;;8933:215;;;;:::o;21806:21::-;;;;:::o;21155:38::-;;;:::o;21460:33::-;;;;;;;;;;;;;:::o;27655:126::-;27721:4;27745:19;:28;27765:7;27745:28;;;;;;;;;;;;;;;;;;;;;;;;;27738:35;;27655:126;;;:::o;21392:28::-;;;;:::o;21540:31::-;;;;;;;;;;;;;:::o;7372:127::-;7446:7;7473:9;:18;7483:7;7473:18;;;;;;;;;;;;;;;;7466:25;;7372:127;;;:::o;1655:103::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1720:30:::1;1747:1;1720:18;:30::i;:::-;1655:103::o:0;25847:161::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25938:4:::1;25929:6;:13;;;;25966:3;25961:4;:8;25953:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25847:161:::0;:::o;24757:121::-;24809:4;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24843:5:::1;24826:14;;:22;;;;;;;;;;;;;;;;;;24866:4;24859:11;;24757:121:::0;:::o;26607:341::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26727:4:::1;26722:162;;26784:13;26774:23;;:6;:23;;::::0;26748:124:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26722:162;26936:4;26894:31;:39;26926:6;26894:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26607:341:::0;;:::o;21358:27::-;;;;:::o;24593:112::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24664:4:::1;24648:13;;:20;;;;;;;;;;;;;;;;;;24693:4;24679:11;;:18;;;;;;;;;;;;;;;;;;24593:112::o:0;1004:87::-;1050:7;1077:6;;;;;;;;;;;1070:13;;1004:87;:::o;32230:123::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32332:13:::1;32310:10;:19;32321:7;32310:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32230:123:::0;;:::o;25739:100::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25824:7:::1;25810:11;;:21;;;;;;;;;;;;;;;;;;25739:100:::0;:::o;6927:104::-;6983:13;7016:7;7009:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6927:104;:::o;26956:304::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27100:13:::1;27092:21;;:4;:21;;::::0;27070:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27211:41;27240:4;27246:5;27211:28;:41::i;:::-;26956:304:::0;;:::o;9159:413::-;9252:4;9269:24;9296:11;:25;9308:12;:10;:12::i;:::-;9296:25;;;;;;;;;;;;;;;:34;9322:7;9296:34;;;;;;;;;;;;;;;;9269:61;;9369:15;9349:16;:35;;9341:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9462:67;9471:12;:10;:12::i;:::-;9485:7;9513:15;9494:16;:34;9462:8;:67::i;:::-;9560:4;9553:11;;;9159:413;;;;:::o;7712:175::-;7798:4;7815:42;7825:12;:10;:12::i;:::-;7839:9;7850:6;7815:9;:42::i;:::-;7875:4;7868:11;;7712:175;;;;:::o;22261:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;21500:33::-;;;;;;;;;;;;;:::o;26188:182::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26304:8:::1;26273:19;:28;26293:7;26273:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26344:7;26328:34;;;26353:8;26328:34;;;;;;:::i;:::-;;;;;;;;26188:182:::0;;:::o;21758:39::-;;;;;;;;;;;;;:::o;25144:497::-;25252:4;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25331:6:::1;25326:1;25310:13;:11;:13::i;:::-;:17;;;;:::i;:::-;25309:28;;;;:::i;:::-;25296:9;:41;;25274:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;25486:4;25481:1;25465:13;:11;:13::i;:::-;:17;;;;:::i;:::-;25464:26;;;;:::i;:::-;25451:9;:39;;25429:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;25602:9;25581:18;:30;;;;25629:4;25622:11;;25144:497:::0;;;:::o;7950:151::-;8039:7;8066:11;:18;8078:5;8066:18;;;;;;;;;;;;;;;:27;8085:7;8066:27;;;;;;;;;;;;;;;;8059:34;;7950:151;;;;:::o;21316:33::-;;;;:::o;24939:135::-;24999:4;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25039:5:::1;25016:20;;:28;;;;;;;;;;;;;;;;;;25062:4;25055:11;;24939:135:::0;:::o;26016:164::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26110:4:::1;26100:7;:14;;;;26138:3;26133:4;:8;26125:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;26016:164:::0;:::o;21283:24::-;;;;;;;;;;;;;:::o;1913:201::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2022:1:::1;2002:22;;:8;:22;;::::0;1994:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2078:28;2097:8;2078:18;:28::i;:::-;1913:201:::0;:::o;21427:24::-;;;;:::o;27464:183::-;1235:12;:10;:12::i;:::-;1224:23;;:7;:5;:7::i;:::-;:23;;;1216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27596:9:::1;;;;;;;;;;;27567:39;;27584:10;27567:39;;;;;;;;;;;;27629:10;27617:9;;:22;;;;;;;;;;;;;;;;;;27464:183:::0;:::o;376:98::-;429:7;456:10;449:17;;376:98;:::o;11355:380::-;11508:1;11491:19;;:5;:19;;;11483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11589:1;11570:21;;:7;:21;;;11562:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11673:6;11643:11;:18;11655:5;11643:18;;;;;;;;;;;;;;;:27;11662:7;11643:27;;;;;;;;;;;;;;;:36;;;;11711:7;11695:32;;11704:5;11695:32;;;11720:6;11695:32;;;;;;:::i;:::-;;;;;;;;11355:380;;;:::o;27839:4383::-;27987:1;27971:18;;:4;:18;;;27963:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28064:1;28050:16;;:2;:16;;;28042:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28126:10;:16;28137:4;28126:16;;;;;;;;;;;;;;;;;;;;;;;;;28125:17;:36;;;;;28147:10;:14;28158:2;28147:14;;;;;;;;;;;;;;;;;;;;;;;;;28146:15;28125:36;28117:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28206:1;28196:6;:11;28192:93;;28224:28;28240:4;28246:2;28250:1;28224:15;:28::i;:::-;28267:7;;28192:93;28301:14;;;;;;;;;;;28297:1291;;;28361:7;:5;:7::i;:::-;28353:15;;:4;:15;;;;:49;;;;;28395:7;:5;:7::i;:::-;28389:13;;:2;:13;;;;28353:49;:86;;;;;28437:1;28423:16;;:2;:16;;;;28353:86;:128;;;;;28474:6;28460:21;;:2;:21;;;;28353:128;:158;;;;;28503:8;;;;;;;;;;;28502:9;28353:158;28331:1246;;;28551:13;;;;;;;;;;;28546:223;;28623:19;:25;28643:4;28623:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28652:19;:23;28672:2;28652:23;;;;;;;;;;;;;;;;;;;;;;;;;28623:52;28589:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28546:223;28925:20;;;;;;;;;;;28921:641;;;29006:7;:5;:7::i;:::-;29000:13;;:2;:13;;;;:72;;;;;29056:15;29042:30;;:2;:30;;;;29000:72;:129;;;;;29115:13;29101:28;;:2;:28;;;;29000:129;28970:573;;;29293:12;29218:28;:39;29247:9;29218:39;;;;;;;;;;;;;;;;:87;29180:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;29507:12;29465:28;:39;29494:9;29465:39;;;;;;;;;;;;;;;:54;;;;28970:573;28921:641;28331:1246;28297:1291;29632:25;:31;29658:4;29632:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;29689:31;:35;29721:2;29689:35;;;;;;;;;;;;;;;;;;;;;;;;;29688:36;29632:92;29606:1257;;;29771:14;;;;;;;;;;;29767:218;;;29857:12;;29847:6;:22;;29813:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;29767:218;30067:9;;30050:13;30060:2;30050:9;:13::i;:::-;30041:6;:22;;;;:::i;:::-;:35;;30007:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29606:1257;;;30245:25;:29;30271:2;30245:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;30300:31;:37;30332:4;30300:37;;;;;;;;;;;;;;;;;;;;;;;;;30299:38;30245:92;30219:644;;;30384:14;;;;;;;;;;;30380:233;;;30474:13;;30464:6;:23;;30426:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;30380:233;30219:644;;;30643:31;:35;30675:2;30643:35;;;;;;;;;;;;;;;;;;;;;;;;;30638:225;;30763:9;;30746:13;30756:2;30746:9;:13::i;:::-;30737:6;:22;;;;:::i;:::-;:35;;30703:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30638:225;30219:644;29606:1257;30875:28;30906:24;30924:4;30906:9;:24::i;:::-;30875:55;;30943:12;30982:18;;30958:20;:42;;30943:57;;31031:7;:35;;;;;31055:11;;;;;;;;;;;31031:35;:61;;;;;31084:8;;;;;;;;;;;31083:9;31031:61;:110;;;;;31110:25;:31;31136:4;31110:31;;;;;;;;;;;;;;;;;;;;;;;;;31109:32;31031:110;:153;;;;;31159:19;:25;31179:4;31159:25;;;;;;;;;;;;;;;;;;;;;;;;;31158:26;31031:153;:194;;;;;31202:19;:23;31222:2;31202:23;;;;;;;;;;;;;;;;;;;;;;;;;31201:24;31031:194;31013:326;;;31263:4;31252:8;;:15;;;;;;;;;;;;;;;;;;31284:10;:8;:10::i;:::-;31322:5;31311:8;;:16;;;;;;;;;;;;;;;;;;31013:326;31351:12;31367:8;;;;;;;;;;;31366:9;31351:24;;31477:19;:25;31497:4;31477:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31506:19;:23;31526:2;31506:23;;;;;;;;;;;;;;;;;;;;;;;;;31477:52;31473:100;;;31556:5;31546:15;;31473:100;31585:12;31690:7;31686:483;;;31742:25;:29;31768:2;31742:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;31785:1;31775:7;;:11;31742:44;31738:282;;;31814:28;31838:3;31814:19;31825:7;;31814:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;31807:35;;31738:282;;;31904:25;:31;31930:4;31904:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;31948:1;31939:6;;:10;31904:45;31900:120;;;31977:27;32000:3;31977:18;31988:6;;31977;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31970:34;;31900:120;31738:282;32047:1;32040:4;:8;32036:91;;;32069:42;32085:4;32099;32106;32069:15;:42::i;:::-;32036:91;32153:4;32143:14;;;;;:::i;:::-;;;31686:483;32181:33;32197:4;32203:2;32207:6;32181:15;:33::i;:::-;27952:4270;;;;27839:4383;;;;:::o;2274:191::-;2348:16;2367:6;;;;;;;;;;;2348:25;;2393:8;2384:6;;:17;;;;;;;;;;;;;;;;;;2448:8;2417:40;;2438:8;2417:40;;;;;;;;;;;;2337:128;2274:191;:::o;27268:188::-;27385:5;27351:25;:31;27377:4;27351:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27442:5;27408:40;;27436:4;27408:40;;;;;;;;;;;;27268:188;;:::o;9585:743::-;9743:1;9725:20;;:6;:20;;;9717:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9827:1;9806:23;;:9;:23;;;9798:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9892:47;9913:6;9921:9;9932:6;9892:20;:47::i;:::-;9952:21;9976:9;:17;9986:6;9976:17;;;;;;;;;;;;;;;;9952:41;;10029:6;10012:13;:23;;10004:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10150:6;10134:13;:22;10114:9;:17;10124:6;10114:17;;;;;;;;;;;;;;;:42;;;;10202:6;10178:9;:20;10188:9;10178:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10243:9;10226:35;;10235:6;10226:35;;;10254:6;10226:35;;;;;;:::i;:::-;;;;;;;;10274:46;10294:6;10302:9;10313:6;10274:19;:46::i;:::-;9706:622;9585:743;;;:::o;33172:647::-;33211:23;33237:24;33255:4;33237:9;:24::i;:::-;33211:50;;33272:12;33320:1;33301:15;:20;33297:60;;33339:7;;;;33297:60;33412:2;33391:18;;:23;;;;:::i;:::-;33373:15;:41;33369:115;;;33470:2;33449:18;;:23;;;;:::i;:::-;33431:41;;33369:115;33496:25;33524:21;33496:49;;33556:33;33573:15;33556:16;:33::i;:::-;33600:16;33619:44;33645:17;33619:21;:25;;:44;;;;:::i;:::-;33600:63;;33724:1;33713:8;:12;33709:93;;;33755:9;;;;;;;;;;;:14;;33777:8;33755:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33742:48;;;;;33709:93;33200:619;;;;33172:647;:::o;14357:98::-;14415:7;14446:1;14442;:5;;;;:::i;:::-;14435:12;;14357:98;;;;:::o;14467:::-;14525:7;14556:1;14552;:5;;;;:::i;:::-;14545:12;;14467:98;;;;:::o;11748:125::-;;;;:::o;11885:124::-;;;;:::o;32573:589::-;32699:21;32737:1;32723:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32699:40;;32768:4;32750;32755:1;32750:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32794:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32784:4;32789:1;32784:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32829:62;32846:4;32861:15;32879:11;32829:8;:62::i;:::-;32930:15;:66;;;33011:11;33037:1;33081:4;33108;33128:15;32930:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32628:534;32573:589;:::o;14246:98::-;14304:7;14335:1;14331;:5;;;;:::i;:::-;14324:12;;14246:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:180;3617:77;3614:1;3607:88;3714:4;3711:1;3704:15;3738:4;3735:1;3728:15;3755:281;3838:27;3860:4;3838:27;:::i;:::-;3830:6;3826:40;3968:6;3956:10;3953:22;3932:18;3920:10;3917:34;3914:62;3911:88;;;3979:18;;:::i;:::-;3911:88;4019:10;4015:2;4008:22;3798:238;3755:281;;:::o;4042:129::-;4076:6;4103:20;;:::i;:::-;4093:30;;4132:33;4160:4;4152:6;4132:33;:::i;:::-;4042:129;;;:::o;4177:311::-;4254:4;4344:18;4336:6;4333:30;4330:56;;;4366:18;;:::i;:::-;4330:56;4416:4;4408:6;4404:17;4396:25;;4476:4;4470;4466:15;4458:23;;4177:311;;;:::o;4494:117::-;4603:1;4600;4593:12;4634:710;4730:5;4755:81;4771:64;4828:6;4771:64;:::i;:::-;4755:81;:::i;:::-;4746:90;;4856:5;4885:6;4878:5;4871:21;4919:4;4912:5;4908:16;4901:23;;4972:4;4964:6;4960:17;4952:6;4948:30;5001:3;4993:6;4990:15;4987:122;;;5020:79;;:::i;:::-;4987:122;5135:6;5118:220;5152:6;5147:3;5144:15;5118:220;;;5227:3;5256:37;5289:3;5277:10;5256:37;:::i;:::-;5251:3;5244:50;5323:4;5318:3;5314:14;5307:21;;5194:144;5178:4;5173:3;5169:14;5162:21;;5118:220;;;5122:21;4736:608;;4634:710;;;;;:::o;5367:370::-;5438:5;5487:3;5480:4;5472:6;5468:17;5464:27;5454:122;;5495:79;;:::i;:::-;5454:122;5612:6;5599:20;5637:94;5727:3;5719:6;5712:4;5704:6;5700:17;5637:94;:::i;:::-;5628:103;;5444:293;5367:370;;;;:::o;5743:539::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6030:1;6019:9;6015:17;6002:31;6060:18;6052:6;6049:30;6046:117;;;6082:79;;:::i;:::-;6046:117;6187:78;6257:7;6248:6;6237:9;6233:22;6187:78;:::i;:::-;6177:88;;5973:302;5743:539;;;;:::o;6288:329::-;6347:6;6396:2;6384:9;6375:7;6371:23;6367:32;6364:119;;;6402:79;;:::i;:::-;6364:119;6522:1;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6493:117;6288:329;;;;:::o;6623:60::-;6651:3;6672:5;6665:12;;6623:60;;;:::o;6689:142::-;6739:9;6772:53;6790:34;6799:24;6817:5;6799:24;:::i;:::-;6790:34;:::i;:::-;6772:53;:::i;:::-;6759:66;;6689:142;;;:::o;6837:126::-;6887:9;6920:37;6951:5;6920:37;:::i;:::-;6907:50;;6837:126;;;:::o;6969:153::-;7046:9;7079:37;7110:5;7079:37;:::i;:::-;7066:50;;6969:153;;;:::o;7128:185::-;7242:64;7300:5;7242:64;:::i;:::-;7237:3;7230:77;7128:185;;:::o;7319:276::-;7439:4;7477:2;7466:9;7462:18;7454:26;;7490:98;7585:1;7574:9;7570:17;7561:6;7490:98;:::i;:::-;7319:276;;;;:::o;7601:118::-;7688:24;7706:5;7688:24;:::i;:::-;7683:3;7676:37;7601:118;;:::o;7725:222::-;7818:4;7856:2;7845:9;7841:18;7833:26;;7869:71;7937:1;7926:9;7922:17;7913:6;7869:71;:::i;:::-;7725:222;;;;:::o;7953:619::-;8030:6;8038;8046;8095:2;8083:9;8074:7;8070:23;8066:32;8063:119;;;8101:79;;:::i;:::-;8063:119;8221:1;8246:53;8291:7;8282:6;8271:9;8267:22;8246:53;:::i;:::-;8236:63;;8192:117;8348:2;8374:53;8419:7;8410:6;8399:9;8395:22;8374:53;:::i;:::-;8364:63;;8319:118;8476:2;8502:53;8547:7;8538:6;8527:9;8523:22;8502:53;:::i;:::-;8492:63;;8447:118;7953:619;;;;;:::o;8578:86::-;8613:7;8653:4;8646:5;8642:16;8631:27;;8578:86;;;:::o;8670:112::-;8753:22;8769:5;8753:22;:::i;:::-;8748:3;8741:35;8670:112;;:::o;8788:214::-;8877:4;8915:2;8904:9;8900:18;8892:26;;8928:67;8992:1;8981:9;8977:17;8968:6;8928:67;:::i;:::-;8788:214;;;;:::o;9008:118::-;9095:24;9113:5;9095:24;:::i;:::-;9090:3;9083:37;9008:118;;:::o;9132:222::-;9225:4;9263:2;9252:9;9248:18;9240:26;;9276:71;9344:1;9333:9;9329:17;9320:6;9276:71;:::i;:::-;9132:222;;;;:::o;9360:329::-;9419:6;9468:2;9456:9;9447:7;9443:23;9439:32;9436:119;;;9474:79;;:::i;:::-;9436:119;9594:1;9619:53;9664:7;9655:6;9644:9;9640:22;9619:53;:::i;:::-;9609:63;;9565:117;9360:329;;;;:::o;9695:116::-;9765:21;9780:5;9765:21;:::i;:::-;9758:5;9755:32;9745:60;;9801:1;9798;9791:12;9745:60;9695:116;:::o;9817:133::-;9860:5;9898:6;9885:20;9876:29;;9914:30;9938:5;9914:30;:::i;:::-;9817:133;;;;:::o;9956:468::-;10021:6;10029;10078:2;10066:9;10057:7;10053:23;10049:32;10046:119;;;10084:79;;:::i;:::-;10046:119;10204:1;10229:53;10274:7;10265:6;10254:9;10250:22;10229:53;:::i;:::-;10219:63;;10175:117;10331:2;10357:50;10399:7;10390:6;10379:9;10375:22;10357:50;:::i;:::-;10347:60;;10302:115;9956:468;;;;;:::o;10430:323::-;10486:6;10535:2;10523:9;10514:7;10510:23;10506:32;10503:119;;;10541:79;;:::i;:::-;10503:119;10661:1;10686:50;10728:7;10719:6;10708:9;10704:22;10686:50;:::i;:::-;10676:60;;10632:114;10430:323;;;;:::o;10759:474::-;10827:6;10835;10884:2;10872:9;10863:7;10859:23;10855:32;10852:119;;;10890:79;;:::i;:::-;10852:119;11010:1;11035:53;11080:7;11071:6;11060:9;11056:22;11035:53;:::i;:::-;11025:63;;10981:117;11137:2;11163:53;11208:7;11199:6;11188:9;11184:22;11163:53;:::i;:::-;11153:63;;11108:118;10759:474;;;;;:::o;11239:180::-;11287:77;11284:1;11277:88;11384:4;11381:1;11374:15;11408:4;11405:1;11398:15;11425:320;11469:6;11506:1;11500:4;11496:12;11486:22;;11553:1;11547:4;11543:12;11574:18;11564:81;;11630:4;11622:6;11618:17;11608:27;;11564:81;11692:2;11684:6;11681:14;11661:18;11658:38;11655:84;;11711:18;;:::i;:::-;11655:84;11476:269;11425:320;;;:::o;11751:182::-;11891:34;11887:1;11879:6;11875:14;11868:58;11751:182;:::o;11939:366::-;12081:3;12102:67;12166:2;12161:3;12102:67;:::i;:::-;12095:74;;12178:93;12267:3;12178:93;:::i;:::-;12296:2;12291:3;12287:12;12280:19;;11939:366;;;:::o;12311:419::-;12477:4;12515:2;12504:9;12500:18;12492:26;;12564:9;12558:4;12554:20;12550:1;12539:9;12535:17;12528:47;12592:131;12718:4;12592:131;:::i;:::-;12584:139;;12311:419;;;:::o;12736:180::-;12784:77;12781:1;12774:88;12881:4;12878:1;12871:15;12905:4;12902:1;12895:15;12922:180;12970:77;12967:1;12960:88;13067:4;13064:1;13057:15;13091:4;13088:1;13081:15;13108:233;13147:3;13170:24;13188:5;13170:24;:::i;:::-;13161:33;;13216:66;13209:5;13206:77;13203:103;;13286:18;;:::i;:::-;13203:103;13333:1;13326:5;13322:13;13315:20;;13108:233;;;:::o;13347:227::-;13487:34;13483:1;13475:6;13471:14;13464:58;13556:10;13551:2;13543:6;13539:15;13532:35;13347:227;:::o;13580:366::-;13722:3;13743:67;13807:2;13802:3;13743:67;:::i;:::-;13736:74;;13819:93;13908:3;13819:93;:::i;:::-;13937:2;13932:3;13928:12;13921:19;;13580:366;;;:::o;13952:419::-;14118:4;14156:2;14145:9;14141:18;14133:26;;14205:9;14199:4;14195:20;14191:1;14180:9;14176:17;14169:47;14233:131;14359:4;14233:131;:::i;:::-;14225:139;;13952:419;;;:::o;14377:191::-;14417:3;14436:20;14454:1;14436:20;:::i;:::-;14431:25;;14470:20;14488:1;14470:20;:::i;:::-;14465:25;;14513:1;14510;14506:9;14499:16;;14534:3;14531:1;14528:10;14525:36;;;14541:18;;:::i;:::-;14525:36;14377:191;;;;:::o;14574:177::-;14714:29;14710:1;14702:6;14698:14;14691:53;14574:177;:::o;14757:366::-;14899:3;14920:67;14984:2;14979:3;14920:67;:::i;:::-;14913:74;;14996:93;15085:3;14996:93;:::i;:::-;15114:2;15109:3;15105:12;15098:19;;14757:366;;;:::o;15129:419::-;15295:4;15333:2;15322:9;15318:18;15310:26;;15382:9;15376:4;15372:20;15368:1;15357:9;15353:17;15346:47;15410:131;15536:4;15410:131;:::i;:::-;15402:139;;15129:419;;;:::o;15554:226::-;15694:34;15690:1;15682:6;15678:14;15671:58;15763:9;15758:2;15750:6;15746:15;15739:34;15554:226;:::o;15786:366::-;15928:3;15949:67;16013:2;16008:3;15949:67;:::i;:::-;15942:74;;16025:93;16114:3;16025:93;:::i;:::-;16143:2;16138:3;16134:12;16127:19;;15786:366;;;:::o;16158:419::-;16324:4;16362:2;16351:9;16347:18;16339:26;;16411:9;16405:4;16401:20;16397:1;16386:9;16382:17;16375:47;16439:131;16565:4;16439:131;:::i;:::-;16431:139;;16158:419;;;:::o;16583:244::-;16723:34;16719:1;16711:6;16707:14;16700:58;16792:27;16787:2;16779:6;16775:15;16768:52;16583:244;:::o;16833:366::-;16975:3;16996:67;17060:2;17055:3;16996:67;:::i;:::-;16989:74;;17072:93;17161:3;17072:93;:::i;:::-;17190:2;17185:3;17181:12;17174:19;;16833:366;;;:::o;17205:419::-;17371:4;17409:2;17398:9;17394:18;17386:26;;17458:9;17452:4;17448:20;17444:1;17433:9;17429:17;17422:47;17486:131;17612:4;17486:131;:::i;:::-;17478:139;;17205:419;;;:::o;17630:224::-;17770:34;17766:1;17758:6;17754:14;17747:58;17839:7;17834:2;17826:6;17822:15;17815:32;17630:224;:::o;17860:366::-;18002:3;18023:67;18087:2;18082:3;18023:67;:::i;:::-;18016:74;;18099:93;18188:3;18099:93;:::i;:::-;18217:2;18212:3;18208:12;18201:19;;17860:366;;;:::o;18232:419::-;18398:4;18436:2;18425:9;18421:18;18413:26;;18485:9;18479:4;18475:20;18471:1;18460:9;18456:17;18449:47;18513:131;18639:4;18513:131;:::i;:::-;18505:139;;18232:419;;;:::o;18657:410::-;18697:7;18720:20;18738:1;18720:20;:::i;:::-;18715:25;;18754:20;18772:1;18754:20;:::i;:::-;18749:25;;18809:1;18806;18802:9;18831:30;18849:11;18831:30;:::i;:::-;18820:41;;19010:1;19001:7;18997:15;18994:1;18991:22;18971:1;18964:9;18944:83;18921:139;;19040:18;;:::i;:::-;18921:139;18705:362;18657:410;;;;:::o;19073:180::-;19121:77;19118:1;19111:88;19218:4;19215:1;19208:15;19242:4;19239:1;19232:15;19259:185;19299:1;19316:20;19334:1;19316:20;:::i;:::-;19311:25;;19350:20;19368:1;19350:20;:::i;:::-;19345:25;;19389:1;19379:35;;19394:18;;:::i;:::-;19379:35;19436:1;19433;19429:9;19424:14;;19259:185;;;;:::o;19450:240::-;19590:34;19586:1;19578:6;19574:14;19567:58;19659:23;19654:2;19646:6;19642:15;19635:48;19450:240;:::o;19696:366::-;19838:3;19859:67;19923:2;19918:3;19859:67;:::i;:::-;19852:74;;19935:93;20024:3;19935:93;:::i;:::-;20053:2;20048:3;20044:12;20037:19;;19696:366;;;:::o;20068:419::-;20234:4;20272:2;20261:9;20257:18;20249:26;;20321:9;20315:4;20311:20;20307:1;20296:9;20292:17;20285:47;20349:131;20475:4;20349:131;:::i;:::-;20341:139;;20068:419;;;:::o;20493:239::-;20633:34;20629:1;20621:6;20617:14;20610:58;20702:22;20697:2;20689:6;20685:15;20678:47;20493:239;:::o;20738:366::-;20880:3;20901:67;20965:2;20960:3;20901:67;:::i;:::-;20894:74;;20977:93;21066:3;20977:93;:::i;:::-;21095:2;21090:3;21086:12;21079:19;;20738:366;;;:::o;21110:419::-;21276:4;21314:2;21303:9;21299:18;21291:26;;21363:9;21357:4;21353:20;21349:1;21338:9;21334:17;21327:47;21391:131;21517:4;21391:131;:::i;:::-;21383:139;;21110:419;;;:::o;21535:225::-;21675:34;21671:1;21663:6;21659:14;21652:58;21744:8;21739:2;21731:6;21727:15;21720:33;21535:225;:::o;21766:366::-;21908:3;21929:67;21993:2;21988:3;21929:67;:::i;:::-;21922:74;;22005:93;22094:3;22005:93;:::i;:::-;22123:2;22118:3;22114:12;22107:19;;21766:366;;;:::o;22138:419::-;22304:4;22342:2;22331:9;22327:18;22319:26;;22391:9;22385:4;22381:20;22377:1;22366:9;22362:17;22355:47;22419:131;22545:4;22419:131;:::i;:::-;22411:139;;22138:419;;;:::o;22563:223::-;22703:34;22699:1;22691:6;22687:14;22680:58;22772:6;22767:2;22759:6;22755:15;22748:31;22563:223;:::o;22792:366::-;22934:3;22955:67;23019:2;23014:3;22955:67;:::i;:::-;22948:74;;23031:93;23120:3;23031:93;:::i;:::-;23149:2;23144:3;23140:12;23133:19;;22792:366;;;:::o;23164:419::-;23330:4;23368:2;23357:9;23353:18;23345:26;;23417:9;23411:4;23407:20;23403:1;23392:9;23388:17;23381:47;23445:131;23571:4;23445:131;:::i;:::-;23437:139;;23164:419;;;:::o;23589:221::-;23729:34;23725:1;23717:6;23713:14;23706:58;23798:4;23793:2;23785:6;23781:15;23774:29;23589:221;:::o;23816:366::-;23958:3;23979:67;24043:2;24038:3;23979:67;:::i;:::-;23972:74;;24055:93;24144:3;24055:93;:::i;:::-;24173:2;24168:3;24164:12;24157:19;;23816:366;;;:::o;24188:419::-;24354:4;24392:2;24381:9;24377:18;24369:26;;24441:9;24435:4;24431:20;24427:1;24416:9;24412:17;24405:47;24469:131;24595:4;24469:131;:::i;:::-;24461:139;;24188:419;;;:::o;24613:224::-;24753:34;24749:1;24741:6;24737:14;24730:58;24822:7;24817:2;24809:6;24805:15;24798:32;24613:224;:::o;24843:366::-;24985:3;25006:67;25070:2;25065:3;25006:67;:::i;:::-;24999:74;;25082:93;25171:3;25082:93;:::i;:::-;25200:2;25195:3;25191:12;25184:19;;24843:366;;;:::o;25215:419::-;25381:4;25419:2;25408:9;25404:18;25396:26;;25468:9;25462:4;25458:20;25454:1;25443:9;25439:17;25432:47;25496:131;25622:4;25496:131;:::i;:::-;25488:139;;25215:419;;;:::o;25640:222::-;25780:34;25776:1;25768:6;25764:14;25757:58;25849:5;25844:2;25836:6;25832:15;25825:30;25640:222;:::o;25868:366::-;26010:3;26031:67;26095:2;26090:3;26031:67;:::i;:::-;26024:74;;26107:93;26196:3;26107:93;:::i;:::-;26225:2;26220:3;26216:12;26209:19;;25868:366;;;:::o;26240:419::-;26406:4;26444:2;26433:9;26429:18;26421:26;;26493:9;26487:4;26483:20;26479:1;26468:9;26464:17;26457:47;26521:131;26647:4;26521:131;:::i;:::-;26513:139;;26240:419;;;:::o;26665:163::-;26805:15;26801:1;26793:6;26789:14;26782:39;26665:163;:::o;26834:366::-;26976:3;26997:67;27061:2;27056:3;26997:67;:::i;:::-;26990:74;;27073:93;27162:3;27073:93;:::i;:::-;27191:2;27186:3;27182:12;27175:19;;26834:366;;;:::o;27206:419::-;27372:4;27410:2;27399:9;27395:18;27387:26;;27459:9;27453:4;27449:20;27445:1;27434:9;27430:17;27423:47;27487:131;27613:4;27487:131;:::i;:::-;27479:139;;27206:419;;;:::o;27631:172::-;27771:24;27767:1;27759:6;27755:14;27748:48;27631:172;:::o;27809:366::-;27951:3;27972:67;28036:2;28031:3;27972:67;:::i;:::-;27965:74;;28048:93;28137:3;28048:93;:::i;:::-;28166:2;28161:3;28157:12;28150:19;;27809:366;;;:::o;28181:419::-;28347:4;28385:2;28374:9;28370:18;28362:26;;28434:9;28428:4;28424:20;28420:1;28409:9;28405:17;28398:47;28462:131;28588:4;28462:131;:::i;:::-;28454:139;;28181:419;;;:::o;28606:297::-;28746:34;28742:1;28734:6;28730:14;28723:58;28815:34;28810:2;28802:6;28798:15;28791:59;28884:11;28879:2;28871:6;28867:15;28860:36;28606:297;:::o;28909:366::-;29051:3;29072:67;29136:2;29131:3;29072:67;:::i;:::-;29065:74;;29148:93;29237:3;29148:93;:::i;:::-;29266:2;29261:3;29257:12;29250:19;;28909:366;;;:::o;29281:419::-;29447:4;29485:2;29474:9;29470:18;29462:26;;29534:9;29528:4;29524:20;29520:1;29509:9;29505:17;29498:47;29562:131;29688:4;29562:131;:::i;:::-;29554:139;;29281:419;;;:::o;29706:227::-;29846:34;29842:1;29834:6;29830:14;29823:58;29915:10;29910:2;29902:6;29898:15;29891:35;29706:227;:::o;29939:366::-;30081:3;30102:67;30166:2;30161:3;30102:67;:::i;:::-;30095:74;;30178:93;30267:3;30178:93;:::i;:::-;30296:2;30291:3;30287:12;30280:19;;29939:366;;;:::o;30311:419::-;30477:4;30515:2;30504:9;30500:18;30492:26;;30564:9;30558:4;30554:20;30550:1;30539:9;30535:17;30528:47;30592:131;30718:4;30592:131;:::i;:::-;30584:139;;30311:419;;;:::o;30736:169::-;30876:21;30872:1;30864:6;30860:14;30853:45;30736:169;:::o;30911:366::-;31053:3;31074:67;31138:2;31133:3;31074:67;:::i;:::-;31067:74;;31150:93;31239:3;31150:93;:::i;:::-;31268:2;31263:3;31259:12;31252:19;;30911:366;;;:::o;31283:419::-;31449:4;31487:2;31476:9;31472:18;31464:26;;31536:9;31530:4;31526:20;31522:1;31511:9;31507:17;31500:47;31564:131;31690:4;31564:131;:::i;:::-;31556:139;;31283:419;;;:::o;31708:229::-;31848:34;31844:1;31836:6;31832:14;31825:58;31917:12;31912:2;31904:6;31900:15;31893:37;31708:229;:::o;31943:366::-;32085:3;32106:67;32170:2;32165:3;32106:67;:::i;:::-;32099:74;;32182:93;32271:3;32182:93;:::i;:::-;32300:2;32295:3;32291:12;32284:19;;31943:366;;;:::o;32315:419::-;32481:4;32519:2;32508:9;32504:18;32496:26;;32568:9;32562:4;32558:20;32554:1;32543:9;32539:17;32532:47;32596:131;32722:4;32596:131;:::i;:::-;32588:139;;32315:419;;;:::o;32740:194::-;32780:4;32800:20;32818:1;32800:20;:::i;:::-;32795:25;;32834:20;32852:1;32834:20;:::i;:::-;32829:25;;32878:1;32875;32871:9;32863:17;;32902:1;32896:4;32893:11;32890:37;;;32907:18;;:::i;:::-;32890:37;32740:194;;;;:::o;32940:225::-;33080:34;33076:1;33068:6;33064:14;33057:58;33149:8;33144:2;33136:6;33132:15;33125:33;32940:225;:::o;33171:366::-;33313:3;33334:67;33398:2;33393:3;33334:67;:::i;:::-;33327:74;;33410:93;33499:3;33410:93;:::i;:::-;33528:2;33523:3;33519:12;33512:19;;33171:366;;;:::o;33543:419::-;33709:4;33747:2;33736:9;33732:18;33724:26;;33796:9;33790:4;33786:20;33782:1;33771:9;33767:17;33760:47;33824:131;33950:4;33824:131;:::i;:::-;33816:139;;33543:419;;;:::o;33968:147::-;34069:11;34106:3;34091:18;;33968:147;;;;:::o;34121:114::-;;:::o;34241:398::-;34400:3;34421:83;34502:1;34497:3;34421:83;:::i;:::-;34414:90;;34513:93;34602:3;34513:93;:::i;:::-;34631:1;34626:3;34622:11;34615:18;;34241:398;;;:::o;34645:379::-;34829:3;34851:147;34994:3;34851:147;:::i;:::-;34844:154;;35015:3;35008:10;;34645:379;;;:::o;35030:143::-;35087:5;35118:6;35112:13;35103:22;;35134:33;35161:5;35134:33;:::i;:::-;35030:143;;;;:::o;35179:351::-;35249:6;35298:2;35286:9;35277:7;35273:23;35269:32;35266:119;;;35304:79;;:::i;:::-;35266:119;35424:1;35449:64;35505:7;35496:6;35485:9;35481:22;35449:64;:::i;:::-;35439:74;;35395:128;35179:351;;;;:::o;35536:85::-;35581:7;35610:5;35599:16;;35536:85;;;:::o;35627:158::-;35685:9;35718:61;35736:42;35745:32;35771:5;35745:32;:::i;:::-;35736:42;:::i;:::-;35718:61;:::i;:::-;35705:74;;35627:158;;;:::o;35791:147::-;35886:45;35925:5;35886:45;:::i;:::-;35881:3;35874:58;35791:147;;:::o;35944:114::-;36011:6;36045:5;36039:12;36029:22;;35944:114;;;:::o;36064:184::-;36163:11;36197:6;36192:3;36185:19;36237:4;36232:3;36228:14;36213:29;;36064:184;;;;:::o;36254:132::-;36321:4;36344:3;36336:11;;36374:4;36369:3;36365:14;36357:22;;36254:132;;;:::o;36392:108::-;36469:24;36487:5;36469:24;:::i;:::-;36464:3;36457:37;36392:108;;:::o;36506:179::-;36575:10;36596:46;36638:3;36630:6;36596:46;:::i;:::-;36674:4;36669:3;36665:14;36651:28;;36506:179;;;;:::o;36691:113::-;36761:4;36793;36788:3;36784:14;36776:22;;36691:113;;;:::o;36840:732::-;36959:3;36988:54;37036:5;36988:54;:::i;:::-;37058:86;37137:6;37132:3;37058:86;:::i;:::-;37051:93;;37168:56;37218:5;37168:56;:::i;:::-;37247:7;37278:1;37263:284;37288:6;37285:1;37282:13;37263:284;;;37364:6;37358:13;37391:63;37450:3;37435:13;37391:63;:::i;:::-;37384:70;;37477:60;37530:6;37477:60;:::i;:::-;37467:70;;37323:224;37310:1;37307;37303:9;37298:14;;37263:284;;;37267:14;37563:3;37556:10;;36964:608;;;36840:732;;;;:::o;37578:831::-;37841:4;37879:3;37868:9;37864:19;37856:27;;37893:71;37961:1;37950:9;37946:17;37937:6;37893:71;:::i;:::-;37974:80;38050:2;38039:9;38035:18;38026:6;37974:80;:::i;:::-;38101:9;38095:4;38091:20;38086:2;38075:9;38071:18;38064:48;38129:108;38232:4;38223:6;38129:108;:::i;:::-;38121:116;;38247:72;38315:2;38304:9;38300:18;38291:6;38247:72;:::i;:::-;38329:73;38397:3;38386:9;38382:19;38373:6;38329:73;:::i;:::-;37578:831;;;;;;;;:::o

Swarm Source

ipfs://f6a992e4ba222adcbc7d615207b96b6dab1fdbc4d1fad44e0074fbcfc4ad589c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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