ETH Price: $3,494.52 (+2.58%)
Gas: 2 Gwei

Token

ORB Token (ORB)
 

Overview

Max Total Supply

4,847,402,229.297312233803609931 ORB

Holders

136

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
sniper.eth
Balance
0 ORB

Value
$0.00
0x949710d6ff4d3d8030694b5582126bad57250066
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:
ORB

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-19
*/

// SPDX-License-Identifier: MIT

/*

███╗░░░███╗░█████╗░░██████╗░██╗░█████╗░██╗░░░██╗███████╗██████╗░░██████╗███████╗
████╗░████║██╔══██╗██╔════╝░██║██╔══██╗██║░░░██║██╔════╝██╔══██╗██╔════╝██╔════╝
██╔████╔██║███████║██║░░██╗░██║██║░░╚═╝╚██╗░██╔╝█████╗░░██████╔╝╚█████╗░█████╗░░
██║╚██╔╝██║██╔══██║██║░░╚██╗██║██║░░██╗░╚████╔╝░██╔══╝░░██╔══██╗░╚═══██╗██╔══╝░░
██║░╚═╝░██║██║░░██║╚██████╔╝██║╚█████╔╝░░╚██╔╝░░███████╗██║░░██║██████╔╝███████╗
╚═╝░░░░░╚═╝╚═╝░░╚═╝░╚═════╝░╚═╝░╚════╝░░░░╚═╝░░░╚══════╝╚═╝░░╚═╝╚═════╝░╚══════╝

*/

pragma solidity ^0.8.18;


