ETH Price: $3,099.55 (+0.52%)
Gas: 4 Gwei

Token

Three Dildos Capital (3DC)
 

Overview

Max Total Supply

1,000,000,000 3DC

Holders

594

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,000 3DC

Value
$0.00
0xdf8aca60a304fe56cd312daa9bc97a9ad8b9aaba
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Three Dildos Capital will function as a decentralized fund management project. Funds will be trading on popuiar centralized exchanged and profits will be returned back to holders that have their 3DC tokens locked.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ThreeDildosCapital

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-24
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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);
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

pragma solidity ^0.8.15;

interface IThreeDildosCapitalRewards{
    function claimReward() external;
    function depositRewards() external payable;
    function getLockedShares(address wallet) external view returns (uint256);
    function lock(uint256 amount) external;
    function unlock(uint256 amount) external;
}

pragma solidity ^0.8.15;

contract ThreeDildosCapitalRewards is IThreeDildosCapitalRewards, Ownable {
    address public shareholderToken;

    uint256 private constant ONE_DAY = 60 * 60 * 24;
    uint256 public timeLock = 30 days;
    uint256 public totalLockedUsers;
    uint256 public totalSharesDeposited;
    uint256 public totalRewards;
    uint256 public totalDistributed;
    uint256 public rewardsPerShare;
    uint256 private constant ACC_FACTOR = 10**36;

    int256 private constant OFFSET19700101 = 2440588;

    uint8 public minDayOfMonthCanLock = 1;
    uint8 public maxDayOfMonthCanLock = 5;

    struct Reward {
        uint256 totalExcluded;
        uint256 totalRealised;
        uint256 lastClaim;
    }

    struct Share {
        uint256 amount;
        uint256 lockedTime;
    }

    // amount of shares a user has
    mapping(address => Share) public shares;
    // reward information per user
    mapping(address => Reward) public rewards;

    event ClaimReward(address wallet);
    event DistributeReward(address indexed wallet, address payable receiver);
    event DepositRewards(address indexed wallet, uint256 amountETH);

    constructor(address _shareholderToken) {
        shareholderToken = _shareholderToken;
    }

    function lock(uint256 _amount) external {
        uint256 _currentDayOfMonth = _dayOfMonth(block.timestamp);
        require(
            _currentDayOfMonth >= minDayOfMonthCanLock &&
            _currentDayOfMonth <= maxDayOfMonthCanLock,
            "outside of allowed lock window"
        );
        address shareholder = msg.sender;
        IERC20 tokenContract = IERC20(shareholderToken);
        _amount = _amount == 0 ? tokenContract.balanceOf(shareholder) : _amount;
        tokenContract.transferFrom(shareholder, address(this), _amount);
        _addShares(shareholder, _amount);
    }

    function unlock(uint256 _amount) external {
        address shareholder = msg.sender;
        require(
            block.timestamp >= shares[shareholder].lockedTime + timeLock,
            "must wait the time lock before unstaking"
        );
        _amount = _amount == 0 ? shares[shareholder].amount : _amount;
        require(_amount > 0, "need tokens to unlock");
        require(
            _amount <= shares[shareholder].amount,
            "cannot unlock more than you have locked"
        );
        IERC20(shareholderToken).transfer(shareholder, _amount);
        _removeShares(shareholder, _amount);
    }

    function _addShares(address shareholder, uint256 amount) internal {
        _distributeReward(shareholder);

        uint256 sharesBefore = shares[shareholder].amount;
        totalSharesDeposited += amount;
        shares[shareholder].amount += amount;
        shares[shareholder].lockedTime = block.timestamp;
        if (sharesBefore == 0 && shares[shareholder].amount > 0) {
            totalLockedUsers++;
        }
        rewards[shareholder].totalExcluded = getCumulativeRewards(
            shares[shareholder].amount
        );
    }

    function _removeShares(address shareholder, uint256 amount) internal {
        amount = amount == 0 ? shares[shareholder].amount : amount;
        require(
            shares[shareholder].amount > 0 && amount <= shares[shareholder].amount,
            "you can only unlock if you have some lockd"
        );
        _distributeReward(shareholder);

        totalSharesDeposited -= amount;
        shares[shareholder].amount -= amount;
        if (shares[shareholder].amount == 0) {
            totalLockedUsers--;
        }
        rewards[shareholder].totalExcluded = getCumulativeRewards(
            shares[shareholder].amount
        );
  }

    function depositRewards() public payable override {
        _depositRewards(msg.value);
    }

    function _depositRewards(uint256 _amount) internal {
        require(_amount > 0, "must provide ETH to deposit");
        require(totalSharesDeposited > 0, "must be shares deposited");

        totalRewards += _amount;
        rewardsPerShare += (ACC_FACTOR * _amount) / totalSharesDeposited;
        emit DepositRewards(msg.sender, _amount);
    }

    function _distributeReward(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaid(shareholder);

        rewards[shareholder].totalRealised += amount;
        rewards[shareholder].totalExcluded = getCumulativeRewards(
            shares[shareholder].amount
        );
        rewards[shareholder].lastClaim = block.timestamp;

        if (amount > 0) {
            bool success;
            address payable receiver = payable(shareholder);
            totalDistributed += amount;
            uint256 balanceBefore = address(this).balance;
            (success,) = receiver.call{ value: amount }('');
            require(address(this).balance >= balanceBefore - amount);
            emit DistributeReward(shareholder, receiver);
        }
    }

    function _dayOfMonth(uint256 _timestamp) internal pure returns (uint256) {
        (, , uint256 day) = _daysToDate(_timestamp / ONE_DAY);
        return day;
    }

    // date conversion algorithm from http://aa.usno.navy.mil/faq/docs/JD_Formula.php
    function _daysToDate(uint256 _days) internal pure returns (uint256, uint256, uint256) {
        int256 __days = int256(_days);

        int256 L = __days + 68569 + OFFSET19700101;
        int256 N = (4 * L) / 146097;
        L = L - (146097 * N + 3) / 4;
        int256 _year = (4000 * (L + 1)) / 1461001;
        L = L - (1461 * _year) / 4 + 31;
        int256 _month = (80 * L) / 2447;
        int256 _day = L - (2447 * _month) / 80;
        L = _month / 11;
        _month = _month + 2 - 12 * L;
        _year = 100 * (N - 49) + _year + L;

        return (uint256(_year), uint256(_month), uint256(_day));
    }

    function claimReward() external override {
        _distributeReward(msg.sender);
        emit ClaimReward(msg.sender);
    }

    // returns the unpaid rewards
    function getUnpaid(address shareholder) public view returns (uint256) {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 earnedRewards = getCumulativeRewards(shares[shareholder].amount);
        uint256 rewardsExcluded = rewards[shareholder].totalExcluded;
        if (earnedRewards <= rewardsExcluded) {
            return 0;
        }

        return earnedRewards - rewardsExcluded;
    }

    function getCumulativeRewards(uint256 share) internal view returns (uint256) {
        return (share * rewardsPerShare) / ACC_FACTOR;
    }

    function getLockedShares(address user) external view override returns (uint256) {
        return shares[user].amount;
    }

    function setMinDayOfMonthCanLock(uint8 _day) external onlyOwner {
        require(_day <= maxDayOfMonthCanLock, "can set min day above max day");
        minDayOfMonthCanLock = _day;
    }

    function setMaxDayOfMonthCanLock(uint8 _day) external onlyOwner {
        require(_day >= minDayOfMonthCanLock, "can set max day below min day");
        maxDayOfMonthCanLock = _day;
    }

    function setTimeLock(uint256 numSec) external onlyOwner {
        require(numSec <= 365 days, "must be less than a year");
        timeLock = numSec;
    }

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

    receive() external payable {
        _depositRewards(msg.value);
    }
}

pragma solidity ^0.8.15;

interface IUSDCReceiver {
    function initialize(address) external;
    function withdraw() external;
    function withdrawUnsupportedAsset(address, uint256) external;
}

pragma solidity ^0.8.15;

