ETH Price: $2,945.47 (-6.71%)
Gas: 7 Gwei

Token

Skol! (SKOL)
 

Overview

Max Total Supply

10,000,000 SKOL

Holders

213

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
50,000 SKOL

Value
$0.00
0x18f7b2488b6e58f38358998bcb6c244e114d7ddf
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:
SKOL

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-31
*/

// SPDX-License-Identifier: MIT

//            Ya...___|__..ab.     .   .  
//             Y88b  \88b  \88b   (     )  
//              Y88b  :88b  :88b   `.oo'   
//              :888  |888  |888  ( (`-'   
//     .---.    d88P  ;88P  ;88P   `.`.    
//    / .-._)  d8P-"""|"""'-Y8P      `.`.  
//   ( (`._) .-.  .-. |.-.  .-.  .-.   ) ) 
//    \ `---( O )( O )( O )( O )( O )-' /  
//     `.    `-'  `-'  `-'  `-'  `-'  .' SKOL
//       `---------------------------'

pragma solidity 0.8.17;

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

interface IUniswapV3Pair {
    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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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 IUniswapV3Factory {
    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 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);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

}


contract ERC20 is Context, IERC20, IERC20Metadata {
    
    using SafeMath for uint256;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds your balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// Uniswap & Pancakeswap Router

interface IUniswapV3Router01 {
    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 IUniswapV3Router02 is IUniswapV3Router01 {
    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 SKOL is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV3Router02 public uniswapV3Router;
    address public uniswapV3Pair;
    bool private swapping;

    address public marketingWallet;
    address public p2eWallet;

    uint256 public percentForMarketing = 50;
    bool public buyBackEnabled = false;

    uint256 public swapTokensAtAmount;

    uint256 private liquidityActiveBlock = 0;
    uint256 private tradingActiveBlock = 0;

    bool public tradingActive = true;
    bool public swapEnabled = true;

    address private presaleAddress;
    address private presaleRouterAddress;

    uint256 public feeDivisor = 100;

    uint256 public totalSellFees;
    uint256 public marketingSellFee;
    uint256 public p2eSellFee;
    uint256 public liquidityBuyFee;

    uint256 public totalBuyFees;
    uint256 public marketingBuyFee;
    uint256 public p2eBuyFee;
    uint256 public liquiditySellFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForP2E;

    mapping (address => bool) private _isExcludedFromFees;

    mapping (address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event p2eWalletUpdated(address indexed newWallet, address indexed oldWallet);



    constructor() ERC20("Skol!", "SKOL"){

        address newOwner = address(0x3a0F76534C02e900A66CEE5327ce54D0a1F7A121);

        // Total Supply minted once during deployment and never minted again | Set number in tokens
        uint256 totalSupply = 10000000 * (10**18);

        // Tokens for SwapAndLiquify and automated BuyBack | Set number in tokens
        swapTokensAtAmount = 1000 * (10**18);

        // Contracts Sell fees
        marketingSellFee = 2;
        p2eSellFee = 1;
        totalSellFees = marketingSellFee + p2eSellFee;

        // Contracts Buy fees
        marketingBuyFee = 2;
        p2eBuyFee = 1;
        totalBuyFees = marketingBuyFee + p2eBuyFee;

        // Project Marketing Wallet | Updateable at a later point if necessary
        marketingWallet = address(0xe3cE88f04e7369c13b11b54D1dB774a997f31026);

        // Project P2E Wallet | Updateable at a later point if necessary
        p2eWallet = address(0xfE031454b556c394A19d4c14B6ea6da60cc157b4);

        // Router settings for Binance Smart Chain:
        // Pancakeswap testnet: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
        // Pancakeswap mainnet: 0x10ED43C718714eb63d5aA57B78B54704E256024E

        // Router settings for Ethereum:
        // Uniswap V3 mainnet: 0xE592427A0AEce92De3Edee1F18E0157C05861564
        // Uniswap V2 testnet: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        // Uniswap V2 mainnet: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

        IUniswapV3Router02 _uniswapV3Router = IUniswapV3Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        address _uniswapV3Pair = IUniswapV3Factory(_uniswapV3Router.factory())
            .createPair(address(this), _uniswapV3Router.WETH());

        uniswapV3Router = _uniswapV3Router;
        uniswapV3Pair = _uniswapV3Pair;

        _setAutomatedMarketMakerPair(_uniswapV3Pair, true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _createInitialSupply(address(newOwner), totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

      }

    // Change SwapAndLiquidy token swap amounts | Set number in exact tokens
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
          swapTokensAtAmount = newAmount * (10**18);
          return true;
      }


    // Exclude a wallet from all fees | Only for presale addresses, presale router and the deployer of the contract
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    // Exclude multiple wallets from all fees | Only for presale addresses, presale router and the deployer of the contract
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV3Pair, "The UniSwap pair cannot be removed from AutomatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

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

    // Set a new project marketing wallet | Wallet name can be changed to whatever suites the best
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        require(newMarketingWallet != address(0), "cannot set to 0 address");
        excludeFromFees(newMarketingWallet, true);
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    // Set a new p2e wallet | Wallet name can be changed to whatever suites the best
    function updateP2EWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "cannot set to 0 address");
        excludeFromFees(newWallet, true);
        emit p2eWalletUpdated(newWallet, p2eWallet);
        p2eWallet = newWallet;
    }

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

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

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

        if(!tradingActive || tradingActiveBlock + 2 >= block.number){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is always active after deployment");
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = !swapping;


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

        uint256 fees = 0;


        if(takeFee){

            // Assets selling process
            if (automatedMarketMakerPairs[to] && totalSellFees > 0){
                fees = amount.mul(totalSellFees).div(feeDivisor);
                tokensForMarketing += fees * marketingSellFee / totalSellFees;
                tokensForP2E += fees * p2eSellFee / totalSellFees;
            }
            // Assets buying process
            else if(automatedMarketMakerPairs[from] && totalBuyFees > 0) {
                fees = amount.mul(totalBuyFees).div(feeDivisor);
                tokensForMarketing += fees * marketingBuyFee / totalBuyFees;
                tokensForP2E += fees * p2eBuyFee / totalBuyFees;

                }


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

            amount -= fees;
        }

        super._transfer(from, to, amount);

    }

    function swapEthForNativeToken(uint256 ethAmount) private {
        if(ethAmount > 0){
            address[] memory path = new address[](2);
            path[0] = uniswapV3Router.WETH();
            path[1] = address(this);

            uniswapV3Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
                0,
                path,
                address(marketingWallet),
                block.timestamp
            );
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV3Router.WETH();

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

        uniswapV3Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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


        uniswapV3Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

    }

    // Automated buyback to fight sell pressure

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForP2E;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        bool success;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForP2E= ethBalance.mul(tokensForP2E).div(totalTokensToSwap);

        (success,) = address(p2eWallet).call{value: ethForP2E}("");

        if(buyBackEnabled){
            (success,) = address(marketingWallet).call{value: ethForMarketing * percentForMarketing / 100}("Automated BuyBack completed");
            swapEthForNativeToken(address(this).balance);
        } else {
            (success,) = address(marketingWallet).call{value: address(this).balance}("Success");
        }
    }

    // Recovery functions for stuck native balances and accidentally sent ERC20 tokens

    // Function to recover stuck ETH from the contract address. Only callable by the owner
    function recoverContractETH() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("Stuck ETH balance from contract address recovered");
        require(success, "Failed. Either caller is not the owner or address is not the contract address");
    }

    // Function to recover stuck or accidentaly sent ERC20 tokens from the contract
    function recoverERC20Token(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
    return ERC20(tokenAddress).transfer(msg.sender, tokens);
    }

    //Function for automated buyback settings. Set in percentages for example: 50% = 50% to buyback and 50% to marketing wallet
    function marketingBuyBackSettings(bool _buyBackEnabled, uint256 _percentForMarketing) external onlyOwner {
        require(_percentForMarketing <= 100, "Must be set below 100%");
        percentForMarketing = _percentForMarketing;
        buyBackEnabled = _buyBackEnabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"p2eWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_buyBackEnabled","type":"bool"},{"internalType":"uint256","name":"_percentForMarketing","type":"uint256"}],"name":"marketingBuyBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"p2eBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"p2eSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"p2eWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"recoverERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"uniswapV3Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV3Router","outputs":[{"internalType":"contract IUniswapV3Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateP2EWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526032600a55600b805460ff191690556000600d819055600e55600f805461ffff191661010117905560646011553480156200003e57600080fd5b5060405180604001604052806005815260200164536b6f6c2160d81b8152506040518060400160405280600481526020016314d2d3d360e21b81525081600390816200008b91906200079d565b5060046200009a82826200079d565b5050506000620000af6200038960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062002d24833981519152908290a350683635c9adc5dea00000600c556002601381905560016014819055733a0f76534c02e900a66cee5327ce54d0a1f7a121916a084595161401484a00000091620001359162000869565b6012556002601781905560016018819055620001519162000869565b601655600880546001600160a01b031990811673e3ce88f04e7369c13b11b54d1db774a997f31026179091556009805490911673fe031454b556c394a19d4c14b6ea6da60cc157b41790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021891906200088b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c91906200088b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030091906200088b565b600680546001600160a01b038086166001600160a01b031992831617909255600780549284169290911691909117905590506200033f8160016200038d565b6200034c846001620003e1565b62000359306001620003e1565b6200036861dead6001620003e1565b6200037484846200048f565b6200037f846200058b565b50505050620008b6565b3390565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004305760405162461bcd60e51b8152602060048201819052602482015260008051602062002d0483398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004e75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000427565b62000503816002546200068d60201b620011901790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000536918390620011906200068d821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620005d65760405162461bcd60e51b8152602060048201819052602482015260008051602062002d04833981519152604482015260640162000427565b6001600160a01b0381166200063d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000427565b6005546040516001600160a01b0380841692169060008051602062002d2483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b505050565b6000806200069c838562000869565b905083811015620006f05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000427565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200072457607f821691505b6020821081036200074557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200068857600081815260208120601f850160051c81016020861015620007745750805b601f850160051c820191505b81811015620007955782815560010162000780565b505050505050565b81516001600160401b03811115620007b957620007b9620006f9565b620007d181620007ca84546200070f565b846200074b565b602080601f831160018114620008095760008415620007f05750858301515b600019600386901b1c1916600185901b17855562000795565b600085815260208120601f198616915b828110156200083a5788860151825594840194600190910190840162000819565b5085821015620008595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620006f357634e487b7160e01b600052601160045260246000fd5b6000602082840312156200089e57600080fd5b81516001600160a01b0381168114620006f057600080fd5b61243e80620008c66000396000f3fe6080604052600436106102605760003560e01c806395d89b4111610144578063c492f046116100b6578063dd62ed3e1161007a578063dd62ed3e14610709578063e2f456051461074f578063e7f444b314610765578063f2fde38b1461077b578063f302df8e1461079b578063ff574e57146107b157600080fd5b8063c492f0461461067d578063cb3a82ec1461069d578063ccb61358146106bd578063d0a39814146106d3578063d257b34f146106e957600080fd5b8063a9059cbb11610108578063a9059cbb146105bd578063aacebbe3146105dd578063b62496f5146105fd578063b9e937001461062d578063bbc0c74214610643578063c02466681461065d57600080fd5b806395d89b411461053c578063984f02d3146105515780639a36f932146105675780639a7a23d61461057d578063a457c2d71461059d57600080fd5b80636053a0e3116101dd57806370a08231116101a157806370a082311461047e578063715018a6146104b457806375f0a874146104c95780638519517a146104e957806388522998146104fe5780638da5cb5b1461051e57600080fd5b80636053a0e3146103ed5780636598d2d11461040757806368078952146104295780636ddd17131461043f5780636ee76e6b1461045e57600080fd5b80632c76d7a6116102245780632c76d7a614610320578063313ce5671461035857806333f5b15f1461037457806339509351146103945780634fbee193146103b457600080fd5b806306fdde031461026c578063095ea7b314610297578063099d0d30146102c757806318160ddd146102eb57806323b872dd1461030057600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107c7565b60405161028e9190611e93565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004611ef6565b610859565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60195481565b60405190815260200161028e565b3480156102f757600080fd5b506002546102dd565b34801561030c57600080fd5b506102b761031b366004611f22565b610870565b34801561032c57600080fd5b50600654610340906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561036457600080fd5b506040516012815260200161028e565b34801561038057600080fd5b506102b761038f366004611ef6565b6108d9565b3480156103a057600080fd5b506102b76103af366004611ef6565b610987565b3480156103c057600080fd5b506102b76103cf366004611f63565b6001600160a01b03166000908152601c602052604090205460ff1690565b3480156103f957600080fd5b50600b546102b79060ff1681565b34801561041357600080fd5b50610427610422366004611f8e565b6109bd565b005b34801561043557600080fd5b506102dd60175481565b34801561044b57600080fd5b50600f546102b790610100900460ff1681565b34801561046a57600080fd5b50600954610340906001600160a01b031681565b34801561048a57600080fd5b506102dd610499366004611f63565b6001600160a01b031660009081526020819052604090205490565b3480156104c057600080fd5b50610427610a47565b3480156104d557600080fd5b50600854610340906001600160a01b031681565b3480156104f557600080fd5b50610427610abb565b34801561050a57600080fd5b50600754610340906001600160a01b031681565b34801561052a57600080fd5b506005546001600160a01b0316610340565b34801561054857600080fd5b50610281610c01565b34801561055d57600080fd5b506102dd600a5481565b34801561057357600080fd5b506102dd60115481565b34801561058957600080fd5b50610427610598366004611fac565b610c10565b3480156105a957600080fd5b506102b76105b8366004611ef6565b610cd6565b3480156105c957600080fd5b506102b76105d8366004611ef6565b610d25565b3480156105e957600080fd5b506104276105f8366004611f63565b610d32565b34801561060957600080fd5b506102b7610618366004611f63565b601d6020526000908152604090205460ff1681565b34801561063957600080fd5b506102dd60165481565b34801561064f57600080fd5b50600f546102b79060ff1681565b34801561066957600080fd5b50610427610678366004611fac565b610e14565b34801561068957600080fd5b50610427610698366004611fe5565b610e9d565b3480156106a957600080fd5b506104276106b8366004611f63565b610f79565b3480156106c957600080fd5b506102dd60155481565b3480156106df57600080fd5b506102dd60125481565b3480156106f557600080fd5b506102b761070436600461206b565b61105b565b34801561071557600080fd5b506102dd610724366004612084565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561075b57600080fd5b506102dd600c5481565b34801561077157600080fd5b506102dd60135481565b34801561078757600080fd5b50610427610796366004611f63565b6110a5565b3480156107a757600080fd5b506102dd60145481565b3480156107bd57600080fd5b506102dd60185481565b6060600380546107d6906120b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610802906120b2565b801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b60006108663384846111ef565b5060015b92915050565b600061087d848484611314565b6108cf84336108ca856040518060600160405280602881526020016123bc602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611711565b6111ef565b5060019392505050565b6005546000906001600160a01b0316331461090f5760405162461bcd60e51b8152600401610906906120ec565b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109809190612121565b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108669185906108ca9086611190565b6005546001600160a01b031633146109e75760405162461bcd60e51b8152600401610906906120ec565b6064811115610a315760405162461bcd60e51b81526020600482015260166024820152754d757374206265207365742062656c6f77203130302560501b6044820152606401610906565b600a55600b805460ff1916911515919091179055565b6005546001600160a01b03163314610a715760405162461bcd60e51b8152600401610906906120ec565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610ae55760405162461bcd60e51b8152600401610906906120ec565b6040517f537475636b204554482062616c616e63652066726f6d20636f6e7472616374208152701859191c995cdcc81c9958dbdd995c9959607a1b60208201526000903390479060310160006040518083038185875af1925050503d8060008114610b6c576040519150601f19603f3d011682016040523d82523d6000602084013e610b71565b606091505b5050905080610bfe5760405162461bcd60e51b815260206004820152604d60248201527f4661696c65642e204569746865722063616c6c6572206973206e6f742074686560448201527f206f776e6572206f722061646472657373206973206e6f742074686520636f6e60648201526c7472616374206164647265737360981b608482015260a401610906565b50565b6060600480546107d6906120b2565b6005546001600160a01b03163314610c3a5760405162461bcd60e51b8152600401610906906120ec565b6007546001600160a01b0390811690831603610cc85760405162461bcd60e51b815260206004820152604160248201527f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660448201527f65642066726f6d204175746f6d617465644d61726b65744d616b6572506169726064820152607360f81b608482015260a401610906565b610cd2828261174b565b5050565b600061086633846108ca856040518060600160405280602581526020016123e4602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611711565b6000610866338484611314565b6005546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b038116610dac5760405162461bcd60e51b815260206004820152601760248201527663616e6e6f742073657420746f2030206164647265737360481b6044820152606401610906565b610db7816001610e14565b6008546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e3e5760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610906906120ec565b60005b82811015610f385781601c6000868685818110610ee957610ee961213e565b9050602002016020810190610efe9190611f63565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f308161216a565b915050610eca565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051610f6c93929190612183565b60405180910390a1505050565b6005546001600160a01b03163314610fa35760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b038116610ff35760405162461bcd60e51b815260206004820152601760248201527663616e6e6f742073657420746f2030206164647265737360481b6044820152606401610906565b610ffe816001610e14565b6009546040516001600160a01b03918216918316907fd4d40a3b1f9583a0988c5c88a673e36f30acbb182e4fb5b6c34911824352715a90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146110885760405162461bcd60e51b8152600401610906906120ec565b61109a82670de0b6b3a76400006121dc565b600c55506001919050565b6005546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b0381166111345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610906565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061119d83856121f3565b9050838110156109805760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610906565b6001600160a01b0383166112515760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610906565b6001600160a01b0382166112b25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610906565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661133a5760405162461bcd60e51b815260040161090690612206565b6001600160a01b0382166113605760405162461bcd60e51b81526004016109069061224b565b80600003611379576113748383600061179f565b505050565b600f5460ff161580611399575043600e54600261139691906121f3565b10155b1561143b576001600160a01b0383166000908152601c602052604090205460ff16806113dd57506001600160a01b0382166000908152601c602052604090205460ff165b61143b5760405162461bcd60e51b815260206004820152602960248201527f54726164696e6720697320616c77617973206163746976652061667465722064604482015268195c1b1bde5b595b9d60ba1b6064820152608401610906565b30600090815260208190526040902054600c54811080159081906114665750600f54610100900460ff165b801561147c5750600754600160a01b900460ff16155b80156114a157506001600160a01b0385166000908152601d602052604090205460ff16155b80156114c657506001600160a01b0385166000908152601c602052604090205460ff16155b80156114eb57506001600160a01b0384166000908152601c602052604090205460ff16155b15611519576007805460ff60a01b1916600160a01b17905561150b6118a8565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152601c602052604090205460ff600160a01b90920482161591168061156757506001600160a01b0385166000908152601c602052604090205460ff165b15611570575060005b600081156116fd576001600160a01b0386166000908152601d602052604090205460ff1680156115a257506000601254115b15611631576115c86011546115c260125488611ab190919063ffffffff16565b90611b33565b9050601254601354826115db91906121dc565b6115e5919061228e565b601a60008282546115f691906121f3565b909155505060125460145461160b90836121dc565b611615919061228e565b601b600082825461162691906121f3565b909155506116df9050565b6001600160a01b0387166000908152601d602052604090205460ff16801561165b57506000601654115b156116df5761167b6011546115c260165488611ab190919063ffffffff16565b90506016546017548261168e91906121dc565b611698919061228e565b601a60008282546116a991906121f3565b90915550506016546018546116be90836121dc565b6116c8919061228e565b601b60008282546116d991906121f3565b90915550505b80156116f0576116f087308361179f565b6116fa81866122b0565b94505b61170887878761179f565b50505050505050565b600081848411156117355760405162461bcd60e51b81526004016109069190611e93565b50600061174284866122b0565b95945050505050565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166117c55760405162461bcd60e51b815260040161090690612206565b6001600160a01b0382166117eb5760405162461bcd60e51b81526004016109069061224b565b61182881604051806060016040528060268152602001612396602691396001600160a01b0386166000908152602081905260409020549190611711565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546118579082611190565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611307565b3060009081526020819052604081205490506000601b54601a546118cc91906121f3565b90508115806118d9575080155b156118e2575050565b6000476118ee84611b75565b60006118fa4783611ccf565b90506000611917856115c2601a5485611ab190919063ffffffff16565b90506000611934866115c2601b5486611ab190919063ffffffff16565b6009546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611982576040519150601f19603f3d011682016040523d82523d6000602084013e611987565b606091505b5050600b5490955060ff1615611a3f57600854600a546001600160a01b03909116906064906119b690856121dc565b6119c0919061228e565b6040517f4175746f6d61746564204275794261636b20636f6d706c6574656400000000008152601b0160006040518083038185875af1925050503d8060008114611a26576040519150601f19603f3d011682016040523d82523d6000602084013e611a2b565b606091505b505080955050611a3a47611d11565b611708565b600854604051665375636365737360c81b81526001600160a01b0390911690479060070160006040518083038185875af1925050503d8060008114611aa0576040519150601f19603f3d011682016040523d82523d6000602084013e611aa5565b606091505b50505050505050505050565b600082600003611ac35750600061086a565b6000611acf83856121dc565b905082611adc858361228e565b146109805760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610906565b600061098083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e65565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611baa57611baa61213e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2791906122c3565b81600181518110611c3a57611c3a61213e565b6001600160a01b039283166020918202929092010152600654611c6091309116846111ef565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c99908590600090869030904290600401612324565b600060405180830381600087803b158015611cb357600080fd5b505af1158015611cc7573d6000803e3d6000fd5b505050505050565b600061098083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611711565b8015610bfe576040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da591906122c3565b81600081518110611db857611db861213e565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611dec57611dec61213e565b6001600160a01b03928316602091820292909201015260065460085460405163b6f9de9560e01b81529183169263b6f9de95928692611e38926000928892909116904290600401612360565b6000604051808303818588803b158015611e5157600080fd5b505af1158015611708573d6000803e3d6000fd5b60008183611e865760405162461bcd60e51b81526004016109069190611e93565b506000611742848661228e565b600060208083528351808285015260005b81811015611ec057858101830151858201604001528201611ea4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bfe57600080fd5b60008060408385031215611f0957600080fd5b8235611f1481611ee1565b946020939093013593505050565b600080600060608486031215611f3757600080fd5b8335611f4281611ee1565b92506020840135611f5281611ee1565b929592945050506040919091013590565b600060208284031215611f7557600080fd5b813561098081611ee1565b8015158114610bfe57600080fd5b60008060408385031215611fa157600080fd5b8235611f1481611f80565b60008060408385031215611fbf57600080fd5b8235611fca81611ee1565b91506020830135611fda81611f80565b809150509250929050565b600080600060408486031215611ffa57600080fd5b833567ffffffffffffffff8082111561201257600080fd5b818601915086601f83011261202657600080fd5b81358181111561203557600080fd5b8760208260051b850101111561204a57600080fd5b6020928301955093505084013561206081611f80565b809150509250925092565b60006020828403121561207d57600080fd5b5035919050565b6000806040838503121561209757600080fd5b82356120a281611ee1565b91506020830135611fda81611ee1565b600181811c908216806120c657607f821691505b6020821081036120e657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561213357600080fd5b815161098081611f80565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161217c5761217c612154565b5060010190565b6040808252810183905260008460608301825b868110156121c65782356121a981611ee1565b6001600160a01b0316825260209283019290910190600101612196565b5080925050508215156020830152949350505050565b808202811582820484141761086a5761086a612154565b8082018082111561086a5761086a612154565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826122ab57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561086a5761086a612154565b6000602082840312156122d557600080fd5b815161098081611ee1565b600081518084526020808501945080840160005b838110156123195781516001600160a01b0316875295820195908201906001016122f4565b509495945050505050565b85815284602082015260a06040820152600061234360a08301866122e0565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061237960808301866122e0565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202da9ff6acbf11607f0f286e3a1e3b7e5b1160a272d0f5e5ef7e9665be78f402664736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106102605760003560e01c806395d89b4111610144578063c492f046116100b6578063dd62ed3e1161007a578063dd62ed3e14610709578063e2f456051461074f578063e7f444b314610765578063f2fde38b1461077b578063f302df8e1461079b578063ff574e57146107b157600080fd5b8063c492f0461461067d578063cb3a82ec1461069d578063ccb61358146106bd578063d0a39814146106d3578063d257b34f146106e957600080fd5b8063a9059cbb11610108578063a9059cbb146105bd578063aacebbe3146105dd578063b62496f5146105fd578063b9e937001461062d578063bbc0c74214610643578063c02466681461065d57600080fd5b806395d89b411461053c578063984f02d3146105515780639a36f932146105675780639a7a23d61461057d578063a457c2d71461059d57600080fd5b80636053a0e3116101dd57806370a08231116101a157806370a082311461047e578063715018a6146104b457806375f0a874146104c95780638519517a146104e957806388522998146104fe5780638da5cb5b1461051e57600080fd5b80636053a0e3146103ed5780636598d2d11461040757806368078952146104295780636ddd17131461043f5780636ee76e6b1461045e57600080fd5b80632c76d7a6116102245780632c76d7a614610320578063313ce5671461035857806333f5b15f1461037457806339509351146103945780634fbee193146103b457600080fd5b806306fdde031461026c578063095ea7b314610297578063099d0d30146102c757806318160ddd146102eb57806323b872dd1461030057600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107c7565b60405161028e9190611e93565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004611ef6565b610859565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60195481565b60405190815260200161028e565b3480156102f757600080fd5b506002546102dd565b34801561030c57600080fd5b506102b761031b366004611f22565b610870565b34801561032c57600080fd5b50600654610340906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561036457600080fd5b506040516012815260200161028e565b34801561038057600080fd5b506102b761038f366004611ef6565b6108d9565b3480156103a057600080fd5b506102b76103af366004611ef6565b610987565b3480156103c057600080fd5b506102b76103cf366004611f63565b6001600160a01b03166000908152601c602052604090205460ff1690565b3480156103f957600080fd5b50600b546102b79060ff1681565b34801561041357600080fd5b50610427610422366004611f8e565b6109bd565b005b34801561043557600080fd5b506102dd60175481565b34801561044b57600080fd5b50600f546102b790610100900460ff1681565b34801561046a57600080fd5b50600954610340906001600160a01b031681565b34801561048a57600080fd5b506102dd610499366004611f63565b6001600160a01b031660009081526020819052604090205490565b3480156104c057600080fd5b50610427610a47565b3480156104d557600080fd5b50600854610340906001600160a01b031681565b3480156104f557600080fd5b50610427610abb565b34801561050a57600080fd5b50600754610340906001600160a01b031681565b34801561052a57600080fd5b506005546001600160a01b0316610340565b34801561054857600080fd5b50610281610c01565b34801561055d57600080fd5b506102dd600a5481565b34801561057357600080fd5b506102dd60115481565b34801561058957600080fd5b50610427610598366004611fac565b610c10565b3480156105a957600080fd5b506102b76105b8366004611ef6565b610cd6565b3480156105c957600080fd5b506102b76105d8366004611ef6565b610d25565b3480156105e957600080fd5b506104276105f8366004611f63565b610d32565b34801561060957600080fd5b506102b7610618366004611f63565b601d6020526000908152604090205460ff1681565b34801561063957600080fd5b506102dd60165481565b34801561064f57600080fd5b50600f546102b79060ff1681565b34801561066957600080fd5b50610427610678366004611fac565b610e14565b34801561068957600080fd5b50610427610698366004611fe5565b610e9d565b3480156106a957600080fd5b506104276106b8366004611f63565b610f79565b3480156106c957600080fd5b506102dd60155481565b3480156106df57600080fd5b506102dd60125481565b3480156106f557600080fd5b506102b761070436600461206b565b61105b565b34801561071557600080fd5b506102dd610724366004612084565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561075b57600080fd5b506102dd600c5481565b34801561077157600080fd5b506102dd60135481565b34801561078757600080fd5b50610427610796366004611f63565b6110a5565b3480156107a757600080fd5b506102dd60145481565b3480156107bd57600080fd5b506102dd60185481565b6060600380546107d6906120b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610802906120b2565b801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b60006108663384846111ef565b5060015b92915050565b600061087d848484611314565b6108cf84336108ca856040518060600160405280602881526020016123bc602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611711565b6111ef565b5060019392505050565b6005546000906001600160a01b0316331461090f5760405162461bcd60e51b8152600401610906906120ec565b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109809190612121565b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108669185906108ca9086611190565b6005546001600160a01b031633146109e75760405162461bcd60e51b8152600401610906906120ec565b6064811115610a315760405162461bcd60e51b81526020600482015260166024820152754d757374206265207365742062656c6f77203130302560501b6044820152606401610906565b600a55600b805460ff1916911515919091179055565b6005546001600160a01b03163314610a715760405162461bcd60e51b8152600401610906906120ec565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610ae55760405162461bcd60e51b8152600401610906906120ec565b6040517f537475636b204554482062616c616e63652066726f6d20636f6e7472616374208152701859191c995cdcc81c9958dbdd995c9959607a1b60208201526000903390479060310160006040518083038185875af1925050503d8060008114610b6c576040519150601f19603f3d011682016040523d82523d6000602084013e610b71565b606091505b5050905080610bfe5760405162461bcd60e51b815260206004820152604d60248201527f4661696c65642e204569746865722063616c6c6572206973206e6f742074686560448201527f206f776e6572206f722061646472657373206973206e6f742074686520636f6e60648201526c7472616374206164647265737360981b608482015260a401610906565b50565b6060600480546107d6906120b2565b6005546001600160a01b03163314610c3a5760405162461bcd60e51b8152600401610906906120ec565b6007546001600160a01b0390811690831603610cc85760405162461bcd60e51b815260206004820152604160248201527f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660448201527f65642066726f6d204175746f6d617465644d61726b65744d616b6572506169726064820152607360f81b608482015260a401610906565b610cd2828261174b565b5050565b600061086633846108ca856040518060600160405280602581526020016123e4602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611711565b6000610866338484611314565b6005546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b038116610dac5760405162461bcd60e51b815260206004820152601760248201527663616e6e6f742073657420746f2030206164647265737360481b6044820152606401610906565b610db7816001610e14565b6008546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e3e5760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610906906120ec565b60005b82811015610f385781601c6000868685818110610ee957610ee961213e565b9050602002016020810190610efe9190611f63565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f308161216a565b915050610eca565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051610f6c93929190612183565b60405180910390a1505050565b6005546001600160a01b03163314610fa35760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b038116610ff35760405162461bcd60e51b815260206004820152601760248201527663616e6e6f742073657420746f2030206164647265737360481b6044820152606401610906565b610ffe816001610e14565b6009546040516001600160a01b03918216918316907fd4d40a3b1f9583a0988c5c88a673e36f30acbb182e4fb5b6c34911824352715a90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b031633146110885760405162461bcd60e51b8152600401610906906120ec565b61109a82670de0b6b3a76400006121dc565b600c55506001919050565b6005546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610906906120ec565b6001600160a01b0381166111345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610906565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061119d83856121f3565b9050838110156109805760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610906565b6001600160a01b0383166112515760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610906565b6001600160a01b0382166112b25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610906565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661133a5760405162461bcd60e51b815260040161090690612206565b6001600160a01b0382166113605760405162461bcd60e51b81526004016109069061224b565b80600003611379576113748383600061179f565b505050565b600f5460ff161580611399575043600e54600261139691906121f3565b10155b1561143b576001600160a01b0383166000908152601c602052604090205460ff16806113dd57506001600160a01b0382166000908152601c602052604090205460ff165b61143b5760405162461bcd60e51b815260206004820152602960248201527f54726164696e6720697320616c77617973206163746976652061667465722064604482015268195c1b1bde5b595b9d60ba1b6064820152608401610906565b30600090815260208190526040902054600c54811080159081906114665750600f54610100900460ff165b801561147c5750600754600160a01b900460ff16155b80156114a157506001600160a01b0385166000908152601d602052604090205460ff16155b80156114c657506001600160a01b0385166000908152601c602052604090205460ff16155b80156114eb57506001600160a01b0384166000908152601c602052604090205460ff16155b15611519576007805460ff60a01b1916600160a01b17905561150b6118a8565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152601c602052604090205460ff600160a01b90920482161591168061156757506001600160a01b0385166000908152601c602052604090205460ff165b15611570575060005b600081156116fd576001600160a01b0386166000908152601d602052604090205460ff1680156115a257506000601254115b15611631576115c86011546115c260125488611ab190919063ffffffff16565b90611b33565b9050601254601354826115db91906121dc565b6115e5919061228e565b601a60008282546115f691906121f3565b909155505060125460145461160b90836121dc565b611615919061228e565b601b600082825461162691906121f3565b909155506116df9050565b6001600160a01b0387166000908152601d602052604090205460ff16801561165b57506000601654115b156116df5761167b6011546115c260165488611ab190919063ffffffff16565b90506016546017548261168e91906121dc565b611698919061228e565b601a60008282546116a991906121f3565b90915550506016546018546116be90836121dc565b6116c8919061228e565b601b60008282546116d991906121f3565b90915550505b80156116f0576116f087308361179f565b6116fa81866122b0565b94505b61170887878761179f565b50505050505050565b600081848411156117355760405162461bcd60e51b81526004016109069190611e93565b50600061174284866122b0565b95945050505050565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166117c55760405162461bcd60e51b815260040161090690612206565b6001600160a01b0382166117eb5760405162461bcd60e51b81526004016109069061224b565b61182881604051806060016040528060268152602001612396602691396001600160a01b0386166000908152602081905260409020549190611711565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546118579082611190565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611307565b3060009081526020819052604081205490506000601b54601a546118cc91906121f3565b90508115806118d9575080155b156118e2575050565b6000476118ee84611b75565b60006118fa4783611ccf565b90506000611917856115c2601a5485611ab190919063ffffffff16565b90506000611934866115c2601b5486611ab190919063ffffffff16565b6009546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611982576040519150601f19603f3d011682016040523d82523d6000602084013e611987565b606091505b5050600b5490955060ff1615611a3f57600854600a546001600160a01b03909116906064906119b690856121dc565b6119c0919061228e565b6040517f4175746f6d61746564204275794261636b20636f6d706c6574656400000000008152601b0160006040518083038185875af1925050503d8060008114611a26576040519150601f19603f3d011682016040523d82523d6000602084013e611a2b565b606091505b505080955050611a3a47611d11565b611708565b600854604051665375636365737360c81b81526001600160a01b0390911690479060070160006040518083038185875af1925050503d8060008114611aa0576040519150601f19603f3d011682016040523d82523d6000602084013e611aa5565b606091505b50505050505050505050565b600082600003611ac35750600061086a565b6000611acf83856121dc565b905082611adc858361228e565b146109805760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610906565b600061098083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e65565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611baa57611baa61213e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2791906122c3565b81600181518110611c3a57611c3a61213e565b6001600160a01b039283166020918202929092010152600654611c6091309116846111ef565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c99908590600090869030904290600401612324565b600060405180830381600087803b158015611cb357600080fd5b505af1158015611cc7573d6000803e3d6000fd5b505050505050565b600061098083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611711565b8015610bfe576040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da591906122c3565b81600081518110611db857611db861213e565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611dec57611dec61213e565b6001600160a01b03928316602091820292909201015260065460085460405163b6f9de9560e01b81529183169263b6f9de95928692611e38926000928892909116904290600401612360565b6000604051808303818588803b158015611e5157600080fd5b505af1158015611708573d6000803e3d6000fd5b60008183611e865760405162461bcd60e51b81526004016109069190611e93565b506000611742848661228e565b600060208083528351808285015260005b81811015611ec057858101830151858201604001528201611ea4565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bfe57600080fd5b60008060408385031215611f0957600080fd5b8235611f1481611ee1565b946020939093013593505050565b600080600060608486031215611f3757600080fd5b8335611f4281611ee1565b92506020840135611f5281611ee1565b929592945050506040919091013590565b600060208284031215611f7557600080fd5b813561098081611ee1565b8015158114610bfe57600080fd5b60008060408385031215611fa157600080fd5b8235611f1481611f80565b60008060408385031215611fbf57600080fd5b8235611fca81611ee1565b91506020830135611fda81611f80565b809150509250929050565b600080600060408486031215611ffa57600080fd5b833567ffffffffffffffff8082111561201257600080fd5b818601915086601f83011261202657600080fd5b81358181111561203557600080fd5b8760208260051b850101111561204a57600080fd5b6020928301955093505084013561206081611f80565b809150509250925092565b60006020828403121561207d57600080fd5b5035919050565b6000806040838503121561209757600080fd5b82356120a281611ee1565b91506020830135611fda81611ee1565b600181811c908216806120c657607f821691505b6020821081036120e657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561213357600080fd5b815161098081611f80565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161217c5761217c612154565b5060010190565b6040808252810183905260008460608301825b868110156121c65782356121a981611ee1565b6001600160a01b0316825260209283019290910190600101612196565b5080925050508215156020830152949350505050565b808202811582820484141761086a5761086a612154565b8082018082111561086a5761086a612154565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826122ab57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561086a5761086a612154565b6000602082840312156122d557600080fd5b815161098081611ee1565b600081518084526020808501945080840160005b838110156123195781516001600160a01b0316875295820195908201906001016122f4565b509495945050505050565b85815284602082015260a06040820152600061234360a08301866122e0565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061237960808301866122e0565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202da9ff6acbf11607f0f286e3a1e3b7e5b1160a272d0f5e5ef7e9665be78f402664736f6c63430008110033