interface IERC20 {
    
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    

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

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

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

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



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

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


library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

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

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


contract ORB is Context, IERC20, Ownable { 
    using SafeMath for uint256;
    using Address for address;


    // Tracking status of wallets
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromFee; 

   
    /*

    WALLETS

    */
    
    address payable private Developmentwallet; 
    address payable private NFTFarm; 

    address public MagicverseBridge;

    /*

    TOKEN DETAILS

    */


    string private _name = "ORB Token"; 
    string private _symbol = "ORB";  
    uint8 private _decimals = 18;
    uint256 private _tTotal;
    uint256 private _tFeeTotal;

    // Counter for liquify trigger
    uint8 private txCount = 0;
    uint8 private swapTrigger = 3; 
 


    // Setting the initial fees
    uint256 private _TotalFee = 5;
    uint256 public _buyFee = 5;
    uint256 public _sellFee = 5;

    //Fees distribution
    uint256 public LiquidityFee = 2000;
    uint256 public NFTFarmFee = 6000;
    uint256 public DevelopmentFee = 2000;
    
    uint256 private TotalfeeforDistribution = 10000;

    // 'Previous fees' are used to keep track of fee settings when removing and restoring fees
    uint256 private _previousTotalFee = _TotalFee; 
    uint256 private _previousBuyFee = _buyFee; 
    uint256 private _previousSellFee = _sellFee; 

    /*

    WALLET LIMITS 
    
    */

    // Maximum swap amount 
    uint256 public _maxSwapAmount = 1000000000 * 10**18; 
    /* 

    Swap Router SET UP

    */
                                     
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    bool public TradingInitialized;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    
    event TradingStarted(
        address TokenAddress,
        address PairAddress,
        uint256 TokenAmount,
        uint256 EthAmount
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 nativeReceived
    );

    event LiquiditySent(
        uint256 tokensIntoLiquidity,
        uint256 CROintoLiquidity
    );

   event NFTFarmSent(
       address to, 
       uint256 nativeSent
    );

     event DevelopmentSent(
       address to, 
       uint256 nativeSent
    );

    /*

   MODIFIERS

    */

    // Prevent processing while already processing! 
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

   
    
     // Mint and burn functions can only be called by bridge!

    modifier onlyBridge {
    require(msg.sender == MagicverseBridge);
    _;
    }

    /*

    

    */
    
  constructor () {
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
    
    }


    /*

    STANDARD ERC20 COMPLIANCE FUNCTIONS

    */

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[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 bridgeMint(address to, uint256 amount) public onlyBridge() {
        _tOwned[to] = _tOwned[to].add(amount);
        _tTotal = _tTotal.add(amount);
        emit Transfer(address(0), to, amount);
    }
    
    function bridgeBurn(address from, uint256 amount) public onlyBridge() {
        _tOwned[from] = _tOwned[from].sub(amount);
        _tTotal = _tTotal.sub(amount);
        emit Transfer(from, address(0), amount);
    }
    /*

    END OF STANDARD ERC20 COMPLIANCE FUNCTIONS

    */




    /*

    FEES

    */
    
    // Set a wallet address so that it does not have to pay transaction fees
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    // Set a wallet address so that it has to pay transaction fees
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    
    /*

    SETTING FEES

    Initial fees are set to 5% buy 5% sell

    */
    

    function _set_Fees(uint256 Buy_Fee, uint256 Sell_Fee) external onlyOwner() {

        _sellFee = Sell_Fee;
        _buyFee = Buy_Fee;

    }
    
    function _set_Distribution_Fees(uint256 LiquidityFeex1000, uint256 NFTFarmFeex1000,uint256 DevelopmentFeex1000) external onlyOwner() {

         LiquidityFee = LiquidityFeex1000;
         NFTFarmFee = NFTFarmFeex1000;
         DevelopmentFee = DevelopmentFeex1000;
    
         TotalfeeforDistribution = LiquidityFee.add(NFTFarmFee).add(DevelopmentFee);

    }


    // Update NFT Farm wallet
    function Wallet_Update_NFTFarm(address payable NFTFarm_Wallet) public onlyOwner() {
        NFTFarm = NFTFarm_Wallet;
        _isExcludedFromFee[NFTFarm_Wallet] = true;
    }
    
    // Update Development wallet
    function Wallet_Update_Development(address payable Development_Wallet) public onlyOwner() {
        Developmentwallet = Development_Wallet;
        _isExcludedFromFee[Development_Wallet] = true;
    }

    // Update Bridge address
    function Wallet_Bridge(address Bridge_Wallet) public onlyOwner() {
       MagicverseBridge = Bridge_Wallet;
       _isExcludedFromFee[Bridge_Wallet] = true;
    }

    /*

    PROCESSING TOKENS - SET UP

    */
    
    // Toggle on and off to auto process tokens to BNB wallet 
    function set_Swap_And_Liquify_Enabled(bool true_or_false) public onlyOwner {
        swapAndLiquifyEnabled = true_or_false;
        emit SwapAndLiquifyEnabledUpdated(true_or_false);
    }

    // This will set the number of transactions required before the 'swapAndLiquify' function triggers
    function set_Number_Of_Transactions_Before_Liquify_Trigger(uint8 number_of_transactions) public onlyOwner {
        swapTrigger = number_of_transactions;
    }
    


    // This function is required so that the contract can receive Native Coin
    receive() external payable {}

  
    /*
    
    When sending tokens to another wallet (not buying or selling) if noFeeToTransfer is true there will be no fee

    */

    bool public noFeeToTransfer = true;

    // Option to set fee or no fee for transfer (just in case the no fee transfer option is exploited in future!)
    // True = there will be no fees when moving tokens around or giving them to friends! (There will only be a fee to buy or sell)
    // False = there will be a fee when buying/selling/tranfering tokens
    // Default is true
    function set_Transfers_Without_Fees(bool true_or_false) external onlyOwner {
        noFeeToTransfer = true_or_false;
    }

    /*

    WALLET LIMITS

    Wallets are limited in two ways. The amount of tokens that can be purchased in one transaction
    and the total amount of tokens a wallet can buy. Limiting a wallet prevents one wallet from holding too
    many tokens, which can scare away potential buyers that worry that a whale might dump!

    */

    

    // Remove all fees
    function removeAllFee() private {
        if(_TotalFee == 0 && _buyFee == 0 && _sellFee == 0) return;


        _previousBuyFee = _buyFee; 
        _previousSellFee = _sellFee; 
        _previousTotalFee = _TotalFee;
        _buyFee = 0;
        _sellFee = 0;
        _TotalFee = 0;

    }
    
    // Restore all fees
    function restoreAllFee() private {
    
    _TotalFee = _previousTotalFee;
    _buyFee = _previousBuyFee; 
    _sellFee = _previousSellFee; 

    }


    // Approve a wallet to sell tokens
    function _approve(address owner, address spender, uint256 amount) private {

        require(owner != address(0) && spender != address(0), "ERR: zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);

    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        

        /*

        PROCESSING

        */


        // SwapAndLiquify is triggered after every X transactions - this number can be adjusted using swapTrigger

        if(
            txCount >= swapTrigger && 
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapAndLiquifyEnabled 
            )
        {  
            
            txCount = 0;
            uint256 contractTokenBalance = balanceOf(address(this));
            if(contractTokenBalance > _maxSwapAmount) {contractTokenBalance = _maxSwapAmount;}
            if(contractTokenBalance > 0){
            swapAndLiquify(contractTokenBalance);
        }
        }


        /*

        REMOVE FEES IF REQUIRED

        Fee removed if the to or from address is excluded from fee.
        Fee removed if the transfer is NOT a buy or sell.
        Change fee amount for buy or sell.

        */

        
        bool takeFee = true;
         
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || (noFeeToTransfer && from != uniswapV2Pair && to != uniswapV2Pair)){
            takeFee = false;
        } else if (from == uniswapV2Pair){_TotalFee = _buyFee;} else if (to == uniswapV2Pair){_TotalFee = _sellFee;}
        
        _tokenTransfer(from,to,amount,takeFee);
    }



    /*

    PROCESSING FEES

    Fees are added to the contract as tokens, these functions exchange the tokens for Native coins and send to different wallets.

    */


    // Send Native coin to external wallet
    function sendToWallet(address payable wallet, uint256 amount) private {
            wallet.transfer(amount);
        }


    // Processing tokens from contract
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        uint256 tokensforlp = contractTokenBalance.mul(LiquidityFee).div(TotalfeeforDistribution).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(tokensforlp);

        swapTokensForNative(amountToSwap);
        
        
        uint256 amountNative = address(this).balance;
        emit SwapAndLiquify (amountToSwap,amountNative);

        //calcute payout shares
        uint256 totalNativeFee = TotalfeeforDistribution.sub(LiquidityFee.div(2));        
        uint256 amountForLiquidity = amountNative.mul(LiquidityFee).div(totalNativeFee).div(2);
        uint256 amountForNFTFarm = amountNative.mul(NFTFarmFee).div(totalNativeFee);
        uint256 amountForDevelopment = amountNative.sub(amountForLiquidity).sub(amountForNFTFarm);

         if (amountForLiquidity > 0) {
            addLiquidity(tokensforlp, amountForLiquidity);
            emit LiquiditySent(tokensforlp, amountForLiquidity);
        }
        
         if (amountForNFTFarm > 0) {
             sendToWallet(NFTFarm,amountForNFTFarm);
            emit NFTFarmSent(NFTFarm, amountForNFTFarm);
         }
            
         
         if (amountForDevelopment > 0) {
             sendToWallet(Developmentwallet,amountForDevelopment);
            emit DevelopmentSent(Developmentwallet, amountForDevelopment);
         }
            

        
    }

    
    function addLiquidity(uint256 tokenAmount, uint256 nativeAmount) private returns (uint256, uint256) {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        (uint amountToken, uint amountETH, ) = uniswapV2Router.addLiquidityETH{value: nativeAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        return (uint256(amountToken), uint256(amountETH));
    }

    // Manual Token Process Trigger - Enter the percent of the tokens that you'd like to send to process
    function process_Tokens_Now (uint256 percent_Of_Tokens_To_Process) public onlyOwner {
        // Do not trigger if already in swap
        require(!inSwapAndLiquify, "Currently processing, try later."); 
        if (percent_Of_Tokens_To_Process > 100){percent_Of_Tokens_To_Process == 100;}
        uint256 tokensOnContract = balanceOf(address(this));
        uint256 sendTokens = tokensOnContract*percent_Of_Tokens_To_Process/100;
        swapAndLiquify(sendTokens);
    }


    // Swapping tokens for Native coin using Chains Swap 
    function swapTokensForNative(uint256 tokenAmount) private {
    
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    /*

    PURGE RANDOM TOKENS - Add the random token address and a wallet to send them to

    */

    // Remove random tokens from the contract and send to a wallet
    function remove_Random_Tokens(address random_Token_Address, address send_to_wallet, uint256 number_of_tokens) public onlyOwner returns(bool _sent){
        require(random_Token_Address != address(this), "Can not remove native token");
        uint256 randomBalance = IERC20(random_Token_Address).balanceOf(address(this));
        if (number_of_tokens > randomBalance){number_of_tokens = randomBalance;}
        _sent = IERC20(random_Token_Address).transfer(send_to_wallet, number_of_tokens);
    }

    /*
    
    INITIALIZE TRADING

    */

    // Sets Router,Pair and adds LP. Can only executed once by the owner
    function startTrading(address Router) public onlyOwner() {
        require(!TradingInitialized);
        TradingInitialized = true;
        IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(Router);
        uniswapV2Pair = IUniswapV2Factory(_newuniswapV2Router.factory()).createPair(address(this), _newuniswapV2Router.WETH());
        uniswapV2Router = _newuniswapV2Router;
        
        uint256 TokenForInitialLp = balanceOf(address(this));
        uint256 ETHForInitialLp = address(this).balance;
        _approve(address(this), address(uniswapV2Router), TokenForInitialLp);

        uniswapV2Router.addLiquidityETH{value: ETHForInitialLp}(
            address(this),
            TokenForInitialLp,
            TokenForInitialLp,
            ETHForInitialLp,
            msg.sender,
            block.timestamp+1800
        );
        
        emit TradingStarted(address(this),uniswapV2Pair,TokenForInitialLp,ETHForInitialLp);
    }


    /*
    
    UPDATE ROUTER AND LIQUIDITY PAIRING

    */


    // Set new router and make the new pair address
    function set_New_Router_and_Make_Pair(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newuniswapV2Router.factory()).createPair(address(this), _newuniswapV2Router.WETH());
        uniswapV2Router = _newuniswapV2Router;
    }
   
    // Set new router
    function set_New_Router_Address(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(newRouter);
        uniswapV2Router = _newuniswapV2Router;
    }
    
    function set_New_Pair_Address(address newPair) public onlyOwner() {
        uniswapV2Pair = newPair;
    }

    /*

    TOKEN TRANSFERS

    */

    // Check if token transfer needs to process fees
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
        
        if(!takeFee){
            removeAllFee();
            } else {
                txCount++;
            }
            _transferTokens(sender, recipient, amount);
        
        if(!takeFee)
            restoreAllFee();
    }

    // Redistributing tokens and adding the fee to the contract address
    function _transferTokens(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _tOwned[address(this)] = _tOwned[address(this)].add(tFee);   
        emit Transfer(sender, recipient, tTransferAmount);
    }


    // Calculating the fee in tokens
    function _getValues(uint256 tAmount) private view returns (uint256, uint256) {
        uint256 tFee = tAmount*_TotalFee/100;
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }



    


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"nativeSent","type":"uint256"}],"name":"DevelopmentSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CROintoLiquidity","type":"uint256"}],"name":"LiquiditySent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"nativeSent","type":"uint256"}],"name":"NFTFarmSent","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":"nativeReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"TokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"PairAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"TradingStarted","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":"DevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MagicverseBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTFarmFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TradingInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Bridge_Wallet","type":"address"}],"name":"Wallet_Bridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"Development_Wallet","type":"address"}],"name":"Wallet_Update_Development","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"NFTFarm_Wallet","type":"address"}],"name":"Wallet_Update_NFTFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"LiquidityFeex1000","type":"uint256"},{"internalType":"uint256","name":"NFTFarmFeex1000","type":"uint256"},{"internalType":"uint256","name":"DevelopmentFeex1000","type":"uint256"}],"name":"_set_Distribution_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Buy_Fee","type":"uint256"},{"internalType":"uint256","name":"Sell_Fee","type":"uint256"}],"name":"_set_Fees","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeMint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noFeeToTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_Of_Tokens_To_Process","type":"uint256"}],"name":"process_Tokens_Now","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"random_Token_Address","type":"address"},{"internalType":"address","name":"send_to_wallet","type":"address"},{"internalType":"uint256","name":"number_of_tokens","type":"uint256"}],"name":"remove_Random_Tokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"set_New_Pair_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"set_New_Router_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"set_New_Router_and_Make_Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"number_of_transactions","type":"uint8"}],"name":"set_Number_Of_Transactions_Before_Liquify_Trigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"true_or_false","type":"bool"}],"name":"set_Swap_And_Liquify_Enabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"true_or_false","type":"bool"}],"name":"set_Transfers_Without_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Router","type":"address"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600960809081526827a921102a37b5b2b760b91b60a0526007906200002a90826200023e565b5060408051808201909152600381526227a92160e91b60208201526008906200005490826200023e565b5060098054601260ff199091168117909155600c805461ffff19166103001790556005600d819055600e819055600f8190556107d06010819055611770601155909155612710601355601481905560158190556016556b033b2e3c9fd0803ce80000006017556019805462ff00ff60a81b19166201000160a81b179055348015620000de57600080fd5b50620000ea3362000149565b600160036000620001036000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260039092529020805490911660011790556200030a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001c457607f821691505b602082108103620001e557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023957600081815260208120601f850160051c81016020861015620002145750805b601f850160051c820191505b81811015620002355782815560010162000220565b5050505b505050565b81516001600160401b038111156200025a576200025a62000199565b62000272816200026b8454620001af565b84620001eb565b602080601f831160018114620002aa5760008415620002915750858301515b600019600386901b1c1916600185901b17855562000235565b600085815260208120601f198616915b82811015620002db57888601518255948401946001909101908401620002ba565b5085821015620002fa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61228d806200031a6000396000f3fe6080604052600436106102815760003560e01c80637231d2171161014f578063a514a07d116100c1578063ddbf52661161007a578063ddbf5266146107c9578063e06bd4a5146107e9578063e8fb57fb146107ff578063ea2f0b371461081f578063f2fde38b1461083f578063f7739b5f1461085f57600080fd5b8063a514a07d146106e3578063a9059cbb14610703578063c2cb11f614610723578063c5e3869214610743578063d785d5be14610763578063dd62ed3e1461078357600080fd5b80638da5cb5b116101135780638da5cb5b14610639578063904288121461065757806394cb2e521461066d57806395d89b411461068d578063a457c2d7146106a2578063a4620d0f146106c257600080fd5b80637231d2171461058957806374f4f547146105a9578063768dc710146105c95780637caefa89146105f95780638c2a993e1461061957600080fd5b806336b1a1bc116101f357806349bd5a5e116101ac57806349bd5a5e146104c75780634a74bb02146104e7578063590f897e1461050857806367cbd84c1461051e57806370a082311461053e578063715018a61461057457600080fd5b806336b1a1bc1461042557806339509351146104455780633ad868101461046557806340b9a54b1461047b57806340db65f614610491578063437823ec146104a757600080fd5b806318160ddd1161024557806318160ddd14610363578063220f66961461038257806323b872dd146103a357806327b5e1a0146103c3578063313ce567146103e35780633343ab831461040557600080fd5b806306fdde031461028d578063095ea7b3146102b85780631282a0a0146102e857806313fad07a1461030a5780631694505e1461032b57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261087f565b6040516102af9190611e1e565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004611e81565b610911565b60405190151581526020016102af565b3480156102f457600080fd5b50610308610303366004611ead565b610928565b005b34801561031657600080fd5b506019546102d890600160b81b900460ff1681565b34801561033757600080fd5b5060185461034b906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561036f57600080fd5b50600a545b6040519081526020016102af565b34801561038e57600080fd5b506019546102d890600160a01b900460ff1681565b3480156103af57600080fd5b506102d86103be366004611eca565b610aab565b3480156103cf57600080fd5b506103086103de366004611ead565b610b14565b3480156103ef57600080fd5b5060095460405160ff90911681526020016102af565b34801561041157600080fd5b506102d8610420366004611eca565b610b56565b34801561043157600080fd5b50610308610440366004611ead565b610cb2565b34801561045157600080fd5b506102d8610460366004611e81565b610cdc565b34801561047157600080fd5b5061037460125481565b34801561048757600080fd5b50610374600e5481565b34801561049d57600080fd5b5061037460105481565b3480156104b357600080fd5b506103086104c2366004611ead565b610d12565b3480156104d357600080fd5b5060195461034b906001600160a01b031681565b3480156104f357600080fd5b506019546102d890600160a81b900460ff1681565b34801561051457600080fd5b50610374600f5481565b34801561052a57600080fd5b50610308610539366004611f0b565b610d3e565b34801561054a57600080fd5b50610374610559366004611ead565b6001600160a01b031660009081526001602052604090205490565b34801561058057600080fd5b50610308610d4e565b34801561059557600080fd5b506103086105a4366004611ead565b610d62565b3480156105b557600080fd5b506103086105c4366004611e81565b611010565b3480156105d557600080fd5b506102d86105e4366004611ead565b60036020526000908152604090205460ff1681565b34801561060557600080fd5b50610308610614366004611f2d565b6110b9565b34801561062557600080fd5b50610308610634366004611e81565b6110dd565b34801561064557600080fd5b506000546001600160a01b031661034b565b34801561066357600080fd5b5061037460115481565b34801561067957600080fd5b50610308610688366004611f50565b61117e565b34801561069957600080fd5b506102a26111b1565b3480156106ae57600080fd5b506102d86106bd366004611e81565b6111c0565b3480156106ce57600080fd5b506019546102d890600160b01b900460ff1681565b3480156106ef57600080fd5b506103086106fe366004611f8a565b61120f565b34801561070f57600080fd5b506102d861071e366004611e81565b611235565b34801561072f57600080fd5b5061030861073e366004611ead565b611242565b34801561074f57600080fd5b5061030861075e366004611ead565b611284565b34801561076f57600080fd5b5061030861077e366004611ead565b6112c6565b34801561078f57600080fd5b5061037461079e366004611fa7565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107d557600080fd5b506103086107e4366004611fe0565b6112f0565b3480156107f557600080fd5b5061037460175481565b34801561080b57600080fd5b5060065461034b906001600160a01b031681565b34801561082b57600080fd5b5061030861083a366004611ead565b611389565b34801561084b57600080fd5b5061030861085a366004611ead565b6113b2565b34801561086b57600080fd5b5061030861087a366004611f8a565b61142b565b60606007805461088e90611ff9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90611ff9565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061091e33848461148b565b5060015b92915050565b61093061154c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190612033565b601980546001600160a01b039283166001600160a01b0319918216179091556018805493909216921691909117905550565b6000610ab88484846115a6565b610b0a8433610b058560405180606001604052806028815260200161220b602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061171f565b61148b565b5060019392505050565b610b1c61154c565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000610b6061154c565b306001600160a01b03851603610bbd5760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742072656d6f7665206e617469766520746f6b656e000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c289190612050565b905080831115610c36578092505b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190612069565b95945050505050565b610cba61154c565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161091e918590610b05908661174b565b610d1a61154c565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610d4661154c565b600f55600e55565b610d5661154c565b610d60600061175e565b565b610d6a61154c565b601954600160b01b900460ff1615610d8157600080fd5b6019805460ff60b01b1916600160b01b1790556040805163c45a015560e01b8152905182916001600160a01b0383169163c45a0155916004808201926020929091908290030181865afa158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e009190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190612033565b601980546001600160a01b039283166001600160a01b03199182161790915560188054928416929091168217905530600081815260016020526040902054914791610f2d918461148b565b6018546001600160a01b031663f305d719823085808333610f504261070861209c565b6040518863ffffffff1660e01b8152600401610f71969594939291906120af565b60606040518083038185885af1158015610f8f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fb491906120ea565b5050601954604080513081526001600160a01b0390921660208301528101849052606081018390527f6059b39ae02bb6d64c653bc7dc67f2d0108e9cfa6c9f254c3af163640bc14f28915060800160405180910390a150505050565b6006546001600160a01b0316331461102757600080fd5b6001600160a01b03821660009081526001602052604090205461104a90826117ae565b6001600160a01b038316600090815260016020526040902055600a5461107090826117ae565b600a556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6110c161154c565b600c805460ff9092166101000261ff0019909216919091179055565b6006546001600160a01b031633146110f457600080fd5b6001600160a01b038216600090815260016020526040902054611117908261174b565b6001600160a01b038316600090815260016020526040902055600a5461113d908261174b565b600a556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016110ad565b61118661154c565b6010839055601182905560128190556111a9816111a3858561174b565b9061174b565b601355505050565b60606008805461088e90611ff9565b600061091e3384610b0585604051806060016040528060258152602001612233602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061171f565b61121761154c565b60198054911515600160b81b0260ff60b81b19909216919091179055565b600061091e3384846115a6565b61124a61154c565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b61128c61154c565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6112ce61154c565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6112f861154c565b601954600160a01b900460ff16156113525760405162461bcd60e51b815260206004820181905260248201527f43757272656e746c792070726f63657373696e672c20747279206c617465722e6044820152606401610bb4565b3060009081526001602052604081205490606461136f8484612118565b611379919061212f565b9050611384816117ba565b505050565b61139161154c565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6113ba61154c565b6001600160a01b03811661141f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b6114288161175e565b50565b61143361154c565b60198054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061148090831515815260200190565b60405180910390a150565b6001600160a01b038316158015906114ab57506001600160a01b03821615155b6114eb5760405162461bcd60e51b81526020600482015260116024820152704552523a207a65726f206164647265737360781b6044820152606401610bb4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bb4565b600c5460ff610100820481169116108015906115cc5750601954600160a01b900460ff16155b80156115e557506019546001600160a01b038381169116145b80156115fa5750601954600160a81b900460ff165b1561163957600c805460ff191690553060009081526001602052604090205460175481111561162857506017545b801561163757611637816117ba565b505b6001600160a01b03831660009081526003602052604090205460019060ff168061167b57506001600160a01b03831660009081526003602052604090205460ff165b806116c25750601954600160b81b900460ff1680156116a857506019546001600160a01b03858116911614155b80156116c257506019546001600160a01b03848116911614155b156116cf5750600061170d565b6019546001600160a01b03908116908516036116f057600e54600d5561170d565b6019546001600160a01b039081169084160361170d57600f54600d555b611719848484846119ea565b50505050565b600081848411156117435760405162461bcd60e51b8152600401610bb49190611e1e565b505050900390565b6000611757828461209c565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006117578284612151565b6019805460ff60a01b1916600160a01b1790556013546010546000916117f0916002916117ea9182908790611a50565b90611a5c565b905060006117fe83836117ae565b905061180981611a68565b604080518281524760208201819052917f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1600061186861185f6002601054611a5c90919063ffffffff16565b601354906117ae565b9050600061188a60026117ea846117ea60105488611a5090919063ffffffff16565b905060006118a7836117ea60115487611a5090919063ffffffff16565b905060006118bf826118b987866117ae565b906117ae565b9050821561190d576118d18784611bc2565b505060408051888152602081018590527f6e500010cf745ca08b8ba2c0086153fc3f608a44464334aaa6528b28b720c546910160405180910390a15b811561197057600554611929906001600160a01b031683611c7f565b600554604080516001600160a01b039092168252602082018490527f4d8231c76dd338af8b275ae59e1591f03f77c39feb78606f6ca7a6099e589597910160405180910390a15b80156119d35760045461198c906001600160a01b031682611c7f565b600454604080516001600160a01b039092168252602082018390527f19bb39aae0d5db58582d17592eb53aa5301ac156a83b2edd05b74403e3b693a8910160405180910390a15b50506019805460ff60a01b19169055505050505050565b806119fc576119f7611cb5565b611a29565b600c805460ff16906000611a0f83612164565b91906101000a81548160ff021916908360ff160217905550505b611a34848484611cfa565b8061171957611719601454600d55601554600e55601654600f55565b60006117578284612118565b6000611757828461212f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9d57611a9d612183565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190612033565b81600181518110611b2d57611b2d612183565b6001600160a01b039283166020918202929092010152601854611b53913091168461148b565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b8c908590600090869030904290600401612199565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050505050565b6018546000908190611bdf9030906001600160a01b03168661148b565b60185460009081906001600160a01b031663f305d7198630898580611c0c6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611c2e969594939291906120af565b60606040518083038185885af1158015611c4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c7191906120ea565b509097909650945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611384573d6000803e3d6000fd5b600d54158015611cc55750600e54155b8015611cd15750600f54155b15611cd857565b600e8054601555600f8054601655600d80546014556000928390559082905555565b600080611d0683611de6565b6001600160a01b0387166000908152600160205260409020549193509150611d2e90846117ae565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611d5d908361174b565b6001600160a01b038516600090815260016020526040808220929092553081522054611d89908261174b565b3060009081526001602090815260409182902092909255518381526001600160a01b0386811692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050565b60008060006064600d5485611dfb9190612118565b611e05919061212f565b90506000611e1385836117ae565b959194509092505050565b600060208083528351808285015260005b81811015611e4b57858101830151858201604001528201611e2f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461142857600080fd5b60008060408385031215611e9457600080fd5b8235611e9f81611e6c565b946020939093013593505050565b600060208284031215611ebf57600080fd5b813561175781611e6c565b600080600060608486031215611edf57600080fd5b8335611eea81611e6c565b92506020840135611efa81611e6c565b929592945050506040919091013590565b60008060408385031215611f1e57600080fd5b50508035926020909101359150565b600060208284031215611f3f57600080fd5b813560ff8116811461175757600080fd5b600080600060608486031215611f6557600080fd5b505081359360208301359350604090920135919050565b801515811461142857600080fd5b600060208284031215611f9c57600080fd5b813561175781611f7c565b60008060408385031215611fba57600080fd5b8235611fc581611e6c565b91506020830135611fd581611e6c565b809150509250929050565b600060208284031215611ff257600080fd5b5035919050565b600181811c9082168061200d57607f821691505b60208210810361202d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561204557600080fd5b815161175781611e6c565b60006020828403121561206257600080fd5b5051919050565b60006020828403121561207b57600080fd5b815161175781611f7c565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092257610922612086565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156120ff57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761092257610922612086565b60008261214c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092257610922612086565b600060ff821660ff810361217a5761217a612086565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121e95784516001600160a01b0316835293830193918301916001016121c4565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec795346660535d7c836921003d6d52641c9a0f014975436358df4cb9c0c67f564736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80637231d2171161014f578063a514a07d116100c1578063ddbf52661161007a578063ddbf5266146107c9578063e06bd4a5146107e9578063e8fb57fb146107ff578063ea2f0b371461081f578063f2fde38b1461083f578063f7739b5f1461085f57600080fd5b8063a514a07d146106e3578063a9059cbb14610703578063c2cb11f614610723578063c5e3869214610743578063d785d5be14610763578063dd62ed3e1461078357600080fd5b80638da5cb5b116101135780638da5cb5b14610639578063904288121461065757806394cb2e521461066d57806395d89b411461068d578063a457c2d7146106a2578063a4620d0f146106c257600080fd5b80637231d2171461058957806374f4f547146105a9578063768dc710146105c95780637caefa89146105f95780638c2a993e1461061957600080fd5b806336b1a1bc116101f357806349bd5a5e116101ac57806349bd5a5e146104c75780634a74bb02146104e7578063590f897e1461050857806367cbd84c1461051e57806370a082311461053e578063715018a61461057457600080fd5b806336b1a1bc1461042557806339509351146104455780633ad868101461046557806340b9a54b1461047b57806340db65f614610491578063437823ec146104a757600080fd5b806318160ddd1161024557806318160ddd14610363578063220f66961461038257806323b872dd146103a357806327b5e1a0146103c3578063313ce567146103e35780633343ab831461040557600080fd5b806306fdde031461028d578063095ea7b3146102b85780631282a0a0146102e857806313fad07a1461030a5780631694505e1461032b57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261087f565b6040516102af9190611e1e565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004611e81565b610911565b60405190151581526020016102af565b3480156102f457600080fd5b50610308610303366004611ead565b610928565b005b34801561031657600080fd5b506019546102d890600160b81b900460ff1681565b34801561033757600080fd5b5060185461034b906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561036f57600080fd5b50600a545b6040519081526020016102af565b34801561038e57600080fd5b506019546102d890600160a01b900460ff1681565b3480156103af57600080fd5b506102d86103be366004611eca565b610aab565b3480156103cf57600080fd5b506103086103de366004611ead565b610b14565b3480156103ef57600080fd5b5060095460405160ff90911681526020016102af565b34801561041157600080fd5b506102d8610420366004611eca565b610b56565b34801561043157600080fd5b50610308610440366004611ead565b610cb2565b34801561045157600080fd5b506102d8610460366004611e81565b610cdc565b34801561047157600080fd5b5061037460125481565b34801561048757600080fd5b50610374600e5481565b34801561049d57600080fd5b5061037460105481565b3480156104b357600080fd5b506103086104c2366004611ead565b610d12565b3480156104d357600080fd5b5060195461034b906001600160a01b031681565b3480156104f357600080fd5b506019546102d890600160a81b900460ff1681565b34801561051457600080fd5b50610374600f5481565b34801561052a57600080fd5b50610308610539366004611f0b565b610d3e565b34801561054a57600080fd5b50610374610559366004611ead565b6001600160a01b031660009081526001602052604090205490565b34801561058057600080fd5b50610308610d4e565b34801561059557600080fd5b506103086105a4366004611ead565b610d62565b3480156105b557600080fd5b506103086105c4366004611e81565b611010565b3480156105d557600080fd5b506102d86105e4366004611ead565b60036020526000908152604090205460ff1681565b34801561060557600080fd5b50610308610614366004611f2d565b6110b9565b34801561062557600080fd5b50610308610634366004611e81565b6110dd565b34801561064557600080fd5b506000546001600160a01b031661034b565b34801561066357600080fd5b5061037460115481565b34801561067957600080fd5b50610308610688366004611f50565b61117e565b34801561069957600080fd5b506102a26111b1565b3480156106ae57600080fd5b506102d86106bd366004611e81565b6111c0565b3480156106ce57600080fd5b506019546102d890600160b01b900460ff1681565b3480156106ef57600080fd5b506103086106fe366004611f8a565b61120f565b34801561070f57600080fd5b506102d861071e366004611e81565b611235565b34801561072f57600080fd5b5061030861073e366004611ead565b611242565b34801561074f57600080fd5b5061030861075e366004611ead565b611284565b34801561076f57600080fd5b5061030861077e366004611ead565b6112c6565b34801561078f57600080fd5b5061037461079e366004611fa7565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107d557600080fd5b506103086107e4366004611fe0565b6112f0565b3480156107f557600080fd5b5061037460175481565b34801561080b57600080fd5b5060065461034b906001600160a01b031681565b34801561082b57600080fd5b5061030861083a366004611ead565b611389565b34801561084b57600080fd5b5061030861085a366004611ead565b6113b2565b34801561086b57600080fd5b5061030861087a366004611f8a565b61142b565b60606007805461088e90611ff9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90611ff9565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061091e33848461148b565b5060015b92915050565b61093061154c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190612033565b601980546001600160a01b039283166001600160a01b0319918216179091556018805493909216921691909117905550565b6000610ab88484846115a6565b610b0a8433610b058560405180606001604052806028815260200161220b602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061171f565b61148b565b5060019392505050565b610b1c61154c565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000610b6061154c565b306001600160a01b03851603610bbd5760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742072656d6f7665206e617469766520746f6b656e000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c289190612050565b905080831115610c36578092505b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190612069565b95945050505050565b610cba61154c565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161091e918590610b05908661174b565b610d1a61154c565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610d4661154c565b600f55600e55565b610d5661154c565b610d60600061175e565b565b610d6a61154c565b601954600160b01b900460ff1615610d8157600080fd5b6019805460ff60b01b1916600160b01b1790556040805163c45a015560e01b8152905182916001600160a01b0383169163c45a0155916004808201926020929091908290030181865afa158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e009190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190612033565b601980546001600160a01b039283166001600160a01b03199182161790915560188054928416929091168217905530600081815260016020526040902054914791610f2d918461148b565b6018546001600160a01b031663f305d719823085808333610f504261070861209c565b6040518863ffffffff1660e01b8152600401610f71969594939291906120af565b60606040518083038185885af1158015610f8f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fb491906120ea565b5050601954604080513081526001600160a01b0390921660208301528101849052606081018390527f6059b39ae02bb6d64c653bc7dc67f2d0108e9cfa6c9f254c3af163640bc14f28915060800160405180910390a150505050565b6006546001600160a01b0316331461102757600080fd5b6001600160a01b03821660009081526001602052604090205461104a90826117ae565b6001600160a01b038316600090815260016020526040902055600a5461107090826117ae565b600a556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6110c161154c565b600c805460ff9092166101000261ff0019909216919091179055565b6006546001600160a01b031633146110f457600080fd5b6001600160a01b038216600090815260016020526040902054611117908261174b565b6001600160a01b038316600090815260016020526040902055600a5461113d908261174b565b600a556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016110ad565b61118661154c565b6010839055601182905560128190556111a9816111a3858561174b565b9061174b565b601355505050565b60606008805461088e90611ff9565b600061091e3384610b0585604051806060016040528060258152602001612233602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061171f565b61121761154c565b60198054911515600160b81b0260ff60b81b19909216919091179055565b600061091e3384846115a6565b61124a61154c565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b61128c61154c565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6112ce61154c565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6112f861154c565b601954600160a01b900460ff16156113525760405162461bcd60e51b815260206004820181905260248201527f43757272656e746c792070726f63657373696e672c20747279206c617465722e6044820152606401610bb4565b3060009081526001602052604081205490606461136f8484612118565b611379919061212f565b9050611384816117ba565b505050565b61139161154c565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6113ba61154c565b6001600160a01b03811661141f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b6114288161175e565b50565b61143361154c565b60198054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061148090831515815260200190565b60405180910390a150565b6001600160a01b038316158015906114ab57506001600160a01b03821615155b6114eb5760405162461bcd60e51b81526020600482015260116024820152704552523a207a65726f206164647265737360781b6044820152606401610bb4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bb4565b600c5460ff610100820481169116108015906115cc5750601954600160a01b900460ff16155b80156115e557506019546001600160a01b038381169116145b80156115fa5750601954600160a81b900460ff165b1561163957600c805460ff191690553060009081526001602052604090205460175481111561162857506017545b801561163757611637816117ba565b505b6001600160a01b03831660009081526003602052604090205460019060ff168061167b57506001600160a01b03831660009081526003602052604090205460ff165b806116c25750601954600160b81b900460ff1680156116a857506019546001600160a01b03858116911614155b80156116c257506019546001600160a01b03848116911614155b156116cf5750600061170d565b6019546001600160a01b03908116908516036116f057600e54600d5561170d565b6019546001600160a01b039081169084160361170d57600f54600d555b611719848484846119ea565b50505050565b600081848411156117435760405162461bcd60e51b8152600401610bb49190611e1e565b505050900390565b6000611757828461209c565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006117578284612151565b6019805460ff60a01b1916600160a01b1790556013546010546000916117f0916002916117ea9182908790611a50565b90611a5c565b905060006117fe83836117ae565b905061180981611a68565b604080518281524760208201819052917f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1600061186861185f6002601054611a5c90919063ffffffff16565b601354906117ae565b9050600061188a60026117ea846117ea60105488611a5090919063ffffffff16565b905060006118a7836117ea60115487611a5090919063ffffffff16565b905060006118bf826118b987866117ae565b906117ae565b9050821561190d576118d18784611bc2565b505060408051888152602081018590527f6e500010cf745ca08b8ba2c0086153fc3f608a44464334aaa6528b28b720c546910160405180910390a15b811561197057600554611929906001600160a01b031683611c7f565b600554604080516001600160a01b039092168252602082018490527f4d8231c76dd338af8b275ae59e1591f03f77c39feb78606f6ca7a6099e589597910160405180910390a15b80156119d35760045461198c906001600160a01b031682611c7f565b600454604080516001600160a01b039092168252602082018390527f19bb39aae0d5db58582d17592eb53aa5301ac156a83b2edd05b74403e3b693a8910160405180910390a15b50506019805460ff60a01b19169055505050505050565b806119fc576119f7611cb5565b611a29565b600c805460ff16906000611a0f83612164565b91906101000a81548160ff021916908360ff160217905550505b611a34848484611cfa565b8061171957611719601454600d55601554600e55601654600f55565b60006117578284612118565b6000611757828461212f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9d57611a9d612183565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190612033565b81600181518110611b2d57611b2d612183565b6001600160a01b039283166020918202929092010152601854611b53913091168461148b565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b8c908590600090869030904290600401612199565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050505050565b6018546000908190611bdf9030906001600160a01b03168661148b565b60185460009081906001600160a01b031663f305d7198630898580611c0c6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611c2e969594939291906120af565b60606040518083038185885af1158015611c4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c7191906120ea565b509097909650945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611384573d6000803e3d6000fd5b600d54158015611cc55750600e54155b8015611cd15750600f54155b15611cd857565b600e8054601555600f8054601655600d80546014556000928390559082905555565b600080611d0683611de6565b6001600160a01b0387166000908152600160205260409020549193509150611d2e90846117ae565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611d5d908361174b565b6001600160a01b038516600090815260016020526040808220929092553081522054611d89908261174b565b3060009081526001602090815260409182902092909255518381526001600160a01b0386811692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050565b60008060006064600d5485611dfb9190612118565b611e05919061212f565b90506000611e1385836117ae565b959194509092505050565b600060208083528351808285015260005b81811015611e4b57858101830151858201604001528201611e2f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461142857600080fd5b60008060408385031215611e9457600080fd5b8235611e9f81611e6c565b946020939093013593505050565b600060208284031215611ebf57600080fd5b813561175781611e6c565b600080600060608486031215611edf57600080fd5b8335611eea81611e6c565b92506020840135611efa81611e6c565b929592945050506040919091013590565b60008060408385031215611f1e57600080fd5b50508035926020909101359150565b600060208284031215611f3f57600080fd5b813560ff8116811461175757600080fd5b600080600060608486031215611f6557600080fd5b505081359360208301359350604090920135919050565b801515811461142857600080fd5b600060208284031215611f9c57600080fd5b813561175781611f7c565b60008060408385031215611fba57600080fd5b8235611fc581611e6c565b91506020830135611fd581611e6c565b809150509250929050565b600060208284031215611ff257600080fd5b5035919050565b600181811c9082168061200d57607f821691505b60208210810361202d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561204557600080fd5b815161175781611e6c565b60006020828403121561206257600080fd5b5051919050565b60006020828403121561207b57600080fd5b815161175781611f7c565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092257610922612086565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156120ff57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761092257610922612086565b60008261214c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092257610922612086565b600060ff821660ff810361217a5761217a612086565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121e95784516001600160a01b0316835293830193918301916001016121c4565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec795346660535d7c836921003d6d52641c9a0f014975436358df4cb9c0c67f564736f6c63430008120033

