ETH Price: $2,059.77 (+2.84%)

Token

Sound of Freedom (SOF)
 

Overview

Max Total Supply

1,000,000 SOF

Holders

3

Transfers

-
0 (0%)

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
SoundOfFreedom

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-07-28
*/

/**

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    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 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 SoundOfFreedom is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Sound of Freedom';
    string private constant _symbol = 'SOF';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000 * (10 ** _decimals);
    uint256 private _maxTxAmountPercent = 200; // 10000;
    uint256 private _maxTransferPercent = 200;
    uint256 private _maxWalletPercent = 200;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 300;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 300;
    uint256 private sellFee = 300;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 public swapThreshold = ( _totalSupply * 200 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0xf9C4846D43D6F2498F4D1D1C1435698d696D4b2E; 
    address internal constant marketing_receiver = 0x991dfaDb8EA04fFBD402845FbC58dBD0f4f78d15;
    address internal constant liquidity_receiver = 0x075ee82fF71F506e62066Af8dF1eF5Dd094D2524;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function enableTrading() external onlyOwner {tradingAllowed = true;}
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisfeeExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function _maxWalletToken() public view returns (uint256) {return totalSupply() * _maxWalletPercent / denominator;}
    function _maxTxAmount() public view returns (uint256) {return totalSupply() * _maxTxAmountPercent / denominator;}
    function _maxTransferAmount() public view returns (uint256) {return totalSupply() * _maxTransferPercent / denominator;}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount); 
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function setFees(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(totalFee <= denominator.div(5) && sellFee <= denominator.div(5), "totalFee and sellFee cannot be more than 20%");
    }

    function setLimits(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmountPercent = _buy;
        _maxTransferPercent = _trans;
        _maxWalletPercent = _wallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken(), "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxTransferAmount() || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount() || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmt = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmt > 0){payable(marketing_receiver).transfer(marketingAmt);}
        uint256 remainingBalance = address(this).balance;
        if(remainingBalance > uint256(0)){payable(development_receiver).transfer(remainingBalance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

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

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= uint256(1) && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function changeSwaptreshold(uint256 _swapThreshold) public onlyOwner {
        swapThreshold = _swapThreshold;
    
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"changeSwaptreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisfeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000442565b6200002190620f424062000459565b600181815560c86002819055600381905560048190556009805460ff60a01b191690555f600a81905561012c600b819055600c829055600d829055600e819055600f556010556127106011556012805460ff1916909217909155620186a0916200008b9162000459565b62000097919062000473565b601555620186a0600154600a620000af919062000459565b620000bb919062000473565b601655348015620000ca575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa1580156200012f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000155919062000493565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000493565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000212573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000238919062000493565b600880546001600160a01b038581166001600160a01b0319928316179092556009805492841692909116919091179055305f908152600760209081526040808320805460ff1990811660019081179092557f932ba083d79b18487eba30eb893513772cf7e92105f8152a727119220c421d4e80548216831790557fd79b10fa823c641b5e7d4cd168b8b63f758785480c533db11f862acb1321ee608054821683179055338086528386208054909216831790915590546005845282852081905591519182529394507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620004bb565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200038757815f19048211156200036b576200036b62000333565b808516156200037957918102915b93841c93908002906200034c565b509250929050565b5f826200039f575060016200043c565b81620003ad57505f6200043c565b8160018114620003c65760028114620003d157620003f1565b60019150506200043c565b60ff841115620003e557620003e562000333565b50506001821b6200043c565b5060208310610133831016604e8410600b841016171562000416575081810a6200043c565b62000422838362000347565b805f190482111562000438576200043862000333565b0290505b92915050565b5f6200045260ff8416836200038f565b9392505050565b80820281158282048414176200043c576200043c62000333565b5f826200048e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215620004a4575f80fd5b81516001600160a01b038116811462000452575f80fd5b61198180620004c95f395ff3fe60806040526004361061013f575f3560e01c806370a08231116100b3578063a8aa1b311161006d578063a8aa1b31146103aa578063a9059cbb146103c9578063d37e9177146103e8578063da2e3bad14610407578063dd62ed3e14610426578063f2fde38b1461046a575f80fd5b806370a08231146102df57806378109e54146103135780637d1db4a514610327578063893d20e81461033b5780638a8c523c1461036b57806395d89b411461037f575f80fd5b80631f976b7e116101045780631f976b7e1461021757806323b872dd1461022b5780632f54bf6e1461024a578063313ce567146102775780633f4218e0146102925780634acd8859146102c0575f80fd5b80630445b6671461014a57806306fdde0314610172578063095ea7b3146101b357806318160ddd146101e2578063189ae5f2146101f6575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015f60155481565b6040519081526020015b60405180910390f35b34801561017d575f80fd5b5060408051808201909152601081526f536f756e64206f662046726565646f6d60801b60208201525b60405161016991906115f7565b3480156101be575f80fd5b506101d26101cd366004611659565b610489565b6040519015158152602001610169565b3480156101ed575f80fd5b5060015461015f565b348015610201575f80fd5b50610215610210366004611683565b61049f565b005b348015610222575f80fd5b5061015f6105f7565b348015610236575f80fd5b506101d26102453660046116ac565b610620565b348015610255575f80fd5b506101d26102643660046116ea565b5f546001600160a01b0391821691161490565b348015610282575f80fd5b5060405160098152602001610169565b34801561029d575f80fd5b506101d26102ac3660046116ea565b60076020525f908152604090205460ff1681565b3480156102cb575f80fd5b506102156102da366004611705565b610688565b3480156102ea575f80fd5b5061015f6102f93660046116ea565b6001600160a01b03165f9081526005602052604090205490565b34801561031e575f80fd5b5061015f6106b6565b348015610332575f80fd5b5061015f6106c6565b348015610346575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b348015610376575f80fd5b506102156106d6565b34801561038a575f80fd5b5060408051808201909152600381526229a7a360e91b60208201526101a6565b3480156103b5575f80fd5b50600954610353906001600160a01b031681565b3480156103d4575f80fd5b506101d26103e3366004611659565b610714565b3480156103f3575f80fd5b5061021561040236600461171c565b610720565b348015610412575f80fd5b50610215610421366004611757565b610773565b348015610431575f80fd5b5061015f61044036600461179e565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b348015610475575f80fd5b506102156104843660046116ea565b61084e565b5f6104953384846108ca565b5060015b92915050565b5f546001600160a01b031633146104d15760405162461bcd60e51b81526004016104c8906117ca565b60405180910390fd5b5f612710846104df60015490565b6104e991906117fe565b6104f39190611815565b90505f6127108461050360015490565b61050d91906117fe565b6105179190611815565b90505f6127108461052760015490565b61053191906117fe565b61053b9190611815565b60028790556003869055600485905590505f61056d6103e8610567600561056160015490565b906109ed565b906109f8565b905080841015801561057f5750808310155b801561058b5750808210155b6105ee5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b60648201526084016104c8565b50505050505050565b5f60115460035461060760015490565b61061191906117fe565b61061b9190611815565b905090565b5f61062c848484610a03565b61067d843361067885604051806060016040528060288152602001611924602891396001600160a01b038a165f9081526006602090815260408083203384529091529020549190610b25565b6108ca565b5060015b9392505050565b5f546001600160a01b031633146106b15760405162461bcd60e51b81526004016104c8906117ca565b601555565b5f60115460045461060760015490565b5f60115460025461060760015490565b5f546001600160a01b031633146106ff5760405162461bcd60e51b81526004016104c8906117ca565b6009805460ff60a01b1916600160a01b179055565b5f610495338484610a03565b5f546001600160a01b031633146107495760405162461bcd60e51b81526004016104c8906117ca565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461079c5760405162461bcd60e51b81526004016104c8906117ca565b600a879055600b869055600d859055600c849055600e839055600f82905560108190556011546107cd9060056109f8565b600e54111580156107ed57506011546107e79060056109f8565b600f5411155b6105ee5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b60648201526084016104c8565b5f546001600160a01b031633146108775760405162461bcd60e51b81526004016104c8906117ca565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b03831661092c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104c8565b6001600160a01b03821661098d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104c8565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61068182846117fe565b5f6106818284611815565b610a0e838383610b50565b610a188383610cfd565b610a23838383610d90565b610a2d8383610e7e565b610a38838383610ed3565b610a43838383611006565b6001600160a01b0383165f90815260056020526040902054610a65908261102a565b6001600160a01b0384165f90815260056020526040812091909155610a8a8484611035565b610a945781610a9f565b610a9f848484611079565b6001600160a01b0384165f90815260056020526040902054909150610ac49082611163565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b179085815260200190565b60405180910390a350505050565b5f8184841115610b485760405162461bcd60e51b81526004016104c891906115f7565b505050900390565b6001600160a01b038316610bb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104c8565b6001600160a01b038216610c165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104c8565b5f8111610c775760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104c8565b6001600160a01b0383165f90815260056020526040902054811115610cf85760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016104c8565b505050565b6001600160a01b0382165f9081526007602052604090205460ff16158015610d3d57506001600160a01b0381165f9081526007602052604090205460ff16155b15610d8c57600954600160a01b900460ff16610d8c5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b60448201526064016104c8565b5050565b6001600160a01b0383165f9081526007602052604090205460ff16158015610dd057506001600160a01b0382165f9081526007602052604090205460ff16155b8015610dea57506009546001600160a01b03838116911614155b8015610e0157506001600160a01b03821661dead14155b15610cf857610e0e6106b6565b6001600160a01b0383165f90815260056020526040902054610e309083611163565b1115610cf85760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016104c8565b6009546001600160a01b038281169116148015610eb357506001600160a01b0382165f9081526007602052604090205460ff16155b15610d8c57600160135f828254610eca9190611834565b90915550505050565b6009546001600160a01b03848116911614610f7757610ef06105f7565b81111580610f1557506001600160a01b0383165f9081526007602052604090205460ff165b80610f3757506001600160a01b0382165f9081526007602052604090205460ff165b610f775760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104c8565b610f7f6106c6565b81111580610fa457506001600160a01b0383165f9081526007602052604090205460ff165b80610fc657506001600160a01b0382165f9081526007602052604090205460ff165b610cf85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104c8565b61101183838361116e565b15610cf85761102160155461121e565b5f601355505050565b5f6106818284611847565b6001600160a01b0382165f9081526007602052604081205460ff161580156106815750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f80611085858561139c565b111561115c575f6110a7611099868661139c565b6011546105619086906109f8565b305f908152600560205260409020549091506110c39082611163565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111139085815260200190565b60405180910390a3600d541561114a5761114a3061dead611145600d54610561601154896109f890919063ffffffff16565b610a03565b611154838261102a565b915050610681565b5092915050565b5f6106818284611834565b601654601554305f9081526005602052604081205460145491938510159211159060ff161580156111a1575060125460ff165b80156111b65750600954600160a01b900460ff165b80156111bf5750815b80156111e357506001600160a01b0386165f9081526007602052604090205460ff16155b80156111fc57506009546001600160a01b038681169116145b801561120b5750600160135410155b80156112145750805b9695505050505050565b6014805460ff19166001908117909155600c54600b54600a545f9361125793600293610561939192611251928391611163565b90611163565b90505f61127382610567600a54866109ed90919063ffffffff16565b90505f611280848361102a565b90504761128c826113e6565b5f611297478361102a565b90505f6112b96112b2600a548861102a90919063ffffffff16565b83906109f8565b90505f6112d1600a54836109ed90919063ffffffff16565b905080156112e3576112e38682611536565b600b545f906112f7906105618560026109ed565b9050801561133f5760405173991dfadb8ea04ffbd402845fbc58dbd0f4f78d159082156108fc029083905f818181858888f1935050505015801561133d573d5f803e3d5ffd5b505b4780156113865760405173f9c4846d43d6f2498f4d1d1c1435698d696d4b2e9082156108fc029083905f818181858888f19350505050158015611384573d5f803e3d5ffd5b505b50506014805460ff191690555050505050505050565b6009545f906001600160a01b03908116908316036113bd5750600f54610499565b6009546001600160a01b03908116908416036113dc5750600e54610499565b5060105492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106114195761141961185a565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611470573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611494919061186e565b816001815181106114a7576114a761185a565b6001600160a01b0392831660209182029290920101526008546114cd91309116846108ca565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac947906115059085905f90869030904290600401611889565b5f604051808303815f87803b15801561151c575f80fd5b505af115801561152e573d5f803e3d5ffd5b505050505050565b60085461154e9030906001600160a01b0316846108ca565b60085460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015273075ee82ff71f506e62066af8df1ef5dd094d252460848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156115cb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115f091906118f8565b5050505050565b5f6020808352835180828501525f5b8181101561162257858101830151858201604001528201611606565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611656575f80fd5b50565b5f806040838503121561166a575f80fd5b823561167581611642565b946020939093013593505050565b5f805f60608486031215611695575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156116be575f80fd5b83356116c981611642565b925060208401356116d981611642565b929592945050506040919091013590565b5f602082840312156116fa575f80fd5b813561068181611642565b5f60208284031215611715575f80fd5b5035919050565b5f806040838503121561172d575f80fd5b823561173881611642565b91506020830135801515811461174c575f80fd5b809150509250929050565b5f805f805f805f60e0888a03121561176d575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f80604083850312156117af575f80fd5b82356117ba81611642565b9150602083013561174c81611642565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610499576104996117ea565b5f8261182f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610499576104996117ea565b81810381811115610499576104996117ea565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561187e575f80fd5b815161068181611642565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156118d75784516001600160a01b0316835293830193918301916001016118b2565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f6060848603121561190a575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122063aa1ea392a3fe5858fd517935ebf84cce068653fd543b9c50bf3ee79393892164736f6c63430008150033

Deployed Bytecode

0x60806040526004361061013f575f3560e01c806370a08231116100b3578063a8aa1b311161006d578063a8aa1b31146103aa578063a9059cbb146103c9578063d37e9177146103e8578063da2e3bad14610407578063dd62ed3e14610426578063f2fde38b1461046a575f80fd5b806370a08231146102df57806378109e54146103135780637d1db4a514610327578063893d20e81461033b5780638a8c523c1461036b57806395d89b411461037f575f80fd5b80631f976b7e116101045780631f976b7e1461021757806323b872dd1461022b5780632f54bf6e1461024a578063313ce567146102775780633f4218e0146102925780634acd8859146102c0575f80fd5b80630445b6671461014a57806306fdde0314610172578063095ea7b3146101b357806318160ddd146101e2578063189ae5f2146101f6575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015f60155481565b6040519081526020015b60405180910390f35b34801561017d575f80fd5b5060408051808201909152601081526f536f756e64206f662046726565646f6d60801b60208201525b60405161016991906115f7565b3480156101be575f80fd5b506101d26101cd366004611659565b610489565b6040519015158152602001610169565b3480156101ed575f80fd5b5060015461015f565b348015610201575f80fd5b50610215610210366004611683565b61049f565b005b348015610222575f80fd5b5061015f6105f7565b348015610236575f80fd5b506101d26102453660046116ac565b610620565b348015610255575f80fd5b506101d26102643660046116ea565b5f546001600160a01b0391821691161490565b348015610282575f80fd5b5060405160098152602001610169565b34801561029d575f80fd5b506101d26102ac3660046116ea565b60076020525f908152604090205460ff1681565b3480156102cb575f80fd5b506102156102da366004611705565b610688565b3480156102ea575f80fd5b5061015f6102f93660046116ea565b6001600160a01b03165f9081526005602052604090205490565b34801561031e575f80fd5b5061015f6106b6565b348015610332575f80fd5b5061015f6106c6565b348015610346575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b348015610376575f80fd5b506102156106d6565b34801561038a575f80fd5b5060408051808201909152600381526229a7a360e91b60208201526101a6565b3480156103b5575f80fd5b50600954610353906001600160a01b031681565b3480156103d4575f80fd5b506101d26103e3366004611659565b610714565b3480156103f3575f80fd5b5061021561040236600461171c565b610720565b348015610412575f80fd5b50610215610421366004611757565b610773565b348015610431575f80fd5b5061015f61044036600461179e565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b348015610475575f80fd5b506102156104843660046116ea565b61084e565b5f6104953384846108ca565b5060015b92915050565b5f546001600160a01b031633146104d15760405162461bcd60e51b81526004016104c8906117ca565b60405180910390fd5b5f612710846104df60015490565b6104e991906117fe565b6104f39190611815565b90505f6127108461050360015490565b61050d91906117fe565b6105179190611815565b90505f6127108461052760015490565b61053191906117fe565b61053b9190611815565b60028790556003869055600485905590505f61056d6103e8610567600561056160015490565b906109ed565b906109f8565b905080841015801561057f5750808310155b801561058b5750808210155b6105ee5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b60648201526084016104c8565b50505050505050565b5f60115460035461060760015490565b61061191906117fe565b61061b9190611815565b905090565b5f61062c848484610a03565b61067d843361067885604051806060016040528060288152602001611924602891396001600160a01b038a165f9081526006602090815260408083203384529091529020549190610b25565b6108ca565b5060015b9392505050565b5f546001600160a01b031633146106b15760405162461bcd60e51b81526004016104c8906117ca565b601555565b5f60115460045461060760015490565b5f60115460025461060760015490565b5f546001600160a01b031633146106ff5760405162461bcd60e51b81526004016104c8906117ca565b6009805460ff60a01b1916600160a01b179055565b5f610495338484610a03565b5f546001600160a01b031633146107495760405162461bcd60e51b81526004016104c8906117ca565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461079c5760405162461bcd60e51b81526004016104c8906117ca565b600a879055600b869055600d859055600c849055600e839055600f82905560108190556011546107cd9060056109f8565b600e54111580156107ed57506011546107e79060056109f8565b600f5411155b6105ee5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b60648201526084016104c8565b5f546001600160a01b031633146108775760405162461bcd60e51b81526004016104c8906117ca565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b03831661092c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104c8565b6001600160a01b03821661098d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104c8565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61068182846117fe565b5f6106818284611815565b610a0e838383610b50565b610a188383610cfd565b610a23838383610d90565b610a2d8383610e7e565b610a38838383610ed3565b610a43838383611006565b6001600160a01b0383165f90815260056020526040902054610a65908261102a565b6001600160a01b0384165f90815260056020526040812091909155610a8a8484611035565b610a945781610a9f565b610a9f848484611079565b6001600160a01b0384165f90815260056020526040902054909150610ac49082611163565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b179085815260200190565b60405180910390a350505050565b5f8184841115610b485760405162461bcd60e51b81526004016104c891906115f7565b505050900390565b6001600160a01b038316610bb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104c8565b6001600160a01b038216610c165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104c8565b5f8111610c775760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104c8565b6001600160a01b0383165f90815260056020526040902054811115610cf85760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016104c8565b505050565b6001600160a01b0382165f9081526007602052604090205460ff16158015610d3d57506001600160a01b0381165f9081526007602052604090205460ff16155b15610d8c57600954600160a01b900460ff16610d8c5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b60448201526064016104c8565b5050565b6001600160a01b0383165f9081526007602052604090205460ff16158015610dd057506001600160a01b0382165f9081526007602052604090205460ff16155b8015610dea57506009546001600160a01b03838116911614155b8015610e0157506001600160a01b03821661dead14155b15610cf857610e0e6106b6565b6001600160a01b0383165f90815260056020526040902054610e309083611163565b1115610cf85760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016104c8565b6009546001600160a01b038281169116148015610eb357506001600160a01b0382165f9081526007602052604090205460ff16155b15610d8c57600160135f828254610eca9190611834565b90915550505050565b6009546001600160a01b03848116911614610f7757610ef06105f7565b81111580610f1557506001600160a01b0383165f9081526007602052604090205460ff165b80610f3757506001600160a01b0382165f9081526007602052604090205460ff165b610f775760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104c8565b610f7f6106c6565b81111580610fa457506001600160a01b0383165f9081526007602052604090205460ff165b80610fc657506001600160a01b0382165f9081526007602052604090205460ff165b610cf85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104c8565b61101183838361116e565b15610cf85761102160155461121e565b5f601355505050565b5f6106818284611847565b6001600160a01b0382165f9081526007602052604081205460ff161580156106815750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f80611085858561139c565b111561115c575f6110a7611099868661139c565b6011546105619086906109f8565b305f908152600560205260409020549091506110c39082611163565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111139085815260200190565b60405180910390a3600d541561114a5761114a3061dead611145600d54610561601154896109f890919063ffffffff16565b610a03565b611154838261102a565b915050610681565b5092915050565b5f6106818284611834565b601654601554305f9081526005602052604081205460145491938510159211159060ff161580156111a1575060125460ff165b80156111b65750600954600160a01b900460ff165b80156111bf5750815b80156111e357506001600160a01b0386165f9081526007602052604090205460ff16155b80156111fc57506009546001600160a01b038681169116145b801561120b5750600160135410155b80156112145750805b9695505050505050565b6014805460ff19166001908117909155600c54600b54600a545f9361125793600293610561939192611251928391611163565b90611163565b90505f61127382610567600a54866109ed90919063ffffffff16565b90505f611280848361102a565b90504761128c826113e6565b5f611297478361102a565b90505f6112b96112b2600a548861102a90919063ffffffff16565b83906109f8565b90505f6112d1600a54836109ed90919063ffffffff16565b905080156112e3576112e38682611536565b600b545f906112f7906105618560026109ed565b9050801561133f5760405173991dfadb8ea04ffbd402845fbc58dbd0f4f78d159082156108fc029083905f818181858888f1935050505015801561133d573d5f803e3d5ffd5b505b4780156113865760405173f9c4846d43d6f2498f4d1d1c1435698d696d4b2e9082156108fc029083905f818181858888f19350505050158015611384573d5f803e3d5ffd5b505b50506014805460ff191690555050505050505050565b6009545f906001600160a01b03908116908316036113bd5750600f54610499565b6009546001600160a01b03908116908416036113dc5750600e54610499565b5060105492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106114195761141961185a565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611470573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611494919061186e565b816001815181106114a7576114a761185a565b6001600160a01b0392831660209182029290920101526008546114cd91309116846108ca565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac947906115059085905f90869030904290600401611889565b5f604051808303815f87803b15801561151c575f80fd5b505af115801561152e573d5f803e3d5ffd5b505050505050565b60085461154e9030906001600160a01b0316846108ca565b60085460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015273075ee82ff71f506e62066af8df1ef5dd094d252460848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156115cb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115f091906118f8565b5050505050565b5f6020808352835180828501525f5b8181101561162257858101830151858201604001528201611606565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611656575f80fd5b50565b5f806040838503121561166a575f80fd5b823561167581611642565b946020939093013593505050565b5f805f60608486031215611695575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156116be575f80fd5b83356116c981611642565b925060208401356116d981611642565b929592945050506040919091013590565b5f602082840312156116fa575f80fd5b813561068181611642565b5f60208284031215611715575f80fd5b5035919050565b5f806040838503121561172d575f80fd5b823561173881611642565b91506020830135801515811461174c575f80fd5b809150509250929050565b5f805f805f805f60e0888a03121561176d575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f80604083850312156117af575f80fd5b82356117ba81611642565b9150602083013561174c81611642565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610499576104996117ea565b5f8261182f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610499576104996117ea565b81810381811115610499576104996117ea565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561187e575f80fd5b815161068181611642565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156118d75784516001600160a01b0316835293830193918301916001016118b2565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f6060848603121561190a575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122063aa1ea392a3fe5858fd517935ebf84cce068653fd543b9c50bf3ee79393892164736f6c63430008150033

Deployed Bytecode Sourcemap

4623:11459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5737:62;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;5737:62:0;;;;;;;;6923:67;;;;;;;;;;-1:-1:-1;6983:5:0;;;;;;;;;;;;-1:-1:-1;;;6983:5:0;;;;6923:67;;;;;;;:::i;7942:133::-;;;;;;;;;;-1:-1:-1;7942:133:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;7942:133:0;1205:187:1;8081:84:0;;;;;;;;;;-1:-1:-1;8151:12:0;;8081:84;;10208:580;;;;;;;;;;-1:-1:-1;10208:580:0;;;;;:::i;:::-;;:::i;:::-;;8410:119;;;;;;;;;;;;;:::i;15425:309::-;;;;;;;;;;-1:-1:-1;15425:309:0;;;;;:::i;:::-;;:::i;3003:87::-;;;;;;;;;;-1:-1:-1;3003:87:0;;;;;:::i;:::-;3058:4;3083:5;-1:-1:-1;;;;;3072:16:0;;;3083:5;;3072:16;;3003:87;7073:67;;;;;;;;;;-1:-1:-1;7073:67:0;;4844:1;2573:36:1;;2561:2;2546:18;7073:67:0;2431:184:1;5190:44:0;;;;;;;;;;-1:-1:-1;5190:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14739:124;;;;;;;;;;-1:-1:-1;14739:124:0;;;;;:::i;:::-;;:::i;7304:103::-;;;;;;;;;;-1:-1:-1;7304:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;7387:18:0;7370:7;7387:18;;;:9;:18;;;;;;;7304:103;8171:114;;;;;;;;;;;;;:::i;8291:113::-;;;;;;;;;;;;;:::i;7220:78::-;;;;;;;;;;-1:-1:-1;7272:7:0;7290:5;-1:-1:-1;;;;;7290:5:0;7220:78;;;-1:-1:-1;;;;;2969:32:1;;;2951:51;;2939:2;2924:18;7220:78:0;2805:203:1;7146:68:0;;;;;;;;;;;;;:::i;6996:71::-;;;;;;;;;;-1:-1:-1;7058:7:0;;;;;;;;;;;;-1:-1:-1;;;7058:7:0;;;;6996:71;;5262:19;;;;;;;;;;-1:-1:-1;5262:19:0;;;;-1:-1:-1;;;;;5262:19:0;;;7413:139;;;;;;;;;;-1:-1:-1;7413:139:0;;;;;:::i;:::-;;:::i;7825:111::-;;;;;;;;;;-1:-1:-1;7825:111:0;;;;;:::i;:::-;;:::i;9678:522::-;;;;;;;;;;-1:-1:-1;9678:522:0;;;;;:::i;:::-;;:::i;7558:127::-;;;;;;;;;;-1:-1:-1;7558:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7656:18:0;;;7639:7;7656:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7558:127;3096:111;;;;;;;;;;-1:-1:-1;3096:111:0;;;;;:::i;:::-;;:::i;7942:133::-;8017:4;8024:37;8033:10;8045:7;8054:6;8024:8;:37::i;:::-;-1:-1:-1;8069:4:0;7942:133;;;;;:::o;10208:580::-;3058:4;3083:5;-1:-1:-1;;;;;3083:5:0;2970:10;3072:16;2954:38;;;;-1:-1:-1;;;2954:38:0;;;;;;;:::i;:::-;;;;;;;;;10304:13:::1;10345:5;10337:4;10321:13;8151:12:::0;;;8081:84;10321:13:::1;:20;;;;:::i;:::-;10320:30;;;;:::i;:::-;10304:46;;10361:19;10410:5;10400:6;10384:13;8151:12:::0;;;8081:84;10384:13:::1;:22;;;;:::i;:::-;10383:32;;;;:::i;:::-;10361:54;;10426:17;10474:5;10463:7;10447:13;8151:12:::0;;;8081:84;10447:13:::1;:23;;;;:::i;:::-;10446:33;;;;:::i;:::-;10490:19;:26:::0;;;10527:19:::1;:28:::0;;;10566:17:::1;:27:::0;;;10426:53;-1:-1:-1;;10620:30:0::1;10645:4;10620:20;10638:1;10620:13;8151:12:::0;;;8081:84;10620:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;10604:46;;10678:5;10669;:14;;:38;;;;;10702:5;10687:11;:20;;10669:38;:60;;;;;10724:5;10711:9;:18;;10669:60;10661:119;;;::::0;-1:-1:-1;;;10661:119:0;;5747:2:1;10661:119:0::1;::::0;::::1;5729:21:1::0;5786:2;5766:18;;;5759:30;5825:34;5805:18;;;5798:62;-1:-1:-1;;;5876:18:1;;;5869:44;5930:19;;10661:119:0::1;5545:410:1::0;10661:119:0::1;10293:495;;;;10208:580:::0;;;:::o;8410:119::-;8461:7;8516:11;;8494:19;;8478:13;8151:12;;;8081:84;8478:13;:35;;;;:::i;:::-;:49;;;;:::i;:::-;8471:56;;8410:119;:::o;15425:309::-;15523:4;15540:36;15550:6;15558:9;15569:6;15540:9;:36::i;:::-;15587:117;15596:6;15604:10;15616:87;15652:6;15616:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15616:19:0;;;;;;:11;:19;;;;;;;;15636:10;15616:31;;;;;;;;;:87;:35;:87::i;:::-;15587:8;:117::i;:::-;-1:-1:-1;15722:4:0;15425:309;;;;;;:::o;14739:124::-;3058:4;3083:5;-1:-1:-1;;;;;3083:5:0;2970:10;3072:16;2954:38;;;;-1:-1:-1;;;2954:38:0;;;;;;;:::i;:::-;14819:13:::1;:30:::0;14739:124::o;8171:114::-;8219:7;8272:11;;8252:17;;8236:13;8151:12;;;8081:84;8291:113;8336:7;8391:11;;8369:19;;8353:13;8151:12;;;8081:84;7146:68;3058:4;3083:5;-1:-1:-1;;;;;3083:5:0;2970:10;3072:16;2954:38;;;;-1:-1:-1;;;2954:38:0;;;;;;;:::i;:::-;7191:14:::1;:21:::0;;-1:-1:-1;;;;7191:21:0::1;-1:-1:-1::0;;;7191:21:0::1;::::0;;7146:68::o;7413:139::-;7491:4;7498:40;7508:10;7520:9;7531:6;7498:9;:40::i;7825:111::-;3058:4;3083:5;-1:-1:-1;;;;;3083:5:0;2970:10;3072:16;2954:38;;;;-1:-1:-1;;;2954:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7902:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;7902:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7825:111::o;9678:522::-;3058:4;3083:5;-1:-1:-1;;;;;3083:5:0;2970:10;3072:16;2954:38;;;;-1:-1:-1;;;2954:38:0;;;;;;;:::i;:::-;9849:12:::1;:25:::0;;;9885:12:::1;:25:::0;;;9921:7:::1;:15:::0;;;9947:14:::1;:29:::0;;;9987:8:::1;:17:::0;;;10015:7:::1;:15:::0;;;10041:11:::1;:20:::0;;;10092:11:::1;::::0;:18:::1;::::0;10108:1:::1;10092:15;:18::i;:::-;10080:8;;:30;;:63;;;;-1:-1:-1::0;10125:11:0::1;::::0;:18:::1;::::0;10141:1:::1;10125:15;:18::i;:::-;10114:7;;:29;;10080:63;10072:120;;;::::0;-1:-1:-1;;;10072:120:0;;6162:2:1;10072:120:0::1;::::0;::::1;6144:21:1::0;6201:2;6181:18;;;6174:30;6240:34;6220:18;;;6213:62;-1:-1:-1;;;6291:18:1;;;6284:42;6343:19;;10072:120:0::1;5960:408:1::0;3096:111:0;3058:4;3083:5;-1:-1:-1;;;;;3083:5:0;2970:10;3072:16;2954:38;;;;-1:-1:-1;;;2954:38:0;;;;;;;:::i;:::-;3162:5:::1;:11:::0;;-1:-1:-1;;;;;;3162:11:0::1;-1:-1:-1::0;;;;;3162:11:0;::::1;::::0;;::::1;::::0;;;3180:25:::1;::::0;2951:51:1;;;3180:25:0::1;::::0;2939:2:1;2924:18;3180:25:0::1;;;;;;;3096:111:::0;:::o;15742:335::-;-1:-1:-1;;;;;15835:19:0;;15827:68;;;;-1:-1:-1;;;15827:68:0;;6791:2:1;15827:68:0;;;6773:21:1;6830:2;6810:18;;;6803:30;6869:34;6849:18;;;6842:62;-1:-1:-1;;;6920:18:1;;;6913:34;6964:19;;15827:68:0;6589:400:1;15827:68:0;-1:-1:-1;;;;;15914:21:0;;15906:68;;;;-1:-1:-1;;;15906:68:0;;7196:2:1;15906:68:0;;;7178:21:1;7235:2;7215:18;;;7208:30;7274:34;7254:18;;;7247:62;-1:-1:-1;;;7325:18:1;;;7318:32;7367:19;;15906:68:0;6994:398:1;15906:68:0;-1:-1:-1;;;;;15985:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16037:32;;160:25:1;;;16037:32:0;;133:18:1;16037:32:0;;;;;;;15742:335;;;:::o;277:82::-;335:7;352:5;356:1;352;:5;:::i;365:82::-;423:7;440:5;444:1;440;:5;:::i;8984:686::-;9073:37;9084:6;9092:9;9103:6;9073:10;:37::i;:::-;9121:38;9141:6;9149:9;9121:19;:38::i;:::-;9170:41;9185:6;9193:9;9204:6;9170:14;:41::i;:::-;9223:35;9240:6;9248:9;9223:16;:35::i;:::-;9269:39;9282:6;9290:9;9301:6;9269:12;:39::i;:::-;9320:35;9329:6;9337:9;9348:6;9320:8;:35::i;:::-;-1:-1:-1;;;;;9386:17:0;;;;;;:9;:17;;;;;;:29;;9408:6;9386:21;:29::i;:::-;-1:-1:-1;;;;;9366:17:0;;;;;;:9;:17;;;;;:49;;;;9451:32;9376:6;9473:9;9451:13;:32::i;:::-;:78;;9523:6;9451:78;;;9486:34;9494:6;9502:9;9513:6;9486:7;:34::i;:::-;-1:-1:-1;;;;;9563:20:0;;;;;;:9;:20;;;;;;9426:103;;-1:-1:-1;9563:40:0;;9426:103;9563:24;:40::i;:::-;-1:-1:-1;;;;;9540:20:0;;;;;;;:9;:20;;;;;;;:63;;;;9619:43;;;;;;;;;;9647:14;160:25:1;;148:2;133:18;;14:177;9619:43:0;;;;;;;;9062:608;8984:686;;;:::o;1402:162::-;1488:7;1534:12;1526:6;;;;1518:29;;;;-1:-1:-1;;;1518:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1556:5:0;;;1402:162::o;8537:439::-;-1:-1:-1;;;;;8641:20:0;;8633:70;;;;-1:-1:-1;;;8633:70:0;;7599:2:1;8633:70:0;;;7581:21:1;7638:2;7618:18;;;7611:30;7677:34;7657:18;;;7650:62;-1:-1:-1;;;7728:18:1;;;7721:35;7773:19;;8633:70:0;7397:401:1;8633:70:0;-1:-1:-1;;;;;8722:23:0;;8714:71;;;;-1:-1:-1;;;8714:71:0;;8005:2:1;8714:71:0;;;7987:21:1;8044:2;8024:18;;;8017:30;8083:34;8063:18;;;8056:62;-1:-1:-1;;;8134:18:1;;;8127:33;8177:19;;8714:71:0;7803:399:1;8714:71:0;8821:1;8804:6;:19;8796:73;;;;-1:-1:-1;;;8796:73:0;;8409:2:1;8796:73:0;;;8391:21:1;8448:2;8428:18;;;8421:30;8487:34;8467:18;;;8460:62;-1:-1:-1;;;8538:18:1;;;8531:39;8587:19;;8796:73:0;8207:405:1;8796:73:0;-1:-1:-1;;;;;7387:18:0;;7370:7;7387:18;;;:9;:18;;;;;;8888:6;:27;;8880:88;;;;-1:-1:-1;;;8880:88:0;;8819:2:1;8880:88:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:47;9005:19;;8880:88:0;8617:413:1;8880:88:0;8537:439;;;:::o;10796:191::-;-1:-1:-1;;;;;10889:19:0;;;;;;:11;:19;;;;;;;;10888:20;:47;;;;-1:-1:-1;;;;;;10913:22:0;;;;;;:11;:22;;;;;;;;10912:23;10888:47;10885:95;;;10945:14;;-1:-1:-1;;;10945:14:0;;;;10937:41;;;;-1:-1:-1;;;10937:41:0;;9237:2:1;10937:41:0;;;9219:21:1;9276:2;9256:18;;;9249:30;-1:-1:-1;;;9295:18:1;;;9288:44;9349:18;;10937:41:0;9035:338:1;10937:41:0;10796:191;;:::o;10999:333::-;-1:-1:-1;;;;;11103:19:0;;;;;;:11;:19;;;;;;;;11102:20;:47;;;;-1:-1:-1;;;;;;11127:22:0;;;;;;:11;:22;;;;;;;;11126:23;11102:47;:77;;;;-1:-1:-1;11174:4:0;;-1:-1:-1;;;;;11153:26:0;;;11174:4;;11153:26;;11102:77;:107;;;;-1:-1:-1;;;;;;11183:26:0;;5978:42;11183:26;;11102:107;11099:226;;;11271:17;:15;:17::i;:::-;-1:-1:-1;;;;;11234:20:0;;;;;;:9;:20;;;;;;:32;;11259:6;11234:24;:32::i;:::-;11233:55;;11225:98;;;;-1:-1:-1;;;11225:98:0;;9580:2:1;11225:98:0;;;9562:21:1;9619:2;9599:18;;;9592:30;9658:32;9638:18;;;9631:60;9708:18;;11225:98:0;9378:354:1;11340:159:0;11437:4;;-1:-1:-1;;;;;11424:17:0;;;11437:4;;11424:17;:41;;;;-1:-1:-1;;;;;;11446:19:0;;;;;;:11;:19;;;;;;;;11445:20;11424:41;11421:71;;;11488:1;11467:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;11340:159:0;;:::o;11507:349::-;11618:4;;-1:-1:-1;;;;;11608:14:0;;;11618:4;;11608:14;11605:130;;11642:20;:18;:20::i;:::-;11632:6;:30;;:53;;;-1:-1:-1;;;;;;11666:19:0;;;;;;:11;:19;;;;;;;;11632:53;:79;;;-1:-1:-1;;;;;;11689:22:0;;;;;;:11;:22;;;;;;;;11632:79;11624:109;;;;-1:-1:-1;;;11624:109:0;;10069:2:1;11624:109:0;;;10051:21:1;10108:2;10088:18;;;10081:30;-1:-1:-1;;;10127:18:1;;;10120:47;10184:18;;11624:109:0;9867:341:1;11624:109:0;11763:14;:12;:14::i;:::-;11753:6;:24;;:47;;;-1:-1:-1;;;;;;11781:19:0;;;;;;:11;:19;;;;;;;;11753:47;:73;;;-1:-1:-1;;;;;;11804:22:0;;;;;;:11;:22;;;;;;;;11753:73;11745:103;;;;-1:-1:-1;;;11745:103:0;;10069:2:1;11745:103:0;;;10051:21:1;10108:2;10088:18;;;10081:30;-1:-1:-1;;;10127:18:1;;;10120:47;10184:18;;11745:103:0;9867:341:1;14139:197:0;14231:41;14246:6;14254:9;14265:6;14231:14;:41::i;:::-;14228:101;;;14274:29;14289:13;;14274:14;:29::i;:::-;14325:1;14305:9;:22;14139:197;;;:::o;189:82::-;247:7;264:5;268:1;264;:5;:::i;14344:160::-;-1:-1:-1;;;;;14450:19:0;;14425:4;14450:19;;;:11;:19;;;;;;;;14449:20;:47;;;;-1:-1:-1;;;;;;;14474:22:0;;;;;:11;:22;;;;;;;;14473:23;;14344:160;-1:-1:-1;14344:160:0:o;14871:546::-;14957:7;15013:1;14980:30;14992:6;15000:9;14980:11;:30::i;:::-;:34;14977:418;;;15026:17;15046:59;15074:30;15086:6;15094:9;15074:11;:30::i;:::-;15057:11;;15046:23;;:6;;:10;:23::i;:59::-;15161:4;15143:24;;;;:9;:24;;;;;;15026:79;;-1:-1:-1;15143:39:0;;15026:79;15143:28;:39::i;:::-;15134:4;15116:24;;;;:9;:24;;;;;;;:66;;;;15198:42;;-1:-1:-1;;;;;15198:42:0;;;;;;;15230:9;160:25:1;;148:2;133:18;;14:177;15198:42:0;;;;;;;;15254:7;;:20;15251:104;;15276:77;15294:4;5978:42;15316:36;15344:7;;15316:23;15327:11;;15316:6;:10;;:23;;;;:::i;:36::-;15276:9;:77::i;:::-;15372:21;:6;15383:9;15372:10;:21::i;:::-;15365:28;;;;;14977:418;-1:-1:-1;15403:6:0;14871:546;-1:-1:-1;;14871:546:0:o;101:82::-;159:7;176:5;180:1;176;:5;:::i;13731:400::-;13872:15;;13948:13;;13938:4;13829;7387:18;;;:9;:18;;;;;;13980:8;;13829:4;;13862:25;;;;-1:-1:-1;13920:41:0;;13980:8;;13979:9;:24;;;;-1:-1:-1;13992:11:0;;;;13979:24;:42;;;;-1:-1:-1;14007:14:0;;-1:-1:-1;;;14007:14:0;;;;13979:42;:54;;;;;14025:8;13979:54;:78;;;;-1:-1:-1;;;;;;14038:19:0;;;;;;:11;:19;;;;;;;;14037:20;13979:78;:99;;;;-1:-1:-1;14074:4:0;;-1:-1:-1;;;;;14061:17:0;;;14074:4;;14061:17;13979:99;:126;;;;;14103:1;14082:9;;:23;;13979:126;:144;;;;;14109:14;13979:144;13972:151;13731:400;-1:-1:-1;;;;;;13731:400:0:o;11864:1066::-;5899:8;:15;;-1:-1:-1;;5899:15:0;5910:4;5899:15;;;;;;12001:14:::1;::::0;11983:12:::1;::::0;11959::::1;::::0;5899:8;;11958:66:::1;::::0;12022:1:::1;::::0;11959:57:::1;::::0;12001:14;;11959:37:::1;::::0;;;:16:::1;:19::i;:::-;:23:::0;::::1;:37::i;11958:66::-;11935:89;;12035:32;12070:42;12099:12;12070:24;12081:12;;12070:6;:10;;:24;;;;:::i;:42::-;12035:77:::0;-1:-1:-1;12123:14:0::1;12140:36;:6:::0;12035:77;12140:10:::1;:36::i;:::-;12123:53:::0;-1:-1:-1;12212:21:0::1;12244:24;12123:53:::0;12244:16:::1;:24::i;:::-;12279:20;12302:41;:21;12328:14:::0;12302:25:::1;:41::i;:::-;12279:64;;12354:19;12375:48;12392:30;12409:12;;12392;:16;;:30;;;;:::i;:::-;12375:12:::0;;:16:::1;:48::i;:::-;12354:69;;12434:29;12466;12482:12;;12466:11;:15;;:29;;;;:::i;:::-;12434:61:::0;-1:-1:-1;12509:34:0;;12506:103:::1;;12545:61;12558:24;12584:21;12545:12;:61::i;:::-;12665:12;::::0;12619:20:::1;::::0;12642:36:::1;::::0;:18:::1;:11:::0;12658:1:::1;12642:15;:18::i;:36::-;12619:59:::0;-1:-1:-1;12692:16:0;;12689:73:::1;;12710:50;::::0;6173:42:::1;::::0;12710:50;::::1;;;::::0;12747:12;;12710:50:::1;::::0;;;12747:12;6173:42;12710:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;12689:73;12799:21;12834:29:::0;;12831:92:::1;;12865:56;::::0;6076:42:::1;::::0;12865:56;::::1;;;::::0;12904:16;;12865:56:::1;::::0;;;12904:16;6076:42;12865:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;12831:92;-1:-1:-1::0;;5919:8:0;:16;;-1:-1:-1;;5919:16:0;;;-1:-1:-1;;;;;;;;11864:1066:0:o;14512:219::-;14627:4;;14591:7;;-1:-1:-1;;;;;14627:4:0;;;14614:17;;;;14611:38;;-1:-1:-1;14640:7:0;;14633:14;;14611:38;14672:4;;-1:-1:-1;;;;;14672:4:0;;;14662:14;;;;14659:36;;-1:-1:-1;14685:8:0;;14678:15;;14659:36;-1:-1:-1;14712:11:0;;14512:219;;;;:::o;13289:434::-;13379:16;;;13393:1;13379:16;;;;;;;;13355:21;;13379:16;;;;;;;;;;-1:-1:-1;13379:16:0;13355:40;;13424:4;13406;13411:1;13406:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13406:23:0;;;:7;;;;;;;;;;:23;;;;13450:6;;:13;;;-1:-1:-1;;;13450:13:0;;;;:6;;;;;:11;;:13;;;;;13406:7;;13450:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13440:4;13445:1;13440:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13440:23:0;;;:7;;;;;;;;;:23;13506:6;;13474:53;;13491:4;;13506:6;13515:11;13474:8;:53::i;:::-;13538:6;;:177;;-1:-1:-1;;;13538:177:0;;-1:-1:-1;;;;;13538:6:0;;;;:57;;:177;;13610:11;;13538:6;;13652:4;;13679;;13699:15;;13538:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13344:379;13289:434;:::o;12938:343::-;13051:6;;13019:53;;13036:4;;-1:-1:-1;;;;;13051:6:0;13060:11;13019:8;:53::i;:::-;13083:6;;:190;;-1:-1:-1;;;13083:190:0;;13146:4;13083:190;;;12192:34:1;12242:18;;;12235:34;;;13083:6:0;12285:18:1;;;12278:34;;;12328:18;;;12321:34;6269:42:0;12371:19:1;;;12364:44;13257:15:0;12424:19:1;;;12417:35;-1:-1:-1;;;;;13083:6:0;;;;:22;;13113:9;;12126:19:1;;13083:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12938:343;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:316::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;-1:-1:-1;;1582:23:1;;;1652:2;1637:18;;1624:32;;-1:-1:-1;1703:2:1;1688:18;;;1675:32;;1397:316;-1:-1:-1;1397:316:1:o;1718:456::-;1795:6;1803;1811;1864:2;1852:9;1843:7;1839:23;1835:32;1832:52;;;1880:1;1877;1870:12;1832:52;1919:9;1906:23;1938:31;1963:5;1938:31;:::i;:::-;1988:5;-1:-1:-1;2045:2:1;2030:18;;2017:32;2058:33;2017:32;2058:33;:::i;:::-;1718:456;;2110:7;;-1:-1:-1;;;2164:2:1;2149:18;;;;2136:32;;1718:456::o;2179:247::-;2238:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:52;;;2307:1;2304;2297:12;2259:52;2346:9;2333:23;2365:31;2390:5;2365:31;:::i;2620:180::-;2679:6;2732:2;2720:9;2711:7;2707:23;2703:32;2700:52;;;2748:1;2745;2738:12;2700:52;-1:-1:-1;2771:23:1;;2620:180;-1:-1:-1;2620:180:1:o;3013:416::-;3078:6;3086;3139:2;3127:9;3118:7;3114:23;3110:32;3107:52;;;3155:1;3152;3145:12;3107:52;3194:9;3181:23;3213:31;3238:5;3213:31;:::i;:::-;3263:5;-1:-1:-1;3320:2:1;3305:18;;3292:32;3362:15;;3355:23;3343:36;;3333:64;;3393:1;3390;3383:12;3333:64;3416:7;3406:17;;;3013:416;;;;;:::o;3434:592::-;3547:6;3555;3563;3571;3579;3587;3595;3648:3;3636:9;3627:7;3623:23;3619:33;3616:53;;;3665:1;3662;3655:12;3616:53;-1:-1:-1;;3688:23:1;;;3758:2;3743:18;;3730:32;;-1:-1:-1;3809:2:1;3794:18;;3781:32;;3860:2;3845:18;;3832:32;;-1:-1:-1;3911:3:1;3896:19;;3883:33;;-1:-1:-1;3963:3:1;3948:19;;3935:33;;-1:-1:-1;4015:3:1;4000:19;3987:33;;-1:-1:-1;3434:592:1;-1:-1:-1;3434:592:1:o;4031:388::-;4099:6;4107;4160:2;4148:9;4139:7;4135:23;4131:32;4128:52;;;4176:1;4173;4166:12;4128:52;4215:9;4202:23;4234:31;4259:5;4234:31;:::i;:::-;4284:5;-1:-1:-1;4341:2:1;4326:18;;4313:32;4354:33;4313:32;4354:33;:::i;4684:329::-;4886:2;4868:21;;;4925:1;4905:18;;;4898:29;-1:-1:-1;;;4958:2:1;4943:18;;4936:36;5004:2;4989:18;;4684:329::o;5018:127::-;5079:10;5074:3;5070:20;5067:1;5060:31;5110:4;5107:1;5100:15;5134:4;5131:1;5124:15;5150:168;5223:9;;;5254;;5271:15;;;5265:22;;5251:37;5241:71;;5292:18;;:::i;5323:217::-;5363:1;5389;5379:132;;5433:10;5428:3;5424:20;5421:1;5414:31;5468:4;5465:1;5458:15;5496:4;5493:1;5486:15;5379:132;-1:-1:-1;5525:9:1;;5323:217::o;9737:125::-;9802:9;;;9823:10;;;9820:36;;;9836:18;;:::i;10213:128::-;10280:9;;;10301:11;;;10298:37;;;10315:18;;:::i;10478:127::-;10539:10;10534:3;10530:20;10527:1;10520:31;10570:4;10567:1;10560:15;10594:4;10591:1;10584:15;10610:251;10680:6;10733:2;10721:9;10712:7;10708:23;10704:32;10701:52;;;10749:1;10746;10739:12;10701:52;10781:9;10775:16;10800:31;10825:5;10800:31;:::i;10866:980::-;11128:4;11176:3;11165:9;11161:19;11207:6;11196:9;11189:25;11233:2;11271:6;11266:2;11255:9;11251:18;11244:34;11314:3;11309:2;11298:9;11294:18;11287:31;11338:6;11373;11367:13;11404:6;11396;11389:22;11442:3;11431:9;11427:19;11420:26;;11481:2;11473:6;11469:15;11455:29;;11502:1;11512:195;11526:6;11523:1;11520:13;11512:195;;;11591:13;;-1:-1:-1;;;;;11587:39:1;11575:52;;11682:15;;;;11647:12;;;;11623:1;11541:9;11512:195;;;-1:-1:-1;;;;;;;11763:32:1;;;;11758:2;11743:18;;11736:60;-1:-1:-1;;;11827:3:1;11812:19;11805:35;11724:3;10866:980;-1:-1:-1;;;10866:980:1:o;12463:306::-;12551:6;12559;12567;12620:2;12608:9;12599:7;12595:23;12591:32;12588:52;;;12636:1;12633;12626:12;12588:52;12665:9;12659:16;12649:26;;12715:2;12704:9;12700:18;12694:25;12684:35;;12759:2;12748:9;12744:18;12738:25;12728:35;;12463:306;;;;;:::o

Swarm Source

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