contract USDCReceiver is IUSDCReceiver, Ownable {

    address public usdc;
    address public token;

    constructor() Ownable() {
        token = msg.sender;
    }

    function initialize(address _usdc) public onlyOwner {
        require(usdc == address(0x0), "Already initialized");
        usdc = _usdc;
    }

    function withdraw() public {
        require(msg.sender == token, "Caller is not token");
        IERC20(usdc).transfer(token, IERC20(usdc).balanceOf(address(this)));
    }

    function withdrawUnsupportedAsset(address _token, uint256 _amount) public onlyOwner {
        if(_token == address(0x0))
            payable(owner()).transfer(_amount);
        else
            IERC20(_token).transfer(owner(), _amount);
    }
}

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

    IUniswapV2Router02 private _uniswapV2Router;

    ThreeDildosCapitalRewards private _rewards;
    USDCReceiver private _receiver;

    mapping (address => uint) private _cooldown;

    mapping (address => uint256) private _rOwned;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private _isBlacklisted;

    bool public tradingOpen;
    bool private swapping;
    bool private swapEnabled = false;
    bool public cooldownEnabled = false;
    bool public feesEnabled = true;

    string private constant _name = "Three Dildos Capital";
    string private constant _symbol = "3DC";

    uint8 private constant _decimals = 18;

    uint256 private constant _tTotal = 1e9 * (10**_decimals);
    uint256 public maxBuyAmount = _tTotal;
    uint256 public maxSellAmount = _tTotal;
    uint256 public maxWalletAmount = _tTotal;
    uint256 public tradingActiveBlock = 0;
    uint256 private _blocksToBlacklist = 0;
    uint256 private _cooldownBlocks = 1;
    uint256 public constant FEE_DIVISOR = 1000;
    uint256 public buyLiquidityFee = 10;
    uint256 private _previousBuyLiquidityFee = buyLiquidityFee;
    uint256 public buyTreasuryFee = 70;
    uint256 private _previousBuyTreasuryFee = buyTreasuryFee;
    uint256 public buyDevelopmentFee = 30;
    uint256 private _previousBuyDevelopmentFee = buyDevelopmentFee;
    uint256 public sellLiquidityFee = 10;
    uint256 private _previousSellLiquidityFee = sellLiquidityFee;
    uint256 public sellTreasuryFee = 70;
    uint256 private _previousSellTreasuryFee = sellTreasuryFee;
    uint256 public sellDevelopmentFee = 30;
    uint256 private _previousSellDevelopmentFee = sellDevelopmentFee;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForTreasury;
    uint256 private _tokensForDevelopment;
    uint256 private _swapTokensAtAmount = 0;

    address payable public liquidityWallet;
    address payable public treasuryWallet;
    address payable public developmentWallet;
    address private _uniswapV2Pair;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    address private USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    
    constructor (address liquidityWalletAddy, address treasuryWalletAddy, address developmentWalletAddy) {
        liquidityWallet = payable(liquidityWalletAddy);
        treasuryWallet = payable(treasuryWalletAddy);
        developmentWallet = payable(developmentWalletAddy);

        _rewards = new ThreeDildosCapitalRewards(address(this));
        _rewards.transferOwnership(msg.sender);

        _receiver = new USDCReceiver();
        _receiver.initialize(USDC);
        _receiver.transferOwnership(msg.sender);

        _rOwned[_msgSender()] = _tTotal;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(_receiver)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[liquidityWallet] = true;
        _isExcludedFromFees[treasuryWallet] = true;
        _isExcludedFromFees[developmentWallet] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(_receiver)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;
        _isExcludedMaxTransactionAmount[liquidityWallet] = true;
        _isExcludedMaxTransactionAmount[treasuryWallet] = true;
        _isExcludedMaxTransactionAmount[developmentWallet] = true;

        _rewards = new ThreeDildosCapitalRewards(address(this));
        _rewards.transferOwnership(msg.sender);

        _receiver = new USDCReceiver();
        _receiver.initialize(USDC);
        _receiver.transferOwnership(msg.sender);

        emit Transfer(ZERO, _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 _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 setCooldownEnabled(bool onoff) external onlyOwner {
        cooldownEnabled = onoff;
    }

    function setSwapEnabled(bool onoff) external onlyOwner {
        swapEnabled = onoff;
    }

    function setFeesEnabled(bool onoff) external onlyOwner {
        feesEnabled = onoff;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != ZERO, "ERC20: approve from the zero address");
        require(spender != ZERO, "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 != ZERO, "ERC20: transfer from the zero address");
        require(to != ZERO, "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool takeFee = true;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !swapping) {
            require(!_isBlacklisted[from] && !_isBlacklisted[to]);

            if(!tradingOpen) {
                require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not allowed yet.");
            }

            if (cooldownEnabled) {
                if (to != address(_uniswapV2Router) && to != address(_uniswapV2Pair)){
                    require(_cooldown[tx.origin] < block.number - _cooldownBlocks && _cooldown[to] < block.number - _cooldownBlocks, "Transfer delay enabled. Try again later.");
                    _cooldown[tx.origin] = block.number;
                    _cooldown[to] = block.number;
                }
            }

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds maximum wallet token amount.");
            }
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
                shouldSwap = true;
            }
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) {
            takeFee = false;
        }

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForTreasury + _tokensForDevelopment;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > _swapTokensAtAmount * 5) {
            contractBalance = _swapTokensAtAmount * 5;
        }
        
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForUSDC = contractBalance.sub(liquidityTokens);
        
        uint256 initialUSDCBalance = IERC20(USDC).balanceOf(address(this));

        swapTokensForTokens(amountToSwapForUSDC);
        _receiver.withdraw();
        
        uint256 usdcBalance = IERC20(USDC).balanceOf(address(this)).sub(initialUSDCBalance);
        uint256 usdcForTreasury = usdcBalance.mul(_tokensForTreasury).div(totalTokensToSwap);
        uint256 usdcForDevelopment = usdcBalance.mul(_tokensForDevelopment).div(totalTokensToSwap);
        uint256 usdcForLiquidity = usdcBalance - usdcForTreasury - usdcForDevelopment;
        
        _tokensForLiquidity = 0;
        _tokensForTreasury = 0;
        _tokensForDevelopment = 0;
        
        if(liquidityTokens > 0 && usdcForLiquidity > 0){
            addLiquidity(liquidityTokens, usdcForLiquidity);
            emit SwapAndLiquify(amountToSwapForUSDC, usdcForLiquidity, _tokensForLiquidity);
        }
        
        IERC20(USDC).transfer(developmentWallet, usdcForDevelopment);
        IERC20(USDC).transfer(treasuryWallet, IERC20(USDC).balanceOf(address(this)));
    }

    function swapTokensForTokens(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USDC;
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(_receiver),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 usdcAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        IERC20(USDC).approve(address(_uniswapV2Router), usdcAmount);
        _uniswapV2Router.addLiquidity(
            address(this),
            USDC,
            tokenAmount,
            usdcAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }
        
    function sendUSDCToFee(uint256 amount) private {
        IERC20(USDC).transfer(treasuryWallet, amount.div(2));
        IERC20(USDC).transfer(developmentWallet, amount.div(2));
    }

    function rewardsContract() external view returns (address) {
        return address(_rewards);
    }

    function usdcReceiverContract() external view returns (address) {
        return address(_receiver);
    }

    function isBlacklisted(address wallet) external view returns (bool) {
        return _isBlacklisted[wallet];
    }
    
    function launch() external onlyOwner {
        require(!tradingOpen, "Trading is already open");
        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Router = uniswapV2Router;
        _approve(address(this), address(_uniswapV2Router), _tTotal);
        IERC20(USDC).approve(address(_uniswapV2Router), IERC20(USDC).balanceOf(address(this)));
        _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), USDC);
        _uniswapV2Router.addLiquidity(address(this), USDC, balanceOf(address(this)), IERC20(USDC).balanceOf(address(this)), 0, 0, owner(), block.timestamp);
        swapEnabled = true;
        _swapTokensAtAmount = 5e5 * (10**_decimals);
        tradingOpen = true;
        tradingActiveBlock = block.number;
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
    }

    function setMaxBuyAmount(uint256 maxBuy) external onlyOwner {
        require(maxBuy >= 1e5 * (10**_decimals), "Max buy amount cannot be lower than 0.01% total supply.");
        maxBuyAmount = maxBuy;
    }

    function setMaxSellAmount(uint256 maxSell) external onlyOwner {
        require(maxSell >= 1e5 * (10**_decimals), "Max sell amount cannot be lower than 0.01% total supply.");
        maxSellAmount = maxSell;
    }
    
    function setMaxWalletAmount(uint256 maxToken) external onlyOwner {
        require(maxToken >= 1e6 * (10**_decimals), "Max wallet amount cannot be lower than 0.1% total supply.");
        maxWalletAmount = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 swapAmount) external onlyOwner {
        require(swapAmount >= 1e4 * (10**_decimals), "Swap amount cannot be lower than 0.001% total supply.");
        require(swapAmount <= 5e6 * (10**_decimals), "Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapAmount;
    }

    function setLiquidityWallet(address liquidityWalletAddy) external onlyOwner {
        require(liquidityWalletAddy != ZERO, "liquidityWallet address cannot be 0");
        _isExcludedFromFees[liquidityWallet] = false;
        _isExcludedMaxTransactionAmount[liquidityWallet] = false;
        liquidityWallet = payable(liquidityWalletAddy);
        _isExcludedFromFees[liquidityWallet] = true;
        _isExcludedMaxTransactionAmount[liquidityWallet] = true;
    }

    function setTreasuryWallet(address treasuryWalletAddy) external onlyOwner {
        require(treasuryWalletAddy != ZERO, "treasuryWallet address cannot be 0");
        _isExcludedFromFees[treasuryWallet] = false;
        _isExcludedMaxTransactionAmount[treasuryWallet] = false;
        treasuryWallet = payable(treasuryWalletAddy);
        _isExcludedFromFees[treasuryWallet] = true;
        _isExcludedMaxTransactionAmount[treasuryWallet] = true;
    }

    function setDevelopmentWallet(address developmentWalletAddy) external onlyOwner {
        require(developmentWalletAddy != ZERO, "developmentWallet address cannot be 0");
        _isExcludedFromFees[developmentWallet] = false;
        _isExcludedMaxTransactionAmount[developmentWallet] = false;
        developmentWallet = payable(developmentWalletAddy);
        _isExcludedFromFees[developmentWallet] = true;
        _isExcludedMaxTransactionAmount[developmentWallet] = true;
    }

    function setExcludedFromFees(address[] memory accounts, bool isEx) external onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = isEx;
        }
    }
    
    function setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) external onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
        }
    }
    
    function setBlacklisted(address[] memory accounts, bool exempt) external onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = exempt;
        }
    }

    function setBuyFee(uint256 newBuyLiquidityFee, uint256 newBuyTreasuryFee, uint256 newBuyDevelopmentFee) external onlyOwner {
        require(newBuyLiquidityFee + newBuyTreasuryFee + newBuyDevelopmentFee <= 200, "Must keep buy taxes below 20%");
        buyLiquidityFee = newBuyLiquidityFee;
        buyTreasuryFee = newBuyTreasuryFee;
        buyDevelopmentFee = newBuyDevelopmentFee;
    }

    function setSellFee(uint256 newSellLiquidityFee, uint256 newSellTreasuryFee, uint256 newSellDevelopmentFee) external onlyOwner {
        require(newSellLiquidityFee + newSellTreasuryFee + newSellDevelopmentFee <= 200, "Must keep sell taxes below 20%");
        sellLiquidityFee = newSellLiquidityFee;
        sellTreasuryFee = newSellTreasuryFee;
        sellDevelopmentFee = newSellDevelopmentFee;
    }

    function setBlocksToBlacklist(uint256 blocks) external onlyOwner {
        require(blocks < 10, "Must keep blacklist blocks below 10");
        _blocksToBlacklist = blocks;
    }

    function setCooldownBlocks(uint256 blocks) external onlyOwner {
        require(blocks < 10, "Must keep cooldown blocks below 10");
        _cooldownBlocks = blocks;
    }

    function removeAllFee() private {
        if(buyLiquidityFee == 0 && buyTreasuryFee == 0 && buyDevelopmentFee == 0 && sellLiquidityFee == 0 && sellTreasuryFee == 0 && sellDevelopmentFee == 0) return;
        
        _previousBuyLiquidityFee = buyLiquidityFee;
        _previousBuyTreasuryFee = buyTreasuryFee;
        _previousBuyDevelopmentFee = buyDevelopmentFee;
        _previousSellLiquidityFee = sellLiquidityFee;
        _previousSellTreasuryFee = sellTreasuryFee;
        _previousSellDevelopmentFee = sellDevelopmentFee;
        
        buyLiquidityFee = 0;
        buyTreasuryFee = 0;
        buyDevelopmentFee = 0;
        sellLiquidityFee = 0;
        sellTreasuryFee = 0;
        sellDevelopmentFee = 0;
    }
    
    function restoreAllFee() private {
        buyLiquidityFee = _previousBuyLiquidityFee;
        buyTreasuryFee = _previousBuyTreasuryFee;
        buyDevelopmentFee = _previousBuyDevelopmentFee;
        sellLiquidityFee = _previousSellLiquidityFee;
        sellTreasuryFee = _previousSellTreasuryFee;
        sellDevelopmentFee = _previousSellDevelopmentFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, bool isSell) private {
        if(!takeFee) {
            removeAllFee();
        } else {
            amount = _takeFees(sender, amount, isSell);
        }

        _transferStandard(sender, recipient, amount);
        
        if(!takeFee) {
            restoreAllFee();
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount, bool isSell) private returns (uint256) {
        uint256 _totalFees;
        uint256 liqFee;
        uint256 trsryFee;
        uint256 devFee;
        if(tradingActiveBlock + _blocksToBlacklist >= block.number){
            _totalFees = 999;
            liqFee = 333;
            trsryFee = 333;
            devFee = 333;
        } else {
            _totalFees = _getTotalFees(isSell);
            if (isSell) {
                liqFee = sellLiquidityFee;
                trsryFee = sellTreasuryFee;
                devFee = sellDevelopmentFee;
            } else {
                liqFee = buyLiquidityFee;
                trsryFee = buyTreasuryFee;
                devFee = buyDevelopmentFee;
            }
        }

        uint256 fees = amount.mul(_totalFees).div(FEE_DIVISOR);
        _tokensForLiquidity += fees * liqFee / _totalFees;
        _tokensForTreasury += fees * trsryFee / _totalFees;
        _tokensForDevelopment += fees * devFee / _totalFees;
            
        if(fees > 0) {
            _transferStandard(sender, address(this), fees);
        }
            
        return amount -= fees;
    }

    function _getTotalFees(bool isSell) private view returns(uint256) {
        if (isSell) {
            return sellLiquidityFee + sellTreasuryFee + sellDevelopmentFee;
        }
        return buyLiquidityFee + buyTreasuryFee + buyDevelopmentFee;
    }

    receive() external payable {}
    fallback() external payable {}
    
    function unclog() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForTokens(contractBalance);
    }
    
    function distributeFees() external onlyOwner {
        _receiver.withdraw();
        uint256 contractUSDCBalance = IERC20(USDC).balanceOf(address(this));
        sendUSDCToFee(contractUSDCBalance);
    }

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

    function withdrawStuckTokens(address tkn) external onlyOwner {
        require(tkn != address(this), "Cannot withdraw this token");
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"liquidityWalletAddy","type":"address"},{"internalType":"address","name":"treasuryWalletAddy","type":"address"},{"internalType":"address","name":"developmentWalletAddy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_DIVISOR","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":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"rewardsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setBlocksToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newBuyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newBuyDevelopmentFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setCooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"developmentWalletAddy","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityWalletAddy","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newSellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newSellDevelopmentFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWalletAddy","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcReceiverContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a805464ffffff0000191664010000000017815562000027906012906200081d565b6200003790633b9aca0062000835565b600b55620000486012600a6200081d565b6200005890633b9aca0062000835565b600c55620000696012600a6200081d565b6200007990633b9aca0062000835565b600d556000600e819055600f8190556001601055600a60118190556012819055604660138190556014819055601e6015819055601681905560178390556018929092556019819055601a55601b819055601c55602055602580546001600160a01b031990811661dead1790915560268054821690556027805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790553480156200011a57600080fd5b5060405162005afa38038062005afa8339810160408190526200013d9162000874565b62000148336200069c565b602180546001600160a01b038086166001600160a01b03199283161790925560228054858416908316179055602380549284169290911691909117905560405130906200019590620006ec565b6001600160a01b039091168152602001604051809103906000f080158015620001c2573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216918217905560405163f2fde38b60e01b815233600482015263f2fde38b90602401600060405180830381600087803b1580156200021957600080fd5b505af11580156200022e573d6000803e3d6000fd5b505050506040516200024090620006fa565b604051809103906000f0801580156200025d573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560275460405163189acdbd60e31b8152921660048301529063c4d66de890602401600060405180830381600087803b158015620002b957600080fd5b505af1158015620002ce573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200031857600080fd5b505af11580156200032d573d6000803e3d6000fd5b505050506012600a6200034191906200081d565b6200035190633b9aca0062000835565b3360009081526005602090815260408083209390935581546001600160a01b039081168352600782528383208054600160ff1991821681179092553080865286862080548316841790556003805485168752878720805484168517905560258054861688528888208054851686179055602180548716895289892080548616871790556022805488168a528a8a2080548716881790556023805489168b528b8b2080548816891790558a5489168b5260089099528a8a208054871688179055848a528a8a2080548716881790559254871689528989208054861687179055905486168852888820805485168617905554851687528787208054841685179055548416865286862080548316841790559354909216845292849020805490911690921790915590516200048390620006ec565b6001600160a01b039091168152602001604051809103906000f080158015620004b0573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216918217905560405163f2fde38b60e01b815233600482015263f2fde38b90602401600060405180830381600087803b1580156200050757600080fd5b505af11580156200051c573d6000803e3d6000fd5b505050506040516200052e90620006fa565b604051809103906000f0801580156200054b573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560275460405163189acdbd60e31b8152921660048301529063c4d66de890602401600060405180830381600087803b158015620005a757600080fd5b505af1158015620005bc573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200060657600080fd5b505af11580156200061b573d6000803e3d6000fd5b505050506200062f6200069860201b60201c565b6026546001600160a01b0391821691167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200066e6012600a6200081d565b6200067e90633b9aca0062000835565b60405190815260200160405180910390a3505050620008be565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6116908062003e0383390190565b610667806200549383390190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075f57816000190482111562000743576200074362000708565b808516156200075157918102915b93841c939080029062000723565b509250929050565b600082620007785750600162000817565b81620007875750600062000817565b8160018114620007a05760028114620007ab57620007cb565b600191505062000817565b60ff841115620007bf57620007bf62000708565b50506001821b62000817565b5060208310610133831016604e8410600b8410161715620007f0575081810a62000817565b620007fc83836200071e565b806000190482111562000813576200081362000708565b0290505b92915050565b60006200082e60ff84168362000767565b9392505050565b600081600019048311821515161562000852576200085262000708565b500290565b80516001600160a01b03811681146200086f57600080fd5b919050565b6000806000606084860312156200088a57600080fd5b620008958462000857565b9250620008a56020850162000857565b9150620008b56040850162000857565b90509250925092565b61353580620008ce6000396000f3fe60806040526004361061030f5760003560e01c8063a64e4f8a11610196578063dd62ed3e116100eb578063f2fde38b1161008f578063f5a6682f1161006c578063f5a6682f14610954578063f637434214610974578063fe575a871461098a578063ffb54a99146109c357005b8063f2fde38b146108ff578063f34eb0b81461091f578063f5648a4f1461093f57005b8063e6f7ef4d116100c8578063e6f7ef4d14610893578063e99c9d09146108b3578063ee40166e146108d3578063f11a24d3146108e957005b8063dd62ed3e1461080d578063e01af92c14610853578063e1baae1f1461087357005b8063afa4f3b211610152578063bbd6e8911161012f578063bbd6e8911461078f578063c04a5414146107ad578063cb963728146107cd578063d4698016146107ed57005b8063afa4f3b214610744578063b204141114610764578063bb57ad201461077a57005b8063a64e4f8a1461068b578063a8602fea146106ad578063a901dd92146106cd578063a9059cbb146106ed578063a985ceef1461070d578063aa4bde281461072e57005b8063313ce5671161026457806370a082311161020857806388e765ff116101e557806388e765ff146106155780638da5cb5b1461062b57806395d89b41146106495780639e93ad8e1461067557005b806370a08231146105aa578063715018a6146105e057806372ac2486146105f557005b80635c068a8c116102415780635c068a8c1461055357806366d602ae1461056957806367c453491461057f5780636b2fb1241461059457005b8063313ce567146104f75780634626402b146105135780635932ead11461053357005b806318a94cf1116102cb57806323b872dd116102a857806323b872dd1461047757806325519cf21461049757806327a14fc2146104b7578063296f0a0c146104d757005b806318a94cf11461040f5780631d865c3014610425578063220cce971461044557005b806301339c211461031857806306fdde031461032d578063095ea7b31461037c578063105222f9146103ac57806314626dc6146103cc57806318160ddd146103ec57005b3661031657005b005b34801561032457600080fd5b506103166109dd565b34801561033957600080fd5b50604080518082019091526014815273151a1c995948111a5b191bdcc810d85c1a5d185b60621b60208201525b6040516103739190612f4f565b60405180910390f35b34801561038857600080fd5b5061039c610397366004612fc9565b610e38565b6040519015158152602001610373565b3480156103b857600080fd5b506103166103c7366004613024565b610e4f565b3480156103d857600080fd5b506103166103e73660046130fb565b610ec3565b3480156103f857600080fd5b50610401610f2b565b604051908152602001610373565b34801561041b57600080fd5b50610401601b5481565b34801561043157600080fd5b50610316610440366004613114565b610f4c565b34801561045157600080fd5b506002546001600160a01b03165b6040516001600160a01b039091168152602001610373565b34801561048357600080fd5b5061039c610492366004613140565b610fc7565b3480156104a357600080fd5b506103166104b2366004613114565b61102b565b3480156104c357600080fd5b506103166104d23660046130fb565b6110a6565b3480156104e357600080fd5b506103166104f2366004613181565b611141565b34801561050357600080fd5b5060405160128152602001610373565b34801561051f57600080fd5b5060225461045f906001600160a01b031681565b34801561053f57600080fd5b5061031661054e36600461319e565b611231565b34801561055f57600080fd5b5061040160135481565b34801561057557600080fd5b50610401600c5481565b34801561058b57600080fd5b50610316611257565b3480156105a057600080fd5b5061040160195481565b3480156105b657600080fd5b506104016105c5366004613181565b6001600160a01b031660009081526005602052604090205490565b3480156105ec57600080fd5b5061031661127b565b34801561060157600080fd5b50610316610610366004613181565b61128f565b34801561062157600080fd5b50610401600b5481565b34801561063757600080fd5b506000546001600160a01b031661045f565b34801561065557600080fd5b5060408051808201909152600381526233444360e81b6020820152610366565b34801561068157600080fd5b506104016103e881565b34801561069757600080fd5b50600a5461039c90640100000000900460ff1681565b3480156106b957600080fd5b506103166106c8366004613181565b611381565b3480156106d957600080fd5b506103166106e836600461319e565b611470565b3480156106f957600080fd5b5061039c610708366004612fc9565b611498565b34801561071957600080fd5b50600a5461039c906301000000900460ff1681565b34801561073a57600080fd5b50610401600d5481565b34801561075057600080fd5b5061031661075f3660046130fb565b6114a5565b34801561077057600080fd5b5061040160155481565b34801561078657600080fd5b506103166115bc565b34801561079b57600080fd5b506003546001600160a01b031661045f565b3480156107b957600080fd5b5060235461045f906001600160a01b031681565b3480156107d957600080fd5b506103166107e8366004613181565b6116a6565b3480156107f957600080fd5b5060215461045f906001600160a01b031681565b34801561081957600080fd5b506104016108283660046131bb565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561085f57600080fd5b5061031661086e36600461319e565b611889565b34801561087f57600080fd5b5061031661088e366004613024565b6118ad565b34801561089f57600080fd5b506103166108ae3660046130fb565b61191c565b3480156108bf57600080fd5b506103166108ce3660046130fb565b611985565b3480156108df57600080fd5b50610401600e5481565b3480156108f557600080fd5b5061040160115481565b34801561090b57600080fd5b5061031661091a366004613181565b611a20565b34801561092b57600080fd5b5061031661093a3660046130fb565b611a96565b34801561094b57600080fd5b50610316611b31565b34801561096057600080fd5b5061031661096f366004613024565b611b86565b34801561098057600080fd5b5061040160175481565b34801561099657600080fd5b5061039c6109a5366004613181565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109cf57600080fd5b50600a5461039c9060ff1681565b6109e5611bf5565b600a5460ff1615610a3d5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610a8a3082610a776012600a6132ee565b610a8590633b9aca006132fd565b611c4f565b6027546001546040516370a0823160e01b81523060048201526001600160a01b039283169263095ea7b392169083906370a0823190602401602060405180830381865afa158015610adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b03919061331c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b729190613335565b50806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd59190613352565b6027546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190613352565b602480546001600160a01b0319166001600160a01b03928316179055600154602754306000818152600560205260409020549284169363e8e3370093919216906027546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf6919061331c565b600080610d0b6000546001600160a01b031690565b426040518963ffffffff1660e01b8152600401610d2f98979695949392919061336f565b6060604051808303816000875af1158015610d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7291906133b8565b5050600a805462ff0000191662010000178155610d9291506012906132ee565b610d9f906207a1206132fd565b602055600a805460ff1916600190811790915543600e5560248054915460405163095ea7b360e01b81526001600160a01b039182166004820152600019928101929092529091169063095ea7b3906044015b6020604051808303816000875af1158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190613335565b5050565b6000610e45338484611c4f565b5060015b92915050565b610e57611bf5565b60005b8251811015610ebe578160076000858481518110610e7a57610e7a6133e6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610eb6816133fc565b915050610e5a565b505050565b610ecb611bf5565b600a8110610f265760405162461bcd60e51b815260206004820152602260248201527f4d757374206b65657020636f6f6c646f776e20626c6f636b732062656c6f7720604482015261031360f41b6064820152608401610a34565b601055565b6000610f396012600a6132ee565b610f4790633b9aca006132fd565b905090565b610f54611bf5565b60c881610f618486613415565b610f6b9190613415565b1115610fb95760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610a34565b601792909255601955601b55565b6000610fd4848484611d84565b6110218433610a85856040518060600160405280602881526020016134d8602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612472565b5060019392505050565b611033611bf5565b60c8816110408486613415565b61104a9190613415565b11156110985760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203230250000006044820152606401610a34565b601192909255601355601555565b6110ae611bf5565b6110ba6012600a6132ee565b6110c790620f42406132fd565b81101561113c5760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e000000000000006064820152608401610a34565b600d55565b611149611bf5565b6026546001600160a01b03908116908216036111b35760405162461bcd60e51b815260206004820152602360248201527f6c697175696469747957616c6c657420616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610a34565b602180546001600160a01b039081166000908152600760208181526040808420805460ff19908116909155865486168552600880845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b611239611bf5565b600a805491151563010000000263ff00000019909216919091179055565b61125f611bf5565b306000908152600560205260409020546112788161249e565b50565b611283611bf5565b61128d600061259d565b565b611297611bf5565b6026546001600160a01b03908116908216036113035760405162461bcd60e51b815260206004820152602560248201527f646576656c6f706d656e7457616c6c657420616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a34565b602380546001600160a01b039081166000908152600760208181526040808420805460ff19908116909155865486168552600880845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b611389611bf5565b6026546001600160a01b03908116908216036113f25760405162461bcd60e51b815260206004820152602260248201527f747265617375727957616c6c657420616464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610a34565b602280546001600160a01b039081166000908152600760208181526040808420805460ff19908116909155865486168552600880845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b611478611bf5565b600a80549115156401000000000264ff0000000019909216919091179055565b6000610e45338484611d84565b6114ad611bf5565b6114b96012600a6132ee565b6114c5906127106132fd565b8110156115325760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a34565b61153e6012600a6132ee565b61154b90624c4b406132fd565b8111156115b75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a34565b602055565b6115c4611bf5565b600360009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561161457600080fd5b505af1158015611628573d6000803e3d6000fd5b50506027546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b919061331c565b9050611278816125ed565b6116ae611bf5565b306001600160a01b038216036117065760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e0000000000006044820152606401610a34565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561174d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611771919061331c565b116117aa5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a34565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611815919061331c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611865573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe9190613335565b611891611bf5565b600a8054911515620100000262ff000019909216919091179055565b6118b5611bf5565b60005b8251811015610ebe5781600960008584815181106118d8576118d86133e6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611914816133fc565b9150506118b8565b611924611bf5565b600a81106119805760405162461bcd60e51b815260206004820152602360248201527f4d757374206b65657020626c61636b6c69737420626c6f636b732062656c6f7760448201526202031360ec1b6064820152608401610a34565b600f55565b61198d611bf5565b6119996012600a6132ee565b6119a690620186a06132fd565b811015611a1b5760405162461bcd60e51b815260206004820152603860248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e30312520746f74616c20737570706c792e00000000000000006064820152608401610a34565b600c55565b611a28611bf5565b6001600160a01b038116611a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b6112788161259d565b611a9e611bf5565b611aaa6012600a6132ee565b611ab790620186a06132fd565b811015611b2c5760405162461bcd60e51b815260206004820152603760248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460448201527f68616e20302e30312520746f74616c20737570706c792e0000000000000000006064820152608401610a34565b600b55565b611b39611bf5565b604051600090339047908381818185875af1925050503d8060008114611b7b576040519150601f19603f3d011682016040523d82523d6000602084013e611b80565b606091505b50505050565b611b8e611bf5565b60005b8251811015610ebe578160086000858481518110611bb157611bb16133e6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611bed816133fc565b915050611b91565b6000546001600160a01b0316331461128d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a34565b6026546001600160a01b0390811690841603611cb95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a34565b6026546001600160a01b0390811690831603611d225760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a34565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6026546001600160a01b0390811690841603611df05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a34565b6026546001600160a01b0390811690831603611e5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a34565b60008111611ebc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a34565b60016000611ed26000546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611f0157506000546001600160a01b03858116911614155b8015611f1b57506026546001600160a01b03858116911614155b8015611f3557506025546001600160a01b03858116911614155b8015611f495750600a54610100900460ff16155b1561233e576001600160a01b03851660009081526009602052604090205460ff16158015611f9057506001600160a01b03841660009081526009602052604090205460ff16155b611f9957600080fd5b600a5460ff1661202e576001600160a01b03851660009081526007602052604090205460ff1680611fe257506001600160a01b03841660009081526007602052604090205460ff165b61202e5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610a34565b600a546301000000900460ff1615612140576001546001600160a01b0385811691161480159061206c57506024546001600160a01b03858116911614155b156121405760105461207e904361342d565b326000908152600460205260409020541080156120be57506010546120a3904361342d565b6001600160a01b038516600090815260046020526040902054105b61211b5760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610a34565b3260009081526004602052604080822043908190556001600160a01b03871683529120555b6024546001600160a01b03868116911614801561216b57506001546001600160a01b03858116911614155b801561219057506001600160a01b03841660009081526008602052604090205460ff16155b1561228057600b548311156121f95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610a34565b600d548361221c866001600160a01b031660009081526005602052604090205490565b6122269190613415565b11156122805760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a34565b6024546001600160a01b0385811691161480156122ab57506001546001600160a01b03868116911614155b80156122d057506001600160a01b03851660009081526008602052604090205460ff16155b1561233e57600c5483111561233a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610a34565b5060015b6001600160a01b03851660009081526007602052604090205460ff168061237d57506001600160a01b03841660009081526007602052604090205460ff165b806123935750600a54640100000000900460ff16155b1561239d57600091505b3060009081526005602052604081205490506000602054821180156123bf5750825b90508080156123d65750600a5462010000900460ff165b80156123ea5750600a54610100900460ff16155b801561240f57506001600160a01b03871660009081526007602052604090205460ff16155b801561243457506001600160a01b03861660009081526007602052604090205460ff16155b1561245c57600a805461ff0019166101001790556124506126d6565b600a805461ff00191690555b6124698787878787612b10565b50505050505050565b600081848411156124965760405162461bcd60e51b8152600401610a349190612f4f565b505050900390565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124d3576124d36133e6565b6001600160a01b039283166020918202929092010152602754825191169082906001908110612504576125046133e6565b6001600160a01b03928316602091820292909201015260015461252a9130911684611c4f565b600154600354604051635c11d79560e01b81526001600160a01b0392831692635c11d7959261256792879260009288929116904290600401613444565b600060405180830381600087803b15801561258157600080fd5b505af1158015612595573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6027546022546001600160a01b039182169163a9059cbb9116612611846002612b70565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561265c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126809190613335565b506027546023546001600160a01b039182169163a9059cbb91166126a5846002612b70565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610df1565b3060009081526005602052604081205490506000601f54601e54601d546126fd9190613415565b6127079190613415565b9050811580612714575080155b1561271d575050565b60205461272b9060056132fd565b821115612743576020546127409060056132fd565b91505b6000600282601d548561275691906132fd565b61276091906134b5565b61276a91906134b5565b905060006127788483612b83565b6027546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156127c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ea919061331c565b90506127f58261249e565b600360009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b50506027546040516370a0823160e01b8152306004820152600093506128d6925084916001600160a01b0316906370a0823190602401602060405180830381865afa1580156128ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d0919061331c565b90612b83565b905060006128f9866128f3601e5485612b8f90919063ffffffff16565b90612b70565b90506000612916876128f3601f5486612b8f90919063ffffffff16565b9050600081612925848661342d565b61292f919061342d565b6000601d819055601e819055601f559050861580159061294f5750600081115b156129a25761295e8782612b9b565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60275460235460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af11580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b9190613335565b506027546022546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015612a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a95919061331c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190613335565b50505050505050505050565b81612b2257612b1d612cb7565b612b30565b612b2d858483612d3f565b92505b612b3b858585612e65565b81612b6957612b69601254601155601454601355601654601555601854601755601a54601955601c54601b55565b5050505050565b6000612b7c82846134b5565b9392505050565b6000612b7c828461342d565b6000612b7c82846132fd565b600154612bb39030906001600160a01b031684611c4f565b60275460015460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af1158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190613335565b5060015460275460215460405162e8e33760e81b81526001600160a01b039384169363e8e3370093612c7493309391831692899289926000928392911690429060040161336f565b6060604051808303816000875af1158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6991906133b8565b601154158015612cc75750601354155b8015612cd35750601554155b8015612cdf5750601754155b8015612ceb5750601954155b8015612cf75750601b54155b15612cfe57565b6011805460125560138054601455601580546016556017805460185560198054601a55601b8054601c55600095869055938590559184905583905582905555565b600080600080600043600f54600e54612d589190613415565b10612d7157506103e7925061014d915081905080612da6565b612d7a86612f0b565b93508515612d965760175492506019549150601b549050612da6565b6011549250601354915060155490505b6000612db86103e86128f38a88612b8f565b905084612dc585836132fd565b612dcf91906134b5565b601d6000828254612de09190613415565b90915550859050612df184836132fd565b612dfb91906134b5565b601e6000828254612e0c9190613415565b90915550859050612e1d83836132fd565b612e2791906134b5565b601f6000828254612e389190613415565b90915550508015612e4e57612e4e893083612e65565b612e58818961342d565b9998505050505050505050565b6001600160a01b038316600090815260056020526040902054612e889082612b83565b6001600160a01b038085166000908152600560205260408082209390935590841681522054612eb79082612f43565b6001600160a01b0380841660008181526005602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d779085815260200190565b60008115612f3057601b54601954601754612f269190613415565b610e499190613415565b601554601354601154612f269190613415565b6000612b7c8284613415565b600060208083528351808285015260005b81811015612f7c57858101830151858201604001528201612f60565b81811115612f8e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461127857600080fd5b8035612fc481612fa4565b919050565b60008060408385031215612fdc57600080fd5b8235612fe781612fa4565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b801515811461127857600080fd5b8035612fc48161300b565b6000806040838503121561303757600080fd5b823567ffffffffffffffff8082111561304f57600080fd5b818501915085601f83011261306357600080fd5b813560208282111561307757613077612ff5565b8160051b604051601f19603f8301168101818110868211171561309c5761309c612ff5565b6040529283528183019350848101820192898411156130ba57600080fd5b948201945b838610156130df576130d086612fb9565b855294820194938201936130bf565b96506130ee9050878201613019565b9450505050509250929050565b60006020828403121561310d57600080fd5b5035919050565b60008060006060848603121561312957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561315557600080fd5b833561316081612fa4565b9250602084013561317081612fa4565b929592945050506040919091013590565b60006020828403121561319357600080fd5b8135612b7c81612fa4565b6000602082840312156131b057600080fd5b8135612b7c8161300b565b600080604083850312156131ce57600080fd5b82356131d981612fa4565b915060208301356131e981612fa4565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561324557816000190482111561322b5761322b6131f4565b8085161561323857918102915b93841c939080029061320f565b509250929050565b60008261325c57506001610e49565b8161326957506000610e49565b816001811461327f5760028114613289576132a5565b6001915050610e49565b60ff84111561329a5761329a6131f4565b50506001821b610e49565b5060208310610133831016604e8410600b84101617156132c8575081810a610e49565b6132d2838361320a565b80600019048211156132e6576132e66131f4565b029392505050565b6000612b7c60ff84168361324d565b6000816000190483118215151615613317576133176131f4565b500290565b60006020828403121561332e57600080fd5b5051919050565b60006020828403121561334757600080fd5b8151612b7c8161300b565b60006020828403121561336457600080fd5b8151612b7c81612fa4565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6000806000606084860312156133cd57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60006001820161340e5761340e6131f4565b5060010190565b60008219821115613428576134286131f4565b500190565b60008282101561343f5761343f6131f4565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134945784516001600160a01b03168352938301939183019160010161346f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000826134d257634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209f316152efb178f0012b488db7ec9aba7509a1e318b6f26947d8a3f2365cb28a64736f6c634300080f0033608060405262278d006002556008805461ffff191661050117905534801561002657600080fd5b50604051611690380380611690833981016040819052610045916100c3565b61004e33610073565b600180546001600160a01b0319166001600160a01b03929092169190911790556100f3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d557600080fd5b81516001600160a01b03811681146100ec57600080fd5b9392505050565b61158e806101026000396000f3fe60806040526004361061014f5760003560e01c80638f0000fd116100b6578063dc69c3631161006f578063dc69c363146103f5578063dd46706414610414578063e0395c1e14610434578063efca2eed1461044a578063f2fde38b14610460578063f5648a4f1461048057600080fd5b80638f0000fd1461032b578063b88a802f1461034b578063beb68d0514610360578063c7e1d0b114610380578063ce7c2ac214610396578063d085835a146103df57600080fd5b80635bcb318a116101085780635bcb318a146102645780635dfa41dd146102845780636198e339146102a4578063715018a6146102c457806389d96917146102d95780638da5cb5b146102f957600080fd5b80630700037d146101645780630e15561a146101c0578063152111f7146101e45780633c6e6789146101ec5780633d28a280146102025780633f4b3b7e1461023857600080fd5b3661015f5761015d34610495565b005b600080fd5b34801561017057600080fd5b506101a061017f3660046112c0565b600a6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060015b60405180910390f35b3480156101cc57600080fd5b506101d660055481565b6040519081526020016101b7565b61015d6105c7565b3480156101f857600080fd5b506101d660045481565b34801561020e57600080fd5b506101d661021d3660046112c0565b6001600160a01b031660009081526009602052604090205490565b34801561024457600080fd5b506008546102529060ff1681565b60405160ff90911681526020016101b7565b34801561027057600080fd5b5061015d61027f3660046112f0565b6105d2565b34801561029057600080fd5b5061015d61029f366004611309565b610633565b3480156102b057600080fd5b5061015d6102bf3660046112f0565b6106b0565b3480156102d057600080fd5b5061015d61089f565b3480156102e557600080fd5b506101d66102f43660046112c0565b6108b1565b34801561030557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101b7565b34801561033757600080fd5b5061015d610346366004611309565b610939565b34801561035757600080fd5b5061015d6109b5565b34801561036c57600080fd5b50600154610313906001600160a01b031681565b34801561038c57600080fd5b506101d660075481565b3480156103a257600080fd5b506103ca6103b13660046112c0565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016101b7565b3480156103eb57600080fd5b506101d660025481565b34801561040157600080fd5b5060085461025290610100900460ff1681565b34801561042057600080fd5b5061015d61042f3660046112f0565b6109f3565b34801561044057600080fd5b506101d660035481565b34801561045657600080fd5b506101d660065481565b34801561046c57600080fd5b5061015d61047b3660046112c0565b610b7e565b34801561048c57600080fd5b5061015d610bf7565b600081116104ea5760405162461bcd60e51b815260206004820152601b60248201527f6d7573742070726f766964652045544820746f206465706f736974000000000060448201526064015b60405180910390fd5b60006004541161053c5760405162461bcd60e51b815260206004820152601860248201527f6d75737420626520736861726573206465706f7369746564000000000000000060448201526064016104e1565b806005600082825461054e9190611342565b909155505060045461056f826ec097ce7bc90715b34b9f100000000061135a565b610579919061138f565b6007600082825461058a9190611342565b909155505060405181815233907fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d56134099060200160405180910390a250565b6105d034610495565b565b6105da610c41565b6301e1338081111561062e5760405162461bcd60e51b815260206004820152601860248201527f6d757374206265206c657373207468616e20612079656172000000000000000060448201526064016104e1565b600255565b61063b610c41565b60085460ff90811690821610156106945760405162461bcd60e51b815260206004820152601d60248201527f63616e20736574206d6178206461792062656c6f77206d696e2064617900000060448201526064016104e1565b6008805460ff9092166101000261ff0019909216919091179055565b6002543360008181526009602052604090206001015490916106d191611342565b4210156107315760405162461bcd60e51b815260206004820152602860248201527f6d7573742077616974207468652074696d65206c6f636b206265666f726520756044820152676e7374616b696e6760c01b60648201526084016104e1565b811561073d5781610757565b6001600160a01b0381166000908152600960205260409020545b9150600082116107a15760405162461bcd60e51b81526020600482015260156024820152746e65656420746f6b656e7320746f20756e6c6f636b60581b60448201526064016104e1565b6001600160a01b0381166000908152600960205260409020548211156108195760405162461bcd60e51b815260206004820152602760248201527f63616e6e6f7420756e6c6f636b206d6f7265207468616e20796f752068617665604482015266081b1bd8dad95960ca1b60648201526084016104e1565b60015460405163a9059cbb60e01b81526001600160a01b038381166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113a3565b5061089b8183610c9b565b5050565b6108a7610c41565b6105d06000610e26565b6001600160a01b03811660009081526009602052604081205481036108d857506000919050565b6001600160a01b0382166000908152600960205260408120546108fa90610e76565b6001600160a01b0384166000908152600a6020526040902054909150808211610927575060009392505050565b61093181836113c5565b949350505050565b610941610c41565b60085460ff6101009091048116908216111561099f5760405162461bcd60e51b815260206004820152601d60248201527f63616e20736574206d696e206461792061626f7665206d61782064617900000060448201526064016104e1565b6008805460ff191660ff92909216919091179055565b6109be33610ea6565b6040513381527f63e32091e4445d16e29c33a6b264577c2d86694021aa4e6f4dd590048f5792e89060200160405180910390a1565b60006109fe42611022565b60085490915060ff168110801590610a205750600854610100900460ff168111155b610a6c5760405162461bcd60e51b815260206004820152601e60248201527f6f757473696465206f6620616c6c6f776564206c6f636b2077696e646f77000060448201526064016104e1565b60015433906001600160a01b03168315610a865783610af0565b6040516370a0823160e01b81526001600160a01b0383811660048301528216906370a0823190602401602060405180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af091906113dc565b6040516323b872dd60e01b81526001600160a01b03848116600483015230602483015260448201839052919550908216906323b872dd906064016020604051808303816000875af1158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6d91906113a3565b50610b788285611043565b50505050565b610b86610c41565b6001600160a01b038116610beb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e1565b610bf481610e26565b50565b610bff610c41565b604051600090339047908381818185875af1925050503d8060008114610b78576040519150601f19603f3d011682016040523d82523d6000602084013e610b78565b6000546001600160a01b031633146105d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e1565b8015610ca75780610cc1565b6001600160a01b0382166000908152600960205260409020545b6001600160a01b03831660009081526009602052604090205490915015801590610d0357506001600160a01b0382166000908152600960205260409020548111155b610d625760405162461bcd60e51b815260206004820152602a60248201527f796f752063616e206f6e6c7920756e6c6f636b20696620796f752068617665206044820152691cdbdb59481b1bd8dad960b21b60648201526084016104e1565b610d6b82610ea6565b8060046000828254610d7d91906113c5565b90915550506001600160a01b03821660009081526009602052604081208054839290610daa9084906113c5565b90915550506001600160a01b0382166000908152600960205260408120549003610de45760038054906000610dde836113f5565b91905055505b6001600160a01b038216600090815260096020526040902054610e0690610e76565b6001600160a01b039092166000908152600a602052604090209190915550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006ec097ce7bc90715b34b9f100000000060075483610e96919061135a565b610ea0919061138f565b92915050565b6001600160a01b0381166000908152600960205260408120549003610ec85750565b6000610ed3826108b1565b6001600160a01b0383166000908152600a6020526040812060010180549293508392909190610f03908490611342565b90915550506001600160a01b038216600090815260096020526040902054610f2a90610e76565b6001600160a01b0383166000908152600a6020526040902090815542600290910155801561089b576000808390508260066000828254610f6a9190611342565b909155505060405147906001600160a01b038316908590600081818185875af1925050503d8060008114610fba576040519150601f19603f3d011682016040523d82523d6000602084013e610fbf565b606091505b50909350610fcf905084826113c5565b471015610fdb57600080fd5b6040516001600160a01b0383811682528616907f762e3e2d1a38b40402072407d6eed487e6836ef3ced426a733334e8b304c779b9060200160405180910390a25050505050565b60008061103a611035620151808561138f565b61114c565b95945050505050565b61104c82610ea6565b6001600160a01b0382166000908152600960205260408120546004805491928492611078908490611342565b90915550506001600160a01b038316600090815260096020526040812080548492906110a5908490611342565b90915550506001600160a01b038316600090815260096020526040902042600190910155801580156110ee57506001600160a01b03831660009081526009602052604090205415155b1561110957600380549060006111038361140c565b91905055505b6001600160a01b03831660009081526009602052604090205461112b90610e76565b6001600160a01b039093166000908152600a60205260409020929092555050565b60008080838162253d8c6111638362010bd9611425565b61116d9190611425565b9050600062023ab1611180836004611466565b61118a91906114eb565b9050600461119b8262023ab1611466565b6111a6906003611425565b6111b091906114eb565b6111ba9083611519565b9150600062164b096111cd846001611425565b6111d990610fa0611466565b6111e391906114eb565b905060046111f3826105b5611466565b6111fd91906114eb565b6112079084611519565b61121290601f611425565b9250600061098f611224856050611466565b61122e91906114eb565b9050600060506112408361098f611466565b61124a91906114eb565b6112549086611519565b9050611261600b836114eb565b945061126e85600c611466565b611279836002611425565b6112839190611519565b91508483611292603187611519565b61129d906064611466565b6112a79190611425565b6112b19190611425565b9a919950975095505050505050565b6000602082840312156112d257600080fd5b81356001600160a01b03811681146112e957600080fd5b9392505050565b60006020828403121561130257600080fd5b5035919050565b60006020828403121561131b57600080fd5b813560ff811681146112e957600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156113555761135561132c565b500190565b60008160001904831182151516156113745761137461132c565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261139e5761139e611379565b500490565b6000602082840312156113b557600080fd5b815180151581146112e957600080fd5b6000828210156113d7576113d761132c565b500390565b6000602082840312156113ee57600080fd5b5051919050565b6000816114045761140461132c565b506000190190565b60006001820161141e5761141e61132c565b5060010190565b600080821280156001600160ff1b03849003851316156114475761144761132c565b600160ff1b83900384128116156114605761146061132c565b50500190565b60006001600160ff1b038184138284138082168684048611161561148c5761148c61132c565b600160ff1b60008712828116878305891216156114ab576114ab61132c565b600087129250878205871284841616156114c7576114c761132c565b878505871281841616156114dd576114dd61132c565b505050929093029392505050565b6000826114fa576114fa611379565b600160ff1b8214600019841416156115145761151461132c565b500590565b60008083128015600160ff1b8501841216156115375761153761132c565b6001600160ff1b03840183138116156115525761155261132c565b5050039056fea264697066735822122004b7e9c3999829553ae4ae451ae6c8debd5f6b37cea7ad10390b0a3372085d9564736f6c634300080f0033608060405234801561001057600080fd5b5061001a33610031565b600280546001600160a01b03191633179055610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105d7806100906000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e1578063c4d66de8146100f2578063f2fde38b14610105578063fc0c546a1461011857600080fd5b80633ccfd60b1461008d5780633e413bee1461009757806370c8b173146100c6578063715018a6146100d9575b600080fd5b61009561012b565b005b6001546100aa906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100956100d436600461051a565b61026b565b610095610351565b6000546001600160a01b03166100aa565b610095610100366004610544565b610365565b610095610113366004610544565b6103de565b6002546100aa906001600160a01b031681565b6002546001600160a01b031633146101805760405162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba103a37b5b2b760691b60448201526064015b60405180910390fd5b6001546002546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa1580156101d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f99190610566565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610268919061057f565b50565b610273610454565b6001600160a01b0382166102bf57600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156102ba573d6000803e3d6000fd5b505050565b816001600160a01b031663a9059cbb6102e06000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba919061057f565b610359610454565b61036360006104ae565b565b61036d610454565b6001546001600160a01b0316156103bc5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610177565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6103e6610454565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b610268816104ae565b6000546001600160a01b031633146103635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610177565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461051557600080fd5b919050565b6000806040838503121561052d57600080fd5b610536836104fe565b946020939093013593505050565b60006020828403121561055657600080fd5b61055f826104fe565b9392505050565b60006020828403121561057857600080fd5b5051919050565b60006020828403121561059157600080fd5b8151801515811461055f57600080fdfea264697066735822122009dfecba571c6ce6dd1310b3308d02dd6890e7491b603ccc6e4f5e3602d21a4064736f6c634300080f0033000000000000000000000000d3c0c85faa4f51861f6160edc91b52f81719612600000000000000000000000017d17158383a41bc0a1417a973ecaaf35a622e7f0000000000000000000000006af02506acac1e1f1c34881fee1d28a6e823fc0a

Deployed Bytecode

0x60806040526004361061030f5760003560e01c8063a64e4f8a11610196578063dd62ed3e116100eb578063f2fde38b1161008f578063f5a6682f1161006c578063f5a6682f14610954578063f637434214610974578063fe575a871461098a578063ffb54a99146109c357005b8063f2fde38b146108ff578063f34eb0b81461091f578063f5648a4f1461093f57005b8063e6f7ef4d116100c8578063e6f7ef4d14610893578063e99c9d09146108b3578063ee40166e146108d3578063f11a24d3146108e957005b8063dd62ed3e1461080d578063e01af92c14610853578063e1baae1f1461087357005b8063afa4f3b211610152578063bbd6e8911161012f578063bbd6e8911461078f578063c04a5414146107ad578063cb963728146107cd578063d4698016146107ed57005b8063afa4f3b214610744578063b204141114610764578063bb57ad201461077a57005b8063a64e4f8a1461068b578063a8602fea146106ad578063a901dd92146106cd578063a9059cbb146106ed578063a985ceef1461070d578063aa4bde281461072e57005b8063313ce5671161026457806370a082311161020857806388e765ff116101e557806388e765ff146106155780638da5cb5b1461062b57806395d89b41146106495780639e93ad8e1461067557005b806370a08231146105aa578063715018a6146105e057806372ac2486146105f557005b80635c068a8c116102415780635c068a8c1461055357806366d602ae1461056957806367c453491461057f5780636b2fb1241461059457005b8063313ce567146104f75780634626402b146105135780635932ead11461053357005b806318a94cf1116102cb57806323b872dd116102a857806323b872dd1461047757806325519cf21461049757806327a14fc2146104b7578063296f0a0c146104d757005b806318a94cf11461040f5780631d865c3014610425578063220cce971461044557005b806301339c211461031857806306fdde031461032d578063095ea7b31461037c578063105222f9146103ac57806314626dc6146103cc57806318160ddd146103ec57005b3661031657005b005b34801561032457600080fd5b506103166109dd565b34801561033957600080fd5b50604080518082019091526014815273151a1c995948111a5b191bdcc810d85c1a5d185b60621b60208201525b6040516103739190612f4f565b60405180910390f35b34801561038857600080fd5b5061039c610397366004612fc9565b610e38565b6040519015158152602001610373565b3480156103b857600080fd5b506103166103c7366004613024565b610e4f565b3480156103d857600080fd5b506103166103e73660046130fb565b610ec3565b3480156103f857600080fd5b50610401610f2b565b604051908152602001610373565b34801561041b57600080fd5b50610401601b5481565b34801561043157600080fd5b50610316610440366004613114565b610f4c565b34801561045157600080fd5b506002546001600160a01b03165b6040516001600160a01b039091168152602001610373565b34801561048357600080fd5b5061039c610492366004613140565b610fc7565b3480156104a357600080fd5b506103166104b2366004613114565b61102b565b3480156104c357600080fd5b506103166104d23660046130fb565b6110a6565b3480156104e357600080fd5b506103166104f2366004613181565b611141565b34801561050357600080fd5b5060405160128152602001610373565b34801561051f57600080fd5b5060225461045f906001600160a01b031681565b34801561053f57600080fd5b5061031661054e36600461319e565b611231565b34801561055f57600080fd5b5061040160135481565b34801561057557600080fd5b50610401600c5481565b34801561058b57600080fd5b50610316611257565b3480156105a057600080fd5b5061040160195481565b3480156105b657600080fd5b506104016105c5366004613181565b6001600160a01b031660009081526005602052604090205490565b3480156105ec57600080fd5b5061031661127b565b34801561060157600080fd5b50610316610610366004613181565b61128f565b34801561062157600080fd5b50610401600b5481565b34801561063757600080fd5b506000546001600160a01b031661045f565b34801561065557600080fd5b5060408051808201909152600381526233444360e81b6020820152610366565b34801561068157600080fd5b506104016103e881565b34801561069757600080fd5b50600a5461039c90640100000000900460ff1681565b3480156106b957600080fd5b506103166106c8366004613181565b611381565b3480156106d957600080fd5b506103166106e836600461319e565b611470565b3480156106f957600080fd5b5061039c610708366004612fc9565b611498565b34801561071957600080fd5b50600a5461039c906301000000900460ff1681565b34801561073a57600080fd5b50610401600d5481565b34801561075057600080fd5b5061031661075f3660046130fb565b6114a5565b34801561077057600080fd5b5061040160155481565b34801561078657600080fd5b506103166115bc565b34801561079b57600080fd5b506003546001600160a01b031661045f565b3480156107b957600080fd5b5060235461045f906001600160a01b031681565b3480156107d957600080fd5b506103166107e8366004613181565b6116a6565b3480156107f957600080fd5b5060215461045f906001600160a01b031681565b34801561081957600080fd5b506104016108283660046131bb565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561085f57600080fd5b5061031661086e36600461319e565b611889565b34801561087f57600080fd5b5061031661088e366004613024565b6118ad565b34801561089f57600080fd5b506103166108ae3660046130fb565b61191c565b3480156108bf57600080fd5b506103166108ce3660046130fb565b611985565b3480156108df57600080fd5b50610401600e5481565b3480156108f557600080fd5b5061040160115481565b34801561090b57600080fd5b5061031661091a366004613181565b611a20565b34801561092b57600080fd5b5061031661093a3660046130fb565b611a96565b34801561094b57600080fd5b50610316611b31565b34801561096057600080fd5b5061031661096f366004613024565b611b86565b34801561098057600080fd5b5061040160175481565b34801561099657600080fd5b5061039c6109a5366004613181565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109cf57600080fd5b50600a5461039c9060ff1681565b6109e5611bf5565b600a5460ff1615610a3d5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610a8a3082610a776012600a6132ee565b610a8590633b9aca006132fd565b611c4f565b6027546001546040516370a0823160e01b81523060048201526001600160a01b039283169263095ea7b392169083906370a0823190602401602060405180830381865afa158015610adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b03919061331c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b729190613335565b50806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd59190613352565b6027546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4a9190613352565b602480546001600160a01b0319166001600160a01b03928316179055600154602754306000818152600560205260409020549284169363e8e3370093919216906027546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf6919061331c565b600080610d0b6000546001600160a01b031690565b426040518963ffffffff1660e01b8152600401610d2f98979695949392919061336f565b6060604051808303816000875af1158015610d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7291906133b8565b5050600a805462ff0000191662010000178155610d9291506012906132ee565b610d9f906207a1206132fd565b602055600a805460ff1916600190811790915543600e5560248054915460405163095ea7b360e01b81526001600160a01b039182166004820152600019928101929092529091169063095ea7b3906044015b6020604051808303816000875af1158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190613335565b5050565b6000610e45338484611c4f565b5060015b92915050565b610e57611bf5565b60005b8251811015610ebe578160076000858481518110610e7a57610e7a6133e6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610eb6816133fc565b915050610e5a565b505050565b610ecb611bf5565b600a8110610f265760405162461bcd60e51b815260206004820152602260248201527f4d757374206b65657020636f6f6c646f776e20626c6f636b732062656c6f7720604482015261031360f41b6064820152608401610a34565b601055565b6000610f396012600a6132ee565b610f4790633b9aca006132fd565b905090565b610f54611bf5565b60c881610f618486613415565b610f6b9190613415565b1115610fb95760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610a34565b601792909255601955601b55565b6000610fd4848484611d84565b6110218433610a85856040518060600160405280602881526020016134d8602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612472565b5060019392505050565b611033611bf5565b60c8816110408486613415565b61104a9190613415565b11156110985760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203230250000006044820152606401610a34565b601192909255601355601555565b6110ae611bf5565b6110ba6012600a6132ee565b6110c790620f42406132fd565b81101561113c5760405162461bcd60e51b815260206004820152603960248201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e312520746f74616c20737570706c792e000000000000006064820152608401610a34565b600d55565b611149611bf5565b6026546001600160a01b03908116908216036111b35760405162461bcd60e51b815260206004820152602360248201527f6c697175696469747957616c6c657420616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610a34565b602180546001600160a01b039081166000908152600760208181526040808420805460ff19908116909155865486168552600880845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b611239611bf5565b600a805491151563010000000263ff00000019909216919091179055565b61125f611bf5565b306000908152600560205260409020546112788161249e565b50565b611283611bf5565b61128d600061259d565b565b611297611bf5565b6026546001600160a01b03908116908216036113035760405162461bcd60e51b815260206004820152602560248201527f646576656c6f706d656e7457616c6c657420616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a34565b602380546001600160a01b039081166000908152600760208181526040808420805460ff19908116909155865486168552600880845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b611389611bf5565b6026546001600160a01b03908116908216036113f25760405162461bcd60e51b815260206004820152602260248201527f747265617375727957616c6c657420616464726573732063616e6e6f74206265604482015261020360f41b6064820152608401610a34565b602280546001600160a01b039081166000908152600760208181526040808420805460ff19908116909155865486168552600880845282862080548316905587546001600160a01b03191698871698891788559785529282528084208054841660019081179091559554909416835294909452208054909216179055565b611478611bf5565b600a80549115156401000000000264ff0000000019909216919091179055565b6000610e45338484611d84565b6114ad611bf5565b6114b96012600a6132ee565b6114c5906127106132fd565b8110156115325760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a34565b61153e6012600a6132ee565b61154b90624c4b406132fd565b8111156115b75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a34565b602055565b6115c4611bf5565b600360009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561161457600080fd5b505af1158015611628573d6000803e3d6000fd5b50506027546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b919061331c565b9050611278816125ed565b6116ae611bf5565b306001600160a01b038216036117065760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e0000000000006044820152606401610a34565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561174d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611771919061331c565b116117aa5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a34565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611815919061331c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611865573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe9190613335565b611891611bf5565b600a8054911515620100000262ff000019909216919091179055565b6118b5611bf5565b60005b8251811015610ebe5781600960008584815181106118d8576118d86133e6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611914816133fc565b9150506118b8565b611924611bf5565b600a81106119805760405162461bcd60e51b815260206004820152602360248201527f4d757374206b65657020626c61636b6c69737420626c6f636b732062656c6f7760448201526202031360ec1b6064820152608401610a34565b600f55565b61198d611bf5565b6119996012600a6132ee565b6119a690620186a06132fd565b811015611a1b5760405162461bcd60e51b815260206004820152603860248201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060448201527f7468616e20302e30312520746f74616c20737570706c792e00000000000000006064820152608401610a34565b600c55565b611a28611bf5565b6001600160a01b038116611a8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b6112788161259d565b611a9e611bf5565b611aaa6012600a6132ee565b611ab790620186a06132fd565b811015611b2c5760405162461bcd60e51b815260206004820152603760248201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460448201527f68616e20302e30312520746f74616c20737570706c792e0000000000000000006064820152608401610a34565b600b55565b611b39611bf5565b604051600090339047908381818185875af1925050503d8060008114611b7b576040519150601f19603f3d011682016040523d82523d6000602084013e611b80565b606091505b50505050565b611b8e611bf5565b60005b8251811015610ebe578160086000858481518110611bb157611bb16133e6565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611bed816133fc565b915050611b91565b6000546001600160a01b0316331461128d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a34565b6026546001600160a01b0390811690841603611cb95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a34565b6026546001600160a01b0390811690831603611d225760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a34565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6026546001600160a01b0390811690841603611df05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a34565b6026546001600160a01b0390811690831603611e5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a34565b60008111611ebc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a34565b60016000611ed26000546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611f0157506000546001600160a01b03858116911614155b8015611f1b57506026546001600160a01b03858116911614155b8015611f3557506025546001600160a01b03858116911614155b8015611f495750600a54610100900460ff16155b1561233e576001600160a01b03851660009081526009602052604090205460ff16158015611f9057506001600160a01b03841660009081526009602052604090205460ff16155b611f9957600080fd5b600a5460ff1661202e576001600160a01b03851660009081526007602052604090205460ff1680611fe257506001600160a01b03841660009081526007602052604090205460ff165b61202e5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006044820152606401610a34565b600a546301000000900460ff1615612140576001546001600160a01b0385811691161480159061206c57506024546001600160a01b03858116911614155b156121405760105461207e904361342d565b326000908152600460205260409020541080156120be57506010546120a3904361342d565b6001600160a01b038516600090815260046020526040902054105b61211b5760405162461bcd60e51b815260206004820152602860248201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960448201526737103630ba32b91760c11b6064820152608401610a34565b3260009081526004602052604080822043908190556001600160a01b03871683529120555b6024546001600160a01b03868116911614801561216b57506001546001600160a01b03858116911614155b801561219057506001600160a01b03841660009081526008602052604090205460ff16155b1561228057600b548311156121f95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426044820152683abca0b6b7bab73a1760b91b6064820152608401610a34565b600d548361221c866001600160a01b031660009081526005602052604090205490565b6122269190613415565b11156122805760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a34565b6024546001600160a01b0385811691161480156122ab57506001546001600160a01b03868116911614155b80156122d057506001600160a01b03851660009081526008602052604090205460ff16155b1561233e57600c5483111561233a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360448201526932b63620b6b7bab73a1760b11b6064820152608401610a34565b5060015b6001600160a01b03851660009081526007602052604090205460ff168061237d57506001600160a01b03841660009081526007602052604090205460ff165b806123935750600a54640100000000900460ff16155b1561239d57600091505b3060009081526005602052604081205490506000602054821180156123bf5750825b90508080156123d65750600a5462010000900460ff165b80156123ea5750600a54610100900460ff16155b801561240f57506001600160a01b03871660009081526007602052604090205460ff16155b801561243457506001600160a01b03861660009081526007602052604090205460ff16155b1561245c57600a805461ff0019166101001790556124506126d6565b600a805461ff00191690555b6124698787878787612b10565b50505050505050565b600081848411156124965760405162461bcd60e51b8152600401610a349190612f4f565b505050900390565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124d3576124d36133e6565b6001600160a01b039283166020918202929092010152602754825191169082906001908110612504576125046133e6565b6001600160a01b03928316602091820292909201015260015461252a9130911684611c4f565b600154600354604051635c11d79560e01b81526001600160a01b0392831692635c11d7959261256792879260009288929116904290600401613444565b600060405180830381600087803b15801561258157600080fd5b505af1158015612595573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6027546022546001600160a01b039182169163a9059cbb9116612611846002612b70565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561265c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126809190613335565b506027546023546001600160a01b039182169163a9059cbb91166126a5846002612b70565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401610df1565b3060009081526005602052604081205490506000601f54601e54601d546126fd9190613415565b6127079190613415565b9050811580612714575080155b1561271d575050565b60205461272b9060056132fd565b821115612743576020546127409060056132fd565b91505b6000600282601d548561275691906132fd565b61276091906134b5565b61276a91906134b5565b905060006127788483612b83565b6027546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156127c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ea919061331c565b90506127f58261249e565b600360009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b50506027546040516370a0823160e01b8152306004820152600093506128d6925084916001600160a01b0316906370a0823190602401602060405180830381865afa1580156128ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d0919061331c565b90612b83565b905060006128f9866128f3601e5485612b8f90919063ffffffff16565b90612b70565b90506000612916876128f3601f5486612b8f90919063ffffffff16565b9050600081612925848661342d565b61292f919061342d565b6000601d819055601e819055601f559050861580159061294f5750600081115b156129a25761295e8782612b9b565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60275460235460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af11580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b9190613335565b506027546022546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015612a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a95919061331c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b049190613335565b50505050505050505050565b81612b2257612b1d612cb7565b612b30565b612b2d858483612d3f565b92505b612b3b858585612e65565b81612b6957612b69601254601155601454601355601654601555601854601755601a54601955601c54601b55565b5050505050565b6000612b7c82846134b5565b9392505050565b6000612b7c828461342d565b6000612b7c82846132fd565b600154612bb39030906001600160a01b031684611c4f565b60275460015460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af1158015612c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2c9190613335565b5060015460275460215460405162e8e33760e81b81526001600160a01b039384169363e8e3370093612c7493309391831692899289926000928392911690429060040161336f565b6060604051808303816000875af1158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6991906133b8565b601154158015612cc75750601354155b8015612cd35750601554155b8015612cdf5750601754155b8015612ceb5750601954155b8015612cf75750601b54155b15612cfe57565b6011805460125560138054601455601580546016556017805460185560198054601a55601b8054601c55600095869055938590559184905583905582905555565b600080600080600043600f54600e54612d589190613415565b10612d7157506103e7925061014d915081905080612da6565b612d7a86612f0b565b93508515612d965760175492506019549150601b549050612da6565b6011549250601354915060155490505b6000612db86103e86128f38a88612b8f565b905084612dc585836132fd565b612dcf91906134b5565b601d6000828254612de09190613415565b90915550859050612df184836132fd565b612dfb91906134b5565b601e6000828254612e0c9190613415565b90915550859050612e1d83836132fd565b612e2791906134b5565b601f6000828254612e389190613415565b90915550508015612e4e57612e4e893083612e65565b612e58818961342d565b9998505050505050505050565b6001600160a01b038316600090815260056020526040902054612e889082612b83565b6001600160a01b038085166000908152600560205260408082209390935590841681522054612eb79082612f43565b6001600160a01b0380841660008181526005602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d779085815260200190565b60008115612f3057601b54601954601754612f269190613415565b610e499190613415565b601554601354601154612f269190613415565b6000612b7c8284613415565b600060208083528351808285015260005b81811015612f7c57858101830151858201604001528201612f60565b81811115612f8e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461127857600080fd5b8035612fc481612fa4565b919050565b60008060408385031215612fdc57600080fd5b8235612fe781612fa4565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b801515811461127857600080fd5b8035612fc48161300b565b6000806040838503121561303757600080fd5b823567ffffffffffffffff8082111561304f57600080fd5b818501915085601f83011261306357600080fd5b813560208282111561307757613077612ff5565b8160051b604051601f19603f8301168101818110868211171561309c5761309c612ff5565b6040529283528183019350848101820192898411156130ba57600080fd5b948201945b838610156130df576130d086612fb9565b855294820194938201936130bf565b96506130ee9050878201613019565b9450505050509250929050565b60006020828403121561310d57600080fd5b5035919050565b60008060006060848603121561312957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561315557600080fd5b833561316081612fa4565b9250602084013561317081612fa4565b929592945050506040919091013590565b60006020828403121561319357600080fd5b8135612b7c81612fa4565b6000602082840312156131b057600080fd5b8135612b7c8161300b565b600080604083850312156131ce57600080fd5b82356131d981612fa4565b915060208301356131e981612fa4565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561324557816000190482111561322b5761322b6131f4565b8085161561323857918102915b93841c939080029061320f565b509250929050565b60008261325c57506001610e49565b8161326957506000610e49565b816001811461327f5760028114613289576132a5565b6001915050610e49565b60ff84111561329a5761329a6131f4565b50506001821b610e49565b5060208310610133831016604e8410600b84101617156132c8575081810a610e49565b6132d2838361320a565b80600019048211156132e6576132e66131f4565b029392505050565b6000612b7c60ff84168361324d565b6000816000190483118215151615613317576133176131f4565b500290565b60006020828403121561332e57600080fd5b5051919050565b60006020828403121561334757600080fd5b8151612b7c8161300b565b60006020828403121561336457600080fd5b8151612b7c81612fa4565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6000806000606084860312156133cd57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60006001820161340e5761340e6131f4565b5060010190565b60008219821115613428576134286131f4565b500190565b60008282101561343f5761343f6131f4565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134945784516001600160a01b03168352938301939183019160010161346f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000826134d257634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209f316152efb178f0012b488db7ec9aba7509a1e318b6f26947d8a3f2365cb28a64736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d3c0c85faa4f51861f6160edc91b52f81719612600000000000000000000000017d17158383a41bc0a1417a973ecaaf35a622e7f0000000000000000000000006af02506acac1e1f1c34881fee1d28a6e823fc0a

-----Decoded View---------------
Arg [0] : liquidityWalletAddy (address): 0xD3c0c85fAa4F51861f6160eDc91b52f817196126
Arg [1] : treasuryWalletAddy (address): 0x17D17158383a41Bc0a1417A973ECaAF35a622E7F
Arg [2] : developmentWalletAddy (address): 0x6Af02506acac1e1F1C34881fEE1d28a6E823fc0A

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d3c0c85faa4f51861f6160edc91b52f817196126
Arg [1] : 00000000000000000000000017d17158383a41bc0a1417a973ecaaf35a622e7f
Arg [2] : 0000000000000000000000006af02506acac1e1f1c34881fee1d28a6e823fc0a


Deployed Bytecode Sourcemap

28005:21328:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39808:928;;;;;;;;;;;;;:::i;32353:83::-;;;;;;;;;;-1:-1:-1;32423:5:0;;;;;;;;;;;;-1:-1:-1;;;32423:5:0;;;;32353:83;;;;;;;:::i;:::-;;;;;;;;33184:161;;;;;;;;;;-1:-1:-1;33184:161:0;;;;;:::i;:::-;;:::i;:::-;;;1376:14:1;;1369:22;1351:41;;1339:2;1324:18;33184:161:0;1211:187:1;43219:213:0;;;;;;;;;;-1:-1:-1;43219:213:0;;;;;:::i;:::-;;:::i;44914:174::-;;;;;;;;;;-1:-1:-1;44914:174:0;;;;;:::i;:::-;;:::i;32630:95::-;;;;;;;;;;;;;:::i;:::-;;;3318:25:1;;;3306:2;3291:18;32630:95:0;3172:177:1;29868:38:0;;;;;;;;;;;;;;;;44308:409;;;;;;;;;;-1:-1:-1;44308:409:0;;;;;:::i;:::-;;:::i;39454:102::-;;;;;;;;;;-1:-1:-1;39539:8:0;;-1:-1:-1;;;;;39539:8:0;39454:102;;;-1:-1:-1;;;;;3839:32:1;;;3821:51;;3809:2;3794:18;39454:102:0;3675:203:1;33353:313:0;;;;;;;;;;-1:-1:-1;33353:313:0;;;;;:::i;:::-;;:::i;43905:395::-;;;;;;;;;;-1:-1:-1;43905:395:0;;;;;:::i;:::-;;:::i;41190:224::-;;;;;;;;;;-1:-1:-1;41190:224:0;;;;;:::i;:::-;;:::i;41778:469::-;;;;;;;;;;-1:-1:-1;41778:469:0;;;;;:::i;:::-;;:::i;32539:83::-;;;;;;;;;;-1:-1:-1;32539:83:0;;28937:2;4738:36:1;;4726:2;4711:18;32539:83:0;4596:184:1;30204:37:0;;;;;;;;;;-1:-1:-1;30204:37:0;;;;-1:-1:-1;;;;;30204:37:0;;;33674:101;;;;;;;;;;-1:-1:-1;33674:101:0;;;;;:::i;:::-;;:::i;29434:34::-;;;;;;;;;;;;;;;;29055:38;;;;;;;;;;;;;;;;48456:153;;;;;;;;;;;;;:::i;29761:35::-;;;;;;;;;;;;;;;;32733:117;;;;;;;;;;-1:-1:-1;32733:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;32826:16:0;32799:7;32826:16;;;:7;:16;;;;;;;32733:117;2724:103;;;;;;;;;;;;;:::i;42722:489::-;;;;;;;;;;-1:-1:-1;42722:489:0;;;;;:::i;:::-;;:::i;29011:37::-;;;;;;;;;;;;;;;;2076:87;;;;;;;;;;-1:-1:-1;2122:7:0;2149:6;-1:-1:-1;;;;;2149:6:0;2076:87;;32444;;;;;;;;;;-1:-1:-1;32516:7:0;;;;;;;;;;;;-1:-1:-1;;;32516:7:0;;;;32444:87;;29278:42;;;;;;;;;;;;29316:4;29278:42;;28754:30;;;;;;;;;;-1:-1:-1;28754:30:0;;;;;;;;;;;42255:459;;;;;;;;;;-1:-1:-1;42255:459:0;;;;;:::i;:::-;;:::i;33884:93::-;;;;;;;;;;-1:-1:-1;33884:93:0;;;;;:::i;:::-;;:::i;32858:167::-;;;;;;;;;;-1:-1:-1;32858:167:0;;;;;:::i;:::-;;:::i;28712:35::-;;;;;;;;;;-1:-1:-1;28712:35:0;;;;;;;;;;;29100:40;;;;;;;;;;;;;;;;41426:344;;;;;;;;;;-1:-1:-1;41426:344:0;;;;;:::i;:::-;;:::i;29538:37::-;;;;;;;;;;;;;;;;48621:207;;;;;;;;;;;;;:::i;39564:108::-;;;;;;;;;;-1:-1:-1;39654:9:0;;-1:-1:-1;;;;;39654:9:0;39564:108;;30248:40;;;;;;;;;;-1:-1:-1;30248:40:0;;;;-1:-1:-1;;;;;30248:40:0;;;49004:324;;;;;;;;;;-1:-1:-1;49004:324:0;;;;;:::i;:::-;;:::i;30159:38::-;;;;;;;;;;-1:-1:-1;30159:38:0;;;;-1:-1:-1;;;;;30159:38:0;;;33033:143;;;;;;;;;;-1:-1:-1;33033:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;33141:18:0;;;33114:7;33141:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33033:143;33783:93;;;;;;;;;;-1:-1:-1;33783:93:0;;;;;:::i;:::-;;:::i;43690:207::-;;;;;;;;;;-1:-1:-1;43690:207:0;;;;;:::i;:::-;;:::i;44725:181::-;;;;;;;;;;-1:-1:-1;44725:181:0;;;;;:::i;:::-;;:::i;40962:216::-;;;;;;;;;;-1:-1:-1;40962:216:0;;;;;:::i;:::-;;:::i;29147:37::-;;;;;;;;;;;;;;;;29327:35;;;;;;;;;;;;;;;;2982:201;;;;;;;;;;-1:-1:-1;2982:201:0;;;;;:::i;:::-;;:::i;40744:210::-;;;;;;;;;;-1:-1:-1;40744:210:0;;;;;:::i;:::-;;:::i;48836:160::-;;;;;;;;;;;;;:::i;43444:234::-;;;;;;;;;;-1:-1:-1;43444:234:0;;;;;:::i;:::-;;:::i;29651:36::-;;;;;;;;;;;;;;;;39680:116;;;;;;;;;;-1:-1:-1;39680:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;39766:22:0;39742:4;39766:22;;;:14;:22;;;;;;;;;39680:116;28615:23;;;;;;;;;;-1:-1:-1;28615:23:0;;;;;;;;39808:928;1962:13;:11;:13::i;:::-;39865:11:::1;::::0;::::1;;39864:12;39856:48;;;::::0;-1:-1:-1;;;39856:48:0;;5850:2:1;39856:48:0::1;::::0;::::1;5832:21:1::0;5889:2;5869:18;;;5862:30;5928:25;5908:18;;;5901:53;5971:18;;39856:48:0::1;;;;;;;;;40025:16;:34:::0;;-1:-1:-1;;;;;;40025:34:0::1;39971:42;40025:34:::0;;::::1;::::0;;;40070:59:::1;40087:4;39971:42:::0;28990:13:::1;28937:2;28990;:13;:::i;:::-;28983:21;::::0;:3:::1;:21;:::i;:::-;40070:8;:59::i;:::-;40147:4;::::0;;40169:16;40188:37:::1;::::0;-1:-1:-1;;;40188:37:0;;40219:4:::1;40188:37;::::0;::::1;3821:51:1::0;-1:-1:-1;;;;;40147:4:0;;::::1;::::0;40140:20:::1;::::0;40169:16:::1;::::0;40147:4;;40188:22:::1;::::0;3794:18:1;;40188:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40140:86;::::0;-1:-1:-1;;;;;;40140:86:0::1;::::0;;;;;;-1:-1:-1;;;;;8069:32:1;;;40140:86:0::1;::::0;::::1;8051:51:1::0;8118:18;;;8111:34;8024:18;;40140:86:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40272:15;-1:-1:-1::0;;;;;40272:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40325:4;::::0;40254:76:::1;::::0;-1:-1:-1;;;40254:76:0;;40318:4:::1;40254:76;::::0;::::1;8874:34:1::0;-1:-1:-1;;;;;40325:4:0;;::::1;8924:18:1::0;;;8917:43;40254:55:0;::::1;::::0;::::1;::::0;8809:18:1;;40254:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40237:14;:93:::0;;-1:-1:-1;;;;;;40237:93:0::1;-1:-1:-1::0;;;;;40237:93:0;;::::1;;::::0;;-1:-1:-1;40341:16:0;40386:4:::1;::::0;40379::::1;-1:-1:-1::0;32826:16:0;;;:7;:16;;;;;;40341;;::::1;::::0;:29:::1;::::0;40379:4;;40386::::1;::::0;40425::::1;::::0;40418:37:::1;::::0;-1:-1:-1;;;40418:37:0;;40449:4:::1;40418:37;::::0;::::1;3821:51:1::0;-1:-1:-1;;;;;40425:4:0;;::::1;::::0;40418:22:::1;::::0;3794:18:1;;40418:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40457:1;40460::::0;40463:7:::1;2122::::0;2149:6;-1:-1:-1;;;;;2149:6:0;;2076:87;40463:7:::1;40472:15;40341:147;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;40499:11:0::1;:18:::0;;-1:-1:-1;;40499:18:0::1;::::0;::::1;::::0;;40557:13:::1;::::0;-1:-1:-1;28937:2:0::1;::::0;40557:13:::1;:::i;:::-;40550:21;::::0;:3:::1;:21;:::i;:::-;40528:19;:43:::0;40582:11:::1;:18:::0;;-1:-1:-1;;40582:18:0::1;40596:4;40582:18:::0;;::::1;::::0;;;40632:12:::1;40611:18;:33:::0;40662:14:::1;::::0;;40694:16;;40655:73:::1;::::0;-1:-1:-1;;;40655:73:0;;-1:-1:-1;;;;;40694:16:0;;::::1;40655:73;::::0;::::1;8051:51:1::0;-1:-1:-1;;8118:18:1;;;8111:34;;;;40662:14:0;;::::1;::::0;40655:30:::1;::::0;8024:18:1;;40655:73:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39845:891;39808:928::o:0;33184:161::-;33259:4;33276:39;766:10;33299:7;33308:6;33276:8;:39::i;:::-;-1:-1:-1;33333:4:0;33184:161;;;;;:::o;43219:213::-;1962:13;:11;:13::i;:::-;43321:6:::1;43316:109;43337:8;:15;43333:1;:19;43316:109;;;43409:4;43374:19;:32;43394:8;43403:1;43394:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43374:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43374:32:0;:39;;-1:-1:-1;;43374:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43354:3;::::1;::::0;::::1;:::i;:::-;;;;43316:109;;;;43219:213:::0;;:::o;44914:174::-;1962:13;:11;:13::i;:::-;45004:2:::1;44995:6;:11;44987:58;;;::::0;-1:-1:-1;;;44987:58:0;;10521:2:1;44987:58:0::1;::::0;::::1;10503:21:1::0;10560:2;10540:18;;;10533:30;10599:34;10579:18;;;10572:62;-1:-1:-1;;;10650:18:1;;;10643:32;10692:19;;44987:58:0::1;10319:398:1::0;44987:58:0::1;45056:15;:24:::0;44914:174::o;32630:95::-;32683:7;28990:13;28937:2;28990;:13;:::i;:::-;28983:21;;:3;:21;:::i;:::-;32703:14;;32630:95;:::o;44308:409::-;1962:13;:11;:13::i;:::-;44522:3:::1;44497:21:::0;44454:40:::1;44476:18:::0;44454:19;:40:::1;:::i;:::-;:64;;;;:::i;:::-;:71;;44446:114;;;::::0;-1:-1:-1;;;44446:114:0;;11057:2:1;44446:114:0::1;::::0;::::1;11039:21:1::0;11096:2;11076:18;;;11069:30;11135:32;11115:18;;;11108:60;11185:18;;44446:114:0::1;10855:354:1::0;44446:114:0::1;44571:16;:38:::0;;;;44620:15:::1;:36:::0;44667:18:::1;:42:::0;44308:409::o;33353:313::-;33451:4;33468:36;33478:6;33486:9;33497:6;33468:9;:36::i;:::-;33515:121;33524:6;766:10;33546:89;33584:6;33546:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33546:19:0;;;;;;:11;:19;;;;;;;;766:10;33546:33;;;;;;;;;;:37;:89::i;33515:121::-;-1:-1:-1;33654:4:0;33353:313;;;;;:::o;43905:395::-;1962:13;:11;:13::i;:::-;44112:3:::1;44088:20:::0;44047:38:::1;44068:17:::0;44047:18;:38:::1;:::i;:::-;:61;;;;:::i;:::-;:68;;44039:110;;;::::0;-1:-1:-1;;;44039:110:0;;11416:2:1;44039:110:0::1;::::0;::::1;11398:21:1::0;11455:2;11435:18;;;11428:30;11494:31;11474:18;;;11467:59;11543:18;;44039:110:0::1;11214:353:1::0;44039:110:0::1;44160:15;:36:::0;;;;44207:14:::1;:34:::0;44252:17:::1;:40:::0;43905:395::o;41190:224::-;1962:13;:11;:13::i;:::-;41293::::1;28937:2;41293;:13;:::i;:::-;41286:21;::::0;:3:::1;:21;:::i;:::-;41274:8;:33;;41266:103;;;::::0;-1:-1:-1;;;41266:103:0;;11774:2:1;41266:103:0::1;::::0;::::1;11756:21:1::0;11813:2;11793:18;;;11786:30;11852:34;11832:18;;;11825:62;11923:27;11903:18;;;11896:55;11968:19;;41266:103:0::1;11572:421:1::0;41266:103:0::1;41380:15;:26:::0;41190:224::o;41778:469::-;1962:13;:11;:13::i;:::-;41896:4:::1;::::0;-1:-1:-1;;;;;41896:4:0;;::::1;41873:27:::0;;::::1;::::0;41865:75:::1;;;::::0;-1:-1:-1;;;41865:75:0;;12200:2:1;41865:75:0::1;::::0;::::1;12182:21:1::0;12239:2;12219:18;;;12212:30;12278:34;12258:18;;;12251:62;-1:-1:-1;;;12329:18:1;;;12322:33;12372:19;;41865:75:0::1;11998:399:1::0;41865:75:0::1;41971:15;::::0;;-1:-1:-1;;;;;41971:15:0;;::::1;41990:5;41951:36:::0;;;:19:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;41951:44:0;;::::1;::::0;;;42038:15;;;::::1;42006:48:::0;;:31:::1;:48:::0;;;;;;:56;;;::::1;::::0;;42073:46;;-1:-1:-1;;;;;;42073:46:0::1;::::0;;::::1;::::0;;::::1;::::0;;42130:36;;;;;;;;;:43;;;::::1;-1:-1:-1::0;42130:43:0;;::::1;::::0;;;42216:15;;;;::::1;42184:48:::0;;;;;;;:55;;;;::::1;;::::0;;41778:469::o;33674:101::-;1962:13;:11;:13::i;:::-;33744:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33744:23:0;;::::1;::::0;;;::::1;::::0;;33674:101::o;48456:153::-;1962:13;:11;:13::i;:::-;48548:4:::1;48504:23;32826:16:::0;;;:7;:16;;;;;;48565:36:::1;32826:16:::0;48565:19:::1;:36::i;:::-;48493:116;48456:153::o:0;2724:103::-;1962:13;:11;:13::i;:::-;2789:30:::1;2816:1;2789:18;:30::i;:::-;2724:103::o:0;42722:489::-;1962:13;:11;:13::i;:::-;42846:4:::1;::::0;-1:-1:-1;;;;;42846:4:0;;::::1;42821:29:::0;;::::1;::::0;42813:79:::1;;;::::0;-1:-1:-1;;;42813:79:0;;12604:2:1;42813:79:0::1;::::0;::::1;12586:21:1::0;12643:2;12623:18;;;12616:30;12682:34;12662:18;;;12655:62;-1:-1:-1;;;12733:18:1;;;12726:35;12778:19;;42813:79:0::1;12402:401:1::0;42813:79:0::1;42923:17;::::0;;-1:-1:-1;;;;;42923:17:0;;::::1;42944:5;42903:38:::0;;;:19:::1;:38;::::0;;;;;;;:46;;-1:-1:-1;;42903:46:0;;::::1;::::0;;;42992:17;;;::::1;42960:50:::0;;:31:::1;:50:::0;;;;;;:58;;;::::1;::::0;;43029:50;;-1:-1:-1;;;;;;43029:50:0::1;::::0;;::::1;::::0;;::::1;::::0;;43090:38;;;;;;;;;:45;;;::::1;-1:-1:-1::0;43090:45:0;;::::1;::::0;;;43178:17;;;;::::1;43146:50:::0;;;;;;;:57;;;;::::1;;::::0;;42722:489::o;42255:459::-;1962:13;:11;:13::i;:::-;42370:4:::1;::::0;-1:-1:-1;;;;;42370:4:0;;::::1;42348:26:::0;;::::1;::::0;42340:73:::1;;;::::0;-1:-1:-1;;;42340:73:0;;13010:2:1;42340:73:0::1;::::0;::::1;12992:21:1::0;13049:2;13029:18;;;13022:30;13088:34;13068:18;;;13061:62;-1:-1:-1;;;13139:18:1;;;13132:32;13181:19;;42340:73:0::1;12808:398:1::0;42340:73:0::1;42444:14;::::0;;-1:-1:-1;;;;;42444:14:0;;::::1;42462:5;42424:35:::0;;;:19:::1;:35;::::0;;;;;;;:43;;-1:-1:-1;;42424:43:0;;::::1;::::0;;;42510:14;;;::::1;42478:47:::0;;:31:::1;:47:::0;;;;;;:55;;;::::1;::::0;;42544:44;;-1:-1:-1;;;;;;42544:44:0::1;::::0;;::::1;::::0;;::::1;::::0;;42599:35;;;;;;;;;:42;;;::::1;-1:-1:-1::0;42599:42:0;;::::1;::::0;;;42684:14;;;;::::1;42652:47:::0;;;;;;;:54;;;;::::1;;::::0;;42255:459::o;33884:93::-;1962:13;:11;:13::i;:::-;33950:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33950:19:0;;::::1;::::0;;;::::1;::::0;;33884:93::o;32858:167::-;32936:4;32953:42;766:10;32977:9;32988:6;32953:9;:42::i;41426:344::-;1962:13;:11;:13::i;:::-;41536::::1;28937:2;41536;:13;:::i;:::-;41529:21;::::0;:3:::1;:21;:::i;:::-;41515:10;:35;;41507:101;;;::::0;-1:-1:-1;;;41507:101:0;;13413:2:1;41507:101:0::1;::::0;::::1;13395:21:1::0;13452:2;13432:18;;;13425:30;13491:34;13471:18;;;13464:62;-1:-1:-1;;;13542:18:1;;;13535:51;13603:19;;41507:101:0::1;13211:417:1::0;41507:101:0::1;41648:13;28937:2;41648;:13;:::i;:::-;41641:21;::::0;:3:::1;:21;:::i;:::-;41627:10;:35;;41619:100;;;::::0;-1:-1:-1;;;41619:100:0;;13835:2:1;41619:100:0::1;::::0;::::1;13817:21:1::0;13874:2;13854:18;;;13847:30;13913:34;13893:18;;;13886:62;-1:-1:-1;;;13964:18:1;;;13957:50;14024:19;;41619:100:0::1;13633:416:1::0;41619:100:0::1;41730:19;:32:::0;41426:344::o;48621:207::-;1962:13;:11;:13::i;:::-;48677:9:::1;;;;;;;;;-1:-1:-1::0;;;;;48677:9:0::1;-1:-1:-1::0;;;;;48677:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48745:4:0::1;::::0;48738:37:::1;::::0;-1:-1:-1;;;48738:37:0;;48769:4:::1;48738:37;::::0;::::1;3821:51:1::0;48708:27:0::1;::::0;-1:-1:-1;;;;;;48745:4:0;;::::1;::::0;-1:-1:-1;48738:22:0::1;::::0;3794:18:1;;48738:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48708:67;;48786:34;48800:19;48786:13;:34::i;49004:324::-:0;1962:13;:11;:13::i;:::-;49099:4:::1;-1:-1:-1::0;;;;;49084:20:0;::::1;::::0;49076:59:::1;;;::::0;-1:-1:-1;;;49076:59:0;;14256:2:1;49076:59:0::1;::::0;::::1;14238:21:1::0;14295:2;14275:18;;;14268:30;14334:28;14314:18;;;14307:56;14380:18;;49076:59:0::1;14054:350:1::0;49076:59:0::1;49154:36;::::0;-1:-1:-1;;;49154:36:0;;49184:4:::1;49154:36;::::0;::::1;3821:51:1::0;49193:1:0::1;::::0;-1:-1:-1;;;;;49154:21:0;::::1;::::0;::::1;::::0;3794:18:1;;49154:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;49146:62;;;::::0;-1:-1:-1;;;49146:62:0;;14611:2:1;49146:62:0::1;::::0;::::1;14593:21:1::0;14650:1;14630:18;;;14623:29;-1:-1:-1;;;14668:18:1;;;14661:39;14717:18;;49146:62:0::1;14409:332:1::0;49146:62:0::1;49233:36;::::0;-1:-1:-1;;;49233:36:0;;49263:4:::1;49233:36;::::0;::::1;3821:51:1::0;49219:11:0::1;::::0;-1:-1:-1;;;;;49233:21:0;::::1;::::0;::::1;::::0;3794:18:1;;49233:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49280:40;::::0;-1:-1:-1;;;49280:40:0;;49301:10:::1;49280:40;::::0;::::1;8051:51:1::0;8118:18;;;8111:34;;;49219:50:0;;-1:-1:-1;;;;;;49280:20:0;::::1;::::0;::::1;::::0;8024:18:1;;49280:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33783:93::-:0;1962:13;:11;:13::i;:::-;33849:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33849:19:0;;::::1;::::0;;;::::1;::::0;;33783:93::o;43690:207::-;1962:13;:11;:13::i;:::-;43789:6:::1;43784:106;43805:8;:15;43801:1;:19;43784:106;;;43872:6;43842:14;:27;43857:8;43866:1;43857:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43842:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43842:27:0;:36;;-1:-1:-1;;43842:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43822:3;::::1;::::0;::::1;:::i;:::-;;;;43784:106;;44725:181:::0;1962:13;:11;:13::i;:::-;44818:2:::1;44809:6;:11;44801:59;;;::::0;-1:-1:-1;;;44801:59:0;;14948:2:1;44801:59:0::1;::::0;::::1;14930:21:1::0;14987:2;14967:18;;;14960:30;15026:34;15006:18;;;14999:62;-1:-1:-1;;;15077:18:1;;;15070:33;15120:19;;44801:59:0::1;14746:399:1::0;44801:59:0::1;44871:18;:27:::0;44725:181::o;40962:216::-;1962:13;:11;:13::i;:::-;41061::::1;28937:2;41061;:13;:::i;:::-;41054:21;::::0;:3:::1;:21;:::i;:::-;41043:7;:32;;41035:101;;;::::0;-1:-1:-1;;;41035:101:0;;15352:2:1;41035:101:0::1;::::0;::::1;15334:21:1::0;15391:2;15371:18;;;15364:30;15430:34;15410:18;;;15403:62;15501:26;15481:18;;;15474:54;15545:19;;41035:101:0::1;15150:420:1::0;41035:101:0::1;41147:13;:23:::0;40962:216::o;2982:201::-;1962:13;:11;:13::i;:::-;-1:-1:-1;;;;;3071:22:0;::::1;3063:73;;;::::0;-1:-1:-1;;;3063:73:0;;15777:2:1;3063:73:0::1;::::0;::::1;15759:21:1::0;15816:2;15796:18;;;15789:30;15855:34;15835:18;;;15828:62;-1:-1:-1;;;15906:18:1;;;15899:36;15952:19;;3063:73:0::1;15575:402:1::0;3063:73:0::1;3147:28;3166:8;3147:18;:28::i;40744:210::-:0;1962:13;:11;:13::i;:::-;40840::::1;28937:2;40840;:13;:::i;:::-;40833:21;::::0;:3:::1;:21;:::i;:::-;40823:6;:31;;40815:99;;;::::0;-1:-1:-1;;;40815:99:0;;16184:2:1;40815:99:0::1;::::0;::::1;16166:21:1::0;16223:2;16203:18;;;16196:30;16262:34;16242:18;;;16235:62;16333:25;16313:18;;;16306:53;16376:19;;40815:99:0::1;15982:419:1::0;40815:99:0::1;40925:12;:21:::0;40744:210::o;48836:160::-;1962:13;:11;:13::i;:::-;48930:58:::1;::::0;48894:12:::1;::::0;48938:10:::1;::::0;48962:21:::1;::::0;48894:12;48930:58;48894:12;48930:58;48962:21;48938:10;48930:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;48836:160:0:o;43444:234::-;1962:13;:11;:13::i;:::-;43555:6:::1;43550:121;43571:8;:15;43567:1;:19;43550:121;;;43655:4;43608:31;:44;43640:8;43649:1;43640:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43608:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43608:44:0;:51;;-1:-1:-1;;43608:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43588:3;::::1;::::0;::::1;:::i;:::-;;;;43550:121;;2241:132:::0;2122:7;2149:6;-1:-1:-1;;;;;2149:6:0;766:10;2305:23;2297:68;;;;-1:-1:-1;;;2297:68:0;;16818:2:1;2297:68:0;;;16800:21:1;;;16837:18;;;16830:30;16896:34;16876:18;;;16869:62;16948:18;;2297:68:0;16616:356:1;33985:323:0;34087:4;;-1:-1:-1;;;;;34087:4:0;;;34078:13;;;;34070:62;;;;-1:-1:-1;;;34070:62:0;;17179:2:1;34070:62:0;;;17161:21:1;17218:2;17198:18;;;17191:30;17257:34;17237:18;;;17230:62;-1:-1:-1;;;17308:18:1;;;17301:34;17352:19;;34070:62:0;16977:400:1;34070:62:0;34162:4;;-1:-1:-1;;;;;34162:4:0;;;34151:15;;;;34143:62;;;;-1:-1:-1;;;34143:62:0;;17584:2:1;34143:62:0;;;17566:21:1;17623:2;17603:18;;;17596:30;17662:34;17642:18;;;17635:62;-1:-1:-1;;;17713:18:1;;;17706:32;17755:19;;34143:62:0;17382:398:1;34143:62:0;-1:-1:-1;;;;;34216:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34268:32;;3318:25:1;;;34268:32:0;;3291:18:1;34268:32:0;;;;;;;;33985:323;;;:::o;34316:2310::-;34412:4;;-1:-1:-1;;;;;34412:4:0;;;34404:12;;;;34396:62;;;;-1:-1:-1;;;34396:62:0;;17987:2:1;34396:62:0;;;17969:21:1;18026:2;18006:18;;;17999:30;18065:34;18045:18;;;18038:62;-1:-1:-1;;;18116:18:1;;;18109:35;18161:19;;34396:62:0;17785:401:1;34396:62:0;34483:4;;-1:-1:-1;;;;;34483:4:0;;;34477:10;;;;34469:58;;;;-1:-1:-1;;;34469:58:0;;18393:2:1;34469:58:0;;;18375:21:1;18432:2;18412:18;;;18405:30;18471:34;18451:18;;;18444:62;-1:-1:-1;;;18522:18:1;;;18515:33;18565:19;;34469:58:0;18191:399:1;34469:58:0;34555:1;34546:6;:10;34538:64;;;;-1:-1:-1;;;34538:64:0;;18797:2:1;34538:64:0;;;18779:21:1;18836:2;18816:18;;;18809:30;18875:34;18855:18;;;18848:62;-1:-1:-1;;;18926:18:1;;;18919:39;18975:19;;34538:64:0;18595:405:1;34538:64:0;34628:4;34613:12;34689:7;2122;2149:6;-1:-1:-1;;;;;2149:6:0;;2076:87;34689:7;-1:-1:-1;;;;;34681:15:0;:4;-1:-1:-1;;;;;34681:15:0;;;:32;;;;-1:-1:-1;2122:7:0;2149:6;-1:-1:-1;;;;;34700:13:0;;;2149:6;;34700:13;;34681:32;:46;;;;-1:-1:-1;34723:4:0;;-1:-1:-1;;;;;34717:10:0;;;34723:4;;34717:10;;34681:46;:60;;;;-1:-1:-1;34737:4:0;;-1:-1:-1;;;;;34731:10:0;;;34737:4;;34731:10;;34681:60;:73;;;;-1:-1:-1;34746:8:0;;;;;;;34745:9;34681:73;34677:1388;;;-1:-1:-1;;;;;34780:20:0;;;;;;:14;:20;;;;;;;;34779:21;:44;;;;-1:-1:-1;;;;;;34805:18:0;;;;;;:14;:18;;;;;;;;34804:19;34779:44;34771:53;;;;;;34845:11;;;;34841:144;;-1:-1:-1;;;;;34885:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;34914:23:0;;;;;;:19;:23;;;;;;;;34885:52;34877:92;;;;-1:-1:-1;;;34877:92:0;;19207:2:1;34877:92:0;;;19189:21:1;19246:2;19226:18;;;19219:30;19285:29;19265:18;;;19258:57;19332:18;;34877:92:0;19005:351:1;34877:92:0;35005:15;;;;;;;35001:432;;;35059:16;;-1:-1:-1;;;;;35045:31:0;;;35059:16;;35045:31;;;;:64;;-1:-1:-1;35094:14:0;;-1:-1:-1;;;;;35080:29:0;;;35094:14;;35080:29;;35045:64;35041:377;;;35179:15;;35164:30;;:12;:30;:::i;:::-;35151:9;35141:20;;;;:9;:20;;;;;;:53;:103;;;;-1:-1:-1;35229:15:0;;35214:30;;:12;:30;:::i;:::-;-1:-1:-1;;;;;35198:13:0;;;;;;:9;:13;;;;;;:46;35141:103;35133:156;;;;-1:-1:-1;;;35133:156:0;;19693:2:1;35133:156:0;;;19675:21:1;19732:2;19712:18;;;19705:30;19771:34;19751:18;;;19744:62;-1:-1:-1;;;19822:18:1;;;19815:38;19870:19;;35133:156:0;19491:404:1;35133:156:0;35322:9;35312:20;;;;:9;:20;;;;;;35335:12;35312:35;;;;-1:-1:-1;;;;;35370:13:0;;;;;;:28;35041:377;35461:14;;-1:-1:-1;;;;;35453:22:0;;;35461:14;;35453:22;:57;;;;-1:-1:-1;35493:16:0;;-1:-1:-1;;;;;35479:31:0;;;35493:16;;35479:31;;35453:57;:97;;;;-1:-1:-1;;;;;;35515:35:0;;;;;;:31;:35;;;;;;;;35514:36;35453:97;35449:323;;;35589:12;;35579:6;:22;;35571:76;;;;-1:-1:-1;;;35571:76:0;;20102:2:1;35571:76:0;;;20084:21:1;20141:2;20121:18;;;20114:30;20180:34;20160:18;;;20153:62;-1:-1:-1;;;20231:18:1;;;20224:39;20280:19;;35571:76:0;19900:405:1;35571:76:0;35700:15;;35690:6;35674:13;35684:2;-1:-1:-1;;;;;32826:16:0;32799:7;32826:16;;;:7;:16;;;;;;;32733:117;35674:13;:22;;;;:::i;:::-;:41;;35666:90;;;;-1:-1:-1;;;35666:90:0;;20512:2:1;35666:90:0;;;20494:21:1;20551:2;20531:18;;;20524:30;20590:34;20570:18;;;20563:62;-1:-1:-1;;;20641:18:1;;;20634:34;20685:19;;35666:90:0;20310:400:1;35666:90:0;35810:14;;-1:-1:-1;;;;;35804:20:0;;;35810:14;;35804:20;:57;;;;-1:-1:-1;35844:16:0;;-1:-1:-1;;;;;35828:33:0;;;35844:16;;35828:33;;35804:57;:99;;;;-1:-1:-1;;;;;;35866:37:0;;;;;;:31;:37;;;;;;;;35865:38;35804:99;35800:254;;;35942:13;;35932:6;:23;;35924:78;;;;-1:-1:-1;;;35924:78:0;;20917:2:1;35924:78:0;;;20899:21:1;20956:2;20936:18;;;20929:30;20995:34;20975:18;;;20968:62;-1:-1:-1;;;21046:18:1;;;21039:40;21096:19;;35924:78:0;20715:406:1;35924:78:0;-1:-1:-1;36034:4:0;35800:254;-1:-1:-1;;;;;36080:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;36109:23:0;;;;;;:19;:23;;;;;;;;36080:52;:68;;;-1:-1:-1;36137:11:0;;;;;;;36136:12;36080:68;36077:115;;;36175:5;36165:15;;36077:115;36253:4;36204:28;32826:16;;;:7;:16;;;;;;36204:55;;36270:12;36309:19;;36286:20;:42;36285:58;;;;;36333:10;36285:58;36270:73;;36360:7;:22;;;;-1:-1:-1;36371:11:0;;;;;;;36360:22;:35;;;;-1:-1:-1;36387:8:0;;;;;;;36386:9;36360:35;:65;;;;-1:-1:-1;;;;;;36400:25:0;;;;;;:19;:25;;;;;;;;36399:26;36360:65;:93;;;;-1:-1:-1;;;;;;36430:23:0;;;;;;:19;:23;;;;;;;;36429:24;36360:93;36356:197;;;36470:8;:15;;-1:-1:-1;;36470:15:0;;;;;36500:10;:8;:10::i;:::-;36525:8;:16;;-1:-1:-1;;36525:16:0;;;36356:197;36565:53;36580:4;36586:2;36590:6;36598:7;36607:10;36565:14;:53::i;:::-;34385:2241;;;;34316:2310;;;:::o;11452:240::-;11572:7;11633:12;11625:6;;;;11617:29;;;;-1:-1:-1;;;11617:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11668:5:0;;;11452:240::o;38308:466::-;38401:16;;;38415:1;38401:16;;;;;;;;38377:21;;38401:16;;;;;;;;;;-1:-1:-1;38401:16:0;38377:40;;38446:4;38428;38433:1;38428:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38428:23:0;;;:7;;;;;;;;;:23;38472:4;;38462:7;;38472:4;;;38462;;38472;;38462:7;;;;;;:::i;:::-;-1:-1:-1;;;;;38462:14:0;;;:7;;;;;;;;;:14;38519:16;;38487:63;;38504:4;;38519:16;38538:11;38487:8;:63::i;:::-;38561:16;;38715:9;;38561:205;;-1:-1:-1;;;38561:205:0;;-1:-1:-1;;;;;38561:16:0;;;;:70;;:205;;38646:11;;38561:16;;38688:4;;38715:9;;;38740:15;;38561:205;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38366:408;38308:466;:::o;3343:191::-;3417:16;3436:6;;-1:-1:-1;;;;;3453:17:0;;;-1:-1:-1;;;;;;3453:17:0;;;;;;3486:40;;3436:6;;;;;;;3486:40;;3417:16;3486:40;3406:128;3343:191;:::o;39262:184::-;39327:4;;39342:14;;-1:-1:-1;;;;;39327:4:0;;;;39320:21;;39342:14;39358:13;:6;39369:1;39358:10;:13::i;:::-;39320:52;;-1:-1:-1;;;;;;39320:52:0;;;;;;;-1:-1:-1;;;;;8069:32:1;;;39320:52:0;;;8051:51:1;8118:18;;;8111:34;8024:18;;39320:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39390:4:0;;39405:17;;-1:-1:-1;;;;;39390:4:0;;;;39383:21;;39405:17;39424:13;:6;39435:1;39424:10;:13::i;:::-;39383:55;;-1:-1:-1;;;;;;39383:55:0;;;;;;;-1:-1:-1;;;;;8069:32:1;;;39383:55:0;;;8051:51:1;8118:18;;;8111:34;8024:18;;39383:55:0;7877:274:1;36634:1666:0;36717:4;36673:23;32826:16;;;:7;:16;;;;;;36673:50;;36734:25;36805:21;;36784:18;;36762:19;;:40;;;;:::i;:::-;:64;;;;:::i;:::-;36734:92;-1:-1:-1;36850:20:0;;;:46;;-1:-1:-1;36874:22:0;;36850:46;36847:60;;;36899:7;;36634:1666::o;36847:60::-;36940:19;;:23;;36962:1;36940:23;:::i;:::-;36922:15;:41;36919:114;;;36998:19;;:23;;37020:1;36998:23;:::i;:::-;36980:41;;36919:114;37053:23;37139:1;37119:17;37097:19;;37079:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;37053:87;-1:-1:-1;37151:27:0;37181:36;:15;37053:87;37181:19;:36::i;:::-;37274:4;;37267:37;;-1:-1:-1;;;37267:37:0;;37298:4;37267:37;;;3821:51:1;37151:66:0;;-1:-1:-1;37238:26:0;;-1:-1:-1;;;;;37274:4:0;;;;37267:22;;3794:18:1;;37267:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37238:66;;37317:40;37337:19;37317;:40::i;:::-;37368:9;;;;;;;;;-1:-1:-1;;;;;37368:9:0;-1:-1:-1;;;;;37368:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37438:4:0;;37431:37;;-1:-1:-1;;;37431:37:0;;37462:4;37431:37;;;3821:51:1;37409:19:0;;-1:-1:-1;37431:61:0;;-1:-1:-1;37473:18:0;;-1:-1:-1;;;;;37438:4:0;;37431:22;;3794:18:1;;37431:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:61::i;:::-;37409:83;;37503:23;37529:58;37569:17;37529:35;37545:18;;37529:11;:15;;:35;;;;:::i;:::-;:39;;:58::i;:::-;37503:84;;37598:26;37627:61;37670:17;37627:38;37643:21;;37627:11;:15;;:38;;;;:::i;:61::-;37598:90;-1:-1:-1;37699:24:0;37598:90;37726:29;37740:15;37726:11;:29;:::i;:::-;:50;;;;:::i;:::-;37819:1;37797:19;:23;;;37831:18;:22;;;37864:21;:25;37699:77;-1:-1:-1;37913:19:0;;;;;:43;;;37955:1;37936:16;:20;37913:43;37910:215;;;37972:47;37985:15;38002:16;37972:12;:47::i;:::-;38093:19;;38039:74;;;22822:25:1;;;22878:2;22863:18;;22856:34;;;22906:18;;;22899:34;;;;38039:74:0;;;;;;22810:2:1;38039:74:0;;;37910:215;38152:4;;38167:17;;38145:60;;-1:-1:-1;;;38145:60:0;;-1:-1:-1;;;;;38167:17:0;;;38145:60;;;8051:51:1;8118:18;;;8111:34;;;38152:4:0;;;38145:21;;8024:18:1;;38145:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38223:4:0;;38238:14;;38254:37;;-1:-1:-1;;;38254:37:0;;38285:4;38254:37;;;3821:51:1;-1:-1:-1;;;;;38223:4:0;;;;38216:21;;38238:14;;38223:4;;38254:22;;3794:18:1;;38254:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38216:76;;-1:-1:-1;;;;;;38216:76:0;;;;;;;-1:-1:-1;;;;;8069:32:1;;;38216:76:0;;;8051:51:1;8118:18;;;8111:34;8024:18;;38216:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36662:1638;;;;;;;;;36634:1666::o;46233:389::-;46358:7;46354:129;;46382:14;:12;:14::i;:::-;46354:129;;;46438:33;46448:6;46456;46464;46438:9;:33::i;:::-;46429:42;;46354:129;46495:44;46513:6;46521:9;46532:6;46495:17;:44::i;:::-;46564:7;46560:55;;46588:15;45910:24;;45892:15;:42;45962:23;;45945:14;:40;46016:26;;45996:17;:46;46072:25;;46053:16;:44;46126:24;;46108:15;:42;46182:27;;46161:18;:48;45848:369;46588:15;46233:389;;;;;:::o;10310:98::-;10368:7;10395:5;10399:1;10395;:5;:::i;:::-;10388:12;10310:98;-1:-1:-1;;;10310:98:0:o;9554:::-;9612:7;9639:5;9643:1;9639;:5;:::i;9911:98::-;9969:7;9996:5;10000:1;9996;:5;:::i;38782:464::-;38896:16;;38864:63;;38881:4;;-1:-1:-1;;;;;38896:16:0;38915:11;38864:8;:63::i;:::-;38945:4;;;38967:16;38938:59;;-1:-1:-1;;;38938:59:0;;-1:-1:-1;;;;;38967:16:0;;;38938:59;;;8051:51:1;8118:18;;;8111:34;;;38945:4:0;;;38938:20;;8024:18:1;;38938:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39008:16:0;;39080:4;;39182:15;;39008:230;;-1:-1:-1;;;39008:230:0;;-1:-1:-1;;;;;39008:16:0;;;;:29;;:230;;39060:4;;39080;;;;39099:11;;39125:10;;39008:16;;;;39182:15;;;39212;;39008:230;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45096:740::-;45142:15;;:20;:43;;;;-1:-1:-1;45166:14:0;;:19;45142:43;:69;;;;-1:-1:-1;45189:17:0;;:22;45142:69;:94;;;;-1:-1:-1;45215:16:0;;:21;45142:94;:118;;;;-1:-1:-1;45240:15:0;;:20;45142:118;:145;;;;-1:-1:-1;45264:18:0;;:23;45142:145;45139:157;;;45096:740::o;45139:157::-;45343:15;;;45316:24;:42;45395:14;;;45369:23;:40;45449:17;;;45420:26;:46;45505:16;;;45477:25;:44;45559:15;;;45532:24;:42;45615:18;;;45585:27;:48;-1:-1:-1;45654:19:0;;;;45684:18;;;;45713:21;;;;45745:20;;;45776:19;;;45806:22;45096:740::o;46905:1203::-;46986:7;47006:18;47035:14;47060:16;47087:14;47158:12;47136:18;;47115;;:39;;;;:::i;:::-;:55;47112:583;;-1:-1:-1;47199:3:0;;-1:-1:-1;47226:3:0;;-1:-1:-1;47226:3:0;;-1:-1:-1;47226:3:0;47112:583;;;47331:21;47345:6;47331:13;:21::i;:::-;47318:34;;47371:6;47367:317;;;47407:16;;47398:25;;47453:15;;47442:26;;47496:18;;47487:27;;47367:317;;;47564:15;;47555:24;;47609:14;;47598:25;;47651:17;;47642:26;;47367:317;47707:12;47722:39;29316:4;47722:22;:6;47733:10;47722;:22::i;:39::-;47707:54;-1:-1:-1;47811:10:0;47795:13;47802:6;47707:54;47795:13;:::i;:::-;:26;;;;:::i;:::-;47772:19;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;47872:10:0;;-1:-1:-1;47854:15:0;47861:8;47854:4;:15;:::i;:::-;:28;;;;:::i;:::-;47832:18;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;47934:10:0;;-1:-1:-1;47918:13:0;47925:6;47918:4;:13;:::i;:::-;:26;;;;:::i;:::-;47893:21;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;47972:8:0;;47969:86;;47997:46;48015:6;48031:4;48038;47997:17;:46::i;:::-;48086:14;48096:4;48086:14;;:::i;:::-;;46905:1203;-1:-1:-1;;;;;;;;;46905:1203:0:o;46630:267::-;-1:-1:-1;;;;;46746:15:0;;;;;;:7;:15;;;;;;:28;;46766:7;46746:19;:28::i;:::-;-1:-1:-1;;;;;46728:15:0;;;;;;;:7;:15;;;;;;:46;;;;46806:18;;;;;;;:31;;46829:7;46806:22;:31::i;:::-;-1:-1:-1;;;;;46785:18:0;;;;;;;:7;:18;;;;;;;:52;;;;46853:36;;;;;;;;;;46881:7;3318:25:1;;3306:2;3291:18;;3172:177;48116:255:0;48173:7;48197:6;48193:101;;;48264:18;;48246:15;;48227:16;;:34;;;;:::i;:::-;:55;;;;:::i;48193:101::-;48346:17;;48329:14;;48311:15;;:32;;;;:::i;9173:98::-;9231:7;9258:5;9262:1;9258;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:134;820:20;;849:31;820:20;849:31;:::i;:::-;752:134;;;:::o;891:315::-;959:6;967;1020:2;1008:9;999:7;995:23;991:32;988:52;;;1036:1;1033;1026:12;988:52;1075:9;1062:23;1094:31;1119:5;1094:31;:::i;:::-;1144:5;1196:2;1181:18;;;;1168:32;;-1:-1:-1;;;891:315:1:o;1403:127::-;1464:10;1459:3;1455:20;1452:1;1445:31;1495:4;1492:1;1485:15;1519:4;1516:1;1509:15;1535:118;1621:5;1614:13;1607:21;1600:5;1597:32;1587:60;;1643:1;1640;1633:12;1658:128;1723:20;;1752:28;1723:20;1752:28;:::i;1791:1191::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:52;;;1958:1;1955;1948:12;1910:52;1998:9;1985:23;2027:18;2068:2;2060:6;2057:14;2054:34;;;2084:1;2081;2074:12;2054:34;2122:6;2111:9;2107:22;2097:32;;2167:7;2160:4;2156:2;2152:13;2148:27;2138:55;;2189:1;2186;2179:12;2138:55;2225:2;2212:16;2247:4;2270:2;2266;2263:10;2260:36;;;2276:18;;:::i;:::-;2322:2;2319:1;2315:10;2354:2;2348:9;2417:2;2413:7;2408:2;2404;2400:11;2396:25;2388:6;2384:38;2472:6;2460:10;2457:22;2452:2;2440:10;2437:18;2434:46;2431:72;;;2483:18;;:::i;:::-;2519:2;2512:22;2569:18;;;2603:15;;;;-1:-1:-1;2645:11:1;;;2641:20;;;2673:19;;;2670:39;;;2705:1;2702;2695:12;2670:39;2729:11;;;;2749:148;2765:6;2760:3;2757:15;2749:148;;;2831:23;2850:3;2831:23;:::i;:::-;2819:36;;2782:12;;;;2875;;;;2749:148;;;2916:6;-1:-1:-1;2941:35:1;;-1:-1:-1;2957:18:1;;;2941:35;:::i;:::-;2931:45;;;;;;1791:1191;;;;;:::o;2987:180::-;3046:6;3099:2;3087:9;3078:7;3074:23;3070:32;3067:52;;;3115:1;3112;3105:12;3067:52;-1:-1:-1;3138:23:1;;2987:180;-1:-1:-1;2987:180:1:o;3354:316::-;3431:6;3439;3447;3500:2;3488:9;3479:7;3475:23;3471:32;3468:52;;;3516:1;3513;3506:12;3468:52;-1:-1:-1;;3539:23:1;;;3609:2;3594:18;;3581:32;;-1:-1:-1;3660:2:1;3645:18;;;3632:32;;3354:316;-1:-1:-1;3354:316:1:o;3883:456::-;3960:6;3968;3976;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;4084:9;4071:23;4103:31;4128:5;4103:31;:::i;:::-;4153:5;-1:-1:-1;4210:2:1;4195:18;;4182:32;4223:33;4182:32;4223:33;:::i;:::-;3883:456;;4275:7;;-1:-1:-1;;;4329:2:1;4314:18;;;;4301:32;;3883:456::o;4344:247::-;4403:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:52;;;4472:1;4469;4462:12;4424:52;4511:9;4498:23;4530:31;4555:5;4530:31;:::i;5009:241::-;5065:6;5118:2;5106:9;5097:7;5093:23;5089:32;5086:52;;;5134:1;5131;5124:12;5086:52;5173:9;5160:23;5192:28;5214:5;5192:28;:::i;5255:388::-;5323:6;5331;5384:2;5372:9;5363:7;5359:23;5355:32;5352:52;;;5400:1;5397;5390:12;5352:52;5439:9;5426:23;5458:31;5483:5;5458:31;:::i;:::-;5508:5;-1:-1:-1;5565:2:1;5550:18;;5537:32;5578:33;5537:32;5578:33;:::i;:::-;5630:7;5620:17;;;5255:388;;;;;:::o;6000:127::-;6061:10;6056:3;6052:20;6049:1;6042:31;6092:4;6089:1;6082:15;6116:4;6113:1;6106:15;6132:422;6221:1;6264:5;6221:1;6278:270;6299:7;6289:8;6286:21;6278:270;;;6358:4;6354:1;6350:6;6346:17;6340:4;6337:27;6334:53;;;6367:18;;:::i;:::-;6417:7;6407:8;6403:22;6400:55;;;6437:16;;;;6400:55;6516:22;;;;6476:15;;;;6278:270;;;6282:3;6132:422;;;;;:::o;6559:806::-;6608:5;6638:8;6628:80;;-1:-1:-1;6679:1:1;6693:5;;6628:80;6727:4;6717:76;;-1:-1:-1;6764:1:1;6778:5;;6717:76;6809:4;6827:1;6822:59;;;;6895:1;6890:130;;;;6802:218;;6822:59;6852:1;6843:10;;6866:5;;;6890:130;6927:3;6917:8;6914:17;6911:43;;;6934:18;;:::i;:::-;-1:-1:-1;;6990:1:1;6976:16;;7005:5;;6802:218;;7104:2;7094:8;7091:16;7085:3;7079:4;7076:13;7072:36;7066:2;7056:8;7053:16;7048:2;7042:4;7039:12;7035:35;7032:77;7029:159;;;-1:-1:-1;7141:19:1;;;7173:5;;7029:159;7220:34;7245:8;7239:4;7220:34;:::i;:::-;7290:6;7286:1;7282:6;7278:19;7269:7;7266:32;7263:58;;;7301:18;;:::i;:::-;7339:20;;6559:806;-1:-1:-1;;;6559:806:1:o;7370:140::-;7428:5;7457:47;7498:4;7488:8;7484:19;7478:4;7457:47;:::i;7515:168::-;7555:7;7621:1;7617;7613:6;7609:14;7606:1;7603:21;7598:1;7591:9;7584:17;7580:45;7577:71;;;7628:18;;:::i;:::-;-1:-1:-1;7668:9:1;;7515:168::o;7688:184::-;7758:6;7811:2;7799:9;7790:7;7786:23;7782:32;7779:52;;;7827:1;7824;7817:12;7779:52;-1:-1:-1;7850:16:1;;7688:184;-1:-1:-1;7688:184:1:o;8156:245::-;8223:6;8276:2;8264:9;8255:7;8251:23;8247:32;8244:52;;;8292:1;8289;8282:12;8244:52;8324:9;8318:16;8343:28;8365:5;8343:28;:::i;8406:251::-;8476:6;8529:2;8517:9;8508:7;8504:23;8500:32;8497:52;;;8545:1;8542;8535:12;8497:52;8577:9;8571:16;8596:31;8621:5;8596:31;:::i;8971:760::-;-1:-1:-1;;;;;9386:15:1;;;9368:34;;9438:15;;;9433:2;9418:18;;9411:43;9485:2;9470:18;;9463:34;;;;9528:2;9513:18;;9506:34;;;;9571:3;9556:19;;9549:35;;;;9348:3;9600:19;;9593:35;9665:15;;;9659:3;9644:19;;9637:44;9712:3;9697:19;;9690:35;;;;9317:3;9302:19;;8971:760::o;9736:306::-;9824:6;9832;9840;9893:2;9881:9;9872:7;9868:23;9864:32;9861:52;;;9909:1;9906;9899:12;9861:52;9938:9;9932:16;9922:26;;9988:2;9977:9;9973:18;9967:25;9957:35;;10032:2;10021:9;10017:18;10011:25;10001:35;;9736:306;;;;;:::o;10047:127::-;10108:10;10103:3;10099:20;10096:1;10089:31;10139:4;10136:1;10129:15;10163:4;10160:1;10153:15;10179:135;10218:3;10239:17;;;10236:43;;10259:18;;:::i;:::-;-1:-1:-1;10306:1:1;10295:13;;10179:135::o;10722:128::-;10762:3;10793:1;10789:6;10786:1;10783:13;10780:39;;;10799:18;;:::i;:::-;-1:-1:-1;10835:9:1;;10722:128::o;19361:125::-;19401:4;19429:1;19426;19423:8;19420:34;;;19434:18;;:::i;:::-;-1:-1:-1;19471:9:1;;19361:125::o;21126:980::-;21388:4;21436:3;21425:9;21421:19;21467:6;21456:9;21449:25;21493:2;21531:6;21526:2;21515:9;21511:18;21504:34;21574:3;21569:2;21558:9;21554:18;21547:31;21598:6;21633;21627:13;21664:6;21656;21649:22;21702:3;21691:9;21687:19;21680:26;;21741:2;21733:6;21729:15;21715:29;;21762:1;21772:195;21786:6;21783:1;21780:13;21772:195;;;21851:13;;-1:-1:-1;;;;;21847:39:1;21835:52;;21942:15;;;;21907:12;;;;21883:1;21801:9;21772:195;;;-1:-1:-1;;;;;;;22023:32:1;;;;22018:2;22003:18;;21996:60;-1:-1:-1;;;22087:3:1;22072:19;22065:35;21984:3;21126:980;-1:-1:-1;;;21126:980:1:o;22398:217::-;22438:1;22464;22454:132;;22508:10;22503:3;22499:20;22496:1;22489:31;22543:4;22540:1;22533:15;22571:4;22568:1;22561:15;22454:132;-1:-1:-1;22600:9:1;;22398:217::o

Swarm Source

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