Deployed Bytecode Sourcemap

17091:18777:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21007:161;;;;;;;;;;-1:-1:-1;21007:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;21007:161:0;1023:187:1;33901:342:0;;;;;;;;;;-1:-1:-1;33901:342:0;;;;;:::i;:::-;;:::i;:::-;;25113:34;;;;;;;;;;-1:-1:-1;25113:34:0;;;;-1:-1:-1;;;25113:34:0;;;;;;18759:41;;;;;;;;;;-1:-1:-1;18759:41:0;;;;-1:-1:-1;;;;;18759:41:0;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;18759:41:0;1467:230:1;20453:95:0;;;;;;;;;;-1:-1:-1;20533:7:0;;20453:95;;;1848:25:1;;;1836:2;1821:18;20453:95:0;1702:177:1;18844:28:0;;;;;;;;;;-1:-1:-1;18844:28:0;;;;-1:-1:-1;;;18844:28:0;;;;;;21176:313;;;;;;;;;;-1:-1:-1;21176:313:0;;;;;:::i;:::-;;:::i;24078:165::-;;;;;;;;;;-1:-1:-1;24078:165:0;;;;;:::i;:::-;;:::i;20362:83::-;;;;;;;;;;-1:-1:-1;20428:9:0;;20362:83;;20428:9;;;;2487:36:1;;2475:2;2460:18;20362:83:0;2345:184:1;32166:502:0;;;;;;;;;;-1:-1:-1;32166:502:0;;;;;:::i;:::-;;:::i;34277:207::-;;;;;;;;;;-1:-1:-1;34277:207:0;;;;;:::i;:::-;;:::i;21497:218::-;;;;;;;;;;-1:-1:-1;21497:218:0;;;;;:::i;:::-;;:::i;18185:36::-;;;;;;;;;;;;;;;;18011:26;;;;;;;;;;;;;;;;18105:34;;;;;;;;;;;;;;;;22640:111;;;;;;;;;;-1:-1:-1;22640:111:0;;;;;:::i;:::-;;:::i;18807:28::-;;;;;;;;;;-1:-1:-1;18807:28:0;;;;-1:-1:-1;;;;;18807:28:0;;;18879:40;;;;;;;;;;-1:-1:-1;18879:40:0;;;;-1:-1:-1;;;18879:40:0;;;;;;18044:27;;;;;;;;;;;;;;;;23047:145;;;;;;;;;;-1:-1:-1;23047:145:0;;;;;:::i;:::-;;:::i;20556:117::-;;;;;;;;;;-1:-1:-1;20556:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;20649:16:0;20622:7;20649:16;;;:7;:16;;;;;;;20556:117;8470:103;;;;;;;;;;;;;:::i;32800:969::-;;;;;;;;;;-1:-1:-1;32800:969:0;;;;;:::i;:::-;;:::i;22224:220::-;;;;;;;;;;-1:-1:-1;22224:220:0;;;;;:::i;:::-;;:::i;17371:51::-;;;;;;;;;;-1:-1:-1;17371:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24675:161;;;;;;;;;;-1:-1:-1;24675:161:0;;;;;:::i;:::-;;:::i;22000:212::-;;;;;;;;;;-1:-1:-1;22000:212:0;;;;;:::i;:::-;;:::i;7822:87::-;;;;;;;;;;-1:-1:-1;7868:7:0;7895:6;-1:-1:-1;;;;;7895:6:0;7822:87;;18146:32;;;;;;;;;;;;;;;;23204:369;;;;;;;;;;-1:-1:-1;23204:369:0;;;;;:::i;:::-;;:::i;20267:87::-;;;;;;;;;;;;;:::i;21723:269::-;;;;;;;;;;-1:-1:-1;21723:269:0;;;;;:::i;:::-;;:::i;18932:30::-;;;;;;;;;;-1:-1:-1;18932:30:0;;;;-1:-1:-1;;;18932:30:0;;;;;;25501:125;;;;;;;;;;-1:-1:-1;25501:125:0;;;;;:::i;:::-;;:::i;20681:167::-;;;;;;;;;;-1:-1:-1;20681:167:0;;;;;:::i;:::-;;:::i;23614:177::-;;;;;;;;;;-1:-1:-1;23614:177:0;;;;;:::i;:::-;;:::i;23837:203::-;;;;;;;;;;-1:-1:-1;23837:203:0;;;;;:::i;:::-;;:::i;34496:108::-;;;;;;;;;;-1:-1:-1;34496:108:0;;;;;:::i;:::-;;:::i;20856:143::-;;;;;;;;;;-1:-1:-1;20856:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20964:18:0;;;20937:7;20964:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20856:143;30894:479;;;;;;;;;;-1:-1:-1;30894:479:0;;;;;:::i;:::-;;:::i;18616:51::-;;;;;;;;;;;;;;;;17566:31;;;;;;;;;;-1:-1:-1;17566:31:0;;;;-1:-1:-1;;;;;17566:31:0;;;22831:110;;;;;;;;;;-1:-1:-1;22831:110:0;;;;;:::i;:::-;;:::i;8728:201::-;;;;;;;;;;-1:-1:-1;8728:201:0;;;;;:::i;:::-;;:::i;24373:190::-;;;;;;;;;;-1:-1:-1;24373:190:0;;;;;:::i;:::-;;:::i;20176:83::-;20213:13;20246:5;20239:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:83;:::o;21007:161::-;21082:4;21099:39;3227:10;21122:7;21131:6;21099:8;:39::i;:::-;-1:-1:-1;21156:4:0;21007:161;;;;;:::o;33901:342::-;7708:13;:11;:13::i;:::-;33988:38:::1;34048:9;33988:70;;34103:19;-1:-1:-1::0;;;;;34103:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34085:59:0::1;;34153:4;34160:19;-1:-1:-1::0;;;;;34160:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34085:102;::::0;-1:-1:-1;;;;;;34085:102:0::1;::::0;;;;;;-1:-1:-1;;;;;5668:15:1;;;34085:102:0::1;::::0;::::1;5650:34:1::0;5720:15;;5700:18;;;5693:43;5585:18;;34085:102:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34069:13;:118:::0;;-1:-1:-1;;;;;34069:118:0;;::::1;-1:-1:-1::0;;;;;;34069:118:0;;::::1;;::::0;;;34198:15:::1;:37:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33901:342:0:o;21176:313::-;21274:4;21291:36;21301:6;21309:9;21320:6;21291:9;:36::i;:::-;21338:121;21347:6;3227:10;21369:89;21407:6;21369:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21369:19:0;;;;;;:11;:19;;;;;;;;3227:10;21369:33;;;;;;;;;;:37;:89::i;:::-;21338:8;:121::i;:::-;-1:-1:-1;21477:4:0;21176:313;;;;;:::o;24078:165::-;7708:13;:11;:13::i;:::-;24153:16:::1;:32:::0;;-1:-1:-1;;;;;24153:32:0;;::::1;-1:-1:-1::0;;;;;;24153:32:0;;::::1;::::0;::::1;::::0;;:16:::1;24195:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;24195:40:0::1;24153:32:::0;24195:40:::1;::::0;;24078:165::o;32166:502::-;32301:10;7708:13;:11;:13::i;:::-;32363:4:::1;-1:-1:-1::0;;;;;32331:37:0;::::1;::::0;32323:77:::1;;;::::0;-1:-1:-1;;;32323:77:0;;5949:2:1;32323:77:0::1;::::0;::::1;5931:21:1::0;5988:2;5968:18;;;5961:30;6027:29;6007:18;;;6000:57;6074:18;;32323:77:0::1;;;;;;;;;32435:53;::::0;-1:-1:-1;;;32435:53:0;;32482:4:::1;32435:53;::::0;::::1;1640:51:1::0;32411:21:0::1;::::0;-1:-1:-1;;;;;32435:38:0;::::1;::::0;::::1;::::0;1613:18:1;;32435:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32411:77;;32522:13;32503:16;:32;32499:72;;;32556:13;32537:32;;32499:72;32589:71;::::0;-1:-1:-1;;;32589:71:0;;-1:-1:-1;;;;;6484:32:1;;;32589:71:0::1;::::0;::::1;6466:51:1::0;6533:18;;;6526:34;;;32589:37:0;::::1;::::0;::::1;::::0;6439:18:1;;32589:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32581:79:::0;32166:502;-1:-1:-1;;;;;32166:502:0:o;34277:207::-;7708:13;:11;:13::i;:::-;34439:15:::1;:37:::0;;-1:-1:-1;;;;;;34439:37:0::1;-1:-1:-1::0;;;;;34439:37:0;;;::::1;::::0;;;::::1;::::0;;34277:207::o;21497:218::-;3227:10;21585:4;21634:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21634:34:0;;;;;;;;;;21585:4;;21602:83;;21625:7;;21634:50;;21673:10;21634:38;:50::i;22640:111::-;7708:13;:11;:13::i;:::-;-1:-1:-1;;;;;22709:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22709:34:0::1;22739:4;22709:34;::::0;;22640:111::o;23047:145::-;7708:13;:11;:13::i;:::-;23135:8:::1;:19:::0;23165:7:::1;:17:::0;23047:145::o;8470:103::-;7708:13;:11;:13::i;:::-;8535:30:::1;8562:1;8535:18;:30::i;:::-;8470:103::o:0;32800:969::-;7708:13;:11;:13::i;:::-;32877:18:::1;::::0;-1:-1:-1;;;32877:18:0;::::1;;;32876:19;32868:28;;;::::0;::::1;;32907:18;:25:::0;;-1:-1:-1;;;;32907:25:0::1;-1:-1:-1::0;;;32907:25:0::1;::::0;;33055:29:::1;::::0;;-1:-1:-1;;;33055:29:0;;;;33003:6;;-1:-1:-1;;;;;33055:27:0;::::1;::::0;::::1;::::0;:29:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:27;:29:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33037:59:0::1;;33105:4;33112:19;-1:-1:-1::0;;;;;33112:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33037:102;::::0;-1:-1:-1;;;;;;33037:102:0::1;::::0;;;;;;-1:-1:-1;;;;;5668:15:1;;;33037:102:0::1;::::0;::::1;5650:34:1::0;5720:15;;5700:18;;;5693:43;5585:18;;33037:102:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33021:13;:118:::0;;-1:-1:-1;;;;;33021:118:0;;::::1;-1:-1:-1::0;;;;;;33021:118:0;;::::1;;::::0;;;33150:15:::1;:37:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;33254:4:::1;-1:-1:-1::0;20649:16:0;;;-1:-1:-1;20649:16:0;;;;;;;33297:21:::1;::::0;33329:68:::1;::::0;20649:16;33329:8:::1;:68::i;:::-;33410:15;::::0;-1:-1:-1;;;;;33410:15:0::1;:31;33449:15:::0;33488:4:::1;33508:17:::0;;33449:15;33602:10:::1;33627:20;:15;33643:4;33627:20;:::i;:::-;33410:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;33713:13:0::1;::::0;33684:77:::1;::::0;;33707:4:::1;8259:34:1::0;;-1:-1:-1;;;;;33713:13:0;;::::1;8324:2:1::0;8309:18;;8302:43;8361:18;;8354:34;;;8419:2;8404:18;;8397:34;;;33684:77:0::1;::::0;-1:-1:-1;8208:3:1;8193:19;33684:77:0::1;;;;;;;32857:912;;;32800:969:::0;:::o;22224:220::-;19897:16;;-1:-1:-1;;;;;19897:16:0;19883:10;:30;19875:39;;;;;;-1:-1:-1;;;;;22321:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;:25:::1;::::0;22339:6;22321:17:::1;:25::i;:::-;-1:-1:-1::0;;;;;22305:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:41;22367:7:::1;::::0;:19:::1;::::0;22379:6;22367:11:::1;:19::i;:::-;22357:7;:29:::0;22402:34:::1;::::0;1848:25:1;;;22425:1:0::1;::::0;-1:-1:-1;;;;;22402:34:0;::::1;::::0;::::1;::::0;1836:2:1;1821:18;22402:34:0::1;;;;;;;;22224:220:::0;;:::o;24675:161::-;7708:13;:11;:13::i;:::-;24792:11:::1;:36:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;24792:36:0;;::::1;::::0;;;::::1;::::0;;24675:161::o;22000:212::-;19897:16;;-1:-1:-1;;;;;19897:16:0;19883:10;:30;19875:39;;;;;;-1:-1:-1;;;;;22093:11:0;::::1;;::::0;;;:7:::1;:11;::::0;;;;;:23:::1;::::0;22109:6;22093:15:::1;:23::i;:::-;-1:-1:-1::0;;;;;22079:11:0;::::1;;::::0;;;:7:::1;:11;::::0;;;;:37;22137:7:::1;::::0;:19:::1;::::0;22149:6;22137:11:::1;:19::i;:::-;22127:7;:29:::0;22172:32:::1;::::0;1848:25:1;;;-1:-1:-1;;;;;22172:32:0;::::1;::::0;22189:1:::1;::::0;22172:32:::1;::::0;1836:2:1;1821:18;22172:32:0::1;1702:177:1::0;23204:369:0;7708:13;:11;:13::i;:::-;23351:12:::1;:32:::0;;;23395:10:::1;:28:::0;;;23435:14:::1;:36:::0;;;23515:48:::1;23452:19:::0;23515:28:::1;23366:17:::0;23408:15;23515:16:::1;:28::i;:::-;:32:::0;::::1;:48::i;:::-;23489:23;:74:::0;-1:-1:-1;;;23204:369:0:o;20267:87::-;20306:13;20339:7;20332:14;;;;;:::i;21723:269::-;21816:4;21833:129;3227:10;21856:7;21865:96;21904:15;21865:96;;;;;;;;;;;;;;;;;3227:10;21865:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21865:34:0;;;;;;;;;;;;:38;:96::i;25501:125::-;7708:13;:11;:13::i;:::-;25587:15:::1;:31:::0;;;::::1;;-1:-1:-1::0;;;25587:31:0::1;-1:-1:-1::0;;;;25587:31:0;;::::1;::::0;;;::::1;::::0;;25501:125::o;20681:167::-;20759:4;20776:42;3227:10;20800:9;20811:6;20776:9;:42::i;23614:177::-;7708:13;:11;:13::i;:::-;23707:7:::1;:24:::0;;-1:-1:-1;;;;;23707:24:0;;::::1;-1:-1:-1::0;;;;;;23707:24:0;;::::1;::::0;::::1;::::0;;:7:::1;23742:34:::0;;;:18:::1;:34;::::0;;;;:41;;-1:-1:-1;;23742:41:0::1;23707:24:::0;23742:41:::1;::::0;;23614:177::o;23837:203::-;7708:13;:11;:13::i;:::-;23938:17:::1;:38:::0;;-1:-1:-1;;;;;23938:38:0;;::::1;-1:-1:-1::0;;;;;;23938:38:0;;::::1;::::0;::::1;::::0;;:17:::1;23987:38:::0;;;:18:::1;:38;::::0;;;;:45;;-1:-1:-1;;23987:45:0::1;23938:38:::0;23987:45:::1;::::0;;23837:203::o;34496:108::-;7708:13;:11;:13::i;:::-;34573::::1;:23:::0;;-1:-1:-1;;;;;;34573:23:0::1;-1:-1:-1::0;;;;;34573:23:0;;;::::1;::::0;;;::::1;::::0;;34496:108::o;30894:479::-;7708:13;:11;:13::i;:::-;31044:16:::1;::::0;-1:-1:-1;;;31044:16:0;::::1;;;31043:17;31035:62;;;::::0;-1:-1:-1;;;31035:62:0;;8644:2:1;31035:62:0::1;::::0;::::1;8626:21:1::0;;;8663:18;;;8656:30;8722:34;8702:18;;;8695:62;8774:18;;31035:62:0::1;8442:356:1::0;31035:62:0::1;31241:4;31196:24;20649:16:::0;;;:7;:16;;;;;;;31325:3:::1;31279:45;31296:28:::0;20649:16;31279:45:::1;:::i;:::-;:49;;;;:::i;:::-;31258:70;;31339:26;31354:10;31339:14;:26::i;:::-;30978:395;;30894:479:::0;:::o;22831:110::-;7708:13;:11;:13::i;:::-;-1:-1:-1;;;;;22898:27:0::1;22928:5;22898:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22898:35:0::1;::::0;;22831:110::o;8728:201::-;7708:13;:11;:13::i;:::-;-1:-1:-1;;;;;8817:22:0;::::1;8809:73;;;::::0;-1:-1:-1;;;8809:73:0;;9400:2:1;8809:73:0::1;::::0;::::1;9382:21:1::0;9439:2;9419:18;;;9412:30;9478:34;9458:18;;;9451:62;-1:-1:-1;;;9529:18:1;;;9522:36;9575:19;;8809:73:0::1;9198:402:1::0;8809:73:0::1;8893:28;8912:8;8893:18;:28::i;:::-;8728:201:::0;:::o;24373:190::-;7708:13;:11;:13::i;:::-;24459:21:::1;:37:::0;;;::::1;;-1:-1:-1::0;;;24459:37:0::1;-1:-1:-1::0;;;;24459:37:0;;::::1;;::::0;;24512:43:::1;::::0;::::1;::::0;::::1;::::0;24483:13;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;24512:43:0::1;;;;;;;;24373:190:::0;:::o;26550:266::-;-1:-1:-1;;;;;26645:19:0;;;;;;:44;;-1:-1:-1;;;;;;26668:21:0;;;;26645:44;26637:74;;;;-1:-1:-1;;;26637:74:0;;9807:2:1;26637:74:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;9865:18:1;;;9858:47;9922:18;;26637:74:0;9605:341:1;26637:74:0;-1:-1:-1;;;;;26722:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26774:32;;1848:25:1;;;26774:32:0;;1821:18:1;26774:32:0;;;;;;;26550:266;;;:::o;7987:132::-;7868:7;7895:6;-1:-1:-1;;;;;7895:6:0;3227:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;10153:2:1;8043:68:0;;;10135:21:1;;;10172:18;;;10165:30;10231:34;10211:18;;;10204:62;10283:18;;8043:68:0;9951:356:1;26824:1434:0;27147:11;;;;;;;;27136:7;;:22;;;;:57;;-1:-1:-1;27177:16:0;;-1:-1:-1;;;27177:16:0;;;;27176:17;27136:57;:93;;;;-1:-1:-1;27216:13:0;;-1:-1:-1;;;;;27210:19:0;;;27216:13;;27210:19;27136:93;:131;;;;-1:-1:-1;27246:21:0;;-1:-1:-1;;;27246:21:0;;;;27136:131;27119:499;;;27324:7;:11;;-1:-1:-1;;27324:11:0;;;27399:4;-1:-1:-1;20649:16:0;;;-1:-1:-1;20649:16:0;;;;;;27446:14;;27423:37;;27420:82;;;-1:-1:-1;27486:14:0;;27420:82;27519:24;;27516:91;;27559:36;27574:20;27559:14;:36::i;:::-;27293:325;27119:499;-1:-1:-1;;;;;27923:24:0;;27879:12;27923:24;;;:18;:24;;;;;;27894:4;;27923:24;;;:50;;-1:-1:-1;;;;;;27951:22:0;;;;;;:18;:22;;;;;;;;27923:50;:119;;;-1:-1:-1;27978:15:0;;-1:-1:-1;;;27978:15:0;;;;:40;;;;-1:-1:-1;28005:13:0;;-1:-1:-1;;;;;27997:21:0;;;28005:13;;27997:21;;27978:40;:63;;;;-1:-1:-1;28028:13:0;;-1:-1:-1;;;;;28022:19:0;;;28028:13;;28022:19;;27978:63;27920:272;;;-1:-1:-1;28068:5:0;27920:272;;;28103:13;;-1:-1:-1;;;;;28103:13:0;;;28095:21;;;;28091:101;;28130:7;;28118:9;:19;28091:101;;;28155:13;;-1:-1:-1;;;;;28155:13:0;;;28149:19;;;;28145:47;;28182:8;;28170:9;:20;28145:47;28212:38;28227:4;28232:2;28235:6;28242:7;28212:14;:38::i;:::-;26927:1331;26824:1434;;;:::o;2674:206::-;2760:7;2821:12;2813:6;;;;2805:29;;;;-1:-1:-1;;;2805:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2856:5:0;;;2674:206::o;2246:98::-;2304:7;2331:5;2335:1;2331;:5;:::i;:::-;2324:12;2246:98;-1:-1:-1;;;2246:98:0:o;9089:191::-;9163:16;9182:6;;-1:-1:-1;;;;;9199:17:0;;;-1:-1:-1;;;;;;9199:17:0;;;;;;9232:40;;9182:6;;;;;;;9232:40;;9163:16;9232:40;9152:128;9089:191;:::o;2352:98::-;2410:7;2437:5;2441:1;2437;:5;:::i;28662:1459::-;19686:16;:23;;-1:-1:-1;;;;19686:23:0;-1:-1:-1;;;19686:23:0;;;28822::::1;::::0;28804:12:::1;::::0;19686:23;;28779:74:::1;::::0;28851:1:::1;::::0;28779:67:::1;::::0;;;:20;;:24:::1;:38::i;:::-;:42:::0;::::1;:67::i;:74::-;28757:96:::0;-1:-1:-1;28864:20:0::1;28887:37;:20:::0;28757:96;28887:24:::1;:37::i;:::-;28864:60;;28937:33;28957:12;28937:19;:33::i;:::-;29061:42;::::0;;10619:25:1;;;29024:21:0::1;10675:2:1::0;10660:18;;10653:34;;;29024:21:0;29061:42:::1;::::0;10592:18:1;29061:42:0::1;;;;;;;29149:22;29174:48;29202:19;29219:1;29202:12;;:16;;:19;;;;:::i;:::-;29174:23;::::0;;:27:::1;:48::i;:::-;29149:73;;29241:26;29270:57;29325:1;29270:50;29305:14;29270:30;29287:12;;29270;:16;;:30;;;;:::i;:57::-;29241:86;;29338:24;29365:48;29398:14;29365:28;29382:10;;29365:12;:16;;:28;;;;:::i;:48::-;29338:75:::0;-1:-1:-1;29424:28:0::1;29455:58;29338:75:::0;29455:36:::1;:12:::0;29472:18;29455:16:::1;:36::i;:::-;:40:::0;::::1;:58::i;:::-;29424:89:::0;-1:-1:-1;29531:22:0;;29527:166:::1;;29570:45;29583:11;29596:18;29570:12;:45::i;:::-;-1:-1:-1::0;;29635:46:0::1;::::0;;10619:25:1;;;10675:2;10660:18;;10653:34;;;29635:46:0::1;::::0;10592:18:1;29635:46:0::1;;;;;;;29527:166;29718:20:::0;;29714:151:::1;;29769:7;::::0;29756:38:::1;::::0;-1:-1:-1;;;;;29769:7:0::1;29777:16:::0;29756:12:::1;:38::i;:::-;29826:7;::::0;29814:38:::1;::::0;;-1:-1:-1;;;;;29826:7:0;;::::1;6466:51:1::0;;6548:2;6533:18;;6526:34;;;29814:38:0::1;::::0;6439:18:1;29814:38:0::1;;;;;;;29714:151;29905:24:::0;;29901:187:::1;;29960:17;::::0;29947:52:::1;::::0;-1:-1:-1;;;;;29960:17:0::1;29978:20:::0;29947:12:::1;:52::i;:::-;30035:17;::::0;30019:56:::1;::::0;;-1:-1:-1;;;;;30035:17:0;;::::1;6466:51:1::0;;6548:2;6533:18;;6526:34;;;30019:56:0::1;::::0;6439:18:1;30019:56:0::1;;;;;;;29901:187;-1:-1:-1::0;;19732:16:0;:24;;-1:-1:-1;;;;19732:24:0;;;-1:-1:-1;;;;;;28662:1459:0:o;34709:360::-;34840:7;34836:107;;34863:14;:12;:14::i;:::-;34836:107;;;34918:7;:9;;;;;:7;:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34836:107;34957:42;34973:6;34981:9;34992:6;34957:15;:42::i;:::-;35024:7;35020:41;;35046:15;26405:17;;26393:9;:29;26439:15;;26429:7;:25;26473:16;;26462:8;:27;26347:153;2458:98;2516:7;2543:5;2547:1;2543;:5;:::i;2568:98::-;2626:7;2653:5;2657:1;2653;:5;:::i;31442:541::-;31541:16;;;31555:1;31541:16;;;;;;;;31517:21;;31541:16;;;;;;;;;;-1:-1:-1;31541:16:0;31517:40;;31586:4;31568;31573:1;31568:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31568:23:0;;;:7;;;;;;;;;;:23;;;;31612:15;;:22;;;-1:-1:-1;;;31612:22:0;;;;:15;;;;;:20;;:22;;;;;31568:7;;31612:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31602:4;31607:1;31602:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31602:32:0;;;:7;;;;;;;;;:32;31679:15;;31647:62;;31664:4;;31679:15;31697:11;31647:8;:62::i;:::-;31748:15;;:227;;-1:-1:-1;;;31748:227:0;;-1:-1:-1;;;;;31748:15:0;;;;:66;;:227;;31829:11;;31748:15;;31902:4;;31929;;31949:15;;31748:227;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31500:483;31442:541;:::o;30135:645::-;30345:15;;30217:7;;;;30313:62;;30330:4;;-1:-1:-1;;;;;30345:15:0;30363:11;30313:8;:62::i;:::-;30457:15;;30419:16;;;;-1:-1:-1;;;;;30457:15:0;:31;30496:12;30532:4;30552:11;30419:16;;30664:7;7868;7895:6;-1:-1:-1;;;;;7895:6:0;;7822:87;30664:7;30686:15;30457:255;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30418:294:0;;;;-1:-1:-1;30135:645:0;-1:-1:-1;;;;;30135:645:0:o;28492:120::-;28577:23;;-1:-1:-1;;;;;28577:15:0;;;:23;;;;;28593:6;;28577:23;;;;28593:6;28577:15;:23;;;;;;;;;;;;;;;;;;;26010:300;26056:9;;:14;:30;;;;-1:-1:-1;26074:7:0;;:12;26056:30;:47;;;;-1:-1:-1;26090:8:0;;:13;26056:47;26053:59;;;26010:300::o;26053:59::-;26144:7;;;26126:15;:25;26182:8;;;26163:16;:27;26222:9;;;26202:17;:29;-1:-1:-1;26242:11:0;;;;26264:12;;;;26287:13;26010:300::o;35150:424::-;35247:23;35272:12;35288:19;35299:7;35288:10;:19::i;:::-;-1:-1:-1;;;;;35336:15:0;;;;;;:7;:15;;;;;;35246:61;;-1:-1:-1;35246:61:0;-1:-1:-1;35336:28:0;;35356:7;35336:19;:28::i;:::-;-1:-1:-1;;;;;35318:15:0;;;;;;;:7;:15;;;;;;:46;;;;35396:18;;;;;;;:39;;35419:15;35396:22;:39::i;:::-;-1:-1:-1;;;;;35375:18:0;;;;;;:7;:18;;;;;;:60;;;;35487:4;35471:22;;;;:32;;35498:4;35471:26;:32::i;:::-;35462:4;35446:22;;;;:7;:22;;;;;;;;;:57;;;;35522:44;1848:25:1;;;-1:-1:-1;;;;;35522:44:0;;;;;;;;;;1821:18:1;35522:44:0;;;;;;;35235:339;;35150:424;;;:::o;35622:227::-;35681:7;35690;35710:12;35743:3;35733:9;;35725:7;:17;;;;:::i;:::-;:21;;;;:::i;:::-;35710:36;-1:-1:-1;35757:23:0;35783:17;:7;35710:36;35783:11;:17::i;:::-;35757:43;35836:4;;-1:-1:-1;35622:227:0;;-1:-1:-1;;;35622:227:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:248::-;2810:6;2818;2871:2;2859:9;2850:7;2846:23;2842:32;2839:52;;;2887:1;2884;2877:12;2839:52;-1:-1:-1;;2910:23:1;;;2980:2;2965:18;;;2952:32;;-1:-1:-1;2742:248:1:o;2995:269::-;3052:6;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;3160:9;3147:23;3210:4;3203:5;3199:16;3192:5;3189:27;3179:55;;3230:1;3227;3220:12;3269:316;3346:6;3354;3362;3415:2;3403:9;3394:7;3390:23;3386:32;3383:52;;;3431:1;3428;3421:12;3383:52;-1:-1:-1;;3454:23:1;;;3524:2;3509:18;;3496:32;;-1:-1:-1;3575:2:1;3560:18;;;3547:32;;3269:316;-1:-1:-1;3269:316:1:o;3590:118::-;3676:5;3669:13;3662:21;3655:5;3652:32;3642:60;;3698:1;3695;3688:12;3713:241;3769:6;3822:2;3810:9;3801:7;3797:23;3793:32;3790:52;;;3838:1;3835;3828:12;3790:52;3877:9;3864:23;3896:28;3918:5;3896:28;:::i;4219:388::-;4287:6;4295;4348:2;4336:9;4327:7;4323:23;4319:32;4316:52;;;4364:1;4361;4354:12;4316:52;4403:9;4390:23;4422:31;4447:5;4422:31;:::i;:::-;4472:5;-1:-1:-1;4529:2:1;4514:18;;4501:32;4542:33;4501:32;4542:33;:::i;:::-;4594:7;4584:17;;;4219:388;;;;;:::o;4612:180::-;4671:6;4724:2;4712:9;4703:7;4699:23;4695:32;4692:52;;;4740:1;4737;4730:12;4692:52;-1:-1:-1;4763:23:1;;4612:180;-1:-1:-1;4612:180:1:o;4797:380::-;4876:1;4872:12;;;;4919;;;4940:61;;4994:4;4986:6;4982:17;4972:27;;4940:61;5047:2;5039:6;5036:14;5016:18;5013:38;5010:161;;5093:10;5088:3;5084:20;5081:1;5074:31;5128:4;5125:1;5118:15;5156:4;5153:1;5146:15;5010:161;;4797:380;;;:::o;5182:251::-;5252:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5353:9;5347:16;5372:31;5397:5;5372:31;:::i;6103:184::-;6173:6;6226:2;6214:9;6205:7;6201:23;6197:32;6194:52;;;6242:1;6239;6232:12;6194:52;-1:-1:-1;6265:16:1;;6103:184;-1:-1:-1;6103:184:1:o;6571:245::-;6638:6;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;6739:9;6733:16;6758:28;6780:5;6758:28;:::i;6821:127::-;6882:10;6877:3;6873:20;6870:1;6863:31;6913:4;6910:1;6903:15;6937:4;6934:1;6927:15;6953:125;7018:9;;;7039:10;;;7036:36;;;7052:18;;:::i;7083:591::-;-1:-1:-1;;;;;7426:15:1;;;7408:34;;7473:2;7458:18;;7451:34;;;;7516:2;7501:18;;7494:34;;;;7559:2;7544:18;;7537:34;;;;7608:15;;;7602:3;7587:19;;7580:44;7388:3;7640:19;;7633:35;;;;7357:3;7342:19;;7083:591::o;7679:306::-;7767:6;7775;7783;7836:2;7824:9;7815:7;7811:23;7807:32;7804:52;;;7852:1;7849;7842:12;7804:52;7881:9;7875:16;7865:26;;7931:2;7920:9;7916:18;7910:25;7900:35;;7975:2;7964:9;7960:18;7954:25;7944:35;;7679:306;;;;;:::o;8803:168::-;8876:9;;;8907;;8924:15;;;8918:22;;8904:37;8894:71;;8945:18;;:::i;8976:217::-;9016:1;9042;9032:132;;9086:10;9081:3;9077:20;9074:1;9067:31;9121:4;9118:1;9111:15;9149:4;9146:1;9139:15;9032:132;-1:-1:-1;9178:9:1;;8976:217::o;10312:128::-;10379:9;;;10400:11;;;10397:37;;;10414:18;;:::i;10985:175::-;11022:3;11066:4;11059:5;11055:16;11095:4;11086:7;11083:17;11080:43;;11103:18;;:::i;:::-;11152:1;11139:15;;10985:175;-1:-1:-1;;10985:175:1:o;11297:127::-;11358:10;11353:3;11349:20;11346:1;11339:31;11389:4;11386:1;11379:15;11413:4;11410:1;11403:15;11429:980;11691:4;11739:3;11728:9;11724:19;11770:6;11759:9;11752:25;11796:2;11834:6;11829:2;11818:9;11814:18;11807:34;11877:3;11872:2;11861:9;11857:18;11850:31;11901:6;11936;11930:13;11967:6;11959;11952:22;12005:3;11994:9;11990:19;11983:26;;12044:2;12036:6;12032:15;12018:29;;12065:1;12075:195;12089:6;12086:1;12083:13;12075:195;;;12154:13;;-1:-1:-1;;;;;12150:39:1;12138:52;;12245:15;;;;12210:12;;;;12186:1;12104:9;12075:195;;;-1:-1:-1;;;;;;;12326:32:1;;;;12321:2;12306:18;;12299:60;-1:-1:-1;;;12390:3:1;12375:19;12368:35;12287:3;11429:980;-1:-1:-1;;;11429:980:1:o

Swarm Source

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