ETH Price: $2,503.19 (+1.39%)

Token

Oyabun Legacy (OYA)
 

Overview

Max Total Supply

1,000,000,000 OYA

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1.213199566320345171 OYA

Value
$0.00
0xA71b7c868De1f1898559dAE13ee71beF1eA43962
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OYABUN

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-06
*/

//OYABUN LEGACY - YAKUZA//

//ZERO TAX// 

pragma solidity ^0.6.12;

    // SPDX-License-Identifier: MIT
    
    interface IERC20 {
        /**
         * @dev Returns the amount of tokens in existence.
         */
        function totalSupply() external view returns (uint256);
    
        /**
         * @dev Returns the token decimals.
         */
        function decimals() external view returns (uint8);
    
        /**
         * @dev Returns the token symbol.
         */
        function symbol() external view returns (string memory);
    
        /**
         * @dev Returns the token name.
         */
        function name() external view returns (string memory);
    
        /**
         * @dev Returns the amount of tokens owned by `account`.
         */
        function balanceOf(address account) external view returns (uint256);
    
        /**
         * @dev Moves `amount` tokens from the caller's account to `recipient`.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a {Transfer} event.
         */
        function transfer(address recipient, uint256 amount)
            external
            returns (bool);
    
        /**
         * @dev Returns the remaining number of tokens that `spender` will be
         * allowed to spend on behalf of `owner` through {transferFrom}. This is
         * zero by default.
         *
         * This value changes when {approve} or {transferFrom} are called.
         */
        function allowance(address _owner, address spender)
            external
            view
            returns (uint256);
    
        /**
         * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * IMPORTANT: Beware that changing an allowance with this method brings the risk
         * that someone may use both the old and the new allowance by unfortunate
         * transaction ordering. One possible solution to mitigate this race
         * condition is to first reduce the spender's allowance to 0 and set the
         * desired value afterwards:
         * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
         *
         * Emits an {Approval} event.
         */
        function approve(address spender, uint256 amount) external returns (bool);
    
        /**
         * @dev Moves `amount` tokens from `sender` to `recipient` using the
         * allowance mechanism. `amount` is then deducted from the caller's
         * allowance.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a {Transfer} event.
         */
        function transferFrom(
            address sender,
            address recipient,
            uint256 amount
        ) external returns (bool);
    
        /**
         * @dev Emitted when `value` tokens are moved from one account (`from`) to
         * another (`to`).
         *
         * Note that `value` may be zero.
         */
        event Transfer(address indexed from, address indexed to, uint256 value);
    
        /**
         * @dev Emitted when the allowance of a `spender` for an `owner` is set by
         * a call to {approve}. `value` is the new allowance.
         */
        event Approval(
            address indexed owner,
            address indexed spender,
            uint256 value
        );
    }
    
    /*
     * @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 GSN 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.
     */
    contract Context {
        // Empty internal constructor, to prevent people from mistakenly deploying
        // an instance of this contract, which should be used via inheritance.
        constructor() internal {}
    
        function _msgSender() internal view returns (address payable) {
            return msg.sender;
        }
    
        function _msgData() internal view returns (bytes memory) {
            this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
            return msg.data;
        }
    }
    
    /**
     * @dev Wrappers over Solidity's arithmetic operations with added overflow
     * checks.
     *
     * Arithmetic operations in Solidity wrap on overflow. This can easily result
     * in bugs, because programmers usually assume that an overflow raises an
     * error, which is the standard behavior in high level programming languages.
     * `SafeMath` restores this intuition by reverting the transaction when an
     * operation overflows.
     *
     * Using this library instead of the unchecked operations eliminates an entire
     * class of bugs, so it's recommended to use it always.
     */
    library SafeMath {
        /**
         * @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) {
            uint256 c = a + b;
            require(c >= a, "SafeMath: addition overflow");
    
            return c;
        }
    
        /**
         * @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 sub(a, b, "SafeMath: subtraction overflow");
        }
    
        /**
         * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
         * overflow (when the result is negative).
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         * - Subtraction cannot overflow.
         */
        function sub(
            uint256 a,
            uint256 b,
            string memory errorMessage
        ) internal pure returns (uint256) {
            require(b <= a, errorMessage);
            uint256 c = a - b;
    
            return c;
        }
    
        /**
         * @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) {
            // 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 0;
            }
    
            uint256 c = a * b;
            require(c / a == b, "SafeMath: multiplication overflow");
    
            return c;
        }
    
        /**
         * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
            return div(a, b, "SafeMath: division by zero");
        }
    
        /**
         * @dev Returns the integer division of two unsigned integers. Reverts 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) {
            // Solidity only automatically asserts when dividing by 0
            require(b > 0, errorMessage);
            uint256 c = a / b;
            // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    
            return c;
        }
    
        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
        }
    
        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts with custom message 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,
            string memory errorMessage
        ) internal pure returns (uint256) {
            require(b != 0, errorMessage);
            return a % b;
        }
    }
    
    /**
     * @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.
     */
    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() internal {
            address msgSender = _msgSender();
            _owner = msgSender;
            emit OwnershipTransferred(address(0), msgSender);
        }
    
        /**
         * @dev Returns the address of the current owner.
         */
        function owner() public view returns (address) {
            return _owner;
        }
    
        /**
         * @dev Throws if called by any account other than the owner.
         */
        modifier onlyOwner() {
            require(_owner == _msgSender(), "Ownable: caller is not the owner");
            _;
        }
    
        /**
         * @dev Leaves the contract without owner. It will not be possible to call
         * `onlyOwner` functions anymore. Can only be called by the current owner.
         *
         * NOTE: Renouncing ownership will leave the contract without an owner,
         * thereby removing any functionality that is only available to the owner.
         */
        function renounceOwnership() public onlyOwner {
            emit OwnershipTransferred(_owner, address(0));
            _owner = 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 onlyOwner {
            _transferOwnership(newOwner);
        }
    
        /**
         * @dev Transfers ownership of the contract to a new account (`newOwner`).
         */
        function _transferOwnership(address newOwner) internal {
            require(
                newOwner != address(0),
                "Ownable: new owner is the zero address"
            );
            emit OwnershipTransferred(_owner, newOwner);
            _owner = newOwner;
        }
    }
    
    pragma solidity >=0.6.2;
    
    interface IUniswapRouter01 {
        function factory() external pure returns (address);
    
        function WETH() external pure returns (address);
    
        function addLiquidity(
            address tokenA,
            address tokenB,
            uint256 amountADesired,
            uint256 amountBDesired,
            uint256 amountAMin,
            uint256 amountBMin,
            address to,
            uint256 deadline
        )
            external
            returns (
                uint256 amountA,
                uint256 amountB,
                uint256 liquidity
            );
    
        function addLiquidityETH(
            address token,
            uint256 amountTokenDesired,
            uint256 amountTokenMin,
            uint256 amountETHMin,
            address to,
            uint256 deadline
        )
            external
            payable
            returns (
                uint256 amountToken,
                uint256 amountETH,
                uint256 liquidity
            );
    
        function removeLiquidity(
            address tokenA,
            address tokenB,
            uint256 liquidity,
            uint256 amountAMin,
            uint256 amountBMin,
            address to,
            uint256 deadline
        ) external returns (uint256 amountA, uint256 amountB);
    
        function removeLiquidityETH(
            address token,
            uint256 liquidity,
            uint256 amountTokenMin,
            uint256 amountETHMin,
            address to,
            uint256 deadline
        ) external returns (uint256 amountToken, uint256 amountETH);
    
        function removeLiquidityWithPermit(
            address tokenA,
            address tokenB,
            uint256 liquidity,
            uint256 amountAMin,
            uint256 amountBMin,
            address to,
            uint256 deadline,
            bool approveMax,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external returns (uint256 amountA, uint256 amountB);
    
        function removeLiquidityETHWithPermit(
            address token,
            uint256 liquidity,
            uint256 amountTokenMin,
            uint256 amountETHMin,
            address to,
            uint256 deadline,
            bool approveMax,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external returns (uint256 amountToken, uint256 amountETH);
    
        function swapExactTokensForTokens(
            uint256 amountIn,
            uint256 amountOutMin,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external returns (uint256[] memory amounts);
    
        function swapTokensForExactTokens(
            uint256 amountOut,
            uint256 amountInMax,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external returns (uint256[] memory amounts);
    
        function swapExactETHForTokens(
            uint256 amountOutMin,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external payable returns (uint256[] memory amounts);
    
        function swapTokensForExactETH(
            uint256 amountOut,
            uint256 amountInMax,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external returns (uint256[] memory amounts);
    
        function swapExactTokensForETH(
            uint256 amountIn,
            uint256 amountOutMin,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external returns (uint256[] memory amounts);
    
        function swapETHForExactTokens(
            uint256 amountOut,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external payable returns (uint256[] memory amounts);
    
        function quote(
            uint256 amountA,
            uint256 reserveA,
            uint256 reserveB
        ) external pure returns (uint256 amountB);
    
        function getAmountOut(
            uint256 amountIn,
            uint256 reserveIn,
            uint256 reserveOut
        ) external pure returns (uint256 amountOut);
    
        function getAmountIn(
            uint256 amountOut,
            uint256 reserveIn,
            uint256 reserveOut
        ) external pure returns (uint256 amountIn);
    
        function getAmountsOut(uint256 amountIn, address[] calldata path)
            external
            view
            returns (uint256[] memory amounts);
    
        function getAmountsIn(uint256 amountOut, address[] calldata path)
            external
            view
            returns (uint256[] memory amounts);
    }
    
    // File: contracts\interfaces\IUniswapRouter02.sol
    
    pragma solidity >=0.6.2;
    
    interface IUniswapRouter02 is IUniswapRouter01 {
        function removeLiquidityETHSupportingFeeOnTransferTokens(
            address token,
            uint256 liquidity,
            uint256 amountTokenMin,
            uint256 amountETHMin,
            address to,
            uint256 deadline
        ) external returns (uint256 amountETH);
    
        function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
            address token,
            uint256 liquidity,
            uint256 amountTokenMin,
            uint256 amountETHMin,
            address to,
            uint256 deadline,
            bool approveMax,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external returns (uint256 amountETH);
    
        function swapExactTokensForTokensSupportingFeeOnTransferTokens(
            uint256 amountIn,
            uint256 amountOutMin,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external;
    
        function swapExactETHForTokensSupportingFeeOnTransferTokens(
            uint256 amountOutMin,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external payable;
    
        function swapExactTokensForETHSupportingFeeOnTransferTokens(
            uint256 amountIn,
            uint256 amountOutMin,
            address[] calldata path,
            address to,
            uint256 deadline
        ) external;
    }
    
    pragma solidity >=0.5.0;
    
    interface IUniswapFactory {
        event PairCreated(
            address indexed token0,
            address indexed token1,
            address pair,
            uint256
        );
    
        function feeTo() external view returns (address);
    
        function feeToSetter() external view returns (address);
    
        function getPair(address tokenA, address tokenB)
            external
            view
            returns (address pair);
    
        function allPairs(uint256) external view returns (address pair);
    
        function allPairsLength() external view returns (uint256);
    
        function createPair(address tokenA, address tokenB)
            external
            returns (address pair);
    
        function setFeeTo(address) external;
    
        function setFeeToSetter(address) external;
    
        function INIT_CODE_PAIR_HASH() external view returns (bytes32);
    }
    
    pragma solidity >=0.5.0;
    
    interface IUniswapPair {
        event Approval(
            address indexed owner,
            address indexed spender,
            uint256 value
        );
        event Transfer(address indexed from, address indexed to, uint256 value);
    
        function name() external pure returns (string memory);
    
        function symbol() external pure returns (string memory);
    
        function decimals() external pure returns (uint8);
    
        function totalSupply() external view returns (uint256);
    
        function balanceOf(address owner) external view returns (uint256);
    
        function allowance(address owner, address spender)
            external
            view
            returns (uint256);
    
        function approve(address spender, uint256 value) external returns (bool);
    
        function transfer(address to, uint256 value) external returns (bool);
    
        function transferFrom(
            address from,
            address to,
            uint256 value
        ) external returns (bool);
    
        function DOMAIN_SEPARATOR() external view returns (bytes32);
    
        function PERMIT_TYPEHASH() external pure returns (bytes32);
    
        function nonces(address owner) external view returns (uint256);
    
        function permit(
            address owner,
            address spender,
            uint256 value,
            uint256 deadline,
            uint8 v,
            bytes32 r,
            bytes32 s
        ) external;
    
        event Burn(
            address indexed sender,
            uint256 amount0,
            uint256 amount1,
            address indexed to
        );
        event Swap(
            address indexed sender,
            uint256 amount0In,
            uint256 amount1In,
            uint256 amount0Out,
            uint256 amount1Out,
            address indexed to
        );
        event Sync(uint112 reserve0, uint112 reserve1);
    
        function MINIMUM_LIQUIDITY() external pure returns (uint256);
    
        function factory() external view returns (address);
    
        function token0() external view returns (address);
    
        function token1() external view returns (address);
    
        function getReserves()
            external
            view
            returns (
                uint112 reserve0,
                uint112 reserve1,
                uint32 blockTimestampLast
            );
    
        function price0CumulativeLast() external view returns (uint256);
    
        function price1CumulativeLast() external view returns (uint256);
    
        function kLast() external view returns (uint256);
    
        function swap(
            uint256 amount0Out,
            uint256 amount1Out,
            address to,
            bytes calldata data
        ) external;
    
        function skim(address to) external;
    
        function sync() external;
    
        function initialize(address, address) external;
    }
    
    contract OYABUN is Context, IERC20, Ownable {
        using SafeMath for uint256;
    
        mapping(address => uint256) private _rOwned;
        mapping(address => uint256) private _tOwned;
        mapping(address => mapping(address => uint256)) private _allowances;
    
        mapping(address => bool) private _isExcludedFromFee;
        mapping(address => bool) private _isExcludedFromLimitHolder;
        
        mapping(address => bool) private blackList;

        address[] private _excluded;
    
        uint256 private constant MAX = ~uint256(0);
        bool inSwapAndLiquify;
        uint256 private constant _tTotal = 10 * 10**8 * 10**18; 
        uint256 private _rTotal = (MAX - (MAX % _tTotal));
        uint256 private _tFeeTotal;
        uint256 public _taxFee = 0;
        uint256 public _marketFee = 0;
        uint256 public _liquidityFee = 0;
        uint256 public _previousTaxFee = _taxFee;
        uint256 public _previousMarketFee = _marketFee;
        uint256 public _previousLiquidityFee = _liquidityFee;
        uint256 public _maxTxAmount = 70 * 10**6 * 10**18; // 
        uint256 public _numTokensSellToAddToLiquidity = 50 * 10**6 * 10**18;
        uint256 public _maxWalletToken = 100 * 10**6 * 10**18; //
    
        IUniswapRouter02 public immutable pcsV2Router;
        address public immutable pcsV2Pair;
    
        string private _name = "Oyabun Legacy";
        string private _symbol = "OYA";
        uint8 private _decimals = 18;
        
        uint256 public totalUnlockedToken;
        uint256 public totalTransferredUnlockedToken;
        
        address public marketingWallet = 0x9D3F1cD810b2eF4d96bE07e53eD9e2CB9036C69f;
        address public devWallet = 0x9D3F1cD810b2eF4d96bE07e53eD9e2CB9036C69f;
        address public teamWallet = 0x9D3F1cD810b2eF4d96bE07e53eD9e2CB9036C69f;
        // address public ceoWallet = 0x9CfdbB2657413eAa36b9e1a1C7249b8F9473d67c;

        event SwapAndLiquify(
            uint256 tokensSwapped,
            uint256 ethReceived,
            uint256 tokensIntoLiqudity,
            uint256 contractTokenBalance
        );
    
        constructor() public {
            _rOwned[_msgSender()] = _rTotal;
    
            _isExcludedFromFee[owner()] = true;
            _isExcludedFromFee[address(this)] = true;
            _isExcludedFromFee[marketingWallet] = true;
            _isExcludedFromFee[teamWallet] = true;
            _isExcludedFromFee[devWallet] = true;
    
            _isExcludedFromLimitHolder[owner()] = true;
            _isExcludedFromLimitHolder[address(this)] = true;
            _isExcludedFromLimitHolder[marketingWallet] = true;
            _isExcludedFromLimitHolder[teamWallet] = true;
            _isExcludedFromLimitHolder[devWallet] = true;
            
            IUniswapRouter02 _UniswapswapV2Router =
                IUniswapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            // Create a uniswap pair for this new token
            pcsV2Pair = IUniswapFactory(_UniswapswapV2Router.factory()).createPair(
                address(this),
                _UniswapswapV2Router.WETH()
            );
            pcsV2Router = _UniswapswapV2Router;
    
           emit Transfer(address(0), _msgSender(), _tTotal);
            
        }

    //    modifier onlyCeo() {
    //         require(ceoWallet == _msgSender(), "Ownable: caller is not the CEO");
    //         _;
    //     }
    
        modifier lockTheSwap {
            inSwapAndLiquify = true;
            _;
            inSwapAndLiquify = false;
        }
        
        function name() public view override returns (string memory) {
            return _name;
        }
    
        function symbol() public view override returns (string memory) {
            return _symbol;
        }
    
        function decimals() public view override returns (uint8) {
            return _decimals;
        }
    
        function totalSupply() public view override returns (uint256) {
            return _tTotal;
        }
    
        function balanceOf(address account) public view override returns (uint256) {
            return tokenFromReflection(_rOwned[account]);
        }
    
        function transfer(address recipient, uint256 amount)
            public
            override
            returns (bool)
        {
            _transfer(_msgSender(), recipient, amount);
            return true;
        }
    
        function allowance(address owner, address spender)
            public
            view
            override
            returns (uint256)
        {
            return _allowances[owner][spender];
        }
    
        function approve(address spender, uint256 amount)
            public
            override
            returns (bool)
        {
            _approve(_msgSender(), spender, amount);
            return true;
        }
    
        function transferFrom(
            address sender,
            address recipient,
            uint256 amount
        ) public override returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(
                sender,
                _msgSender(),
                _allowances[sender][_msgSender()].sub(
                    amount,
                    "ERC20: transfer amount exceeds allowance"
                )
            );
            return true;
        }
    
        function increaseAllowance(address spender, uint256 addedValue)
            public
            virtual
            returns (bool)
        {
            _approve(
                _msgSender(),
                spender,
                _allowances[_msgSender()][spender].add(addedValue)
            );
            return true;
        }
    
        function decreaseAllowance(address spender, uint256 subtractedValue)
            public
            virtual
            returns (bool)
        {
            _approve(
                _msgSender(),
                spender,
                _allowances[_msgSender()][spender].sub(
                    subtractedValue,
                    "ERC20: decreased allowance below zero"
                )
            );
            return true;
        }
    
        function totalFees() public view returns (uint256) {
            return _tFeeTotal;
        }
    
        function reflect(uint256 tAmount) public {
            address sender = _msgSender();
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rTotal = _rTotal.sub(rAmount);
            _tFeeTotal = _tFeeTotal.add(tAmount);
        }
    
        function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
            public
            view
            returns (uint256)
        {
            require(tAmount <= _tTotal, "Amount must be less than supply");
            if (!deductTransferFee) {
                (uint256 rAmount, , , , , ) = _getValues(tAmount);
                return rAmount;
            } else {
                (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
                return rTransferAmount;
            }
        }
    
        function tokenFromReflection(uint256 rAmount)
            public
            view
            returns (uint256)
        {
            require(
                rAmount <= _rTotal,
                "Amount must be less than total reflections"
            );
            uint256 currentRate = _getRate();
            return rAmount.div(currentRate);
        }
    
        function _approve(
            address owner,
            address spender,
            uint256 amount
        ) private {
            require(owner != address(0), "ERC20: approve from the zero address");
            require(spender != address(0), "ERC20: approve to the zero address");
    
            _allowances[owner][spender] = amount;
            emit Approval(owner, spender, amount);
        }
    
        function openTrading(bool _isOpenTrading) external {
            inSwapAndLiquify = _isOpenTrading;
        }

        function addBlackList (address[] memory blackAddresses) external onlyOwner {
            for (uint256 i = 0; i < blackAddresses.length; i++) {
                blackList[blackAddresses[i]] = true;
            }
        }

        function _transfer(
            address sender,
            address recipient,
            uint256 amount
        ) private {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");
            require(amount > 0, "Transfer amount must be greater than zero");
            require (!blackList[sender], "Sender address is in black list");
            require (!blackList[recipient], "Recipient address is in black list");

            if (
                sender != owner() &&
                recipient != owner() &&
                recipient != address(1) &&
                recipient != pcsV2Pair &&
                !_isExcludedFromLimitHolder[recipient] && 
                !_isExcludedFromLimitHolder[sender]

            ) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
                uint256 contractBalanceRecepient = balanceOf(recipient);
                require(
                    contractBalanceRecepient + amount <= _maxWalletToken,
                    "Exceeds maximum wallet token amount (100,000,000)"
                );
            }
    
            // is the token balance of this contract address over the min number of
            // tokens that we need to initiate a swap + liquidity lock?
            // also, don't get caught in a circular liquidity event.
            // also, don't swap & liquify if sender is uniswap pair.
            uint256 contractTokenBalance = balanceOf(address(this));
    
            if (contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount;
            }
    
            bool overMinTokenBalance =
                contractTokenBalance >= _numTokensSellToAddToLiquidity;
            if (overMinTokenBalance && !inSwapAndLiquify && sender != pcsV2Pair) {
                contractTokenBalance = _numTokensSellToAddToLiquidity;
                swapAndLiquify(contractTokenBalance);
            }
    
            bool takeFee = true;
    
            //if any account belongs to _isExcludedFromFee account then remove the fee
            if (
                _isExcludedFromFee[sender] ||
                _isExcludedFromFee[recipient] ||
                sender == pcsV2Pair
            ) {
                takeFee = false;
            }
            _transferStandard(sender, recipient, amount);
        }
    
        function _transferStandard(
            address sender,
            address recipient,
            uint256 tAmount
        ) private {
            (
                uint256 rAmount,
                uint256 rTransferAmount,
                uint256 rFee,
                uint256 tTransferAmount,
                uint256 tFee,
                uint256 tLiquidity
            ) = _getValues(tAmount);
            uint256 mFee = rAmount.div(10**2).mul(_marketFee);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[marketingWallet] = _rOwned[marketingWallet].add(mFee);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeLiquidity(tLiquidity);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    
        function _reflectFee(uint256 rFee, uint256 tFee) private {
            _rTotal = _rTotal.sub(rFee);
            _tFeeTotal = _tFeeTotal.add(tFee);
        }
    
        function _getValues(uint256 tAmount)
            private
            view
            returns (
                uint256,
                uint256,
                uint256,
                uint256,
                uint256,
                uint256
            )
        {
            (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) =
                _getTValues(tAmount);
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
                _getRValues(tAmount, tFee, tLiquidity, _getRate());
            return (
                rAmount,
                rTransferAmount,
                rFee,
                tTransferAmount,
                tFee,
                tLiquidity
            );
        }
    
    
        function _getTValues(uint256 tAmount)
            private
            view
            returns (
                uint256,
                uint256,
                uint256
            )
        {
            uint256 tFee = tAmount.div(10**2).mul(_taxFee);
            uint256 tLiquidity =
                tAmount.div(10**2).mul(_liquidityFee);
            uint256 mFee = tAmount.div(10**2).mul(_marketFee);
            uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(mFee);
            return (tTransferAmount, tFee, tLiquidity);
        }
    
        function _getRValues(
            uint256 tAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 currentRate
        )
            private
            pure
            returns (
                uint256,
                uint256,
                uint256
            )
        {
            uint256 rAmount = tAmount.mul(currentRate);
            uint256 rFee = tFee.mul(currentRate);
            uint256 rLiquidity = tLiquidity.mul(currentRate);
            uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
            return (rAmount, rTransferAmount, rFee);
        }
    
        function _getRate() private view returns (uint256) {
            (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
            return rSupply.div(tSupply);
        }
    
        function _getCurrentSupply() private view returns (uint256, uint256) {
            uint256 rSupply = _rTotal;
            uint256 tSupply = _tTotal;
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (
                    _rOwned[_excluded[i]] > rSupply ||
                    _tOwned[_excluded[i]] > tSupply
                ) return (_rTotal, _tTotal);
                rSupply = rSupply.sub(_rOwned[_excluded[i]]);
                tSupply = tSupply.sub(_tOwned[_excluded[i]]);
            }
            if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
            return (rSupply, tSupply);
        }
    
        function _takeLiquidity(uint256 tLiquidity) private {
            uint256 currentRate = _getRate();
            uint256 rLiquidity = tLiquidity.mul(currentRate);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        }
    
        function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
            // split the contract balance into halves
            uint256 half = contractTokenBalance.div(2);
            uint256 otherHalf = contractTokenBalance.sub(half);
    
            // capture the contract's current ETH balance.
            // this is so that we can capture exactly the amount of ETH that the
            // swap creates, and not make the liquidity event include any ETH that
            // has been manually sent to the contract
            uint256 initialBalance = address(this).balance;
    
            // swap tokens for ETH
            swapTokensForETH(half);
    
            // how much ETH did we just swap into?
            uint256 newBalance = address(this).balance.sub(initialBalance);
    
            // add liquidity to uniswap
            addLiquidity(otherHalf, newBalance);
    
            emit SwapAndLiquify(half, newBalance, otherHalf, contractTokenBalance);
        }
    
        function swapTokensForETH(uint256 tokenAmount) private {
            // generate the uniswap pair path of token -> weth
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = pcsV2Router.WETH();
    
            _approve(address(this), address(pcsV2Router), tokenAmount);
    
            // make the swap
            pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of ETH
                path,
                address(this),
                block.timestamp
            );
        }
    
        function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
            // approve token transfer to cover all possible scenarios
            _approve(address(this), address(pcsV2Router), tokenAmount);
    
            // add the liquidity
            pcsV2Router.addLiquidityETH{value: ethAmount}(
                address(this),
                tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                owner(),
                block.timestamp
            );
        }
        
    }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blackAddresses","type":"address[]"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOpenTrading","type":"bool"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Router","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTransferredUnlockedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnlockedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]

60c06040526b033b2e3c9fd0803ce8000000600019816200001c57fe5b06600019036009556000600b556000600c556000600d55600b54600e55600c54600f55600d546010556a39e7139a8c08fa060000006011556a295be96e640669720000006012556a52b7d2dcc80cd2e40000006013556040518060400160405280600d81526020017f4f796162756e204c65676163790000000000000000000000000000000000000081525060149080519060200190620000bf92919062000aa0565b506040518060400160405280600381526020017f4f59410000000000000000000000000000000000000000000000000000000000815250601590805190602001906200010d92919062000aa0565b506012601660006101000a81548160ff021916908360ff160217905550739d3f1cd810b2ef4d96be07e53ed9e2cb9036c69f601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739d3f1cd810b2ef4d96be07e53ed9e2cb9036c69f601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739d3f1cd810b2ef4d96be07e53ed9e2cb9036c69f601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200023657600080fd5b5060006200024962000a6f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620002fe62000a6f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600460006200035262000a7760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200057f62000a7760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620007f657600080fd5b505afa1580156200080b573d6000803e3d6000fd5b505050506040513d60208110156200082257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200089657600080fd5b505afa158015620008ab573d6000803e3d6000fd5b505050506040513d6020811015620008c257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200093d57600080fd5b505af115801562000952573d6000803e3d6000fd5b505050506040513d60208110156200096957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620009f762000a6f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b033b2e3c9fd0803ce80000006040518082815260200191505060405180910390a35062000b46565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ae357805160ff191683800117855562000b14565b8280016001018555821562000b14579182015b8281111562000b1357825182559160200191906001019062000af6565b5b50905062000b23919062000b27565b5090565b5b8082111562000b4257600081600090555060010162000b28565b5090565b60805160601c60a05160601c6133d162000b9860003980610fe75280611d905280611fa052806120b2525080610da85280612d4b5280612e375280612e5e5280612f695280612f9052506133d16000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80636bc87c3a116101255780638ea5220f116100ad578063a9059cbb1161007c578063a9059cbb146108e8578063b3f22ce31461094c578063d338faf31461096a578063dd62ed3e14610a22578063f2fde38b14610a9a5761021c565b80638ea5220f146107af578063909ef733146107e357806395d89b4114610801578063a457c2d7146108845761021c565b806375f0a874116100f457806375f0a874146106ed57806378109e54146107215780637d1db4a51461073f57806384d6ff2f1461075d5780638da5cb5b1461077b5761021c565b80636bc87c3a1461064f57806370a082311461066d578063715018a6146106c557806374c7b41c146106cf5761021c565b80632d838119116101a857806344aa2fc61161017757806344aa2fc61461055d5780634549b0391461057b57806352143290146105c957806359927044146105fd57806363aef729146106315761021c565b80632d83811914610478578063313ce567146104ba57806339509351146104db5780633b124fe71461053f5761021c565b806318160ddd116101ef57806318160ddd1461035457806323b872dd146103725780632701a4f2146103f65780632a9b8072146104145780632d6abf87146104445761021c565b8063053ab1821461022157806306fdde031461024f578063095ea7b3146102d257806313114a9d14610336575b600080fd5b61024d6004803603602081101561023757600080fd5b8101908080359060200190929190505050610ade565b005b610257610bcc565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029757808201518184015260208101905061027c565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031e600480360360408110156102e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c6e565b60405180821515815260200191505060405180910390f35b61033e610c8c565b6040518082815260200191505060405180910390f35b61035c610c96565b6040518082815260200191505060405180910390f35b6103de6004803603606081101561038857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610caa565b60405180821515815260200191505060405180910390f35b6103fe610d83565b6040518082815260200191505060405180910390f35b6104426004803603602081101561042a57600080fd5b81019080803515159060200190929190505050610d89565b005b61044c610da6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104a46004803603602081101561048e57600080fd5b8101908080359060200190929190505050610dca565b6040518082815260200191505060405180910390f35b6104c2610e4e565b604051808260ff16815260200191505060405180910390f35b610527600480360360408110156104f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e65565b60405180821515815260200191505060405180910390f35b610547610f18565b6040518082815260200191505060405180910390f35b610565610f1e565b6040518082815260200191505060405180910390f35b6105b36004803603604081101561059157600080fd5b8101908080359060200190929190803515159060200190929190505050610f24565b6040518082815260200191505060405180910390f35b6105d1610fe5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610605611009565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063961102f565b6040518082815260200191505060405180910390f35b610657611035565b6040518082815260200191505060405180910390f35b6106af6004803603602081101561068357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061103b565b6040518082815260200191505060405180910390f35b6106cd61108c565b005b6106d7611212565b6040518082815260200191505060405180910390f35b6106f5611218565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61072961123e565b6040518082815260200191505060405180910390f35b610747611244565b6040518082815260200191505060405180910390f35b61076561124a565b6040518082815260200191505060405180910390f35b610783611250565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107b7611279565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107eb61129f565b6040518082815260200191505060405180910390f35b6108096112a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561084957808201518184015260208101905061082e565b50505050905090810190601f1680156108765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108d06004803603604081101561089a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611347565b60405180821515815260200191505060405180910390f35b610934600480360360408110156108fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611414565b60405180821515815260200191505060405180910390f35b610954611432565b6040518082815260200191505060405180910390f35b610a206004803603602081101561098057600080fd5b810190808035906020019064010000000081111561099d57600080fd5b8201836020820111156109af57600080fd5b803590602001918460208302840111640100000000831117156109d157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611438565b005b610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611588565b6040518082815260200191505060405180910390f35b610adc60048036036020811015610ab057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061160f565b005b6000610ae86116e3565b90506000610af5836116eb565b50505050509050610b4e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461174790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ba68160095461174790919063ffffffff16565b600981905550610bc183600a5461179190919063ffffffff16565b600a81905550505050565b606060148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b6000610c82610c7b6116e3565b8484611819565b6001905092915050565b6000600a54905090565b60006b033b2e3c9fd0803ce8000000905090565b6000610cb7848484611a10565b610d7884610cc36116e3565b610d73856040518060600160405280602881526020016132ac60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d296116e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211d9092919063ffffffff16565b611819565b600190509392505050565b60105481565b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954821115610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806131cf602a913960400191505060405180910390fd5b6000610e316121dd565b9050610e46818461220890919063ffffffff16565b915050919050565b6000601660009054906101000a900460ff16905090565b6000610f0e610e726116e3565b84610f098560036000610e836116e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b611819565b6001905092915050565b600b5481565b60185481565b60006b033b2e3c9fd0803ce8000000831115610fa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610fc8576000610fb8846116eb565b5050505050905080915050610fdf565b6000610fd3846116eb565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600d5481565b6000611085600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dca565b9050919050565b6110946116e3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b60115481565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b606060158054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561133d5780601f106113125761010080835404028352916020019161133d565b820191906000526020600020905b81548152906001019060200180831161132057829003601f168201915b5050505050905090565b600061140a6113546116e3565b8461140585604051806060016040528060258152602001613377602591396003600061137e6116e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211d9092919063ffffffff16565b611819565b6001905092915050565b60006114286114216116e3565b8484611a10565b6001905092915050565b60125481565b6114406116e3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b81518110156115845760016006600084848151811061151e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611503565b5050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6116176116e3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6116e081612252565b50565b600033905090565b60008060008060008060008060006117028a612395565b92509250925060008060006117208d868661171b6121dd565b61246c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061178983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211d565b905092915050565b60008082840190508381101561180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133226024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061321f6022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806132fd6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806131ac6023913960400191505060405180910390fd5b60008111611b75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806132d46029913960400191505060405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53656e646572206164647265737320697320696e20626c61636b206c6973740081525060200191505060405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132696022913960400191505060405180910390fd5b611ce0611250565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d4e5750611d1e611250565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d875750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ddf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e355750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e8b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f5757601154811115611eeb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806132416028913960400191505060405180910390fd5b6000611ef68361103b565b90506013548282011115611f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806133466031913960400191505060405180910390fd5b505b6000611f623061103b565b90506011548110611f735760115490505b60006012548210159050808015611f975750600860009054906101000a900460ff16155b8015611fef57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612003576012549150612002826124f5565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120aa5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061210057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b1561210a57600090505b6121158686866125df565b505050505050565b60008383111582906121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561218f578082015181840152602081019050612174565b50505050905090810190601f1680156121bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006121ea6128b0565b91509150612201818361220890919063ffffffff16565b9250505090565b600061224a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b69565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806131f96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806123c3600b546123b560648861220890919063ffffffff16565b612c2f90919063ffffffff16565b905060006123ef600d546123e160648961220890919063ffffffff16565b612c2f90919063ffffffff16565b9050600061241b600c5461240d60648a61220890919063ffffffff16565b612c2f90919063ffffffff16565b90506000612456826124488561243a888d61174790919063ffffffff16565b61174790919063ffffffff16565b61174790919063ffffffff16565b9050808484965096509650505050509193909250565b6000806000806124858589612c2f90919063ffffffff16565b9050600061249c8689612c2f90919063ffffffff16565b905060006124b38789612c2f90919063ffffffff16565b905060006124dc826124ce858761174790919063ffffffff16565b61174790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6001600860006101000a81548160ff021916908315150217905550600061252660028361220890919063ffffffff16565b9050600061253d828461174790919063ffffffff16565b9050600047905061254d83612cb5565b6000612562824761174790919063ffffffff16565b905061256e8382612f63565b7f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f848285886040518085815260200184815260200183815260200182815260200194505050505060405180910390a1505050506000600860006101000a81548160ff02191690831515021790555050565b6000806000806000806125f1876116eb565b9550955095509550955095506000612627600c5461261960648a61220890919063ffffffff16565b612c2f90919063ffffffff16565b905061267b87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461174790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127328160016000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b60016000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612835826130b4565b61283f8584613171565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b6000806000600954905060006b033b2e3c9fd0803ce8000000905060005b600780549050811015612b18578260016000600784815481106128ed57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806129d4575081600260006007848154811061296c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156129f5576009546b033b2e3c9fd0803ce800000094509450505050612b65565b612a7e6001600060078481548110612a0957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461174790919063ffffffff16565b9250612b096002600060078481548110612a9457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361174790919063ffffffff16565b915080806001019150506128ce565b50612b3a6b033b2e3c9fd0803ce800000060095461220890919063ffffffff16565b821015612b5c576009546b033b2e3c9fd0803ce8000000935093505050612b65565b81819350935050505b9091565b60008083118290612c15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bda578082015181840152602081019050612bbf565b50505050905090810190601f168015612c075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612c2157fe5b049050809150509392505050565b600080831415612c425760009050612caf565b6000828402905082848281612c5357fe5b0414612caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061328b6021913960400191505060405180910390fd5b809150505b92915050565b6060600267ffffffffffffffff81118015612ccf57600080fd5b50604051908082528060200260200182016040528015612cfe5781602001602082028036833780820191505090505b5090503081600081518110612d0f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612daf57600080fd5b505afa158015612dc3573d6000803e3d6000fd5b505050506040513d6020811015612dd957600080fd5b810190808051906020019092919050505081600181518110612df757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5c307f000000000000000000000000000000000000000000000000000000000000000084611819565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612f1e578082015181840152602081019050612f03565b505050509050019650505050505050600060405180830381600087803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b505050505050565b612f8e307f000000000000000000000000000000000000000000000000000000000000000084611819565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fd8611250565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561305d57600080fd5b505af1158015613071573d6000803e3d6000fd5b50505050506040513d606081101561308857600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b60006130be6121dd565b905060006130d58284612c2f90919063ffffffff16565b905061312981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6131868260095461174790919063ffffffff16565b6009819055506131a181600a5461179190919063ffffffff16565b600a81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e526563697069656e74206164647265737320697320696e20626c61636b206c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f756e7420283130302c3030302c3030302945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1651a796d1226b6eb50c2adcc905dfef0a06497c52d3c7c20ee2d5149d9c17f64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80636bc87c3a116101255780638ea5220f116100ad578063a9059cbb1161007c578063a9059cbb146108e8578063b3f22ce31461094c578063d338faf31461096a578063dd62ed3e14610a22578063f2fde38b14610a9a5761021c565b80638ea5220f146107af578063909ef733146107e357806395d89b4114610801578063a457c2d7146108845761021c565b806375f0a874116100f457806375f0a874146106ed57806378109e54146107215780637d1db4a51461073f57806384d6ff2f1461075d5780638da5cb5b1461077b5761021c565b80636bc87c3a1461064f57806370a082311461066d578063715018a6146106c557806374c7b41c146106cf5761021c565b80632d838119116101a857806344aa2fc61161017757806344aa2fc61461055d5780634549b0391461057b57806352143290146105c957806359927044146105fd57806363aef729146106315761021c565b80632d83811914610478578063313ce567146104ba57806339509351146104db5780633b124fe71461053f5761021c565b806318160ddd116101ef57806318160ddd1461035457806323b872dd146103725780632701a4f2146103f65780632a9b8072146104145780632d6abf87146104445761021c565b8063053ab1821461022157806306fdde031461024f578063095ea7b3146102d257806313114a9d14610336575b600080fd5b61024d6004803603602081101561023757600080fd5b8101908080359060200190929190505050610ade565b005b610257610bcc565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029757808201518184015260208101905061027c565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031e600480360360408110156102e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c6e565b60405180821515815260200191505060405180910390f35b61033e610c8c565b6040518082815260200191505060405180910390f35b61035c610c96565b6040518082815260200191505060405180910390f35b6103de6004803603606081101561038857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610caa565b60405180821515815260200191505060405180910390f35b6103fe610d83565b6040518082815260200191505060405180910390f35b6104426004803603602081101561042a57600080fd5b81019080803515159060200190929190505050610d89565b005b61044c610da6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104a46004803603602081101561048e57600080fd5b8101908080359060200190929190505050610dca565b6040518082815260200191505060405180910390f35b6104c2610e4e565b604051808260ff16815260200191505060405180910390f35b610527600480360360408110156104f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e65565b60405180821515815260200191505060405180910390f35b610547610f18565b6040518082815260200191505060405180910390f35b610565610f1e565b6040518082815260200191505060405180910390f35b6105b36004803603604081101561059157600080fd5b8101908080359060200190929190803515159060200190929190505050610f24565b6040518082815260200191505060405180910390f35b6105d1610fe5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610605611009565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61063961102f565b6040518082815260200191505060405180910390f35b610657611035565b6040518082815260200191505060405180910390f35b6106af6004803603602081101561068357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061103b565b6040518082815260200191505060405180910390f35b6106cd61108c565b005b6106d7611212565b6040518082815260200191505060405180910390f35b6106f5611218565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61072961123e565b6040518082815260200191505060405180910390f35b610747611244565b6040518082815260200191505060405180910390f35b61076561124a565b6040518082815260200191505060405180910390f35b610783611250565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107b7611279565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107eb61129f565b6040518082815260200191505060405180910390f35b6108096112a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561084957808201518184015260208101905061082e565b50505050905090810190601f1680156108765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108d06004803603604081101561089a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611347565b60405180821515815260200191505060405180910390f35b610934600480360360408110156108fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611414565b60405180821515815260200191505060405180910390f35b610954611432565b6040518082815260200191505060405180910390f35b610a206004803603602081101561098057600080fd5b810190808035906020019064010000000081111561099d57600080fd5b8201836020820111156109af57600080fd5b803590602001918460208302840111640100000000831117156109d157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611438565b005b610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611588565b6040518082815260200191505060405180910390f35b610adc60048036036020811015610ab057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061160f565b005b6000610ae86116e3565b90506000610af5836116eb565b50505050509050610b4e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461174790919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ba68160095461174790919063ffffffff16565b600981905550610bc183600a5461179190919063ffffffff16565b600a81905550505050565b606060148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b6000610c82610c7b6116e3565b8484611819565b6001905092915050565b6000600a54905090565b60006b033b2e3c9fd0803ce8000000905090565b6000610cb7848484611a10565b610d7884610cc36116e3565b610d73856040518060600160405280602881526020016132ac60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d296116e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211d9092919063ffffffff16565b611819565b600190509392505050565b60105481565b80600860006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954821115610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806131cf602a913960400191505060405180910390fd5b6000610e316121dd565b9050610e46818461220890919063ffffffff16565b915050919050565b6000601660009054906101000a900460ff16905090565b6000610f0e610e726116e3565b84610f098560036000610e836116e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b611819565b6001905092915050565b600b5481565b60185481565b60006b033b2e3c9fd0803ce8000000831115610fa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610fc8576000610fb8846116eb565b5050505050905080915050610fdf565b6000610fd3846116eb565b50505050915050809150505b92915050565b7f000000000000000000000000a2689610d144e0a954a29dd0ec3f99e39d61d35b81565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600d5481565b6000611085600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dca565b9050919050565b6110946116e3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b60115481565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b606060158054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561133d5780601f106113125761010080835404028352916020019161133d565b820191906000526020600020905b81548152906001019060200180831161132057829003601f168201915b5050505050905090565b600061140a6113546116e3565b8461140585604051806060016040528060258152602001613377602591396003600061137e6116e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211d9092919063ffffffff16565b611819565b6001905092915050565b60006114286114216116e3565b8484611a10565b6001905092915050565b60125481565b6114406116e3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b81518110156115845760016006600084848151811061151e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611503565b5050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6116176116e3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6116e081612252565b50565b600033905090565b60008060008060008060008060006117028a612395565b92509250925060008060006117208d868661171b6121dd565b61246c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061178983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211d565b905092915050565b60008082840190508381101561180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561189f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133226024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061321f6022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806132fd6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806131ac6023913960400191505060405180910390fd5b60008111611b75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806132d46029913960400191505060405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53656e646572206164647265737320697320696e20626c61636b206c6973740081525060200191505060405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132696022913960400191505060405180910390fd5b611ce0611250565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d4e5750611d1e611250565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d875750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ddf57507f000000000000000000000000a2689610d144e0a954a29dd0ec3f99e39d61d35b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e355750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e8b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f5757601154811115611eeb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806132416028913960400191505060405180910390fd5b6000611ef68361103b565b90506013548282011115611f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806133466031913960400191505060405180910390fd5b505b6000611f623061103b565b90506011548110611f735760115490505b60006012548210159050808015611f975750600860009054906101000a900460ff16155b8015611fef57507f000000000000000000000000a2689610d144e0a954a29dd0ec3f99e39d61d35b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612003576012549150612002826124f5565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120aa5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061210057507f000000000000000000000000a2689610d144e0a954a29dd0ec3f99e39d61d35b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b1561210a57600090505b6121158686866125df565b505050505050565b60008383111582906121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561218f578082015181840152602081019050612174565b50505050905090810190601f1680156121bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006121ea6128b0565b91509150612201818361220890919063ffffffff16565b9250505090565b600061224a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b69565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806131f96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806123c3600b546123b560648861220890919063ffffffff16565b612c2f90919063ffffffff16565b905060006123ef600d546123e160648961220890919063ffffffff16565b612c2f90919063ffffffff16565b9050600061241b600c5461240d60648a61220890919063ffffffff16565b612c2f90919063ffffffff16565b90506000612456826124488561243a888d61174790919063ffffffff16565b61174790919063ffffffff16565b61174790919063ffffffff16565b9050808484965096509650505050509193909250565b6000806000806124858589612c2f90919063ffffffff16565b9050600061249c8689612c2f90919063ffffffff16565b905060006124b38789612c2f90919063ffffffff16565b905060006124dc826124ce858761174790919063ffffffff16565b61174790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6001600860006101000a81548160ff021916908315150217905550600061252660028361220890919063ffffffff16565b9050600061253d828461174790919063ffffffff16565b9050600047905061254d83612cb5565b6000612562824761174790919063ffffffff16565b905061256e8382612f63565b7f93efcf28fbf701a930e0ad258987a2e4f08eb3aa99f9c02029e7ba049f69405f848285886040518085815260200184815260200183815260200182815260200194505050505060405180910390a1505050506000600860006101000a81548160ff02191690831515021790555050565b6000806000806000806125f1876116eb565b9550955095509550955095506000612627600c5461261960648a61220890919063ffffffff16565b612c2f90919063ffffffff16565b905061267b87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461174790919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127328160016000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b60016000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612835826130b4565b61283f8584613171565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b6000806000600954905060006b033b2e3c9fd0803ce8000000905060005b600780549050811015612b18578260016000600784815481106128ed57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806129d4575081600260006007848154811061296c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156129f5576009546b033b2e3c9fd0803ce800000094509450505050612b65565b612a7e6001600060078481548110612a0957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461174790919063ffffffff16565b9250612b096002600060078481548110612a9457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361174790919063ffffffff16565b915080806001019150506128ce565b50612b3a6b033b2e3c9fd0803ce800000060095461220890919063ffffffff16565b821015612b5c576009546b033b2e3c9fd0803ce8000000935093505050612b65565b81819350935050505b9091565b60008083118290612c15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bda578082015181840152602081019050612bbf565b50505050905090810190601f168015612c075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612c2157fe5b049050809150509392505050565b600080831415612c425760009050612caf565b6000828402905082848281612c5357fe5b0414612caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061328b6021913960400191505060405180910390fd5b809150505b92915050565b6060600267ffffffffffffffff81118015612ccf57600080fd5b50604051908082528060200260200182016040528015612cfe5781602001602082028036833780820191505090505b5090503081600081518110612d0f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612daf57600080fd5b505afa158015612dc3573d6000803e3d6000fd5b505050506040513d6020811015612dd957600080fd5b810190808051906020019092919050505081600181518110612df757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611819565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612f1e578082015181840152602081019050612f03565b505050509050019650505050505050600060405180830381600087803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b505050505050565b612f8e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611819565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fd8611250565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561305d57600080fd5b505af1158015613071573d6000803e3d6000fd5b50505050506040513d606081101561308857600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b60006130be6121dd565b905060006130d58284612c2f90919063ffffffff16565b905061312981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179190919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6131868260095461174790919063ffffffff16565b6009819055506131a181600a5461179190919063ffffffff16565b600a81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e526563697069656e74206164647265737320697320696e20626c61636b206c697374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f756e7420283130302c3030302c3030302945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1651a796d1226b6eb50c2adcc905dfef0a06497c52d3c7c20ee2d5149d9c17f64736f6c634300060c0033

Deployed Bytecode Sourcemap

24321:17525:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30787:318;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27981:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29085:221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30676:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28333:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29322:506;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25328:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32477:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25606:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31668:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28217:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29844:344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25100:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25896:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31121:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25662:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26127:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25271:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25177:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28452:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12714:152;;;:::i;:::-;;25220:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25961:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25533:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25391:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25137:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11996:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26047:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25852:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28097:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30204:456;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28614:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25455:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32600:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28857:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13045:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30787:318;30843:14;30860:12;:10;:12::i;:::-;30843:29;;30888:15;30917:19;30928:7;30917:10;:19::i;:::-;30887:49;;;;;;;30969:28;30989:7;30969;:15;30977:6;30969:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30951:7;:15;30959:6;30951:15;;;;;;;;;;;;;;;:46;;;;31022:20;31034:7;31022;;:11;;:20;;;;:::i;:::-;31012:7;:30;;;;31070:23;31085:7;31070:10;;:14;;:23;;;;:::i;:::-;31057:10;:36;;;;30787:318;;;:::o;27981:100::-;28027:13;28064:5;28057:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27981:100;:::o;29085:221::-;29199:4;29229:39;29238:12;:10;:12::i;:::-;29252:7;29261:6;29229:8;:39::i;:::-;29290:4;29283:11;;29085:221;;;;:::o;30676:95::-;30718:7;30749:10;;30742:17;;30676:95;:::o;28333:103::-;28386:7;24972:19;28410:14;;28333:103;:::o;29322:506::-;29470:4;29491:36;29501:6;29509:9;29520:6;29491:9;:36::i;:::-;29542:248;29569:6;29594:12;:10;:12::i;:::-;29625:150;29685:6;29625:150;;;;;;;;;;;;;;;;;:11;:19;29637:6;29625:19;;;;;;;;;;;;;;;:33;29645:12;:10;:12::i;:::-;29625:33;;;;;;;;;;;;;;;;:37;;:150;;;;;:::i;:::-;29542:8;:248::i;:::-;29812:4;29805:11;;29322:506;;;;;:::o;25328:52::-;;;;:::o;32477:111::-;32562:14;32543:16;;:33;;;;;;;;;;;;;;;;;;32477:111;:::o;25606:45::-;;;:::o;31668:366::-;31774:7;31844;;31833;:18;;31807:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31944:19;31966:10;:8;:10::i;:::-;31944:32;;31998:24;32010:11;31998:7;:11;;:24;;;;:::i;:::-;31991:31;;;31668:366;;;:::o;28217:100::-;28267:5;28296:9;;;;;;;;;;;28289:16;;28217:100;:::o;29844:344::-;29971:4;30001:149;30028:12;:10;:12::i;:::-;30059:7;30085:50;30124:10;30085:11;:25;30097:12;:10;:12::i;:::-;30085:25;;;;;;;;;;;;;;;:34;30111:7;30085:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30001:8;:149::i;:::-;30172:4;30165:11;;29844:344;;;;:::o;25100:26::-;;;;:::o;25896:44::-;;;;:::o;31121:531::-;31251:7;24972:19;31292:7;:18;;31284:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31366:17;31361:280;;31405:15;31434:19;31445:7;31434:10;:19::i;:::-;31404:49;;;;;;;31479:7;31472:14;;;;;31361:280;31530:23;31565:19;31576:7;31565:10;:19::i;:::-;31527:57;;;;;;;31610:15;31603:22;;;31121:531;;;;;:::o;25662:34::-;;;:::o;26127:70::-;;;;;;;;;;;;;:::o;25271:46::-;;;;:::o;25177:32::-;;;;:::o;28452:146::-;28518:7;28549:37;28569:7;:16;28577:7;28569:16;;;;;;;;;;;;;;;;28549:19;:37::i;:::-;28542:44;;28452:146;;;:::o;12714:152::-;12250:12;:10;:12::i;:::-;12240:22;;:6;;;;;;;;;;:22;;;12232:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12817:1:::1;12780:40;;12801:6;::::0;::::1;;;;;;;;12780:40;;;;;;;;;;;;12852:1;12835:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;12714:152::o:0;25220:40::-;;;;:::o;25961:75::-;;;;;;;;;;;;;:::o;25533:53::-;;;;:::o;25391:49::-;;;;:::o;25137:29::-;;;;:::o;11996:87::-;12034:7;12065:6;;;;;;;;;;;12058:13;;11996:87;:::o;26047:69::-;;;;;;;;;;;;;:::o;25852:33::-;;;;:::o;28097:104::-;28145:13;28182:7;28175:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28097:104;:::o;30204:456::-;30336:4;30366:256;30393:12;:10;:12::i;:::-;30424:7;30450:157;30511:15;30450:157;;;;;;;;;;;;;;;;;:11;:25;30462:12;:10;:12::i;:::-;30450:25;;;;;;;;;;;;;;;:34;30476:7;30450:34;;;;;;;;;;;;;;;;:38;;:157;;;;;:::i;:::-;30366:8;:256::i;:::-;30644:4;30637:11;;30204:456;;;;:::o;28614:227::-;28731:4;28761:42;28771:12;:10;:12::i;:::-;28785:9;28796:6;28761:9;:42::i;:::-;28825:4;28818:11;;28614:227;;;;:::o;25455:67::-;;;;:::o;32600:223::-;12250:12;:10;:12::i;:::-;12240:22;;:6;;;;;;;;;;:22;;;12232:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32695:9:::1;32690:122;32714:14;:21;32710:1;:25;32690:122;;;32792:4;32761:9;:28;32771:14;32786:1;32771:17;;;;;;;;;;;;;;32761:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32737:3;;;;;;;32690:122;;;;32600:223:::0;:::o;28857:212::-;28990:7;29030:11;:18;29042:5;29030:18;;;;;;;;;;;;;;;:27;29049:7;29030:27;;;;;;;;;;;;;;;;29023:34;;28857:212;;;;:::o;13045:117::-;12250:12;:10;:12::i;:::-;12240:22;;:6;;;;;;;;;;:22;;;12232:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13122:28:::1;13141:8;13122:18;:28::i;:::-;13045:117:::0;:::o;4409:106::-;4454:15;4493:10;4486:17;;4409:106;:::o;36449:751::-;36565:7;36591;36617;36643;36669;36695;36743:23;36768:12;36782:18;36821:20;36833:7;36821:11;:20::i;:::-;36742:99;;;;;;36857:15;36874:23;36899:12;36932:50;36944:7;36953:4;36959:10;36971;:8;:10::i;:::-;36932:11;:50::i;:::-;36856:126;;;;;;37023:7;37049:15;37083:4;37106:15;37140:4;37163:10;36997:191;;;;;;;;;;;;;;;;;;36449:751;;;;;;;:::o;6231:144::-;6289:7;6320:43;6324:1;6327;6320:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6313:50;;6231:144;;;;:::o;5711:201::-;5769:7;5793:9;5809:1;5805;:5;5793:17;;5838:1;5833;:6;;5825:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5899:1;5892:8;;;5711:201;;;;:::o;32050:411::-;32214:1;32197:19;;:5;:19;;;;32189:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32299:1;32280:21;;:7;:21;;;;32272:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32391:6;32361:11;:18;32373:5;32361:18;;;;;;;;;;;;;;;:27;32380:7;32361:27;;;;;;;;;;;;;;;:36;;;;32433:7;32417:32;;32426:5;32417:32;;;32442:6;32417:32;;;;;;;;;;;;;;;;;;32050:411;;;:::o;32835:2570::-;33004:1;32986:20;;:6;:20;;;;32978:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33092:1;33071:23;;:9;:23;;;;33063:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33166:1;33157:6;:10;33149:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33238:9;:17;33248:6;33238:17;;;;;;;;;;;;;;;;;;;;;;;;;33237:18;33228:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33316:9;:20;33326:9;33316:20;;;;;;;;;;;;;;;;;;;;;;;;;33315:21;33306:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33424:7;:5;:7::i;:::-;33414:17;;:6;:17;;;;:58;;;;;33465:7;:5;:7::i;:::-;33452:20;;:9;:20;;;;33414:58;:102;;;;;33514:1;33493:23;;:9;:23;;;;33414:102;:145;;;;;33550:9;33537:22;;:9;:22;;;;33414:145;:204;;;;;33581:26;:37;33608:9;33581:37;;;;;;;;;;;;;;;;;;;;;;;;;33580:38;33414:204;:261;;;;;33641:26;:34;33668:6;33641:34;;;;;;;;;;;;;;;;;;;;;;;;;33640:35;33414:261;33392:740;;;33752:12;;33742:6;:22;;33712:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33867:32;33902:20;33912:9;33902;:20::i;:::-;33867:55;;34008:15;;33998:6;33971:24;:33;:52;;33941:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33392:740;;34450:28;34481:24;34499:4;34481:9;:24::i;:::-;34450:55;;34554:12;;34530:20;:36;34526:112;;34610:12;;34587:35;;34526:112;34658:24;34726:30;;34702:20;:54;;34658:98;;34775:19;:40;;;;;34799:16;;;;;;;;;;;34798:17;34775:40;:63;;;;;34829:9;34819:19;;:6;:19;;;;34775:63;34771:212;;;34882:30;;34859:53;;34931:36;34946:20;34931:14;:36::i;:::-;34771:212;35003:12;35018:4;35003:19;;35153:18;:26;35172:6;35153:26;;;;;;;;;;;;;;;;;;;;;;;;;:76;;;;35200:18;:29;35219:9;35200:29;;;;;;;;;;;;;;;;;;;;;;;;;35153:76;:116;;;;35260:9;35250:19;;:6;:19;;;35153:116;35131:204;;;35314:5;35304:15;;35131:204;35349:44;35367:6;35375:9;35386:6;35349:17;:44::i;:::-;32835:2570;;;;;;:::o;6714:262::-;6850:7;6887:1;6882;:6;;6890:12;6874:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6918:9;6934:1;6930;:5;6918:17;;6963:1;6956:8;;;6714:262;;;;;:::o;38453:176::-;38495:7;38520:15;38537;38556:19;:17;:19::i;:::-;38519:56;;;;38597:20;38609:7;38597;:11;;:20;;;;:::i;:::-;38590:27;;;;38453:176;:::o;8310:140::-;8368:7;8399:39;8403:1;8406;8399:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8392:46;;8310:140;;;;:::o;13288:294::-;13404:1;13384:22;;:8;:22;;;;13358:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13529:8;13500:38;;13521:6;;;;;;;;;;13500:38;;;;;;;;;;;;13562:8;13553:6;;:17;;;;;;;;;;;;;;;;;;13288:294;:::o;37222:569::-;37339:7;37365;37391;37438:12;37453:31;37476:7;;37453:18;37465:5;37453:7;:11;;:18;;;;:::i;:::-;:22;;:31;;;;:::i;:::-;37438:46;;37499:18;37537:37;37560:13;;37537:18;37549:5;37537:7;:11;;:18;;;;:::i;:::-;:22;;:37;;;;:::i;:::-;37499:75;;37589:12;37604:34;37627:10;;37604:18;37616:5;37604:7;:11;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;37589:49;;37653:23;37679:43;37717:4;37679:33;37701:10;37679:17;37691:4;37679:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;37653:69;;37745:15;37762:4;37768:10;37737:42;;;;;;;;;;37222:569;;;;;:::o;37807:630::-;38042:7;38068;38094;38141:15;38159:24;38171:11;38159:7;:11;;:24;;;;:::i;:::-;38141:42;;38198:12;38213:21;38222:11;38213:4;:8;;:21;;;;:::i;:::-;38198:36;;38249:18;38270:27;38285:11;38270:10;:14;;:27;;;;:::i;:::-;38249:48;;38312:23;38338:33;38360:10;38338:17;38350:4;38338:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38312:59;;38394:7;38403:15;38420:4;38386:39;;;;;;;;;;37807:630;;;;;;;;:::o;39586:1013::-;27890:4;27871:16;;:23;;;;;;;;;;;;;;;;;;39730:12:::1;39745:27;39770:1;39745:20;:24;;:27;;;;:::i;:::-;39730:42;;39787:17;39807:30;39832:4;39807:20;:24;;:30;;;;:::i;:::-;39787:50;;40139:22;40164:21;40139:46;;40242:22;40259:4;40242:16;:22::i;:::-;40337:18;40358:41;40384:14;40358:21;:25;;:41;;;;:::i;:::-;40337:62;;40461:35;40474:9;40485:10;40461:12;:35::i;:::-;40522:65;40537:4;40543:10;40555:9;40566:20;40522:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27909:1;;;;27944:5:::0;27925:16;;:24;;;;;;;;;;;;;;;;;;39586:1013;:::o;35421:837::-;35592:15;35626:23;35668:12;35699:23;35741:12;35772:18;35808:19;35819:7;35808:10;:19::i;:::-;35573:254;;;;;;;;;;;;35842:12;35857:34;35880:10;;35857:18;35869:5;35857:7;:11;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;35842:49;;35924:28;35944:7;35924;:15;35932:6;35924:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35906:7;:15;35914:6;35906:15;;;;;;;;;;;;;;;:46;;;;35994:34;36023:4;35994:7;:24;36002:15;;;;;;;;;;;35994:24;;;;;;;;;;;;;;;;:28;;:34;;;;:::i;:::-;35967:7;:24;35975:15;;;;;;;;;;;35967:24;;;;;;;;;;;;;;;:61;;;;36064:39;36087:15;36064:7;:18;36072:9;36064:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36043:7;:18;36051:9;36043:18;;;;;;;;;;;;;;;:60;;;;36118:26;36133:10;36118:14;:26::i;:::-;36159:23;36171:4;36177;36159:11;:23::i;:::-;36219:9;36202:44;;36211:6;36202:44;;;36230:15;36202:44;;;;;;;;;;;;;;;;;;35421:837;;;;;;;;;;:::o;38645:657::-;38696:7;38705;38729:15;38747:7;;38729:25;;38769:15;24972:19;38769:25;;38814:9;38809:366;38833:9;:16;;;;38829:1;:20;38809:366;;;38925:7;38901;:21;38909:9;38919:1;38909:12;;;;;;;;;;;;;;;;;;;;;;;;;38901:21;;;;;;;;;;;;;;;;:31;:87;;;;38981:7;38957;:21;38965:9;38975:1;38965:12;;;;;;;;;;;;;;;;;;;;;;;;;38957:21;;;;;;;;;;;;;;;;:31;38901:87;38875:158;;;39016:7;;24972:19;39008:25;;;;;;;;;38875:158;39062:34;39074:7;:21;39082:9;39092:1;39082:12;;;;;;;;;;;;;;;;;;;;;;;;;39074:21;;;;;;;;;;;;;;;;39062:7;:11;;:34;;;;:::i;:::-;39052:44;;39125:34;39137:7;:21;39145:9;39155:1;39145:12;;;;;;;;;;;;;;;;;;;;;;;;;39137:21;;;;;;;;;;;;;;;;39125:7;:11;;:34;;;;:::i;:::-;39115:44;;38851:3;;;;;;;38809:366;;;;39203:20;24972:19;39203:7;;:11;;:20;;;;:::i;:::-;39193:7;:30;39189:61;;;39233:7;;24972:19;39225:25;;;;;;;;39189:61;39273:7;39282;39265:25;;;;;;38645:657;;;:::o;8990:423::-;9126:7;9233:1;9229;:5;9236:12;9221:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9264:9;9280:1;9276;:5;;;;;;9264:17;;9400:1;9393:8;;;8990:423;;;;;:::o;7271:519::-;7329:7;7595:1;7590;:6;7586:55;;;7624:1;7617:8;;;;7586:55;7661:9;7677:1;7673;:5;7661:17;;7710:1;7705;7701;:5;;;;;;:10;7693:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7777:1;7770:8;;;7271:519;;;;;:::o;40615:641::-;40749:21;40787:1;40773:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40749:40;;40822:4;40804;40809:1;40804:7;;;;;;;;;;;;;:23;;;;;;;;;;;40852:11;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40842:4;40847:1;40842:7;;;;;;;;;;;;;:28;;;;;;;;;;;40891:58;40908:4;40923:11;40937;40891:8;:58::i;:::-;41000:11;:62;;;41081:11;41111:1;41159:4;41190;41214:15;41000:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40615:641;;:::o;41272:557::-;41428:58;41445:4;41460:11;41474;41428:8;:58::i;:::-;41541:11;:27;;;41576:9;41613:4;41637:11;41667:1;41714;41761:7;:5;:7::i;:::-;41787:15;41541:276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41272:557;;:::o;39318:252::-;39385:19;39407:10;:8;:10::i;:::-;39385:32;;39432:18;39453:27;39468:11;39453:10;:14;;:27;;;;:::i;:::-;39432:48;;39520:38;39547:10;39520:7;:22;39536:4;39520:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39495:7;:22;39511:4;39495:22;;;;;;;;;;;;;;;:63;;;;39318:252;;;:::o;36274:159::-;36356:17;36368:4;36356:7;;:11;;:17;;;;:::i;:::-;36346:7;:27;;;;36401:20;36416:4;36401:10;;:14;;:20;;;;:::i;:::-;36388:10;:33;;;;36274:159;;:::o

Swarm Source

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