Deployed Bytecode Sourcemap

16477:11996:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5273:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6187:169;;;;;;;;;;-1:-1:-1;6187:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6187:169:0;1023:187:1;17405:31:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;17405:31:0;1215:177:1;5594:108:0;;;;;;;;;;-1:-1:-1;5682:12:0;;5594:108;;6364:355;;;;;;;;;;-1:-1:-1;6364:355:0;;;;;:::i;:::-;;:::i;16551:41::-;;;;;;;;;;-1:-1:-1;16551:41:0;;;;-1:-1:-1;;;;;16551:41:0;;;;;;-1:-1:-1;;;;;2049:32:1;;;2031:51;;2019:2;2004:18;16551:41:0;1858:230:1;5493:93:0;;;;;;;;;;-1:-1:-1;5493:93:0;;5576:2;2235:36:1;;2223:2;2208:18;5493:93:0;2093:184:1;27875:176:0;;;;;;;;;;-1:-1:-1;27875:176:0;;;;;:::i;:::-;;:::i;6727:218::-;;;;;;;;;;-1:-1:-1;6727:218:0;;;;;:::i;:::-;;:::i;22538:125::-;;;;;;;;;;-1:-1:-1;22538:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;22627:28:0;22603:4;22627:28;;;:19;:28;;;;;;;;;22538:125;16780:34;;;;;;;;;;-1:-1:-1;16780:34:0;;;;;;;;28188:282;;;;;;;;;;-1:-1:-1;28188:282:0;;;;;:::i;:::-;;:::i;:::-;;17337:30;;;;;;;;;;;;;;;;16998;;;;;;;;;;-1:-1:-1;16998:30:0;;;;;;;;;;;16701:24;;;;;;;;;;-1:-1:-1;16701:24:0;;;;-1:-1:-1;;;;;16701:24:0;;;5710:127;;;;;;;;;;-1:-1:-1;5710:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5811:18:0;5784:7;5811:18;;;;;;;;;;;;5710:127;11170:150;;;;;;;;;;;;;:::i;16664:30::-;;;;;;;;;;-1:-1:-1;16664:30:0;;;;-1:-1:-1;;;;;16664:30:0;;;27481:301;;;;;;;;;;;;;:::i;16599:28::-;;;;;;;;;;-1:-1:-1;16599:28:0;;;;-1:-1:-1;;;;;16599:28:0;;;10956:79;;;;;;;;;;-1:-1:-1;11021:6:0;;-1:-1:-1;;;;;11021:6:0;10956:79;;5381:104;;;;;;;;;;;;;:::i;16734:39::-;;;;;;;;;;;;;;;;17119:31;;;;;;;;;;;;;;;;21275:250;;;;;;;;;;-1:-1:-1;21275:250:0;;;;;:::i;:::-;;:::i;6953:269::-;;;;;;;;;;-1:-1:-1;6953:269:0;;;;;:::i;:::-;;:::i;5845:175::-;;;;;;;;;;-1:-1:-1;5845:175:0;;;;;:::i;:::-;;:::i;21827:339::-;;;;;;;;;;-1:-1:-1;21827:339:0;;;;;:::i;:::-;;:::i;17585:58::-;;;;;;;;;;-1:-1:-1;17585:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17303:27;;;;;;;;;;;;;;;;16959:32;;;;;;;;;;-1:-1:-1;16959:32:0;;;;;;;;20644:184;;;;;;;;;;-1:-1:-1;20644:184:0;;;;;:::i;:::-;;:::i;20961:306::-;;;;;;;;;;-1:-1:-1;20961:306:0;;;;;:::i;:::-;;:::i;22260:270::-;;;;;;;;;;-1:-1:-1;22260:270:0;;;;;:::i;:::-;;:::i;17264:30::-;;;;;;;;;;;;;;;;17159:28;;;;;;;;;;;;;;;;20343:174;;;;;;;;;;-1:-1:-1;20343:174:0;;;;;:::i;:::-;;:::i;6028:151::-;;;;;;;;;;-1:-1:-1;6028:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6144:18:0;;;6117:7;6144:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6028:151;16823:33;;;;;;;;;;;;;;;;17194:31;;;;;;;;;;;;;;;;11330:244;;;;;;;;;;-1:-1:-1;11330:244:0;;;;;:::i;:::-;;:::i;17232:25::-;;;;;;;;;;;;;;;;17374:24;;;;;;;;;;;;;;;;5273:100;5327:13;5360:5;5353:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5273:100;:::o;6187:169::-;6270:4;6287:39;623:10;6310:7;6319:6;6287:8;:39::i;:::-;-1:-1:-1;6344:4:0;6187:169;;;;;:::o;6364:355::-;6504:4;6521:36;6531:6;6539:9;6550:6;6521:9;:36::i;:::-;6568:121;6577:6;623:10;6599:89;6637:6;6599:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6599:19:0;;;;;;:11;:19;;;;;;;;623:10;6599:33;;;;;;;;;;:37;:89::i;:::-;6568:8;:121::i;:::-;-1:-1:-1;6707:4:0;6364:355;;;;;:::o;27875:176::-;11083:6;;27968:12;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;;;;;;;;;27995:48:::1;::::0;-1:-1:-1;;;27995:48:0;;28024:10:::1;27995:48;::::0;::::1;5819:51:1::0;5886:18;;;5879:34;;;-1:-1:-1;;;;;27995:28:0;::::1;::::0;::::1;::::0;5792:18:1;;27995:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27988:55:::0;27875:176;-1:-1:-1;;;27875:176:0:o;6727:218::-;623:10;6815:4;6864:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6864:34:0;;;;;;;;;;6815:4;;6832:83;;6855:7;;6864:50;;6903:10;6864:38;:50::i;28188:282::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;28336:3:::1;28312:20;:27;;28304:62;;;::::0;-1:-1:-1;;;28304:62:0;;6376:2:1;28304:62:0::1;::::0;::::1;6358:21:1::0;6415:2;6395:18;;;6388:30;-1:-1:-1;;;6434:18:1;;;6427:52;6496:18;;28304:62:0::1;6174:346:1::0;28304:62:0::1;28377:19;:42:::0;28430:14:::1;:32:::0;;-1:-1:-1;;28430:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28188:282::o;11170:150::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;11263:6:::1;::::0;11242:40:::1;::::0;11279:1:::1;::::0;-1:-1:-1;;;;;11263:6:0::1;::::0;11242:40:::1;::::0;11279:1;;11242:40:::1;11293:6;:19:::0;;-1:-1:-1;;;;;;11293:19:0::1;::::0;;11170:150::o;27481:301::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;27559:107:::1;::::0;6738:34:1;6726:47;;-1:-1:-1;;;6798:2:1;6789:12;;6782:41;27542:12:0::1;::::0;27567:10:::1;::::0;27591:21:::1;::::0;6848:2:1;6839:12;27559:107:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27541:125;;;27685:7;27677:97;;;::::0;-1:-1:-1;;;27677:97:0;;7064:2:1;27677:97:0::1;::::0;::::1;7046:21:1::0;7103:2;7083:18;;;7076:30;7142:34;7122:18;;;7115:62;7213:34;7193:18;;;7186:62;-1:-1:-1;;;7264:19:1;;;7257:44;7318:19;;27677:97:0::1;6862:481:1::0;27677:97:0::1;27530:252;27481:301::o:0;5381:104::-;5437:13;5470:7;5463:14;;;;;:::i;21275:250::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;21382:13:::1;::::0;-1:-1:-1;;;;;21382:13:0;;::::1;21374:21:::0;;::::1;::::0;21366:99:::1;;;::::0;-1:-1:-1;;;21366:99:0;;7550:2:1;21366:99:0::1;::::0;::::1;7532:21:1::0;7589:2;7569:18;;;7562:30;7628:34;7608:18;;;7601:62;7699:34;7679:18;;;7672:62;-1:-1:-1;;;7750:19:1;;;7743:32;7792:19;;21366:99:0::1;7348:469:1::0;21366:99:0::1;21476:41;21505:4;21511:5;21476:28;:41::i;:::-;21275:250:::0;;:::o;6953:269::-;7046:4;7063:129;623:10;7086:7;7095:96;7134:15;7095:96;;;;;;;;;;;;;;;;;623:10;7095:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7095:34:0;;;;;;;;;;;;:38;:96::i;5845:175::-;5931:4;5948:42;623:10;5972:9;5983:6;5948:9;:42::i;21827:339::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21924:32:0;::::1;21916:68;;;::::0;-1:-1:-1;;;21916:68:0;;8024:2:1;21916:68:0::1;::::0;::::1;8006:21:1::0;8063:2;8043:18;;;8036:30;-1:-1:-1;;;8082:18:1;;;8075:53;8145:18;;21916:68:0::1;7822:347:1::0;21916:68:0::1;21995:41;22011:18;22031:4;21995:15;:41::i;:::-;22095:15;::::0;22052:59:::1;::::0;-1:-1:-1;;;;;22095:15:0;;::::1;::::0;22052:59;::::1;::::0;::::1;::::0;22095:15:::1;::::0;22052:59:::1;22122:15;:36:::0;;-1:-1:-1;;;;;;22122:36:0::1;-1:-1:-1::0;;;;;22122:36:0;;;::::1;::::0;;;::::1;::::0;;21827:339::o;20644:184::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20729:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20729:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20786:34;;1163:41:1;;;20786:34:0::1;::::0;1136:18:1;20786:34:0::1;;;;;;;20644:184:::0;;:::o;20961:306::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;21080:9:::1;21076:115;21095:19:::0;;::::1;21076:115;;;21171:8;21136:19;:32;21156:8;;21165:1;21156:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21136:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21136:32:0;:43;;-1:-1:-1;;21136:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21116:3;::::1;::::0;::::1;:::i;:::-;;;;21076:115;;;;21208:51;21240:8;;21250;21208:51;;;;;;;;:::i;:::-;;;;;;;;20961:306:::0;;;:::o;22260:270::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22342:23:0;::::1;22334:59;;;::::0;-1:-1:-1;;;22334:59:0;;8024:2:1;22334:59:0::1;::::0;::::1;8006:21:1::0;8063:2;8043:18;;;8036:30;-1:-1:-1;;;8082:18:1;;;8075:53;8145:18;;22334:59:0::1;7822:347:1::0;22334:59:0::1;22404:32;22420:9;22431:4;22404:15;:32::i;:::-;22480:9;::::0;22452:38:::1;::::0;-1:-1:-1;;;;;22480:9:0;;::::1;::::0;22452:38;::::1;::::0;::::1;::::0;22480:9:::1;::::0;22452:38:::1;22501:9;:21:::0;;-1:-1:-1;;;;;;22501:21:0::1;-1:-1:-1::0;;;;;22501:21:0;;;::::1;::::0;;;::::1;::::0;;22260:270::o;20343:174::-;11083:6;;20424:4;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;20463:20:::1;:9:::0;20476:6:::1;20463:20;:::i;:::-;20442:18;:41:::0;-1:-1:-1;20503:4:0::1;20343:174:::0;;;:::o;11330:244::-;11083:6;;-1:-1:-1;;;;;11083:6:0;623:10;11083:22;11075:67;;;;-1:-1:-1;;;11075:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11419:22:0;::::1;11411:73;;;::::0;-1:-1:-1;;;11411:73:0;;9752:2:1;11411:73:0::1;::::0;::::1;9734:21:1::0;9791:2;9771:18;;;9764:30;9830:34;9810:18;;;9803:62;-1:-1:-1;;;9881:18:1;;;9874:36;9927:19;;11411:73:0::1;9550:402:1::0;11411:73:0::1;11521:6;::::0;11500:38:::1;::::0;-1:-1:-1;;;;;11500:38:0;;::::1;::::0;11521:6:::1;::::0;11500:38:::1;::::0;11521:6:::1;::::0;11500:38:::1;11549:6;:17:::0;;-1:-1:-1;;;;;;11549:17:0::1;-1:-1:-1::0;;;;;11549:17:0;;;::::1;::::0;;;::::1;::::0;;11330:244::o;9189:181::-;9247:7;;9279:5;9283:1;9279;:5;:::i;:::-;9267:17;;9308:1;9303;:6;;9295:46;;;;-1:-1:-1;;;9295:46:0;;10289:2:1;9295:46:0;;;10271:21:1;10328:2;10308:18;;;10301:30;10367:29;10347:18;;;10340:57;10414:18;;9295:46:0;10087:351:1;8643:380:0;-1:-1:-1;;;;;8779:19:0;;8771:68;;;;-1:-1:-1;;;8771:68:0;;10645:2:1;8771:68:0;;;10627:21:1;10684:2;10664:18;;;10657:30;10723:34;10703:18;;;10696:62;-1:-1:-1;;;10774:18:1;;;10767:34;10818:19;;8771:68:0;10443:400:1;8771:68:0;-1:-1:-1;;;;;8858:21:0;;8850:68;;;;-1:-1:-1;;;8850:68:0;;11050:2:1;8850:68:0;;;11032:21:1;11089:2;11069:18;;;11062:30;11128:34;11108:18;;;11101:62;-1:-1:-1;;;11179:18:1;;;11172:32;11221:19;;8850:68:0;10848:398:1;8850:68:0;-1:-1:-1;;;;;8931:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8983:32;;1361:25:1;;;8983:32:0;;1334:18:1;8983:32:0;;;;;;;;8643:380;;;:::o;22671:2144::-;-1:-1:-1;;;;;22803:18:0;;22795:68;;;;-1:-1:-1;;;22795:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22882:16:0;;22874:64;;;;-1:-1:-1;;;22874:64:0;;;;;;;:::i;:::-;22955:6;22965:1;22955:11;22952:92;;22983:28;22999:4;23005:2;23009:1;22983:15;:28::i;:::-;22671:2144;;;:::o;22952:92::-;23060:13;;;;23059:14;;:56;;;23103:12;23077:18;;23098:1;23077:22;;;;:::i;:::-;:38;;23059:56;23056:193;;;-1:-1:-1;;;;;23139:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23168:23:0;;;;;;:19;:23;;;;;;;;23139:52;23131:106;;;;-1:-1:-1;;;23131:106:0;;12263:2:1;23131:106:0;;;12245:21:1;12302:2;12282:18;;;12275:30;12341:34;12321:18;;;12314:62;-1:-1:-1;;;12392:18:1;;;12385:39;12441:19;;23131:106:0;12061:405:1;23131:106:0;23310:4;23261:28;5811:18;;;;;;;;;;;23368;;23344:42;;;;;;;23416:35;;-1:-1:-1;23440:11:0;;;;;;;23416:35;:61;;;;-1:-1:-1;23469:8:0;;-1:-1:-1;;;23469:8:0;;;;23468:9;23416:61;:110;;;;-1:-1:-1;;;;;;23495:31:0;;;;;;:25;:31;;;;;;;;23494:32;23416:110;:153;;;;-1:-1:-1;;;;;;23544:25:0;;;;;;:19;:25;;;;;;;;23543:26;23416:153;:194;;;;-1:-1:-1;;;;;;23587:23:0;;;;;;:19;:23;;;;;;;;23586:24;23416:194;23399:321;;;23637:8;:15;;-1:-1:-1;;;;23637:15:0;-1:-1:-1;;;23637:15:0;;;23667:10;:8;:10::i;:::-;23692:8;:16;;-1:-1:-1;;;;23692:16:0;;;23399:321;23748:8;;-1:-1:-1;;;;;23774:25:0;;23732:12;23774:25;;;:19;:25;;;;;;23748:8;-1:-1:-1;;;23748:8:0;;;;;23747:9;;23774:25;;:52;;-1:-1:-1;;;;;;23803:23:0;;;;;;:19;:23;;;;;;;;23774:52;23771:99;;;-1:-1:-1;23853:5:0;23771:99;23882:12;23916:7;23913:847;;;-1:-1:-1;;;;;23984:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24033:1;24017:13;;:17;23984:50;23980:631;;;24061:41;24091:10;;24061:25;24072:13;;24061:6;:10;;:25;;;;:::i;:::-;:29;;:41::i;:::-;24054:48;;24169:13;;24150:16;;24143:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24121:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24237:13:0;;24224:10;;24217:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;24201:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23980:631:0;;-1:-1:-1;23980:631:0;;-1:-1:-1;;;;;24326:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24376:1;24361:12;;:16;24326:51;24323:288;;;24405:40;24434:10;;24405:24;24416:12;;24405:6;:10;;:24;;;;:::i;:40::-;24398:47;;24511:12;;24493:15;;24486:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24464:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24577:12:0;;24565:9;;24558:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;24542:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;24323:288:0;24632:8;;24629:89;;24660:42;24676:4;24690;24697;24660:15;:42::i;:::-;24734:14;24744:4;24734:14;;:::i;:::-;;;23913:847;24772:33;24788:4;24794:2;24798:6;24772:15;:33::i;:::-;22784:2031;;;;22671:2144;;;:::o;9524:192::-;9610:7;9646:12;9638:6;;;;9630:29;;;;-1:-1:-1;;;9630:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9670:9:0;9682:5;9686:1;9682;:5;:::i;:::-;9670:17;9524:192;-1:-1:-1;;;;;9524:192:0:o;21533:186::-;-1:-1:-1;;;;;21616:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21616:39:0;;;;;;;;;;21671:40;;21616:39;;:31;21671:40;;;21533:186;;:::o;7230:573::-;-1:-1:-1;;;;;7370:20:0;;7362:70;;;;-1:-1:-1;;;7362:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7451:23:0;;7443:71;;;;-1:-1:-1;;;7443:71:0;;;;;;;:::i;:::-;7607;7629:6;7607:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7607:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7587:17:0;;;:9;:17;;;;;;;;;;;:91;;;;7712:20;;;;;;;:32;;7737:6;7712:24;:32::i;:::-;-1:-1:-1;;;;;7689:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7760:35;1361:25:1;;;7689:20:0;;7760:35;;;;;;1334:18:1;7760:35:0;1215:177:1;26234:1057:0;26317:4;26273:23;5811:18;;;;;;;;;;;26273:50;;26334:25;26383:12;;26362:18;;:33;;;;:::i;:::-;26334:61;-1:-1:-1;26411:20:0;;;:46;;-1:-1:-1;26435:22:0;;26411:46;26408:60;;;26460:7;;26234:1057::o;26408:60::-;26480:12;26533:21;26567:33;26584:15;26567:16;:33::i;:::-;26613:18;26634:44;:21;26660:17;26634:25;:44::i;:::-;26613:65;;26691:23;26717:57;26756:17;26717:34;26732:18;;26717:10;:14;;:34;;;;:::i;:57::-;26691:83;;26785:17;26804:51;26837:17;26804:28;26819:12;;26804:10;:14;;:28;;;;:::i;:51::-;26889:9;;26881:45;;26785:70;;-1:-1:-1;;;;;;26889:9:0;;26785:70;;26881:45;;;;26785:70;26889:9;26881:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26942:14:0;;26868:58;;-1:-1:-1;26942:14:0;;26939:345;;;26993:15;;27040:19;;-1:-1:-1;;;;;26993:15:0;;;;27062:3;;27022:37;;:15;:37;:::i;:::-;:43;;;;:::i;:::-;26985:112;;13249:29:1;13237:42;;13304:2;13295:12;26985:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26972:125;;;;;27112:44;27134:21;27112;:44::i;:::-;26939:345;;;27210:15;;27202:70;;-1:-1:-1;;;13519:22:1;;-1:-1:-1;;;;;27210:15:0;;;;27239:21;;13566:1:1;13557:11;27202:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;26234:1057:0:o;9726:252::-;9784:7;9810:1;9815;9810:6;9806:47;;-1:-1:-1;9840:1:0;9833:8;;9806:47;9865:9;9877:5;9881:1;9877;:5;:::i;:::-;9865:17;-1:-1:-1;9910:1:0;9901:5;9905:1;9865:17;9901:5;:::i;:::-;:10;9893:56;;;;-1:-1:-1;;;9893:56:0;;13781:2:1;9893:56:0;;;13763:21:1;13820:2;13800:18;;;13793:30;13859:34;13839:18;;;13832:62;-1:-1:-1;;;13910:18:1;;;13903:31;13951:19;;9893:56:0;13579:397:1;9986:132:0;10044:7;10071:39;10075:1;10078;10071:39;;;;;;;;;;;;;;;;;:3;:39::i;25312:479::-;25404:16;;;25418:1;25404:16;;;;;;;;25380:21;;25404:16;;;;;;;;;;-1:-1:-1;25404:16:0;25380:40;;25449:4;25431;25436:1;25431:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25431:23:0;;;:7;;;;;;;;;;:23;;;;25475:15;;:22;;;-1:-1:-1;;;25475:22:0;;;;:15;;;;;:20;;:22;;;;;25431:7;;25475:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25465:4;25470:1;25465:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25465:32:0;;;:7;;;;;;;;;:32;25542:15;;25510:62;;25527:4;;25542:15;25560:11;25510:8;:62::i;:::-;25585:15;;:196;;-1:-1:-1;;;25585:196:0;;-1:-1:-1;;;;;25585:15:0;;;;:66;;:196;;25666:11;;25585:15;;25708:4;;25735;;25755:15;;25585:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25367:424;25312:479;:::o;9380:136::-;9438:7;9465:43;9469:1;9472;9465:43;;;;;;;;;;;;;;;;;:3;:43::i;24823:481::-;24895:13;;24892:405;;24948:16;;;24962:1;24948:16;;;;;;;;24924:21;;24948:16;;;;;;;;-1:-1:-1;;24989:15:0;;:22;;;-1:-1:-1;;;24989:22:0;;;;24924:40;;-1:-1:-1;;;;;;24989:15:0;;;;:20;;-1:-1:-1;24989:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24979:4;24984:1;24979:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;24979:32:0;;;-1:-1:-1;;;;;24979:32:0;;;;;25044:4;25026;25031:1;25026:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25026:23:0;;;:7;;;;;;;;;:23;25066:15;;25220;;25066:219;;-1:-1:-1;;;25066:219:0;;:15;;;;:66;;25140:9;;25066:219;;:15;;25189:4;;25220:15;;;;25255;;25066:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10126:191;10212:7;10247:12;10240:5;10232:28;;;;-1:-1:-1;;;10232:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10271:9:0;10283:5;10287:1;10283;:5;:::i;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;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2282:247::-;2341:6;2394:2;2382:9;2373:7;2369:23;2365:32;2362:52;;;2410:1;2407;2400:12;2362:52;2449:9;2436:23;2468:31;2493:5;2468:31;:::i;2534:118::-;2620:5;2613:13;2606:21;2599:5;2596:32;2586:60;;2642:1;2639;2632:12;2657:309;2722:6;2730;2783:2;2771:9;2762:7;2758:23;2754:32;2751:52;;;2799:1;2796;2789:12;2751:52;2838:9;2825:23;2857:28;2879:5;2857:28;:::i;3179:382::-;3244:6;3252;3305:2;3293:9;3284:7;3280:23;3276:32;3273:52;;;3321:1;3318;3311:12;3273:52;3360:9;3347:23;3379:31;3404:5;3379:31;:::i;:::-;3429:5;-1:-1:-1;3486:2:1;3471:18;;3458:32;3499:30;3458:32;3499:30;:::i;:::-;3548:7;3538:17;;;3179:382;;;;;:::o;3566:750::-;3658:6;3666;3674;3727:2;3715:9;3706:7;3702:23;3698:32;3695:52;;;3743:1;3740;3733:12;3695:52;3783:9;3770:23;3812:18;3853:2;3845:6;3842:14;3839:34;;;3869:1;3866;3859:12;3839:34;3907:6;3896:9;3892:22;3882:32;;3952:7;3945:4;3941:2;3937:13;3933:27;3923:55;;3974:1;3971;3964:12;3923:55;4014:2;4001:16;4040:2;4032:6;4029:14;4026:34;;;4056:1;4053;4046:12;4026:34;4111:7;4104:4;4094:6;4091:1;4087:14;4083:2;4079:23;4075:34;4072:47;4069:67;;;4132:1;4129;4122:12;4069:67;4163:4;4155:13;;;;-1:-1:-1;4187:6:1;-1:-1:-1;;4228:20:1;;4215:34;4258:28;4215:34;4258:28;:::i;:::-;4305:5;4295:15;;;3566:750;;;;;:::o;4321:180::-;4380:6;4433:2;4421:9;4412:7;4408:23;4404:32;4401:52;;;4449:1;4446;4439:12;4401:52;-1:-1:-1;4472:23:1;;4321:180;-1:-1:-1;4321:180:1:o;4506:388::-;4574:6;4582;4635:2;4623:9;4614:7;4610:23;4606:32;4603:52;;;4651:1;4648;4641:12;4603:52;4690:9;4677:23;4709:31;4734:5;4709:31;:::i;:::-;4759:5;-1:-1:-1;4816:2:1;4801:18;;4788:32;4829:33;4788:32;4829:33;:::i;4899:380::-;4978:1;4974:12;;;;5021;;;5042:61;;5096:4;5088:6;5084:17;5074:27;;5042:61;5149:2;5141:6;5138:14;5118:18;5115:38;5112:161;;5195:10;5190:3;5186:20;5183:1;5176:31;5230:4;5227:1;5220:15;5258:4;5255:1;5248:15;5112:161;;4899:380;;;:::o;5284:356::-;5486:2;5468:21;;;5505:18;;;5498:30;5564:34;5559:2;5544:18;;5537:62;5631:2;5616:18;;5284:356::o;5924:245::-;5991:6;6044:2;6032:9;6023:7;6019:23;6015:32;6012:52;;;6060:1;6057;6050:12;6012:52;6092:9;6086:16;6111:28;6133:5;6111:28;:::i;8174:127::-;8235:10;8230:3;8226:20;8223:1;8216:31;8266:4;8263:1;8256:15;8290:4;8287:1;8280:15;8306:127;8367:10;8362:3;8358:20;8355:1;8348:31;8398:4;8395:1;8388:15;8422:4;8419:1;8412:15;8438:135;8477:3;8498:17;;;8495:43;;8518:18;;:::i;:::-;-1:-1:-1;8565:1:1;8554:13;;8438:135::o;8578:794::-;8800:2;8812:21;;;8785:18;;8868:22;;;8752:4;8947:6;8921:2;8906:18;;8752:4;8981:304;8995:6;8992:1;8989:13;8981:304;;;9070:6;9057:20;9090:31;9115:5;9090:31;:::i;:::-;-1:-1:-1;;;;;9146:31:1;9134:44;;9201:4;9260:15;;;;9225:12;;;;9174:1;9010:9;8981:304;;;8985:3;9302;9294:11;;;;9357:6;9350:14;9343:22;9336:4;9325:9;9321:20;9314:52;8578:794;;;;;;:::o;9377:168::-;9450:9;;;9481;;9498:15;;;9492:22;;9478:37;9468:71;;9519:18;;:::i;9957:125::-;10022:9;;;10043:10;;;10040:36;;;10056:18;;:::i;11251:401::-;11453:2;11435:21;;;11492:2;11472:18;;;11465:30;11531:34;11526:2;11511:18;;11504:62;-1:-1:-1;;;11597:2:1;11582:18;;11575:35;11642:3;11627:19;;11251:401::o;11657:399::-;11859:2;11841:21;;;11898:2;11878:18;;;11871:30;11937:34;11932:2;11917:18;;11910:62;-1:-1:-1;;;12003:2:1;11988:18;;11981:33;12046:3;12031:19;;11657:399::o;12471:217::-;12511:1;12537;12527:132;;12581:10;12576:3;12572:20;12569:1;12562:31;12616:4;12613:1;12606:15;12644:4;12641:1;12634:15;12527:132;-1:-1:-1;12673:9:1;;12471:217::o;12693:128::-;12760:9;;;12781:11;;;12778:37;;;12795:18;;:::i;14113:251::-;14183:6;14236:2;14224:9;14215:7;14211:23;14207:32;14204:52;;;14252:1;14249;14242:12;14204:52;14284:9;14278:16;14303:31;14328:5;14303:31;:::i;14369:461::-;14422:3;14460:5;14454:12;14487:6;14482:3;14475:19;14513:4;14542:2;14537:3;14533:12;14526:19;;14579:2;14572:5;14568:14;14600:1;14610:195;14624:6;14621:1;14618:13;14610:195;;;14689:13;;-1:-1:-1;;;;;14685:39:1;14673:52;;14745:12;;;;14780:15;;;;14721:1;14639:9;14610:195;;;-1:-1:-1;14821:3:1;;14369:461;-1:-1:-1;;;;;14369:461:1:o;14835:582::-;15134:6;15123:9;15116:25;15177:6;15172:2;15161:9;15157:18;15150:34;15220:3;15215:2;15204:9;15200:18;15193:31;15097:4;15241:57;15293:3;15282:9;15278:19;15270:6;15241:57;:::i;:::-;-1:-1:-1;;;;;15334:32:1;;;;15329:2;15314:18;;15307:60;-1:-1:-1;15398:3:1;15383:19;15376:35;15233:65;14835:582;-1:-1:-1;;;14835:582:1:o;15422:510::-;15693:6;15682:9;15675:25;15736:3;15731:2;15720:9;15716:18;15709:31;15656:4;15757:57;15809:3;15798:9;15794:19;15786:6;15757:57;:::i;:::-;-1:-1:-1;;;;;15850:32:1;;;;15845:2;15830:18;;15823:60;-1:-1:-1;15914:2:1;15899:18;15892:34;15749:65;15422:510;-1:-1:-1;;15422:510:1:o

Swarm Source

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