ETH Price: $3,416.40 (-2.33%)
Gas: 7 Gwei

Token

NO NUT NOVEMBER (NUT)
 

Overview

Max Total Supply

100,000,000 NUT

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,176,985.826692645 NUT

Value
$0.00
0x492CF511D9f7975951B91D97b15567B427ae8196
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:
Nut

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-31
*/

// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.7;

//
// NO NUT NOVEMBER - $NUT
// Telegram: https://t.me/hold_your_nut
// 

// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
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 subtraction 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);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/interfaces/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

pragma solidity ^0.8.0;


// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// File: contracts/Nut.sol

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract Nut is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "NO NUT NOVEMBER";
    string private constant _symbol = "NUT";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public launchBlock;

    // Buy Fee
    uint256 private _redisFeeOnBuy = 1;
    uint256 private _taxFeeOnBuy = 6;

    // Sell Fee
    uint256 private _redisFeeOnSell = 1;
    uint256 private _taxFeeOnSell = 6;

    // Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousRedisFee = _redisFee;
    uint256 private _previousTaxFee = _taxFee;

    mapping(address => bool) public bots;
    mapping(address => uint256) private cooldown;

    address payable private _developmentAddress =
        payable(0x9A21C0E121242e5eAD0B44CB509b5d0C2dEF01EF);

    address payable private _marketingAddress =
        payable(0x03dAF48B641C0a7d51642f5eAaA2F37a07a1f7C4);

    address payable private _donationAddress =
        payable(0xc72D22eCb8A21d15F3e3292A3bfCa589924f1923);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = true;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount = 2_000_000 * 10**_decimals;
    uint256 public _maxWalletSize = 4_000_000 * 10**_decimals;
    uint256 public _swapTokensAtAmount = 500_000 * 10**_decimals;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        bots[address(0x66f049111958809841Bbe4b81c034Da2D953AA0c)] = true;
        bots[address(0x000000005736775Feb0C8568e7DEe77222a26880)] = true;
        bots[address(0x34822A742BDE3beF13acabF14244869841f06A73)] = true;
        bots[address(0x69611A66d0CF67e5Ddd1957e6499b5C5A3E44845)] = true;
        bots[address(0x69611A66d0CF67e5Ddd1957e6499b5C5A3E44845)] = true;
        bots[address(0x8484eFcBDa76955463aa12e1d504D7C6C89321F8)] = true;
        bots[address(0xe5265ce4D0a3B191431e1bac056d72b2b9F0Fe44)] = true;
        bots[address(0x33F9Da98C57674B5FC5AE7349E3C732Cf2E6Ce5C)] = true;
        bots[address(0xc59a8E2d2c476BA9122aa4eC19B4c5E2BBAbbC28)] = true;
        bots[address(0x21053Ff2D9Fc37D4DB8687d48bD0b57581c1333D)] = true;
        bots[address(0x4dd6A0D3191A41522B84BC6b65d17f6f5e6a4192)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousRedisFee = _redisFee;
        _previousTaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousRedisFee;
        _taxFee = _previousTaxFee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            // Trade start check.
            if (!tradingOpen) {
                require(
                    from == owner(),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            require(
                !bots[from] && !bots[to],
                "TOKEN: Your account is blacklisted!"
            );

            if (
                block.number <= launchBlock &&
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                to != address(this)
            ) {
                bots[to] = true;
            }

            if (to != uniswapV2Pair) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if (contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount;
            }

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        // Transfer tokens.
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            // Set fee for buys.
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            // Set fee for sells.
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        uint256 devAmount = amount.div(3);
        uint256 marketingAmount = amount.div(3);
        uint256 donationAmount = amount.div(3);
        (bool sentDevFee,) = _developmentAddress.call{value: devAmount}("");
        require(sentDevFee, "Failed to send dev fee.");
        (bool sentMarketingFee,) = _marketingAddress.call{value: marketingAmount}("");
        require(sentMarketingFee, "Failed to send marketing fee.");
        (bool sentDonationFee,) = _donationAddress.call{value: donationAmount}("");
        require(sentDonationFee, "Failed to send donation fee.");
    }

    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
        launchBlock = block.number;
    }

    function manualSwap() external {
        require(
            _msgSender() == _developmentAddress ||
            _msgSender() == _marketingAddress ||
            _msgSender() == owner()
        );
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external {
        require(
            _msgSender() == _developmentAddress ||
            _msgSender() == _marketingAddress ||
            _msgSender() == owner()
        );
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function blockBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notBot) public onlyOwner {
        bots[notBot] = false;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );

        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);

        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);

        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();

        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;

        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    // Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount)
        public
        onlyOwner
    {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    // Enable/Disable token swaps.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"notBot","type":"address"}],"name":"unblockBot","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"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000dd2565b6305f5e10062000025919062000f0f565b60001962000034919062000ff6565b60001962000043919062000f70565b600555600160085560066009556001600a556006600b55600a54600c55600b54600d55600c54600e55600d54600f55739a21c0e121242e5ead0b44cb509b5d0c2def01ef601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507303daf48b641c0a7d51642f5eaaa2f37a07a1f7c4601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c72d22ecb8a21d15f3e3292a3bfca589924f1923601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601660146101000a81548160ff0219169083151502179055506000601660156101000a81548160ff02191690831515021790555060016016806101000a81548160ff0219169083151502179055506009600a620001d1919062000dd2565b621e8480620001e1919062000f0f565b6017556009600a620001f4919062000dd2565b623d090062000204919062000f0f565b6018556009600a62000217919062000dd2565b6207a12062000227919062000f0f565b6019553480156200023757600080fd5b50620002586200024c62000bcd60201b60201c565b62000bd560201b60201c565b600554600160006200026f62000bcd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034e57600080fd5b505afa15801562000363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000389919062000cd9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ec57600080fd5b505afa15801562000401573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000427919062000cd9565b6040518363ffffffff1660e01b81526004016200044692919062000d2d565b602060405180830381600087803b1580156200046157600080fd5b505af115801562000476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049c919062000cd9565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004f262000c9960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007366f049111958809841bbe4b81c034da2d953aa0c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060006f5736775feb0c8568e7dee77222a2688073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007334822a742bde3bef13acabf14244869841f06a7373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007369611a66d0cf67e5ddd1957e6499b5c5a3e4484573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007369611a66d0cf67e5ddd1957e6499b5c5a3e4484573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000738484efcbda76955463aa12e1d504d7c6c89321f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e5265ce4d0a3b191431e1bac056d72b2b9f0fe4473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007333f9da98c57674b5fc5ae7349e3c732cf2e6ce5c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c59a8e2d2c476ba9122aa4ec19b4c5e2bbabbc2873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007321053ff2d9fc37d4db8687d48bd0b57581c1333d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000734dd6a0d3191a41522b84bc6b65d17f6f5e6a419273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b3f62000bcd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000b9e919062000dd2565b6305f5e10062000baf919062000f0f565b60405162000bbe919062000d5a565b60405180910390a350620010b8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008151905062000cd3816200109e565b92915050565b60006020828403121562000cf25762000cf16200108c565b5b600062000d028482850162000cc2565b91505092915050565b62000d168162000fab565b82525050565b62000d278162000fdf565b82525050565b600060408201905062000d44600083018562000d0b565b62000d53602083018462000d0b565b9392505050565b600060208201905062000d71600083018462000d1c565b92915050565b6000808291508390505b600185111562000dc95780860481111562000da15762000da06200102e565b5b600185161562000db15780820291505b808102905062000dc18562001091565b945062000d81565b94509492505050565b600062000ddf8262000fdf565b915062000dec8362000fe9565b925062000e1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e23565b905092915050565b60008262000e35576001905062000f08565b8162000e45576000905062000f08565b816001811462000e5e576002811462000e695762000e9f565b600191505062000f08565b60ff84111562000e7e5762000e7d6200102e565b5b8360020a91508482111562000e985762000e976200102e565b5b5062000f08565b5060208310610133831016604e8410600b841016171562000ed95782820a90508381111562000ed35762000ed26200102e565b5b62000f08565b62000ee8848484600162000d77565b9250905081840481111562000f025762000f016200102e565b5b81810290505b9392505050565b600062000f1c8262000fdf565b915062000f298362000fdf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f655762000f646200102e565b5b828202905092915050565b600062000f7d8262000fdf565b915062000f8a8362000fdf565b92508282101562000fa05762000f9f6200102e565b5b828203905092915050565b600062000fb88262000fbf565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620010038262000fdf565b9150620010108362000fdf565b9250826200102357620010226200105d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b620010a98162000fab565b8114620010b557600080fd5b50565b613c6080620010c86000396000f3fe6080604052600436106101d05760003560e01c80637d1db4a5116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e1461065c578063ea1644d514610699578063f2fde38b146106c2578063f4293890146106eb576101d7565b8063a9059cbb1461058e578063bfd79284146105cb578063c492f04614610608578063d00efb2f14610631576101d7565b80638f9a55c0116100d15780638f9a55c0146104e657806395d89b411461051157806398a5c3151461053c578063a2a957bb14610565576101d7565b80637d1db4a5146104675780638da5cb5b146104925780638f70ccf7146104bd576101d7565b8063313ce5671161016f5780636d8aa8f81161013e5780636d8aa8f8146103c157806370a08231146103ea578063715018a61461042757806374010ece1461043e576101d7565b8063313ce5671461032b57806349bd5a5e1461035657806351bc3c85146103815780636b99905314610398576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632fd689e314610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612b19565b610702565b005b34801561021157600080fd5b5061021a61079f565b6040516102279190612fd1565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612a79565b6107dc565b6040516102649190612f9b565b60405180910390f35b34801561027957600080fd5b506102826107fa565b60405161028f9190612fb6565b60405180910390f35b3480156102a457600080fd5b506102ad610820565b6040516102ba91906131d3565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612a26565b610844565b6040516102f79190612f9b565b60405180910390f35b34801561030c57600080fd5b5061031561091d565b60405161032291906131d3565b60405180910390f35b34801561033757600080fd5b50610340610923565b60405161034d9190613248565b60405180910390f35b34801561036257600080fd5b5061036b61092c565b6040516103789190612f80565b60405180910390f35b34801561038d57600080fd5b50610396610952565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061298c565b610a6f565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612b62565b610ad2565b005b3480156103f657600080fd5b50610411600480360381019061040c919061298c565b610af6565b60405161041e91906131d3565b60405180910390f35b34801561043357600080fd5b5061043c610b47565b005b34801561044a57600080fd5b5061046560048036038101906104609190612b8f565b610b5b565b005b34801561047357600080fd5b5061047c610b6d565b60405161048991906131d3565b60405180910390f35b34801561049e57600080fd5b506104a7610b73565b6040516104b49190612f80565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612b62565b610b9c565b005b3480156104f257600080fd5b506104fb610bc8565b60405161050891906131d3565b60405180910390f35b34801561051d57600080fd5b50610526610bce565b6040516105339190612fd1565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190612b8f565b610c0b565b005b34801561057157600080fd5b5061058c60048036038101906105879190612bbc565b610c1d565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612a79565b610c47565b6040516105c29190612f9b565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed919061298c565b610c65565b6040516105ff9190612f9b565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612ab9565b610c85565b005b34801561063d57600080fd5b50610646610d32565b60405161065391906131d3565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906129e6565b610d38565b60405161069091906131d3565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190612b8f565b610dbf565b005b3480156106ce57600080fd5b506106e960048036038101906106e4919061298c565b610dd1565b005b3480156106f757600080fd5b50610700610e55565b005b61070a610f6a565b60005b815181101561079b5760016010600084848151811061072f5761072e613742565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107939061369b565b91505061070d565b5050565b60606040518060400160405280600f81526020017f4e4f204e5554204e4f56454d4245520000000000000000000000000000000000815250905090565b60006107f06107e9610fe8565b8484610ff0565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61083091906133ee565b6305f5e10061083f919061350c565b905090565b60006108518484846111bb565b6109128461085d610fe8565b61090d85604051806060016040528060288152602001613c0360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c3610fe8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8f9092919063ffffffff16565b610ff0565b600190509392505050565b60195481565b60006009905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610993610fe8565b73ffffffffffffffffffffffffffffffffffffffff161480610a095750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109f1610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b80610a4d5750610a17610b73565b73ffffffffffffffffffffffffffffffffffffffff16610a35610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b610a5657600080fd5b6000610a6130610af6565b9050610a6c81611be4565b50565b610a77610f6a565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610ada610f6a565b806016806101000a81548160ff02191690831515021790555050565b6000610b40600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6c565b9050919050565b610b4f610f6a565b610b596000611eda565b565b610b63610f6a565b8060178190555050565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ba4610f6a565b80601660146101000a81548160ff0219169083151502179055504360078190555050565b60185481565b60606040518060400160405280600381526020017f4e55540000000000000000000000000000000000000000000000000000000000815250905090565b610c13610f6a565b8060198190555050565b610c25610f6a565b8360088190555082600a819055508160098190555080600b8190555050505050565b6000610c5b610c54610fe8565b84846111bb565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b610c8d610f6a565b60005b83839050811015610d2c578160046000868685818110610cb357610cb2613742565b5b9050602002016020810190610cc8919061298c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d249061369b565b915050610c90565b50505050565b60075481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dc7610f6a565b8060188190555050565b610dd9610f6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613073565b60405180910390fd5b610e5281611eda565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e96610fe8565b73ffffffffffffffffffffffffffffffffffffffff161480610f0c5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ef4610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b80610f505750610f1a610b73565b73ffffffffffffffffffffffffffffffffffffffff16610f38610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b610f5957600080fd5b6000479050610f6781611f9e565b50565b610f72610fe8565b73ffffffffffffffffffffffffffffffffffffffff16610f90610b73565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90613133565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906131b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613093565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ae91906131d3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613173565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290612ff3565b60405180910390fd5b600081116112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613153565b60405180910390fd5b6112e6610b73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113545750611324610b73565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561188e57601660149054906101000a900460ff166113e357611375610b73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990613013565b60405180910390fd5b5b601754811115611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90613053565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156114cc5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61150b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611502906130b3565b60405180910390fd5b600754431115801561156a5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156115c45750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115fc57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561165a576001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461170757601854816116bc84610af6565b6116c69190613314565b10611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613193565b60405180910390fd5b5b600061171230610af6565b905060006019548210159050601754821061172d5760175491505b8080156117475750601660159054906101000a900460ff16155b80156117a15750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156117b7575060168054906101000a900460ff165b801561180d5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156118635750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561188b5761187182611be4565b600047905060008111156118895761188847611f9e565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119355750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806119e85750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156119e75750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156119f65760009050611b7d565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611aa15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611ab957600854600c81905550600954600d819055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611b645750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611b7c57600a54600c81905550600b54600d819055505b5b611b8984848484612259565b50505050565b6000838311158290611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce9190612fd1565b60405180910390fd5b5082840390509392505050565b6001601660156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611c1c57611c1b613771565b5b604051908082528060200260200182016040528015611c4a5781602001602082028036833780820191505090505b5090503081600081518110611c6257611c61613742565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0457600080fd5b505afa158015611d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3c91906129b9565b81600181518110611d5057611d4f613742565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611db730601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610ff0565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e1b9594939291906131ee565b600060405180830381600087803b158015611e3557600080fd5b505af1158015611e49573d6000803e3d6000fd5b50505050506000601660156101000a81548160ff02191690831515021790555050565b6000600554821115611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa90613033565b60405180910390fd5b6000611ebd612286565b9050611ed281846122b190919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611fb46003836122b190919063ffffffff16565b90506000611fcc6003846122b190919063ffffffff16565b90506000611fe46003856122b190919063ffffffff16565b90506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161202e90612f6b565b60006040518083038185875af1925050503d806000811461206b576040519150601f19603f3d011682016040523d82523d6000602084013e612070565b606091505b50509050806120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90613113565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516120fc90612f6b565b60006040518083038185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e61213e565b606091505b5050905080612182576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612179906130f3565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516121ca90612f6b565b60006040518083038185875af1925050503d8060008114612207576040519150601f19603f3d011682016040523d82523d6000602084013e61220c565b606091505b5050905080612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906130d3565b60405180910390fd5b50505050505050565b80612267576122666122c7565b5b61227284848461230a565b806122805761227f6124d5565b5b50505050565b60008060006122936124e9565b915091506122aa81836122b190919063ffffffff16565b9250505090565b600081836122bf919061336a565b905092915050565b6000600c541480156122db57506000600d54145b156122e557612308565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b60008060008060008061231c87612584565b95509550955095509550955061237a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ec90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061240f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061245b81612618565b61246584836126d5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124c291906131d3565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b6000806000600554905060006009600a61250391906133ee565b6305f5e100612512919061350c565b90506125456009600a61252591906133ee565b6305f5e100612534919061350c565b6005546122b190919063ffffffff16565b821015612577576005546009600a61255d91906133ee565b6305f5e10061256c919061350c565b935093505050612580565b81819350935050505b9091565b60008060008060008060008060006125a18a600c54600d5461270f565b92509250925060006125b1612286565b905060008060006125c48e8787876127a5565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836125fa9190613566565b905092915050565b600081836126109190613314565b905092915050565b6000612622612286565b90506000612639828461282e90919063ffffffff16565b905061268d81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6126ea826005546125ec90919063ffffffff16565b6005819055506127058160065461260290919063ffffffff16565b6006819055505050565b60008060008061273b606461272d888a61282e90919063ffffffff16565b6122b190919063ffffffff16565b905060006127656064612757888b61282e90919063ffffffff16565b6122b190919063ffffffff16565b9050600061278e82612780858c6125ec90919063ffffffff16565b6125ec90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806127be858961282e90919063ffffffff16565b905060006127d5868961282e90919063ffffffff16565b905060006127ec878961282e90919063ffffffff16565b905060006128158261280785876125ec90919063ffffffff16565b6125ec90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361283c919061350c565b905092915050565b600061285761285284613288565b613263565b9050808382526020820190508285602086028201111561287a576128796137aa565b5b60005b858110156128aa578161289088826128b4565b84526020840193506020830192505060018101905061287d565b5050509392505050565b6000813590506128c381613bbd565b92915050565b6000815190506128d881613bbd565b92915050565b60008083601f8401126128f4576128f36137a5565b5b8235905067ffffffffffffffff811115612911576129106137a0565b5b60208301915083602082028301111561292d5761292c6137aa565b5b9250929050565b600082601f830112612949576129486137a5565b5b8135612959848260208601612844565b91505092915050565b60008135905061297181613bd4565b92915050565b60008135905061298681613beb565b92915050565b6000602082840312156129a2576129a16137b4565b5b60006129b0848285016128b4565b91505092915050565b6000602082840312156129cf576129ce6137b4565b5b60006129dd848285016128c9565b91505092915050565b600080604083850312156129fd576129fc6137b4565b5b6000612a0b858286016128b4565b9250506020612a1c858286016128b4565b9150509250929050565b600080600060608486031215612a3f57612a3e6137b4565b5b6000612a4d868287016128b4565b9350506020612a5e868287016128b4565b9250506040612a6f86828701612977565b9150509250925092565b60008060408385031215612a9057612a8f6137b4565b5b6000612a9e858286016128b4565b9250506020612aaf85828601612977565b9150509250929050565b600080600060408486031215612ad257612ad16137b4565b5b600084013567ffffffffffffffff811115612af057612aef6137af565b5b612afc868287016128de565b93509350506020612b0f86828701612962565b9150509250925092565b600060208284031215612b2f57612b2e6137b4565b5b600082013567ffffffffffffffff811115612b4d57612b4c6137af565b5b612b5984828501612934565b91505092915050565b600060208284031215612b7857612b776137b4565b5b6000612b8684828501612962565b91505092915050565b600060208284031215612ba557612ba46137b4565b5b6000612bb384828501612977565b91505092915050565b60008060008060808587031215612bd657612bd56137b4565b5b6000612be487828801612977565b9450506020612bf587828801612977565b9350506040612c0687828801612977565b9250506060612c1787828801612977565b91505092959194509250565b6000612c2f8383612c3b565b60208301905092915050565b612c448161359a565b82525050565b612c538161359a565b82525050565b6000612c64826132c4565b612c6e81856132e7565b9350612c79836132b4565b8060005b83811015612caa578151612c918882612c23565b9750612c9c836132da565b925050600181019050612c7d565b5085935050505092915050565b612cc0816135ac565b82525050565b612ccf816135ef565b82525050565b612cde81613601565b82525050565b6000612cef826132cf565b612cf98185613303565b9350612d09818560208601613637565b612d12816137b9565b840191505092915050565b6000612d2a602383613303565b9150612d35826137d7565b604082019050919050565b6000612d4d603f83613303565b9150612d5882613826565b604082019050919050565b6000612d70602a83613303565b9150612d7b82613875565b604082019050919050565b6000612d93601c83613303565b9150612d9e826138c4565b602082019050919050565b6000612db6602683613303565b9150612dc1826138ed565b604082019050919050565b6000612dd9602283613303565b9150612de48261393c565b604082019050919050565b6000612dfc602383613303565b9150612e078261398b565b604082019050919050565b6000612e1f601c83613303565b9150612e2a826139da565b602082019050919050565b6000612e42601d83613303565b9150612e4d82613a03565b602082019050919050565b6000612e65601783613303565b9150612e7082613a2c565b602082019050919050565b6000612e88602083613303565b9150612e9382613a55565b602082019050919050565b6000612eab602983613303565b9150612eb682613a7e565b604082019050919050565b6000612ece602583613303565b9150612ed982613acd565b604082019050919050565b6000612ef1602383613303565b9150612efc82613b1c565b604082019050919050565b6000612f146000836132f8565b9150612f1f82613b6b565b600082019050919050565b6000612f37602483613303565b9150612f4282613b6e565b604082019050919050565b612f56816135d8565b82525050565b612f65816135e2565b82525050565b6000612f7682612f07565b9150819050919050565b6000602082019050612f956000830184612c4a565b92915050565b6000602082019050612fb06000830184612cb7565b92915050565b6000602082019050612fcb6000830184612cc6565b92915050565b60006020820190508181036000830152612feb8184612ce4565b905092915050565b6000602082019050818103600083015261300c81612d1d565b9050919050565b6000602082019050818103600083015261302c81612d40565b9050919050565b6000602082019050818103600083015261304c81612d63565b9050919050565b6000602082019050818103600083015261306c81612d86565b9050919050565b6000602082019050818103600083015261308c81612da9565b9050919050565b600060208201905081810360008301526130ac81612dcc565b9050919050565b600060208201905081810360008301526130cc81612def565b9050919050565b600060208201905081810360008301526130ec81612e12565b9050919050565b6000602082019050818103600083015261310c81612e35565b9050919050565b6000602082019050818103600083015261312c81612e58565b9050919050565b6000602082019050818103600083015261314c81612e7b565b9050919050565b6000602082019050818103600083015261316c81612e9e565b9050919050565b6000602082019050818103600083015261318c81612ec1565b9050919050565b600060208201905081810360008301526131ac81612ee4565b9050919050565b600060208201905081810360008301526131cc81612f2a565b9050919050565b60006020820190506131e86000830184612f4d565b92915050565b600060a0820190506132036000830188612f4d565b6132106020830187612cd5565b81810360408301526132228186612c59565b90506132316060830185612c4a565b61323e6080830184612f4d565b9695505050505050565b600060208201905061325d6000830184612f5c565b92915050565b600061326d61327e565b9050613279828261366a565b919050565b6000604051905090565b600067ffffffffffffffff8211156132a3576132a2613771565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061331f826135d8565b915061332a836135d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561335f5761335e6136e4565b5b828201905092915050565b6000613375826135d8565b9150613380836135d8565b9250826133905761338f613713565b5b828204905092915050565b6000808291508390505b60018511156133e5578086048111156133c1576133c06136e4565b5b60018516156133d05780820291505b80810290506133de856137ca565b94506133a5565b94509492505050565b60006133f9826135d8565b9150613404836135e2565b92506134317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613439565b905092915050565b6000826134495760019050613505565b816134575760009050613505565b816001811461346d5760028114613477576134a6565b6001915050613505565b60ff841115613489576134886136e4565b5b8360020a9150848211156134a05761349f6136e4565b5b50613505565b5060208310610133831016604e8410600b84101617156134db5782820a9050838111156134d6576134d56136e4565b5b613505565b6134e8848484600161339b565b925090508184048111156134ff576134fe6136e4565b5b81810290505b9392505050565b6000613517826135d8565b9150613522836135d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561355b5761355a6136e4565b5b828202905092915050565b6000613571826135d8565b915061357c836135d8565b92508282101561358f5761358e6136e4565b5b828203905092915050565b60006135a5826135b8565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135fa82613613565b9050919050565b600061360c826135d8565b9050919050565b600061361e82613625565b9050919050565b6000613630826135b8565b9050919050565b60005b8381101561365557808201518184015260208101905061363a565b83811115613664576000848401525b50505050565b613673826137b9565b810181811067ffffffffffffffff8211171561369257613691613771565b5b80604052505050565b60006136a6826135d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d9576136d86136e4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e6420646f6e6174696f6e206665652e00000000600082015250565b7f4661696c656420746f2073656e64206d61726b6574696e67206665652e000000600082015250565b7f4661696c656420746f2073656e6420646576206665652e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613bc68161359a565b8114613bd157600080fd5b50565b613bdd816135ac565b8114613be857600080fd5b50565b613bf4816135d8565b8114613bff57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201bb06bb5d0ff23b537230213a7affc77cdd9d1992c4b8a22302b58bf8116a11c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101d05760003560e01c80637d1db4a5116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e1461065c578063ea1644d514610699578063f2fde38b146106c2578063f4293890146106eb576101d7565b8063a9059cbb1461058e578063bfd79284146105cb578063c492f04614610608578063d00efb2f14610631576101d7565b80638f9a55c0116100d15780638f9a55c0146104e657806395d89b411461051157806398a5c3151461053c578063a2a957bb14610565576101d7565b80637d1db4a5146104675780638da5cb5b146104925780638f70ccf7146104bd576101d7565b8063313ce5671161016f5780636d8aa8f81161013e5780636d8aa8f8146103c157806370a08231146103ea578063715018a61461042757806374010ece1461043e576101d7565b8063313ce5671461032b57806349bd5a5e1461035657806351bc3c85146103815780636b99905314610398576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632fd689e314610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612b19565b610702565b005b34801561021157600080fd5b5061021a61079f565b6040516102279190612fd1565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612a79565b6107dc565b6040516102649190612f9b565b60405180910390f35b34801561027957600080fd5b506102826107fa565b60405161028f9190612fb6565b60405180910390f35b3480156102a457600080fd5b506102ad610820565b6040516102ba91906131d3565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612a26565b610844565b6040516102f79190612f9b565b60405180910390f35b34801561030c57600080fd5b5061031561091d565b60405161032291906131d3565b60405180910390f35b34801561033757600080fd5b50610340610923565b60405161034d9190613248565b60405180910390f35b34801561036257600080fd5b5061036b61092c565b6040516103789190612f80565b60405180910390f35b34801561038d57600080fd5b50610396610952565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061298c565b610a6f565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612b62565b610ad2565b005b3480156103f657600080fd5b50610411600480360381019061040c919061298c565b610af6565b60405161041e91906131d3565b60405180910390f35b34801561043357600080fd5b5061043c610b47565b005b34801561044a57600080fd5b5061046560048036038101906104609190612b8f565b610b5b565b005b34801561047357600080fd5b5061047c610b6d565b60405161048991906131d3565b60405180910390f35b34801561049e57600080fd5b506104a7610b73565b6040516104b49190612f80565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612b62565b610b9c565b005b3480156104f257600080fd5b506104fb610bc8565b60405161050891906131d3565b60405180910390f35b34801561051d57600080fd5b50610526610bce565b6040516105339190612fd1565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190612b8f565b610c0b565b005b34801561057157600080fd5b5061058c60048036038101906105879190612bbc565b610c1d565b005b34801561059a57600080fd5b506105b560048036038101906105b09190612a79565b610c47565b6040516105c29190612f9b565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed919061298c565b610c65565b6040516105ff9190612f9b565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612ab9565b610c85565b005b34801561063d57600080fd5b50610646610d32565b60405161065391906131d3565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906129e6565b610d38565b60405161069091906131d3565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190612b8f565b610dbf565b005b3480156106ce57600080fd5b506106e960048036038101906106e4919061298c565b610dd1565b005b3480156106f757600080fd5b50610700610e55565b005b61070a610f6a565b60005b815181101561079b5760016010600084848151811061072f5761072e613742565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107939061369b565b91505061070d565b5050565b60606040518060400160405280600f81526020017f4e4f204e5554204e4f56454d4245520000000000000000000000000000000000815250905090565b60006107f06107e9610fe8565b8484610ff0565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61083091906133ee565b6305f5e10061083f919061350c565b905090565b60006108518484846111bb565b6109128461085d610fe8565b61090d85604051806060016040528060288152602001613c0360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c3610fe8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8f9092919063ffffffff16565b610ff0565b600190509392505050565b60195481565b60006009905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610993610fe8565b73ffffffffffffffffffffffffffffffffffffffff161480610a095750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109f1610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b80610a4d5750610a17610b73565b73ffffffffffffffffffffffffffffffffffffffff16610a35610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b610a5657600080fd5b6000610a6130610af6565b9050610a6c81611be4565b50565b610a77610f6a565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610ada610f6a565b806016806101000a81548160ff02191690831515021790555050565b6000610b40600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6c565b9050919050565b610b4f610f6a565b610b596000611eda565b565b610b63610f6a565b8060178190555050565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ba4610f6a565b80601660146101000a81548160ff0219169083151502179055504360078190555050565b60185481565b60606040518060400160405280600381526020017f4e55540000000000000000000000000000000000000000000000000000000000815250905090565b610c13610f6a565b8060198190555050565b610c25610f6a565b8360088190555082600a819055508160098190555080600b8190555050505050565b6000610c5b610c54610fe8565b84846111bb565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b610c8d610f6a565b60005b83839050811015610d2c578160046000868685818110610cb357610cb2613742565b5b9050602002016020810190610cc8919061298c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d249061369b565b915050610c90565b50505050565b60075481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dc7610f6a565b8060188190555050565b610dd9610f6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613073565b60405180910390fd5b610e5281611eda565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e96610fe8565b73ffffffffffffffffffffffffffffffffffffffff161480610f0c5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ef4610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b80610f505750610f1a610b73565b73ffffffffffffffffffffffffffffffffffffffff16610f38610fe8565b73ffffffffffffffffffffffffffffffffffffffff16145b610f5957600080fd5b6000479050610f6781611f9e565b50565b610f72610fe8565b73ffffffffffffffffffffffffffffffffffffffff16610f90610b73565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd90613133565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906131b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613093565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ae91906131d3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613173565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290612ff3565b60405180910390fd5b600081116112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613153565b60405180910390fd5b6112e6610b73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113545750611324610b73565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561188e57601660149054906101000a900460ff166113e357611375610b73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990613013565b60405180910390fd5b5b601754811115611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90613053565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156114cc5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61150b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611502906130b3565b60405180910390fd5b600754431115801561156a5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156115c45750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115fc57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561165a576001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461170757601854816116bc84610af6565b6116c69190613314565b10611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90613193565b60405180910390fd5b5b600061171230610af6565b905060006019548210159050601754821061172d5760175491505b8080156117475750601660159054906101000a900460ff16155b80156117a15750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156117b7575060168054906101000a900460ff165b801561180d5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156118635750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561188b5761187182611be4565b600047905060008111156118895761188847611f9e565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119355750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806119e85750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156119e75750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156119f65760009050611b7d565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611aa15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611ab957600854600c81905550600954600d819055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611b645750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611b7c57600a54600c81905550600b54600d819055505b5b611b8984848484612259565b50505050565b6000838311158290611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce9190612fd1565b60405180910390fd5b5082840390509392505050565b6001601660156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611c1c57611c1b613771565b5b604051908082528060200260200182016040528015611c4a5781602001602082028036833780820191505090505b5090503081600081518110611c6257611c61613742565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0457600080fd5b505afa158015611d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3c91906129b9565b81600181518110611d5057611d4f613742565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611db730601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610ff0565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e1b9594939291906131ee565b600060405180830381600087803b158015611e3557600080fd5b505af1158015611e49573d6000803e3d6000fd5b50505050506000601660156101000a81548160ff02191690831515021790555050565b6000600554821115611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa90613033565b60405180910390fd5b6000611ebd612286565b9050611ed281846122b190919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611fb46003836122b190919063ffffffff16565b90506000611fcc6003846122b190919063ffffffff16565b90506000611fe46003856122b190919063ffffffff16565b90506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161202e90612f6b565b60006040518083038185875af1925050503d806000811461206b576040519150601f19603f3d011682016040523d82523d6000602084013e612070565b606091505b50509050806120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90613113565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516120fc90612f6b565b60006040518083038185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e61213e565b606091505b5050905080612182576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612179906130f3565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516121ca90612f6b565b60006040518083038185875af1925050503d8060008114612207576040519150601f19603f3d011682016040523d82523d6000602084013e61220c565b606091505b5050905080612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906130d3565b60405180910390fd5b50505050505050565b80612267576122666122c7565b5b61227284848461230a565b806122805761227f6124d5565b5b50505050565b60008060006122936124e9565b915091506122aa81836122b190919063ffffffff16565b9250505090565b600081836122bf919061336a565b905092915050565b6000600c541480156122db57506000600d54145b156122e557612308565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b60008060008060008061231c87612584565b95509550955095509550955061237a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ec90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061240f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260290919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061245b81612618565b61246584836126d5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124c291906131d3565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b6000806000600554905060006009600a61250391906133ee565b6305f5e100612512919061350c565b90506125456009600a61252591906133ee565b6305f5e100612534919061350c565b6005546122b190919063ffffffff16565b821015612577576005546009600a61255d91906133ee565b6305f5e10061256c919061350c565b935093505050612580565b81819350935050505b9091565b60008060008060008060008060006125a18a600c54600d5461270f565b92509250925060006125b1612286565b905060008060006125c48e8787876127a5565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836125fa9190613566565b905092915050565b600081836126109190613314565b905092915050565b6000612622612286565b90506000612639828461282e90919063ffffffff16565b905061268d81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6126ea826005546125ec90919063ffffffff16565b6005819055506127058160065461260290919063ffffffff16565b6006819055505050565b60008060008061273b606461272d888a61282e90919063ffffffff16565b6122b190919063ffffffff16565b905060006127656064612757888b61282e90919063ffffffff16565b6122b190919063ffffffff16565b9050600061278e82612780858c6125ec90919063ffffffff16565b6125ec90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806127be858961282e90919063ffffffff16565b905060006127d5868961282e90919063ffffffff16565b905060006127ec878961282e90919063ffffffff16565b905060006128158261280785876125ec90919063ffffffff16565b6125ec90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361283c919061350c565b905092915050565b600061285761285284613288565b613263565b9050808382526020820190508285602086028201111561287a576128796137aa565b5b60005b858110156128aa578161289088826128b4565b84526020840193506020830192505060018101905061287d565b5050509392505050565b6000813590506128c381613bbd565b92915050565b6000815190506128d881613bbd565b92915050565b60008083601f8401126128f4576128f36137a5565b5b8235905067ffffffffffffffff811115612911576129106137a0565b5b60208301915083602082028301111561292d5761292c6137aa565b5b9250929050565b600082601f830112612949576129486137a5565b5b8135612959848260208601612844565b91505092915050565b60008135905061297181613bd4565b92915050565b60008135905061298681613beb565b92915050565b6000602082840312156129a2576129a16137b4565b5b60006129b0848285016128b4565b91505092915050565b6000602082840312156129cf576129ce6137b4565b5b60006129dd848285016128c9565b91505092915050565b600080604083850312156129fd576129fc6137b4565b5b6000612a0b858286016128b4565b9250506020612a1c858286016128b4565b9150509250929050565b600080600060608486031215612a3f57612a3e6137b4565b5b6000612a4d868287016128b4565b9350506020612a5e868287016128b4565b9250506040612a6f86828701612977565b9150509250925092565b60008060408385031215612a9057612a8f6137b4565b5b6000612a9e858286016128b4565b9250506020612aaf85828601612977565b9150509250929050565b600080600060408486031215612ad257612ad16137b4565b5b600084013567ffffffffffffffff811115612af057612aef6137af565b5b612afc868287016128de565b93509350506020612b0f86828701612962565b9150509250925092565b600060208284031215612b2f57612b2e6137b4565b5b600082013567ffffffffffffffff811115612b4d57612b4c6137af565b5b612b5984828501612934565b91505092915050565b600060208284031215612b7857612b776137b4565b5b6000612b8684828501612962565b91505092915050565b600060208284031215612ba557612ba46137b4565b5b6000612bb384828501612977565b91505092915050565b60008060008060808587031215612bd657612bd56137b4565b5b6000612be487828801612977565b9450506020612bf587828801612977565b9350506040612c0687828801612977565b9250506060612c1787828801612977565b91505092959194509250565b6000612c2f8383612c3b565b60208301905092915050565b612c448161359a565b82525050565b612c538161359a565b82525050565b6000612c64826132c4565b612c6e81856132e7565b9350612c79836132b4565b8060005b83811015612caa578151612c918882612c23565b9750612c9c836132da565b925050600181019050612c7d565b5085935050505092915050565b612cc0816135ac565b82525050565b612ccf816135ef565b82525050565b612cde81613601565b82525050565b6000612cef826132cf565b612cf98185613303565b9350612d09818560208601613637565b612d12816137b9565b840191505092915050565b6000612d2a602383613303565b9150612d35826137d7565b604082019050919050565b6000612d4d603f83613303565b9150612d5882613826565b604082019050919050565b6000612d70602a83613303565b9150612d7b82613875565b604082019050919050565b6000612d93601c83613303565b9150612d9e826138c4565b602082019050919050565b6000612db6602683613303565b9150612dc1826138ed565b604082019050919050565b6000612dd9602283613303565b9150612de48261393c565b604082019050919050565b6000612dfc602383613303565b9150612e078261398b565b604082019050919050565b6000612e1f601c83613303565b9150612e2a826139da565b602082019050919050565b6000612e42601d83613303565b9150612e4d82613a03565b602082019050919050565b6000612e65601783613303565b9150612e7082613a2c565b602082019050919050565b6000612e88602083613303565b9150612e9382613a55565b602082019050919050565b6000612eab602983613303565b9150612eb682613a7e565b604082019050919050565b6000612ece602583613303565b9150612ed982613acd565b604082019050919050565b6000612ef1602383613303565b9150612efc82613b1c565b604082019050919050565b6000612f146000836132f8565b9150612f1f82613b6b565b600082019050919050565b6000612f37602483613303565b9150612f4282613b6e565b604082019050919050565b612f56816135d8565b82525050565b612f65816135e2565b82525050565b6000612f7682612f07565b9150819050919050565b6000602082019050612f956000830184612c4a565b92915050565b6000602082019050612fb06000830184612cb7565b92915050565b6000602082019050612fcb6000830184612cc6565b92915050565b60006020820190508181036000830152612feb8184612ce4565b905092915050565b6000602082019050818103600083015261300c81612d1d565b9050919050565b6000602082019050818103600083015261302c81612d40565b9050919050565b6000602082019050818103600083015261304c81612d63565b9050919050565b6000602082019050818103600083015261306c81612d86565b9050919050565b6000602082019050818103600083015261308c81612da9565b9050919050565b600060208201905081810360008301526130ac81612dcc565b9050919050565b600060208201905081810360008301526130cc81612def565b9050919050565b600060208201905081810360008301526130ec81612e12565b9050919050565b6000602082019050818103600083015261310c81612e35565b9050919050565b6000602082019050818103600083015261312c81612e58565b9050919050565b6000602082019050818103600083015261314c81612e7b565b9050919050565b6000602082019050818103600083015261316c81612e9e565b9050919050565b6000602082019050818103600083015261318c81612ec1565b9050919050565b600060208201905081810360008301526131ac81612ee4565b9050919050565b600060208201905081810360008301526131cc81612f2a565b9050919050565b60006020820190506131e86000830184612f4d565b92915050565b600060a0820190506132036000830188612f4d565b6132106020830187612cd5565b81810360408301526132228186612c59565b90506132316060830185612c4a565b61323e6080830184612f4d565b9695505050505050565b600060208201905061325d6000830184612f5c565b92915050565b600061326d61327e565b9050613279828261366a565b919050565b6000604051905090565b600067ffffffffffffffff8211156132a3576132a2613771565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061331f826135d8565b915061332a836135d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561335f5761335e6136e4565b5b828201905092915050565b6000613375826135d8565b9150613380836135d8565b9250826133905761338f613713565b5b828204905092915050565b6000808291508390505b60018511156133e5578086048111156133c1576133c06136e4565b5b60018516156133d05780820291505b80810290506133de856137ca565b94506133a5565b94509492505050565b60006133f9826135d8565b9150613404836135e2565b92506134317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613439565b905092915050565b6000826134495760019050613505565b816134575760009050613505565b816001811461346d5760028114613477576134a6565b6001915050613505565b60ff841115613489576134886136e4565b5b8360020a9150848211156134a05761349f6136e4565b5b50613505565b5060208310610133831016604e8410600b84101617156134db5782820a9050838111156134d6576134d56136e4565b5b613505565b6134e8848484600161339b565b925090508184048111156134ff576134fe6136e4565b5b81810290505b9392505050565b6000613517826135d8565b9150613522836135d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561355b5761355a6136e4565b5b828202905092915050565b6000613571826135d8565b915061357c836135d8565b92508282101561358f5761358e6136e4565b5b828203905092915050565b60006135a5826135b8565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135fa82613613565b9050919050565b600061360c826135d8565b9050919050565b600061361e82613625565b9050919050565b6000613630826135b8565b9050919050565b60005b8381101561365557808201518184015260208101905061363a565b83811115613664576000848401525b50505050565b613673826137b9565b810181811067ffffffffffffffff8211171561369257613691613771565b5b80604052505050565b60006136a6826135d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d9576136d86136e4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e6420646f6e6174696f6e206665652e00000000600082015250565b7f4661696c656420746f2073656e64206d61726b6574696e67206665652e000000600082015250565b7f4661696c656420746f2073656e6420646576206665652e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613bc68161359a565b8114613bd157600080fd5b50565b613bdd816135ac565b8114613be857600080fd5b50565b613bf4816135d8565b8114613bff57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201bb06bb5d0ff23b537230213a7affc77cdd9d1992c4b8a22302b58bf8116a11c64736f6c63430008070033

Deployed Bytecode Sourcemap

14635:16060:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25717:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18231:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19156:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16197:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18508:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19357:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16520:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18417:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16245:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25076:313;;;;;;;;;;;;;:::i;:::-;;25894:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30084:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18611:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12895:103;;;;;;;;;;;;;:::i;:::-;;30193:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16394:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12247:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24930:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16456:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18322:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29878:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29489:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18757:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15761:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30432:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15306:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18964:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30309:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13153:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25397:312;;;;;;;;;;;;;:::i;:::-;;25717:169;12133:13;:11;:13::i;:::-;25793:9:::1;25788:91;25812:5;:12;25808:1;:16;25788:91;;;25863:4;25846;:14;25851:5;25857:1;25851:8;;;;;;;;:::i;:::-;;;;;;;;25846:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25826:3;;;;;:::i;:::-;;;;25788:91;;;;25717:169:::0;:::o;18231:83::-;18268:13;18301:5;;;;;;;;;;;;;;;;;18294:12;;18231:83;:::o;19156:193::-;19258:4;19280:39;19289:12;:10;:12::i;:::-;19303:7;19312:6;19280:8;:39::i;:::-;19337:4;19330:11;;19156:193;;;;:::o;16197:41::-;;;;;;;;;;;;;:::o;18508:95::-;18561:7;14855:1;15197:2;:13;;;;:::i;:::-;15183:11;:27;;;;:::i;:::-;18581:14;;18508:95;:::o;19357:446::-;19489:4;19506:36;19516:6;19524:9;19535:6;19506:9;:36::i;:::-;19553:220;19576:6;19597:12;:10;:12::i;:::-;19624:138;19680:6;19624:138;;;;;;;;;;;;;;;;;:11;:19;19636:6;19624:19;;;;;;;;;;;;;;;:33;19644:12;:10;:12::i;:::-;19624:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;19553:8;:220::i;:::-;19791:4;19784:11;;19357:446;;;;;:::o;16520:60::-;;;;:::o;18417:83::-;18458:5;14855:1;18476:16;;18417:83;:::o;16245:28::-;;;;;;;;;;;;;:::o;25076:313::-;25156:19;;;;;;;;;;;25140:35;;:12;:10;:12::i;:::-;:35;;;:85;;;;25208:17;;;;;;;;;;;25192:33;;:12;:10;:12::i;:::-;:33;;;25140:85;:125;;;;25258:7;:5;:7::i;:::-;25242:23;;:12;:10;:12::i;:::-;:23;;;25140:125;25118:158;;;;;;25287:23;25313:24;25331:4;25313:9;:24::i;:::-;25287:50;;25348:33;25365:15;25348:16;:33::i;:::-;25107:282;25076:313::o;25894:92::-;12133:13;:11;:13::i;:::-;25973:5:::1;25958:4;:12;25963:6;25958:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;25894:92:::0;:::o;30084:101::-;12133:13;:11;:13::i;:::-;30165:12:::1;30151:11;::::0;:26:::1;;;;;;;;;;;;;;;;;;30084:101:::0;:::o;18611:138::-;18677:7;18704:37;18724:7;:16;18732:7;18724:16;;;;;;;;;;;;;;;;18704:19;:37::i;:::-;18697:44;;18611:138;;;:::o;12895:103::-;12133:13;:11;:13::i;:::-;12960:30:::1;12987:1;12960:18;:30::i;:::-;12895:103::o:0;30193:108::-;12133:13;:11;:13::i;:::-;30282:11:::1;30267:12;:26;;;;30193:108:::0;:::o;16394:55::-;;;;:::o;12247:87::-;12293:7;12320:6;;;;;;;;;;;12313:13;;12247:87;:::o;24930:138::-;12133:13;:11;:13::i;:::-;25011:12:::1;24997:11;;:26;;;;;;;;;;;;;;;;;;25048:12;25034:11;:26;;;;24930:138:::0;:::o;16456:57::-;;;;:::o;18322:87::-;18361:13;18394:7;;;;;;;;;;;;;;;;;18387:14;;18322:87;:::o;29878:162::-;12133:13;:11;:13::i;:::-;30014:18:::1;29992:19;:40;;;;29878:162:::0;:::o;29489:336::-;12133:13;:11;:13::i;:::-;29683::::1;29666:14;:30;;;;29725:14;29707:15;:32;;;;29767:11;29752:12;:26;;;;29805:12;29789:13;:28;;;;29489:336:::0;;;;:::o;18757:199::-;18862:4;18884:42;18894:12;:10;:12::i;:::-;18908:9;18919:6;18884:9;:42::i;:::-;18944:4;18937:11;;18757:199;;;;:::o;15761:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;30432:260::-;12133:13;:11;:13::i;:::-;30575:9:::1;30570:115;30594:8;;:15;;30590:1;:19;30570:115;;;30665:8;30631:18;:31;30650:8;;30659:1;30650:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30631:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;30611:3;;;;;:::i;:::-;;;;30570:115;;;;30432:260:::0;;;:::o;15306:26::-;;;;:::o;18964:184::-;19081:7;19113:11;:18;19125:5;19113:18;;;;;;;;;;;;;;;:27;19132:7;19113:27;;;;;;;;;;;;;;;;19106:34;;18964:184;;;;:::o;30309:115::-;12133:13;:11;:13::i;:::-;30403::::1;30386:14;:30;;;;30309:115:::0;:::o;13153:201::-;12133:13;:11;:13::i;:::-;13262:1:::1;13242:22;;:8;:22;;;;13234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13318:28;13337:8;13318:18;:28::i;:::-;13153:201:::0;:::o;25397:312::-;25477:19;;;;;;;;;;;25461:35;;:12;:10;:12::i;:::-;:35;;;:85;;;;25529:17;;;;;;;;;;;25513:33;;:12;:10;:12::i;:::-;:33;;;25461:85;:125;;;;25579:7;:5;:7::i;:::-;25563:23;;:12;:10;:12::i;:::-;:23;;;25461:125;25439:158;;;;;;25608:26;25637:21;25608:50;;25669:32;25682:18;25669:12;:32::i;:::-;25428:281;25397:312::o;12412:132::-;12487:12;:10;:12::i;:::-;12476:23;;:7;:5;:7::i;:::-;:23;;;12468:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12412:132::o;10831:98::-;10884:7;10911:10;10904:17;;10831:98;:::o;20494:369::-;20638:1;20621:19;;:5;:19;;;;20613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20719:1;20700:21;;:7;:21;;;;20692:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20801:6;20771:11;:18;20783:5;20771:18;;;;;;;;;;;;;;;:27;20790:7;20771:27;;;;;;;;;;;;;;;:36;;;;20839:7;20823:32;;20832:5;20823:32;;;20848:6;20823:32;;;;;;:::i;:::-;;;;;;;;20494:369;;;:::o;20871:2911::-;21009:1;20993:18;;:4;:18;;;;20985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21086:1;21072:16;;:2;:16;;;;21064:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21156:1;21147:6;:10;21139:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21228:7;:5;:7::i;:::-;21220:15;;:4;:15;;;;:32;;;;;21245:7;:5;:7::i;:::-;21239:13;;:2;:13;;;;21220:32;21216:1800;;;21309:11;;;;;;;;;;;21304:205;;21379:7;:5;:7::i;:::-;21371:15;;:4;:15;;;21341:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;21304:205;21543:12;;21533:6;:22;;21525:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21630:4;:10;21635:4;21630:10;;;;;;;;;;;;;;;;;;;;;;;;;21629:11;:24;;;;;21645:4;:8;21650:2;21645:8;;;;;;;;;;;;;;;;;;;;;;;;;21644:9;21629:24;21603:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;21779:11;;21763:12;:27;;:69;;;;;21819:13;;;;;;;;;;;21811:21;;:4;:21;;;21763:69;:120;;;;;21867:15;;;;;;;;;;;21853:30;;:2;:30;;;;21763:120;:160;;;;;21918:4;21904:19;;:2;:19;;;;21763:160;21741:248;;;21969:4;21958;:8;21963:2;21958:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;21741:248;22015:13;;;;;;;;;;;22009:19;;:2;:19;;;22005:208;;22104:14;;22095:6;22079:13;22089:2;22079:9;:13::i;:::-;:22;;;;:::i;:::-;:39;22049:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;22005:208;22229:28;22260:24;22278:4;22260:9;:24::i;:::-;22229:55;;22299:12;22338:19;;22314:20;:43;;22299:58;;22402:12;;22378:20;:36;22374:112;;22458:12;;22435:35;;22374:112;22524:7;:35;;;;;22553:6;;;;;;;;;;;22552:7;22524:35;:77;;;;;22588:13;;;;;;;;;;;22580:21;;:4;:21;;;;22524:77;:109;;;;;22622:11;;;;;;;;;;22524:109;:155;;;;;22655:18;:24;22674:4;22655:24;;;;;;;;;;;;;;;;;;;;;;;;;22654:25;22524:155;:199;;;;;22701:18;:22;22720:2;22701:22;;;;;;;;;;;;;;;;;;;;;;;;;22700:23;22524:199;22502:503;;;22758:38;22775:20;22758:16;:38::i;:::-;22815:26;22844:21;22815:50;;22909:1;22888:18;:22;22884:106;;;22935:35;22948:21;22935:12;:35::i;:::-;22884:106;22739:266;22502:503;21254:1762;;21216:1800;23028:12;23043:4;23028:19;;23108:18;:24;23127:4;23108:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;23136:18;:22;23155:2;23136:22;;;;;;;;;;;;;;;;;;;;;;;;;23108:50;23107:115;;;;23185:13;;;;;;;;;;;23177:21;;:4;:21;;;;:44;;;;;23208:13;;;;;;;;;;;23202:19;;:2;:19;;;;23177:44;23107:115;23089:632;;;23259:5;23249:15;;23089:632;;;23343:13;;;;;;;;;;;23335:21;;:4;:21;;;:55;;;;;23374:15;;;;;;;;;;;23360:30;;:2;:30;;;;23335:55;23331:163;;;23423:14;;23411:9;:26;;;;23466:12;;23456:7;:22;;;;23331:163;23555:13;;;;;;;;;;;23549:19;;:2;:19;;;:55;;;;;23588:15;;;;;;;;;;;23572:32;;:4;:32;;;;23549:55;23545:165;;;23637:15;;23625:9;:27;;;;23681:13;;23671:7;:23;;;;23545:165;23089:632;23733:41;23748:4;23754:2;23758:6;23766:7;23733:14;:41::i;:::-;20974:2808;20871:2911;;;:::o;5269:240::-;5389:7;5447:1;5442;:6;;5450:12;5434:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5489:1;5485;:5;5478:12;;5269:240;;;;;:::o;23790:483::-;16685:4;16676:6;;:13;;;;;;;;;;;;;;;;;;23868:21:::1;23906:1;23892:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23868:40;;23937:4;23919;23924:1;23919:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23963:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23953:4;23958:1;23953:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;23996:62;24013:4;24028:15;;;;;;;;;;;24046:11;23996:8;:62::i;:::-;24069:15;;;;;;;;;;;:66;;;24150:11;24176:1;24192:4;24219;24239:15;24069:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23857:416;16721:5:::0;16712:6;;:14;;;;;;;;;;;;;;;;;;23790:483;:::o;19811:323::-;19906:7;19964;;19953;:18;;19931:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20052:19;20074:10;:8;:10::i;:::-;20052:32;;20102:24;20114:11;20102:7;:11;;:24;;;;:::i;:::-;20095:31;;;19811:323;;;:::o;13514:191::-;13588:16;13607:6;;;;;;;;;;;13588:25;;13633:8;13624:6;;:17;;;;;;;;;;;;;;;;;;13688:8;13657:40;;13678:8;13657:40;;;;;;;;;;;;13577:128;13514:191;:::o;24281:641::-;24338:17;24358:13;24369:1;24358:6;:10;;:13;;;;:::i;:::-;24338:33;;24382:23;24408:13;24419:1;24408:6;:10;;:13;;;;:::i;:::-;24382:39;;24432:22;24457:13;24468:1;24457:6;:10;;:13;;;;:::i;:::-;24432:38;;24482:15;24502:19;;;;;;;;;;;:24;;24534:9;24502:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24481:67;;;24567:10;24559:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:21;24643:17;;;;;;;;;;;:22;;24673:15;24643:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24616:77;;;24712:16;24704:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24774:20;24799:16;;;;;;;;;;;:21;;24828:14;24799:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24773:74;;;24866:15;24858:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24327:595;;;;;;24281:641;:::o;25994:282::-;26150:7;26145:28;;26159:14;:12;:14::i;:::-;26145:28;26184:44;26202:6;26210:9;26221:6;26184:17;:44::i;:::-;26244:7;26239:29;;26253:15;:13;:15::i;:::-;26239:29;25994:282;;;;:::o;29048:166::-;29090:7;29111:15;29128;29147:19;:17;:19::i;:::-;29110:56;;;;29186:20;29198:7;29186;:11;;:20;;;;:::i;:::-;29179:27;;;;29048:166;:::o;4127:98::-;4185:7;4216:1;4212;:5;;;;:::i;:::-;4205:12;;4127:98;;;;:::o;20142:219::-;20202:1;20189:9;;:14;:30;;;;;20218:1;20207:7;;:12;20189:30;20185:43;;;20221:7;;20185:43;20260:9;;20240:17;:29;;;;20298:7;;20280:15;:25;;;;20330:1;20318:9;:13;;;;20352:1;20342:7;:11;;;;20142:219;:::o;26284:610::-;26431:15;26461:23;26499:12;26526:23;26564:12;26591:13;26618:19;26629:7;26618:10;:19::i;:::-;26416:221;;;;;;;;;;;;26666:28;26686:7;26666;:15;26674:6;26666:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26648:7;:15;26656:6;26648:15;;;;;;;;;;;;;;;:46;;;;26726:39;26749:15;26726:7;:18;26734:9;26726:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26705:7;:18;26713:9;26705:18;;;;;;;;;;;;;;;:60;;;;26776:16;26786:5;26776:9;:16::i;:::-;26803:23;26815:4;26821;26803:11;:23::i;:::-;26859:9;26842:44;;26851:6;26842:44;;;26870:15;26842:44;;;;;;:::i;:::-;;;;;;;;26405:489;;;;;;26284:610;;;:::o;20369:117::-;20425:17;;20413:9;:29;;;;20463:15;;20453:7;:25;;;;20369:117::o;29222:259::-;29273:7;29282;29302:15;29320:7;;29302:25;;29338:15;14855:1;15197:2;:13;;;;:::i;:::-;15183:11;:27;;;;:::i;:::-;29338:25;;29388:20;14855:1;15197:2;:13;;;;:::i;:::-;15183:11;:27;;;;:::i;:::-;29388:7;;:11;;:20;;;;:::i;:::-;29378:7;:30;29374:61;;;29418:7;;14855:1;15197:2;:13;;;;:::i;:::-;15183:11;:27;;;;:::i;:::-;29410:25;;;;;;;;29374:61;29456:7;29465;29448:25;;;;;;29222:259;;;:::o;27313:704::-;27413:7;27435;27457;27479;27501;27523;27559:23;27584:12;27598:13;27615:90;27641:7;27663:9;;27687:7;;27615:11;:90::i;:::-;27558:147;;;;;;27716:19;27738:10;:8;:10::i;:::-;27716:32;;27760:15;27777:23;27802:12;27818:109;27844:7;27866:4;27885:5;27905:11;27818;:109::i;:::-;27759:168;;;;;;27948:7;27957:15;27974:4;27980:15;27997:4;28003:5;27940:69;;;;;;;;;;;;;;;;;;;27313:704;;;;;;;:::o;3371:98::-;3429:7;3460:1;3456;:5;;;;:::i;:::-;3449:12;;3371:98;;;;:::o;2990:::-;3048:7;3079:1;3075;:5;;;;:::i;:::-;3068:12;;2990:98;;;;:::o;26902:211::-;26955:19;26977:10;:8;:10::i;:::-;26955:32;;26998:13;27014:22;27024:11;27014:5;:9;;:22;;;;:::i;:::-;26998:38;;27072:33;27099:5;27072:7;:22;27088:4;27072:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;27047:7;:22;27063:4;27047:22;;;;;;;;;;;;;;;:58;;;;26944:169;;26902:211;:::o;27121:147::-;27199:17;27211:4;27199:7;;:11;;:17;;;;:::i;:::-;27189:7;:27;;;;27240:20;27255:4;27240:10;;:14;;:20;;;;:::i;:::-;27227:10;:33;;;;27121:147;;:::o;28025:471::-;28194:7;28216;28238;28273:12;28288:30;28314:3;28288:21;28300:8;28288:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;28273:45;;28329:13;28345:28;28369:3;28345:19;28357:6;28345:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;28329:44;;28384:23;28410:28;28432:5;28410:17;28422:4;28410:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28384:54;;28459:15;28476:4;28482:5;28451:37;;;;;;;;;28025:471;;;;;;;:::o;28504:536::-;28698:7;28720;28742;28777:15;28795:24;28807:11;28795:7;:11;;:24;;;;:::i;:::-;28777:42;;28830:12;28845:21;28854:11;28845:4;:8;;:21;;;;:::i;:::-;28830:36;;28877:13;28893:22;28903:11;28893:5;:9;;:22;;;;:::i;:::-;28877:38;;28926:23;28952:28;28974:5;28952:17;28964:4;28952:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28926:54;;29001:7;29010:15;29027:4;28993:39;;;;;;;;;;28504:536;;;;;;;;:::o;3728:98::-;3786:7;3817:1;3813;:5;;;;:::i;:::-;3806:12;;3728:98;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:568::-;1136:8;1146:6;1196:3;1189:4;1181:6;1177:17;1173:27;1163:122;;1204:79;;:::i;:::-;1163:122;1317:6;1304:20;1294:30;;1347:18;1339:6;1336:30;1333:117;;;1369:79;;:::i;:::-;1333:117;1483:4;1475:6;1471:17;1459:29;;1537:3;1529:4;1521:6;1517:17;1507:8;1503:32;1500:41;1497:128;;;1544:79;;:::i;:::-;1497:128;1063:568;;;;;:::o;1654:370::-;1725:5;1774:3;1767:4;1759:6;1755:17;1751:27;1741:122;;1782:79;;:::i;:::-;1741:122;1899:6;1886:20;1924:94;2014:3;2006:6;1999:4;1991:6;1987:17;1924:94;:::i;:::-;1915:103;;1731:293;1654:370;;;;:::o;2030:133::-;2073:5;2111:6;2098:20;2089:29;;2127:30;2151:5;2127:30;:::i;:::-;2030:133;;;;:::o;2169:139::-;2215:5;2253:6;2240:20;2231:29;;2269:33;2296:5;2269:33;:::i;:::-;2169:139;;;;:::o;2314:329::-;2373:6;2422:2;2410:9;2401:7;2397:23;2393:32;2390:119;;;2428:79;;:::i;:::-;2390:119;2548:1;2573:53;2618:7;2609:6;2598:9;2594:22;2573:53;:::i;:::-;2563:63;;2519:117;2314:329;;;;:::o;2649:351::-;2719:6;2768:2;2756:9;2747:7;2743:23;2739:32;2736:119;;;2774:79;;:::i;:::-;2736:119;2894:1;2919:64;2975:7;2966:6;2955:9;2951:22;2919:64;:::i;:::-;2909:74;;2865:128;2649:351;;;;:::o;3006:474::-;3074:6;3082;3131:2;3119:9;3110:7;3106:23;3102:32;3099:119;;;3137:79;;:::i;:::-;3099:119;3257:1;3282:53;3327:7;3318:6;3307:9;3303:22;3282:53;:::i;:::-;3272:63;;3228:117;3384:2;3410:53;3455:7;3446:6;3435:9;3431:22;3410:53;:::i;:::-;3400:63;;3355:118;3006:474;;;;;:::o;3486:619::-;3563:6;3571;3579;3628:2;3616:9;3607:7;3603:23;3599:32;3596:119;;;3634:79;;:::i;:::-;3596:119;3754:1;3779:53;3824:7;3815:6;3804:9;3800:22;3779:53;:::i;:::-;3769:63;;3725:117;3881:2;3907:53;3952:7;3943:6;3932:9;3928:22;3907:53;:::i;:::-;3897:63;;3852:118;4009:2;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3980:118;3486:619;;;;;:::o;4111:474::-;4179:6;4187;4236:2;4224:9;4215:7;4211:23;4207:32;4204:119;;;4242:79;;:::i;:::-;4204:119;4362:1;4387:53;4432:7;4423:6;4412:9;4408:22;4387:53;:::i;:::-;4377:63;;4333:117;4489:2;4515:53;4560:7;4551:6;4540:9;4536:22;4515:53;:::i;:::-;4505:63;;4460:118;4111:474;;;;;:::o;4591:698::-;4683:6;4691;4699;4748:2;4736:9;4727:7;4723:23;4719:32;4716:119;;;4754:79;;:::i;:::-;4716:119;4902:1;4891:9;4887:17;4874:31;4932:18;4924:6;4921:30;4918:117;;;4954:79;;:::i;:::-;4918:117;5067:80;5139:7;5130:6;5119:9;5115:22;5067:80;:::i;:::-;5049:98;;;;4845:312;5196:2;5222:50;5264:7;5255:6;5244:9;5240:22;5222:50;:::i;:::-;5212:60;;5167:115;4591:698;;;;;:::o;5295:539::-;5379:6;5428:2;5416:9;5407:7;5403:23;5399:32;5396:119;;;5434:79;;:::i;:::-;5396:119;5582:1;5571:9;5567:17;5554:31;5612:18;5604:6;5601:30;5598:117;;;5634:79;;:::i;:::-;5598:117;5739:78;5809:7;5800:6;5789:9;5785:22;5739:78;:::i;:::-;5729:88;;5525:302;5295:539;;;;:::o;5840:323::-;5896:6;5945:2;5933:9;5924:7;5920:23;5916:32;5913:119;;;5951:79;;:::i;:::-;5913:119;6071:1;6096:50;6138:7;6129:6;6118:9;6114:22;6096:50;:::i;:::-;6086:60;;6042:114;5840:323;;;;:::o;6169:329::-;6228:6;6277:2;6265:9;6256:7;6252:23;6248:32;6245:119;;;6283:79;;:::i;:::-;6245:119;6403:1;6428:53;6473:7;6464:6;6453:9;6449:22;6428:53;:::i;:::-;6418:63;;6374:117;6169:329;;;;:::o;6504:765::-;6590:6;6598;6606;6614;6663:3;6651:9;6642:7;6638:23;6634:33;6631:120;;;6670:79;;:::i;:::-;6631:120;6790:1;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6761:117;6917:2;6943:53;6988:7;6979:6;6968:9;6964:22;6943:53;:::i;:::-;6933:63;;6888:118;7045:2;7071:53;7116:7;7107:6;7096:9;7092:22;7071:53;:::i;:::-;7061:63;;7016:118;7173:2;7199:53;7244:7;7235:6;7224:9;7220:22;7199:53;:::i;:::-;7189:63;;7144:118;6504:765;;;;;;;:::o;7275:179::-;7344:10;7365:46;7407:3;7399:6;7365:46;:::i;:::-;7443:4;7438:3;7434:14;7420:28;;7275:179;;;;:::o;7460:108::-;7537:24;7555:5;7537:24;:::i;:::-;7532:3;7525:37;7460:108;;:::o;7574:118::-;7661:24;7679:5;7661:24;:::i;:::-;7656:3;7649:37;7574:118;;:::o;7728:732::-;7847:3;7876:54;7924:5;7876:54;:::i;:::-;7946:86;8025:6;8020:3;7946:86;:::i;:::-;7939:93;;8056:56;8106:5;8056:56;:::i;:::-;8135:7;8166:1;8151:284;8176:6;8173:1;8170:13;8151:284;;;8252:6;8246:13;8279:63;8338:3;8323:13;8279:63;:::i;:::-;8272:70;;8365:60;8418:6;8365:60;:::i;:::-;8355:70;;8211:224;8198:1;8195;8191:9;8186:14;;8151:284;;;8155:14;8451:3;8444:10;;7852:608;;;7728:732;;;;:::o;8466:109::-;8547:21;8562:5;8547:21;:::i;:::-;8542:3;8535:34;8466:109;;:::o;8581:183::-;8694:63;8751:5;8694:63;:::i;:::-;8689:3;8682:76;8581:183;;:::o;8770:147::-;8865:45;8904:5;8865:45;:::i;:::-;8860:3;8853:58;8770:147;;:::o;8923:364::-;9011:3;9039:39;9072:5;9039:39;:::i;:::-;9094:71;9158:6;9153:3;9094:71;:::i;:::-;9087:78;;9174:52;9219:6;9214:3;9207:4;9200:5;9196:16;9174:52;:::i;:::-;9251:29;9273:6;9251:29;:::i;:::-;9246:3;9242:39;9235:46;;9015:272;8923:364;;;;:::o;9293:366::-;9435:3;9456:67;9520:2;9515:3;9456:67;:::i;:::-;9449:74;;9532:93;9621:3;9532:93;:::i;:::-;9650:2;9645:3;9641:12;9634:19;;9293:366;;;:::o;9665:::-;9807:3;9828:67;9892:2;9887:3;9828:67;:::i;:::-;9821:74;;9904:93;9993:3;9904:93;:::i;:::-;10022:2;10017:3;10013:12;10006:19;;9665:366;;;:::o;10037:::-;10179:3;10200:67;10264:2;10259:3;10200:67;:::i;:::-;10193:74;;10276:93;10365:3;10276:93;:::i;:::-;10394:2;10389:3;10385:12;10378:19;;10037:366;;;:::o;10409:::-;10551:3;10572:67;10636:2;10631:3;10572:67;:::i;:::-;10565:74;;10648:93;10737:3;10648:93;:::i;:::-;10766:2;10761:3;10757:12;10750:19;;10409:366;;;:::o;10781:::-;10923:3;10944:67;11008:2;11003:3;10944:67;:::i;:::-;10937:74;;11020:93;11109:3;11020:93;:::i;:::-;11138:2;11133:3;11129:12;11122:19;;10781:366;;;:::o;11153:::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:398::-;14660:3;14681:83;14762:1;14757:3;14681:83;:::i;:::-;14674:90;;14773:93;14862:3;14773:93;:::i;:::-;14891:1;14886:3;14882:11;14875:18;;14501:398;;;:::o;14905:366::-;15047:3;15068:67;15132:2;15127:3;15068:67;:::i;:::-;15061:74;;15144:93;15233:3;15144:93;:::i;:::-;15262:2;15257:3;15253:12;15246:19;;14905:366;;;:::o;15277:118::-;15364:24;15382:5;15364:24;:::i;:::-;15359:3;15352:37;15277:118;;:::o;15401:112::-;15484:22;15500:5;15484:22;:::i;:::-;15479:3;15472:35;15401:112;;:::o;15519:379::-;15703:3;15725:147;15868:3;15725:147;:::i;:::-;15718:154;;15889:3;15882:10;;15519:379;;;:::o;15904:222::-;15997:4;16035:2;16024:9;16020:18;16012:26;;16048:71;16116:1;16105:9;16101:17;16092:6;16048:71;:::i;:::-;15904:222;;;;:::o;16132:210::-;16219:4;16257:2;16246:9;16242:18;16234:26;;16270:65;16332:1;16321:9;16317:17;16308:6;16270:65;:::i;:::-;16132:210;;;;:::o;16348:274::-;16467:4;16505:2;16494:9;16490:18;16482:26;;16518:97;16612:1;16601:9;16597:17;16588:6;16518:97;:::i;:::-;16348:274;;;;:::o;16628:313::-;16741:4;16779:2;16768:9;16764:18;16756:26;;16828:9;16822:4;16818:20;16814:1;16803:9;16799:17;16792:47;16856:78;16929:4;16920:6;16856:78;:::i;:::-;16848:86;;16628:313;;;;:::o;16947:419::-;17113:4;17151:2;17140:9;17136:18;17128:26;;17200:9;17194:4;17190:20;17186:1;17175:9;17171:17;17164:47;17228:131;17354:4;17228:131;:::i;:::-;17220:139;;16947:419;;;:::o;17372:::-;17538:4;17576:2;17565:9;17561:18;17553:26;;17625:9;17619:4;17615:20;17611:1;17600:9;17596:17;17589:47;17653:131;17779:4;17653:131;:::i;:::-;17645:139;;17372:419;;;:::o;17797:::-;17963:4;18001:2;17990:9;17986:18;17978:26;;18050:9;18044:4;18040:20;18036:1;18025:9;18021:17;18014:47;18078:131;18204:4;18078:131;:::i;:::-;18070:139;;17797:419;;;:::o;18222:::-;18388:4;18426:2;18415:9;18411:18;18403:26;;18475:9;18469:4;18465:20;18461:1;18450:9;18446:17;18439:47;18503:131;18629:4;18503:131;:::i;:::-;18495:139;;18222:419;;;:::o;18647:::-;18813:4;18851:2;18840:9;18836:18;18828:26;;18900:9;18894:4;18890:20;18886:1;18875:9;18871:17;18864:47;18928:131;19054:4;18928:131;:::i;:::-;18920:139;;18647:419;;;:::o;19072:::-;19238:4;19276:2;19265:9;19261:18;19253:26;;19325:9;19319:4;19315:20;19311:1;19300:9;19296:17;19289:47;19353:131;19479:4;19353:131;:::i;:::-;19345:139;;19072:419;;;:::o;19497:::-;19663:4;19701:2;19690:9;19686:18;19678:26;;19750:9;19744:4;19740:20;19736:1;19725:9;19721:17;19714:47;19778:131;19904:4;19778:131;:::i;:::-;19770:139;;19497:419;;;:::o;19922:::-;20088:4;20126:2;20115:9;20111:18;20103:26;;20175:9;20169:4;20165:20;20161:1;20150:9;20146:17;20139:47;20203:131;20329:4;20203:131;:::i;:::-;20195:139;;19922:419;;;:::o;20347:::-;20513:4;20551:2;20540:9;20536:18;20528:26;;20600:9;20594:4;20590:20;20586:1;20575:9;20571:17;20564:47;20628:131;20754:4;20628:131;:::i;:::-;20620:139;;20347:419;;;:::o;20772:::-;20938:4;20976:2;20965:9;20961:18;20953:26;;21025:9;21019:4;21015:20;21011:1;21000:9;20996:17;20989:47;21053:131;21179:4;21053:131;:::i;:::-;21045:139;;20772:419;;;:::o;21197:::-;21363:4;21401:2;21390:9;21386:18;21378:26;;21450:9;21444:4;21440:20;21436:1;21425:9;21421:17;21414:47;21478:131;21604:4;21478:131;:::i;:::-;21470:139;;21197:419;;;:::o;21622:::-;21788:4;21826:2;21815:9;21811:18;21803:26;;21875:9;21869:4;21865:20;21861:1;21850:9;21846:17;21839:47;21903:131;22029:4;21903:131;:::i;:::-;21895:139;;21622:419;;;:::o;22047:::-;22213:4;22251:2;22240:9;22236:18;22228:26;;22300:9;22294:4;22290:20;22286:1;22275:9;22271:17;22264:47;22328:131;22454:4;22328:131;:::i;:::-;22320:139;;22047:419;;;:::o;22472:::-;22638:4;22676:2;22665:9;22661:18;22653:26;;22725:9;22719:4;22715:20;22711:1;22700:9;22696:17;22689:47;22753:131;22879:4;22753:131;:::i;:::-;22745:139;;22472:419;;;:::o;22897:::-;23063:4;23101:2;23090:9;23086:18;23078:26;;23150:9;23144:4;23140:20;23136:1;23125:9;23121:17;23114:47;23178:131;23304:4;23178:131;:::i;:::-;23170:139;;22897:419;;;:::o;23322:222::-;23415:4;23453:2;23442:9;23438:18;23430:26;;23466:71;23534:1;23523:9;23519:17;23510:6;23466:71;:::i;:::-;23322:222;;;;:::o;23550:831::-;23813:4;23851:3;23840:9;23836:19;23828:27;;23865:71;23933:1;23922:9;23918:17;23909:6;23865:71;:::i;:::-;23946:80;24022:2;24011:9;24007:18;23998:6;23946:80;:::i;:::-;24073:9;24067:4;24063:20;24058:2;24047:9;24043:18;24036:48;24101:108;24204:4;24195:6;24101:108;:::i;:::-;24093:116;;24219:72;24287:2;24276:9;24272:18;24263:6;24219:72;:::i;:::-;24301:73;24369:3;24358:9;24354:19;24345:6;24301:73;:::i;:::-;23550:831;;;;;;;;:::o;24387:214::-;24476:4;24514:2;24503:9;24499:18;24491:26;;24527:67;24591:1;24580:9;24576:17;24567:6;24527:67;:::i;:::-;24387:214;;;;:::o;24607:129::-;24641:6;24668:20;;:::i;:::-;24658:30;;24697:33;24725:4;24717:6;24697:33;:::i;:::-;24607:129;;;:::o;24742:75::-;24775:6;24808:2;24802:9;24792:19;;24742:75;:::o;24823:311::-;24900:4;24990:18;24982:6;24979:30;24976:56;;;25012:18;;:::i;:::-;24976:56;25062:4;25054:6;25050:17;25042:25;;25122:4;25116;25112:15;25104:23;;24823:311;;;:::o;25140:132::-;25207:4;25230:3;25222:11;;25260:4;25255:3;25251:14;25243:22;;25140:132;;;:::o;25278:114::-;25345:6;25379:5;25373:12;25363:22;;25278:114;;;:::o;25398:99::-;25450:6;25484:5;25478:12;25468:22;;25398:99;;;:::o;25503:113::-;25573:4;25605;25600:3;25596:14;25588:22;;25503:113;;;:::o;25622:184::-;25721:11;25755:6;25750:3;25743:19;25795:4;25790:3;25786:14;25771:29;;25622:184;;;;:::o;25812:147::-;25913:11;25950:3;25935:18;;25812:147;;;;:::o;25965:169::-;26049:11;26083:6;26078:3;26071:19;26123:4;26118:3;26114:14;26099:29;;25965:169;;;;:::o;26140:305::-;26180:3;26199:20;26217:1;26199:20;:::i;:::-;26194:25;;26233:20;26251:1;26233:20;:::i;:::-;26228:25;;26387:1;26319:66;26315:74;26312:1;26309:81;26306:107;;;26393:18;;:::i;:::-;26306:107;26437:1;26434;26430:9;26423:16;;26140:305;;;;:::o;26451:185::-;26491:1;26508:20;26526:1;26508:20;:::i;:::-;26503:25;;26542:20;26560:1;26542:20;:::i;:::-;26537:25;;26581:1;26571:35;;26586:18;;:::i;:::-;26571:35;26628:1;26625;26621:9;26616:14;;26451:185;;;;:::o;26642:848::-;26703:5;26710:4;26734:6;26725:15;;26758:5;26749:14;;26772:712;26793:1;26783:8;26780:15;26772:712;;;26888:4;26883:3;26879:14;26873:4;26870:24;26867:50;;;26897:18;;:::i;:::-;26867:50;26947:1;26937:8;26933:16;26930:451;;;27362:4;27355:5;27351:16;27342:25;;26930:451;27412:4;27406;27402:15;27394:23;;27442:32;27465:8;27442:32;:::i;:::-;27430:44;;26772:712;;;26642:848;;;;;;;:::o;27496:281::-;27554:5;27578:23;27596:4;27578:23;:::i;:::-;27570:31;;27622:25;27638:8;27622:25;:::i;:::-;27610:37;;27666:104;27703:66;27693:8;27687:4;27666:104;:::i;:::-;27657:113;;27496:281;;;;:::o;27783:1073::-;27837:5;28028:8;28018:40;;28049:1;28040:10;;28051:5;;28018:40;28077:4;28067:36;;28094:1;28085:10;;28096:5;;28067:36;28163:4;28211:1;28206:27;;;;28247:1;28242:191;;;;28156:277;;28206:27;28224:1;28215:10;;28226:5;;;28242:191;28287:3;28277:8;28274:17;28271:43;;;28294:18;;:::i;:::-;28271:43;28343:8;28340:1;28336:16;28327:25;;28378:3;28371:5;28368:14;28365:40;;;28385:18;;:::i;:::-;28365:40;28418:5;;;28156:277;;28542:2;28532:8;28529:16;28523:3;28517:4;28514:13;28510:36;28492:2;28482:8;28479:16;28474:2;28468:4;28465:12;28461:35;28445:111;28442:246;;;28598:8;28592:4;28588:19;28579:28;;28633:3;28626:5;28623:14;28620:40;;;28640:18;;:::i;:::-;28620:40;28673:5;;28442:246;28713:42;28751:3;28741:8;28735:4;28732:1;28713:42;:::i;:::-;28698:57;;;;28787:4;28782:3;28778:14;28771:5;28768:25;28765:51;;;28796:18;;:::i;:::-;28765:51;28845:4;28838:5;28834:16;28825:25;;27783:1073;;;;;;:::o;28862:348::-;28902:7;28925:20;28943:1;28925:20;:::i;:::-;28920:25;;28959:20;28977:1;28959:20;:::i;:::-;28954:25;;29147:1;29079:66;29075:74;29072:1;29069:81;29064:1;29057:9;29050:17;29046:105;29043:131;;;29154:18;;:::i;:::-;29043:131;29202:1;29199;29195:9;29184:20;;28862:348;;;;:::o;29216:191::-;29256:4;29276:20;29294:1;29276:20;:::i;:::-;29271:25;;29310:20;29328:1;29310:20;:::i;:::-;29305:25;;29349:1;29346;29343:8;29340:34;;;29354:18;;:::i;:::-;29340:34;29399:1;29396;29392:9;29384:17;;29216:191;;;;:::o;29413:96::-;29450:7;29479:24;29497:5;29479:24;:::i;:::-;29468:35;;29413:96;;;:::o;29515:90::-;29549:7;29592:5;29585:13;29578:21;29567:32;;29515:90;;;:::o;29611:126::-;29648:7;29688:42;29681:5;29677:54;29666:65;;29611:126;;;:::o;29743:77::-;29780:7;29809:5;29798:16;;29743:77;;;:::o;29826:86::-;29861:7;29901:4;29894:5;29890:16;29879:27;;29826:86;;;:::o;29918:152::-;29994:9;30027:37;30058:5;30027:37;:::i;:::-;30014:50;;29918:152;;;:::o;30076:121::-;30134:9;30167:24;30185:5;30167:24;:::i;:::-;30154:37;;30076:121;;;:::o;30203:126::-;30253:9;30286:37;30317:5;30286:37;:::i;:::-;30273:50;;30203:126;;;:::o;30335:113::-;30385:9;30418:24;30436:5;30418:24;:::i;:::-;30405:37;;30335:113;;;:::o;30454:307::-;30522:1;30532:113;30546:6;30543:1;30540:13;30532:113;;;30631:1;30626:3;30622:11;30616:18;30612:1;30607:3;30603:11;30596:39;30568:2;30565:1;30561:10;30556:15;;30532:113;;;30663:6;30660:1;30657:13;30654:101;;;30743:1;30734:6;30729:3;30725:16;30718:27;30654:101;30503:258;30454:307;;;:::o;30767:281::-;30850:27;30872:4;30850:27;:::i;:::-;30842:6;30838:40;30980:6;30968:10;30965:22;30944:18;30932:10;30929:34;30926:62;30923:88;;;30991:18;;:::i;:::-;30923:88;31031:10;31027:2;31020:22;30810:238;30767:281;;:::o;31054:233::-;31093:3;31116:24;31134:5;31116:24;:::i;:::-;31107:33;;31162:66;31155:5;31152:77;31149:103;;;31232:18;;:::i;:::-;31149:103;31279:1;31272:5;31268:13;31261:20;;31054:233;;;:::o;31293:180::-;31341:77;31338:1;31331:88;31438:4;31435:1;31428:15;31462:4;31459:1;31452:15;31479:180;31527:77;31524:1;31517:88;31624:4;31621:1;31614:15;31648:4;31645:1;31638:15;31665:180;31713:77;31710:1;31703:88;31810:4;31807:1;31800:15;31834:4;31831:1;31824:15;31851:180;31899:77;31896:1;31889:88;31996:4;31993:1;31986:15;32020:4;32017:1;32010:15;32037:117;32146:1;32143;32136:12;32160:117;32269:1;32266;32259:12;32283:117;32392:1;32389;32382:12;32406:117;32515:1;32512;32505:12;32529:117;32638:1;32635;32628:12;32652:102;32693:6;32744:2;32740:7;32735:2;32728:5;32724:14;32720:28;32710:38;;32652:102;;;:::o;32760:::-;32802:8;32849:5;32846:1;32842:13;32821:34;;32760:102;;;:::o;32868:222::-;33008:34;33004:1;32996:6;32992:14;32985:58;33077:5;33072:2;33064:6;33060:15;33053:30;32868:222;:::o;33096:250::-;33236:34;33232:1;33224:6;33220:14;33213:58;33305:33;33300:2;33292:6;33288:15;33281:58;33096:250;:::o;33352:229::-;33492:34;33488:1;33480:6;33476:14;33469:58;33561:12;33556:2;33548:6;33544:15;33537:37;33352:229;:::o;33587:178::-;33727:30;33723:1;33715:6;33711:14;33704:54;33587:178;:::o;33771:225::-;33911:34;33907:1;33899:6;33895:14;33888:58;33980:8;33975:2;33967:6;33963:15;33956:33;33771:225;:::o;34002:221::-;34142:34;34138:1;34130:6;34126:14;34119:58;34211:4;34206:2;34198:6;34194:15;34187:29;34002:221;:::o;34229:222::-;34369:34;34365:1;34357:6;34353:14;34346:58;34438:5;34433:2;34425:6;34421:15;34414:30;34229:222;:::o;34457:178::-;34597:30;34593:1;34585:6;34581:14;34574:54;34457:178;:::o;34641:179::-;34781:31;34777:1;34769:6;34765:14;34758:55;34641:179;:::o;34826:173::-;34966:25;34962:1;34954:6;34950:14;34943:49;34826:173;:::o;35005:182::-;35145:34;35141:1;35133:6;35129:14;35122:58;35005:182;:::o;35193:228::-;35333:34;35329:1;35321:6;35317:14;35310:58;35402:11;35397:2;35389:6;35385:15;35378:36;35193:228;:::o;35427:224::-;35567:34;35563:1;35555:6;35551:14;35544:58;35636:7;35631:2;35623:6;35619:15;35612:32;35427:224;:::o;35657:222::-;35797:34;35793:1;35785:6;35781:14;35774:58;35866:5;35861:2;35853:6;35849:15;35842:30;35657:222;:::o;35885:114::-;;:::o;36005:223::-;36145:34;36141:1;36133:6;36129:14;36122:58;36214:6;36209:2;36201:6;36197:15;36190:31;36005:223;:::o;36234:122::-;36307:24;36325:5;36307:24;:::i;:::-;36300:5;36297:35;36287:63;;36346:1;36343;36336:12;36287:63;36234:122;:::o;36362:116::-;36432:21;36447:5;36432:21;:::i;:::-;36425:5;36422:32;36412:60;;36468:1;36465;36458:12;36412:60;36362:116;:::o;36484:122::-;36557:24;36575:5;36557:24;:::i;:::-;36550:5;36547:35;36537:63;;36596:1;36593;36586:12;36537:63;36484:122;:::o

Swarm Source

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